SgdK Megadrive - Démo d'une gestion de YOrder
+5
ShiningBZH
philip
Stef
Hpman
Tryphon
9 participants
Page 2 sur 5
Page 2 sur 5 • 1, 2, 3, 4, 5
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Merci Touko !
Oui, l'algo est utilisable partout ( comme tout bon algo ^^ ), mais peut être encore optimisé.
Je diffuserai la source en rentrant chez moi.
Et puis, pourquoi pas, le retranscrire en 100% ASM 68000 !!!
CA serait un super exercice, mais je ne sais pas comment intégrer une fonction pur ASM dans un projet en C avec SgdK.
Oui, l'algo est utilisable partout ( comme tout bon algo ^^ ), mais peut être encore optimisé.
Je diffuserai la source en rentrant chez moi.
Et puis, pourquoi pas, le retranscrire en 100% ASM 68000 !!!
CA serait un super exercice, mais je ne sais pas comment intégrer une fonction pur ASM dans un projet en C avec SgdK.
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Bingo !!
Grace à vos conseils, j'ai explosé le record de sprites à l'écran et aussi optimisé l'algorithme de calcul de Pathfinding !!!
44 sprites à l'écran !!!
C'est un truc de fou ...
Avec la limite de sprite, pas mal d'ombrage sont shuntés, mais purée, ça file !!
J'ai suivi le conseil de Stef :
1 - Appel de la routine à toutes les frames.
2 - A chaque frame, je calcule les positions sur 2 unités jusqu'au nombre total des unités ( j'incrémente donc de 2 l'intervalle )
Aussi, à la création des unités et leur placement sur le BG, j'ai aussi crée un algorithme qui empêche les unités de se marcher sur les pieds ( pas moins de 32 px entre elles ).
Bref, je suis content !!
Petit aperçu de ma routine de Pathfinding.
Sur ce, apéro !!
A bientôt !
EDIT :
Après seulement 2 vues, j'embrasse mon ( mes ) haters préféré(s) !
Grace à vos conseils, j'ai explosé le record de sprites à l'écran et aussi optimisé l'algorithme de calcul de Pathfinding !!!
44 sprites à l'écran !!!
C'est un truc de fou ...
Avec la limite de sprite, pas mal d'ombrage sont shuntés, mais purée, ça file !!
J'ai suivi le conseil de Stef :
1 - Appel de la routine à toutes les frames.
2 - A chaque frame, je calcule les positions sur 2 unités jusqu'au nombre total des unités ( j'incrémente donc de 2 l'intervalle )
Aussi, à la création des unités et leur placement sur le BG, j'ai aussi crée un algorithme qui empêche les unités de se marcher sur les pieds ( pas moins de 32 px entre elles ).
Bref, je suis content !!
Petit aperçu de ma routine de Pathfinding.
- Code:
void PathIA(u8 i)
{
u8 j=0;
u16 DT=0;
// Copie coordonnées pour test position
MemPos.CoordX=Sprites[i].CoordX;
MemPos.CoordY=Sprites[i].CoordY;
//Tempo
MemPos.TempoSprite++;
u16 PX=fix16ToInt(MemPos.CoordX);
u16 PY=fix16ToInt(MemPos.CoordY);
// On traite la liste de 2 en 2
CurrentCalculMax+=2;
CurrentCalculMin=CurrentCalculMax-2;
if(CurrentCalculMin<1) CurrentCalculMin=0;
if(CurrentCalculMax>CurrentSprite)
{
CurrentCalculMax=2;
CurrentCalculMin=0;
}
// Test de position
if (MemPos.TempoSprite>=MemPos.TempoSpriteMax)
{
for (j=CurrentCalculMin;j<CurrentCalculMax;j++)
{
u16 P1X=fix16ToInt(Sprites[j].CoordX);
u16 P1Y=fix16ToInt(Sprites[j].CoordY);
DT=abs(PX-P1X)+ abs(PY-P1Y);
if (Sprites[i].Block==0 && i!=j)
{
if (DT<=ScaleUnit) Sprites[i].Block=1;
// Test condition
if (Sprites[i].Block==1)
{
DT=abs((PX+DXUnit)-P1X)+ abs(PY-P1Y);
if (DT>ScaleUnit) {Sprites[i].Direction=6;Sprites[i].Block=0;goto sba;}
DT=abs((PX-DXUnit)-P1X)+ abs(PY-P1Y);
if (DT>ScaleUnit) {Sprites[i].Direction=4;Sprites[i].Block=0;goto sba;}
DT=abs((PX)-P1X)+ abs((PY+DXUnit)-P1Y);
if (DT>ScaleUnit) {Sprites[i].Direction=2;Sprites[i].Block=0;goto sba;}
DT=abs((PX)-P1X)+ abs((PY-DXUnit)-P1Y);
if (DT>ScaleUnit) {Sprites[i].Direction=8;Sprites[i].Block=0;goto sba;}
DT=abs((PX+DXUnit)-P1X)+ abs((PY+DXUnit)-P1Y);
if (DT>ScaleUnit) {Sprites[i].Direction=26;Sprites[i].Block=0;goto sba;}
DT=abs((PX-DXUnit)-P1X)+ abs((PY-DXUnit)-P1Y);
if (DT>ScaleUnit) {Sprites[i].Direction=84;Sprites[i].Block=0;goto sba;}
DT=abs((PX-DXUnit)-P1X)+ abs((PY+DXUnit)-P1Y);
if (DT>ScaleUnit) {Sprites[i].Direction=24;Sprites[i].Block=0;goto sba;}
DT=abs((PX+DXUnit)-P1X)+ abs((PY-DXUnit)-P1Y);
if (DT>ScaleUnit) {Sprites[i].Direction=86;Sprites[i].Block=0;goto sba;}
}
}
}
sba:;
MemPos.TempoSprite=0;
}
Sprites[i].TempoSprite++;
if (Sprites[i].TempoSprite>Sprites[i].TempoSpriteMax)
{
//Randomize(0,8,0,0);
RND[0]++;
if (RND[0]>7) RND[0]=0;
switch (RND[0])
{
case 0:
{
Sprites[i].Direction=8;
break;
}
case 1:
{
Sprites[i].Direction=86;
break;
}
case 2:
{
Sprites[i].Direction=6;
break;
}
case 3:
{
Sprites[i].Direction=26;
break;
}
case 4:
{
Sprites[i].Direction=2;
break;
}
case 5:
{
Sprites[i].Direction=24;
break;
}
case 6:
{
Sprites[i].Direction=4;
break;
}
case 7:
{
Sprites[i].Direction=84;
break;
}
}
// Init Tempo
Sprites[i].TempoSprite=0;
Sprites[i].Block=0;
}
// Test Limite
if (Sprites[i].CoordX>FIX16(300))
{
if (Sprites[i].Direction==6) Sprites[i].Direction=4;
if (Sprites[i].Direction==86) Sprites[i].Direction=84;
if (Sprites[i].Direction==26) Sprites[i].Direction=24;
}
if (Sprites[i].CoordX<FIX16(5))
{
if (Sprites[i].Direction==24) Sprites[i].Direction=26;
if (Sprites[i].Direction==4) Sprites[i].Direction=6;
if (Sprites[i].Direction==84) Sprites[i].Direction=86;
}
if (Sprites[i].CoordY>FIX16(200))
{
if (Sprites[i].Direction==24) Sprites[i].Direction=84;
if (Sprites[i].Direction==2) Sprites[i].Direction=8;
if (Sprites[i].Direction==26) Sprites[i].Direction=86;
}
if (Sprites[i].CoordY<FIX16(5))
{
if (Sprites[i].Direction==8) Sprites[i].Direction=2;
if (Sprites[i].Direction==84) Sprites[i].Direction=24;
if (Sprites[i].Direction==86) Sprites[i].Direction=26;
}
}
Sur ce, apéro !!
A bientôt !
EDIT :
Après seulement 2 vues, j'embrasse mon ( mes ) haters préféré(s) !
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Ca donne quoi niveau occupation CPU ?
Hpman- Patient contaminé
- Nombre de messages : 679
Age : 47
Localisation : Lille
Date d'inscription : 22/08/2014
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Bon j'ai mis un petit pouce en l'air histoire de compenserEDIT :
Après seulement 2 vues, j'embrasse mon ( mes ) haters préféré(s) !
Edit: en voyant ton code (et je sais pas si le compilo C de sgdk le fait) le petit switch/case des familles à optimiser en jump table
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
T'es trop choux Toukonet !
UnG Pastis Olive, unG !
Edit: en voyant ton code (et je sais pas si le compilo C de sgdk le fait) le petit switch/case des familles à optimiser en jump table
Rien Compris !!
UnG Pastis Olive, unG !
Edit: en voyant ton code (et je sais pas si le compilo C de sgdk le fait) le petit switch/case des familles à optimiser en jump table
Rien Compris !!
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
D'habitude je like pas tes vidéos, faudrait que j'y passe la journée tellement tu en sors ,mais là aucune raison de pas le faire .
En gros, un switch/case c'est pratique, mais putain de lent si c'est pas optimisé .Edit: en voyant ton code (et je sais pas si le compilo C de sgdk le fait) le petit switch/case des familles à optimiser en jump table
Rien Compris !!
Dernière édition par TOUKO le Lun 29 Mai 2017 - 19:50, édité 1 fois
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Vetea a écrit:Bingo !!
Grace à vos conseils, j'ai explosé le record de sprites à l'écran et aussi optimisé l'algorithme de calcul de Pathfinding !!!
44 sprites à l'écran !!!
C'est un truc de fou ...
Avec la limite de sprite, pas mal d'ombrage sont shuntés, mais purée, ça file !!
Ah ah énorme ! Un truc de fou , et dire qu'il y avait des ralentis sur le premier opus avec une dizaine d'ennemis !
Tu as essayé d'intégrer les animations de mort des personnages avec plein de sang et de faire tirer Papi pour voir ?
ShiningBZH- Infirmier
- Nombre de messages : 3270
Age : 53
Localisation : Ploubazlanec
Date d'inscription : 03/01/2015
Re: SgdK Megadrive - Démo d'une gestion de YOrder
T'as des haters ?
Tryphon- Docteur *
- Nombre de messages : 26166
Age : 47
Localisation : Un peu plus à l'Ouest
Date d'inscription : 23/07/2016
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Eh, oh, on est pas sur snes, ça passera pasTu as essayé d'intégrer les animations de mort des personnages avec plein de sang et de faire tirer Papi pour voir ?
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Merci copain !
En fait, c'est juste du coding pour le fun, en parallèle avec notre projet commun avec AlekMaul.
Oui ça serait bien à faire d'intégrer un moteur de bullet avec collisions histoire de mettre à mal ce pauvre 68000 !!
En fait, c'est juste du coding pour le fun, en parallèle avec notre projet commun avec AlekMaul.
Oui ça serait bien à faire d'intégrer un moteur de bullet avec collisions histoire de mettre à mal ce pauvre 68000 !!
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Ouai, hpman qui est jaloux de pas faire pareil sur NGTryphon a écrit: T'as des haters ?
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Tryphon a écrit: T'as des haters ?
Et oui Tryphon !
A chaque nouvelle vidéo !
Mais la gloire d'un homme se mesure aussi à la hauteur de ses ennemis.
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
J'ai demandé a des potes de mettre un pouce en l'air pour faire transpirer ton hater
ShiningBZH- Infirmier
- Nombre de messages : 3270
Age : 53
Localisation : Ploubazlanec
Date d'inscription : 03/01/2015
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Le peuple veut savoir!Vetea a écrit:Aucune idée ! ^^
Hpman- Patient contaminé
- Nombre de messages : 679
Age : 47
Localisation : Lille
Date d'inscription : 22/08/2014
Re: SgdK Megadrive - Démo d'une gestion de YOrder
En fait, je ne sais pas comment faire pour donner la charge du 68000 ...
Je sais afficher le FPS, oui, mais la charge euh .. Je sais pas !!
EDIT :
Merci copain !!
Putain 8 pouces en l'air !! J'en ai jamais eu autant !!
Je me suis "auto poucé" !!
Je sais afficher le FPS, oui, mais la charge euh .. Je sais pas !!
EDIT :
Merci copain !!
Putain 8 pouces en l'air !! J'en ai jamais eu autant !!
Je me suis "auto poucé" !!
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
J'suis le 10ème... j'ai droit à un pastis ?Vetea a écrit:
EDIT :
Putain 8 pouces en l'air !! J'en ai jamais eu autant !!
vincent2105- Patient incurable
- Nombre de messages : 1381
Age : 44
Localisation : 82
Date d'inscription : 17/12/2013
Re: SgdK Megadrive - Démo d'une gestion de YOrder
J'ai résolu le soucis d'ombrage qui manquait !
En fait, il faut donner le nombre exact de Bloc de Tile à la VRAM lors de l'initialisation du Sprite Engine.
Du coup avec les ombres, c'est encore plus impressionnant !!
En fait, il faut donner le nombre exact de Bloc de Tile à la VRAM lors de l'initialisation du Sprite Engine.
- Code:
// Init Limite Nombre Sprites
MaxSprite=44;
CurrentSprite=MaxSprite>>1;
// Init Sprite Engine
SPR_init(80, MaxSprite<<4, 0);
Du coup avec les ombres, c'est encore plus impressionnant !!
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
vincent2105 a écrit:J'suis le 10ème... j'ai droit à un pastis ?Vetea a écrit:
EDIT :
Putain 8 pouces en l'air !! J'en ai jamais eu autant !!
Sans problème Vincent !!
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Il pense que tu peux mettre les valeurs de la variable Sprites[i].Direction, dans un tableau (ou un pointeur).Vetea a écrit:T'es trop choux Toukonet !
UnG Pastis Olive, unG !
Edit: en voyant ton code (et je sais pas si le compilo C de sgdk le fait) le petit switch/case des familles à optimiser en jump table
Rien Compris !!
Sprites[i].Direction=8;
Sprites[i].Direction=86;
Sprites[i].Direction=6;
Sprites[i].Direction=26;
Sprites[i].Direction=2;
Sprites[i].Direction=24;
Sprites[i].Direction=4;
Sprites[i].Direction=84;
Si jamais cette variable est bien prédéfinis... A moins que tu utilise une commande de hasard ?
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Ce sont des vecteurs de direction qui donnent la trajectoire à suivre à l'IA.
Oui en effet, on peut utiliser un pointeur.
Oui en effet, on peut utiliser un pointeur.
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Dernière vidéo de la soirée !!
Cette fois ci :
- 3 types d'unités différentes avec leur propres vitesses, etc, etc ...
- Ajout des ombres.
- 44 sprites au total !
Il y a peu de clignotement, voir presque aucun ! On peut voir certaine ombre "glitcher".
Paprium n'a qu'à bien se tenir !
La Petite démo rien que pour vous :
https://www.dropbox.com/s/94fxov6bl0e7rhx/PapiPathDemo.bin?dl=0
(Papi peut traverser les unités ! )
@ AlekMaul, voila ce que je veux !!
Cette fois ci :
- 3 types d'unités différentes avec leur propres vitesses, etc, etc ...
- Ajout des ombres.
- 44 sprites au total !
Il y a peu de clignotement, voir presque aucun ! On peut voir certaine ombre "glitcher".
Paprium n'a qu'à bien se tenir !
La Petite démo rien que pour vous :
https://www.dropbox.com/s/94fxov6bl0e7rhx/PapiPathDemo.bin?dl=0
(Papi peut traverser les unités ! )
@ AlekMaul, voila ce que je veux !!
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
C'est le genre de demo qui doit etre assez fun a coder .
Par contre j'ai pas l'impression que le Yorder fonctionne sur les videos?
Par contre j'ai pas l'impression que le Yorder fonctionne sur les videos?
upsilandre- Interne
- Nombre de messages : 5138
Age : 49
Localisation : val de marne 94
Date d'inscription : 31/05/2015
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Oui en effet Upsilandre !
C'est vraiment des petites routines que je code pour de futurs travaux.
Et oui en effet, sur les dernières vidéos c'est désactivé au bénéfice d'un algorithme de Pathfinding qui empêche les unités ennemis de se marcher dessus et donc, de ne pas faire appel à la routine de Yorder. :)
J'ose pas tout activer sous peine de tout faire péter !
C'est vraiment des petites routines que je code pour de futurs travaux.
Et oui en effet, sur les dernières vidéos c'est désactivé au bénéfice d'un algorithme de Pathfinding qui empêche les unités ennemis de se marcher dessus et donc, de ne pas faire appel à la routine de Yorder. :)
J'ose pas tout activer sous peine de tout faire péter !
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
arg, pas bôôôôVetea a écrit:
DT=abs((PX+DXUnit)-P1X)+ abs(PY-P1Y);
if (DT>ScaleUnit) {Sprites[i].Direction=6;Sprites[i].Block=0;goto sba;}
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Gna gna gna !!
C'est un Bra.s d'honneur !
Et toc.
C'est un Bra.s d'honneur !
Et toc.
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
C'est un Bra.s d'honneur !
J'ose pas tout activer sous peine de tout faire péter !
Quoi, tu nous vends du rêve, et tu nous dis qu'en fait tu as les mêmes baloches que papy, flasques !!!
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
Defi Touko relevé et accompli !
La vidéo est mise en ligne actuellement ...
Nanméo l'autre !
La vidéo est mise en ligne actuellement ...
Nanméo l'autre !
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
! DEFI TOUKO !
Bon, le poète 8 bits de la PCE-Engine, le Prince mal rasé latino des projets perdus m'avait lancé un défi dans sa morne habituelle.
>> Quoi, tu nous vends du rêve, et tu nous dis qu'en fait tu as les mêmes baloches que papy, flasques !!!
Ce vieux brigand ne savait pas à qui il s'adressait ...
N'est pas Papi Commando qui veut !!
- 44 Sprites.
- Traitement YOrder.
- Gestion Pathfinding.
- Gestion Collision entre chaque sprite.
- Gestion des 4 différents types de Sprites.
Tout ça avec un bête 68000, SgdK et le savoir faire des Studio Vetea !
Et comme je suis bon prince, voici la ROM
https://www.dropbox.com/s/ggcdx5d2nrmetpm/DefiTouko.bin?dl=0
Bon alors, on se la pète moins heinGGG ????
Pour la peine, je te donne jusqu'à Noel pour finir le jeu de Baston de la mort qui tue même Paprium : Chuck No Rice !!
Allez au boulot Touko, les balloches mec !
Bon, le poète 8 bits de la PCE-Engine, le Prince mal rasé latino des projets perdus m'avait lancé un défi dans sa morne habituelle.
>> Quoi, tu nous vends du rêve, et tu nous dis qu'en fait tu as les mêmes baloches que papy, flasques !!!
Ce vieux brigand ne savait pas à qui il s'adressait ...
N'est pas Papi Commando qui veut !!
- 44 Sprites.
- Traitement YOrder.
- Gestion Pathfinding.
- Gestion Collision entre chaque sprite.
- Gestion des 4 différents types de Sprites.
Tout ça avec un bête 68000, SgdK et le savoir faire des Studio Vetea !
Et comme je suis bon prince, voici la ROM
https://www.dropbox.com/s/ggcdx5d2nrmetpm/DefiTouko.bin?dl=0
Bon alors, on se la pète moins heinGGG ????
Pour la peine, je te donne jusqu'à Noel pour finir le jeu de Baston de la mort qui tue même Paprium : Chuck No Rice !!
Allez au boulot Touko, les balloches mec !
Invité- Invité
Re: SgdK Megadrive - Démo d'une gestion de YOrder
bon même si ça ramouille un peu, tu vois ça n'a pas explosé, et je suis sur qu'avec un peu d'optimisation tu peux rendre tout ça bien fluide .
Bon je m'incline, vetea est trop fort
Lol, paprium ça m'étonnerait fort mais moi oui il me tuePour la peine, je te donne jusqu'à Noel pour finir le jeu de Baston de la mort qui tue même Paprium : Chuck No Rice !!
You're welcome manHey !! It's done Touko !!
Invité- Invité
Page 2 sur 5 • 1, 2, 3, 4, 5
Sujets similaires
» [ Demo Disponible !] - Papi Commando Tennis Megadrive - SGDK
» Sgdk 0.95 compilateur mégadrive
» Sgdk - Sega Megadrive / Sprite
» [MEGADRIVE][SGDK]Wrath of the demon.
» BIERE PONG MegaDrive SGDK
» Sgdk 0.95 compilateur mégadrive
» Sgdk - Sega Megadrive / Sprite
» [MEGADRIVE][SGDK]Wrath of the demon.
» BIERE PONG MegaDrive SGDK
Page 2 sur 5
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum