[C]Phoenix Wright.

Démarré par zeldalyoko, 29 Mars 2012 à 03:41

0 Membres et 1 Invité sur ce sujet

Phoenix Wright PC.

(je pique la formule de présentation de Reza, il m'en voudra pas je pense...)
Description du projet :

- Créateur : euh... moi même ! :D
- Date de début de création : 29/03/2012
- Logiciel : C/SDL... un "moteur" que je code depuis Février quand j'ai le temps...
- Graphisme : 2D !

D'où t'es venu l'idée de faire ce jeu ?! (je m'auto-interview ! :D )

- Hum. la semaine dernière j'ai fait pas mal d'ajout sans optimisation... Et vue qu'actuellement j'optimise/corrige tout le bordel, je me suis donc dit : pourquoi ne pas faire un "mini-jeu", ou une démo, tant qu'à faire.  Vue que j'ai déjà tout ce qu'il me faut, je me lance dans la création d'une démo de la première "enquête" du premier jeu Phoenix Wright : Ace Attorney !

(bon, il y a certains détails dans la présentation de Reza qui est inutile pour moi... Humour, toussa :D )

Bref ! Dans l'idée vous avez le projet, il vous manque un screen :

C'est le seul screen que j'ai actuellement vue que l'optimisation fut commencer a minuit... et qu'il me faudra un bon mois pour la faire et voir tout les problèmes.

La démo sera coder en "dur" dans les sources, donc pas de lua, ni rien... bref.

Description du moteur :
- Créateur : euh... moi même ! Toujours !  :P
- Date de début de création : 21/02/2012  :) (je travail entre 1 et 6h par jour dessus... le reste du temps, je bosse IRL...)
- Logiciel : C/SDL, PTHREAD, FMOD, bref, tout ce qu'il faut !
- Graphisme : 2D

Un moteur pourquoi ?!
Je souhaite faire un moteur qui devra faire un maximum de chose et assez facilement, en cinq lignes je doit pouvoir choisir de faire soit un RPG, soit un shoot-em-up, soit un jeu de plateforme...

Mon gros projet pour plus tard, c'est un RPG complet, donc je me lance de temps en temps dans des mini-jeux, mini-jeux sur différents thèmes pour coder ce qu'il me manque...

par exemple, dans le futur, je pense faire un jeu de shoot, sur une map en 3D iso en utilisant du LUA pour gérer les différentes I.A (zombie)... Bref, en fonction des besoins, je fait derrière un mini-jeu histoire de montrer l'évolution du moteur...

En théorie, pour faire la mini-démo sur phoenix wright, il me faudrait une journée avec le moteur... mais il me manque deux-trois détails dans celui-ci, et il me faut faire une collecte de ressource dans la version DS... (réécrire tout les textes, voir le fonctionnement de chaque choix de réponse etc.) et quelques sons, sprites, musiques, interface que je ne trouve pas sur le web.

Pour le moment le moteur gère :
Les images (background, sprite, tile etc.), (et leurs animations bien entendu)
Les Maps 2D (type zelda).
Je peut écrire du texte, récupérer les touches appuyer etc.
Je gère les threads (manque d'opti et d'option là-dedans)
Les musiques, sons sont lisibles...

D'ailleurs pour la gestion de la musique/son, a l'époque je me suis amusé à pondre une horloge (qui tourne chez moi depuis sa compilation :D )


Ema cligne des yeux, le background change en fonction des heures (et bug en fonction de l'heure de lancement du programme  :mrgreen:) (La compilation du réveil date du 21 Mars~ donc moins d'opti que maintenant) (il cliquetis et sonne toutes les heures, j'aime ça perso, et sa ne dérange pas à l'écoute de musique/film (sauf si vous avez votre son a fond quoi))...

Ce que le moteur doit gérer dans un futur proche :
- Les collisions dans un mode 2D/3D iso.
- Une gestion avancé de la météo (actuellement un peu trop basique, il fait soleil à chaque lancement... sous-entendu : c'est pas fait encore ! :ninja:)
- Une gestion des textes (blabla de pnj) qui doit être gérer...
- Ouverture et Création d'un format type .dbc pour sauvegarder les données importantes et utiles...
- Gestion du Lua. J'ai déjà fait plusieurs tests là-dessus a côté du moteur et sa me semble concluant.
- Le scrooling Horizontale et Verticale
- et plein d'autre chose qui pourrait tenir sur 2 pages ! :D (l'openGL dans 10 ans <3 )

Ce que le moteur gérait/devait gérer :
- Les sockets ! Le moteur gère le texte "écrit" pour l'afficher dans une pseudo-tchat box, a la base, il devait gérait l'online... je verrais ça plus tard, sa prends trop de temps... (faut pondre le serveur à côté, j'ai pas trop le temps ces derniers-temps...)

Ma gestion des maps !

Ma gestion des maps actuellement :

Elle se compose en plusieurs parties !
Comme vous le voyez sur le screen, je charge 4 fichiers pour afficher la map que vous voyez sur l'écran... chaque fichier contient des informations sur ce qui doit-être afficher par la map...

J'utilise le même principe que pour World of Warcraft, la map monde est découper en plusieurs petits bouts que je charge au fur et a mesure du scrooling, en théorie il n'y a pas de temps de chargement, ni de transition (comme pour zelda d'une zone à l'autre), et il sera facile de changer d'environnement.

Et il est très facile de changer un bout de monde sans toucher à l'intégralité de la map... si je doit détruire une maison après une quête, j'utilise le même morceau de map mais détruit la maison pour y mettre des ruines...

Ce qui donne :
Le morceau avec la maison map-001-01-1-0
Le morceau avec les ruines map-001-01-1-1

surtout que la gestion des spawns d'ennemies corresponds à la zone de la map... il existera les mêmes fichiers avec les zones de spawns possible par les monstres...

Ce qui donne :
Le morceau avec la maison : Creature-001-01-1-0 petit lapin et licorne selon vos fantaisies.
Le morceau avec les ruines : Creature-001-01-1-1 troll, orc, zombie, ce que vous voulez.

et les monstres se déplacent avec le scrooling, si un monstre est prévu pour la zone 01-1 et qu'il se déplace dans la zone 01-2 (ou autre) il restera à l'écran... tant que le monstre est à l'écran, il ne disparait pas  :P

Et voilà pour ce soir !
Par contre, le titre ne vaut plus rien maintenant (je devait juste parler de PW à la base  :mrgreen:) et je ne sais pas quoi mettre comme nouveau titre... "moteur ZL" ? ou je change le titre en fonction des projets du moment ? (phoenix wright là, plus tard zombieland etc.) alors ? les modos ? j'change ou pas ?  :P (si vous supprimez ce topic à cause du titre, je déprime  :mellow: il m'a fallut deux heures pour le pondre)


Bref, je suis fan de mon projet actuel, je ne suis pas un pro, je fait ça pour le fun, mais je m'éclate  B)


@bientôt et bonne nuit !  :meuh: :meuh:

PS : J'ai faillit me faire entuber par le forum n'empêche  :cry3:, heureusement que j'ai fait une sauvegarde ce message dans un .txt... Le forum me redirige pour me dire que ma session est terminé (60 minutes) sans me rendre mon message...

Très bon jeu. Je le conseil a tout le monde =)

Allez, je vais faire mon libriste: Show us the code ?

Par contre je peux que te conseiller de jamais faire quelque chose de trop générique, car de toute façon, tout code est spécifique, tu vas forcément te perdre sinon ^^.

Citation de: Sam101 le 29 Mars 2012 à 17:29
Allez, je vais faire mon libriste: Show us the code ?

Par contre je peux que te conseiller de jamais faire quelque chose de trop générique, car de toute façon, tout code est spécifique, tu vas forcément te perdre sinon ^^.

Pour le moment c'est surtout le "moteur" qui est générique... bref, je fait en sorte pour que tout puisse être fait avec le moteur 2D/Son etc.

Et tout est en développement, qu'est-ce que tu veut voir ? :D


Avec le code du dessous, je m'occupe des animations "automatiques", des animations qui ne stop jamais (comme par exemple une fleure sur une map, ou le clignement d'yeux des personnages de Phoenix Wright.
TypeAnim corresponds à l'animation sur l'image, si c'est horizontale ou latérale...
[spoiler]void SpritAutoAnim(StructSprit * Sprit){
    if(Sprit->Type == 3){
        while(Sprit->AutoAnim){
            if(Sprit->NombAnim == 0){
                if(Sprit->Sprite->h/Sprit->TailleSpriteY != 1){
                    Sprit->NombAnim = Sprit->Sprite->h / Sprit->TailleSpriteY + 1;
                    Sprit->TypeAnim = 1;
                }
                else if(Sprit->Sprite->w/Sprit->TailleSpriteX != 1){
                    Sprit->NombAnim = Sprit->Sprite->w / Sprit->TailleSpriteX +1;
                    Sprit->TypeAnim = 2;
                }
            }

            if(SpritFrameSecond(Sprit) == 1){
                if(Sprit->TypeAnim == 1){
                    if(Sprit->AnimActuel == Sprit->NombAnim){
                        Sprit->AnimActuel = 0;
                        Sprit->Animation.y = 0;
                        SpritFrameDelay(Sprit);
                    }
                        Sprit->Animation.y = Sprit->TailleSpriteY * Sprit->AnimActuel;
                        Sprit->AnimActuel ++;
                }
                if(Sprit->TypeAnim == 2){
                    if(Sprit->AnimActuel == Sprit->NombAnim){
                        Sprit->AnimActuel = 0;
                        Sprit->Animation.x = 0;
                        SpritFrameDelay(Sprit);
                    }
                        Sprit->Animation.x = Sprit->TailleSpriteX * Sprit->AnimActuel;
                        Sprit->AnimActuel ++;
                }
            }


        }

        if(Sprit->AutoAnim == 0){
            pthread_exit(NULL);
        }

    }
}
[/spoiler]

j'ai une autre fonction qui s'occupe des animations aussi, mais des animations pour les pnj/joueur, mais c'est pas encore au point, il fonctionnait à une époque mais j'ai fait plusieurs améliorations dans l'utilisation de mes variables, donc c'est à revoir  :P)

et pour le moment, je n'ai pas le temps de vous montrez autre chose, je doit y allez :)

Très bon jeu. Je le conseil a tout le monde =)

Show us the code => Github!

Sinon, Sam a raison.
Si tu veux faire un jeu, code un jeu, pas un moteur.

EDIT: Utilises des constantes dans ton code, les nombres magique ça fait pleurer le petit Djikstra.

Par exemple à la place de:

if(Sprit->Type == 3){

Il faudrait:

if(Sprit->Type == SPRITE_TYPE_ANIMATED){

A la base, je voulais faire plein de mini-jeux, d'où la création du moteur...
Puis, ensuite, l'idée est venu de faire un RPG...
J'ai donc continuer le moteur...

ouais, c'est ce que je fait depuis hier, j'ajoute des constantes etc. (Type dans ce cas là, dit quel type d'image est charger, un personnage, un background, une tile autre~...1/Sprite, 2/Background, 3/Tile, 4/Charac (sprite du type phoenix wright) etc. )

Bref ! Il me manque quelques détails pour commencer quoique se soit là :)

Très bon jeu. Je le conseil a tout le monde =)

Citation de: Guillaume le 29 Mars 2012 à 20:00
Show us the code => Github!
Je ne peux qu'approuver, git et github c'est génial.
Citation
EDIT: Utilises des constantes dans ton code, les nombres magique ça fait pleurer le petit Djikstra.
Sinon, après avoir fait pleurer les morts, ça te fera aussi pleurer dans 6 mois quand tu te souviendras plus si "6" c'est un Tileset, un Background, ou un type spécial qui affiche 42 sur l'écran.