Script
RPG Maker XP

Biward VarMap

Affichez dynamiquement vos variables directement sur la map !

Version: 2
Utilitaire Affichage de données

VarMap est un script de Biward pour RPG Maker XP permettant d’afficher des variables directement sur la map, sous forme de fenêtres personnalisables.
Il sert à créer rapidement un HUD dynamique (or, points, compteur, jauge simulée, timer, score, etc.) sans frocément passer par des images ou des events complexes.

Les valeurs sont mises à jour automatiquement dès qu’une variable change.

À quoi sert ce script

Ce script est utile pour :

  • afficher l’or, un score, un compteur, un temps restant
  • créer un HUD léger sur la map
  • montrer des statistiques en temps réel
  • éviter les events parallèles lourds
  • modifier l’affichage dynamiquement en jeu

Fonctionnement

Le script repose sur un système de fenêtres (Window_Base) attachées à la map :

  1. Une variable RMXP est associée à une fenêtre
  2. La fenêtre affiche :
    • la valeur de la variable
    • un texte optionnel
    • une icône optionnelle
  3. À chaque modification de variable, l’affichage se met à jour
  4. Les fenêtres sont gérées automatiquement par un Spriteset dédié

Création d’une fenêtre de variable

Commande principale (appel de script ou événement) :

draw_variable(variable, x_v, y_v, x, y, w, h, opa, ico, x_i, y_i, text, x_t, y_t)
  • variable : ID de la variable RMXP à afficher
  • x, y : position de la fenêtre à l’écran
  • w, h : largeur et hauteur de la fenêtre
  • opa : opacité de la fenêtre
  • ico : ID de l’icône (ou nil)
  • text : texte affiché (optionnel)
  • x_v, y_v : position du nombre
  • x_t, y_t : position du texte
  • x_i, y_i : position de l’icône

Dès qu’une variable est modifiée la valeur correspondante à l’écran est rafraîchie automatiquement

Chaque propriété peut être modifiée à la volée :

var_x(var, x)       # position X
var_y(var, y)       # position Y
var_w(var, w)       # largeur
var_h(var, h)       # hauteur
var_opa(var, opa)   # opacité
var_ico(var, ico)   # icône
var_text(var, text) # texte affiché
Supprimer une fenêtre
dispose_variable(variable)
Supprimer toutes les fenêtres
dispose_all_variable

Script

Bloc de code
TEXTE
################################################################################
##### VAR MAP
################################################################################
# Auteur : Biward ; Date : 13/09/2013 18:31 ; Version : XP
# Utilité : permet l'affichage facile et rapide de variable sur la map.
#
# liste des commandes :
# draw_variable(variable, position x, position y, largeur, hauteur, opacité, icone, position x icone, position y icone, "texte", position x texte, position y texte)
# qui sert à créer une fenêtre contenant une variable
# dispose_variable(variable) qui sert à effacer une window
# dispose_all_variable qui sert à effacer toutes les windows
# refresh_variables qui sert à mettre à jour les fenêtres (automatique)
#
# Autres commandes :
# var_x(var, x) ; var_y(var, y) ; var_w(var, w) ; var_h(var, h)
# var_opa(var, opa) ; var_ico(var, ico) ; var_xi(var, xi) ; var_yi(var, yi)
# var_text(var, text) ; var_xt(var, xt) ; var_yt(var, yt)
# Ces commandes servent à modifier une fenêtre ingame grace à un appel de script.

################################################################################
##### Début du script
################################################################################
class Interpreter
  def draw_variable(var, x_v, y_v, x, y, w, h, opa, ico, x_i, y_i, text, x_t, y_t)
    if ! Spriteset_Variable.dr[var]
      Spriteset_Variable.var << var
      Spriteset_Variable.x_v[var] = x_v
      Spriteset_Variable.y_v[var] = y_v
      Spriteset_Variable.x[var] = x
      Spriteset_Variable.y[var] = y
      Spriteset_Variable.w[var] = w
      Spriteset_Variable.h[var] = h
      Spriteset_Variable.opa[var] = opa
      Spriteset_Variable.ico[var] = ico
      Spriteset_Variable.x_i[var] = x_i
      Spriteset_Variable.y_i[var] = y_i
      Spriteset_Variable[var] = text
      Spriteset_Variable.x_t[var] = x_t
      Spriteset_Variable.y_t[var] = y_t
      Spriteset_Variable.upo = var
      Spriteset_Variable.cr = true  
    end
  end
  def dispose_variable(number) ; Spriteset_Variable.ds << number ; end
  def dispose_all_variable ; Spriteset_Variable.co = true ; end
  def refresh_variables ; Spriteset_Variable.rs = true ; end
  def var_x_v(var, xv) ; Spriteset_Variable.x_v[var] = xv ; Spriteset_Variable.upo = var ; end
  def var_y_v(var, yv) ; Spriteset_Variable.y_v[var] = yv ; Spriteset_Variable.upo = var ; end
  def var_x(var, x) ; Spriteset_Variable.x[var] = x ; Spriteset_Variable.upo = var ; end
  def var_y(var, y) ; Spriteset_Variable.y[var] = y ; Spriteset_Variable.upo = var ; end
  def var_w(var, w) ; Spriteset_Variable.w[var] = w ; Spriteset_Variable.upo = var ; end
  def var_h(var, h) ; Spriteset_Variable.h[var] = h ; Spriteset_Variable.upo = var ; end
  def var_opa(var, opa) ; Spriteset_Variable.opa[var] = opa ; Spriteset_Variable.upo = var ; end
  def var_ico(var, ico) ; Spriteset_Variable.ico[var] = ico ; Spriteset_Variable.upo = var ; end
  def var_xi(var, xi) ; Spriteset_Variable.x_i[var] = xi ; Spriteset_Variable.upo = var ; end
  def var_yi(var, yi) ; Spriteset_Variable.y_i[var] = yi ; Spriteset_Variable.upo = var ; end
  def var_text(var, text) ; Spriteset_Variable[var] = text ; Spriteset_Variable.upo = var ; end
  def var_xt(var, xt) ; Spriteset_Variable.x_t[var] = xt ; Spriteset_Variable.upo = var ; end
  def var_yt(var, yt) ; Spriteset_Variable.y_t[var] = yt ; Spriteset_Variable.upo = var ; end
  alias command_122_bi command_122 ; def command_122 ; command_122_bi ; Spriteset_Variable.rs = true ; end
end
   
class Window_Variable < Window_Base
  def initialize(x, y, h, w, var, opa, icone, x_i, y_i, text, x_t, y_t, x_v, y_v)
    super(x, y, h, w)
    self.opacity = opa
    @var = var
    @icon_index = icone
    @x_i = x_i
    @y_i = y_i
    @text = text
    @x_v = x_v
    @y_v = y_v
    @x_t = x_t
    @y_t = y_t
    @w = w
    @h = h
    refresh
  end
  def refresh
    self.contents = Bitmap.new(@h - 32, @w - 32)
    self.contents.clear
    self.contents.draw_text(@x_v, @y_v - 198, 544, 416, $game_variables[@var].to_s, 0)
    bitmap = RPG::Cache.icon(@icon_index) if @icon_index
    self.contents.blt(@x_i, @y_i + 4, bitmap, Rect.new(0, 0, 24, 24)) if @icon_index && @x_i && @y_i
    self.contents.draw_text(@x_t, @y_t - 198, 544, 416, @text.to_s, 0)
  end
  def redraw(ico, x_i, y_i, text, x_t, y_t, x_v, y_v, h, w)
    @icon_index = ico
    @x_i = x_i
    @y_i = y_i
    @text = text
    @x_t = x_t
    @y_t = y_t
    @x_v = x_v
    @y_v = y_v
    @w = w
    @h = h
    refresh
  end
end
     
class Spriteset_Variable
  class << self ; attr_accessor :var, :x_v, :y_v, :x, :y, :w, :h, :opa, :ico, :x_i, :y_i, :text, :x_t, :y_t, :upo, :dr, :ds, :rs, :cr, :co ; end
  def initialize ; create_variable ; create_window_var if Spriteset_Variable.var ; end
  def create_variable
    Spriteset_Variable.var ||= []
    Spriteset_Variable.x_v ||= {}
    Spriteset_Variable.y_v ||= {}
    Spriteset_Variable.rs ||= false
    Spriteset_Variable.co ||= false
    Spriteset_Variable.dr ||= []
    Spriteset_Variable.ds ||= []
    Spriteset_Variable.x ||= {}
    Spriteset_Variable.y ||= {}
    Spriteset_Variable.w ||= {}
    Spriteset_Variable.h ||= {}
    Spriteset_Variable.opa ||= {}
    Spriteset_Variable.ico ||= {}
    Spriteset_Variable ||= {}
    Spriteset_Variable.x_i ||= {}
    Spriteset_Variable.y_i ||= {}
    Spriteset_Variable.x_t ||= {}
    Spriteset_Variable.y_t ||= {}
    @winvar = {} if ! @winvar
  end
  def start ; create_window_var if ! Spriteset_Variable.var.empty? ; end
  def create_window_var
    Spriteset_Variable.var.each do |i|
      if ! Spriteset_Variable.dr[i]
        @winvar[i] = Window_Variable.new(Spriteset_Variable.x[i], Spriteset_Variable.y[i], Spriteset_Variable.w[i],
                                    Spriteset_Variable.h[i], i, Spriteset_Variable.opa[i], Spriteset_Variable.ico[i],
                                    Spriteset_Variable.x_i[i], Spriteset_Variable.y_i[i] , Spriteset_Variable[i],
                                    Spriteset_Variable.x_t[i], Spriteset_Variable.y_t[i], Spriteset_Variable.x_v[i],
                                    Spriteset_Variable.y_v[i])
        Spriteset_Variable.dr[i] = true
      end
    end
    Spriteset_Variable.cr = nil if  Spriteset_Variable.cr
  end
  def terminate ; dispose_window_var ; end
  def dispose_window_var(command = false)
    @winvar.each { |i| i[1].dispose }
    Spriteset_Variable.dr.clear
    Spriteset_Variable.var.clear if command
    Spriteset_Variable.co = false if Spriteset_Variable.co
  end
  def dispose_owv(var)
    @winvar[var].dispose if @winvar[var]
    if Spriteset_Variable.dr[var]
      index = Spriteset_Variable.var.index(var)
      Spriteset_Variable.var.delete_at(index)  
    end
    Spriteset_Variable.dr[var] = nil
  end
  def prep_dispose_window_var ; Spriteset_Variable.ds.each { |i| dispose_owv(i) } ; Spriteset_Variable.ds.clear ; end
  def update
    create_window_var if Spriteset_Variable.cr
    update_window_var if Spriteset_Variable.upo
    prep_dispose_window_var if ! Spriteset_Variable.ds.empty?
    refresh_windows if Spriteset_Variable.rs
    dispose_window_var(true) if Spriteset_Variable.co
  end
  def update_window_var
    i = Spriteset_Variable.upo
    if Spriteset_Variable.dr[i]
      @winvar[i].x = Spriteset_Variable.x[i]
      @winvar[i].y = Spriteset_Variable.y[i]
      @winvar[i].width = Spriteset_Variable.w[i]
      @winvar[i].height = Spriteset_Variable.h[i]
      @winvar[i].opacity = Spriteset_Variable.opa[i]
      @winvar[i].redraw(Spriteset_Variable.ico[i], Spriteset_Variable.x_i[i], Spriteset_Variable.y_i[i],
      Spriteset_Variable[i], Spriteset_Variable.x_t[i], Spriteset_Variable.y_t[i],
      Spriteset_Variable.x_v[i], Spriteset_Variable.y_v[i], Spriteset_Variable.w[i], Spriteset_Variable.h[i])
    end
    Spriteset_Variable.upo = nil
  end
  def refresh_windows
    @winvar.each do  |i|        
      i[1].refresh if i[1] && Spriteset_Variable.dr[i[0]]
      Spriteset_Variable.rs = false
    end
  end
end

class Scene_Map
  alias sbbi main
  alias ubbi update  
  def main
    @spriteset_variable = Spriteset_Variable.new
    sbbi
    @spriteset_variable if @spriteset_variable
  end
  def update ; ubbi ; @spriteset_variable.update if @spriteset_variable ; end
end
################################################################################
##### Début du script
################################################################################

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