All pastes #34750 Raw Edit

Unnamed

public ruby v1 · immutable
#34750 ·published 2005-12-23 22:39 UTC
rendered paste body
#==============================================================================# ** Sprite_Battler#------------------------------------------------------------------------------#  Minkoff's Custom Battle System // Thanks, Prexus#==============================================================================# Sick/Low HP Poses# Different Skill Poses# Ranged StallingRANGED_IDS = [1, 2, 3]  # Fill with the WeaponIDs of ranged weaponsLOW_HP_PERCENTAGE = 0.2 # Make sure its a float, 1.0 = 100$, 0.2 = 20% etc.STATE_IDS = [2, 3]      # Fill this with the State IDs of any states you want to                        # make the sprite look sickly.class Sprite_Battler < RPG::Sprite  #--------------------------------------------------------------------------  # * Initialize  #--------------------------------------------------------------------------  alias cbs_initialize initialize  def initialize(viewport, battler = nil)    @frame = 0    @pose = 0    @default = 0    @speed = 7    @frames = 4    @poses = 13 # Make sure this is 12+the amount of skills in your database    @last_time = 0    @last_move_time = 0    @stationary_enemies = false    @stationary_actors = false    @phasing = true    cbs_initialize(viewport, battler)    viewport.z = 99  end  #--------------------------------------------------------------------------  # * Update  #--------------------------------------------------------------------------  alias cbs_update update  def update    return unless @battler    # Regular Update    cbs_update    # Start Routine    unless @started      @width = @width / @frames      @height = @height / @poses      @battler.display_x = @battler.screen_x      @battler.display_y = @battler.screen_y    end    # Setup Sprite    self.src_rect.set(@width * @frame, @height * @pose, @width, @height)    self.mirror = @battler.is_a?(Game_Enemy) unless @started    # Position Sprite    self.x = @battler.display_x    self.y = @battler.display_y    self.z = @battler.display_y    self.ox = @width / 2    self.oy = @height    # Setup Animation    time = Graphics.frame_count / (Graphics.frame_rate / @speed)    if @last_time < time      @frame = (@frame + 1) % @frames      if @frame == 0        if @freeze          @frame = @frames - 1          return        end        @pose = @default      end    end    @last_time = time    # Set Default Pose    if @battler.default      @default = @battler.default      @pose = @battler.default unless @battler.pose      @battler.default = nil    end    # Set Pose    if @battler.pose      @pose = @battler.pose      @freeze = @battler.freeze      @battler.pose = nil      @battler.freeze = nil      @frame = 0    end    # Update Status    @default = 10 if @battler.hp < (@battler.maxhp*LOW_HP_PERCENTAGE) and !@battler.dead?    for i in @battler.states      @default = 11 if STATE_IDS.include?(i)    end        # Move It    if @battler.is_a?(Game_Actor)      @battler.moving = false if RANGED_IDS.include?(@battler.weapon_id)      move if @battler.moving    else      move if @battler.moving    end    # Finish Up    @started = true  end  #--------------------------------------------------------------------------  # * Move  #--------------------------------------------------------------------------  def move    # Stationary Battlers    if (@battler.is_a?(Game_Enemy) and @stationary_enemies) or       (@battler.is_a?(Game_Actor) and @stationary_actors)      battler.moving = false      return    end    time = Graphics.frame_count / (Graphics.frame_rate.to_f / (@speed * 5))    if @last_move_time < time      # Pause to Attack      return unless [@default, 5, 4].include?(@pose)      # Set Running Pose      @pose = @attacked ? 5 : 4      # Phasing      d1 = (@battler.display_x - @battler.original_x).abs      d2 = (@battler.display_y - @battler.original_y).abs      d3 = (@battler.display_x - @battler.destination_x).abs      d4 = (@battler.display_y - @battler.destination_y).abs      self.opacity = [255 - ([d1 + d2, d3 + d4].min * 2.5).to_i, 0].max if @phasing      # Calculate Difference      difference_x = (@battler.display_x - @battler.destination_x).abs      difference_y = (@battler.display_y - @battler.destination_y).abs      # Move Back      if [difference_x, difference_y].max.between?(0, 5) and !@attacked        @battler.destination_x = @battler.original_x        @battler.destination_y = @battler.original_y        @battler.original_x = @battler.display_x        @battler.original_y = @battler.display_y        @battler.moving = false        @attacked = true        @pose = @default        return      end      # Done? Reset, Stop      if [difference_x, difference_y].max.between?(0, 5)        @battler.moving = false        @attacked = false        @pose = @default        return      end      # Movement Patterns      if difference_x > difference_y        increment_x = 1        increment_y = difference_y <= 2 ? difference_y / 8 : 1 / (difference_x / difference_y) + 0.5      elsif difference_y > difference_x        increment_y = 1        increment_x = difference_x <= 2 ? difference_x / 8 : 1 / (difference_y / difference_x) + 0.5      else        increment_x = 1        increment_y = 1      end      incriment_x = (increment_x * 8).to_i      incriment_y = (increment_y * 8).to_i      @battler.display_x += incriment_x * (@battler.destination_x - @battler.display_x > 0 ? 1 : -1)      @battler.display_y += incriment_y * (@battler.destination_y - @battler.display_y > 0 ? 1 : -1)    end        @last_move_time = time  end  def collapse    @default = 2  endend#==============================================================================# ** Game_Battler#==============================================================================class Game_Battler  #--------------------------------------------------------------------------  # * Animation Variables  #--------------------------------------------------------------------------  attr_accessor :moving # Moving?  attr_accessor :display_x # Current X  attr_accessor :display_y # Current Y  attr_accessor :original_x # Original X  attr_accessor :original_y # Orginal Y  attr_accessor :destination_x # Destination X  attr_accessor :destination_y # Destination Y  attr_accessor :pose # Sprite Pose  attr_accessor :freeze # Freeze Sprite?  attr_accessor :default # Default Pose  attr_accessor :moved # Moved?  attr_accessor :cast # Cast?  #--------------------------------------------------------------------------  # * Set Movement  #--------------------------------------------------------------------------  def setmove(original_x, original_y, destination_x, destination_y)    @original_x = original_x    @original_y = original_y    @destination_x = destination_x + (self.is_a?(Game_Actor) ? 40 : -40)    @destination_y = destination_y    @moving = true  end  #--------------------------------------------------------------------------  # * Set Pose  #--------------------------------------------------------------------------  def setpose(pose, freeze = false)    @pose = pose    @freeze = freeze  end  #--------------------------------------------------------------------------  # * Set Default Pose  #--------------------------------------------------------------------------  def setdefault(default)    @default = default  endend#==============================================================================# ** Game_Actor#==============================================================================class Game_Actor  #--------------------------------------------------------------------------  # * Actor X Coordinate  #--------------------------------------------------------------------------  def screen_x    if self.index != nil      return self.index * 45 + 450    else      return 0    end  end  #--------------------------------------------------------------------------  # * Actor Y Coordinate  #--------------------------------------------------------------------------  def screen_y    return self.index * 35 + 200  end  #--------------------------------------------------------------------------  # * Actor Z Coordinate  #--------------------------------------------------------------------------  def screen_z    return screen_y  endend#==============================================================================# ** Scene_Battle#==============================================================================class Scene_Battle  #--------------------------------------------------------------------------  # * Change Arrow Viewport  #--------------------------------------------------------------------------  alias cbs_start_enemy_select start_enemy_select  def start_enemy_select    cbs_start_enemy_select    @enemy_arrow.dispose    @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport2)  end  #--------------------------------------------------------------------------  # * Action Animation, Movement  #--------------------------------------------------------------------------  alias cbs_update_phase4_step3 update_phase4_step3  def update_phase4_step3(battler)    return if battler.moving    battler.setdefault(0)    case battler.current_action.kind    when 0 # Basic      if battler.moved        battler.setpose(6 + rand(2))      elsif battler.guarding?        battler.setdefault(3)      else        for target in battler.target          battler.setmove(battler.screen_x, battler.screen_y, target.screen_x, target.screen_y)        end        battler.moved = true        return      end    when 1 # Skill      battler.setpose(11+battler.current_action.skill_id)      for target in battler.target        battler.cast = (battler.is_a?(Game_Actor) == target.is_a?(Game_Enemy))      end    when 2 # Item      battler.setpose(8)    end    cbs_update_phase4_step3(battler)  end  #--------------------------------------------------------------------------  # * Hit Animation, Reset  #--------------------------------------------------------------------------  alias cbs_update_phase4_step4 update_phase4_step4  def update_phase4_step4(battler)    for target in battler.target      target.setpose(1) if (battler.moved or battler.cast) and target.damage != "Miss"    end    if battler.moved      battler.moving = true    end    battler.moved = false    battler.cast = false    cbs_update_phase4_step4(battler)  end  #--------------------------------------------------------------------------  # * Victory Animation  #--------------------------------------------------------------------------  alias cbs_start_phase5 start_phase5  def start_phase5    for actor in $game_party.actors      return if actor.moving    end    for actor in $game_party.actors      actor.setpose(9, true) unless actor.dead?    end    cbs_start_phase5  endend#==============================================================================# ** Spriteset_Battle#==============================================================================class Spriteset_Battle  #--------------------------------------------------------------------------  # * Change Enemy Viewport  #--------------------------------------------------------------------------  alias cbs_initialize initialize  def initialize    cbs_initialize    @enemy_sprites = []    for enemy in $game_troop.enemies.reverse      @enemy_sprites.push(Sprite_Battler.new(@viewport2, enemy))    end  endend#==============================================================================# ** Arrow_Base#==============================================================================class Arrow_Base < Sprite  #--------------------------------------------------------------------------  # * Reposition Arrows  #--------------------------------------------------------------------------  alias cbs_initialize initialize  def initialize(viewport)    cbs_initialize(viewport)    self.ox = 32    self.oy = 40  endend