class Game_Party
#--------------------------------------------------------------------------
# ● 全滅判定
#--------------------------------------------------------------------------
def all_dead?
# パーティ人数が 0 人の場合
if $game_party.actors.size == 0
return false
end
# HP 0 以上のアクターがパーティにいる場合
for actor in @actors
if actor.hp > 0 or actor.damage.size > 0
return false
end
end
# 全滅
return true
end
end
class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
# バトラーが nil の場合
if @battler == nil
self.bitmap = nil
loop_animation(nil)
return
end
# ファイル名か色相が現在のものと異なる場合
if @battler.battler_name != @battler_name or
@battler.battler_hue != @battler_hue
# ビットマップを取得、設定
@battler_name = @battler.battler_name
@battler_hue = @battler.battler_hue
self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
@width = bitmap.width
@height = bitmap.height
self.ox = @width / 2
self.oy = @height
if @battler.is_a?(Game_Enemy)
@battler.height = @height
end
# 戦闘不能または隠れ状態なら不透明度を 0 にする
if @battler.dead? or @battler.hidden
self.opacity = 0
end
end
# アニメーション ID が現在のものと異なる場合
if @battler.state_animation_id != @state_animation_id
@state_animation_id = @battler.state_animation_id
loop_animation($data_animations[@state_animation_id])
end
# 表示されるべきアクターの場合
if @battler.is_a?(Game_Actor) and @battler_visible
# メインフェーズでないときは不透明度をやや下げる
if $game_temp.battle_main_phase
self.opacity += 3 if self.opacity < 255
else
self.opacity -= 3 if self.opacity > 207
end
end
# 明滅
if @battler.blink
blink_on
else
blink_off
end
# 不可視の場合
unless @battler_visible
# 出現
if not @battler.hidden and not @battler.dead? and
(@battler.damage.size < 2 or @battler.damage_pop.size < 2)
appear
@battler_visible = true
end
end
# ダメージ
for battler in @battler.damage_pop
if battler[0].class == Array
if battler[0][1] >= 0
$scene.skill_se
else
$scene.levelup_se
end
damage(@battler.damage[battler[0]], false, 2)
else
damage(@battler.damage[battler[0]], @battler.critical[battler[0]])
end
if @battler.damage_sp.include?(battler[0])
damage(@battler.damage_sp[battler[0]],
@battler.critical[battler[0]], 1)
@battler.damage_sp.delete(battler[0])
end
@battler.damage_pop.delete(battler[0])
@battler.damage.delete(battler[0])
@battler.critical.delete(battler[0])
end
# 可視の場合
if @battler_visible
# 逃走
if @battler.hidden
$game_system.se_play($data_system.escape_se)
escape
@battler_visible = false
end
# 白フラッシュ
if @battler.white_flash
whiten
@battler.white_flash = false
end
# アニメーション
unless @battler.animation.empty?
for animation in @battler.animation.reverse
animation($data_animations[animation[0]], animation[1])
@battler.animation.delete(animation)
end
end
# コラプス
if @battler.damage.empty? and @battler.dead?
if $scene.dead_ok?(@battler)
if @battler.is_a?(Game_Enemy)
$game_system.se_play($data_system.enemy_collapse_se)
else
$game_system.se_play($data_system.actor_collapse_se)
end
collapse
@battler_visible = false
end
end
end
# スプライトの座標を設定
self.x = @battler.screen_x
self.y = @battler.screen_y
self.z = @battler.screen_z
if @battler.is_a?(Game_Enemy)
self.zoom_x = @battler.real_zoom * @battler.zoom
self.zoom_y = @battler.real_zoom * @battler.zoom
end
end
end
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
x = (4 - $game_party.actors.size) * 80
width = $game_party.actors.size * 160
super(x, 320, width, 160)
self.back_opacity = 160
@actor_window = []
for i in 0...$game_party.actors.size
@actor_window.push(Window_ActorStatus.new(i, x + i * 160))
end
@level_up_flags = [false, false, false, false]
refresh
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
def dispose
for window in @actor_window
window.dispose
end
super
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh(number = 0)
if number == 0
cnt = 0
for window in @actor_window
window.refresh(@level_up_flags[cnt])
cnt += 1
end
else
@actor_window[number - 1].refresh(@level_up_flags[number - 1])
end
end
#--------------------------------------------------------------------------
# ● ATゲージリフレッシュ
#--------------------------------------------------------------------------
def at_refresh(number = 0)
if number == 0
for window in @actor_window
window.at_refresh
end
else
@actor_window[number - 1].at_refresh
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
if self.x != (4 - $game_party.actors.size) * 80
self.x = (4 - $game_party.actors.size) * 80
self.width = $game_party.actors.size * 160
for window in @actor_window
window.dispose
end
@actor_window = []
for i in 0...$game_party.actors.size
@actor_window.push(Window_ActorStatus.new(i, x + i * 160))
end
refresh
end
for window in @actor_window
window.update
end
end
end
class Window_ActorStatus < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(id, x)
@actor_num = id
super(x, 320, 160, 160)
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
self.back_opacity = 0
actor = $game_party.actors[@actor_num]
@actor_nm = actor.name
@actor_mhp = actor.maxhp
@actor_msp = actor.maxsp
@actor_hp = actor.hp
@actor_sp = actor.sp
@actor_st = make_battler_state_text(actor, 120, true)
@status_window = []
for i in 0...5
@status_window.push(Window_DetailsStatus.new(actor, i, x))
end
refresh(false)
end 作者: uijk777 时间: 2008-7-13 00:48
#--------------------------------------------------------------------------
# ● ATゲージリフレッシュ
#--------------------------------------------------------------------------
def at_refresh(number = 0)
if number == 0
for window in @actor_window
window.at_refresh
end
else
@actor_window[number - 1].at_refresh
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
if self.x != (4 - $game_party.actors.size) * 80
self.x = (4 - $game_party.actors.size) * 80
self.width = $game_party.actors.size * 160
for window in @actor_window
window.dispose
end
@actor_window = []
for i in 0...$game_party.actors.size
@actor_window.push(Window_ActorStatus.new(i, x + i * 160))
end
refresh
end
for window in @actor_window
window.update
end
end
end
class Interpreter
#--------------------------------------------------------------------------
# ● アクターの入れ替え
#--------------------------------------------------------------------------
def command_129
# アクターを取得
actor = $game_actors[@parameters[0]]
# アクターが有効の場合
if actor != nil
# 操作で分岐
if @parameters[1] == 0
if @parameters[2] == 1
$game_actors[@parameters[0]].setup(@parameters[0])
end
$game_party.add_actor(@parameters[0])
if $game_temp.in_battle
$game_actors[@parameters[0]].at = 0
$game_actors[@parameters[0]].atp = 0
$scene.spell_reset($game_actors[@parameters[0]])
$game_actors[@parameters[0]].damage_pop = {}
$game_actors[@parameters[0]].damage = {}
$game_actors[@parameters[0]].damage_sp = {}
$game_actors[@parameters[0]].critical = {}
$game_actors[@parameters[0]].recover_hp = {}
$game_actors[@parameters[0]].recover_sp = {}
$game_actors[@parameters[0]].state_p = {}
$game_actors[@parameters[0]].state_m = {}
$game_actors[@parameters[0]].animation = []
end
else
$game_party.remove_actor(@parameters[0])
end
end
if $game_temp.in_battle
$scene.status_window.update
end
# 継続
return true
end
#--------------------------------------------------------------------------
# ● HP の増減
#--------------------------------------------------------------------------
alias :command_311_rtab :command_311
def command_311
command_311_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● SP の増減
#--------------------------------------------------------------------------
alias :command_312_rtab :command_312
def command_312
command_312_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● ステートの変更
#--------------------------------------------------------------------------
alias :command_313_rtab :command_313
def command_313
command_313_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● 全回復
#--------------------------------------------------------------------------
alias :command_314_rtab :command_314
def command_314
command_314_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● EXP の増減
#--------------------------------------------------------------------------
alias :command_315_rtab :command_315
def command_315
command_315_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● レベルの増減
#--------------------------------------------------------------------------
alias :command_316_rtab :command_316
def command_316
command_316_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● パラメータの増減
#--------------------------------------------------------------------------
alias :command_317_rtab :command_317
def command_317
command_317_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● 装備の変更
#--------------------------------------------------------------------------
alias :command_319_rtab :command_319
def command_319
command_319_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● アクターの名前変更
#--------------------------------------------------------------------------
alias :command_320_rtab :command_320
def command_320
command_320_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● アクターのクラス変更
#--------------------------------------------------------------------------
alias :command_321_rtab :command_321
def command_321
command_321_rtab
if $game_temp.in_battle
$scene.status_window.refresh
end
end
#--------------------------------------------------------------------------
# ● アニメーションの表示
#--------------------------------------------------------------------------
def command_337
# イテレータで処理
iterate_battler(@parameters[0], @parameters[1]) do |battler|
# バトラーが存在する場合
if battler.exist?
# アニメーション ID を設定
battler.animation.push([@parameters[2], true])
end
end
# 継続
return true
end
#--------------------------------------------------------------------------
# ● ダメージの処理
#--------------------------------------------------------------------------
def command_338
# 操作する値を取得
value = operate_value(0, @parameters[2], @parameters[3])
# イテレータで処理
iterate_battler(@parameters[0], @parameters[1]) do |battler|
# バトラーが存在する場合
if battler.exist?
# HP を変更
battler.hp -= value
# 戦闘中なら
if $game_temp.in_battle
# ダメージを設定
battler.damage["event"] = value
battler.damage_pop["event"] = true
end
end
end
if $game_temp.in_battle
$scene.status_window.refresh
end
# 継続
return true
end
#--------------------------------------------------------------------------
# ● アクションの強制
#--------------------------------------------------------------------------
def command_339
# 戦闘中でなければ無視
unless $game_temp.in_battle
return true
end
# ターン数が 0 なら無視
if $game_temp.battle_turn == 0
return true
end
# イテレータで処理 (便宜的なもので、複数になることはない)
iterate_battler(@parameters[0], @parameters[1]) do |battler|
# バトラーが存在する場合
if battler.exist?
# アクションを設定
battler.current_action.force_kind = @parameters[2]
if battler.current_action.force_kind == 0
battler.current_action.force_basic = @parameters[3]
else
battler.current_action.force_skill_id = @parameters[3]
end
# 行動対象を設定
if @parameters[4] == -2
if battler.is_a?(Game_Enemy)
battler.current_action.decide_last_target_for_enemy
else
battler.current_action.decide_last_target_for_actor
end
elsif @parameters[4] == -1
if battler.is_a?(Game_Enemy)
battler.current_action.decide_random_target_for_enemy
else
battler.current_action.decide_random_target_for_actor
end
elsif @parameters[4] >= 0
battler.current_action.target_index = @parameters[4]
end
# アクションが有効かつ [すぐに実行] の場合
if battler.current_action.valid? and @parameters[5] == 1
# 強制対象のバトラーを設定
$game_temp.forcing_battler = battler
# インデックスを進める
@index += 1
# 終了
return false
elsif battler.current_action.valid? and @parameters[5] == 0
battler.current_action.forcing = true
end
end
end
# 継続
return true
end
end