if @active_battler.restriction == 3
target = $game_troop.random_target_enemy
elsif @active_battler.restriction == 2
target = $game_party.random_target_actor
else
index = @active_battler.current_action.target_index
target = $game_party.smooth_target_actor(index)
end
end
# 行动方的战斗者是角色的情况下
if @active_battler.is_a?(Game_Actor)
if @active_battler.restriction == 3
target = $game_party.random_target_actor
elsif @active_battler.restriction == 2
#这个时候的 index 是 -1
target = $game_troop.random_target_enemy
#====◆ 1 ==========================================================
a = target.index + 6
$scene.spriteset.flan_jud(a)
# 角色普通攻击,对随机,的敌人 ID
#==== =============================================================
else
index = @active_battler.current_action.target_index
target = $game_troop.smooth_target_enemy(index)
#====◆ 2 ==========================================================
a = index + 6
$scene.spriteset.flan_jud(a)
# 角色普通攻击,对选择,的敌人 ID
#==== =============================================================
end
end
# 设置对像方的战斗者序列
@target_battlers = [target]
# 应用通常攻击效果
for target in @target_battlers
target.attack_effect(@active_battler)
end
return
end
# 防御的情况下
if @active_battler.current_action.basic == 1
#====◆ 3 ==========================================================
# 区分敌人和角色,角色 ID
if @active_battler.is_a?(Game_Actor)
# 行动方的 ID,角色 0,1,2,3 敌人 0,1,2...
a = @active_battler.index
$scene.spriteset.flan_jud(a)
end
#==== =============================================================
# 帮助窗口显示"防御"
@help_window.set_text($data_system.words.guard, 1)
return
end
# 逃跑的情况下
if @active_battler.is_a?(Game_Enemy) and
@active_battler.current_action.basic == 2
a = @active_battler.index + 6
$scene.spriteset.flan_jud(a)
# 使用技能对角色全体,的敌人 ID
#==== =============================================================
for actor in $game_party.actors
if actor.exist?
@target_battlers.push(actor)
end
end
when 3 # 我方单体
index = @active_battler.current_action.target_index
@target_battlers.push($game_troop.smooth_target_enemy(index))
when 4 # 我方全体
for enemy in $game_troop.enemies
if enemy.exist?
@target_battlers.push(enemy)
end
end
when 5 # 我方单体 (HP 0)
index = @active_battler.current_action.target_index
enemy = $game_troop.enemies[index]
if enemy != nil and enemy.hp0?
@target_battlers.push(enemy)
end
when 6 # 我方全体 (HP 0)
for enemy in $game_troop.enemies
if enemy != nil and enemy.hp0?
@target_battlers.push(enemy)
end
end
when 7 # 使用者
@target_battlers.push(@active_battler)
end
end
# 行动方的战斗者是角色的情况下
if @active_battler.is_a?(Game_Actor)
# 效果范围分支
case scope
when 1 # 敌单体
index = @active_battler.current_action.target_index
@target_battlers.push($game_troop.smooth_target_enemy(index))
#====◆ 5 ==========================================================
a = index + 6
$scene.spriteset.flan_jud(a)
# 角色使用技能或物品,对敌方单体,目标敌人 ID
#==== =============================================================
for enemy in $game_troop.enemies
if enemy.exist?
@target_battlers.push(enemy)
end
end
when 3 # 我方单体
index = @active_battler.current_action.target_index
@target_battlers.push($game_party.smooth_target_actor(index))
when 4 # 我方全体
for actor in $game_party.actors
if actor.exist?
@target_battlers.push(actor)
end
end
when 5 # 我方单体 (HP 0)
index = @active_battler.current_action.target_index
actor = $game_party.actors[index]
if actor != nil and actor.hp0?
@target_battlers.push(actor)
end
when 6 # 我方全体 (HP 0)
for actor in $game_party.actors
if actor != nil and actor.hp0?
@target_battlers.push(actor)
end
end
when 7 # 使用者
@target_battlers.push(@active_battler)
end
end
end
#====◆=============================================================
end
#==============================================================================
class Arrow_Enemy < Arrow_Base
def update
super
$game_troop.enemies.size.times do
break if self.enemy.exist? @Index += 1
@index %= $game_troop.enemies.size
end
if Input.repeat?(Input::RIGHT)
$game_system.se_play($data_system.cursor_se)
$game_troop.enemies.size.times do
@index += 1
@index %= $game_troop.enemies.size
break if self.enemy.exist?
end
#====◆=============================================================
a = @index + 6
$scene.spriteset.flan_jud(a)
# 这里任何操作,实际就是发出了信号
# 在这里可以知道现在选中的敌人,将信息传给战斗背景
#==== =============================================================
end
if Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
$game_troop.enemies.size.times do
@index += $game_troop.enemies.size - 1
@index %= $game_troop.enemies.size
break if self.enemy.exist?
end
#====◆=============================================================
a = @index + 6
$scene.spriteset.flan_jud(a)
#==== =============================================================
end
if self.enemy != nil
self.x = self.enemy.screen_x
self.y = self.enemy.screen_y
end
end
end
#==============================================================================
#==============================================================================
class Win_Test < Window_Base
@battleback_sprite = Sprite.new(@viewport1)
@enemy_sprites = []
for enemy in $game_troop.enemies.reverse
@enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
end
@actor_sprites = []
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@actor_sprites.push(Sprite_Battler.new(@viewport2))
@weather = RPG::Weather.new(@viewport1)
@picture_sprites = []
for i in 51..100
@picture_sprites.push(Sprite_Picture.new(@viewport3,
$game_screen.pictures))
end
@timer_sprite = Sprite_Timer.new
update
end
def dispose
if @battleback_sprite.bitmap != nil
@battleback_sprite.bitmap.dispose
end
@battleback_sprite.dispose
for sprite in @enemy_sprites + @actor_sprites
sprite.dispose
end
@weather.dispose
for sprite in @picture_sprites
sprite.dispose
end
@timer_sprite.dispose
@win_tes.dispose ##
#==== =============================================================
e = $scene.flan_speed - @flan_energy + 1
#------------------
x = @t_x - @g_x
@field_x = @g_x + x * e**2 / $scene.flan_speed**2
y = @t_y - @g_y
@field_y = @g_y + y * e**2 / $scene.flan_speed**2
z = @t_zm - @g_zm # 从原先 →到目标
@field_zoom = @g_zm + z * e**2 / $scene.flan_speed**2
#------------------
@flan_energy -= 1
end
end
#---------------------------------------------------
end
#==============================================================================
#==============================================================================
class Sprite_Battler < RPG::Sprite
def update
super
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.dead? or @battler.hidden
self.opacity = 0
end
end
if @battler.damage == nil and
@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 == nil or @battler.damage_pop)
appear
@battler_visible = true
end
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
if @battler.animation_id != 0
animation = $data_animations[@battler.animation_id]
animation(animation, @battler.animation_hit)
@battler.animation_id = 0
end
if @battler.damage_pop
damage(@battler.damage, @battler.critical)
@battler.damage = nil
@battler.critical = false
@battler.damage_pop = false
end
if @battler.damage == nil and @battler.dead?
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
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.screen_zoom
self.zoom_y = @battler.screen_zoom
end
# ◇ ◆ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇ ◇
end
end
#==============================================================================
#==============================================================================
class Game_Enemy < Game_Battler
@hidden = troop.members[@member_index].hidden
@immortal = troop.members[@member_index].immortal
end
#---------------------------------------------------
# 设计,重新摆放阵型,罗列敌人队伍从 1只怪,到 8只怪
# 缩放产生透视,最小 0.25,最大 1.0,中等 0.5。
def screen_x
case @size
# - - - - - - - - #
when 1
return 320
# - - - - - - - - #
when 2
case @member_index
when 0
return 200
when 1
return 440
end
# - - - - - - - - #
when 3
case @member_index
when 0
return 200
when 1
return 320
when 2
return 440
end
# - - - - - - - - #
when 5
case @member_index
when 0
return 160
when 1
return 240
when 2
return 320
when 3
return 400
when 4
return 480
end
else # 防止出现没设计过的
return $data_troops[@troop_id].members[@member_index].x
end
end
#---------------------------------------------------
def screen_y
case @size
# - - - - - - - - #
when 1,2
return 240
# - - - - - - - - #
when 3
case @member_index
when 0
return 240
when 1
return 200
when 2
return 240
end
# - - - - - - - - #
when 5
case @member_index
when 0
return 240
when 1
return 160
when 2
return 200
when 3
return 160
when 4
return 240
end
else
return $data_troops[@troop_id].members[@member_index].y
end
end
#---------------------------------------------------
def screen_zoom
case @size
# - - - - - - - - #
when 1,2
return 0.75
when 3
case @member_index
when 0
return 0.75
when 1
return 0.5
when 2
return 0.75
end
# - - - - - - - - #
when 5
case @member_index
when 0
return 0.75
when 1
return 0.25
when 2
return 0.5
when 3
return 0.25
when 4
return 0.75
end
else # 没设计的怪都是“最大”
return 0.75
end
end
#---------------------------------------------------
alias :or_x :screen_x # 给原始敌人的屏幕坐标起别名
alias :or_y :screen_y # 从此,or_x 才是数据库里的,不会被修改
alias :or_z :screen_zoom