DisturbedInside 2 Posted August 22, 2012 (edited) **Yanfly Status Menu with Tsukihime's Element information** v1.04 . by DisturbedInside, Yanfly, and Tsukihime Introduction Like stated in the title, this script will display Tsukihime's element info in the Yanfly status menu! UPDATES: I fixed a problem with the window resizing (changed the formula) and fixed my problem with opacity. So it should be normal now! Features: This script will allow the user to view the element information of a certain actor in the Yanfly status menu. This was a script request by Pinka. http://www.rpgmakervxace.net/topic/5250-yea-status-menu-add-on/ Screenshots How to Use Plug & play!! Script: #============================================================================== # # â–¼ Yanfly Engine Ace - Ace Status Menu with Elements v1.04 # -- Last Updated: 2012.08.22 # -- Authors: Yanfly, Tsukihime, DisturbedInside # -- Level: Normal # -- Requires: n/a # #============================================================================== $imported = {} if $imported.nil? $imported["YEA-StatusMenu_Elements"] = true #============================================================================== # â–¼ Updates # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # 2012.08.21 - Fixed problem with window opacity and created new formula for # window size (it should resize properly now) # 2012.08.21 - Added Tsukihime's Element Info # 2012.08.06 - Fix Sp Paramater TCR # 2011.12.26 - Compatibility Update: Rename Actor # 2011.12.23 - Started Script and Finished. # #============================================================================== # â–¼ Introduction # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # This script changes the status screen completely to something the player can # interact with more and be able to view actor data with more clarity. The # player is able to view the general information for an actor (parameters and # experience), a parameters bar graph, the various hidden extra parameters # (named properties in the script), and a customizable biography for the actor. # Also with this script, biographies can be changed at any time using a script # call to add more of a personal touch to characters. # #============================================================================== # â–¼ Instructions # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # To install this script, open up your script editor and copy/paste this script # to an open slot below â–¼ Materials/ç´ æ but above â–¼ Main. Remember to save. # # ----------------------------------------------------------------------------- # Script Calls - These commands are used with script calls. # ----------------------------------------------------------------------------- # $game_actors[x].description = string # Changes the biography description for actor x to that of the string. Use \n # to designate linebreaks in the string. If you wish to use text codes, write # them in the strings as \\n[2] or \\c[3] to make them work properly. # #============================================================================== # â–¼ Compatibility # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that # it will run with RPG Maker VX without adjusting. # #============================================================================== module YEA module STATUS #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Command Window Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # This section adjusts the commands that appear in the command window used # for the status screen. Rearrange the commands, add new ones, remove them # as you see fit. # # ------------------------------------------------------------------------- # :command Description # ------------------------------------------------------------------------- # :general Adds general page. # :parameters Adds parameters page. # :properties Adds properties page. # :biography Adds biography page. # # :rename Requires YEA - Rename Actor # :retitle Requires YEA - Retitle Actor # #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- COMMANDS =[ # The order at which the menu items are shown. # [ :command, "Display"], [ :general, "General"], [ :parameters, "Parameters"], [ :properties, "Properties"], [ :custom1, "Skills"], [ :custom2, "Equipment"], [ :custom3, "Class"], [ :biography, "Biography"], [ :rename, "Rename"], # Requires YEA - Rename Actor [ :retitle, "Retitle"], # Requires YEA - Rename Actor [ :elements, "Elements"], # this is the elements command ] # Do not remove this. #-------------------------------------------------------------------------- # - Status Custom Commands - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # For those who use scripts to that may produce unique effects for the # status menu, use this hash to manage the custom commands for the Status # Command Window. You can disable certain commands or prevent them from # appearing by using switches. If you don't wish to bind them to a switch, # set the proper switch to 0 for it to have no impact. #-------------------------------------------------------------------------- CUSTOM_STATUS_COMMANDS ={ # :command => [EnableSwitch, ShowSwitch, Handler Method, Window Draw], :custom1 => [ 0, 0, :command_name1, :draw_custom1], :custom2 => [ 0, 0, :command_name2, :draw_custom2], :custom3 => [ 0, 0, :command_name3, :draw_custom3], } # Do not remove this. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - General Window Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # These settings adjust the way the general window visually appears. # Not many changes need to be done here other than vocab changes. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- PARAMETERS_VOCAB = "Parameters" # Title used for Parameters. EXPERIENCE_VOCAB = "Experience" # Title used for Experience. NEXT_TOTAL_VOCAB = "Next %s Total EXP" # Label used for total experience. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Parameters Window Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # These settings adjust the way the parameters window visually appears. # Each of the stats have a non-window colour. Adjust them as you see fit. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- PARAM_COLOUR ={ # ParamID => [:stat, Colour1, Colour2 ], 2 => [ :atk, Color.new(225, 100, 100), Color.new(240, 150, 150)], 3 => [ :def, Color.new(250, 150, 30), Color.new(250, 180, 100)], 4 => [ :mat, Color.new( 70, 140, 200), Color.new(135, 180, 230)], 5 => [ :mdf, Color.new(135, 130, 190), Color.new(170, 160, 220)], 6 => [ :agi, Color.new( 60, 180, 80), Color.new(120, 200, 120)], 7 => [ :luk, Color.new(255, 240, 100), Color.new(255, 250, 200)], } # Do not remove this. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Properties Window Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # These settings adjust the way the properties window visually appears. # The properties have abbreviations, but leaving them as such makes things # confusing (as it's sometimes hard to figure out what the abbreviations # mean). Change the way the appear, whether or not they appear, and what # order they will appear in. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- PROPERTIES_FONT_SIZE = 16 # Font size used for properties. # These are the properties that appear in column 1. PROPERTIES_COLUMN1 =[ [:hit, "Hit Rate"], [:eva, "Evasion"], [:cri, "Critical Hit"], [:cev, "Critical Evade"], [:mev, "Magic Evasion"], [:mrf, "Magic Reflect"], [:cnt, "Counter Rate"], [:tgr, "Target Rate"], ] # Do not remove this. # These are the properties that appear in column 2. PROPERTIES_COLUMN2 =[ [:hrg, "HP Regen"], [:mrg, "MP Regen"], [:trg, "TP Regen"], [:rec, "Recovery"], [:grd, "Guard Rate"], [:pha, "Item Boost"], [:exr, "EXP Rate"], [:tcr, "TP Charge"], ] # Do not remove this. # These are the properties that appear in column 3. PROPERTIES_COLUMN3 =[ [:hcr, "HP Cost Rate"], # Requires YEA - Skill Cost Manager [:mcr, "MP Cost Rate"], [:tcr_y, "TP Cost Rate"], # Requires YEA - Skill Cost Manager [:cdr, "Cooldown Rate"], # Requires YEA - Skill Restrictions [:wur, "Warmup Rate"], # Requires YEA - Skill Restrictions [:pdr, "Physical Damage"], [:mdr, "Magical Damage"], [:fdr, "Floor Damage"], ] # Do not remove this. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # - Biography Window Settings - #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- # These settings adjust the way the biography appears including the title # used at the top, the font size, and whatnot. #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- BIOGRAPHY_NICKNAME_TEXT = "%s the %s" # How the nickname will appear. BIOGRAPHY_NICKNAME_SIZE = 32 # Size of the font used. end # STATUS end # YEA module Status_Element # List of elements that should not be included in the list Ignore = ["Absorb", "Physical"] # Element entries. Format: "element name" => [index, icon] # The name and icon must match the ones in the database Elements = { "Fire" => [3, 96], "Ice" => [4, 97], "Thunder" => [5, 98], "Water" => [6, 99], "Earth" => [7, 100], "Wind" => [8, 101], "Holy" => [9, 102], "Dark" => [10, 103] } # Icons to draw for attack/resistance Attack_Icon = 385 Resist_Icon = 510 end #============================================================================== # â–¼ Editting anything past this point may potentially result in causing # computer damage, incontinence, explosion of user's head, coma, death, and/or # halitosis so edit at your own risk. #============================================================================== #============================================================================== # â– Numeric #============================================================================== class Numeric #-------------------------------------------------------------------------- # new method: group_digits #-------------------------------------------------------------------------- unless $imported["YEA-CoreEngine"] def group; return self.to_s; end end # $imported["YEA-CoreEngine"] end # Numeric #============================================================================== # â– Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # public instance variables #-------------------------------------------------------------------------- attr_accessor :scene_status_index attr_accessor :scene_status_oy end # Game_Temp #============================================================================== # â– Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # new method: description= #-------------------------------------------------------------------------- def description=(text) @description = text end #-------------------------------------------------------------------------- # overwrite method: description #-------------------------------------------------------------------------- def description return @description unless @description.nil? return actor.description end def equips_elements(element_id) end def element_attack end def element_resist end end # Game_Actor class Game_Battler < Game_BattlerBase def element_resist end def element_attack end end #============================================================================== # â– Window_StatusCommand #============================================================================== class Window_StatusCommand < Window_Command #-------------------------------------------------------------------------- # public instance variables #-------------------------------------------------------------------------- attr_accessor :item_window #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(dx, dy) super(dx, dy) @actor = nil unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # window_width #-------------------------------------------------------------------------- def window_width; return 160; end #-------------------------------------------------------------------------- # actor= #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor refresh end #-------------------------------------------------------------------------- # visible_line_number #-------------------------------------------------------------------------- def visible_line_number; return 4; end #-------------------------------------------------------------------------- # ok_enabled? #-------------------------------------------------------------------------- def ok_enabled? return handle?(current_symbol) end #-------------------------------------------------------------------------- # make_command_list #-------------------------------------------------------------------------- def make_command_list return unless @actor for command in YEA::STATUS::COMMANDS case command[0] #--- Default --- when :general, :parameters, :properties, :biography, :elements add_command(command[1], command[0]) #--- Yanfly Engine Ace --- when :rename next unless $imported["YEA-RenameActor"] add_command(command[1], command[0], @actor.rename_allow?) when :retitle next unless $imported["YEA-RenameActor"] add_command(command[1], command[0], @actor.retitle_allow?) #--- Custom Commands --- else process_custom_command(command) end end if !$game_temp.scene_status_index.nil? select($game_temp.scene_status_index) self.oy = $game_temp.scene_status_oy end $game_temp.scene_status_index = nil $game_temp.scene_status_oy = nil end #-------------------------------------------------------------------------- # process_ok #-------------------------------------------------------------------------- def process_ok $game_temp.scene_status_index = index $game_temp.scene_status_oy = self.oy super end #-------------------------------------------------------------------------- # process_custom_command #-------------------------------------------------------------------------- def process_custom_command(command) return unless YEA::STATUS::CUSTOM_STATUS_COMMANDS.include?(command[0]) show = YEA::STATUS::CUSTOM_STATUS_COMMANDS[command[0]][1] continue = show <= 0 ? true : $game_switches[show] return unless continue text = command[1] switch = YEA::STATUS::CUSTOM_STATUS_COMMANDS[command[0]][0] enabled = switch <= 0 ? true : $game_switches[switch] add_command(text, command[0], enabled) end #-------------------------------------------------------------------------- # update #-------------------------------------------------------------------------- def update super update_item_window end #-------------------------------------------------------------------------- # update_item_window #-------------------------------------------------------------------------- def update_item_window return if @item_window.nil? return if @current_index == current_symbol @current_index = current_symbol @item_window.refresh end #-------------------------------------------------------------------------- # item_window= #-------------------------------------------------------------------------- def item_window=(window) @item_window = window update end #-------------------------------------------------------------------------- # update_help #-------------------------------------------------------------------------- def update_help return if @actor.nil? @help_window.set_text(@actor.actor.description) end end # Window_StatusCommand #============================================================================== # â– Window_StatusActor #============================================================================== class Window_StatusActor < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(dx, dy) super(dx, dy, window_width, fitting_height(4)) @actor = nil unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # window_width #-------------------------------------------------------------------------- def window_width; return Graphics.width - 160; end #-------------------------------------------------------------------------- # actor= #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor refresh end #-------------------------------------------------------------------------- # refresh #-------------------------------------------------------------------------- def refresh contents.clear return unless @actor draw_actor_face(@actor, 0, 0) draw_actor_simple_status(@actor, 108, line_height / 2) end end # Window_StatusActor #============================================================================== # â– Window_StatusItem #============================================================================== class Window_StatusItem < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(dx, dy, command_window) super(dx, dy, Graphics.width, Graphics.height - dy) @command_window = command_window @actor = nil refresh unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # actor= #-------------------------------------------------------------------------- def actor=(actor) return if @actor == actor @actor = actor refresh end #-------------------------------------------------------------------------- # refresh #-------------------------------------------------------------------------- def refresh contents.clear reset_font_settings return unless @actor draw_window_contents end #-------------------------------------------------------------------------- # draw_window_contents #-------------------------------------------------------------------------- def draw_window_contents case @command_window.current_symbol when :general self.opacity = 255 draw_actor_general when :parameters self.opacity = 255 draw_parameter_graph when :properties self.opacity = 255 draw_properties_list when :elements self.opacity = 0 draw_element_list when :biography, :rename, :retitle self.opacity = 255 draw_actor_biography else draw_custom end end #-------------------------------------------------------------------------- # draw_element_list #-------------------------------------------------------------------------- def draw_element_list create_element_window @element_window.show @element_window.activate end def create_element_window wx = Graphics.width - 400 wy = 192 @element_window = Window_ElementStatus.new(0, wy, Graphics.width, Graphics.height - wy) @element_window.actor = @actor end #-------------------------------------------------------------------------- # draw_actor_general #-------------------------------------------------------------------------- def draw_actor_general change_color(system_color) text = YEA::STATUS::PARAMETERS_VOCAB draw_text(0, 0, contents.width/2, line_height, text, 1) text = YEA::STATUS::EXPERIENCE_VOCAB draw_text(contents.width/2, 0, contents.width/2, line_height, text, 1) draw_general_parameters draw_general_experience unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # draw_general_parameters #-------------------------------------------------------------------------- def draw_general_parameters dx = 24 dy = line_height / 2 draw_actor_level(dx, line_height*1+dy, contents.width/2 - 24) draw_actor_param(0, dx, line_height*2+dy, contents.width/2 - 24) draw_actor_param(1, dx, line_height*3+dy, contents.width/2 - 24) draw_actor_param(2, dx, line_height*4+dy, contents.width/4 - 12) draw_actor_param(4, dx, line_height*5+dy, contents.width/4 - 12) draw_actor_param(6, dx, line_height*6+dy, contents.width/4 - 12) dx += contents.width/4 - 12 draw_actor_param(3, dx, line_height*4+dy, contents.width/4 - 12) draw_actor_param(5, dx, line_height*5+dy, contents.width/4 - 12) draw_actor_param(7, dx, line_height*6+dy, contents.width/4 - 12) unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # draw_actor_level #-------------------------------------------------------------------------- def draw_actor_level(dx, dy, dw) colour = Color.new(0, 0, 0, translucent_alpha/2) rect = Rect.new(dx+1, dy+1, dw-2, line_height-2) contents.fill_rect(rect, colour) change_color(system_color) draw_text(dx+4, dy, dw-8, line_height, Vocab::level) change_color(normal_color) draw_text(dx+4, dy, dw-8, line_height, @actor.level.group, 2) unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # draw_actor_param #-------------------------------------------------------------------------- def draw_actor_param(param_id, dx, dy, dw) colour = Color.new(0, 0, 0, translucent_alpha/2) rect = Rect.new(dx+1, dy+1, dw-2, line_height-2) contents.fill_rect(rect, colour) change_color(system_color) draw_text(dx+4, dy, dw-8, line_height, Vocab::param(param_id)) change_color(normal_color) draw_text(dx+4, dy, dw-8, line_height, @actor.param(param_id).group, 2) unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # draw_general_experience #-------------------------------------------------------------------------- def draw_general_experience if @actor.max_level? s1 = @actor.exp.group s2 = "-------" s3 = "-------" else s1 = @actor.exp.group s2 = (@actor.next_level_exp - @actor.exp).group s3 = @actor.next_level_exp.group end s_next = sprintf(Vocab::ExpNext, Vocab::level) total_next_text = sprintf(YEA::STATUS::NEXT_TOTAL_VOCAB, Vocab::level) change_color(system_color) dx = contents.width/2 + 12 dy = line_height * 3 / 2 dw = contents.width/2 - 36 draw_text(dx, dy + line_height * 0, dw, line_height, Vocab::ExpTotal) draw_text(dx, dy + line_height * 2, dw, line_height, s_next) draw_text(dx, dy + line_height * 4, dw, line_height, total_next_text) change_color(normal_color) draw_text(dx, dy + line_height * 1, dw, line_height, s1, 2) draw_text(dx, dy + line_height * 3, dw, line_height, s2, 2) draw_text(dx, dy + line_height * 5, dw, line_height, s3, 2) unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # draw_parameter_graph #-------------------------------------------------------------------------- def draw_parameter_graph draw_parameter_title dy = line_height * 3/2 maximum = 1 minimum = @actor.param_max(2) for i in 2..7 maximum = [@actor.param(i), maximum].max minimum = [@actor.param(i), minimum].min end maximum += minimum * 0.33 unless maximum == minimum for i in 2..7 rate = calculate_rate(maximum, minimum, i) dy = line_height * i - line_height/2 draw_param_gauge(i, dy, rate) change_color(system_color) draw_text(28, dy, contents.width - 56, line_height, Vocab::param(i)) dw = (contents.width - 48) * rate - 8 change_color(normal_color) draw_text(28, dy, dw, line_height, @actor.param(i).group, 2) unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end end #-------------------------------------------------------------------------- # calculate_rate #-------------------------------------------------------------------------- def calculate_rate(maximum, minimum, param_id) return 1.0 if maximum == minimum rate = (@actor.param(param_id).to_f - minimum) / (maximum - minimum).to_f rate *= 0.67 rate += 0.33 return rate end #-------------------------------------------------------------------------- # draw_param_gauge #-------------------------------------------------------------------------- def draw_param_gauge(param_id, dy, rate) dw = contents.width - 48 colour1 = param_gauge1(param_id) colour2 = param_gauge2(param_id) draw_gauge(24, dy, dw, rate, colour1, colour2) unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # param_gauge1 #-------------------------------------------------------------------------- def param_gauge1(param_id) return YEA::STATUS::PARAM_COLOUR[param_id][1] end #-------------------------------------------------------------------------- # param_gauge2 #-------------------------------------------------------------------------- def param_gauge2(param_id) return YEA::STATUS::PARAM_COLOUR[param_id][2] end #-------------------------------------------------------------------------- # draw_parameter_title #-------------------------------------------------------------------------- def draw_parameter_title colour = Color.new(0, 0, 0, translucent_alpha/2) rect = Rect.new(0, 0, contents.width, contents.height) contents.fill_rect(rect, colour) change_color(system_color) text = YEA::STATUS::PARAMETERS_VOCAB draw_text(0, line_height/3, contents.width, line_height, text, 1) end #-------------------------------------------------------------------------- # draw_properties_list #-------------------------------------------------------------------------- def draw_properties_list contents.font.size = YEA::STATUS::PROPERTIES_FONT_SIZE draw_properties_column1 draw_properties_column2 draw_properties_column3 reset_font_settings unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # draw_properties_column1 #-------------------------------------------------------------------------- def draw_properties_column1 dx = 24 dw = (contents.width - 24) / 3 - 24 dy = 0 for property in YEA::STATUS::PROPERTIES_COLUMN1 dy = draw_property(property, dx, dy, dw) end end #-------------------------------------------------------------------------- # draw_properties_column2 #-------------------------------------------------------------------------- def draw_properties_column2 dx = 24 + (contents.width - 24) / 3 dw = (contents.width - 24) / 3 - 24 dy = 0 for property in YEA::STATUS::PROPERTIES_COLUMN2 dy = draw_property(property, dx, dy, dw) end end #-------------------------------------------------------------------------- # draw_properties_column3 #-------------------------------------------------------------------------- def draw_properties_column3 dx = 24 + (contents.width - 24) / 3 * 2 dw = (contents.width - 24) / 3 - 24 dy = 0 for property in YEA::STATUS::PROPERTIES_COLUMN3 dy = draw_property(property, dx, dy, dw) end end #-------------------------------------------------------------------------- # draw_property #-------------------------------------------------------------------------- def draw_property(property, dx, dy, dw) fmt = "%1.2f%%" case property[0] #--- when :hit value = sprintf(fmt, @actor.hit * 100) when :eva value = sprintf(fmt, @actor.eva * 100) when :cri value = sprintf(fmt, @actor.cri * 100) when :cev value = sprintf(fmt, @actor.cev * 100) when :mev value = sprintf(fmt, @actor.mev * 100) when :mrf value = sprintf(fmt, @actor.mrf * 100) when :cnt value = sprintf(fmt, @actor.cnt * 100) when :hrg value = sprintf(fmt, @actor.hrg * 100) when :mrg value = sprintf(fmt, @actor.mrg * 100) when :trg value = sprintf(fmt, @actor.trg * 100) when :tgr value = sprintf(fmt, @actor.tgr * 100) when :grd value = sprintf(fmt, @actor.grd * 100) when :rec value = sprintf(fmt, @actor.rec * 100) when :pha value = sprintf(fmt, @actor.pha * 100) when :mcr value = sprintf(fmt, @actor.mcr * 100) when :tcr value = sprintf(fmt, @actor.tcr * 100) when :pdr value = sprintf(fmt, @actor.pdr * 100) when :mdr value = sprintf(fmt, @actor.mdr * 100) when :fdr value = sprintf(fmt, @actor.fdr * 100) when :exr value = sprintf(fmt, @actor.exr * 100) when :hcr return dy unless $imported["YEA-SkillCostManager"] value = sprintf(fmt, @actor.hcr * 100) when :tcr_y return dy unless $imported["YEA-SkillCostManager"] value = sprintf(fmt, @actor.tcr_y * 100) when :gcr return dy unless $imported["YEA-SkillCostManager"] value = sprintf(fmt, @actor.gcr * 100) when :cdr return dy unless $imported["YEA-SkillRestrictions"] value = sprintf(fmt, @actor.cdr * 100) when :wur return dy unless $imported["YEA-SkillRestrictions"] value = sprintf(fmt, @actor.wur * 100) #--- else; return dy end colour = Color.new(0, 0, 0, translucent_alpha/2) rect = Rect.new(dx+1, dy+1, dw-2, line_height-2) contents.fill_rect(rect, colour) change_color(system_color) draw_text(dx+4, dy, dw-8, line_height, property[1], 0) change_color(normal_color) draw_text(dx+4, dy, dw-8, line_height, value, 2) return dy + line_height end #-------------------------------------------------------------------------- # draw_actor_biography #-------------------------------------------------------------------------- def draw_actor_biography fmt = YEA::STATUS::BIOGRAPHY_NICKNAME_TEXT text = sprintf(fmt, @actor.name, @actor.nickname) contents.font.size = YEA::STATUS::BIOGRAPHY_NICKNAME_SIZE draw_text(0, 0, contents.width, line_height*2, text, 1) reset_font_settings draw_text_ex(24, line_height*2, @actor.description) unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end #-------------------------------------------------------------------------- # draw_custom #-------------------------------------------------------------------------- def draw_custom current_symbol = @command_window.current_symbol return unless YEA::STATUS::CUSTOM_STATUS_COMMANDS.include?(current_symbol) method(YEA::STATUS::CUSTOM_STATUS_COMMANDS[current_symbol][3]).call end #-------------------------------------------------------------------------- # draw_custom1 #-------------------------------------------------------------------------- def draw_custom1 dx = 0; dy = 0 for skill in @actor.skills next if skill.nil? next unless @actor.added_skill_types.include?(skill.stype_id) draw_item_name(skill, dx, dy) dx = dx == contents.width / 2 + 16 ? 0 : contents.width / 2 + 16 dy += line_height if dx == 0 return if dy + line_height > contents.height unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end end #-------------------------------------------------------------------------- # draw_custom2 #-------------------------------------------------------------------------- def draw_custom2 dx = 4; dy = 0; slot_id = 0 for equip in @actor.equips change_color(system_color) text = Vocab.etype(@actor.equip_slots[slot_id]) draw_text(dx, dy, contents.width - dx, line_height, text) reset_font_settings draw_item_name(equip, dx+92, dy) unless equip.nil? slot_id += 1 dy += line_height break if dy + line_height > contents.height end dw = Graphics.width * 2 / 5 - 24 dx = contents.width - dw; dy = 0 param_id = 0 8.times do colour = Color.new(0, 0, 0, translucent_alpha/2) rect = Rect.new(dx+1, dy+1, dw - 2, line_height - 2) contents.fill_rect(rect, colour) size = $imported["YEA-AceEquipEngine"] ? YEA::EQUIP::STATUS_FONT_SIZE : 20 contents.font.size = size change_color(system_color) draw_text(dx+4, dy, dw, line_height, Vocab::param(param_id)) change_color(normal_color) dwa = (Graphics.width * 2 / 5 - 2) / 2 draw_text(dx, dy, dwa, line_height, @actor.param(param_id).group, 2) reset_font_settings change_color(system_color) draw_text(dx + dwa, dy, 22, line_height, "→", 1) param_id += 1 dy += line_height break if dy + line_height > contents.height unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 end end end #-------------------------------------------------------------------------- # draw_custom3 #-------------------------------------------------------------------------- def draw_custom3 return unless $imported["YEA-ClassSystem"] data = [] for class_id in YEA::CLASS_SYSTEM::CLASS_ORDER next if $data_classes[class_id].nil? item = $data_classes[class_id] next unless @actor.unlocked_classes.include?(item.id) or YEA::CLASS_SYSTEM::DEFAULT_UNLOCKS.include?(item.id) data.push(item) end dx = 0; dy = 0; class_index = 0 for class_id in data item = data[class_index] reset_font_settings if item == @actor.class change_color(text_color(YEA::CLASS_SYSTEM::CURRENT_CLASS_COLOUR)) elsif item == @actor.subclass change_color(text_color(YEA::CLASS_SYSTEM::SUBCLASS_COLOUR)) else change_color(normal_color) end icon = item.icon_index draw_icon(icon, dx, dy) text = item.name draw_text(24, dy, contents.width-24, line_height, text) next if YEA::CLASS_SYSTEM::MAINTAIN_LEVELS level = @actor.class_level(item.id) contents.font.size = YEA::CLASS_SYSTEM::LEVEL_FONT_SIZE text = sprintf(YEA::CLASS_SYSTEM::CLASS_LEVEL, level.group) dwa = contents.width - (Graphics.width * 2 / 5 - 24) - 28 draw_text(dx, dy, dwa, line_height, text, 2) class_index += 1 dy += line_height break if dy + line_height > contents.height end dw = Graphics.width * 2 / 5 - 24 dx = contents.width - dw; dy = 0 param_id = 0 8.times do colour = Color.new(0, 0, 0, translucent_alpha/2) rect = Rect.new(dx+1, dy+1, dw - 2, line_height - 2) contents.fill_rect(rect, colour) contents.font.size = YEA::CLASS_SYSTEM::PARAM_FONT_SIZE change_color(system_color) draw_text(dx+4, dy, dw, line_height, Vocab::param(param_id)) change_color(normal_color) dwa = (Graphics.width * 2 / 5 - 2) / 2 draw_text(dx, dy, dwa, line_height, @actor.param(param_id).group, 2) reset_font_settings change_color(system_color) draw_text(dx + dwa, dy, 22, line_height, "→", 1) param_id += 1 dy += line_height break if dy + line_height > contents.height unless @element_window.nil? @element_window.opacity = 0 @element_window.contents_opacity = 0 @element_window.back_opacity = 0 @opacity = 255 end end end end # Window_StatusItem #============================================================================== # â–¼ Window_ElementStatus #============================================================================== class Window_ElementStatus < Window_Selectable def initialize(x, y, width, height) super(x, y, width, height) @opacity = 255 end def actor=(actor) return if @actor == actor @actor = actor refresh end def ignore_list Status_Element::Ignore end def include?(item) return true unless item.nil? || item.empty? || ignore_list.include?(item) end def item_max @data ? @data.size : 1 end def make_item_list @data = $data_system.elements.select {|item| include?(item) } @data.push(nil) if include?(nil) end def element_info(item) Status_Element::Elements[item] end def attack_icon Status_Element::Attack_Icon end def resist_icon Status_Element::Resist_Icon end def element_resist(element_id) if $imported["Elemental_Modifiers"] element_rate = @actor.element_resist_rate(element_id) else element_rate = @actor.element_rate(element_id) end resist = "%d%" %[0 + (element_rate*100 - 100) * -1.to_i] return resist end def element_damage(element_id) if $imported["Elemental_Modifiers"] element_rate = @actor.element_attack_rate(element_id) else element_rate = @actor.element_rate(element_id) end resist = "%d%" %[0 + (element_rate*100 - 100).to_i] return resist end def draw_item(index) item = @data[index] if item info = element_info(item) icon_index = info[1] rect = item_rect(index) rect.width -= 4 draw_icon(icon_index, rect.x, rect.y) if icon_index draw_text(rect.x + 32, rect.y, 172, line_height, item) draw_icon(attack_icon, rect.x + 148, rect.y) draw_text(rect.x + 180, rect.y, 172, line_height, element_damage(info[0])) draw_icon(resist_icon, rect.x + 252, rect.y) draw_text(rect.x + 284, rect.y, 172, line_height, element_resist(info[0])) end end def refresh make_item_list contents.clear draw_all_items end def slide_speed 10 end def show #~ self.opacity = 255 #~ self.contents_opacity = 255 #~ self.back_opacity = 255 @opacity = 255 end def hide #~ self.opacity = 0 #~ self.contents_opacity = 0 #~ self.back_opacity = 0 @opacity = 255 end end # Window_ElementStatus #============================================================================== # â– Scene_Status #============================================================================== class Scene_Status < Scene_MenuBase #-------------------------------------------------------------------------- # start #-------------------------------------------------------------------------- def start super create_help_window create_command_window create_status_window create_item_window relocate_windows end def on_status_ok @element_window.show @element_window.activate end def on_element_cancel @element_window.hide @status_window.activate end #-------------------------------------------------------------------------- # create_command_window #-------------------------------------------------------------------------- def create_command_window wy = @help_window.height @command_window = Window_StatusCommand.new(0, wy) @command_window.viewport = @viewport @command_window.actor = @actor @command_window.help_window = @help_window @command_window.set_handler(:cancel, method(:return_scene)) @command_window.set_handler(:pagedown, method(:next_actor)) @command_window.set_handler(:pageup, method(:prev_actor)) process_custom_status_commands end #-------------------------------------------------------------------------- # process_custom_status_commands #-------------------------------------------------------------------------- def process_custom_status_commands for command in YEA::STATUS::COMMANDS next unless YEA::STATUS::CUSTOM_STATUS_COMMANDS.include?(command[0]) called_method = YEA::STATUS::CUSTOM_STATUS_COMMANDS[command[0]][2] @command_window.set_handler(command[0], method(called_method)) end end #-------------------------------------------------------------------------- # create_status_window #-------------------------------------------------------------------------- def create_status_window wy = @help_window.height @status_window = Window_StatusActor.new(@command_window.width, wy) @status_window.viewport = @viewport @status_window.actor = @actor end #-------------------------------------------------------------------------- # create_item_window #-------------------------------------------------------------------------- def create_item_window dy = @command_window.y + @command_window.height @item_window = Window_StatusItem.new(0, dy, @command_window) @item_window.viewport = @viewport @item_window.actor = @actor @command_window.item_window = @item_window end #-------------------------------------------------------------------------- # relocate_windows #-------------------------------------------------------------------------- def relocate_windows return unless $imported["YEA-AceMenuEngine"] case Menu.help_window_location when 0 # Top @help_window.y = 0 @command_window.y = @help_window.height @item_window.y = @command_window.y + @command_window.height when 1 # Middle @command_window.y = 0 @help_window.y = @command_window.height @item_window.y = @help_window.y + @help_window.height else # Bottom @command_window.y = 0 @item_window.y = @command_window.height @help_window.y = @item_window.y + @item_window.height end @status_window.y = @command_window.y end #-------------------------------------------------------------------------- # on_actor_change #-------------------------------------------------------------------------- def on_actor_change @command_window.actor = @actor @status_window.actor = @actor @item_window.actor = @actor @command_window.activate end #-------------------------------------------------------------------------- # new method: command_name1 #-------------------------------------------------------------------------- def command_name1 SceneManager.call(Scene_Skill) end #-------------------------------------------------------------------------- # new method: command_name2 #-------------------------------------------------------------------------- def command_name2 SceneManager.call(Scene_Equip) end #-------------------------------------------------------------------------- # new method: command_name3 #-------------------------------------------------------------------------- def command_name3 unless $imported["YEA-ClassSystem"] @command_window.activate return end SceneManager.call(Scene_Class) end end # Scene_Status #============================================================================== # # â–¼ End of File # #============================================================================== FAQ Q: what are the terms of use? A: free to use in any game. Just credit Yanfly, Tsukihime, and DisturbedInside in some visible manner! Q: Why are you so awesome? A: Dunno, do you think I am? Q: I think I know how to make this better!! A: Great! Post it here. I'll implement he change and give you a mention in the script Q: Can you make it compatible with XYz script? A: I can try. Post the link here. Q: Can I edit this script to use in my game? A: hell yeah!! Just remember to credit the necessary people!! Credit and Thanks - DisturbedInside - Yanfly - Tsukihime - Pinka Author's comments - Adding in the Tsuki element info proved to be a greater challenge than I expected, partly due to to fact that Tsukihime's window was created in a different place from Yanfly's window (window_selectable rather than window_base). Because of this, I had a harder time calling the window than normal. Plus there are things in window_selectable that aren't in window_base. Edited February 7, 2021 by Rikifive Updated the script to fix issue with unicode character (arrow) Share this post Link to post Share on other sites
Sievn 3 Posted August 22, 2012 (edited) Its a nice script but you do know the Elements aren't sized right. How can I fix this issue like you did in your screen shot? =/ Its nice script thought from what I could see. Edited August 22, 2012 by Sievn Share this post Link to post Share on other sites
Tsukihime 1,489 Posted August 22, 2012 (edited) I made it a window selectable because you could have more than 8 elements. I don't know if there's a way to pan a window base. But I don't understand what kind of issues you could have run into if you're just opening the window. selectable window doesn't require extra things. Edited August 22, 2012 by Tsukihime Share this post Link to post Share on other sites
DisturbedInside 2 Posted August 22, 2012 @Sievn If you're using the default size for the RPG MAKER VX ACE here is the code to use @element_window = Window_ElementStatus.new(wx-144, wy, 544, Graphics.height - wy) just search for @element_window = Window_ElementStatus.new(wx-240, wy, 640, Graphics.height - wy) it should be around line 560. if you are using a different size by using Yanfly's core engine or someone else's core engine, let me know. @Tsukihime You're absolutely right. This particular Yanfly script doesn't allow scrolling within certain tabs. I suppose I could make it more like the custom 3 (class system) But I always figured I could resize the window that was created. BTW: I found one small error in the script (didn't test O_o) So I updated it! Share this post Link to post Share on other sites
Sievn 3 Posted August 22, 2012 (edited) @Sievn If you're using the default size for the RPG MAKER VX ACE here is the code to use @element_window = Window_ElementStatus.new(wx-144, wy, 544, Graphics.height - wy) just search for @element_window = Window_ElementStatus.new(wx-240, wy, 640, Graphics.height - wy) it should be around line 560. if you are using a different size by using Yanfly's core engine or someone else's core engine, let me know. @Tsukihime You're absolutely right. This particular Yanfly script doesn't allow scrolling within certain tabs. I suppose I could make it more like the custom 3 (class system) But I always figured I could resize the window that was created. BTW: I found one small error in the script (didn't test O_o) So I updated it! I see. Thank you EDIT : Works Perfect Now Do you intend on adding more features? Edited August 22, 2012 by Sievn Share this post Link to post Share on other sites
Mr. Bubble 117 Posted August 22, 2012 Pretty sure you could've done this all within a new, separate script. YF's scripts tend to be made with the intention that other developers can add to them with relative ease. @Sievn If you're using the default size for the RPG MAKER VX ACE here is the code to use @element_window = Window_ElementStatus.new(wx-144, wy, 544, Graphics.height - wy) just search for @element_window = Window_ElementStatus.new(wx-240, wy, 640, Graphics.height - wy) it should be around line 560. if you are using a different size by using Yanfly's core engine or someone else's core engine, let me know. Instead of using a constant value to define the width, you can just use Graphics.width You can also just use 0 in this case instead of wx-value @element_window = Window_ElementStatus.new(0, wy, Graphics.width, Graphics.height - wy) Now the window dynamically resizes itself based on the resolution. 1 Share this post Link to post Share on other sites
DisturbedInside 2 Posted August 23, 2012 @Sievn What do you want to see added? @ Mr. Bubble. Thanks: I already fixed this. Thought about it last night SCRIPT UPDATED!! to version 1.04 Share this post Link to post Share on other sites
pinka 7 Posted August 23, 2012 I don't get something. If i set an armor to give, for example, water resistence to 0%, which means u're actually completely immune to water, in the elements column i see something like: Water Attack -100% Defense 100% So i was wondering... how do I add element attack rate to a weapon or armor? I can only see the resistence attribute efficiency in the options. Share this post Link to post Share on other sites
DisturbedInside 2 Posted August 24, 2012 Hey Pinka This problem is a problem with Tsukihime's base element info script. I guarantee you if you put Tsukihime's element info script in and take out mine, it will be the same result. Of course you could try the elemental modifiers script (I think it's Tsukihime's) The problem is that there is no base formula for element attack and element resistance. I can try to write one, but no guarantees, since I will probably be going on hiatus soon. Cheers ~DisturbedInside Share this post Link to post Share on other sites
Draconis Kenjishiya 0 Posted September 30, 2012 (edited) I am having an issue with this. I added this script to my list without deleting the old status menu Ace I got from Yanfly's channel. When I scroll down to the "Properties" tab, the game crashes and gives me the following error report: Line 890: NoMethodError occurred. undefined method for 'tcr_y' for #<Game_Actor:0xc226e54> And when I scroll to the Elements tab, it tells me this: Line 1144: NoMethodError occurred. undefined method '[]' for Nil:NilClass I am not good at scripting and don't know what that means. I apologize if it is obvious. Thank you for your help =] Edited September 30, 2012 by Draconis Kenjishiya Share this post Link to post Share on other sites
Draconis Kenjishiya 0 Posted September 30, 2012 Actually. I got the Line 890 working. It was a problem with the Skill Cost Manager. Line 1144 is still a problem though. Share this post Link to post Share on other sites
Xandier 0 Posted October 11, 2012 I like it. One thing I would personally improve on is to allow custom, user defined text in the huge empty space to the right, or the empty space below the elemental information. That way the game creator can insert custom text into the status, so it would be like "Fire 100% 100% This element is most damaging to ice creatures". There is a lot of empty space and i t would be great to be able to right whatever we want in that space. Share this post Link to post Share on other sites
Janus Senpre 0 Posted October 29, 2012 (edited) I am having an issue with this. I added this script to my list without deleting the old status menu Ace I got from Yanfly's channel. When I scroll down to the "Properties" tab, the game crashes and gives me the following error report: Line 890: NoMethodError occurred. undefined method for 'tcr_y' for #<Game_Actor:0xc226e54> And when I scroll to the Elements tab, it tells me this: Line 1144: NoMethodError occurred. undefined method '[]' for Nil:NilClass I am not good at scripting and don't know what that means. I apologize if it is obvious. Thank you for your help =] I've got the same problem. Did anyone figure out a solution to this? EDIT: Figured it out. Thanks for the script. Edited October 29, 2012 by Janus Senpre Share this post Link to post Share on other sites
Coolie 148 Posted October 29, 2012 Well, what was the solution for others who are having the same problem? Share this post Link to post Share on other sites
Janus Senpre 0 Posted October 29, 2012 Well, what was the solution for others who are having the same problem? I had put this script under an already existing Yanfly's Status script. I simply removed the original script and it worked. On that note, I'm now having another issue. The elements page doesn't go away when I press 'Q' or 'W' when scrolling through characters. Each new element screen ends up on top of the previous one. Any tips? Share this post Link to post Share on other sites
Coolie 148 Posted October 30, 2012 I still get that NilClass error even when this script is the only script affecting Scene_Status. Odd. Is the script author MIA? Share this post Link to post Share on other sites
Toheka 1 Posted November 3, 2012 I love this script but I seem to be getting an error message for line 1147 icon_index = info[1], when I go to select the elements tab I get this error message undefined method '[]' for nil:NilClass. Can anyone help with this? Share this post Link to post Share on other sites
Toheka 1 Posted November 3, 2012 I love this script but I seem to be getting an error message for line 1147 icon_index = info[1], when I go to select the elements tab I get this error message undefined method '[]' for nil:NilClass. Can anyone help with this? Nevermind I forgot to change elements format Share this post Link to post Share on other sites
Toheka 1 Posted November 3, 2012 (edited) Sorry solved my own problem again Edited November 3, 2012 by Brian Metz Share this post Link to post Share on other sites
Coolie 148 Posted November 4, 2012 I love this script but I seem to be getting an error message for line 1147 icon_index = info[1], when I go to select the elements tab I get this error message undefined method '[]' for nil:NilClass. Can anyone help with this? Nevermind I forgot to change elements format Be more specific. Share this post Link to post Share on other sites
Toheka 1 Posted November 4, 2012 # List of elements that should not be included in the list Ignore = ["Magicks", "Physical"] # Element entries. Format: "element name" => [index, icon] # The name and icon must match the ones in the database Elements = { "Fire" => [3, 96], "Water" => [4, 99], "Thunder" => [5, 98], "Earth" => [6, 100], "Dark" => [7, 103], "Holy" => [8, 102], #"Holy" => [9, 102], #"Dark" => [10, 103] } this part of the script has to match what you have in system so if you have fire is id is 3 then that's how it has to be in the script and it worked for me Share this post Link to post Share on other sites
Coolie 148 Posted November 4, 2012 I have all of mine exactly as they are in the database and still encounter this error, so that isn't what's causing it. Share this post Link to post Share on other sites
Toheka 1 Posted November 5, 2012 then I don't know sorry Share this post Link to post Share on other sites
ekomega 20 Posted November 10, 2012 I have all of mine exactly as they are in the database and still encounter this error, so that isn't what's causing it. Brian Metz solution worked for me. Once I changed the name of one of my elements in the database (which apparently I had changed?), it worked perfectly. Thanks a lot! Share this post Link to post Share on other sites
TheDrifter 0 Posted December 30, 2012 (edited) William C, don't forget to write the elements you want to be "Ignored", even the empty elements in your database if you have some. Just name them something like "test" or "empty", and in the script, at the line that says: # List of elements that should not be included in the listIgnore = ["Magicks", "Physical"] just name all of the elements you don't want to see used. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Hey, is there a way to show more than just 8 elements? There's a lot of empty space next to each elements, and I'd like to have two columns of elements to occupy that space, but I don't know how to program RGSS3. Thanks! Edited December 30, 2012 by TheDrifter Share this post Link to post Share on other sites