Cours de déplombage 18



Ecran


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.
----------------------------------------------------------------------


Floppy
DOS 3.3
Download Cours GDF 18 rev 1.00 (gzipped)


Sommaire


Lien Article
Voir Introduction.
Voir Cours 18 1er fichier.
Voir Cours 18 2nd fichier.
Voir Cours 18 3eme fichier.
Voir Cours 18 appendix outils.
Voir Cours 18 au secours.
Voir Et la prochaine fois.
Voir Fix MISS PACMAN.
Voir Informations cours.

hr cours GDF

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

hr cours GDF

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

hr cours GDF

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

hr cours GDF

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

hr cours GDF

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

hr cours GDF

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

hr cours GDF

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

hr cours GDF

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

hr cours GDF

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