Aller au contenu principal
Voir

Donner un objet au joueur

Section archivée à la sortie de Pokémon Studio v3.0

Pokémon Studio v3.0 abandonnera RPG Maker. À ce moment-là, cette section sera archivée : les pages resteront accessibles comme référence mais ne seront plus mises à jour.

PSDK peut remettre un objet au joueur de plusieurs façons : une Poké Ball posée au sol, un cadeau d'un PNJ, ou un ajout silencieux en arrière-plan. Ce guide couvre les trois commandes d'event qui donnent un objet, la façon dont chacune traite l'event qui l'exécute, et les méthodes du sac pour vérifier, compter et retirer ce que le joueur possède.

Les trois premières commandes sont des méthodes de l'Interpreter : on les appelle depuis la commande Script d'un event, sans aucun préfixe. Les méthodes du sac, à la fin, passent par le global $bag ; la différence est expliquée le moment venu.

Trois façons de remettre un objet

PSDK propose trois commandes pour remettre un objet, et la bonne dépend de ce que le joueur voit. Une Poké Ball posée au sol qui disparaît une fois ramassée n'est pas le même event qu'un PNJ qui reste planté là après avoir fait un cadeau. Les commandes diffèrent surtout par le fait de supprimer ou non l'event ensuite, et par le message affiché. Dans chacune, l'objet est désigné par son db_symbol (:potion, :poke_ball) ou son ID numérique, exactement tel qu'il apparaît dans la base de données des objets.

Ramasser un objet au sol

pick_item est la commande pour un objet posé sur la carte, la fameuse Poké Ball dans laquelle le joueur vient marcher :

pick_item(item_id, count = 1, no_delete = false)
  • item_id — l'objet à donner, sous forme de db_symbol (:poke_ball) ou d'ID numérique.
  • count — la quantité à donner. Optionnel, vaut 1 par défaut.
  • no_delete — s'il faut conserver l'event ensuite. Optionnel, vaut false par défaut, ce qui signifie que l'event est supprimé définitivement.

Sur l'event de la Poké Ball, une seule commande Script suffit :

pick_item(:potion)

Cela ajoute une Potion, affiche le message « a trouvé une Potion », joue le jingle d'objet, puis supprime l'event définitivement : la Poké Ball disparaît et ne reviendra pas, même après que le joueur a quitté puis ré-entré sur la carte. C'est exactement ce que l'on veut pour un objet au sol à usage unique.

Pour en remettre plusieurs d'un coup, on passe une quantité :

pick_item(:poke_ball, 5)

Si l'objet doit rester disponible (un ramassage qui réapparaît, un event de test), on conserve l'event en passant true en troisième argument :

pick_item(:potion, 1, true)

Recevoir un objet d'un PNJ

give_item est la commande pour un PNJ qui remet quelque chose au joueur. Contrairement à pick_item, elle ne supprime jamais l'event, donc le personnage reste sur la carte et on peut lui reparler :

give_item(item_id, count = 1)
  • item_id — l'objet, sous forme de db_symbol ou d'ID numérique.
  • count — la quantité. Optionnel, vaut 1 par défaut.

Après le dialogue du cadeau, dans le même event :

give_item(:potion)

Cela ajoute l'objet, affiche le message de cadeau et joue le jingle, mais laisse le PNJ en place. PSDK choisit le bon message automatiquement : un objet rare reçoit la ligne spécifique aux objets rares, tout le reste la ligne de cadeau générique. Il n'y a pas d'argument no_delete ici, conserver l'event est tout l'intérêt de give_item.

La commande générale

Les deux commandes ci-dessus sont construites sur add_item, que l'on peut aussi appeler directement quand on a besoin d'un contrôle plus fin :

add_item(item_id, no_delete = false, count: 1)
  • item_id — l'objet, sous forme de db_symbol ou d'ID numérique.
  • no_delete — conserver l'event (true) ou le supprimer (false, la valeur par défaut).
  • count — la quantité, sous forme d'argument nommé. Optionnel, vaut 1 par défaut.
add_item(:potion, false, count: 3)

Cela ajoute trois Potions, affiche le message de découverte et supprime l'event. pick_item n'est que add_item avec le message de découverte ; give_item est add_item avec l'event conservé. On n'utilise add_item directement que lorsque aucun des deux raccourcis ne convient. Quand le sac est plein (une taille maximale de sac est configurée), add_item affiche un message « plus de place » au lieu d'ajouter l'objet, donc on n'a jamais à vérifier la capacité soi-même.

Ajouter un objet silencieusement

Les trois commandes ci-dessus affichent un message et jouent un son. Quand on a seulement besoin de l'objet dans le sac, sans tambour ni trompette, par exemple comme effet de bord d'un autre event, on passe par l'objet sac directement. Ces méthodes ne sont pas des commandes de l'Interpreter : elles vivent sur le sac du joueur, accessible via le global $bag, donc elles s'écrivent $bag.quelque_chose(...). On les saisit toujours dans une commande Script, le préfixe est la seule différence.

$bag.add_item ajoute un objet sans message ni son :

$bag.add_item(db_symbol, nb = 1)
  • db_symbol — l'objet, sous forme de db_symbol ou d'ID numérique.
  • nb — la quantité. Optionnel, vaut 1 par défaut.
$bag.add_item(:potion, 2)

Cela glisse discrètement deux Potions dans le sac. Rien ne s'affiche et l'event n'est pas touché.

Vérifier, compter et retirer des objets

Le même global $bag permet de lire et de modifier ce que le joueur possède.

Vérifier si le joueur possède un objet

$bag.has_item? renvoie si le sac contient au moins une quantité donnée d'un objet :

$bag.has_item?(db_symbol, quantity = 1)

Elle renvoie true ou false, elle a donc sa place dans l'onglet Script d'un branchement conditionnel. La quantité est optionnelle et vaut 1 par défaut :

# Le joueur a-t-il au moins une Potion ?
$bag.has_item?(:potion)

On passe une quantité pour tester un nombre plus élevé :

# Le joueur a-t-il au moins cinq Poké Balls ?
$bag.has_item?(:poke_ball, 5)

Compter combien

$bag.item_quantity renvoie la quantité exacte que le joueur détient :

$bag.item_quantity(db_symbol)

Elle renvoie un Integer (0 quand le joueur n'en a aucun), utile pour la stocker dans une variable ou tester un seuil. Dans l'onglet Script d'un branchement conditionnel :

# Le joueur a-t-il plus de dix Poké Balls ?
$bag.item_quantity(:poke_ball) > 10

Retirer un objet

$bag.remove_item reprend des objets dans le sac :

$bag.remove_item(db_symbol, nb = 999)
  • db_symbol — l'objet à retirer.
  • nb — la quantité. Optionnel ; la valeur par défaut de 999 vide en pratique l'objet entièrement.
$bag.remove_item(:potion, 2)

Cela retire deux Potions. Si la quantité atteint zéro, l'objet quitte complètement le sac. Appelée sans quantité, elle retire toute la pile :

$bag.remove_item(:potion)

La méthode est aussi disponible sous le nom $bag.drop_item, qui se lit mieux quand le joueur jette quelque chose ; les deux font la même chose.

Conclusion

  • On utilise pick_item pour un objet au sol : il affiche le message « a trouvé » et supprime l'event, donc le ramassage n'a lieu qu'une fois. On passe true en troisième argument pour le conserver.
  • On utilise give_item pour un cadeau d'un PNJ : il affiche le message de cadeau et conserve l'event, donc le personnage reste accessible au dialogue.
  • Les deux sont construites sur add_item ; on ne l'appelle directement que pour un contrôle plus fin, comme en ajouter plusieurs d'un coup.
  • On ajoute un objet sans message ni son via $bag.add_item.
  • On lit et modifie le sac avec $bag.has_item?, $bag.item_quantity et $bag.remove_item (alias drop_item), toutes appelables depuis l'onglet Script d'un branchement conditionnel.