Forum Communauté

Index des forums

Navigation du forum
Fil d’Ariane du forum – Vous êtes ici :ForumCommunauté: Border0Screens de Gauntlet
Vous devez vous identifier pour créer des messages et des sujets.

Screens de Gauntlet

Je crois me rappeler que tu voulais ajouter tous les screens de Gauntlet à ton site.

Devant le côté rébarbatif des copies d'écran aux quatre coins de chaque salle, la seule solution est de lire en mémoire chaque salle.

Et en fait, c'est codé en clair en mémoire. Il faudra juste lire chaque salle sur le disque et sans doute faire fi des manipulations que le programme effectue par la suite (couleur du fond, sprites et couleur des murs, symétries), en espérant que ça soit aussi en clair sur le disque !

Chaque salle fait 32x32 octets, soit 1024 octets (#400h)

Pour le moment, un screen de démonstration en BASIC de la salle 1 de Gauntlet II. On reconnait, non ?

Fichiers téléversés :
  • r1.png

Espoir de courte durée, les données enregistrées sur le disque sont encryptées ! Pour que ma solution fonctionne, pour le moment, il faut quand même visiter chaque niveau :O

En tout cas, ça me fait un challenge de plus à relever, mais pas pour ce soir 😛

Pour référence,

de #11CB à #11D7 (Gauntlet II), le jeu commence par effacer la zone mémoire de #8000 à #83FF.

à un moment, le programme lit le disque. Limite je n'ai pas besoin de savoir comment, car je vois que les données sont recopiées en #4000. Sur le disque, chaque niveau occupe un secteur à partir de la piste 25 (version CPM).

Le programme semble commencer par dessiner les murs. Les objets et générateurs sont placés en dernier.

 

Tu peux pas simplement patcher le jeu pour qu'il commence au niveau de ton choix ?

Apprenez à coder sur CPC: ASMtrad CPC Complément CPC+/GX4000: CPC+ coding

C'est une piste à explorer, d'autant plus que si je trouve, ça devrait peut-être m'aider à comprendre pourquoi il recommence au ~227 en cas d'overflow

Pour référence :
En #33D9 le programme met #44 dans E (correspondant au code d'un tile EXIT), charge dans A le code de la tile pointée par HL (j'imagine la tile vers laquelle se dirige notre personnage) et la compare à E
A cet instant, IX pointe sur #0120 où on trouve la table d'état du joueur 1 (à partir de #140, c'est la même chose pour le joueur 2)
En #120 est codée la position absolue suivant X et en #121 suivant Y
En #122 et #123 sont stockés en DCB les centaines et les unités de l'énergie, de #124 à #126 c'est le score sur le même principe (6 chiffres)
En #128 c'est le nombre de clefs et en #129 le nombre de potions
Et en #12C c'est le Level 🙂
C'est intéressant mais le décor étant choisi aléatoirement, il faut encore que je trouve comment !

Edit : sur Gauntlet (version CPM fix), on retrouve cette table d'état en #8420

Bon déjà, j'ai trouvé d'où venait le bug de l'overflow sur Gauntlet.
Un joueur qui prend la sortie voit son level incrémenté de 1. Si on joue à 2, le nouveau level ne se charge qu'après que les deux joueurs aient pris la sortie.
Logique jusque là. Et si un joueur est mort, il reste sur le level de son décès (évidemment, il ne peut pas prendre la sortie !).
Chaque joueur a son propre compteur de level, donc ce n'est pas gênant, ou justement si ! Le programme ne s'assure de la cohérence du level entre les deux joueurs que pour ceux qui sont en vie !
Il semble que ça mette le joueur au level de celui qui est le plus avancé. Et comme forcément, un joueur en vie ne peut pas avoir un level inférieur à un joueur mort, lorsque le joueur franchit le 255 et qu'il retourne au 0, on lui donne le level du joueur mort !
Lors de mon live, j'avais effectivement fait apparaître par inadvertance le deuxième joueur, sa dernière mort étant au level 227, cela rebouclait au 227. Si les deux joueurs sont au 255 (ou si le deuxième joueur n'est jamais entré en jeu, soit level 0), le jeu passe bien au Level 0 avec un beau bug à la clef. Attention, il ne faut pas avoir fait spawner le deuxième joueur au 255, sinon tout le monde passe au level de sa précédente mort +1. En revanche, si le deuxième joueur est mort au level 255, le jeu bouclera indéfiniment sur celui-ci.
Sachant que je voulais finir solo, j'aurais dû choisir dès le départ One Player !

Ah oui d'accord, original ce "bug"

Apprenez à coder sur CPC: ASMtrad CPC Complément CPC+/GX4000: CPC+ coding

Pour info, voilà ce fameux level 0, qu'on peut quand même rencontrer aléatoirement en cours de partie, et là c'est reset assuré (ou chargement du savestate :D)

Fichiers téléversés :
  • G0bug.png