[Tuto][GBA] Apprendre à Scripter en static.

Pages: [1] 2 3 4 5 6

Sainior

  • Membre
  • 6362 posts
04 août 2010, 15:00
Apprendre à Scripter sur rom GBA


Vous en avez marre de devoir chercher à droite et à gauche pour apprendre à scripter ? Les tutoriels que vous trouvez sont périmé ? Ils ne marchent plus sur les versions actuelles ? Cet apprentissage est là pour vous, vous deviendrez un vrai pro' sur XSE 1.1.1 ! Commençons sans plus tarder. Vous aurez besoin de matériel, comme à chaque fois :

-XSE 1.1.1, téléchargeable ici (merci Pokemon Legendary)
-Une rom GBA
-Advance Map, téléchargeable ici
-Un fusil ou une corde (niark)

Bon, déjà, assurez-vous que XSE 1.1.1 soit assigné à Advance Map. C'est bon ? Let's go !

Spoiler
On va commencer par quelquechose de simple, très simple, où je vais en profiter pour vous expliquer en détail la fonction de chaque commande. On va apprendre à faire un "Message normal". Quand vous approcherez du personnage, et que vous parlerez avec lui en appuyant sur la touche A, il vous dira le message que vous avez scripté. Voici un exemple de "Message normal" :

'---------------
#org 0x6C54B2
msgbox 0x86D59B3 MSG_FACE '"Voici un mess..."
end

'---------
'Strings
'---------
#org 0x6D59B3
= Voici un message. Cool!

On va décortiquer le script.

'---------------
#org 0x6C54B2

Tout script commence par cette commande. C'est la base absolue. #org 0x[offset] signifie que votre script est entré dans la mémoire, il est assigné à un offset de la rom. C'est un peu le point de sauvegarde.

msgbox 0x8[autreoffset] MSG_FACE '""
"msgbox" signifie que votre message est dans une boîte de dialogue. Un dialogue commence toujours par cette commande, après le #org et compagnie. 0x8[autreoffset] est un appel au message. Votre message sera situé plus bas dans votre script, et assigné à un offset. On inscrit donc cet offset ici, mais aussi plus bas. MSG_FACE est une commande qui sert à ce que le personnage à qui vous parler vous regarde, et ne tourne pas la tête pendant le message. '"" n'est pas une commande à proprement parlé, mais il faut la mettre quand même.

'---------
'Strings
'---------

Ca vous indique que vous entrez dans une zone interdite. Nan, je rigole ;) En fait, vous entrez dans la zone où le message sera écrit.

#org 0x[autreoffset]
On revient à ce que je disait tout à l'heure. c'est le même offset qui est après msgbox 0x8.

= [votre message]
Ici, vous inscrivez votre message. Attention tout de même, je vous conseille d'utiliser l'ajusteur de texte (Outil > Ajusteur de texte) disponible dans XSE pour inscrire un texte long.

Vous savez maintenant inscrire un nouveau message. Pour compiler votre script, reportez-vous au tuto d'initiation si vous ne savez pas comment faire. Il est possible qu'après avoir compiler, votre script bug. Vérifiez toujours. Dans ce cas, changer simplement l'offset. Je vous recommande également de faire vos scripts sous bloc-note, et de les copier/coller dans les script des personnages.

Spoiler
Maintenant, on va apprendre à faire un message de pancarte. Ce script sera à rentrer dans un évent "Pancarte". Commençons sans tarder.

'---------------
#org 0x8B412A
msgbox 0x86BC415 MSG_SIGN '"Message de pa..."
end

'---------
'Strings
'---------
#org 0x6BC415
= Message de pancarte. Cool!

Le début, c'est du classique. Pas besoin de réxpliquer.

msgbox 0x8[autreoffset] MSG_SIGN '""
C'est pareil que tout à l'heure, sauf le type de message : MSG_SIGN. A utiliser pour les pancartes.

'---------
'Strings
'---------
#org 0x[autreoffset]
= [votremessage]

Exactement pareil que tout à l'heure.

Vous pouvez donc constater que c'est très similaire, les script de message normal et message de pancarte se ressemblent beaucoup. Rien à ajouter ;)

Même topo que tout à l'heure, faites vos scripts sous bloc-notes et c/c. Vous savez maintenant faire un nouveau script de message de pancarte. GG !

Spoiler
On entre maintenant dans le compliqué. Mais c'est beaucoup plus fun, question résultat ! On va faire un "applymovement". Kézako ? C'est un script qui a pour fonction de faire déplacer un personnage, quand vous lui "parlez", ou que vous marchez sur un script (vert). C'est un peu plus complexe que les deux script du dessus :

'---------------
#org 0x6CAB58
lock
applymovement 0x1 0x86C1F3C
waitmovement 0x0
release
end

'---------
'Movements
'---------
#org 0x6C1F3C
#raw 0x56 '(!)
#raw 0xFE 'End of movements

Cet "applymovement" va faire en sorte que quand vous parlez au personnage qui contient ce script, un point d'exclamation va appraître sur sa tête. Mais, voyons ça à la loupe ;)

'---------------
#org 0x[offset]

Toujours du classique.

lock
"lock", ou "lockall". Cette fonction permet que tout soit bloquer. A mettre à chaque applymovement, pour que la map soit figée. Très important, donc.

applymovement 0x1 0x8[autreoffset]
"applymovement", vous vous en doutez, c'est la fonction qui fait débuter l'applymovement. 0x1, c'est l'ID du personnage. En effet, chaque personnage à un numéro. Pour trouver ce numéro, regardez sur la droite de la fenêtre d'Advance map (quand votre personnage est selectionné), dans "Numéro du Personnage". Copiez/collez le chiffre après 0x, "1" pour ma part. Enfin, 0x8[autreoffset], c'est la commande d'appel aux mouvements à exécuter.

waitmovement 0x0
Cette commande suit chaque, je dit bien chaque, applymovement. 0x0 ne change pas.

release
Cette fonction, très importante, permet au script de débloquer la map, quand il se finit.

end
Classique, il finit le script.

'---------
'Movements
'---------
#org 0x[autreoffset]
#raw 0x56 '(!)
#raw 0xFE 'End of movements

#org 0x[autreoffset], pareil que pour un message normal, mettre le même qu'après 0x8, plus haut. Mais que peut bien signifier #raw 0x56 et #raw 0xFE ? C'est tout simplement les mouvements ! Il en existe une grande liste pour chque version (ici, Saphir). Il faut obligatoirement mettre un #raw avant la commande. Dans l'exemple, 0x56 fait apparaître un point d'exclamation au-dessus du personnage. Je mettrai la liste de tout les mouvements en bas de page. 0xFE est présent à chaque fin de mouvement. C'est pour dire au script que les mouvements sont fini.

Evidemment, cet applymovement était très simple, il en existe des plus complexes ;) J'espère que vous avez tout compris, parce que c'était coton à expliquer ^^'

Il est possible de faire faire des mouvements à son personnage (Brice ou Flora). Pour cela, à la place de "0xID" (du personnage), mettez tout simplement "MOVE_PLAYER". Vous pouvez aussi faire plusieurs applymovement à la suite. Il faudra procéder comme ceci :

applymovement 0xID 0x8[offset]
waitmovement 0x0
applymovement 0xID 0x8[offset]
waitmovement 0x0

Plus bas, vous devrez mettre ceci :

'---------
'Movements
'---------
#org 0x[offsetdupremierapply]
#raw [mouvements]
#raw 0xFE

org 0x[offsetdudeuxièmeapply]
#raw [mouvements]
#raw 0xFE

Il est aussi possible de compiler un applymovement dans un script, sous Advance Map (les verts marqués d'un "S"). Pour ça, il suffit de faire exactement pareil qu'au dessus, dans le script. Sauf qu'il vous faudra faire une petite chose en plus. Quand votre script est sélectionné, regardez à droite de la fenêtre d'Advance Map. Dans "Inconnu", mettez 0003, au lieu du 0000. Puis, dans N° du Var, au lieu du 0000, inscrivez 4050. Et voilà !

Vous devriez être en mesure de compiler ça ;) Toujours la même, bloc-note puis c/c dans un personnage OU dans un script (vous savez les petits verts ;)). Si il y a bug, il vous suffit de changer l'offset et en mettre un plus grand (pour ça, dans FSF, à gauche, au lieu de mettre 64 bytes, mettez 500).

Spoiler
On s'attaque à autre chose ? Hmm ? Ok, vous l'aurez voulu ;) On va faire un truc simple, pour souffler un peu. On va apprendre à faire un "giveitem". C'est quoi, ce machin ? Eh bien, quand vous parlez à un personnage, ou que vous trouvez une pokéball par terre, vous obtenez un objet ! Pratique, non ? Hyper facile ;)

'---------------
#org 0x6D1D1C
giveitem 0x1 0x1 MSG_FIND
end

C'est tout ! Décortiquons un peu :

'---------------
#org 0x[offset]

Vous savez ce que ça signifie ;)

giveitem 0x1 0x1 MSG_FIND
"giveitem" débute le script. 0x1, c'est le type de l'objet, Chaque objet correspond à un numéro. Ici, "1", c'est une Masterball. Si j'avais voulu mettre une Hyperball, j'aurais mis "2". L'autre 0x1 signifie la quantité. Pas de problème, j'ai UNE Masterball. Si j'en avais voulu 5, j'aurais mis 0x5 ;) MSG_FIND, c'est tout simplement, le message qui s'affiche quand vous obtenez un objet.

end
Classique.

Mais c'est pas encore terminer. Nan mais. Si on ne fais pas la manipulation qui suit, l'objet réapparaîtra encore et encore ! Pour éviter ça, aller dans Advance Map (vous y êtes déjà, haha). Sélectionnez votre objet, ou votre personnage. Sur la droite, en dessous de "Offset du Script", vous avez "ID du personnage". Normalement, il est à 0000. Mettez le à 03EC. Ensuite, si vous avez mis une Pokéball en guise de personnage (sprite), dans les mouvements, toujours sur la droite, au lieu de "Pas de mouvement", vous mettez "Regarde alentour". Et voilà !

Bon, la même qu'à chaque fois, hein, j'vais pas toujours vous le rabacher ;) On va s'orienter sur quelquechose d'encore plus fun, un Wildbattle.

Spoiler
On va apprendre à faire un Wildbattle. C'est quand vous trouvez un Pokémon dans la nature, pas dans les hautes herbes, mais en "vrai", comme Rayquaza, Kyogre ou Groudon. Ce sont des personnages, mais dont leur sprite a été changé, via Advance Map. Donc, ce script est à entrer dans les personnages. En exemple, un Ronflex :

'---------------
#org 0x460900
lock
faceplayer
setwildbattle 0x8F 0x5A 0x0
checksound
cry 0x8F 0x2
pause 0x28
waitcry
setflag 0x305
setflag 0x861
special 0x138
waitstate
clearflag 0x861
release
end

C'est déjà plus long :/ Mais toujours assez facile ;D Sherlock, passez moi la loupe, qu'on voit ça en détail ;)

(Je vous laisse deviner à quoi sert le #org 0x[offset] ^^)

lock
faceplayer

"lock", vous connaissez. "faceplayer", un peu moins. Ca fonctionne comme MSG_FACE, ça dit au personnage de vous regardez.

setwildbattle 0x8F 0x5A 0x0
setwildbattle débute le cript. Facile. Par contre, la suite l'est moins. 0x8F est l'espèce du Pokémon, mais en hexadécimal. En effet, dans la liste décimale, Ronflex est le numéro 143. en hexa', 143 équivaut à 8F. Donc, après 0x, on inscrit 8F. Vous voulez savoir comment obtenir de l'hexadécimal à partir du décimal ? Rien de plus facile, sur la droite de la fenêtre de XSE, vous avez une espèce de calculette. Elle est équipée d'un convertisseur. Vous cochez DEC, et vous inscrivez votre nombre (ici, 143). Ensuite, vous cochez HEX, et il change tout seul (ici, on obtient 8F). Passons. Continuons la suite du script. 0x5A. C'est le niveau de votre Pokémon. Je veux, ici, que le Ronflex soit au niveau 90. En hexadécimal, 90 équivaut à 5A. 0x0 signifie l'objet que le Pokémon porte. Je ne lui en ai pas mis.

checksound
cry 0x8F 0x2

"checksound" signifie qu'on "check" (change) sur le cri du Pokémon. Donc, cry 0x8F, c'est le cri de Ronflex. 0x2, on ne le change pas, c'est toujours pareil.

pause 0x28
waitcry

pause 0x28 signifie qu'il va y avoir une pause (petite) avant le début du combat. 0x28, c'est le temps "par défaut". "waitcry", littéralement, signifie qu'on va attendre le cri pendant le combat. Il fonctionne un peu comme le "waitmovement".

setflag 0x305
setflag 0x861
special 0x138
waitstate
clearflag 0x861

Tout ceci, c'est à ne pas changer. Ce sont les données de l'écran noir et du commencement du combat. Très important, mais juste à c/c ;).

release
end

Classique. Une fois le combat fini, le Pokémon disparaît, et vous êtes libéré.

Maintenant que vous savez faire un Wildbattle, vous allez apprendre à faire un Trainerbattle. Même chose, mais avec un dresseur.

Spoiler
Un Trainerbattle sert à faire un combat contre un dresseur dans la nature. Cependant, il existe plusieurs types de dresseurs (dresseurs normaux, champions d'arènes, etc..). Nous allons pour l'instant voir le plus simple. Exemple :

'---------------
#org 0x14EFA7
trainerbattle 0x0 0x25B 0x0 0x8[offset1] 0x8[offset2]
msgbox 0x8[offset3] MSG_NORMAL '""
end

'---------
'Strings
'---------
#org 0x[offset1]
= [message1]

#org 0x[offset2]
= [message2]

#org 0x[offset3]
= [message3]

Comme d'hab', on voit ça élément par élément.

trainerbattle 0x0 0x25B 0x0 0x8[offset1] 0x8[offset2]
"trainerbattle" débute le script. 0x0 définit le type de combat. Si cela avait été un combat de champion d'arène, j'aurais mis 0x2. Ici, c'est un combat normal, qui se déclenche quand vous êtes dans le champ de vision du personnage. 0x25B correspond à une donnée de personnage. Pour voir cette donnée, il faut utiliser A-Trainer. Pour un nouveau personnage, il vous faudra au préalable créer un nouveau dresseur via A-Trainer. Le second 0x0 est là tout le temps, on le met à chaque fois. Ensuite, il faut mettre deux offset. Ces offset seront à retrouver plus bas dans le "Strings", car ce sont les messages que dit le dresseur. Le premier correspond à ce qu'il vous dit en engageant le combat. Le second correspond à ce qu'il vous dit lorsqu'il perd le combat.

msgbox 0x8[offset3] MSG_NORMAL '""
Vous connaissez. Cette fonction permet au personnage de dire quelquechose, rappelez-vous, bon sang ! Juste que MSG_FACE est remplacé par MSG_NORMAL. Cette fonction va permettre au personnage de dire quelquechose après l'avoir battu. Bon, je pense que vous avez compris le reste du script, après le string de la biatch Strings ;)

Me revoilà! Et avec un nouveau script à vous apprendre! Très facile, vous verrez ;)

Spoiler
On va faire un "Spécial". Qu'est-ce qu'un spécial ? C'est une commande qui sert à faire quelquechose de spécial, comme soigner les Pokémon via l'infirmière ;) Vous pouvez aussi faire un tremblement de terre (r/s). Sans plus tarder, voyons ça plus en détail :

'---------------
#org 0x[offset]
special 0x[numéroduspécial]
end

C'est tout! Facile, hein ? Bon, je n'ai qu'une commande à décortiquer, le reste, vous connaissez.

special 0x[numéroduspécial]
"special" va commencer le script. 0x[numéroduspécial] va faire quelquechose de spécial, du genre donner le Pokédex, le Pokénav (r/s), des trucs comme ça, quoi. Vous vous doutez qu'il vous faudra piocher dans une liste plus bas pour trouver le numéro à mettre ;)

Evidemment, ce type de script est à coupler avec un ou deux message, des applymovement, mais tout seul, c'est plutôt à mettre dans les p'tits verts ;)

16/08/2010 : Plop à tous! Je reviens avec un nouveau script, le célèbre GivePokémon. Bon, ça va être un peu plus hard que les précédents, donc tenez vous bien à votre chaise, hein. Je dis ça parce qu'on va pas faire un pauvre GivePokémon tout seul, ce serait bien trop fade ;) On va laisser le choix au joueur de le prendre ou non! On commence ? Aller, ce serait bête de s'arrêter maintenant ;D

Spoiler
Bon, on va y aller doucement, hein. Voilà :

'---------------
#org 0x6C4740
checkflag 0x201
lock
faceplayer
if 0x1 goto 0x86C457C
msgbox 0x86C4783 MSG_YESNO '"Pokémon?"
compare LASTRESULT 0x1
if 0x1 goto 0x86C4864
msgbox 0x86C47AB MSG_NORMAL '"A plus!"
release
end

'---------------
#org 0x6C457C
msgbox 0x86C4823 MSG_NORMAL '"Bien?"
release
end

'---------------
#org 0x6C4864
givepokemon 0x15E 0x5 0x0 0x0 0x0 0x0
fanfare 0x13E
msgbox 0x86C48A0 MSG_NORMAL '"Tiens!"
waitfanfare
closeonkeypress
setflag 0x201
release
end


'---------
' Strings
'---------
#org 0x6C4783
= Pokémon?

#org 0x6C47AB
= A plus!

#org 0x6C4823
= Bien?

#org 0x6C48A0
= Tiens!

Testé et approuvé ;D Bon, j'ai mis des textes simples, histoire de pas faire trop long, hein. Allez on commence par des commandes que vous ne connaissez pas :

checkflag 0x201
Bon, cette commande débute un flag. C'est quoi, un flag ? Eh bien, pour faire court, c'est une commande qui permet à faire disparaître un personnage ou à ne faire exécuter un script qu'une seule fois. Eh oui, si on en mettait pas, le script pourrait s'exécuter à l'infini, et dans notre exemple, on recevrait le Pokémon des milliers des fois! Donc, très important.

if 0x1 goto 0x86C457C
Très important, comme commande. Très très importante. Vous en retrouverez dans pratiquement tous les scripts "complexes". Bon, on va décortiquer. "if 0x1 goto" appelle la commande. Cette commande sert à "transporter" le déroulement du script. C'est pour ça qu'il y a un offset. Exemple :

if 0x1 goto 0xoffset2
bla bla bla
bla bla bla

'---------------
#org 0xoffset2
bla bla bla

M'voyez ? Une fois ce deuxième script terminé, le déroulement est "retransporté" où on l'avait déplacé. Capiche ?

On continue :

msgbox 0x86C4783 MSG_YESNO '"Pokémon?"
compare LASTRESULT 0x1
if 0x1 goto 0x86C4864
msgbox 0x86C47AB MSG_NORMAL '"A plus!"

Donc, passons ça à la loupe."msgbox 0x8offset MSG_YESNO", c'est nouveau, je crois. Ben, c'est simple, quand le perso' vous pose une question, vous pouvez répondre par Oui ou Non. Ici, il va nous demander si on veut le Pokémon. Fastoche. Ensuite, "compare LASTRESULT 0x1" va comparer votre réponse. Ainsi, le script va s'éxécuter différemment suivant votre réponse. Si vous répondez Oui, il va retourner une valeur positive, 1. Sinon, valeur négative, 0. On le couple donc avec "if ___ goto". Si vous dites Oui, c'est le "if ___ goto" qui va s'exécuter. Sinon, le script continue. C'est pour cela qu'à la fin, on voit "msgbox 0x8offset MSG_NORMAL '"A plus!"". C'est le message que le perso' vous dit si vous refusez son Pokémon.

'---------------
#org 0x6C457C
msgbox 0x86C4823 MSG_NORMAL '"Bien?"
release
end

Rappelez-vous. C'est là ou nous emmène le premier "if ___ goto". Il s'éxecute une fois que le Pokémon  été donné. Eh oui, si vous lui parlez après, il faut bien qu'il vous dise quelque chose ^^. "end" revoie au script.

'---------------
#org 0x6C4864
givepokemon 0x15E 0x5 0x0 0x0 0x0 0x0
fanfare 0x13E
msgbox 0x86C48A0 MSG_NORMAL '"Tiens!"
waitfanfare
closeonkeypress
setflag 0x201
release
end

Y en a des choses là-dedans!!! C'est là où nous emmène le deuxième "if ___ goto", si on a répondu Oui. "givepokemon" (nous y voilà enfin!) débute l'action. Ce qui suit est facile à comprendre. 0x15E, c'est le numéro en hexa' du Pokémon que je veux lui faire donner, ici un Azurill. 0x5, c'est, toujours en hexa' son niveau. Ici, niveau 5. 0x0, le premier, c'est l'objet qu'il tient, en hexa'. Je ne lui en ai pas mis. les trois derniers 0x0, ce sont des Filler, indispensables au GivePokémon. "fanfare 0x13E". C'est le petit bruit qu'on entend quand on obtient quelque chose. "msgbox 0x8offset MSG_NORMAL", c'est ce que le perso' nous dit en nous donnant le Pokémon. "waitfanfare", toujours avec la "fanfare". "closeonkeypress" tient le msgbox ouvert jusqu'à ce que vous ayez obtenu le Pokémon (pendant le temps de la "fanfare", donc). "setflag 0x201" termine le checkflag. Important, donc ;D

Puis, le reste, vous connaissez =) Bon, c'était coton à expliquer, mais au bout de quelques essais, vous devriez avoir compris ;D A bientôt pour un nouveau script!

31/08/2010 : Je reviens avec un nouveau type de script! C'est hyper simple, et assez utile, pour de gros script de scénario. C'est le script du warp. Il vous transporte ou vous le voulez lorsqu'il s'active.

Spoiler
'---------------
#org 0xoffset
lockall
checkflag 0x200
if 0x1 goto 0x8offset
applymovement MOVE_PLAYER 0x8offset
waitmovement 0x0
warp 0x3 0x1 0x0 0xC 0x13
setflag 0x200
releaseall
end

'---------------
#org 0xoffset
releaseall
end

'---------
'Movements
'---------
#org 0xoffset
0xA 'Left
0xA 'Left
0xFE 'End

Je l'ai couplé à un applymovement, histoire de donner un peu de contenance ;) Je vous explique juste la commande du warp, vous connaissez le reste, hein.

warp 0x3 0x1 0x0 0xC 0x13
warp active la commande. 0x3, c'est le Bank de la map où on veut aller. 0x1, c'est sont numéro. 0x0, c'est le numéro du warp auquel le script va être relié. Eh oui, il faudra d'abord vous assurer qu'un warp existe déjà dans votre map!

Ensuite, 0xC. C'est une coordonnée de Postion. Si vous ne savez pas comment trouver les coordonnées de position de votre warp, faites comme indiqué : dans Advance Map, allez dans la map où vous souhaitez faire apparaître votre perso'. Cliquez sur Event, puis sélectionnez le warp sur lequel vous souhaitez apparaître (²). Dans le panel de droite, vous apercevrez "Position...", et deux coordonnées. Ce sont ces valeurs là qu'il va falloir copier. Donc, si vous m'avez suivi, 0xC, c'est la première valeur. 0x13, c'est la deuxième.

Compilez, et testez ;)

Merci à Giratino, pour m'avoir fait gagner du temps en me passant un script Pokémart vierge. On va apprendre ce que c'est, et comment le faire. Attention : Il y a deux sortes de Pokémart. Un pour RF/VF, et l'autre pour R/S/E. Je vous enseignerai les deux.

Spoiler
Qu'est-ce qu'un Pokémart ? C'est un script qui permet d'acheter ou de vendre des objets, comme en boutique Pokémon. Voilà le code, qui je le rappelle, est livré par Giratino (script pour RF/VF) :

'---------------
#org 0xoffset
special 0x187
compare LASTRESULT 0x2
if 0x1 goto 0x8offset
lock
faceplayer
preparemsg 0x8offset '"Bonjour!\nJe peux vous aider?"
waitmsg
pokemart 0x8offset
msgbox 0x8offset MSG_KEEPOPEN '"A la prochaine!"
release
end

'---------------
#org 0xoffset
release
end


'---------
' Strings
'---------
#org 0xoffset
= Bonjour!\nJe peux vous aider?

#org 0xoffset
= A la prochaine!


'-----------
' MartItems
'-----------
#org 0xoffset
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x

Il y a plusieurs nouvelles choses. Décortiquons, encore une fois.

special 0x187
compare LASTRESULT 0x2

Le "special", c'est tout simplement la commande de départ d'un Pokémart pour RF/VF. "compare LASTRESULT 0x2" va comparer le résultat du "special", de sorte à savoir où il doit continuer le script.

preparemsg 0x8offset '"Bonjour!\nJe peux vous aider?"
waitmsg
pokemart 0x8offset

"preparemsg 0x8offset", c'est tout simplement le message que le personnage va dire avant de faire votre choix. Ce n'est pas un "msgbox", attention, car il va préparer le message, et le placer ailleurs lors de l'exécution du script. "waitmsg", semblable à "waitfanfare" vu précédemment, va faire patienter le message jusqu'à l'exécution du Pokémart.

Enfin, "pokemart 0x8offset" va débuter le Pokémart. Il se rapporte à ceci :

'-----------
' MartItems
'-----------
#org 0xoffset
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x
#raw word 0x

"#raw word 0x", c'est semblable à "#raw 0x..." pour les applymovement, n'est-ce pas ? Après le 0x, il suffit de mettre le numéro en hexadécimal de l'objet que vous voulez faire vendre. Et voilà pour le Pokémart de RF/VF. Voyons dès à présent celui de R/S/E.



'---------------
#org 0x156861
lock
faceplayer
preparemsg 0x81A5F96 '"Bienvenue!\pEn quoi puis-je vous a..."
waitmsg
pokemart 0x8156878
msgbox 0x81A5FBD MSG_KEEPOPEN '"A la prochaine!"
release
end


'---------
' Strings
'---------
#org 0x1A5F96
= Bienvenue!\pEn quoi puis-je vous aider?

#org 0x1A5FBD
= A la prochaine!


'-----------
' MartItems
'-----------
#org 0x156878
#raw word 0x4
#raw word 0x3
#raw word 0xD
#raw word 0x16
#raw word 0xE
#raw word 0x12
#raw word 0x55
#raw word 0x56
#raw word 0x7A
#raw word 0x0

Z'avez vu ? C'est exactement pareil, mais sans le "special" et le "compare LASTRESULT 0x2" du début ! Ahah, ça va me faire gagner du temps, tout ça...

Eh ! Me lachez pas !

...
...

Bon, pour ceux qui restent, je vais vous apprendre à faire un Checkgender. C'est quoi ? C'est un script qui va agir différemment suivant le personnage que l'on a pris au début.

Spoiler
Bon, c'est simple, cool, et utile. Voici :

'---------------
#org 0xoffset
lock
faceplayer
checkgender
compare 0x800D 0x0
if 0x1 goto 0x8offsetgars
compare 0x800D 0x1
if 0x1 goto 0x8offsetmeuf
end

'----------------
#org 0xoffsetgars
msgbox 0x8offset1 MSG_FACE '""
release
end

'----------------
#org 0xoffsetmeuf
msgbox 0x8offset2 MSG_FACE '""
release
end

'---------
' Strings
'---------
#org 0xoffset1
= Salut, mec!

#org 0xoffset2
= Salut, chérie!

Voyons les nouvelles commandes.

checkgender
compare 0x800D 0x0
if 0x1 goto 0x8offsetgars
compare 0x800D 0x1
if 0x1 goto 0x8offsetmeuf

"checkgender", c'est la commande, elle débute. "compare 0x800D 0x0" va, encore une fois, comparer le résultat du "checkgender". Si c'est un garçon, le "if ... goto" du dessous se déclenche, et emmène le script à l'exécution de ce que va dire le personnage si c'est un garçon.

'----------------
#org 0xoffsetgars
msgbox 0x8offset1 MSG_FACE '""
release
end

Sinon, il continue, et "compare 0x800D 0x1" va comparer une seconde fois. Si c'est pas un mec, c'est une fille, donc, le personnage ne va pas dire la même chose. Très utile pour les scénario, donc.

Nous sommes le 11 septembre 2010, et j'ai envie de vous apprendre un nouveau type de script. Quatre, plus précisément, mais ils se recoupent.

Spoiler
Bon, on va apprendre des choses hyper hyper hyper simple. Les Showpoképic/Hidepoképic et les Showsprite/Hidesprite. Les deux premiers servent à faire apparaître une fenêtre avec l'image d'un Pokémon dedans (comme dans RF/VF au moment de choisir le Pokémon) et la faire disparaître. Les deux autres, respectivement Showsprite et Hidesprite, servent à faire apparaître un sprite (overworld) ou à le faire disparaître. Indispensable pour tout bon scénario. On commence par le Showpoképic et le Hidepoképic :

'---------------
#org 0xoffset
msgbox 0x8offset MSG_NORMAL '""
showpokepic 0x1 0xA 0x3
msgbox 0x8offset MSG_NORMAL '""
hidepokepic 0x1
end

'---------
' Strings
'---------
#org 0xoffset
= C'est un Bulbizarre.

#org 0xoffset
= Cool, non ?

Bon, c'est ultra basique. Il y a juste deux commandes que vous ne connaissez pas :

showpokepic 0x1 0xA 0x3
"showpokepic" débute la commande. 0x1, c'est le numéro du Pokémon qu'on veut faire apparaître (/!\ hexadécimal). 0xA et 0x3, ce sont les coordonnées de l'emplacement de la fenêtre dans l'écran. Je vous conseille vivement de garder 0xA et 0x3 car ce sont les coordonnées par défaut, celles qui placeront le fenêtre pile au milieu de l'écran.

hidepokepic 0x1
Il fait tout simplement disparaître la fenêtre, avec 0x1 le numéro du Pokémon, toujours en hexa'. Voilà, on en a terminé avec ceux-là ! Passons aux Showsprite et Hidesprite.

'---------------
#org 0xoffset
lockall
checkflag 0x200
msgbox 0x8offset MSG_FACE '""
hidesprite LASTALKED
applymovement MOVE_PLAYER 0x8offset
showsprite LASTALKED
releaseall
end

Bon, ça se complique un tout petit peu. "checkflag 0x200", vous connaissez, et ici, c'est indispensable. Pourquoi ? Parce que le "200", il faudra l'inscrire dans l'ID du personnage que vous voudrez faire apparaître ou disparaître. Pour cela, cliquez sur votre personnage dans AM, descendez dans le panel de droite jusqu'à trouver "ID du personnage", et inscrivez le numéro de votre flag. Voilà =)

hidesprite LASTTALKED
Cette commande fait disparaître le personnage à qui vous parlez. Dans ce scirpt, il vous dit quelque chose, et disparaît. "hidesprite" débute la commande, et LASTALKED signifie que le dernier personnage à qui vous avez parlez disparaît. Si vous ne voulez pas faire disparaître le personnage à qui vous avez parler, alors, il faudra faire comme ceci :

hidesprite 0xnuméro du personnage
Ensuite, le "showsprite". Il n'est plaçable QUE après un "hidesprite". Il fait réapparaître le personnage que vous avez fait disparaître. Dans mon script, le personnage vous parle. Ensuite il disparaît. Puis, le héros fait quelques pas. Enfin, le personnage que vous aviez fait disparaître réapparaît. Évidemment, mon script est ultra basique, à vous de l'étoffez.

showsprite LASTTALKED
Bon, bah, même explication que pour le "hidesprite". "0xnuméro du personnage" si vous ne voulez pas de "LASTALKED". Et voilà, j'ai fini de vous enseigner ces quatres petites choses ! A bientôt !


Exercices :

Parce qu'on bon tuto de script doit contenir des exercices, je vous en propose quelques-uns ! Je vais les classer par difficultés, que vous sachiez à quoi vous attendre (peut-être) ;)

Niveau débutant :

1er exercice : faites un message simple qui nous pose une question, et par laquelle on doit répondre par Oui ou Non, sans vous servir du tuto.

2eme exercice : faites un message de pancarte, sans vous servir du tuto.

3eme exercice : faites un applymovement (au choix), suivi d'un message simple.

Niveau moyen :

1er exercice : faites un applymovement du héros qui ira à droite, en haut, à gauche, en bas, et qui aura un point d'exclamation sur la tête à la fin.

2eme exercice : faites moi un wildbattle précédé d'un spécial "tremblement de terre".

3eme exercice : compilez un message simple, suivi d'un giveitem et d'un givepokémon.

Niveau difficile :

1er exercice : faites moi un message simple, suivi de deux givepokémon où le joueur devra choisir lequel il veut, puis faites disparaître le donneur une fois le choix fait.

2eme exercice : compilez un message simple qui variera selon le genre du personnage (checkgender), suivi d'un giveitem, où l'objet sera encore différent selon le genre (sexisme, je sais). Puis, à la fin du script, je veux un trainerbattle.

3eme exercice : faites un applymovement du héros et un autre apply d'un personnage qui s'exécutent en même temps, suivi d'un warp.

Niveau expert :

Attention, ça va chier des bulles.

1er exercice : message simple différent selon le genre, puis applymovement du héros suivi de l'applymovement du personnage auquel on a parlé, suivi d'un message simple demandant si on veut un Pokémon (oui ou non), bien sûr suivi du givepokémon. Ensuite, applymovement du héros, puis warp.

2eme exercice : trainerbattle, si on bat l'adversaire, giveitem, puis applymovement du héros jusqu'à un Pokémon legendaire, spécial "tremblement de terre", puis wildbattle. Vous rajouterez des messages simple là où il faut pour que la mini-histoire soit cohérente.


Listes en vrac :

Liste des Pokémon (décimal)
BULBASAUR 1
IVYSAUR 2
VENUSAUR 3
CHARMANDER 4
CHARMELEON 5
CHARIZARD 6
SQUIRTLE 7
WARTORTLE 8
BLASTOISE 9
CATERPIE 10
METAPOD 11
BUTTERFREE 12
WEEDLE 13
KAKUNA 14
BEEDRILL 15
PIDGEY 16
PIDGEOTTO 17
PIDGEOT 18
RATTATA 19
RATICATE 20
SPEAROW 21
FEAROW 22
EKANS 23
ARBOK 24
PIKACHU 25
RAICHU 26
SANDSHREW 27
SANDSLASH 28
NIDORAN|w| 29
NIDORINA 30
NIDOQUEEN 31
NIDORAN|m| 32
NIDORINO 33
NIDOKING 34
CLEFAIRY 35
CLEFABLE 36
VULPIX 37
NINETALES 38
JIGGLYPUFF 39
WIGGLYTUFF 40
ZUBAT 41
GOLBAT 42
ODDISH 43
GLOOM 44
VILEPLUME 45
PARAS 46
PARASECT 47
VENONAT 48
VENOMOTH 49
DIGLETT 50
DUGTRIO 51
MEOWTH 52
PERSIAN 53
PSYDUCK 54
GOLDUCK 55
MANKEY 56
PRIMEAPE 57
GROWLITHE 58
ARCANINE 59
POLIWAG 60
POLIWHIRL 61
POLIWRATH 62
ABRA 63
KADABRA 64
ALAKAZAM 65
MACHOP 66
MACHOKE 67
MACHAMP 68
BELLSPROUT 69
WEEPINBELL 70
VICTREEBEL 71
TENTACOOL 72
TENTACRUEL 73
GEODUDE 74
GRAVELER 75
GOLEM 76
PONYTA 77
RAPIDASH 78
SLOWPOKE 79
SLOWBRO 80
MAGNEMITE 81
MAGNETON 82
FARFETCH'D 83
DODUO 84
DODRIO 85
SEEL 86
DEWGONG 87
GRIMER 88
MUK 89
SHELLDER 90
CLOYSTER 91
GASTLY 92
HAUNTER 93
GENGAR 94
ONIX 95
DROWZEE 96
HYPNO 97
KRABBY 98
KINGLER 99
VOLTORB 100
ELECTRODE 101
EXEGGCUTE 102
EXEGGUTOR 103
CUBONE 104
MAROWAK 105
HITMONLEE 106
HITMONCHAN 107
LICKITUNG 108
KOFFING 109
WEEZING 110
RHYHORN 111
RHYDON 112
CHANSEY 113
TANGELA 114
KANGASKHAN 115
HORSEA 116
SEADRA 117
GOLDEEN 118
SEAKING 119
STARYU 120
STARMIE 121
MR. MIME 122
SCYTHER 123
JYNX 124
ELECTABUZZ 125
MAGMAR 126
PINSIR 127
TAUROS 128
MAGIKARP 129
GYARADOS 130
LAPRAS 131
DITTO 132
EEVEE 133
VAPOREON 134
JOLTEON 135
FLAREON 136
PORYGON 137
OMANYTE 138
OMASTAR 139
KABUTO 140
KABUTOPS 141
AERODACTYL 142
SNORLAX 143
ARTICUNO 144
ZAPDOS 145
MOLTRES 146
DRATINI 147
DRAGONAIR 148
DRAGONITE 149
MEWTWO 150
MEW 151
CHIKORITA 152
BAYLEEF 153
MEGANIUM 154
CYNDAQUIL 155
QUILAVA 156
TYPHLOSION 157
TOTODILE 158
CROCONAW 159
FERALIGATR 160
SENTRET 161
FURRET 162
HOOTHOOT 163
NOCTOWL 164
LEDYBA 165
LEDIAN 166
SPINARAK 167
ARIADOS 168
CROBAT 169
CHINCHOU 170
LANTURN 171
PICHU 172
CLEFFA 173
IGGLYBUFF 174
TOGEPI 175
TOGETIC 176
NATU 177
XATU 178
MAREEP 179
FLAAFFY 180
AMPHAROS 181
BELLOSSOM 182
MARILL 183
AZUMARILL 184
SUDOWOODO 185
POLITOED 186
HOPPIP 187
SKIPLOOM 188
JUMPLUFF 189
AIPOM 190
SUNKERN 191
SUNFLORA 192
YANMA 193
WOOPER 194
QUAGSIRE 195
ESPEON 196
UMBREON 197
MURKROW 198
SLOWKING 199
MISDREAVUS 200
UNOWN 201
WOBBUFFET 202
GIRAFARIG 203
PINECO 204
FORRETRESS 205
DUNSPARCE 206
GLIGAR 207
STEELIX 208
SNUBBULL 209
GRANBULL 210
QWILFISH 211
SCIZOR 212
SHUCKLE 213
HERACROSS 214
SNEASEL 215
TEDDIURSA 216
URSARING 217
SLUGMA 218
MAGCARGO 219
SWINUB 220
PILOSWINE 221
CORSOLA 222
REMORAID 223
OCTILLERY 224
DELIBIRD 225
MANTINE 226
SKARMORY 227
HOUNDOUR 228
HOUNDOOM 229
KINGDRA 230
PHANPY 231
DONPHAN 232
PORYGON2 233
STANTLER 234
SMEARGLE 235
TYROGUE 236
HITMONTOP 237
SMOOCHUM 238
ELEKID 239
MAGBY 240
MILTANK 241
BLISSEY 242
RAIKOU 243
ENTEI 244
SUICUNE 245
LARVITAR 246
PUPITAR 247
TYRANITAR 248
LUGIA 249
HO-OH 250
CELEBI 251
TREECKO 277
GROVYLE 278
SCEPTILE 279
TORCHIC 280
COMBUSKEN 281
BLAZIKEN 282
MUDKIP 283
MARSHTOMP 284
SWAMPERT 285
POOCHYENA 286
MIGHTYENA 287
ZIGZAGOON 288
LINOONE 289
WURMPLE 290
SILCOON 291
BEAUTIFLY 292
CASCOON 293
DUSTOX 294
LOTAD 295
LOMBRE 296
LUDICOLO 297
SEEDOT 298
NUZLEAF 299
SHIFTRY 300
NINCADA 301
NINJASK 302
SHEDINJA 303
TAILLOW 304
SWELLOW 305
SHROOMISH 306
BRELOOM 307
SPINDA 308
WINGULL 309
PELIPPER 310
SURSKIT 311
MASQUERAIN 312
WAILMER 313
WAILORD 314
SKITTY 315
DELCATTY 316
KECLEON 317
BALTOY 318
CLAYDOL 319
NOSEPASS 320
TORKOAL 321
SABLEYE 322
BARBOACH 323
WHISCASH 324
LUVDISC 325
CORPHISH 326
CRAWDAUNT 327
FEEBAS 328
MILOTIC 329
CARVANHA 330
SHARPEDO 331
TRAPINCH 332
VIBRAVA 333
FLYGON 334
MAKUHITA 335
HARIYAMA 336
ELECTRIKE 337
MANECTRIC 338
NUMEL 339
CAMERUPT 340
SPHEAL 341
SEALEO 342
WALREIN 343
CACNEA 344
CACTURNE 345
SNORUNT 346
GLALIE 347
LUNATONE 348
SOLROCK 349
AZURILL 350
SPOINK 351
GRUMPIG 352
PLUSLE 353
MINUN 354
MAWILE 355
MEDITITE 356
MEDICHAM 357
SWABLU 358
ALTARIA 359
WYNAUT 360
DUSKULL 361
DUSCLOPS 362
ROSELIA 363
SLAKOTH 364
VIGOROTH 365
SLAKING 366
GULPIN 367
SWALOT 368
TROPIUS 369
WHISMUR 370
LOUDRED 371
EXPLOUD 372
CLAMPERL 373
HUNTAIL 374
GOREBYSS 375
ABSOL 376
SHUPPET 377
BANETTE 378
SEVIPER 379
ZANGOOSE 380
RELICANTH 381
ARON 382
LAIRON 383
AGGRON 384
CASTFORM 385
VOLBEAT 386
ILLUMISE 387
LILEEP 388
CRADILY 389
ANORITH 390
ARMALDO 391
RALTS 392
KIRLIA 393
GARDEVOIR 394
BAGON 395
SHELGON 396
SALAMENCE 397
BELDUM 398
METANG 399
METAGROSS 400
REGIROCK 401
REGICE 402
REGISTEEL 403
KYOGRE 404
GROUDON 405
RAYQUAZA 406
LATIAS 407
LATIOS 408
JIRACHI 409
DEOXYS 410
CHIMECHO 411

Liste des items (hexadécimal)
Master Ball 1
Ultra Ball 2
Great Ball 3
Poké Ball 4
Safari Ball 5
Net Ball 6
Dive Ball 7
Nest Ball 8
Repeat Ball 9
Timer Ball 10
Luxury Ball 11
Premier Ball 12
Potion 13
Antidote 14
Burn Heal 15
Ice Heal 16
Awakening 17
Parlyz Heal 18
Full Restore 19
Max Potion 20
Hyper Potion 21
Super Potion 22
Full Heal 23
Revive 24
Max Revive 25
Fresh Water 26
Soda Pop 27
Lemonade 28
Moomoo Milk 29
Energypowder 30
Energy Root 31
Heal Powder 32
Revival Herb 33
Ether 34
Max Ether 35
Elixir 36
Max Elixir 37
Lava Cookie 38
Blue Flute 39
Yellow Flute 40
Red Flute 41
Black Flute 42
White Flute 43
Berry Juice 44
Sacred Ash 45
Shoal Salt 46
Shoal Shell 47
Red Shard 48
Blue Shard 49
Yellow Shard 50
Green Shard 51
HP Up 63
Protein 64
Iron 65
Carbos 66
Calcium 67
Rare Candy 68
PP Up 69
Zinc 70
PP Max 71
Guard Spec. 73
Dire Hit 74
X Attack 75
X Defend 76
X Speed 77
X Accuracy 78
X Special 79
Poké Doll 80
Fluffy Tail 81
Super Repel 83
Max Repel 84
Escape Rope 85
Repel 86
Sun Stone 93
Moon Stone 94
Fire Stone 95
Thunderstone 96
Water Stone 97
Leaf Stone 98
Tinymushroom 103
Big Mushroom 104
Pearl 106
Big Pearl 107
Stardust 108
Star Piece 109
Nugget 110
Heart Scale 111
Orange Mail 121
Harbor Mail 122
Glitter Mail 123
Mech Mail 124
Wood Mail 125
Wave Mail 126
Bead Mail 127
Shadow Mail 128
Tropic Mail 129
Dream Mail 130
Fab Mail 131
Retro Mail 132
Cheri Berry 133
Chesto Berry 134
Pecha Berry 135
Rawst Berry 136
Aspear Berry 137
Leppa Berry 138
Oran Berry 139
Persim Berry 140
Lum Berry 141
Sitrus Berry 142
Figy Berry 143
Wiki Berry 144
Mago Berry 145
Aguav Berry 146
Iapapa Berry 147
Razz Berry 148
Bluk Berry 149
Nanab Berry 150
Wepear Berry 151
Pinap Berry 152
Pomeg Berry 153
Kelpsy Berry 154
Qualot Berry 155
Hondew Berry 156
Grepa Berry 157
Tamato Berry 158
Cornn Berry 159
Magost Berry 160
Rabuta Berry 161
Nomel Berry 162
Spelon Berry 163
Pamtre Berry 164
Watmel Berry 165
Durin Berry 166
Belue Berry 167
Liechi Berry 168
Ganlon Berry 169
Salac Berry 170
Petaya Berry 171
Apicot Berry 172
Lansat Berry 173
Starf Berry 174
Enigma Berry 175
Brightpowder 179
White Herb 180
Macho Brace 181
Exp. Share 182
Quick Claw 183
Soothe Bell 184
Mental Herb 185
Choice Band 186
King's Rock 187
Silverpowder 188
Amulet Coin 189
Cleanse Tag 190
Soul Dew 191
Deepseatooth 192
Deepseascale 193
Smoke Ball 194
Everstone 195
Focus Band 196
Lucky Egg 197
Scope Lens 198
Metal Coat 199
Leftovers 200
Dragon Scale 201
Light Ball 202
Soft Sand 203
Hard Stone 204
Miracle Seed 205
Blackglasses 206
Black Belt 207
Magnet 208
Mystic Water 209
Sharp Beak 210
Poison Barb 211
Nevermeltice 212
Spell Tag 213
Twistedspoon 214
Charcoal 215
Dragon Fang 216
Silk Scarf 217
Up-grade 218
Shell Bell 219
Sea Incense 220
Lax Incense 221
Lucky Punch 222
Metal Powder 223
Thick Club 224
Stick 225
Red Scarf 254
Blue Scarf 255
Pink Scarf 256
Green Scarf 257
Yellow Scarf 258
Mach Bike 259
Coin Case 260
Itemfinder 261
Old Rod 262
Good Rod 263
Super Rod 264
S.S. Ticket 265
Contest Pass 266
Wailmer Pail 268
Devon Goods 269
Soot Sack 270
Basement Key 271
Acro Bike 272
PokéBlock Case 273
Letter 274
Eon Ticket 275
Red Orb 276
Blue Orb 277
Scanner 278
Go-goggles 279
Meteorite 280
Rm. 1 Key 281
Rm. 2 Key 282
Rm. 4 Key 283
Rm. 6 Key 284
Storage Key 285
Root Fossil 286
Claw Fossil 287
Devon Scope 288
TM01 289
TM02 290
TM03 291
TM04 292
TM05 293
TM06 294
TM07 295
TM08 296
TM09 297
TM10 298
TM11 299
TM12 300
TM13 301
TM14 302
TM15 303
TM16 304
TM17 305
TM18 306
TM19 307
TM20 308
TM21 309
TM22 310
TM23 311
TM24 312
TM25 313
TM26 314
TM27 315
TM28 316
TM29 317
TM30 318
TM31 319
TM32 320
TM33 321
TM34 322
TM35 323
TM36 324
TM37 325
TM38 326
TM39 327
TM40 328
TM41 329
TM42 330
TM43 331
TM44 332
TM45 333
TM46 334
TM47 335
TM48 336
TM49 337
TM50 338
HM01 339
HM02 340
HM03 341
HM04 342
HM05 343
HM06 344
HM07 345
HM08 346
Oak's Parcel 349
Poké Flute 350
Secret Key 351
Bike Voucher 352
Gold Teeth 353
Old Amber 354
Card Key 355
Lift Key 356
Helix Fossil 357
Dome Fossil 358
Silph Scope 359
Bicycle 360
Town Map 361
VS Seeker 362
Fame Checker 363
TM Case 364
Berry Pouch 365
Teachy TV 366
Tri-pass 367
Rainbow Pass 368
Tea 369
Mysticticket 370
Auroraticket 371
Powder Jar 372
Ruby 373
Sapphire 374

Liste des mouvements Emeraude
Se déplace lentement en Bas (Down), Haut (Up), Gauche (Left), Droite (Right)

#raw 0x4 'Step Down (Slow)
#raw 0x5 'Step Up (Slow)
#raw 0x6 'Step Left (Slow)
#raw 0x7 'Step Right (Slow)



Se déplace normalement en Bas (Down), Haut (Up), Gauche (Left), Droite (Right)

#raw 0x8 'Step Down (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0xA 'Step Left (Normal)
#raw 0xB 'Step Right (Normal)



Délai avant un mouvement

#raw 0x10 'Delay1
#raw 0x11 'Delay2
#raw 0x12 'Delay3
#raw 0x13 'Delay4
#raw 0x14 'Delay5



Regarde dans la direction actuelle

#raw 0x3E 'Face Player



End of Movements (à toujours placer à la fin des mouvements)

#raw 0xFE 'End of Movements
Liste des mouvements R/S
0x54 ' Hide
0x55 ' Show
0x56 ' !
0x57 ' ?
0x58 ' Coeur au dessus de la tête
0x5A ' Pokeball au dessus de la tête
0x10 ' Delay0
0x11 ' Delay1
0x12 ' Delay2
0x13 ' Delay3
0x14 ' Delay4

' Step
0x00 ' Down0
0x01 ' Up0
0x02 ' Left0
0x03 ' Right0
0x04 ' Down1
0x05 ' Up1
0x06 ' Left1
0x07 ' Right1
0x08 ' Down2
0x09 ' Up2
0x0A ' Left2
0x0B ' Right2
0x17 ' Left3
0x18 ' Right3
0x15 ' Down3
0x16 ' Up3
0x2D ' Down4
0x2E ' Up4
0x2F ' Left4
0x30 ' Right4

' Running
0x35 ' RunDown
0x36 ' RunUp
0x37 ' RunLeft
0x38 ' RunRight
0x7E ' RunDown2
0x7F ' RunUp2
0x80 ' RunLeft2
0x81 ' RunRight2

' Hop & Jump
0x0C ' HopTileDown
0x0D ' HopTileUp
0x0E ' HopTileLeft
0x0F ' HopTileRight
0x3A ' HighHopDown
0x3B ' HighHopUp
0x3C ' HighHopLeft
0x3D ' HighHopRight
0x46 ' HopDown
0x47 ' HopUp
0x48 ' HopLeft
0x49 ' HopRight
0x4A ' HopDown180
0x4B ' HopUp180
0x4C ' HopLeft180
0x4D ' HopRight180
0x42 ' JumpDown
0x43 ' JumpUp
0x44 ' JumpLeft
0x45 ' JumpRight

' Straf (May have glitches)
0x19 ' StDown1
0x1A ' StUp1
0x1B ' StLeft1
0x1C ' StRight1
0x1D ' StDown2
0x1E ' StUp2
0x1F ' StLeft2
0x20 ' StRight2
0x21 ' StDown3
0x22 ' StUp3
0x23 ' StLeft3
0x24 ' StRight3
0x25 ' StDown4
0x26 ' StUp4
0x27 ' StLeft4
0x28 ' StRight4
0x6A ' StDown1i
0x6B ' StUp1i
0x6C ' StLeft1i
0x6D ' StRight1i
0x6E ' StDown5
0x6F ' StUp5
0x70 ' StLeft5
0x71 ' StRight5

'Special
0x31 ' SlideFaceDown
0x32 ' SlideFaceUp
0x33 ' SlideFaceLeft
0x34 ' SlideFaceRight
0x86 ' IceSlideDown
0x87 ' IceSlideUp
0x88 ' IceSlideLeft
0x89 ' IceSlideRight

' Glitchy
0x3E ' Up0A
0x3F ' Down0A
0x4E ' Down0B
0x63 ' Up0B
0x65 ' Right0A
0x66 ' RunStopLoopDown
0x67 ' RunStopLoopUp
0x68 ' RunStopLoopLeft
0x69 ' RunStopLoopRight
0x72 ' Down15
0x73 ' Up15
0x74 ' Left15
0x75 ' Right15
0x7A ' Down6
0x7B ' Up6
0x7C ' Left6
0x7D ' Right6
0x82 ' Down7
0x83 ' Up7
0x84 ' Left7
0x85 ' Right7

' EXIT
0xFE
Liste des mouvements RF/VF
POKéMON Rouge Feu/Vert Feuille FR-US:

Tourne la tête vers le bas: 0x00
Tourne la tête vers le Haut: 0x01
Tourne la tête vers la gauche: 0x02
Tourne la tête vers la droite: 0x03
Fait un pas en bas (Très lentement): 0x08
Fait un pas en haut (Très lentement): 0x09
Fait un pas à gauche (Très lentement): 0x0A
Fait un pas à droite (Très lentement): 0x0B
Fait un pas en bas (lentement): 0x0C
Fait un pas en haut (lentement): 0x0D
Fait un pas à gauche(lentement): 0x0E
Fait un pas à droite (lentement): 0x0F
Fait un pas en bas (Normalement): 0x10
Fait un pas en haut (Normalement): 0x11
Fait un pas à gauche (Normalement): 0x12
Fait un pas à droite (Normalement): 0x13
Jump Down 2 Squares 0x14
Jump Up 2 Squares 0x15
Jump Left 2 Squares 0x16
Jump Right 2 Squares 0x17
Step Down (Fast) 0x1D
Step Up (Fast) 0x1E
Step Left (Fast) 0x1F
Step Right (Fast) 0x20
Step on the Spot Down 0x21
Step on the Spot Up 0x22
Step on the Spot Left 0x23
Step on the Spot Right 0x24
Step on the Spot Down (Fast) 0x25
Step on the Spot Up (Fast) 0x26
Step on the Spot Left (Fast) 0x27
Step on the Spot Right (Fast) 0x28
Step on the Spot Down (Very Fast) 0x29
Step on the Spot Up (Very Fast) 0x2A
Step on the Spot Left (Very Fast) 0x2B
Step on the Spot Right (Very Fast) 0x2C
Face Down (Non-Instant) 0x2D
Face Up (Non-Instant) 0x2E
Face Left (Non-Instant) 0x2F
Face Right (Non-Instant) 0x30
Slide Down 0x31
Slide Up 0x32
Slide Left 0x33
Slide Right 0x34
Slide Down On Right Foot 0x3D
Slide Up On Right Foot 0x3E
Slide Left On Right Foot 0x3F
Slide Right On Right Foot 0x40
Slide Down On Left Foot 0x41
Slide Up On Left Foot 0x42
Slide Left On Left Foot 0x43
Slide Right On Left Foot 0x44
Face Player 0x4A
Face Away from Player 0x4B
Jump Down 1 Square 0x4E
Jump Up 1 Square 0x4F
Jump Left 1 Square 0x50
Jump Right 1 Square 0x51
Jump in Place (Facing Down) 0x52
Jump in Place (Facing Up) 0x53
Jump in Place (Facing Left) 0x54
Jump in Place (Facing Right) 0x55
Jump in Place (Facing Down->Up) 0x56
Jump in Place (Facing Up->Down) 0x57
Jump in Place (Facing Left->Right) 0x58
Jump in Place (Facing Right->Left) 0x59
Disappear 0x60
Reappear 0x61
"!" box popup 0x62
"?" box popup 0x63
"X" box popup 0x64
"!!" box popup 0x65
"^_^" box popup 0x66

Liste des "spécials" (R/S/RF/VF)
special 0x0 - Guérit les POKéMONS
special 0x3C - Acces au PC de LEO (RF/VF)
special 0x98 - Aller à la Montagne (R/S)
special 0x9C - Wally Catch (R/S)
special 0x9F - choisir un Pokemon (R/S)
special 0xE0 - Pokeblock (R/S)
special 0x10F - Recommencer le jeu
special 0x110 - Le Hall de la Gloire (Ligue Pokémon) et les Crédits
special 0x111 - Animation de l'Ascenseur
special 0x119 - Effet de l'Orbe de Groudon(R/S)
special 0x131 - Tremblement de Terre (R/S)
special 0x132 - Salles d'Exposition
special 0x136 - Tremblement de Terre (RF/VF)
special 0x137 - Battaile de Lave
special 0x156 - Combat avec un Fantôme (RF/VF)
special 0x157 - Monter sur le Vélo (RF/VF)
special 0x161 - Commencer à Surfer (RF/VF)
special 0x166 - Surnom
special 0x16F - Activer le National Dex (RF/VF)
special 0x17B - Animation du Sea Gallop (?????)
special 0x191 - SS. Anne
special 0x1F3 - Activer le National Dex (Emeraude)
Liste des "spécials" (Emeraude)
0 - Soigner Pokemon
3 - Fait passer le héros dans le warp utiliser en dernier
8 - Créer une base secrète
E - Ouvrir le pc de la base secrète
22 - Message d'attente avant échange Link
24 - Ouvre le menu de sauvegarde (Ne pas oublier de mettre la commande waitstate juste après)
2A - Ouvre le menu de choix Pokémon (Pour zone de combat)
2F - Ouvre le sac à baie
3A - Le héros se retourne avec une "!" au dessus de la tête
3B - Joue la musique d'une rencontre avec un dresseur
3E - Provoque un combat contre un dresseur (Par défaut et sans pokémon)
3F - Ouvre le PC
61 - Affiche l'animation d'arrosage
62 - Créer ou modifier son profil
63 - Affiche votre profil
6A - Ouverture d'un message bizarre accompagné d'un son extraterrestre
6F - Un message qui raconte une histoire ...
70 - Ouvre un menu de choix (En rapport avec l'histoire du 6F)
71 - Choisir bureau (???)
9B - Affiche l'animation du téléphérique
9D - Changer l'heure
9E - Affiche l'heure
9F - Choisir starter + Combat contre Zigzaton
A0 - Animation avec Timmy (Explication "Comment capturer un pokemon")
A1 - Propose de donner un surnom au premier Pokémon de l'équipe
A2 - Choisir un pokemon dans l'équipe
A4 - Mixeur de baie
B2 - "En quête de dresseur" Journaliste Ines
BF - Choisir un Pokémon à déposer en pension
C0 - Récupérer Pokémon mis en pension
C5 - Eclosion d'un oeuf (Il fait éclore le premier Pokémon de l'équipe ... Bizarre)
C7 - Affiche les résultats de la zone combat
D3 - Ouvre la boite Pokeblock
D8 - Analyse du Pokedex
DE - Choisir Pokémon (???)
DF - Affiche les capacités Combat et concours du premier Pokémon
E3 - Enseigner une capacité au premier pokémon
EF - Déclenche un combat contre un dresseur de la zone combat (Gamin Hugo)
F4 - Arrête la musique
F8 - Choisir Pokémon pour un défi (?)
FD - Afficher PC du héros
FE - Affiche la carte
101 - Animation Evolution
106 - Affiche record de vitesse pour le mixeur de baie
109 - Affiche écran d'accueil du PC
10A - Consulter les données du panthéon
10B - Affiche le diplôme certifiant que le héros à remplit tout le pokédex
111 - Affiche le bateau
112 - Redémarre le jeu
113 - Victoire de la Ligue Pokémon + Crédit
114 - Effet ascenseur
11C - Effet Orbe rouge + Seisme
12E - Passe dans le warp menant au dernier point d'atterissage (Flightspot) utilisé
133 - Effet Seisme
134 - Affiche étage (Ascenseur)
139 - Combat contre Kyogre
13A - Combat contre Groudon
13B - Combat contre Légendaire (Rayquaza?)
13D - Fait trembler l'écran pendant 1 seconde
13F - Effet Flash
140 - Faire passer le héros dans le warp utiliser en dernier (Sans son)
141 - Effet de chute en passant au dernier warp utilisé
142 - Affiche un pokemon inconnu (?)
145 - Combat contre un pokemon (?)
15D - Redémarrer le jeu


Il existe bien plus de type de script, mais par manque de temps, je n'en dit pas plus pour l'instant. J'éditerai un peu plus tard pour en rajouter, ne vous inquiéter pas ;)

Si vous voulez voir une nouvelle façon de scripter, référez-vous à ce tuto : http://www.pokemontrash.com/club/rom-hacking/%28mega-tuto%29apprendre-a-scripter-un-dynamique-avec-xse-pour-les-debutants/msg348669/?boardseen#new

Tutoriel by Sainior
« Modifié: 27 juillet 2015, 15:32 par Guitoh »

yago58

  • Invité
04 août 2010, 15:02
nickel,et un de plus   :winner:

Whitti

  • Membre
  • 1893 posts
04 août 2010, 15:07
je t'aime sainior  :) merci pour le tutoriele *.*

Weby

  • Invité
04 août 2010, 18:30
Haha, maintenant se pose le problème, pour les applymovement, des hauteurs de personnages, des cessions d'ID, des sprites cachées etc...

Mais bon, bien joué.

Sainior

  • Membre
  • 6362 posts
04 août 2010, 18:32
Ouais, je sais Weby, mais j'éditerai, y a encore pas mal de truc que je dois mettre :)

Sinon, merci  :D

ミSł|ɘɴŦ - λ

  • Membre
  • 2232 posts
04 août 2010, 20:00
Y'a certaine phrase qui me font bêtement penser a Skull, du genre : Sherlock passe moi la loupe, il avait dit chez plus quoi, qui ressemblaient dans le même genre, mais osef hein. :you:

Sinon GG.

Même si pour moi PokéScript roxx XSE jusqu'à la moelle.

P.S: Sinon, pourquoi ne pas l'avoir mis dans Difficile, pour moi c'est, enfin d'après vous, aussi dur que mon TUTO sur PokéScript, c'est le même type de script, etc...
« Modifié: 04 août 2010, 20:06 par Sïlver Sö »

Sainior

  • Membre
  • 6362 posts
04 août 2010, 20:02
Y'a certaine phrase qui me font bêtement penser a Skull, du genre : Sherlock passe moi la loupe

Quoi ? Nan. Sans rancune, hein.

Merci, sinon :) Et c'est XSE le plus fort, namého.

ミSł|ɘɴŦ - λ

  • Membre
  • 2232 posts
04 août 2010, 20:07
Y'a certaine phrase qui me font bêtement penser a Skull, du genre : Sherlock passe moi la loupe

Quoi ? Nan. Sans rancune, hein.

Si, je suis sure, un moment, il fait genre comme si des gens lui disait : Putain explique Skull, on comprend rien !!!!!!!!!!!

Sainior

  • Membre
  • 6362 posts
04 août 2010, 20:08
Ah, j'ai cru que tu pensais que j'avais copié une de ses réplique, sry  :baffan:

ミSł|ɘɴŦ - λ

  • Membre
  • 2232 posts
04 août 2010, 20:09
Sry aussi, j'ai du mal m'expliquer.  :baffan:

Ah, et ca serait bien de préciser dans le titre : avec XSE.
« Modifié: 04 août 2010, 21:45 par Sïlver Sö »

Yotu

  • Membre
  • 6232 posts
05 août 2010, 10:23
Merci du tuto Sainior, mais il y a parfois un problème.

Quand je modifie les textes des pnjs situés sur la map de Bourg-en-vol, y a n'a un qui dit ce les textes que je lui ai mis, mais l'autre fait un melange de son texte et de celui de l'autre pnj, ce qui casse le sens de la phrase, et j'ai pourtant tout fait correct. :(

C'est pas normal que quand tu fais comme il fallait t'a pas le même resultat que celui du tuto... :(
« Modifié: 05 août 2010, 10:59 par Yotu »

Sainior

  • Membre
  • 6362 posts
05 août 2010, 11:43
Ca fait parti des bugs dont je parlais ; change l'offset (ou les offsets), et ça devrait aller mieux.

Yotu

  • Membre
  • 6232 posts
05 août 2010, 12:26
Si je cherche un nouvel offset, je ne pourrait pas utliser FSF, qui ne sert qu'aux maps pour les events...

Y a une manip spéciale pour trouver un nouvel offset, ou je renomme au pif comme ça? :)

Sainior

  • Membre
  • 6362 posts
05 août 2010, 12:28
Pourquoi ne pas utiliser FSF ? J'avoue ne pas te comprendre  :baffan:

Yotu

  • Membre
  • 6232 posts
05 août 2010, 12:32
Ben en fait je sais pas si avec FSF on peut trouver l'offset du pnj.

Sainior

  • Membre
  • 6362 posts
05 août 2010, 12:40
Tu t'en fous, tu le changes.

Yotu

  • Membre
  • 6232 posts
05 août 2010, 12:51
Okéj, alors si il est comme ça par exemple: "$1E8817" et que je le change en "$1E8818" là ça devrais être bon. ;)

Mais sinon, j'ai racourcit le texte d'un des pnjs et là les messages se mélangent pas.

Ah j'allait oublier, un des deux pnj a un ID personnage de "0000", y doit y'avoir un problème non?
« Modifié: 05 août 2010, 12:54 par Yotu »

Sainior

  • Membre
  • 6362 posts
05 août 2010, 12:52
Non, c'est normal, pour le 0000. Pour l'offset, cherche le avec FSF, pour être sur, desfois que...  :)

Yotu

  • Membre
  • 6232 posts
05 août 2010, 12:55
Ok, je teste ça. ;)

EDIT: J'ai fait une recherche à partir d'un offset de pnj, ça me donne un offset ressemblant à celui d'un event: "E3DBF0"
« Modifié: 05 août 2010, 13:01 par Yotu »

Weby

  • Invité
05 août 2010, 13:02
Mec, faut trouver un offset libre. Changer de xxxx17 à xxxx18, t'auras même pas forcément un autre script, mais le même script qui part juste 8 byte plus loin...

Yotu

  • Membre
  • 6232 posts
05 août 2010, 13:04
Ok, merci, je vais faire comme ça alors. ;)

Sainior

  • Membre
  • 6362 posts
07 août 2010, 10:46
EDIT : Ajout du "Spécial", pour R/S/E/RF/VF ;)

Yotu

  • Membre
  • 6232 posts
07 août 2010, 11:53
Ca va beaucoup nous aider pour scripter, ces dernières infos sont précieuses, merci mec! ;)

Whitti

  • Membre
  • 1893 posts
07 août 2010, 12:13
putain merci sainior  :orly:

-S@M-

  • Membre
  • 5367 posts
07 août 2010, 18:09
j'ai une correction à faire: à un moment tu dis que '"" n'est pas une commande mais est nécessaire. C'est faut puisque ' signifie que tout jusqu'à la fin de la ligne est un commentaire et donc c'est totalement inutile. sauf si tu considère qu'un commentaire reprenant un texte vide est utile...

Sainior

  • Membre
  • 6362 posts
10 août 2010, 13:05
Oui, mais il est présent dans tous les scripts, donc c'est toujours mieux de le mettre.

Sainior

  • Membre
  • 6362 posts
16 août 2010, 15:30
Désolé du DP, mais MàJ il y a : GivePokémon ajouté!

zugoent

  • Membre
  • 76 posts
16 août 2010, 17:31
Salut je voulais savoir pour le wildbattle ou le givepokemon c'est possible de dire que le pokémon doit ou non être shiney ? *oulalala le gourmand !* Et de choisire (tant qu'a faire) si le pokémon est male ou femelle ? :) Merci d'avance.

Retrosasu

  • Membre
  • 27186 posts
16 août 2010, 17:51
C'est possible de faire un echangepokemon ? Comme dans RBJ, un Electrode contre un Raichu par ex :)

Sainior

  • Membre
  • 6362 posts
16 août 2010, 18:01
Sasu : je me suis jamais posé la question, je regarderai ;)

Zugoent : on ne peut pas choisir le genre du Pokémon. Il est possible qu'ils soient shiney, pour cela, il faut utiliser Shinyzer (logiciel), et insérer un script spécial dans le Wildbattle ou le GivePokémon (je l'ai pas en tête, je te tiendrai au courant :))

Pages: [1] 2 3 4 5 6    En haut ↑