Vai al contenuto


Toggle Chat RM - Chat Apri la Chat in un popup

E' severamente vietato richiedere supporto su RPG Maker in chat!
@  NoxChibi : (18 May 2012 - 01:54 PM) http://rpgmkr.net/fo...4025#entry24025
@  Abadon : (18 May 2012 - 10:08 AM) saaalveee
@  Melosx : (17 May 2012 - 09:51 PM) Cambiato Avatar,,, premete CTRL + F5 se vedete ancora Roxas ^.^
@  NoosiTD : (17 May 2012 - 08:42 PM) evvai
@  kekkorider : (17 May 2012 - 08:40 PM) @NoosiTD eccoti accontentato
@  Melosx : (17 May 2012 - 08:30 PM) E7: Astral Ocean è bellisimo... e come lo subbavano i Nostrano non lo subba nessuno... devo vedere gli anime magic se sono buoni o no
@  NoosiTD : (17 May 2012 - 08:26 PM) e voglio i risultati del contest
@  NoosiTD : (17 May 2012 - 08:24 PM) Il problema è che non ne ho mai capito un accidenti
@  NoosiTD : (17 May 2012 - 08:24 PM) lo guardavo anch'io E7
@  Melosx : (17 May 2012 - 08:23 PM) non puoi capire...
@  Melosx : (17 May 2012 - 08:23 PM) un capolavoro distrutto
@  NoosiTD : (17 May 2012 - 08:21 PM) ma calmino
@  Melosx : (17 May 2012 - 08:21 PM) minchia quanto sono incazato
@  Melosx : (17 May 2012 - 08:20 PM) devo provare l'ultimo che riamane
@  Melosx : (17 May 2012 - 08:20 PM) gli altri subber subbano a cachio di cane morto
@  Melosx : (17 May 2012 - 08:20 PM) gli omoshiroi ci stanno secoli per subbare quegli episodi... oltretutto sbagliano pure il nome di una ragazza
@  Melosx : (17 May 2012 - 08:19 PM) subbato come si deve??
@  Melosx : (17 May 2012 - 08:19 PM) dove lo scarico ora E7:AO
@  Melosx : (17 May 2012 - 08:19 PM) ma chissene di soul eater
@  NoosiTD : (17 May 2012 - 08:17 PM) io facevo così quando mi accorgevo che Soul Eater era finito

Animated Battlers


  • Per cortesia connettiti per rispondere
Nessuna risposta a questa discussione

#1 OFFLINE   Ally

Ally

    Fondatori

  • Amministratori
  • 5558 Messaggi:
  • Localitàrpgmkr
  • Ruolo:
    Scripter
  • Progetto VX:
    Essence
  • Tool:
    RM2k/2k3

Inviato 06 February 2012 - 01:51 AM

Nome Script: Animated Battlers
Versione: 1.2
Autore/i: Fomar0153

Informazioni:
Questo script aggiunge la possibilità di avere battlers animati nelle battaglie.

Screenshots:
Spoiler

Istruzioni:
Inserite lo script sotto Material.
Istruzioni all'interno dello script.

Script:
=begin
Animated Battlers Script
by Fomar0153
Version 1.2
----------------------
Notes
----------------------
Includes Side View Battlers
Compatable with my Customisable ATB/Stamina Based Battle System Script
Make sure this goes above my Customisable ATB/Stamina Based Battle System Script
----------------------
Instructions
----------------------
Edit variables in Animated_Battlers to suit your needs.
You will need to import battlers for the party to use
they should be named like this:
name_battler
e.g.
Ralph_battler
or you can name them through note tagging
----------------------
Change Log
----------------------
1.0 -> 1.1 Added Notetag support for default battlers
           <battler name> and you can edit it through the
           game e.g. $game_actors[1].battler_name = "Fomar0153"
           Added support for individual battler setup
           Added support for different length animations
           Added support for individual skill and item animations
           Added notetag support to further define when skills are
           close and long range. <close> <range>
1.1 -> 1.2 Fixed a bug were pose overrode setpose animation lengths
           Fixed screen_x related bug that sometimes caused positioning errors.
----------------------
Known bugs
----------------------
None
=end

module Animated_Battlers

  # Setup Generics
  # RPG VXA Caps at 60 FPS at best
  FRAMES_PER_SECOND = 4
  # How long it takes for someone to move into position
  MOVEMENT_SECONDS = 1
  # HP level before whoozy pose (percentage)
  LOW_HEALTH_POSE = 50

  # Set up Actor Positions
  X_START = 400
  X_OFFSET = 0
  Y_START = 0
  Y_OFFSET = 60


  BATTLERS = {}
  BATTLERS['DEFAULT'] = {}
  # How many frames there are in an animation
  # Note FRAMES must be set to the maximum
  BATTLERS['DEFAULT']['FRAMES'] = 4
  BATTLERS['DEFAULT']['VFRAMES'] = 14
  # Setup default battlers' standard rows
  BATTLERS['DEFAULT']['POSE_IDLE']     = 0
  BATTLERS['DEFAULT'][0]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_DEFEND']   = 1
  BATTLERS['DEFAULT'][1]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_WHOOZY']   = 2
  BATTLERS['DEFAULT'][2]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_STRUCK']   = 3
  BATTLERS['DEFAULT'][3]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_ATTACK']   = 4
  BATTLERS['DEFAULT'][4]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_ITEM']     = []
  BATTLERS['DEFAULT']['POSE_ITEM'][0]  = 5
  BATTLERS['DEFAULT'][5]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_SKILL']    = []
  BATTLERS['DEFAULT']['POSE_SKILL'][0] = 6
  BATTLERS['DEFAULT'][6]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_MAGIC']    = 7
  BATTLERS['DEFAULT'][7]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_ADVANCE']  = 8
  BATTLERS['DEFAULT'][8]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_RETREAT']  = 9
  BATTLERS['DEFAULT'][9]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_VICTORY']  = 10
  BATTLERS['DEFAULT'][10]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_ENTER']    = 11
  BATTLERS['DEFAULT'][11]               = BATTLERS['DEFAULT']['FRAMES']
  BATTLERS['DEFAULT']['POSE_DEAD']     = 12
  BATTLERS['DEFAULT'][12]               = BATTLERS['DEFAULT']['FRAMES']
  # When doing the victory pose loop back to frame
  # 0 for the first frame
  # (FRAMES - 1) to not loop
  BATTLERS['DEFAULT']['VICTORY_LOOP']  = 1

  # I reccomend adding your non-conformist battlers here
  # copy the big block above starting from:
  # BATTLERS['DEFAULT'] = {}
  # all the way to BATTLERS['DEFAULT']['VICTORY_LOOP']  = 1
  # and then change DEFAULT to the name of the battler.



  def self.get_pose(battler_name, pose, id = nil)
    if BATTLERS[battler_name] == nil
      b = BATTLERS['DEFAULT']
    else
      b = BATTLERS[battler_name]
    end
    if pose == "POSE_ITEM" or pose == "POSE_SKILL"
      if id.nil? or b[pose][id].nil?
        return b[pose][0]
      else
        return b[pose][id]
      end
    elsif !b[pose].nil?
      return b[pose]
    else
      return b['POSE_IDLE']
    end
  end

end

class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● New attr_accessor
  #--------------------------------------------------------------------------
  attr_accessor :battler_name
  #--------------------------------------------------------------------------
  # ● Aliases setup
  #--------------------------------------------------------------------------
  alias ab_setup setup
  def setup(actor_id)
    ab_setup(actor_id)
    if actor.note =~ /<battler (.*)>/i
      @battler_name = $1
    else
      @battler_name = actor.name + "_battler"
    end
  end
  #--------------------------------------------------------------------------
  # ● Rewrites use_sprite?
  #--------------------------------------------------------------------------
  def use_sprite?
    return true
  end
  #--------------------------------------------------------------------------
  # ● New Method screen_x
  #--------------------------------------------------------------------------
  def screen_x
    return Animated_Battlers::X_START + self.index * Animated_Battlers::X_OFFSET
  end
  #--------------------------------------------------------------------------
  # ● New Method screen_y
  #--------------------------------------------------------------------------
  def screen_y
    return Animated_Battlers::Y_START + self.index * Animated_Battlers::Y_OFFSET
  end
  #--------------------------------------------------------------------------
  # ● New Method screen_z
  #--------------------------------------------------------------------------
  def screen_z
    return 100
  end
end

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● Rewrites create_actors
  #--------------------------------------------------------------------------
  def create_actors
    @actor_sprites = $game_party.battle_members.reverse.collect do |actor|
      Sprite_Battler.new(@viewport1, actor)
    end
  end
end

class Sprite_Battler < Sprite_Base
  #--------------------------------------------------------------------------
  # ● Aliases initialize
  #--------------------------------------------------------------------------
  alias ab_initialize initialize
  def initialize(viewport, battler = nil)
    ab_initialize(viewport, battler)
    @frame = 0
    @mframe = 0
    @pose = 0
    @set_pose = Animated_Battlers.get_pose(@battler.battler_name,"POSE_ENTER")
  end
  #--------------------------------------------------------------------------
  # ● Rewrote update_src_rect
  #--------------------------------------------------------------------------
  def update_src_rect
    sx = (@frame / (60 / Animated_Battlers::FRAMES_PER_SECOND)) * @cw
    if @set_pose >= 0
      sy = @set_pose * bitmap.height / (Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES"))
    else
      sy = @pose * bitmap.height / (Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES"))
    end
    self.src_rect.set(sx, sy, @cw, @ch)
  end
  #--------------------------------------------------------------------------
  # ● Destroyed update_collapse
  #--------------------------------------------------------------------------
  def update_collapse
    return
  end
  #--------------------------------------------------------------------------
  # ● Aliases start_effect
  #--------------------------------------------------------------------------
  alias ab_start_effect start_effect
  def start_effect(effect_type)
    return if effect_type = :collapse
    ab_start_effect
  end
  #--------------------------------------------------------------------------
  # ● Rewrote update_position
  #--------------------------------------------------------------------------
  def update_position
    if @battler.actor?
      self.x = @battler.screen_x
      self.ox = 0
      self.y = @battler.screen_y + bitmap.height
      if @battler.moving > 0
        self.x += (@mframe * (@battler.target_x - @battler.target_width - self.:grah1 / (60 * Animated_Battlers::MOVEMENT_SECONDS))
        self.y += @mframe * (@battler.target_y - self.y + (bitmap.height * (Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES") - 1)/Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES"))) / (60 * Animated_Battlers::MOVEMENT_SECONDS)
      end
    else
      self.x = @battler.screen_x
      self.y = @battler.screen_y + (bitmap.height * (Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES") - 1)) / Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES")
      if @battler.moving > 0
        self.x += (@mframe * (@battler.target_x - self.x + @battler.bitmap_width / Animated_Battlers.get_pose(@battler.battler_name, "FRAMES")) / (60 * Animated_Battlers::MOVEMENT_SECONDS))
        self.y += @mframe * (@battler.target_y + @battler.target_height - @battler.screen_y) / (60 * Animated_Battlers::MOVEMENT_SECONDS)
      end
    end
    self.z = @battler.screen_z
  end
  #--------------------------------------------------------------------------
  # ● New Method update_pose
  #--------------------------------------------------------------------------
  def update_pose
    if @battler.set_pose >= 0
      @set_pose = @battler.set_pose
      @frame = 0
      @battler.set_pose = -1
    end
    return if @set_pose > 0 or @battler.moving > 0
    if @battler.dead?
      @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_DEAD")
      return
    end
    if $game_troop.all_dead?
      @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_VICTORY")
      return
    end
    if battler.guard?
      @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_DEFEND")
      return
    end
    if battler.hp <= (battler.mhp * Animated_Battlers::LOW_HEALTH_POSE / 100)
      @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_WHOOZY")
      return
    end
    @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_IDLE")
  end
  #--------------------------------------------------------------------------
  # ● Rewrote update
  #--------------------------------------------------------------------------
  def update
    super
    @frame += 1
    if @battler.moving == 1 and @mframe == 0
      @set_pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_ADVANCE")
    end
    if @battler.moving == 3 and @mframe == (60 * Animated_Battlers::MOVEMENT_SECONDS)
      @set_pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_RETREAT")
    end
    @mframe += 1 if @set_pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_ADVANCE")
    @mframe -= 1 if @set_pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_RETREAT")
    if (@mframe == 0 or @mframe == (60 * Animated_Battlers::MOVEMENT_SECONDS)) and @battler.moving?
      @set_pose = -1
      @battler.moving = (@battler.moving + 1) % 4
    end
    if @frame >= (Animated_Battlers.get_pose(@battler.battler_name, @set_pose) * (60 / Animated_Battlers::FRAMES_PER_SECOND)) and @set_pose > 0
      if @pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_VICTORY")
        @frame = (Animated_Battlers.get_pose(@battler.battler_name, "VICTORY_LOOP") * (60 / Animated_Battlers::FRAMES_PER_SECOND))
      else
        @frame = 0
      end
      @set_pose = -1 unless (@set_pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_ADVANCE") or @set_pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_RETREAT"))
    end 
    if @frame >= (Animated_Battlers.get_pose(@battler.battler_name, @pose) * (60 / Animated_Battlers::FRAMES_PER_SECOND))
      if @pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_VICTORY")
        @frame = (Animated_Battlers.get_pose(@battler.battler_name, "VICTORY_LOOP") * (60 / Animated_Battlers::FRAMES_PER_SECOND))
      else
        @frame = 0
      end
      @set_pose = -1 unless (@set_pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_ADVANCE") or @set_pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_RETREAT"))
    end
    last_pose = @pose
    update_pose
    if last_pose != @pose
      @frame = 0
    end
    if @battler
      @use_sprite = @battler.use_sprite?
      if @use_sprite
        update_bitmap
        update_origin
        update_position
        update_src_rect
      end
      setup_new_effect
      setup_new_animation
      update_effect
    else
      self.bitmap = nil
      @effect_type = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● New Method moving?
  #--------------------------------------------------------------------------
  def moving?
    return !(@mframe == 0 or @mframe == 60 * Animated_Battlers::MOVEMENT_SECONDS)
  end
  #--------------------------------------------------------------------------
  # ● Rewrote update_bitmap
  #--------------------------------------------------------------------------
  def update_bitmap
    new_bitmap = Cache.battler(@battler.battler_name, @battler.battler_hue)
    if bitmap != new_bitmap
      self.bitmap = new_bitmap
      @cw = bitmap.width / Animated_Battlers.get_pose(@battler.battler_name, "FRAMES")
      @ch = bitmap.height / Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES")
      init_visibility
      @battler.bitmap_height = bitmap.height
      @battler.bitmap_width = bitmap.width
    end
  end
  #--------------------------------------------------------------------------
  # ● Rewrote effect?
  #--------------------------------------------------------------------------
  def effect?
    return (@effect_type != nil or moving?)
  end
end

class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● New attr_accessors
  #--------------------------------------------------------------------------
  attr_accessor :target_x
  attr_accessor :target_y
  attr_accessor :target_width
  attr_accessor :target_height
  attr_accessor :moving
  attr_accessor :set_pose
  attr_accessor :bitmap_height
  attr_accessor :bitmap_width
  #--------------------------------------------------------------------------
  # ● Aliases initialize
  #--------------------------------------------------------------------------
  alias ab_initialize initialize
  def initialize
    ab_initialize
    @target_x = 0
    @target_y = 0
    @target_width = 0
    @target_height = 0
    @moving = 0
    @set_pose = -1
    @bitmap_height = 0
    @bitmap_width = 0
  end
  #--------------------------------------------------------------------------
  # ● New Method move_to
  #--------------------------------------------------------------------------
  def move_to(target)
    @target_x = target.screen_x
    @target_y = target.screen_y
    @target_width = target.bitmap_width / Animated_Battlers.get_pose(target.battler_name, "FRAMES")
    @target_height = target.bitmap_height / Animated_Battlers.get_pose(target.battler_name, "VFRAMES")
    @moving = 1
  end
  #--------------------------------------------------------------------------
  # ● New Method moving?
  #--------------------------------------------------------------------------
  def moving?
    return (@moving == 1 or @moving == 3)
  end
end

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● Rewrote use_item
  #--------------------------------------------------------------------------
  def use_item
    item = @subject.current_action.item
    @log_window.display_use_item(@subject, item)
    @subject.use_item(item)
    refresh_status
    targets = @subject.current_action.make_targets.compact
    targets.each {|target| item.repeats.times { invoke_item(target, item) } }
  end
  #--------------------------------------------------------------------------
  # ● Rewrote invoke_item
  #--------------------------------------------------------------------------
  def invoke_item(target, item)
    if rand < target.item_cnt(@subject, item)
      invoke_counter_attack(target, item)
    elsif rand < target.item_mrf(@subject, item)
      invoke_magic_reflection(target, item)
    else
      if item.is_a?(RPG::Item)
        @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_ITEM", item.id)
        show_animation([target], item.animation_id)
        apply_item_effects(apply_substitute(target, item), item)
      elsif item.is_a?(RPG::Skill)
        if item.id == @subject.attack_skill_id
          @subject.move_to(target)
          update_for_wait while @subject.moving?
          @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_ATTACK")
          target.set_pose = Animated_Battlers.get_pose(target.battler_name, "POSE_STRUCK")
          show_animation([target], item.animation_id)
          apply_item_effects(apply_substitute(target, item), item)
          @subject.moving = 3
          update_for_wait while @subject.moving?
        elsif item.id == @subject.guard_skill_id
          show_animation([target], item.animation_id)
          apply_item_effects(apply_substitute(target, item), item)
        elsif (item.magical? or item.note.include?("<range>")) and not item.note.include?("<close>")
          @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_MAGIC",item.id)
          target.set_pose = Animated_Battlers.get_pose(target.battler_name, "POSE_STRUCK") if item.for_opponent?
          show_animation([target], item.animation_id)
          apply_item_effects(apply_substitute(target, item), item)
        else
          if item.for_opponent?
            @subject.move_to(target)
            update_for_wait while @subject.moving?
            @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_SKILL", item.id)
            target.set_pose = Animated_Battlers.get_pose(target.battler_name, "POSE_STRUCK")
            show_animation([target], item.animation_id)
            apply_item_effects(apply_substitute(target, item), item)
            @subject.moving = 3
            update_for_wait while @subject.moving?
          else
            @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_SKILL", item.id)
            show_animation([target], item.animation_id)
            apply_item_effects(apply_substitute(target, item), item)
          end
        end
      end
    end
    @subject.last_target_index = target.index
  end
end

Immagine inserita
Spoiler




1 utente(i) stanno leggendo questa discussione

0 utenti, 1 ospiti, 0 utenti anonimi