
使用方法:
☆使用方法基本与我之前发的朴素横版战斗相同
☆动画设置:
1、武器、特技、物品的施展动画直接在其备注填入动画id即可。如果为空即不显示施展动画。
2、敌人普通攻击动画,在其备注里填写格式如下:
a1=XX #施展动画id
a2=XX #对方动画id
如果为空即使用默认普通动画(画面震动).
☆战斗图设置:
3、角色战斗图的的命名方式是角色id后面加上_z,如1_z.存放在Battlers文件夹。
4、默认待机图为两帧,只要在Battlers文件夹里放一个“战斗图名+待“的文件,就会自动循环播放这两个战斗图,如1_b待,没有则没待机动作。
☆战斗背景设置:
5、在Graphics目录下新建Battlebacks文件夹。
6、战斗时先搜索文件夹内是否有与角色所在区域同名的战斗图,如果没有则搜索文件夹里是否存在与地图同名的图片。
7、简而言之,你须储存与你地图同名的战斗背景在Battlebacks,如果想在同一幅地图实现不同地域战斗背景不同,就在Battlebacks文件夹里储存与这个地域同名的战斗背景.至少保证战斗的地图
都有一幅该地图同名的战斗背景,不然战斗时会提示找不到地图.(可参考《拉尔夫战记》或朴素横版的范例)
☆CP条设置:
8、CP条:在system文件夹里储存一个命名为"cp条"的图片,默认长度为327,如果需要可在Scene_CP类里调整相关参数.
9、角色cp图命名方式是"角色id+_cp",如:1_cp,角色活跃cp图命名方式是"角色id+_a_cp",如1_a_cp,敌人cp图命名方式是"敌人名 + _敌人cp",如史莱姆_敌人cp,敌人活跃cp图是"敌人名+_a_cp".
亦可在system文件夹里储存名为"敌人cp"的图片,作为敌人的统一cp图,活跃图名为"a_敌人cp",默认如果找不到敌人相关cp图就直接用这张图片.
☆选择光标设置
10、在system文件夹里储存名为"光标"的图片作为选择光标.
范例工程:
http://bbs.66rpg.com/UP_PIC/200801/VX半即时范例1.02a_97952949.rar
已知bug:
1、人物在物品和特技选择己方对象时,头像重叠,这是由于忘了刷新的原因,解决方法是:
找到 def update_target_actor_selection 这个方法,在 @target_actor_window.draw_actorface这句上面加上一句@target_actor_window.refresh
2、连续伤害和自动回复hp无效...这个也不难解决,就是有点琐碎,因为要改一下伤害部分之类的.更新插件脚本如下:(直接插在原脚本之下就行了,顺便也更新了上一个bug.
3、受打击时,人物有跳出cp槽的可能,已解决
4、优化了窗口刷新和部分算法,速度有所提高。
5、复活时有些许bug,已修复。
6.头像刷新存在一点bug,已修复。
未完善:CP系统在配置低点的机子上运行速度缓慢,掉帧严重,这个暂时由于测试有障碍的原因,还有待优化完善
#=============================================================================
#★Zhong RMVX 半即时战斗系统1.01版更新插件脚本★
#---------------------------------------------------------------------------#★作者: Zhong_zw
#=============================================================================
class Game_Battler
attr_accessor :slip_damage
attr_accessor :auto_damage
def initialize
@cp = 0
@cp_total = false
@cp_turn = 0
@damage = nil
@damage_pop = false
@act_status = 0
@slip_damage = 0
@auto_damage = 0
@battler_name = ""
@battler_hue = 0
@hp = 0
@mp = 0
@action = Game_BattleAction.new(self)
@states = [] # 状态 (ID 顺序)
@state_turns = {} # 状态持续回合数 (散列)
@hidden = false
@immortal = false
clear_extra_values
clear_sprite_effects
clear_action_results
end
#--------------------------------------------------------------------------
# ● 应用连续伤害效果
#--------------------------------------------------------------------------
def slip_damage_effect
if slip_damage? and @hp > 0
@hp_damage = apply_variance(maxhp / 10, 10)
@hp_damage = @hp - 1 if @hp_damage >= @hp
@slip_damage = @hp_damage
self.hp -= @hp_damage
end
end
end #class
#======================================================
#★角色处理类
#======================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 执行自动回复 (回合结束时调用)
#--------------------------------------------------------------------------
def do_auto_recovery
if auto_hp_recover and not dead?
self.hp += maxhp / 20
@auto_damage = maxhp / 20
end
end
end #class
#==========================================================================
#★战斗类
#==========================================================================
class Scene_Battle < Scene_Base
def update_target_actor_selection
#=============================
@target_actor_window.refresh
#=============================
@target_actor_window.draw_actorface($game_party.members[@target_actor_window.index])
@target_actor_window.update
if Input.trigger?(Input::B)
Sound.play_cancel
end_target_actor_selection
elsif Input.trigger?(Input::C)
Sound.play_decision
@active_battler.action.target_index = @target_actor_window.index
end_target_actor_selection
end_skill_selection
end_item_selection
next_actor
@active_battler.cp = 0
end
end
def active_battler_update
#===================================
@actor_battler = []
@enemy_battler = []
#===================================
@cp_battle.update
#===============================================================
for battler in $game_party.members + $game_troop.members
if battler.cp_turn == battler.maxcp
battler.remove_states_auto unless battler.movable?
battler.slip_damage_effect
battler.do_auto_recovery if battler.is_a?(Game_Actor)
battler.damage_pop = 3 if battler.slip_damage != 0 or battler.auto_damage != 0
update_basic
battler.cp_turn = 0
end
#================================================================
if battler.cp == battler.maxcp
if battler.is_a?(Game_Actor)
@actor_battler.push(battler)
else
battler.make_action
@enemy_battler.push(battler)
battler.make_action
end
else
next
end
end
if @actor_battler.size != 0
@cp_battle.stop = true
next_actor
Audio.se_play("Audio/SE/Jump2",100,100)
elsif @enemy_battler.size != 0
#================
@cp_battle.stop = true
start_main
#================
end
end
end#class
#=================================================
#★战斗图处理的类
#=================================================
class Sprite_Battler < Sprite_Base
def setup_new_effect
if @battler.white_flash
@effect_type = WHITEN
@effect_duration = 16
@battler.white_flash = false
end
if @battler.blink
@effect_type = BLINK
@effect_duration = 20
@battler.blink = false
end
if not @battler_visible and @battler.exist?
@effect_type = APPEAR
@effect_duration = 16
@battler_visible = true
end
#=========================================================================
if @battler.damage_pop and not (@battler.collapse or @battler.hidden)
if @battler.damage != nil
s_1 = @battler.damage > 0 ? 0 : 1
@battler.damage = @battler.damage > 0 ? -@battler.damage : @battler.damage
end
damage(@battler.damage,@battler.critical,s_1) if @battler.damage != 0 and @battler.damage != nil
damage(@battler.hp_damage,@battler.critical,0) if @battler.hp_damage != 0
damage(@battler.mp_damage,@battler.critical,1) if @battler.mp_damage != 0
damage("失误",@battler.critical) if @battler.missed
damage("MISS",@battler.critical) if @battler.evaded
damage(@battler.slip_damage - @battler.auto_damage,@battler.critical) if @battler.slip_damage != 0 or @battler.auto_damage != 0
@battler.damage = nil
@battler.slip_damage = 0
@battler.auto_damage = 0
@battler.damage_pop = false
end
#=========================================================================
if @battler_visible and @battler.hidden
@effect_type = DISAPPEAR
@effect_duration = 32
@battler_visible = false
end
if @battler.collapse and self.opacity != 0
@effect_type = COLLAPSE
@effect_duration = 48
@battler.collapse = false
@battler_visible = false
end
if @battler.animation_id != 0
animation = $data_animations[@battler.animation_id]
mirror = @battler.animation_mirror
start_animation(animation, mirror)
@battler.animation_id = 0
end
end
end#class