Rom Hack & Fan Game

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 donnez 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 disponible ici sont prévu 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 adverse (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 à des Pokémon niveau 5 lui aussi. J'ai donc fais 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 à un Pokémon qui aurait du être niveau 49, il y a alors 2 situation :
- 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.

Voila une petite vidéo pour illustrer ça (regardez les niveaux adverse et le mien) :

Avec ce système la difficulté est garanti 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 commencez il vous faut trouver un espace libre dans la rom d'une taille minimum de 0x3C et noter cette 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 est demandé de noter, enfin pas tout à fait puisqu'il faut faire +1 à cette offset. Par exemple si j'avais choisis l'offset 0x7134C0 j'aurais alors obtenu le pointeur C1 34 71 08.
Pour ceux qui souhaite 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 voila, vous pouvez essayer, tous fonctionne correctement, et si jamais ce n'est pas le cas et que vous remarquez un bug n'hésitez pas à en faire par ici, mais normalement j'ai fait ce qu'il fallait pour que seul le niveau des Pokémon des dresseurs soit changer.

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 toutes questions ou suggestions, dirigez-vous sur le topic dédié du forum.

Par Unifag

Par Loris
  • Lyrilusc 12/12/2020 à 16:10
    on utilise advance map pour faire ça ?
  • Gokan 30/05/2019 à 03:22
    vous connaissez des hack roms qui utilisent ce même système excepté emeraude plus ?