[TUTO][GBA] Scripts : Le giga tuto des CS et des attaques hors combat.

Pages: [1]

Pichu388

  • Membre
  • 399 posts
20 juillet 2019, 15:04
Bonjour, bonsoir chers amis. Aujourd'hui, je suis de retour pour vous présenter mes recherches sur tout le système de CS des versions GBA de pokémon. Nous allons tout de suite entrer dans le vif du sujet car c'est quelque chose de long qui nous attend.

Connaissances à avoir :
- Savoir scripter
- C'est tout

1. Comprendre

Premièrement, voici une explication du fonctionnement des CS.
Pour fonctionner, lorsque l'on agit avec certains éléments du décor, un script modifiable simplement avec XSE est appelé. Vous trouverez la liste des offsets des scritps à la fin de ce tutoriel.
Décortiquons-en un ensemble. Voici le script appelé lorsque l'on veut utiliser Coupe :
Spoiler
'---------------
#org 0x1BC8A8
special 0x187
compare LASTRESULT 0x2
if 0x1 goto 0x81A6509
lockall
checkflag 0x821
if 0x0 goto 0x81BC91C
checkattack 0xF
compare LASTRESULT 0x6
if 0x1 goto 0x81BC91C
setanimation 0x0 LASTRESULT
bufferpartypokemon 0x0 LASTRESULT
bufferattack 0x1 0xF
msgbox 0x81BC929 MSG_YESNO '"Cet arbre semble pouvoir être\nCOU..."
compare LASTRESULT 0x0
if 0x1 goto 0x81BC926
msgbox 0x81BC96A MSG_KEEPOPEN '"[buffer1] utilise [buffer2]."
closeonkeypress
doanimation 0x2
waitstate
goto 0x81BC90B

'---------------
#org 0x1A6509
release
end

'---------------
#org 0x1BC91C
msgbox 0x81BC979 MSG_SIGN '"Cet arbre semble pouvoir être\nCOU..."
releaseall
end

'---------------
#org 0x1BC926
closeonkeypress
releaseall
end

'---------------
#org 0x1BC90B
applymovement LASTTALKED 0x81BC91A
waitmovement 0x0
hidesprite LASTTALKED
releaseall
end


'---------
' Strings
'---------
#org 0x1BC929
= Cet arbre semble pouvoir être\nCOUPE.\pVoulez-vous utiliser COUPE?

#org 0x1BC96A
= [buffer1] utilise [buffer2].

#org 0x1BC979
= Cet arbre semble pouvoir être\nCOUPE.


'-----------
' Movements
'-----------
#org 0x1BC91A
#raw 0x69 'mov69
#raw 0xFE 'End of Movements

Bon, c'est vrai, ça paraît gros. Mais nous allons voir tout ça ensemble.

#org 0x1BC8A8
special 0x187
compare LASTRESULT 0x2
if 0x1 goto 0x81A6509

Bon, on commence avec quelque chose qui est assez étrange. D'après pokecommunity, ce special ci met une valeur particulière dans LASTRESULT, qui semble être un check d'erreur. Si il est égal à 0x2, le script est renvoyé sur un autre morceau qui lui donne fin. Bref, ça, on le laisse.

lockall
checkflag 0x821
if 0x0 goto 0x81BC91C

Ça, facile, si vous connaissez la base. Le checkflag vérifie si le joueur possède un badge. Si ce n'est pas le cas, le script redirige vers ceci :

#org 0x1BC91C
msgbox 0x81BC979 MSG_SIGN '"Cet arbre semble pouvoir être\nCOU..."
releaseall
end

Il affiche juste le fameux message « Cet arbre semble pouvoir être coupé. ». Passons à la suite :

checkattack 0xF
compare LASTRESULT 0x6
if 0x1 goto 0x81BC91C

Ici, des morceaux de code assez spécifiques. Le checkattack vérifie si l'un des pokémons de notre équipe possède l'attaque 0xF dans l'index (que vous pourrez trouver en fin de tutoriel), dans notre cas l'attaque coupe. Si c'est le premier pokémon de l'équipe, alors la variable LASTRESULT sera fixée à 0x0, si c'est le second, à 0x1... etc. Donc, si aucun pokémon n'a coupe dans notre équipe, LASTRESULT vaudra donc 0x6. Dans ce cas, on renvoie vers le même morceau que tout à l'heure et on affiche le message. Sinon, on continue :

setanimation 0x0 LASTRESULT
bufferpartypokemon 0x0 LASTRESULT
bufferattack 0x1 0xF
msgbox 0x81BC929 MSG_YESNO '"Cet arbre semble pouvoir être\nCOU..."
compare LASTRESULT 0x0
if 0x1 goto 0x81BC926

Ici, on a quelque chose de très spécifique, mais d'assez simple. On a comme valeur dans la variable LASTRESULT le numéro du pokémon dans notre équipe possédant l'attaque coupe. On demande donc au jeu de préparer une animation de type 0x0 avec notre nième pokémon. Je ne suis pas sûr à 100% de ce que je dis mais si je ne me trompe pas, cette ligne gère l'animation de la bande noire avec le pokémon par-dessus. Quant-à la ligne suivante, bufferpartypokemon permet au jeu de charger le nom du pokémon du slot numéro LASTRESULT, soit le pokémon ayant coupe, dans le bufferslot 0x0. Cela permettra d'afficher le nom ou surnom du pokémon dans le message. Ensuite, le bufferattack stocke le nom de l'attaque 0xF dans l'emplacement 0x1 afin de l'afficher en tant que [buffer2] dans le message.
Concrètement, ça veut simplement dire que [buffer1] et [buffer2] seront transformés en « Nom du pokémon » et « Nom de l'attaque » (ici, coupe) quand ils seront utilisés dans un msgbox.
Ensuite, on a une simple boite de question Oui/Non, et si on répond non, le script est redirigé pour qu'il s'arrête.

Ensuite :
msgbox 0x81BC96A MSG_KEEPOPEN '"[buffer1] utilise [buffer2]."
closeonkeypress
doanimation 0x2
waitstate
goto 0x81BC90B

Les fameux buffers, que j'ai expliqués juste avant. Vous connaissez closeonkeypress. La commande doanimation 0x2 permet de jouer le son de coupe. Par exemple, dans le code des rochers à casser, on trouve doanimation 0x25, qui joue un son différent.
La commande waitstate permet d'attendre la fin du son pour continuer le script. Enfin, le goto ramène au code suivant :

applymovement LASTTALKED 0x81BC91A
waitmovement 0x0
hidesprite LASTTALKED
releaseall
end

'-----------
' Movements
'-----------
#org 0x1BC91A
#raw 0x69 'mov69
#raw 0xFE 'End of Movements

Bon, les applymovements, vous connaissez maintenant. Le #raw 0x69 correspond à l'animation de coupe. Le hidesprite cache l'arbuste une fois détruit, puis le releaseall termine notre script. Pfiou, enfin.
Pour ceux qui veulent aller plus loin
Techniquement, l'applymovement active plutôt une animation particulière pour l'arbuste et le rocher, mais j'imagine que ça activerait toute animation sur des sprites ayant quatre frames précisément, parce que le code d'éclate-roc utilise le #raw 0x68, qui a exactement la même utilité. J'imagine que c'est une histoire de délai, enfin je n'en ai aucune idée. Si quelqu'un a des infos là dessus un jour, je veux bien qu'il vienne en MP.

Que pouvons nous comprendre et conclure ? Eh bien, dans ce script, nous avons deux grandes parties importantes :
- Les vérifications : On vérifie que le joueur a le bon badge et qu'il a bien l'attaque que l'on veut utiliser. Ensuite, on lui demande si il veut effectuer son action : surfer, couper un arbre, utiliser force... Si oui, on passe à la suite.
- Les animations : On joue le son pour notre animation, puis on affiche notre message de validation, et l'animation de notre pokémon qui utilise son attaque. Puis, on effectue les actions spécifiques, c'est à dire à peu près tout ce que l'on veut faire dans un script. C'est ici que dans notre seconde partie, vous laisserez place à votre imagination.

2. Innover


Voici maintenant la partie qui va intéresser le plus de monde. Tout d'abord, listons ce que nous pouvons faire, par niveau de difficulté :

- Supprimer le check de badges ou modifier le badge nécessaire pour utiliser une certaine CT.
- Modifier les flags pour demander de nouvelles conditions, un objet spécifique, etc.
- Créer une nouvelle interaction avec le décor en créant un script inspiré de ceux ci.

Commençons donc dans l'ordre. Pour supprimer la necessité d'utiliser un badge, rien de plus simple : dans votre script, il y a toujours un checkflag demandant un badge. Il suffit de supprimer cette condition, et hop, vos pokémons pourront utiliser vos CS sans badge spécifique.
Problèmes spécifiques
Dans le menu pokémon, je ne crois pas que ce soit les mêmes scripts qui soient utilisés. Donc, il y aura toujours ce check de badge. Incohérent, mais ne gêne donc pas le jeu.

De plus, il n'est donc pas possible de désactiver ce check pour Vol et Flash.
Pour rester dans ce qui est facile, voyons maintenant comment faire pour devoir utiliser un objet à la place d'une CS. Tout d'abord, il faudra supprimer cette partie :
checkattack 0x[index de l'attaque]
compare LASTRESULT 0x6
if 0x1 goto 0x8[offset]
setanimation 0x0 LASTRESULT
bufferpartypokemon 0x0 LASTRESULT
bufferattack 0x1 0x[index de l'attaque]

Ensuite, il faudra changer les textes, en particulier les [buffer1] et [buffer2], car si les buffer n'ont pas été définis, le jeu ne va pas apprécier et faire de violents bugs.
Enfin, on pourra ajouter ces deux commandes pour vérifier si le joueur possède un objet spécifique :
checkitem 0x[index de l'item]
compare LASTRESULT  0x0
if 0x1 goto 0x[fin du script]
Et s'il ne s'agit pas d'un objet rare mais d'un objet consommable, on peut même ajouter :
checkitem 0x[index de l'item]
compare LASTRESULT  0x0
if 0x1 goto 0x[fin du script]
removeitem 0x[index de l'item] 0x1 (0x1 étant la quantité à supprimer)

N'oubliez pas de repointer, pour  être sûr que votre script n'interfère pas avec les autres déjà présents ici.

Problèmes spécifiques
À propos du removeitem, si vous essayez de supprimer plus d'éléments que le joueur en a réellement, cette commande ne fera absolument rien et conservera le nombre d'éléments. (Par exemple, si vous essayez de retirer 6 Master Balls alors que le joueur n'en a que 5, il les gardera toutes les 5).

À propos de l'animation, la commande setanimation demande un index de pokémon dans l'équipe, hors, cela empêche d'afficher autre chose sur la bande noire. Il y aura donc un affichage plutôt buggé. Pour la supprimer, je suis presque certain qu'il faut éditer le code du special 0x2, 0x9, 0x25 etc... via l'asm. Mickey ou Myst, si vous passez par ici, j'imagine que vous pourrez confirmer ce que je dis.

Enfin, nous allons voir comment créer notre propre script permettant d'intéragir avec la map. Imaginons par exemple que vous ayez envie de pouvoir rencontrer des pokémons sauvages en utilisant l'attaque coup d'boule sur un arbre, par exemple. Cela pourrait marcher avec n'importe quoi, une attaque eau pour réveiller un Simularbre, un lance flammes pour faire fondre de la glace, couplée avec un setmaptile... Les possibilités sont infinies.

Partons donc sur notre idée de coup d'boule. Tout d'abord, partons de nos connaissances de ce que l'on a découvert en première partie. On part de la base suivante :

special 0x187
compare LASTRESULT 0x2
if 0x1 goto 0x81A6509
lockall

Ça, c'est la base des autres scripts, autant le garder, ça évitera des bugs. On ne souhaite pas vérifier de flag, donc on passe à la suite directement :

checkattack 0x1D (vous pouvez trouver la liste des attaques en hexadécimal à la fin de ce tutoriel.)
compare LASTRESULT 0x6
if 0x1 goto 0x8[offset1]

'----
#org [offset1]
msgbox 0x8[texte1] MSG_SIGN '"Cet arbre semble pouvoir être secoué."
releaseall

Si le joueur n'a pas l'attaque que l'on veut, ici coup d'boule, on le renvoie à un script le prévenant que cet arbre peut être secoué. Bien sûr, après ce texte, on libère le joueur.

On continue ensuite après le if goto :

bufferpartypokemon 0x0 LASTRESULT
bufferattack 0x1 0xF
msgbox 0x8[texte2] MSG_YESNO '"Cet arbre semble pouvoir être secoué. Le cogner avec coup d'boul ?"
compare LASTRESULT 0x0
if 0x1 goto 0x81BC926

On met dans le [buffer0] le nom du pokémon  ayant l'attaque, et dans le [buffer1] l'attaque. Si le joueur ne souhaite pas cogner l'arbre, alors on le redirige vers une partie qui met fin au script. Ensuite, on ajoute :
msgbox 0x81BC96A MSG_KEEPOPEN '"[buffer1] utilise [buffer2]."
closeonkeypress

Pas besoin de changer l'offset ici, le texte est déjà très bien. Rien ne vous l'empêche, bien entendu.
Ensuite, c'est la fête. Maintenant, on peut ajouter le code que l'on veut et laisser place à notre imagination. On peut placer un random et lancer un wildbattle selon le résultat du random, beaucoup de choses sont possibles. Mais là, c'est à vous maintenant d'innover, car mon travail s'achève ici. Je vous redirige alors vers les tutos de scripting du site, qui vous permettront de faire ce que vous voulez ensuite.

3. Ressources


Liste des attaques en hexadécimal
0x1 : ECRAS'FACE
0x2 : POING-KARATE
0x3 : TORGNOLES
0x4 : POING COMETE
0x5 : ULTIMAPOING
0x6 : JACKPOT
0x7 : POING DE FEU
0x8 : POINGLACE
0x9 : POING-ECLAIR
0xA : GRIFFE
0xB : FORCE POIGNE
0xC : GUILLOTINE
0xD : COUPE-VENT
0xE : DANSE-LAMES
0xF : COUPE
0x10 : TORNADE
0x11 : CRU-AILE
0x12 : CYCLONE
0x13 : VOL
0x14 : ETREINTE
0x15 : SOUPLESSE
0x16 : FOUET LIANES
0x17 : ECRASEMENT
0x18 : DOUBLE PIED
0x19 : ULTIMAWASHI
0x1A : PIED SAUTE
0x1B : MAWASHI GERI
0x1C : JET DE SABLE
0x1D : COUP D'BOULE
0x1E : KOUD'KORNE
0x1F : FURIE
0x20 : EMPAL'KORNE
0x21 : CHARGE
0x22 : PLAQUAGE
0x23 : LIGOTAGE
0x24 : BELIER
0x25 : MANIA
0x26 : DAMOCLES
0x27 : MIMI-QUEUE
0x28 : DARD-VENIN
0x29 : DOUBLE-DARD
0x2A : DARD-NUEE
0x2B : GROZ'YEUX
0x2C : MORSURE
0x2D : RUGISSEMENT
0x2E : HURLEMENT
0x2F : BERCEUSE
0x30 : ULTRASON
0x31 : SONICBOOM
0x32 : ENTRAVE
0x33 : ACIDE
0x34 : FLAMMECHE
0x35 : LANCE-FLAMME
0x36 : BRUME
0x37 : PISTOLET A O
0x38 : HYDROCANON
0x39 : SURF
0x3A : LASER GLACE
0x3B : BLIZZARD
0x3C : RAFALE PSY
0x3D : BULLES D'O
0x3E : ONDE BOREALE
0x3F : ULTRALASER
0x40 : PICPIC
0x41 : BEC VRILLE
0x42 : SACRIFICE
0x43 : BALAYAGE
0x44 : RIPOSTE
0x45 : FRAPPE ATLAS
0x46 : FORCE
0x47 : VOL-VIE
0x48 : MEGA-SANGSUE
0x49 : VAMPIGRAINE
0x4A : CROISSANCE
0x4B : TRANCH'HERBE
0x4C : LANCE-SOLEIL
0x4D : POUDRE TOXIK
0x4E : PARA-SPORE
0x4F : POUDRE DODO
0x50 : DANSE-FLEUR
0x51 : SECRETION
0x52 : DRACO-RAGE
0x53 : DANSEFLAMME
0x54 : ECLAIR
0x55 : TONNERRE
0x56 : CAGE-ECLAIR
0x57 : FATAL-FOUDRE
0x58 : JET-PIERRES
0x59 : SEISME
0x5A : ABIME
0x5B : TUNNEL
0x5C : TOXIK
0x5D : CHOC MENTAL
0x5E : PSYKO
0x5F : HYPNOSE
0x60 : YOGA
0x61 : HATE
0x62 : VIVE-ATTAQUE
0x63 : FRENESIE
0x64 : TELEPORT
0x65 : TENEBRES
0x66 : COPIE
0x67 : GRINCEMENT
0x68 : REFLET
0x69 : SOIN
0x6A : ARMURE
0x6B : LILLIPUT
0x6C : BROUILLARD
0x6D : ONDE FOLIE
0x6E : REPLI
0x6F : BOUL'ARMURE
0x70 : BOUCLIER
0x71 : MUR LUMIERE
0x72 : BUEE NOIRE
0x73 : PROTECTION
0x74 : PUISSANCE
0x75 : PATIENCE
0x76 : METRONOME
0x77 : MIMIQUE
0x78 : DESTRUCTION
0x79 : BOMB'OEUF
0x7A : LECHOUILLE
0x7B : PUREDPOIS
0x7C : DETRITUS
0x7D : MASSD'OS
0x7E : DEFLAGRATION
0x7F : CASCADE
0x80 : CLAQUOIR
0x81 : METEORES
0x82 : COUD'KRANE
0x83 : PICANON
0x84 : CONSTRICTION
0x85 : AMNESIE
0x86 : TELEKINESIE
0x87 : E-COQUE
0x88 : PIED VOLTIGE
0x89 : INTIMIDATION
0x8A : DEVOREVE
0x8B : GAZ TOXIK
0x8C : PILONNAGE
0x8D : VAMPIRISME
0x8E : GROBISOU
0x8F : PIQUE
0x90 : MORPHING
0x91 : ECUME
0x92 : UPPERCUT
0x93 : SPORE
0x94 : FLASH
0x95 : VAGUE PSY
0x96 : TREMPETTE
0x97 : ACIDARMURE
0x98 : PINCE-MASSE
0x99 : EXPLOSION
0x9A : COMBO-GRIFFE
0x9B : OSMERANG
0x9C : REPOS
0x9D : EBOULEMENT
0x9E : CROC DE MORT
0x9F : AFFUTAGE
0xA0 : ADAPTATION
0xA1 : TRIPLATTAQUE
0xA2 : CROC FATAL
0xA3 : TRANCHE
0xA4 : CLONAGE
0xA5 : LUTTE
0xA6 : GRIBOUILLE
0xA7 : TRIPLE PIED
0xA8 : LARCIN
0xA9 : TOILE
0xAA : LIRE-ESPRIT
0xAB : CAUCHEMAR
0xAC : ROUE DE FEU
0xAD : RONFLEMENT
0xAE : MALEDICTION
0xAF : FLEAU
0xB0 : CONVERSION 2
0xB1 : AEROBLAST
0xB2 : SPORE COTON
0xB3 : CONTRE
0xB4 : DEPIT
0xB5 : POUDREUSE
0xB6 : ABRI
0xB7 : MACH PUNCH
0xB8 : GRIMACE
0xB9 : FEINTE
0xBA : DOUX BAISER
0xBB : COGNOBIDON
0xBC : BOMB-BEURK
0xBD : COUD'BOUE
0xBE : OCTAZOOKA
0xBF : PICOTS
0xC0 : ELECANON
0xC1 : CLAIRVOYANCE
0xC2 : PRLVT DESTIN
0xC3 : REQUIEM
0xC4 : VENT GLACE
0xC5 : DETECTION
0xC6 : CHARGE-OS
0xC7 : VERROUILLAGE
0xC8 : COLERE
0xC9 : TEMPETESABLE
0xCA : GIGA-SANGSUE
0xCB : TENACITE
0xCC : CHARME
0xCD : ROULADE
0xCE : FAUX-CHAGE
0xCF : VANTARDISE
0xD0 : LAIT A BOIRE
0xD1 : ETINCELLE
0xD2 : TAILLADE
0xD3 : AILE D'ACIER
0xD4 : REGARD NOIR
0xD5 : ATTRACTION
0xD6 : BLABLA DODO
0xD7 : GLAS DE SOIN
0xD8 : RETOUR
0xD9 : CADEAU
0xDA : FRUSTRATION
0xDB : RUNE PROTECT
0xDC : BALANCE
0xDD : FEU SACRE
0xDE : AMPLEUR
0xDF : DYNAMOPOING
0xE0 : MEGACORNE
0xE1 : DRACOSOUFFLE
0xE2 : RELAIS
0xE3 : ENCORE
0xE4 : POURSUITE
0xE5 : TOUR RAPIDE
0xE6 : DOUX PARFUM
0xE7 : QUEUE DE FER
0xE8 : GRIFFE ACIER
0xE9 : CORPS PERDU
0xEA : AURORE
0xEB : SYNTHESE
0xEC : RAYON LUNE
0xED : PUIS. CACHEE
0xEE : COUP-CROIX
0xEF : OURAGAN
0xF0 : DANSE PLUIE
0xF1 : ZENITH
0xF2 : MACHOUILLE
0xF3 : VOILE MIROIR
0xF4 : BOOST
0xF5 : VIT.EXTREME
0xF6 : POUV.ANTIQUE
0xF7 : BALL'OMBRE
0xF8 : PRESCIENCE
0xF9 : ECLATE-ROC
0xFA : SIPHON
0xFB : BASTON
0xFC : BLUFF
0xFD : BROUHAHA
0xFE : STOCKAGE
0xFF : RELACHE
0x100 : AVALE
0x101 : CANICULE
0x102 : GRELE
0x103 : TOURMENTE
0x104 : FLATTERIE
0x105 : FEU FOLLET
0x106 : SOUVENIR
0x107 : FACADE
0x108 : MITRA-POING
0x109 : STIMULANT
0x10A : PAR ICI
0x10B : FORCE-NATURE
0x10C : CHARGEUR
0x10D : PROVOC
0x10E : COUP D'MAIN
0x10F : TOURMAGIK
0x110 : IMITATION
0x111 : VOEU
0x112 : ASSISTANCE
0x113 : RACINES
0x114 : SURPUISSANCE
0x115 : REFLET MAGIK
0x116 : RECYCLAGE
0x117 : VENDETTA
0x118 : CASSE-BRIQUE
0x119 : BAILLEMENT
0x11A : SABOTAGE
0x11B : EFFORT
0x11C : ERUPTION
0x11D : ECHANGE
0x11E : POSSESSIF
0x11F : REGENERATION
0x120 : RANCUNE
0x121 : SAISIE
0x122 : FORCE CACHEE
0x123 : PLONGEE
0x124 : COGNE
0x125 : CAMOUFLAGE
0x126 : LUMIQUEUE
0x127 : LUMI-ECLAT
0x128 : BALL'BRUME
0x129 : DANSE-PLUME
0x12A : DANSE-FOLLE
0x12B : PIED BRULEUR
0x12C : LANCE-BOUE
0x12D : BALL'GLACE
0x12E : POING DARD
0x12F : PARESSE
0x130 : MEGAPHONE
0x131 : CROCHETVENIN
0x132 : ECLATEGRIFFE
0x133 : RAFALE FEU
0x134 : HYDROBLAST
0x135 : POING METEOR
0x136 : ETONNEMENT
0x137 : BALL'METEO
0x138 : AROMATHERAPI
0x139 : CROCO LARME
0x13A : TRANCH'AIR
0x13B : SURCHAUFFE
0x13C : FLAIR
0x13D : TOMBEROCHE
0x13E : VENT ARGENTE
0x13F : STRIDO-SON
0x140 : SIFFL'HERBE
0x141 : CHATOUILLE
0x142 : FORCE COSMIK
0x143 : GICLEDO
0x144 : RAYON SIGNAL
0x145 : POING OMBRE
0x146 : EXTRASENSEUR
0x147 : STRATOPERCUT
0x148 : TOURBI-SABLE
0x149 : GLACIATION
0x14A : OCROUPI
0x14B : BALLE GRAINE
0x14C : AEROPIQUE
0x14D : STALAGTITE
0x14E : MUR DE FER
0x14F : BARRAGE
0x150 : GRONDEMENT
0x151 : DRACOGRIFFE
0x152 : VEGE-ATTAK
0x153 : GONFLETTE
0x154 : REBOND
0x155 : TIR DE BOUE
0x156 : QUEUE-POISON
0x157 : IMPLORE
0x158 : ELECTACLE
0x159 : FEUILLEMAGIK
0x15A : TOURNIQUET
0x15B : PLENITUDE
0x15C : LAME-FEUILLE
0x15D : DANSE DRACO
0x15E : BOULE ROC
0x15F : ONDE DE CHOC
0x160 : VIBRAQUA
0x161 : CARNAREKET
0x162 : PSYCHO BOOST

Liste des flags des badges
RFVF/FRLG :
0x820 : 1er badge
0x821 : 2ème badge
0x822 : 3ème badge
0x823 : 4ème badge
0x824 : 5ème badge
0x825 : 6ème badge
0x826 : 7ème badge
0x827 : 8ème badge

RSE :
0x867 : 1er badge
0x868 : 2ème badge
0x869 : 3ème badge
0x86A : 4ème badge
0x86B : 5ème badge
0x86C : 6ème badge
0x86D : 7ème badge
0x86E : 8ème badge

Liste des valeurs pour doanimation RFVF/FRLG
0x01 CUT (grass)? (black Pokémon bar + leaf spiral) I can confirm.
0x02 CUT
0x03 Part of the FLY animation sequence.
0x06 Part of the FLY animation sequence.
0x08 Buggy SURF-Pokémon sprite appears on map
0x09 SURF
0x19 PokeCenter healing machine
0x1E Part of the FLY animation sequence. (takeoff)
0x1F Part of the FLY animation sequence. Calls animation 0x3B.
0x20 Part of the FLY animation sequence.
0x22 Landing (after FLY)
0x23 FLY (crashes, probably because destination isn't set)
0x25 ROCK SMASH
0x26 TELEPORT? (black Pokémon bar)
0x28 STRENGTH
0x2B WATERFALL
0x2C DIVE (crashes, probably because destination/directionality isn't set)
0x2D Shows a buggy message box in the top-left corner
0x33 SWEET SCENT? I can confirm.
0x3B Part of the FLY animation sequence.
0x3E Hall of Fame registration machine
0x3F Teleports to the flying spot for the sethealingplace map.
0x41 VS SEEKER (crashes)
0x45 White flash

Source : http://sphericalice.com/romhacking/documents/script/

Liste des offsets des scripts des CS pour RFVF/FRLG
Éclate-roc : 0x1BC99E
Coupe : 0x1BC8A8
Force : 0x1BCAAC
Surf : 0x1A5616
Cascade : 0x1BCC39
Plongée : 0x1BCD0F (descendre)
Plongée : 0x1BCD58 (remonter)
Attention cependant aux scripts de plongée : il n'existe pas de sprite pour le joueur lorsqu'il est sous l'eau.

Je n'ai pas réussi à trouver les scripts de Vol et Flash, mais il est probable que ceux-ci ne soient pas stockés dans des scripts car ils s'exécutent autrement (via le menu pokémon). Il faudra donc probablement passer par l'ASM pour modifier ces actions. Si vous avez des infos, je veux bien un MP également.

Liste des offsets des scripts des CS pour RSE
Éclate-roc : 0x297028
Coupe : 0x296F40
Force : 0x297150
Surf : 0x277161
Cascade : 0x2972D2
Plongée : 0x297397 (descendre)
Plongée : 0x2973D9 (remonter)

Je n'ai pas réussi à trouver les scripts de Vol et Flash, mais il est probable que ceux-ci ne soient pas stockés dans des scripts car ils s'exécutent autrement (via le menu pokémon). Il faudra donc probablement passer par l'ASM pour modifier ces actions. Si vous avez des infos, je veux bien un MP également.

4. Crédits


Pokecommunity pour la liste des commandes « special »
https://www.pokecommunity.com/showthread.php?t=184273

Snrasha pour les offsets d'émeraude pour les scripts des CS
http://www.pokemontrash.com/club/rom-hacking/(gba)(rom)(fr)-pokemon-without-cs(abondonne-09022016)/

Sphericalice pour les renseignements sur les commandes des scripts
http://sphericalice.com/romhacking/documents/script/#c-9D


Ce tutoriel rend également obsolète celui-ci.
Du coup, si un modo peut lock le sujet ou bien le supprimer, ça serait chouette.
« Modifié: 20 juillet 2019, 15:07 par Pichu388 »

yushi56

  • Membre
  • 298 posts
20 juillet 2019, 16:17
Gros gros GG à toi et gros gros Merci :) :D !!

NesLeo

  • Membre
  • 162 posts
20 juillet 2019, 16:44
Merci à toi.

Guitoh

  • Membre
  • 5981 posts
20 juillet 2019, 21:40
mais ça me semble être du très bon boulot ça, gg :)

Pichu388

  • Membre
  • 399 posts
20 juillet 2019, 22:52
Merci à vous pour vos retours :)

Goinfrette

  • Membre
  • 94 posts
28 juillet 2019, 11:18
Je sais pas trop pourquoi je me suis mise à lire car je scripte pas, mais ça m'a l'air très clair, même pour moi, et hyper complet, impressionnant :o

Weby

  • Membre
  • 56564 posts
28 juillet 2019, 11:29
AAAAAAANNNNNNNDD PIN !

Pages: [1]    En haut ↑