Cours de déplombage 18
Disk : Gdf18.dsk
"-" files are DELETED files | "*" files are LOCKED files
----------------------------------------------------------------------
A A$0000 (000000) L$06BF (001727) 014 HELLO
T A$0000 (000000) L$9A00 (039424) 154 T.COURS 18 1ER FICHIER
T A$0000 (000000) L$5A00 (023040) 090 T.COURS 18 2ND FICHIER
T A$0000 (000000) L$1E00 (007680) 030 T.COURS 18 3EME FICHIER
T A$0000 (000000) L$1300 (004864) 019 T.COURS 18 APPENDIX OUTILS
T A$0000 (000000) L$0E00 (003584) 014 T.COURS 18 AU
SECOURS
T A$0000 (000000) L$0500 (001280) 005 T.ET LA PROCHAINE FOIS...
T A$0000 (000000) L$0400 (001024) 004 T.FIX MISS PACMAN
T A$0000 (000000) L$0C00 (003072) 012 T.GODFATHER RACONTE...
T A$0000 (000000) L$0E00 (003584) 014 T.INFORMATIONS COURS
T A$0000 (000000) L$0A00 (002560) 010 T.INTRODUCTION
This catalog contains 11 files. 0 were DELETED.
----------------------------------------------------------------------

|
DOS 3.3
|
Download Cours GDF 18 rev 1.00 (gzipped)
|
Sommaire
Lien |
Article |
 |
Introduction. |
 |
Cours 18 1er fichier. |
 |
Cours 18 2nd fichier. |
 |
Cours 18 3eme fichier. |
 |
Cours 18 appendix outils. |
 |
Cours 18 au secours. |
 |
Et la prochaine fois. |
 |
Fix MISS PACMAN. |
 |
Informations cours. |
Introduction.
-------------------------------------------------------------------------------
Hello and hello, everybody
!!...
Godfather
-------------------------------------------------------------------------------
Introduction cours 18 : Fixez vous la vie
!..
Update 27/11/87
-------------------------------------------------------------------------------
Cours dédicacé à José, pour etre celui qui
m'a réclamé le plus ce cours !!!....
ainsi qu'à ce cher Patchman, le spécialiste numéro
1 de cet art, et enfin à mon
grand ami Jokersoft, pour son aide et ses idées constructives
pour ce cours 18!
-------------------------------------------------------------------------------
Salut tout le monde !!
Ce cours m'a
été longtemps et fortement réclamé par pas
mal d'entre
vous.. un cours qui nous
apprendrait à chercher, retrouver facilement,
modifiez les nombres de vies
de nos jeux préférés et futurs..
mais pas seulement ca, qui
nous enseignerait tous les rudiments des
diverses méthodes de
"fixs" sur des jeux d'aventure, de role,
sur toute sorte de softs
quoi !!..
Facile d'expliquer comment
retrouver un nombre de vie ds un
jeu d'action
programmé logiquement - a vrai dire, je voulais en faire
un complément du
cours 8 sur la recherche d'octets en tout genres -
mais je me suis vite dit que
ça serait bien mieux d'en faire un cours
pour vous transformer en
Patchmen fous.. et pour vraiment etudier
tous les types de fixs
possibles (meme les fixs intégrés!) sans etre
jamais superficiels !!
Après avoir
achevé une première version de ce cours, j'ai eu un appel
de Jokersoft qui m'a
proposé encore pas mal d'idées d'améliorations
à mon travail.. on
arrete pas le progrès !.. aussi, je tiens très
chaleureusement
dédicacer ce cours à la fois à ce cher Patchman, et
à Jokersoft donc,
pour son aide très positive !..
Je vous laisse à vos
claviers..
Ah! Bidouille..
Grenouille.., quand tu nous tiens !!
-------------------------------------------------------------------------------
Retour sommaire
Cours 18 1er fichier.
-------------------------------------------------------------------------------
Cours 18 : Fixez vous la vie !!.. (Fichier
1)
Godfather
-------------------------------------------------------------------------------
Update Decembre
1987
Révision 1.10
Salut et salut,
J'ai eu de longues conversations en tete à tete avec moi meme
pour décider si
je devais ou non écrire ce cours sur les fixs. En effet, depuis
longtemps,
on regne en maitres absolus sur le royaume des nombres de vies
(rappelez vous
mon Miss Pacman traverse fantomes où vous pouviez manger vos
ennemis mais où
vous pouviez aussi les traverser sans interférence aucune alors
qu'ils sont
censés vous dévorer!), et pendant tout ce temps, s'il y a
une chose dont je
ne voulais pas parler, c'est bien du mode-d'emploi concernant les fixs !
Mais en fin de compte, je suis incapable de ne pas tout vous dire, tout
vouloir
vous expliquer le plus clairement possible, meme si je n'arrive pas
toujours
à atteindre le niveau de clarté visé au
départ..
J'espere que vous ne serez pas décus ou fachés quand vous
vous rendrez compte
que vous avez dépensé l'argent que vous avez si durement
gagné pour un principe
que vous connaissiez probablement déjà !. En tout
état de cause, vous auriez
tort de l'etre, car rappelez vous ceci : si vous connaissez un principe,
mais si vous ne pouvez pas l'utiliser parce que vous ne lui voyez pas
d'applications pratiques,il n'a aucune valeur. Si vous trouvez un moyen
de
rendre ce principe utilisable sur le plan pratique, tellement
utilisable en
fait qu'il vous permet d'accomplir un miracle (!) n'importe quand et
sans y
passer vos nuits, alors là, il devient vraiment inestimable..
La vérité, c'est que la méthode qui permet
d'utiliser le principe en question
est peut etre impossible à enseigner à quelqu'un. Les
ruses classiques et les
pieges à possibilités restreintes sont faciles à
enseigner, mais le principe en
question ne colle quasiment à aucun mode d'emploi. Ce que je
vais devoir
essayer de vous enseigner, c'est un processus mental, et cela n'est pas
facile.
De plus expliquer un processus mental prend plus de temps - beaucoup
plus de
temps - que le processus lui meme.
En fait, si.. il y a une méthode bete et méchante qui
permet de fixer pleins
de choses, mais ce qui est moins évident, c'est ce qu'il y a
derriere la
méthode.. enfin, bon!.. laissez tomber..
Encore une fois, pour simplifier les choses, j'ai fait un fichier
"résumé
du cours" pour que vous vous y référiez au moment
où vs ferez un fix !.. ok?
Je vous recommande fortement de lire l'histoire de la méthode,
la théorie qui
la sous-tend et les premiers effets qui me sont venus à
l'esprit, avant de
passer à l'essentiel, c'est à dire aux routines qui en
découlent. Il faut que
vous compreniez l'arrière-plan théorique et les effets
fondamentaux avant de
pouvoir profiter pleinement de ces connaissances. Je veux que vous soyez
efficace dans le domaine du fix autant que le plus grands
(évidemment, je
pense à Patchman!), et c'est la raison pour laquelle je vais
vous enseigner
la méthode aussi soigneusement qu'il m'est possible de le faire.
Je ne suis
mu par aucun sentiment d'altruisme; bien au contraire. c'est purement
égoiste.
Je veux que vous possédiez ce sujet, et je veux que vous le
possédiez dans les
regles de l'art. Si vous faites cela, vous deviendrez ma meilleure
publicité,
meme si personne ne sait rien de ce cours..
Voici le menu très chargé de ce cours.. et du prochain
cours sur les fixs!
Tout le coté pratique sera fait sur le Miss Pacman, ci joint en
catalog...
COURS 18 (1ER COURS SUR LES FIXS)
=================================
1ER FICHIER
PARTIE THEORIQUE GENERALE
EXPLIQUEE SIMPLEMENT A L'AIDE DU BASIC
-----------------------------------------------------------------------
1. Les notions à
maitriser avant de commencer
2. Les différents
"outils" utilisables pour ce type de recherche
3. Principe
Recherche/Logique/Programmation accompagné d'un long blabla
PARTIE THEORIQUE POUR LES
SOFTS EN ASSEMBLEUR (CE QUI NOUS INTERESSE!)
-----------------------------------------------------------------------
4. Recherche -Par quoi faut
il commencer ?...
JEUX A VIES..
-----------------------------------------------------------------------
5. Fixs
simples - Modifier le
nombre de vies d'un jeu..
SECOND FICHIER
JEUX A VIES (Suite)
-----------------------------------------------------------------------
6. Fixs plus
evolués - Immortalité
PROGRAMMATION : STATISTIQUES
(par The Jokersoft)
-----------------------------------------------------------------------
7. Comment la plupart des
jeux sont programmés.. pour vies, imm_, etc..
TROISIEME FICHIER
LEVELS, NIVEAUX, NOMBRE DE
JOUEURS ET AUTRES PARAMETRES...
-----------------------------------------------------------------------
8. Un fix en amène un
autre.. que l'on ne pouvait autrement pas trouver
dans
certains cas !.. (on ignorait l'adresse et la valeur initiale
par
exemple!)
LES PROBLEMES QUE L'ONT PEUT
RENCONTRER
-----------------------------------------------------------------------
09. Fixs
problemes - Sprites (affichage)
10. Fixs problemes vies -
Maximum de vies (limité à une cert.valeur!)
11. Fixs problemes imm. -
Une vie à plus à chaque tableau ?..
12. Fixs problemes imm. -
Compteur de morts au lieu de compt.de vies ?
13. Mieux vaut
éviter - Des conseils pratiques!
FICHIER "AU SECOURS" (FICHIER COMPLEMENTAIRE)
AU SECOURS..
-----------------------------------------------------------------------
13. Je sais pas parler
Héxa
COMPLEMENT COURS 8
-----------------------------------------------------------------------
14. De nouveaux programmes
de recherche d'octets passés en revue ici!..
COURS 19 (2ND COURS SUR LES FIXS - Pas encore disponible)
=========================================================
JEUX D'AVENTURE, JEUX DE
ROLES.. (Théorie)
-----------------------------------------------------------------------
1. Fixs jeux d'aventure -
parties sauvegardées
2. Fixs jeux de
role - personnages sauvegardés
UTILITAIRES DISK
-----------------------------------------------------------------------
3. Programmes de copie
(piste de début/fin, secteur, Headers..etc)
ACTIONS AUTOMATIQUES
-----------------------------------------------------------------------
4. Tir automatique..etc
LE TEMPS DE JEU
-----------------------------------------------------------------------
5. Captain goodnight, Miss
pacman (qd vs etes bleus!) etc.. top chrono!
LES RECORDS
-----------------------------------------------------------------------
6. Modifiez le tableau des
records à black magic, captain goodnight.etc
LES COULEURS, LA VITESSE,
LES TRAJECTOIRES..et autres parametres
-----------------------------------------------------------------------
7. Tous les fixs inutiles
mais "beaux" expliqués ici !
FIXS INTEGRES
(Théorie)
-----------------------------------------------------------------------
8. Fixs
intégrés niv_2 - Demande le nombre de vies au
début du jeu
9. Fixs
intégrés niv_1 - Taper une touche pour augmenter
les vies..!
PARTIE PRATIQUE : OUTILS
-----------------------------------------------------------------------
10. Disk_compare, et
Fast_compare (Sam-1985)
11.
Rwts
(cours 3)
12.
Sread/Swrite
(cours 7)
LES PROGRAMMES "FIXS" ET
LEURS SOURCES
-----------------------------------------------------------------------
13. Fix modele
1
(Godfather)
14. Fix modele
2
(Captain crack)
15. Fix modele
3
(The ACS - aucun source!)
-------------------------------------------------------------------------------
1. LES NOTIONS A MAITRISER AVANT DE COMMENCER
-------------------------------------------------------------------------------
Avant de commencer à esperer pouvoir jamais faire un fix (dur!),
il faut
maitriser plusieurs notions simples abordées ds les quelques
cours précédents,
à savoir :
- Notion de piste/secteur et
utilisation d'un éditeur de secteur
- Notion de
décimal/héxadécimal (pour les conversions, cf
cours 7)
- Notions d'adressage d'un
programme (le cours 11 aide bcp à ce sujet!)
Pour ce qui est de l'héxadécimal, je le ré-aborde
encore pour les retardataires
dans le fichier "AU SECOURS", sur ce disk. (parce que je suis sympa!)..
Pour le
reste, j'espère que ce sont déjà de solides
acquis.. sinon, ma foi, je saute
par la fenetre !..
-------------------------------------------------------------------------------
2. LES DIFFERENTS OUTILS A SAVOIR MANIPULER (outre un bete
éditeur de secteur)
-------------------------------------------------------------------------------
J'ai pondu il y a quelques mois de cela, tout un cours sur la recherche
d'octet
en mémoire ou sur disk.. c'est pas pour rien.. je ne vais donc
pas recommencer
ce cours ici (on est pas là pour ca!).. alors pour toute
référence, le numéro
de ce cours indispensable est 8..
A savoir manipuler (facile!) avec aisance et gaieté :
- David Dos (et sa commande
find)
- Copy II+ 5.x (et son
scanner d'octets)
- Scan Disk Eor
(eventuellement! - ex:Darklord de chez Datasoft)
Chacun a ses programmes fétichez pour la recherche d'octet..
Acs ne croit qu'en son Mobby disk II (bien qu'il soient fous de voir la
vitesse
du scanner d'octets de notre Copy II+ 5.x frelatté!)..
Jokersoft ne croit qu'en D.A.R.K. (?) que je n'avais meme pas
cité dans le
cours 8 initialement (je vais vite aller me rattraper pour lui faire
plaisir!)
Evidemment, je ne crois qu'au bo Copy II+ 5.x.. et au Scan disk Eor de
Kristo,
ainsi qu'au David Dos pour les fixs de programmes cataloguables.
-------------------------------------------------------------------------------
3. PARTIE THEORIQUE : PROGRAMMATIQUE / LOGIQUE
-------------------------------------------------------------------------------
Je vais et je suis obligé de commencer par la partie la plus
dure à expliquer.
Tout ce que je vais vous expliquer dans cette partie, toutes les
idées - qui
vont sembleront peut etre bete ou évidentes mais qui en fait
sont très judici-
euses à bien y regarder - sont à retenir, et non pas
seulement dans le cadre
d'une recherche de nombre de vies, mais - en ce qui concerne dumoins la
logique
de ces idées - mais pour toute recherche d'octets, que ce soit
lors d'un
déplombage ou autre grenouillage fou..
J'y m'y lancois !...
Nous allons partir sur un exemple très simple.. et on ne va pas
tout de suite
parler d'assembleur, mais plutot du basic.. (je pourrais vous parler
aussi de
Pascal, par exemple, c'est aussi c.. que le basic, mais d'entre vous, la
plupart n'ont jusqu'à présent abordé que le
basic)...
On veut initialiser le nombre de bombes au plutonium que le gentil blick
pourra lancer sur l'affreux blourp.. c'est le jeu bien connu du
blick-blourp!..
Au départ, le programmeur décide que 3 est un nombre de
bombes convenable
pour avoir une difficulté de jeu sympa, etc etc.. alors -
logique - comment
va t'il programmer cela..
En basic, le plus simple - si le mec est clean - serait de prendre une
variable
BOMBES et de l'initialiser simplement - logiquement - par un BOMBES =
3, au
début du programme.
En informatique, en programmation, TOUT est faisable - vous le savez..
Le nombre de moyens tous différents de programmer A=B est very
big.. mais - car
on compte sur la logique du programmeur - dans 99 cas sur 100, le
programmeur
aura utilisé la méthode la plus simple - la plus logique
- d'initialiser le
nombre de bombes, pour reprendre notre exemple... que ce soit en basic
par
BOMBES = 3, (ou A=3, qu'importe!) ou encore dans n'importe quel language
(j'espère pas trop évolué!).. bref, tous les
programmeurs choisiront la
simplicité et la logique humaine et opteront en
super-majorité pour une
syntaxe relative au A=3 de notre bon vieux basic - pour ce cas simple de
transfer de valeurs.
En informatique, en programmation, tout est faisable pour obtenir un
résultat
donné... mais dans la vie aussi, je commence à peine
à réaliser ca..
Pour écraser une mouche, on va utiliser un
écrase-mouche.. comment appelez vous
ca ?.. une tapette à moustiques ?.. ok! une tapette à
moustiques..
donc - si on suppose que tout le monde a toujours sa tapette à
moustiques
à portée de la main - et face à un moustique qui
vous empeche de vous
concentrer - on verra ainsi 99 personnes sur 100 saisir leur tapette
préférée
et écraser l'ignoble sur le coin du mur !..
Quoi ?.. qu'est ce que vous dites ?.. avec un journal ??.. et bien soit,
avec un journal.. si vous préférez écraser les
moustiques avec un journal..
ok!.. voilà!.. 99 tapettes et un journal !!.. ou le contraire,
on s'en fout !
Ahhh! ne m'interrompez donc pas sans arret comme ca !!...
Non! j'aurais du trouver un exemple plus simple qu'une tapette...
A vrai dire, meme moi je ne possede pas de tapette à moustique...
Y'a que ma grand mère - du coté maternel - qui en possede
une, autour de moi,
à ma connaissance; mais à chaque fois qu'elle veut
écraser un moustique chez
elle, elle prend un journal !...
D'ailleurs, pendant les vacances de noel, j'irais peut etre chez elle
écraser
des moustiques... je sais pas encore!... A moins que j'aille chez mon
autre
grand mère.. du coté paternel.. Enfin! je vous en
reparlerais dés que je
serais fixé... Promis !..
Bon.. Où j'en étais.. ah! oui.. 99 cas pour 100 iront
vers la logique, et la
simplicité.... c'est logique !..
Quand on me pose les questions universelles sur mon moi, (comment j'ai
commencé, qu'est ce que je cherche, à quoi je
pense..etc), je réponds souvent
ceci.. : -Un déplombeur doit avoir deux choses en lui, par
rapport à une
protection.. premièrement, il doit connaitre toutes les regles
du jeu..
Il doit pouvoir discerner toutes les méthodes diverses de
protection possible
d'après les indices qu'il obtient au fur et à mesure de
son enquete, de sa
recherche des coupables ! Plus il trouve d'indices, plus il doit
refermer son
angle de possibilité!.. Ca, c'est la première chose. La
seconde est la
suivante.. Il doit toujours - dans le mesure où il voit donc
tout le jeu de
possibilités - et je dis bien "toujours" - se poser la question
suivante :
"si c'était moi qui avait plombé ce soft, si
c'était moi qui avait programmé
ce soft, d'après les caractéristiques du programme, et au
vu des indices que
j'ai déjà grapillé après mes quelques
premieres investigations; comment
aurais-je programmé ca.. quelle logique de programmation est la
plus simple;
la plus logiquement employée...?"..
donc, à ce niveau là, plus le déplombeur est
logique, et plus il a de
connaissances relatives au plombage (donc d'expérience..), plus
il sera
efficace, et moindre sera le nombre de plombages qui vont lui
résister !...
C'en est de meme pour les fixs..
Dans le cas du programme basic, si on veut définir un nombre de
vies, on
va facilement le nommer VIES (ou LIVES en anglais), et on
l'initialisera de
la manière la plus simple, par une égalité avec la
valeur désirée - comme on
l'a fait plus haut..
En informatique, il y a l'éventail infini de moyens pour
programmer un truc
super simple, mais seulement un ou deux de ces moyens fous ne sera
employé !..
C'est la clé de la recherche d'octets !!.. Ce qu'il faut, c'est
connaitre
ces un ou deux moyens - au niveau d"un programme logique en assembleur
- et
ainsi, commencer une recherche d'octets, celle qui a le plus de chances
de
nous mener vers le parametre du soft recherché !..
De plus, il va falloir maitriser tous les types de recherche d'octets
parfaitement (à savoir en ram, et sur disk.. - cours 8), car on
utilisera
la recherche d'octets sur disk pour les softs en une face, et en ram
à la
fois pour les softs en une face (en les interrompants!) et pour les
softs
en catalog (voir en E_Boot..).
Tiens, je vais inventer un verbe.. le verbe "logiquer".. ca signifiera
quoi?
voyons.. "logiquer- art de réfléchir de manière
logique et sensé, dans le
domaine de la recherche d'octets, c'est à dire en respectant
tout ce que j'ai
dit ci-dessus".. d'accord ?.. logiquer, let's go !!.. Je sais pas
où, mais je
sent que je vais l'utiliser plus loin.. Je vous parle de baf...
baf, ca veut dire quoi ??..
Voici le premier programme que l'on va étudier, jusqu'à
la fin de cette
partie théorique... c'est un super programme basic..
Imaginez ceci.. l'écran s'éfface (HOME), puis le titre
apparait en texte
(PRINT "BLICK-BLOURP"), enfin la musique du début du jeu commence
(CALL musique_), puis l'écran s'efface encore (HOME) et le
nombre de vies
s'affiche en haut de l'écran avant que le jeu ne commence.
(VARIABLE = 3 : PRINT "VIES = ";VARIABLE).. Ceci, c'est ce que vous
voyez à
l'execution.. et entre parenthèse, c'est le moyen logique et
simple de
programmer ce que vous verrez... et en effet, on a bien un endroit dans
le
programme avec indiqué "VARIABLE = 3". notre première
méthode de recherche
est donc la suivante :
- Regarder attentivement le listing à la recherche d'une
référence quelconque
à la valeur du nombre de vies, à savoir qu'il faut
bien que ce nombre de vies
s'initialise (souvent au début du programme d'ailleurs)..
que ce soit pas
un A=3, VIES=3 ou encore POKE 999,3 par exemple !!..
On verra plus loin (lorsqu'on parlera des problemes relatifs à
l'immortalité
et aux nombres de vies) avec un exemple de programme basic concret
(mais la
logique reste la meme pour des programmes en un tout autre language),
qu'en
fait de nombre de vies, on peut trouver aussi bien un compteur de
morts..
m'enfin.. revenons à nos vies folles..
Seul une poignée de programmeurs fous, sur notre globe,
initialisera une
variable telle par un AGA=4-1 ou autres PROUT=INT(2.121320344 * SQR
(2)),
ce qui donnerait le meme résultat mais qui est illogique,
anti-clean,
bref : nul !... seulement, ca éxiste.. alors comment faire pour
retrouver
le nombre de ce que vous voudrez si le nombre de vies a
été initialisé
sans (pour le basic ou quelques autres languages évolués)
nom de variable
attirant (vies, bombes, pacmen...etc), et sans passer par la valeur
directe
du nombre de vies..?
Une seconde méthode - presque aussi logique que la
première - pour le
programmeur et ce, quel que soit le language utilisé bien que ca
colle plus
à l'assembleur - est - pour un nombre de vies de 3 -
d'initialiser ce nombre
avec la valeur 2, et de décrémenter le nombre de vies
à chaque foi, la mort
étant entrainée par un test du type logique : IF VIES
< 00 THEN...(mort).
(BMI pour les fous de language machine.. BRANCH ON MINUS - En gros :
Branchement à une routine donné, si le nombre
adressé précédemment est négatif)
Dans ce cas, si le nombre de vies s'affiche, on est tout de suite
fixé, et on
cherchera de suite la valeur 2 et non pas trois..
En fait, on va avoir recours à la seconde méthode, c'est
à dire :
- Rechercher de la meme manière que la première fois, une
initialisation
quelconque d'une variable ou adresse à la valeur du
nombre de vies -1,
sachant que le test entrainant la mort, n'est pas
obligatoirement comme
le plus souvent un compare avec la valeur 0..
quand le nombre de vies n'apparait pas.. car si apparait 3 alors qu'il
ne
reste que 2 vies, c'est anti-logique de se dire "mais non, il doit
utiliser
deux adresses.. une pour l'affichage, et une comme le compteur de
vies"..
Enfin, venons à la méthode la plus interessante, mais -
pour mon malheur
personnel - la moins employées.. car c'est bien souvent une des
deux précé-
dentes qui s'avere éfficace !..
Pour trouver un nombre de vies (3) dans un programme basic, si une
initialisation évidente ne ressort pas de suite du programme, on
n'a pas
d'autre alternatives que de le suivre pas à pas, depuis la
première ligne
jusqu'à la derniere, et de chercher une référence
à 3 - voire à 2.. ??
Impenssable !!!.. il faudrait des nuits entières pour trouver le
nombre de
vies d'un jeu auquel on ne va jouer que quelques heures, tout au plus..
Ma foi, détrompez vous, il y a bien d'autres méthodes..
c'est ce que
j'appelerais le "before-after" - qu'on résumera en "baf" - parce
que ca fait
bien en anglais, et encore mieux en abrégé..
Le before after, c'est quoi... pour comprendre cette méthode
super logique,
je vous demanderais de remonter plus haut dans ce texte, à
savoir au moment
ou je décortique le début d'un jeu (pour l'occasion - en
basic) à 3 bombes.
On a vu que l'écran s'éffacait avant l'affichage du
nombre de vies, on a vu
qu'il s'inscrivait "VIES ="..etc.. il suffit alors de rechercher, quand
le
nombre de vies n'est pas apparent meme en assembleur (je vais y venir),
un truc caractéristique de ce qui se passe avant ou après
(before or after,
en anglais!) une routine qui adresse le nombre de vies.. ici, si on ne
sait plus où chercher, la méthode "baf" serait de
chercher en texte "VIES"
ou encore un HOME (JSR $FC58).. etc... et de fouiller avant ou
après..
Anecdotik- pour son fix dans black magic, the gog's d'acs a
cherché - ne
trouvant pas le nombre de fleches du joueur en l'occurence - un
pression du
bouton du joystick, car en effet, c'est au moment de la pression du
bouton0
que la fleche part, et donc qu'une routine décrémente
l'adresse contenant le
nombre de fleches du joueur, après avoir testé qu'il en
restait au moins une
à tirer.. c'est l'exemple type de la méthode baf à
un niveau plus balaise
que la recherche d'un simple bout de texte genre "VIES" ou d'un HOME..
On va reparler de tout ca plus loin je pense...
_____________________________________________________________________________
!
!
! Enfin, ce qu'il faut se rappeler, que ce soit à propos de la
méthode baf ou !
! pas, c'est que - et ca semble bete - quand on sait où
chercher, on cherche; !
! mais quand on ne sait plus où chercher, il faut se trouver des
indices, se !
! fabriquer des indices.. toujours se poser la question ultime -"Qu'est
ce !
! qui peut me mener vers une routine contenant le nombre de vies
cherché par !
!
expl.?"
!
!_____________________________________________________________________________!
Meme les plombeurs les plus tordus et qui nous pondent les routines les
plus
complexes jamais vues sont des programmeurs cleans, et respectent, et
recher-
chent la "beauté" du programme avant tout..
Un autre exemple de ruse baf ?.. en voici un :
- Regarder si le nombre de vies s'affiche, et en fonction des
caractéristiques
de cet affichage, rechercher - je sais pas - un HTAB,VTAB,PRINT
correspondant
ce qui vous indiquera de suite la variable utilisée pour
le nombre de vies..
Enfin, dernière chose avant la suite, la question est la
suivante.. :
Le nombre de vies est il initialisé UNE SEULE FOIS dans le soft
?..
Et bien, contrairement à toute notion de programmation
structurée, il arrive
que l'on trouve une initialisation du nombre de vies au début du
soft dans la
Présentation par exemple et une autre après le Game_over
car le programme ne
repasse pas par cette dite Présentation.. ok?..
- Nous allons vous comment retrouver un nombre de vies, et si jamais le
soft
marche avec xx vies (votre nombre donné) pour une partie
et après recommence
avec le nombre de vies initial, il faudra recommencer la
recherche pour
trouver la seconde initialisation de ce fameux nombre de vies..
mais là, on
va le voir, la recherche sera beaucoup plus simple..
(nous allons meme pouvoir vérifier qu'il n'y a pas de
seconde initialisation
dés le moment où nous auront trouvé une
initialisation.. => mm adresse!)
J'ai eu une discussion hier encore avec Deny de the acs.. il pense la
meme
chose que moi par rapport à "comment progresser en
déplombage comme en
programmation".. il faut décortiquer les programmes des autres
avant tout,
avant meme d'essayer de faire les siens tout seul !..
J'ai commencé l'informatique au niveau du basic comme bcp de
monde, sur un
petit ordinateur de poche à savoir le Casio Fx-702P.. cette
bécane est sortie
au moment ou Hebdogiciel a sorti son premier numéro, je crois..
et justement, j'achetais feu l'Hebdo.. et je tapais les programmes des
lecteurs
au lieu de me tuer à bouffer le bouquin d'explications - pour
attardés - de
basic... et c'est en les tapant, et en cherchant à les
décortiquer un peu, ne
serait ce qu'en les tapant; que j'ai très vite progressé
en basic.. en quelques
jours à peine!.. J'arrete de raconter là ma vie (oui, le
déplombage éxiste
aussi sur des fx-, et oui je déplombais aussi, et oui j'ai aussi
fait des
programmes, ensuite commercialisés, qui m'ont remboursé
la machine!!..)..
Toujours est il; le mieux donc pour progresser, est de bouffer les
lignes de
programme des autres, et non pas de se tuer toute la nuit à
essayer d'en
pondre une ou deux !..
Une des premieres choses sympa que j'ai faites sur Apple était
une série de
15 disks pleins de fixs dans tous les sens.. je les avaient fait en
connais-
sant bcp moins de trucs que vous quand vous sortirez de ce fichier pas
encore
très technique.. mais ca va venir!.. et c'est en bouffant ces
programmes, et
en les listant tous à la recherche de vies ou d'autres levels ou
bombes, que
j'ai progressé en assembleur, puis en déplombe!.. pas
autrement !..
Donc.. suite à ce cours, si le virus du fix vous attrape, vous
etes sur une
très très bonne voie dans le monde de la déplombe
!!.. comprendo ??
Bon, revenons à nos moutons...
-------------------------------------------------------------------------------
4. PARTIE THEORIQUE : SOFTS EN ASSEMBLEUR --> PRATIQUE : MS. PACMAN
(catalog)
-------------------------------------------------------------------------------
Bien... maintenant, on va passer à LA chose à retenir..
et à la pratique!
Oubliez tout ce qui est au dessus, n'en retenez que les lignes
principales;
et attaquez sec!..
En catalog : Miss Pacman..
Les limites de la recherche
===========================
* Première chose à faire, quand le programme est en
catalog, c'est de savoir
déjà dans quelles limites de la ram le programme
s'installe.. c'est les
limites de la recherche à discerner avant tout recherche..
Pour les programmes en catalog, aucun probleme là dessus,
pour connaitre A$
et L$ (A$ adresse de début et A$+L$ adresse de fin du
programme), il suffit
de booter un Copy II+ 5.x et de faire CATALOG /FILE LENGHTS.. ou
bien
(cours 3) de bloader le fichier et de regarder le contenu des
adresses
AA60.AA73.. (pour plus de détails, referrez vs à
ce cours!); ou encore, et
enfin, de booter un David Dos et de taper après le bload,
AL, ce qui vous
affichera A$ et L$. (pour obtenir le David Dos, bootez le Dos
library qui va
avec le cours 4..). Si vous trouvez une des suite d'octets que
l'on va
chercher plus loin autre part que dans ces limites, laissez
tomber - c'est
du "garbage" !..
* Pour les programmes en une face, l'idéal pour savoir ce qui
est du programme
booté et des restes de la ram précédente,
est d'éteindre son Apple avant le
boot ce qui permet d'effacer (00 FF..) toute la ram...et les
cartes_Aux.
(sauf pour le IIgs qui efface la ram à chaque boot!)
Pour effacer la ram, une autre méthode consiste à
taper CALL-151, puis
800:EA et enfin 801<800.BFFFM.. ca "nope" toute la ram !.. ok?
C'est la méthode Disk Jockey.. (un très bon
cracker us).
Ainsi, au moment de la recherche Ram, pour les softs catalog ou 1face,
vous
ne trouverez en Ram QUE le programme chargé et pas des routines
parasites qui
pourraient vous tromper !!..
Les premiers indices
====================
Les premiers indices sont les indices visibles à savoir le
nombre de vies
affiché, par exemple.. c'est le "qu'est ce que je vois ayant un
rapport
quelconque avec ce que je cherche ?"..
Bootez Ms. Pacman.. qu'est ce que vous voyez ??.. le nombre de pacs du
coté!
Il y en a combien ??.. mouais.. il y en a exactement : xx
Comment peut on définir le nombre 3 en assembleur..?
Exactement comme dans tous les autres languages.. en basic par exemple
on
fera Variable=3, ici on va faire Adresse=3. En basic la syntaxe serait
V=3
par exemple, en assembleur la syntaxe sera une des trois suivantes :
LDA
#$3
LDX
#$3
LDY #$3
STA
Adresse
STX
Adresse
STY Adresse
D'accord ?..
Maintenant, on l'a vu, il se peut que - selon la manière dont le
branchement
à la routine Game_over est fait - que le nombre de vies soit 2.
on aura alors :
LDA
#$2
LDX
#$2
LDY #$2
STA
Adresse
STX
Adresse
STY Adresse
On a donc presque 100% de chances, croyez moi, pour que l'on trouve
dans un
programme programmé logiquement par un mec logique, une de ces
syntaxes où
la valeur (#$2 ou #$3) est la valeur du nombre de vies..
A vrai dire, les deux solutions LDA sont les plus souvent
utilisée.. mais je
préfère envisager tous les cas, pour les cas de
programmeurs tordus.
Bon.. on a ces six trucs, alors comment on fait ?..
Simple.. il faut savoir ceci (et vous le savez surement
déjà), c'est la
correspondance Hexa de ces instructions :
LDA #$03 =
A9 03
LDX #$03 =
A2 03
LDY #$03 =
A0 03
Les LDA,X,Y n'ont que cette possibilité d'etre.. mais par contre
les STA,X,Y
peuvent etre programmés de deux manières
différentes, à savoir :
- Avec une adresse de la page0 ($00-$FF) qui tient sur 1 seul octet
- Avec une adresse en deux octets, une adresse haute et basse.
On aura cet equivalent mnémonique et de valeurs hexa pour ce
second cas :
STA $AABB = 8D
BB AA
STX $AABB = 8E
BB AA
STY $AABB = 8C
BB AA
et ceci pour le cas d'une adresse de la page0...
STA
$AA = 85 AA
STX
$AA = 86 AA
STY
$AA = 84 AA
La forme Hexa est la forme sous laquelle nous allons pouvoir fouiller
le disk
ou la mémoire.. en effet, les éditeurs de secteurs tels
que vous en avez déjà
vu (cours 10 par exemple, pour déplomber les best_sellers epyx)
vous montrent
les octets qui peuvent former selon le secteur soit des données
quelconque
(image, combinaison chiffrée, data..), soit un programme (basic
sous forme
machine, ou assembleur, ou autre?..), soit du texte (fichier
texte..)..etc..
Nous allons devoir fouiller le disk pour trouver, DANS LE CADRE D'UN
PROGRAMME
EN LANGUAGE MACHINE, une routine vue ci-dessus..
mais que chercher ?...
On pourrait se dire :
- je vais chercher des LDA Valeur STA (on connait la valeur, c'est
celle du
nombre de vies.. pour Ms. Pacman par exemple, c'est 03.. puis 02
si on ne
trouve rien à 03).. mais il y a deux manière de
programmer le sta.
on va donc opter pour la solution suivante :
- Je vais chercher des LDA Valeur, tout simplement.. à savoir A9
03.
S'il est suivit par un STA (d'un des 2 types), je le
sélectionnerais comme
pouvant etre le nombre de vies. (de meme STX,STY bien sur! -
pour ceux qui
n'avaient pas encore compris)
Je vous ai déjà fait un cours sur la recherche d'octets,
aussi ne vais je pas
trop développer le coté Recherche_ram ou Recherche_Disk.
Miss pacman est en catalog, nous allons donc opter pour la
recherche_Ram.
Pour cela, le programme le plus adapté est le david dos.
La recherche se fera ainsi, dés que vous aurez relevé
l'adresse de départ du
programme concerné, pour pouvoir tester vos modifications..
- Recherche de tous les bouts de programme A9 03 suivits d'un 8D ou 85
(STA)
- On va voir le premier.. est ce bien un programme assembleur.. (sinon,
les
mnémoniques seront presque tous en ???, essayez de lister
$BB00 par exemple
en ram, vous verrez..). si ca n'a pas un look de programme asm,
on laisse
tomber et on continue par le second.
- On modifie la valeur de cette combinaison A9 03.. surtout, laissez la
en
dessous de 7F (sinon, nombre de vies négatif, selon la
manière dont le
programme vous branche sur la routine Game_over, toujours!)..
mettez donc
04 au lieu de trois, et lancez le programme (Adresse de
départ + G pour Go).
(pour miss pacman, vous devrez tapez en moniteur bien sur :
17FAG).
On verra, dans le dernier fichier de ce cours, les statistique faites
par
The Jokersoft sur tous les fixs qu'il a déjà pondu, par
rapport à la manière
en asm, de programmer les lda, et autres trucs du genre.. super
interessant!
On passe à la pratique.. bootez la face B du cours 4 (DOS
LIBRARY) et
selectionnez le david dos. Si vous n'avez pas le booo cours 4 sous la
main,
essayez de trouver un david dos quelque part.. et bootez le et passez
en basic.
Maintenant, pour ne pas trouver des A9 03 par exemple à des
adresses relatives
à d'eventuels programmes chargés
précédemment, et parce qu'on est clean; on va
effacer la ram de $800 à $8FFF à peu près. Pour
cela, tapez :
*800:EA (NOP = No_Operation, effet similaire au rem du basic - tempo)
*801<800.8FFFM.. ce qui efface par des nop, en effet, la ram
$800-8FFF.
Enfin, inserez la face B de ce bo cours 10 et tapez : BLOAD MS. PACMAN
Enfin, pour connaitre les adresse de départ et la longueur du
programme
concerné, puisqu'il est en catalog, tapez "AL".. A$ est la
l'adresse de début
et L$ la longueur. ok?.. vous avez donc les limites de la recherche
sous les
yeux!.. ok?
Bien.. maintenant, nous allons fouiller la ram (dans la zone $800-8FFF,
ne
doit rester QUE le programme chargé à l'instant de Miss
pacman!..ok?)..
Pour cela, on commence - on l'a déjà dit - par chercher
des A9 03.. ok?
Tapez donc : "FIND" (Autre commande du david dos, vue dans le cours 8).
puis entrez les octets A9 03 et pressez la touche fatidique : Return.
S'affichent alors toutes les adresses ram où se trouve les
octets A9 03.
Mais on l'a vu, ils ne font pas toujours partie d'un bout de programme..
Il va falloir faire ce que l'on appelle (encore!) du
débrouissallage...
C'est à dire lister toutes les adresses en question,
trouvées, et vérifier
que les routines trouvées ont bien un look de programme machine,
et non
pas de données quelconque (image, données, table..etc).
Si elles ont un
look de machine, gardez les de coté sur papier.. sinon, rayez
les de votre
papier...
L'idéal à ce moment là, est d'avoir une imprimante
sous la main.. en effet,
on doit relever toutes ces valeurs alors qu'il serait bcp plus simple
de les
imprimer en tapant un PR#1 avant le FIND, et avec l'imprimante
allumée et
nourrie bien sur..
Nous allons effectuer cette recherche sur le miss pacman qui est en
catalog
On recherche tous les A9 03 (LDA #$03) et on les imprime. On obtient
ceci
à peu de chose pres :
_______________________________________________________________________
!
!
! ]FIND HEX: A9
3
!
! 0001 2603 2652 26F6 285D
2A1E 2C87 2DE1 C42E D921 E4C6 F164 !
!_______________________________________________________________________!
On élimine déjà et toujours la premiere adresse..
à savoir : 0001, car c'est
là qu'est stockée justement, par la routine Find, les
octets chercher..
donc, ce n'est pas le nombre de vies.. et bien sur, et de plus, c'est
bien en
dehors des limites du programme concerné...
On élimine ensuite les 4 autres adresses hors limite, à
savoir C42E, D921, E4C6
et F164 qui font partie de la rom CD_EF. Ce n'est pas du miss pac, ca
!..
On va ensuite lister chaque routine à ces adresses restantes,
modifier la
valeur qui s'y trouve, si elle fait bien partie d'un programme, et
tester le
programme avec une modification de valeur à chaque fois.. ok?
Il ne nous reste que 7 possibilités pour trouver le nombre de
vies par A9 03.
Nous allons les tester... si elles ne changent en rien le nombre de
vies quand
on les changera, on cherchera le nombre de vies d'une autre
manière (LDX, LDY,
ou encore LDA #$02,etc...).
D'abord la première adresse.. tapez CALL-151, puis 2603L.. C'est
bien du
programme.. on va donc modifier l'adresse qui contient la valeur 03
à savoir
$2604. Tapez donc comme convenu 2604:04 (return) puis 17FAG (pour
tester le
miss pac, avec cette première modification).. que se passe
t'il...?
Non!! non!! le nombre de vies n'est pas altéré pour
autant..
Tant pis.. on passe à l'adresse suivante, et ce, jusqu'à
la fin de la liste
d'adresses pour A9 03..
Attention! à chaque fois, il faut tout recharger.. repartir de
zéro..
Recharger le programme concerné car il pourrait s'etre
modifié en route..
Rebootez et retapez BLOAD MS. PACMAN, et enfin CALL-151, puis 2652L
cette fois.
Encore une fois, c'est du programme logique.. tapez donc 2653:04
(return) puis
17FAG (pour tester le miss pac!)... et non! pas encore !...
On continue, en rechargeant à chaque fois miss pac, et au bout
du 4eme, là,
ca marche !!! gagné !! vous avez une vies de plus dés le
début du jeu !!..
gagné !! premier fix réalisé !!.. Adresse = $285E.
Nous n'avons vu ci-dessus que des cas de A9 03 relatifs à des
routines de
programme et vous n'avez peut etre aucune idée de comment
reconnaitre un
programme d'un non-programme. simple.. on va aller voir en rom.. (on a
bien
tous à peu près les memes, non?).. tapez CALL-151 et
FFD2L. Voici avez un
LDA #$BB (je n'ai trouvé aucun LDA #$3 ou #$2, comme je les
voulais!),
mais ce n'est pas une partie de programme.. c'est juste un octet
quelconque de
données qui vaut A9 suivit d'un octet qui vaut BB, et si on les
liste,
la rom les affiche sans poser de questions en A9 BB = LDA #$BB. ok?..
mais ce
n'est pas un programme !.. d'acc ?
Il se peut maintenant que le cas dont je parlais plus haut de produise
à savoir
que vous puissiez jouer une partie de miss pac avec x vies, mais que la
suivante soit toujours avec 3 vies.. si cela se produit, c'est qu'il y
a une
seconde initialisation du nombre de vies.. et pour cela, il faut
essayer les
autres adresses et aller - quand vous le testerez - jusqu'à la
seconde et 3eme
partie.. (il y a bien d'autres méthodes de recherche, tel
recherche de l'adr.
de stockage du nombre de vies ou encore de l'adresse du nombre de vies
que vous
venez de modifier.. mais c'est aussi simple!)
-------------------------------------------------------------------------------
La suite de ce super-cours dans le
fichier2..
Update 30/01/88
-------------------------------------------------------------------------------
Retour sommaire
Cours 18 2nd fichier.
-------------------------------------------------------------------------------
Cours 18 : Fixez vous la vie !!.. (Fichier
2)
Godfather
-------------------------------------------------------------------------------
5. JEUX A VIES (IMMORTALITE - 2 METHODES)
-------------------------------------------------------------------------------
Voila.. nous venons de voir par la pratique le comment faire pour
trouver un
nombre de vies, et en fait, une très grande partie du secret des
fixs réside
dans ce fameux A9 03.. dites à Patchman "A9 03", il vous
répondra "fix fix fix"
Maintenant, on va aller un peu plus loin, à savoir - à
partir de là - comment
modifier :
- mortalité en
immortalité
- mortalité en
invulnérabilité (fantastique! ms.pac traverse fantomes!)
etc..
Pour le premier cas, tout le monde pourra fixer l'immortalité
simple à partir
du moment où il a trouvé le nombre de vies d'un jeu; mais
pour le second, il
faut necessairement avoir des connaissances plus poussée en asm,
et savoir
fouiller efficacement une routine dans un programme. mais je vais quand
meme
essayer de vous initier à ces deux types de fixs super utiles.
On appelle adresse du nombre de vies l'adresse que vous venez de
modifier et
qui modifie en conséquence le nombre de vies, ou de poireaux
(quoi que ce soit)
du soft concerné.. mais il faut que j'introduise une autre
terme, que je n'ai
su nommer plus simplement que adresse de stockage du nombre de vies.
C'est simple.. et je m'explique..
En $285D, on a trouvé un LDA #$03 soit A9 03. on a donc..
En $285E, la valeur 03. $2653 est l'adresse du nombre de vies.
En $285F, on doit avoir un STA à l'adresse où sera
rangé le nombre de vies..
En $285F, on doit donc avoir un STA à l'adresse de STOCKAGE du
nombre de vies.
On liste $285D, et on voici ceci :
$285D- A9 03 LDA #$03
$285F- 8D 42 03 STA $0342
D'accord ?..
$285D - Adresse de la routine d'initialisation du nombre de vies
$285E - Adresse du nombre de vies
$0342 - Adresse de stockage du nombre de vies...
Désormais, c'est cette dernière, et seulement cette
dernière qui va nous
interesser pour acceder à l'immortalité par exemple...
L'adresse $0342.
On va maintenant rechercher à atteindre l'immortalité
dans ce meme jeu !..
Comment faire ?.. au début du jeu, le soft initialise le nombre
de vies à 3
et met cette valeur en $0342. bien.. donc, ensuite, pendant le jeu,
à chaque
fois que l'on perd une vie parce qu'on est très nul à ce
jeu, le programme
doit décrémenter l'adresse $0342.. ainsi, la valeur
initiale de 03 passera à
02, puis 01, puis 00 et à chaque décrément, le
programme doit aussi vérifier
que ce nombre n'est pas nul (ou pas négatif) par un BEQ ou par
un BMI. Mouais!
Pour atteindre l'immortalité, il nous faut - on est bien
d'accord - trouver ce
décrément du nombre de vies et l'annuler (en remplacant
l'instruction décrément
par des NOP). D'accord ?.. alors une question reste posée..
comment trouver le
décrément nombre de vies dans ce soft ?.. attendez, je
devrais poser la
question de manière plus précise.. comment trouver le
décrément de l'adresse du
nombre de vies ?.. simple..! la réponse est dans la question
quand on sait bien
comment poser la question.. il suffit de chercher des DEC de l'adresse
$0342
soit des DEC $0342.. ce qui donne en Héxa ceci :
Il faut chercher - pour ce miss pacman - tous les : CE 42
03 (DEC $0342)
Compris ?.. alors on y va... on repasse sous David Dos pour rebloader le
prg et retaper find. mais cette fois, entrez CE suivit de l'adresse
basse des
vies puis de l'adresse haute. soit CE 42 03. On en trouve aux adresses
suivantes :
0001 27E0
Si vous en trouvez à d'autres adresses, c'est sans doute que
vous n'avez pas
vidé la mémoire avant la recherche. On oublie donc
l'adresse 0001 et on n'en
retient donc qu'une - $27E0. On va la lister. (CALL-151, 27E0L). On a
ceci :
27E0- CE 42 03
DEC $0342 ; Décrément
du nombre de vies
27E3- A9
01 LDA #$01
27E5- 8D 4A 03
STA $034A
27E8- AD 6A 03
LDA $036A
27EB- C9
01 CMP #$01
27ED- D0
08 BNE $27F7
27EF- AD 42 03
LDA $0342 ; Load nombre de vies
(décrémenté)
27F2- F0
35 BEQ
$2829 ; est il nul.. oui alors $2829
27F4- 4C B6 80
JMP $80B6 ; non, pas nul.. alors
continue..
27F7- AD 42 00
LDA $0042
27FA- D0
07 BNE $2803
27FC- AD 52 03
LDA $0352
27FF- F0
28 BEQ $2829
2801- D0
07 BNE $280A
2803- AD 52 03
LDA $0352
2806- F0
16 BEQ $2812
2808- D0
11 BNE $281B
280A- 20 3A 88
JSR $883A
280D- 20 85 81
JSR $8185
2810- 20 60 99
JSR $9960
2813- 20 97 98
JSR $9897
2816- A9
0A LDA #$0A
2818- 20 96 97
JSR $9796
281B- 20 7F 88
JSR $887F
281E- AD 49 03
LDA $0349
2821- F0
03 BEQ $2826
2823- 4C 9D 80
JMP $809D
2826- 4C B6 80
JMP $80B6
2829- 20 3A 88
JSR $883A ; Routine Game_Over (Nbre
de vies = 00)
282C- 20 60 99
JSR $9960 ; ..
.. .. ..
.. .. ..
.. .. ..
.. .. ..
Alors maintenant, comment annuler ce décrément $0342..
La méthode la plus classique est de noper le
décrément betement et simplement.
Tapez : $27E0:EA EA EA (3 fois NOP). et c'est gagné !..
Une autre méthode plus clean consiste à modifier la
comparaison du nombre de
vies, une fois décrémenté, avec 00 ou -1 (FF), et
le branchement au Game_Over.
Pour cela, vous n'avez qu'à modifier le paramètre du BEQ
$2829. (en $27F2).
Pour cela..
Tapez : $27F3:00 (au lieu de
sauter $35 octets, il en sautera $00)
D'accord ?.. voici les deux méthodes classiques pour etre
immortel !..
D'abord on cherche le nombre de vies par le seul indice que l'on a : sa
valeur.
Ensuite on cherche des décrements de l'adresse que l'on en a
déduit et on
annule ce ou ces DEC pour devenir immortel !.. ok?..
-------------------------------------------------------------------------------
LES PROBLEMES (NOMBRE DE VIES) : LAQUELLE EST LA BONNE ADRESSE ?
-------------------------------------------------------------------------------
Il se peut que vous trouviez un LDA Valeur (Valeur étant la
valeur du nombre
de vies du jeu concerné), que vous changiez cette valeur et que
vous constatiez
que le nombre de vies a changé, mais que ce qui suive ce LDA
n'est pas un
seul simple STA (par exemple) mais plusieurs STA dans des adresses
différentes.
Ici se présentent deux cas :
- Vous voyez le nombre de vies changé et
c'est le seul changement.
- Vous voyez le nombre de vies changé mais le
soft délire d'autre part.
Si vous tombez sur le premier cas, tant mieux.. mais pour le second cas,
il vous faudra ruser.. le soft plante mais pourtant vous savez que dans
le
tas, il y a l'adresse du nombre de vies.. il faudrait donc pouvoir :
1. trouver quelle est la (ou les) bonnes adr.
d'init' du nombre de vies
2. initialiser toutes les autres avec la valeur
initiale
3. initialiser la/les adr. du nbre de vies avec une
valeur au choix
Ceci pose plusieurs problemes à savoir que si vous ne savez pas
quelle est
l'adresse du nombre de vies dans le tas d'adresse trouvé
après le LDA
concernant donc entre autre le nombre de vies, vous ne pouvez pas
simplement
trouver l'immortalité.. sans savoir quelle est la bonne adresse.
Alors, solution?, messieur le professeur..?.. Comment faire ?
Et bien il n'y a pas 36 méthodes.. il y en a deux
brevetées gdf.
1. il faut prendre les
adresses dans l'ordre sur papier, puis
chercher
des DEC de ces adresses un à un, et les modifier
un
à un, à chaque essai du jeu. (annulez les par des EA EA).
Vous
verrez ainsi, en laissant l'initialisation des vies
tranquilles, quelle est l'adresse qui rend ce nombre de vies
infini..
c'est l'adresse du nombre de vies. Notez la de coté,
on va voir
ce qu'on va en faire, si l'on veut persister à faire
uniquement
un fix à nombre de vies modifié mais pas infini!..
2. Il faut NOPer un à
un, en testant le jeu après chaque modif,
les STA
suivant le LDA Vies, et voir lequel enlevé entraine
un nombre
de vies non initialisé normalement. Méthode analogue donc.
Après tous ces tests qui peuvent prendre pas mal de temps, vous
connaissez
donc l'adresse du nombre de vies. alors soit vous faites un fix "vies
infinies"
sans probleme, soit vous voulez faire un fix par modification du nombre
de vies
et c'est sympa..
Il faut pour cela, mettre une sous routine supplémentaire
à la fin du
programme (après la limite de fin du programme dont je parlais
dans le 1er
fichier), qui initialise uniquement la ou les adresses du nombre de vies
à la valeur de votre choix, et qui initialise les autres
adresses à la valeur
initiale normale pour ces adresses. Ensuite, NOPez toute la zone qui
justement faisait un seul LDA pour pleins d'adresses, et glissez y un
JSR à votre routine (que vous aurez pris le soin de terminer par
un RTS,
comme de bien entendu).. ok?.. et là, vous aurez un fix du
nombre de vies
parfait, seulement l'adresse de la routine d'initialisation du nombre
de vies
aura été - par vos soins - déplacée.. mais
on s'en fout..
Le seul probleme justement par rapport à cette méthode
est qu'il peut y avoir
plusieurs adresses pour initialiser le nombre de vies.. pour deux
joueurs
par exemple, on trouvera souvent un LDA Vies STA Adr STA Adr+1. Si vous
désirez fixer le jeu de manière à ce que ce fix
vous permette de jouer avec
un ami ayant un nombre initial de vies différent du votre
(handicap pour
un jeu donné) il suffit de faire de meme un simple JSR à
une routine à vous
qui initialise les deux adresses concernées avec des valeurs
eventuellement
différentes, de votre choix.. Heureusement, outre le cas des
deux joueurs,
en général, le nombre de vies d'un joueur n'est que dans
une seule adresse.
-------------------------------------------------------------------------------
LES PROBLEMES (IMMORTALITE) : COMPTEUR DE MORTS au lieu de COMPTEUR DE
VIES
-------------------------------------------------------------------------------
On a vu que le nombre de vies était très souvent
initialisé à une certaine
valeur initiale, puis décrémenté.. mais au
contraire, selon la logique du
programmeur, on pourrait penser à un compteur de morts
passées au lieu de
l'habituel compteur de vies restantes. Ce n'est pas plus bete..
En général, le nombre de vies est affiché et
devrait s'afficher le compteur
tel qu'il est programmé, c'est à dire le nombre de vies
restantes si c'est
programmé par un compteur de vies, ou le nombre de morts
passées si c'est
programmé par un tel compteur. ok?.. m'enfin, on est jamais trop
prudent, aussi
si vous ne trouvez rien du coté du LDA #Vies, on pourrait plutot
chercher un
CMP #Vies ou CMP #Vies+1 (Nombre de morts).
Les diverses instructions de comparaison, telles les instructions
Load-reg,
sont nombreuses.. les voici avec leurs codes Hexa equivalent :
CMP #$3 = C9 03
CPX #$3 = E0 03
CPY #$3 = C0 03
Aussi, en cas d'échec lors de la recherche de LDA #$03 et autres
Load_reg,
vous pourriez essayer un peu de chercher des CMP #$03 et CMP #$04.
Vous ne comprenez pas comment marche un compteur de mort ?.. je vous
explique.
Prenons un exemple précis, tel le programme PARACHUTISTES
publié dans feu-
hebdogiciel, il y a quelques temps déjà... En le listant
(programme basic) on
remarque vite en lignes 2100 ceci :
2100 K=K+1 : IF K=3 THEN 2120
Le nombre "K" a du etre initialisé en début de programme
à 0 par un bete CLEAR
ou par un K=0 tout simplement. en assembleur, ca aurait donné
simplement
LDA #$00 STA Adresse. Adresse étant ce fameux compteur du nombre
de morts.
Ici, la variable "nombre de morts" est K, et va jusqu'à 3.. le
"IF K=3" est
l'équivalent d'un CMP #$3 quelconque, et le "K=K+1" est
l'équivalent d'un
INC Adresse quelconque. Pour commencer la recherche, si on pense ou si
on
voit à l'écran, que le compteur est un compteur de morts,
il suffit de
chercher des CMP #Vies (ou CMP #Vies+1). Juste avant, on doit avoir un
LDA Adresse (adresse étant l'adresse du nombre de morts). Il
suffit de
changer le CMP #Vies en CMP #xx pour avoir xx morts possibles avant la
fin du jeu (donc xx vies) ou encore, puisqu'on a l'adresse de ce
compteur
macabre, de rechercher des INC Adresse et de les annuler. (tout comme on
avait cherché des DEC pour l'immortalité un peu plus haut)
En ce qui concerne l'instruction DECrement, voici les codes et
mnémoniques :
DEC $1234 = CE
34 12
DEC
$12 = C6 12
DEC $1234,X = DE 34 12
DEC $12,X = D6 12
DEX =
CA (Ex: LDX Morts DEX STX
Morts)
DEY =
88 (Ex: LDY Morts DEY STY
Morts)
Donc, gaffe : le compteur de vies, peut en fait etre un compteur de
morts..
Vous savez donc maintenant comment passer ce probleme eventuel dans la
quete
de l'immortalité !.. ok?
-------------------------------------------------------------------------------
LES PROBLEMES (IMMORTALITE) : LE NOMBRE DE VIES PEUT AUSSI AUGMENTER !
-------------------------------------------------------------------------------
Dans certains jeux tels que Load Runner, ou encore le jeu atari avec du
poivre
et des hamburgers.. oui! burger time! (je connais qd mm mes classiques,
meme
si je ne joue jamais à rien!), le nombre de vies - bien sur - se
décrémente à
chaque mort (je devrais dire "l'adresse du nombre de vies"), mais au
bout de
x points, ou bien encore à chaque passage à un level
supérieur, le nombre de
vies augmenter (bonus vies!). seulement attention, s'il augmente - pour
une
valeur initiale de vies=3 par exemple - une fois arrivé à
$FF (255), s'il
augmente encore (et si vous ne faites rien, il augmentera encore
logiquement)
il reviendra à #$00 et là, un test non supprimé
pourrait entrainer un Game Over
C'est pourquoi une suppression des DEC de l'adresse du nombre de vies
ne suffit
pas dans ce cas, si on veut vraiment prétendre à
l'immortalité. Il faut, pour
vraiment etre immortel soit enlever les DEC mais aussi les potentiels
INC
du nombre de vies, ou bien carrement supprimer les CMP du nombre de
vies avec
la valeur #$00. (BEQ est l'instruction la plus souvent utilisée
pour faire ce
type de comparaison, puisqu'elle correspond au basic de :
IF Accumulateur=0 THEN Adresse. Ok?.. un test du nombre de vies par
rapport
à la valeur nulle, se présente en effet très
souvent ainsi :
LDA Adresse BEQ Game_Over (ce qui suit est la suite du jeu), ou encore
LDA Adresse BNE Continue_jeu (ce qui suit est la routine Game_Over).
Ok?..
Important : Pour trouver ceci, aucun probleme puisque, au moment
où vous
----------- chercher l'immortalité, vous avez l'adresse de
nombre de vies..
il vous suffit alors de chercher un LDA Adresse (85 xx si c'est une
adresse
en un octet, de la page-0 comme on dit, ou 8D xx yy si c'est une adresse
en 2 octets, en remplacant justement xx par la valeur basse de cette
adresse,
et yy par la val. haute)
-------------------------------------------------------------------------------
PROBLEME : NOMBRE DE VIES LIMITé ?
-------------------------------------------------------------------------------
On a vu à l'instant que, pour certains jeux, le nombre de vies
pouvait aussi
augmenter.. aussi, parfois (dans lode runner par exemple, que j'avais en
grande partie désassemblé il y a bien longtemps!), le
programmeur pense-t-il à
faire un CMP de l'adresse du nombre de vies avec une valeur maximale.
Pour ce qui est de lode runner, ca nous arrange justement car le
compare est
un compare avec #$FF aussi - le probleme précédent
n'existe plus - car meme
initialisé à 5 vies (normes load runner) et en laissant
le INC Adresse,
le compare limite le nombre de vies d'augmenter plus que possible et de
revenir à 00. (#$FF+#$01 = #$00). Mais il se peut aussi que le
programmeur
limite le nombre de vies pour corser le jeu, et là, il faut
pouvoir s'en
défaire pour pouvoir s'attribuer le nombre de vies maximal.
Voici justement les stats de The Jokersoft concernant les maxs de vies :
MAX 255 : 50,42% des
cas (ca nous arrange, comme
on vient de le voir!)
MAX 128 : 13,67% des cas
MAX 99 : 14,45% des cas
MAX 9 : 12,82% des cas
MAX Autre : 08,64% des cas
* Pour le cas où le max est de #$FF, c'est tout bon pour nous.
* Pour le cas où le max est de la moitié de #$FF, soit
#$7F (=128), laissez
tomber, c'est que le compare vies se fait par rapport à
un nombre de vies
négatif et non pas nul. en effet, #$00-1 = #$FF et #$FF
est pris, pour
de sombres raisons que je ne développe pas ici, comme
valeur négatif.
Ainsi, si vous initialisez le nombre de vies à #$80 par
exemple, cette
valeur appartenant à la gente des valeurs
"négatives" (comprises entre
#$80 et #$FF), le test de fin de jeu vous sautera au nez
immédiatement! d'où
la limitation du nombre de vies au dernier "positif" soit #$7F =
128.
Un test d'un nombre "négatif" se fait par un LDA Adresse
BMI Game_Over
(Branch on Minus, si la routine "Continue le jeu" suit) ou
encore à l'inverse
par LDA Adresse BPL Continue (Branch on Positif, si "Game Over"
suit).
Pour annuler cet effet et pouvoir mettre jusqu'à #$FF
vies, il faudrait
remplacer le BMI ou le BPL par un BEQ ou un BNE
(Respectivement). et ca
devrait marcher impec.. mais attention, si le test de game_over
est un BMI
c'est surement à cause du fait que vous pouvez perdre
plusieurs vies (ou
plutot points de vies dans ce cas là), et que vous
pourriez passer
"au dessus" de la valeur #$00. Donc, faites gaffe!..
* Pour tous les autres cas, il suffit en théorie de modifier la
routine (que
vous devrez chercher en cherchant ses deux premieres octets) LDA
Adresse
CMP Maximum, par LDA Adresse CMP #$FF (ou CMP #$7F selon la
programmation
du test Game_Over.. faites des essais voir si ca marche ou pas!).
-------------------------------------------------------------------------------
PROBLEME D'AFFICHAGE DU NOMBRE DE VIES : SPRITES
-------------------------------------------------------------------------------
L'affichage du nombre de vies d'un programme peut etre de deux types,
à savoir:
1. Le nombre que l'on
recherche est affiché sous la forme "1", "2"..etc
Si vous
changez et mettez "9" vies, il s'affichera "9"..
Si vous
changez et mettez #$FF par exemple, il s'affichera peut etre
un truc
bizarre, mais on s'en fout : il y a bien 255 vies !..
2. Le nombre de vies est
exprimé sous forme de sprites. aussi, si
vous
mettez #$FF vies (c'est le cas pour miss pacman d'ailleurs,
ou encore
du QBert d'apple, pour ne citer que les classiques!)
l'écran est envahi sur le coté de pac ou de qberts...
Pour
remedier à ca, soit on cherche la routine d'affichage (trop
compliqué pour etre décortiqué ici) soit on passe
par l'immortalité.
Un mot quand meme pour ce qui est de chercher la routine d'affichage.
L'indice
que l'on devra exploiter pour retrouver cette vérif est simple :
elle se sert
du nombre de vies, donc comporte un LDA (par exemple) du nombre de
vies!.
(ici, il y a plus de % de chances d'avoir un LDX ou LDY que pour
l'initialisa-
tion des vies.. m'enfin!). Cherchez une routine qui charge dans un
registre
le nombre de vies, qui le décrément jusqu'à #00
aussitot près, et qui à chaque
décrement, fait un Jsr (à la routine d'affichage d'un
bonhomme).
-------------------------------------------------------------------------------
STATISTIQUES DE
PROGRAMMATION
(établies par The Jokersoft)
-------------------------------------------------------------------------------
On a vu dans ce cours que bien souvent une initialisation d'un nombre
de vies
se faisait par un LDA #valeur STA $Adresse.. mais il y a d'autres
moyens de
programmer cet effet (mettre une valeur donnée dans une adresse
données).
Voici des stats super interessantes concernant ce type
d'initialisations :
ABSOLU : 8D 3
octets STA
$1234 => 44,00% des cas
0-PAGE : 85 2
octets STA
$12 => 50,70% des cas
ABS,X : 9D 3
octets STA
$1234,X => 03,00% des cas
ABS,Y : 99 3
octets STA
$1234,Y => 00,00% des cas
(IND,X) : 81 2
octets STA
($12,X) => 00,00% des cas
(IND,Y) : 91 2
octets STA
($12,Y) => 00,00% des cas
0-PAGE,X : 95 2
octets STA
$12,X => 02,30% des cas
IMPORTANT : Lors de la recherche du nombre de vies, on a vu qu'il
fallait
----------- chercher des LDA #Valeur (A9 03, par exemple), alors si vs
en
trouvez suivits de 8D, 85, 9D, 95 vous pouvez essayer de changer la
valeur
du lda et booter ensuite le jeu ainsi modifié, mais si vous
trouvez les valeurs
des instructions jamais utilisées pour ce genre d'initialisation
(à 00%), soit
81, 91 ou 99, laissez tomber et continuez la recherche de LDA #Valeur
Ca limitera beaucoup le nombre d'éssais effectués, donc
le tps de recherche!.
Enfin, pour ce qui est d'une initialisation avec la valeurs de vies
affichées
plus ou moins 1, voici d'autres stats :
Pour un jeu de 3 vies, initialisées à 03 pour
37% des cas
-------------- 4 vies, initialisées à 04 pour
15% des cas
-------------- 5 vies, initialisées à 05 pour
37% des cas
-------------- x vies, initialisées à x
pour 11% des cas.. marrant!..
-------------------------------------------------------------------------------
MIEUX VAUT EVITER...
-------------------------------------------------------------------------------
- De travailler sur son disk "original" !.. faites TOUJOURS une copie et
travaillez dessus !.. c'est comme pour du déplombage !..
gardez toujours
une copie qui marche du soft en question dans votre culotte
- De modifier plusieurs octets à la foi (l'un peut faire tout
planter avant que
vous ne vous rendiez compte que l'autre à modifié
le nombre de vies, et
voyant que ca plante, vous laisseriez tt tomber et passer
à la suite, en
oubliant, en laissant passer l'adresse du nbre de vies que
justement vs
chercher!)
- Travailler sans prendre de notes.. faites comme disait
Napéléon, gardez
tjrs un papier et un crayon à portez de la main quand vs
lisez..
-------------------------------------------------------------------------------
La suite de ce super-cours dans le
fichier3..
Update 30/01/88
-------------------------------------------------------------------------------
Retour sommaire
Cours 18 3eme fichier.
-------------------------------------------------------------------------------
Cours 17 : Fixez vous la vie !!.. (Fichier
3)
Godfather
-------------------------------------------------------------------------------
6. LEVELS, TABLEAUX ET AUTRES PARAMETRES DE JEU
-------------------------------------------------------------------------------
Pour trouver le tableau de départ d'un jeu d'action maintenant,
c'est pas
souvent aussi simple que de trouver un nombre de vies. Mais on a en
fait un
indice en plus pour trouver un level quand on a déjà
trouvé simplement le
nombre de vies. Pourquoi me demanderez vous ?.. vous auriez bien raison
de me
poser la question.. d'ailleurs que vous me la posiez ou pas, je vous
réponds
quand meme !..
Toujours une question de logique de programmation.. le logique de
programmation
ne réponds à aucune regle précise de
programmation, n'est le fait d'aucune
contrainte de la machine.. simplement, l'expèrience a
montré - et
l'apprentissage et la recherche de méthodes simples de
programmations asm -
le fait suivant.. quand on a choisit une adresse où mettre - en
l'occurence -
le nombre de vie, on a très très souvent tendance
à utiliser les adresses
voisines pour stocker d'autres informations du meme type que le nombre
de vies.
On a toujours tendance en fait à regrouper les adresses de meme
type ensemble.
Et ainsi, quand on a trouvé que l'adresse du nombre de vies
était $0342 (soit
42 03 en hexa), on a raison de se demander à quelle fin sont
utilisées les
quelques adresses qui précèdent ou suivent $342.. de $340
à $350 environ..
et ainsi, on peut très bien trouver le level et la vitesse du
jeu par exemple,
ou tout autre parametre que l'on n'aurait jamais trouvé
autrement !.. et dont,
peut etre, on ne soupconnait meme pas l'existence, mais qui sont
très sympa à
fixer !.
Pour trouver une eventuelle initialisation, ou décrément,
ou autre accès à
une adresse proche de cell du nombre de vies par exemple, il suffit de
la
chercher sous forme Hexa et de voir comment elle est employée..
quelle
instruction la manipule..
De plus, bien souvent toutes les initialisations importantes d'un
programme -
si elles ont lui d'etre faites en meme temps - seront dans la meme
routine..
bien souvent meme, l'initialisation du nombre de vies, du level etc.. se
suivent de très près, si ce n'est se suivent exactement..
aussi, l'adresse
de la routine d'initialisation du nombre de vies peut nous mener
à celle
d'autres initialisations tout aussi interessantes, sinon plus.. il est
tjrs
interessant de fouiller avant et après une telle routine, pour
trouver des fixs
D'accord ?..
Nous allons mettre ceci en pratique, pour essayer de trouver l'adresse
du
nombre de joueurs dans ce soft, ca ne sert à rien de trouver une
telle adresse puisqu'une option ("1" ou "2") du menu principal du miss
pac
vous permet déjà de modifier ce paramètre.. mais
c'est un moyen d'essayer pour
vous la méthode ci-dessus...
Si on ne trouvait rien par cette méthode, vous pourriez toujours
essayer de
fixer les autres paramètres du jeu tel ce nombre de joueur
(initial = 01) ou
encore le numéro du level de départ (inutile, il est
aussi paramétrable!) par
exemple, en pariant logiquement sur leur valeur probable initiale..
(Level initial a de fortes chances d'etre à 01 ou 00..).ok?
De plus, une autre méthode est la méthode de recherche
d'un compare à la
valeur maximum d'un paramètre.. ou encore, une recherche de ce
qui amene
un décrément (ici, pour changer le nombre de joueurs en
"2" on doit
taper sur "2".. on peut chercher un accès clavier aussi
!..)..etc...
(que d'idées ! que d'idées !!)...
Bref, j'ai parié sur l'adresse $0341. elle précède
juste l'adresse du nombre
de vies, aussi me suis je dit que c'était surement un
paramètre du soft..et il
s'est trouvé que c'était l'adresse du nombre de joueurs
!..
J'ai recherché des accès à l'adresse $0341, soit
FIND HEX : 41 03.
Et j'en ai trouvé notamment un en $206B. Je l'ai modifié
($206C:03) et j'ai
lancé le programme... Ca y est ! j'avais affiché "3
PLAYERS".. mais malheureu-
sement, le jeu limitait le nombre de vies, et pour une question de
records à
savoir où sauver, et de messages "PLAYER ONE, PLAYER TWO"
à afficher, et
pour encore d'autres raisons particulières à ce miss pac,
on ne pouvait pas
jouer à 3, mais ce n'est pas vraiment ce qu'on cherchait.. on ne
s'interesse
pas ici à l'exemple, mais au truc suivant que je viens de
vérifier sur ce
jeu pris parmi tant d'autres : les adresses des divers
paramètres d'un jeu sont
souvent très proches les unes des autres !.. c'est donc une
méthode de
recherche très valable que de parier sur certaines adresses et
de les chercher
en FINDant simplement l'adresse et en regardant les routines où
elles se
trouvent adressées !.. ok?
Et enfin, dans la série "qu'est ce que c'est simple", voici
quelques trucs...
La plupart des programmeurs utilisent des cases mémoire qui se
suivent lors
de la programmation d'un jeu, pour stocker toutes leurs variables de
meme
type (vies,level,etc..). En voici quelques exemples :
Handy Dandy : La case mémoire des vies est $50. et on cherchait
un moyen de
bloquer le temps. La première méthode serait de fouiller
tout le
programme, chose longue et fatiguante. Alors, j'ai recherché
un SBC $51 et je l'ai annulé.. sans succès!
j'ai recherché
un SBC $52 et je l'ai annumé.. et là, le temps ne se
décrémentait
plus.. alors rappelez vous une chose : ca ne coute pas grand
chose d'essayer pour voir.. et ca peut rapporter rapidement ce
que l'on cherche!
Commando : Le programmeur a initialisé ses
paramètres ainsi.
LDA #$05 ; nb de soldats
STA $.... ; adresse quelconque
LDA #$03 ; nb de grenades
STA $.... ; adresse quelconque
LDA #$00 ; level de départ
STA $.... ; adresse quelconque
A ce niveau là, on en trouve un....on trouve tout!
Aussi, une autre technique.
Si vous n'arrivez pas à trouver un paramètre
spécial, essayez de regarder, en
jouant, ce qui peut bien le modifier en cours de partie. Dans black
magic,
pour trouver le nombre de fleches, c'est duuur.. on pourra alors
remarquer que
ce nombre se décrémente lorsque l'on appuie sur le bouton
du joystick. Vous
recherchez la routine de lecture du bouton du joystick et juste
après devraient
se trouver quelques décréments. C'est un exemple, mais il
y en a bien d'autres
du meme type alors je ne developpe pas celui-ci beaucoup plus.
(mais je répondrais à toute question intelligente sans
probleme).
Une ruse de programmeur pourrait etre la suivante.. exemple pris encore
une
fois, sur Handy Dandy. Le nombre de vie est initialisé dans une
adresse donnée,
et remodifié. Voyez plutot (extrait de handy dandy) :
6003 - A9 03 LDA #$03
6005 - 85 50 STA $50
....
7733 - A9 03 LDA #$03
7735 - 8D 04 60 STA $6004
....
Sur cet exemple, il va falloir modifier les deux valeurs 03 pour
modifier le
nombre de vies initial !..
En programmation meme de betes routines comme celles-ci, il y a de quoi
écrire
plusieurs fois la bible, alors je préfère vous laisser
ici..
Amicalement, Godfather
-------------------------------------------------------------------------------
Retour sommaire
Cours 18 appendix outils.
-------------------------------------------------------------------------------
Cours 18 : Fixez vous la vie !!..
(Appendix)
Godfather
-------------------------------------------------------------------------------
Révision
1.10
Decembre 1987
Dernier fichier pour ce cours, c'est l'appendix pratique.. soit les mode
d'emplois ou les références necessaires pour savoir
utiliser les programmes que
j'ai évoqué dans ce cours, et voilà, et
voilà, ils arrivent, ils arrivent...
Ces programmes ne sont pas en catalog, mais ils feront partie du cours
19, car
ils sont plus adaptés aux fixs que l'on étudiera ds ce
cours, qu'à ceux du 18.
APPENDIX PRATIQUE : LES
OUTILS A SAVOIR MANIER...
-----------------------------------------------------------------------
A. Programmes de recherches
d'octets (cours 8)
B. Disk_compare, et
Fast_compare (Sam-1985)
C.
Rwts
(cours 3)
-------------------------------------------------------------------------------
APPENDIX PRATIQUE (A) : LES PROGRAMMES DE RECHERCHE D'OCTETS (=>
COURS 8)
-------------------------------------------------------------------------------
Ici, on ne parlera pas de tous les programmes vus dans le cours 8
à savoir
que - n'étant pas dans le domaine du soft plombé ou
codé - tout est
théoriquement en clair : on est dans le domaine de la
programmation, bien sur!
Que dire?..
Il y aura deux cas de figure par rapport aux programmes à fixer :
1. Le programme est en une
face => Recherche disk => Copy II+ 5.x
2. Le programme est en
catalog => Recherche ram => David Dos (Find)
Pour plus de détails sur ces deux programmes, je ne peux que
vous demander de
vous referer à ce fameux cours sur la recherche d'octets, qui a
été fait il y
a bien longtemps justement pour ce type de recherches de nombre de vies
ou
autre..
Le cours 8, je ne dirais pas qu'il est indispensable, mais il est
indispensable
Si j'ose dire..
Bon!.. Je passe à la suite et je continue donc...
-------------------------------------------------------------------------------
APPENDIX PRATIQUE (B) : DISK COMPARE et FAST COMPARE de SAM 1985
-------------------------------------------------------------------------------
Ces deux programmes de sam dont le second n'est que l'évolution
en fboot et
complètement débuggé du premier, sont LES
programmes ("THE" programs)
necessaires pour la recherche des parametres d'un jeu d'aventure ou
d'un jeu
de role, nous venons de le voir.. leur fonctionnement est simple..
Ce programme, je me répète, permet de comparer deux
disquettes octet par octet
On vous demande dés le début "Visualisation des secteurs
(O/N) ?".
Si vous indiquez oui, vous pourrez éditer tous les secteurs
différents, ne
serait-ce que d'un seul octet, et sinon, le programme ne fera que
désigner par
un carré blanc les secteurs différents..
Toutes les touches necessaires à l'édition d'un secteur
sont données par le
programme..
( P ) Passage
d'une page à une autre ($00-7F ou $80-FF)
( Esc ) Sortir de
l'édition.. continuer le compare_disk
( S ) Editer le
secteur différent
( Spc ) Ne pas éditer
le secteur différent, continuer le compare_disk
Ce programme peut egalement servir pour le déplombage, mais je
vous en
reparlerais dans un futur cours où ce sera vraiment utile..
-------------------------------------------------------------------------------
APPENDIX PRATIQUE (C) : RWTS 3.3 (SREAD/SWRITE COURS 7)
-------------------------------------------------------------------------------
Si vous souhaitez mettre au point un fix en basic tel les
éditeurs de
personnages pour bard's tale ou ultima, il faut savoir absolument
manier la
rwts 3.3 (cours 3) ou encore posseder et savoir manier la routine
Sread/Swrite
Son maniement est fort simple mais très éfficace (cours
7)...
Il suffit de faire un programme du style, sachant que l'on doit le
nombre
de tire-bouchons de votre guerrier galactique se trouve en piste $12 09
AC :
- Lecture de la piste $12 09
dans un Buffer inutilisé ($2000-20FF)
- Print de l'ancienne valeur
("vous aviez xx tire-bouchons")
- Input la nouvelle
valeur ("combien voulez vous en mettre ?")
- Poke de la nouvelle valeur
en Buffer+$AC (soit ici $20AC)
- Ecriture de la piste $12
09 à partir du buffer initial modifié ($20-)
-------------------------------------------------------------------------------
Retour sommaire
Cours 18 au secours.
-------------------------------------------------------------------------------
AU SECOURS : JE SAIS PAS COMMENT FAIRE...
-------------------------------------------------------------------------------
Deux parties comme annoncé dans le premier fichier :
1. Je sais pas parler
Hexadécimal
2. Je connais pas les
nouveaux programmes de recherche d'octets (C8).
-------------------------------------------------------------------------------
APPENDIX (1) : JE SAIS PAS PARLER HEXA
-------------------------------------------------------------------------------
Dans le cours 7, on voyait comment convertir de l'hexa en
décimal, et inverse-
ment.. un programme nous faisait ca automatiquement.. si vous n'avez ni
le
cours 7 (plombage/déplombage) ce qui est dommage, parce qu'il
est booo,
ni un Apple IIgs (avec en "outils" la fonction convert hex/dec/binaire),
alors vous etes venu ici pour quelque chose : pour comprendre.
Je ne vais pas tout redevelopper, mais ceci vous aidera normalement
sérieusement à comprendre comment connaitre
l'équivalent hex/dec d'un nombre
donné, ce qui est utile dans le monde des fixs. (si vous ne
voyez pas
pourquoi dores et déjà, vous comprendrez ca plus tard
avec l'expérience!).
surtout quand vous ferez des fixs en basic pour des programmes en une
face
par exemple - ce qu'on fera dans le prochain cours sur les fixs - comme
ceux que j'avait adjoint au premier cours (par envie).
Si je retrouve ma machine un de ces jours derriere les tonnes de papier
qui jonchent les murs et le sol de mon bureau, je vous donnerais sa
référence.. enfin, renseignez vous, y'a pleins de petites
casio pas cheres
avec l'option convert hex/dec tous touche shift.
Pour convertir un nombre simple (000-255) en hexa, il suffit de faire
un POKE 768,Valeur puis CALL-151 et 300(return). Vous obtenez la val
hexa.
Inversement, il suffit de faire CALL-151 puis 300:xx (valeur en hexa)
puis de faire ?PEEK(768) une fois revenu au basic par un 3D0G.
Pour convertir un nombre supérieur à #$FF, il faut faire :
CALL-151, puis 300:LL HH (Adresse basse puis haute) puis 3D0G et enfin,
PRINT PEEK(768)+PEEK(769)*256.
Pour l'inverse, il suffit de faire POKE 769,INT(PEEK(Nombre)/256) et
POKE 768,((Nombre/256)-PEEK(769))*256 et enfin CALL-151 et 300.301(ret).
Vous obtenez ainsi la val hexa basse puis haute de votre nombre. Ok?
-------------------------------------------------------------------------------
APPENDIX (2) : NOUVEAUX PROGRAMMES DE RECHERCHE D'OCTETS
-------------------------------------------------------------------------------
Voici trois titres de programmes permettant la recherche d'octets, que
je
n'avais pas cité - cause d'ignorance - dans le cours 8..
m'enfin, de toutes
facons, ca fait xeme emploi avec les autres.
Ce sont : - Locksmith
6.3A (option FINDER)
-
D.A.R.K.
(préféré de The Jokersoft)
- MOBBY DISK II
(préféré de The ACS - Dijon)
Ceci dit au passage.. je vais d'ailleurs surement faire bientot un
remake
du cours 8. (si je trouve le tps necessaire à ca!)
Papi.
-------------------------------------------------------------------------------
Retour sommaire
Et la prochaine fois.
-------------------------------------------------------------------------------
ET LA PROCHAINE FOIS...
-------------------------------------------------------------------------------
Prochain cours sur les fixs
: fixs intégrés, fixs de jeux d'aventure
et pleins d'autres choses
encore !.. patience !
Pour ce qui est des fixs
intégrés, vous pouvez déjà sauter sur le
tout dernier des godfather's
products, le #11 : Accolade boot 1.00...
ca vous aidera enormement
quand viendra le moment de ce nouveau cours
sur les fixs, et de toutes
facons il vs sera déjà utile en tant que
boot signeur de disks, et
compagnie..
Amicalement, Godfather
------------------------------------------------------------------------------
Retour sommaire
Fix MISS PACMAN.
-------------------------------------------------------------------------------
FIXEZ VOUS LES VIES - MISS PACMAN
-------------------------------------------------------------------------------
Adresse de
départ
- $17FA
Adresse de la routine d'initialisation du nombre de
vies - $285D (A9)
Adresse du nombre de
vies
- $285E (03)
Adresse de la routine de décrément du nombre de
vies
- $27E0 (CE)
Adresse de la routine d'initialisation du nombre de
joueurs - $206B (A9)
Adresse de stockage du nombre de joueurs (max
02)
- $0341 $36A
Adresse de stockage du nombre de
vies
- $0342
Retour sommaire
Informations cours.
INFORMATIONS CONCERNANT LES COURS
-------------------------------------------------
Fichier mis à jour ce 17 Avril 88!
===============================================================================
2 NOUVEAUX GODFATHER'S PRODUCTS (10,11) : SCANNER 2*HAUTE RES. +
ACCO'BOOT 1.00
-------------------------------------------------------------------------------
GP10 : Programmé par la $FF59 connection, voici un super scanner
double haute,
tels ceux du cours 5..
géant!...
GP11 : Pour s'incruster sur un boot (signature, fix integré,
etc..), rien de
plus géant que ce boot
inédit style Tom E.Hawk boot!.. le programme
est accompagné d'un fichier
explicatif très complet, sur le mode
d'emploi technique, et toutes les
applications que l'on peut en faire..
De plus, ici, un concours vous
sera proposé. 1er prix : 2 cours gratuits
===============================================================================
GODFATHER'S PRODUCTS EPYX COPY 3.22 : DU NOUVEAU
!!.. ==> CRACKER EPYX 1.22
-------------------------------------------------------------------------------
Un déplombeur AUTOMATIQUE concernant la protection Epyx, ca vous
interesse ?
Il vient de naitre dans la nuit du 29 au 30 janvier 1988 !..
Pour vous le procurer, c'est simple puisque je l'ai adjoint au fameux
EPYX COPY
C'est la toute nouvelle version du Godfather's Products #5.. et ca vous
cracke
Spy 3 ou Sub battle en un rien de temps sans que vous ayez à vs
casser la tete!
Et les prochains ?...
===============================================================================
LES REVISIONS EN
PROJETS Cours 11
Révision 2.00 + Cours 3 révision 3.00
-------------------------------------------------------------------------------
C11 : A ce super cours sur les techniques folles de mise en catalog, je
vais
----- rajouter la super technique presque toujours infaillible de Fusco
Volant
(un ex-cracker américain!).. utilisant la carte language pour
mettre en catalog
les softs n'utilisant pas la carte language !!...
C03 : A ce cours sur la rwts 3.3, je vais rajouter le moyen d'appeler
le dos
----- pour formatter une seule piste, ce qui peut etre très
utile, si l'on se
lance dans la programmation d'un copieur, ou plus encore d'un
plombeur.. ou si
une piste venait à délirer (poussière) et qu'il
faille la reformater, et elle
seule.. il y a toute une procédure à connaitre.. et c'est
pour bientot!
LES NOUVEAUX COURS EN PROJET :
===============================================================================
COURS 17.2 REVISION 1.00 : PROTECTION ULTIMA 5
COURS 18.2 REVISION 1.00 : FIXEZ VOUS LA VIE 2
COURS 19 REVISION 1.00 : PROTECTION ELECTRONIC ARTS 1988
(Originaux disponibles : Legacy of the Ancients, Chuck Yeager's Advanced
Flight Trainer, Wasteland, Death Lord...)
Et en plus : COURS 01 REVISION 4.10 (Update
25/02/88)
COURS 02 REVISION 1.2D (Update 02/02/88)
COURS 03 REVISION 2.51 (Update 06/03/88)
COURS 12 REVISION 1.70 (Update 02/02/88) Déjà
disponibles !
-------------------------------------------------------------------------------
Et je le rappelle : toutes les révisions de cours sont gratuites
!!
Retour sommaire