Réaliser un RPG en C avec SDL et FMOD
Un article de MrCool.
[modifier] Avant-propos
Le but de cette page est d'arriver, étape par étape, à réaliser toutes les tâches de programmation menant à la conception d'un RPG en 2D.
Le jeu sera écrit en C et utilisera deux librairies:
Le rendu final du jeu sera proche des jeux Final Fantasy sur SNES. Tous les mécanismes de base seront implémentés, cependant l'accent ne sera pas mis sur la création d'un gameplay permettant au jeu d'être intéressant. Par exemple, le système de magie pourra gérer plusieurs dizaines de magies mais seulement deux ou trois seront fournies avec les démos. Libre à vous de développer la jouabilité de ce noyau de jeu afin d'arriver à vos fins.
De plus, le code source fourni tente de rester le plus simple possible. Les solutions les plus complexes et les plus optimisées seront implémentées à la fin de la série dans des étapes spéciales. Le but est de ne pas exclure dès le départ des lecteurs potentiels par la difficulté du code.
Bonne lecture!
[modifier] Avertissement
Toutes les connaissances nécessaires à la conception d'un jeu ne peuvent être acquises en une seule fois. Une connaissance du C est requise pour la bonne compréhension de cet article. Les liens vers d'autres articles du wiki qui sont insérés dans ces pages peuvent vous aider à combler vos lacunes, n'hésitez pas à les consulter.
[modifier] L'évolution du jeu en images
[modifier] Les étapes de la création d'un RPG
[modifier] Etape n°1: Préparation
Dans cette étape, nous installons Dev-Cpp et installons les bibliothèques que nous allons utiliser pour le jeu.
[modifier] Etape n°2: Commençons!
Il faut désormais poser les bases du jeu: écrire la fonction Main(), initialiser les bibliothèques, lier les fichiers nécessaires au projet.
[modifier] Etape n°3: Les cartes
La réalisation des décors est un point important du développement du jeu afin d'obtenir un rendu visuel intéressant au final.
- Démo n°1: génération et affichage d'une carte (Télécharger | Voir le code source | OS: Windows, Linux)
- Lire cette étape
[modifier] Etape n°4: L'éditeur de carte
L'éditeur de carte va nous permettre de créer des cartes complexes à utiliser dans notre jeu.
- Démo n°2: l'éditeur de carte de notre jeu (Télécharger | Voir le code source | OS: Windows, Linux)
- Lire cette étape
[modifier] Etape n°5: Les sprites et les collisions
La gestion des sprites permet à notre héros d'apparaître. On peut d'ores et déjà le déplacer à l'aide des touches directionnelles et il ne traverse pas les obstables (murs, caisses, etc.).
- Démo n°3: le héro, déplacé à l'aide des touches directionnelles, se déplace sans passer à travers les obstables (Télécharger | Voir le code source | OS: Windows, Linux)
- Lire cette étape
[modifier] Etape n°6: Les événements et les PNJ
L'ajout d'un PNJ à notre carte est relativement aisé grâce au système que nous avons conçu durant l'étape 5, mais créer de toute pièce un système gérant toute l'interactivité du jeu est un vrai défi!
- Démo n°4: un nouveau pnj se déplace et des événements se produisent (Télécharger | Voir le code source | OS: Windows, Linux)
- Lire cette étape
[modifier] Etape n°7: Interface, inventaire et boutiques
Les fondations de notre jeu sont posées: il est temps de compléter notre jeu avec des fonctionnalités totalement inédites tel que: un menu permettant de gérer notre inventaire et les armes et armues équipées, une boutique et même une auberge.
- Démo n°5: un nouveau menu, des dialogues et deux boutiques (Télécharger | Voir le code source | OS: Windows, Linux)
- Lire cette étape
[modifier] Etape n°8: Combats, fondus enchaînés et coffre
Dans cet article, nous allons ajouter un système très important pour notre jeu: le système de combat. La gestion des fondus enchaînés est également au rendez-vous. Enfin, nous ferons encore un petit peu évoluer notre système d'événement avec l'implémentation d'un nouveau type d'événement permettant de gérer (entre autre) les coffres.
- Démo n°6: des combats, des fondus enchaînés et un coffre (Télécharger | Voir le code source | OS: Windows)
- Lire cette étape
[modifier] Ressources
[modifier] Table des matières
- Préparation
- Commençons!
- Les cartes
- L'éditeur de carte
- Les sprites et les collisions
- Les sprites
- Gestion des collisions
- Création des fichiers sprite.c et sprite.h
- Implémentation des types
- Initialisation et libération des sprites
- Chargement statique de données
- Sauvegarde des sprites
- Chargement des sprites
- Affichage des sprites
- Changer l'animation d'un sprite
- Déplacement d'un sprite et gestion des collisions
- Gestion des événements
- Modification de la fonction Main()
- Démo 3: Sprites et collision
- Les événements et les PNJ
- Ajouter un PNJ
- Gestion du déplacement des PNJ
- Le sytème de gestion des événements
- Création des fichiers events.c et events.h
- Implémentation des types de donnée nécessaires
- Initialisation et libération de la structure
- Chargement des données statiques
- Gestion des événements
- Sauvegarde des événements
- Chargement des événements
- Création de nouveaux événements
- Modifications de la fonction main()
- Démo 4: PNJ et événements
- Interface, inventaire et boutiques
- Combats, fondus enchaînés et coffre
[modifier] Aller plus loin
[modifier] Travaux dérivés de ce projet
[page de dscussion]Discuter:Réaliser un RPG en C avec SDL et FMOD
Les commentaires ci-dessus ont été laissés par des visiteurs.
Le gestionnaire du site n’est pas responsable de leur contenu.
This site's operators can not take responsibility for the content of such comments.
Catégories: C | SDL | FMOD | Article



Un problème, un élément à ajouter, une explication manquante?
n'hésitez pas à le signaler ici!
Sommaire
[modifier] Work In Progress
[modifier] Boîte à idée
J'ai recompilé les sources de l'exemple n°7 sous linux avec Anjuta (équivalent linuxien de Dev-c++). Cela fonctionnne bien après quelques adaptations de code.
[modifier] Known issues
[modifier] Segfault lors du changement de carte
events.c l. 153:
Il semble que de temps à autres le pointeur next puisse pointer vers des zones mémoires réservées ce qui cause un segfault. Ce bug se produit de temps à autre après le chargement d'une carte.
[modifier] Questions, problèmes? Discutons-en...
[modifier] Portage rpg 2d
Je suis intéressé par le portage des démos associées aux tutoriaux. Cf le thread suivant: thread sur le forum. --MrCool 30 jul 2005 à 21:20 (CEST)
[modifier] une erreur trouvée
salut, je suis en train de suivre ce tuto pas a pas mais je suis confronté a un probleme !
j'ai une rreur sur la fonction loadMap();, a cette ligne: map->chipset=malloc((map->n_tile)*sizeof(struct s_chipset));
je code sous codeblocks avec minGW et il me retourne cet erreur: 196|error: invalid conversion from `void*' to `s_chipset*'|
j'avoue avoir un peu de mal en allocation dynamique en c (plus simple en c++ ^^) mais je pense que c'est bon la donc j'voit pas l'erreur
tu peut m'aider s'il te plait ? merci d'avance !
Tu peux rajouter le cast suivant avant ton malloc:
Pour toute autre question, consulte plutot le forum : http://forum.games-creators.org
NewbiZ