Vous en avez marre de devoir chercher à droite et à gauche pour apprendre à scripter ? Les tutoriels que vous trouvez sont périmés ? 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
- 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 !
On va commencer par quelque chose 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
'---------
```
Ça 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 disais 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 compilé, votre script bug. Vérifiez toujours. Dans ce cas, changez simplement l'offset. Je vous recommande également de faire vos scripts sous bloc-note, et de les copier/coller dans les scripts des personnages.
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éexpliquer.
```
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 scripts 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 !
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 scripts 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 apparaî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 bloqué. 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 sélectionné), 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 dis 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 chaque 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 tous les mouvements en bas de page. 0xFE est présent à chaque fin de mouvement. C'est pour dire au script que les mouvements sont finis.
Évidemment, 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).
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 ce n'est pas encore terminé. Nan mais. Si on ne fait pas la manipulation qui suit, l'objet réapparaîtra encore et encore ! Pour éviter ça, allez 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, je ne vais pas toujours vous le rabâcher. On va s'orienter sur quelque chose d'encore plus fun, un Wildbattle.
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. 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. Ça fonctionne comme MSG_FACE, ça dit au personnage de vous regarder.
```
setwildbattle 0x8F 0x5A 0x0
```
setwildbattle débute le script. 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.
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 quelque chose, rappelez-vous, bon sang ! Juste que MSG_FACE est remplacé par MSG_NORMAL. Cette fonction va permettre au personnage de dire quelque chose 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.
On va faire un "Spécial". Qu'est-ce qu'un spécial ? C'est une commande qui sert à faire quelque chose 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 quelque chose 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.
Évidemment, 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 ne 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.
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é. Bon, j'ai mis des textes simples, histoire de ne 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 de faire disparaître un personnage ou de ne faire exécuter un script qu'une seule fois. Eh oui, si on n'en mettait pas, le script pourrait s'exécuter à l'infini, et dans notre exemple, on recevrait le Pokémon des milliers de 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'éxé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à où nous emmène le premier "if ___ goto". Il s'éxecute une fois que le Pokémon a été donné. Eh oui, si vous lui parlez après, il faut bien qu'il vous dise quelque chose ^^. "end" renvoie 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.
Puis, le reste, vous connaissez =) Bon, c'était coton à expliquer, mais au bout de quelques essais, vous devriez avoir compris. 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 où vous le voulez lorsqu'il s'active.
```
'---------------
#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 Position. 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.
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!
Je peux vous aider?"
waitmsg
pokemart 0x8offset
msgbox 0x8offset MSG_KEEPOPEN '"A la prochaine!"
release
end
'---------------
#org 0xoffset
release
end
'---------
' Strings
'---------
#org 0xoffset
= Bonjour!
Je 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!
Je 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 lâchez 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.
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 ce n'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énarios, 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.
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én