Partage
  • Partager sur Facebook
  • Partager sur Twitter

Créé un moteur de jeux avancé

    18 avril 2018 à 5:44:42

    Bonjour Je suis due un gros projet de moteur de jeu et j'aurais deux, trois(mille) question, La première est que je voudrais être capable de créé tout un jeu avec seulement des script cs-script (pour les habitué du c#) et qu'un non programmeur n'est pas à télécharger un compilo Si vous pourrais m'éclairer

    • Partager sur Facebook
    • Partager sur Twitter
    Qui cour de l'avant est sur de vivre plus longtemps, car les mains ne peuvent atteindre ce que les yeux ne voient pas.
      18 avril 2018 à 7:54:18

      Bah tout les entités de ton jeu doivent être défini dans des cs-script que tu executes au runtime
      • Partager sur Facebook
      • Partager sur Twitter
        18 avril 2018 à 9:17:48

        Dans le doute, Unity ?
        • Partager sur Facebook
        • Partager sur Twitter

        Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

          18 avril 2018 à 9:57:16

          Oui, en effet, faire un jeu entièrement scriptable, tu essaies de refaire unity, ou gamemaker ? ou rpgmaker ?
          • Partager sur Facebook
          • Partager sur Twitter

          Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

            18 avril 2018 à 15:22:02

            Dans le même genre Et donc j'aurais un exécutable qui lance juste un script c# main. cs dans tous les jeux Et je change l'icône et le nom Si c'est sa

            • Partager sur Facebook
            • Partager sur Twitter
            Qui cour de l'avant est sur de vivre plus longtemps, car les mains ne peuvent atteindre ce que les yeux ne voient pas.
              18 avril 2018 à 16:17:02

              Tout dépend ensuite des possibilités de ce "moteur". Si c'est très restrictif, que ça ne permet que faire des jeux d'un certain moule (ou un MOD d'un autre jeu, c'est éventuellement faisable (si tu es très fort)).

              Si tu veux scripter ou faire un truc très générique, tu t'attaques à un truc d'une complexité pharanonique.

              Quel est ton niveau ?

              • Partager sur Facebook
              • Partager sur Twitter

              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                18 avril 2018 à 18:34:47

                Intermédiaire Et la j'ai un autre problème, Tous le monde se souvient de quand pour un jeu tous ce qu'il fallait, Une api 3D,la physique et le son. Aujourd'hui avec nvidia et AMD y'a des api pour tous Des cheveux au doigts de pied 😂 Et si jamais des nouvelles api arriver Comment les intégrer sous forme de plugin ? Et quelle classe de base utiliser. Aussi, est-ce que si j'utilise à la fois des plugin nvidia et amd Aurai-je des problèmes avec l'un des deux ?

                • Partager sur Facebook
                • Partager sur Twitter
                Qui cour de l'avant est sur de vivre plus longtemps, car les mains ne peuvent atteindre ce que les yeux ne voient pas.
                  18 avril 2018 à 21:16:09

                  En fait, quel genre de jeu cibles tu ? Car "des API pour tout", évidemment, selon le type de jeu, on va utiliser un truc ou un autre. 

                  Concrètement tu voudrais un programme scriptable pour faire quel type de jeu ? 2d ? 3d ? jeu de baston ? RPG ? un truc online ?

                  Un truc évolutif qui permettrait de faire le dernier zelda sur Switch et le dernier GTA, rien qu'avec quelques scripts ?

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                    19 avril 2018 à 5:34:12

                    Le moteur est en c++ Il sera 3D/2D/VR(directx,sfml)

                    Le c# script pour éviter un long binding

                    Il sera pour tout type de jeux

                    Pour info j'utilise un vieu cours de développer.com (très vieu) adapté par moi-même

                    -
                    Edité par DavidLakubu 19 avril 2018 à 5:37:58

                    • Partager sur Facebook
                    • Partager sur Twitter
                    Qui cour de l'avant est sur de vivre plus longtemps, car les mains ne peuvent atteindre ce que les yeux ne voient pas.
                      19 avril 2018 à 9:12:34

                      Tu veux donc créer un utilitaire qui sache faire n'importe quel type de jeu moderne en scriptant.

                      C'est beaucoup trop ambitieux pour un amateur (et même pour pas mal de boîte pro), il faut abandonner ça, vraiment.

                      Essaie de faire un jeu normalement déjà.

                      -
                      Edité par Fvirtman 19 avril 2018 à 9:13:45

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                        19 avril 2018 à 15:01:15

                        Et pour l'idée nvidia /AMD ?

                        • Partager sur Facebook
                        • Partager sur Twitter
                        Qui cour de l'avant est sur de vivre plus longtemps, car les mains ne peuvent atteindre ce que les yeux ne voient pas.
                          19 avril 2018 à 15:45:52

                          N'utilise pas DirectX, c'est obsolète, privateur et non portable. Tu réduiras considérablement ton audience.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          git is great because Linus did it, mercurial is better because he didn't.

                            19 avril 2018 à 15:49:31

                            DavidLakubu a écrit:

                            Le moteur est en c++ Il sera 3D/2D/VR(directx,sfml)

                            Ok, cette phrase m'a convaincu que tu n'avais aucune idée de ce dans quoi tu te lançais.

                            Essaie vraiment d'écouter les conseils qu'on te donne: fait un jeu à l'aide d'un moteur de jeu existant (Unity si tu aimes bien le C#, Unreal si tu aimes bien le C++), n'essaie pas de faire ton propre moteur de jeu avant.

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                              19 avril 2018 à 17:32:13

                              markand a écrit:

                              N'utilise pas DirectX, c'est obsolète, privateur et non portable. Tu réduiras considérablement ton audience.


                              Obsolète ? DirectX 12 n'est pas obsolète me semble-t-il. 

                              Après oui, ce n'est pas portable, mais "considérablement ton audience", la majorité des gens tournant sous Windows non, c'est pas "considérable"

                              Je peux comprendre l'argument de la portabilité, mais tu exagères en parlant d'obsolète, et de réduction considérable.

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                19 avril 2018 à 17:52:50

                                Salut,

                                Fvirtman a écrit:

                                Je peux comprendre l'argument de la portabilité, mais tu exagères en parlant d'obsolète, et de réduction considérable.

                                Hummm.... A voir...

                                On connait tous (si on n'en fait pas carrément dans le cas) "quelqu'un" qui préfère tourner sous *nix et qui ne garde windows que... pour pouvoir utiliser le jeu dont ils raffolent.

                                Et je crois d'ailleurs (même si je peux me tromper) que ces gens sont de plus en plus nombreux.

                                Certains diffuseurs (je pense entre autres à steam) en a d'ailleurs pris conscience.  Et je crois que l'idée de fournir des logiciels et des services payant sous linux commence tout doucement à faire son chemin.

                                Même microsoft semble avoir pris conscience de l'importance croissante de linux, vu qu'ils fournissent désormais (bien que je ne l'ai pas encore testé) un moyen de développer pour linux sous Visual Studio.

                                Si bien que l'un dans l'autre, on pourrait en arriver à considérer que le manque d'outils de qualité professionnelle représente sans doute la dernière grosse barrière à faire tomber.

                                Si lynix exagère peut-être un peu en utilisant le terme considérable, peut-être tombes tu dans l’excès inverse en minimisant justement trop l'importance de la portabilité ;)

                                • Partager sur Facebook
                                • Partager sur Twitter
                                Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                                  19 avril 2018 à 18:01:20

                                  "On connait tous quelqu'un qui préfère tourner sous *nix", car on est programmeurs. Les non programmeurs ne savent même pas ce qu'est Linux. 

                                  De plus, comme tu dis, le mec garde Windows pour faire tourner son jeu.

                                  Bien sûr qu'il y a de la demande sous Linux, même ma boîte propose des solution Linux, je ne dis pas le contraire, mais c'est moins de 5% des clients.

                                  On ne va pas lancer un débat interminable une fois de plus. 

                                  Je dis juste qu'il faut arrêter l'intégrisme et l'extrémisme. DirectX, ce n'est pas "du caca", et l'utiliser n'est ni être obsolète, ni "réduisant considérablement son audience", c'est de la mauvaise foi la.

                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                    19 avril 2018 à 19:18:38

                                    Attention, je ne dis pas que DirectX est "caca" (bien que je n'aime pas du tout l'idée de devoir travailler avec).

                                    Je dis juste que tu fais sans doute autant preuve de mauvaise foi en essayant de "limiter l'importance de la portabilité" que celle dont fait preuve en écrivant que "DirectX restreint considérablement la portabilité".

                                    Car, si tu ajoutes, aux "seulement 5% de gens qui utilisent linux" ceux qui se retrouvent à garder windows "parce qu'ils n'ont pas le choix", tu obtiens forcément une proportion différente.

                                    Après, je ne veux pas non plus me lancer dans un débat quant à savoir où l'on place le curseur pour décider que c'est "proportion négligeable" ou "proportion considérable". Je vais laisser chacun voir midi à sa porte sur le sujet (ce qui ne m'empêchera pas d'avoir ma propre idée, bien sur ;) )

                                    La seule chose que je voulais mettre en évidence, c'est que tant lynix et toi avez tendance à aborder -- pour une raison ou une autre, à tord ou à  raison -- un attitude extrémiste qui n'est jamais que le "reflet naturel" de l'autre, et qu'il suffirait sans doute que vous preniez la peine de discuter calmement de la position du curseur pour trouver un terrain d'entente.

                                    Koala01: farouche opposant à tout extrémisme, quelle qu'en soit la forme

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                                      19 avril 2018 à 20:24:21

                                      Donc 1 :terminer mon jeu sur unréal (j'en commencer un y pas longtemps) 2:penser a ajouter opengl 3:je fais quoi pour amd/nvidia, si jamais je crée des plugin physique ou autre(havok/physx, hairworks/trèss fx...)?

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Qui cour de l'avant est sur de vivre plus longtemps, car les mains ne peuvent atteindre ce que les yeux ne voient pas.
                                        19 avril 2018 à 20:34:13

                                        Essaies déjà d'arriver au bout du (1)...  Cela représente largement assez de problèmes à résoudre pour te tenir en haleine pendant plusieurs années ;)

                                        Après, ben, on verra...  Mais comme on ne peut même pas être sur que Vulcan (le successeur de OpenGL) n'aura pas lui-même vu arriver son successeur, pourquoi s'en inquiéter dés aujourd'hui ;)

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs  à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
                                          19 avril 2018 à 21:58:15

                                          koala01 a écrit:

                                          Si lynix exagère peut-être un peu en utilisant le terme considérable, peut-être tombes tu dans l’excès inverse en minimisant justement trop l'importance de la portabilité ;)


                                          Pour le coup c'était pas moi :D

                                          Sinon concrètement: laisse tomber OpenGL, laisse tomber DirectX.

                                          Utilise Vulkan, ça tourne beaucoup mieux qu'OpenGL, au moins aussi bien que DirectX 12 et ça tourne sur Windows, Linux, macOS, iOS, Android, Nintendo Switch et d'autres à venir, à la condition que le matos ne soit pas trop vieux, mais si tu commences un moteur de jeu tu n'as pas à t'inquiéter pour ça: tous les GPUs supporteront Vulkan quand ton moteur sera prêt à être sorti.

                                          Donc oublie complètement OpenGL/DirectX, et la SFML au passage (qui n'est pas du tout une base solide pour un moteur de jeu).

                                          (Et pour ceux qui sont en train d'écrire: Vulkan ne tourne pas sur macOS/iOS: MoltenVK a été absorbé par le groupe Khronos, c'est une implémentation très complète de Vulkan par-dessus Metal, l'API next-gen d'Apple).

                                          Mais mon plus grand conseil serait: n'essaie pas de faire un moteur de jeu.

                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                                            20 avril 2018 à 0:03:42

                                            Si tu veux faire un jeu, ne fais pas un moteur de jeu, fais un jeu.
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Si vous ne trouvez plus rien, cherchez autre chose.

                                              20 avril 2018 à 5:39:41

                                              Ce projet sera mon premier vrai défi en c++ et je veux pas l'abandonner de si tôt sinon tous les autre moteur n'auraient jamais exister

                                              Et puis aucun de mes ordi ne supporte unréal (le meilleur a rendu l'âme y a pas longtemps) trop puissant pour eux

                                              -
                                              Edité par DavidLakubu 20 avril 2018 à 6:29:48

                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Qui cour de l'avant est sur de vivre plus longtemps, car les mains ne peuvent atteindre ce que les yeux ne voient pas.
                                                20 avril 2018 à 6:35:37

                                                > Ce projet sera mon premier vrai défi en c++ et je veux pas l'abandonner de si tôt sinon tous les autre moteur n'auraient jamais exister

                                                Je suis prêt a parier qu'aucun autre moteur n’était le "premier défi en c++"

                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  20 avril 2018 à 9:13:13

                                                  > Même microsoft semble avoir pris conscience de l'importance croissante de linux, vu qu'ils fournissent désormais (bien que je ne l'ai pas encore testé) un moyen de développer pour linux sous Visual Studio.

                                                  Si tu parle de vscode, c'est très simple c'est parce qu'il s'agit juste d'un fork d'atom ;)

                                                  > Obsolète ? DirectX 12 n'est pas obsolète me semble-t-il.

                                                  DirectX c'est fait par microsoft, une entreprise privée seule à développer dessus, Vulkan et OpenGL sont fait par un consortium avec bien plus de gens / entreprises différentes qui travaillent dessus. Quand on développe une alternative à un groupe on est souvent en retard (syndrome NIH), exemple : pourquoi MSVC est il toujours à la ramasse en support de C++ moderne ? Parce qu'ils ont décidé de développer leur propre compilateur. Toutefois, il y a une nette progression de leur part car ils commencent à utiliser des outils communautaire comme clang, cmake, git dorénavant…

                                                  > Je dis juste que tu fais sans doute autant preuve de mauvaise foi en essayant de "limiter l'importance de la portabilité" que celle dont fait preuve en écrivant que "DirectX restreint considérablement la portabilité".

                                                  Mauvaise foi ? DirectX c'est Windows uniquement. Il n'y a pas que Linux comme alternative, il y a Android, iOS, macOS aussi. Éventuellement, même les consoles (autre que XBox bien entendu)

                                                  -
                                                  Edité par markand 20 avril 2018 à 9:21:01

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  git is great because Linus did it, mercurial is better because he didn't.

                                                    20 avril 2018 à 11:37:12

                                                    Le débat DX vs OpenGL/Vulkan est stérile à souhait.

                                                    Si DirectX était à la ramasse, aucun dév de jeu/moteur ne l'utiliserait et pourtant c'est l'API la plus utilisée au niveau pro.
                                                    Le portage OpenGL/Vulkan se fait après.
                                                    Pour les cibles autres que les PC à part sur Switch (et encore, je ne sais pas quels jeux sont développés avec Vulkan) on utilise les API spécifiques fournies par le SDK de la console.

                                                    Je ne suis pas défenseur de DX, juste l'avocat du diable.

                                                    Par contre, je persiste, si ton objectif est de faire un jeu, ne développe pas un moteur de jeu, mais développe ton jeu en utilisant un moteur existant.

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter

                                                    Si vous ne trouvez plus rien, cherchez autre chose.

                                                      20 avril 2018 à 12:16:26

                                                      dragonjoker a écrit:

                                                      Le débat DX vs OpenGL/Vulkan est stérile à souhait.

                                                      Si DirectX était à la ramasse, aucun dév de jeu/moteur ne l'utiliserait et pourtant c'est l'API la plus utilisée au niveau pro.
                                                      Le portage OpenGL/Vulkan se fait après.
                                                      Pour les cibles autres que les PC à part sur Switch (et encore, je ne sais pas quels jeux sont développés avec Vulkan) on utilise les API spécifiques fournies par le SDK de la console.

                                                      Je ne suis pas défenseur de DX, juste l'avocat du diable.

                                                      Là par contre je ne suis pas d'accord.

                                                      Je pense que DirectX 12 est une bonne API, mais elle est pompée de Mantle, la base de Vulkan, et je ne vois pas d'avantage à utiliser DX12 plutôt que Vulkan, surtout quand ce dernier tourne sur PC tout aussi bien, la seule exception que je puisse voir c'est la XBox (qui nécessite une façon spéciale d'utiliser DX plutôt que la façon PC, là où Vulkan est compatible partout si bien utilisé).

                                                      Sur Android et iOS, les API disponibles sont OpenGL ES et Vulkan/Metal, et le seul reproche qu'on puisse faire à Vulkan est de ne pas encore couvrir l'ensemble du marché (ce qui ne sera plus un problème d'ici quelques années).

                                                      Nintendo de son côté a décidé de supporter Vulkan pour la Switch, et raisonnablement les autres consoles. Reste effectivement donc la XBox et la Playstation (et encore, à priori il n'est pas impossible que la PS4 supporte Vulkan à venir), qui sont au final les exceptions plutôt que la généralité (je m'attaque ici au point "quand on quitte le PC on utilise une API spécifique", il ne faut pas oublier que Vulkan tourne sur mobile).

                                                      Du coup, DirectX 12 pour un amateur n'a pas d'intérêt à moins de vouloir développer pour XBox. En revanche, comme tu le dis bien, c'est l'API majoritairement utilisée sur Windows de façon pro, une tendance que je pense qui va s'affaiblir avec Vulkan, comme on peut voir certains gros jeux du style Star Citizen, passer à Vulkan plutôt que DX12 justement pour le portage.

                                                      Donc oui, si on veut bosser dans le milieu pro du monde du rendu, DX est incontournable, mais concrètement, un amateur s'en fiche royalement à moins de viser la XBox (et les amateurs ne visent généralement pas la XBox).

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter

                                                      Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                                                        20 avril 2018 à 12:29:25

                                                        Lynix a écrit:

                                                        c'est l'API majoritairement utilisée sur Windows de façon pro, une tendance que je pense qui va s'affaiblir avec Vulkan


                                                        C'est possible, et c'est vrai que ce serait pas mal qu'il y ait un truc vraiment unifié qui mette tout le monde d'accord dans l'avenir. 

                                                        Je demande a voir, car il y a 15 ans, je débattait avec des mecs qui me certifiaient que OpenGL allait bouffer DirectX dans les mois qui viennent...

                                                        StarCitizen et autre vont dans ce sens, tout comme Quake 3 Arena et OpenGL il y a 15 ans

                                                        -
                                                        Edité par Fvirtman 20 avril 2018 à 12:31:11

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                                                          20 avril 2018 à 13:29:11

                                                          Certes, mais la petite différence était à mon sens que DirectX était une API mieux foutue et mieux implémentée qu'OpenGL, les constructeurs poussaient même à l'utilisation de DirectX (cf un témoignage que j'avais lu à propos de NVidia notamment).

                                                          Le problème a été aussi qu'avec le temps, OpenGL s'est obsolètisé et que ça n'a jamais été vraiment réglé (malgré l'update 3 censé régler le problème).

                                                          Vulkan à côté de ça est une API moderne conçue et poussée par les constructeurs (et tellement plus facile à implémenter pour eux) et qui j'espère ne reproduiras pas les mêmes erreurs qu'OpenGL vis-à-vis de la compatibilité. *croise les doigts*

                                                          -
                                                          Edité par Lynix 20 avril 2018 à 18:26:15

                                                          • Partager sur Facebook
                                                          • Partager sur Twitter

                                                          Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                                                            21 avril 2018 à 6:51:34

                                                            Du coup côté 3D un renderer vulkan et un dx pour les plate-forme Microsoft Mais pour la 2D je fait comment

                                                            Je conte d'abord créer la partie 2D puis 3D enfin si j'y arrive VR

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Qui cour de l'avant est sur de vivre plus longtemps, car les mains ne peuvent atteindre ce que les yeux ne voient pas.
                                                              21 avril 2018 à 7:30:43

                                                              Fvirtman a écrit:

                                                              markand a écrit:

                                                              N'utilise pas DirectX, c'est obsolète, privateur et non portable. Tu réduiras considérablement ton audience.


                                                              Obsolète ? DirectX 12 n'est pas obsolète me semble-t-il. 

                                                              Après oui, ce n'est pas portable, mais "considérablement ton audience", la majorité des gens tournant sous Windows non, c'est pas "considérable"

                                                              Je peux comprendre l'argument de la portabilité, mais tu exagères en parlant d'obsolète, et de réduction considérable.


                                                              Le marché des jeux vidéo aujourd'hui, ce n'est plus Windows vs les autres Ordis. Ce serait plutôt une galaxie aux contours pas très bien définis, PC (Windows,*Nix,Mac...), consoles(PSx,XBox,Nitendo...), tablettes(Androïd,iPad...), smartphones(Androïd,iPhone,Windows Phone...)... Partir sur DirectX me parait quand même extrêmement réducteur ;)

                                                              Pour le reste, il y a un petit moment déjà, un habitué du forum, Awpsoleet qui bossait à l'époque sur TESO donnait quelques éléments sur la quantité de boulot à réaliser pour produire un jeu comme TESO. Si je me souviens bien, il parlait de 50 personnes sur une dizaine d'années pour produire le jeu. Si tu ramènes ça à une seule personne, ça te fait juste 500 ans de boulot, pas besoin d'être Cassandre pour savoir que tu vas te planter.

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter
                                                              Mettre à jour le MinGW Gcc sur Code::Blocks. Du code qui n'existe pas ne contient pas de bug

                                                              Créé un moteur de jeux avancé

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown