Visible Debug 1.2c
Visible Debug 1.2cmikb89
Introduction
Sometimes something goes wrong with events, switches and variables. You don't know what is happening, you just know they don't work.
With this script you can set in game a list of parameters to take under control and they'll be shown and updated in real time.
Features
The parameters list includes:
[*]switches and variables, events' self switches;
[*]events, player, actors, battlers character's graphic;
[*]events and player Through state and position;
[*]tile id of current player position;
[*]items, weapons, armors possession number;
[*]battlers' hp, mp, tp (if enabled), atk, def, luk, agi, two states;
[*]actors' name & level (enemies don't have that);
[*]others useful datas you can check in configurations and can add your own.
Screenshots
http://img525.imageshack.us/img525/6813/visibledebugvxace.png
How to Use
Copy the script under Materials to use, then press F9 as usually and a choice window should appear.
Other infos in the comments.
Demo
Multilanguage demo v. 1.2c (1.33 M
http://www.mediafire.com/?o5dqoberdpn9opa
Script
Spoiler Code:
# Visible Debug v. 1.2c# VX Ace version# by mikb89# Details:#Sometimes something goes wrong with events switches and variables. You don't# know what is happening, you just know they don't work.#With this script you can set in game a list of parameters to take under# control and they'll be shown and updated in real time.#This list includes:# - switches and variables, events' self switches;# - events, player, actors, battlers character's graphic;# - events and player Through state and position;# - tile id of current player position;# - items, weapons, armors possession number;# - battlers' hp, mp, tp (if enabled), atk, def, luk, agi, two states;# - actors' name & level (enemies don't have that);# - others useful datas you can check here in configurations and can add your# own.# Configurations:module VDEBUG# Here's a list of terms you can change as you want:HELP_TEXT = "Enter: add/remove; Pag: change list." # Help yourself!# These are what appears on F9 press: CALL_CLASSIC_DEBUG_TEXT = "Debug call" CALL_VDEBUG_SETTINGS_TEXT = "Visible Debug data"# These are lists names: SWITCH_LIST_TEXT = "Switches" VARIABLE_LIST_TEXT = "Variables" ITEM_LIST_TEXT = "Items" ACTOR_LIST_TEXT = "Actors" EVENT_LIST_TEXT = "Events" DATA_LIST_TEXT = "Infos" WEAPON_LIST_TEXT = "Weapons" ARMOR_LIST_TEXT = "Armors" ENEMY_LIST_TEXT = "Enemies"SHOW_EVENT_NAME = true # Show the event name. Set false for compatibility.MOVE_AROUND_KEY = :ALT # Pressing this key many times the debug sprite will move in the four angles #of the screen and then hide.# The available data:def self.collect_mainlist poss = [] # You can change the order as you want, but can add nothing. 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 << poss << [-5, $game_map.events.size] # No need of -1 because it's a 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 # Unless you know what you're doing, of course.enddef self.useful_data da = # First value must be nil. da << [["Party:", $game_party.members.size], # Open an array, add the item. ["G:", $game_party.gold], # First value is a string shown... ["S:", $game_party.steps], # ...second value is the variable to show. ["T:", self.adjust_time(Graphics.frame_count)], # Remember the , ["Sav:", $game_system.save_count]] # Close the data array. # Will show: "Party: 3 G: 333 S: 33 T: 3:33 Sav: 3" with something #instead of 3. da << ["Timer:", self.adjust_time($game_timer.sec)] # Even a single item can be added. And variable can also be a def. da << [["Map id:", $game_map.map_id], ["Size:", $game_map.width], ["x", $game_map.height]] # You can, as an exercise, add for example the map name. # Add here your own! We want YOU for items adding. da # Here just returns the datas.enddef self.adjust_time(value) # Example of a function. Returns formatted time. value /= Graphics.frame_rate # Graphics.frame_rate = 1 second. sec = value % 60 # Get the seconds. value -= sec # Subtract them. "#{value/60}:#{sprintf("%02d",sec)}" # Return min:sec formatted time string.endend#Codename: vdebug($imported ||= {})[:mikb89_vdebug] = true# License:# - You can ask me to include support for other scripts as long as these scripts# use the $imported = true;# - You can modify and even repost my scripts, after having received a response# by me. For reposting it, anyway, you must have done heavy edit or porting,# you can't do a post with the script as is;# - You can use my scripts for whatever you want, from free to open to# commercial games. I'd appreciate by the way if you let me know about what# you're doing;# - You must credit me, if you use this script or part of it.# * operations to let the Visible Debug configuration be availableclass Scene_Map#class Scene_Map#def update_call_debug() <- rewrittendef update_call_debug SceneManager.call(Scene_ChoiceDebug) if $TEST && Input.press?(:F9)endendclass 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)endendclass 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?endend# * 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_Basealias_method(:updateSB_b4_vdebug, :update) unless method_defined?(:updateSB_b4_vdebug)#class Scene_Base#def update() <- aliaseddef update updateSB_b4_vdebug # update the debug sprite just everywhere! $game_player.sdebug.update if $game_playerendendclass << SceneManageralias_method(:run_b4_vdebug, :run) unless method_defined?(:run_b4_vdebug)#class Scene_Manager#def self.run() <- aliaseddef run run_b4_vdebug $game_player.sdebug.disposeendalias_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() <- aliaseddef 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_playerendendclass 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.newendendclass Sprite_Debug < Spriteattr_reader :infos#class Sprite_Debug#def initialize(i, pos)def initialize(i = nil, pos = 0) super() self.infos = (i.is_a?(Array) ? i : ) # must be an array self.z = 99999999 # a big value self.opacity = 222 # little transparency @last_values = [] @pos = pos - 1; move_around # position setend#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/outend#class Sprite_Debug#def w()def w # just to write a little less Graphics.width/2end#class Sprite_Debug#def infos=(i)def infos=(i) @infos = i create_bitmap # once data change, we recreate the imageend#class Sprite_Debug#def _dump(*args)def _dump(*args) str = @infos.nil? ? "n," : "" @infos.each {|i| i.each {|d| str += " #{d.is_a?(Numeric) ? d : "p"}"} str += "," } if str == "" str += @pos.to_s # values to saveend#class Sprite_Debug#def _load(data)def self._load(data) p data data = data.split(',') pos = data.pop.to_i || 0 i = data == "n" ? nil : data.each_index {|d| data = data.split data.each_index {|n| data = (data == "p" ? $game_player : data.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,.max) # h is 0, if there's no item for i in 0...@infos.size next if @infos == nil || @infos.size < 2 draw_row(i, true) endend#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) # 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.disposeend#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 bLackgroundend#class Sprite_Debug#def collect(v)def collect(v) # gets the relevant value(s) for each item case v when 0; collect_player when 1; $game_switches] when 2; $game_variables] when 3; $game_party.item_number($data_items]) when 4; collect_actor($game_actors]) when 5; collect_event($game_map.events]) when 6; collect_data(VDEBUG::useful_data]) when 7; $game_party.item_number($data_weapons]) when 8; $game_party.item_number($data_armors]) when 9; collect_enemy($game_troop.members-1]) else; nil endend#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 da << $game_map.data[$game_player.x, $game_player.y, i] end daend#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 daend#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 daend#class Sprite_Debug#def collect_data(data)def collect_data(data) da = [] return da if data.nil? || !data.is_a?(Array) data = unless data.is_a?(Array) return da if data.size < 1 for val in data da << val end daend#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 daend#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 when -9; draw_container(VDEBUG::ENEMY_LIST_TEXT, item, bit) when -8; draw_container(VDEBUG::ARMOR_LIST_TEXT, item, bit) when -7; draw_container(VDEBUG::WEAPON_LIST_TEXT, item, bit) when -6; draw_container(VDEBUG::DATA_LIST_TEXT, item, bit) when -5; draw_container(VDEBUG::EVENT_LIST_TEXT, item, bit) when -4; draw_container(VDEBUG::ACTOR_LIST_TEXT, item, bit) when -3; draw_container(VDEBUG::ITEM_LIST_TEXT, item, bit) when -2; draw_container(VDEBUG::VARIABLE_LIST_TEXT, item, bit) when -1; draw_container(VDEBUG::SWITCH_LIST_TEXT, item, bit) when 0; draw_player(item, bit, blta) when 1; draw_switch(item, bit, blta) when 2; draw_variable(item, bit, blta) when 3; draw_item(item, bit, blta) when 4; draw_actor(item, bit, blta) when 5; draw_event(item, bit, blta) when 6; draw_data(item, bit, blta) when 7; draw_weapon(item, bit, blta) when 8; draw_armor(item, bit, blta) when 9; draw_enemy(item, bit, blta) else; bit.dispose; bit = nil end bitend#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 tile += $game_map.data.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 endend#class Sprite_Debug#def draw_switch(n, bitmap, blta)def draw_switch(n, bitmap, blta) if n != nil name = $data_system.switches 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, " ? "N" : "FF"}]", 2) endend#class Sprite_Debug#def draw_variable(n, bitmap, blta)def draw_variable(n, bitmap, blta) if n != nil name = $data_system.variables 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.to_s, 2) endend#class Sprite_Debug#def draw_item(n, bitmap, blta)def draw_item(n, bitmap, blta) item = $data_items 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) endend#class Sprite_Debug#def draw_actor(n, bitmap, blta)def draw_actor(n, bitmap, blta) item = $game_actors 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 -= 4; vals -= 4; vals << 0 wb.draw_gauge(96, vals, 48+gs, item.tp_rate, wb.tp_gauge_color1, wb.tp_gauge_color2) end wb.draw_gauge(96, vals, 48+gs, item.hp_rate, wb.hp_gauge_color1, wb.hp_gauge_color2) wb.draw_gauge(96, vals, 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)) wb.contents.draw_text(iw-48+16, -4, 22, 24, Vocab::param(3)) wb.contents.draw_text(iw-80+16, 6, 22, 24, Vocab::param(6)) wb.contents.draw_text(iw-48+16, 6, 22, 24, Vocab::param(7)) 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 endend#class Sprite_Debug#def draw_event(n, bitmap, blta)def draw_event(n, bitmap, blta) item = $game_map.events 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) endend#class Sprite_Debug#def draw_data(n, bitmap, blta)def draw_data(n, bitmap, blta) item = VDEBUG::useful_data if item != nil && item.is_a?(Array) item = unless item.is_a?(Array) return if item.size < 1 str = "" for val in item str += val + " #{val} " end str[-1] = "" if str[-1] == " " bitmap.draw_text(0, 0, bitmap.width, 24, str, 1) endend#class Sprite_Debug#def draw_weapon(n, bitmap, blta)def draw_weapon(n, bitmap, blta) item = $data_weapons 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) endend#class Sprite_Debug#def draw_armor(n, bitmap, blta)def draw_armor(n, bitmap, blta) item = $data_armors 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) endend#class Sprite_Debug#def draw_enemy(n, bitmap, blta)def draw_enemy(n, bitmap, blta) item = $game_troop.members 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 -= 4; vals -= 4; vals << 0 wb.draw_gauge(96, vals, 48+gs, item.tp_rate, wb.tp_gauge_color1, wb.tp_gauge_color2) end wb.draw_gauge(96, vals, 48+gs, item.hp_rate, wb.hp_gauge_color1, wb.hp_gauge_color2) wb.draw_gauge(96, vals, 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)) wb.contents.draw_text(iw-48+16, -4, 22, 24, Vocab::param(3)) wb.contents.draw_text(iw-80+16, 6, 22, 24, Vocab::param(6)) wb.contents.draw_text(iw-48+16, 6, 22, 24, Vocab::param(7)) 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) endend#class Sprite_Debug#def get_icon(index)def get_icon(index) # get an icon with the Window_Base, cache it @icache ||= {} return @icache if @icache wb = Window_Base.new(-56,-56,56,56) wb.draw_icon(index,0,0) bit = wb.contents.clone wb.dispose @icache = bit bitend#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 if @icache 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 = bit # ...and cache it bitend#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 if @icache 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 = bit bitend#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 if @icache 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 = bit bitend#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 # set every new value and redraw if needed draw_row(i) if @last_values != (@last_values = collect(v)) end superendend# * operation to create a Visible Debug options screenclass Window_VDList < Window_Selectable# a silly, simple, window that handle a listattr_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 : 1end#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 refreshend#class Window_VDList#def enabled?(index)def enabled?(index) return true if @cantdisable !$game_player.sdebug.infos.include?(@data)end#class Window_VDList#def item()def item return @dataend#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) endend#class Window_VDList#def draw_item(index)def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) return if @data.nil? im = $game_player.sdebug.get_item(@data, rect.width-4, enabled?(index)) self.contents.blt(rect.x, rect.y, im, im.rect) if im im.dispose if imendendclass 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 # 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 endend#class Scene_VisibleDebug#def mainlist_pag()def mainlist_pag @debuglist_window.activateend#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.activateend#class Scene_VisibleDebug#def debuglist_pag()def debuglist_pag @mainlist_window.activateend#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.activateend#class Scene_VisibleDebug#def elementlist_cancel()def elementlist_cancel @mainlist_window.activate @elementlist_window.closeend#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 # starting from 1, because there aren't IDs 0 vals << *-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.openendend
Also visible on Pastebin.FAQ
Saves will contain the actual in-game list. It is possible to load previous saves, but to continue using those done while using this script, if you remove it, you can use a little piece of code you can find in the demo.
Credit and Thanks
Thanks Silver Element for having me inspired the idea
Author's Notes
N/A
本贴来自国际rpgmaker官方论坛作者:mikb89处,因国际论坛即将永久关站,为了存档多年珍贵资料,署名转载到本论坛存档,由于官方帖子为英文原帖,需要中文翻译请点击论坛顶部切换语言为中文就可以将帖子翻译成中文浏览,方便大家随时查看,原文地址:https://forums.rpgmakerweb.com/threads/visible-debug-1-2c.3458/
页:
[1]