#▽△▽ XRXSv9. BaST-VX.AB1. ホコグラ・サイドジャンプ! ▽△▽ # # publish 2010/ 4/ 7 # update - 11/ 1/ 5b # #============================================================================== # カスタマイズポイント #============================================================================== module XRXSV9 # # アクターの立ち位置[X,Y] # ABPositions = [ [384, 216], [400, 268], [432, 240], [448, 288], [480, 268], [0,0], [0,0], [0,0] ] # # ジャンプ/前進 境目距離単位 # (2にすると「一歩前へ」の時も跳ぶ。 # 数値を高くすると長い距離もジャンプせず走る。) # JumpLength = 3 # # 影画像(Graphics/System) # Shadow = "Shadow" # # 逃走演出(移動速度、時間) # ABEscapeSpeed = 8 ABEscapeDuration = 24 end class Game_Battler # # 遠距離攻撃?の判定式 #    装備武器のアイコンが以下の配列に含まれる場合、遠距離武器として、 #  (・通常攻撃なら、武器に準ずる #  ・スキルなら、「物理攻撃」がオフなら武器関係なく遠距離、 #                 オンなら武器に準ずる #   ・それ以外(アイテム)なら遠距離                  ) # def long_range_attack? weapon = self.weapons[0] long_range_weapon = (weapon != nil and [16,17,22,23,24,25].include?(weapon.icon_index)) if self.action.attack? return long_range_weapon elsif self.action.skill? return (!$data_skills[self.action.skill_id].physical_attack or long_range_weapon) end return true end end #============================================================================== # バトラーグラフィックへの対応 #============================================================================== class Game_Battler attr_accessor :pattern attr_accessor :direction attr_accessor :jumped_x_offset attr_accessor :jumped_y_offset end class Game_Actor < Game_Battler def screen_x return XRXSV9::ABPositions[self.index][0] + self.jumped_x_offset.to_i end def screen_y return XRXSV9::ABPositions[self.index][1] + self.jumped_y_offset.to_i end def in_floor? return true end def battler_initialize super self.pattern = 1 self.direction = 4 end end #============================================================================== # アクター向きの初期化 #============================================================================== class Scene_Battle < Scene_Base def actor_battler_initialize for actor in $game_party.members actor.battler_initialize end end end #============================================================================== # アクターバトラースプライト #============================================================================== class Sprite_ActorBattler < Sprite_Battler #-------------------------------------------------------------------------- # ▼ 転送元ビットマップの更新 #-------------------------------------------------------------------------- def update_battler_bitmap update_bitmap update_src_rect update_damageshake update_battler_xcam update_jumping end #-------------------------------------------------------------------------- # 転送元ビットマップの更新 #-------------------------------------------------------------------------- def update_bitmap if @battler_name != @battler.character_name @battler_name = @battler.character_name self.bitmap = Cache.character(@battler_name) sign = @battler_name[/^[\!\$]./] b = (sign != nil and sign.include?('$')) @cw = bitmap.width / (b ? 3 : 12) @ch = bitmap.height / (b ? 4 : 8) self.ox = @cw / 2 self.oy = @ch end end #-------------------------------------------------------------------------- # 転送元矩形の更新 #-------------------------------------------------------------------------- def update_src_rect d = @battler.direction case $game_temp.xcam.direction_angle when 4 d = [6, 2, 8, 4][d / 2 - 1] when 6 d = [4, 8, 2, 6][d / 2 - 1] when 8 d = [8, 4, 6, 2][d / 2 - 1] end # index = @battler.character_index pattern = @battler.pattern < 3 ? @battler.pattern : 1 sx = (index % 4 * 3 + pattern) * @cw sy = (index / 4 * 4 + (d - 2) / 2) * @ch self.src_rect.set(sx, sy, @cw, @ch) end end #============================================================================== # バトル中のカメラ挙動指定 #============================================================================== class Scene_Battle < Scene_Base def xcam_animation_start(targets) $game_temp.xcam.watch(@active_battler, targets) $game_temp.xcam.set_horize(@active_battler, targets) wait(8) end def xcam_win $game_temp.xcam.go_reset $game_temp.xcam.watch(nil, $game_party.members) end end #============================================================================== # バトルジャンプ設定 #============================================================================== class Game_Battler attr_accessor :battlejump_go attr_accessor :battlejump_go_back attr_accessor :battlejump_go_escape attr_accessor :battlejumping attr_accessor :battlejump_x attr_accessor :battlejump_y end class Scene_Battle < Scene_Base def wait_for_jump(battlers = self.members) loop do jumping = false for battler in battlers jumping |= battler.battlejumping end break unless jumping update_basic end end def battlejump_back wait_for_jump for battler in self.members battler.battlejump_back end wait_for_jump end def battlejump_for_targets(targets) wait_for_jump for battler in self.members - targets - [@active_battler] battler.battlejump_back end @active_battler.battlejump_to_targets(targets) wait_for_jump end def battlejump_escape battlejump_back for actor in $game_party.members actor.battlejump_escape end wait_for_jump end def battlejump_action_end wait_for_jump([@active_battler]) @active_battler.battlejump_backstep end alias xrxsv9ab5_display_miss display_miss def display_miss(target, obj = nil) wait_for_jump([target]) if obj == nil or obj.physical_attack target.battlejump_backstep end xrxsv9ab5_display_miss(target, obj) end end #============================================================================== # バトルジャンプ機能 #============================================================================== class Sprite_ActorBattler < Sprite_Battler def update_jumping @jumped_x_offset = 0 unless @jumped_x_offset @jumped_y_offset = 0 unless @jumped_y_offset mirror_on = false if @jump_duration == nil and @battler.battlejumping @jump_x_speed = 0 @jump_y_speed = 0 if @battler.battlejump_go @jump_x_speed = @battler.battlejump_x / 16 @jump_y_speed = @battler.battlejump_y / 16 @battler.battlejump_go = false end if @battler.battlejump_go_back @jump_x_speed = -1 * @jumped_x_offset / 16 @jump_y_speed = -1 * @jumped_y_offset / 16 @battler.battlejump_go_back = false end if (@jump_x_speed == 0 and @jump_y_speed == 0) and not @battler.battlejump_go_escape @jump_duration = nil @battler.battlejumping = false else if @battler.battlejump_go_escape @jump_x_speed = XRXSV9::ABEscapeSpeed @battler.battlejump_go_escape = false @jump_duration = XRXSV9::ABEscapeDuration jump_mode = false mirror_on = true else jump_mode = (@jump_y_speed != 0) jump_mode |= (@jump_x_speed.to_i.abs >= XRXSV9::JumpLength) @jump_duration = 16 end if jump_mode @jump_shadow_sprite = Sprite_Base.new(self.viewport) @jump_shadow_sprite.bitmap = Cache.system(XRXSV9::Shadow) @jump_shadow_sprite.ox = @jump_shadow_sprite.bitmap.width / 2 @jump_shadow_sprite.oy = @jump_shadow_sprite.bitmap.height @jump_shadow_sprite.z = self.z - 1 end end end if @battler.battlejumping @jumped_x_offset += @jump_x_speed @jumped_y_offset += @jump_y_speed @jump_duration -= 1 if @jump_duration <= 0 @jump_duration = nil @battler.battlejumping = false @battler.battlermotion_reset @jump_shadow_sprite.dispose if @jump_shadow_sprite @jump_shadow_sprite = nil end end @battler.jumped_x_offset = @jumped_x_offset @battler.jumped_y_offset = @jumped_y_offset self.mirror = true if mirror_on if @jump_shadow_sprite @jump_shadow_sprite.x = self.x @jump_shadow_sprite.y = self.y self.y += ((@jump_duration - 8).abs - 8) * 2 if @jump_duration end end end #============================================================================== # バトルジャンプの実行 #============================================================================== class Game_Battler def battlejump_back end def battlejump_backstep end def battlejump_to_targets(targets) end end class Game_Actor < Game_Battler def battlejump_back return unless self.movable? if self.jumped_x_offset == 0 and self.jumped_y_offset == 0 # else self.battlejump_go_back = true self.battlejumping = true end end def battlejump_escape return unless self.movable? self.battlejump_go_escape = true self.battlejumping = true end def battlejump_backstep return unless self.movable? if self.jumped_x_offset <= -48 battlejump_to(48, 0) elsif self.jumped_x_offset == -32 battlejump_to(32, 0) end end def battlejump_to_targets(targets) return unless self.movable? if self.action.for_friend? or self.long_range_attack? jump_x = -32 jump_y = 0 else jump_x = nil for target in targets if target.is_a?(Game_Enemy) sx = target.screen_x if jump_x == nil or jump_x < sx jump_x = sx jump_y = target.screen_y end end end if jump_x == nil jump_x = -32 jump_y = 0 else jump_x -= self.screen_x - 64 jump_y -= self.screen_y end end battlejump_to(jump_x, jump_y) for actor in $game_party.members - [self] if (self.screen_x + self.battlejump_x - actor.screen_x).abs <= 32 and (self.screen_y + self.battlejump_y - actor.screen_y).abs <= 24 and actor.movable? actor.battlejump_to(48, 0) end end end def battlejump_to(jump_x, jump_y) self.battlejump_x = jump_x self.battlejump_y = jump_y self.battlejump_go = true self.battlejumping = true end end