yoomp
5 participants
Page 1 sur 1
yoomp
Je suis hyper admiratif du boulot fait sur atari 800 avec le jeu Yoomp et je me demandais comment les gars avait bien pu faire.
Vous avez une idée des algos et astuces utilisés ?
Vous avez une idée des algos et astuces utilisés ?
Re: yoomp
Ah sympa ce jeu !
L'astuce c'est une bête table de mappage en fait.
Tu crées une table de la taille de l'écran que tu veux afficher, on va prendre du 160x100
et dedans tu mets les coordonnées X et Y des textures que tu veux afficher.
Pour le précalcule tu peux mettre n'importe quelle forme, pour une tunnel tu precalc en faisant du raycasting vers un cylindre infini.
En gros tu parcours chaque pixel de ton ecran et tu l'envoit vers le fond de l'écran avec la perspective, c'est les memes formules que pour la projection mais inversée du coup
A = X+coef*X/Z un truc comme ça de memoire pour la projection.
Tu vas obtenir 3 composantes X, Y, Z et tu calcules les coordonnées du pixel correspondant de la texture que tu devrais afficher U,V
Pour l'affichage, t'as juste à parcourir ta table, recuperer les valeurs U et V, et 'd'aller chercher la couleur dans la texture ^^
Pour les diférence de texture, tu fais une autre table en gardant la coordonnée Z épurée.
Tu utilise un timer genre compteur
Tu ajoutes le compteur à la coordonnée Z du pixel que t'es en train d'afficher et tu te décalles dans ta table de niveau d'autant.
Pour le niveau, on va dire que sur une périphérie on mets 8 textures, donc tu fais une table
de 8 x taille
Si j'ai des texture de type 1 2 3 et 0 pas de texture j'pourrai avoir une truc comme ça
1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 1 2 1 1 1 1 1
1 1 1 1 1 3 1 1
...
Donc en gros t'imagines une feuille de papier que tu enroule pour faire un tube, et tu regardes dans un bout, ça sera la vision de ta table sur le tunnel ^^
Je sais pas si ça a été clair mais tout est basé sur une table de précalcul sur 3 coordonnées en gros
L'astuce c'est une bête table de mappage en fait.
Tu crées une table de la taille de l'écran que tu veux afficher, on va prendre du 160x100
et dedans tu mets les coordonnées X et Y des textures que tu veux afficher.
Pour le précalcule tu peux mettre n'importe quelle forme, pour une tunnel tu precalc en faisant du raycasting vers un cylindre infini.
En gros tu parcours chaque pixel de ton ecran et tu l'envoit vers le fond de l'écran avec la perspective, c'est les memes formules que pour la projection mais inversée du coup
A = X+coef*X/Z un truc comme ça de memoire pour la projection.
Tu vas obtenir 3 composantes X, Y, Z et tu calcules les coordonnées du pixel correspondant de la texture que tu devrais afficher U,V
Pour l'affichage, t'as juste à parcourir ta table, recuperer les valeurs U et V, et 'd'aller chercher la couleur dans la texture ^^
Pour les diférence de texture, tu fais une autre table en gardant la coordonnée Z épurée.
Tu utilise un timer genre compteur
Tu ajoutes le compteur à la coordonnée Z du pixel que t'es en train d'afficher et tu te décalles dans ta table de niveau d'autant.
Pour le niveau, on va dire que sur une périphérie on mets 8 textures, donc tu fais une table
de 8 x taille
Si j'ai des texture de type 1 2 3 et 0 pas de texture j'pourrai avoir une truc comme ça
1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1
1 1 2 1 1 1 1 1
1 1 1 1 1 3 1 1
...
Donc en gros t'imagines une feuille de papier que tu enroule pour faire un tube, et tu regardes dans un bout, ça sera la vision de ta table sur le tunnel ^^
Je sais pas si ça a été clair mais tout est basé sur une table de précalcul sur 3 coordonnées en gros
maxoojc- Infirmier
- Nombre de messages : 4472
Age : 48
Localisation : Green hill
Date d'inscription : 15/08/2010
Re: yoomp
Si si, tu es très clair. :)
Ça doit quand même sacrement bourriner un Atari 800
Ça fait un baille que j'ai rien codé sur CPC et j'ai jamais été le meilleur du monde en opti mais j'imaginais pas autant d'accès ram mémoire à cette vitesse.
Il n'aurait pas des sprites en hardware sur atari ? pour la boule ?
Ça doit quand même sacrement bourriner un Atari 800
Ça fait un baille que j'ai rien codé sur CPC et j'ai jamais été le meilleur du monde en opti mais j'imaginais pas autant d'accès ram mémoire à cette vitesse.
Il n'aurait pas des sprites en hardware sur atari ? pour la boule ?
Re: yoomp
Je suis surpris de voir la capacité du 800 à afficher une image complete avec cette résolution.
Certes c'est de l'adressage mais fuat quand même afficher le tout ^^
Je connais pas bien les 800 mais si les proc étaient couplés avec un dma chez atari ocmme chez commodore c'était bien dans ce but, balancer un max de donnée graphique pendant qu'on peut faire tourner les proc sur autre chose.
Donc pour la boule je pense que c'est un sprite gérer par une puce comme ça, en tout cas le jeu rends bien pour la bécane
Certes c'est de l'adressage mais fuat quand même afficher le tout ^^
Je connais pas bien les 800 mais si les proc étaient couplés avec un dma chez atari ocmme chez commodore c'était bien dans ce but, balancer un max de donnée graphique pendant qu'on peut faire tourner les proc sur autre chose.
Donc pour la boule je pense que c'est un sprite gérer par une puce comme ça, en tout cas le jeu rends bien pour la bécane
maxoojc- Infirmier
- Nombre de messages : 4472
Age : 48
Localisation : Green hill
Date d'inscription : 15/08/2010
Re: yoomp
C'est sur qu'avec un DMA la copie irait plus vite mais si on doit avoir un table de remappage des adresses, j'ai du mal à voir comment un DMA peut afficher le tube.
Je me demande si c'est juste possible de faire ça sur CPC.
A première vue je me dit :
- en mettant l'écran en mode 0
- en divisant la résolution par deux pour que chaque accès mémoire écran n'ai qu'une couleur
- en faisant du fliping d'écran
peut être qu'on aurait un fps potable sur CPC
Mais ça me semble quand même balaise.
Vue de mon petit niveau je veux dire.
Parce que la demonde batman par exemple, me met dans le vents de 10 siècles :)
Je me demande si c'est juste possible de faire ça sur CPC.
A première vue je me dit :
- en mettant l'écran en mode 0
- en divisant la résolution par deux pour que chaque accès mémoire écran n'ai qu'une couleur
- en faisant du fliping d'écran
peut être qu'on aurait un fps potable sur CPC
Mais ça me semble quand même balaise.
Vue de mon petit niveau je veux dire.
Parce que la demonde batman par exemple, me met dans le vents de 10 siècles :)
Re: yoomp
La ou ca pourrait être encore plus impressionnant c'est si ça tourne sur un atari 800 !
voir 400 xD
Faire tenir tout ça dans 8kb c'est plutôt énorme.
La résolution de l'atari en plus de 2 couleurs c'est 320x192... J'ai été scié quand j'ai vu ça ^^
On voit bien que les pixels sont au moins doublés et qu'il y a plus de 4 couleurs donc la résolution la plus probable c'est 80x192 avec la puce GTIA.
Les textures sont pas énormes ni trop variées mais il doit y en avoir 4 ou 5 et la taille genre 8x8.
En vérifiant les atari serié 800 et derivés n'ont ni dma ni blitter, donc exit les transferts multitask entre les bus. C'est de l'adressage direct.
Pas mal pas mal :)
Sinon je viens de voir la démo de batman group sur cpc, c'est vrai que c'est hallucinant. Au niveau des effets rien d'extraordinaire mais c'est impressionnant ce que l'amstrad peut faire... Je ne connaissais pas ces capacités car ce genre de démo je les aies vu naitre sur amiga et ST, bien plus évolués quand même oO
Pour les tables de mappage, tu peux utiliser l'adressage direct que si tu n'as qu'une texture et pas de mouvement dans tes animations, lorsque tu adresses tu peux pas clipper sur ta texture en X et Y vu que t'as une adresse.
Le mieux c'est d'avoir X et Y dans des tables, d'utiliser la formule (X+decalageX)+ largeur * (Y+decalageY) et de précalculer toutes les valeurs pour X+decalageX et (Y+decalageY)*largeur.
Tu te retrouve à juste avoir une 3 additions à faire et 2 modulos faisable en masquage de bits car t'auras fait des textures avec une largeur en puissance de 2 :p
Pour un fps, la zone d'affichage risque d'etre trop grande pour avoir une résolution potable.
Donc tu pourras pas trop utiliser de technique la dessus.
En flippant tes tables, seulement sur l'axe vertical, si tu fais su l'axe horizontal aussi t'as des calculs en trop pour la symétrie, tu gagnes dejà la moitié des adressages, mais l'affichage restera identique.
A moins de baisser la resolution tu risque d'avoir un truc a1image/s :p ou alors en 40x40.
L'amstrad est quand meme limité par ses capacités bien que je me dise que si à l'epoque ils avaient utiliser ne serait ce que les effets de la démo la, ben ya des jeux ils auraient flasher ^^
Enfin ca reste tout à fait plausible moyennant une augmentation relative de la résolution ^^
J'te laisse méditer la dessus : http://cpcrulez.fr/GamesTest/view.php?game=wolf_3D_PREVIEW
:)
Edit: Tiens j'ai trouvé ça aussi, pas mal pour la ptite bête :)
voir 400 xD
Faire tenir tout ça dans 8kb c'est plutôt énorme.
La résolution de l'atari en plus de 2 couleurs c'est 320x192... J'ai été scié quand j'ai vu ça ^^
On voit bien que les pixels sont au moins doublés et qu'il y a plus de 4 couleurs donc la résolution la plus probable c'est 80x192 avec la puce GTIA.
Les textures sont pas énormes ni trop variées mais il doit y en avoir 4 ou 5 et la taille genre 8x8.
En vérifiant les atari serié 800 et derivés n'ont ni dma ni blitter, donc exit les transferts multitask entre les bus. C'est de l'adressage direct.
Pas mal pas mal :)
Sinon je viens de voir la démo de batman group sur cpc, c'est vrai que c'est hallucinant. Au niveau des effets rien d'extraordinaire mais c'est impressionnant ce que l'amstrad peut faire... Je ne connaissais pas ces capacités car ce genre de démo je les aies vu naitre sur amiga et ST, bien plus évolués quand même oO
Pour les tables de mappage, tu peux utiliser l'adressage direct que si tu n'as qu'une texture et pas de mouvement dans tes animations, lorsque tu adresses tu peux pas clipper sur ta texture en X et Y vu que t'as une adresse.
Le mieux c'est d'avoir X et Y dans des tables, d'utiliser la formule (X+decalageX)+ largeur * (Y+decalageY) et de précalculer toutes les valeurs pour X+decalageX et (Y+decalageY)*largeur.
Tu te retrouve à juste avoir une 3 additions à faire et 2 modulos faisable en masquage de bits car t'auras fait des textures avec une largeur en puissance de 2 :p
Pour un fps, la zone d'affichage risque d'etre trop grande pour avoir une résolution potable.
Donc tu pourras pas trop utiliser de technique la dessus.
En flippant tes tables, seulement sur l'axe vertical, si tu fais su l'axe horizontal aussi t'as des calculs en trop pour la symétrie, tu gagnes dejà la moitié des adressages, mais l'affichage restera identique.
A moins de baisser la resolution tu risque d'avoir un truc a1image/s :p ou alors en 40x40.
L'amstrad est quand meme limité par ses capacités bien que je me dise que si à l'epoque ils avaient utiliser ne serait ce que les effets de la démo la, ben ya des jeux ils auraient flasher ^^
Enfin ca reste tout à fait plausible moyennant une augmentation relative de la résolution ^^
J'te laisse méditer la dessus : http://cpcrulez.fr/GamesTest/view.php?game=wolf_3D_PREVIEW
:)
Edit: Tiens j'ai trouvé ça aussi, pas mal pour la ptite bête :)
maxoojc- Infirmier
- Nombre de messages : 4472
Age : 48
Localisation : Green hill
Date d'inscription : 15/08/2010
Re: yoomp
Tu m'étonnes, c'est malin avec tout ça, j'ai envie de reprendre le démomaking ><
J'vais jamais avoir assez d'une vie pour faire tout ce que j'veux c'est terrible
Du coup après j'ai enchainner sur les démos amiga, nostalgie quoi ^^
J'vais jamais avoir assez d'une vie pour faire tout ce que j'veux c'est terrible
Du coup après j'ai enchainner sur les démos amiga, nostalgie quoi ^^
maxoojc- Infirmier
- Nombre de messages : 4472
Age : 48
Localisation : Green hill
Date d'inscription : 15/08/2010
Re: yoomp
J'étais graphiste à mes heures perdus jusqu'en 96.
J'avais participer à la saturne96 de juillet mais bon avec un dessin pas fini et mes potes qui n'avaient pas captés du coup on a tous voté pour tenshu, il est arrivé second avec son graph ^^
Je trainais pas mal avec des mecs de syndrome, cocoon et synaps.
La bonne époque. A la saturne avec kanda on avait présenter une démo faite en amos et en 2h :p Musique faites par mes soins, j'en ai encore les oreillles qui grinces c'était ignoble mais on s'est bien marrés et on est arrivés 3ieme ... sur 4
Après on devait travailler sur un projet sur amiga, sorte de doom avant l'heure. Mais on s'est plus trop recroisé et l'école après quoi
Du coup dans l'ombre j'ai commencé à programmer sur pc, asm et pascal, je faisais des démos dans les salles de cours et j'ai trouvé quelques adeptes mais j'ai rien sorti d'officiel, bien que certains effets étaient plutot avant gardistes... J'en ressort juste content d'avoir découvert tout ça et d'avoir appris toute la logique derrière les démos :)
Ca me manque c'était trop bon, j'étais un spécialiste des effets en 2D, la 3D avec l'avancée des cartes graphiques 3D je voyais pas l'interret d"afficher du mesh, aucun challenge
Faire un tunnel en 2D qui bouge dans tous les sens ça c'était du vrai !!! La preuve on voit ça sur a800 et on s'emmerveille encore :p
Donc sinon j'ai trainer sous le pseudo de middle et après Jayce` et la celui là je le garde car jayce c'est trop courant et c'est plus dans l'intimité maintenant xD
Enfin voilà grosse note de nostalgie, là j'ai plus envie de faire de php du coup mais plutôt de ressortir le compilo asm Si ca tente du monde !!!
J'avais participer à la saturne96 de juillet mais bon avec un dessin pas fini et mes potes qui n'avaient pas captés du coup on a tous voté pour tenshu, il est arrivé second avec son graph ^^
Je trainais pas mal avec des mecs de syndrome, cocoon et synaps.
La bonne époque. A la saturne avec kanda on avait présenter une démo faite en amos et en 2h :p Musique faites par mes soins, j'en ai encore les oreillles qui grinces c'était ignoble mais on s'est bien marrés et on est arrivés 3ieme ... sur 4
Après on devait travailler sur un projet sur amiga, sorte de doom avant l'heure. Mais on s'est plus trop recroisé et l'école après quoi
Du coup dans l'ombre j'ai commencé à programmer sur pc, asm et pascal, je faisais des démos dans les salles de cours et j'ai trouvé quelques adeptes mais j'ai rien sorti d'officiel, bien que certains effets étaient plutot avant gardistes... J'en ressort juste content d'avoir découvert tout ça et d'avoir appris toute la logique derrière les démos :)
Ca me manque c'était trop bon, j'étais un spécialiste des effets en 2D, la 3D avec l'avancée des cartes graphiques 3D je voyais pas l'interret d"afficher du mesh, aucun challenge
Faire un tunnel en 2D qui bouge dans tous les sens ça c'était du vrai !!! La preuve on voit ça sur a800 et on s'emmerveille encore :p
Donc sinon j'ai trainer sous le pseudo de middle et après Jayce` et la celui là je le garde car jayce c'est trop courant et c'est plus dans l'intimité maintenant xD
Enfin voilà grosse note de nostalgie, là j'ai plus envie de faire de php du coup mais plutôt de ressortir le compilo asm Si ca tente du monde !!!
maxoojc- Infirmier
- Nombre de messages : 4472
Age : 48
Localisation : Green hill
Date d'inscription : 15/08/2010
Re: yoomp
Hé non... je pense que Yoomp ne fonctionne pas sur un 400/800 de base non modifié.maxoojc a écrit:La ou ca pourrait être encore plus impressionnant c'est si ça tourne sur un atari 800 !
voir 400 xD
Faire tenir tout ça dans 8kb c'est plutôt énorme.
La résolution de l'atari en plus de 2 couleurs c'est 320x192... J'ai été scié quand j'ai vu ça ^^
http://atari.fandal.cz/files/images/games/y/yoomp!.png
On voit bien que les pixels sont au moins doublés et qu'il y a plus de 4 couleurs donc la résolution la plus probable c'est 80x192 avec la puce GTIA.
Les textures sont pas énormes ni trop variées mais il doit y en avoir 4 ou 5 et la taille genre 8x8.
En vérifiant les atari serié 800 et derivés n'ont ni dma ni blitter, donc exit les transferts multitask entre les bus. C'est de l'adressage direct.
Pas mal pas mal :)
Il faut un minimum de 64K pour qu'il tourne!
pas sûr qu'il soit compatible...même avec une extension RAM (à vérifier)
http://yoomp.atari.pl/development.htmTechnical details
·
game works on a standard 64-KB Atari thanks to efficient compression - the real memory footprint is over 80 KB.
·
game engine works in 128x96 pixels resolution (Graphics 7, ANTIC mode 14) in 2 frames
·
stereo POKEY is automatically detected. If available, the game uses a pseudo-stereo effect for music, and the sound effects use a left-right panning effect.
Re: yoomp
ah ouep exact, ca explique un peu mieux mon ressenti mais bon belle prouesse pour une becane pareil meme si faut que ce soit déjà une belle upgrade de l'origine :)
maxoojc- Infirmier
- Nombre de messages : 4472
Age : 48
Localisation : Green hill
Date d'inscription : 15/08/2010
Re: yoomp
oui, à noter qu'il fonctionne très bien sur 600XL(+1064), 800XL et tout les XE de base!
pas besoin d'upgrade
pas besoin d'upgrade
Re: yoomp
Toujours des mots balancé comme ça sans avoir essayé quoi que ce soit mais:
Et si on découpe l'écriture en vram dans des vignettes genre 8x8 ou 16x16 on devrait avoir pas mal d'opti dans les tables de remap ou les parcours d'index.
non ?
Je serais bien tenté de faire une "image" 96x96 des index de remap pour voir les zones flippable.
...
Ah la mythique saturne 96. Je n'y étais pas mais je regrette :)
Et si on découpe l'écriture en vram dans des vignettes genre 8x8 ou 16x16 on devrait avoir pas mal d'opti dans les tables de remap ou les parcours d'index.
non ?
Je serais bien tenté de faire une "image" 96x96 des index de remap pour voir les zones flippable.
...
Ah la mythique saturne 96. Je n'y étais pas mais je regrette :)
Re: yoomp
Ouep tu peux ptet gagner du temps, suivant la vitese du bus ^^
Vu la quantité de mémoire qu'il faut pour faire tourner le jeu, je penses qu'ils ne se sont pas pris la tete et juste fait une table d'adressage.
Si tu fais un double adressage pour le flip des zones, ça te fais des transfert supplémentaire, tu monopolise les cycles d'horloge je crois + transfert sur bus enfin un truc dans l'genre.
L'avantage de ne faire qu'une table c'est que la plupart des instructions peuvent rester dans le pipe. Le 6502 était une vrai bête de course en fait, j'viens de me renseigner un peu plus, pendant ses cycles son accès au bus était bloqué, ce qui permet surement de lancer une insrtruction sur un proc graphique par ex du coup aucune perte... Genial en fait comparé au Z80 de l'époque.
En tout cas interressant comme proc et c'est marrant que ce soit un jeu sorti 20ans après qui nous pousse à en parler
Bon là c'est décidé jvais me trouver une plateforme et refaire un peu d'assembleur, ça me manque d'organiser les instructions dans le pipe pour voir le prog accélerer de 50%
Pour finir une tite note trouvé sur wiki :
"Dans terminator, le public à un moment voit une scène à travers l'œil-caméra du robot T-800 Model-101, où un fragment de programme en code assembleur du 6502 défile en bas de l'écran. Le code réel montré est la sortie écran d'un programme de checksum pour Apple II"
C'était une star ce proc :p
Vu la quantité de mémoire qu'il faut pour faire tourner le jeu, je penses qu'ils ne se sont pas pris la tete et juste fait une table d'adressage.
Si tu fais un double adressage pour le flip des zones, ça te fais des transfert supplémentaire, tu monopolise les cycles d'horloge je crois + transfert sur bus enfin un truc dans l'genre.
L'avantage de ne faire qu'une table c'est que la plupart des instructions peuvent rester dans le pipe. Le 6502 était une vrai bête de course en fait, j'viens de me renseigner un peu plus, pendant ses cycles son accès au bus était bloqué, ce qui permet surement de lancer une insrtruction sur un proc graphique par ex du coup aucune perte... Genial en fait comparé au Z80 de l'époque.
En tout cas interressant comme proc et c'est marrant que ce soit un jeu sorti 20ans après qui nous pousse à en parler
Bon là c'est décidé jvais me trouver une plateforme et refaire un peu d'assembleur, ça me manque d'organiser les instructions dans le pipe pour voir le prog accélerer de 50%
Pour finir une tite note trouvé sur wiki :
"Dans terminator, le public à un moment voit une scène à travers l'œil-caméra du robot T-800 Model-101, où un fragment de programme en code assembleur du 6502 défile en bas de l'écran. Le code réel montré est la sortie écran d'un programme de checksum pour Apple II"
C'était une star ce proc :p
maxoojc- Infirmier
- Nombre de messages : 4472
Age : 48
Localisation : Green hill
Date d'inscription : 15/08/2010
Re: yoomp
Je pense que 65c02 se parlait à lui même, StaxX va respirer un bol d'air frais, tu sembles stressé; écoute les zozios, hume la nature :flower:
oiseau de proie- Guéri miraculeux
- Nombre de messages : 2589
Age : 50
Date d'inscription : 25/03/2009
Re: yoomp
Mdr, ouep c'est qu'on dialoguait sur des supposition, on faisait un peu la politique de yoomp, on en parle sans vraiment y etre au fond
Heureusement que c'est une petite semaine ^^
Heureusement que c'est une petite semaine ^^
maxoojc- Infirmier
- Nombre de messages : 4472
Age : 48
Localisation : Green hill
Date d'inscription : 15/08/2010
Re: yoomp
La démo est impressionnante.
Ce qui m'a toujours bluffé reste l'effet de pseudo3D comme dans Space Harrier ou OutRun.
Ce qui m'a toujours bluffé reste l'effet de pseudo3D comme dans Space Harrier ou OutRun.
BSOD- Patient en incubation
- Nombre de messages : 21
Age : 40
Date d'inscription : 04/07/2011
Re: yoomp
D'ailleurs [Question de nioub qui n'a touché qu'au c++ et au java] C'est chaud l'asm ? [/Question de nioub etc ....]
BSOD- Patient en incubation
- Nombre de messages : 21
Age : 40
Date d'inscription : 04/07/2011
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum