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_Battlepour rendre le battler actif accessible ; - une scène
Scene_Scanqui gère l’ouverture et la fermeture de l’affichage ; - une fenêtre
Window_Scanqui 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.
# ==============================================================================
# ** 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
# ==============================================================================
endCréateur à créditer : Cantarelle