Partage
  • Partager sur Facebook
  • Partager sur Twitter

Action RPG en 2D en C avec SDL et FMOD

Sujet résolu
    2 décembre 2009 à 19:56:18

    Bonjour à tous,

    Mise à jour du 22 juin 2010
    </span>

    Ce sujet présente l'avancée de plusieurs de mes projets de jeux vidéos que j'ai programmés en C avec la SDL et FMOD, en partant des tutoriels de ce site (un grand merci ! :D ).

    Vous pouvez les télécharger sur mon site : www.rpgamer.fr :magicien:

    Parmi ces jeux, vous trouverez :

    Roswyn & The Dragons
    </span>

    C'est mon premier jeu en C/SDL. Même s'il n'est pas exempt de défauts, c'est un Action-RPG sympa à la Zelda qui comporte pas moins de 500 levels et une histoire rigolote pour 8h de jeu environ.

    Au programme : une épée évolutive qui permet au fur et à mesure d'éclater des potiches, des rochers puis de lancer des boules de feu, un nombre de coeurs qui évolue, des potions, des clefs, des donjons et surtout... une sauvegarde (ouf ! :lol: ).

    Image utilisateur



    Wiwi's Adventures 1.2 et 2.0
    </span>

    Après Roswyn, je me suis attelé à un projet plus ambitieux : un jeu de plateformes bien plus compliqué reprenant divers gameplay inspirés de jeu comme Mario, Alex Kidd, Wonder Boy et Sonic. Wiwi Adventures 1.2 est déjà disponible en version finale (même si une version ultime est prévue ;) ) et Wiwi's Adventures 2.0 devrait sortir courant juillet 2010 (mais une bêta contenant la moitié du jeu est déjà dispo :lol: !)

    Image utilisateur


    @ bientôt !

    • Partager sur Facebook
    • Partager sur Twitter
      2 décembre 2009 à 19:58:21

      Je vais peut etre casser l'ambience mais tu te serais pas tromper d'endroit pour poster ? C'est pas a presentation de vos projets ? Sinon bravo :) !
      • Partager sur Facebook
      • Partager sur Twitter
        2 décembre 2009 à 20:13:57

        Tu utilises des tilesets RPG-maker, non ?
        C'est légal tu penses ?

        Sinon, j'ai pas encore testé, juste regardé le site, mais ça à l'air plutôt pas mal.
        • Partager sur Facebook
        • Partager sur Twitter
          2 décembre 2009 à 23:04:15

          Intéressant !

          Je n'ai pas téléchargé le jeu, mais j'ai visité un peu le site, c'est sympa !
          Alors quelques questions de curiosité :

          roibakura te parle de tilesets RPG-maker : je pense que tu n'auras pas de soucis avec la légalité pour ça, du moment que tu ne vends pas ton jeu. C'est ce que tu utilises ?

          Comment as tu créé ta carte (éditeur ? autre ?)
          Comment geres tu le scrolling ?
          Tu parles de collisions qui t'ont arraché des cheveux, quelle technique as tu employé pour ça ?
          • Partager sur Facebook
          • Partager sur Twitter

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

            2 décembre 2009 à 23:24:29

            Salut !

            Tout d'abord, merci pour votre intérêt à mon projet.
            J'ai posté ici parce que mon projet est programmé en C et que ça peut intéresser d'autres programmeurs en C (techniques, bouts de code, etc.).

            Les Tilesets sont inspirés de sources diverses variées mais aucun n'est copié, pour la simple et bonne raison que presque tous les tilesets rpgmaker et autres sont en 32x32 pixels (ou 16x16) et les miens en 35x35. J'ai donc tout dessiné pixel par pixel même si, par exemple, les extérieurs s'inspirent de jeux comme Final Fantasy ou les murs des donjons de Zelda... Mais ça prend une bonne journée pour faire un seul tileset de 54 tiles... :-°

            Sinon, on trouvera les sources du jeu sur la page téléchargement du site.

            Pour le scrolling : y'en a pas : on change de carte lorsque le joueur touche un bord de l'écran ou une "warp" (cf level editor et son tuto sur mon site).

            Pour les collisions :

            - avec les murs : je teste la valeur des tilesets dans la direction où avance le joueur et je bloque si ce sont des tilesets bloquantes (j'ai repris la technique à M@teo dans son tuto)

            - avec les ennemis : je teste les collisions avec chaque ennemi un par un (c'est pour ça que c'est fastidieux) et suivant la direction du joueur et si son épée est sortie ou non, on enlève des points de vie au joueur ou au monstre et on sépare les deux : en faisant reculer le monstre si le joueur attaque ou le joueur si le monstre attaque, ensuite on le fait reculer dans la bonne direction. Ca fait beaucoup de tests pour tous les cas imaginables, c'est pour ça que c'est compliqué.

            • Partager sur Facebook
            • Partager sur Twitter
              3 décembre 2009 à 10:51:41

              Intéressant.

              Par contre, taille des tiles de 35 ? C'est original ! Mais pourquoi pas, on a la puissance de calcul suffisante pour pouvoir se payer le luxe de se passer de la simplifications de multiplications en puissances de 2.

              Sinon, tu dis que la collision avec les ennemis est complexe, mais a priori, un simple calcul de bounding box permet de savoir si tu touches l'ennemi, et une seconde passe permet de savoir en tres peu de calcul si tu touches a gauche/droite/haut/bas (éventuellement a gauche et en haut a la fois)

              Je ne sais pas si tu connais le premier Zelda, mais c'était encore plus simple :
              Quand link tapait, un sprite représentant son épée apparaissait a coté de lui (dans la bonne direction), et le test de collision était juste epée/ennemi, sans soucis de direction :)
              • Partager sur Facebook
              • Partager sur Twitter

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

                3 décembre 2009 à 11:36:05


                T'as raison pour la taille des tilesets. En fait, j'ai commencé mon jeu en partant du mario Sokoban de M@teo que j'ai décidé de modifier parce que moi et les sokobans... o_O

                Et M@teo utilise un tileset de 35x35 pixels. Sauf que je me suis aperçu que ce n'était pas terrible trop tard... :-°

                J'ai commencé à programmer en C il y a deux mois, et c'est mon premier projet, donc forcément, il est pas encore terrible terrible et je me suis embourbé dans la gestion des collisions que j'ai sans doute un peu trop compliquée...

                Tu me parles du premier Zelda, et c'est vrai que je me suis rendu compte que l'épée était un sprite à part, il y a quelques semaines (je me demandais comment Link avait une épée aussi longue alors que celle de mon perso était limitée par la taille du tile o_O ). Mais ma gestion des collisions était déjà faite...

                Je l'améliorerai, mais ce sera maintenant pour mon prochain projet. Ca me permettra de tout remettre à plat et d'améliorer le code ! :magicien:
                • Partager sur Facebook
                • Partager sur Twitter
                  3 décembre 2009 à 11:45:51

                  En tout cas, félicitations ! :)
                  J'aime bien parler des "techniques" utilisées. D'ailleurs, les vieux jeux montrent souvent les plus anciennes techniques relativement clairement.

                  Je me demande d'ailleurs si Zelda3 - a link to the past, c'est pas foutu pareil :
                  En effet, a un moment, Link n'a plus d'épée, et il peut quand meme faire le geste.
                  Cela veut dire que le sprite sans épée (mais avec le mouvement) existe.

                  A ce moment la, il faut superposer l'épée au bon endroit, qui s'anime a la meme vitesse pour qu'on aie l'impression que Link aie l'épée dans la main.
                  Du coup, si c'est le cas, la collision est du meme genre que Zelda 1!

                  Si tu connais aussi Secret of mana, je pense que c'est pareil : il existe plusieurs armes : fouet, epée, hache, javelot..
                  Quand tu changes d'armes, le mec fait le meme mouvement. On peut donc penser que le sprite du perso est indépendant, et que quand il utilise une arme, on blit l'arme la ou il faut et qu'on l'anime comme il faut pour donner illusion que le perso tient l'arme.

                  Tout cela est le boulot du graphiste je pense, qui doit fournir X frames d'animation pour le perso, le meme X pour l'animation de chaque arme, ainsi que les coordonnées d'ancrage de l'arme relativement a celle du mec de façon a ce que l'arme se mette bien ou il faut :)

                  D'ailleurs, pour l'anecdote, dans Secret of mana, tu peux utiliser le fouet pour franchir des trous, un peu comme un grappin. On voit alors un "bug" ou le mec commence a sauter, et le fouet qui reste en place quelques diziemes de secondes... Cela étaye la probabilité de la chose :)
                  • Partager sur Facebook
                  • Partager sur Twitter

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

                    3 décembre 2009 à 11:48:57

                    j'ai tester ton jeux , il est prometteur .
                    par contre j'ai remarquer quelque défauts:
                    Les collisions des monstre , parfois même a 5m des monstre ils arrives a retirer de la vie.
                    ou encore (c'est plus un reproche que un défaut) c'est le boss (le dragon) c'est mouvement ne colle vraiment pas a tout le reste de ton jeux , qui est très cohérent ,alors le dragon qui glisse de gauche a droite sa tue cet cohérence ^^.

                    si non bonne continuation ,tu ma donnée envie d'entamer un RPG tien, mais bon mes dons en pixels art ne me le permette pas ^^.

                    ps: j'aime beaucoup se système de map qui change par chemin , ça me rappel le bon vieux temps.

                    aussi un mode plein écran ne serai pas de refus , car coller ma tête a mon écran pour jouer c'est pas spécialement pratique .
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 décembre 2009 à 12:30:04


                      Merci pour tous vos conseils ! :ange:

                      C'est vrai que ça semble plus simple de coller un sprite pour l'arme sur le sprite du perso. Je crois que je ferai comme ça la prochaine fois. En plus c'est plus clair pour la gestion de le vie : si la collision est avec l'arme, le monstre est touché, si c'est avec le joueur, il perd un coeur. Du coup, plus de question à se poser, du genre : et si le joueur attaque mais que le monstre arrive par derrière ?

                      Sinon Kami-sama, bonne nouvelle, si tu appuies sur F1 dans mon jeu tu passes en plein écran (plus confortable) et si tu réappuies, tu reviens en mode fenêtre. :magicien:

                      Autrement pour la gestion des collisions, je sais qu'il y a parfois quelques problèmes, car tous les monstres n'ont pas les mêmes dimensions et parfois à quelques pixels près de réglage, on a l'impression d'être loin du monstre alors qu'il nous touche :waw:


                      Pour le dragon, je dois encore bosser l'anim du boss suivant le numéro du boss, mais c'est pas encore fait. Je dois aussi programmer l'objet qu'il laisse derrière lui (réceptacle de coeur, épée 2 ou 3, bâton de feu).
                      • Partager sur Facebook
                      • Partager sur Twitter
                        3 décembre 2009 à 13:56:34

                        Citation : Jay81

                        Autrement pour la gestion des collisions, je sais qu'il y a parfois quelques problèmes, car tous les monstres n'ont pas les mêmes dimensions et parfois à quelques pixels près de réglage, on a l'impression d'être loin du monstre alors qu'il nous touche :waw:



                        Hum ! Mais comment geres tu les collisions ?
                        Car avec une méthode "classique" de bounding boxes (utilisées dans les RPG en général) la dimension n'importe pas :)
                        Tu peux tester la collision entre 2 rectangles (les SDL_Rect de chacun des elements a tester) de forme quelconque ! Un grand un petit si tu veux :)
                        • Partager sur Facebook
                        • Partager sur Twitter

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

                          3 décembre 2009 à 14:04:34


                          Ma technique de gestion des collisions y revient un peu mais est moins canonique, je pense. Je l'ai faite empiriquement, car j'ai jamais eu de cours là-dessus...

                          Le problème c'est que si je teste une collision entre deux tiles de 34x34 pixels (un sprite), il va y avoir collision alors que les sprites ne se toucheront pas forcément car ils sont plus petits et n'occupent pas toute la place du tile. Par exemple : le champignon est très peu haut : 1/3 du tile en hauteur n'est pas occupé. J'ai donc essayé de résoudre ce problème en tâtonnant et en changeant les valeurs pour chaque monstre, mais c'est loin d'être parfait.

                          Si tu as un tuto sur la gestion des collisions, ça pourrait sans doute m'aider pour mon prochain jeu. :p
                          • Partager sur Facebook
                          • Partager sur Twitter
                            3 décembre 2009 à 14:24:41

                            héhé ! tu parles des tiles, genre arbres, ou tu peux passer derriere ?

                            Alors tu vas dire que j'ai réponse a tout, mais je te propose un test :
                            Télécharge ZSNES et Secret of mana.
                            Tres vite, tu te retrouves dans une foret, et tu peux passer derriere les arbres...
                            Je te propose d'appuyer sur les touches F1,F2 (ou 1, 2 ... au dessus de AZERTY je ne sais plus) pour désactiver les layers...

                            Et la, magie, tu vas voir l'astuce...

                            Pour les collisions bounding box, cadeau :

                            int Collide(SDL_Rect* m,SDL_Rect* n)
                            {
                            	if((m->x >= n->x + n->w) 
                            	|| (m->x + m->w <= n->x) 
                            	|| (m->y >= n->y + n->h) 
                            	|| (m->y + m->h <= n->y) 
                            	) 
                            	return 0; 
                               return 1; 
                            }
                            


                            Rapide et fiable, te renvoie 1 si ça touche, 0 sinon, peut importe la taille de chaque rectangle.
                            • Partager sur Facebook
                            • Partager sur Twitter

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

                              3 décembre 2009 à 15:30:06


                              Merci pour ton cadeau, c'est excellent !
                              Si court, c'est génial ! Je m'en garde une copie pour mon prochain jeu. :ange:

                              Sinon, oui pour les arbres derrière lesquels on passe, ils doivent être sur une autre couche au-dessus du joueur. On a donc :
                              couche 1 - le décor sur lequel on marche
                              couche 2 - les persos
                              couche 3 - le décor derrière lequel les persos apparaissent

                              J'ai essayé de faire un peu pareil pour programmer la pluie, qui apparaît, logiquement, devant le perso et le décor, mais je n'ai pas encore essayé pour le décor. Je verrais pour le prochain jeu (c'est vrai que c'est plus sympa)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                3 décembre 2009 à 15:38:19

                                En effet, tout en couches :)
                                Du coup le probleme des arbres n'existe pas, puisque tu testes les collisions avec la couche du bas, donc des tiles bien carrés qui ne dépassent pas.
                                La couche du dessus permet juste de masquer le perso, embellir, et en aucun cas ne sert de tests de collisions.

                                Et en effet, la pluie peut etre un layer en plus :)

                                Les layers peuvent aussi etre utilisés pour faire une couche derriere qui scroll moins vite (bon, tu m'as dit que tu ne fait pas encore de scrolling), mais ainsi donner un bel effet !

                                Regarde mon vieux topic :
                                http://www.siteduzero.com/forum-83-440 [...] -couches.html
                                • Partager sur Facebook
                                • Partager sur Twitter

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

                                  3 décembre 2009 à 20:41:44

                                  Merci pour le lien vers ton tuto sur le scrolling !
                                  Je vais essayer de m'y mettre pour mon prochain projet, une fois que j'aurais fini celui-là. :p
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    9 décembre 2009 à 22:20:44

                                    Bonjour !

                                    Je viens de mettre à jour mon jeu, grâce aux conseils que beaucoup d'entre vous m'ont donnés sur ce site. :D

                                    Je vous en remercie. Je n'ai pas encore eu le temps de tout peaufiner mais mon projet avance bien puisque le code est terminé à presque 95%. Le monde n'est pas encore aussi vaste qu'il le sera à la fin, mais il y a déjà 3 donjons à explorer ! :pirate:

                                    Vous pouvez trouver la dernière mise à jour (0.95) sur mon site : http://www.rpgamer.fr

                                    Le jeu est de plus en plus fun et se rapproche d'un "vrai jeu fini". J'espérais pas en arriver là, il y a 2 mois et demi, quand j'ai commencé et que je ne savais faire que "glisser" le perso sur la carte en passant à-travers tous les murs ! :'(

                                    Comme d'habitude, n'hésitez pas à me donner vos conseils ou vos remarques pour l'améliorer ! :magicien:

                                    @ bientôt !
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      10 décembre 2009 à 6:48:56

                                      j'ai tester ta derniere version de ton jeux , c'est déjà beaucoup plus vaste , en tout cas ton jeux est déjà pas mal aboutis ,comme tu la si bien dit il devien de plus en plus fun, et il est vraiment très jolis.
                                      ps: j'adore la musique dans les village .
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        10 décembre 2009 à 21:19:28

                                        J'ai pas encore testé ton jeu, mais comme je suis sous Linux, je vais devoir le compiler.
                                        C'est pas grave, tu donnes les sources, alors ça va me prendre 10 minutes max.
                                        Je ferais sûrement ça ce Week-End, alors si tu veux, je te passerai l'executable compilé pour Linux.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          10 décembre 2009 à 22:55:21

                                          Oui, ce serait sympa, comme ça je pourrai le rajouter sur la page des téléchargements.

                                          @+
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            11 décembre 2009 à 14:25:16

                                            dit, ou a tu trouver les image, tu a fais toi même ou c'est sur un site ? car je cherche actuellement des graphisme pour un rpg de ce style, et je trouve pas.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              11 décembre 2009 à 20:48:05

                                              Salut,

                                              Pour les graphismes, je me suis inspiré de chipsets trouvés sur internet ou de jeux que j'aime bien, mais j'ai tout redessiné pixel par pixel avec un logiciel que j'ai trouvé sur internet : TilesEditor, et aussi paint. :magicien:

                                              Mais, c'est vrai que c'est un boulot de fou ! Il me faut au moins une journée entière (8-10 heures), juste pour faire un chipset animé de 53 tiles ! :pirate:

                                              @+ et bon courage pour ton jeu !!
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                11 décembre 2009 à 22:12:07

                                                Citation : Jay81

                                                Mais, c'est vrai que c'est un boulot de fou ! Il me faut au moins une journée entière (8-10 heures), juste pour faire un chipset animé de 53 tiles ! :pirate:



                                                En effet, graphiste et level designer sont des gros boulots a part entière ! Moi c'est toujours ce qui m'a démoralisé dans la création de jeux ! Mais bon, il fallait y passer...

                                                Je ne connaissais pas TilesEditor, je suis allé voir des screenshots, ça me parait pas mal.
                                                Tiens, dis moi, quelques questions dessus :
                                                - c'est un logiciel gratuit ?
                                                - peux tu importer n'importe quel chipset dessous (sous forme de PNG par exemple) ? Tu choisis la taille des tiles ?
                                                - quel est le format d'export ? binaire/texte ? est il facile a relire ? Que garde t il en mémoire ? Inclut il directement les images, ou alors un lien vers l'image ? (donc trimballer plusieurs fichiers)
                                                - peux tu mettre des propriétés aux tiles ? (genre mur, glace, pente ?)
                                                - gere t il les tiles animés ?
                                                - tout cela est il bien marqué dans le fichier de sauvegarde, facile a relire ?

                                                Merci :)
                                                Oula, ça fait beaucoup de questions :) Répond que si tu as le temps :lol:
                                                • Partager sur Facebook
                                                • Partager sur Twitter

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

                                                  11 décembre 2009 à 22:34:54

                                                  Elle est ou la sortie de la chambre ? je la trouve pas lol
                                                  Bravo en tout cas :) .
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    11 décembre 2009 à 22:43:39

                                                    Ca a l'air vraiment sympa !
                                                    Qu'une chose à dire : Bravo :)
                                                    (dommage qu'il n'y ai pas de version Mac :x)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      12 décembre 2009 à 0:14:30

                                                      Salut !

                                                      Pour la sortie de la chambre, tu parles des intérieurs des maisons ? Cherche là où la lumière se diffuse sur le sol et fonce dessus, tu sors de la maison (comme dans la plupart des jeux). o_O

                                                      Pour TileEditor / Tile Studio, tu trouveras toutes les infos ici :


                                                      Pour ma part, je ne m'en sers que pour dessiner mes propres tiles qui sont séparées (pas regroupées en chipset) mais le logiciel est assez puissant et très paramétrable ; il peut aussi dessiner des maps.

                                                      Mais comme j'ai créé mon propre level editor qui exporte 2 fichiers textes au format spécifique de mon jeu, je ne m'en sers pas pour l'instant.

                                                      Tu peux le télécharger et l'essayer, il est gratuit et très bien fait, je trouve. Merci à son créateur ! :ange:

                                                      @+ et merci pour vos commentaires !
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        12 décembre 2009 à 7:04:17

                                                        moi aussi, ce qui me décourage, c'est les graphisme. j'ai finie par trouver des image tirer de rpg maker, le seul problème, c'est qu'il y a très peux d'animation de combat. je vais voire si ton logiciel est bien :)

                                                        faut-il avoir des capacité de graphiste pour s'en servir ?
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          12 décembre 2009 à 11:27:09

                                                          Salut !

                                                          TileEditor / Tile Studio est très bien, malheureusement il s'ouvre sur un tileset vierge (de la dimension désirée). C'est donc à toi de dessiner ce que tu veux pixel par pixel (tu peux aussi tracer des lignes, faire des carrés ou des ronds mais ça dessine pas tout seul...) :magicien:

                                                          Sinon, tu peux copier/coller un élément d'un chipset RPGmaker que tu trouves pas mal puis l'éditer et le changer comme tu veux. Ca te donnera déjà une base de travail. J'ai fait comme ça pour quelques monstres. J'ai pris une image de base qui me semblait pas mal, je l'ai modifié comme je voulais et je m'en suis servi pour dessiner le monstre dans les 4 directions de 2 façons différentes (pour l'animation), mais c'est du boulot ! Encore plus pour les monstres que pour le décor ! :-°

                                                          @+
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            13 décembre 2009 à 17:35:10

                                                            Je up, et j'en profite pour signaler que le jeu tourne maintenant sous Linux, sans gestion de la musique. (Archive tar.b2z)
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              13 décembre 2009 à 21:18:08

                                                              J'ai ajouté la version Linux sur mon site : http://www.rpgamer.fr

                                                              Merci à toi, roibakura ! :D
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Action RPG en 2D en C avec SDL et FMOD

                                                              × 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