All pastes #55186 Raw Edit

Miscellany

public ruby v1 · immutable
#55186 ·published 2006-05-11 20:50 UTC
rendered paste body
#==============================================================================# ** Sprite_Battler#------------------------------------------------------------------------------#  Animated Battlers by Minkoff#==============================================================================class Sprite_Battler < RPG::Sprite  #--------------------------------------------------------------------------  # * Initialize  #--------------------------------------------------------------------------  alias cbs_initialize initialize  def initialize(viewport, battler = nil)    @speed = 7    @frames = 4    @poses = 11    @stationary_enemies = true    @stationary_actors = false    @calculate_speed = true    @phasing = true    @frame = 0    @pose = 0    @last_time = 0    @last_move_time = 0    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      @pose = state      @width = @width / @frames      @height = @height / @poses      @display_x = @battler.screen_x      @display_y = @battler.screen_y      @destination_x = @display_x      @destination_y = @display_y      @started = true    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 = @display_x    self.y = @display_y    self.z = @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 = state      end    end    @last_time = time    # Move It    move if moving  end  #--------------------------------------------------------------------------  # * Current State  #--------------------------------------------------------------------------  def state    # Damage State    if [nil,{}].include?(@battler.damage)      # Battler Fine      @state = 0      # Battler Wounded      @state = 2 if @battler.hp < @battler.maxhp / 4      # Battler Dead      if @battler.dead?        @state = 10        # Fix Opacity        self.opacity = 255      end    end    # Guarding State    @state = 3 if @battler.guarding?    # Moving State    if moving      # Battler Moving Left      @state = 4 if moving.eql?(0)      # Battler Moving Right      @state = 5 if moving.eql?(1)    end    # Return State    return @state  end  #--------------------------------------------------------------------------  # * Move  #--------------------------------------------------------------------------  def move    time = Graphics.frame_count / (Graphics.frame_rate.to_f / (@speed * 5))    if @last_move_time < time      # Pause for Animation      return if @pose != state      # Phasing      if @phasing        d1 = (@display_x - @original_x).abs        d2 = (@display_y - @original_y).abs        d3 = (@display_x - @destination_x).abs        d4 = (@display_y - @destination_y).abs        self.opacity = [255 - ([d1 + d2, d3 + d4].min * 1.75).to_i, 0].max      end      # Calculate Difference      difference_x = (@display_x - @destination_x).abs      difference_y = (@display_y - @destination_y).abs      # Done? Reset, Stop      if [difference_x, difference_y].max.between?(0, 8)        @display_x = @destination_x        @display_y = @destination_y        @pose = state        return      end      # Calculate Movement Increments      increment_x = increment_y = 1      if difference_x < difference_y        increment_x = 1.0 / (difference_y.to_f / difference_x)      elsif difference_y < difference_x        increment_y = 1.0 / (difference_x.to_f / difference_y)      end            # Calculate Movement Speed      if @calculate_speed        total = 0; $game_party.actors.each{ |actor| total += actor.agi }        speed = @battler.agi.to_f / (total / $game_party.actors.size)        speed = (1.0 / 8) if @battler.is_a?(Game_Actor)        increment_x *= speed        increment_y *= speed      end            # Multiply and Move      multiplier_x = (@destination_x - @display_x > 0 ? 8 : -8)      multiplier_y = (@destination_y - @display_y > 0 ? 8 : -8)      @display_x += (increment_x * multiplier_x).to_i      @display_y += (increment_y * multiplier_y).to_i    end    @last_move_time = time  end  #--------------------------------------------------------------------------  # * Set Movement  #--------------------------------------------------------------------------  def setmove(destination_x, destination_y)    unless (@battler.is_a?(Game_Enemy) and @stationary_enemies) or           (@battler.is_a?(Game_Actor) and @stationary_actors)      @original_x = @display_x      @original_y = @display_y      @destination_x = destination_x      @destination_y = destination_y    end  end  #--------------------------------------------------------------------------  # * Movement Check  #--------------------------------------------------------------------------  def moving    if (@display_x != @destination_x and @display_y != @destination_y and !@battler.dead?)      return (@display_x > @destination_x ? 0 : 1)    end  end  #--------------------------------------------------------------------------  # * Set Pose  #--------------------------------------------------------------------------  def pose=(pose)    @pose = pose    @frame = 0  end  #--------------------------------------------------------------------------  # * Freeze  #--------------------------------------------------------------------------  def freeze    @freeze = true  end  #--------------------------------------------------------------------------  # * Fallen Pose  #--------------------------------------------------------------------------  def collapse    return  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  #--------------------------------------------------------------------------  # * Action Animation, Movement  #--------------------------------------------------------------------------  alias cbs_update_phase4_step3 update_phase4_step3  def update_phase4_step3(battler = @active_battler)    @rtab = !@target_battlers    target = (@rtab ? battler.target : @target_battlers)[0]    @moved = {} unless @moved    return if @spriteset.battler(battler).moving    case battler.current_action.kind    when 0 # Attack      if not (@moved[battler] or battler.guarding?)        offset = (battler.is_a?(Game_Actor) ? 40 : -40)        @spriteset.battler(battler).setmove(target.screen_x + offset, target.screen_y)        @moved[battler] = true        return      elsif not battler.guarding?        @spriteset.battler(battler).pose = 6 + rand(2)        @spriteset.battler(battler).setmove(battler.screen_x, battler.screen_y)      end    when 1 # Skill      @spriteset.battler(battler).pose = 8    when 2 # Item      @spriteset.battler(battler).pose = 8    end    @moved[battler] = false    @rtab ? cbs_update_phase4_step3(battler) : cbs_update_phase4_step3  end  #--------------------------------------------------------------------------  # * Hit Animation  #--------------------------------------------------------------------------  alias cbs_update_phase4_step4 update_phase4_step4  def update_phase4_step4(battler = @active_battler)    for target in (@rtab ? battler.target : @target_battlers)      damage = (@rtab ? target.damage[battler] : target.damage)      if damage.is_a?(Numeric) and damage > 0        @spriteset.battler(target).pose = 1      end    end    @rtab ? cbs_update_phase4_step4(battler) : cbs_update_phase4_step4  end  #--------------------------------------------------------------------------  # * Victory Animation  #--------------------------------------------------------------------------  alias cbs_start_phase5 start_phase5  def start_phase5    for actor in $game_party.actors      return if @spriteset.battler(actor).moving    end    for actor in $game_party.actors      unless actor.dead?        @spriteset.battler(actor).pose = 9        @spriteset.battler(actor).freeze      end    end    cbs_start_phase5  end  #--------------------------------------------------------------------------  # * 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)    @enemy_arrow.help_window = @help_window  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  end  #--------------------------------------------------------------------------  # * Find Sprite From Battler Handle  #--------------------------------------------------------------------------  def battler(handle)    for sprite in @actor_sprites + @enemy_sprites      return sprite if sprite.battler == handle    end    return false  endend#==============================================================================# ** Arrow_Base#==============================================================================class Arrow_Base < Sprite  #--------------------------------------------------------------------------  # * Reposition Arrows  #--------------------------------------------------------------------------  alias cbs_initialize initialize  def initialize(viewport)    cbs_initialize(viewport)    self.ox = 14 # 32    self.oy = 10 # 40  endend