FORUM : http://pokemonscriptproject.xooit.fr/ --- Visitez-le pour les nouvelles mises à jour, correctifs, ou pour avoir une aide (Inscription non obligatoire pour les rapports de bugs).
TELECHARGEMENT : Lien
(27mo)
(Je garde trace du nombre de téléchargement par une passerelle,
donc utilisez ce lien si vous voulez pointer vers le fichier)
CORRECTIFS : (La version téléchargeable est toujours à
jour)
Plus de détails sur cette
page. Les correctifs devraient être installés dans l'ordre
chronologique.
Correctif 1 et 2 (11/09/08)
ATTENTION : Il s'agit avant toute chose d'une version beta-test publique, donc incomplète et sujette à des bugs. Certaines choses restent encore à faire, mais cette version constitue une base de travail sur lequel il est possible de commencer un projet. De même, les scripts sont commentés, mais insuffisamment. Par la suite, les mises à jours consisteront simplement à écraser les scripts, éventuellement la base de données.
- 02/11/08
Correction d'un petit défaut sur l'évènement de combat
contre un Dresseur qui nous interpelle.
- 11/09/08
Ajout de 2 fonctions :
- Carte Dresseur --- Par Louro
- MAPINTRO : faire une introduction sur une map
- 08/09/08
Mise à jour du manuel pour les nouvelles fonctions de la version 0.7.
- Nouveaux paramètres dans Config Panel
- Script d'échange version PSP
- Messages de localisation
- Carte du monde et Appeler la Carte du monde
- Désactiver le MAPLINK temporairement
- Pension : Evenement, Script (Daycare)
- Ajouter un oeuf à l'équipe
- Sauvegarde liée, sauvegarde forcée
- Sauvegarde de secours et rapport de bug
- Changer l'apparence du héros au combat
- Possibilité de régler de nouveaux paramètres
pour un Pokémon de Dresseur
- Créer un nouveau type
- Distinction Physique Spéciale des attaques (type Diamant/Perle)
- Réglage du Pokédex régional
- Ajouter un Pokémon avec des paramètres personnalisés
- 24/08/08
Lifting du manuel, et mise à jour de certaines fonctions qui seront présentes
à la prochaine mise à jour (notamment Carte du monde)
- 20/01/08
Détails ajoutés dans la création de Balls, pour spécifier
le taux de capture échéant (Créer une nouvelle
Ball)
- 19/01/08
Ajout de la description de draw_choice (Conditions et Commandes
de choix)
Ajout de la méthode de jonction des maps dans la rubrique Mapping (Mapping
: Jonction de maps)
- 15/01/08
Description d'un nouveau type de ball, basé sur la capture par ID (Créer
une nouvelle Ball)
- 10/01/08 :
Descriptif de sauv_retour (Mapping : Centre Pokémon, défaite
au combat et point de retour)
Descriptif de ajouter_stocker_pokemon et stocker_pokemon (Ajouter
un Pokémon à son équipe ou au PC de stockage)
Descriptif du code évolution "place" (Créer
un nouveau Pokémon)
Ajout de la commande \N[x] dans le nom d'un dresseur (Création
et combat contre un Dresseur adverse)
Correction de plusieurs erreures de syntaxe non conforme aux vrais fichiers
dans la création d'objets (CT/CS/Pierres).
Installation
Avant de commencer
Installation
Compatibilité VistaRessources
Informations sur les ressources
Information sur les fichiers extérieurs à modifier
Information sur les scripts de PSPMaking général
Démarrer un nouveau projet
Information sur les variables
Information sur les interrupteurs
Information sur le panneau de configuration (Script Config_Panel)
Mapping : Tag Terrain et terrains aquatiques
Mapping : Zones, messages de localisation
Mapping : Carte du monde
Mapping : Centre Pokémon, défaite au combat et point de retour
Mapping : Jonction de map
Système : Echanger des Pokémons
Système : Mode de sauvegarde
Système : En cas de bug
Système : Menu de Debug
Système : Compiler son projetEvènements : Commandes d'évènements
Conditions et Commandes de choix
Gestion des Variables
Démarrer un combat de Dresseur ( Démarrer un combat )
Entrer le nom du héros
Modifier les PV
Modifier le statut
Soigner complètement
Ajouter/Retirer points d'expérience
Modifier le niveau
Ajouter/Retirer une compétence
Modifier le surnom d'un Pokémon ( Modifier le nom d'un héros )
(Sauvage) Ecart de niveau ( Modifier les PV d'un monstre )
(Sauvage/Dresseur) Niveau ( Modifier les PM d'un monstre )
Changer la musique des combatsGestion d'équipe
Activer le Pokédex
Ouvrir le PC de stockage
Renommer le héros
Ajouter/Retirer de l'argent
Ajouter/Retirer un objet
Ouvrir un magasin
Appeler la carte du monde
Appeler un évènement de type Pension
Appeler la Carte Dresseur
Soigner (Evènement du type Centre Pokémon)
Script : Sélection d'un Pokémon dans l'équipe
Script : Sélection d'un Pokémon dans votre équipe par le joueur
Script : Pension (Daycare)Gestion de Pokémon
Ajouter un Pokémon à son équipe ou au PC de stockage
Retirer un Pokémon de son équipe
Enseigner une capacité à un Pokémon
Renommer un Pokémon
Ajouter un oeuf à l'équipe
Script : Traitement du Pokémon
Script : Traitement des capacités / attaquesEvènements : Combats et Interaction
Créer un évènement en commun pour une Attaque ou un objet
Créer un objet destructible comme un buisson ou un rocher
Créer un objet poussable
Configurer les rencontres aléatoires
Démarrer un combat contre un Pokémon sauvage déterminé
Démarrer un combat contre un Pokémon avec conservation de paramètres (Légendaire)
Créer un évènement de combat
Création et combat contre un Dresseur adverseBase de données : Customisation
Créer un nouveau Pokémon
Ajouter un Pokémon dans le Pokédex
Créer une nouvelle attaque
Créer un objet
Créer une nouvelle Pierre
Créer une nouvelle CT
Créer une nouvelle CS
Créer une nouvelle Ball
Créer une animation de combat
Créer un nouveau type
Termes utilisés
Table des types
Pokemon Script Project (PSP par la suite) est un Starter Kit
pour des jeux du type Pokémon sous le logiciel RPG MAKER XP,
ayant pour objectif de proposer aux makers amateurs les outils nécessaires
et préprogrammés pour la création d'un jeu Pokémon-like,
à savoir:
- Gestion de Pokémon: évolution et capture
- Gestion d'équipe
- Gestion de stockage
- Gestion de sac
- Système de combat
- Objets spéciaux: Boost, Pierres, CT/CS, etc...
- Dresseurs adverses
- Pokédex
- Database préprogrammée des 386 premiers Pokémons (ou
493 en version incomplète)
- Mécanismes généraux du jeu
Et ceci en essayant de rester le plus fidèle possible au vrai jeu. Le
modèle de base et l'interface utilisée sont ceux de Pokémon
Rouge-Feu Vert-Feuille.
PSP est bien évidemment orienté script, mais fait tout de même un grand usage des commandes d'évènements ainsi que de la base de donnée par défaut de RMXP qui est indispensable pour modifier les données du jeu. La connaissance du Ruby n'est pas obligatoire pour profiter de PSP (il suffit de savoir utiliser la commande "Insérer un script" la plupart du temps). Mais elle est grandement conseillée, car les possibilités de customisation ainsi que la compréhension du mécanisme du Kit en dépendent.
Il est possible au maker qui ne sait pas scripter, si il suit le manuel, de:
- Créer un nouveau Pokémon (nom, apparence, statistiques et
évolution)
- Créer une nouvelle attaque (très basique ou basée sur
une attaque existante)
- Créer des objets basiques
- Créer de nouveaux types
Ce sont des exemples de base, nécessaire à la création
d'un jeu Pokémon.
La connaissance du Ruby est évidemment un atout supplémentaire non négligeable. Vous pourrez donc faire des choses bien utiles si vous savez au moins comment manipuler des objets... Mais vous pourrez créer des choses un peu plus élaborées: Evolutions spéciales, attaques complexes, etc... Cependant, customiser son jeu et les scripts demandera beaucoup de temps et d'étude, afin de vous imprégner du mécanisme des scripts et de Pokémon. Je pense avoir scripté de manière relativement simple, donc la compréhension de la syntaxe ne posera pas de problème. La difficulté reposera sur la compréhension des algorithmes utilisés et l'organisation des scripts.
Quoiqu'il en soit, PSP devrait vous permettre de réaliser un jeu du type Pokémon de manière la plus aisée possible, je l'espère.
- Veuillez lire le manuel avant de poser des questions! Toutes les manipulations à faire y sont explicitement expliquées et détaillées.
- Pour un meilleur confort d'utilisation, vous devriez utiliser l'exécutable
PSP_mod.exe qui est une version de RMXP (la version française
traduite de Bodom Child et Rabbi) modifiée : Certains champs
ont été renommés ou supprimés pour faciliter l'édition
de la base de données. Et étant donné l'usage important
de la commande Insérer un script, la fenêtre a été
agrandie pour accueillir plus de contenu.
Les captures d'écran que j'ai pris sur cette page proviennent de cet
exécutable. Les champs modifiés sont toujours à la même
place dans les menus, donc si vous utilisez quand même l'exécutable
par défaut, vous devez être capable d'identifier quels champs il
faut modifier rien que par leur position.
- Le manuel n'est pas un guide pour apprendre à scripter. Les rubriques qui nécessitent un peu de connaissance en Ruby sont indiquées par une entête Script. Donc si vous ne comprenez pas comment ça marche, apprenez d'abord un minimum le Ruby.
- PSP est FORTEMENT INCOMPATIBLE avec les scripts que vous trouverez sur le net. Ne me demandez pas d'adapter tel script trouvé sur le net pour PSP.
- Le présent manuel n'est pas encore à l'usage des scripteurs. Je n'ai pas encore décrit en détail les classes utilisées, donc l'information pour utiliser le Kit à fond est encore "pauvre", bien que suffisante.
Pokemon Script Project nécessite RPG Maker XP installé sur votre ordinateur, ainsi que le RGSS (pack de ressources de RPG Maker XP). Si vous n'avez pas RPG Maker XP sur votre ordinateur, je vous invite à faire une recherche Google et de chercher vous même comment installer RPG Maker XP et RGSS.
Je vous conseille vivement de découvrir RMXP par vous même avant de débuter sur Pokemon Script Project. Ce manuel suppose que vous avez déjà une bonne connaissance de base de RMXP (la maitrise des Variables, des Interrupteurs et des Fonctions conditionnelles ainsi que la bonne maitrise de la majorité des évènements est OBLIGATOIRE).
Téléchargez PSP ici, et executez le programme. Vous serez invité à extraire les données dans un dossier de votre choix (de préférence, mettez le dans le dossier Projet de RPG Maker XP). Un dossier appelé PokemonS sera créé. Il s'agit du dossier d'un projet RMXP qui peut être ouvert avec RMXP. Il s'agit du point de départ pour créer votre jeu.
3 polices sont incluses dans le dossier du Kit (pkmndp.ttf, pkmnemn.tff, pkmnems.tff), qu'il faut installer dans le Panneau de configuration, ou dans le dossier Windows\Fonts.
Le fichier RGSS100j.dll est à garder absolument dans le dossier du Kit et à fournir quand on distribue le jeu. Sans lui, le jeu ne tourne pas.
Les ressources graphiques et audios nécessaires au fonctionnement sont déjà incluses.
PSP offre un outil d'édition RMXP plus adapté pour la création d'un Projet Pokémon. L'exécutable en question est PSP_mod.exe, qui a été extrait dans le dossier de destination lorsque vous avez exécuté le programme téléchargé.
RMXP a quelques problèmes concernant Vista. Il faut donc:
- Supprimer (ou renommer) RGSS100J.dll (version
XP) du dossier du jeu.
- Renommer RGSS100J_vista.dll (version Vista)
en RGSS100J.dll et laisser ce fichier renommé
dans le dossier du jeu.
Pensez à vos joueurs en incluant les 2 dll.
Animations : RAS
Autotile : RAS
Battlebacks : Un fond de combat est TOUJOURS composé de 2 fichiers:
le fond (arrière plan), et le sol (ellipse située en dessous du
Pokémon). Les 2 fichiers vont toujours ensemble.
Le fond porte un nom que vous déterminez (exemple : nom_de_fichier.png),
et le sol associé porte le même nom auquel on a ajouté en
entête le mot "ground") (exemple : groundnom_de_fichier.png).
Le Battleback réglé d'une map doit être le fond, et non
le sol.
Battlers : Il existe 3 catégories d'images dans le dossier Battlers
:
- Dans le dossier Battlers directement se trouve les
images des dresseurs. Chaque image de dresseur (de dos ou de face) est de taille
160x160.
- Le sous-dossier Icon est le dossier des icônes
des Pokémons (tels qu'on les observe dans le menu d'équipe, ou
dans le menu de stockage). Un icône est nommé nécesairement
par le numéro du Pokémon associé : si le Pokémon
est le numéro 68, l'image est nommé 068.png
(à 3 chiffres exactement). Un icône est de taille 64x64.
- Le sous-dossier Back_Male est le dossier des dos des
Pokémons tel qu'on l'observe au combat. Une image du dos est nommé
nécessairement par le numéro du Pokémon associé
: si le Pokémon est le numéro 68, l'image est nommé 068.png
(à 3 chiffres exactement). Un dos est de taille quelconque, mais assurez
vous que le bas de votre image soit collé à votre Pokémon.
Une image pour chaque Pokémon est obligatoire dans ce dossier, même
si le Pokémon est nécessairement Femelle.
- Le sous-dossier Back_Female est le dossier des dos
des Pokémons Femelles. Le dossier suit les mêmes règles
que précédemment. Mais une image n'est pas obligatoire par Pokémon.
Si vous désirez distinguer un sprite Male de Femelle, ajoutez le sprite
Femelle dans ce dossier. Si vous désirez faire un Pokémon spécifiquement
Femelle, ajoutez un sprite Femelle dans ce dossier. Sinon, n'ajoutez rien :
le sprite utilisé pour la Femelle sera le même que pour le Male.
- Les sous-dossiers Shiny_Back_Female, Shiny_Back_Male,
sont les dossiers des dos des Pokémons en version Shiny. Ces dossiers
suivent les mêmes règles que précédemment, mais les
images ne sont pas obligatoires. Si vous désirez mettre une version Shiny
au Pokémon, ajoutez le Sprite Shiny dans le dossier Shiny_Back_Male.
Si vous désirez spécifier un sprite Femelle (dans le cas d'un
Pokémon Male ou Femelle, ou uniquement Femelle), ajoutez le dans Shiny_Back_Female
et dans Shiny_Back_Male. Si vous n'ajoutez pas
de version Shiny, le jeu utilisera le sprite contenu dans Back_Male
ou Back_Female.
- Le sous-dossier Front_Male est le dossier des Pokémons
vue de face, au combat ou dans le menu de statut. Une image de face est nommé
nécessairement par le numéro du Pokémon associé
: si le Pokémon est le numéro 68, l'image est nommé 068.png
(à 3 chiffres exactement). Une face est de taille 160x160, assurez vous
que le Pokémon soit centré. Une image pour chaque Pokémon
est obligatoire dans ce dossier, même si le Pokémon est nécessairement
Femelle.
- Le sous-dossier Front_Female est le dossier des faces
des Pokémons Femelles. Le dossier suit les mêmes règles
que précédemment. Mais une image n'est pas obligatoire par Pokémon.
Si vous désirez distinguer un sprite Male de Femelle, ajoutez le sprite
Femelle dans ce dossier. Si vous désirez faire un Pokémon spécifiquement
Femelle, ajoutez un sprite Femelle dans ce dossier. Sinon, n'ajoutez rien :
le sprite utilisé pour la Femelle sera le même que pour le Male.
- Les sous-dossiers Shiny_Front_Female, Shiny_Front_Male,
sont les dossiers des faces des Pokémons en version Shiny. Ces dossiers
suivent les mêmes règles que précédemment, mais les
images ne sont pas obligatoires. Si vous désirez mettre une version Shiny
au Pokémon, ajoutez le Sprite Shiny dans le dossier Shiny_Front_Male.
Si vous désirez spécifier un sprite Femelle (dans le cas d'un
Pokémon Male ou Femelle, ou uniquement Femelle), ajoutez le dans Shiny_Front_Female
et dans Shiny_Front_Male. Si vous n'ajoutez pas
de version Shiny, le jeu utilisera le sprite contenu dans Front_Male ou Front_Female.
- Quand vous ajoutez de nouveaux Battlers pour les Pokémons, pensez à
faire une mise à jour de la BDD par la commande MAJ BDD disponible dans
le menu Debug.
Characters : RAS
Fog : RAS
Gameovers : RAS
Icons : Dossier des icônes des objets, de taille 26*26.
Panoramas : RAS
Pictures : RAS ( Jetez un oeil dans ce dossier, les images de l'interface et autres y sont contenues )
Tilesets : Les Tilesets que j'ai ajouté sont en petit nombre. A vous de les trouvez et de les configurer! Certaines subtilités dans la configuration sont détaillées dans la rubrique Making général.
Titles : Une image est appelé ecrantitre.png, elle est modifiable pour votre projet.
Transitions : Les transitions utilisées pour les combats (transition map -> combat) doivent être nommées battle1.png, battle2.png, battle3.png, ..., battleX.png où X est égal à BATTLE_TRANS (ou le nombre de transition que vous utilisez).
Windowskins : RAS
BGM, BGS, ME : RAS
SE : Un sous-dossier Cries est le dossier des cris des Pokémons. Le nom est obligatoirement numéro_du_pokémonCry.wav (Ex: 068Cry.wav , 3 chiffres exactements). Le cri est optionnel, si vous n'ajoutez pas de fichier Audio, le jeu s'en passe.
Les ressources incluses sont relativement limitées. Trouvez en d'autres sur le net.
Quelques fichiers textes sont à modifier si vous désirez ajouter certaines données: Pokémons, objets, etc... Ils sont dans le dossier Data. Attention! Codage UTF-8 obligatoire. Si vous éditez ces fichiers, pensez à conserver le codage quand vous enregistrez le fichier.
data_pokemon.txt : fichier contenant les données Pokédex et évolutions spéciales.
data_item.txt : fichier contenant les données sur les Objets.
data_ball.txt : fichier contenant les données sur les Balls différentes.
data_zone.txt : fichier contenant les données sur les Zones.
Par ailleurs, un nouveau dossier apparaît depuis la version 0.7, appelé Echange. Il contient les fichiers nécessaires à la gestion de l'échange de Pokémon, par envoi textuel. Plus de détails dans larubrique Echange.
L'ensemble des scripts de Pokemon Script Project forme un tout cohérent, tous inclus dans le module POKEMON_S, et ne peuvent être séparés du reste indépendamment.
Voici la liste des scripts présents dans Pokemon Script Project, avec une description succinte de leur utilité. Ceux déjà présent dans le RGSS et qui ont eu des modifications n'ont pas été décrits, à quelques exceptions près.
Config_Panel : Panneau de configuration des options
de PSP, sert à régler certaines constantes du jeu (voir panneau
de configuration)
Module : Script qui contient des commandes internes
à PSP.
Interpreter : Script qui recense les commandes utilisables
par "Insérer un script"
Interpreter Bis : Script qui redéfinit les
évènements inclus par défaut.
Pokemon_Save : Scène de sauvegarde
MAP : Script de gestion de la carte du monde
MAPLINK : Script de gestion des jonctions de cartes
entre elles
MAPPANEL : Script de gestion des messages de localisation
Ruby : Fonctions du Ruby
Module RPG : (Est inclus la modification qui permet
de corriger les sprites au combat)
Debug_Party_Window : La fenêtre d'affichage des Pokémons de l'équipe dans le menu Debug
Pokemon_Data : Script comportant la table des types,
une BDD scriptée (en cas de pépin), la table des Capacités
Spéciales, et les fonctions nécessaires à l'exploitation
de la BDD des Pokémons. Contient la définition de la classe de
méthodes Pokemon_Info.
Pokemon_Skill : Script comportant la table des skills,
la définition d'un objet de classe Skill, et
les fonctions nécessaires à l'exploitation de la BDD des attaques.
Pokemon_Encouter : Script comportant les fonctions
nécessaires à l'exploitation de la BDD des rencontres aléatoires.
Pokemon_Trainer : Script comportant les fonctions
nécessaires à l'exploitation de la BDD des dresseurs. Contient
la classe de méthodes Player et Trainer.
Pokemon_Item_Data : Script qui contient les objets
et la définition de leurs effets. Contient la classe de méthodes
Item.
Pokemon_Menu : Menu principal à l'appui
de Echap (Sélection Pokédex, Pokémon, Sac, Sauvegarde...)
Pokemon_Party_Menu : Menu de sélection de
Pokémon dans l'équipe
Pokemon_Status : Menu de statut pour un Pokémon
Pokemon : Définition de la classe Pokemon,
objet qui désigne un Pokémon quelconque
Pokemon_Party : Définition de la classe Pokemon_Party,
objet qui relie les Pokémons de l'équipe, le sac, l'argent...
Pokemon_Computer/Box : PC de stockage
Pokemon_Skill_Learn : Scène appelée
en cas d'apprentissage de Skill
Pokemon_Evolve : Scène appelée en
cas d'évolution
Pokemon_Skill_Selection : Scène de selection
d'un Skill
TRADE : Script de gestion d'échange
DAYCARE : Script de définition des méthodes
de Pension
Pokemon_Item_Bag : Scène du Sac
Pokemon_Shop : Scène de magasin
Pokemon_Battle_Core 1 : Script contenant le noyau
du combat : interface et déroulement
Pokemon_Battle_Core 2 : Script contenant les mécanismes
des attaques
Pokemon_Battle_Wild : Scène d'un combat contre
un Pokémon Sauvage
Pokemon_Battle_Trainer : Scène d'un combat
contre un Dresseur
Trainer_IA : Gestion de l'intelligence artificielle.
Pokemon_Pokedex : Script de gestion du Pokédex
Pokemon_Name : Scène pour renommer un Pokémon
Pokemon_Types : Support de création de types
Pokemon_Custom : Votre lieu de travail pour les
modifications à apporter au script Pokemon.
Pour démarrer un projet, veuillez déjà installer PSP.
Le dossier qui constitue la base de travail est PokemonS.
Copiez-collez le dossier du Kit, afin de démarrer sur une bonne base
qui dispose déjà d'items, de scripts et de Pokémons programmés.
Pour commencer :
- cliquez sur Fichier
- cliquez sur Ouvrir un projet existant
- naviguez jusqu'au dossier PokemonS
- ouvrez Game.rxproj
ATTENTION : Vous ne pouvez pas commencer de nouveau projet en cliquant sur Fichier, Creer un nouveau projet. Il faut partir du projet existant.
Le déroulement du making suit la même règle qu'un projet quelconque : vous mappez, vous placez la zone de départ, et vous démarrez le jeu.
De même, je vous conseille grandement d'utiliser l'exécutable modifié PSP_mod.exe, car au delà de faciliter l'édition de la BDD (Base de données), j'ai agrandis la fenêtre Insérer un script, qui est beaucoup utilisée et qui ne force pas à faire un retour à la ligne... Sachez que c'est important pour l'édition de certaines fonctions essentielles du jeu.
Certaines variables ont été réservé pour faciliter l'interaction entre vos events et PSP. En général, elles sont utilisées par les scripts, et vous pouvez les utiliser également. Utilisez de préférence les variables après la numéro 25, il se peut que le Kit dans son évolution prenne des variables supplémentaires.
Les voici:
N°1 MAP ID : Lors d'une défaite au combat,
le joueur retourne sur cette map.
N°2 MAP X : Lors d'une défaite au combat,
le joueur retourne sur cette position X.
N°3 MAP Y : Lors d'une défaite au combat,
le joueur retourne sur cette position Y.
N°4 INDEX POKEMON : Lors de l'appel du menu d'équipe
par la fonction appel_menu_equipe, cette variable désigne
la place du Pokémon sélectionné dans l'équipe (1er
Poké = 0, 2ème Poké = 1, etc... et Annulation = -1)
Cette variable peut également être modifiée par vous même.
Cette variable est essentielle car elle permet d'utiliser un certain nombres
d'évènements correctement.
N°5 INDEX SKILL : Lors de skill_selection,
cette variable désigne l'index de la capacité sélectionnée
dans le Pokemon (1er attaque = 0, 2ème ataque = 1, etc... et Annulation
= -1)
N°6 CARTE ID : Si vous réalisez une carte
du jeu, veuillez définir en début de partie cette variable qui
indique l'ID de la map de votre carte du monde. Vous pouvez changer cette variable
en cours de jeu, si, par exemple, vous réalisez plusieurs régions.
N°7 PENSION DATA : Ne touchez pas à cette variable, au risque de voir votre Pokémon disparaître.
N°8 SAVESLOT : Ne touchez pas à cette variable, elle est automatiquement définie.
N°9 TRAINER CODE : Le code unique d'identification de votre Dresseur, généré en début de jeu. Vous pouvez le changer, il changera automatiquement votre ID Dresseur. (Le menu Debug ne permet pas toujours de le modifier)
N° 10 ECHANGE DATA : Ne pas toucher à
cette variable.
En script, une commande a été ajoutée pour alléger l'appel des variables. C'est :
var(index)
Equivalent à $game_variables[index]
Certains interrupteurs ont été réservé pour faciliter l'interaction entre vos events et PSP. En général, elles sont utilisées par les scripts, et vous pouvez les utiliser également. Utilisez les interrupteurs après le numéro 25, il se peut que le Kit réserve d'autres interrupteurs par la suite.
Les voici:
N°1 FLASH : Spécifie si FLASH a été
lancé.
N°2 FORCE : Spécifie si FORCE a été
lancé.
N°3 MUSIQUE COMBAT : true,
vous réglez la musique des combats de dresseurs. En false,
vous réglez la musique des combats sauvages.
N° 4 MAPLINK : true,
la jonction de maps est activée sur toutes les cartes. false,
la jonction de maps est désactivée sur toutes les maps. Si vous
désirez désactiver la jonction de carte pour le jeu définitivement,
utilisez plutôt l'option MAPLINK dans le script
Config_Panel. Plus de détails dans la section
jonction de maps.
N° 5 VOL AUTORISé : C'est simplement une
variable réservée pour indiquer si on est en intérieur
ou en extérieur. Elle doit être réglée manuellement.
N° 6 MODE DEX REGIONAL : Pour régler le
Pokédex en mode national ou régional.
Le Script Config_Panel permet de régler rapidement certains paramètres usuels. Note: BDS est la Base des scripts. BDD est la Base de données.
Voici la liste des paramètres à régler :
SAVE_CONVERT : Apparu depuis la version 0.7, cette option permet de rendre compatible les sauvegardes antérieures à la version 0.7. Plus de détails dans la rubrique associée.
SKILL_CONVERSION : true
si vous utilisez la BDD+BDS pour les attaques, false
si vous utilisez la BDS uniquement.
ITEM_CONVERSION : true si
vous utilisez la BDD+BDS pour les objets, false si
vous utilisez la BDS seulement.
PKMN_CONVERSION : true si
vous utilisez la BDD+BDS pour les Pokémons, false
si vous utilisez la BDS seulement.
SPEED_MSG : Vitesse de défilement du texte dans le jeu. 1 = lent, 8 = rapide, 15+ = instantanné. Réglez à 0 si vous voulez que le texte s'affiche immédiatement.
MSG : Nom de l'image qui sert de fond pour les messages (la boîte de dialogue). Par défaut, c'est "messagedummy.png", dans le dossier Pictures.
BATTLE_MSG : Nom de l'image qui sert de fond de combat pour les messages de combat (la boîte de dialogue). Par défaut, c'est "dummy1.png", dans le dossier Pictures.
BATTLE_TRANS : Le nombre de transition utilisables pour les combats (transition map->combat). Les transitions utilisées doivent être nommées battle1.png, battle2.png, battle3.png, ..., battleX.png où X est égal à BATTLE_TRANS
MAX_LEVEL : Le niveau maximum des Pokémons.
MAPLINK : true si vous activez la fonction de jonction de maps.
MAPPANEL : true si vous voulez utiliser la fonction message de localisation, false sinon.
TRADEGROUP : Si vous utilisez le système d'échange inclus dans PSP. Compris entre 0 et 1023, le code d'identification détermine votre "groupe d'échange". Seul les versions avec le même TRADEGROUP peuvent s'échanger des Pokémons entre eux. Vous pouvez régler le code à 0 pour pouvoir échanger avec n'importe quel jeu fait avec PSP (mais attention aux bugs).
SAVEBOUNDSLOT : true permet de lier une sauvegarde à une partie, vous serez donc forcé de sauvegarder sur le même slot. false donne le choix de sauvegarder sur n'importe quel slot. Plus de détails dans la section Système : Mode de sauvegarde.
ATTACKKIND : true si vous utilisez le mode de distinction Physique / Spécial des versions Diamant / Perle, false sinon (A savoir, L'attaque est considérée Physique si elle appartient à certains types, et Spéciale si elle appartient à d'autres types).
MAPINTRO : false si vous utilisez une Intro scriptée (c'est à dire celle qu'il faut coder dans Scene_Title, ou bien [map_id, position_x, position_y] qui constitue une position de départ de la carte dans laquelle vous pourrez coder en évènements votre introduction. N'oubliez pas de mettre "Retour à l'écran-titre" ou bien "Insérez un script : $scene = Scene_Title.new" pour lancer le menu de sauvegarde.
Plusieurs précautions doivent être prises lors du mapping.
Les Tilesets disposent de Tag Terrain qu'il faut régler (dans la base de données) avant de mapper en conséquence : Ces Tag Terrains sont très importants en ce qui concerne le réglage des rencontres aléatoires (cf Configurer les rencontres aléatoires ).
De plus, les terrains aquatiques (étendues d'eau, océans, etc...) disposent d'un statut spécial: en effet, celles-ci sont traversable par SURF, et sont également des lieux de pêche. Ces terrains aquatiques DOIVENT porter le Tag numéro 7.
Les maps que vous réalisez font en général partie d'une régions : Route 301, Village, Bourg, Grotte, etc... Sur la carte du jeu, ce sont ces noms de zone que l'on voit. De même, la version Emeraude affichait à travers un message de localisation le nom de la zone à chaque transition entre zones, en haut à gauche. De même, la localisation des Pokémons fait clignoter ces zones en rouge.
(image de Pokémon version Emeraude)
Pour que ces effets soient disponibles dans le jeu, le nom des maps doivent suivre une syntaxe précise. En effet, plusieurs de vos maps peuvent se regrouper en une seule et même zone, et il faut donc définir ces groupes de maps d'une certaine façon. Chaque groupe est identifié par un numéro appelé IDZone (strictement différent de 0).
1 - Devant chaque Map, vous devez spécifier un entête qui va identifier la zone auquel la map appartient.
Si la map fait partie d'une zone, elle doit porter le nom selon la syntaxe suivante:
[IDZone]/Nom_interne
IDZone/Nom_interne # Si c'est une map d'intérieur (maison ou Centre Pokémon)IDZone est à remplacer par le numéro de la zone, Nom_interne est à remplacer par un nom que vous voulez, les 2 séparés par un /.
Quelques explications s'imposent :
- IDZone permet d'indiquer que la map fait partie d'un groupe
de groupe, identifié par ce numéro. Toutes les maps faisant parti
du même groupe doivent porter le même IDZone.
- Nom_interne est un nom qui est libre. Ce n'est pas le
nom qui s'affiche en jeu, mais un nom qui vous sert de repère. Il
est obligatoire d'en indiquer un. Veuillez ne pas nommer vos cartes [1],
[2], etc... sous peine d'erreurs.
- Vous remarquez qu'il y a 2 façons d'indiquer l'IDZone.
L'écrire "Entre crochets" signifie que le joueur est localisé
(donc visible sur la carte du jeu) et que le message de localisation s'affichera
lorsque le joueur entre dans cette Zone par cette map. Toutes les maps d'extérieurs
du jeu, ainsi que les "donjons" (Grottes, Centrales électriques,
Tours...) devraient être marquées de la sorte.
L'écrire "Sans crochet" signifie que le joueur est localisé
(donc visible sur la carte du jeu) mais qu'un message ne s'affichera pas
quand le joueur entrera dans cette Zone par cette map. C'est par exemple
ce qu'il faut utiliser pour une map de maison, dans un Centre Pokémon,
dans un Gymnase, ou tout autre batiment.
2 - Pour spécifier le nom d'une zone, il faut faire un tour dans le fichier data_zone.txt qui contient le nom de vos zones. Parmis les lignes, il suffit d'écrire :
$data_zone[IDZone] = ["NOM" , "panneau.png"]
IDZone est à remplacer par le numéro de la zone, NOM est à remplacer par le nom de la zone en question, panneau.png est à remplacer par le nom de l'image qui accompagne l'affichage du message de localisation.
Ce NOM est le nom qui s'affiche lors des transitions entre zones, et sur la carte/localisation des Pokémons.
Vous pouvez ne pas spécifier de Zone pour une carte. Dans ce cas, le nom de la carte doit être quelconque (mais très important, le nom ne doit pas porter de caractère '/'). Lorsqu'on entre dans la map, aucun message apparaîtra pour dire qu'on a changé de Zone. De même, il sera impossible de savoir où le joueur se trouve sur la carte du jeu (le joueur sera dans un endroit dit "INCONNU").
Le message de localisation est le petit panneau qui s'affiche en haut à gauche pour annoncer un changement de Zone. Il peut être activé ou désactivé par le Panneau de configuration (Script Config Panel). Le paragraphe suivant est seulement explicatif, les manipulations à réaliser sont décrites dans le paragraphe précédent intitulé Zones.
Il faut distinguer les maps que vous avez marqué "avec crochets" (maps dites Zones marquées), des maps que vous avez marqué "sans crochets" (maps dites Zones non marquées). La transition entre les Zones, donc l'affichage du message de localisation est gérée par des règles bien précises.
Les voici :
Il s'affiche quand :
- Passage d'une Zone marquée vers une autre Zone marquée (par
exemple, j'entre dans une fôret par une route, ou je change de route)
- Passage d'une Zone non marquée vers la même Zone marquée
(par exemple, quand je sors d'un batiment dans une ville)
- Passage d'une Zone non marquée vers une autre Zone marquée (par
exemple, sortir d'un tunnel qui ammène à une autre Zone)
Il ne s'affiche pas quand :
- Passage d'une Zone marquée vers la même Zone marquée (par
exemple, changement de map au sein de la même grotte)
- Passage d'une Zone non marquée vers la même Zone non marquée
(par exemple, je change d'étage dans un petit batîment)
- Passage d'une Zone marquée vers la même Zone non marquée
(par exemple, j'entre dans un batiment)
- Passage d'une Zone marquée vers une autre Zone non marquée (par
exemple, retour dans un Centre Pokémon)
- Passage d'une Zone non marquée vers une autre Zone non marquée
De plus, il est possible de personnaliser le panneau qui accompagne le message. Pour cela, il faut désigner l'image associée à une Zone, dans data_zone.txt.
Petit récapitulatif des noms à utiliser pour vos cartes :
Routes extérieures, villes, grottes-routes, canaux:
[numero]/nom_de_carte
Batiments, maisons, Centres Pokémons, petites grottes (chambre secrète...) :
numero/nom_de_carte
Lieux inconnus :
nom_de_carte
Vous pouvez mapper votre carte du jeu sur une map dont vous indiquerez l'ID à la variable N°6 CARTE ID.
Vous pouvez utiliser une image en fond pour votre carte, ou bien un Tileset qui a été crée spécialement pour PSP et vous permet de faire votre propre carte si vous ne pouvez pas en dessiner une.
Les évènements à placer sur cette carte du jeu sont très précis, car cette carte sert d'une part à localiser vous et les Pokémons (option du Pokédex), d'autre part à choisir une destination pour la CS VOL. Il n'y a que 2 types d'évènements :
- Un évènement qui doit être obligatoirement un évènement vierge, dont le nom est ~ . Ca sera l'avatar du héros (pas besoin de régler son apparence, elle se réglera toute seule).
- Des évènement à placer sur les routes, les villes, les
endroits clés, etc... qui représenteront les zones. Je les appelle
évènement de zone. Leur nom doit être le numéro
de la zone (tel qu'il a été défini dans le paragraphe sur
les zones).
Exemple : Une route dont le nom est Route 205 correspond
à 3 maps dans votre jeu, nommées respectivement: [7]/Route
205 Sud, [7]/Route 205,et [7]/Route
205 Nord. Cette route fait 5 cases de long sur votre carte du monde.
D'après le nom de vos maps, cette route est dans la zone 7.
Vous devez donc placer 5 évènements de zone sur chacune des cases
sur la route, et nommer ces évènements 7.
Pour appeler la carte du monde, voyez cette section.
Le Pokédex peut afficher la localisation des monstres. Dans les versions Advances, ces zones étaient marqués de rouge sur le carte du monde. PSP permet de reproduire cet effet.
Pour régler les zones des monstres tel qu'affiché dans le Pokédex, il suffit de spécifier dans les évènements de zone leur Apparence en choisissant un Character adapté, et de mettre une opacité = 0. Quelques Characters sont déjà fournis et sont nommés MAPENEMY. Ces Characters vous serviront à couvrir les zones à colorier.
Comment ca marche? Quand le Pokédex ouvre la carte du monde, les zones où se trouvent le Pokémon vont passer en opacité pleine, et seront donc visible sur la carte. De plus, les évènements se mettront à s'animer à l'arrêt. Vous pouvez donc faire des effets d'animation en modifiant les Characters qui serviront d'Apparence aux évènements de zone.
Parce que la CS Vol joue un rôle essentiel dans tous les Pokémons, elle fait dans PSP l'objet d'un script à part et est donc décrite ici. La carte du monde dispose d'un mode de Vision ("VIEW") où il n'est possible que de naviguer, et aussi d'un mode d'action que j'ai arbitrairement appelé mode "VOL" ("FLY"). Pour appeler ce mode, faites dans Insérer un script :
carte_du_monde("FLY")
Lorsque la CS Vol est activée, la carte du monde passe en mode "VOL" ($game_temp.fly_mode). Le curseur peut se déplacer sur la carte et choisir la destination du vol. Pour sélectionner une destination, il suffit d'appuyer sur espace quand le curseur est sur la destination.
Comment faire? Il suffit de mettre des évènements dans les évènements de zone, comme ça :
- Faire une condition par script : $game_temp.fly_mode
- Faire Insérer un script dans la condition : retour
- Faire la téléportation vers la destination
La commande retour est indissociable de la commande Téléporter. Si vous quittez la carte par un Téléportez, appelez retour obligatoirement juste avant.
Vous pouvez bien sur conditionner la téléportation, par exemple si vous n'avez pas encore atteint la ville en question. Il suffit simplement de mettre une deuxième condition (ville découverte, etc...) avant de se téléporter.
Un point de retour est la destination du joueur quand celui-ci perd au combat ou que tous ses Pokémons se trouvent K.O. Cette redirection est automatique en cas de défaite (excepté un car particulier du combat contre un dresseur), et elle doit être obligatoirement spécifiée, par les variables N° 1 MAP ID, N° 2 MAP X, N°3 MAP Y.
Quand vous créez un Centre Pokémon, n'oubliez pas de régler le point de retour au Centre Pokémon, par un évènement qui assigne ces 3 variables aux coordonnées du Centre.
De plus, la défaite au combat contre un Pokémon Sauvage déclenche l'évènement en commun N°2 Event de retour. C'est dans cet évènement que vous soignerez vos Pokémons, car ils ne seront pas automatiquement soignés.
Une commande permet d'enregistrer plus rapidement le point de retour, il s'agit, dans Insérer un script, de:
sauv_retour(map_id, x, y)
map_id étant à remplacer par l'ID de la map de destination, x et y par les positions du joueur. Ces paramètres sont optionnels, si vous écrivez seulement sauv_retour, vous enregistrez la position actuelle du joueur.
Dans tous les jeux Pokémons, le monde de Pokémon semble n'être composé que d'une seule carte, et les zones ne sont pas discontinues par une transition. Il est donc possible de les joindre, de manière à donner l'effet de continuité entre les cartes. Il faut pour cela activer l'option MAPLINK dans Config Panel (désactivé par défaut).
Le mapping utilisant la jonction de map doit suivre des règles impératives :
- Chaque carte peut disposer jusqu'à 4 cartes frontalières : une au bord supérieur, bord inférieur, bord droit et bord gauche. Veuillez n'avoir qu'une seule carte frontalière par côtés.
- Chaque carte doit chevaucher de 3 cases sa voisine. En clair, sur chaque carte juxtaposée, il y a 3 lignes/colonnes en commun qu'on doit retrouver sur les 2 cartes.
- Empêchez le joueur d'aller au coin des maps! Vous ne verrez que le noir intersidéral de votre écran. Ou bien la map qui se répète (bug d'affichage). Grandissez vos maps pour que le joueur ne puisse pas en voir les coins.
- Essayez de placer les téléportations au milieu des bords et non sur les coins. C'est une corollaire de la remarque d'avant.
- Evitez de faire chevaucher plus de 2 maps au même endroit (par exemple, le coin supérieur gauche de la map "Carte 2", sur le schéma: 3 cartes se juxtaposent), ou du moins, faites en sorte que vous n'atteignez pas les coins avec le joueur, que ce coin ne soit pas visible à l'écran (répété encore une fois).
- Evitez d'utiliser des carreaux "transparents" ou "vides" sur vos cartes (dans la couche 1), car cela donne également des résultats imprévisibles. Pour les intérieurs, vous pouvez utiliser un carreau noir pour couvrir les zones transparentes si besoin.
- L'image "black.png" doit impérativement se trouver dans le dossier Pictures (déjà inclus).
Si vous avez compris ces règles de mapping, nous allons passer à la suite : joindre les cartes et leurs voisines.
Lorsque vous avez mappé vos cartes, et pris les précautions nécessaires (chevauchement de 3 cases, et téléportations prévues en milieu de map de préférence), il faut placer les téléportations. Un exemple. J'ai ici un sentier entre la carte du haut et la carte du bas. J'ai pris le soin que les 3 lignes au sud de la carte supérieure soient les mêmes que les 3 lignes au nord de la carte inférieur :
Observez bien que les 2 maps ont 3 lignes coincidentes, représentées par les 6 rochers. Les 2 maps ne sont pas nécessairement aligné verticalement. La map du dessus est appelée A, avec un ID 1, celle du dessous est appelée B, avec un ID 2. Nous allons faire une téléportation entre ces 2 cartes.
Placez des events en déclenchement Au contact du héros sur les cases avec des flèches, et mettez une téléportation dont la destination sont les cases de la même nuance (vert ou bleu) mais avec des ronds (suivez les grosses flèches). La téléportation doit être instantanée (sans fondu). C'est terminé pour les évènements de téléportation.
A présent, il faut scripter la jonction. Sur chaque carte dont on veut spécifier ses voisines, il faut faire un évènement en processus parallèle, et y ajouter la commande:
jonction_map(n_id, n_x, e_id, e_y, s_id, s_x, o_id, o_y)
Ou D_id est l'ID de la carte voisine, D_x la coordonnée selon x de la map voisine dans le repère de la carte actuelle, D_y la coordonnée selon y de la map voisine, et D représente n (Nord), e (Est), s (Sud), ou o (Ouest).
n_x, e_y, s_x et o_y sont des paramètres importants, qui symbolisent le décalage entre vos maps. En effet, ici, vous appercevez que les 2 maps ne sont pas alignées verticalement.
Il y a un écart de 8 cases entre le coin inférieur gauche de la map A, et le coin supérieur gauche de la map B. Donc, la coordonnée de la map A dans le repère de la map B est -8, et la coordonnée de la map B dans le repère de la map A est +8.
Ainsi, l'évènement à ajouter en processus parallèle dans la map A est:
jonction_map(0, 0, 0, 0, 2, 8, 0, 0)
Car la map adjacente au sud de A est la map B d'ID 2, et celle-ci est décalée de 8 cases par rapport à l'origine de A (le côté gauche de la carte).
Et l'évènement à ajouter en processus parallèle dans la map B est:
jonction_map(1, -8, 0, 0, 0, 0, 0, 0)
Car la map adjacente au nord de B est la map A d'ID 1, et celle-ci est décalée de -8 cases par rapport à l'origine de B (le côté gauche de la carte).
C'est terminé.
La méthode est strictement la même pour des cartes qui sont adjacentes sur les côtés, vous devez placer les téléporteurs impérativement dans la zone de chevauchement des cartes.
Pour le décalage, l'origine des cartes est le côté gauche de la carte pour l'axe des x, et le côté haut de la carte pour l'axe des y.
Si vous ne voulez pas spécifier de carte, écrivez 0 pour l'ID de la map dans la fonction jonction_map (comme dans les exemples ci-dessus). Dans ce cas, vous verrez simplement du noir à la place de la carte adjacente.
Exemple d'une carte avec un voisin au nord et un voisin au sud:
jonction_map(3, -5, 0, 0, 2, 8, 0, 0)
Il se peut que vous vouliez désactiver MAPLINK ponctuellement sur une de vos cartes. C'est apr exemple le cas pour la carte du monde.
Vous pouvez le faire, soit en Insérant un script :
desactiver_maplink
Soit en désactivant l'interrupteur N°4 MAPLINK. Les 2 fonctions sont équivalentes.
Il faut le faire avant de se téléporter sur votre carte où vous ne voulez pas de jonction. Le maplink est désactivé jusqu'à nouel ordre sur toutes les maps.
Pour réactiver MAPLINK, utilisez en Insérant un script :
activer_maplink
Ou activez l'interrupteur N°4 MAPLINK.
PSP intègre un script d'échange de Pokémons.
Le TRADEGROUP :
Les jeux n'ont pas forcément les mêmes bases de données, ce qui peut donner lieu à des bugs si on échange des Pokémons entre version différentes. Pour identifier un groupe de jeu compatible (qui ont donc des bases de données similaires voire identiques), PSP propose d'identifier votre jeu par un TRADEGROUP.
Ce nombre, réglable dans le script Config Panel, permet de séparer les jeux qui ne sont pas compatibles. Ainsi, avec le script d'échange PSP, 2 jeux qui n'ont pas le même TRADEGROUP ne pourront pas échanger leurs données. Sauf exception, le TRADEGROUP 0, qui permet de recevoir des Pokémons de n'importe quel TRADEGROUP.
La méthode d'échange basique :
Chaque joueur est identifié par un code de 7 symboles, que vous pouvez lire dans le fichier Mon_code.txt du dossier Echange. (Ce fichier est généré quand vous jouez à votre partie).
Supposons que Anna souhaite envoyer à Bernard un Pokémon. Bernard lit et transmet son Code Echange à Anna. Anna, dans le jeu, parle au PNJ des échanges, et entre le Code Echange reçu de Bernard. Elle choisit ensuite le Pokémon qu'elle souhaite envoyer. Le Pokémon est transformé en code de 96 caractères, que j'appelle Code Pokémon, disponible dans le fichier Envoi.txt. C'est ce code qu'elle doit donner à Bernard.
Bernard de son côté, reçoit le Code Pokemon du Pokémon d'Anna. Dans le dossier Echange, Il crèe un fichier Boite.txt, dans lequel il colle le Code Pokemon reçu. Dans le jeu, il ouvre sa partie, parle aux PNJs des échanges, inspecte sa boîte de réception et reçoit le Pokémon d'Anna !
Remarques :
Plutôt que d'écrire le code de votre ami dans le jeu, vous pouvez aussi l'écrire dans Son_code.txt.
"L'échange" est à sens unique, c'est un envoi.
Une méthode de vérification incluse dans le jeu permet de ne pas recevoir 2 fois le même Pokémon (clonage).
Couplé avec la méthode de sauvegarde liée, elle permet de faire un véritable envoi.
Parce que PSP est sur RMXP, PSP propose plusieurs slots pour sauvegarder une partie (3 au plus exactement). 2 modes de sauvegarde sont disponible :
Le mode "Choix" permet de sauvegarder sur le slot de son choix.
Pour activer ce mode, dans Config Panel, le paramètre
SAVEBOUNDSLOT doit être réglé
à false :
SAVEBOUNDSLOT = false
Le mode "Lié" attache un slot de sauvegarde à une partie.
Lorsque le joueur sélectionne une nouvelle partie dans le menu de chargement
(slot1, 2 ou 3), le joueur sera forcé de sauvegarder à cet emplacement.
Ce système est proche de Zelda où chaque partie est indépendante
et il est impossible d'écraser d'autres sauvegardes.
Pour activer ce mode, dans Config Panel, le paramètre
SAVEBOUNDSLOT doit être réglé
à true :
SAVEBOUNDSLOT = true
Le mode "Lié" permet également de sauvegarder automatiquement et silentieusement, sans appeler le menu de sauvegarde. Le joueur n'est pas sollicité et la sauvegarde se fait sur le slot attaché à la partie. La commande en Insérer un script est :
forcer_sauvegarde
Vous pouvez bien sur faire un choix avant en évènement pour demander si le joueur souhaite sauvegarder.
Le slot attaché à une partie est indiqué par la variable N°8 SAVESLOT (= 0 pour le slot 1, = 1 pour le slot 2, etc...).
Un bug de script peut survenir à tout moment lorsqu'on réalise son jeu ou pendant que l'on joue.
A présent, en cas de bug survenant en cours de jeu, un rapport de bug est automatiquement généré, dans le dossier du jeu, sous le nom de Log.txt.
Vous pouvez inspecter librement le fichier Log.txt pour détecter l'erreur. Si vous rapportez le bug sur le forum, veuillez copier coller le contenu du fichier dans les Rapports de bug.
Note : Les erreurs au démarrage initial du jeu (chargement des scripts) ne génèrent pas de rapport de bug. Seuls la lecture d'un fichier data_xxx.txt et l'exécution de code érroné en cours de jeu donnent un fichier Log.txt.
Si le bug survient pendant le jeu, une sauvegarde automatique du jeu est réalisée, à la position du joueur juste avant le bug. Cette sauvegarde est temporaire et permet dans certains cas de reprendre la partie.
Quand vous redémarrerez votre jeu après le bug, un tel message s'affichera. Appuyez sur Entrée, la boîte disparaîtra mais l'écran restera noir. Appuyez Entrée à nouveau pour continuer, ou Echap pour charger la Sauvegarde de secours.
Le menu de Debug est accessible comme dans RMXP par la touche F9.
Le Menu de réglage des variables est le même.
Le Menu accessible en appuyant sur A par contre a changé :
Plusieurs fonctions ont été modifiées :
Ajouter : Permet d'ajouter un Pokémon dans l'équipe. L'ID,
et le Niveau sont réglables. Appuyez sur Générer
pour ajouter le Pokémon.
Supprimer : Permet de supprimer un Pokémon dans l'équipe.
Modifier : Permet d'enseigner des attaques quelconques à un Pokémon.
Merci Drakhaine.
Soigner : Permet de soigner l'équipe.
Objets : Permet de régler les objets de l'inventaire.
Argent : Permet de modifier l'argent possédé.
Pokédex : Plusieurs options disponibles sur le Pokédex:
Activer, Compléter, Vider...
Rencontres : Permet de désactiver les rencontres aléatoires
Invincibilité : Permet de rendre l'équipe Invincible aux
dégâts
Vitesse : de marche
Téléporter : Permet d'enregistrer le Point de retour à
la position actuelle, et de s'y téléporter
MAJ BDD : Permet de mettre à jour la BDD en cas de mise à
jour des Pokémons crées, ajout de nouveaux sprites.
Compiler : Permet de préparer le projet pour la compilation et
le cryptage.
Avant de compiler votre projet, n'oubliez pas d'aller faire un tour dans le Menu Debug et de sélectionner les options Maj BDD et Compiler en fin de liste. Une fois l'opération réalisée (elle prend un peu de temps), vous pouvez retourner sur RMXP et lancer la compilation du projet.
Cette étape permet d'enregistrer définitivement les données qui sont d'habitude construites en début de jeu, à partir de vos fichiers data_pokemon.txt, etc... Vous verrez apparaître les mêmes fichiers sous le format rxdata.
Cette étape n'est vraiment nécessaire que si vous cryptez le jeu. Dans le cas contraire, ce n'est pas obligatoire.
La gestion des Conditions est la même, excepté l'onglet 2, qui spécifie des conditions sur le Pokémon de l'équipe d'index la variable n°4 INDEX POKEMON.
Petite précaution: "a pour nom" demande explicitement le nom du Pokémon en majuscule, entre guillemets.
D'autres conditions ont disparu, comme les conditions sur les monstres adverses, les armes et les armures.
(Petit rappel: INDEX POKEMON = choix du INDEX+1-ème Pokémon de l'équipe)
Une commande de choix du type Pokémon, comme on peut en observer dans une fenêtre d'écrasement de sauvegarde, a été programmée et permet de faire des choix à 2 possibilités. Il est à distinguer de la commande de choix par défaut, celle qui apparaît dans la fenêtre de messages.
draw_choice("CHOIX1", "CHOIX2")
Ou CHOIX1 est à remplacer par ce que vous voulez, CHOIX2 est à remplacer par ce que vous voulez également.
Pour utiliser ceci, vous pouvez scripter directement avec Insérer un script ( if draw_choice("OUI", "NON") ) ou bien entrer dans les Conditions par script la commande draw_choice("OUI", "NON").
L'évènement Gestion des Variables reste globalement la même mais certains paramètres ont été enlevé, alors que d'autres sont accessibles, notamment des informations sur le Pokémon de l'équipe dont l'index est situé dans la Variable n°4 INDEX POKEMON.
(Petit rappel: INDEX POKEMON = choix du INDEX+1-ème Pokémon de l'équipe)
Pas de changement si ce n'est que vous devez choisir un Dresseur et non un groupe de Pokémons. Plus de détails dans Création et combat contre un Dresseur adverse.
Pas de changement, si ce n'est que vous ne pouvez modifier que le nom du 1er héros.
Vous pouvez modifier les PV de l'Equipe complète, OU celui du Pokémon sélectionné par la variable n°4 INDEX POKEMON. Dans ce cas, il faut choisir le héros 001.
(Dans cette configuration, vous pouvez régler les PV du Pokémon sélectionné)
(Petit rappel: INDEX POKEMON = choix du INDEX+1-ème Pokémon de l'équipe)
Vous pouvez modifier le statut de l'Equipe complète, OU celui du Pokémon sélectionné par la variable n°4 INDEX POKEMON. Dans ce cas, il faut choisir le héros 001.
(Dans cette configuration, vous pouvez régler le statut du Pokémon sélectionné)
Le statut 9 est le statut KO. Vous pouvez donc tuer en infligeant le statut KO, mais également rétablir les Pokémons en retirant le statut KO. Dans ce cas, seuls les Pokémons KO auront leurs PV rétablis.
(Petit rappel: INDEX POKEMON = choix du INDEX+1-ème Pokémon de l'équipe)
Vous pouvez soigner complètement l'Equipe entière, OU le Pokémon sélectionné par la variable n°4 INDEX POKEMON. Dans ce cas, il faut choisir le héros 001.
(Dans cette configuration, vous pouvez soigner le Pokémon sélectionné)
(Petit rappel: INDEX POKEMON = choix du INDEX+1-ème Pokémon de l'équipe)
Vous pouvez modifier l'exp de l'Equipe entière, OU du Pokémon sélectionné par la variable n°4 INDEX POKEMON. Dans ce cas, il faut choisir le héros 001.
(Dans cette configuration, vous pouvez modifier l'exp du Pokémon sélectionné)
En cas de gain d'expérience, le niveau peut monter, et dans ce cas un message s'affiche. Mais si il y a une perte de d'expérience, le niveau ne diminue pas. Il faut juste regagner plus d'expérience pour monter de niveau.
(Petit rappel: INDEX POKEMON = choix du INDEX+1-ème Pokémon de l'équipe)
Vous pouvez modifier le niveau de l'Equipe entière, OU du Pokémon sélectionné par la variable n°4 INDEX POKEMON. Dans ce cas, il faut choisir le héros 001.
(Dans cette configuration, vous pouvez modifier le niveau du Pokémon sélectionné)
En cas de gain de niveau, un message s'affiche. Mais si il y a une perte de niveau, rien ne prévient le joueur. De plus, la perte de niveau n'enlève pas de capacités, et le Pokémon ne régresse pas (il reste sous la même forme évolué). Seule ses statistiques sont changées.
(Petit rappel: INDEX POKEMON = choix du INDEX+1-ème Pokémon de l'équipe)
Vous pouvez ajouter ou retirer une compétence au Pokémon sélectionné par la variable n°4 INDEX POKEMON.
La commande "Ajouter" permet d'enseigner une capacité à un Pokémon, "comme si le Pokémon apprenait cette nouvelle capacité naturellement". C'est-à-dire, si il dispose de moins de 4 capacités, la nouvelle attaque sera apprise; si il dispose de 4 capacités, le jeu va demander au joueur de remplacer la Capacité qu'il souhaite.
Par contre, retirer une compétence se fait en silence, si la compétence est connue.
(Petit rappel: INDEX POKEMON = choix du INDEX+1-ème Pokémon de l'équipe)
Cette fonction modifie le surnom du Pokémon sélectionné par la variable n°4 INDEX POKEMON, surnom que le joueur spécifie si le champ est vide, que le maker décide si le champ est remplit.
(Petit rappel: INDEX POKEMON = choix du INDEX+1-ème Pokémon de l'équipe)
Cette fonction est détaillée dans Configurer les rencontres aléatoires.
Cette fonction est détaillée dans Configurer les rencontres aléatoires et dans Création et combat contre un Dresseur adverse.
La commande est la même. Cependant, il existe 2 combats différents : Les combats de dresseurs, et les combats contre les Pokémons sauvages. Vous aurez donc besoin de réglez la musique pour les 2 types de combat. Ainsi, avant de régler la musique, réglez l'interrupteur N°3 MUSIQUE COMBAT en activé pour régler la musique des combats de dresseurs, et en désactivé pour régler la musique des combats sauvages. La musique réglée pour un type de combat reste jusqu'à que le réglage soit effectué de nouveau sur le même type de combat.
La musique qui est réglée dans la BDD onglet système concerne la musique des combats contre les Pokémons sauvages et des dresseurs par défaut. Pensez à régler cette musique avant de lancer le 1er combat.
Note:
- La musique des fins de combat n'est pas encore réglable, car elle suit
un processus un peu complexe
- Le jingle de départ n'est pas modifiable par évènement,
référez vous à cette page.
En cas d'ajout du Pokédex (un Professeur vous le confie par exemple), faites Insérer un script:
Si vous souhaitez activer ou désactiver le Pokédex régional, modifiez l'état de l'interrupteur 6 MODE DEX REGIONAL, ou bien avec POKEMON_S::_DEXREG.activer_pokedex
Créez un évènement, et Insérer un script:
demarrer_pc
Rien de plus simple. Utilisez l'évènement de RMXP Entrer le nom du héros.
Rien de plus simple. Utilisez l'évènement de RMXP Ajouter/Retirer monnaie.
Rien de plus simple. Utilisez l'évènement de RMXP Ajouter/Retirer objets.
Attention! Les objets dit "rares", sont en exemplaire unique dans le sac. Si vous en ajoutez plus de 1, il n'y en aura qu'un seul dans le sac.
Créez un évènement, qui appelle l'évènement en commun CARTE, en Déclenchement par la touche Action. Vous pouvez aussi utiliser la commande :
carte_du_monde("VIEW")
Créez un évènement, qui appelle l'évènement en commun PENSION, en Déclenchement par la touche Action. Cet évènement réalisé par défaut dans PSP 0.7 est un modèle de Pension. Vous pouvez le modifier. Pour plus de détails, regardez dans cette rubrique.
Un évènement réalisé par défaut dans PSP 0.7 (Correctif 2) est un modèle de Carte Dresseur réalisé par Louro. Il s'agit de l'évènement en commun intitulé Carte Dresseur.
Pour appeler la Carte Dresseur, Insérez un script :
carte_dresseur
Pour activer l'obtention d'un badge :
badgeX
Ou X est à remplacer par le numéro du badge
Pour activer un objectif quelconque (cf script Carte_Dresseur pour plus de détails) :
objectifX
Ou X est à remplacer par le numéro de l'objectif.
Rien de plus simple. Utilisez l'évènement de RMXP Appeler un magasin, et ajoutez y les objets proposés.
Appelez l'évènement en commun Centre Pokémon pour faire une infirmière (en ayant pris le soin de modifier les textes si besoin est).
Ou bien utilisez la commande à travers Insérer un script :
soigner_equipe
Vous pouvez faire du traitement sur un/des Pokémon de l'équipe.
Plusieurs situations l'exigent :
- Une porte mystérieuse vous laisse passer si vous possédez un
OBALIE en première place, et un RACAILLOU en 6ème place.
- La présence d'un PIKACHU dans votre équipe active les turbines
d'une centrale électrique.
- Vous entrez dans un volcan et tous les Pokémons de type Glace de votre
équipe tombent K.O.
Le traitement d'un Pokémon de l'équipe nécessite d'abord sa sélection.
$pokemon_party.actors
Est la liste des objets de classe Pokemon contenus dans l'équipe.
Il suffit de sélectionner un Pokémon avec :
$pokemon_party.actors[index]
index prend des valeurs de 0 à (taille de l'équipe-1).
Avec une structure en for, vous pouvez facilement faire les comparaisons nécessaires et traiter les objets de classe Pokemon comme il se doit. Vous pouvez donc "interroger" cet objet: .name, .level, etc... Jetez un oeil au script Pokemon, pour savoir quelles informations sont disponibles (attr_accessor et attr_reader), et à la rubrique Script : Traitement d'un Pokémon.
Pour simplifier la chose, certaines fonctions ont été programmées :
pokemon_numero(index)
index est l'index du Pokémon dans votre équipe.
Cette fonction renvoie un objet de classe Pokemon qui correspond au Pokémon sélectionné et est l'équivalent de la commande plus haut.
pokemon_possede(id)
id est à remplacer par le numéro du Pokémon, ou son nom en majsucule, entre guillemets.
Cette fonction renvoie true, si le Pokémon spécifié est dans l'équipe, ou false sinon.
Exemple: en conditions par script, écrivez
pokemon_possede("LEVIATOR")
# si vous voulez que quelque chose s'enclenche si LEVIATOR est dans l'équipe.
pokemon_index(id)
id est à remplacer par le numéro du Pokémon, ou son nom en majsucule, entre guillemets.
Cette fonction renvoie l'index du Pokémon spécifié par id si celui ci est dans l'équipe. Renvoie -1 si le Pokémon n'est pas présent. Peut poser quelques ambiguitées si un même Pokémon est présent plusieurs fois dans l'équipe. Dans ce cas, l'index renvoyé est celui du mieux placé.
Pour les exemples en début de pragraphe, voici la démarche à suivre :
- Une porte mystérieuse vous laisse passer si vous possédez un OBALIE en première place, et un RACAILLOU en 6ème place.
Dans Conditions par script
pokemon_numero(0).name == "OBALIE" and pokemon_numero(5).name == "RACAILLOU"
- La présence d'un PIKACHU dans votre équipe active les turbines d'une centrale électrique.
Dans Conditions par script
pokemon_possede("PIKACHU")
- Vous entrez dans un volcan et tous les Pokémons de type Glace de votre équipe tombent K.O.
Dans Insérer un script
for pokemon in $pokemon_party.actors
if pokemon.type_ice?
pokemon.hp = 0
end
end
Vous désirez faire du traitement sur les Pokémons de votre équipe, mais cette fois-ci, c'est le joueur qui décide sur quel Pokémon. Par exemple, un vieillard exige que vous lui montrez un ONIX, en sélectionnant le Pokémon dans votre équipe.
La commande à appeler est:
appel_menu_equipe
Le résultat est l'index du Pokémon dans votre équipe. L'index est (place du Pokémon - 1), c'est à dire que le premier Pokémon de votre équipe est à l'index 0, le 2ème est à l'index 1, ... le 6ème est à l'index 5. Si vous appuyez sur Echap, vous sortez du menu, et le résultat renvoyé est -1.
Le résultat est renvoyé par la fonction, mais aussi enregistré dans la variable N°4 INDEX POKEMON. Cette variable est essentielle car quelques d'évènements utilisent cette variable.
Vous pouvez ensuite faire du traitement sur le Pokémon sélectionné, avec la fonction:
pokemon_numero(index)
index est l'index du Pokémon dans votre équipe, c'est d'ailleurs le résultat renvoyé par la fonction précédente appel_menu_equipe.
Plus simple, la fonction :
pokemon_choisi
Est équivalente à pokemon_numero(variable n°4), c'est à dire le pokémon sélectionné par appel_menu_equipe.
Ces fonctions renvoient un objet de classe Pokemon qui correspond au Pokémon sélectionné. Vous pouvez donc "interroger" cet objet: .name, .level, etc... Jetez un oeil au script Pokemon, pour savoir quelles informations sont disponibles (attr_accessor et attr_reader), ou bien à la rubrique Script : Traitement du Pokémon.
La pension est entièrement décrite dans la classe Daycare définie dans le script DAYCARE. La Pension réserve la variable N°7 PENSION DATA pour son fonctionnement, veuillez donc ne pas y toucher.
Daycare réalise :
- La garde des Pokémons (maximum de 2)
- L'entraînement des Pokémons gardés (gain de niveau, remplace
les attaques, mais n'autorise pas l'évolution)
- La génération des Oeufs concus par 2 Pokémons gardés.
Cette section décrit les commandes de script utilisées pour réaliser l'évènement de type Pension.
Dans une fenêtre d'évènement (et partout ailleurs en général), toute commande est défine par Daycare.nom_de_methode.
Daycare.breed_male
Constitue le "casier" d'un Pokémon. Renvoie un objet de classe Pokemon, ou nil si il n'y a pas de Pokémon dans cet espace
Daycare.breed_female
Constitue le "casier" d'un Pokémon. Renvoie un objet de classe Pokemon, ou nil si il n'y a pas de Pokémon dans cet espace
Daycare.breed_egg
Constitue le "casier" d'un Oeuf. Renvoie un objet de classe Pokemon, ou nil si il n'y a pas d'Oeuf dans cet espace
Daycare.set_breed_male(pokemon)
Enregistre un Pokémon dans le casier "breed_male". pokemon est un objet de classe Pokemon. Mettez nil pour effacer la case.
Daycare.set_breed_female(pokemon)
Enregistre un Pokémon dans le casier "breed_female". pokemon est un objet de classe Pokemon. Mettez nil pour effacer la case.
Daycare.set_breed_egg(pokemon)
Enregistre un Pokémon dans le casier "breed_egg". pokemon est un objet de classe Pokemon. Mettez nil pour effacer la case. Notez que ce n'est pas nécessairement un oeuf...
Daycare.sequence
Cette méthode gère le gain d'expérience des Pokémons en Pension ainsi que la génération des Oeufs de Pokémons.
Comme dans tout Pokémon qui se respecte, un professeur se débrouille pour que vous trouviez un Pokémon (il vous le donne, ou il se fait attaquer, ou vous lui "volez" un Pokémon malencontreusement laissé dans une valise à votre portée et que ceci fait partie de son plan). Vous pouvez aussi le faire.
Dans un évènement, au moment d'ajouter un Pokémon dans votre équipe, utilisez simplement la commande Insérez un script:
ajouter_pokemon(id, niveau, shiny = false)
Où id est à remplacer par l'ID du Pokémon que vous souhaitez ajouter, OU le nom du Pokémon en majuscule, entre guillemets. niveau à remplacer par le niveau du Pokémon compris entre 1 et le niveau Maximum défini par MAX_LEVEL. shiny est un paramètre optionnel. Si vous le spécifiez en true, le Pokémon sera shiny.
Exemple :
ajouter_pokemon(1, 5)
# Ajoute à l'équipe un BULBIZARRE de niveau 5. Il a 1 chance sur 8192 d'être Shiny
# (taux par défaut).
ajouter_pokemon("BULBIZARRE", 5, false)
# Donne le même résultat.
ajouter_pokemon(1, 5, true)
# Ajoute un BULBIZARRE forcément Shiny.
Une autre commande est plus adaptée si vous choississez d'ajouter un Pokémon en ayant la possibilité de le renommer.
ajouter_et_nommer_pokemon(id, niveau, shiny = false)
Cependant, ces commandes n'ajoutent un Pokémon que si votre équipe dispose d'une place libre. Si vous voulez ajouter un Pokémon dans l'équipe, et dans le cas échéant, que le Pokémon soit redirigé vers le PC de stockage, utilisez la commande :
ajouter_stocker_pokemon(id, niveau, shiny = false)
Dans le cas ou vous voulez directement ajouter un Pokémon dans le PC de stockage, utilisez :
stocker_pokemon(id, niveau, shiny = false)
Pour ajouter un Pokémon qui possède des paramètres plus complexes, vous pouvez optez pour la méthode suivante :
ajouter_pokemon_param( hash )
Ou hash est de la forme :
{ "ID" => A, "NV" => B, "OBJ" => C, "MOVE" => ["ATK1", "ATK2", "ATK3", "ATK4"], "STAT" => [HP, AT, DF, VI, AS, DS], "GR" => D, "SHINY" => E, "FORM" => F }
A est à remplacer par l'ID du Pokémon, ou le nom du Pokémon,
en majuscules, entre guillemets (ID obligatoire)
B est à remplacer par le niveau du Pokémon
(NV obligatoire)
C est à remplacer par l'ID de l'objet tenu (optionnel)
D est à remplacer par "F"
pour une Femelle, "M" pour un Male, ou "I"
pour un genre Indéfini. (optionnel)
E est à remplacer par true
ou false en fonction du caractère Shiny. (optionnel)
F est à remplacer par le numéro de la forme
du Pokémon (attribut .form) (optionnel)
"ATKx" est à remplacer par le nom de la
x-ème attaque du Pokémon, en majuscule et veuillez conserver
les guillemets autour du nom. (optionnel)
HP, AT, DF, VI, AS, DS sont à remplacer par les DV
du Pokémon, compris entre 0 (faible) et 31 (fort) (optionnel)
Si vous spécifiez le moveset du Pokémon, l'idéal est d'écrire
complètement le moveset (spécifier les 4 attaques) pour éviter
les mauvaises surprises. Vous pouvez spécifier des attaques que le Pokémon
n'apprend pas habituellement.
Tappez "AUCUN" à la place de "ATKx"
si vous voulez effacer l'attaque à la place numéro x.
Si vous ne voulez pas changer l'attaque à la place x,
écrivez nil à la place de "ATKx"
(nil sans les guillemets).
Exemple : Je veux spécifier au 3ème Pokémon de l'équipe adverse, que le Pokémon est au niveau 40, et je veux régler son moveset de la sorte : LANCE-FLAMME, SEISME, VOL, et je ne veux pas changer sa dernière attaque ( = ca sera une attaque qu'il apprend naturellement). J'inscris donc à la place de N3, le morceau suivant :
{ "NV" => 40, "MOVE" => ["LANCE-FLAMME", "SEISME", "VOL", nil] }
Les DV sont des facteurs qui indiquent la puissance du Pokémon, compris
entre 0 et 31. Un Pokémon ayant 31 dans tous ses DV est le plus fort
de tous les pokémons du même type. Si vous spécifiez les
DV, vous devez spécifier TOUS les DV.
HP: DV point de vie
AT: DV attaque
DF: DV défense
VI: DV vitesse
AS: DV attaque spéciale
DS: DV défense spéciale
Si vous voulez laisser une part de hasard sur un certain DV, tappez rand(32)
à la place du DV.
Vous aurez parfois besoin d'enlever un Pokémon de votre équipe : une livraison de Pokémon par exemple, ou un échange.
Pour cela, plusieurs commandes sont maintenant disponibles :
retirer_pokemon(id)
Où id est à remplacer par l'ID du Pokémon que vous souhaitez ajouter, OU le nom du Pokémon en majuscule, entre guillemets. Si un Pokémon est trouvé, il sera supprimé de l'équipe. Si plusieurs Pokémons de la même espèce sont dans l'équipe, seul le mieux placé sera supprimé. Si aucun Pokémon ne correspond à id, il ne se passera rien.
retirer_pokemon_index(index)
Où index est à remplacer par l'index du Pokémon dans l'équipe.
Vous voulez enseigner une Capacité à un Pokémon. 4 méthodes :
A - Pour un Pokémon de l'équipe, il est possible d'utiliser la commande Ajouter/Retirer une compétence.
B - Vous pouvez soit créer une nouvelle CT/CS, auquel cas regardez les rubriques associées ( Créer une nouvelle CT et Créer une nouvelle CS ). Le joueur devra utiliser la capsule pour enseigner l'attaque à un Pokémon.
C - Vous pouvez aussi utiliser la commande Insérer un script à un objet de classe Pokemon:
enseigner_capacite(pokemon, skill_id)
pokemon est un objet de classe Pokemon, skill_id est à remplacer par l'ID de la compétence, ou le nom de la compétence en majuscule, entre guillemets.
Cette fonction permet d'enseigner une capacité à un Pokémon,
"comme si le Pokémon apprenait cette nouvelle capacité naturellement".
C'est-à-dire, si il dispose de moins de 4 capacités, la nouvelle
attaque sera apprise; si il dispose de 4 capacités, le jeu va demander
au joueur de remplacer la Capacité qu'il souhaite.
La fonction renvoie true si la capacité a été
apprise, false sinon (refus d'apprendre, ou capacité
déjà apprise).
Exemple:
Enseigner ECRAS'FACE au premier Pokémon de l'équipe :
enseigner_capacite(pokemon_numero(0), 1)
Enseigner FLASH à un PIKACHU de l'équipe :
enseigner_capacité(pokemon_numero(pokemon_index("PIKACHU")), "FLASH")
Attention! La capacité est enseignée que le Pokémon puisse vraiment l'apprendre ou non!
D - (Méhode bricolage) Si vous voulez spécifiez les Pokémons qui peuvent l'apprendre, il faut créer une CT/CS associée en suivant la méthode indiquée, puis utiliser la commande:
appliquer_objet(id, pokemon = nil)
id est à remplacer par l'ID de l'objet CT/CS, ou bien son nom en majuscule entre guillemets.
pokemon est un objet de classe Pokemon, paramètre optionnel : si vous ne spécifiez pas ce paramètre, un menu de sélection du Pokémon s'ouvre et permet de choisir dans l'équipe qui va apprendre la capacité. Si vous spécifiez le paramètre, la capsule sera enseignée au Pokémon si il peut l'apprendre. Dans ce cas ce Pokémon n'est pas nécessairement un Pokémon de l'équipe.
La fonction renvoie true si l'objet a été utilisé, false sinon. La fonction ne consomme pas d'objet, elle ne fait qu'imiter l'utilisation de l'objet comme si vous l'aviez dans votre inventaire. (Plus de détails sur cette fonction dans une autre rubrique).
Exemple:
utiliser_objet( 142 )
# Utilise l'item 142, qui est CT25-FATAL-FOUDRE : Demande au joueur de sélectionner
# un Pokémon et enseigne le contenu de la CT25, FATAL-FOUDRE.
utiliser_objet( 142, pokemon_numero(0) )
# Utilise si permis l'item 142 au 1er Pokémon de l'équipe. Si le 1er Pokémon
# ne peut pas apprendre FATAL-FOUDRE, il ne se passera rien.
A la capture d'un Pokémon, PSP se charge de vous demander si vous voulez renommer le Pokémon. Par contre, si vous souhaitez renommer le Pokémon à l'extérieur (par exemple, par un PNJ), la commande à utiliser est :
name_pokemon( pokemon )
pokemon est à remplacer par un objet de classe Pokemon.
Si le Pokémon est dans votre équipe, vous pouvez utilisez la commande :
name_pokemon( pokemon_numero( index ) )
index est à remplacer par l'index du Pokémon dans votre équipe (index = place du Pokémon - 1). Par exemple, si vous souhaitez renommer le 3ème Pokémon de votre équipe, il faut écrire:
name_pokemon( pokemon_numero( 2 ) )
# Car... index = place du Pokémon - 1 = 3 - 1
Une commande d'évènement, Modifier le surnom d'un Pokémon, peut effectuer cette tache également, mais elle n'est que pour les Pokémons de l'équipe.
En pratique, si vous créez un PNJ qui puisse renommer les Pokémons, vous utiliserez
appel_menu_equipe
Qui entrera l'index du Pokémon sélectionné dans la variable N°4 INDEX POKEMON, puis vous ferez en sorte d'appeler:
name_pokemon( pokemon_numero( var(4) ) )
Ou bien, d'utiliser la commande Modifier le surnom d'un Pokémon.
Et le PNJ sera fait. Voici le code en entier:
Note: Le nom que vous avez tappé est enregistré dans \P[1]. Le vrai nom du Pokémon est enregistré dans \P[0]. Tappez \P[1] et \P[0] dans une boîte de message pour afficher le nom.
Dans un évènement, avec Insérez un script :
ajouter_oeuf(id)
id est à remplacer par l'ID du Pokémon ou le nom du Pokémon, entre guillemets, en majuscule.
L'oeuf sera ajouté si il y a de la place dans l'équipe, et le Pokémon qui naît est celui spécifié par id.
ajouter_oeuf(mere, pere)
mere et pere sont à remplacer par un objet de class Pokemon.
L'oeuf sera généré automatiquement et ajouté à l'équipe si il existe de la place.
Il s'agit ici d'un descriptif des différents paramètres d'un Pokémon, incarnés par les attr_accessor/reader que vous auriez pu croiser dans le script Pokemon. Ces paramètres sont très utiles. Voici donc une liste des paramètres accessibles.
Petit topo pour les noms-scripteurs:
Sachez que pour entrer une valeur dans la variable de numéro NUM,
vous devez faire Insérer un script:
var(NUM) = valeur
$game_variables[NUM] = valeur
Sachez que pour récupérer l'info sur un Pokémon dans une équipe, vous pouvez faire:
$pokemon_party.actors[index].fonction
# ou bien
pokemon_numero(index).fonction
# ou bien plus généralement:
objet_de_classe_Pokemon.fonctionindex est l'index du Pokémon dans votre équipe.
fonction est à remplacer par un des suffixes suivants (toute la liste).
Voici une liste non exhaustive des paramètres possibles, qu'il faut appeler par pokemon.fonction où fonction est à remplacer par ces paramètres. D'abord, les informations générales (par attr_accessor, donc modifiables, ou attr_reader, donc non modifiables).
id : ID du Pokémon
id_bis : ID secondaire du Pokémon
name : Nom du Pokémon (string)
given_name : Surnom du Pokémon (string)
level : Niveau
exp : Expérience
hp : PV
max_hp : PV Max
atk : Attaque
dfe : Défense
spd : Vitesse
ats : Attaque Spéciale
dfs : Défense Spéciale
type1 : Type 1, représenté par son numéro (voir Table des types)
type2 : Type 2, représenté par son numéro (voir Table des types)
status : Le statut du Pokémon, représenté par son numéro (voir Table des types)
gender : Genre: 0 = sans genre, 1 = male, 2 = femelle
shiny : Shiny (true ou false)
item_hold : ID de l'objet tenu.
loyalty : Bonheur, loyauté (de min=0 à max=255)
form : le numéro de la forme du Pokémon
Des fonctions qui renvoient des informations utiles :
dead? : Le Pokémon est-il mort?
party_index : Renvoie l'index du Pokémon dans l'équipe. nil si il n'est pas dans l'équipe.
next_exp : Expérience manquante pour aller au prochain niveau
male? : renvoie true si le Pokémon est mâle
female? : renvoie true si le Pokémon est femelle
genderless? : renvoie true si le Pokémon est sans genre
type_normal? : De type NORMAL?
type_feu? : De type FEU?
type_eau? : De type EAU?
type_electric? : De type ELECTRIK?
type_plante? : De type PLANTE?
type_glace? : De type GLACE?
type_combat? : De type COMBAT?
type_poison? : De type POISON?
type_sol? : De type SOL?
type_vol? : De type VOL?
type_psy? : De type PSY?
type_insect? : De type INSECTE?
type_roche? : De type ROCHE?
type_spectre : De type SPECTRE?
type_dragon? : De type DRAGON?
type_acier? : De type ACIER?
type_tenebres? : De type TENEBRES?
Les fonctions/informations concernant la modification des PV
kill : rend KO le Pokémon
remove_hp(valeur) : enlève valeur PV
add_hp(valeur) : ajoute valeur PV
refill_hp : soigne les PV
refill : soigne le statut, les PV, et les PP.
Les fonctions/informations concernant le statut :
cure : Soigne le statut du Pokémon
poisened? : Empoisonné?
paralyzed? : Paralysé?
burn? : Brulé?
asleep? : Endormi?
frozen? : Gelé?
confused? : Confus? (En combat uniquement)
flinch? : Appeuré? (En combat uniquement)
toxic? : Sous l'effet de Toxik?
status_poison(forcer = false) : empoisonne le Pokémon si il n'a pas un autre statut ou forcer = true.
status_paralyze(forcer = false) : paralyse le Pokémon si il n'a pas un autre statut ou forcer = true.
status_burn(forcer = false) : brûle le Pokémon si il n'a pas un autre statut ou forcer = true.
status_sleep(forcer = false) : endort le Pokémon si il n'a pas un autre statut ou forcer = true.
status_frozen(forcer = false) : gèle le Pokémon si il n'a pas un autre statut ou forcer = true.
status_toxic(forcer = false) : empoisonne le Pokémon si il n'a pas un autre statut ou forcer = true.
status_confuse : rend confus le Pokémon (en combat uniquement).
status_flinch : effraie le Pokémon (en combat uniquement).
Des fonctions concernant les attaques du Pokémon :
skill_selection : demande au joueur de sélectionner un skill sur le pokemon (objet de classe Pokemon) de son choix. Le résultat renvoyé est l'index de l'attaque, ou -1 si aucune capacité n'a été sélectionnée (en appuyant sur echap). Le résultat est enregistré dans la variable n°5 INDEX SKILL.
skills : Renvoie la liste des IDs des capacités apprises.
skill_learnt?(skill_id) : Le Pokémon connaît-t-il la capacité d'ID skill_id? Vous pouvez aussi tapper le nom de la capacité, en majuscule, entre guillemets.
learn_skill(skill_id) : Enseigne une capacité d'ID skill_id si il reste de la place (sans message d'avertissement). Vous pouvez aussi tapper le nom de la capacité, en majuscule, entre guillemets. Si vous voulez enseigner une capacité au détriment d'une autre, utilisez la commande replace_skill_index (cf la suite). Vous pouvez enseigner l'attaque même si le Pokémon n'est pas censé la connaître (genre enseigner SURF à un PIKACHU). Je vous conseille aussi d'aller faire un tour du côté de la rubrique Enseigner une capacité à un Pokémon.
forget_skill_index(index) : Oublie/Efface la capacité située à la place index+1. (1ère place: index = 0)
forget_skill(num) : Oublie/Efface la capacité de numéro ID num. Vous pouvez remplacer num par le nom de la capacité en majuscules, entre guillemets.replace_skill_index(index, id) : Remplace la capacité placée en index+1 position par a capacité dont l'ID est spécifié par id. Vous pouvez remplacer id par le nom de la capacité en majuscules, entre guillemets.
convert_skill(id_ancien, id_nouveau) : Converti une capacité d'ID id_ancien en une capacité d'ID id_nouveau au sein des attaques du Pokémon. Remplacable par les noms des capacités en majuscule, entre guillemets.
refill_skill(index, valeur = 99) : Ajoute valeur (négatif posible) points aux PP de la capacité placée en (index+1) position. (Exemple: 'soigner' complètement la 1ère attaque: pokemon.refill_skill( 0 ))
(Exemple: 'soigner' de 5 pts la 3ème attaque: pokemon.refill_skill( 2 , 5 ))
Et enfin d'autres fonctions de rentrant pas dans des catégories spécifiques:
raise_loyalty : augmente le bonheur du Pokémon selon un barème défini
raise_loyalty(valeur) : augmente le bonheur du Pokémon de valeur points.
drop_loyalty(valeur = 1) : diminue le bonheur du Pokémon de valeur points.
total_ev : renvoie le total des EV du Pokémon.
Pour plus de détails sur la structure de la classe Pokemon, regardez la rubrique Information sur les scripts de PSP.
Un objet de classe Pokemon dispose d'une variable appelée @skills_set, comprenant la liste des 4 capacités d'un Pokémon, chaque capacité étant un objet de classe Skill. Cet objet est décrit dans le script Pokemon_Skill.
Quelques commandes ont été programmées pour faire du traitement sur ces attaques. Dans les lignes suivantes, pokemon désigne un objet de classe Pokemon; vous pourez donc le remplacer, par exemple, par pokemon_numero(index).
skill_selection(pokemon)
Analogue à la fonction appel_menu_equipe, il demande au joueur de sélectionner un skill sur le pokemon (objet de classe Pokemon) de son choix. Ne fera rien si pokemon est nil. Cette fonction diffère de pokemon.skill_selection : Elle n'est pas à appliquer sur un objet de classe Pokemon, mais à appeler directement dans Insérer un script. Vous pouvez donc faire un combo skill_selection(pokemon_numero(appel_menu_equipe)) qui demande au joueur l'index de la capacité sur un Pokémon de son équipe choisi par le joueur. Le résultat renvoyé est l'index de l'attaque, ou -1 si aucune capacité n'a été sélectionnée (en appuyant sur echap). Le résultat est enregistré dans la variable n°5 INDEX SKILL.
pokemon.skills_set[index_skill]
pokemon.ss(index_skill)index_skill à remplacer par l'index de la capacité dans le moveset du Pokémon (1er skill = 0, 2eme skill = 1, etc...). C'est le résultat de skill_selection.
Est la fonction qui permet de renvoyer l'objet de classe Skill, et doit être traité avec les fonctions suivantes (un exemple est donné à la fin de la liste.
Voici la liste des paramètres utiles (Regardez le script Pokemon_Skill pour plus de fonctions):
name : Renvoie le nom de la capacité, en majuscules, de type string
id : Renvoie l'ID de la capacité
type : Renvoie le numéro du type (cf Table des types)
description : Renvoie la description de la capacité
power : Renvoie la puissance de la capacité
accuracy : Renvoie la précision de la capacité, de 0 à 100
type_normal? : De type NORMAL?
type_fire? : De type FEU?
type_water? : De type EAU?
type_electric? : De type ELECTRIK?
type_grass? : De type PLANTE?
type_ice? : De type GLACE?
type_fighting? : De type COMBAT?
type_poison? : De type POISON?
type_ground? : De type SOL?
type_fly? : De type VOL?
type_psy? : De type PSY?
type_insect? : De type INSECTE?
type_rock? : De type ROCHE?
type_ghost? : De type SPECTRE?
type_dragon? : De type DRAGON?
type_steel? : De type ACIER?
type_dark? : De type TENEBRES?
La liste des fonctions utiles :
refill : remplit les PP au maximum. Il est l'équivalent de pokemon.refill_skill(index, valeur)
set_points(valeur) : règle le nombre de PP à valeur points.
add_ppmax(valeur) : augmente les PP max de valeur points.
define_ppmax(valeur) : règle les PP max à valeur points.
raise_ppmax : augmente les PP max selon un barème équilibré.
use : enlève un point aux PP
Exemple:
Un PNJ vous demande de lui montrer un Pokémon qui possède une
capacité de type Glace que vous choisissez. Ce PNJ va augmenter gracieusement
les PP max de cette attaque.
Vous devrez donc sélectionner le Pokémon par appel_menu_equipe,
puis sélectionner le skill par skill_selection,
et enfin vérifier que le skill choisi est bien de type Glace, avant d'augmenter
ses PP. Par étape, cela donne dans Insérer un script:
pokemon_choisi = pokemon_numero(appel_menu_equipe)
# Pour la sélection de l'objet de classe Pokemon situé dans l'équipe
index_skill = skill_selection(pokemon_choisi)
# Pour la selection du skill que le joueur souhaite augmenter.
# Si le joueur n'a pas choisi de pokémon, index_skill = -1
if index_skill != -1
# Si un skill a bien été sélectionné (Rappel: Ne pas sélectionner un pokemon ou skill renvoie -1)
--if pokemon_choisi.ss(index_skill).type_ice?
--# Si le skill est bien de type Glace
----pokemon_choisi.ss(index_skill).raise_ppmax
----# On augmente ses PP max.
--end
end
Une méthode alternative qui inclus des messages et l'utilisation des variables réservées :
var(4) a enregistré l'index du Pokémon sélectionné
var(5) a enregistré l'index de la capacité sélectionnée
Lors de la création de l'attaque ou de l'objet, réservez un évènement en commun spécialement pour. Dans la BDD, onglet Evènement en commun, modifiez cet évènement en Déclenchement par Appel.
Une série de conditions scriptées sont utiles à la création d'un évènement en commun, à l'usage d'une CS ou d'un objet par exemple. Lorsque l'attaque est lancée par le menu ou l'objet est utilisé par le sac, la variable $on_map_call est activée automatiquement.
Pensez donc à la désactiver par Insérer un script:
$on_map_call = false
Suivie des instructions que vous souhaitez réaliser. A vous de compliquer les conditions si vous souhaitez réaliser des choses plus complexes. Sachez juste qu'à l'appel de la commande, $on_map_call est activé (= true) et qu'il faut la désactiver.
(Note: $on_map_call est utilisé pour indiquer que l'évènement a été appelé par le Menu. Certains évènements en commun que j'ai programmé, pour les CS FORCE, SURF, etc... sont également appelés mais pas toujours par le Menu. Il fallait donc distinguer un appel par le menu, et un appel par un autre évènement, d'ou la nécessité d'introduire $on_map_call.)
Buisson qui peut être coupé par la CS Coupe : Créez un évènement appelé BUISSON, qui appelle l'évènement en commun COUPE, en Déclenchement par la touche Action.
Rocher qui peut être détruit par la CS ECLATE ROC : Créez un évènement appelé ROC, qui appelle l'évènement en commun ECLATE-ROC, en Déclenchement par la touche Action.
Autre : Copiez collez l'évènement en commun COUPE. Il suffit de remplacer COUPE par NOM_ATTAQUE, BUISSON par NOM_OBJET, et changer ici et là le texte. L'objet destructible que vous créez doit porter comme nom NOM_OBJET.
Objet qui peut être poussé par la CS Force: Créez un évènement, qui appelle l'évènement en commun FORCE, en Déclenchement par la touche Action.
Chaque chipset dispose de 8 "tags terrains", qu'il est possible de régler via la BDD dans l'onglet Gestion de chipsets, option Terrain. Les tags terrains numérotés de 1 à 7 servent à régler les Pokémons Sauvages qu'il est possible de rencontrer sur les cases de même numéro. Chaque Tag constitue un groupe de Pokémons possible par map. Le Tag 0 est neutre, il est impossible d'y rencontrer des Pokémons.
Chaque groupe de Pokémons sauvages est donc associé à un Tag Terrain (de 1 à 7). Prenons un groupe associé au Tag numéro 4. Sur les maps où ce groupe est présent (à travers les réglages Propriétés de la carte), les cases de la map qui portent le même numéro de Tag que ce groupe seront des cases où il est possible de rencontrer les Pokémons de ce groupe.
Pour régler un groupe de Pokémons Sauvages rencontrables, allez dans la BDD, onglet Rencontres et Dresseurs (Groupes de monstres). (F9 si vous éditez votre projet)
1 - Créez un groupe de monstres.
2 - Ajoutez les Pokémons que vous souhaitez dans ce groupe. Notez que
chaque Pokémon porte un numéro, une place dans le groupe, de 1
à 8, et qui dépend de l'ordre dans lequel vous les ajoutez. Le
1er Pokémon ajouté porte le n°1, le 2ème porte le n°
2, etc...
3 - Nommez le groupe: Le nom suit une syntaxe bien précise:
X/NOM
X est à remplacer par le numéro du Tag terrain
qui sera associé au groupe (de 1 à 7).
/ est un symbole obligatoire.
NOM est à remplacer par un nom que vous choisissez
(veuillez ne pas utiliser / dans le nom).
4 - Réglez les niveaux des Pokémons, ainsi que leur rareté locale, par 2 méthodes:
Méthode 1: Par script
Insérer un script dans les évènements de combat et suivez la syntaxe suivante DANS L'ORDRE:E
[N1, R1]
[N2, R2]
etc...
[Nn, Rn]E est l'écart de niveau possible lorsque vous rencontrez le Pokémon, par rapport au niveau que vous spécifiez (cf la suite).
Les lignes suivantes sont des nombres entre crochets:
N1 est le niveau du 1er Pokémon ajouté, R1 est la rareté locale du 1er Pokémon ajouté.
N2 est le niveau du 2eme Pokémon ajouté, R2 est la rareté locale du 2eme Pokémon ajouté.
Et ainsi de suite jusqu'au n-ième Pokémon que vous avez ajouté.
L'écart est compris entre 1 et 100 (ou le niveau maximal), le niveau est compris entre 1 et 100 (ou le niveau maximal), et la rareté locale est un nombre entre 1 et 100.
La rareté locale est un indice qui permet de dire si un Pokémon est rare ou pas dans la zone. C'est un pourcentage de rencontre. Si vous spécifiez R1 = 30, vous aurez 30% de chance qu'un Pokémon rencontré dans la zone soit le 1er Pokémon du groupe. Spécifiez R2 = 5 et vous aurez 5% de chance que le Pokémon rencontré soit le 2ème du groupe.
La rareté locale est optionnelle. Si vous ne l'indiquez pas, le jeu se charge de calculer un taux de rencontre moyen. Dans ce cas, vous devez indiquer seulement le niveau de cette manière: [Nn].E
[N1]
[N2]
etc...
[Nn, Rn]La somme des raretés locales peut différer de 100 sans problème.
Méthode 2: Par évènement
L'écart de niveau se règle par la commande:
-(Sauvage) Ecart de niveau ( Modifier les PV d'un monstre )
Le niveau d'un Pokémon sauvage se règle par la commande:
-(Sauvage/Dresseur) Niveau ( Modifier les PM d'un monstre )
La rareté locale se règle par la commande:
-(Sauvage) Rareté locale ( Blesser Equipe/monstre )
5 - Dans la BDD, onglet Gestion de Chipsets, assurez vous d'avoir réglé
les Tag Terrains des cases concernées (hautes herbes, sol, etc...). Si
vous avez crée un groupe avec le Tag 1 (le nom commence par 1), alors
les Pokémons apparaîtront dans les cases sont le numéro
est 1.
6 - Dans les Propriétés de la carte (clic droit sur le
nom de la carte), ajoutez le groupe de monstre qui vient d'être créé.
En haut : Gestion du Chipset, réglage des Tag Terrain
En bas : Propriétés de la carte
Un groupe de monstre associé au Tag n (reconnaissable par l'entête que vous aurez écrit) sera rencontré sur les cases de Tag n.
Note : Les zones aquatiques accessibles par SURF portent le Tag numéro 7. Si vous voulez faire des rencontres aléatoires dans ces zones là, suivez la méthode avec le Tag 7.
7 - C'est terminé. Vous pouvez à présent essayer votre groupe de combat.
Si vous faites un évènement qui soit un Pokémon sur la map, vous pouvez choisir de démarrer le combat contre lui. C'est le cas par exemple du RONFLEX des versions Rouge et Bleu qui bloquait un chemin. Ce Pokémon était Statique et se voyait sur la carte. De même, pour une raison quelconque, vous souhaiteriez lancer un combat contre un Pokémon spécifique. Des Pokéballs qui sont en fait des VOLTORBES, ou alors une porte gardé par des FANTOMINUS... et j'en passe. Vous avez donc besoin de lancer un combat ponctuel.
Dans un évènement, Insérer un script, une commande de script permet de lancer un combat contre un Pokémon sauvage de cette manière:
demarrer_combat(id, niveau, shiny = false, ia = false)
id est à remplacer par le numéro d'ID du Pokémon sauvage, OU le nom du Pokémon en majuscule, entre guillemets.
niveau est à remplacer par le niveau du Pokémon sauvage. Vous pouvez bien sur entrer une variable ($game_variable[XXX] ou var(XXX)).
shiny est un paramètre optionnel : remplacez le par true si vous voulez que le Pokémon soit forcément un Shiny. Par défaut, si vous ne spécifiez pas shiny, il est réglé par défaut en false.
ia est un paramètre optionnel : il active l'intelligence artificielle pour le Pokémon. Par défaut, si vous ne spécifiez pas ia, il est réglé en false. Sachez tout de même que si vous réglez le paramètre ia, vous devez spécifier shiny.Exemple:
# Un RONFLEX de niveau 30 sur la route:
demarrer_combat(143, 30)
# Un LEVIATOR Shiny de niveau 40 sur un lac:
demarrer_combat("LEVIATOR", 40, true)
# Un DRACAUFEU de niveau 60 non forcément Shiny mais
# disposant de l'IA:
demarrer_combat(6, 60, false, true)
Pour savoir comment créer l'évènement, référez vous à la rubrique Créer un évènement de combat.
La création d'un Pokémon Légendaire peut poser une difficulté si celui ci suit des règles spéciales.
La plupart des Légendaires sont statiques: ils se régénèrent si vous avez fui, ou avez été vaincu. Pour cela, il faut regarder la rubrique précédente. Mais le défaut de la technique précédent est que le Pokémon généré est tout le temps différent. Si par exemple, vous voyez un SULFURA Shiny (dont vous n'avez pas forcé le caractère Shiny, i.e. le fruit du pur hasard) et que vous avez été vaincu, la 2ème fois que vous l'affronterez, il ne sera plus forcément Shiny. De même, il se peut qu'un Pokémon statique soit Male, puis Femelle à la 2ème rencontre.
Pour cela, un outil que j'ai inclus est la création et le stockage en mémoire du Pokémon. Lors de la première rencontre, vous créez le Pokémon : il est généré une fois pour toute. Ensuite, les fois suivantes où vous rencontrez ce Pokémon, il sera le même.
La structure utilisée est $existing_pokemon, qui est une liste dont les objets sont de classe Pokemon. Pour les non-scripteurs, pensez que les Pokémons sont enregistrés dans un casier portant un numéro. Certaines commandes pour les non scripteurs sont programmées, par Insérer un script, ou dans les Conditions par Script.
La commande suivante permet d'enregistrer un Pokémon dans un casier spécifique. Elle crèe un nouveau Pokémon d'abord, et le met dans le casier. Vous pourrez le ressortir plus tard.
enregistrer_pokemon(slot, id, niveau, shiny = false)
slot est à remplacer par un nombre qui est l'emplacement du Pokémon enregistré.
id est à remplacer par le numéro ID du Pokémon, OU son nom en majuscule, entre guillemets.
niveau est à remplacer par le niveau du Pokémon
shiny est un paramètre optionnel, à spécifier par true si le Pokémon est réglé en Shiny. Si le paramètre n'est pas spécifié, c'est false.Exemple:
enregistrer_pokemon(1, "SULFURA", 50)
# Enregistre un "SULFURA" dans le slot 1. Il n'est pas nécessairement Shiny.
enregistrer_pokemon(1, 130, 30, true)
# Enregistre un "LEVIATOR" (ID 130) dans le slot 1. Il est Shiny.Sachez que si le casier n'est pas vide, l'enregistrement ne se fait pas.
Pour inspecter/sortir un Pokémon d'un casier, vous pouvez faire
appel_pokemon(slot)
slot est à remplacer par un nombre qui est l'emplacement du Pokémon enregistré.
La méthode retourne un objet de class Pokemon, que vous pouvez traiter ultérieurement. Le Pokémon reste dans son casier.
Pour vérifier si un casier est vide, la ligne à écrire dans la condition par script est:
pokemon_existant?(slot)
slot est à remplacer par le numéro de l'emplacement.
Avec cette commande, vous pouvez par exemple, créer un Pokémon dans le slot 1 si le Pokémon n'existe pas encore. (Notez que la condition est not( pokemon_existant?(slot) ), qui se traduit "Si non ( pokemon_existant?(slot) )", c'est à dire si le slot est vide.)
Pour effacer un emplacement, la ligne a écrire dans Insérer un script est:
effacer_pokemon_existant(slot)
slot est à remplacer par le numéro de l'emplacement.
Pour démarrer le combat contre un Pokémon existant, il faut tapper la ligne suivante dans Insérer un script.
demarrer_combat_existant(appel_pokemon(slot), ia = false)
slot est à remplacer par le numéro de l'emplacement.
ia est un paramètre optionnel, à spécifier par true si vous voulez activer l'IA.Notez qu'il y a ici 2 fonctions:
appel_pokemon renvoie un objet de classe Pokemon (décrit plus haut).
demarrer_combat_existant demande en 1er argument un objet de classe Pokemon.
La création d'un Légendaire qui conserve ses paramètres nécessite donc d'enregistrer un Pokémon dans un slot, et d'appeler la ligne précédente pour démarrer un combat contre le Pokémon enregistré dans ce slot. Les dégâts occasionnés au combat resteront définitifs sur le Pokémon, que vous soyez vaincu ou que vous ayez fui.
Pour savoir comment créer l'évènement, référez vous à la rubrique Créer un évènement de combat.
Cette rubrique est commune à la création d'un Pokémon Statique, d'un Légendaire, ou d'un combat ponctuel contre un Pokémon Sauvage. Pour les combats contre les dresseurs, référez vous à la rubrique Dresseur adverse.
Elle concerne les subtilités de la création d'un évènement pour démarrer un combat.
Créez simplement votre évènement, et insérez la ligne de commande qui permet de lancer un combat. Vous avez vu demarrer_combat et demarrer_combat_existant.
Cette ligne lance donc le combat. La suite de l'évènement peut dépendre de ce que vous voulez faire: Changer une variable, afficher du texte, jouer des animations, etc... Sachez qu'à l'issue d'un combat, vous avez des variables qui vous indiquent si le combat contre un Pokémon a été gagné (c'est à dire que le Pokémon a été vaincu, ou capturé), perdu, ou que vous avez fui. Pour être utilisable, elles odivent être spécifiées dans les conditions par Script:
$battle_var.result_win # Vrai en cas de victoire
$battle_var.result_defeat # Vrai en cas de défaite
$battle_var.result_flee # Vrai en cas de fuite (la vôtre ou celle du Pokémon adverse)
La suite de l'évènement est exécuté en cas de victoire mais aussi de défaite ou de fuite! Dans l'exemple d'une victoire, vous voulez faire quelque chose de spécifique. Il faut donc mettre une condition qui n'exécute la suite des évènements que si le combat a pour issue une victoire. Pour cela, il faut mettre une condition par script :
$battle_var.result_win
Vous pouvez donc réaliser une condition qui enclenche, si le combat a été gagné (Pokémon vaincu ou capturé), l'activation d'un bouton, et qui fait disparaître l'event du Pokémon Légendaire par exemple. Dans le cas contraire, en cas de fuite ou de défaite, il ne se passerait rien.
On enregistre un "SULFURA" dans un casier, puis un démarre le combat contre ce Pokémon-casier. Si le combat est gagné, le message "Le SULFURA a été vaincu", et un interrupteur local est activé, d'ou la possibilité de passer à une autre page d'event. En cas de défaite ou de fuite, il ne se passe rien dans le cas présent. Il faudrait ajouter d'autres conditions.
Très important! En cas de défaite, le retour au Centre Pokémon est automatique, et l'évènement en commun N° 2 Event de retour se lance automatiquement ! Si vous mettez des instructions suite au combat en cas de défaite (avec une condition qui se réalise si $battle_var.result_defeat est vrai), celles ci vont s'exécuter. Par exemple, si vous faites :
Si vous avez perdu le combat, le message qui indique que vous avez été battu s'affichera alors que vous êtes au Centre Pokémon. Le contenu de Event de retour se lancera après ce message. Prenez des précautions.
Pour régler un Dresseur, allez dans la BDD, onglet Rencontres et Dresseurs ( Groupes de monstres ).
1 - Créez un groupe de monstres.
2 - Ajoutez les Pokémons que vous souhaitez au Dresseur, dans l'ordre
d'apparition. Notez que chaque Pokémon porte un numéro, une place
dans le groupe, de 1 à 6, et qui dépend de l'ordre dans lequel
vous les ajoutez. Le 1er Pokémon ajouté porte le n°1, le 2ème
porte le n° 2, etc... Pas plus de 6 Pokémons SVP.
3 - Nommez le groupe: Le nom suit une typographie bien précise:
T/CLASSE_Nom
T est l'indicateur que le groupe est un Dresseur. OBLIGATOIRE.
/ est un symbole obligatoire.
CLASSE est à remplacer par un nom que vous
choisissez (veuillez ne pas utiliser / dans le nom).
_ est un symbole obligatoire pour séparer la
classe du nom.
Nom est à remplacer par un nom que vous
choisissez (veuillez ne pas utiliser / dans le nom).
Si vous voulez lui donner un nom correspondant au nom d'un "héros"
(personnage crée), par exemple, un rival que vous nommez, utilisez à
la place de Nom la balise \N[X]
où X est l'ID du héros en question.
CLASSE correspond juste au "métier", au "type de dresseur", comme PECHEUR_David, ou FILLETTE_Julie.
4 - La suite des manipulations se fait dans l'encadré en bas apelé
Evènements de combat. Réglez l'apparence du Dresseur avec l'évènement
Modifier l'apparence du héros, champ Apparence en combat, comme
indiqué ci-dessus.
5 - Insérer un script, et suivez la syntaxe suivante, et DANS
L'ORDRE:
Dresseur
XXXX$
Texte_de_victoire_ligne_1
Texte_de_victoire_ligne_2
Texte_de_défaite_ligne_1
Texte_de_défaite_ligne_2Dresseur doit être écrit tel quel.
XXXX doit être remplacé par la quantité d'argent gagné au combat
Texte_de_victoire_ligne_1 et Texte_de_victoire_ligne_2 doivent être remplacé par du texte (sans guillemet), c'est le texte qui apparaît en cas de victoire. Laissez une ligne vide si vous n'écrivez rien.
Texte_de_défaite_ligne_1 et Texte_de_défaite_ligne_2 doivent être remplacé par du texte (sans guillemet), c'est le texte qui apparaît en cas de défaite. Laissez une ligne vide si vous n'écrivez rien.
Suivez l'exemple... En cas de victoire, "Tu est fort! Bravo" s'affiche. Le texte étant court, il ne tient que sur une ligne. Il faut donc laisser la 2ème ligne de texte de victoire vide. En cas de défaite, ce sont les 2 dernières lignes qui s'affichent.
6 - Dans le même encadré d'évènement de combat, insérez un évènement Insérer un script (un autre script), et suivez la syntaxe suivante, et DANS L'ORDRE:
Pokemon
N1
N2
N3
...
NnPokemon doit être écrit tel quel.
N1 est le niveau du 1er Pokémon du Dresseur, de 1 à 100 (ou niveau Max).
N2 est le niveau du 2eme Pokémon du Dresseur, de 1 à 100 (ou niveau Max).
Etc... jusqu'au n-ième Pokémon du Dresseur.
Si le dresseur a 5 Pokémons, vous entrerez 5 nombres après avoir écrit Pokemon.
OPTIONNEL : Pour une gestion avancée du Pokémon, la syntaxe est plus complexe. La ligne suivante est à entrer sur une seule ligne (d'où la necessité d'utiliser PSP_mod.exe) :
{ "NV" => A, "OBJ" => B, "MOVE" => ["ATK1", "ATK2", "ATK3", "ATK4"], "STAT" => [HP, AT, DF, VI, AS, DS], "GR" => C, "SHINY" => D, "FORM" => E}
A est à remplacer par le niveau du Pokémon (obligatoire)
B est à remplacer par l'ID de l'objet tenu (optionnel)
C est à remplacer par "F" pour une Femelle, "M" pour un Male, ou "I" pour un genre Indéfini.(optionnel)
D est à remplacer par true ou false en fonction du caractère Shiny. (optionnel)
E est à remplacer par le numéro de la forme du Pokémon (attribut .form) (optionnel)
"ATKx" est à remplacer par le nom de la x-ème attaque du Pokémon, en majuscule et veuillez conserver les guillemets autour du nom. (optionnel)
HP, AT, DF, VI, AS, DS sont à remplacer par les DV du Pokémon, compris entre 0 (faible) et 31 (fort) (optionnel)Si vous spécifiez le moveset du Pokémon, l'idéal est d'écrire complètement le moveset (spécifier les 4 attaques) pour éviter les mauvaises surprises. Vous pouvez spécifier des attaques que le Pokémon n'apprend pas habituellement.
Tappez "AUCUN" à la place de "ATKx" si vous voulez effacer l'attaque à la place numéro x.
Si vous ne voulez pas changer l'attaque à la place x, écrivez nil à la place de "ATKx" (nil sans les guillemets).Exemple : Je veux spécifier au 3ème Pokémon de l'équipe adverse, que le Pokémon est au niveau 40, et je veux régler son moveset de la sorte : LANCE-FLAMME, SEISME, VOL, et je ne veux pas changer sa dernière attaque ( = ca sera une attaque qu'il apprend naturellement). J'inscris donc à la place de N3, le morceau suivant :
{ "NV" => 40, "MOVE" => ["LANCE-FLAMME", "SEISME", "VOL", nil] }
Les DV sont des facteurs qui indiquent la puissance du Pokémon, compris entre 0 et 31. Un Pokémon ayant 31 dans tous ses DV est le plus fort de tous les pokémons du même type. Si vous spécifiez les DV, vous devez spécifier TOUS les DV.
HP: DV point de vie
AT: DV attaque
DF: DV défense
VI: DV vitesse
AS: DV attaque spéciale
DS: DV défense spéciale
Si vous voulez laisser une part de hasard sur un certain DV, tappez rand(32) à la place du DV.
Regardez bien les possibilités de cet exemple. La ligne pour le premier Pokémon est coupée car RMXP n'affiche pas toute la ligne. Mais les informations sont bien là.
7 - Le Dresseur est crée dans la BDD. Maintenant, créez un évènement sur la carte et réglez son apparence. Vous pouvez également lui spécifier un parcours (un garde qui patrouille?).
8 - Si vous voulez un dresseur qui n'attaque que quand vous lui parlez, réglez l'évènement (1ère page) en déclenchement Par la touche d'action. Et allez à l'étape suivante.
Si vous voulez que le Dresseur vous interpelle quand il vous voit, réglez l'évènement en de votre dresseur en Processus parallèle.
Insérez un évènement conditionnel, avec pour condition un script :
trainer_spotted(X)
X étant la distance à laquelle le dresseur vous repère.
De retour dans la fenêtre de l'évènement, insérez dans la condition un interupteur local comme dans l'exemple. (Dans l'exemple ci dessous, j'ai ajouté une petite animation)
Voici à quoi doit ressembler votre première page : (c'est un autre exemple)
Créez une 2ème page, comme ça:
Veuillez régler le déclenchement de la 2ème page en Démarrage automatique, déplacer l'évènement d'un nombre de cases suffisant pour approcher le joueur (3 dans l'exemple, puisqu'il apperçoit le héros à une distance max de 3 cases), et lancer le combat avec Démarrer un combat (plus de détails à la suite).
Notez qu'on désactive l'interrupteur local A avant de démarrer le combat. C'est obligatoire lorsque vous créez un dresseur qui vous interpelle, sinon il va vous interpeller en boucle en cas de victoire ou de défaite...
Continuez avec la suite.
9 - Mettez l'évènement Démarrer un combat (dans la 1ère page si c'est un dresseur à qui il faut parler pour le combattre, ou bien dans la 2ème page si vous apperçoit de loin), en ayant pris le soin de sélectionner le dresseur crée.
Sachez qu'il est possible d'autoriser la fuite pour un combat de Dresseur. Et qu'il est possible de spécifier des choix à faire en fonction de la victoire, fuite, ou défaite du joueur.
1er Cas: Si vous n'utilisez pas ces options (dans l'hypothèse donc que vous n'autorisez pas la fuite), la suite de l'évènement est exécuté en cas de victoire mais aussi de défaite ou de fuite!
Dans ce cas, soyez prudent et cohérent. En cas de victoire, la suite continue. En cas de défaite, vous êtes téléporté automatiquement au dernier Centre Pokémon, mais la suite de l'évènement s'exécute également!
Pour pallier ce problème, il faut utiliser la même méthode que pour un combat ponctuel contre un Pokémon sauvage. Vous pouvez spécifier des actions si le combat a été gagné, ou a été perdu. Dans le cas où vous voulez faire quelque chose si le combat a été gagné, utilisez une condition qui n'exécute la suite des évènements que si le combat a pour issue une victoire. Pour cela, il faut mettre une condition par script:
$battle_var.result_win
La suite dépend de ce que vous souhaitez faire. C'est un exemple qui est traité dans le paragraphe 10.
De cette manière, la fuite est interdite, et une défaite vous ramène automatiquement au Centre Pokémon sans message particulier (excepté le contenu de l'évènement en commun N°2 Event de retour). C'est la méthode régulière que vous devriez utiliser souvent.
Vous pouvez aussi utiliser $battle_var.result_defeat édans l'action conditionnelle si vous voulez faire quelque chose de particulier en cas de défaite (afficher un message par exemple).
2er Cas: Si vous voulez autoriser la fuite, utilisez l'option prévueà cet effet par RMXP :
En cas de défaite, vous serez ramené automatiquement au dernier Centre Pokémon / Point de retour avec l'évènement en commun N°2 Event de retour qui se lance. Les évènements contenus dans "En cas de victoire" et "En cas de fuite" s'exécuteront en fonction du résultat du match. Les évènements situés après l'embranchement s'exécuteront quelque soit l'issue du match, donc même en cas de défaite. Vous pouvez aussi faire usage des actions conditionnelles ($battle_var.result_win/defeat/flee).
3ème Cas: Vous voulez faire quelque chose de particulier en cas de défaite. Par exemple, le maître Pokémon après vous avoir battu vous félicitera pour votre tenacité, avant que vous ne retourniez au Centre Pokémon. Ou bien un combat dans votre scénario doit se terminer par une défaite et il ne faut pas que le joueur retourne au Centre Pokémon automatiquement.
Cochez la 2ème case, auquel cas vous resterez sur la map où vous êtes, devant le dresseur qui vous a battu. L'évènement en commun N°2 ne se lancera pas. Et surtout, vos Pokémons ne seront pas soignés. Donc pensez à soigner au moins un Pokémon d'une façon ou d'une autre avant qu'un autre combat se lance.
Vous pouvez bien sûr autoriser la fuite.
Bref, après ça, le Dresseur est crée.
Un petit récapitulatif de la 2ème page : (c'est un exemple)
10 - Si vous avez crée un Dresseur qui vous apperçoit à distance, Nous avions désactivé l'interrupteur A pour empêcher que le combat ne se relance tout seul. C'est valable pour une défaite et pour la victoire. Mais avec ça seulement, vous pourrez relancer le combat même si le dresseur a déjà été vaincu ! Vous aurez peut-être envie que le dresseur ne vous combatte plusn une fois que vous l'avez vaincu.
Comme vous l'avez vu dans cet exemple :
J'ai activé un interrupteur local B, pour signaler que le dresseur a été vaincu. Il faut impérativement créer une page d'évènement (la 2ème si c'est un dresseur simple, la 3ème si c'est un dresseur qui vous interpelle), cette fois-ci avec déclenchement Par la touche Action, et condition de l'évènement l'interrupteur local B. Ainsi, une fois le combat terminé, l'évènement du dresseur ne sera plus sur la page du combat mais sur la page que vous venez de créer. Le contenu de cette page est à votre loisir (le dresseur vous parle et promet une revanche dans le futur ?).
Le processus est long, car un Pokémon = plein de paramètres.
1 - Créez dans la BDD, onglet Pokémons ( Monstres ) , une entrée supplémentaire : le numéro de l'entrée est l'ID du Pokémon. Cet ID est un peu comme l'ID national, ce numéro permet d'identifier le Pokémon.
2 - Remplissez les champs tel que dans l'exemple :
Nom en Majuscule
ID second : ID régional, ID secondaire, etc... Sert de référencement pour le Pokédex. Mettez 0 pour un Pokémon qui n'apparaît pas dans le Pokédex régional. Ne mettez pas de trou dans la liste des IDs second (si un Pokémon a un ID second réglé à 3, il FAUT qu'il y ait un Pokémon dont l'ID second est réglé à 2).
Types : Réglez en A le Type 1, en B le Type 2. Si le Pokémon n'a qu'un seul type, de réglez rien en B.
Stats de base : Stats de base. Base de calcul...
Expérience : Expérience de base, rapporté quand on bat ce Pokémon. Base de calcul...
Rareté : Indice de la difficulté de capture. 3: Légendaire, 45: Difficile, 120~190: Pas commun, 255: Rattata.
Apparence : L'apparence n'est pas réglable. Il faut ajouter le sprite du Pokémon tel qu'il est spécifié dans la rubrique Informations sur les ressources, Battlers. C'est à dire, au moins dans le dossier Front_Male, une image de taille 160x160 nommée avec l'ID du Pokémon (Ex: 068.png), et dans le dossier Back_Male, une image de taille quelconque nommée avec l'ID du Pokémon (Ex: 068.png). Vous ne verrez pas tout de suite l'apparence du Pokémon dans cette fenêtre. Il faudra démarrer le jeu et faire un tour dans le Menu Debug (F9) en appuyant sur l'option MAJ BDD pour que la base de donnée soit mis à jour (Cf Menu Debug, ou à la fin du processus). A chaque ajout de nouveaux sprites, il faut également mettre à jour par la commande MAJ BDD.
Attaques par accouplement : Il s'agit de la liste des attaques apprises par accouplement. L'accouplement n'étant pas encore implanté, c'est pour l'instant à titre informatif, mais ces informations seront utilisées plus tard.
3 - Ajoutez un champ dans la BDD, onglet Evolution ( Classes ). Et remplissez les champs tel dans l'exemple:
Nom : Le nom de la classe constitue le Code d'évolution. Ce code suit une syntaxe bien précise, qui détermine comment le Pokémon évolue.
Evolution naturelle par niveau : Le nom doit suivre le code :
NOM/NV
Où NOM est à remplacer par le nom du Pokémon en majuscule, suivi d'un / obligatoire, suivi de NV à remplacer par le niveau d'évolution.
Il faut également cocher dans la colonne de droite, dans ---Config EVO ---, la case Evolution naturelle.Evolution par Pierre : Le nom doit suivre le code:
NOM
Où NOM est à remplacer par le nom du Pokémon en majuscule. (Paramètre optionnel)
Il faut également cocher dans la colonne de droite, dans ---Config EVO ---, la case Evolution par Pierre. La Pierre utilisée sera spécifiée par des informations supplémentaires qu'il faudra entrer un peu plus tard (cf la suite).Evolution par Bonheur : Le nom doit suivre le code:
NOM
Où NOM est à remplacer par le nom du Pokémon en majuscule.
Il faut également cocher dans la colonne de droite, dans ---Config EVO ---, la case Evolution par Bonheur.Evolution par Echange : Le nom doit suivre le code:
NOM
Où NOM est à remplacer par le nom du Pokémon en majuscule.
Il faut également cocher dans la colonne de droite, dans ---Config EVO ---, la case Evolution par Echange. ATTENTION (v0.7): Ce mode d'évolution ne concerne que les échanges sans objet. Si l'évolution est avec un objet tenu, veuillez cocher Evolution spéciale.Evolution Spéciale : Le nom doit être vide.
Ce mode d'évolution est nécessaire quand un Pokémon suit plusieurs modes d'évolutions en même temps. TETARTE par exemple, évolue par Echange en TARPAUD, mais aussi par Pierre en TARTARD.
Il faut cocher dans la colonne de droite, dans ---Config EVO ---, la case Evolution Spéciale. Les paramètres doivent être spécifiés plus tard.Config EV : Spécifie les bonus gagnés quand on bat ce Pokémon. Le bon sens veut que lorsque ce Pokémon dispose d'une stat très élevée, l'Attaque par exemple, battre ce Pokémon apporte un bonus à l'Attaque. Vous pouvez cocher autant de cases que vous souhaitez. Si vous voulez faire +3, cochez +1 et +2. Le jeu d'origine n'ayant aucun EV dépassant +3, vous n'aurez pas besoin de plus.
Config EXP : Définie la courbe d'expérience du Pokémon. Une recherche Google vous donnera plus d'informations sur ces courbes. Mais voici un descriptif rapide :
EXP Rapide pour les Pokémons faibles
EXP Normal pour les Pokémons communs
EXP Lent pour les Pokémons légendaires ou les évolutions puissantes
EXP Parabolique pour les Pokémons pas communs (les Starters sont tous Parabolique)
EXP Erratic : un mode spécial pour certains Pokémons
EXP Fluctuant : un mode spécial pour certains PokémonsEclosion Oeuf : Détermine le nombre de pas qu'il faut pour faire éclore un oeuf du Pokémon. Vous pouvez cocher et cumuler les cases.
Liste CT/CS : Cochez les cases des CT/CS qu'il est possible d'apprendre.
Genre : Cocher la case correspondant au taux de Femelle.
Loyauté par défaut : Il s'agit du bonheur/loyauté à la capture du Pokémon.
Groupe compatible : Il s'agit du groupe de compatibilité pour les accouplements. Les accouplements suivent des règles un peu spéciales que je ne précise pas (l'accouplement n'étant pas encoe réalisé). Un Pokémon qui ne peut s'accoupler est dans le groupe Incompatible.
Capacité Spé : Cochez la ou les cases pour la Capacité Spéciale du Pokémon. Renseignez vous si vous ne savez pas les effets d'une Capacité. Au maximum 2 cases à cocher et pas plus. Le Pokémon capturé dispose d'une seule capacité qui est choisie au hasard parmis la/les cases cochées.
Evolution des compétences : Entrez la liste des attaques apprises avec leur niveau.
4 - C'est terminé avec la BDD. Il faut maintenant ajouter des informations qui ne rentrent pas dans la base de donnée, en script. Ouvrez le fichier data_pokemon.txt contenu dans le dossier Data du jeu. Vous verrez en début de script une liste de lignes concernant $data_pokemon. Chaque ligne comporte les dernières informations nécessaires au Pokémon.
Insérez au sein de la liste (à la fin par exemple), la ligne suivante en suivant strictement la syntaxe, et sur une même ligne:
$data_pokemon[ID] = ["NOM", ["DESCRIPTION", "ESPECE", "TAILLE", "POIDS"] ]
ID : L'ID (national) du Pokémon, correspond au numéro de l'entrée dans la BDD, onglet Monstre (Pokémon)
"NOM" : Le nom du Pokémon en majuscules, il doit être le même que le nom qui a été écrit dans la BDD. Conservez les guilletmets
"DESCRIPTION" : La description du Pokémon, entre guillemets.
"ESPECE" : L'espèce du Pokémon, en Majuscules, entre guillemets.
"TAILLE" : La taille du Pokémon, suivant le format "5.0 m", "12.8 m", etc... Entre guillemets, et un point (et non une virgule) pour séparer les chiffres avant et après la virgule. (Si vous n'entrez pas cette donnée, le jeu considère que la taille est inconnue)
"POIDS" : Le poids du Pokémon, suivant le format "5.0 kg", "12.8 kg", etc... Entre guillemets, et un point (et non une virgule) pour séparer les chiffres avant et après la virgule. (Si vous n'entrez pas cette donnée, le jeu considère que le poids est inconnu)Exemple:
$data_pokemon[ 1 ] = ["BULBIZARRE", ["BULBIZARRE passe son temps à faire la sieste sous le soleil. Il absorbe les rayons de soleil pour faire doucement pousser la graine qu'il a sur son dos.","GRAINE","0.7 m","6.9 kg"] ]
En cas d'Evolution par Pierre, il faut entrer la ligne suivante en suivant strictement la syntaxe, et sur une même ligne:
$data_pokemon[ID] = ["NOM", ["DESCRIPTION", "ESPECE", "TAILLE", "POIDS"], ["EVOLUTION", ["stone", "NOM_PIERRE"] ] ]
"EVOLUTION" : A remplacer par le nom du Pokémon évolué, en Majuscules, entre guillemets. Le nom doit être le même que celui utilisé dans la BDD, onglet Classes ( Evolution ).
"stone" : A écrire tel quel.
"NOM_PIERRE" : A remplacer par le nom de la pierre, en Majuscules, entre guillemets.Exemple:
$data_pokemon[ 70 ] = ["BOUSTIFLOR", ["Ce POKEMON est dotéd'un gros crochet. La nuit, il s'accroche à une branche pour s'endormir. Quand il a un sommeil agité, il se réveille par terre.","CARNIVORE","1.0 m","6.4 kg"] , ["EMPIFLOR", ["stone", "PIERRE PLANTE" ] ] ]
En cas d'Evolution par Echange, le Pokémon évolue automatiquement par échange, il n'y a rien à ajouter. Par contre, si le Pokémon nécessite de tenir un objet pour évoluer, il faut cocher Evolution Spéciale dans la base de donnée et entrer la ligne suivante en suivant strictement la syntaxe, et sur une même ligne:
$data_pokemon[ID] = ["NOM", ["DESCRIPTION", "ESPECE", "TAILLE", "POIDS"], ["EVOLUTION", "trade", ["item", "NOM_OBJET"] ] ]
"EVOLUTION" : A remplacer par le nom du Pokémon évolué, en Majuscules, entre guillemets. Le nom doit être le même que celui utilisé dans la BDD, onglet Classes ( Evolution ).
"trade" : A écrire tel quel.
"NOM_OBJET" : A remplacer par le nom de l'objet, en Majuscules, entre guillemets.Exemple:
$data_pokemon[ 95 ] = ["ONIX", ["ONIX a dans le cerveau un aimant qui lui sert de boussole. Cela lui permet de ne pas se perdre pendant qu'il creuse. En prenant de l'âge, son corps s'arrondit et se polit.","SERPENROC","8.8 m","210.0 kg"] , ["STEELIX", "trade", ["item", "PEAU METAL" ] ] ]
En cas d'Evolution Spéciale, il faut entrer la ligne suivante en suivant strictement la syntaxe, et sur une même ligne:
$data_pokemon[ID] = ["NOM", ["DESCRIPTION", "ESPECE", "TAILLE", "POIDS"], ["EVOLUTION1", PARAMETRE1A, PARAMETRE1B, ...], ["EVOLUTION2", PARAMETRE2A, ...], ... ]
Il faut entrer autant de champs ["EVOLUTIONx", PARAMETRExy, ...] qu'il y a d'évolutions différentes. Et il y a autant de PARAMETRExy qu'il y a de critères à régler.
"EVOLUTIONx" : A remplacer par le nom du Pokémon évolué, en majuscules, entre guillemets.
PARAMETRExy : A remplacer par le mode d'évolution :
- un nombre, si une évolution par niveau
- ["stone", "NOM_PIERRE" ] pour une évolution par Pierre
- "trade" pour une évolution par échange (l'objet tenu doit être spécifié cf plus bas)
- "loyal" pour une évolution par bonheur
- ["CODE", "NOM_PARAMETRE" ] pour toute évolution spéciale, cf section plus bas.Exemple:
$data_pokemon[ 61 ] = ["TETARTE", ["Sa peau est lubrifiée par un liquide huileux. Grâce à cette protection graisseuse, il peut facilement se glisser hors de l'étreinte de n'importe quel ennemi.","TETARD","1.0 m","20.0 kg"] , ["TARTARD", ["stone", "PIERRE EAU"] ] , ["TARPAUD", "trade", ["item", "ROCHE ROYALE" ] ] ]
5 - Bravo! Votre Pokémon est crée. A présent, si vous le souhaitez, démarrez le jeu, allez dans le menu Debug, et sélectionnez "MAJ BDD". Quittez le jeu,fermez le projet et ré-ouvrez le (ou bien fermez complètement RMXP). Vous verrez l'apparence de votre Pokémon dans la BDD.
Evolutions spéciales :
Voici un inventaire des moyens d'évolution, en plus de ceux qui ont déjà été spécifiés. En base de donnée, ces Pokémons sont spécifiés avec une Evolution Spéciale. Un Pokémon, pour évoluer, doit respecter l'ensemble des critères. Il vous faudra remplir les bons champs de la bonne manière :
["EVOLUTIONx", ["CODExA", "NOM_PARAMETRExA"], ["CODExB", "NOM_PARAMETRExB"], ...]
"EVOLUTIONx" est le nom du Pokémon évolué en majuscule entre guillemets
Dans ["CODExy", "NOM_PARAMETRExy"],
si à la place de CODExy :
- "place" : "NOM_PARAMETRExy"
est à remplacer par la liste des Maps où vous souhaitez qu'il
y aura évolution si le Pokémon monte de niveau à cet endroit.
Exemple : ["MENTALI", ["place", [5, 6, 7, 12]] ]
Spécifie au Pokémon dans lequel j'aurais écrit ce code, qu'il évoluera en un MENTALI si il monte de niveau sur les maps d'ID 5, 6, 7 ou 12.
- "attaque" : "NOM_PARAMETRExy" est à remplacer par le nom de l'attaque que le Pokémon doit posséder pour pouvoir évoluer.
Exemple : ["COUDLANGUE", ["attaque", "ROULADE"] ]
Spécifie au Pokémon dans lequel j'aurais écrit ce code, qu'il évoluera en un COUDLANGUE si il monte de niveau et qu'il connaît l'attaque ROULADE.
- "item" : "NOM_PARAMETRExy" est à remplacer par le nom de l'objet que le Pokémon doit posséder pour pouvoir évoluer. Ce paramètre est souvent couplé avec "trade".
Exemple : ["STEELIX", "trade", ["item", "PEAU METAL" ] ]
Spécifie au Pokémon dans lequel j'aurais écrit ce code, qu'il évoluera en un STEELIX si il est échangé et qu'il tient l'objet PEAU METAL.
- "periode" : "NOM_PARAMETRExy" est à remplacer par "jour" ou "nuit", en fonction du moment où vous souhaitez que le Pokémon évolue.
Exemple : ["EOKO", "loyal", ["periode", "nuit"] ]
Spécifie au Pokémon dans lequel j'aurais écrit ce code, qu'il évoluera en un EOKO si il a atteint un niveau de bonheur suffisant et qu'il fait nuit.
- "genre" : "NOM_PARAMETRExy" est à remplacer par "male" ou "femelle", en fonction du genre nécessaire pour évoluer.
Exemple : ["CHENISELLE", 20, ["genre", "femelle"] ]
Spécifie au Pokémon dans lequel j'aurais écrit ce code, qu'il évoluera en un CHENISELLE si il a atteint le niveau 20 et qu'il est une femelle.
- "aleatoire" : "NOM_PARAMETRExy" est à remplacer par le taux de chance pour que le Pokémon évolue.
Exemple : ["ARMULYS", 7, ["aleatoire", 50] ]
Spécifie au Pokémon dans lequel j'aurais écrit ce code, qu'il évoluera en un ARMULYS si il a atteint le niveau 7, avec 50% de chance.
Exemple: ["ARMULYS", 7, ["aleatoire", 50] ], ["BLINDALYS", 7, ["aleatoire", 50] ]
Il y a ici 2 paramètres d'évolution. Le Pokémon évoluera soit dans l'un, soit dans l'autre (car 50% de chance chacun).
Quelques exemples tirés des vrais Pokémons :
["DIMORET", ["item", "GRIF RASOIR"], ["periode", "nuit"] ]
Evolue en un DIMORET si il fait nuit, que le Pokémon tient une GRIF RASOIR, et qu'il monte de niveau.["GARDEVOIR", 30], ["GALLAME", ["stone", "PIERRE AUBE"], ["genre", "male"]]
Evolue en GARDEVOIR si le Pokémon a atteint le niveau 30, ou bien en un GALLAME si le Pokémon est male et qu'on utilise une PIERRE AUBE.["LEVEINARD", ["item", "PIERRE OVALE"], ["periode", "jour"] ]
Evolue en LEVEINARD si le Pokémon tient une PIERRE OVALE, qu'il fait jour, et qu'il monte de niveau.
D'autres moyens d'évolutions sont trouvables sur le forum à cette page. Il faudra cependant scripter un peu.
La magie du script fait que si vous ajoutez un Pokémon dans la BDD, il est automatiquement ajouté dans le Pokédex.
Sachez tout d'abord que les attaques dans Pokémon sont extrêmement variées dans leur fonctionnement. Il suffit de jeter un oeil sur le script Pokemon_Battle_Core_2 : 2500 lignes pour coder chaque attaque et leurs effets. Donc, il y a "créer une nouvelle attaque" et "créer une nouvelle attaque" : Créer une attaque, basée sur une attaque existante, est facile. Créer une attaque inédite dont vous seul connaissez le mécanisme (genre le Pokémon creuse et déterre un objet au hasard, ou une bombe à retardement qui explose sur l'ennemi), demandera plus. Beaucoup plus.
Cette rubrique est donc destiné au premier cas, à savoir créer une attaque basée sur une attaque existante.
1 - Pour créer une nouvelle attaque, allez dans la BDD, onglet Attaques ( Compétences ), et créez une nouvelle entrée.
2 - Remplacez les champs:
Nom : En majuscule
Description : Du texte
Cible : La cible de la capacité. La cible "un allié mort" et "tous les alliés morts" constituent une cible spéciale, pour des attaques spécifiques... ne vous en préoccupez pas. Vous utiliserez en général "un ennemi", ou "l'utilisateur de la compétence". "Tous les ennemis" sont pour les attaques 2v2 (non programmé pour le moment), "tous les alliés" idem.
Peut être utilisé : "En combat uniquement" ou "Sur la carte et en combat".
Animation sur utilisateur : Non utilisé.
Animation sur la cible : L'animation de l'attaque. CF Créer une animation de combat pour plus de détails.
Appelle un évènement commun : Les compétences comme Tunnel, Force Cachée, ou les CS, ont des effets sur la map. Ces effets doivent être programmés dans un evènement en commun dont le numéro doit être indiqué ici.
PP : Le nombre maximum de PP
ID Effet : Chaque attaque dispose d'effets spéciaux : Para-spore paralyse, Lance-Soleil est une attaque en 2 temps, etc... Ces effets sont identifiés par un ID Effet, et le système de combat scripté sait quel effet il doit déclencher au lancement de l'attaque grâce à cet ID Effet. Si vous voulez créer une attaque qui ressemble en tout point à une autre attaque, il suffit de mettre le même ID Effet. Il y a plus de 200 ID effets... Vous avez le choix. (ID Effet = 0 étant sans effet)
Dmg Base / Dmg Base + : Faites la somme des 2 champs pour obtenir la puissance de base de l'attaque. (Pourquoi 2 champs? Car le premier est limité à une certaine valeur)
Précision : En pourcentage
%Ch Effet : Pourcentage pour que l'effet spécial indiqué par ID Effet se produise.
Priorité : Indique la priorité de l'attaque. Une attaque ayant une plus grande priorité que celle de l'adversaire se verra lancée en premier. Si la priorité est la même, un calcul savant sur la vitesse du Pokémon est appliqué pour savoir qui lance l'attaque en premier.
0 : Priorité la plus basse, 11 priorité la plus haute, 6 priorité normale (comme 95% des attaques).
De contact : Tag qui permet de savoir si l'attaque est dite "de contact". Charge, Ecras'face sont par exemple de contact. Lance-Flamme, Psyko ne sont pas de contact.
Type : Réglez UN type de l'attaque en cochant la bonne case.
3 - C'est terminé.
Si vous désirez spécifier un évènement en commun pour l'attaque que vous venez de créer (par exemple, une attaque doit permettre de déterrer des objets), l'évènement en commun doit être construit d'une manière spécifique. Référez vous à la rubrique Créer un évènement en commun pour une Attaque.
Les Objets dans Pokémon sont de nature encore plus diverses que les attaques, et il m'a été impossible de réutiliser correctement la BDD car le fonctionnement des objets diffèrent trop des objets de base de RMXP. J'ai donc eu recours largement aux scripts.
1 - Pour créer un objet, créez une nouvelle entrée dans la BDD, onglet Objets.
2 - Remplissez les champs:
Nom : En majuscules
Icône : Un icone, de taille 26*26.
Description : La description est en 2 champs, séparés par le signe //. Le premier champ est la description de l'item tel qu'il apparaît dans le sac, le 2ème champ est le texte affiché à l'utilisation de l'objet. Si l'objet est rare ou ne s'utilise pas, pas besoin d'indiquer //.
Exemple: Pour la potion:
Restaure les PV d'un POKéMON de 20 points.//Les PV de %s sont restaurés de %d points.Le premier champ est la description. Le 2ème est affiché quand la potion est utlisée.
%s est remplacé par le nom du Pokémon cible de l'objet, %d est une valeur qui dépend de l'objet et de la programmation derrière.Appelle un évènement en commun : Un évènement en commun qui est appelé lorsque on utilise cet objet sur la map.
Prix : Le prix d'achat.
PV récupérés : L'utilisation de l'objet va régénérer les PV selon les choses que vous tappez dedans.
PP récupérés : L'utilisation de l'objet va régénérer les PP: d'une attaque spécifique si le premier champ est 0, de toutes les attaques si le premier champ est 1, d'un nombre de points indiqué dans le 2ème champ.
Modification des statuts : Retire le statut indiqué par un "-".
Attributs :
POCHE : Indique la poche dans laquelle l'objet se loge
PROFIL OBJET : Il faut ici réaliser le profil de l'objet. Certains profils reviennent souvent, il suffit de copier le profil pour un objet similaire à celui que vous créez..
Dénombrable signifie tenable, jetable et vendable, et qu'il est possible d'en avoir plusieurs.
Consommable signifie que l'objet disparaît après usage.
Usage sur map veut dire qu'il ne peut pas s'utiliser au combat. L'usage qu'il en est fait est en général associé à un évènement en commun.
Usage en combat signifie que l'objet... est utilisable en combat.
Usage sur Pokémon signifie que l'utilisation de l'objet ouvre la fenêtre de sélection du Pokémon
Apte / Non Apte signifie que l'objet s'utilise sur certains Pokémons seulement.L'objet est crée en BDD. Si l'objet est un objet rare, clé, ou un simple objet qui est complètement déterminé par les options plus haut (soin, évènement commun, etc...) ce qui est plutôt limité, l'objet est crée. Sinon, il faut scripter des données complémentaires dans data_item.txt.
Ce scripting complémentaire s'adresse particulièrement à la création de CT, CS, et BALLS. Référez vous aux bonnes sections pour avoir des infos complémentaires dessus.
1 - Suivez les étapes de la création d'un nouvel objet, en ayant pris soin de sélectionner comme POCHE, la poche des OBJETS, et comme PROFIL OBJET, les options Dénombrable, Consommable, Usage sur map, Usage sur Pokémon, Apte/Non Apte. Donnez un nom à votre pierre, en majsucules.
2 - Ouvrez ensuite data_item.txt contenu dans votre dossier Data, et repérez en début de script les lignes concernant la définition de $data_item. Insérez ensuite, parmis les entrées, la ligne suivante, sur une ligne:
$data_item[ ID ]=[ {"stone"=>true} ]
ID : numéro de l'entrée de l'objet Pierre indiqué dans la BDD.
C'est terminé. L'objet crée a été spécifié comme étant une Pierre, et sera utilisé en tant que Pierre..
1 - Suivez les étapes de la création d'un nouvel objet, en ayant pris soin de sélectionner comme POCHE, la poche des CT/CS, et comme PROFIL OBJET, Dénombrable, Consommable, Usage sur map, Usage sur Pokémon, Apte/Non Apte.
2 - Le nom de la CT doit strictement suivre la syntaxe suivante :
CTXX-NOM_ATTAQUE
XX est à remplacer par le numéro de la CT (01, 10, 56...)
NOM_ATTAQUE est a remplacer par le nom de l'attaque en question, en majuscule
Un tiret - sépare le numéro du nom de l'attaqueExemple: CT01-MITRA-POING
3 - Ouvrez ensuite data_item.txt contenu dans votre dossier Data, et repérez en début de script les lignes concernant la définition de $data_item. Insérez ensuite, parmis les entrées, la ligne suivante, sur une ligne:
$data_item[ ID ]=[ {"ct" => [NUM , $skill.id("NOM_ATTAQUE")] ]
ID : numéro de l'entrée de l'objet CT indiqué dans la BDD
NUM : numéro de la CT, que vous avez inscrit dans le nom de la CT
"NOM_ATTAQUE" : A remplacer par le nom de l'attaque, en majuscule, entre guillemets.Exemple:
$data_item[ 118 ]=[ {"ct"=> [1 , $skill.id("MITRA-POING")] ]
$data_item[ 176 ]=[ {"ct"=> [51 , $skill.id("TREMPETTE")] ]
4 - A présent, il faut que les Pokémons puissent apprendre cette nouvelle CT. Dans le premier onglet Paramètres ( Armes ), créez une nouvelle entrée à la fin (peu importe son ID, il faut juste qu'il soit supérieur à 33), après la liste des CT et CS existantes. Nommez cette entrée TRES précisemment COMME le nom de l'objet.
5 - Dans l'onglet Evolution ( Classes ), vous devriez voir apparaître la nouvelle case dans la colonne de gauche. Il suffira de la cocher pour que le Pokémon puisse apprendre la nouvelle CT.
C'est terminé. La CT est crée.
1 - Suivez les étapes de la création d'un nouvel objet, en ayant pris soin de sélectionner comme POCHE, la poche des CT/CS, et comme PROFIL OBJET, Usage sur map, Usage sur Pokémon, Apte/Non Apte.
La CS comportant évidemment une attaque qui peut être utilisée sur une map, n'oubliez pas d'inclure à l'Attaque (dans la BDD, onglet Attaques ( Compétences )), un évènement en commun qui doit être lancé lorsque l'Attaque est activée par le menu. Cet évènement doit être configuré : référez vous à la rurbique Créer un évènement en commun pour une Attaque.
2 - Le nom de la CS doit strictement suivre la syntaxe suivante :
CSXX-NOM_ATTAQUE
XX est à remplacer par le numéro de la CS (01, 09, 13...)
NOM_ATTAQUE est a remplacer par le nom de l'attaque en question, en majuscule
Un tiret - sépare le numéro du nom de l'attaqueExemple: CS01-COUPE
3 - Ouvrez ensuite data_item.txt contenu dans votre dossier Data, et repérez en début de script les lignes concernant la définition de $data_item. Insérez ensuite, parmis les entrées, la ligne suivante, sur une ligne:
$data_item[ ID ]=[ {"cs" => [NUM , $skill.id("NOM_ATTAQUE")] ]
ID : numéro de l'entrée de l'objet CS indiqué dans la BDD
NUM : numéro de la CS , que vous avez inscrit dans le nom de la CS
"NOM_ATTAQUE" : A remplacer par le nom de l'attaque, en majuscule, entre guillemets.
Eventuellement, vous pouvez remplacer $skill.id("NOM_ATTAQUE") par l'ID de la compétence.Exemple: $data_item[ 168 ]=[ {"cs" => [1 , $skill.id("COUPE")] ]
4 - A présent, il faut que les Pokémons puissent apprendre cette nouvelle CS. Dans le premier onglet Paramètres ( Armes ), créez une nouvelle entrée à la fin (peu importe son ID, il faut juste qu'il soit supérieur à 33), après la liste des CT et CS existantes. Nommez cette entrée TRES précisemment COMME le nom de l'objet.
5 - Dans l'onglet Evolution ( Classes ), vous devriez voir apparaître la nouvelle case dans la colonne de gauche. Il suffira de la cocher pour que le Pokémon puisse apprendre la nouvelle CS.
C'est terminé. La CS est crée.
La création d'une nouvelle Ball est un peu plus complexe que celle d'un objet, car elle dispose de données supplémentaires par rapport .
1 - Suivez les étapes de la création d'un nouvel objet, en ayant pris soin de sélectionner comme POCHE, la poche des BALL, et comme PROFIL OBJET, Dénombrable, Consommable, Usage en combat. Donnez le nom que vous voulez à la BALL.
2 - Ouvrez ensuite data_ball.txt contenu dans votre dossier Data, et repérez en début de script les lignes concernant la définition de $data_ball.
Insérez dans le tas, la ligne suivante, en suivant strictement la syntaxe et sur une ligne uniquement:
$data_ball[ NUM ] = ["NOM_BALL", TAUX, "IMAGE.png", "IMAGE2.png", Color.new(R,V,B,255)]
NUM est à remplacer par un nombre dont vous retiendrez le nom.
"NOM_BALL" est à remplacer par le nom de la Ball que vous avez donné à l'objet, en majuscule et entre guillemets.
TAUX est un nombre: 1 est le taux d'une Pokéball normale, 2 est celui d'une HyperBall. Faites vous une idée du taux à appliquer...
"IMAGE.png" est à remplacer par le nom de l'image de la Ball fermée. L'image doit être dans le dossier Pictures.
"IMAGE2.png" est à remplacer par le nom de l'image de la Ball ouverte. L'image doit être dans le dossier Pictures.
R, V, B sont à remplacer par des nombres de 0 à 255, pour déterminer la couleur du halo de la.Ball.Des balles plus élaborées peuvent être crées. 3 fonctions sont déjà incluses. Il faut remplacer TAUX par les lignes suivantes, en respectant la syntaxe:
Capture par Type:
[ "type", [liste des types], TAUX_COND , TAUX_ECH = 1 ]
liste des types : entrez la liste des numéro de type sur lequel s'appliquent la Ball. Les numéros des types doivent être séparés par une virgule. Les numéros des types sont indiqués sur la Table des Types.
TAUX_COND : A remplacer par le taux de capture si le/les types du Pokémon adverse font partie de la liste. Sinon, le taux est TAUX_ECH (paramètre optionnel), par défaut à 1 (taux d'une Pokéball normale).Exemple: La FILET BALL, qui capture plus facilement des Pokémons EAU et INSECTE.
$data_ball[4] = ["FILET BALL", ["type", [3, 12], 3 ], "ball5.png", "ballopen5.png", Color.new(152,248,168,255)]Capture par ID:
[ "id", [liste des IDs], TAUX_COND , TAUX_ECH = 1 ]
liste des IDs : entrez la liste des IDs de Pokémon sur lequel s'appliquent la Ball. Les IDs doivent être séparés par une virgule.
TAUX_COND : A remplacer par le taux de capture si l'ID du Pokémon adverse fait partie de la liste. Sinon, le taux est TAUX_ECH (paramètre optionnel), par défaut à 1 (taux d'une Pokéball normale).Capture par Niveau :
[ "level", "FORMULE", PARAM ]
"FORMULE" : A remplacer par une formule mathématique, entre guillemets, dont l'inconnue est le niveau du Pokémon. L'inconnue doit être symbolisée par %d. Si le taux résultant est inférieur à 1, il est ramené à 1.
PARAM : est à remplacer par un nombre, qui est le taux résultant maximum. Si vous ne le spécifiez pas, le taux n'est pas majoré.Exemple: La FAIBLO BALL, Ball qui capture plus facilement les Pokémons en dessous du niveau 30. Le taux résultant est ( 40 - niveau_du_pokémon ) / 10. Au delà du niveau 30, le taux est inférieur à 1. Il est donc ramené à 1 dans le jeu.
$data_ball[5] = ["FAIBLO BALL", ["level", "(40 - %d)/10.0" ], "ball6.png", "ballopen6.png", Color.new(152,248,56,255)]Capture par Temps :
[ "time", "FORMULE", PARAM ]
"FORMULE" : A remplacer par une formule mathématique, entre guillemets, dont l'inconnue est le nombre de tours du combat. L'inconnue doit être symbolisée par %d. Si le taux résultant est inférieur à 1, il est ramené à 1.
PARAM : est à remplacer par un nombre, qui est le taux résultant maximum. Si vous ne le spécifiez pas, le taux n'est pas majoré.Exemple: La CHRONO BALL, Ball qui capture plus facilement les Pokémons si le combat est de plus en plus long. Le taux résultant est ( nombre de tours + 10 ) / 10. Mais il ne dépasse pas 4.
$data_ball[8] = ["CHRONO BALL", ["time", "(%d+10)/10.0", 4 ], "ball9.png", "ballopen9.png", Color.new(216,96,80,255)]
3 - Ouvrez ensuite data_item.txt contenu dans votre dossier Data, et repérez en début de script les lignes concernant la définition de $data_item. Insérez ensuite, parmis les entrées, la ligne suivante, sur une ligne:
$data_item[ ID ]=[ {"ball" => $data_ball[ NUM ] } ]
ID : numéro de l'entrée de l'objet BALL indiqué dans la BDD
NUM : numéro de l'entrée dans $data_ball, que vous avez retenu.Exemple: $data_item[ 4 ]=[ { "ball" => $data_ball[3] } ]
La Ball est crée.
Créez une nouvelle entrée dans les Animations de combat.
Créez votre animaiton en respectant quelques règles essentielles
:
- Changez la cible avec le fichier battler.png (celui
de l'image). Ce battler vous aidera à bien placer vos sprites.
- La portée doit être réglée sur Ecran.
- L'animation doit être faite de façon à être lancée
par votre Pokémon. Par exemple, dans le cas de SOIN, vous ferez l'animation
sur votre Pokémon. Dans le cas d'une attaque comme LANCE-FLAMME, vous
ferez des flammes qui partent de votre Pokémon vers le Pokémon
adverse.
PSP se charge de replacer les sprites, en fonction de qui lance l'attaque, de manière savante. Ainsi, si le Pokémon adverse lance l'attaque, vous verrez les sprites du bon côté.
Petite subtilité : Le nom de l'animation peut porter un entête, qui spécifie des options supplémentaires pour l'animation. L'entête est toujours de la forme:
X/Nom_de_l'animation
X étant une (ou plusieurs) lettres en majuscule à remplacer par les lettres suivantes.
Nom_de_l'animation est un nom que vous spécifiez (évitez d'utiliser le symbole / dans le nom), séparés par un /.
Si vous ne spécifiez pas d'entête, tappez le nom normalement, mais évitez d'utiliser le symbole /.
Voici les options disponibles qui s'appliquent sur tous les sprites de l'animation adverse:
Sans entête : Les sprites ne subissent aucune modification excepté leur position, utile pour des objets dirigés vers le haut, le bas, ou sans direction particulière.
R : Rotation - Les sprites subissent une rotation à 180°, utiles pour des objets pointés vers le Pokémon adverse.
F : Fausse rotation - Le mouvement des sprites est le même que R, sauf que les sprites ne subissent pas de rotation à 180° (utile pour les objets poings, pieds qui vont vers le Pokémon adverse).
M : Mirroir - Les sprites subissent un effet miroir vertical.
N : Normal - Les sprites ne subissent aucune modification (même animation point de vue joueur que adverse).
Cherchez le script Pokemon_Types. Et suivez le guide ;). Le nombre de types maximum qui peuvent être crées par la méthode suivante est de 8 (donc 25 types au total), ce qui est normalement amplement suffisant.
Etape 1 :
Chaque type est défini par un numéro. Les 17 premiers types sont ceux du jeu original. Si vous en créez un en plus, prenez les numéros suivants. Prenons un exemple pour la création d'un type : Je veux créer le type Lumière (j'aurais pu prendre le type Ange, Démon, Porcelaine, ou Caoutchouc). Les 17 premeirs numéros étant pris, je choisis le 18.
Etape 2 :
Dans le dossier Graphics/Pictures , ajoutez une image T18.png. Si le numéro du type était 22, j'aurais mis T22.png.
Cette image est l'emblême du type.
Etape 3 :
Plus chaud : Modifier $data_table_type. Je vous renvoie au script Pokemon_Types, la modification à apporter y figure.
Etape 4 :
Dans l'espace indiqué dans le script Pokemon_Types, insérez les 2 lignes suivantes pour le type que vous souhaitez ajouter.
when numero_de_type
return "NOM_DE_TYPE"numero_de_type dans notre exemple est 18, le NOM_DU_TYPE, en majuscule, est "LUMIERE".
Etape 5 :
Toujours dans l'espace indiqué, insérez les 3 lignes suivantes en fonction de votre type :
def type_nom_de_type?
return type_custom?(numero_de_type)
endRebelotte.
Cette fonction servira pour l'analyse du type d'un Pokémon quand vous scripterez. Elle joue le meme rôle que type_normal?, type_ice?, etc...
Etape 6 :
Vous avez presque terminé. Il faut maintenant apporter des modifications dans la BDD pour que vous ayez accès à ce nouveau type. Dans l'onglet Système, en bas à gauche, sélectionnez l'élément 18 et nommez le.
Voilà! Vous pouvez tester le type fraîchement réalisé.
Comment ça Kroskozor est mauvais de nature?
... Référez vous à un glossaire sur le net pour le moment pour plus de détails.
Bonheur : Valeur de 0 (min) à 255 (max)
EV : Effort Value, bonus de stats, ne dépasse pas 255. Le total
des EV sur toutes les stats ne dépasse par 510.
Chaque type est représenté par un numéro. Voici la liste des correspondances :
1 Normal
2 Feu
3 Eau
4 Electrique
5 Plante
6 Glace
7 Combat
8 Poison
9 Sol
10 Vol
11 Psy
12 Insecte
13 Roche
14 Spectre
15 Dragon
16 Acier
17 Ténèbres
La majorité des informations qui ont permis de composer ce Starter Kit sont issues de Ultimate Pokemon Center (http://www.upokecenter.com/), site anglais de grande qualité regroupant les informations sur les algorithmes utilisés et une base de donnée existante de taille importante.
Les ressources graphiques (images des Pokémons) et les cris des Pokémons fournies proviennent également de ce site. Les polices incluses proviennent du Starter Kit anglais Pokemon Essentials, disponible sur ce même site.
Les icônes et descriptions des objets ont été prises du site http://www.pokemon-france.com.
Pokemon Script Project n'est pas une traduction française de Pokemon Essentials mais un projet indépendant (et même antérieur).
Je ne suis en aucun cas affilié à Nintendo, et toute utilisation du Kit doit se faire dans un cadre privé non commercial (de toute façon, RMXP est illégal en France...).
Un remerciement spécial aux communautés RMXP (http://rmxp.xooit.com) qui a vécu le début du projet, RPG Creative (http://rpgcreative.forumpro.fr/) qui a beaucoup contribué au projet par son activité, la communauté du forum de PSP (http://pokemonscriptproject.xooit.fr) très active qui a essentiellement contribué au progrès de PSP depuis sa relase publique, et bien sur tous les posteurs des autres communauté qui m'ont donné un commentaire encourageant et soutenu dans la réalisation du Kit.