WIP Jeu de plateforme MD

Page 3 sur 3 Précédent  1, 2, 3

Voir le sujet précédent Voir le sujet suivant Aller en bas

Re: WIP Jeu de plateforme MD

Message par Vetea le Mar 1 Aoû 2017 - 12:02

Ah c'est ce truc là Kaot  ?!
Même pas remarqué ! Very Happy

Moi ça ne me gène pas du tout.
Après, ça n'a rien à voir avec SPR_update() effectivement, mais les dernières mises à jour du SgdK de Stef avec la gestion Yorder.
Faire une compilation avec une version antécédente, la 1.2 par exemple et voir ce que cela donne.
Si c'est OK, faire un report à STEF et attendre ! Wink

Vetea
Docteur *
Docteur *

Nombre de messages : 4109
Date d'inscription : 22/06/2012

http://www.rolango.fr/

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Tryphon le Mar 1 Aoû 2017 - 12:11

Oui, c'est un bug qui n'influe pas sur le gameplay et qui est visuellement quasi-imperceptible. Mais connaissant le souci de perfectionnisme de Stef, je suis sûr qu'il jettera un œil au problème Very Happy

Tryphon
Infirmier

Masculin Nombre de messages : 3625
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Vetea le Mar 1 Aoû 2017 - 12:19

Certainement Tryphon ! Wink
Faut juste faire un test de compilation avec la 1.2 et constatez si tout est OK !
Avec mon Wifi des Alpes, c'est pas la peine d'y compter !  Razz
avatar
Vetea
Docteur *
Docteur *

Masculin Nombre de messages : 4109
Age : 46
Localisation : Baillargues
Date d'inscription : 22/06/2012

http://www.rolango.fr/

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par philip le Mar 1 Aoû 2017 - 14:48

@Tryphon a écrit:
@philip a écrit:Voilà, c'est son positionnement du SPR_update()

Je pense pas, ça le fait sur le sample sprite de Stef et le update() est bien placé.

(mais l'OP a posté son code quelque part ? Je le vois pas...)
Non, il ne l'a pas posté. J'ai regardé la vidéo posté par kaot, et effectivement, les soldats à terre subissent un décalage lors du défilement vertical du décors... La démo sprite de sgdk, je ne vois pas ce phénomène mais j'ai les yeux qui fatigue. J'ai testé sur émulateur le jeu de PF de Kivutar, et les sprites ennemis jouent effectivement du moonwalk, surtout quand on fait du va et vient, cela saute aux yeux. 

Je n'ai jamais rencontré ce problème. Pour en avoir le coeur net, j'ai retrouvé le vieux sgdk 0.90 avec lequel j'ai fait un concept de toki, j'ai désactivé les déplacements des ennemis du jeu, et en faisant des va et vient tout reste bien impeccable... Donc pour moi, le problème ne vient pas de sgdk, du moins jusqu'à la version 1.21
avatar
philip
Docteur *
Docteur *

Masculin Nombre de messages : 1905
Age : 46
Localisation : 31350 déménagement terminé.
Date d'inscription : 10/04/2011

http://philip-md.blogspot.fr/

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Tryphon le Mar 1 Aoû 2017 - 16:18

Si, ça le fait sur le sprite sample, mais c'est beaucoup moins marqué. Du coup il est possible qu'il y ait autre chose en plus de ce problème. Mais y'a clairement quelque chose de bizarre...

Tryphon
Infirmier

Masculin Nombre de messages : 3625
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Stef le Mer 2 Aoû 2017 - 9:50

Je regarderai tout ça au retour de mes vacances car c'est louche.
Je pense que le SPR_update() se termine trop tard parfois (après le vblank) d'où le soucis de décalage.

Théoriquement il faut faire dans ce sens pour éviter tout problème de synchro entre sprites et plan :

// met à jour la map sans modifier le scroll hard en lui meme
MAP_update();
SPR_update();

VDP_waitVSync();

// met à jour le scroll hardware
Scroll_update();

A note que le scroll hardware peut être mis à jour dans la routine du vint s'il y en a une mais il faut etre sur que le SPR_update sot termine à ce moment là (avec un flag ou autre).
Je corrigerai l'exemple "sprite" si besoin :)
avatar
Stef
Infirmier

Masculin Nombre de messages : 3524
Age : 38
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par ichigobankai le Mer 2 Aoû 2017 - 12:06

J'avais failli posté dans ce sens, à savoir si vous (ceux qui dev sur MD) regardiez la charge par frame. Car si ca dégueule, forcément on perd la synchro etc.
avatar
ichigobankai
Patient contaminé

Masculin Nombre de messages : 862
Age : 37
Localisation : 49
Date d'inscription : 04/04/2011

http://www.mastersystem-france.com

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Tryphon le Mer 2 Aoû 2017 - 12:23

Si le SPR_update bloque les interruptions (je suppose que c'est le cas ?) alors ça se verrait avec gens (le r57shell-mod montre les VInt ratées), mais ce n'est pas le cas...

Tryphon
Infirmier

Masculin Nombre de messages : 3625
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Vetea le Mer 2 Aoû 2017 - 13:11

Bref ...
Merci Stef, vais tester dès que j'ai le PC en main. Wink
avatar
Vetea
Docteur *
Docteur *

Masculin Nombre de messages : 4109
Age : 46
Localisation : Baillargues
Date d'inscription : 22/06/2012

http://www.rolango.fr/

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Kivutar le Mer 2 Aoû 2017 - 21:38

Voilà une vidéo qui montre bien le bug, sans avoir besoin de passer au ralenti:




Théoriquement il faut faire dans ce sens pour éviter tout problème de synchro entre sprites et plan :

// met à jour la map sans modifier le scroll hard en lui meme
MAP_update();
SPR_update();

VDP_waitVSync();

// met à jour le scroll hardware
Scroll_update();

Alors j'ai essayé ça. Et ça règle effectivement le souci.
Encore merci pour votre aide précieuse les gars !

J'aurais jamais trouvé ça tout seul Mr. Green
avatar
Kivutar
Patient en incubation

Masculin Nombre de messages : 48
Age : 33
Localisation : Pertuis
Date d'inscription : 07/07/2017

http://www.lakka.tv

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par kaot le Mer 2 Aoû 2017 - 22:13

good job thumleft
avatar
kaot
Guéri miraculeux

Masculin Nombre de messages : 2231
Age : 39
Localisation : la bas
Date d'inscription : 12/02/2015

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Tryphon le Jeu 3 Aoû 2017 - 9:24

@Stef a écrit:
// met à jour la map sans modifier le scroll hard en lui meme
MAP_update();
SPR_update();

VDP_waitVSync();

// met à jour le scroll hardware
Scroll_update();

Je crains d'avoir mal compris un truc alors : le scroll hw est en général calculé d'après les coordonnées du sprite du joueur.

Au moment du waitVsync(), on va avoir les sprites avec les coordonnées de la frame n, mais les offsets du scroll hw de la frame n - 1 (puisque le Scroll_update() est situé après) Confused

Edit : ce n'est d'ailleurs pas ce que tu fais dans le sonic sprite sample :

Code:
while(TRUE)
    {
        handleInput();

        updatePhysic();
        updateAnim();

        // update sprites
        SPR_update();

        VDP_waitVSync();
    }

le updateCamera() (équivalent du Scroll_update() ?) est lancé par updatePhysic(), donc au moment du waitVSync() on a bien des offsets synchro avec la position du sprite du joueur (ce qui n'empêche pas le bug décrit par l'OP, visible uniquement en ralenti extrême).

Tryphon
Infirmier

Masculin Nombre de messages : 3625
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Kivutar le Jeu 3 Aoû 2017 - 10:27

Si ça peut t'aider, voilà ma runloop après modifications:


Code:
    while(1)
    {
        joy1 = JOY_readJoypad(JOY_1);

        if (pause)
            pause--;
        else
        {
            camera_update(player, ind);

            // Update entities
            Entity *e = entityList;
            while(e) {
                if (e->update != NULL)
                    e->update(e);
                e = e->next;
            }

            // Update items
            Entity *i = itemList;
            while(i) {
                if (i->update != NULL)
                    i->update(i);
                i = i->next;
            }

            detect_collisions();

            SPR_update(sprites);
        }

        VDP_waitVSync();

        VDP_setHorizontalScroll(PLAN_A, camera_x);
        VDP_setHorizontalScroll(PLAN_B, camera_x >> 3);
        VDP_setVerticalScroll(PLAN_A, -camera_y);
        VDP_setVerticalScroll(PLAN_B, shake_y_offset >> 3);
    }

Avant le changement, je faisais mon camera_update juste avant le waitVSync et ce camera_update contenait mes appels à VDP_setScroll.

J'ai donc dû couper mon camera_update en deux. La partie mise à jour de la map se fait avant la mise à jour des personnages. Ce qui lui donne une frame de retart. La mise à jour du scroll se fait juste après le VSync.

Le sample de sonic devrait être corrigé pour éviter ce bug.


visible uniquement en ralenti extrême

Ca dépend de la vitesse de déplacement du personnage lors de la première frame du déplacement je pense. Si ton personnage accélère très vite, comme lors d'un saut, ça deviens très visible. Jette un coup d'oeil à ma vidéo.
avatar
Kivutar
Patient en incubation

Masculin Nombre de messages : 48
Age : 33
Localisation : Pertuis
Date d'inscription : 07/07/2017

http://www.lakka.tv

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Stef le Jeu 3 Aoû 2017 - 22:08

@Tryphon>En fait oui la position de la caméra doit se faire en fonction de la position du joueur mais comme juste au dessus il faut découper le traitement en 2 (la partie soft ou tu mets à jour le tilemap et la partie hard où tu modifies le scrolling).

En gros :
// mise à jour des objets et de la position du perso principal
physicUpdate();
// mise à jour de la map en fonction de la nouvelle position du perso
// attention à ce niveau le scroll hard est inchangé (seule le tilemap est modifié, et encore, de préférence en ram interne)
mapUpdate();

// mise à jour des sprites, la liste sera balancée au hard au prochain vblank
SPR_update();

// attente vblank
VDP_waitVSync();

// mise à jour du scroll (hardware)
scrollUpdate();

Et normalement ainsi c'est ok car le scroll et les sprites seront mise à jour dans le même vblank :)
Par simplification je ne l'ai pas fait dans mon exemple "sprite" mais je le modifierai car sinon tu peux avoir des soucis de synchro Wink
avatar
Stef
Infirmier

Masculin Nombre de messages : 3524
Age : 38
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Kivutar le Jeu 3 Aoû 2017 - 22:14

Dans cet ordre là, ça ne fonctionne pas pour moi.

Il faut vraiment que je fasse le mapUpdate avant de mettre à jour la position des personnages.

Ca semble vraiment pas logique.

Mais le résultat ne trompe pas.

Au fait, j'ai mis à jour la rom, la map est un peu plus grande, avec des plateformes mouvantes et des leviers.
avatar
Kivutar
Patient en incubation

Masculin Nombre de messages : 48
Age : 33
Localisation : Pertuis
Date d'inscription : 07/07/2017

http://www.lakka.tv

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Stef le Ven 4 Aoû 2017 - 17:17

Possible que ton mapUpdate prenne trop de temps et laisse passer une frame de temps en temps, du coup tes sprites seront desync si tu appelles SPR_update avant...
avatar
Stef
Infirmier

Masculin Nombre de messages : 3524
Age : 38
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Kivutar le Sam 5 Aoû 2017 - 12:07

Ah OK je comprend mieux.

C'est quo la façon la plus propre d'afficher du texte avec des sprites ? Je dois me servir des fonts ou je fais juste un sprite avec une lettre par animation ?

EDIT: Pour l'instant je fais avec des sprites.

Ca donne ça:

avatar
Kivutar
Patient en incubation

Masculin Nombre de messages : 48
Age : 33
Localisation : Pertuis
Date d'inscription : 07/07/2017

http://www.lakka.tv

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Stef le Sam 5 Aoû 2017 - 16:03

SGDK n'a pas vraiment d'aide pour écrire du texte avec les sprites. Tu dois le faire "à la main", par contre tu peux utiliser la font interne histoire de ne pas encombrer la VRAM avec plusieurs font (tu peux remplacer la font interne avec la tienne si celle par défaut ne convient pas).
Si tu regardes le code de SGDK pour l'affichage du texte tu verras cette boucle :
*d++ = TILE_FONTINDEX + (*s++ - 32);

le "TILE_FONTINDEX + (*s - 32)" permet de transformer un caractère (*s ici) par l'index du tile correspondant en VRAM.
donc en gros tu dois positionner tes sprites de 8x8 les uns derriere les autres en les faisant pointer sur le bon tile pour construire des mots.


Dernière édition par Stef le Dim 6 Aoû 2017 - 16:34, édité 1 fois
avatar
Stef
Infirmier

Masculin Nombre de messages : 3524
Age : 38
Localisation : Sevres
Date d'inscription : 04/04/2007

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Kivutar le Sam 5 Aoû 2017 - 22:02

OK merci, bon à savoir. Ca a l'air abordable. Si je sature ma VRAM, je passerai à cette méthode.
avatar
Kivutar
Patient en incubation

Masculin Nombre de messages : 48
Age : 33
Localisation : Pertuis
Date d'inscription : 07/07/2017

http://www.lakka.tv

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Hpman le Dim 6 Aoû 2017 - 3:49

Certains jeux gèrent ça "à l'envers", avec un sprite fixe et une mise à jour des tiles en vram quand le compteur change.

Sur un jeu avec peu de texte ça évite de charger une font complète.

Hpman
Patient contaminé

Masculin Nombre de messages : 125
Age : 39
Localisation : Lille
Date d'inscription : 22/08/2014

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Tryphon le Dim 6 Aoû 2017 - 9:41

+1 Hpman

De toute façon, s'il y a beaucoup de texte, tu passes pas par les sprites.

Tryphon
Infirmier

Masculin Nombre de messages : 3625
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par TOUKO le Dim 6 Aoû 2017 - 12:00

@Hpman a écrit:Certains jeux gèrent ça "à l'envers", avec un sprite fixe et une mise à jour des tiles en vram quand le compteur change.

Sur un jeu avec peu de texte ça évite de charger une font complète.
Et ça permet aussi de pas sacrifier une partie d'un plan pour faire un hud .
avatar
TOUKO
Docteur *
Docteur *

Masculin Nombre de messages : 11763
Age : 44
Localisation : LE MANS/MARSEILLE
Date d'inscription : 08/07/2010

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Kivutar le Lun 7 Aoû 2017 - 23:29

Le point de sauvegarde:

avatar
Kivutar
Patient en incubation

Masculin Nombre de messages : 48
Age : 33
Localisation : Pertuis
Date d'inscription : 07/07/2017

http://www.lakka.tv

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Tryphon le Mar 8 Aoû 2017 - 0:26

Toujours aussi mignon :)

Tryphon
Infirmier

Masculin Nombre de messages : 3625
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Kivutar le Mar 8 Aoû 2017 - 1:49

Merci !

Il y a une façon facile de gérer les sauvegardes dans SGDK?
avatar
Kivutar
Patient en incubation

Masculin Nombre de messages : 48
Age : 33
Localisation : Pertuis
Date d'inscription : 07/07/2017

http://www.lakka.tv

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Tryphon le Mar 8 Aoû 2017 - 9:28

Mmmh, aucune idée...

Tryphon
Infirmier

Masculin Nombre de messages : 3625
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par fourchette le Mar 8 Aoû 2017 - 9:50

Si tu parles de sauvegarde sur la cartouche, c'est très simple grâce à l'utilisation des fonctions commençant par SRAM_

Dans le principe,
- on active le mode lecture ou écriture
- suivant le mode, on lit ou écrit à la position voulue en mémoire un octet, mot ou entier long
- on désactive le mode d'accès

edit : penser à paramétrer le fichier rom_head.c


Dernière édition par fourchette le Mar 8 Aoû 2017 - 10:01, édité 2 fois

fourchette
Patient en incubation

Masculin Nombre de messages : 54
Age : 47
Localisation : L'ion
Date d'inscription : 10/10/2009

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Tryphon le Mar 8 Aoû 2017 - 9:58

Bon à savoir, merci :)

Tryphon
Infirmier

Masculin Nombre de messages : 3625
Age : 40
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Kivutar le Ven 11 Aoû 2017 - 18:49

J'ai avancé sur le jeu.

Je suis en train de refaire le costume du perso, ce sera une Miko.

Le point de sauvegarde aussi deviens plus élaboré avec une animation sympa où le perso bois du thé et croque un onigiri avec des sakura qui tombent du ciel (lol).

J'ai aussi ajouté plus de maps et de transitions entre les maps (vers le haut, vers le bas).

Par contre, ça segfault de temps en temps au changement de maps, et j'ai un souci avec ma camera qui arrive rarement, mais qui arrive quand même.

Je pense que j'ai besoin d'une bonne revue de code pour ce qui est de la gestion de la mémoire, et peut être aussi pour la camera et mes pentes. Y aurait il une bonne âme pour se faire un compte sur bitbucket et lire mon code SVP ?
avatar
Kivutar
Patient en incubation

Masculin Nombre de messages : 48
Age : 33
Localisation : Pertuis
Date d'inscription : 07/07/2017

http://www.lakka.tv

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par philip le Sam 12 Aoû 2017 - 2:48

Je n'utilise pas sprite engine, et je ne suis pas le plus doué de l'hôpital, mais pour la pente, peut-être inclure dans un tableau les valeurs Y. Et en fonction de X de ton personnage joueur, appliquer la valeur Y préenregistrés dans le tableau. Puis avec un pointeur sur tableau pour optimiser. Faudra que j'essaie de relever ce défi un jour. Pour regarder la vram il y a plusieurs ému comme:
http://gendev.spritesmind.net/forum/viewtopic.php?f=7&t=2264
avatar
philip
Docteur *
Docteur *

Masculin Nombre de messages : 1905
Age : 46
Localisation : 31350 déménagement terminé.
Date d'inscription : 10/04/2011

http://philip-md.blogspot.fr/

Revenir en haut Aller en bas

Re: WIP Jeu de plateforme MD

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Page 3 sur 3 Précédent  1, 2, 3

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum