Pokemon Script Project - Beta
Release 2008

Manuel d'utilisation

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.


UPDATE

- 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).


 

 

 

 

Sommaire

A/ Introduction

B/ Précautions d'usage

C/ Mode d'emploi

Installation

Avant de commencer
Installation
Compatibilité Vista

Ressources

Informations sur les ressources
Information sur les fichiers extérieurs à modifier
Information sur les scripts de PSP

Making 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 projet

Evè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 combats

Gestion 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 / attaques

Evè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 adverse

Base 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

D/ Glossaire et annexes

Termes utilisés
Table des types

E/ Références

 

 

 

 

A/ Introduction

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.

 

 

 

 

B/ Précautions d'usage

- 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.

 

 

 

C/ Mode d'emploi

Installation

- Avant de commencer

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).

 

 

- Installation

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é.

 

 

- Compatibilité Vista

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.

 

 

Ressources

- Informations sur les ressources

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.

 

 

- Information sur les fichiers extérieurs à modifier

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.

 

- Information sur les scripts de Pokemon Script Project

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.

 

 

 

 

Making général

- Démarrer un nouveau projet

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.

 

 

- Information sur les variables

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]

 

 

- Information sur les interrupteurs

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.

 

 

- Information sur le panneau de configuration (Script Config_Panel)

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.

 

- Mapping : Tag Terrain et terrains aquatiques

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.

 

 

- Mapping : Zones, messages de localisation

Zones :

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").

 

Message de localisation :

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

 

- Mapping : Carte du monde

Réglage :

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.

Pokédex :

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.

CS Vol :

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.

 

- Mapping : Centre Pokémon, défaite au combat et points de retour

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.

 

 

- Mapping : Jonction de maps

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.

 

 

- Système : Echanger des Pokémons

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.

 

- Système : Mode de Sauvegarde

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...).

 

 

- Système : En cas de bug

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.

 

 

- Système : Menu de Debug

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.

 

 

- Système : Compiler son projet

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.

 

 

 

Evènements : Commandes d'évènements

- Conditions et Commandes de choix

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").

 

- Gestion des Variables

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)

 

- Démarrer un combat de Dresseur ( Démarrer un combat )

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.

 

- Entrer le nom du héros

Pas de changement, si ce n'est que vous ne pouvez modifier que le nom du 1er héros.

 

- Modifier les PV

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)

 

- Modifier le statut

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)

 

- Soigner complètement

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)

 

- Ajouter/Retirer points d'expérience

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)

 

- Modifier le niveau

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)

 

- Ajouter/Retirer une compétence

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)

 

- Modifier le surnom d'un Pokémon (Modifier le nom d'un héros)

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)

 

- (Sauvage) Ecart de niveau ( Modifier les PV d'un monstre )

Cette fonction est détaillée dans Configurer les rencontres aléatoires.

 

- (Sauvage/Dresseur) Niveau ( Modifier les PM d'un monstre )

Cette fonction est détaillée dans Configurer les rencontres aléatoires et dans Création et combat contre un Dresseur adverse.

 

- Changer la musique des combats

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.

 

 

 

Gestion d'équipe

- Activer le Pokédex

En cas d'ajout du Pokédex (un Professeur vous le confie par exemple), faites Insérer un script:

activer_pokedex

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.

 

- Ouvrir le PC de stockage

Créez un évènement, et Insérer un script:

demarrer_pc

 

- Renommer le héros

Rien de plus simple. Utilisez l'évènement de RMXP Entrer le nom du héros.

 

- Ajouter/Retirer de l'argent

Rien de plus simple. Utilisez l'évènement de RMXP Ajouter/Retirer monnaie.

 

- Ajouter/Retirer un objet

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.

 

- Appeler la carte du monde

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")

 

- Appeler un évènement de type Pension

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.

 

- Appeler la Carte Dresseur

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.

 

 

- Ouvrir un magasin

Rien de plus simple. Utilisez l'évènement de RMXP Appeler un magasin, et ajoutez y les objets proposés.

 

- Soigner (Evènement du type Centre Pokémon)

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

 

 

- Script : Sélection d'un Pokémon dans l'équipe

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

 

- Script : Sélection d'un Pokémon dans votre équipe par le joueur

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.

 

- Script : Pension (Daycare)

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.

 

 

 

Gestion de Pokémon

- Ajouter un Pokémon à son équipe ou au PC de stockage

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)

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.

 

 

- Retirer un Pokémon de son équipe

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)

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)

index est à remplacer par l'index du Pokémon dans l'équipe.

 

- Enseigner une capacité à un Pokémon

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.

 

 

- Renommer un Pokémon

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.

 

- Ajouter un oeuf à l'équipe

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.

 

 

- Script : Traitement du Pokémon

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.fonction

index 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.fonctionfonction 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.

 

 

- Script : Traitement des capacités

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

 

 

 

Evènements : Combats et Interaction

- Créer un évènement en commun pour une Attaque ou un objet

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.)

 

 

- Créer un objet destructible comme un buisson ou un rocher

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.

 

 

- Créer un objet poussable

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.

 

 

- Configurer les rencontres aléatoires

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.

 

- Démarrer un combat contre un Pokémon sauvage déterminé

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.

 

 

- Démarrer un combat contre un Pokémon avec conservation de paramètres (Légendaire)

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.

 

 

- 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.

 

 

- Création et combat contre un Dresseur adverse

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]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_2

Dresseur 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
...
Nn

Pokemon 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 ?).

 

Base de données : Customisation

- Créer un nouveau Pokémon

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

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

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

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

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émons

Eclosion 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.

 

 

- Ajouter un Pokémon dans le Pokédex

La magie du script fait que si vous ajoutez un Pokémon dans la BDD, il est automatiquement ajouté dans le Pokédex.

 

- Créer une nouvelle attaque

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.

 

- Créer un objet

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.

 

- Créer une nouvelle 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 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..

 

- Créer une nouvelle CT

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'attaque

Exemple: 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.

 

 

- Créer une nouvelle CS

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'attaque

Exemple: 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.

 

 

- Créer une nouvelle Ball

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éer une animation de combat

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).

 

- Créer un nouveau type

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)
end

Rebelotte.

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?

 

D/ Glossaire et annexes

- Termes Pokémon

... 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.

 

 

- Table des Types

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

 

 

 

E/ Références

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.

 

 

 

 

 

©Pokemon et tous les noms utilisés sont des marques déposées de ©Nintendo/Creatures Inc./GAME FREAK Inc.
©RPG MAKER XP/RMXP est une marque déposée de ©Enterbrain
©Pokemon Script Project - 2007/2008 - Krosk