Vos premiers pas en Script NDS !

Pages: [1]

Mickey`

  • Membre
  • 2746 posts
17 mars 2012, 13:50
Faire des centaines et des centaines de lignes de script GBA c'est cool... Mais qui vous a dit qu'on devait se limiter au GBA ? Editer et créer des scripts NDS est aussi possible.

Il y a encore une ou deux heures, je n'en savais pas plus que vous.
Mais après avoir étudié la chose, fais quelques tests, j'ai vite trouvé comment ça fonctionnait, et faut pas mentir : c'est pas difficile !

Ce tuto est de moi à 100%, je vous demande donc de ne rien copier sans mon autorisation, merci.



Bien, commençons. Votre outil sera, bien entendu, PPRE.
Bien sûr, il vous faudra aussi une ROM. Je vais personnellement travailler sur Diamant FR.



Préparation de la ROM avec PPRE

Vous avez téléchargé PPRE ? Vous êtes en possesion de votre ROM ? On peut y aller !

Allez dans le dossier où vous avez extrait et où se trouve PPRE.
Dans ce dossier, collez votre ROM. Donnez-lui un nom simple, sans espace ou caractère spécial vous comprendrez ensuite pourquoi. (J'appelle ma ROM "diamant.nds")

Maintenant, ouvrez PPRE. Dans la case en face de "ROM Name :" entrez le nom de votre ROM (d'où l'utilité de choisir un nom simple !). N'oubliez pas le .nds. Enfin, cliquez sur "Set ROM" (Attendez que l'invite de commande se ferme).

Spoiler



Découverte du monde PPRE

Maintenant, cliquez sur "Maps". En haut à gauche, vous pouvez sélectionner la map sur laquelle vous allez travailler. Pour le tuto je travaille sur Bonaugure, c'est la map 411.
Fouillez un peu, vous allez découvrir ce que l'on peut faire avec PPRE. Vous pouvez par exemple changer/ajouter des Pokémon sauvages.
Mais nous, ce qui va nous intéresser, ce sont les onglets "Script", "Text", et "Events" ;)



Insertion d'un nouveau personnage

On va commencer par l'onglet "Events" !

Lorsque vous cliquez sur l'onglet Events, 4 sous-onglets apparaissent. Celui qui nous intéresse est "overworlds".

Overworld ? Overworld ? J'ai bien entendu ?
Mais oui mais oui, je vous ai dit que c'était simple... enfin simple si on connait un peu le script GBA, car c'est plus ou moins la même chose, mais les commandes sont simplifiées !
Je m'éloigne un peu du sujet là, mais vous vous apercevez déjà qu'il y a des ressemblances.

Bref, quand vous cliquez sur l'onglet "Overworlds", des sous-onglets apparaissent encore ! (les derniers, ouf).
Ces sous-onglets portent le nom "pg_x", où x varie selon la map et le nombres d'OW (de personnages). Moi, il va de "pg_0" à "pg_7".

Dans l'onglet Overworlds, vous avez une petite case en haut à gauche, il correspond au nombre d'OW présents sur la map. (de 0 à 7 = 8 OW au total sur la map). Changez ce nombre en y ajoutant 1, je vais donc rentrer 9.

Un nouveau sous-onglet est apparu : pg_8 ! Il correspond à votre nouvel OW. "8", c'est son numéro. Retenez-le, c'est comme dans le script GBA : on s'en servira dans les scripts.

Entrez les données que vous souhaitez, allez-y petit à petit.

Spoiler

Cliquez enfin sur "Save Changes".



Insertion d'un script pour l'OW créé

Maintenant que vous avez créé votre personnage, allez dans l'onglet Scripts.
Puis dans les sous onglets, allez dans script. Vous voyez ici apparaître tous les scripts de la map (j'en ai 9 personnellement). Comme les OW, ils ont chacun un nom : "scr_x"
Cliquez sur "Add Script" ~~> Cela va créer un script supplémentaire.
J'ai donc mon script "scr_10".

Spoiler

Bien, alors on va attaquer notre premier script !
La grande case, c'est là où on écrit notre script.

Quelques petits trucs à savoir :
_Si une commande n'est pas reconnue (comme si XSE nous indiquait une erreur pour un script GBA), la ligne sera supprimée.
_Chaque commande commence par une majuscule (si vous ne mettez pas la majuscule, la commande est dite "erronée", ce qui amène donc au point précédent)
_Lock/Release ne sont pas reconnues, il faut utiliser Lockall/Releaseall
_Comme dans les scripts GBA, tous les scripts NDS doivent se terminer par "End"

Voici le script que je vous propose de créer :

Lockall
Message 15
Releaseall
End

En code GBA static, ça donnerait ça :

lock
msgbox 0x8[Offset] MSG_NORMAL
release
end

Vous voyez donc que c'est exactement la même chose !
Seule une différence : la fonction du message.

Elle est pourtant bien plus simple :

Message 15
Avant, il fallait un msgbox avec un offset pour stocker le texte et donner un type de message... Ici, du français : Seulement "Message" suivi de "15" : 15, ici, correspond au numéro du texte qui apparaît dans la boîte de dialogue.

Comment voir ce texte ? C'est simple.



Insertion d'un message pour un script

Cliquez maintenant sur l'onglet Text.
Vous voyez une série de ligne apparaître, avec de vraies phrases : ce sont en fait les mots qui s'affiche dans le jeu.
Chaque message est entouré par des guillemets ' " '.
Avant chaque message, il y a "text_x" : x correspond au numéro du message.

Je vais donc aller à la fin de cette liste, et rentrer cette ligne :

text_15="Salut !"
Spoiler

Bien, maintenant que le script est créé, et que le message aussi, retournez dans l'onglets "Events", dans "Overwolrds", puis cliquez sur votre OW (pg_8 pour moi).
Dans la case en face de "script", entrez le numéro du script : 10 pour moi (scr_10)


Cliquez sur "Save Changes". Fermez cette fenêtre.

Dans la case en face de "New ROM Name :", entrez le nom de votre jeu modifié, "diamant2.nds" pour moi. Puis cliquez sur "Write ROM".

Ouvrez maintenant votre ROM avec votre Emulateur, allez parler à votre OW créé, et...

Spoiler

Notre bon vieux personnage nous dit "Salut !" :ah:

Mais il y a quelques problèmes :
_Le personnage ne nous regarde pas
_Le message se répète encore et encore
_Le message reste ouvert, un peu comme un MSG_KEEPOPEN sur GBA ^^

On va remédier à tout ça !



Parce qu'un message est quand même plus compliqué

Certes, la commande était très simple, seulement il ne suffit pas que de ça pour obtenir le résultat désiré.

On va éditer notre script. Je ne ré-explique pas tout, allez dans votre script (scr_10 pour moi)

Comme dans les scripts GBA, la commande qui permet au personnage de se tourner vers le joueur est faceplayer ! On l'insère donc, sans oublier la majuscule.

Faceplayer
Maintenant, on va faire en sorte que le message n'apparaisse qu'une fois, et disparaisse lorsque qu'on appuie sur A ou B.

Vous vous souvenez de la commande closeonkeypress pour les scripts GBA ? Beh là, c'est quasiment la même chose, sauf qu'on précise que c'est un message. J'insère donc cette commande :

CloseMsgOnKeyPress
Seulement, si on laisse comme ça, le message va se fermer automatiquement, tout seul, dès que tous les caractères sont apparus.

Fonctionnant de la même façon par exemple qu'un "waitfanfare", le "Waitbutton" fait que le script attend que le joueur appuie sur un bouton avant de continuer le script.
Donc, je place cette commande avant le CloseMsgOnKeyPress.

Waitbutton
Comme ça, quand le message sera apparu, le script attendra que le joueur appuie sur A ou B, puis fermera la boîte de dialogue.

Spoiler

Pareil, cliquez sur "Save Changes", fermez, puis "Write ROM".

Résultat InGame :

Spoiler

Et la boîte de dialogue se ferme bien quand on appuie sur un bouton.



L'applymovement

Bien, maintenant qu'on sait faire le script d'un message simple, on va faire quelque chose de nouveau : un applymovement ! Il fonctionne de la même manière que dans un script GBA. Pour ceux qui ne se souviennent plus, il s'agit en fait de la commande qui permet de faire faire des mouvements à un personnage sur la map.

Dans un script GBA, il se présentait comme ça :

applymovement 0x[Personnage] 0x8[Offset]
waitmovement 0x0

'---------
'Movements
'---------
#org 0x[Offset]
#raw 0x
#raw 0x
#raw 0xFE

Souvenez-vous, "applymovement" déclenche le mouvement, et va le chercher à un autre endroit : [Offset].

Ici, c'est le même principe, sauf que nous n'allons pas inclure les mouvements dans le script, mais dans la partie des mouvements, de la même façon que nous avions inclus notre message dans la partie des mouvements.

Bref, avant d'insérer les mouvements de l'applymovement, on va insérer cette commande dans le script.
Retournez dans votre script et entrez cette commande :

Applymovement X mov_Y
Waitmovement

Maintenant, à côté de l'onglet "Scripts" où vous avez inséré cette commande, allez dans l'onglet "Movements", puis cliquez sur "Add Movement" : vous avez créer un nouveau sous-onglet, allez dessus : c'est ici que vous allez stocker les mouvements. (Mes mouvements allaient jusqu'à mov_31 pour moi, donc celui que j'ai créé s'appelle mov_32).

Dedans, vous allez écrire vos mouvements. Sauf que ce ne sont pas des chiffres et des lettres en hexadécimal que nous allons écrire, ce sont de "vrais" mots.

Pour dire "Fais un pas vers le haut normalement" : WalkUpNormal 1
Pour dire "Cours de trois pas vers la gauche" : MoveLeftFast 3

Vous voyez, ça suit la logique. On indique le nombre de pas à faire grâce au nombre derrière.

Je vais donc personnellement insérer ces mouvements :

WalkUpNormal 1
WalkDownFast 2
WalkUpNormal 1

Maintenant, revenez dans votre script. À l'endroit où vous aviez écrit la commande "Movement X mov_Y", remplacez :
_X par le numéro de votre personnage sur la map (moi, ici, 8)
_Y par le numéro des mouvements (moi, ici, 32)

Note, Waitmovement fonctionne exactement comment dans les scripts GBA, il est indispendable pour éviter les bugs (pour que le script attende que les mouvements soient finis avant de s'exécuter). Il ne faut pas de paramètre derrière.

Spoiler

Cliquez sur "Save Changes", puis fermez et cliquez sur "Write ROM".

Spoiler



C'est tout pour le moment, mais je pense qu'une suite arrivera bientôt.

Désolé si j'ai mal expliqué, j'ai essayé de détailler le plus possible. Bon scripting ! ;)

yago58

  • Invité
17 mars 2012, 14:31
Youpiiiiiiiiii

Thank vieux, t'as essayé avec soulsilver et heartgold ?

Je met ça dans la bibliothèque.

Sainior

  • Membre
  • 6362 posts
17 mars 2012, 14:34
wtffff, j'étais pas au courant que le développement des logiciels pour NDS avait tant avancé, faudrait que je me remette à jour

Mickey`

  • Membre
  • 2746 posts
17 mars 2012, 15:09
J'ai pas encore essayé, je te dirai ça bientôt ;)

The New Azerty

  • Membre
  • 2597 posts

Weby

  • Membre
  • 56564 posts
17 mars 2012, 16:04
Inutile de scripter tant qu'on n'a pas de map editor.



Mais je surkifferai de me faire une partie de diamant/perle/platine sans AUCUN pokémon 4g :')
« Modifié: 17 mars 2012, 16:07 par Yago »

Mickey`

  • Membre
  • 2746 posts
17 mars 2012, 16:46
J'vois pas en quoi il est inutile de scripter si on a pas d'éditeur de maps.

yago58

  • Invité
17 mars 2012, 16:49
Tu penses ajouter quoi dans le tuto ?

Mickey`

  • Membre
  • 2746 posts
17 mars 2012, 16:53
Je vais étudier les Fonctions (si j'arrive à comprendre, m'enfin je pense que c'est pas compliqué), puis au fur et à mesure je rajouterai des commandes "classiques" comme dans mon tuto de script GBA.

Flower//

  • Invité
18 mars 2012, 15:04
C'est vachement plus complexe que ce que j'imaginais !


Inutile de scripter tant qu'on n'a pas de map editor.

Bientôt mec.

Pages: [1]    En haut ↑