Annonce

Réduire
Aucune annonce.

[dev] WIP lib graphique

Réduire
X
 
  • Filtre
  • Heure
  • Afficher
Tout nettoyer
nouveaux messages

  • [dev] WIP lib graphique

    Hop, petit topo sur des travaux en cours sur une librairie graphique et des tools qui vont bien. (pas comme ceux dispo actuellement quoi )

    Le but de la lib est donc pour l'instant de gérer trois types d'éléments "de base": image fixe, scroller et sprite animé.
    Voila donc comment tout ça se présente à l'heure actuelle.
    • Formats d'entrée
      - Fichier PNG, 32bppArgb.
      - Pas de limite de nombre de couleurs, hormis 15 par tile evidemment.
      - Transparence sur couleur mauve (#ff00ff) et/ou pixels transparents.



    • Préparation / conversion des données
      - Référencement de tous les assets dans un fichier XML. Spécifier le type de donnée, le fichier d'entrée et un ID pour l'identifier dans le programme.
      - Énumérer les frames pour les sprites animés.



      - Une fois que tout est référencé, on passe tout ça à la moulinette.



    • Format de sortie

      - Fichier binaire contenant les données graphiques, à charger à la place des traditionnelles rom "C"
      - Fichier ASM contenant les tilemaps, palettes, etc. A intégrer à votre projet.



    • Animation
      - Etape supplémentaire pour les sprites animés, bah faut les animer
      - Création des différentes animation et de leurs étapes, positions, durées, etc...
      - Sortie d'un fichier ASM supplémentaire, à intégrer au projet également.


    • Utilisation/demos
      - La lib vise une utilisation simple des données, en écrivant un minimum de code.

      Exemples, demo scroller :
      Code:
      int main(void) {
      	int x=27;
      	int y=0;
      	BYTE p1,p2;
      	Scroller bgscroll;
      
      	initGfx();
      	scrollerInit(&bgscroll, &ms3bg_Map[0], 1, 16, x, y);
      	palJobPut(16,ms3bg_Palettes[PAL_SIZE],ms3bg_Palettes);
      	SCClose();
      
      	//scroller test
      	while(1) {
      		wait_vblank();
      
      		p1=volMEMBYTE(P1_CURRENT);
      		p2=volMEMBYTE(P2_CURRENT);
      
      		if(p1&JOY_UP)	y--;
      		if(p1&JOY_DOWN)	y++;
      		if(p1&JOY_LEFT)	x--;
      		if(p1&JOY_RIGHT)	x++;
      
      		for(i=0;i<4000;i++);
      		
      		ns_jobMeterColor(JOB_BLUE);
      		scrollerSetPos(&bgscroll, x, y);
      
      		if(p1&JOY_B) {
      			scrollerInit(&bgscroll, &ms3bg2_Map[0],1, 16, x, y);
      			palJobPut(16,ms3bg2_Palettes[PAL_SIZE],ms3bg2_Palettes);
      		}
      		if(p1&JOY_C) {
      			scrollerInit(&bgscroll, &ms3bg3_Map[0],1, 16, x, y);
      			palJobPut(16,ms3bg3_Palettes[PAL_SIZE],ms3bg3_Palettes);
      		}
      
      		ns_jobMeterColor(JOB_GREEN);
      		SCClose();
      	}
      }
      Vidéo: Demo scroller


      Demo image et sprite animé:

      Code:
      int main(void) {
      	int x=27;
      	int y=0;
      	BYTE p1,p2;
      	Picture testPict;
      	aSprite demoSpr;
      
      	initGfx();
      
      	pictureInit(&testPict, &andypict_Map[0],1, 16, x, y);
      	palJobPut(16,andypict_Palettes[PAL_SIZE],andypict_Palettes);
      
      	aSpriteInit(&demoSpr,32,32,bmary_spr,64,164,0);
      	palJobPut(32,bmary_spr_Palettes[PAL_SIZE],bmary_spr_Palettes); 
      	
      	SCClose();
      
      	//picture/sprite test
      	while(1) {
      		wait_vbl();
      
      		p1=volMEMBYTE(P1_CURRENT);
      		p2=volMEMBYTE(P2_CURRENT);
      
      		if(p1&JOY_UP)	y--;
      		if(p1&JOY_DOWN)	y++;
      		if(p1&JOY_LEFT)	x--;
      		if(p1&JOY_RIGHT)	x++;
      
      		for(i=0;i<4000;i++);
      		ns_jobMeterColor(JOB_BLUE);
      
      		if(p1&JOY_A) {
      			aSpriteSetAnim(&demoSpr,BMARY_SPR_ANIM_IDLE);
      		}
      		if(p1&JOY_C) {
      
      			aSpriteSetAnim(&demoSpr,BMARY_SPR_ANIM_WALK);
      		}
      
      		pictureSetPos(&testPict, x, y);
      		aSpriteAnimate(&demoSpr);
      			
      		ns_jobMeterColor(JOB_GREEN);
      		SCClose();
      	}
      }
      Vidéo: Demo animation

      Il y a un jobmeter dans les videos pour observer la charge, en bleu le temps passé dans la lib, en rouge le temps de mise à jour pendant le vblank. C'est la qu'on gagne le plus de temps par rapport aux lib actuelles, grosse réduction du tearing.



    Voila ou ça en est pour le moment, il manque encore des tonnes de choses et il faudra vérifier que tout ceci n'est pas trop lourd pour être utilsé en situation réelle.

    Verra la suite l'année prochaine

  • #2
    Tu gères, moi je prends ma retraite (après avoir rien foutu)
    Bon courage pour la suite, même si t'as l'air d'avoir fait le plus gros !

    Commentaire


    • #3
      Ouah
      C'est excellent ça !!!

      Tu vas rajouter le support du son prochainement ?
      Y a aussi la gestion des collisions qui faut rajouter.

      Il serait bon quand même de tester ton code sur le vrais hardware car les ému on tendance à être permissif et tu risque d'avoir pas mal de surprise.

      En tout cas bon courage pour la suite, tu t'attaque à du lourd là
      Dernière modification par kogami, 31 décembre 2013, 17h24.
      16 bit forever

      Commentaire


      • #4
        Testé les parties critiques (update vram) sur le vrai hard sans soucis, pour le reste pas de raison particulière pour que ça ne fonctionne pas.

        Collisions idéalement faudrait ajouter la création de hitbox dans l'outil d'animation, mais c'est à voir, les besoins varient d'un jeu à l'autre.

        Commentaire


        • #5
          C'est héroïque.

          Joli.

          Commentaire


          • #6
            Ce serait magnifique de voir ce topic toucher à son but.
            "heuuu, je suis pas sur de ce que j'invente hein!"

            Commentaire


            • #7
              Même si je n'y capte pas grand chose, chapeau !

              Commentaire


              • #8
                c'est bôôôo.
                Dommage que je n'ai pas de compétence dans du code.
                Beau projet n'empèche,bon courage

                Commentaire


                • #9
                  La finalité de tout cela sera de créer quelle type de jeux ?
                  Les outils seront rendu public ?
                  16 bit forever

                  Commentaire


                  • #10
                    Bravo Hp Man.
                    Mais comme Tarma, je ne capte pas vraiment à quoi ça va servir et faire avancer le développement homebrew. Je me doute bien que ça constitue un travail titanesque.
                    Voilà quoi, on n'est pas tous câlé niveau Tools etc...

                    Commentaire


                    • #11
                      Si j'ai bien compris le titre, HPman va faire une bibliothèque C pour programmer sur Neo·Geo.

                      Une bibliothèque, c'est un ensemble de fonctions qui permettent de "faire des trucs" comme créer/afficher/animer des groupes de pixel (donc ultimement, des persos, des décors etc...).

                      Ca fera avancer le développement homebrew en celà que si cette bibliothèque est complète et claire d'utilisation, quelques compétences en C permettrons à un amateur de créer son propre jeu sans avoir à développer ses propres fonctions.

                      C'est un peu comme si HPman te donnait un marteau, un tournevis, les vis, les pinces etc.. Pour monter ton meuble dont tu aurais dessiné les plans.

                      Edit : d'après ce que je comprends, tu dois d'abord créer ton image en format PNG, et ensuite, tu utilises la bibliothèque pour faire afficher/animer cette image.
                      Dernière modification par wyoui, 01 janvier 2014, 22h10.
                      "heuuu, je suis pas sur de ce que j'invente hein!"

                      Commentaire


                      • #12
                        C'est sûr que pour celui qui programme pas et a jamais touché à la lib de base, l'avantage saute pas aux yeux.

                        Déjà, fini les décors en 15 couleurs (dédice le cortex )

                        Commentaire


                        • #13
                          Donc, Hp Man s'attaque clairement à un gros morceau qui risque de faciliter la tâche des programmeurs.
                          Tant mieux alors.
                          Après je ne saurai situer ce projet par rapport au logiciel Neobitz.
                          Mais pourvu que ça se finalise assez rapidement, ça risque de remotiver Ftek par exemple.
                          Mais Ftek en garde sous le coude, il doit en savoir suffisamment sur ce fameux Hayaku programmer de Le Cortex.

                          Commentaire


                          • #14
                            Et pendant ce temps...

                            Envoyé par kogami Voir le message
                            Les outils seront rendu public ?
                            EXTERMINAAAAAAAAAAAAAAAAAAAAAAAAAAAATE !

                            Commentaire


                            • #15
                              Bah oui, on veut savoir!

                              Commentaire

                              Chargement...
                              X