Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # 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 << [0, $game_player]
- 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.
- end
- def self.useful_data
- da = [nil] # 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.
- end
- def 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.
- end
- end
- #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[script] = 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 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement