[TUTO][GBA] Scripts : Le giga tuto des CS et des attaques hors combat.
Pichu388 - 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
- 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.
- 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.
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.
- 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 BOOSTListe 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 badgeRSE :
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 flashSource : 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.
- 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
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.
yushi56 - 20 juillet 2019 à 16:17
Gros gros GG à toi et gros gros Merci :D !!
NesLeo - 20 juillet 2019 à 16:44
Merci à toi.
gh7778 - 20 juillet 2019 à 21:40
mais ça me semble être du très bon boulot ça, gg
Pichu388 - 20 juillet 2019 à 22:52
Merci à vous pour vos retours
Dalleux - 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
Aura Azure - 28 juillet 2019 à 11:29
AAAAAAANNNNNNNDD PIN !
![[TUTO][GBA] Scripts : Le giga tuto des CS et des attaques hors combat.](/static/pokemon/hero.jpg)
