Avant tout, allez lire le premier tuto de Sainior :
~~> http://www.pokemontrash.com/club/rom-hacking/%28tuto%29%28gba%29-apprendre-a-scripter/
Étant donné que le tuto de Sainior n'est pas complet, et qu'il n'a malheureusement plus le temps de s'en occuper, je m'occupe de continuer les leçons
Je vais essayer de faire aussi simple que lui
Vous avez déjà les ressources sur l'autre topic
Spritevisible & spriteinvisible
Spoiler
Vous connaissez déjà les commandes showsprite et hidesprite. Spritevisible et spriteinvisible fonctionnent un peu de la même façon.
Une seule nouvelle commande.
spriteinvisible débute la commande. 0x4, c'est le numéro du personnage. 0x3, c'est la bank sur laquelle le personnage se trouve. 0x0, c'est la map.
Mais attention, quand vous faites cette commande, le sprite est invisible, mais il est toujours présent sur la map, contraire au hidesprite qui le supprime complètement. Ainsi, même si le sprite est invisible, si vous parlez au "fantôme", le script s'exécutera quand même.
Vous me direz, "mais alors quel est l'avantage ?". C'est simple, pas besoin de flag, il reste invisible même si vous bougez. Vous pouvez aussi ainsi faire disparaitre votre sprite même si vous êtes sur une autre map (mais dans ce cas, il faut quand même le flag).
spritevisible est exactement pareil, mais dans le sens inverse
Code: [Sélectionner]
'---------------
#org 0x710730
lock
msgbox 0x87107B0 MSG_FACE '"Ciao !"
applymovement 0x4 0x8710830
waitmovement 0x0
spriteinvisible 0x4 0x3 0x0
release
end
'---------
' Strings
'---------
#org 0x7107B0
= Ciao !
'-----------
' Movements
'-----------
#org 0x710830
#raw 0x12 'Step Left (Normal)
#raw 0x12 'Step Left (Normal)
#raw 0x12 'Step Left (Normal)
#raw 0xFE 'End of Movements
Une seule nouvelle commande.
Code: [Sélectionner]
spriteinvisible 0x4 0x3 0x0
spriteinvisible débute la commande. 0x4, c'est le numéro du personnage. 0x3, c'est la bank sur laquelle le personnage se trouve. 0x0, c'est la map.
Mais attention, quand vous faites cette commande, le sprite est invisible, mais il est toujours présent sur la map, contraire au hidesprite qui le supprime complètement. Ainsi, même si le sprite est invisible, si vous parlez au "fantôme", le script s'exécutera quand même.
Vous me direz, "mais alors quel est l'avantage ?". C'est simple, pas besoin de flag, il reste invisible même si vous bougez. Vous pouvez aussi ainsi faire disparaitre votre sprite même si vous êtes sur une autre map (mais dans ce cas, il faut quand même le flag).
spritevisible est exactement pareil, mais dans le sens inverse
Météo
Spoiler
Les commandes suivantes servent à changer la météo.
Voyons ça de plus près, rien de bien difficile
setweather 0x3 dit au script de préparer le temps 0x3 (ici, 0x3 = la pluie).
doweather dit au script d'exécuter le temps préparé. Pas de paramètres requis pour cette commande.
resetweather dit au sript de péparer le temps normal de la map (visible dans l'onglet "Entête").
doweather, pareil, dit au script d'exécuter le temps préparé.
Aucun paramètre requis à nouveau pour ces deux commandes.
À noter que "doweather" doit suivre, sans exception, chaque commande de météo. Si vous ne mettez pas cette commande dans votre script, le temps ne se déclenchera pas
Voici une liste de toutes les météos possibles :
(Merci à pokemonbonjour pour la liste)
Code: [Sélectionner]
'---------------
#org 0x7109C4
lock
msgbox 0x8710A44 MSG_FACE '"Il va pleuvoir !"
setweather 0x3
doweather
pause 0x28
msgbox 0x8710AC4 MSG_NORMAL '"Et maintenant, il va faire le même..."
resetweather
doweather
release
end
'---------
' Strings
'---------
#org 0x710A44
= Il va pleuvoir !
#org 0x710AC4
= Et maintenant, il va faire le même\ntemps qu'avant.
Voyons ça de plus près, rien de bien difficile
Code: [Sélectionner]
setweather 0x3
doweather
setweather 0x3 dit au script de préparer le temps 0x3 (ici, 0x3 = la pluie).
doweather dit au script d'exécuter le temps préparé. Pas de paramètres requis pour cette commande.
Code: [Sélectionner]
resetweather
doweather
resetweather dit au sript de péparer le temps normal de la map (visible dans l'onglet "Entête").
doweather, pareil, dit au script d'exécuter le temps préparé.
Aucun paramètre requis à nouveau pour ces deux commandes.
À noter que "doweather" doit suivre, sans exception, chaque commande de météo. Si vous ne mettez pas cette commande dans votre script, le temps ne se déclenchera pas
Voici une liste de toutes les météos possibles :
Code: [Sélectionner]
Rien = 0x0
Reflets des nuages = 0x1
Normal = 0x2
Pluie = 0x3
Neige (peu) = 0x4
Orage = 0x5
Brouillard = 0x6
Neige = 0x7
Tempête de sable = 0x8
Brouillard en diagonale = 0x9
Brouillard mince = 0xA
Un peu sombre = 0xB
Surchauffe = 0xC
orage (2) = 0xD
aucun = 0xE
(Merci à pokemonbonjour pour la liste)
Animations des portes
Spoiler
Code: [Sélectionner]
'---------------
#org 0x710B84
lock
checkflag 0x221
applymovement 0x6 0x8710C04
waitmovement 0x0
setdooropened 0x10 0xD
doorchange
applymovement 0x6 0x8710C84
waitmovement 0x0
hidesprite 0x6
setdoorclosed 0x10 0xD
doorchange
setflag 0x221
release
end
'-----------
' Movements
'-----------
#org 0x710C04
#raw 0x13 'Step Right (Normal)
#raw 0x13 'Step Right (Normal)
#raw 0x1 'Face Up
#raw 0xFE 'End of Movements
#org 0x710C84
#raw 0x11 'Step Up (Normal)
#raw 0xFE 'End of Movements
What's new ?
Code: [Sélectionner]
setdooropened 0x10 0xD
doorchange
setdooropened est la commande qui ouvre une porte sur la map. 0x10 et 0xD sont les coordonnées respectives X et Y de la porte sur la map.
doorchange n'est pas tout à fait indispensable, mais ça donne un résultat tout simplement meilleur. doorchange peut se comparer à par exemple un waitfanfare. Ainsi, grâce à cette commande, le script attend que la porte soit ouverte complètement pour continuer le script.
Utile, si vous avez mélangé à un applymovement, car quand le perso passe avant que la porte ne s'ouvre, ça le fait pas !
Code: [Sélectionner]
setdoorclosed 0x10 0xD
doorchange
setdoorclosed marche exactement comme setdooropened, mais pour fermer une porte.
doorchange ne change pas justement ^^
15/5/2011 - MAJ
Les flags
Spoiler
On y va, c'est un peu coton à expliquer mais on va le faire !
Décortiquons.
Rien de particulier.
checkflag 0x240 va regarder si le flag n°240 est activé ou pas.
if 0x1 goto 0x8[offset] ordonne au script d'aller à cet offset si le flag n°240 est activé.
Mais comment s'active-t-il ? Attendez un instant
Un msgbox, simple, suivi d'un giveitem (Master ball), et d'un nouveau msgbox.
Rien de bien particulier non plus.
On y vient ! Voilà comment le flag n°240 s'active.
La commande "setflag 0x[numéroduflag]" active le flag.
Ainsi, quand je vais parler à la personne la première fois, il va me dire "Je te donne un objet", il me donne l'objet, puis me dit "A ploush". Ici, le flag 240 s'active. Ainsi, si je reparle une deuxième fois à la personne, "checkflag 0x240" va détecter que le flag est activé. Je vais donc être envoyé à la deuxième partie de mon script. La personne me dira donc "Tu as déjà eu l'objet". Ainsi, je ne pourrai pas obtenir l'objet à l'infinie.
Continuons.
clearflag 0x240, comme son nom l'indique, supprime, désactive le flag n°240.
Comme ça, quand je parle pour la deuxième fois à la personne, "clearflag" désactive le flag.
Ainsi, si je lui reparle une troisième fois, "checkflag 0x240" va voir que le flag n'est pas activé. Donc, le script continue normalement.
Ici, dans mon exemple, les flags ne sont pas très importants, étant donné que grâce au clearflag, je peux obtenir l'objet à l'infinie. Si je ne l'obtenir qu'une fois, il faut supprimer "clearflag 0x240" du script
À noter que vous pouvez activer un flag allant de 0001 à FFFF.
Certains flags importants sont déjà utilisés dans le jeu, faites attention, cela peut provoquer quelques bugs dans le jeu.
Flags spéciaux
Il existe des flags spéciaux qui active certaines choses dans le jeu (donner un bagde, ajouter un menu...). Voici un exemple :
Voici la commande du flag spécial :
Ici, ce flag donne les chaussures de sport au joueur.
Voici les listes des flags spéciaux :
Rouge Feu / Vert Feuille
Débloquer le menu Pokémon : 0x828
Débloquer le Pokédex : 0x829
Chaussures de sport : 0x82F
Badge 1 : 0x820
Badge 2 : 0x821
Badge 3 : 0x822
Badge 4 : 0x823
Badge 5 : 0x824
Badge 6 : 0x825
Badge 7 : 0x826
Badge 8 : 0x827
Rubis / Saphir
Débloquer le menu Pokémon : 0x800
Débloquer le Pokédex : 0x801
Débloquer le Pokénav : 0x802
Chaussures de sport : 0x860
Badge 1 : 0x807
Badge 2 : 0x808
Badge 3 : 0x809
Badge 4 : 0x80A
Badge 5 : 0x80B
Badge 6 : 0x80C
Badge 7 : 0x80D
Badge 8 : 0x80E
Emeraude
Débloquer le menu Pokémon : 0x860
Débloquer le Pokédex : 0x861
Débloquer le Pokénav : 0x862
Chaussures de sport : 0x8C0
Badge 1 : 0x867
Badge 2 : 0x868
Badge 3 : 0x869
Badge 4 : 0x86A
Badge 5 : 0x86B
Badge 6 : 0x86C
Badge 7 : 0x86D
Badge 8 : 0x86E
On a fini pour les flags !
Code: [Sélectionner]
'---------------
#org 0x710F55
lock
checkflag 0x240
if 0x1 goto 0x8711115
msgbox 0x8710FD5 MSG_FACE '"Je suis gentil, je te donne un obj..."
giveitem 0x1 0x1 MSG_OBTAIN
msgbox 0x8711055 MSG_FACE '"A ploush !"
setflag 0x240
release
end
'---------------
#org 0x711115
msgbox 0x8711195 MSG_FACE '"T'as déjà eu ton objet !"
clearflag 0x240
release
end
'---------
' Strings
'---------
#org 0x710FD5
= Je suis gentil, je te donne un objet.
#org 0x711055
= A ploush !
#org 0x711195
= T'as déjà eu ton objet !
Décortiquons.
Code: [Sélectionner]
'---------------
#org 0x710F55
lock
Rien de particulier.
Code: [Sélectionner]
checkflag 0x240
if 0x1 goto 0x8711115
checkflag 0x240 va regarder si le flag n°240 est activé ou pas.
if 0x1 goto 0x8[offset] ordonne au script d'aller à cet offset si le flag n°240 est activé.
Mais comment s'active-t-il ? Attendez un instant
Code: [Sélectionner]
msgbox 0x8710FD5 MSG_FACE '"Je suis gentil, je te donne un obj..."
giveitem 0x1 0x1 MSG_OBTAIN
msgbox 0x8711055 MSG_FACE '"A ploush !"
Un msgbox, simple, suivi d'un giveitem (Master ball), et d'un nouveau msgbox.
Rien de bien particulier non plus.
Code: [Sélectionner]
setflag 0x240
On y vient ! Voilà comment le flag n°240 s'active.
La commande "setflag 0x[numéroduflag]" active le flag.
Ainsi, quand je vais parler à la personne la première fois, il va me dire "Je te donne un objet", il me donne l'objet, puis me dit "A ploush". Ici, le flag 240 s'active. Ainsi, si je reparle une deuxième fois à la personne, "checkflag 0x240" va détecter que le flag est activé. Je vais donc être envoyé à la deuxième partie de mon script. La personne me dira donc "Tu as déjà eu l'objet". Ainsi, je ne pourrai pas obtenir l'objet à l'infinie.
Continuons.
Code: [Sélectionner]
clearflag 0x240
clearflag 0x240, comme son nom l'indique, supprime, désactive le flag n°240.
Comme ça, quand je parle pour la deuxième fois à la personne, "clearflag" désactive le flag.
Ainsi, si je lui reparle une troisième fois, "checkflag 0x240" va voir que le flag n'est pas activé. Donc, le script continue normalement.
Ici, dans mon exemple, les flags ne sont pas très importants, étant donné que grâce au clearflag, je peux obtenir l'objet à l'infinie. Si je ne l'obtenir qu'une fois, il faut supprimer "clearflag 0x240" du script
À noter que vous pouvez activer un flag allant de 0001 à FFFF.
Certains flags importants sont déjà utilisés dans le jeu, faites attention, cela peut provoquer quelques bugs dans le jeu.
Flags spéciaux
Il existe des flags spéciaux qui active certaines choses dans le jeu (donner un bagde, ajouter un menu...). Voici un exemple :
Code: [Sélectionner]
'---------------
#org 0x711215
msgbox 0x8711295 MSG_FACE '"Tiens, prends ces chaussures de sp..."
setflag 0x82F
end
'---------
' Strings
'---------
#org 0x711295
= Tiens, prends ces chaussures de sport !
Voici la commande du flag spécial :
Code: [Sélectionner]
setflag 0x82F
Ici, ce flag donne les chaussures de sport au joueur.
Voici les listes des flags spéciaux :
Rouge Feu / Vert Feuille
Débloquer le menu Pokémon : 0x828
Débloquer le Pokédex : 0x829
Chaussures de sport : 0x82F
Badge 1 : 0x820
Badge 2 : 0x821
Badge 3 : 0x822
Badge 4 : 0x823
Badge 5 : 0x824
Badge 6 : 0x825
Badge 7 : 0x826
Badge 8 : 0x827
Rubis / Saphir
Débloquer le menu Pokémon : 0x800
Débloquer le Pokédex : 0x801
Débloquer le Pokénav : 0x802
Chaussures de sport : 0x860
Badge 1 : 0x807
Badge 2 : 0x808
Badge 3 : 0x809
Badge 4 : 0x80A
Badge 5 : 0x80B
Badge 6 : 0x80C
Badge 7 : 0x80D
Badge 8 : 0x80E
Emeraude
Débloquer le menu Pokémon : 0x860
Débloquer le Pokédex : 0x861
Débloquer le Pokénav : 0x862
Chaussures de sport : 0x8C0
Badge 1 : 0x867
Badge 2 : 0x868
Badge 3 : 0x869
Badge 4 : 0x86A
Badge 5 : 0x86B
Badge 6 : 0x86C
Badge 7 : 0x86D
Badge 8 : 0x86E
On a fini pour les flags !
20/5/2011 - MAJ
Le Countpokemon
Spoiler
Mais qu'est-ce c'est ? Cela sert à compter le nombre de Pokémon dans votre équipe (non pas possible !). Cela peut-être utile pour des zones où l'on ne peut rentrer qu'avec un certain nombre de Pokémon...
Plutôt long, mais simple.
Voici la commande qui déclenche tout.
coutpokemon, comme son nom l'indique, regarde le nombre de Pokémon présent(s) dans votre équipe.
compare LASTRESULT 0x1 va regarder si countpokemon a compté 1 Pokémon dans l'équipe.
Si oui (= if 0x1), il va à un certain offset. On retrouve cet offset plus bas :
~~> Avec un message disant "Tu as 1 Pokémon."
C'est logique
Si countpokemon voit que vous n'avez pas 1 seul Pokémon dans votre équipe, il continue de compter. Le nombre d'après ? 2. (Bravo, une première S vous attend ).
compare LASTRESULT 0x2 fait exactement la même chose que compare LASTRESULT 0x1, mais pour 2 Pokémon. Si c'est le cas, il va à un nouvel offset :
Qui est celui-là, avec un message disant "Tu as 2 Pokémon."
Logique toujours.
Ce sera la même chose avec "compare LASTRESULT 0x3, 0x4, 0x5 et 0x6".
A la fin du script, juste après les compare LASTRESULT, arrive un message simple :
"Tu as 0 Pokémon". C'est normal, si le script arrive jusqu'ici, c'est que le joueur n'a ni 1, 2, 3, 4, 5, ni 6 Pokémon dans son équipe. Calcul ~~> Il en a donc 0 (le max possible étant 6).
Donc ce message s'affichera. Normalement ça devrait jamais arriver, car le joueur est censé avoir 1 Pokémon minimum tout le temps. (sauf si c'est le tout tout début du jeu).
Voilà, c'est fini pour le countpokemon. Alors, facile non ?
Code: [Sélectionner]
'---------------
#org 0x7114C4
lock
countpokemon
compare LASTRESULT 0x1
if 0x1 goto 0x8711544
compare LASTRESULT 0x2
if 0x1 goto 0x8711644
compare LASTRESULT 0x3
if 0x1 goto 0x8711784
compare LASTRESULT 0x4
if 0x1 goto 0x8711BB4
compare LASTRESULT 0x5
if 0x1 goto 0x8711CB4
compare LASTRESULT 0x6
if 0x1 goto 0x8711DB4
msgbox 0x8711B34 MSG_FACE '"Tu as 0 Pokémon."
release
end
'---------------
#org 0x711544
msgbox 0x87115C4 MSG_FACE '"Tu as 1 Pokémon."
release
end
'---------------
#org 0x711644
msgbox 0x8711704 MSG_FACE '"Tu as 2 Pokémon."
release
end
'---------------
#org 0x711784
msgbox 0x8711AB4 MSG_FACE '"Tu as 3 Pokémon."
release
end
'---------------
#org 0x711BB4
msgbox 0x8711C34 MSG_FACE '"Tu as 4 Pokémon."
release
end
'---------------
#org 0x711CB4
msgbox 0x8711D34 MSG_FACE '"Tu as 5 Pokémon."
release
end
'---------------
#org 0x711DB4
msgbox 0x8711E34 MSG_FACE '"Tu as 6 Pokémon."
release
end
'---------
' Strings
'---------
#org 0x711B34
= Tu as 0 Pokémon.
#org 0x7115C4
= Tu as 1 Pokémon.
#org 0x711704
= Tu as 2 Pokémon.
#org 0x711AB4
= Tu as 3 Pokémon.
#org 0x711C34
= Tu as 4 Pokémon.
#org 0x711D34
= Tu as 5 Pokémon.
#org 0x711E34
= Tu as 6 Pokémon.
Plutôt long, mais simple.
Code: [Sélectionner]
countpokemon
Voici la commande qui déclenche tout.
coutpokemon, comme son nom l'indique, regarde le nombre de Pokémon présent(s) dans votre équipe.
Code: [Sélectionner]
compare LASTRESULT 0x1
if 0x1 goto 0x8711544
compare LASTRESULT 0x1 va regarder si countpokemon a compté 1 Pokémon dans l'équipe.
Si oui (= if 0x1), il va à un certain offset. On retrouve cet offset plus bas :
Code: [Sélectionner]
'---------------
#org 0x711544
msgbox 0x87115C4 MSG_FACE '"Tu as 1 Pokémon."
release
end
~~> Avec un message disant "Tu as 1 Pokémon."
C'est logique
Code: [Sélectionner]
compare LASTRESULT 0x2
if 0x1 goto 0x8711644
Si countpokemon voit que vous n'avez pas 1 seul Pokémon dans votre équipe, il continue de compter. Le nombre d'après ? 2. (Bravo, une première S vous attend ).
compare LASTRESULT 0x2 fait exactement la même chose que compare LASTRESULT 0x1, mais pour 2 Pokémon. Si c'est le cas, il va à un nouvel offset :
Code: [Sélectionner]
'---------------
#org 0x711644
msgbox 0x8711704 MSG_FACE '"Tu as 2 Pokémon."
release
end
Qui est celui-là, avec un message disant "Tu as 2 Pokémon."
Logique toujours.
Ce sera la même chose avec "compare LASTRESULT 0x3, 0x4, 0x5 et 0x6".
Code: [Sélectionner]
msgbox 0x8711B34 MSG_FACE '"Tu as 0 Pokémon."
A la fin du script, juste après les compare LASTRESULT, arrive un message simple :
"Tu as 0 Pokémon". C'est normal, si le script arrive jusqu'ici, c'est que le joueur n'a ni 1, 2, 3, 4, 5, ni 6 Pokémon dans son équipe. Calcul ~~> Il en a donc 0 (le max possible étant 6).
Donc ce message s'affichera. Normalement ça devrait jamais arriver, car le joueur est censé avoir 1 Pokémon minimum tout le temps. (sauf si c'est le tout tout début du jeu).
Voilà, c'est fini pour le countpokemon. Alors, facile non ?
22/5/2011 - MAJ
Giveegg
Spoiler
Aujourd'hui, on va apprendre à faire un giveegg !
C'est exactement la même chose que pour un givepokemon (Cf. tuto de Sainior, je vais pas tout réexpliquer), mais cela donne un oeuf !
Vous voyez, c'est comme le givepokemon, sauf que la commande est encore plus simple !
Voici la seule nouvelle commande :
giveegg est la commande qui donne l'oeuf. 0x19, c'est le numéro du Pokémon en hexa. Ici, c'est un Pikachu, (25 en décimal ~~> 19 en hexa).
Rien d'autre ! Le Pokémon sera niveau 5.
Donc, rien de bien compliqué si vous connaissez déjà le givepokemon (je le redis, j'ai pas ré-expliquer, Sainior l'a très bien fait )
C'est exactement la même chose que pour un givepokemon (Cf. tuto de Sainior, je vais pas tout réexpliquer), mais cela donne un oeuf !
Code: [Sélectionner]
'---------------
#org 0x712104
lock
checkflag 0x245
if 0x1 goto 0x8712384
faceplayer
msgbox 0x8712184 MSG_YESNO '"Tu veux un oeuf ?"
compare LASTRESULT 0x1
if 0x1 goto 0x8712204
msgbox 0x8712284 MSG_NORMAL '"Dommage !"
release
end
'---------------
#org 0x712384
msgbox 0x8712404 MSG_FACE '"Mon oeuf va bien ?"
release
end
'---------------
#org 0x712204
giveegg 0x19
fanfare 0x13E
msgbox 0x8712304 MSG_NORMAL '"Prends-le !"
waitfanfare
closeonkeypress
setflag 0x245
release
end
'---------
' Strings
'---------
#org 0x712184
= Tu veux un oeuf ?
#org 0x712284
= Dommage !
#org 0x712404
= Mon oeuf va bien ?
#org 0x712304
= Prends-le !
Vous voyez, c'est comme le givepokemon, sauf que la commande est encore plus simple !
Voici la seule nouvelle commande :
Code: [Sélectionner]
giveegg 0x19
giveegg est la commande qui donne l'oeuf. 0x19, c'est le numéro du Pokémon en hexa. Ici, c'est un Pikachu, (25 en décimal ~~> 19 en hexa).
Rien d'autre ! Le Pokémon sera niveau 5.
Donc, rien de bien compliqué si vous connaissez déjà le givepokemon (je le redis, j'ai pas ré-expliquer, Sainior l'a très bien fait )
26/5/2011 - MAJ
Setmaptile
Spoiler
Oulahh, c'est quoi ça ? C'est simple, en fait, le setmaptile change un bloc de la map sur laquelle vous vous trouvez au moment. C'est pas dur, et c'est plutôt bien pour certains scénarios (oui, rappelez vous, [je sais plus dans quelle version] un mec creuse une grotte au fur et à mesure que vous capturez des zarbis ! On peut utiliser le setmaptile pour ce genre de choses).
Deux nouvelles commandes :
setmaptile lance la commande. 0xB et 0xE sont respectivement les positions X et Y du bloc à changer sur la carte où vous vous trouvez.
0x4, c'est le numéro du bloc en hexa que vous voulez faire apparaître à la position donnée. Comment connaître sur numéro ? Simple, allez dans Advance Map, cliquez sur le bloc choisi et regardez en bas à gauche : "Bloc : XXX Offset : YYYYYY" est affiché. Mémorisez le numéro du bloc, c'est cette valeur que vous devez entrer dans la commande. (le nombre est déjà en hexa, vous ne changez donc rien).
0x0, c'est le numéro de comportement. (0x0, vous pouvez passer, 0x1, vous pouvez pas)
Cette commande est à mettre après chaque setmaptile. En gros, elle "re-affiche l'écran", de telle sorte que le bloc changé apparaisse. Sans cette commande, seul le comportement du bloc changera, pas son image.
Dans mon script, sur la position X : B et Y : E, un bloc avec une fleur s'affichera, et je pourrais passer dessus.
Voilà, on en a fini avec le setmaptile !
Ps : Je n'ai pas trouvé le moyen pour que le bloc reste changé une fois qu'on change de map. Si quelqu'un trouve un moyen, merci de me MP
Code: [Sélectionner]
'---------------
#org 0x71279C
lock
setmaptile 0xB 0xE 0x4 0x0
special 0x8E
release
end
Deux nouvelles commandes :
Code: [Sélectionner]
setmaptile 0xB 0xE 0x4 0x0
setmaptile lance la commande. 0xB et 0xE sont respectivement les positions X et Y du bloc à changer sur la carte où vous vous trouvez.
0x4, c'est le numéro du bloc en hexa que vous voulez faire apparaître à la position donnée. Comment connaître sur numéro ? Simple, allez dans Advance Map, cliquez sur le bloc choisi et regardez en bas à gauche : "Bloc : XXX Offset : YYYYYY" est affiché. Mémorisez le numéro du bloc, c'est cette valeur que vous devez entrer dans la commande. (le nombre est déjà en hexa, vous ne changez donc rien).
0x0, c'est le numéro de comportement. (0x0, vous pouvez passer, 0x1, vous pouvez pas)
Code: [Sélectionner]
special 0x8E
Cette commande est à mettre après chaque setmaptile. En gros, elle "re-affiche l'écran", de telle sorte que le bloc changé apparaisse. Sans cette commande, seul le comportement du bloc changera, pas son image.
Dans mon script, sur la position X : B et Y : E, un bloc avec une fleur s'affichera, et je pourrais passer dessus.
Voilà, on en a fini avec le setmaptile !
Ps : Je n'ai pas trouvé le moyen pour que le bloc reste changé une fois qu'on change de map. Si quelqu'un trouve un moyen, merci de me MP
28/6/2011 - MAJ
Random
Spoiler
Avant tout, je voudrai remercier Sainior qui m'a appris ça, donc merci à lui
On va apprendre à faire une commande de hasard, un tirage au sort en quelque sorte. Pour cela, nous allons utiliser la commande "ramdom". Voici un exemple de script qu'on peut faire :
C'est assez long, mais très très simple
random 0x4 est la commande principale. random lance la commande, et 0x4 est le nombre de possibilité au tirage au sort.
compare LASTRESULT 0x0, 0x1, 0x2 et 0x3, vous connaissez. On compare la valeur choisie par le random. Une fois la valeur trouvée, if 0x1 goto 0x8[Offset] vous envoie sur l'offset choisi.
Ainsi, dans ce script, j'ai 1 chace sur 4 de tomber sur "1", 1 chance sur 4 de tomber de "2", 1 chance sur 4 de tomber sur "3" et 1 chance sur 4 de tomber sur "4".
Voilà, c'est tout pour le random ! Merci encore à Sainior
On va apprendre à faire une commande de hasard, un tirage au sort en quelque sorte. Pour cela, nous allons utiliser la commande "ramdom". Voici un exemple de script qu'on peut faire :
Code: [Sélectionner]
'---------------
#org 0x6E41BC
lock
msgbox 0x86E42BC MSG_FACE '"Combien ?"
random 0x4
compare LASTRESULT 0x0
if 0x1 goto 0x8271029
compare LASTRESULT 0x1
if 0x1 goto 0x8271129
compare LASTRESULT 0x2
if 0x1 goto 0x8271229
compare LASTRESULT 0x3
if 0x1 goto 0x86E433C
release
end
'---------------
#org 0x271029
msgbox 0x82710A9 MSG_NORMAL '"1"
release
end
'---------------
#org 0x271129
msgbox 0x82711A9 MSG_NORMAL '"2"
release
end
'---------------
#org 0x271229
msgbox 0x82712A9 MSG_NORMAL '"3"
release
end
'---------------
#org 0x6E433C
msgbox 0x86E43BC MSG_NORMAL '"4"
release
end
'---------
' Strings
'---------
#org 0x6E42BC
= Combien ?
#org 0x2710A9
= 1
#org 0x2711A9
= 2
#org 0x2712A9
= 3
#org 0x6E43BC
= 4
C'est assez long, mais très très simple
Code: [Sélectionner]
random 0x4
compare LASTRESULT 0x0
if 0x1 goto 0x8271029
random 0x4 est la commande principale. random lance la commande, et 0x4 est le nombre de possibilité au tirage au sort.
compare LASTRESULT 0x0, 0x1, 0x2 et 0x3, vous connaissez. On compare la valeur choisie par le random. Une fois la valeur trouvée, if 0x1 goto 0x8[Offset] vous envoie sur l'offset choisi.
Ainsi, dans ce script, j'ai 1 chace sur 4 de tomber sur "1", 1 chance sur 4 de tomber de "2", 1 chance sur 4 de tomber sur "3" et 1 chance sur 4 de tomber sur "4".
Voilà, c'est tout pour le random ! Merci encore à Sainior
9/3/2012 - MAJ
Trainerbattle2, setflagtrainer & clearflagtrainer et goto
Spoiler
Un 4 en 1 !
Cette partie va concerner, vous l'aurez compris, les combats.
Avant les explications, voici un script, Myst a donné l'idée, ce qui m'a donné l'envie de vous apprendre ces trois commandes.
(Ici, je n'ai pas utilisé le cleartrainerflag, mais vous verrez que c'est le même fonctionnement que le settrainerflag)
Le trainerbattle2 fonction exactement comme le trainerbattle simple, à une chose prêt : un offset.
L'utilité ? Il permet de poursuivre un script en cas de victoire et non pas d'arrêter le script après le combat. Il est par exemple utilisé dans les arènes.
Voici la composition :
La commande commence comme le trainerbattle simple, par "trainerbattle". La différence vient ensuite : au lieu de mettre "0x0" (qui correspond à un trainerbattle simple), on met "0x2", qui correspond au trainerbattle2.
Viens ensuite comme avant le "0x0" obligatoire, le pointeur vers le message d'engagement du combat et le pointeur vers le message de défaite.
Enfin, vient un troisième et dernier pointeur : le pointeur vers la suite du script. Et oui, car pour poursuivre ensuite le script, on dit au script d'aller chercher la suite quelque part !
Voici où nous amène ce pointeur :
Ah, le voilà enfin le settrainerflag !
Pour simplement, on associe chaque dresseur à un flag. Ainsi, le dresseur 1 a le flag 1, le dresseur 459 a le flag 459, de même que le dresseur 6BF a le flag 6BF. Le flag d'un dresseur permet en quelque sorte de pouvoir le combattre. Quand vous combattez un dresseur et que vous le battez, le flag est supprimé, il est donc impossible de le combattre à nouveau.
settrainerflag permet donc de réactiver le flag. Ainsi, ici, le flag 2EF sera réactivé, donc le combat du dresseur se lancera de nouveau.
Vient maintenant le goto 0x8.
Cette commande est archi simple : c'est juste un pointeur.
goto indique "va à" (vive l'anglais) et 0x8[Offset] est le pointeur où le script doit aller.
Si on regarde mon script dans l'ensemble : le combat se lance. Comme c'est un trainerbattle2, on continue à l'offset suivant. Le settrainerflag permet de réactiver le flag et de recombattre le dresseur. Le goto ordonne ensuite au script de revenir à l'offset de départ. Le combat se lance alors. Puis, on revient au second offset, on réactive le flag, on revient au premier, et ainsi de suite.
Ainsi, ce script ne se termine JAMAIS ! (Sauf si vous tombez KO). Vous pourrez combattre tant que c'est possible le dresseur.
Couplé à un random (vu dans le chapitre précédent), vous pouvez alors de cette façon combattre un nombre de dresseurs défini aléatoirement et sans s'arrêter
Pour ce qui est du cleartrainerflag, il fonctionne de la même manière que le settrainerflag, mais à l'inverse : Si vous utilisez cette commande, le dresseur qui possède le numéro de ce flag ne pourra plus être combattu.
Voilà, c'était peu de nouveautés
Cette partie va concerner, vous l'aurez compris, les combats.
Avant les explications, voici un script, Myst a donné l'idée, ce qui m'a donné l'envie de vous apprendre ces trois commandes.
Code: [Sélectionner]
'---------------
#org 0x807642
trainerbattle 0x2 0x2EF 0x0 0x88076C2 0x8807742 0x8801BBD
end
'---------------
#org 0x801BBD
settrainerflag 0x2EF
goto 0x8807642
'---------
' Strings
'---------
#org 0x8076C2
= Combat ?
#org 0x807742
= Bravo !
(Ici, je n'ai pas utilisé le cleartrainerflag, mais vous verrez que c'est le même fonctionnement que le settrainerflag)
Code: [Sélectionner]
trainerbattle 0x2 0x2EF 0x0 0x88076C2 0x8807742 0x8801BBD
Le trainerbattle2 fonction exactement comme le trainerbattle simple, à une chose prêt : un offset.
L'utilité ? Il permet de poursuivre un script en cas de victoire et non pas d'arrêter le script après le combat. Il est par exemple utilisé dans les arènes.
Voici la composition :
Code: [Sélectionner]
trainerbattle 0x2 0x[Numéro du dresseur] 0x0 0x8[Message avant combat] 0x8[Message défaite] 0x8[Suite du script]
La commande commence comme le trainerbattle simple, par "trainerbattle". La différence vient ensuite : au lieu de mettre "0x0" (qui correspond à un trainerbattle simple), on met "0x2", qui correspond au trainerbattle2.
Viens ensuite comme avant le "0x0" obligatoire, le pointeur vers le message d'engagement du combat et le pointeur vers le message de défaite.
Enfin, vient un troisième et dernier pointeur : le pointeur vers la suite du script. Et oui, car pour poursuivre ensuite le script, on dit au script d'aller chercher la suite quelque part !
Voici où nous amène ce pointeur :
Code: [Sélectionner]
'---------------
#org 0x801BBD
settrainerflag 0x2EF
goto 0x8807642
Ah, le voilà enfin le settrainerflag !
Code: [Sélectionner]
settrainerflag 0x2EF
Pour simplement, on associe chaque dresseur à un flag. Ainsi, le dresseur 1 a le flag 1, le dresseur 459 a le flag 459, de même que le dresseur 6BF a le flag 6BF. Le flag d'un dresseur permet en quelque sorte de pouvoir le combattre. Quand vous combattez un dresseur et que vous le battez, le flag est supprimé, il est donc impossible de le combattre à nouveau.
settrainerflag permet donc de réactiver le flag. Ainsi, ici, le flag 2EF sera réactivé, donc le combat du dresseur se lancera de nouveau.
Code: [Sélectionner]
goto 0x8807642
Vient maintenant le goto 0x8.
Cette commande est archi simple : c'est juste un pointeur.
goto indique "va à" (vive l'anglais) et 0x8[Offset] est le pointeur où le script doit aller.
Si on regarde mon script dans l'ensemble : le combat se lance. Comme c'est un trainerbattle2, on continue à l'offset suivant. Le settrainerflag permet de réactiver le flag et de recombattre le dresseur. Le goto ordonne ensuite au script de revenir à l'offset de départ. Le combat se lance alors. Puis, on revient au second offset, on réactive le flag, on revient au premier, et ainsi de suite.
Ainsi, ce script ne se termine JAMAIS ! (Sauf si vous tombez KO). Vous pourrez combattre tant que c'est possible le dresseur.
Couplé à un random (vu dans le chapitre précédent), vous pouvez alors de cette façon combattre un nombre de dresseurs défini aléatoirement et sans s'arrêter
Pour ce qui est du cleartrainerflag, il fonctionne de la même manière que le settrainerflag, mais à l'inverse : Si vous utilisez cette commande, le dresseur qui possède le numéro de ce flag ne pourra plus être combattu.
Voilà, c'était peu de nouveautés
En cours de construction, d'autres scripts seront ajoutés d'ici peu