A la recherche des scripts perdus...

Pages: [1] 2

Flower//

  • Invité
03 août 2011, 14:35
Hello peuple des ROM-Hackers de Pokémon Trash !
Ce topic a pour but de regrouper et d'expliquer certains scripts dont on a pas forcément l'idée d'utiliser et qui pourtant pourrait bien être 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 de Sainior si vous n'avez jamais scripté: http://www.pokemontrash.com/club/rom-hacking/(tuto)(gba)-apprendre-a-scripter/





LE BRAILLE


Spoiler
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 souvenez?


Bien, voici le code:

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


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




Bien, 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".



Concernant le contenu de la fonction "braille",
'---------
' Braille
'---------


on a, bien sûr, l'offset pointé,
#org 0x[offset2]

puis le contenu.
#braille [**********]

A la place du "[**********]" vous pouvez saisir votre texte braille. C'est tout? Bah oui! Il suffit juste d'écrire en majuscule. Et CE QUE VOUS VOULEZ !!!



Voilà un exemple de braille simple:

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


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



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 à 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 casses-tête et autre énigmes. Voilà un script qui 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.\nL'examiner de plus près?

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

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

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


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


Ce script est tiré de l'énigme du trou percé. Il 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?

Je viens de vous prouver que ce genre de script, utilisé intelligemment, n'est pas aussi inutile finalement.



Voilà, j'en ai fini avec le braille! Ouf! Naturellement s'il y a quelque chose à rectifier dîtes le moi tout de suite je suis là pour ça. Et si vous avez une quelconque idée par rapport à un autre script que vous voudriez que j'analyse, il n'y a pas de soucis!
Et on copie pas hein, gaffe au plagieurs. Made in Flower! Demandez moi et il n'y aura pas de problèmes.








LE MOVE CAMERA


Spoiler
Bien, maintenant 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 foi, ça 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 !\nLà 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? Ca pourrait servir!
Voili voilou j'en ai fini avec le MOVE_CAMERA, j'espère que ça sera utile. N'hésitez pas à me pointer du doigt les éventuelles erreurs que j'aurais laissé derrière moi. Et don't copy! Made in Flower !!!







ALIEN INVASION


Spoiler
Bonjour tout le monde! Aujourd'hui je vais vous apprendre un script que vous ne connaissez pas, c'est impossible, puisqu'il n'a jamais été utilisé dans un jeu Pokémon. Alors que fait-il dans un jeu Pokémon? Et bien j'en sais rien. On ne peu pas tout expliquer.

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

D'accord, ok, mais il sert à quoi ce spécial? Vous n'en trouverez surement pas l'utilité mais vu que j'aime les scripts inutilisés je vous en fait cadeau tout de même. Ce script fait apparaître (tenez vous bien) un message très bizarre suivi d'un son d'extraterrestre! Je ne vous fais pas une 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 vus verrez, ça marche. Mais alors où est l'utilité de ce code? Et bien 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..."
Pas mal pour votre jeu, n'est-ce pas? Bon allez, je vous laisse, à bientôt pour un nouveau script stupide auquel on ne pense jamais!






DISTRIBUTEUR



Spoiler
Bonjour, aujourd'hui je vais vous apprendre à faire un distributeur de boissons. Et je vous le dit, c'est bien plus compliqué que ce que vous croyez.

C'est un script de 115 lignes !  Heureusement je suis là pour vous passer ce script.

Une version simplifiée par Bupo est disponible un peu plus bas.



'---------------
#org 0x16C05C
lockall
preparemsg 0x8195554 '"Un distributeur!\nQue 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!\nQue choisir?"
waitmsg
goto 0x816C06D


'---------
' Strings
'---------
#org 0x195554
= Un distributeur!\nQue 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. :)

Allez, c'est fini pour cette fois !




Voici le même en dynamic par Bupo.
#dynamic 0x[offset]

#org @main
lockall
preparemsg @whatchoice '"Un distributeur!\nQue choisir?"
waitmsg
showmoney 0x0 0x0 0x0
goto @select

#org @select
multichoice 0xC 0x0 0x1A 0x0
copyvar 0x4001 LASTRESULT
copyvar 0x8000 0x4001
compare 0x8000 0x0
if 0x1 goto @choice1
compare 0x8000 0x1
if 0x1 goto @choice2
compare 0x8000 0x2
if 0x1 goto @choice3
msgbox @nothanks MSG_KEEPOPEN '"Pas soif!"
goto @exit

#org @choice1
setvar 0x4000 0x1A
checkmoney 0xC8 0x0
goto @suit

#org @choice2
setvar 0x4000 0x1B
checkmoney 0x12C 0x0
goto @suit

#org @choice3
setvar 0x4000 0x1C
checkmoney 0x15E 0x0
goto @suit

#org @exit
hidemoney 0x0 0x0
releaseall
end

#org @suit
compare LASTRESULT 0x0
if 0x1 goto @pointer1
checkitemroom 0x4000 0x1
compare LASTRESULT 0x0
if 0x1 goto @pointer2
compare 0x4001 0x0
if 0x1 call @pointer3
compare 0x4001 0x1
if 0x1 call @pointer4
compare 0x4001 0x2
if 0x1 call @pointer5
updatemoney 0x0 0x0 0x0
bufferitem 0x0 0x4000
sound 0x63
msgbox @obtain MSG_KEEPOPEN '"Et hop! [buffer1]!"
additem 0x4000 0x1
goto @reset

#org @pointer1
msgbox @nomoney MSG_KEEPOPEN '"Oups! Pas assez d'argent!"
goto 0x816C175

#org @pointer2
msgbox @fullbag MSG_KEEPOPEN '"L'inventaire est plein!"
goto @exit

#org @pointer3
paymoney 0xC8 0x0
return

#org @pointer4
paymoney 0x12C 0x0
return

#org @pointer5
paymoney 0x15E 0x0
return

#org @reset
preparemsg @whatchoice '"Un distributeur!\nQue choisir?"
waitmsg
goto @select

#org @whatchoice
= Un distributeur!\nQue choisir?

#org @nothanks
= Pas soif!

#org @obtainitem
= Et hop! [buffer1]!

#org @nomoney
= Oups! Pas assez d'argent!

#org @fullbag
= Le SAC est plein !







ECHANGE


Spoiler

Coucou tout le monde, je vais vous offrir aujourd'hui le script de l'échange, il est plutôt long et compliqué, je vous l'expliquerais un jour où j'aurais du temps, voici le script original.

ATTENTION: ce script n'est pas vierge, il contient l'échange de M.MIME contre un ABRA de votre part.


'---------------
#org 0x16F62A
lock
faceplayer
setvar 0x8008 0x0
call 0x81A76D6
checkflag 0x248
if 0x1 goto 0x816F69C
msgbox 0x81A446A MSG_YESNO '"Je cherche un [buffer1].\pTu veux ..."
compare LASTRESULT 0x0
if 0x1 goto 0x816F684
call 0x81A76E6
compare 0x8004 0x6
if 0x4 goto 0x816F684
call 0x81A76F2
comparevars LASTRESULT 0x8009
if 0x5 goto 0x816F68E
call 0x81A7702
msgbox 0x81A44C2 MSG_KEEPOPEN '"Merciiii!"
setflag 0x248
release
end

'---------------
#org 0x1A76D6
copyvar 0x8004 0x8008
special2 LASTRESULT 0xFC
copyvar 0x8009 LASTRESULT
return

'---------------
#org 0x16F69C
msgbox 0x81A44CC MSG_KEEPOPEN '"Il est cool mon [buffer2], hein?"
release
end

'---------------
#org 0x16F684
msgbox 0x81A449D MSG_KEEPOPEN '"Bon[.]\nTant pis[.]"
release
end

'---------------
#org 0x1A76E6
special 0x9F
waitstate
lock
faceplayer
copyvar 0x800A 0x8004
return

'---------------
#org 0x1A76F2
copyvar 0x8005 0x800A
special2 LASTRESULT 0xFF
copyvar 0x800B LASTRESULT
return

'---------------
#org 0x16F68E
bufferpokemon 0x0 0x8009
msgbox 0x81A44AC MSG_KEEPOPEN '"Mais c'est pas un [buffer1]!"
release
end

'---------------
#org 0x1A7702
copyvar 0x8004 0x8008
copyvar 0x8005 0x800A
special 0xFD
special 0xFE
waitstate
lock
faceplayer
return


'---------
' Strings
'---------
#org 0x1A446A
= Je cherche un [buffer1].\pTu veux l'échanger\ncontre un [buffer2]?

#org 0x1A44C2
= Merciiii!

#org 0x1A44CC
= Il est cool mon [buffer2], hein?

#org 0x1A449D
= Bon[.]\nTant pis[.]

#org 0x1A44AC
= Mais c'est pas un [buffer1]!


Allez, je vous fait ça pensant les vacances hein. ;)






Bon ben c'est fini, si vous avez des idées pour d'autres scripts n'ayant pas été cités et expliqués sur le forum, faîtes m'en part je les analyserais à coeur joie.
Sur ce, passez une bonne journée !

« Modifié: 18 octobre 2011, 18:59 par Flow' »

Bupo

  • Membre
  • 467 posts
03 août 2011, 15:34
O_O Des fonctions cachées, je m'en rapelle plus.

Layton'

  • Membre
  • 1349 posts
03 août 2011, 19:34
C'est quoi l'énigme du trou percé  ???

The New Azerty

  • Membre
  • 2597 posts

pokemonbonjour

  • Membre
  • 719 posts
03 août 2011, 21:18
good :)
le braille est aussi dans emeraude :)
« Modifié: 03 août 2011, 21:19 par pokemonbonjour »

back-track

  • Membre
  • 83 posts

Layton'

  • Membre
  • 1349 posts
03 août 2011, 21:40
C'est quoi l'énigme du trou percé  ???

yago58

  • Invité
03 août 2011, 21:47
C'est pour les échanges avec rubis, saphir, émeraude.

Flower//

  • Invité
04 août 2011, 17:14
C'est quoi l'énigme du trou percé  ???
C'est sur une des îles après la ligue. C'est à la fin de cette exploration que le héros retrouve l'un des deux objets permettant la connexion à émeraude/saphir/rubis.

Flower//

  • Invité
07 août 2011, 17:49
Est-ce que quelqu'un peut ajouter le lien dans la bibliothèque svp.

yago58

  • Invité
07 août 2011, 17:55
Demandes à downhill.

Si il pouvais ajouter le mien de tuto.
« Modifié: 07 août 2011, 17:56 par yago »

Flower//

  • Invité
07 août 2011, 18:13
C'est bon j'ai demandé, pour le tient aussi.

Bupo

  • Membre
  • 467 posts
07 août 2011, 18:15
Dis moi, où t'as trouvé tout ca ?

yago58

  • Invité
07 août 2011, 18:17
C'est bon j'ai demandé, pour le tient aussi.

Merci, au moins ça ne traineras pas dans la section.

Flower//

  • Invité
07 août 2011, 18:18
Dis moi, où t'as trouvé tout ca ?
Sur Rouge Feu et Emeraude.

C'est bon j'ai demandé, pour le tient aussi.

Merci, au moins ça ne traineras pas dans la section.

Quoi de pire qu'un bon tuto non répertorié!  :fail:

yago58

  • Invité
07 août 2011, 18:20
Je suis quasiment sur que d'autres tutos en lien avec le rom hacking doivent trainer dans les autres sections du forum  :cheval

Downhill

  • Membre
  • 7236 posts
07 août 2011, 20:00
Voilà j'ai mis à jour la bibliothèque de liens avec ce que Flow' m'a demandé de rajouter  :)
S'il traîne encore des tutos qui n'y sont pas Yago, envoie-moi un MP avec ce qu'il faut add et je te le ferai  ;)

yago58

  • Invité

Flower//

  • Invité
11 août 2011, 12:57
New, j'ai ajouté un nouveau petit script. C'est la surprise du jour, il n'est pas bien compliqué, amusez-vous bien!

Bupo

  • Membre
  • 467 posts
11 août 2011, 14:53
le nom  :o
Mais connu, pourquoi nintendo ont fait ça ???
« Modifié: 11 août 2011, 14:55 par Bupo »

Flower//

  • Invité
11 août 2011, 14:59
Aucune idée.

Layton'

  • Membre
  • 1349 posts
11 août 2011, 15:18
Cool, comment tu la trouver ?

Bupo

  • Membre
  • 467 posts
11 août 2011, 15:49
Dans la liste des spécials (Il fait peur l'extraterrestre ?)

Mourad1081

  • Membre
  • 205 posts
11 août 2011, 16:01
Ce script n'apparait pas au moment où il y a deoxys ? (quand on le capture NORMALEMENT c'est-à-)dire, 4 étoiles dans la carte de dresseur et etc)

Flower//

  • Invité
04 septembre 2011, 14:46
Ajout, petit up.

The New Azerty

  • Membre
  • 2597 posts

Bupo

  • Membre
  • 467 posts
04 septembre 2011, 16:03
Putain, vu le nombre d'offset, je vais convertir en dynamic.

Flower//

  • Invité
04 septembre 2011, 16:08
Sûr. Sacré script quand même.

Bupo

  • Membre
  • 467 posts
04 septembre 2011, 16:34
Code: (CORRIGE A 17:47, LE CODE EST VRAIMENT VALIDE COMME LE POST SUIVANT) [Sélectionner]
#dynamic 0x[offset]

#org @main
lockall
preparemsg @whatchoice '"Un distributeur!\nQue choisir?"
waitmsg
showmoney 0x0 0x0 0x0
goto @suit

#org @select
multichoice 0xC 0x0 0x1A 0x0
copyvar 0x4001 LASTRESULT
copyvar 0x8000 0x4001
compare 0x8000 0x0
if 0x1 goto @choice1
compare 0x8000 0x1
if 0x1 goto @choice2
compare 0x8000 0x2
if 0x1 goto @choice3
msgbox @nothanks MSG_KEEPOPEN '"Pas soif!"
goto @exit

#org @choice1
setvar 0x4000 0x1A
checkmoney 0xC8 0x0
goto @suit

#org @choice2
setvar 0x4000 0x1B
checkmoney 0x12C 0x0
goto @suit

#org @choice3
setvar 0x4000 0x1C
checkmoney 0x15E 0x0
goto @suit

#org @exit
hidemoney 0x0 0x0
releaseall
end

#org @suit
compare LASTRESULT 0x0
if 0x1 goto @pointer1
checkitemroom 0x4000 0x1
compare LASTRESULT 0x0
if 0x1 goto @pointer2
compare 0x4001 0x0
if 0x1 call @pointer3
compare 0x4001 0x1
if 0x1 call @pointer4
compare 0x4001 0x2
if 0x1 call @pointer5
updatemoney 0x0 0x0 0x0
bufferitem 0x0 0x4000
sound 0x63
msgbox @obtain MSG_KEEPOPEN '"Et hop! [buffer1]!"
additem 0x4000 0x1
goto @reset

#org @pointer1
msgbox @nomoney MSG_KEEPOPEN '"Oups! Pas assez d'argent!"
goto 0x816C175

#org @pointer2
msgbox @fullbag MSG_KEEPOPEN '"L'inventaire est plein!"
goto @exit

#org @pointer3
paymoney 0xC8 0x0
return

#org @pointer4
paymoney 0x12C 0x0
return

#org @pointer5
paymoney 0x15E 0x0
return

#org @reset
preparemsg @whatchoice '"Un distributeur!\nQue choisir?"
waitmsg
goto @select

#org @whatchoice
= Un distributeur!\nQue choisir?

#org @nothanks
= Pas soif!

#org @obtainitem
= Et hop! [buffer1]!

#org @nomoney
= Oups! Pas assez d'argent!

#org @fullbag
= Le SAC est plein !

Voila le travail ;) [NON TESTE, MAIS Y'A PAS RAISON(sauf offset orphelins)]
« Modifié: 04 septembre 2011, 17:47 par Bupo »

Flower//

  • Invité
04 septembre 2011, 16:35
Good, j'ajoute.

Pages: [1] 2    En haut ↑