Partage
  • Partager sur Facebook
  • Partager sur Twitter

[WebGL + JS] Minecraft en Javascript

    3 août 2012 à 13:12:49

    Image utilisateur


    Hello, fidèle développeur que je suis, je me suis lancé dans un petit projet (enfin pas si petit) : faire un minecraft mais en WebGL.

    Présentation


    Pour ceux qui ne connaissent pas minecraft, c'est un jeu de construction en 3D comme des legos mais composé de cubes, où l'on peut explorer d’immenses maps et creuser de gigantesques mines : la page officielle

    Mon objectif et de porter minecraft sous navigateur internet. Pour cela, il faut un navigateur supportant a fond l'HTML5 (WebGL, websockets, mouseLock, fullScreen, etc...) donc google chrome ou firefox. Mais il faut aussi de solides connaissances en algorithmique, 3D, et bien sure programmation.

    Les différences


    Pour ma part, je trouve minecraft trop limité. Je cherche plutôt à atteindre un éditeur 3D à la blender mais avec des cubes que l'on puisse paramétrer avec des lignes de commande plutôt que d'utiliser de la redStone en masse (par exemple, quand un joueur touche un block, celui-ci se téléporte à la position x, y, z). Une fois la map crée, il ne reste plus qu'à jouer en multi dessus.

    • Pas de redStone, seulement des lignes de commandes facile a comprendre et permettant bien plus de possibilités
    • Proposer des textures différentes de minecraft
    • Proposer plus de mobs
    • Axer beaucoup moins le jeu sur le fait qu'il faut creuser


    Avancement


    Bon autant vous le dire, ce n'est pas du tout sur que le projet aboutisse car c'est quand même une quantité de travail importante, mais je ferai de mon mieux ;)

    Coté moteur 3D, j'ai conçu le mien nommé wage (Web Advanced Game Engine) bien plus optimisé que three.js, parce que pour afficher 1M de polygones et plus de 16 millions de cubes ben c'est pas de la tarte (surtout avec webGL et Javascript).

    • Affichage de la map et des cubes (256 * 256 * 256 = 16 777 216 cubes affichés sans lag): 100%
    • Déjà 24 types de cubes différents
    • Gestion des ombres : 100%
    • Génération automatique de la map : 50%


    Screens


    Image utilisateur

    Image utilisateur

    Image utilisateur

    Démo


    Autant vous le dire : le projet en est que au tout début donc ya pas grand chose à montrer :p . Bref pas besoin de me dire : c'est pourris on peut rien faire...

    Voici le lien
    • Partager sur Facebook
    • Partager sur Twitter
      3 août 2012 à 13:25:14

      L'idée est juste géante, mais tu te base que sur minecraft ?
      Il y a un minecraft like assez évoluer : http://minetest.net/ sur lequel tu peux aussi te baser ;)
      C'est une bonne idée la ligne de commande mais sa peux aussi rebuter les newbie et enlevée la partie réaliste de minecraft (peut-être la seul).
      Bonne chance
      • Partager sur Facebook
      • Partager sur Twitter
        3 août 2012 à 15:09:24

        Et bien, je trouve ton projet super intéressant, étant fan de Minecraft je ne peux que te souhaiter que ton projet aboutisse. Cependant je suis du même avis que Anciencombattant, tu devrais garder la redstone et améliorer le principe (faciliter les portes logiques pour que cela ne prenne pas beaucoup de place) ou faire comme le mod Tekkit (très très bon ensemble de mods) minecraft qui permets de crafter des pc et de coder avec diverses API en Lua dont une permets d'activer de la red.
        • Partager sur Facebook
        • Partager sur Twitter
          4 août 2012 à 20:17:51

          Citation

          L'idée est juste géante, mais tu te base que sur minecraft ?
          Il y a un minecraft like assez évoluer : http://minetest.net/ sur lequel tu peux aussi te baser


          Ouai, déjà vu et testé ;) mais de toute façon le gameplay reste le même

          Citation

          C'est une bonne idée la ligne de commande mais sa peux aussi rebuter les newbie et enlevée la partie réaliste de minecraft (peut-être la seul).


          Citation

          tu devrais garder la redstone et améliorer le principe (faciliter les portes logiques pour que cela ne prenne pas beaucoup de place)">


          Le problème c'est que ça prendra forcement bcp de place. Et puis comment faire pour tp un joueur aux coordonnées X,Y,Z avec de la redStone ? C'est impossible pour bcp de commandes. Il faut forcément renter du texte donc une simple ligne de commande suffit.

          Pour exemple :

          - le player sélectionne un cube (en le visant)
          - il appuie sur une touche qui ouvre une fenêtre de configuration
          - dans cette fenêtre il y aura plusieurs lignes remplissables par des lignes de commandes (ex : ontouch: /tp 10, 10, 10)

          L'avantage de cette technique c'est que ça permet de créer une infinité d'action. Le jeux peux donc servir de tetris géant, de RPG, de jeu de tir, etc...


          Sinon coté nouveautés, j'ai commencé la modélisation des mobs :

          Image utilisateur

          Autant vous dire que c'est pas de la tarte :-°
          • Partager sur Facebook
          • Partager sur Twitter
            6 août 2012 à 20:22:13

            deux question:

            1) comment conte tu faire pour diminuer le besoin de miner ? toute les ressources importantes se trouve sous terre (pour minecraft mais aussi sur terre)

            2) Une démo ?
            • Partager sur Facebook
            • Partager sur Twitter
              8 août 2012 à 20:31:29

              Citation

              1) comment conte tu faire pour diminuer le besoin de miner ? toute les ressources importantes se trouve sous terre (pour minecraft mais aussi sur terre)


              Et bien ça dépend du mode de jeu que le joueur souhaite mettre en place.
              Dans un premier temps, il pourra créer la carte de par lui même avec blocks infinis et ligne de commande. Ensuite, il pourra ouvrir le serveur au public et proposer différent type de jeu (survie, RPG, etc...). Bref les ressources ne seront pas la priorité.

              Citation

              2) Une démo ?


              Pas de démo car le projet n'est pas assez avancé et que pour l'instant il faut rentrer plein d'instructions pour faire pop la map, les personnages, etc...

              Coté avancement, l’animation des personnages prend un temps fou mais j'ai bientôt terminé (animer un squelette c'est l'enfer).
              • Partager sur Facebook
              • Partager sur Twitter
                8 août 2012 à 21:54:10

                Salut,

                Je ne comprends vraiment pas ce que tu comptes faire avec le système de redstone, mais personnellement rien que le fait de changer me laisse perplexe. Après cela dépendra des possibilités offertes bien sûr, il faudra essayer pour comprendre de toute façon.

                Sinon je me demande comment tu comptes faire pour les serveurs ? Faire une sorte de LAN comme dans la 1.3 ? Sachant que le but n'est pas que tout le monde rentre dans ton serveur !

                En tout cas je soutiens énormément ce projet, bonne chance à toi :)
                • Partager sur Facebook
                • Partager sur Twitter
                  8 août 2012 à 22:10:00

                  peux tu nous en montré plus sur ton jeux ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    9 août 2012 à 9:17:49

                    Citation : lifaon74

                    Le problème c'est que ça prendra forcement bcp de place. Et puis comment faire pour tp un joueur aux coordonnées X,Y,Z avec de la redStone ? C'est impossible pour bcp de commandes. Il faut forcément renter du texte donc une simple ligne de commande suffit.



                    Je ne disais pas que la Redstone pouvais tout faire, mais il est triste de la supprimer car elle est un des grands intérêts de Minecraft. Au contraire il est intéressant de l'améliorer.

                    Comme dans mon post précédent, je te conseille de tester Tekkit, c'est un mod qui permets de redécouvrir Minecraft et de rajouter un contenu monstre (amélioration du système de Redstone, Ordinateurs programmable en Lua, possibilité de produire de l'énergie et d'alimenter des machines, possibilité de transporter des objets ou fluides grâce à des tuyaux, etc...). Tu pourras piocher quelques idées pour détourner l'idée de miner obligatoirement.

                    Après cela c'est des propositions pour ton projet, c'est toi qui vois hein ? :p En tout cas, je demande à voir ce que tu proposes car je trouve ton idée très intéressante et j'espère que ton projet aboutira. D'ailleurs, si tu as besoins de quelques ressources en pixel art je peux t'en faire lol.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      9 août 2012 à 12:04:45

                      Citation

                      Je ne comprends vraiment pas ce que tu comptes faire avec le système de redstone, mais personnellement rien que le fait de changer me laisse perplexe. Après cela dépendra des possibilités offertes bien sûr, il faudra essayer pour comprendre de toute façon.


                      Bon expliquons un peu plus en détails :

                      1) Pourquoi virer la redStone :
                      • C'est très lent et ça bouffe énormément de processeur donc c'est mauvais pour le serveur et le client
                      • Ça prend une place monstrueuse pour faire des actions super basiques
                      • C'est très limité en possibilités

                      2) Ce qui restera : les boutons, levier, etc...

                      3) On remplace par une interface de programmation super simple :

                      Un outil spécial pourrais par exemple faire pop une fenêtre proposant à l'utilisateur différente actions à effectuer avec le block sélectionné. Ex : si le block est touché alors on le déplace de 3 blocks vers le haut.

                      Bon de toute façon, comme rien n'est encore fait, rien n'est encore définitif et tout peux encore changer, donc à voire.

                      Citation

                      Je ne disais pas que la Redstone pouvais tout faire, mais il est triste de la supprimer car elle est un des grands intérêts de Minecraft. Au contraire il est intéressant de l'améliorer.


                      Si les besoins s'en font réellement, je pourrais mettre en système de redStone mais ça reste à voire.

                      Citation

                      Sinon je me demande comment tu comptes faire pour les serveurs ? Faire une sorte de LAN comme dans la 1.3 ? Sachant que le but n'est pas que tout le monde rentre dans ton serveur !


                      Pour l'instant j'en sais encore rien :D

                      Citation

                      peux tu nous en montré plus sur ton jeux ?


                      Comme je l'ai dis, le projet en est au tout début et pour l'instant il n'y a pas grand chose à montrer. Je suis seul sur le projet, j'y passe 4 à 12h par jours dessus et en JS faut tout refaire de A à Z donc ça prend beaucoup de temps.

                      Coté nouvelles, j'ai terminé l'animation des personnages :


                      <object width="480" height="360" type="application/x-shockwave-flash" data="http://www.youtube.com/v/QS0IGsRI-is"><param name="movie" value="http://www.youtube.com/v/QS0IGsRI-is" /> <param name="allowFullScreen" value="true" /> <param name="wmode" value="transparent" /></object>


                      Sinon merci pour vos encouragements ;) et n'hésitez pas à proposer des nouveautés ou à critiquer le projet => il n'en sera que meilleur :p
                      • Partager sur Facebook
                      • Partager sur Twitter
                        9 août 2012 à 12:14:50

                        peut tu nous faire une petite liste de se que tu prévois de faire prochainement?

                        exemple:
                        1) intégré les mods
                        2) intégré la vie et les dégas
                        3) intégré le système de programme
                        ...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 août 2012 à 12:23:41

                          Arf avant ça il faut déjà que j'intègre :

                          - le déplacement des personnages
                          - la gravité
                          - les collisions
                          - la possibilité de placer/supprimer les blocks
                          - etc...

                          Bref ya du boulot :D
                          • Partager sur Facebook
                          • Partager sur Twitter
                            9 août 2012 à 12:27:27

                            J'avoue que l'on est assez impatient lol, mais ne te presse pas :p . Sympa l'animation, juste pas très naturelle. Après je peux pas juger car je n'ai pas fait d'animation 3D mais je pense que tu devrais essayer de faire des mouvements un peu exagéré, plus ample. en tout cas continu comme ça :) .
                            • Partager sur Facebook
                            • Partager sur Twitter
                              9 août 2012 à 14:45:17

                              Pour l'animation elle est bien, sauf les jambes: elles donnent l'impression de pendre dans le vide. Sinon bon courage pour la suite.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 août 2012 à 18:30:45

                                Hello, voici quelques nouvelles :

                                J'ai passé presque 1 semaine à trouver et calculer les équations de collision et de détection du cube visé (oui oui elles sont vachement balèzes). J'ai déjà réussit à implémenter celle de detection du cube visé, il ne reste plus que celles des collisions :p
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  17 août 2012 à 13:05:31

                                  super projet mais je suis quand même triste que tu supprime la redstone, ton interface qui la remplacera ne vaudra pas le plaisir d'avoir fait un bon circuit bien balèzes !
                                  Aussi les mobs que tu montre ressemblent vraiment a ceux du sphax pureBD Craft ! Je doute que ce soit toi qui les ai fait!
                                  Bonne chance !
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    17 août 2012 à 18:57:15

                                    .

                                    -
                                    Edité par apzoeiruty3 9 août 2016 à 19:42:27

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Qui s'y frotte s'y pique
                                      17 août 2012 à 21:18:59

                                      Citation

                                      Aussi les mobs que tu montre ressemblent vraiment a ceux du sphax pureBD Craft ! Je doute que ce soit toi qui les ai fait!


                                      Oui les textures ne sont pas de moi (je ne le cache pas). Le jeu est compatible avec les pack de textures minecraft et pour ne pas me bousiller les yeux j'utilise sphax pureBD Craft :p . Par contre tout le reste c'est moi qui fournit.

                                      Citation

                                      Salut ce projet m'interrese mais tu as mis quoi en equation de colision?


                                      Les équations en 3D sont bien plus complexes qu'en 2D et spécifiques à une situation ce qui permet de limiter le nombre de calculs déjà conséquent. Bref, te fournir le code ne servirais pas à grand chose car il ne marchera que la la situation de mon jeu et n'est pas adaptable à tout autre type. Mais si tu veux, tu pourras sans problème regarder les sources quand le jeu sera en ligne ;)

                                      Citation

                                      Est-ce dur en 3D


                                      Est bien oui en effet c'est très dur et pour 2 raisons :

                                      - la dimension n'est pas du tout la même se qui engendre des algorithmes ultra complexes
                                      - comme on ajoute un espace, le nombre de calculs explose et il faut sans cesse chercher des parades pour en limiter le nombre.

                                      Citation

                                      tu fais des jeux 3D avec quoi ?? En Canvas? Je suis relativement intereser car je fais pas du tout de 3D


                                      Les jeux 3D sous navigateur internet sont fait via webGL (99% comme openGL mais en javascript)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        18 août 2012 à 22:52:32

                                        What's new doctor ?

                                        Le système de collision et de gravité est 100% fonctionnel se qui a demandé pas mal de temps et de lignes de code :p . De ce fait, on peut se déplacer avec notre personnage à travers la map de façon réaliste (collision, gravité quand on tombe, saut, etc...).

                                        La prochaine étape sera surement l'interaction avec le serveur à savoir :

                                        - communiquer la position de tous les personnages et mobs en temps réel
                                        - indiquer au joueur qu'un bloc a été placé/supprimé à tel ou tel endroit (même chose pour la lumière)

                                        Bref va faloir une tonne de code et tout autant de théorie (parce que pondre un protocole digne de ce nom c'est hyper chaud :-° )

                                        En attendant, voici 2 nouveaux screens essayant de montrer l'effet de collision et gravité (mais bon c'est pas gagné) :

                                        Image utilisateur

                                        Image utilisateur
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          19 août 2012 à 0:31:59

                                          Pour le temps réel, tourne toi du coté des sockets avec node.js par exemple (très simple à réaliser). Pour la génération de la carte tourne toi vers le bruit de perlin, très connu.

                                          Sinon tu as appris le WebGl où ? C'est con que mon pc ne le supporte pas.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            19 août 2012 à 2:14:09

                                            Ouep, c'est clair que la partie réseau / temps réel, tu va t'amuser un moment.

                                            En tout cas, bon courage à toi pour ce projet !
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              19 août 2012 à 9:33:06

                                              Au niveau du cheat tu vas faire comment car si tu dis a ton serv tel joueur a mine tel truc à tel endroit n'importe qui peut modifier l'info, plutôt dire tel joueur a avance donc se trouve a cet endroit(calculer par serveur) et a appuyé sur la touche miner dans tel direction pendant un certain temps.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                19 août 2012 à 11:11:48

                                                Ben ça change quoi ? Ca n'apporte rien, même si un mec mine un truc n'importe où, ça lui apporterais quoi ? rien, et ça multiplierais les calculs du serveur.
                                                Sinon, beau projet, bravo =)
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Envoyé depuis ma chaise.
                                                  19 août 2012 à 12:32:58

                                                  Citation : kanak'ma

                                                  Ben ça change quoi ? Ca n'apporte rien, même si un mec mine un truc n'importe où, ça lui apporterais quoi ? rien, et ça multiplierais les calculs du serveur.
                                                  Sinon, beau projet, bravo =)


                                                  Un mec qui veux cheater peut programmer un cheat pour trouver tous les diamants(exemple) chunker à proximité et dire au serveur comme quoi il les a mine alors qu'il ne les a pas cherche ni mine lui même.
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    19 août 2012 à 16:25:57

                                                    Un calcul de proximité serait plus efficace dans ce cas, interdire de miner au dela d'une certaine distance et vérifier cette distance coté serveur.
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Envoyé depuis ma chaise.
                                                      19 août 2012 à 19:16:43

                                                      Citation

                                                      Pour le temps réel, tourne toi du coté des sockets avec node.js par exemple (très simple à réaliser). Pour la génération de la carte tourne toi vers le bruit de perlin, très connu.


                                                      1) node.js je connais, mais je n'aime pas trop, j'ai mis en place mon propre système de websockets.
                                                      2) La génération de la map est déjà fonctionnel, mais pour des raisons de programmation, je génère des cartes plates (ça m'évite de perdre 1000 ans en déplacements inutiles)

                                                      Citation

                                                      Sinon tu as appris le WebGl où ? C'est con que mon pc ne le supporte pas.


                                                      J'ai appris le webGl en... lisant la doc :p . J'ai aussi lu ce tuto mais j'ai surtout lu tous les tutos SDZ sur openGL (car c'est la même syntaxe) et sur la 3D (matrices, perspective,...) et puis après avoir programmé depuis un ptit bout de temps des minis projets en 3D, je me suis lancé :p Par contre ton PC doit être vraiment vieux pour ne pas supporter webGL non (car webGl est même supporté par les smartphones et tablettes) ?

                                                      Citation

                                                      Au niveau du cheat tu vas faire comment ?


                                                      Ah l'éternelle question du cheat :D je vais essayer de te répondre :

                                                      En fait il est impossible d’empêcher un utilisateur de lire ou modifier les informations du jeu sur sa machine (car js est très simple à modifier voire il peut carrément lire ou éditer sa mémoire...). Bref pas moyen de l’empêcher de savoir qu'un diamant se trouve à tel position.
                                                      1) Pour diminuer les effets, c'est là que j'ai proposé de ne pas accorder autant d'importance au minage (par exemple, les objets rares pourraient s'obtenir via de quêtes/objectifs). De plus, en limitant la nombre de blocs chargés en mémoire, on réduit son champs d'action.
                                                      2) Ensuite, il pourrait tricher en envoyant de fausses coordonnées au serveur ou se téléporterait. Même chose pour s'ajouter tel ou tel bloc, etc... Cette fois, il faudra que le serveur garde un log des activités du joueur et en cas de déplacement/action anormal (par exemple s'il se TP) on le kick temporairement du serveur. Bref on ne l’empêche pas de tricher mais s'il triche il se fait déco.
                                                      3) Un système de dénonciation pourrais être mis en place.

                                                      Après le cheat n'est pas vraiment important dans minecraft car il n'y a pas de compétition particulière entre joueur.

                                                      Par contre, il serait très mauvais que tout soit calculer par le serveur pour 2 raisons :
                                                      - le serveur serait surchargé.
                                                      - à cause du ping, ce ne serait pas fluide du tout.

                                                      Citation

                                                      Un calcul de proximité serait plus efficace dans ce cas, interdire de miner au dela d'une certaine distance et vérifier cette distance coté serveur.


                                                      C'est exactement ça (voire le 2)


                                                      Pour les quelques impatients, voici la démo dont sont extrait les screens (rien de bien folichon car c'est lion d'être fini) : minecraft webGL

                                                      PS : comme je possède un clavier suisse, les touches de déplacement sont WSAD, je tacherais d'ajouter les flèches directionnelles ce soir.
                                                      EDIT : c'est bon ! Effacer votre cache et normalement, un prompt vous propose de rentrer le type de clavier que vous possédez (mettez "fr" pour un clavier AZERTY)
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                      Anonyme
                                                        19 août 2012 à 22:21:33

                                                        Je ne sais pas, ma carte graphique ne le supporte tout simplement pas je crois. C'est un pc récent, mais c'est un mini netbook pas puissant et low cost.

                                                        Sinon merci de ne pas avoir compressé les sources pendant le développement, je vais pourvoir apprendre. En production il faudra toutefois les compresser pour des raisons de performance,s en plus d'ajouter de la difficulté au cheat.

                                                        Sinon merci pour les tuyaux ;)
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          20 août 2012 à 21:01:57

                                                          Citation

                                                          En production il faudra toutefois les compresser pour des raisons de performances en plus d'ajouter de la difficulté au cheat.


                                                          Hum ce n'est pas indispensable car de nos jours les connections internet sont très rapide et les scripts prennent à peine 1s à charger contre plusieurs Mo pour les textures et modèles ;)


                                                          Coté news, j'ai accélérer considérablement la génération de la map en php avec une moyenne de 66 064 cubes générés par seconde soit quand même 254s (plus de 4 min) pour générer une map de 256*256*256 cubes (16 777 216). Bref pour avoir un map assez importante (1024 * 1024 *256 = 268 435 456 cubes) il faut bien compter 1h de génération :( .

                                                          A mon avis, il sera difficile de faire mieux pour certaines raisons :

                                                          - la génération du bruit permettant de créer le paysage demande des calculs complexes et gourmands
                                                          - le calcul des lumières est aussi très imposant
                                                          - par contre l'enregistrement des données sur le disque dure est très rapide (un dixième du temps) et peu volumineux (car compressé)
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Anonyme
                                                            20 août 2012 à 21:48:50

                                                            le php est très très lent (langage interprété) si tu compilais en C++ qui écrivais ton fichier tu irais beaucoup plus vite.
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              20 août 2012 à 21:50:36

                                                              Salut,
                                                              Je rencontre un probleme avec la démo, j'ai le personnage tout a droite de mon écran et je ne peu pas bouger. J'ai testé sur PC et MAC et j'ai le même résultat.
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              [WebGL + JS] Minecraft en Javascript

                                                              × 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