Adapter le niveau adverse au vôtre
Ceci n'est pas un tuto puisqu'il n'a pas pour objectif de vous apprendre quelque chose, je vais juste vous donner une routine ASM que j'ai faite et quelques explications pour que vous puissiez l'utiliser vous aussi. Je précise que les routines ASM disponibles ici sont prévues pour la version Rouge Feu, mais elles sont aussi compatibles avec les autres versions, il suffit de trouver les offsets pour ces versions.
Avec ça vous pourrez faire en sorte que le niveau des Pokémon adverses (pour les dresseurs uniquement) soit le même que celui du meilleur Pokémon de votre équipe, enfin presque, car il y a un système pour éviter les abus.
Imaginez une équipe de Pokémon niveau 5 qui bat la ligue parce que le maître a des Pokémon niveau 5 lui aussi. J'ai donc fait en sorte que si le meilleur Pokémon de l'équipe est trop faible le niveau adverse ne s'adapte pas. Par exemple, si l'adversaire a un Pokémon qui aurait dû être niveau 49, il y a alors 2 situations :
- mon Pokémon le plus fort est niveau 87, dans ce cas l'adversaire sera de niveau 87 lui aussi.
- mon Pokémon le plus fort est niveau 38, dans ce cas l'adversaire conservera son niveau 49.
Voilà une petite vidéo pour illustrer ça (regardez les niveaux adverse et le mien) :
Avec ce système, la difficulté est garantie tout au long de l'aventure, fini les parties où on se contentait de monter 1 seul Pokémon, ici ça ne marchera pas. Il faudra impérativement entraîner plusieurs Pokémon de types différents.
Bon, concrètement comment faire, pour commencer il vous faut trouver un espace libre dans la rom d'une taille minimum de 0x3C et noter cet offset.
Maintenant rendez-vous à l'offset 0x0003E6F2 (0x000690AA pour Émeraude) et remplacez ceci :
`50 1E 00 06 00 0E 70 BC 02 BC 08 47 00 00`
Par ceci :
`01 48 00 47 00 00 XX XX XX 08 00 00 00 00`
Où XX XX XX est un pointeur de l'offset que je vous ai demandé de noter, enfin pas tout à fait puisqu'il faut faire +1 à cet offset. Par exemple si j'avais choisi l'offset 0x7134C0 j'aurais alors obtenu le pointeur C1 34 71 08.
Pour ceux qui souhaitent comprendre à quoi ça sert regardez avec le désassembleur, c'est simple à comprendre.
Ensuite rendez-vous à l'offset que vous aviez choisi et collez-y ceci (il s'agit de la routine) :
`50 1E 00 06 00 0E 7D 25 2D 02 1C 35 6C 46 24 04 24 0C AC 42 0A D1 07 4C 00 25 64 26 6E 43 A6 5D B0 42 00 D2 30 1C 01 35 06 2D F6 D3 70 BC 02 BC 08 47 00 00 D8 42 02 02`
Si vous utilisez Émeraude remplacez D8 42 02 02 par 40 45 02 02.
Et voilà, vous pouvez essayer, tout fonctionne correctement, et si jamais ce n'est pas le cas et que vous remarquez un bug n'hésitez pas à en faire part ici, mais normalement j'ai fait ce qu'il fallait pour que seul le niveau des Pokémon des dresseurs soit changé.
Pour ceux que ça intéresse voici la routine au format texte:
```
.align 2
.thumb
start:
sub r0, r2, #0x1
lsl r0, r0, #0x18
lsr r0, r0, #0x18
mov r5, #0x7D
lsl r5, #0x8
add r5, #0x1C
mov r4, r13
lsl r4, #0x10
lsr r4, #0x10
cmp r4, r5
bne end
ldr r4, playerteam
mov r5, #0x0
hightLevel:
mov r6, #0x64
mul r6, r5
ldrb r6, [r4, r6]
cmp r0, r6
bhs checkLast
mov r0, r6
checkLast:
add r5, #0x1
cmp r5, #0x6
blo hightLevel
end:
pop \{r4-r6\}
pop \{r1\}
bx r1
playerteam:
.word 0x20242D8
```
Pour toute question ou suggestion, dirigez-vous sur le topic dédié du forum.
Par Unifag

