Script
RPG Maker XP

Compétence Scan XP

Ajoutez une compétence Scan simple et efficace pour afficher les statistiques des ennemis en combat.

Compétences

La compétence Scan permet d’afficher en combat les informations d’un ennemi ciblé.
Dans cette version pour RPG Maker XP, le script ouvre une fenêtre dédiée qui affiche plusieurs statistiques de l’ennemi sélectionné, comme ses PV, MP et ses principales caractéristiques.

Le script est volontairement simple. Il sert surtout de base fonctionnelle, que vous pouvez ensuite adapter visuellement à votre projet.

À quoi sert ce script Scan ?

Ce script ajoute une vraie compétence Scan utilisable en combat.

Concrètement, lorsqu’un personnage utilise la compétence liée à un événement commun, le jeu récupère la cible sélectionnée et ouvre une fenêtre contenant ses statistiques.

Cela permet par exemple de :

  • révéler les stats d’un ennemi pendant un combat ;
  • donner une utilité tactique à une compétence d’analyse ;
  • créer un gameplay plus lisible pour le joueur ;
  • poser une base simple avant de personnaliser l’affichage.

Ce que fait le script

Le script repose sur trois éléments :

  • une petite extension de Scene_Battle pour rendre le battler actif accessible ;
  • une scène Scene_Scan qui gère l’ouverture et la fermeture de l’affichage ;
  • une fenêtre Window_Scan qui affiche les données de l’ennemi.

Le fonctionnement est simple : la compétence appelle un événement commun, cet événement récupère la cible en cours, puis lance la fenêtre de scan.

Mise en place de la compétence Scan

1. Créer un événement commun

Dans un événement commun, avec la commande Insérer un script, ajoutez :

index = $scene.active_battler.current_action.target_index
target = $game_troop.smooth_target_enemy(index)
scan = Scene_Scan.new(target)

Dans cet exemple, l’événement commun peut être nommé competence_scan.

2. Créer la compétence

Dans la base de données, créez une compétence Scan.

3. Lier l’événement commun à la compétence

Associez à cette compétence l’événement commun créé juste avant.

4. Ajouter les scripts dans l’éditeur de scripts

Les scripts doivent être placés avant Main.
Le premier script doit être placé avant les deux autres.

Bloc de code
TEXTE
# ==============================================================================
# ** Scene_Battle
# ------------------------------------------------------------------------------
# Par Mikltov / Rutsuku Fushin / Cantarelle
# ------------------------------------------------------------------------------
#   Cette extension permet de mettre en lecture l'attribut active_battler,
#  necessaire pour le scan.
#   ATTENTION : A mettre avant Scene_Scan et Window_Scan, a cause du attr_reader!
# ==============================================================================

class Scene_Battle

  attr_reader :active_battler

end

# ==============================================================================
# ** Scene_Scan
# ------------------------------------------------------------------------------
# Par Mikltov / Rutsuku Fushin / Cantarelle
# ------------------------------------------------------------------------------
#  Un script pour montrer le resultat des scans en combat. Ceci n'est que la
# partie modele / controleur.
# ==============================================================================
class Scene_Scan < Window_Base

  # ----------------------------------------------------------------------------
  # def initialize
  # ----------------------------------------------------------------------------
  def initialize(enemy)
    @scan_window = Window_Scan.new(enemy)
    @affichage = true
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if @affichage == false
        break
      end
    end
    @scan_window.dispose
  end

  # ----------------------------------------------------------------------------
  # def update
  # ----------------------------------------------------------------------------
  def update
    if Input.trigger?(Input::B)
      update_command
    end
  end

  # ----------------------------------------------------------------------------
  # def update_command
  # ----------------------------------------------------------------------------
  def update_command
    $game_system_play($data_system.cancel_se)
    @affichage = false
  end

# ==============================================================================
# end class
# ==============================================================================  
end

# ==============================================================================
# ** Window_Scan
# ------------------------------------------------------------------------------
# Par Mikltov / Rutsuku Fushin / Cantarelle
# ------------------------------------------------------------------------------
#  Un script pour montrer le resultat des scans en combat. Ceci n'est que la
# partie visuelle.
#  Sachant que le visuel differe selon les projets, demerdez-vous pour avoir
# ce que vous voulez. Je n'ai fait qu'une base
# ==============================================================================

class Window_Scan < Window_Base

  # ----------------------------------------------------------------------------
  # def update
  # ----------------------------------------------------------------------------
  def initialize(enemy)
    # --------------------------------------------------------------------------
    # 4 valeurs obligatoires dans le super
    #   - position du x de depart
    #   - position du y de depart
    #   - position de x a l'arrivee
    #   - position de y a l'arrivee
    # --------------------------------------------------------------------------
    super(20, 10, 300, 350)
    self.contents = Bitmap.new(width - 32, height - 32)
    # --------------------------------------------------------------------------
    # definition de la police et de sa taille
    # --------------------------------------------------------------------------
    self.contents.font.name = $fontface
    self.contents.font.size = $fontsize
    # --------------------------------------------------------------------------
    # definit l'opacite de la boite de dialogue
    # --------------------------------------------------------------------------
    self.back_opacity = 255
    refresh(enemy)
  end
  
  # ----------------------------------------------------------------------------
  # def refresh
  # ----------------------------------------------------------------------------
  def refresh(enemy)
    self.contents.clear
    self.contents.draw_text(0, 0, 450, 28, "name : " + enemy.name.to_s)
    self.contents.draw_text(0, 32, 450, 28, "hp : " + enemy.base_maxhp.to_s)
    self.contents.draw_text(0, 64, 450, 28, "sp : " + enemy.base_maxsp.to_s)
    self.contents.draw_text(0, 96, 450, 28, "atk : " + enemy.base_atk.to_s)
    self.contents.draw_text(0, 128, 450, 28, "pdf : " + enemy.base_pdef.to_s)
    self.contents.draw_text(0, 160, 450, 28, "mdf : " + enemy.base_mdef.to_s)
    self.contents.draw_text(0, 192, 450, 28, "str : " + enemy.base_str.to_s)
    self.contents.draw_text(0, 224, 450, 28, "agi : " + enemy.base_agi.to_s)
    self.contents.draw_text(0, 256, 450, 28, "dex : " + enemy.base_dex.to_s)
    self.contents.draw_text(0, 288, 450, 28, "int : " + enemy.base_int.to_s)
  end

# ==============================================================================
# end class
# ==============================================================================
end

Créateur à créditer : Cantarelle

Scripts utiles

Newsletter

Ne ratez rien de la communauté

Nouveautés, jeux inspirants et ressources utiles directement dans votre boîte mail.

Pas de spam · Désinscription en un clic