Rom Hack & Fan Game

Les Scripts Spéciaux

Salut à vous tous !

Ce tuto a pour but de regrouper et d'expliquer certains scripts dont on a pas forcément l'idée d'utiliser et qui pourtant pourraient être bien utiles.
Je tiens à préciser que vous devez avoir la base du scripting pour comprendre ce que je vais vous expliquer, donc direction le tuto d'apprentissage au scripting si vous n'avez jamais scripté.

Le Braille

Pour commencer, je vais vous apprendre à utiliser un script inatendu.
Qui n'a jamais rêvé de mettre du piment dans sa hack ? Des énigmes incroyables à résoudre? Avec des messages codés?
C'est ce qui m'amène aujourd'hui à vous apprendre à effectuer le script du braille ! Le braille avait été utilisé dans RF/VF en 2004 pour l'énigme du trou percé. Vous vous en souvenez ?

Bien, voici le code :

'---------------
#org 0x[offset1]
lockall
braille 0x8[offset2]
waitkeypress
releaseall
end


'---------
' Braille
'---------
#org 0x[offset2]
#braille [**********]

Maintenant, décortiquons tout ça !

  • D'abord on déclare l'offset :
#org 0x[offset1]
  • Puis on "lock" les mouvements :
lockall

Jusque là, rien de nouveau. Mais vient ensuite une fonction "braille" avec un offset qui repointe vers le contenu de cette fonction.

braille 0x8[offset2]

C'est donc cela la fonction "braille".

Maintenant, concernant le contenu de cette fonction "braille",...

'---------
' Braille
'---------

...on a, bien sûr, l'offset pointé,...

#org 0x[offset2]

...puis enfin, le contenu.

#braille [**********]

À la place du "[**********]" vous pouvez saisir votre texte braille.
C'est tout ? Eh oui ! Il suffit juste d'écrire ce que vous voulez en majuscules, cool non ?

Voici un exemple de braille simple :

'---------------
#org 0x1641AE
lockall
braille 0x81A7CB1
waitkeypress
releaseall
end


'---------
' Braille
'---------
#org 0x1A7CB1
#braille HELLO

Par contre, si vous souhaitez assembler un texte un peu plus long, la tâche se complique.
Il faut altérer les codes, mais je vais me renseigner sur ce sujet car je ne comprends pas entièrement son fonctionnement.

Pour les plus avancés, vous pouvez coupler le braille avec vos connaissances pour faire de magnifiques casse-têtes et autre énigmes. Voici un script qui vous donnera des idées :

'---------------
#org 0x[offset/A]
lockall
checkflag 0x2E3
if 0x1 goto 0x8[offset/B]
msgbox 0x8[offset1] MSG_YESNO
compare LASTRESULT 0x0
if 0x1 goto 0x8[offset/C]
msgbox 0x8[offset2] MSG_KEEPOPEN
braille 0x8[offset3]
waitkeypress
releaseall
end

'---------------
#org 0x[offset/B]
msgbox 0x8[offset4]
releaseall
end

'---------------
#org 0x[offset/C]
msgbox 0x8[offset5]
releaseall
end


'---------
' Strings
'---------
#org 0x[offset1]
= La porte ne s'ouvre pas. L'examiner de plus près?

#org 0x18B91C
= En s'approchant plus près, on peut voir des écritaux sur la porte.

#org 0x[offset4]
= C'est ouvert!

#org 0x[offset5]
= [player] n'est qu'une pourriture qui pige rien au braille.


'---------
' Braille
'---------
#org 0x[offset3]
#braille COUPE

Ce script est tiré de l'énigme du trou percé. C'est parfait pour mettre à l'épreuve le joueur avant de rentrer dans une grotte, manoir ou autre.
Je vous résume ce qui se passe : tout d'abord le script interroge le player s'il veut s'approcher de la porte. Si non, le player se fait pourrir et le script se termine, si oui, le script apprend au player qu'il est écrit quelque chose et le braille est déclenché. Si le joueur a compris ce qu'il est écrit (coupe, naturellement), celui-ci n'a qu'à utiliser la technique attendue, et... magie ! Le script se déclenche et un texte apparaît disant que la porte est ouverte. Et elle l'est effectivement, ingénieux n'est-ce pas ?

Vous pouvez ainsi remarquer que ce genre de script, utilisé intelligemment, n'est pas si inutile finalement.

Voilà, s'en est fini avec le braille ! Ouf ! Passons maintenant à autre chose.

Le Move Camera

Bien, on va s'attaquer à un applymovement. Applymovement !? Mais on connais déjà ça ! Nan mais pas n'importe lequel, le fameux mais peu connu "Move Camera" !
Waaa, keskessékessa ! Un peu d'anglais enfin ! Cela signifie, bouger la caméra. Et ça s'utilise comme un vulgaire applymovement !

Allez, voilà le code :

'---------------
#org 0x[offset1]
applymovement MOVE_CAMERA 0x8[offset2]
waitmovement 0x0
release
end



'-----------
' Movement
'-----------
#org 0x[offset2]
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0xFE 'End of Movements

Comme vous l'avez remarqué, ça n'a rien de bien différent avec l'applymovement dont vous aviez l'habitude. Sauf qu'au lieu de déclarer le personnage qui se déplace, vous indiquez la camera par la fonction "MOVE_CAMERA". Encore une fois, cela peut vous sembler inutile, ben pas tant que ça finalement...

Un petit exemple :

'---------------
#org 0x[offset/A]
msgbox 0x8[offset1] MSG_NORMAL
applymovement MOVE_CAMERA 0x8[offset2]
waitmovement 0x0
release
end


'---------
'Strings
'---------
#org 0x[offset1]
= Regarde ! Là haut!\pUn Pokémon Légendaire !!!


'-----------
' Movement
'-----------
#org 0x[offset2]
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0x9 'Step Up (Normal)
#raw 0xFE 'End of Movements

Alors, pas mal pour votre scénario finalement hein ? Ça peut servir !

Alien Invasion

Je vais désormais vous apprendre un script que vous ne connaissez pas, c'est impossible, puisqu'il n'a jamais été utilisé. Alors que fait-il dans un jeu Pokémon ? Eh bien on n'en sait rien.

Tout d'abord, qu'est-ce que c'est que ce script ? Ce petit script n'est en fait qu'un vulgaire spécial. Et oui, rien de bien compliqué à réaliser, son numéro est le "6A".

D'accord, ok, mais il sert à quoi ce spécial ? Ce script fait apparaître (tenez vous bien) un message très bizarre suivi d'un son d'extraterrestre ! Je ne vous fais pas de blague, si si ça existe ! Voici le code :

'---------------
#org 0x[offset]
special 0x6A
end

Et oui, je vous l'avais dit, rien de bien compliqué ! Je ne le décortique pas, vous êtes sensé savoir ce qu'est un spécial.
Bien, testez le code et vous verrez, ça marche ! Mais alors où est l'utilité de ce code ? Ma foi vous pourrez vous en servir lors d'une animation dans votre scénario, par exemple : "Il y eu un tremblement de terre, le Rival et moi-même étions affolé, et c'est alors que nous entendîmes des sons bizarres..."
Cela peut-être pas mal pour votre jeu, n'est-ce pas ?

Distributeur De Boissons

Dans cette dernière partie, je vais vous apprendre à faire un distributeur de boissons. Et je vous le dis, c'est bien plus compliqué que ce que vous croyez : car c'est un script de 115 lignes ! Heureusement je suis là pour vous passer ce script :

'---------------
#org 0x16C05C
lockall
preparemsg 0x8195554 '"Un distributeur! Que choisir?"
waitmsg
showmoney 0x0 0x0 0x0
goto 0x816C06D

'---------------
#org 0x16C06D
multichoice 0xC 0x0 0x1A 0x0
copyvar 0x4001 LASTRESULT
copyvar 0x8000 0x4001
compare 0x8000 0x0
if 0x1 goto 0x816C0AB
compare 0x8000 0x1
if 0x1 goto 0x816C0BC
compare 0x8000 0x2
if 0x1 goto 0x816C0CD
msgbox 0x81955B0 MSG_KEEPOPEN '"Pas soif!"
goto 0x816C175

'---------------
#org 0x16C0AB
setvar 0x4000 0x1A
checkmoney 0xC8 0x0
goto 0x816C0F3

'---------------
#org 0x16C0BC
setvar 0x4000 0x1B
checkmoney 0x12C 0x0
goto 0x816C0F3

'---------------
#org 0x16C0CD
setvar 0x4000 0x1C
checkmoney 0x15E 0x0
goto 0x816C0F3

'---------------
#org 0x16C175
hidemoney 0x0 0x0
releaseall
end

'---------------
#org 0x16C0F3
compare LASTRESULT 0x0
if 0x1 goto 0x816C159
checkitemroom 0x4000 0x1
compare LASTRESULT 0x0
if 0x1 goto 0x816C167
compare 0x4001 0x0
if 0x1 call 0x816C0DE
compare 0x4001 0x1
if 0x1 call 0x816C0E5
compare 0x4001 0x2
if 0x1 call 0x816C0EC
updatemoney 0x0 0x0 0x0
bufferitem 0x0 0x4000
sound 0x63
msgbox 0x819558C MSG_KEEPOPEN '"Et hop! [buffer1]!"
additem 0x4000 0x1
goto 0x816C14D

'---------------
#org 0x16C159
msgbox 0x8195572 MSG_KEEPOPEN '"Oups! Pas assez d'argent!"
goto 0x816C175

'---------------
#org 0x16C167
msgbox 0x8195598 MSG_KEEPOPEN '"L'inventaire est plein!"
goto 0x816C175

'---------------
#org 0x16C0DE
paymoney 0xC8 0x0
return

'---------------
#org 0x16C0E5
paymoney 0x12C 0x0
return

'---------------
#org 0x16C0EC
paymoney 0x15E 0x0
return

'---------------
#org 0x16C14D
preparemsg 0x8195554 '"Un distributeur! Que choisir?"
waitmsg
goto 0x816C06D


'---------
' Strings
'---------
#org 0x195554
= Un distributeur! Que choisir?

#org 0x1955B0
= Pas soif!

#org 0x19558C
= Et hop! [buffer1]!

#org 0x195572
= Oups! Pas assez d'argent!

#org 0x195598
= L'inventaire est plein!

Ce script n'est qu'une longue suite de conditions : "SI blablabla, ALORS blablabla..."
C'est donc un code compliqué, dont je vous ferais l'honneur de ne pas expliquer et détailler. Soyez heureux, je le partage avec vous !

Ça y est, on en a fini !
N'hésitez pas à me pointer du doigt les éventuelles erreurs que j'aurais laissé derrière moi.
À vous de travailler maintenant ! Laissez aller votre imagination, vous trouverez bien des idées fabuleuses à mettre en œuvre !

Par Flow'

Par Loris