Код:
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ Enemy Guide - KGC_EnemyGuide ◆ VX ◆
#_/ ◇ Last Update: 02/15/2009
#_/ ◆ Written by TOMY
#_/ ◆ Translation by Mr. Anonymous
#_/ ◆ KGC Site:
#_/ ◆ http://ytomy.sakura.ne.jp/
#_/ ◆ Translator's Blog:
#_/ ◆ http://mraprojects.wordpress.com
#_/-----------------------------------------------------------------------------
#_/ This script implements a customizable enemy guide, or "beastiary" to your
#_/ game. Such fields as HP, MP, and other parameters, as well as weakness,
#_/ resistance, gold given, experience given, and items dropped are included.
#_/============================================================================
#_/ Install: Insert above KGC_ExtraDropItem, and below KGC_CustomMenuCommand.
#_/============================================================================
#_/ ◆ Instructions For Usage ◆
#_/ To assign a description to an enemy/monster, the following must be added
#_/ enemy's "Note" box in the database:
#_/
#_/ <enemy_info>
#_/ Description Text
#_/ </enemy_info>
#_/
#_/ Alternatively, you can use <GUIDE_DESCRIPTION> and </GUIDE_DESCRIPTION>
#_/
#_/ ◆ Event Script Functions ◆
#_/ The following commands are available using the "Script" item in events.
#_/
#_/ * call_enemy_guide
#_/ Switches the scene to the enemy guide screen.
#_/
#_/ * get_enemy_guide_completion(VariableID)
#_/ Obtains the current amount of completion and stores it in a variable.
#_/
#_/ * complete_enemy_guide
#_/ Sets all enemies as "Defeated", thereby completing the Enemy Guide.
#_/
#_/ * reset_enemy_guide
#_/ Resets the Enemy Guide completely.
#_/
#_/ * set_enemy_encountered(EnemyID, Flag)
#_/ Sets a specified enemy as "Encountered" (or unencountered). If the Flag
#_/ is omitted, it is automatically assumed to be true.
#_/ Example: set_enemy_encountered(1)
#_/ Sets "Slime" as encountered.
#_/ Example: set_enemy_encountered(1, false)
#_/ Sets "Slime" as unencountered.
#_/
#_/ * set_monster_defeated(EnemyID, flag)
#_/ Sets a specified enemy as "Defeated" (or undefeated). If the Flag is
#_/ omitted, it is automatically assumed to be true.
#_/ Example: set_enemy_defeated(1)
#_/ Sets "Slime" as defeated.
#_/ Example: set_enemy_defeated(1, false)
#_/ Sets "Slime" as undefeated.
#_/
#_/ * set_enemy_item_dropped(EnemyID, Item_Index, Flag)
#_/ Sets a specified enemy's drop item as "Dropped" (or not dropped). If Flag
#_/ is omitted, it is automatically assumed to be true.
#_/ Example: set_enemy_item_dropped(1, 0)
#_/ Sets "Slime"'s first dropped item as dropped.
#_/ Example: set_enemy_item_dropped(1, 1, false)
#_/ Sets "Slime"'s second dropped item as not dropped.
#_/
#_/ * set_enemy_object_stolen(EnemyID, Object_Index, Flag)
#_/ Sets a specified enemy's stealable item(s) as "stolen" (or not) when used
#_/ in conjunction with KGC_Steal. If flag is omitted, it is automatically
#_/ assumed to be true.
#_/ Example: set_enemy_object_stolen(1, 0)
#_/ Sets "Slime"'s first stealable item as stolen.
#_/
#_/ [ Quick Key: ]
#_/ [ VariableID = The in-game variable number used to store data. ]
#_/ [ ]
#_/ [ EnemyID = The ID number of the desired enemy (found in the database). ]
#_/ [ ]
#_/ [ Flag = A true or false value. ]
#_/ [ ]
#_/ [ Item_Index = The current index of the enemy's dropped item. ]
#_/ [ A value of 0 returns the first item, while 1 returns the second. ]
#_/ [ ]
#_/ [ Object_Index = The current index of the enemy's stealable items. ]
#_/ [ A value of 0 returns the first item, while 1 returns the second, etc. ]
#_/
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#==============================================================================
# ★ BEGIN Customization ★
#==============================================================================
module KGC
module EnemyGuide
# ◆ Use Background Image ◆
# This toggle allows you to use a custom background image for the enemy guide
# window's background rather than the window skin.
# true : Use background image defined below ( BACKGROUND_FILENAME )
# false : Use Window Skin
USE_BACKGROUND_IMAGE = true
# ◆ Background Image File Name
# Here, you may designate an image in the "Graphics/System/" folder to be
# used as described above. The file extension is automatically recognized.
BACKGROUND_FILENAME = "EnemyGuideBack"
# ◆ Completed Display Interval [In Frames]
# This allows you to specify the amount of time in frames from which the
# Encountered, Defeated, & Completion percentile field are displayed before
# switching to the next. To get a better understanding of this, test the game
# and open the enemy guide. The field at hand is in the upper left corner.
INFO_INTERVAL = 90
# ◆ Enemy Selection Serial Number Display ◆
# This toggle allows you to show enemies' serial number before the name. This
# is pulled strictly by the enemy's ID number in the database.
# For example, when true, Slime's command entry would be: [001] Slime
# true = enable display of enemy serial number
# false = ID/Serial number is hidden.
SHOW_SERIAL_NUMBER = true
# ◆ Enemy Selection Order By Serial Number
# This toggle causes the script to arrange the enemies by ID/serial number.
# true = Enemies are sorted by serial numbers (Enemy ID)
# false = Supposed to sort another way? This doesn't seem to make any impact.
# ====================MORE RESEARCH NEEDED=======================
SERIAL_NUM_FOLLOW = true
# ◆ Serial Number Format
# This is the format in which the serial numbers are displayed in conjunction
# with the enemy name. %03d = Serial Number.
SERIAL_NUM_FORMAT = "%03d: "
# ◆ Unencountered Enemy Name Mask
# This allows you to set text for enemy entries that have not yet been
# encountered. By setting one character, such as "?", the entire enemy's
# name will be masked by that character, such as "Slime" becoming "?????".
UNKNOWN_ENEMY_NAME = "?"
# ◆ Uncountered enemy text.
UNENCOUNTERED_DATA = "- No Data -"
# ◆ Parameter Names text.
PARAMETER_NAME = {
:defeat_count => "Defeated",
:weak_element => "Weakness",
:resist_element => "Resistance",
:weak_state => "Susceptible",
:resist_state => "Resistant",
:exp => "Experience",
:treasure => "Drops",
:drop_prob => "Chance",
:steal_obj => "Steal",
:steal_prob => "Chance",
} # ← No not delete!
# ◆ Undefeated Enemy Parameter Text Mask
UNDEFEATED_PARAMETER = "???"
# ◆ Undropped Item Text Mask
# By setting one character, such as "?", the entire item's name will be masked
# by that character, such as "Potion" becoming "?????".
UNDROPPED_ITEM_NAME = "?"
# ◆ Element Weakness and Resistance Range
# Here you may specify what elements are shown under the Enemy Guide's
# Weakness and Resistance field. By default, 1..16 includes everything from
# element ID 1 to 16.
ELEMENT_RANGE = [1..16]
# ◆ Element Icon Display
# In this array, you may define the icons used for the elements displayed for
# weakness/resistance/state fields. These are ordered by the ranged defined
# in ELEMENT_RANGE, above. To find the icon's index, simply look at your
# IconSet and count each from left to right, top to bottom, starting with 0.
ELEMENT_ICON = [nil, # ID:0 Dummy(Don't alter this line)
50, 1, 4, 14, 24, 12, 189, 136, # Melee ~ Absorbing
104, 105, 106, 107, 108, 109, 110, 111, # Fire ~ Darkness
] # ← Do not remove!
# ◆ State Tolerance Range
# Here you may specify what state are shown under the Enemy Guide's
# State field. By default, 1..16 includes everything from
# state ID 1 to 16. This is similar to ELEMENT_RANGE as seen above.
STATE_RANGE = [1..16]
# ◆ Item Display ◆
# ◆ Drop Item Display
# true : Show drop items
# false : No not show drop items
SHOW_DROP_ITEM = true
# ◆ Stealable Item Display
# For use with KGC_Steal
# true : Show stealable items
# false : No not show stealable items
SHOW_STEAL_OBJ = true
# ◆ Hidden Enemies ◆
# You may specify enemies that you do not wish to appear in the monster guide
# here within the brackets by EnemyID.
# Example: MG_HIDE_ENEMIES = [2, 4, 8, 16, 32]
HIDDEN_ENEMIES = []
# ◆ Enemy Selection Order ◆
# Here, you may manually specify the order in which enemies appear in the
# selection list. This is handled by the enemy's ID number in the database.
# You must separate each number or number range with commas.
# A number range is a range of numbers separated by .. - for example, 1..3
# is the same as saying 1, 2, 3
# Enemies hidden by HIDDEN_ENEMIES will not appear.
# Set this function to nil if you do not wish to use it.
# Example: ENEMY_ORDER = [1..5, 8..13, 6, 7, 14, 15]
ENEMY_ORDER = nil
# ◆ Transformed Enemy Handling ◆
# true = If an enemy transforms into another enemy, the original enemy is
# flagged as defeated as well as the transformed enemy.
ORIGINAL_DEFEAT = true
# ◆ Command Menu ◆
# This toggle adds a command to the menu command selection to the main command
# menu. To set this command anywhere other than the bottom, please use
# KGC_CustomMenuCommand.
USE_MENU_ENEMY_GUIDE_COMMAND = true
# ◆ Text of displayed for Enemy Guide selection on the main command window.
VOCAB_MENU_ENEMY_GUIDE = "Beastiary"
end
end
#==============================================================================
# ★ END Customization ★
#==============================================================================
#=================================================#
# IMPORT #
#=================================================#
$imported = {} if $imported == nil
$imported["EnemyGuide"] = true
#=================================================#
#==============================================================================
# □ KGC
#==============================================================================
module KGC
module_function
#--------------------------------------------------------------------------
# ○ Character String Mask
# str : String Object
# mask : Character Mask
#--------------------------------------------------------------------------
def mask_string(str, mask)
text = mask
if mask.scan(/./).size == 1
text = mask * str.scan(/./).size
end
return text
end
end
#==============================================================================
# □ KGC::EnemyGuide::Regexp
#==============================================================================
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #
# Note Field Tag Strings #
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * #
# Whatever word(s) are after the separator ( | ) in the following lines are
# what are used to determine what is searched for in the "Note" section of
# an enemy.
module KGC::EnemyGuide
# Regular Expressions Module
module Regexp
# Enemy Module
module Enemy
# Begin Description tag string
BEGIN_GUIDE_DESCRIPTION = /<(?:GUIDE_DESCRIPTION|enemy_info)>/i
# End Description tag string
END_GUIDE_DESCRIPTION = /<\/(?:GUIDE_DESCRIPTION|enemy_info)>/i
end
end
module_function
#--------------------------------------------------------------------------
# ○ Range & Integer
# Obtain array and convert into integer. (Repeditive elements are excluded.)
#--------------------------------------------------------------------------
def convert_integer_array(array)
result = []
array.each { |i|
case i
when Range
result |= i.to_a
when Integer
result |= [i]
end
}
return result
end
#--------------------------------------------------------------------------
# ○ Is the enemy to be shown?
#--------------------------------------------------------------------------
def enemy_show?(enemy_id)
return false if HIDDEN_ENEMY_LIST.include?(enemy_id)
if ENEMY_ORDER_ID != nil
return false unless ENEMY_ORDER_ID.include?(enemy_id)
end
return true
end
#--------------------------------------------------------------------------
# ○ Array Sorting
#--------------------------------------------------------------------------
# Hidden Enemy List
HIDDEN_ENEMY_LIST = convert_integer_array(HIDDEN_ENEMIES)
# Enemy IDs in the display order
ENEMY_ORDER_ID = (ENEMY_ORDER == nil ? nil :
convert_integer_array(ENEMY_ORDER))
# Check element list
CHECK_ELEMENT_LIST = convert_integer_array(ELEMENT_RANGE)
# Check state list
CHECK_STATE_LIST = convert_integer_array(STATE_RANGE)
end
#=================================================#
#==============================================================================
# □ KGC::Commands
#==============================================================================
module KGC
module Commands
module_function
#--------------------------------------------------------------------------
# ○ 遭遇状態取得
# enemy_id : 敵 ID
#--------------------------------------------------------------------------
def enemy_encountered?(enemy_id)
return $game_system.enemy_encountered[enemy_id]
end
#--------------------------------------------------------------------------
# ○ 撃破状態取得
# enemy_id : 敵 ID
#--------------------------------------------------------------------------
def enemy_defeated?(enemy_id)
return $game_system.enemy_defeated[enemy_id]
end
#--------------------------------------------------------------------------
# ○ アイテムドロップ状態取得
# enemy_id : 敵 ID
# item_index : ドロップアイテム番号
#--------------------------------------------------------------------------
def enemy_item_dropped?(enemy_id, item_index)
if $game_system.enemy_item_dropped[enemy_id] == nil
return false
end
result = $game_system.enemy_item_dropped[enemy_id] & (1 << item_index)
return (result != 0)
end
#--------------------------------------------------------------------------
# ○ 盗み成功済み状態取得
# enemy_id : 敵 ID
# obj_index : オブジェクト番号
#--------------------------------------------------------------------------
def enemy_object_stolen?(enemy_id, obj_index)
if $game_system.enemy_object_stolen[enemy_id] == nil
return false
end
result = $game_system.enemy_object_stolen[enemy_id] & (1 << obj_index)
return (result != 0)
end
#--------------------------------------------------------------------------
# ○ 遭遇状態設定
# enemy_id : 敵 ID
# enabled : true..遭遇済み false..未遭遇
#--------------------------------------------------------------------------
def set_enemy_encountered(enemy_id, enabled = true)
$game_system.enemy_encountered[enemy_id] = enabled
unless enabled
# 未遭遇なら撃破済みフラグも解除
set_enemy_defeated(enemy_id, false)
end
end
#--------------------------------------------------------------------------
# ○ 撃破状態設定
# enemy_id : 敵 ID
# enabled : true..撃破済み false..未撃破
#--------------------------------------------------------------------------
def set_enemy_defeated(enemy_id, enabled = true)
$game_system.enemy_defeated[enemy_id] = enabled
if enabled
# 撃破済みなら遭遇フラグもセット
set_enemy_encountered(enemy_id)
end
end
#--------------------------------------------------------------------------
# ○ アイテムドロップ状態設定
# enemy_id : 敵 ID
# item_index : ドロップアイテム番号
# enabled : true..ドロップ済み false..未ドロップ
#--------------------------------------------------------------------------
def set_enemy_item_dropped(enemy_id, item_index, enabled = true)
if $game_system.enemy_item_dropped[enemy_id] == nil
$game_system.enemy_item_dropped[enemy_id] = 0
end
if enabled
$game_system.enemy_item_dropped[enemy_id] |= (1 << item_index)
else
$game_system.enemy_item_dropped[enemy_id] &= ~(1 << item_index)
end
end
#--------------------------------------------------------------------------
# ○ 盗み成功状態設定
# enemy_id : 敵 ID
# obj_index : オブジェクト番号
# enabled : true..成功済み false..未成功
#--------------------------------------------------------------------------
def set_enemy_object_stolen(enemy_id, obj_index, enabled = true)
if $game_system.enemy_object_stolen[enemy_id] == nil
$game_system.enemy_object_stolen[enemy_id] = 0
end
if enabled
$game_system.enemy_object_stolen[enemy_id] |= (1 << obj_index)
else
$game_system.enemy_object_stolen[enemy_id] &= ~(1 << obj_index)
end
end
#--------------------------------------------------------------------------
# ○ 図鑑リセット
#--------------------------------------------------------------------------
def reset_enemy_guide
$game_system.enemy_encountered = []
$game_system.enemy_defeated = []
$game_system.enemy_item_dropped = []
$game_system.enemy_object_stolen = []
end
#--------------------------------------------------------------------------
# ○ 図鑑完成
#--------------------------------------------------------------------------
def complete_enemy_guide
(1...$data_enemies.size).each { |i|
set_enemy_encountered(i)
set_enemy_defeated(i)
enemy = $data_enemies[i]
items = [enemy.drop_item1, enemy.drop_item2]
if $imported["ExtraDropItem"]
items += enemy.extra_drop_items
end
items.each_index { |j| set_enemy_item_dropped(i, j) }
if $imported["Steal"]
objs = enemy.steal_objects
objs.each_index { |j| set_enemy_object_stolen(i, j) }
end
}
end
#--------------------------------------------------------------------------
# ○ 図鑑に含めるか
# enemy_id : 敵 ID
#--------------------------------------------------------------------------
def enemy_guide_include?(enemy_id)
return false unless KGC::EnemyGuide.enemy_show?(enemy_id)
enemy = $data_enemies[enemy_id]
return (enemy != nil && enemy.name != "")
end
#--------------------------------------------------------------------------
# ○ 存在する敵の種類数取得
# variable_id : 取得した値を代入する変数の ID
#--------------------------------------------------------------------------
def get_all_enemies_number(variable_id = 0)
n = 0
(1...$data_enemies.size).each { |i|
n += 1 if enemy_guide_include?(i)
}
if variable_id > 0
$game_variables[variable_id] = n
$game_map.need_refresh = true
end
return n
end
#--------------------------------------------------------------------------
# ○ 遭遇した敵の種類数取得
# variable_id : 取得した値を代入する変数の ID
#--------------------------------------------------------------------------
def get_encountered_enemies_number(variable_id = 0)
n = 0
(1...$data_enemies.size).each { |i|
if enemy_guide_include?(i) && $game_system.enemy_encountered[i]
n += 1
end
}
if variable_id > 0
$game_variables[variable_id] = n
$game_map.need_refresh = true
end
return n
end
#--------------------------------------------------------------------------
# ○ 撃破した敵の種類数取得
# variable_id : 取得した値を代入する変数の ID
#--------------------------------------------------------------------------
def get_defeated_enemies_number(variable_id = 0)
n = 0
(1...$data_enemies.size).each { |i|
if enemy_guide_include?(i) && $game_system.enemy_encountered[i] &&
$game_system.enemy_defeated[i]
n += 1
end
}
if variable_id > 0
$game_variables[variable_id] = n
$game_map.need_refresh = true
end
return n
end
#--------------------------------------------------------------------------
# ○ モンスター図鑑完成度の取得
# variable_id : 取得した値を代入する変数の ID
#--------------------------------------------------------------------------
def get_enemy_guide_completion(variable_id = 0)
num = get_all_enemies_number
value = (num > 0 ? (get_defeated_enemies_number * 100 / num) : 0)
if variable_id > 0
$game_variables[variable_id] = value
$game_map.need_refresh = true
end
return value
end
#--------------------------------------------------------------------------
# ○ モンスター図鑑呼び出し
#--------------------------------------------------------------------------
def call_enemy_guide
return if $game_temp.in_battle
$game_temp.next_scene = :enemy_guide
end
end
end
class Game_Interpreter
include KGC::Commands
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Vocab
#==============================================================================
module Vocab
# モンスター図鑑
def self.enemy_guide
return KGC::EnemyGuide::VOCAB_MENU_ENEMY_GUIDE
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Enemy
#==============================================================================
class RPG::Enemy
#--------------------------------------------------------------------------
# ○ モンスター図鑑のキャッシュ生成
#--------------------------------------------------------------------------
def create_enemy_guide_cache
@__enemy_guide_description = ""
description_flag = false
self.note.each_line { |line|
case line
when KGC::EnemyGuide::Regexp::Enemy::BEGIN_GUIDE_DESCRIPTION
# 説明文開始
description_flag = true
when KGC::EnemyGuide::Regexp::Enemy::END_GUIDE_DESCRIPTION
# 説明文終了
description_flag = false
else
if description_flag
@__enemy_guide_description += line
end
end
}
end
#--------------------------------------------------------------------------
# ○ 図鑑説明文
#--------------------------------------------------------------------------
def enemy_guide_description
create_enemy_guide_cache if @__enemy_guide_description == nil
return @__enemy_guide_description
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_writer :enemy_encountered # 遭遇済みフラグ
attr_writer :enemy_defeated # 撃破済みフラグ
attr_writer :enemy_item_dropped # アイテムドロップ済みフラグ
attr_writer :enemy_object_stolen # 盗み成功済みフラグ
#--------------------------------------------------------------------------
# ○ 遭遇済みフラグ取得
#--------------------------------------------------------------------------
def enemy_encountered
@enemy_encountered = [] if @enemy_encountered == nil
return @enemy_encountered
end
#--------------------------------------------------------------------------
# ○ 撃破済みフラグ取得
#--------------------------------------------------------------------------
def enemy_defeated
@enemy_defeated = [] if @enemy_defeated == nil
return @enemy_defeated
end
#--------------------------------------------------------------------------
# ○ アイテムドロップ済みフラグ取得
#--------------------------------------------------------------------------
def enemy_item_dropped
@enemy_item_dropped = [] if @enemy_item_dropped == nil
return @enemy_item_dropped
end
#--------------------------------------------------------------------------
# ○ 盗み成功済みフラグ取得
#--------------------------------------------------------------------------
def enemy_object_stolen
@enemy_object_stolen = [] if @enemy_object_stolen == nil
return @enemy_object_stolen
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Enemy
#==============================================================================
class Game_Enemy < Game_Battler
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# index : 敵グループ内インデックス
# enemy_id : 敵キャラ ID
#--------------------------------------------------------------------------
alias initialize_KGC_EnemyGuide initialize
def initialize(index, enemy_id)
initialize_KGC_EnemyGuide(index, enemy_id)
@original_ids = [] # 変身前の ID
# 遭遇済みフラグをオン
KGC::Commands.set_enemy_encountered(enemy_id) unless hidden
end
#--------------------------------------------------------------------------
# ● コラプスの実行
#--------------------------------------------------------------------------
alias perform_collapse_KGC_EnemyGuide perform_collapse
def perform_collapse
last_collapsed = @collapse
perform_collapse_KGC_EnemyGuide
if !last_collapsed && @collapse
# 撃破済みフラグをオン
KGC::Commands.set_enemy_defeated(enemy_id)
# 変身前の敵も撃破済みにする
if KGC::EnemyGuide::ORIGINAL_DEFEAT
@original_ids.compact.each { |i|
KGC::Commands.set_enemy_defeated(i)
}
end
end
end
#--------------------------------------------------------------------------
# ● 変身
# enemy_id : 変身先の敵キャラ ID
#--------------------------------------------------------------------------
alias transform_KGC_EnemyGuide transform
def transform(enemy_id)
# 変身前のIDを保存
@original_ids << @enemy_id
transform_KGC_EnemyGuide(enemy_id)
# 変身後の敵も遭遇済みにする
KGC::Commands.set_enemy_encountered(enemy_id)
end
#--------------------------------------------------------------------------
# ● 隠れ状態設定
#--------------------------------------------------------------------------
alias hidden_equal_KGC_EnemyGuide hidden= unless $@
def hidden=(value)
hidden_equal_KGC_EnemyGuide(value)
# 出現した場合は遭遇済みフラグをオン
KGC::Commands.set_enemy_encountered(enemy_id) unless value
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Troop
#==============================================================================
class Game_Troop < Game_Unit
#--------------------------------------------------------------------------
# ● ドロップアイテムの配列作成
#--------------------------------------------------------------------------
def make_drop_items
drop_items = []
dead_members.each { |enemy|
[enemy.drop_item1, enemy.drop_item2].each_with_index { |di, i|
next if di.kind == 0
next if rand(di.denominator) != 0
if di.kind == 1
drop_items.push($data_items[di.item_id])
elsif di.kind == 2
drop_items.push($data_weapons[di.weapon_id])
elsif di.kind == 3
drop_items.push($data_armors[di.armor_id])
end
# ドロップ済みフラグをセット
KGC::Commands.set_enemy_item_dropped(enemy.enemy.id, i)
}
}
return drop_items
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Window_Command
#==============================================================================
class Window_Command < Window_Selectable
unless method_defined?(: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
#--------------------------------------------------------------------------
# ○ コマンドをリフレッシュ
#--------------------------------------------------------------------------
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
#--------------------------------------------------------------------------
# ○ コマンドを挿入
#--------------------------------------------------------------------------
def insert_command(index, command)
@commands.insert(index, command)
@item_max = @commands.size
refresh_command
refresh
end
#--------------------------------------------------------------------------
# ○ コマンドを削除
#--------------------------------------------------------------------------
def remove_command(command)
@commands.delete(command)
@item_max = @commands.size
refresh
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_EnemyGuideTop
#------------------------------------------------------------------------------
# モンスター図鑑画面で、完成度を表示するウィンドウです。
#==============================================================================
class Window_EnemyGuideTop < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 0, 240, WLH * 4 + 32)
self.height = WLH + 32
@duration = 0
@interval = KGC::EnemyGuide::INFO_INTERVAL
refresh
if KGC::EnemyGuide::USE_BACKGROUND_IMAGE
self.opacity = 0
end
if self.windowskin != nil
bitmap = Bitmap.new(windowskin.width, windowskin.height)
bitmap.blt(0, 0, windowskin, windowskin.rect)
bitmap.clear_rect(80, 16, 32, 32)
self.windowskin = bitmap
end
end
#--------------------------------------------------------------------------
# ● 破棄
#--------------------------------------------------------------------------
def dispose
self.windowskin.dispose
super
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
total = KGC::Commands.get_all_enemies_number
encountered = KGC::Commands.get_encountered_enemies_number
defeated = KGC::Commands.get_defeated_enemies_number
text = sprintf("遭遇済み: %3d/%3d ",encountered, total)
self.contents.draw_text(0, 0, width - 32, WLH, text, 1)
self.contents.draw_text(0, WLH * 3, width - 32, WLH, text, 1)
text = sprintf("撃破済み: %3d/%3d", defeated, total)
self.contents.draw_text(0, WLH, width - 32, WLH, text, 1)
text = sprintf("完成度: %3d%%", defeated * 100 / total)
self.contents.draw_text(0, WLH * 2, width - 32, WLH, text, 1)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
@duration += 1
case @duration
when @interval...(@interval + WLH)
self.oy += 1
when (@interval + WLH)
@duration = 0
if self.oy >= WLH * 3
self.oy = 0
end
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_EnemyGuideList
#------------------------------------------------------------------------------
# モンスター図鑑画面で、モンスター一覧を表示するウィンドウです。
#==============================================================================
class Window_EnemyGuideList < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, WLH + 32, 240, Graphics.height - (WLH + 32))
self.index = 0
refresh
if KGC::EnemyGuide::USE_BACKGROUND_IMAGE
self.opacity = 0
self.height -= (self.height - 32) % WLH
end
end
#--------------------------------------------------------------------------
# ○ 選択モンスターの取得
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ○ エネミーをリストに含めるか
# enemy_id : 敵 ID
#--------------------------------------------------------------------------
def include?(enemy_id)
return KGC::Commands.enemy_guide_include?(enemy_id)
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
@data = []
if KGC::EnemyGuide::ENEMY_ORDER_ID == nil
# ID順
enemy_list = 1...$data_enemies.size
else
# 指定順
enemy_list = KGC::EnemyGuide::ENEMY_ORDER_ID
end
enemy_list.each { |i|
@data << $data_enemies[i] if include?(i)
}
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
enemy = @data[index]
self.contents.font.color = normal_color
unless KGC::Commands.enemy_defeated?(enemy.id)
self.contents.font.color.alpha = 128
end
rect = item_rect(index)
self.contents.clear_rect(rect)
if KGC::EnemyGuide::SHOW_SERIAL_NUMBER
s_num = sprintf(KGC::EnemyGuide::SERIAL_NUM_FORMAT,
KGC::EnemyGuide::SERIAL_NUM_FOLLOW ? (index + 1) : enemy.id)
end
text = (KGC::EnemyGuide::SHOW_SERIAL_NUMBER ? s_num : "")
if KGC::Commands.enemy_encountered?(enemy.id)
# 遭遇済み
text += enemy.name
else
# 未遭遇
mask = KGC::EnemyGuide::UNKNOWN_ENEMY_NAME
if mask.scan(/./).size == 1
mask = mask * enemy.name.scan(/./).size
end
text += mask
end
self.contents.draw_text(rect, text)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_EnemyGuideStatus
#------------------------------------------------------------------------------
# モンスター図鑑画面で、ステータスを表示するウィンドウです。
#==============================================================================
class Window_EnemyGuideStatus < Window_Base
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :enemy # 表示エネミー
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(240, 0, Graphics.width - 240, Graphics.height)
self.enemy = nil
self.z = 100
if KGC::EnemyGuide::USE_BACKGROUND_IMAGE
self.opacity = 0
end
@show_sprite = false
@enemy_sprite = Sprite.new
@enemy_sprite.bitmap = Bitmap.new(Graphics.width, Graphics.height)
@enemy_sprite.x = 0
@enemy_sprite.y = 0
@enemy_sprite.z = self.z + 100
@enemy_sprite.visible = false
end
#--------------------------------------------------------------------------
# ● 破棄
#--------------------------------------------------------------------------
def dispose
super
@enemy_sprite.bitmap.dispose
@enemy_sprite.dispose
end
#--------------------------------------------------------------------------
# ○ アイテム用ページを表示するか
#--------------------------------------------------------------------------
def item_page_show?
return true if KGC::EnemyGuide::SHOW_DROP_ITEM
return true if $imported["Steal"] && KGC::EnemyGuide::SHOW_STEAL_OBJ
return false
end
#--------------------------------------------------------------------------
# ○ ページ数取得
#--------------------------------------------------------------------------
def pages
return (item_page_show? ? 3 : 2)
end
#--------------------------------------------------------------------------
# ○ 表示エネミー設定
#--------------------------------------------------------------------------
def enemy=(enemy)
@enemy = enemy
refresh
end
#--------------------------------------------------------------------------
# ○ 表示情報切り替え
# shamt : 移動ページ数
#--------------------------------------------------------------------------
def shift_info_type(shamt)
n = self.ox + (width - 32) * shamt
self.ox = [[n, 0].max, (width - 32) * (pages - 1)].min
end
#--------------------------------------------------------------------------
# ○ スプライト表示切替
#--------------------------------------------------------------------------
def switch_sprite
@show_sprite = !@show_sprite
@enemy_sprite.visible = @show_sprite
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
original_width = self.width
self.width = original_width * pages - (32 * (pages - 1))
create_contents
self.width = original_width
draw_enemy_sprite
return if enemy == nil
self.contents.font.color = normal_color
# 遭遇していない
unless KGC::Commands.enemy_encountered?(enemy.id)
self.contents.font.color.alpha = 128
dy = (height - 32) / 2
dy -= dy % WLH
self.contents.draw_text(0, dy, width - 32, WLH,
KGC::EnemyGuide::UNENCOUNTERED_DATA, 1)
self.contents.blt(width - 32, 0, self.contents, self.contents.rect)
return
end
draw_status
end
#--------------------------------------------------------------------------
# ○ ステータス描画
#--------------------------------------------------------------------------
def draw_status
# Page 1
dy = draw_basic_info(0, 0)
dy = draw_parameter2(0, dy)
dy = draw_element(0, dy, 2)
dy = draw_state(0, dy, 2)
draw_prize(0, dy)
# Page 2 (アイテム関連を表示する場合のみ)
if item_page_show?
dx = width - 32
dy = draw_basic_info(dx, 0)
max_rows = (self.height - dy - 32) / WLH
rows = (max_rows + 1) / (pages - 1)
dy = draw_drop_item(dx, dy, rows)
draw_steal_object(dx, dy, max_rows - rows)
end
# Page 3
dx = (width - 32) * (pages - 1)
dy = draw_basic_info(dx, 0)
draw_description(dx, dy)
end
#--------------------------------------------------------------------------
# ○ 基本情報画
# dx, dy : 描画先 X, Y
#--------------------------------------------------------------------------
def draw_basic_info(dx, dy)
draw_graphic(dx, dy)
draw_parameter1(dx + 112, dy)
return dy + 96
end
#--------------------------------------------------------------------------
# ○ グラフィック描画
# dx, dy : 描画先 X, Y
#--------------------------------------------------------------------------
def draw_graphic(dx, dy)
buf = Bitmap.new(108, 96)
bitmap = Cache.battler(enemy.battler_name, enemy.battler_hue)
rect = Rect.new(0, 0, bitmap.width / 3, bitmap.height / 3)
rect.x = (108 - rect.width) / 2
rect.y = (96 - rect.height) / 2
buf.stretch_blt(rect, bitmap, bitmap.rect)
self.contents.blt(dx, dy, buf, buf.rect)
buf.dispose
end
#--------------------------------------------------------------------------
# ○ エネミースプライト描画
#--------------------------------------------------------------------------
def draw_enemy_sprite
return if @enemy_sprite == nil
@enemy_sprite.bitmap.fill_rect(@enemy_sprite.bitmap.rect,
Color.new(0, 0, 0, 160))
return if enemy == nil || !KGC::Commands.enemy_encountered?(enemy.id)
bitmap = Cache.battler(enemy.battler_name, enemy.battler_hue)
dx = (Graphics.width - bitmap.width) / 2
dy = (Graphics.height - bitmap.height) / 2
@enemy_sprite.bitmap.blt(dx, dy, bitmap, bitmap.rect)
end
#--------------------------------------------------------------------------
# ○ パラメータ描画 - 1
# dx, dy : 描画先 X, Y
#--------------------------------------------------------------------------
def draw_parameter1(dx, dy)
# 名前, HP, MP
param = {}
if KGC::Commands.enemy_defeated?(enemy.id)
param[:maxhp] = enemy.maxhp
param[:maxmp] = enemy.maxmp
if $imported["BattleCount"]
param[:defeat_count] = KGC::Commands.get_defeat_count(enemy.id)
end
else
param[:maxhp] = param[:maxmp] = KGC::EnemyGuide::UNDEFEATED_PARAMETER
param[:defeat_count] = 0
end
self.contents.font.color = normal_color
self.contents.draw_text(dx, dy, width - 144, WLH, enemy.name)
self.contents.font.color = system_color
self.contents.draw_text(dx, dy + WLH, 80, WLH, Vocab.hp)
self.contents.draw_text(dx, dy + WLH * 2, 80, WLH, Vocab.mp)
if $imported["BattleCount"]
self.contents.draw_text(dx, dy + WLH * 3, 80, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:defeat_count])
end
self.contents.font.color = normal_color
self.contents.draw_text(dx + 88, dy + WLH, 64, WLH, param[:maxhp], 2)
self.contents.draw_text(dx + 88, dy + WLH * 2, 64, WLH, param[:maxmp], 2)
if $imported["BattleCount"]
self.contents.draw_text(dx + 88, dy + WLH * 3, 64, WLH,
param[:defeat_count], 2)
end
end
#--------------------------------------------------------------------------
# ○ パラメータ描画 - 2
# dx, dy : 描画先 X, Y
#--------------------------------------------------------------------------
def draw_parameter2(dx, dy)
# ATK ~ AGI
param = {}
if KGC::Commands.enemy_defeated?(enemy.id)
param[:atk] = enemy.atk
param[:def] = enemy.def
param[:spi] = enemy.spi
param[:agi] = enemy.agi
else
param[:atk] = param[:def] = param[:spi] = param[:agi] =
KGC::EnemyGuide::UNDEFEATED_PARAMETER
end
dw = (width - 32) / 2
self.contents.font.color = system_color
self.contents.draw_text(dx, dy, 80, WLH, Vocab.atk)
self.contents.draw_text(dx + dw, dy, 80, WLH, Vocab.def)
self.contents.draw_text(dx, dy + WLH, 80, WLH, Vocab.spi)
self.contents.draw_text(dx + dw, dy + WLH, 80, WLH, Vocab.agi)
dx += 80
self.contents.font.color = normal_color
self.contents.draw_text(dx, dy, 48, WLH, param[:atk], 2)
self.contents.draw_text(dx + dw, dy, 48, WLH, param[:def], 2)
self.contents.draw_text(dx , dy + WLH, 48, WLH, param[:spi], 2)
self.contents.draw_text(dx + dw, dy + WLH, 48, WLH, param[:agi], 2)
return dy + WLH * 2
end
#--------------------------------------------------------------------------
# ○ 属性描画
# dx, dy : 描画先 X, Y
# rows : 行数
#--------------------------------------------------------------------------
def draw_element(dx, dy, rows = 1)
new_dy = dy + WLH * (rows * 2)
self.contents.font.color = system_color
self.contents.draw_text(dx, dy, 80, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:weak_element])
self.contents.draw_text(dx, dy + WLH * rows, 80, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:resist_element])
return new_dy unless KGC::Commands.enemy_defeated?(enemy.id)
cols = (width - 112) / 24
# 弱点属性
draw_icon_list(dx + 80, dy, rows, cols,
KGC::EnemyGuide::CHECK_ELEMENT_LIST,
Proc.new { |i| enemy.element_ranks[i] < 3 },
Proc.new { |i| KGC::EnemyGuide::ELEMENT_ICON[i] })
# 耐性属性
draw_icon_list(dx + 80, dy + WLH * rows, rows, cols,
KGC::EnemyGuide::CHECK_ELEMENT_LIST,
Proc.new { |i| enemy.element_ranks[i] > 3 },
Proc.new { |i| KGC::EnemyGuide::ELEMENT_ICON[i] })
return new_dy
end
#--------------------------------------------------------------------------
# ○ アイコンリスト描画
# dx, dy : 描画先 X, Y
# rows, cols : アイコン行/列数
# item_list : 描画対象のリスト
# cond_proc : 描画条件 Proc
# index_proc : アイコン index 取得用 Proc
#--------------------------------------------------------------------------
def draw_icon_list(dx, dy, rows, cols, item_list, cond_proc, index_proc)
nc = 0 # 現在の列数
nr = 0 # 現在の行数
item_list.each { |item|
next if item == nil
next unless cond_proc.call(item)
icon_index = index_proc.call(item)
next if icon_index == nil || icon_index == 0
draw_icon(icon_index, dx + nc * 24, dy + nr * 24)
nc += 1
if nc == cols
# 次の行へ
nc = 0
nr += 1
break if nr == rows # 行制限オーバー
end
}
end
#--------------------------------------------------------------------------
# ○ ステート描画
# dx, dy : 描画先 X, Y
# rows : 行数
#--------------------------------------------------------------------------
def draw_state(dx, dy, rows = 1)
new_dy = dy + WLH * (rows * 2)
self.contents.font.color = system_color
self.contents.draw_text(dx, dy, 80, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:weak_state])
self.contents.draw_text(dx, dy + WLH * rows, 80, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:resist_state])
return new_dy unless KGC::Commands.enemy_defeated?(enemy.id)
cols = (width - 112) / 24
states = []
KGC::EnemyGuide::CHECK_STATE_LIST.each { |i| states << $data_states[i] }
# 弱点ステート
draw_icon_list(dx + 80, dy, rows, cols,
states,
Proc.new { |i| enemy.state_ranks[i.id] < 3 },
Proc.new { |i| i.icon_index })
# 無効ステート
draw_icon_list(dx + 80, dy + WLH * rows, rows, cols,
states,
Proc.new { |i| enemy.state_ranks[i.id] == 6 },
Proc.new { |i| i.icon_index })
return new_dy
end
#--------------------------------------------------------------------------
# ○ EXP, Gold 描画
# dx, dy : 描画先 X, Y
#--------------------------------------------------------------------------
def draw_prize(dx, dy)
param = {}
if KGC::Commands.enemy_defeated?(enemy.id)
param[:exp] = enemy.exp
param[:gold] = enemy.gold
param[:ap] = enemy.ap if $imported["EquipLearnSkill"]
else
param[:exp] = param[:gold] = param[:ap] =
KGC::EnemyGuide::UNDEFEATED_PARAMETER
end
dw = (width - 32) / 2
self.contents.font.color = system_color
self.contents.draw_text(dx, dy, 80, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:exp])
self.contents.draw_text(dx + dw, dy, 80, WLH, Vocab.gold)
if $imported["EquipLearnSkill"]
self.contents.draw_text(dx, dy + WLH, 80, WLH, Vocab.ap)
end
# EXP, Gold
dx += 76
self.contents.font.color = normal_color
self.contents.draw_text(dx, dy, 52, WLH, param[:exp], 2)
self.contents.draw_text(dx + dw, dy, 52, WLH, param[:gold], 2)
if $imported["EquipLearnSkill"]
self.contents.draw_text(dx, dy + WLH, 52, WLH, param[:ap], 2)
end
return dy + WLH * 2
end
#--------------------------------------------------------------------------
# ○ ドロップアイテム描画
# dx, dy : 描画先 X, Y
# rows : 行数
#--------------------------------------------------------------------------
def draw_drop_item(dx, dy, rows)
return dy unless KGC::EnemyGuide::SHOW_DROP_ITEM
new_dy = dy + WLH * rows
dw = (width - 32) / 2
self.contents.font.color = system_color
self.contents.draw_text(dx, dy, 128, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:treasure], 1)
self.contents.draw_text(dx + dw, dy, 128, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:drop_prob], 2)
return new_dy unless KGC::Commands.enemy_defeated?(enemy.id)
# リスト作成
drop_items = [enemy.drop_item1, enemy.drop_item2]
if $imported["ExtraDropItem"]
drop_items += enemy.extra_drop_items
end
dy += WLH
count = 0
drop_items.each_with_index { |item, i|
# アイテム名描画
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
if KGC::Commands.enemy_item_dropped?(enemy.id, i)
draw_item_name(drop_item, dx, dy)
else
draw_masked_item_name(drop_item, dx, dy)
end
# ドロップ率描画
if $imported["ExtraDropItem"] && item.drop_prob > 0
text = sprintf("%d%%", item.drop_prob)
else
text = "1/#{item.denominator}"
end
self.contents.draw_text(dx + dw, dy, 128, WLH, text, 2)
dy += WLH
count += 1
break if count == rows
}
return new_dy
end
#--------------------------------------------------------------------------
# ○ アイテム名をマスクして描画
# item : アイテム (スキル、武器、防具でも可)
# x : 描画先 X 座標
# y : 描画先 Y 座標
# enabled : 有効フラグ。false のとき半透明で描画
#--------------------------------------------------------------------------
def draw_masked_item_name(item, x, y, enabled = true)
return if item == nil
draw_icon(item.icon_index, x, y, enabled)
self.contents.font.color = normal_color
self.contents.font.color.alpha = enabled ? 255 : 128
mask = KGC::EnemyGuide::UNDROPPED_ITEM_NAME
text = KGC.mask_string(item.name, mask)
self.contents.draw_text(x + 24, y, 172, WLH, text)
end
#--------------------------------------------------------------------------
# ○ 盗めるオブジェクト描画
# dx, dy : 描画先 X, Y
# rows : 行数
#--------------------------------------------------------------------------
def draw_steal_object(dx, dy, rows)
return dy unless $imported["Steal"] && KGC::EnemyGuide::SHOW_STEAL_OBJ
new_dy = dy + WLH * rows
dw = (width - 32) / 2
self.contents.font.color = system_color
self.contents.draw_text(dx, dy, 128, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:steal_obj], 1)
self.contents.draw_text(dx + dw, dy, 128, WLH,
KGC::EnemyGuide::PARAMETER_NAME[:steal_prob], 2)
return new_dy unless KGC::Commands.enemy_defeated?(enemy.id)
# リスト作成
steal_objects = enemy.steal_objects.clone
if steal_objects.size >= rows
steal_objects = steal_objects[0...(rows - 1)]
end
dy += WLH
steal_objects.each_with_index { |obj, i|
if obj.kind == 4
# Gold
if KGC::Commands.enemy_object_stolen?(enemy.id, i)
text = sprintf("%d%s", obj.gold, Vocab.gold)
else
mask = KGC::EnemyGuide::UNDROPPED_ITEM_NAME
text = KGC.mask_string("aaa", mask)
end
self.contents.draw_text(dx + 24, dy, dw, WLH, text)
else
# Item
case obj.kind
when 1
item = $data_items[obj.item_id]
when 2
item = $data_weapons[obj.weapon_id]
when 3
item = $data_armors[obj.armor_id]
end
if KGC::Commands.enemy_object_stolen?(enemy.id, i)
draw_item_name(item, dx, dy)
else
draw_masked_item_name(item, dx, dy)
end
end
# 成功率描画
if obj.success_prob > 0
text = sprintf("%d%%", obj.success_prob)
else
text = "1/#{obj.denominator}"
end
self.contents.draw_text(dx + dw, dy, 128, WLH, text, 2)
dy += WLH
}
return new_dy
end
#--------------------------------------------------------------------------
# ○ 説明文描画
# dx, dy : 描画先 X, Y
#--------------------------------------------------------------------------
def draw_description(dx, dy)
return unless KGC::Commands.enemy_defeated?(enemy.id)
dx += 4
enemy.enemy_guide_description.each_line { |line|
self.contents.draw_text(dx, dy, width - 32, WLH, line.chomp)
dy += WLH
}
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Map
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# ● 画面切り替えの実行
#--------------------------------------------------------------------------
alias update_scene_change_KGC_EnemyGuide update_scene_change
def update_scene_change
return if $game_player.moving? # プレイヤーの移動中?
if $game_temp.next_scene == :enemy_guide
call_enemy_guide
return
end
update_scene_change_KGC_EnemyGuide
end
#--------------------------------------------------------------------------
# ○ モンスター図鑑への切り替え
#--------------------------------------------------------------------------
def call_enemy_guide
$game_temp.next_scene = nil
$scene = Scene_EnemyGuide.new(0, Scene_EnemyGuide::HOST_MAP)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Menu
#==============================================================================
class Scene_Menu < Scene_Base
if KGC::EnemyGuide::USE_MENU_ENEMY_GUIDE_COMMAND
#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成
#--------------------------------------------------------------------------
alias create_command_window_KGC_EnemyGuide create_command_window
def create_command_window
create_command_window_KGC_EnemyGuide
return if $imported["CustomMenuCommand"]
@__command_enemy_guide_index =
@command_window.add_command(Vocab.enemy_guide)
if @command_window.oy > 0
@command_window.oy -= Window_Base::WLH
end
@command_window.index = @menu_index
end
end
#--------------------------------------------------------------------------
# ● コマンド選択の更新
#--------------------------------------------------------------------------
alias update_command_selection_KGC_EnemyGuide update_command_selection
def update_command_selection
current_menu_index = @__command_enemy_guide_index
call_enemy_guide_flag = false
if Input.trigger?(Input::C)
case @command_window.index
when @__command_enemy_guide_index # モンスター図鑑
call_enemy_guide_flag = true
end
end
# モンスター図鑑に移行
if call_enemy_guide_flag
Sound.play_decision
$scene = Scene_EnemyGuide.new(@__command_enemy_guide_index,
Scene_EnemyGuide::HOST_MENU)
return
end
update_command_selection_KGC_EnemyGuide
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Scene_EnemyGuide
#------------------------------------------------------------------------------
# モンスター図鑑画面の処理を行うクラスです。
#==============================================================================
class Scene_EnemyGuide < Scene_Base
HOST_MENU = 0
HOST_MAP = 1
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# menu_index : コマンドのカーソル初期位置
# host_scene : 呼び出し元 (0..メニュー 1..マップ)
#--------------------------------------------------------------------------
def initialize(menu_index = 0, host_scene = HOST_MENU)
@menu_index = menu_index
@host_scene = host_scene
end
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_menu_background
if KGC::EnemyGuide::USE_BACKGROUND_IMAGE
@back_sprite = Sprite.new
begin
@back_sprite.bitmap = Cache.system(KGC::EnemyGuide::BACKGROUND_FILENAME)
rescue
@back_sprite.bitmap = Bitmap.new(32, 32)
end
end
@top_window = Window_EnemyGuideTop.new
@enemy_window = Window_EnemyGuideList.new
@status_window = Window_EnemyGuideStatus.new
@status_window.enemy = @enemy_window.item
end
#--------------------------------------------------------------------------
# ● 終了処理
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
if @back_sprite != nil
@back_sprite.bitmap.dispose
@back_sprite.dispose
end
@top_window.dispose
@enemy_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# ○ 元の画面へ戻る
#--------------------------------------------------------------------------
def return_scene
case @host_scene
when HOST_MENU
$scene = Scene_Menu.new(@menu_index)
when HOST_MAP
$scene = Scene_Map.new
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
update_menu_background
@top_window.update
@enemy_window.update
@status_window.update
if @enemy_window.active
update_enemy_selection
end
end
#--------------------------------------------------------------------------
# ○ エネミー選択の更新
#--------------------------------------------------------------------------
def update_enemy_selection
if @last_index != @enemy_window.index
@status_window.enemy = @enemy_window.item
@last_index = @enemy_window.index
end
if Input.trigger?(Input::B)
Sound.play_cancel
return_scene
elsif Input.trigger?(Input::A) || Input.trigger?(Input::C)
# スプライト表示切替
Sound.play_decision
@status_window.switch_sprite
elsif Input.trigger?(Input::LEFT)
# 左ページ
Sound.play_cursor
@status_window.shift_info_type(-1)
elsif Input.trigger?(Input::RIGHT)
# 右ページ
Sound.play_cursor
@status_window.shift_info_type(1)
end
end
end
Социальные закладки