#=============================================================================== # # Yanfly Engine RD - Bestiary + Display Scanned Enemy # Last Date Updated: 2009.06.13 # Level: Easy, Normal, Hard, Lunatic # # Similar to the Display Skill Query script, I've made one for enemies. This was # mostly to replace my Display Target Data script, considering it didn't display # much data at all about the target. This one was also made on the account of # making a proper scan skill property in addition to different parts of enemy # data that it can scan. # # I've disliked scan systems where you would have to keep rescanning an enemy # to see its HP, MP, etc. It felt counterproductive on the player side since # valuable turns are wasted just to view some numbers. This system allows you to # pull up enemy data upon enemy selection (where I believe it matters most). # After all, providing convenience for the player is absolutely important since # it reduces metagaming, which is something that should never have to happen # for an RPG Maker project. # # For the users who fear giving too much information to their players, users can # disable parts of the script and prevent certain pages from appear at all. You # can limit how much and how little you want to show your players through # tags, too, for the enemies' noteboxes. # # Since the May 27th update, a bestiary option is created for the main menu. # You can access this menu and view all of the scanned data from the enemies # you've discovered. This option is accessible once the bestiary switch is on. # #=============================================================================== # Updates: # ---------------------------------------------------------------------------- # o 2009.06.10 - Compatibility added for Enemy Level Control. # o 2009.06.09 - Small fix to bestiary calculation for not requiring scan. # o 2009.05.27 - Bestiary added. # Monsters can now have more than one boss type. # o 2009.04.27 - MAJOR BUGFIX: Fixed a save game corrupting bug. # o 2009.04.21 - Finished and publicized. # o 2009.04.20 - Started script. #=============================================================================== # How to Use: Normal Mode #=============================================================================== # # To access the bestiary, make sure the switch governing the bestiary option # is on. Otherwise, it will not show. The bestiary will be accessible by default # at the start of a new game. # # ---------------------------------------------------------------------------- # Placing these tags into a skill's notebox will reveal specific scan data. The # scan data will appear for all enemies of the same enemy type, but each indi- # vidual enemy will still possess their own modifiers. # # # Causes the skill to unlock all scan data about the target enemy. # # # Causes the skill to unlock only the HP and MP portion of the enemy data. # Note that even if HP and MP were unscanned, the gauge bars will still move up # and down as to give the player a general idea of how much health the enemy has # before giving the player more accurate information. # # # Causes the skill to unlock the ADSA and HECO stats for the target enemy scan # data. On the HECO stats side, you can hide certain stats from appear. Odds is # hidden by default with this script. # # # Causes the skill to unlock the skill page for the target enemy scan data. This # will list all of the skills the enemy will use in battle. Duplicate skills are # condensed and removed from the listing. # # # Causes the skill to unlock the elements page for the target enemy data. This # provides a chart of the enemy's elemental affinities as to what will damage # the enemy more or less. # # or # Causes the skill to unlock the status effects page for the target enemy data. # Like the elements page, this provides a listing of status effect chances to # occur for the enemy. # # # Only appears if you have KGC Steal. This page will reveal information about # items that can be stolen form the enemy along with their steal rates. # # # Causes a skill to unlock the experience, gold, encounters page for target # enemy data. This is pretty much stuff that comes out of an enemy after a # battle is over. Can include drops (optional). # # # Causes a skill to unlock the drops page. Use this if you use KGC's Extra Drops # and if your enemies have huge drop lists. This will display way more. # # # Causes a skill to unlock the extra description page where you can make your # own custom notes. Note that if you don't alter the Lunatic mode hash down # below, even if you scan the enemy, the extra page won't show unless there is # something to be shown. # #=============================================================================== # How to Use: Hard Mode #=============================================================================== # # or # This will determine the boss types available for that enemy. Boss types will # categorize enemies differently in the bestiary and also display certain parts # of the scan data differently. # # For those that would like to prevent certain pages from showing up on specific # enemies, you can use the following tags on those enemies to prevent those very # pages from appearing without completely disabling a part of the scan set. # # # Prevents everything from being shown at all for that enemy. # # # Prevents HP and MP from being displayed for that enemy. # # # Prevents the ADSA and HECO stats from being displayed for that enemy. # # # Prevents skills from being displayed for that enemy. # # # Prevents element chart from being displayed for that enemy. # # or # Prevents status effect probability chart from being displayed for that enemy. # # # Prevents stolen items from being shown for that enemy. # # # Prevents victory spoil information from being shown for that enemy. # # # Prevents drop information from being displayed for that enemy. # # If you might have noticed, there's no hide version for description. This is # because if you simply don't add the enemy extra notes description to the hash, # they won't appear at all. It's easier to manage that way instead. # #=============================================================================== # # Compatibility # - Works With: KGC's ExtraDropItem, Steal # - Alias: Game_Battler, skill_effect # - Alias: Game_Enemy, initialize, transform, escape, perform_collapse # - Alias: Scene_Battle, create_info_viewport, update_target_enemy_selection # #=============================================================================== # Credits: # KGC for Window_Command imports. #=============================================================================== $imported = {} if $imported == nil $imported["DisplayScannedEnemy"] = true module YE module MENU module MONSTER #------------------------------------------------------------------------ # BESTIARY RELATED #------------------------------------------------------------------------ # The following will govern the rules which the bestiary scene will abide # by. Be sure to adjust it accordingly to your needs. BESTIARY_TITLE = "Bestiary" # The title which appears on the menu. BESTIARY_SWITCH = 71 # Which switch will enable this command? BESTIARY_LIST = "%s List" # Text which follows boss type. BESTIARY_MASK = "?" # Mask used for unknown enemies. # The following is an array used to hide monsters from the bestiary. # Input the ID's of the monsters into the array if you wish to hide them. # By default, Swap Dummy Monsters are automatically hidden. HIDDEN_MONSTERS = [31, 32, 33, 34, 35] # The following determines the order the monsters are displayed in. Note # that if you alphabetize the monster list, this will have no effect. BESTIARY_ORDER = [16, 1..15, 17..30] # The following lets you govern the rules for displaying different # boss type categories. CATEGORIZE_TEXT = "Shift: Change Categories" CATEGORIZE_HELP = "Select a Category Type" CATEGORIZE_VIEW = "View %s" CATEGORIZE_BUTTON = Input::SHIFT # The following adjusts the category data shown for the overall monster # book information. MENU_FONT_SIZE = 16 BESTIARY_INFO = "Bestiary Information" TEXT_COMPLETION = "Bestiary Completion" RATE_COMPLETION = "%#.05g%%" ICON_COMPLETION = 141 TEXT_DISCOVERED = "Total Discovered" ICON_DISCOVERED = 196 TEXT_ENCOUNTERS = "Total Encounters" TEXT_DEFEATED = "Total Defeated" TEXT_ESCAPED = "Total Escaped" TEXT_TYPE_DIS = "%s Discovered" TEXT_TYPE_ENC = "%s Encountered" TEXT_TYPE_DEF = "%s Defeated" TEXT_TYPE_ESC = "%s Escaped" #------------------------------------------------------------------------ # SCAN WINDOW RELATED #------------------------------------------------------------------------ # This is the button pressed to trigger the enemy scan window in battle. ENEMY_SCAN_BUTTON = Input::A # If this is set to true, you must use scan skills on an enemy type before # any data will be displayed at all. REQUIRE_SCAN = true # This allows you to adjust the help info window's properties in battle. HELP_WINDOW_TX = "Press Shift to view enemy data." HELP_WINDOW_ON = true # This turns the window on and off. HELP_WINDOW_X = 0 # This is where the X position is. HELP_WINDOW_Y = 0 # This is where the Y position is. HELP_WINDOW_W = 544 # This is what width the window is. HELP_WINDOW_O = 255 # This is the window's opacity level. # This affects how you want the scan to appear. ENEMY_NAME = "%s Data" # This displays the title information at the very top of the scan window. # Most of the strings are explained by the notes to the side. DATA_LEFT = "<<" # This appears if page can be moved back. DATA_PAGE1 = "Information" # This appears if only one page of info. DATA_PAGES = "Page %d/%d" # This appears if more than one page of info. DATA_RIGHT = ">>" # This appears if page can move right. DATA_CATEGORY_COLOUR = 4 # This affects category text colour. # This is the sound played when flipping through the various pages. # Set it to nil if you don't want a sound to play. PAGE_SOUND = RPG::SE.new("Wind7", 80, 125) # Set this to true if you would rather the scan display the page info # type rather than Page X/Y. The titles following correspond to the pages' # titles should you decide to display them. REPLACE_PAGE_MSG = true TITLE_UNKNOWN = "Unknown" # This affects the information shown on the first page of the scan. # The first page shows HP, general stats, and states if the enemy is # under the effects of any. SHOW_GENERAL = true TITLE_GENERAL = "General Info" GAUGE_HEIGHT = 9 # This affects the gauge height. EXHAUST_COLOUR = 7 # This adjusts the exhaustion colour. FONT_SIZE = 16 # Sets font size for smaller text. HIDDEN_HP = "?????" # If the enemy is unscanned or hides HP. HIDDEN_MP = "?????" # If the enemy is unscanned or hides MP. DATA_STATES = "Status Effects" # Category for affected states. HIDDEN_STAT = "???" # If the enemy is unscanned or hides stats. DATA_ATK = "ATK" # For attack. DATA_DEF = "DEF" # For defense. DATA_SPI = "SPI" # For spirit. DATA_AGI = "AGI" # For agility. DATA_HIT = "HIT" # For hit rate. HIDE_HIT = false # Set this to true if you wish to hide Hit. DATA_EVA = "EVA" # For evasion rate. HIDE_EVA = false # Set this to true if you wish to hide Eva. DATA_CRI = "CRI" # For critical rate. HIDE_CRI = false # Set this to true if you wish to hide Cri. DATA_ODDS = "LUK" # For odds value. HIDE_ODDS = true # Set this to true if you wish to hide Odds. # The display types alter how HP and MP is shown for scanned enemies. # Type 1: Current HP # Type 2: Current HP/MaxHP # Type 3: Percentage of Current HP/MaxHP # The same goes for MP display type. HP_DISPLAY_TYPE = 2 MP_DISPLAY_TYPE = 2 # Here you can control boss types and whatnot. To use boss types, add # the boss type category here and insert in the enemy's notebox the # tag. It will reference to this hash as to how to display # the following information: Boss Type Icon, HP Icon, HP Colour 1, # HP Colour 2, MP Icon, MP Colour 1, and MP Colour 2. BOSS_TYPES ={ # Type => [Icon,HPIc,HPC1,HPC2,MPIc,MPC1,MPC2, Type Name, Pural] 0 => [ 118, 99, 20, 21, 100, 22, 23, "Monster", "Monsters"], 1 => [ 112, 208, 18, 20, 209, 11, 22, "Boss", "Bosses"], 2 => [ 157, 99, 20, 21, 100, 22, 23, "Midboss", "Midbosses"], } # Do not remove this. # This is for the bestiary and how you would like the order to appear. TYPE_ORDERING = [0, 2, 1] # This is all of the icon information for the first page. ICON_HIGH = 142 # If a stat is higher than base stat. ICON_LOW = 143 # If a stat is lower than base stat. ICON_ATK = 2 # Icon for ATK ICON_DEF = 52 # Icon for DEF ICON_SPI = 21 # Icon for SPI ICON_AGI = 48 # Icon for AGI ICON_HIT = 135 # Icon for HIT ICON_EVA = 158 # Icon for EVA ICON_CRI = 119 # Icon for CRI ICON_ODDS = 137 # Icon for ODD # This affects info displayed on the skill info page. Skills only appear # if the monster has those skills in its action list. Otherwise, this # page will not appear at all. SHOW_SKILLS = true TITLE_SKILLS = "Skill Info" DATA_SKILLS = "Skill Name" VIEW_SKILLS1 = "%d Skill" VIEW_SKILLS2 = "%d Skills" # This affects info displayed for the element affinity info page. # Elements will only show if they are listed in the hash below. SHOW_ELEMENTS = true TITLE_ELEMENTS = "Element Affinity" ICON_E_RATE_U = 9 # Icon used for unknown element rates. ICON_E_RATE_Z = 96 # Icon used for element rate Z. ICON_E_RATE_A = 99 # Icon used for element rate A. ICON_E_RATE_B = 99 # Icon used for element rate B. ICON_E_RATE_C = 102 # Icon used for element rate C. ICON_E_RATE_D = 101 # Icon used for element rate D. ICON_E_RATE_E = 100 # Icon used for element rate E. ICON_E_RATE_F = 103 # Icon used for element rate F. ELEMENT_HASH ={ # These hashes allow you to construct various rows in the element page. # There's a maximum fit of 10 elements per row. "Physical Elements" => [ # These are the element ID's. [ 2, 3, 4, 5, 6], # These are the element icons. [ 10, 4, 14, 16, 12] ], # Next row "Magical Elements" => [ # These are the element ID's. [ 9, 10, 11, 12, 13, 14, 15, 16], # These are the element icons. [ 104, 105, 106, 107, 108, 109, 110, 111] ], # Next row } # Do not remove this. # This affects info displayed for the status effect probability page. # Status effect will only show if they're listed in the hash below. SHOW_STATES = true TITLE_STATES = "Status Chances" ICON_S_RATE_U = 94 # Icon used for unknown status rates. ICON_S_RATE_Z = 96 # Icon used for status rate Z. ICON_S_RATE_A = 99 # Icon used for status rate A. ICON_S_RATE_B = 99 # Icon used for status rate B. ICON_S_RATE_C = 102 # Icon used for status rate C. ICON_S_RATE_D = 101 # Icon used for status rate D. ICON_S_RATE_E = 100 # Icon used for status rate E. ICON_S_RATE_F = 103 # Icon used for status rate F. STATES_HASH ={ # These hashes allow you to construct various rows in the states page. # There's a maximum fit of 10 states per row. "Conditions" => [ 2, 3, 4, 5, 6, 7, 8], "Buffs" => [ 9, 10, 11, 12], "Debuffs" => [13, 14, 15, 16], } # Do not remove this. # The following portion requires KGC's Steal script to show, but doesn't # affect the rest of this script. This page shows a list of stealable # goodies you can nab using KGC's Steal script. SHOW_STEAL = true TITLE_STEAL = "Steal Info" DATA_S_ITEM = "Item Name" DATA_S_CHANCE = "Rate" # This affects info displayed for the spoils page. Note that you can # choose to activate this page if an enemy of a type dies. SHOW_SPOILS = true TITLE_SPOILS = "Victory Spoils" DEATH_SPOILS = true # Set to true if you wish to reveal spoils info # when an enemy dies. DATA_GOLD = "Gold" # Message used to indicate gold drop. VIEW_GOLD = "%d Gold" # How the gold gain will appear. ICON_GOLD = 205 # Icon used for gold drop. DATA_EXP = "EXP" # Message used to indicate experience gain. VIEW_EXP = "%d EXP" # How the exp gain will appear. ICON_EXP = 62 # Icon used for exp gain. DATA_ENCOUNTER = "Encounters" # Message used to indicate encounters. VIEW_ENC1 = "%d Time" # How the encounters will appear. Singular. VIEW_ENC2 = "%d Times" # How the encounters will appear. Plural. ICON_ENCOUNTER = 63 # Icon used for encounters. DATA_KILLED = "Defeated" # Message used to indicate defeats. VIEW_KILLED1 = "%d Kill" # How the defeats will appear. Singular. VIEW_KILLED2 = "%d Kills" # How the defeats will appear. Plural. ICON_KILLED = 157 # Icon used for defeats. DATA_ESCAPED = "Escaped" # Message used to indicate escapes. VIEW_ESCAPED1 = "%d Fled" # How the defeats will appear. Singular. VIEW_ESCAPED2 = "%d Fled" # How the defeats will appear. Plural. ICON_ESCAPED = 155 # Icon used for escapes. SPOIL_DROPS = false # Draw drops for the Spoils page? DATA_DROPS = "Drops" # Message used to indicate drops. # For those that would like a separate page for drops, use this page. # This affects all of the information relative to drops anyway. SHOW_DROPS = true TITLE_DROPS = "Drops Info" DEATH_DROPS = true # Set to true if you wish to reveal spoils info # when an enemy dies. DATA_D_ITEM = "Drop Name" DATA_D_CHANCE = "Chance" # This affects the enemy notes section which requires Lunatic modifying. # This page can be about anything you want to write about. SHOW_NOTES = true TITLE_NOTES = "Notes" NOTE_PAGE_WIDTH = 240 NOTE_PAGE_TEXT_SIZE = 16 NOTE_PAGE_TEXT_COLOUR = 0 end # MONSTER end # MENU end # YE #=============================================================================== # How to Use: Lunatic Mode #=============================================================================== # # This part allows you to input your own custom notes and whatnot. Custom notes # page will only appear for enemies that are listed in the note hash beneath the # Lunatic Mode section. # # The process is pretty simple. Just follow the template below. # # ENEMY_NOTES ={ # enemy_id => "This would be the first line| and this would be the next!", # } # Do not remove this. # # Enter the enemy's ID number where "enemy_id" is. Following the "=>" input # the custom notes you'd like for that enemy to display. If you wish to add # line breaks to notes, add a | where you would like the break to appear. Now # while they do appear in the notebox, they are confined by the note page's # width and will shrink if the lines end up being too long. You can adjust the # note page's width in the part before the Lunatic Mode instructions. # #=============================================================================== module YE module HASH ENEMY_NOTES ={ 26 => "Vampires are mythological or|folkloric revenants who sub-|sist by feeding on the blood|of the living. In folkloric|tales, the undead vampires|often visited loved ones and|caused mischief or deaths in|the neighbourhoods they in-|habited when they were alive.", 1200 => "Hello, world.|It's nice to meet you.", 1201 => "Good bye, world.|It was nice meeting you.", } # Do not remove this. end #module HASH end #module YE #=============================================================================== # Editting anything past this point may potentially result in causing computer # damage, incontinence, explosion of user's head, coma, death, and/or halitosis. # Therefore, edit at your own risk. #=============================================================================== module YE module REGEXP module BASEITEM SCAN_WHOLE = /<(?:SCAN_WHOLE|scan whole)>/i SCAN_HP_MP = /<(?:SCAN_HP_MP|scan hp mp)>/i SCAN_STATS = /<(?:SCAN_STATS|scan stats)>/i SCAN_SKILL = /<(?:SCAN_SKILLS|scan skills)>/i SCAN_ELEM = /<(?:SCAN_ELEMENTS|scan elements)>/i SCAN_STATE = /<(?:SCAN_STATUS_EFFECTS|scan status effects|scan states)>/i SCAN_SPOIL = /<(?:SCAN_SPOILS|scan spoils)>/i SCAN_DROPS = /<(?:SCAN_DROPS|scan drops)>/i SCAN_STEAL = /<(?:SCAN_STEAL|scan steal)>/i SCAN_DESC = /<(?:SCAN_DESCRIPTION|scan description)>/i end # BASEITEM module ENEMY BOSS_TYPE = /<(?:BOSS_TYPE|boss type)[ ]*(\d+(?:\s*,\s*\d+)*)>/i HIDE_WHOLE = /<(?:HIDE_WHOLE|hide whole)>/i HIDE_HP_MP = /<(?:HIDE_HP_MP|hide hp mp)>/i HIDE_STATS = /<(?:HIDE_STATS|hide stats)>/i HIDE_SKILL = /<(?:HIDE_SKILLS|hide skills)>/i HIDE_ELEM = /<(?:HIDE_ELEMENTS|hide elements)>/i HIDE_STATE = /<(?:HIDE_STATUS_EFFECTS|hide status effects|hide states)>/i HIDE_SPOIL = /<(?:HIDE_SPOILS|hide spoils)>/i HIDE_DROPS = /<(?:HIDE_DROPS|hide drops)>/i HIDE_STEAL = /<(?:HIDE_STEAL|hide steal)>/i end # ENEMY end # REGEXP module_function #-------------------------------------------------------------------------- # Convert Array to Integer #-------------------------------------------------------------------------- def convert_integer_array(array) result = [] for i in array case i when Range; result += i.to_a when Integer; result.push(i) end end return result end #-------------------------------------------------------------------------- # Converted Constants #-------------------------------------------------------------------------- ENEMY_LIST = convert_integer_array(MENU::MONSTER::BESTIARY_ORDER) HIDDEN_ENEMY = convert_integer_array(MENU::MONSTER::HIDDEN_MONSTERS) end # YE #=============================================================================== # RPG::Enemy #=============================================================================== class RPG::Enemy #-------------------------------------------------------------------------- # Yanfly_Cache_DSE #-------------------------------------------------------------------------- def yanfly_cache_enemy_dse @hide_whole = false; @hide_hp_mp = false; @hide_stats = false @hide_elem = false; @hide_state = false; @hide_desc = false @hide_skill = false; @hide_spoil = false; @hide_drops = false @hide_steal = false @boss_type = [] self.note.split(/[\r\n]+/).each { |line| case line when YE::REGEXP::ENEMY::BOSS_TYPE $1.scan(/\d+/).each { |num| if num.to_i >= 0 @boss_type.push(num.to_i) end } when YE::REGEXP::ENEMY::HIDE_WHOLE @hide_whole = true when YE::REGEXP::ENEMY::HIDE_HP_MP @hide_hp_mp = true when YE::REGEXP::ENEMY::HIDE_STATS @hide_stats = true when YE::REGEXP::ENEMY::HIDE_SKILL @hide_skill = true when YE::REGEXP::ENEMY::HIDE_ELEM @hide_elem = true when YE::REGEXP::ENEMY::HIDE_STATE @hide_state = true when YE::REGEXP::ENEMY::HIDE_SPOIL @hide_spoil = true when YE::REGEXP::ENEMY::HIDE_DROPS @hide_drops = true when YE::REGEXP::ENEMY::HIDE_STEAL @hide_steal = true end } @boss_type = [0] if @boss_type == [] end # end yanfly_cache_cse #-------------------------------------------------------------------------- # Boss Type #-------------------------------------------------------------------------- def boss_type yanfly_cache_enemy_dse if @boss_type == nil return @boss_type end #-------------------------------------------------------------------------- # Hide Scan #-------------------------------------------------------------------------- def hide_whole yanfly_cache_enemy_dse if @hide_whole == nil return @hide_whole end def hide_hp_mp yanfly_cache_enemy_dse if @hide_hp_mp == nil return @hide_hp_mp end def hide_stats yanfly_cache_enemy_dse if @hide_stats == nil return @hide_stats end def hide_skill yanfly_cache_enemy_dse if @hide_skill == nil return @hide_skill end def hide_elem yanfly_cache_enemy_dse if @hide_elem == nil return @hide_elem end def hide_state yanfly_cache_enemy_dse if @hide_state == nil return @hide_state end def hide_spoil yanfly_cache_enemy_dse if @hide_spoil == nil return @hide_spoil end def hide_drops yanfly_cache_enemy_dse if @hide_drops == nil return @hide_drops end def hide_steal yanfly_cache_enemy_dse if @hide_steal == nil return @hide_steal end end # RPG::Enemy #=============================================================================== # RPG::BaseItem #=============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # Yanfly_Cache_DSE #-------------------------------------------------------------------------- def yanfly_cache_baseitem_dse @scan_whole = false; @scan_hp_mp = false; @scan_stats = false @scan_elem = false; @scan_state = false; @scan_desc = false @scan_skill = false; @scan_spoil = false; @scan_drops = false @scan_steal = false self.note.split(/[\r\n]+/).each { |line| case line when YE::REGEXP::BASEITEM::SCAN_WHOLE @scan_whole = true when YE::REGEXP::BASEITEM::SCAN_HP_MP @scan_hp_mp = true when YE::REGEXP::BASEITEM::SCAN_STATS @scan_stats = true when YE::REGEXP::BASEITEM::SCAN_SKILL @scan_skill = true when YE::REGEXP::BASEITEM::SCAN_ELEM @scan_elem = true when YE::REGEXP::BASEITEM::SCAN_STATE @scan_state = true when YE::REGEXP::BASEITEM::SCAN_SPOIL @scan_spoil = true when YE::REGEXP::BASEITEM::SCAN_DROPS @scan_drops = true when YE::REGEXP::BASEITEM::SCAN_STEAL @scan_steal = true when YE::REGEXP::BASEITEM::SCAN_DESC @scan_desc = true end } end # end yanfly_cache_cse #-------------------------------------------------------------------------- # Skill Scan #-------------------------------------------------------------------------- def scan_whole yanfly_cache_baseitem_dse if @scan_whole == nil return @scan_whole end def scan_hp_mp yanfly_cache_baseitem_dse if @scan_hp_mp == nil return @scan_hp_mp end def scan_stats yanfly_cache_baseitem_dse if @scan_stats == nil return @scan_stats end def scan_skill yanfly_cache_enemy_dse if @scan_skill == nil return @scan_skill end def scan_elem yanfly_cache_baseitem_dse if @scan_elem == nil return @scan_elem end def scan_state yanfly_cache_baseitem_dse if @scan_state == nil return @scan_state end def scan_spoil yanfly_cache_baseitem_dse if @scan_spoil == nil return @scan_spoil end def scan_drops yanfly_cache_baseitem_dse if @scan_drops == nil return @scan_drops end def scan_steal yanfly_cache_baseitem_dse if @scan_steal == nil return @scan_steal end def scan_desc yanfly_cache_baseitem_dse if @scan_desc == nil return @scan_desc end end # RPG::BaseItem #=============================================================================== # Game Battler #=============================================================================== class Game_Battler #-------------------------------------------------------------------------- # alias skill_effect #-------------------------------------------------------------------------- alias skill_effect_dse skill_effect unless $@ def skill_effect(user, skill) skill_effect_dse(user, skill) if user.actor? and !self.actor? if skill.scan_hp_mp or skill.scan_whole $game_party.scan_hp_mp.push(enemy.id) unless $game_party.scan_hp_mp.include?(enemy.id) end if skill.scan_stats or skill.scan_whole $game_party.scan_stats.push(enemy.id) unless $game_party.scan_stats.include?(enemy.id) end if skill.scan_skill or skill.scan_whole $game_party.scan_skill.push(enemy.id) unless $game_party.scan_skill.include?(enemy.id) end if skill.scan_state or skill.scan_whole $game_party.scan_state.push(enemy.id) unless $game_party.scan_state.include?(enemy.id) end if skill.scan_elem or skill.scan_whole $game_party.scan_elem.push(enemy.id) unless $game_party.scan_elem.include?(enemy.id) end if skill.scan_spoil or skill.scan_whole $game_party.scan_spoil.push(enemy.id) unless $game_party.scan_spoil.include?(enemy.id) end if skill.scan_drops or skill.scan_whole $game_party.scan_drops.push(enemy.id) unless $game_party.scan_drops.include?(enemy.id) end if skill.scan_steal or skill.scan_whole $game_party.scan_steal.push(enemy.id) unless $game_party.scan_steal.include?(enemy.id) end if skill.scan_desc or skill.scan_whole $game_party.scan_desc.push(enemy.id) unless $game_party.scan_desc.include?(enemy.id) end end end end # Game_Battler #=============================================================================== # Game Party #=============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # Public Instance Variables #-------------------------------------------------------------------------- attr_writer :monsters_encounter attr_writer :monsters_defeated attr_writer :monsters_escaped attr_writer :scan_hp_mp attr_writer :scan_stats attr_writer :scan_skill attr_writer :scan_state attr_writer :scan_elem attr_writer :scan_spoil attr_writer :scan_drops attr_writer :scan_steal attr_writer :scan_desc #-------------------------------------------------------------------------- # Definitions #-------------------------------------------------------------------------- def monsters_encounter @monsters_encounter = {} if @monsters_encounter == nil return @monsters_encounter end def monsters_defeated @monsters_defeated = {} if @monsters_defeated == nil return @monsters_defeated end def monsters_escaped @monsters_escaped = {} if @monsters_escaped == nil return @monsters_escaped end #-------------------------------------------------------------------------- # Definitions #-------------------------------------------------------------------------- def scan_hp_mp @scan_hp_mp = [] if @scan_hp_mp == nil return @scan_hp_mp end def scan_stats @scan_stats = [] if @scan_stats == nil return @scan_stats end def scan_skill @scan_skill = [] if @scan_skill == nil return @scan_skill end def scan_state @scan_state = [] if @scan_state == nil return @scan_state end def scan_elem @scan_elem = [] if @scan_elem == nil return @scan_elem end def scan_spoil @scan_spoil = [] if @scan_spoil == nil return @scan_spoil end def scan_drops @scan_drops = [] if @scan_drops == nil return @scan_drops end def scan_steal @scan_steal = [] if @scan_steal == nil return @scan_steal end def scan_desc @scan_desc = [] if @scan_desc == nil return @scan_desc end end #=============================================================================== # Game Enemy #=============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # alias initialize #-------------------------------------------------------------------------- alias initialize_dse initialize unless $@ def initialize(index, enemy_id) initialize_dse(index, enemy_id) $game_party.monsters_encounter = {} if $game_party.monsters_encounter == nil if $game_party.monsters_encounter[enemy_id] == nil $game_party.monsters_encounter[enemy_id] = 0 end $game_party.monsters_encounter[enemy_id] += 1 unless $scene.is_a?(Scene_Bestiary) end #-------------------------------------------------------------------------- # alias Transform #-------------------------------------------------------------------------- alias transform_dse transform unless $@ def transform(enemy_id) transform_dse(enemy_id) $game_party.monsters_encounter = {} if $game_party.monsters_encounter == nil if $game_party.monsters_encounter[enemy_id] == nil $game_party.monsters_encounter[enemy_id] = 0 end $game_party.monsters_encounter[enemy_id] += 1 end #-------------------------------------------------------------------------- # alias Collapse #-------------------------------------------------------------------------- alias perform_collapse_dse perform_collapse unless $@ def perform_collapse perform_collapse_dse if $game_temp.in_battle and dead? if YE::MENU::MONSTER::DEATH_SPOILS $game_party.scan_spoil.push(enemy.id) unless $game_party.scan_spoil.include?(enemy.id) end if YE::MENU::MONSTER::DEATH_DROPS $game_party.scan_drops.push(enemy.id) unless $game_party.scan_drops.include?(enemy.id) end $game_party.monsters_defeated = {} if $game_party.monsters_defeated == nil if $game_party.monsters_defeated[enemy_id] == nil $game_party.monsters_defeated[enemy_id] = 0 end $game_party.monsters_defeated[enemy.id] += 1 end end #-------------------------------------------------------------------------- # alias Escape #-------------------------------------------------------------------------- alias escape_dse escape unless $@ def escape $game_party.monsters_escaped = {} if $game_party.monsters_escaped == nil if $game_party.monsters_escaped[enemy_id] == nil $game_party.monsters_escaped[enemy_id] = 0 end $game_party.monsters_escaped[enemy.id] += 1 escape_dse end #-------------------------------------------------------------------------- # Encounter Details #-------------------------------------------------------------------------- def encounters_dse if $game_party.monsters_encounter[enemy.id] == nil $game_party.monsters_encounter[enemy.id] = 0 end return $game_party.monsters_encounter[enemy.id] end def defeated_dse if $game_party.monsters_defeated[enemy.id] == nil $game_party.monsters_defeated[enemy.id] = 0 end return $game_party.monsters_defeated[enemy.id] end def escaped_dse if $game_party.monsters_escaped[enemy.id] == nil $game_party.monsters_escaped[enemy.id] = 0 end return $game_party.monsters_escaped[enemy.id] end end # Game_Enemy #============================================================================== # Window_Command (imported from KGC) #============================================================================== class Window_Command < Window_Selectable unless method_defined?(:add_command) #-------------------------------------------------------------------------- # add command #-------------------------------------------------------------------------- def add_command(command) @commands << command @item_max = @commands.size item_index = @item_max - 1 refresh_command draw_item(item_index) return item_index end #-------------------------------------------------------------------------- # refresh command #-------------------------------------------------------------------------- def refresh_command buf = self.contents.clone self.height = [self.height, row_max * WLH + 32].max create_contents self.contents.blt(0, 0, buf, buf.rect) buf.dispose end #-------------------------------------------------------------------------- # insert command #-------------------------------------------------------------------------- def insert_command(index, command) @commands.insert(index, command) @item_max = @commands.size refresh_command refresh end #-------------------------------------------------------------------------- # remove command #-------------------------------------------------------------------------- def remove_command(command) @commands.delete(command) @item_max = @commands.size refresh end end end #=============================================================================== # Scene Menu #=============================================================================== class Scene_Menu < Scene_Base #-------------------------------------------------------------------------- # alias create command window #-------------------------------------------------------------------------- alias create_command_window_dse create_command_window unless $@ def create_command_window create_command_window_dse return if $imported["CustomMenuCommand"] if $game_switches[YE::MENU::MONSTER::BESTIARY_SWITCH] scc_text = YE::MENU::MONSTER::BESTIARY_TITLE @command_bestiary = @command_window.add_command(scc_text) if @command_window.oy > 0 @command_window.oy -= Window_Base::WLH end end @command_window.index = @menu_index end #-------------------------------------------------------------------------- # alias update command selection #-------------------------------------------------------------------------- alias update_command_selection_dse update_command_selection unless $@ def update_command_selection call_yerd_command = 0 if Input.trigger?(Input::C) case @command_window.index when @command_bestiary Sound.play_decision $scene = Scene_Bestiary.new(@command_window.index) end end update_command_selection_dse end end # Scene Menu #=============================================================================== # Scene Title #=============================================================================== class Scene_Title < Scene_Base #-------------------------------------------------------------------------- # alias create game objects #-------------------------------------------------------------------------- alias create_game_objects_dse create_game_objects unless $@ def create_game_objects create_game_objects_dse $game_switches[YE::MENU::MONSTER::BESTIARY_SWITCH] = true end end # Scene_Title #=============================================================================== # Scene Battle #=============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # alias create_info_viewport #-------------------------------------------------------------------------- alias create_info_viewport_dse create_info_viewport unless $@ def create_info_viewport create_info_viewport_dse #--- @enemy_name_window = Window_Enemy_Name.new(0, 0, 272, 56) @enemy_name_window.visible = false @enemy_name_window.active = false #--- @enemy_image_window = Window_Enemy_Image.new(0, 56, 272, 232) @enemy_image_window.visible = false @enemy_image_window.active = false #--- @enemy_scan_window = Window_Enemy_Scan.new(272, 0, 272, 288, true) @enemy_scan_window.visible = false @enemy_scan_window.active = false #--- hix = YE::MENU::MONSTER::HELP_WINDOW_X hiy = YE::MENU::MONSTER::HELP_WINDOW_Y hiw = YE::MENU::MONSTER::HELP_WINDOW_W text = YE::MENU::MONSTER::HELP_WINDOW_TX @scan_info_window = Window_Base.new(hix, hiy, hiw, 56) @scan_info_window.back_opacity = YE::MENU::MONSTER::HELP_WINDOW_O @scan_info_window.contents.draw_text(2, 0, hiw - 32, 24, text, 1) @scan_info_window.visible = false @scan_info_window.z = 200 end #-------------------------------------------------------------------------- # alias terminate #-------------------------------------------------------------------------- alias terminate_dse terminate unless $@ def terminate @enemy_scan_window.dispose if @enemy_scan_window != nil @enemy_image_window.dispose if @enemy_image_window != nil @enemy_name_window.dispose if @enemy_name_window != nil @scan_info_window.dispose if @scan_info_window != nil terminate_dse end #-------------------------------------------------------------------------- # alias update_target_enemy_selection #-------------------------------------------------------------------------- alias update_target_enemy_selection_dse update_target_enemy_selection unless $@ def update_target_enemy_selection if YE::MENU::MONSTER::HELP_WINDOW_ON if @enemy_scan_window.active @scan_info_window.visible = false elsif @target_enemy_window.active @scan_info_window.visible = true else @scan_info_window.visible = false end else @scan_info_window.visible = false end #------------------------------------------ # If the Enemy Scan Window is active #------------------------------------------ if @enemy_scan_window != nil and @enemy_scan_window.active @enemy_scan_window.update @enemy_image_window.update @enemy_name_window.update if Input.trigger?(Input::B) #end1 Sound.play_cancel @enemy_scan_window.disappear @enemy_image_window.disappear @enemy_name_window.visible = false @target_enemy_window.active = true elsif Input.trigger?(Input::LEFT) or Input.trigger?(Input::UP) @enemy_scan_window.previous_page elsif Input.trigger?(Input::RIGHT) or Input.trigger?(Input::DOWN) @enemy_scan_window.next_page elsif Input.trigger?(Input::L) @enemy_scan_window.top_page elsif Input.trigger?(Input::R) @enemy_scan_window.bottom_page end #------------------------------------------ # If the Target Window is Active #------------------------------------------ else if Input.trigger?(Input::B) @scan_info_window.visible = false elsif Input.trigger?(Input::C) @scan_info_window.visible = false elsif Input.trigger?(YE::MENU::MONSTER::ENEMY_SCAN_BUTTON) Sound.play_decision enemy = @target_enemy_window.enemy @enemy_scan_window.appear(enemy, @target_enemy_window) @enemy_image_window.appear(enemy, @target_enemy_window) @enemy_name_window.appear(enemy, @target_enemy_window) @target_enemy_window.active = false end update_target_enemy_selection_dse #--------- end end #-------------------------------------------------------------------------- # update enemy name window #-------------------------------------------------------------------------- def update_enemy_name_window(enemy, window) @enemy_name_window.visible = true @enemy_name_window.contents.clear name = window.enemy.name @enemy_name_window.contents.draw_text(0, 0, 240, 32, name, 1) @enemy_name_window.update end end # Scene_Battle #=============================================================================== # Scene Bestiary #=============================================================================== class Scene_Bestiary < Scene_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(menu_index = nil) @menu_index = menu_index end #-------------------------------------------------------------------------- # start #-------------------------------------------------------------------------- def start super create_menu_background @boss_type = 0 @enemy_list_window = Window_Enemy_List.new(@boss_type) @enemy_data_window = Window_Type_Data.new(@boss_type) @enemy_type_window = Window_Base.new(0, 0, 272, 56) refresh_type_window @enemy_help_category = Window_Base.new(272, 0, 272, 56) text = YE::MENU::MONSTER::CATEGORIZE_TEXT @enemy_help_category.contents.draw_text(0, 0, 240, 24, text, 1) @boss_help_window = Window_Base.new(136, 56, 272, 304) text = YE::MENU::MONSTER::CATEGORIZE_HELP @boss_help_window.back_opacity = 255 @boss_help_window.contents.draw_text(0, 0, 240, 24, text, 1) @boss_help_window.visible = false @boss_type_window = Window_Boss_Types.new #--- @enemy_name_window = Window_Enemy_Name.new(0, 0, 272, 56) @enemy_name_window.visible = false @enemy_name_window.active = false #--- @enemy_image_window = Window_Enemy_Image.new(0, 56, 272, 360) @enemy_image_window.visible = false @enemy_image_window.active = false #--- @enemy_scan_window = Window_Enemy_Scan.new(272, 0, 272, 416, true) @enemy_scan_window.visible = false @enemy_scan_window.active = false #--- end #-------------------------------------------------------------------------- # terminate #-------------------------------------------------------------------------- def terminate super dispose_menu_background @boss_type_window.dispose if @boss_type_window != nil @boss_help_window.dispose if @boss_help_window != nil @enemy_name_window.dispose if @enemy_name_window != nil @enemy_data_window.dispose if @enemy_data_window != nil @enemy_image_window.dispose if @enemy_image_window != nil @enemy_scan_window.dispose if @enemy_scan_window != nil @enemy_list_window.dispose if @enemy_list_window != nil @enemy_type_window.dispose if @enemy_type_window != nil @enemy_help_category.dispose if @enemy_help_category != nil end #-------------------------------------------------------------------------- # return scene #-------------------------------------------------------------------------- def return_scene if @menu_index == nil $scene = Scene_Map.new else $scene = Scene_Menu.new(@menu_index) end end #-------------------------------------------------------------------------- # update #-------------------------------------------------------------------------- def update super update_menu_background if @boss_type_window.active update_type_window elsif @enemy_scan_window.active update_scan_window elsif @enemy_list_window.active update_enemy_list end end #-------------------------------------------------------------------------- # update_type_window #-------------------------------------------------------------------------- def update_type_window @boss_type_window.update if Input.trigger?(Input::B) Sound.play_cancel @boss_type_window.visible = false @boss_help_window.visible = false @boss_type_window.active = false @enemy_list_window.active = true elsif Input.trigger?(Input::C) Sound.play_decision last_boss_type = @boss_type @boss_type = @boss_type_window.type @enemy_list_window.refresh(@boss_type) @enemy_list_window.index = 0 unless last_boss_type == @boss_type @enemy_data_window.refresh(@boss_type) refresh_type_window @boss_type_window.visible = false @boss_help_window.visible = false @boss_type_window.active = false @enemy_list_window.active = true end end #-------------------------------------------------------------------------- # update_scan_window #-------------------------------------------------------------------------- def update_scan_window @enemy_scan_window.update @enemy_image_window.update @enemy_name_window.update if Input.trigger?(Input::B) Sound.play_cancel @enemy_scan_window.disappear @enemy_image_window.disappear @enemy_name_window.visible = false @enemy_list_window.active = true @enemy = nil elsif Input.trigger?(Input::LEFT) or Input.trigger?(Input::UP) @enemy_scan_window.previous_page elsif Input.trigger?(Input::RIGHT) or Input.trigger?(Input::DOWN) @enemy_scan_window.next_page elsif Input.trigger?(Input::L) @enemy_scan_window.top_page elsif Input.trigger?(Input::R) @enemy_scan_window.bottom_page end end #-------------------------------------------------------------------------- # update_enemy_list #-------------------------------------------------------------------------- def update_enemy_list @enemy_list_window.update if Input.trigger?(Input::B) Sound.play_cancel return_scene elsif Input.trigger?(Input::C) if @enemy_list_window.enemy == nil Sound.play_buzzer elsif !viewable?(@enemy_list_window.enemy) Sound.play_buzzer else Sound.play_decision @enemy = Game_Enemy.new(0, @enemy_list_window.enemy.id) @enemy_scan_window.appear(@enemy) @enemy_image_window.appear(@enemy) @enemy_name_window.appear(@enemy) @enemy_list_window.active = false end elsif Input.trigger?(YE::MENU::MONSTER::CATEGORIZE_BUTTON) Sound.play_decision @boss_type_window.visible = true @boss_help_window.visible = true @boss_type_window.active = true @enemy_list_window.active = false end end #-------------------------------------------------------------------------- # viewable? #-------------------------------------------------------------------------- def viewable?(enemy) $game_party.monsters_encounter[enemy.id] = 0 if $game_party.monsters_encounter[enemy.id] == nil return false if $game_party.monsters_encounter[enemy.id] <= 0 return true end #-------------------------------------------------------------------------- # refresh type window #-------------------------------------------------------------------------- def refresh_type_window @enemy_type_window.contents.clear array = YE::MENU::MONSTER::BOSS_TYPES[@boss_type] icon = array[0] text = sprintf(YE::MENU::MONSTER::BESTIARY_LIST, array[7]) @enemy_type_window.draw_icon(icon, 0, 0) @enemy_type_window.contents.draw_text(24, 0, 216, 24, text, 0) end end # Scene_Bestiary #============================================================================== # Window_Enemy_List #============================================================================== class Window_Enemy_List < Window_Selectable #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(boss_type) super(0, 56, 272, 360) self.index = 0 refresh(boss_type) end #-------------------------------------------------------------------------- # refresh #-------------------------------------------------------------------------- def refresh(boss_type) @boss_type = boss_type @data = [] for enemy in monster_list @data.push(enemy) end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # draw item #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) enemy = @data[index] $game_party.monsters_encounter[enemy.id] = 0 if $game_party.monsters_encounter[enemy.id] == nil if $game_party.monsters_encounter[enemy.id] > 0 text = enemy.name.gsub(/\[.*\]/) { "" } self.contents.font.color.alpha = 255 else mask = YE::MENU::MONSTER::BESTIARY_MASK if mask.scan(/./).size == 1 mask = mask * enemy.name.scan(/./).size end text = mask self.contents.font.color.alpha = 128 end self.contents.draw_text(rect.x+4, rect.y, rect.width-4, WLH, text) end #-------------------------------------------------------------------------- # include? #-------------------------------------------------------------------------- def include?(enemy) return false if enemy == nil return false unless enemy.boss_type.include?(@boss_type) return false if YE::HIDDEN_ENEMY.include?(enemy.id) return false if $imported["SwapDummyMonster"] and YE::SWAP::DUMMY_MONSTER.include?(enemy.id) return true end #-------------------------------------------------------------------------- # monster_list #-------------------------------------------------------------------------- def monster_list result = [] for enemy_id in YE::ENEMY_LIST result.push($data_enemies[enemy_id]) if include?($data_enemies[enemy_id]) end return result end #-------------------------------------------------------------------------- # return enemy #-------------------------------------------------------------------------- def enemy return @data[self.index] end end # Window_Enemy_list #============================================================================== # Window_Type_Data #============================================================================== class Window_Type_Data < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(boss_type) super(272, 56, 272, 360) refresh(boss_type) end #-------------------------------------------------------------------------- # refresh #-------------------------------------------------------------------------- def refresh(boss_type = 0) self.contents.clear self.contents.font.size = Font.default_size @boss_type = boss_type sw = self.width - 32 @category_colour = YE::MENU::MONSTER::DATA_CATEGORY_COLOUR self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::BESTIARY_INFO self.contents.draw_text(0, 0, sw, WLH, text, 1) unique_discovered = 0 unique_type_enc = 0 unique_encounters = 0 unique_defeated = 0 unique_escaped = 0 total_encountered = 0 total_defeated = 0 total_escaped = 0 type_encountered = 0 type_defeated = 0 type_escaped = 0 for key in $game_party.monsters_encounter next if key[1] == nil or key[1] <= 0 unique_encounters += 1 total_encountered += key[1] if $data_enemies[key[0]].boss_type.include?(@boss_type) unique_discovered += 1 unique_type_enc += key[1] end end for key in $game_party.monsters_defeated next if key[1] == nil or key[1] <= 0 total_defeated += key[1] if $data_enemies[key[0]].boss_type.include?(@boss_type) unique_defeated += key[1] end end for key in $game_party.monsters_escaped next if key[1] == nil or key[1] <= 0 total_escaped += key[1] if $data_enemies[key[0]].boss_type.include?(@boss_type) unique_escaped += key[1] end end total_size = YE::ENEMY_LIST.size - YE::HIDDEN_ENEMY.size self.contents.font.size = YE::MENU::MONSTER::MENU_FONT_SIZE #--- dy = WLH + WLH / 2 boss_type_name = YE::MENU::MONSTER::BOSS_TYPES[@boss_type][8] icon = YE::MENU::MONSTER::BOSS_TYPES[@boss_type][0] #--- self.contents.font.color = text_color(@category_colour) draw_icon(YE::MENU::MONSTER::ICON_COMPLETION, 0, dy) text = YE::MENU::MONSTER::TEXT_COMPLETION self.contents.draw_text(24, dy, sw-24, WLH, text, 0) self.contents.font.color = normal_color text = sprintf(YE::MENU::MONSTER::RATE_COMPLETION, bestiary_completion) self.contents.draw_text(24, dy, sw-24, WLH, text, 2) #--- dy += WLH + WLH / 2 self.contents.font.color = text_color(@category_colour) draw_icon(YE::MENU::MONSTER::ICON_DISCOVERED, 0, dy) text = YE::MENU::MONSTER::TEXT_DISCOVERED self.contents.draw_text(24, dy, sw-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(24, dy, sw-24, WLH, unique_encounters, 2) #--- dy += WLH self.contents.font.color = text_color(@category_colour) draw_icon(icon, 12, dy) text = sprintf(YE::MENU::MONSTER::TEXT_TYPE_DIS, boss_type_name) self.contents.draw_text(36, dy, sw-36, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(36, dy, sw-36, WLH, unique_discovered, 2) #--- dy += WLH self.contents.font.color = text_color(@category_colour) draw_icon(YE::MENU::MONSTER::ICON_ENCOUNTER, 0, dy) text = YE::MENU::MONSTER::TEXT_ENCOUNTERS self.contents.draw_text(24, dy, sw-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(24, dy, sw-24, WLH, total_encountered, 2) #--- dy += WLH self.contents.font.color = text_color(@category_colour) draw_icon(icon, 12, dy) text = sprintf(YE::MENU::MONSTER::TEXT_TYPE_ENC, boss_type_name) self.contents.draw_text(36, dy, sw-36, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(36, dy, sw-36, WLH, unique_type_enc, 2) #--- dy += WLH self.contents.font.color = text_color(@category_colour) draw_icon(YE::MENU::MONSTER::ICON_KILLED, 0, dy) text = YE::MENU::MONSTER::TEXT_DEFEATED self.contents.draw_text(24, dy, sw-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(24, dy, sw-24, WLH, total_defeated, 2) #--- dy += WLH self.contents.font.color = text_color(@category_colour) draw_icon(icon, 12, dy) text = sprintf(YE::MENU::MONSTER::TEXT_TYPE_DEF, boss_type_name) self.contents.draw_text(36, dy, sw-36, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(36, dy, sw-36, WLH, unique_defeated, 2) #--- dy += WLH self.contents.font.color = text_color(@category_colour) draw_icon(YE::MENU::MONSTER::ICON_ESCAPED, 0, dy) text = YE::MENU::MONSTER::TEXT_ESCAPED self.contents.draw_text(24, dy, sw-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(24, dy, sw-24, WLH, total_escaped, 2) #--- dy += WLH self.contents.font.color = text_color(@category_colour) draw_icon(icon, 12, dy) text = sprintf(YE::MENU::MONSTER::TEXT_TYPE_ESC, boss_type_name) self.contents.draw_text(36, dy, sw-36, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(36, dy, sw-36, WLH, unique_escaped, 2) end #-------------------------------------------------------------------------- # bestiary_completion #-------------------------------------------------------------------------- def bestiary_completion total = 0; result = 0 for enemy in $data_enemies next if $imported["SwapDummyMonster"] and YE::SWAP::DUMMY_MONSTER.include?(enemy.id) next if YE::HIDDEN_ENEMY.include?(enemy.id) next if enemy == nil total += 1 if $game_party.monsters_encounter.include?(enemy.id) and $game_party.monsters_encounter[enemy.id] > 0 result += 1 end next unless YE::MENU::MONSTER::REQUIRE_SCAN next if enemy.hide_whole total += 1 if YE::MENU::MONSTER::SHOW_GENERAL and !enemy.hide_hp_mp total += 1 if YE::MENU::MONSTER::SHOW_GENERAL and !enemy.hide_stats total += 1 if YE::MENU::MONSTER::SHOW_SKILLS and !enemy.hide_skill total += 1 if YE::MENU::MONSTER::SHOW_ELEMENTS and !enemy.hide_elem total += 1 if YE::MENU::MONSTER::SHOW_STATES and !enemy.hide_state total += 1 if YE::MENU::MONSTER::SHOW_SPOILS and !enemy.hide_spoil if YE::MENU::MONSTER::SPOIL_DROPS or (YE::MENU::MONSTER::SHOW_DROPS and $imported["ExtraDropItem"]) and !enemy.hide_drops total += 1 end if $imported["Steal"] and YE::MENU::MONSTER::SHOW_STEAL and !enemy.hide_steal total += 1 end if YE::MENU::MONSTER::SHOW_NOTES and YE::HASH::ENEMY_NOTES.include?(enemy.id) total += 1 end end if YE::MENU::MONSTER::REQUIRE_SCAN result += $game_party.scan_hp_mp.size result += $game_party.scan_stats.size result += $game_party.scan_skill.size result += $game_party.scan_state.size result += $game_party.scan_spoil.size result += $game_party.scan_drops.size result += $game_party.scan_steal.size result += $game_party.scan_desc.size end result *= 100.0 result /= total return result end end # Window_Type_Data #============================================================================== # Window_Boss_Types #============================================================================== class Window_Boss_Types < Window_Selectable #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize super(136, 80, 272, 280) self.index = 0 self.opacity = 0 self.visible = false self.active = false refresh end #-------------------------------------------------------------------------- # refresh #-------------------------------------------------------------------------- def refresh @data = YE::MENU::MONSTER::TYPE_ORDERING @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # type #-------------------------------------------------------------------------- def type return @data[self.index] end #-------------------------------------------------------------------------- # draw_item #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) type = @data[index] icon = YE::MENU::MONSTER::BOSS_TYPES[type][0] name = YE::MENU::MONSTER::BOSS_TYPES[type][8] text = sprintf(YE::MENU::MONSTER::CATEGORIZE_VIEW, name) draw_icon(icon, rect.x+4, rect.y) self.contents.draw_text(rect.x+28, rect.y, rect.width-28, WLH, text) end end # Window_Boss_Types #=============================================================================== # Window Enemy Name #=============================================================================== class Window_Enemy_Name < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) self.back_opacity = 255 @target_enemy_window = nil self.z = 200 self.visible = false end #-------------------------------------------------------------------------- # appear and disappear #-------------------------------------------------------------------------- def appear(enemy, window = nil) @enemy = enemy @target_enemy_window = window self.openness = 128 @opening = true self.visible = true draw_content end def disappear self.visible = false end #-------------------------------------------------------------------------- # draw content #-------------------------------------------------------------------------- def draw_content self.contents.clear text = sprintf(YE::MENU::MONSTER::ENEMY_NAME, @enemy.name) if $imported["EnemyLevelControl"] level = @enemy.level text = sprintf(YE::BATTLE::ENEMY::SCANNED_ENEMY_LEVEL, level, text) end self.contents.draw_text(0, 0, 240, 24, text, 1) end end # Window_Enemy_Name #=============================================================================== # Window Enemy Image #=============================================================================== class Window_Enemy_Image < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) self.back_opacity = 255 @target_enemy_window = nil self.z = 200 self.visible = false end #-------------------------------------------------------------------------- # appear and disappear #-------------------------------------------------------------------------- def appear (enemy, window = nil) @enemy = enemy @target_enemy_window = window self.openness = 128 @opening = true self.visible = true draw_content end def disappear self.visible = false end #-------------------------------------------------------------------------- # draw content #-------------------------------------------------------------------------- def draw_content self.contents.clear enemybit = Cache.battler(@enemy.battler_name, @enemy.battler_hue) bw = enemybit.width bh = enemybit.height if bw > (self.width - 32) bw = (self.width - 32) bh *= (self.width - 32) bh /= enemybit.width end if bh > (self.height - 32) bh = (self.height - 32) bw *= (self.height - 32) bw /= enemybit.height end rect = Rect.new(0, 0, bw, bh) #--------- rect.x = (self.width - 32 - rect.width) / 2 rect.y = (self.height - 32 - rect.height) / 2 #--------- self.contents.stretch_blt(rect, enemybit, enemybit.rect) end end # Window_Enemy_Image #=============================================================================== # Window Enemy Scan #=============================================================================== class Window_Enemy_Scan < Window_Base #-------------------------------------------------------------------------- # initialize #-------------------------------------------------------------------------- def initialize(x, y, width, height, inbattle) super(x, y, width, height) self.back_opacity = 255 @target_enemy_window = nil @inbattle = inbattle @require = YE::MENU::MONSTER::REQUIRE_SCAN self.z = 200 self.visible = false end #-------------------------------------------------------------------------- # appear and disappear #-------------------------------------------------------------------------- def appear (enemy, window = nil) @enemy = enemy @target_enemy_window = window @page = 1 @total_pages = create_total_pages draw_enemy_data self.openness = 128 @opening = true self.active = true self.visible = true end def disappear self.active = false self.visible = false end #-------------------------------------------------------------------------- # page switching #-------------------------------------------------------------------------- def next_page if @page != @total_pages @page += 1 else @page = 1 end turn_sound draw_enemy_data end def previous_page if @page != 1 @page -= 1 else @page = @total_pages end turn_sound draw_enemy_data end def top_page @page = 1 turn_sound draw_enemy_data end def bottom_page @page = @total_pages turn_sound draw_enemy_data end #-------------------------------------------------------------------------- # turn sound #-------------------------------------------------------------------------- def turn_sound unless YE::MENU::MONSTER::PAGE_SOUND == nil sound = YE::MENU::MONSTER::PAGE_SOUND sound.play end end #-------------------------------------------------------------------------- # draw enemy data #-------------------------------------------------------------------------- def draw_enemy_data self.contents.clear self.contents.font.color.alpha = 255 self.contents.font.size = Font.default_size self.contents.font.color = normal_color @category_colour = YE::MENU::MONSTER::DATA_CATEGORY_COLOUR #-------------------- pagecase = @contents[@page - 1] if @page == 1 and !YE::MENU::MONSTER::REPLACE_PAGE_MSG text1 = "" else text1 = YE::MENU::MONSTER::DATA_LEFT end if YE::MENU::MONSTER::REPLACE_PAGE_MSG #-------------------------------------- text2 = case_page_name(pagecase) else #---------------------------------------------------------------------- text2 = sprintf(YE::MENU::MONSTER::DATA_PAGES, @page, @total_pages) end if @page == @total_pages and !YE::MENU::MONSTER::REPLACE_PAGE_MSG text3 = "" else text3 = YE::MENU::MONSTER::DATA_RIGHT end #-------------------- self.contents.draw_text(2, 0, 232, WLH, text1, 0) self.contents.draw_text(2, 0, 232, WLH, text2, 1) self.contents.draw_text(2, 0, 232, WLH, text3, 2) #-------------------- if @enemy != nil case_page_run(pagecase) end end #-------------------------------------------------------------------------- # make general page #-------------------------------------------------------------------------- def make_general_page y = WLH x = 0 sw = self.width - 32 gc0 = gauge_back_color gce = text_color(YE::MENU::MONSTER::EXHAUST_COLOUR) gh = YE::MENU::MONSTER::GAUGE_HEIGHT dx = (sw - (24 * @enemy.enemy.boss_type.size)) / 2 for boss_type in @enemy.enemy.boss_type array = YE::MENU::MONSTER::BOSS_TYPES[boss_type] icon = array[0] draw_icon(icon, dx, y, true) dx += 24 end dsearray = YE::MENU::MONSTER::BOSS_TYPES[@enemy.enemy.boss_type[0]] #--------Draw HP-------- y += WLH if @enemy.maxhp > @enemy.base_maxhp icon = YE::MENU::MONSTER::ICON_HIGH elsif @enemy.maxhp < @enemy.base_maxhp icon = YE::MENU::MONSTER::ICON_LOW else icon = dsearray[1] end @enemy.hp = @enemy.maxhp if @enemy.hp > @enemy.maxhp gc1 = text_color(dsearray[2]) gc2 = text_color(dsearray[3]) gy = y + WLH - 8 - (gh - 6) if @enemy.maxhp < @enemy.base_maxhp and @enemy.base_maxhp > 0 gb = sw * @enemy.maxhp / @enemy.base_maxhp self.contents.fill_rect(x, gy, sw, gh, gce) else gb = sw end self.contents.fill_rect(x, gy, gb, gh, gc0) if @enemy.maxhp <= 0 if @enemy.base_maxhp <= 0 gw = sw else gw = 0 end else gw = gb * @enemy.hp / @enemy.maxhp self.contents.gradient_fill_rect(x, gy, gw, gh, gc1, gc2) end draw_icon(icon, x, y, true) text = Vocab::hp self.contents.font.color = text_color(@category_colour) self.contents.draw_text(24, y, sw-24, WLH, text, 0) self.contents.font.color = normal_color hidehp = false if @require hidehp = true unless $game_party.scan_hp_mp.include?(@enemy.enemy_id) end if hidehp or @enemy.enemy.hide_hp_mp text = YE::MENU::MONSTER::HIDDEN_HP elsif YE::MENU::MONSTER::HP_DISPLAY_TYPE == 1 text = @enemy.hp elsif YE::MENU::MONSTER::HP_DISPLAY_TYPE == 2 text = sprintf("%d/%d",@enemy.hp,@enemy.maxhp) else text = sprintf("%#.05g%%",@enemy.hp * 100.000 / @enemy.maxhp) end self.contents.draw_text(0, y, sw, WLH, text, 2) #--------Draw MP-------- y += WLH if @enemy.maxmp > @enemy.base_maxmp icon = YE::MENU::MONSTER::ICON_HIGH elsif @enemy.maxmp < @enemy.base_maxmp icon = YE::MENU::MONSTER::ICON_LOW else icon = dsearray[4] end @enemy.mp = @enemy.maxmp if @enemy.mp > @enemy.maxmp gc1 = text_color(dsearray[5]) gc2 = text_color(dsearray[6]) gy = y + WLH - 8 - (gh - 6) if @enemy.maxmp < @enemy.base_maxmp and @enemy.base_maxmp > 0 gb = sw * @enemy.maxmp / @enemy.base_maxmp self.contents.fill_rect(x, gy, sw, gh, gce) else gb = sw end self.contents.fill_rect(x, gy, gb, gh, gc0) if @enemy.maxmp <= 0 if @enemy.base_maxmp <= 0 gw = sw else gw = 0 end else gw = gb * @enemy.mp / @enemy.maxmp end self.contents.gradient_fill_rect(x, gy, gw, gh, gc1, gc2) draw_icon(icon, x, y, true) text = Vocab::mp self.contents.font.color = text_color(@category_colour) self.contents.draw_text(24, y, sw-24, WLH, text, 0) self.contents.font.color = normal_color hidemp = false if @require hidemp = true unless $game_party.scan_hp_mp.include?(@enemy.enemy_id) end if hidemp or @enemy.enemy.hide_hp_mp text = YE::MENU::MONSTER::HIDDEN_MP elsif YE::MENU::MONSTER::MP_DISPLAY_TYPE == 1 text = @enemy.mp elsif YE::MENU::MONSTER::MP_DISPLAY_TYPE == 2 text = sprintf("%d/%d",@enemy.mp,@enemy.maxmp) else if @enemy.maxmp text = sprintf("%#.05g%%", 100.000) else text = sprintf("%#.05g%%",@enemy.mp * 100.000 / @enemy.maxmp) end end self.contents.draw_text(0, y, sw, WLH, text, 2) #--------Draw ADSA and HECO Stats-------- self.contents.font.size = YE::MENU::MONSTER::FONT_SIZE hide = YE::MENU::MONSTER::HIDDEN_STAT hidestats = false if @require hidestats = true unless $game_party.scan_stats.include?(@enemy.enemy_id) end if hidestats or @enemy.enemy.hide_stats textatk = hide; textdef = hide; textspi = hide; textagi = hide texthit = hide; texteva = hide; textcri = hide; textodds = hide else textatk = @enemy.atk; textdef = @enemy.def textspi = @enemy.spi; textagi = @enemy.agi texthit = sprintf("%d%%",@enemy.hit) texteva = sprintf("%d%%",@enemy.eva) textcri = sprintf("%d%%",@enemy.cri) textodds = sprintf("%d", @enemy.odds) end #---ATK--- y += WLH + WLH / 4 if @enemy.atk > @enemy.base_atk icon = YE::MENU::MONSTER::ICON_HIGH elsif @enemy.atk < @enemy.base_atk icon = YE::MENU::MONSTER::ICON_LOW else icon = YE::MENU::MONSTER::ICON_ATK end draw_icon(icon, 0, y, true) self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_ATK self.contents.draw_text(24, y, sw/4-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(sw/4, y, sw/4-12, WLH, textatk, 2) #---HIT--- unless YE::MENU::MONSTER::HIDE_HIT icon = YE::MENU::MONSTER::ICON_HIT draw_icon(icon, sw/2, y, true) self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_HIT self.contents.draw_text(sw/2+24, y, sw/4-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(sw*3/4, y, sw/4-12, WLH, texthit, 2) end #---DEF--- y += WLH if @enemy.def > @enemy.base_def icon = YE::MENU::MONSTER::ICON_HIGH elsif @enemy.def < @enemy.base_def icon = YE::MENU::MONSTER::ICON_LOW else icon = YE::MENU::MONSTER::ICON_DEF end draw_icon(icon, 0, y, true) self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_DEF self.contents.draw_text(24, y, sw/4-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(sw/4, y, sw/4-12, WLH, textdef, 2) #---EVA--- unless YE::MENU::MONSTER::HIDE_EVA icon = YE::MENU::MONSTER::ICON_EVA draw_icon(icon, sw/2, y, true) self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_EVA self.contents.draw_text(sw/2+24, y, sw/4-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(sw*3/4, y, sw/4-12, WLH, texteva, 2) end #---SPI--- y += WLH if @enemy.spi > @enemy.base_spi icon = YE::MENU::MONSTER::ICON_HIGH elsif @enemy.spi < @enemy.base_spi icon = YE::MENU::MONSTER::ICON_LOW else icon = YE::MENU::MONSTER::ICON_SPI end draw_icon(icon, 0, y, true) self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_SPI self.contents.draw_text(24, y, sw/4-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(sw/4, y, sw/4-12, WLH, textspi, 2) #---CRI--- unless YE::MENU::MONSTER::HIDE_CRI icon = YE::MENU::MONSTER::ICON_CRI draw_icon(icon, sw/2, y, true) self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_CRI self.contents.draw_text(sw/2+24, y, sw/4-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(sw*3/4, y, sw/4-12, WLH, textcri, 2) end #---AGI--- y += WLH if @enemy.agi > @enemy.base_agi icon = YE::MENU::MONSTER::ICON_HIGH elsif @enemy.agi < @enemy.base_agi icon = YE::MENU::MONSTER::ICON_LOW else icon = YE::MENU::MONSTER::ICON_AGI end draw_icon(icon, 0, y, true) self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_AGI self.contents.draw_text(24, y, sw/4-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(sw/4, y, sw/4-12, WLH, textagi, 2) #---ODDS--- unless YE::MENU::MONSTER::HIDE_ODDS icon = YE::MENU::MONSTER::ICON_ODDS draw_icon(icon, sw/2, y, true) self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_ODDS self.contents.draw_text(sw/2+24, y, sw/4-24, WLH, text, 0) self.contents.font.color = normal_color self.contents.draw_text(sw*3/4, y, sw/4-12, WLH, textodds, 2) end #--------STATUS EFFECTS-------- y += WLH + WLH / 4 state_draw = @enemy.states for state in state_draw state_draw.delete(state) if state.icon_index == 0 end unless state_draw == [] self.contents.font.size = Font.default_size self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_STATES self.contents.draw_text(0, y, sw, WLH, text, 1) y += WLH draw_actor_state(@enemy, 0, y, sw + 12) end end # make general page #-------------------------------------------------------------------------- # make skills page #-------------------------------------------------------------------------- def make_skills_page x = 0 y = WLH sw = self.width - 32 action_list = [] skilltotal = 0 for action in @enemy.enemy.actions if action.kind == 1 obj = $data_skills[action.skill_id] unless action_list.include?(obj) action_list.push(obj) skilltotal += 1 end end end y += WLH self.contents.font.color = normal_color for obj in action_list break if (y + 24) > (self.height - 32) draw_item_name(obj, x, y, true) y += WLH end y = WLH self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_SKILLS self.contents.draw_text(0, y, sw, WLH, text, 0) if skilltotal == 1 text = sprintf(YE::MENU::MONSTER::VIEW_SKILLS1, skilltotal) else text = sprintf(YE::MENU::MONSTER::VIEW_SKILLS2, skilltotal) end self.contents.draw_text(0, y, sw, WLH, text, 2) end # end make skills page #-------------------------------------------------------------------------- # make elements page #-------------------------------------------------------------------------- def make_elements_page x = 0 y = WLH sw = self.width - 32 for key in YE::MENU::MONSTER::ELEMENT_HASH doublearr = key[1] ele_array = doublearr[0] ele_icon = doublearr[1] self.contents.font.color = text_color(@category_colour) text = key[0] self.contents.draw_text(0, y, sw, WLH, text, 1) y += WLH x = (sw - ele_array.size * 24) / 2 for icon in ele_icon draw_icon(icon, x, y, true) x += 24 end y += WLH x = (sw - ele_array.size * 24) / 2 for element in ele_array rank = @enemy.enemy.element_ranks[element] result = [0,1,2,3,4,5,6][rank] if result == 0 draw_icon(YE::MENU::MONSTER::ICON_E_RATE_Z, x, y, true) elsif result == 1 draw_icon(YE::MENU::MONSTER::ICON_E_RATE_A, x, y, true) elsif result == 2 draw_icon(YE::MENU::MONSTER::ICON_E_RATE_B, x, y, true) elsif result == 3 draw_icon(YE::MENU::MONSTER::ICON_E_RATE_C, x, y, true) elsif result == 4 draw_icon(YE::MENU::MONSTER::ICON_E_RATE_D, x, y, true) elsif result == 5 draw_icon(YE::MENU::MONSTER::ICON_E_RATE_E, x, y, true) elsif result == 6 draw_icon(YE::MENU::MONSTER::ICON_E_RATE_F, x, y, true) else draw_icon(YE::MENU::MONSTER::ICON_E_RATE_U, x, y, true) end x += 24 end y += WLH * 2 end end # make elements page #-------------------------------------------------------------------------- # make states page #-------------------------------------------------------------------------- def make_states_page x = 0 y = WLH sw = self.width - 32 for key in YE::MENU::MONSTER::STATES_HASH states_array = key[1] self.contents.font.color = text_color(@category_colour) text = key[0] self.contents.draw_text(0, y, sw, WLH, text, 1) y += WLH x = (sw - states_array.size * 24) / 2 for state_id in states_array icon = $data_states[state_id].icon_index draw_icon(icon, x, y, true) x += 24 end y += WLH x = (sw - states_array.size * 24) / 2 for state_id in states_array icon = $data_states[state_id].icon_index rank = @enemy.enemy.state_ranks[state_id] result = [0,1,2,3,4,5,6][rank] if result == 0 draw_icon(YE::MENU::MONSTER::ICON_S_RATE_Z, x, y, true) elsif result == 1 draw_icon(YE::MENU::MONSTER::ICON_S_RATE_A, x, y, true) elsif result == 2 draw_icon(YE::MENU::MONSTER::ICON_S_RATE_B, x, y, true) elsif result == 3 draw_icon(YE::MENU::MONSTER::ICON_S_RATE_C, x, y, true) elsif result == 4 draw_icon(YE::MENU::MONSTER::ICON_S_RATE_D, x, y, true) elsif result == 5 draw_icon(YE::MENU::MONSTER::ICON_S_RATE_E, x, y, true) elsif result == 6 draw_icon(YE::MENU::MONSTER::ICON_S_RATE_F, x, y, true) else draw_icon(YE::MENU::MONSTER::ICON_S_RATE_U, x, y, true) end x += 24 end y += WLH end end # make states page #-------------------------------------------------------------------------- # make steal page #-------------------------------------------------------------------------- def make_steal_page return unless $imported["Steal"] x = 0 y = 0 sw = self.width - 32 y += WLH self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_S_ITEM self.contents.draw_text(0, y, sw, WLH, text, 0) text = YE::MENU::MONSTER::DATA_S_CHANCE self.contents.draw_text(0, y, sw, WLH, text, 2) y += WLH steal_objects = @enemy.steal_objects.clone steal_objects.each_with_index { |item, i| break if (y + 24) > (self.height - 32) next if item == nil case item.kind when 0 next when 1 steal_item = $data_items[item.item_id] when 2 steal_item = $data_weapons[item.weapon_id] when 3 steal_item = $data_armors[item.armor_id] end draw_item_name(steal_item, 0, y) text = sprintf("%d%%", item.success_prob) self.contents.draw_text(0, y, sw, WLH, text, 2) y += WLH } end # make steal page #-------------------------------------------------------------------------- # make spoils page #-------------------------------------------------------------------------- def make_spoils_page x = 0 y = 0 sw = self.width - 32 #---Encounters--- y += WLH self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_ENCOUNTER self.contents.draw_text(24, y, sw-24, WLH, text, 0) draw_icon(YE::MENU::MONSTER::ICON_ENCOUNTER, 0, y, true) self.contents.font.color = normal_color if @enemy.encounters_dse == 1 text = sprintf(YE::MENU::MONSTER::VIEW_ENC1, @enemy.encounters_dse) else text = sprintf(YE::MENU::MONSTER::VIEW_ENC2, @enemy.encounters_dse) end self.contents.draw_text(24, y, sw-24, WLH, text, 2) #---Defeated--- y += WLH self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_KILLED self.contents.draw_text(24, y, sw-24, WLH, text, 0) draw_icon(YE::MENU::MONSTER::ICON_KILLED, 0, y, true) self.contents.font.color = normal_color if @enemy.defeated_dse == 1 text = sprintf(YE::MENU::MONSTER::VIEW_KILLED1, @enemy.defeated_dse) else text = sprintf(YE::MENU::MONSTER::VIEW_KILLED2, @enemy.defeated_dse) end self.contents.draw_text(24, y, sw-24, WLH, text, 2) #---Escaped--- y += WLH self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_ESCAPED self.contents.draw_text(24, y, sw-24, WLH, text, 0) draw_icon(YE::MENU::MONSTER::ICON_ESCAPED, 0, y, true) self.contents.font.color = normal_color if @enemy.escaped_dse == 1 text = sprintf(YE::MENU::MONSTER::VIEW_ESCAPED1, @enemy.escaped_dse) else text = sprintf(YE::MENU::MONSTER::VIEW_ESCAPED2, @enemy.escaped_dse) end self.contents.draw_text(24, y, sw-24, WLH, text, 2) #---Gold--- y += WLH self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_GOLD self.contents.draw_text(24, y, sw-24, WLH, text, 0) draw_icon(YE::MENU::MONSTER::ICON_GOLD, 0, y, true) self.contents.font.color = normal_color text = sprintf(YE::MENU::MONSTER::VIEW_GOLD, @enemy.gold) self.contents.draw_text(24, y, sw-24, WLH, text, 2) #---Exp--- y += WLH self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_EXP self.contents.draw_text(24, y, sw-24, WLH, text, 0) draw_icon(YE::MENU::MONSTER::ICON_EXP, 0, y, true) self.contents.font.color = normal_color text = sprintf(YE::MENU::MONSTER::VIEW_EXP, @enemy.exp) self.contents.draw_text(24, y, sw-24, WLH, text, 2) #---Drops--- if YE::MENU::MONSTER::SPOIL_DROPS and !@enemy.enemy.hide_drops y += WLH drop_items = [@enemy.drop_item1, @enemy.drop_item2] if $imported["ExtraDropItem"] drop_items += @enemy.extra_drop_items end self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_DROPS self.contents.draw_text(0, y, sw, WLH, text, 1) y += WLH drop_items.each_with_index { |item, i| break if (y + 24) > (self.height - 32) case item.kind when 0 next when 1 drop_item = $data_items[item.item_id] when 2 drop_item = $data_weapons[item.weapon_id] when 3 drop_item = $data_armors[item.armor_id] end draw_item_name(drop_item, 0, y) if $imported["ExtraDropItem"] && item.drop_prob > 0 text = sprintf("%d%%", item.drop_prob) else text = sprintf("%d%%", 1 * 100 /item.denominator) end self.contents.draw_text(0, y, sw, WLH, text, 2) y += WLH } end end # make spoils page #-------------------------------------------------------------------------- # make drops page #-------------------------------------------------------------------------- def make_drops_page x = 0 y = 0 sw = self.width - 32 y += WLH self.contents.font.color = text_color(@category_colour) text = YE::MENU::MONSTER::DATA_D_ITEM self.contents.draw_text(0, y, sw, WLH, text, 0) text = YE::MENU::MONSTER::DATA_D_CHANCE self.contents.draw_text(0, y, sw, WLH, text, 2) y += WLH drop_items = [@enemy.drop_item1, @enemy.drop_item2] if $imported["ExtraDropItem"] drop_items += @enemy.extra_drop_items end drop_items.each_with_index { |item, i| break if (y + 24) > (self.height - 32) case item.kind when 0 next when 1 drop_item = $data_items[item.item_id] when 2 drop_item = $data_weapons[item.weapon_id] when 3 drop_item = $data_armors[item.armor_id] end draw_item_name(drop_item, 0, y) if $imported["ExtraDropItem"] && item.drop_prob > 0 text = sprintf("%d%%", item.drop_prob) else text = sprintf("%d%%", 1 * 100 /item.denominator) end self.contents.draw_text(0, y, sw, WLH, text, 2) y += WLH } end # make drops page #-------------------------------------------------------------------------- # make notes page #-------------------------------------------------------------------------- def make_notes_page self.contents.font.color.alpha = 255 self.contents.font.size = YE::MENU::MONSTER::NOTE_PAGE_TEXT_SIZE self.contents.font.color = text_color(YE::MENU::MONSTER::NOTE_PAGE_TEXT_COLOUR) y = 24 txsize = YE::MENU::MONSTER::NOTE_PAGE_TEXT_SIZE + 4 text = YE::HASH::ENEMY_NOTES[@enemy.enemy_id] nwidth = YE::MENU::MONSTER::NOTE_PAGE_WIDTH buf = text.gsub(/\\N(\[\d+\])/i) { "\\__#{$1}" } lines = buf.split(/(?:[|]|\\n)/i) lines.each_with_index { |l, i| l.gsub!(/\\__(\[\d+\])/i) { "\\N#{$1}" } self.contents.draw_text(0, i * txsize + y, nwidth, WLH, l, 0) } end #end def #-------------------------------------------------------------------------- # create_total_pages #-------------------------------------------------------------------------- def create_total_pages @contents = [] @contents.push(0) if YE::MENU::MONSTER::SHOW_GENERAL #---------------- action_list = [] for action in @enemy.enemy.actions if action.kind == 1 obj = $data_skills[action.skill_id] action_list.push(obj) unless action_list.include?(obj) end end if YE::MENU::MONSTER::SHOW_SKILLS and action_list != [] if @require if $game_party.scan_skill.include?(@enemy.enemy_id) @contents.push(1) unless @enemy.enemy.hide_skill end else @contents.push(1) unless @enemy.enemy.hide_skill end end #---------------- if YE::MENU::MONSTER::SHOW_ELEMENTS if @require if $game_party.scan_elem.include?(@enemy.enemy_id) @contents.push(2) unless @enemy.enemy.hide_elem end else @contents.push(2) unless @enemy.enemy.hide_elem end end #---------------- if YE::MENU::MONSTER::SHOW_STATES if @require if $game_party.scan_state.include?(@enemy.enemy_id) @contents.push(3) unless @enemy.enemy.hide_state end else @contents.push(3) unless @enemy.enemy.hide_state end end #---------------- if YE::MENU::MONSTER::SHOW_STEAL and $imported["Steal"] if @require if $game_party.scan_steal.include?(@enemy.enemy_id) @contents.push(80) unless @enemy.enemy.hide_steal end else @contents.push(80) unless @enemy.enemy.hide_steal end end #---------------- if YE::MENU::MONSTER::SHOW_SPOILS if @require if $game_party.scan_spoil.include?(@enemy.enemy_id) @contents.push(90) unless @enemy.enemy.hide_spoil end else @contents.push(90) unless @enemy.enemy.hide_spoil end end #---------------- if YE::MENU::MONSTER::SHOW_DROPS if @require if $game_party.scan_drops.include?(@enemy.enemy_id) @contents.push(91) unless @enemy.enemy.hide_drops end else @contents.push(91) unless @enemy.enemy.hide_drops end end #---------------- if YE::MENU::MONSTER::SHOW_NOTES if @require if YE::HASH::ENEMY_NOTES.include?(@enemy.enemy_id) @contents.push(100) if $game_party.scan_desc.include?(@enemy.enemy_id) end else if YE::HASH::ENEMY_NOTES.include?(@enemy.enemy_id) @contents.push(100) end end end #---------------- n = @contents.size return n end #-------------------------------------------------------------------------- # case_page_name #-------------------------------------------------------------------------- def case_page_name(pagecase) if pagecase == 0 text = YE::MENU::MONSTER::TITLE_GENERAL elsif pagecase == 1 text = YE::MENU::MONSTER::TITLE_SKILLS elsif pagecase == 2 text = YE::MENU::MONSTER::TITLE_ELEMENTS elsif pagecase == 3 text = YE::MENU::MONSTER::TITLE_STATES elsif pagecase == 80 text = YE::MENU::MONSTER::TITLE_STEAL elsif pagecase == 90 text = YE::MENU::MONSTER::TITLE_SPOILS elsif pagecase == 91 text = YE::MENU::MONSTER::TITLE_DROPS elsif pagecase == 100 text = YE::MENU::MONSTER::TITLE_NOTES else text = YE::MENU::MONSTER::TITLE_UNKNOWN end return text end #-------------------------------------------------------------------------- # case_page_run #-------------------------------------------------------------------------- def case_page_run(pagecase) if pagecase == 0 make_general_page elsif pagecase == 1 make_skills_page elsif pagecase == 2 make_elements_page elsif pagecase == 3 make_states_page elsif pagecase == 80 make_steal_page elsif pagecase == 90 make_spoils_page elsif pagecase == 91 make_drops_page elsif pagecase == 100 make_notes_page end end end # Window_Enemy_Scan #=============================================================================== # # END OF FILE # #===============================================================================