Jump to content
Rpg²S Forum

Visible Debug 1.2


mikb89
 Share

Recommended Posts

Visible Debug 1.2c

Descrizione

Capita che qualcosa vada storto fra switch e variabili. Non sai cosa succede, sai solo che non funziona come previsto. Qui entra in gioco questo script!

http://img525.imageshack.us/img525/6813/visibledebugvxace.png

 

Funzionalità

Con questo script puoi tenere sotto controllo una lista di parametri vari i cui cambiamenti saranno mostrati in tempo reale. Questa lista include:
  • switch e variabili, switch locali degli eventi;

  • grafica di eventi, giocatore, eroi, nemici;

  • posizione e stato 'Come fantasma' di eventi e giocatore;

  • id dei tile dove si trova il giocatore;

  • numero di oggetti, armi, armature possedute;

  • hp, mp, tp (se abilitato), atk, def, luk, agi, due stati dei combattenti;

  • nomi & livello degli eroi (i nemici non li hanno);

  • altre informazioni utili aggiunte dalle configurazioni (puoi vedere come sono fatte e aggiungerne di tue).

 

Autore

mikb89

 

Allegati

Demo multilingua v. 1.2 (1.33 MB)

 

Istruzioni per l'uso

Inserite lo script sotto Materials. Le istruzioni sono fra i commenti.

 

Script

 

# Visible Debug v. 1.2c
# VX Ace version
# by mikb89

# Dettagli:
#  Capita che qualcosa vada storto fra switch e variabili. Non sai cosa
#   succede, sai solo che non funziona come previsto.
#  Con questo script puoi tenere sotto controllo una lista di parametri
#   vari i cui cambiamenti saranno mostrati in tempo reale.
#  Questa lista include:
#   - switch e variabili, switch locali degli eventi;
#   - grafica di eventi, giocatore, eroi, nemici;
#   - posizione e stato 'Come fantasma' di eventi e giocatore;
#   - id dei tile dove si trova il giocatore;
#   - numero di oggetti, armi, armature possedute;
#   - hp, mp, tp (se abilitato), atk, def, luk, agi, due stati dei combattenti;
#   - nomi & livello degli eroi (i nemici non li hanno);
#   - altre informazioni utili aggiunte dalle configurazioni (puoi vedere
#     come sono fatte e aggiungerne di tue).

# Configurazioni:
module VDEBUG
 # Lista di termini da personalizzare come si vuole:
 HELP_TEXT = "Invio: aggiungi/togli; Pag: cambia lista." # Aiutati!
 # Cosa appare alla pressione di F9:
   CALL_CLASSIC_DEBUG_TEXT = "Chiama Debug"
   CALL_VDEBUG_SETTINGS_TEXT = "Dati Visible Debug"
 # Nomi delle liste:
   SWITCH_LIST_TEXT = "Switch"
   VARIABLE_LIST_TEXT = "Variabili"
   ITEM_LIST_TEXT = "Oggetti"
   ACTOR_LIST_TEXT = "Eroi"
   EVENT_LIST_TEXT = "Eventi"
   DATA_LIST_TEXT = "Info"
   WEAPON_LIST_TEXT = "Armi"
   ARMOR_LIST_TEXT = "Armature"
   ENEMY_LIST_TEXT = "Nemici"

 SHOW_EVENT_NAME = true # Mostra nomi di eventi. Metti false per compatibilità.
 MOVE_AROUND_KEY = :ALT
  # Premendo questo più volte, l'hud del Visible Debug si sposterà nei quattro
  #  angoli dello schermo e si nasconderà.

 # Dati disponibili:
 def self.collect_mainlist
   poss = [] # Puoi cambiare l'ordine, ma non puoi aggiungere voci.
   poss << [-1, $data_system.switches.size-1]
   poss << [-2, $data_system.variables.size-1]
   poss << [-3, $data_items.size-1]
   poss << [-4, $data_actors.size-1]
   poss << [0, $game_player]
   poss << [-5, $game_map.events.size] # Non serve -1 perché è un Hash. D:
   poss << [-6, self.useful_data.size-1]
   poss << [-7, $data_weapons.size-1]
   poss << [-8, $data_armors.size-1]
   poss << [-9, [$game_troop.members.size, 8].max]
   poss # A patto che tu non sappia quel che fai, naturalmente.
 end
 def self.useful_data
   da = [nil] # Il primo valore dev'essere nil.
   da << [["Party:", $game_party.members.size], # Apri un array, aggiungi.
          ["G:", $game_party.gold], # Primo valore: stringa mostrata...
          ["S:", $game_party.steps], # ...secondo valore: variabile col dato.
          ["T:", self.adjust_time(Graphics.frame_count)], # Ricorda le ,
          ["Sav:", $game_system.save_count]] # Chiudi l'array.
          # Mostrerà: "Party: 3 G: 333 S: 33 T: 3:33 Sav: 3" con qualcosa
          #  invece di 3.
   da << ["Timer:", self.adjust_time($game_timer.sec)]
          # Anche un elemento singolo può essere aggiunto. E la variabile
          #  può anche venir fuori da una funzione def.
   da << [["Map id:", $game_map.map_id],
          ["Size:", $game_map.width], ["x", $game_map.height]]
          # Puoi, come esercizio, aggiungere ad esempio il nome mappa. :)

    # Aggiungi qui le tue info personalizzate! TU puoi.

   da # Semplicemente restituisce l'array.
 end
 def self.adjust_time(value) # Esempio di funzione. Formatta il tempo.
   value /= Graphics.frame_rate # Graphics.frame_rate = 1 secondo.
   sec = value % 60 # Ottiene i secondi.
   value -= sec # Li sottrae.
   "#{value/60}:#{sprintf("%02d",sec)}" # Restituisce il tempo come min:sec.
 end
end

#Codename: vdebug

($imported ||= {})[:mikb89_vdebug] = true

# Licenza:
# - Puoi chiedermi di includere il supporto per altri script, a patto che usino
#   il $imported[script] = true;
# - Puoi modificare e anche ripostare i miei script, dopo una mia risposta. Per
#   ripostarli, comunque, devi aver fatto pesanti modifiche o porting, non puoi
#   fare un post con lo script così com'è;
# - Puoi usare i miei script per fare quel che vuoi, da giochi gratis a liberi
#   a commerciali. Apprezzerei comunque essere messo al corrente di quello che
#   stai creando;
# - Devi creditarmi, se usi questo script o parte di esso.

# * operations to let the Visible Debug configuration be available

class Scene_Map
#class Scene_Map#def update_call_debug() <- rewritten
 def update_call_debug
   SceneManager.call(Scene_ChoiceDebug) if $TEST && Input.press?(:F9)
 end
end

class Window_GameDebug < Window_GameEnd
#class Window_GameDebug#def make_command_list()
 def make_command_list
   add_command(VDEBUG::CALL_CLASSIC_DEBUG_TEXT, :dbg)
   add_command(VDEBUG::CALL_VDEBUG_SETTINGS_TEXT, :vd)
   add_command(Vocab::cancel, :cancel)
 end
end

class Scene_ChoiceDebug < Scene_MenuBase
#class Scene_ChoiceDebug#def start()
 def start
   super; @command_window = Window_GameDebug.new
   @command_window.set_handler(:dbg, proc{SceneManager.goto(Scene_Debug)})
   @command_window.set_handler(:vd, proc{SceneManager.goto(Scene_VisibleDebug)})
   @command_window.set_handler(:cancel, method(:return_scene))
 end
#class Scene_ChoiceDebug#def pre_terminate()
 def pre_terminate
   super; @command_window.close; update until @command_window.close?
 end
end

# * operations to let the Visible Debug sprite work

#class Game_Event#def name()
(class Game_Event; def name; @event.name; end; end) if VDEBUG::SHOW_EVENT_NAME
# why isn't the event name readable by default? WHY???

class Scene_Base
 alias_method(:updateSB_b4_vdebug, :update) unless method_defined?(:updateSB_b4_vdebug)
#class Scene_Base#def update() <- aliased
 def update
   updateSB_b4_vdebug
   # update the debug sprite just everywhere!
   $game_player.sdebug.update if $game_player
 end
end

class << SceneManager
 alias_method(:run_b4_vdebug, :run) unless method_defined?(:run_b4_vdebug)
#class Scene_Manager#def self.run() <- aliased
 def run
   run_b4_vdebug
   $game_player.sdebug.dispose
 end
 alias_method(:snapshot_for_background_b4_vdebug, :snapshot_for_background) unless method_defined?(:snapshot_for_background_b4_vdebug)
#class Scene_Manager#def self.snapshot_for_background() <- aliased
 def snapshot_for_background
   # we don't want the debug sprite to be captured in the snapshot
   $game_player.sdebug.visible = false if $game_player
   snapshot_for_background_b4_vdebug
   $game_player.sdebug.visible = true if $game_player
 end
end

class Game_Player
 # rely sprite on $game_player due to its reperibility. No, I'm not kidding :E
#class Game_Player#def sdebug()
 def sdebug
   @sdebug ||= Sprite_Debug.new
 end
end

class Sprite_Debug < Sprite
 attr_reader :infos
#class Sprite_Debug#def initialize(i, pos)
 def initialize(i = nil, pos = 0)
   super()
   self.infos = (i.is_a?(Array) ? i : [i]) # must be an array
   self.z = 99999999 # a big value
   self.opacity = 222 # little transparency
   @last_values = []
   @pos = pos - 1; move_around # position set
 end
#class Sprite_Debug#def move_around()
 def move_around
   @pos += 1; @pos %= 5 # increase position, modulate value
   self.x = w*(@pos%2) # right/left
   self.y = Graphics.height/2*(@pos/2) # up/down/out
 end
#class Sprite_Debug#def w()
 def w # just to write a little less
   Graphics.width/2
 end
#class Sprite_Debug#def infos=(i)
 def infos=(i)
   @infos = i
   create_bitmap # once data change, we recreate the image
 end
#class Sprite_Debug#def _dump(*args)
 def _dump(*args)
   str = @infos[0].nil? ? "n," : ""
   @infos.each {|i|
     i.each {|d| str += " #{d.is_a?(Numeric) ? d : "p"}"}
     str += ","
   } if str == ""
   str += @pos.to_s # values to save
 end
#class Sprite_Debug#def _load(data)
 def self._load(data)
   p data
   data = data.split(',')
   pos = data.pop.to_i || 0
   i = data[0] == "n" ? nil : data.each_index {|d|
         data[d] = data[d].split
         data[d].each_index {|n| data[d][n] = (data[d][n] == "p" ? $game_player : data[d][n].to_i)}
       }
   Sprite_Debug.new(i, pos)
 end
#class Sprite_Debug#def create_bitmap()
 def create_bitmap
   self.bitmap.dispose if self.bitmap && !self.bitmap.disposed?
   h = @infos.size*24
   self.bitmap = Bitmap.new(w,[h,1].max) # h is 0, if there's no item
   for i in 0...@infos.size
     next if @infos[i] == nil || @infos[i].size < 2
     draw_row(i, true)
   end
 end
#class Sprite_Debug#def draw_row(i, new)
 def draw_row(i, new = false)
   self.bitmap.clear_rect(0,i*24,w,24) unless new # no need to clear if new
   im = get_item(@infos[i]) # get the bitmap then blt it. This way I can get
   return unless im         #  the same bitmap everywhere ^^
   draw_placement(0, i*24)
   self.bitmap.blt(0, i*24, im, im.rect)
   im.dispose
 end
#class Sprite_Debug#def draw_placement(x, y)
 def draw_placement(x, y)
   self.bitmap.fill_rect(x+4,y+6,w-8,24-8,Color.new(0,0,0,128)) # a bLackground
 end
#class Sprite_Debug#def collect(v)
 def collect(v) # gets the relevant value(s) for each item
   case v[0]
     when 0; collect_player
     when 1; $game_switches[v[1]]
     when 2; $game_variables[v[1]]
     when 3; $game_party.item_number($data_items[v[1]])
     when 4; collect_actor($game_actors[v[1]])
     when 5; collect_event($game_map.events[v[1]])
     when 6; collect_data(VDEBUG::useful_data[v[1]])
     when 7; $game_party.item_number($data_weapons[v[1]])
     when 8; $game_party.item_number($data_armors[v[1]])
     when 9; collect_enemy($game_troop.members[v[1]-1])
     else; nil
   end
 end
#class Sprite_Debug#def collect_player()
 def collect_player
   da = []
   da << $game_player.character_name
   da << $game_player.character_index
   da << $game_player.direction
   da << $game_player.x
   da << $game_player.y
   da << ($game_player.through || $game_player.debug_through?)
   for i in [0, 1, 2]
     da << $game_map.data[$game_player.x, $game_player.y, i]
   end
   da
 end
#class Sprite_Debug#def collect_actor(actor)
 def collect_actor(actor)
   da = []
   da << actor.character_name
   da << actor.character_index
   da << actor.name
   da << actor.level
   da << actor.hp
   da << actor.mhp
   da << actor.mp
   da << actor.mmp
   da << actor.states
   da << actor.atk
   da << actor.def
   da << actor.luk
   da << actor.agi
   da
 end
#class Sprite_Debug#def collect_event(event)
 def collect_event(event)
   da = []
   return da if event.nil?
   da << event.character_name
   da << event.character_index
   da << event.direction
   da << event.x
   da << event.y
   da << (event.through || event.debug_through?)
   for ss in ['A', 'B', 'C', 'D']
     da << $game_self_switches[[$game_map.map_id, event.id, ss]]
   end
   da
 end
#class Sprite_Debug#def collect_data(data)
 def collect_data(data)
   da = []
   return da if data.nil? || !data.is_a?(Array)
   data = [data] unless data[0].is_a?(Array)
   return da if data.size < 1
   for val in data
     da << val[1]
   end
   da
 end
#class Sprite_Debug#def collect_enemy(enemy)
 def collect_enemy(enemy)
   da = []
   return da if enemy.nil?
   da << enemy.battler_name
   da << enemy.battler_hue
   da << enemy.name
   da << enemy.hp
   da << enemy.mhp
   da << enemy.mp
   da << enemy.mmp
   da << enemy.states
   da << enemy.atk
   da << enemy.def
   da << enemy.luk
   da << enemy.agi
   da
 end
#class Sprite_Debug#def get_item(item, width, enabled)
 def get_item(item, width = w, enabled = true) # draw item in a returned bitmap
   bit = Bitmap.new(width,24)
   bit.font.color.alpha = blta = enabled ? 255 : 128
   case item[0]
   when -9; draw_container(VDEBUG::ENEMY_LIST_TEXT, item[1], bit)
   when -8; draw_container(VDEBUG::ARMOR_LIST_TEXT, item[1], bit)
   when -7; draw_container(VDEBUG::WEAPON_LIST_TEXT, item[1], bit)
   when -6; draw_container(VDEBUG::DATA_LIST_TEXT, item[1], bit)
   when -5; draw_container(VDEBUG::EVENT_LIST_TEXT, item[1], bit)
   when -4; draw_container(VDEBUG::ACTOR_LIST_TEXT, item[1], bit)
   when -3; draw_container(VDEBUG::ITEM_LIST_TEXT, item[1], bit)
   when -2; draw_container(VDEBUG::VARIABLE_LIST_TEXT, item[1], bit)
   when -1; draw_container(VDEBUG::SWITCH_LIST_TEXT, item[1], bit)
   when 0; draw_player(item[1], bit, blta)
   when 1; draw_switch(item[1], bit, blta)
   when 2; draw_variable(item[1], bit, blta)
   when 3; draw_item(item[1], bit, blta)
   when 4; draw_actor(item[1], bit, blta)
   when 5; draw_event(item[1], bit, blta)
   when 6; draw_data(item[1], bit, blta)
   when 7; draw_weapon(item[1], bit, blta)
   when 8; draw_armor(item[1], bit, blta)
   when 9; draw_enemy(item[1], bit, blta)
   else; bit.dispose; bit = nil
   end
   bit
 end
#class Sprite_Debug#def draw_container(txt, n, bitmap)
 def draw_container(txt, n, bitmap)
   bitmap.draw_text(12, 0, bitmap.width-32, 24, txt)
   bitmap.draw_text(0, 0, bitmap.width, 24, n > 0 ? "(#{n})" : "", 2)
 end
#class Sprite_Debug#def draw_player(item, bitmap, blta)
 def draw_player(item, bitmap, blta)
   if item != nil
     bitmap.blt(0, 0, get_character_icon(item, true), Rect.new(0,0,24,24), blta)
     bitmap.draw_text(24, 0, bitmap.width, 24, "(#{item.x};#{item.y})")
     tile = ""
     for i in [0, 1, 2]
       tile += $game_map.data[item.x, item.y, i].to_s + (i != 2 ? ", " : "")
     end
     bitmap.draw_text(0, 0, bitmap.width-3, 24, "Tile: #{tile}", 2)
     if (item.through || item.debug_through?)
       bitmap.font.color = Color.new(0,0,0)
       bitmap.font.out_color = Color.new(99,33,55)
       bitmap.draw_text(0, 8, 23, 24, "T", 2)
     end
   end
 end
#class Sprite_Debug#def draw_switch(n, bitmap, blta)
 def draw_switch(n, bitmap, blta)
   if n != nil
     name = $data_system.switches[n]
     bitmap.blt(0, 0, get_text_icon("S"), Rect.new(0,0,24,24), blta)
     bitmap.draw_text(24, 0, bitmap.width-32, 24, "[#{n}] #{name}:")
     bitmap.draw_text(0, 0, bitmap.width, 24, "[O#{$game_switches[n] ? "N" : "FF"}]", 2)
   end
 end
#class Sprite_Debug#def draw_variable(n, bitmap, blta)
 def draw_variable(n, bitmap, blta)
   if n != nil
     name = $data_system.variables[n]
     bitmap.blt(0, 0, get_text_icon("V"), Rect.new(0,0,24,24), blta)
     bitmap.draw_text(24, 0, bitmap.width-32, 24, "[#{n}] #{name}:")
     bitmap.draw_text(0, 0, bitmap.width-3, 24, $game_variables[n].to_s, 2)
   end
 end
#class Sprite_Debug#def draw_item(n, bitmap, blta)
 def draw_item(n, bitmap, blta)
   item = $data_items[n]
   if item != nil
     bitmap.blt(0, 0, get_icon(item.icon_index), Rect.new(0,0,24,24), blta)
     bitmap.draw_text(24, 0, bitmap.width, 24, item.name)
     bitmap.draw_text(0, 0, bitmap.width-3, 24, $game_party.item_number(item), 2)
   end
 end
#class Sprite_Debug#def draw_actor(n, bitmap, blta)
 def draw_actor(n, bitmap, blta)
   item = $game_actors[n]
   if item != nil
     iw = bitmap.width
     bitmap.draw_text(24, 0, bitmap.width, 24, item.name)
     wb = Window_Base.new(-(iw+32),-56,iw+32,56) # I get a Window_Base for its
     wb.draw_actor_name(item, 24, 0)             #  useful draw_this, draw_that
     gs = iw-w
     vals = [-8, -2]
     if $data_system.opt_display_tp
       vals[0] -= 4; vals[1] -= 4; vals << 0
       wb.draw_gauge(96, vals[2], 48+gs, item.tp_rate, wb.tp_gauge_color1, wb.tp_gauge_color2)
     end
     wb.draw_gauge(96, vals[0], 48+gs, item.hp_rate, wb.hp_gauge_color1, wb.hp_gauge_color2)
     wb.draw_gauge(96, vals[1], 48+gs, item.mp_rate, wb.mp_gauge_color1, wb.mp_gauge_color2)
     wb.draw_actor_icons(item, 154+gs, 0, 48)
     wb.contents.font.size /= 2
     wb.contents.font.color = Color.new(0,0,0)
     wb.contents.font.out_color = wb.system_color
     wb.contents.draw_text(5, 8, 12, 24, Vocab::level_a)
     wb.contents.draw_text(iw-80+16, -4, 22, 24, Vocab::param(2)[0...3])
     wb.contents.draw_text(iw-48+16, -4, 22, 24, Vocab::param(3)[0...3])
     wb.contents.draw_text(iw-80+16, 6, 22, 24, Vocab::param(6)[0...3])
     wb.contents.draw_text(iw-48+16, 6, 22, 24, Vocab::param(7)[0...3])
     wb.contents.font.out_color = wb.normal_color
     wb.contents.draw_text(0, 8, 23, 24, item.level, 2)
     wb.contents.draw_text(iw-80+26, -4, 18, 24, item.atk, 2)
     wb.contents.draw_text(iw-48+26, -4, 18, 24, item.def, 2)
     wb.contents.draw_text(iw-80+26, 6, 18, 24, item.luk, 2)
     wb.contents.draw_text(iw-48+26, 6, 18, 24, item.agi, 2)
     bitmap.blt(0, 0, get_character_icon(item), Rect.new(0,0,24,24), blta)
     bitmap.blt(0, 0, wb.contents, wb.contents.rect, blta)
     wb.dispose
   end
 end
#class Sprite_Debug#def draw_event(n, bitmap, blta)
 def draw_event(n, bitmap, blta)
   item = $game_map.events[n]
   if item != nil
     bitmap.blt(0, 0, get_character_icon(item, true), Rect.new(0,0,24,24), blta)
     nm = VDEBUG::SHOW_EVENT_NAME ? item.name : ""
     bitmap.draw_text(24, 0, bitmap.width-3, 24, "[#{item.id}](#{item.x};#{item.y})#{nm}")
     loc = "ON:"
     for ss in ['A', 'B', 'C', 'D']
       loc += " " + ss + "," if $game_self_switches[[$game_map.map_id, item.id, ss]]
     end
     loc[-1] = "" if loc[-1] == ','
     bitmap.draw_text(0, 0, bitmap.width, 24, loc, 2)
     if (item.through || item.debug_through?)
       bitmap.font.color = Color.new(0,0,0)
       bitmap.font.out_color = Color.new(99,33,55)
       bitmap.draw_text(0, 8, 23, 24, "T", 2)
     end
   else
     bitmap.blt(0, 0, get_text_icon(n.to_s), Rect.new(0,0,24,24), blta)
     bitmap.draw_text(0, 0, bitmap.width, 24, "EV#{sprintf("%03d", n)}", 1)
   end
 end
#class Sprite_Debug#def draw_data(n, bitmap, blta)
 def draw_data(n, bitmap, blta)
   item = VDEBUG::useful_data[n]
   if item != nil && item.is_a?(Array)
     item = [item] unless item[0].is_a?(Array)
     return if item.size < 1
     str = ""
     for val in item
       str += val[0] + " #{val[1]} "
     end
     str[-1] = "" if str[-1] == " "
     bitmap.draw_text(0, 0, bitmap.width, 24, str, 1)
   end
 end
#class Sprite_Debug#def draw_weapon(n, bitmap, blta)
 def draw_weapon(n, bitmap, blta)
   item = $data_weapons[n]
   if item != nil
     bitmap.blt(0, 0, get_icon(item.icon_index), Rect.new(0,0,24,24), blta)
     bitmap.draw_text(24, 0, bitmap.width, 24, item.name)
     bitmap.draw_text(0, 0, bitmap.width-3, 24, $game_party.item_number(item), 2)
   end
 end
#class Sprite_Debug#def draw_armor(n, bitmap, blta)
 def draw_armor(n, bitmap, blta)
   item = $data_armors[n]
   if item != nil
     bitmap.blt(0, 0, get_icon(item.icon_index), Rect.new(0,0,24,24), blta)
     bitmap.draw_text(24, 0, bitmap.width, 24, item.name)
     bitmap.draw_text(0, 0, bitmap.width-3, 24, $game_party.item_number(item), 2)
   end
 end
#class Sprite_Debug#def draw_enemy(n, bitmap, blta)
 def draw_enemy(n, bitmap, blta)
   item = $game_troop.members[n-1]
   iw = bitmap.width
   if item != nil
     wb = Window_Base.new(-(iw+32),-56,iw+32,56) # I get a Window_Base for its
     wb.draw_actor_name(item, 24, 0)             #  useful draw_this, draw_that
     gs = iw-w
     vals = [-8, -2]
     if $data_system.opt_display_tp
       vals[0] -= 4; vals[1] -= 4; vals << 0
       wb.draw_gauge(96, vals[2], 48+gs, item.tp_rate, wb.tp_gauge_color1, wb.tp_gauge_color2)
     end
     wb.draw_gauge(96, vals[0], 48+gs, item.hp_rate, wb.hp_gauge_color1, wb.hp_gauge_color2)
     wb.draw_gauge(96, vals[1], 48+gs, item.mp_rate, wb.mp_gauge_color1, wb.mp_gauge_color2)
     wb.draw_actor_icons(item, 154+gs, 0, 48)
     wb.contents.font.size /= 2
     wb.contents.font.color = Color.new(0,0,0)
     wb.contents.font.out_color = wb.system_color
     wb.contents.draw_text(iw-80+16, -4, 22, 24, Vocab::param(2)[0...3])
     wb.contents.draw_text(iw-48+16, -4, 22, 24, Vocab::param(3)[0...3])
     wb.contents.draw_text(iw-80+16, 6, 22, 24, Vocab::param(6)[0...3])
     wb.contents.draw_text(iw-48+16, 6, 22, 24, Vocab::param(7)[0...3])
     wb.contents.font.out_color = wb.normal_color
     wb.contents.draw_text(0, 8, 23, 24, item.letter, 2)
     wb.contents.draw_text(iw-80+26, -4, 18, 24, item.atk, 2)
     wb.contents.draw_text(iw-48+26, -4, 18, 24, item.def, 2)
     wb.contents.draw_text(iw-80+26, 6, 18, 24, item.luk, 2)
     wb.contents.draw_text(iw-48+26, 6, 18, 24, item.agi, 2)
     bitmap.blt(0, 0, get_enemy_icon(item), Rect.new(0,0,24,24), blta)
     bitmap.blt(0, 0, wb.contents, wb.contents.rect, blta)
     wb.dispose
   else
     bitmap.blt(0, 0, get_text_icon(n.to_s), Rect.new(0,0,24,24), blta)
     bitmap.draw_text(0, 0, iw, 24, "...", 1)
   end
 end
#class Sprite_Debug#def get_icon(index)
 def get_icon(index) # get an icon with the Window_Base, cache it
   @icache ||= {}
   return @icache[index] if @icache[index]
   wb = Window_Base.new(-56,-56,56,56)
   wb.draw_icon(index,0,0)
   bit = wb.contents.clone
   wb.dispose
   @icache[index] = bit
   bit
 end
#class Sprite_Debug#def get_character_icon(chara, dir)
 def get_character_icon(chara, dir = false) # get iconized character from...
   @icache ||= {}
   c_id = chara.character_name + "_" + chara.character_index.to_s + "_" +
          (dir ? chara.direction.to_s : "2")
   return @icache[c_id] if @icache[c_id]
   if dir
     cp = chara.clone
     cp.transparent = true
     sc = Sprite_Character.new(nil, cp) # ...a Sprite_Character or...
     bit = Bitmap.new(24, 24)
     bit.blt((24-sc.src_rect.width)/2,(24-sc.src_rect.height)/2,sc.bitmap, sc.src_rect)
     sc.dispose
     cp = nil
   else
     wb = Window_Base.new(-56,-56,56,56) # ...a Window_Base...
     wb.draw_actor_graphic(chara,12,33)
     bit = wb.contents.clone
     wb.dispose
   end
   @icache[c_id] = bit # ...and cache it
   bit
 end
#class Sprite_Debug#def get_text_icon(text)
 def get_text_icon(text) # get an iconized text, like S, V or numbers
   @icache ||= {}
   return @icache[text] if @icache[text]
   bit = Bitmap.new(24,24)
   bit.font.shadow = false
   bit.font.italic = true
   bit.font.bold = true
   bit.font.size -= 1
   bit.font.color = Color.new(81,59,59, 128)
   for i in -2..2; for j in -1..1 # draw black text many times around
     bit.draw_text(i,j+2,24,24,text,1)
   end; end
   bit.blur # then blur it
   bit.font.color = Color.new(255,255,255)
   bit.draw_text(0,2,24,24,text,1)
   @icache[text] = bit
   bit
 end
#class Sprite_Debug#def get_enemy_icon(enemy)
 def get_enemy_icon(enemy) # get an iconized enemy graphic
   @icache ||= {}
   id = enemy.battler_name + "_" + enemy.battler_hue.to_s
   return @icache[id] if @icache[id]
   bit = Bitmap.new(24,24)
   sb = Sprite_Battler.new(nil, enemy) # get the bitmap from a Sprite_Battler
   sb.opacity = 0 # don't wanna see the full battler
   sb.update_bitmap # let the graphic be loaded
   sb.dispose if sb.bitmap.nil? || sb.bitmap.disposed? # no graphic?
   return bit if sb.disposed?
   b2 = Bitmap.new(sb.src_rect.width, sb.src_rect.height) # I get a new bitmap
   b2.blt(0, 0, sb.bitmap, sb.src_rect)                   #  within src_rect
   sb.bitmap = b2 # disposing sb even its bitmap will be disposed
   if b2.width <= 24 || b2.height <= 24 # if little bitmap just center it
     bit.blt((24-b2.width)/2, (24-b2.height)/2, b2, b2.rect)
   else # else resize
     fact = (b2.width > b2.height ? b2.height : b2.width)/24.0
     nw = b2.width/fact; nh = b2.height/fact
     bit.stretch_blt(Rect.new((24-nw)/2, (24-nh)/2, nw, nh), b2, b2.rect)
   end
   sb.dispose
   @icache[id] = bit
   bit
 end
#class Sprite_Debug#def update()
 def update
   return if SceneManager.scene_is?(Scene_File)
   move_around if Input.trigger?(VDEBUG::MOVE_AROUND_KEY)
   for i in 0...@infos.compact.size
     v = @infos[i]
     # set every new value and redraw if needed
     draw_row(i) if @last_values[i] != (@last_values[i] = collect(v))
   end
   super
 end
end

# * operation to create a Visible Debug options screen

class Window_VDList < Window_Selectable
 # a silly, simple, window that handle a list
 attr_reader :data
#class Window_VDList#def initialize(x, y, list, ctd)
 def initialize(x, y, list = [], ctd = false)
   super(x, y, Graphics.width/2, Graphics.height-y)
   @cantdisable = ctd
   self.index = 0
   set_list(list)
 end
#class Window_VDList#def item_max()
 def item_max
   @data ? @data.size : 1
 end
#class Window_VDList#def set_list(list)
 def set_list(list)
   @data = list
   self.index = item_max - 1 if self.index > 0 && item_max < self.index
   refresh
 end
#class Window_VDList#def enabled?(index)
 def enabled?(index)
   return true if @cantdisable
   !$game_player.sdebug.infos.include?(@data[index])
 end
#class Window_VDList#def item()
 def item
   return @data[self.index]
 end
#class Window_VDList#def add_item(it)
 def add_item(it)
   @data.push(it)
   set_list(@data.compact)
 end
#class Window_VDList#def remove_item(it)
 def remove_item(it)
   remove(@data.index(it))
 end
#class Window_VDList#def remove(index)
 def remove(index)
   return if index == nil
   return if index < 0
   return if index >= @data.size
   @data.delete_at(index)
   set_list(@data)
 end
#class Window_VDList#def refresh()
 def refresh
   create_contents
   for i in 0...item_max
     draw_item(i)
   end
 end
#class Window_VDList#def draw_item(index)
 def draw_item(index)
   rect = item_rect(index)
   self.contents.clear_rect(rect)
   return if @data[index].nil?
   im = $game_player.sdebug.get_item(@data[index], rect.width-4, enabled?(index))
   self.contents.blt(rect.x, rect.y, im, im.rect) if im
   im.dispose if im
 end
end

class Scene_VisibleDebug < Scene_Base
 # a silly, simple, scene
#class Scene_VisibleDebug#def start()
 def start
   super
   @help_window = Window_Help.new(1)
   @help_window.set_text(VDEBUG::help_TEXT)
   ips = @help_window.height
   # third list window parameter is the list, fourth is the cantdisable value
   @mainlist_window = Window_VDList.new(0, ips, VDEBUG::collect_mainlist)
   @debuglist_window = Window_VDList.new(@mainlist_window.width, ips,
                                         $game_player.sdebug.infos, true)
   @elementlist_window = Window_VDList.new(0, ips)
   @elementlist_window.visible = false
   @mainlist_window.activate
   @mainlist_window.set_handler(:ok, method(:mainlist_ok))
   @mainlist_window.set_handler(:cancel, method(:return_scene))
   @mainlist_window.set_handler(:pageup, method(:mainlist_pag))
   @mainlist_window.set_handler(:pagedown, method(:mainlist_pag))
   @debuglist_window.set_handler(:ok, method(:debuglist_ok))
   @debuglist_window.set_handler(:cancel, method(:return_scene))
   @debuglist_window.set_handler(:pageup, method(:debuglist_pag))
   @debuglist_window.set_handler(:pagedown, method(:debuglist_pag))
   @elementlist_window.set_handler(:ok, method(:elementlist_ok))
   @elementlist_window.set_handler(:cancel, method(:elementlist_cancel))
 end
#class Scene_VisibleDebug#def mainlist_ok()
 def mainlist_ok
   it = @mainlist_window.item
   if it[0] >= 0 # if item's a item:
     if @mainlist_window.enabled?(@mainlist_window.index) # add/remove
       @debuglist_window.add_item(it)
     else
       @debuglist_window.remove_item(it)
     end
     $game_player.sdebug.infos = @debuglist_window.data # update
     @mainlist_window.draw_item(@mainlist_window.index) # redraw
     @mainlist_window.activate
   else # if item's a group:
     process_elementlist_open(it) # open the sub-list
     @elementlist_window.activate
   end
 end
#class Scene_VisibleDebug#def mainlist_pag()
 def mainlist_pag
   @debuglist_window.activate
 end
#class Scene_VisibleDebug#def debuglist_ok()
 def debuglist_ok
   @debuglist_window.remove(@debuglist_window.index) # remove the item
   $game_player.sdebug.infos = @debuglist_window.data # update
   @mainlist_window.refresh # redraw
   @debuglist_window.activate
 end
#class Scene_VisibleDebug#def debuglist_pag()
 def debuglist_pag
   @mainlist_window.activate
 end
#class Scene_VisibleDebug#def elementlist_ok()
 def elementlist_ok
   it = @elementlist_window.item
   if @elementlist_window.enabled?(@elementlist_window.index) # add/remove
     @debuglist_window.add_item(it)
   else
     @debuglist_window.remove_item(it)
   end
   $game_player.sdebug.infos = @debuglist_window.data # update
   @elementlist_window.draw_item(@elementlist_window.index) # redraw
   @elementlist_window.activate
 end
#class Scene_VisibleDebug#def elementlist_cancel()
 def elementlist_cancel
   @mainlist_window.activate
   @elementlist_window.close
 end
#class Scene_VisibleDebug#def process_elementlist_open(it)
 def process_elementlist_open(it) # it contains the type and the size
   # collect elements of the group
   vals = []
   for d in 1..it[1] # starting from 1, because there aren't IDs 0 
     vals << [it[0]*-1,d] # the type must be positive
   end
   # and let the window appears
   @elementlist_window.set_list(vals)
   @elementlist_window.index = 0
   @elementlist_window.visible = true
   @elementlist_window.open
 end
end

Visibile anche

 

Bugs e Conflitti Noti

I salvataggi vengono modificati per contenere la lista di dati scelta. È possibile comunque caricare salvataggi precedenti, mentre per continuare ad usare quelli effettuati in presenza dello script, nel caso quest'ultimo venisse rimosso, è presente nella demo un piccolo codicino - per nulla invadente - da lasciare.

 

Altri Dettagli

Grazie a
per avermi ispirato l'idea (:

Grazie a
per avermi supportato con un fastidioso bug ^^

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

Giusto per sapere, l'eventuale rimozione di questo script dalla release finale del progetto va a incidere su qualcos'altro oltre ai salvataggi (che, imho, andrebbero cancellati comunque)?
Link to comment
Share on other sites

No, soltanto sui salvataggi, e come hai detto il problema si pone solo se decidi di togliere lo script mentre makeri. Nella release finale non ci sono i salvataggi quindi non c'è problema.

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

Ottimo, allora molto utile come script e senza problemi di utilizzo!
Link to comment
Share on other sites

Ti ringrazio Macha :3

Script!

 

Roba scritta, guide:

 

Applicazioni:

 

Progetti!

http://img69.imageshack.us/img69/2143/userbarctaf.png http://img641.imageshack.us/img641/5227/userbartemplateb.pnghttp://i46.tinypic.com/ac6id0.png

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...