I need some animation sprites

Started by rpgmakerfanhaha, September 03, 2009, 06:30:34 am

Previous topic - Next topic

rpgmakerfanhaha

Hi I used the side view battle script and I feel a bit wierd as my character is not move his own arm to attack and the gunner actually went forward and shoots a giant bullet from the screen to the enemy!I need the DEFAULT ACTORS(The Fighter001,002,003,004,005...),it means that the actors are all the given ones in the rpg maker already.

Jackolas

first it would be nice to know what side view battle script you use.

rpgmakerfanhaha

September 03, 2009, 10:11:45 am #2 Last Edit: September 04, 2009, 02:59:26 pm by Aqua
Here's the script.Try it.

Spoiler: ShowHide
class Bitmap
if not method_defined?('original_draw_text')
alias original_draw_text draw_text
def draw_text(*arg)

  original_color = self.font.color.dup
  self.font.color = Color.new(0, 0, 0, 128)

  if arg[0].is_a?(Rect)
    arg[0].x += 2
    arg[0].y += 2
    self.original_draw_text(*arg)
    arg[0].x -= 2
    arg[0].y -= 2
  else
    arg[0] += 2
    arg[1] += 2
    self.original_draw_text(*arg)
    arg[0] -= 2
    arg[1] -= 2
  end

  self.font.color = original_color
  self.original_draw_text(*arg)

end
end
def gradation_rect(x, y, width, height, color1, color2, align = 0)
if align == 0
  for i in x...x + width
    red   = color1.red + (color2.red - color1.red) * (i - x) / (width - 1)
    green = color1.green +
            (color2.green - color1.green) * (i - x) / (width - 1)
    blue  = color1.blue +
            (color2.blue - color1.blue) * (i - x) / (width - 1)
    alpha = color1.alpha +
            (color2.alpha - color1.alpha) * (i - x) / (width - 1)
    color = Color.new(red, green, blue, alpha)
    fill_rect(i, y, 1, height, color)
  end
elsif align == 1
  for i in y...y + height
    red   = color1.red +
            (color2.red - color1.red) * (i - y) / (height - 1)
    green = color1.green +
            (color2.green - color1.green) * (i - y) / (height - 1)
    blue  = color1.blue +
            (color2.blue - color1.blue) * (i - y) / (height - 1)
    alpha = color1.alpha +
            (color2.alpha - color1.alpha) * (i - y) / (height - 1)
    color = Color.new(red, green, blue, alpha)
    fill_rect(x, i, width, 1, color)
  end
elsif align == 2
  for i in x...x + width
    for j in y...y + height
      red   = color1.red + (color2.red - color1.red) *
              ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
      green = color1.green + (color2.green - color1.green) *
              ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
      blue  = color1.blue + (color2.blue - color1.blue) *
              ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
      alpha = color1.alpha + (color2.alpha - color1.alpha) *
              ((i - x) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
      color = Color.new(red, green, blue, alpha)
      set_pixel(i, j, color)
    end
  end
elsif align == 3
  for i in x...x + width
    for j in y...y + height
      red   = color1.red + (color2.red - color1.red) *
            ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
      green = color1.green + (color2.green - color1.green) *
            ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
      blue  = color1.blue + (color2.blue - color1.blue) *
            ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
      alpha = color1.alpha + (color2.alpha - color1.alpha) *
            ((x + width - i) / (width - 1.0) + (j - y) / (height - 1.0)) / 2
      color = Color.new(red, green, blue, alpha)
      set_pixel(i, j, color)
    end
  end
end
end
end

module RPG
class Sprite < ::Sprite
def damage(value, critical)
  dispose_damage
  if value.is_a?(Numeric)
    damage_string = value.abs.to_s
  else
    damage_string = value.to_s
  end
  bitmap = Bitmap.new(160, 48)
  bitmap.font.name = "Arial Black"
  bitmap.font.size = 32
  bitmap.font.color.set(0, 0, 0)
  bitmap.draw_text(-1, 12-1, 160, 36, damage_string, 1)
  bitmap.draw_text(+1, 12-1, 160, 36, damage_string, 1)
  bitmap.draw_text(-1, 12+1, 160, 36, damage_string, 1)
  bitmap.draw_text(+1, 12+1, 160, 36, damage_string, 1)
  if value.is_a?(Numeric) and value < 0
    bitmap.font.color.set(176, 255, 144)
  else
    bitmap.font.color.set(255, 255, 255)
  end
  bitmap.draw_text(0, 12, 160, 36, damage_string, 1)
  if critical
    bitmap.font.size = 20
    bitmap.font.color.set(0, 0, 0)
    bitmap.draw_text(-1, -1, 160, 20, "CRITICAL", 1)
    bitmap.draw_text(+1, -1, 160, 20, "CRITICAL", 1)
    bitmap.draw_text(-1, +1, 160, 20, "CRITICAL", 1)
    bitmap.draw_text(+1, +1, 160, 20, "CRITICAL", 1)
    bitmap.font.color.set(255, 255, 255)
    bitmap.draw_text(0, 0, 160, 20, "CRITICAL", 1)
  end
  @_damage_sprite = ::Sprite.new
  @_damage_sprite.bitmap = bitmap
  @_damage_sprite.ox = 80 + self.viewport.ox
  @_damage_sprite.oy = 20 + self.viewport.oy
  @_damage_sprite.x = self.x + self.viewport.rect.x
  @_damage_sprite.y = self.y - self.oy / 2 + self.viewport.rect.y
  @_damage_sprite.z = 3000
  @_damage_duration = 40
end
def animation(animation, hit)
  dispose_animation
  @_animation = animation
  return if @_animation == nil
  @_animation_hit = hit
  @_animation_duration = @_animation.frame_max
  animation_name = @_animation.animation_name
  animation_hue = @_animation.animation_hue
  bitmap = RPG::Cache.animation(animation_name, animation_hue)
  if @@_reference_count.include?(bitmap)
    @@_reference_count[bitmap] += 1
  else
    @@_reference_count[bitmap] = 1
  end
  @_animation_sprites = []
  if @_animation.position != 3 or not @@_animations.include?(animation)
    for i in 0..15
      sprite = ::Sprite.new
      sprite.bitmap = bitmap
      sprite.visible = false
      @_animation_sprites.push(sprite)
    end
    unless @@_animations.include?(animation)
      @@_animations.push(animation)
    end
  end
  update_animation
end
def loop_animation(animation)
  return if animation == @_loop_animation
  dispose_loop_animation
  @_loop_animation = animation
  return if @_loop_animation == nil
  @_loop_animation_index = 0
  animation_name = @_loop_animation.animation_name
  animation_hue = @_loop_animation.animation_hue
  bitmap = RPG::Cache.animation(animation_name, animation_hue)
  if @@_reference_count.include?(bitmap)
    @@_reference_count[bitmap] += 1
  else
    @@_reference_count[bitmap] = 1
  end
  @_loop_animation_sprites = []
  for i in 0..15
    sprite = ::Sprite.new
    sprite.bitmap = bitmap
    sprite.visible = false
    @_loop_animation_sprites.push(sprite)
  end
  update_loop_animation
end
def animation_set_sprites(sprites, cell_data, position)
  for i in 0..15
    sprite = sprites[i]
    pattern = cell_data[i, 0]
    if sprite == nil or pattern == nil or pattern == -1
      sprite.visible = false if sprite != nil
      next
    end
    sprite.visible = true
    sprite.src_rect.set(pattern % 5 * 192, pattern / 5 * 192, 192, 192)
    if position == 3
      if self.viewport != nil
        sprite.x = self.viewport.rect.width / 2
        sprite.y = self.viewport.rect.height - 160
      else
        sprite.x = 320
        sprite.y = 240
      end
    else
      sprite.x = self.x + self.viewport.rect.x -
                  self.ox + self.src_rect.width / 2
      sprite.y = self.y + self.viewport.rect.y -
                  self.oy + self.src_rect.height / 2
      sprite.y -= self.src_rect.height / 4 if position == 0
      sprite.y += self.src_rect.height / 4 if position == 2
    end
    sprite.x += cell_data[i, 1]
    sprite.y += cell_data[i, 2]
    sprite.z = 2000
    sprite.ox = 96
    sprite.oy = 96
    sprite.zoom_x = cell_data[i, 3] / 100.0
    sprite.zoom_y = cell_data[i, 3] / 100.0
    sprite.angle = cell_data[i, 4]
    sprite.mirror = (cell_data[i, 5] == 1)
    sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
    sprite.blend_type = cell_data[i, 7]
  end
end
end
end

class Game_Actor < Game_Battler
def screen_x
  if self.index != nil
  n_split = [($game_party.actors.length * 0.5).ceil, 4].min
  case n_split
  when 1
    n_index = self.index * 2
  when 2
    if self.index < ($game_party.actors.length - 2)
      n_index = 0.5 + (2 * self.index)
    else
      if $game_party.actors.length == 3 then
        n_index = (self.index * 2) + 2
      elsif $game_party.actors.length == 4 then
        n_index = self.index * 2
      end
    end
  when 3
      n_index = self.index + (0.25 * (self.index + 1))
    if $game_party.actors.length == 5
    if self.index < 2
      n_index = self.index + (0.25 * (self.index + 1))
    else
      n_index = self.index + (0.25 * (self.index + 2)) + 1
    end
    end
  when 4
    n_index = self.index
    if $game_party.actors.length == 7
    if self.index < 3
      n_index = self.index
    else
      n_index = self.index + 1
    end
    end
  end
    return (n_index - ((n_index / 4).floor) * 4) * ((160 / (4)) / 5) + 480 + ((n_index / 4).floor * 60)
  else
    return 0
  end
end
#--------------------------------------------------------------------------
# ? ????? Y ?????
#--------------------------------------------------------------------------
def screen_y
  n_split = [($game_party.actors.length * 0.5).ceil, 4].min
  case n_split
  when 1
    n_index = self.index * 2
  when 2
    if self.index < ($game_party.actors.length - 2)
      n_index = 0.5 + (2 * self.index)
    else
      if $game_party.actors.length == 3 then
        n_index = (self.index * 2) + 2
      elsif $game_party.actors.length == 4 then
        n_index = self.index * 2
      end
    end
  when 3
      n_index = self.index + (0.25 * (self.index + 1))
    if $game_party.actors.length == 5
    if self.index < 2
      n_index = self.index + (0.25 * (self.index + 1))
    else
      n_index = self.index + (0.25 * (self.index + 2)) + 1
    end
    end
  when 4
    n_index = self.index
    if $game_party.actors.length == 7
    if self.index < 3
      n_index = self.index
    else
      n_index = self.index + 1
    end
    end
  end
  return (n_index - ((n_index / 4).floor) * 4) * ((160 / (4)) * 1.6) + 270 - ((n_index / 4).floor * (110 - (4 * 20)))
end
#--------------------------------------------------------------------------
# ? ????? Z ?????
#--------------------------------------------------------------------------
def screen_z
  # ??????????? Z ?????????
  if self.index != nil
    return self.index
  else
    return 0
  end
end
end

class Game_Enemy < Game_Battler
def screen_x
  n_split = [($game_troop.enemies.length * 0.5).ceil, 4].min
  case n_split
  when 1
    n_index = self.index * 2
  when 2
    if self.index < ($game_troop.enemies.length - 2)
      n_index = 0.5 + (2 * self.index)
    else
      if $game_troop.enemies.length == 3 then
        n_index = (self.index * 2) + 2
      elsif $game_troop.enemies.length == 4 then
        n_index = self.index * 2
      end
    end
  when 3
      n_index = self.index + (0.25 * (self.index + 1))
    if $game_troop.enemies.length == 5
    if self.index < 2
      n_index = self.index + (0.25 * (self.index + 1))
    else
      n_index = self.index + (0.25 * (self.index + 2)) + 2
    end
    end
  when 4
    n_index = self.index
    if $game_troop.enemies.length == 7
    if self.index < 3
      n_index = self.index
    else
      n_index = self.index + 1
    end
    end
  end
  return (n_index - ((n_index / 4).floor) * 4) * ((-160 / (4)) / 5) + 160 - ((n_index / 4).floor * 60)
end
#--------------------------------------------------------------------------
# ? ????? Y ?????
#--------------------------------------------------------------------------
def screen_y
  n_split = [($game_troop.enemies.length * 0.5).ceil, 4].min
  case n_split
  when 1
    n_index = self.index * 2
  when 2
    if self.index < ($game_troop.enemies.length - 2)
      n_index = 0.5 + (2 * self.index)
    else
      if $game_troop.enemies.length == 3 then
        n_index = (self.index * 2) + 2
      elsif $game_troop.enemies.length == 4 then
        n_index = self.index * 2
      end
    end
  when 3
      n_index = self.index + (0.25 * (self.index + 1))
    if $game_troop.enemies.length == 5
    if self.index < 2
      n_index = self.index + (0.25 * (self.index + 1))
    else
      n_index = self.index + (0.25 * (self.index + 2)) + 1
    end
    end
  when 4
    n_index = self.index
    if $game_troop.enemies.length == 7
    if self.index < 3
      n_index = self.index
    else
      n_index = self.index + 1
    end
    end
  end
  return (n_index - ((n_index / 4).floor) * 4) * ((160 / (4)) * 1.6) + 270 - ((n_index / 4).floor * (110 - (4 * 20)))
end
#--------------------------------------------------------------------------
# ? ????? Z ?????
#--------------------------------------------------------------------------
def screen_z
  return @member_index + 1
end
end

#==============================================================================
# ¦ Sprite_Battler
#------------------------------------------------------------------------------
#  ????????????????Game_Battler ???????????????
# ????????????????????
#==============================================================================

class Sprite_Battler < RPG::Sprite
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
attr_accessor :battler                  # ????
attr_accessor :moving        # Is the sprite moving?
attr_reader   :index
attr_accessor :target_index
attr_accessor :direction
attr_accessor :pattern
#--------------------------------------------------------------------------
# ? ?????????
#     viewport : ??????
#     battler  : ???? (Game_Battler)
#--------------------------------------------------------------------------
def initialize(viewport, battler = nil)
  super(viewport)
  change
  @old = Graphics.frame_count  # For the delay method
  @goingup = true    # Increasing animation? (if @rm2k_mode is true)
  @once = false      # Is the animation only played once?
  @animated = true   # Used to stop animation when @once is true
  self.opacity = 0
  @index = 0
  @pattern_b = 0
  @counter_b = 0
  @trans_sprite = Sprite.new
  @trans_sprite.opacity = 0
  @bar_hp_sprite = Sprite.new
  @bar_hp_sprite.bitmap = Bitmap.new(64, 10)
  @bar_sp_sprite = Sprite.new
  @bar_sp_sprite.bitmap = Bitmap.new(64, 10)
  @color1 = Color.new(0, 0, 0, 192)
  @color2 = Color.new(255, 255, 192, 192)
  @color3 = Color.new(0, 0, 0, 192)
  @color4 = Color.new(64, 0, 0, 192)
  @old_hp = -1
  @old_sp = -1
  @battler = battler
  @battler_visible = false
  @first = true
  @pattern = 0
  if $target_index == nil
    $target_index = 0
  end
  @battler.is_a?(Game_Enemy) ? enemy_pose(0, 1) : pose(0, 1)
end
#--------------------------------------------------------------------------
# ? ??
#--------------------------------------------------------------------------
def dispose
  if self.bitmap != nil
    self.bitmap.dispose
  end
  if @trans_sprite.bitmap != nil
    @trans_sprite.bitmap.dispose
  end
  @trans_sprite.dispose
  @bar_hp_sprite.bitmap.dispose
  @bar_hp_sprite.dispose
  @bar_sp_sprite.bitmap.dispose
  @bar_sp_sprite.dispose
  super
end

def change(frames = 0, delay = 0, offx = 0, offy = 0, startf = 0, once = false)
  @frames = frames
  @delay = delay
  @offset_x, @offset_y = offx, offy
  @current_frame = startf
  @once = once
  @goingup = true
  @animated = true
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update
  bar_check = true if @_damage_duration == 1
  super
  @trans_sprite.blend_type = self.blend_type
  @trans_sprite.color = self.color
  if @_collapse_duration > 0
    @trans_sprite.opacity = self.opacity
  else
    @trans_sprite.opacity = [self.opacity, 160].min
  end
  if (@_damage_duration == 0 and bar_check == true) or @first == true
    @first = false if @first == true
    bar_check = false
    @bar_must_change = true
  end
  @bar_hp_sprite.opacity = self.opacity
  @bar_sp_sprite.opacity = self.opacity
  # ????? nil ???
  if @battler == nil
    self.bitmap = nil
    @trans_sprite.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
    if @battler.is_a?(Game_Actor)
      @battler_name = @battler.character_name
      @battler_hue = @battler.character_hue
      @direction = 4
    else
      @direction = 6
    end
      self.bitmap = RPG::Cache.character(@battler_name, @battler_hue)
      @width = bitmap.width / 4
      @height = bitmap.height / 4
      @frame_width = @width
      @frame_height = @height
      self.ox = @width / 2
      self.oy = @height
      @pattern = @current_frame
      @direction = @offset_y
      sx = @pattern * @width
      sy = (@direction - 2) / 2 * @height
      self.src_rect.set(sx, sy, @width, @height)
      @current_frame = (@current_frame + 1) unless @frames == 0
      @animated = false if @current_frame == @frames and @once
      @current_frame %= @frames
      @trans_sprite.bitmap = self.bitmap
      @trans_sprite.ox = self.ox
      @trans_sprite.oy = self.oy
      @trans_sprite.src_rect.set(sx, sy, @width, @height)
    # ?????????????????? 0 ???
    if @battler.dead? or @battler.hidden
      self.opacity = 0
      @trans_sprite.opacity = 0
      @bar_hp_sprite.opacity = 0
      @bar_sp_sprite.opacity = 0
    end
  self.x = @battler.screen_x
  self.y = @battler.screen_y
  self.z = @battler.screen_z
end
change_sp_bar if @old_sp != @battler.sp
if delay(@delay) and @animated
    @pattern = @current_frame
    @direction = @offset_y
    sx = @pattern * @width
    sy = (@direction - 2) / 2 * @height
    self.src_rect.set(sx, sy, @width, @height)
    @current_frame = (@current_frame + 1) unless @frames == 0
    @animated = false if @current_frame == @frames and @once
    @current_frame %= @frames
    @trans_sprite.ox = self.ox
    @trans_sprite.oy = self.oy
    @trans_sprite.src_rect.set(sx, sy, @width, @height)
  end
  # ??????? ID ????????????
  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
      @trans_sprite.opacity = 0
      @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 @bar_must_change == true
      @bar_must_change = false
      if @old_hp != @battler.hp
        change_hp_bar
      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
  end
  # ???????????
  @trans_sprite.x = self.x
  @trans_sprite.y = self.y
  @trans_sprite.z = self.z
  @bar_hp_sprite.x = @battler.screen_x - 32
  @bar_hp_sprite.y = @battler.screen_y - (@height +18) if @height != nil
  @bar_hp_sprite.z = 100
  @bar_sp_sprite.x = @battler.screen_x - 32
  @bar_sp_sprite.y = @battler.screen_y - (@height + 8) if @height != nil
  @bar_sp_sprite.z = 100
end

#--------------------------------------------------------------------------
# - Move the sprite
#   x : X coordinate of the destination point
#   y : Y coordinate of the destination point
#   speed : Speed of movement (0 = delayed, 1+ = faster)
#   delay : Movement delay if speed is at 0
#--------------------------------------------------------------------------
def move(x, y, speed = 1, delay = 0)
  @destx = x
  @desty = y
  @move_speed = speed
  @move_delay = delay
  @move_old = Graphics.frame_count
  @moving = true
end

#--------------------------------------------------------------------------
# - Move sprite to destx and desty
#--------------------------------------------------------------------------
def update_move
  return unless @moving
  movinc = @move_speed == 0 ? 1 : @move_speed
  if Graphics.frame_count - @move_old > @move_delay or @move_speed != 0
    self.x += movinc if self.x < @destx
    self.x -= movinc if self.x > @destx
    self.y += movinc if self.y < @desty
    self.y -= movinc if self.y > @desty
    @move_old = Graphics.frame_count
  end
  if @move_speed > 1  # Check if sprite can't reach that point
    self.x = @destx if (@destx - self.x).abs % @move_speed != 0 and
                       (@destx - self.x).abs <= @move_speed
    self.y = @desty if (@desty - self.y).abs % @move_speed != 0 and
                       (@desty - self.y).abs <= @move_speed
  end
  if self.x == @destx and self.y == @desty
    @moving = false
  end
end

#--------------------------------------------------------------------------
# - Pause animation, but still updates movement
#   frames : Number of frames
#--------------------------------------------------------------------------
def delay(frames)
  update_move
  if (Graphics.frame_count - @old >= frames)
    @old = Graphics.frame_count
    return true
  end
  return false
end

def change_hp_bar
  j = false
 @old_hp = @battler.hp if @old_hp == -1
  i = @old_hp
  loop do
    i -= 10
    if i < @battler.hp
      i = @battler.hp
      j = true
    end
    rate = i.to_f / @battler.maxhp
    @color5 = Color.new(80 - 24 * rate, 80 * rate, 14 * rate, 192)
    @color6 = Color.new(240 - 72 * rate, 240 * rate, 62 * rate, 192)
    @bar_hp_sprite.bitmap.clear
    @bar_hp_sprite.bitmap.fill_rect(0, 0, 64, 10, @color1)
    @bar_hp_sprite.bitmap.fill_rect(1, 1, 62, 8, @color2)
    @bar_hp_sprite.bitmap.gradation_rect(2, 2, 60, 6, @color3, @color4, 1)
    #@bar_hp_sprite.bitmap.fill_rect(2, 2, 60, 6, @color3)
    @bar_hp_sprite.bitmap.gradation_rect(2, 2, 64 * rate - 4, 6, @color5, @color6, 2)
    #@bar_hp_sprite.bitmap.fill_rect(2, 2, 64 * rate - 4, 6, @color5)
    @bar_hp_sprite.opacity = self.opacity
    Graphics.update
    if j == true
      j = false
      break
    end
  end
  @old_hp = @battler.hp
end

def change_sp_bar
  j = false
 @old_sp = @battler.sp if @old_sp == -1
  i = @old_sp
  loop do
    i -= 10
    if i < @battler.sp
      i = @battler.sp
      j = true
    end
    rate = i.to_f / @battler.maxsp
    @color7 = Color.new(14 * rate, 80 - 24 * rate, 80 * rate, 192)
    @color8 = Color.new(62 * rate, 240 - 72 * rate, 240 * rate, 192)
    @bar_sp_sprite.bitmap.clear
    @bar_sp_sprite.bitmap.fill_rect(0, 0, 64, 10, @color1)
    @bar_sp_sprite.bitmap.fill_rect(1, 1, 62, 8, @color2)
    @bar_sp_sprite.bitmap.gradation_rect(2, 2, 60, 6, @color3, @color4, 1)
    #@bar_hp_sprite.bitmap.fill_rect(2, 2, 60, 6, @color3)
    @bar_sp_sprite.bitmap.gradation_rect(2, 2, 64 * rate - 4, 6, @color7, @color8, 0)
    #@bar_hp_sprite.bitmap.fill_rect(2, 2, 64 * rate - 4, 6, @color5)
    @bar_sp_sprite.opacity = self.opacity
    Graphics.update
    if j == true
      j = false
      break
    end
  end
  @old_sp = @battler.sp
end

def enemy                                             #
  $target_index += $game_troop.enemies.size
  $target_index %= $game_troop.enemies.size
  return $game_troop.enemies[$target_index]           #
end                                                   #

def actor                                             #
  $target_index += $game_party.actors.size
  $target_index %= $game_party.actors.size
  return $game_party.actors[$target_index]            #
end

def index=(index)
  @index = index
  update
end

  def pose(number, frames = 4)
  case number
  when 0
    change(frames, 4, 0, 4, 0)
  when 1
    change(frames, 4, 0, 4)
  when 2
    change(frames, 4, 0, 6)
  else
    change(frames, 4, 0, 0, 0)
  end
end

  def enemy_pose(number ,enemy_frames = 4)
  case number
  when 0
    change(enemy_frames, 4, 0, 6, 0)
  when 1
    change(enemy_frames, 4, 0, 4)
  when 2
    change(enemy_frames, 4, 0, 6)
  else
    change(enemy_frames, 4, 0, 0, 0)
  end
end

def default_pose
  pose(0, 1)
end
end

#==============================================================================
# ¦ Spriteset_Battle
#------------------------------------------------------------------------------
#  ???????????????????????????? Scene_Battle ??
# ????????????
#==============================================================================

class Spriteset_Battle
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
attr_reader   :viewport1                # ????????????
attr_reader   :viewport2                # ????????????
attr_accessor :actor_sprites
attr_accessor :enemy_sprites
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def initialize
  # ?????????
  @viewport1 = Viewport.new(0, 0, 640, 480)
  @viewport2 = Viewport.new(0, 0, 640, 480)
  @viewport3 = Viewport.new(0, 0, 640, 480)
  @viewport4 = Viewport.new(0, 0, 640, 480)
  @viewport2.z = 101
  @viewport3.z = 200
  @viewport4.z = 5000
  if $game_temp.battleback_name == ""
  @battleback_sprite = nil
  @tilemap = Tilemap.new(@viewport1)
  @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
  for i in 0..6
    autotile_name = $game_map.autotile_names[i]
    @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
  end
  @tilemap.map_data = $game_map.data
  @tilemap.priorities = $game_map.priorities
  else
  # ??????????????
  @tilemap = nil
  @battleback_sprite = Sprite.new(@viewport1)
  end
  # ????????????
  @enemy_sprites = []
  for enemy in $game_troop.enemies#.reverse
    @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  end
  # ????????????
  @actor_sprites = []
  for j in 0..7
      # ƒAƒNƒ^[ƒXƒvƒ‰ƒCƒg,ð'ljÁ
      @actor_sprites.push(Sprite_Battler.new(@viewport1, $game_party.actors[j]))
  end
  # ?????
  @weather = RPG::Weather.new(@viewport1)
  # ????????????
  @picture_sprites = []
  for i in 51..100
    @picture_sprites.push(Sprite_Picture.new(@viewport3,
      $game_screen.pictures[i]))
  end
  # ????????????
  @timer_sprite = Sprite_Timer.new
  # ??????
  update
end
#--------------------------------------------------------------------------
# ? ??
#--------------------------------------------------------------------------
def dispose
  if @tilemap != nil
  # ?????????
  @tilemap.tileset.dispose
  for i in 0..6
    @tilemap.autotiles[i].dispose
  end
  @tilemap.dispose
  end
  # ??????????????
  if @battleback_sprite != nil
  # ??????????????????????
  if @battleback_sprite.bitmap != nil
    @battleback_sprite.bitmap.dispose
  end
  @battleback_sprite.dispose
  end
  # ??????????????????????
  for sprite in @enemy_sprites + @actor_sprites
    sprite.dispose
  end
  # ?????
  @weather.dispose
  # ????????????
  for sprite in @picture_sprites
    sprite.dispose
  end
  # ????????????
  @timer_sprite.dispose
  # ?????????
  @viewport1.dispose
  @viewport2.dispose
  @viewport3.dispose
  @viewport4.dispose
end
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
def effect?
  # ??????????????? true ???
  for sprite in @enemy_sprites + @actor_sprites
    return true if sprite.effect?
  end
  return false
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update
  # ???????????????????????
  if @battleback_sprite != nil
  if @battleback_name != $game_temp.battleback_name
    @battleback_name = $game_temp.battleback_name
    if @battleback_sprite.bitmap != nil
      @battleback_sprite.bitmap.dispose
    end
    bg_bitmap = RPG::Cache.battleback(@battleback_name)
    bg_bitmap_stretch = Bitmap.new(640, 480)
    bg_bitmap_stretch.stretch_blt(Rect.new(0, 0, 640, 480), bg_bitmap, bg_bitmap.rect)
    @battleback_sprite.bitmap = bg_bitmap_stretch
  end
  end
  if @tilemap != nil
  @tilemap.ox = $game_map.display_x / 4
  @tilemap.oy = $game_map.display_y / 4
  @tilemap.update
  end
  # ????????????
  for sprite in @enemy_sprites + @actor_sprites
    sprite.update
  end
  # ???????????
  @weather.type = $game_screen.weather_type
  @weather.max = $game_screen.weather_max
  @weather.update
  # ????????????
  for sprite in @picture_sprites
    sprite.update
  end
  # ????????????
  @timer_sprite.update
  # ???????????????
  @viewport1.tone = $game_screen.tone
  @viewport1.ox = $game_screen.shake
  # ????????????
  @viewport4.color = $game_screen.flash_color
  # ?????????
  @viewport1.update
  @viewport2.update
  @viewport4.update
end
end

#==============================================================================
# ¦ Window_Command
#------------------------------------------------------------------------------
#  ?????????????????????
#==============================================================================

class Window_Command < Window_Selectable
#--------------------------------------------------------------------------
# ? ?????????
#     width    : ???????
#     commands : ??????????
#--------------------------------------------------------------------------
def initialize(width, commands, column_max = 1, style = 0, inf_scroll = 1)
  # ????????????????????
  super(0, 0, width, (commands.size * 1.0 / column_max).ceil * 32 + 32)
  @inf_scroll = inf_scroll
  @item_max = commands.size
  @commands = commands
  @column_max = column_max
  @style = style
  self.contents = Bitmap.new(width - 32, (@item_max * 1.0 / @column_max).ceil * 32)
  self.contents.font.name = "Tahoma"
  self.contents.font.size = 22
  refresh
  self.index = 0
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def refresh
  self.contents.clear
  for i in 0...@item_max
    draw_item(i, normal_color)
  end
end
#--------------------------------------------------------------------------
# ? ?????
#     index : ????
#     color : ???
#--------------------------------------------------------------------------
def draw_item(index, color)
  self.contents.font.color = color
  rect = Rect.new(index%@column_max * (self.width / @column_max) + 4, 32 * (index/@column_max), self.width / @column_max - 40, 32)
  self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  self.contents.draw_text(rect, @commands[index], @style)
end
#--------------------------------------------------------------------------
# ? ??????
#     index : ????
#--------------------------------------------------------------------------
def disable_item(index)
  draw_item(index, disabled_color)
end

def update_help
  @help_window.set_actor($game_party.actors[$scene.actor_index])
end
end

#==============================================================================
# ¦ Arrow_Enemy
#------------------------------------------------------------------------------
#  ????????????????????????????? Arrow_Base ??
# ????????
#==============================================================================

class Arrow_Enemy < Arrow_Base
#--------------------------------------------------------------------------
# ? ?????????????????
#--------------------------------------------------------------------------
def enemy
  return $game_troop.enemies[@index]
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
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::DOWN)
    $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
  end
  # ?????
  if Input.repeat?(Input::UP)
    $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
  end
  if Input.repeat?(Input::RIGHT)
    $game_system.se_play($data_system.cursor_se)
    $game_troop.enemies.size.times do
      @index += ((($game_troop.enemies.length) * 0.5).ceil)
      @index %= $game_troop.enemies.size
      break if self.enemy.exist?
    end
  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 - ((($game_troop.enemies.length) * 0.5).ceil)
      @index %= $game_troop.enemies.size
      break if self.enemy.exist?
    end
  end
  # ???????????
  if self.enemy != nil
    self.x = self.enemy.screen_x + 4
    self.y = self.enemy.screen_y + 36
    self.z = self.enemy.screen_z + 1
  end
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def update_help
  # ????????????????????????
  @help_window.set_enemy(self.enemy)
end
end

#==============================================================================
# ¦ Arrow_Actor
#------------------------------------------------------------------------------
#  ????????????????????????????? Arrow_Base ??
# ????????
#==============================================================================

class Arrow_Actor < Arrow_Base
#--------------------------------------------------------------------------
# ? ?????????????????
#--------------------------------------------------------------------------
def actor
  return $game_party.actors[@index]
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update
  super
  # ?????
  if Input.repeat?(Input::DOWN)
    $game_system.se_play($data_system.cursor_se)
    @index += 1
    @index %= $game_party.actors.size
  end
  # ?????
  if Input.repeat?(Input::UP)
    $game_system.se_play($data_system.cursor_se)
    @index += $game_party.actors.size - 1
    @index %= $game_party.actors.size
  end
  if Input.repeat?(Input::RIGHT)
    $game_system.se_play($data_system.cursor_se)
    @index += ($game_party.actors.length * 0.5).ceil
    @index %= $game_party.actors.size
  end
  # ?????
  if Input.repeat?(Input::LEFT)
    $game_system.se_play($data_system.cursor_se)
    @index += $game_party.actors.size - (($game_party.actors.length * 0.5).ceil)
    @index %= $game_party.actors.size
  end
  # ???????????
  if self.actor != nil
    self.x = self.actor.screen_x
    self.y = self.actor.screen_y + 36
    self.z = self.actor.screen_z + 1
  end
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def update_help
  # ??????????????????????
  @help_window.set_actor(self.actor)
end
end

class Scene_Battle
attr_accessor :actor_index
def main
  # ???????????????
  $game_temp.in_battle = true
  $game_temp.battle_turn = 0
  $game_temp.battle_event_flags.clear
  $game_temp.battle_abort = false
  $game_temp.battle_main_phase = false
  $game_temp.battleback_name = $game_map.battleback_name
  $game_temp.forcing_battler = nil
  # ??????????????????
  $game_system.battle_interpreter.setup(nil, 0)
  # ???????
  @troop_id = $game_temp.battle_troop_id
  $game_troop.setup(@troop_id)
  # ????????????????
  s1 = $data_system.words.attack
  s1 = $data_system.words.attack
  s2 = $data_system.words.skill
  s3 = $data_system.words.guard
  s4 = $data_system.words.item
  @actor_command_window = Window_Command.new(640, [s1, s2, s3, s4], 4)
  @actor_command_window.y = 64
  @actor_command_window.back_opacity = 160
  @actor_command_window.active = false
  @actor_command_window.visible = false
  # ????????????
  @party_command_window = Window_PartyCommand.new
  @help_window = Window_Help.new
  @help_window.back_opacity = 160
  @help_window.visible = false
  #@status_window = Window_BattleStatus.new
  @message_window = Window_Message.new
  # ???????????
  @spriteset = Spriteset_Battle.new
  # ????????????
  @wait_count = 0
  # ?????????
  if $data_system.battle_transition == ""
    Graphics.transition(20)
  else
    Graphics.transition(40, "Graphics/Transitions/" +
      $data_system.battle_transition)
  end
  # ???????????
  start_phase1
  # ??????
  loop do
    # ????????
    Graphics.update
    # ???????
    Input.update
    # ??????
    update
    # ????????????????
    if $scene != self
      break
    end
  end
  # ??????????
$game_map.refresh
  # ?????????
  Graphics.freeze
  # ????????
  @actor_command_window.dispose
  @party_command_window.dispose
  @help_window.dispose
  #@status_window.dispose
  @message_window.dispose
  if @skill_window != nil
    @skill_window.dispose
  end
  if @item_window != nil
    @item_window.dispose
  end
  if @result_window != nil
    @result_window.dispose
  end
  # ???????????
  @spriteset.dispose
  # ???????????????
  if $scene.is_a?(Scene_Title)
    # ??????????
    Graphics.transition
    Graphics.freeze
  end
  # ???????????????????????????
  if $BTEST and not $scene.is_a?(Scene_Gameover)
    $scene = nil
  end
end

def update
  # ?????????????
  if $game_system.battle_interpreter.running?
    # ?????????
    $game_system.battle_interpreter.update
    # ?????????????????????????
    if $game_temp.forcing_battler == nil
      # ?????????????????
      unless $game_system.battle_interpreter.running?
        # ??????????????????????????
        unless judge
          setup_battle_event
        end
      end
      # ????????????????
      if @phase != 5
        # ?????????????????
        #@status_window.refresh
      end
    end
  end
  # ???? (????)??????
  $game_system.update
  $game_screen.update
  # ????? 0 ??????
  if $game_system.timer_working and $game_system.timer == 0
    # ?????
    $game_temp.battle_abort = true
  end
  # ????????
  @help_window.update
  @party_command_window.update
  @actor_command_window.update
  #@status_window.update
  @message_window.update
  # ???????????
  @spriteset.update
  # ?????????????
  if $game_temp.transition_processing
    # ?????????????????
    $game_temp.transition_processing = false
    # ?????????
    if $game_temp.transition_name == ""
      Graphics.transition(20)
    else
      Graphics.transition(40, "Graphics/Transitions/" +
        $game_temp.transition_name)
    end
  end
  # ????????????????
  if $game_temp.message_window_showing
    return
  end
  # ???????????
  if @spriteset.effect?
    return
  end
  # ??????????
  if $game_temp.gameover
    # ??????????????
    $scene = Scene_Gameover.new
    return
  end
  # ???????????
  if $game_temp.to_title
    # ???????????
    $scene = Scene_Title.new
    return
  end
  # ????????
  if $game_temp.battle_abort
    # ??????? BGM ???
    $game_system.bgm_play($game_temp.map_bgm)
    # ?????
    battle_end(1)
    return
  end
  # ????????
  if @wait_count > 0
    # ????????????
    @wait_count -= 1
    return
  end
 
  # this one holds the battle while the player moves
  for actor in @spriteset.actor_sprites
    if actor.moving
      return
    end
  end
  # and this one is for the enemy...
  for enemy in @spriteset.enemy_sprites
    if enemy.moving# and $game_system.animated_enemy
      return
    end
  end
  # ???????????????????????
  # ????????????????
  if $game_temp.forcing_battler == nil and
     $game_system.battle_interpreter.running?
    return
  end
  # ??????????
  case @phase
  when 1  # ?????????
    update_phase1
  when 2  # ????????????
    update_phase2
  when 3  # ????????????
    update_phase3
  when 4  # ???????
    update_phase4
  when 5  # ???????????
    update_phase5
  end
end

def start_phase2
  # ???? 2 ???
  @phase = 2
  # ?????????????
  @actor_index = -1
  @active_battler = nil
  # ?????????????????
  @party_command_window.active = true
  @party_command_window.visible = true
  # ?????????????????
  @actor_command_window.active = false
  @actor_command_window.visible = false
  @help_window.visible = false
  # ??????????????
  $game_temp.battle_main_phase = false
  # ????????????????
  $game_party.clear_actions
  # ????????????
  unless $game_party.inputable?
    # ?????????
    start_phase4
  end
end

def update_phase2_escape
  # ??????????????
  enemies_agi = 0
  enemies_number = 0
  for enemy in $game_troop.enemies
    if enemy.exist?
      enemies_agi += enemy.agi
      enemies_number += 1
    end
  end
  if enemies_number > 0
    enemies_agi /= enemies_number
  end
  # ??????????????
  actors_agi = 0
  actors_number = 0
  for actor in $game_party.actors
    if actor.exist?
      actors_agi += actor.agi
      actors_number += 1
    end
  end
  if actors_number > 0
    actors_agi /= actors_number
  end
  # ??????
  success = rand(100) < 50 * actors_agi / enemies_agi
  # ???????
  if success
    # ?? SE ???
    $game_system.se_play($data_system.escape_se)
      for actor in $game_party.actors
        @spriteset.actor_sprites[actor.index].pose(2)
        @spriteset.actor_sprites[actor.index].move(660, actor.screen_y, 10)
      end
      check = escape_move
    until check == false
      @spriteset.update
      Graphics.update
      check = escape_move
    end
    # ??????? BGM ???
    $game_system.bgm_play($game_temp.map_bgm)
    # ?????
    battle_end(1)
  # ???????
  else
    # ????????????????
    $game_party.clear_actions
    # ?????????
    start_phase4
  end
end

def escape_move
  for actor in @spriteset.actor_sprites
    if actor.moving
      return true
    end
  end
  return false
end

def start_phase5
  # ???? 5 ???
  @phase = 5
  # ????? ME ???
  $game_system.me_play($game_system.battle_end_me)
  # ??????? BGM ???
  $game_system.bgm_play($game_temp.map_bgm)
  # EXP???????????????
  exp = 0
  gold = 0
  treasures = []
  # ???
  for enemy in $game_troop.enemies
    # ??????????????
    unless enemy.hidden
      # ?? EXP????????
      exp += enemy.exp
      gold += enemy.gold
      # ?????????
      if rand(100) < enemy.treasure_prob
        if enemy.item_id > 0
          treasures.push($data_items[enemy.item_id])
        end
        if enemy.weapon_id > 0
          treasures.push($data_weapons[enemy.weapon_id])
        end
        if enemy.armor_id > 0
          treasures.push($data_armors[enemy.armor_id])
        end
      end
    end
  end
  # ???????? 6 ??????
  treasures = treasures[0..5]
  # EXP ??
  for i in 0...$game_party.actors.size
    actor = $game_party.actors[i]
    if actor.cant_get_exp? == false
      last_level = actor.level
      actor.exp += exp
      if actor.level > last_level
        #@status_window.level_up(i)
      end
    end
  end
  # ??????
  $game_party.gain_gold(gold)
  # ???????
  for item in treasures
    case item
    when RPG::Item
      $game_party.gain_item(item.id, 1)
    when RPG::Weapon
      $game_party.gain_weapon(item.id, 1)
    when RPG::Armor
      $game_party.gain_armor(item.id, 1)
    end
  end
  # ???????????????
  @result_window = Window_BattleResult.new(exp, gold, treasures)
  # ???????????
  @phase5_wait_count = 100
end

#--------------------------------------------------------------------------
# ? ?????? (???????????)
#--------------------------------------------------------------------------
def update_phase5
  # ????????? 0 ???????
  if @phase5_wait_count > 0
    # ????????????
    @phase5_wait_count -= 1
    # ????????? 0 ??????
    if @phase5_wait_count == 0
      # ????????????
      @result_window.visible = true
      # ??????????????
      $game_temp.battle_main_phase = false
      # ?????????????????
      #@status_window.refresh
    end
    return
  end
  # C ??????????
  if Input.trigger?(Input::C)
    # ?????
    battle_end(0)
  end
end

def phase3_setup_command_window
  # ?????????????????
  @party_command_window.active = false
  @party_command_window.visible = false
  # ?????????????????
  @actor_command_window.active = true
  @actor_command_window.visible = true
  @help_window.visible = true
  # ???????????????????
  if @actor_command_window.help_window == nil
    @actor_command_window.help_window = @help_window
  end
  @actor_command_window.update_help    
  #@actor_command_window.x = @actor_index * 160
  # ??????? 0 ???
  @actor_command_window.index = 0
end
def start_enemy_select
  # ??????????
  @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport2)
  # ?????????????
  @enemy_arrow.help_window = @help_window
  # ?????????????????
  @actor_command_window.active = false
  @actor_command_window.visible = false
end

def update_phase4
  case @phase4_step
  when 1
    update_phase4_step1
  when 2
    update_phase4_step2
  when 3
    update_phase4_step3
  when 4
    update_phase4_step4
  when 5
    update_phase4_step5
  when 6
    update_phase4_step6
  when 7
    update_phase4_step7
  end    
end

def update_phase4_step1

  # Change actor poses to default
  #if @active_battler.is_a?(Game_Actor)
  #  @spriteset.actor_sprites[@active_battler.index].default_pose
  #end
  for i in 0...$game_party.actors.size
    actor = $game_party.actors[i]
    @spriteset.actor_sprites[i].default_pose
  end

  @help_window.visible = false
  if judge
    return
  end
  if $game_temp.forcing_battler == nil
    setup_battle_event
    if $game_system.battle_interpreter.running?
      return
    end
  end
  if $game_temp.forcing_battler != nil
    @action_battlers.delete($game_temp.forcing_battler)
    @action_battlers.unshift($game_temp.forcing_battler)
  end
  if @action_battlers.size == 0
    start_phase2
    return
  end
  @animation1_id = 0
  @animation2_id = 0
  @common_event_id = 0
  @active_battler = @action_battlers.shift
  if @active_battler.index == nil
    return
  end
  if @active_battler.hp > 0 and @active_battler.slip_damage?
    @active_battler.slip_damage_effect
    @active_battler.damage_pop = true
  end
  @active_battler.remove_states_auto
  #@status_window.refresh
  @phase4_step = 2
end

def make_basic_action_result
 
  if @active_battler.is_a?(Game_Actor)
    $actor_on_top = true
  elsif @active_battler.is_a?(Game_Enemy)
    $actor_on_top = false
  end
  if @active_battler.current_action.basic == 0
    @animation1_id = @active_battler.animation1_id
    @animation2_id = @active_battler.animation2_id
    if @active_battler.is_a?(Game_Enemy)
      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
#======== here is the setting for the movement & animation...
        x = target.screen_x - 32
        @spriteset.enemy_sprites[@active_battler.index].enemy_pose(2)
        @spriteset.enemy_sprites[@active_battler.index].move(x, target.screen_y, 10)
#========= here if you look at the RPG's movement settings you'll see
#========= that he takes the number 40 for the speed of the animation...
#========= i thing thats too fast so i settet it down to 10 so looks smoother...
    end
    if @active_battler.is_a?(Game_Actor)
      weapon = $data_weapons[@active_battler.weapon_id]
      range = false
      if weapon != nil
        for id in weapon.element_set
          if $data_system.elements[23] == "Range"
            range = true
            break
          end
        end
      end
      if @active_battler.restriction == 3
        target = $game_party.random_target_actor
      elsif @active_battler.restriction == 2
        target = $game_troop.random_target_enemy
      else
        index = @active_battler.current_action.target_index
        target = $game_troop.smooth_target_enemy(index)
      end
#======= the same thing for the player... ^-^
      x = target.screen_x + 32
      @spriteset.actor_sprites[@active_battler.index].pose(1)
      @spriteset.actor_sprites[@active_battler.index].move(x * (range ? 2 : 1), target.screen_y, 10)
      range = false
    end
    @target_battlers = [target]
    for target in @target_battlers
      target.attack_effect(@active_battler)
    end
    return
  end
  if @active_battler.current_action.basic == 1
    if @active_battler.is_a?(Game_Actor)
      @spriteset.actor_sprites[@active_battler.index].pose(0, 1) #defence
    else
      @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0, 1) #defence
    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
    @help_window.set_text("Escape", 1)
    @active_battler.escape
    return
  end
  if @active_battler.current_action.basic == 3
    $game_temp.forcing_battler = nil
    @phase4_step = 1
    return
  end
 
  if @active_battler.current_action.basic == 4
    if $game_temp.battle_can_escape == false
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    $game_system.se_play($data_system.decision_se)
    update_phase2_escape
    return
  end
end

def make_skill_action_result
 
  @skill = $data_skills[@active_battler.current_action.skill_id]
  unless @active_battler.current_action.forcing
    unless @active_battler.skill_can_use?(@skill.id)
      $game_temp.forcing_battler = nil
      @phase4_step = 1
      return
    end
  end
  @active_battler.sp -= @skill.sp_cost
  #@status_window.refresh
  @help_window.set_text(@skill.name, 1)
  @animation1_id = @skill.animation1_id
  @animation2_id = @skill.animation2_id
    if @active_battler.is_a?(Game_Enemy)
        #@spriteset.enemy_sprites[@active_battler.index].change_sp_bar
         x = @active_battler.screen_x + 48
        @spriteset.enemy_sprites[@active_battler.index].enemy_pose(2)
        @spriteset.enemy_sprites[@active_battler.index].move(x, @active_battler.screen_y, 5)
        @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0, 1)
    end
    if @active_battler.is_a?(Game_Actor)
      #@spriteset.actor_sprites[@active_battler.index].change_sp_bar
      x = @active_battler.screen_x - 48
      @spriteset.actor_sprites[@active_battler.index].pose(1)
      @spriteset.actor_sprites[@active_battler.index].move(x, @active_battler.screen_y, 5)
      @spriteset.actor_sprites[@active_battler.index].pose(0, 1)
    end
  @common_event_id = @skill.common_event_id
  set_target_battlers(@skill.scope)
  for target in @target_battlers
    target.skill_effect(@active_battler, @skill)
  end
end

  def make_item_action_result
 
  # sorry i didnt work on this...
  # couse i dont have a sprite that uses items....
  # so i just added the standby sprite here...
  # when i get more time for this i'll try what i can do for this one... ^-^
  # its the same as the ones above...
  if @active_battler.is_a?(Game_Actor)
    @spriteset.actor_sprites[@active_battler.index].pose(0, 1)
  else
    @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0, 1)
  end
 
  @item = $data_items[@active_battler.current_action.item_id]
  unless $game_party.item_can_use?(@item.id)
    @phase4_step = 1
    return
  end
  if @item.consumable
    $game_party.lose_item(@item.id, 1)
  end
  @help_window.set_text(@item.name, 1)
  @animation1_id = @item.animation1_id
  @animation2_id = @item.animation2_id
  @common_event_id = @item.common_event_id
  index = @active_battler.current_action.target_index
  target = $game_party.smooth_target_actor(index)
  set_target_battlers(@item.scope)
  for target in @target_battlers
    target.item_effect(@item)
  end
end

def update_phase4_step3
  if @active_battler.current_action.kind == 0 and
     @active_battler.current_action.basic == 0
     # in this one... we have our weapon animations... for player and monster
    if @active_battler.is_a?(Game_Actor)
      @spriteset.actor_sprites[@active_battler.index].pose(0,1)
    elsif @active_battler.is_a?(Game_Enemy)
      @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0,1)
    end
  end
  if @animation1_id == 1
    @active_battler.white_flash = true
  else
    @active_battler.animation_id = @animation1_id
    @active_battler.animation_hit = true
  end
  @phase4_step = 4
end

def update_phase4_step4
  # this here is for the hit animation...
  for target in @target_battlers
    target.animation_id = @animation2_id
    target.animation_hit = (target.damage != "Miss")
  end
  @wait_count = 8
  @phase4_step = 5
end

def update_phase4_step5
  if @active_battler.hp > 0 and @active_battler.slip_damage?
    @active_battler.slip_damage_effect
    @active_battler.damage_pop = true
  end
  # ???????????
  @help_window.visible = false
  # ?????????????????
  #@status_window.refresh
  # ??????

  if @active_battler.is_a?(Game_Actor)
    @spriteset.actor_sprites[@active_battler.index].pose(0, 1)
  else
    @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0, 1)
  end
  for target in @target_battlers
    if target.damage != nil
      target.damage_pop = true
      if @active_battler.is_a?(Game_Actor)
        @spriteset.actor_sprites[@active_battler.index].pose(0, 1)
      else
        @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0, 1)
      end
    end
  end
  # ???? 6 ???
  @phase4_step = 6
end

def update_phase4_step6
 
  # here we are asking if the player is dead and is a player or an enemy...
  # these lines are for the running back and standby animation....
  if @active_battler.is_a?(Game_Actor)
    if @active_battler.current_action.basic == 1
      @spriteset.actor_sprites[@active_battler.index].pose(0, 1)
    else
      @spriteset.actor_sprites[@active_battler.index].move(@active_battler.screen_x, @active_battler.screen_y, 20)
      @spriteset.actor_sprites[@active_battler.index].pose(2)
    end
  else
    if @active_battler.current_action.basic == 1
      @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0, 1)
    else
      @spriteset.enemy_sprites[@active_battler.index].move(@active_battler.screen_x, @active_battler.screen_y, 20)
      @spriteset.enemy_sprites[@active_battler.index].enemy_pose(1)
    end
  end
  for target in @target_battlers
    if target.is_a?(Game_Actor)
        @spriteset.actor_sprites[target.index].pose(0, 1)
      else
        @spriteset.enemy_sprites[target.index].enemy_pose(0, 1)
    end
  end
  $game_temp.forcing_battler = nil
  if @common_event_id > 0
    common_event = $data_common_events[@common_event_id]
    $game_system.battle_interpreter.setup(common_event.list, 0)
  end
  @phase4_step = 7
end

def update_phase4_step7
 
  # here we are asking if the player is dead and is a player or an enemy...
  # these lines are for the running back and standby animation....
  if @active_battler.is_a?(Game_Actor)
    @spriteset.actor_sprites[@active_battler.index].pose(0, 1)
  else
    @spriteset.enemy_sprites[@active_battler.index].enemy_pose(0, 1)
  end

  $game_temp.forcing_battler = nil
  if @common_event_id > 0
    common_event = $data_common_events[@common_event_id]
    $game_system.battle_interpreter.setup(common_event.list, 0)
  end
  @phase4_step = 1
end
end


This is a small demo~

http://www.mediafire.com/?m4mnmuzqlt2

Jackolas

September 04, 2009, 08:18:31 am #3 Last Edit: September 04, 2009, 08:23:51 am by Jackolas
there are a couple of problems with your request.
first of all the script is not made to have fancy animations.
so I am afraid even if someone makes the animations that U still can't use them as U like.

making a side view battle system is kinda big change and I can't belief that this guy made it in 1 script.
the downside of the 1 script is that it dos not have many options U can add.

I may have an other side view battle system where you don't need any animations for.
the downside is that u need to know more about scripts and what u can do with them

example of what I'm using
Spoiler: ShowHide

rpgmakerfanhaha

Can you send me your script?I will try to use it.Please include a demo.

Jackolas

atm at work so can't send script..

also probably will send only demo. the system is made from 5 scripts I thought (including plug ins)

Blizzard

rpgfan, don't double post. Use the "Modify" button instead.
Check out Daygames and our games:

King of Booze 2      King of Booze: Never Ever
Drinking Game for Android      Never have I ever for Android
Drinking Game for iOS      Never have I ever for iOS


Quote from: winkioI do not speak to bricks, either as individuals or in wall form.

Quote from: Barney StinsonWhen I get sad, I stop being sad and be awesome instead. True story.

9VoltWiseMan

Sorry this has nothing to do with the animations, but may I recommend the "Sideview Battle System Tankentai XP" script? It is animated and it only uses the character sprites. (There is a bunch of add-ons in the demo you will want)
The Beta Demo of Curse's Flaw will be here.. Eventually.

rpgmakerfanhaha

Wow!Thanks!It works the way I wanted!

9VoltWiseMan

The Beta Demo of Curse's Flaw will be here.. Eventually.

rpgmakerfanhaha

I tested out the scrupt today with the skill"Dual Attack"but it did not work out!The user simply steps back and do a cast magic action then create a slash on the selected enemy.Please help!

Jackolas

dual attack has problems with most side view battle system

9VoltWiseMan

September 06, 2009, 12:56:06 pm #12 Last Edit: September 06, 2009, 01:04:00 pm by 9VoltWiseMan
Quote from: Jackolas on September 06, 2009, 12:23:03 pm
dual attack has problems with most side view battle system



Quote from: rpgmakerfanhaha on September 06, 2009, 10:02:21 am
I tested out the scrupt today with the skill"Dual Attack"but it did not work out!The user simply steps back and do a cast magic action then create a slash on the selected enemy.Please help!




You have to specify the skills that use the skill in the script. I'll show you how I did it.
(The add-on)
Spoiler: ShowHide
#==============================================================================
# Add-On: Double Attack
# Criado por Kylock em 10/05/2008
#==============================================================================
# This Add-On creates a new animation sequence for the VX orginal skill
# "Double Attack".
#==============================================================================

module N01
 # Creates a new Sequence
 new_action_sequence = {
 "DOUBLE_ATTACK" => ["PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","WAIT(FIXED)","16",
                     "PREV_STEP_ATTACK","WPN_SWING_VL","OBJ_ANIM_WEAPON","Can Collapse","COORD_RESET"],}
 # Unites the new sequence to the system
 ACTION.merge!(new_action_sequence)
end

module RPG
 class Skill
   alias k_double_attack_base_action base_action
   def base_action
     if @id == 106
       return "DOUBLE_ATTACK"
     end
     k_double_attack_base_action
   end
   alias k_double_attack_extension extension
   def extension
     if @id == 106
       return ["RANDOMTARGET"]
     end
     k_double_attack_extension
   end
 end
end

The number 106 is the id of my skill in the database. This goes for other skill add-ons.
The Beta Demo of Curse's Flaw will be here.. Eventually.

rpgmakerfanhaha

I still have more questions.The gun anime is not working.Can you tell me what to change?oh ya the double attack works.Thanks for that.

9VoltWiseMan

Quote from: rpgmakerfanhaha on September 08, 2009, 06:40:51 am
I still have more questions.The gun anime is not working.Can you tell me what to change?oh ya the double attack works.Thanks for that.


Have you downloaded the demo and checked the scripts? Here is the add-on for guns. Download it if you haven't, it has all the add-ons you need..

Spoiler: ShowHide
#==============================================================================
# Add-On: Guns 1.1
# by Kylock
#------------------------------------------------------------------------------
# This Add-On allows you to use additional animations for guns.
# To use this script, verify if your guns have the attribute with the same
# ID as GUN_ELEMENT in the weapon's tab of your database.
#==============================================================================

module N01
  # Element for the weapon/skill that has the Gun Animation
  GUN_ELEMENT = 17
 
  # Attack Animation
  RANGED_ANIME = {
   "GUNSHOT" => ["sound", "se",  100, 100, "close1"],}
  ANIME.merge!(RANGED_ANIME)
  # Action Sequence
  RANGED_ATTACK_ACTION = {
    "GUN_ATTACK" => ["JUMP_AWAY","WPN_SWING_V","30","GUNSHOT","WPN_SWING_V",
        "OBJ_ANIM_WEIGHT","12","WPN_SWING_VL","OBJ_ANIM_L","One Wpn Only",
        "16","Can Collapse","JUMP_TO","COORD_RESET"],}
  ACTION.merge!(RANGED_ATTACK_ACTION)
end

class RPG::Weapon
  alias kylock_guns_base_action base_action
  def base_action
    # If the "Gun" attribute is marked on the weapon's element,
    # the new attack sequence is used
    if $data_weapons[@id].element_set.include?(N01::GUN_ELEMENT)
      return "GUN_ATTACK"
    end
    kylock_guns_base_action
  end
end

class RPG::Skill
  alias kylock_sguns_base_action base_action
  def base_action
    # If the "Gun" attribute is marked on the weapon's element,
    # the new attack sequence is used
    if $data_skills[@id].element_set.include?(N01::GUN_ELEMENT)
      return "GUN_ATTACK"
    end
    kylock_sguns_base_action
  end
end

Remember to make the element for a gun for it to work. I already set it to 17. (There are 16 elements in RMXP to begin with)
The Beta Demo of Curse's Flaw will be here.. Eventually.

rpgmakerfanhaha

September 11, 2009, 06:19:14 am #15 Last Edit: September 11, 2009, 10:59:12 pm by Starrodkirby86
Yes I have 17 elements now.I added Gun elemnt inside and follow your script too as 17,but it is till not working.The person goes in front of the monster and hits with the gun,then "Bang".

Oh sorry I forgot to tick the element for the gun.Terribly sorry.

9VoltWiseMan

September 11, 2009, 06:40:19 pm #16 Last Edit: September 11, 2009, 06:43:01 pm by 9VoltWiseMan
Quote from: rpgmakerfanhaha on September 11, 2009, 12:32:18 pm
Oh sorry I forgot to tick the element for the gun.Terribly sorry.


Is there anything else..? lol Glad you got what you wanted working!

EDIT: rpgmakerfan, you double posted again... Like blizzard said, use the modify button.
The Beta Demo of Curse's Flaw will be here.. Eventually.

rpgmakerfanhaha

I did it in my general post topic but forgot to modify this before someone de-leveled me.Sorry.