Advertisement
Fomar0153

Fomar0153 - Animated Battlers 1.2

Jan 24th, 2012
7,721
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 18.79 KB | None | 0 0
  1. =begin
  2. Animated Battlers Script
  3. by Fomar0153
  4. Version 1.2
  5. ----------------------
  6. Notes
  7. ----------------------
  8. Includes Side View Battlers
  9. Compatable with my Customisable ATB/Stamina Based Battle System Script
  10. Make sure this goes above my Customisable ATB/Stamina Based Battle System Script
  11. ----------------------
  12. Instructions
  13. ----------------------
  14. Edit variables in Animated_Battlers to suit your needs.
  15. You will need to import battlers for the party to use
  16. they should be named like this:
  17. name_battler
  18. e.g.
  19. Ralph_battler
  20. or you can name them through note tagging
  21. ----------------------
  22. Change Log
  23. ----------------------
  24. 1.0 -> 1.1 Added Notetag support for default battlers
  25.            <battler name> and you can edit it through the
  26.            game e.g. $game_actors[1].battler_name = "Fomar0153"
  27.            Added support for individual battler setup
  28.            Added support for different length animations
  29.            Added support for individual skill and item animations
  30.            Added notetag support to further define when skills are
  31.            close and long range. <close> <range>
  32. 1.1 -> 1.2 Fixed a bug were pose overrode setpose animation lengths
  33.            Fixed screen_x related bug that sometimes caused positioning errors.
  34. ----------------------
  35. Known bugs
  36. ----------------------
  37. None
  38. =end
  39.  
  40. module Animated_Battlers
  41.  
  42.   # Setup Generics
  43.   # RPG VXA Caps at 60 FPS at best
  44.   FRAMES_PER_SECOND = 4
  45.   # How long it takes for someone to move into position
  46.   MOVEMENT_SECONDS = 1
  47.   # HP level before whoozy pose (percentage)
  48.   LOW_HEALTH_POSE = 50
  49.  
  50.   # Set up Actor Positions
  51.   X_START = 400
  52.   X_OFFSET = 0
  53.   Y_START = 0
  54.   Y_OFFSET = 60
  55.  
  56.  
  57.   BATTLERS = {}
  58.   BATTLERS['DEFAULT'] = {}
  59.   # How many frames there are in an animation
  60.   # Note FRAMES must be set to the maximum
  61.   BATTLERS['DEFAULT']['FRAMES'] = 4
  62.   BATTLERS['DEFAULT']['VFRAMES'] = 14
  63.   # Setup default battlers' standard rows
  64.   BATTLERS['DEFAULT']['POSE_IDLE']     = 0
  65.   BATTLERS['DEFAULT'][0]               = BATTLERS['DEFAULT']['FRAMES']
  66.   BATTLERS['DEFAULT']['POSE_DEFEND']   = 1
  67.   BATTLERS['DEFAULT'][1]               = BATTLERS['DEFAULT']['FRAMES']
  68.   BATTLERS['DEFAULT']['POSE_WHOOZY']   = 2
  69.   BATTLERS['DEFAULT'][2]               = BATTLERS['DEFAULT']['FRAMES']
  70.   BATTLERS['DEFAULT']['POSE_STRUCK']   = 3
  71.   BATTLERS['DEFAULT'][3]               = BATTLERS['DEFAULT']['FRAMES']
  72.   BATTLERS['DEFAULT']['POSE_ATTACK']   = 4
  73.   BATTLERS['DEFAULT'][4]               = BATTLERS['DEFAULT']['FRAMES']
  74.   BATTLERS['DEFAULT']['POSE_ITEM']     = []
  75.   BATTLERS['DEFAULT']['POSE_ITEM'][0]  = 5
  76.   BATTLERS['DEFAULT'][5]               = BATTLERS['DEFAULT']['FRAMES']
  77.   BATTLERS['DEFAULT']['POSE_SKILL']    = []
  78.   BATTLERS['DEFAULT']['POSE_SKILL'][0] = 6
  79.   BATTLERS['DEFAULT'][6]               = BATTLERS['DEFAULT']['FRAMES']
  80.   BATTLERS['DEFAULT']['POSE_MAGIC']    = 7
  81.   BATTLERS['DEFAULT'][7]               = BATTLERS['DEFAULT']['FRAMES']
  82.   BATTLERS['DEFAULT']['POSE_ADVANCE']  = 8
  83.   BATTLERS['DEFAULT'][8]               = BATTLERS['DEFAULT']['FRAMES']
  84.   BATTLERS['DEFAULT']['POSE_RETREAT']  = 9
  85.   BATTLERS['DEFAULT'][9]               = BATTLERS['DEFAULT']['FRAMES']
  86.   BATTLERS['DEFAULT']['POSE_VICTORY']  = 10
  87.   BATTLERS['DEFAULT'][10]               = BATTLERS['DEFAULT']['FRAMES']
  88.   BATTLERS['DEFAULT']['POSE_ENTER']    = 11
  89.   BATTLERS['DEFAULT'][11]               = BATTLERS['DEFAULT']['FRAMES']
  90.   BATTLERS['DEFAULT']['POSE_DEAD']     = 12
  91.   BATTLERS['DEFAULT'][12]               = BATTLERS['DEFAULT']['FRAMES']
  92.   # When doing the victory pose loop back to frame
  93.   # 0 for the first frame
  94.   # (FRAMES - 1) to not loop
  95.   BATTLERS['DEFAULT']['VICTORY_LOOP']  = 1
  96.  
  97.   # I reccomend adding your non-conformist battlers here
  98.   # copy the big block above starting from:
  99.   # BATTLERS['DEFAULT'] = {}
  100.   # all the way to BATTLERS['DEFAULT']['VICTORY_LOOP']  = 1
  101.   # and then change DEFAULT to the name of the battler.
  102.  
  103.  
  104.  
  105.   def self.get_pose(battler_name, pose, id = nil)
  106.     if BATTLERS[battler_name] == nil
  107.       b = BATTLERS['DEFAULT']
  108.     else
  109.       b = BATTLERS[battler_name]
  110.     end
  111.     if pose == "POSE_ITEM" or pose == "POSE_SKILL"
  112.       if id.nil? or b[pose][id].nil?
  113.         return b[pose][0]
  114.       else
  115.         return b[pose][id]
  116.       end
  117.     elsif !b[pose].nil?
  118.       return b[pose]
  119.     else
  120.       return b['POSE_IDLE']
  121.     end
  122.   end
  123.  
  124. end
  125.  
  126. class Game_Actor < Game_Battler
  127.   #--------------------------------------------------------------------------
  128.   # ● New attr_accessor
  129.   #--------------------------------------------------------------------------
  130.   attr_accessor :battler_name
  131.   #--------------------------------------------------------------------------
  132.   # ● Aliases setup
  133.   #--------------------------------------------------------------------------
  134.   alias ab_setup setup
  135.   def setup(actor_id)
  136.     ab_setup(actor_id)
  137.     if actor.note =~ /<battler (.*)>/i
  138.       @battler_name = $1
  139.     else
  140.       @battler_name = actor.name + "_battler"
  141.     end
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● Rewrites use_sprite?
  145.   #--------------------------------------------------------------------------
  146.   def use_sprite?
  147.     return true
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● New Method screen_x
  151.   #--------------------------------------------------------------------------
  152.   def screen_x
  153.     return Animated_Battlers::X_START + self.index * Animated_Battlers::X_OFFSET
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ● New Method screen_y
  157.   #--------------------------------------------------------------------------
  158.   def screen_y
  159.     return Animated_Battlers::Y_START + self.index * Animated_Battlers::Y_OFFSET
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ● New Method screen_z
  163.   #--------------------------------------------------------------------------
  164.   def screen_z
  165.     return 100
  166.   end
  167. end
  168.  
  169. class Spriteset_Battle
  170.   #--------------------------------------------------------------------------
  171.   # ● Rewrites create_actors
  172.   #--------------------------------------------------------------------------
  173.   def create_actors
  174.     @actor_sprites = $game_party.battle_members.reverse.collect do |actor|
  175.       Sprite_Battler.new(@viewport1, actor)
  176.     end
  177.   end
  178. end
  179.  
  180. class Sprite_Battler < Sprite_Base
  181.   #--------------------------------------------------------------------------
  182.   # ● Aliases initialize
  183.   #--------------------------------------------------------------------------
  184.   alias ab_initialize initialize
  185.   def initialize(viewport, battler = nil)
  186.     ab_initialize(viewport, battler)
  187.     @frame = 0
  188.     @mframe = 0
  189.     @pose = 0
  190.     @set_pose = Animated_Battlers.get_pose(@battler.battler_name,"POSE_ENTER")
  191.   end
  192.   #--------------------------------------------------------------------------
  193.   # ● Rewrote update_src_rect
  194.   #--------------------------------------------------------------------------
  195.   def update_src_rect
  196.     sx = (@frame / (60 / Animated_Battlers::FRAMES_PER_SECOND)) * @cw
  197.     if @set_pose >= 0
  198.       sy = @set_pose * bitmap.height / (Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES"))
  199.     else
  200.       sy = @pose * bitmap.height / (Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES"))
  201.     end
  202.     self.src_rect.set(sx, sy, @cw, @ch)
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● Destroyed update_collapse
  206.   #--------------------------------------------------------------------------
  207.   def update_collapse
  208.     return
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● Aliases start_effect
  212.   #--------------------------------------------------------------------------
  213.   alias ab_start_effect start_effect
  214.   def start_effect(effect_type)
  215.     return if effect_type = :collapse
  216.     ab_start_effect
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   # ● Rewrote update_position
  220.   #--------------------------------------------------------------------------
  221.   def update_position
  222.     if @battler.actor?
  223.       self.x = @battler.screen_x
  224.       self.ox = 0
  225.       self.y = @battler.screen_y + bitmap.height
  226.       if @battler.moving > 0
  227.         self.x += (@mframe * (@battler.target_x - @battler.target_width - self.x) / (60 * Animated_Battlers::MOVEMENT_SECONDS))
  228.         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)
  229.       end
  230.     else
  231.       self.x = @battler.screen_x
  232.       self.y = @battler.screen_y + (bitmap.height * (Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES") - 1)) / Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES")
  233.       if @battler.moving > 0
  234.         self.x += (@mframe * (@battler.target_x - self.x + @battler.bitmap_width / Animated_Battlers.get_pose(@battler.battler_name, "FRAMES")) / (60 * Animated_Battlers::MOVEMENT_SECONDS))
  235.         self.y += @mframe * (@battler.target_y + @battler.target_height - @battler.screen_y) / (60 * Animated_Battlers::MOVEMENT_SECONDS)
  236.       end
  237.     end
  238.     self.z = @battler.screen_z
  239.   end
  240.   #--------------------------------------------------------------------------
  241.   # ● New Method update_pose
  242.   #--------------------------------------------------------------------------
  243.   def update_pose
  244.     if @battler.set_pose >= 0
  245.       @set_pose = @battler.set_pose
  246.       @frame = 0
  247.       @battler.set_pose = -1
  248.     end
  249.     return if @set_pose > 0 or @battler.moving > 0
  250.     if @battler.dead?
  251.       @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_DEAD")
  252.       return
  253.     end
  254.     if $game_troop.all_dead?
  255.       @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_VICTORY")
  256.       return
  257.     end
  258.     if battler.guard?
  259.       @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_DEFEND")
  260.       return
  261.     end
  262.     if battler.hp <= (battler.mhp * Animated_Battlers::LOW_HEALTH_POSE / 100)
  263.       @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_WHOOZY")
  264.       return
  265.     end
  266.     @pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_IDLE")
  267.   end
  268.   #--------------------------------------------------------------------------
  269.   # ● Rewrote update
  270.   #--------------------------------------------------------------------------
  271.   def update
  272.     super
  273.     @frame += 1
  274.     if @battler.moving == 1 and @mframe == 0
  275.       @set_pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_ADVANCE")
  276.     end
  277.     if @battler.moving == 3 and @mframe == (60 * Animated_Battlers::MOVEMENT_SECONDS)
  278.       @set_pose = Animated_Battlers.get_pose(@battler.battler_name, "POSE_RETREAT")
  279.     end
  280.     @mframe += 1 if @set_pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_ADVANCE")
  281.     @mframe -= 1 if @set_pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_RETREAT")
  282.     if (@mframe == 0 or @mframe == (60 * Animated_Battlers::MOVEMENT_SECONDS)) and @battler.moving?
  283.       @set_pose = -1
  284.       @battler.moving = (@battler.moving + 1) % 4
  285.     end
  286.     if @frame >= (Animated_Battlers.get_pose(@battler.battler_name, @set_pose) * (60 / Animated_Battlers::FRAMES_PER_SECOND)) and @set_pose > 0
  287.       if @pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_VICTORY")
  288.         @frame = (Animated_Battlers.get_pose(@battler.battler_name, "VICTORY_LOOP") * (60 / Animated_Battlers::FRAMES_PER_SECOND))
  289.       else
  290.         @frame = 0
  291.       end
  292.       @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"))
  293.     end
  294.     if @frame >= (Animated_Battlers.get_pose(@battler.battler_name, @pose) * (60 / Animated_Battlers::FRAMES_PER_SECOND))
  295.       if @pose == Animated_Battlers.get_pose(@battler.battler_name, "POSE_VICTORY")
  296.         @frame = (Animated_Battlers.get_pose(@battler.battler_name, "VICTORY_LOOP") * (60 / Animated_Battlers::FRAMES_PER_SECOND))
  297.       else
  298.         @frame = 0
  299.       end
  300.       @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"))
  301.     end
  302.     last_pose = @pose
  303.     update_pose
  304.     if last_pose != @pose
  305.       @frame = 0
  306.     end
  307.     if @battler
  308.       @use_sprite = @battler.use_sprite?
  309.       if @use_sprite
  310.         update_bitmap
  311.         update_origin
  312.         update_position
  313.         update_src_rect
  314.       end
  315.       setup_new_effect
  316.       setup_new_animation
  317.       update_effect
  318.     else
  319.       self.bitmap = nil
  320.       @effect_type = nil
  321.     end
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   # ● New Method moving?
  325.   #--------------------------------------------------------------------------
  326.   def moving?
  327.     return !(@mframe == 0 or @mframe == 60 * Animated_Battlers::MOVEMENT_SECONDS)
  328.   end
  329.   #--------------------------------------------------------------------------
  330.   # ● Rewrote update_bitmap
  331.   #--------------------------------------------------------------------------
  332.   def update_bitmap
  333.     new_bitmap = Cache.battler(@battler.battler_name, @battler.battler_hue)
  334.     if bitmap != new_bitmap
  335.       self.bitmap = new_bitmap
  336.       @cw = bitmap.width / Animated_Battlers.get_pose(@battler.battler_name, "FRAMES")
  337.       @ch = bitmap.height / Animated_Battlers.get_pose(@battler.battler_name, "VFRAMES")
  338.       init_visibility
  339.       @battler.bitmap_height = bitmap.height
  340.       @battler.bitmap_width = bitmap.width
  341.     end
  342.   end
  343.   #--------------------------------------------------------------------------
  344.   # ● Rewrote effect?
  345.   #--------------------------------------------------------------------------
  346.   def effect?
  347.     return (@effect_type != nil or moving?)
  348.   end
  349. end
  350.  
  351. class Game_Battler < Game_BattlerBase
  352.   #--------------------------------------------------------------------------
  353.   # ● New attr_accessors
  354.   #--------------------------------------------------------------------------
  355.   attr_accessor :target_x
  356.   attr_accessor :target_y
  357.   attr_accessor :target_width
  358.   attr_accessor :target_height
  359.   attr_accessor :moving
  360.   attr_accessor :set_pose
  361.   attr_accessor :bitmap_height
  362.   attr_accessor :bitmap_width
  363.   #--------------------------------------------------------------------------
  364.   # ● Aliases initialize
  365.   #--------------------------------------------------------------------------
  366.   alias ab_initialize initialize
  367.   def initialize
  368.     ab_initialize
  369.     @target_x = 0
  370.     @target_y = 0
  371.     @target_width = 0
  372.     @target_height = 0
  373.     @moving = 0
  374.     @set_pose = -1
  375.     @bitmap_height = 0
  376.     @bitmap_width = 0
  377.   end
  378.   #--------------------------------------------------------------------------
  379.   # ● New Method move_to
  380.   #--------------------------------------------------------------------------
  381.   def move_to(target)
  382.     @target_x = target.screen_x
  383.     @target_y = target.screen_y
  384.     @target_width = target.bitmap_width / Animated_Battlers.get_pose(target.battler_name, "FRAMES")
  385.     @target_height = target.bitmap_height / Animated_Battlers.get_pose(target.battler_name, "VFRAMES")
  386.     @moving = 1
  387.   end
  388.   #--------------------------------------------------------------------------
  389.   # ● New Method moving?
  390.   #--------------------------------------------------------------------------
  391.   def moving?
  392.     return (@moving == 1 or @moving == 3)
  393.   end
  394. end
  395.  
  396. class Scene_Battle < Scene_Base
  397.   #--------------------------------------------------------------------------
  398.   # ● Rewrote use_item
  399.   #--------------------------------------------------------------------------
  400.   def use_item
  401.     item = @subject.current_action.item
  402.     @log_window.display_use_item(@subject, item)
  403.     @subject.use_item(item)
  404.     refresh_status
  405.     targets = @subject.current_action.make_targets.compact
  406.     targets.each {|target| item.repeats.times { invoke_item(target, item) } }
  407.   end
  408.   #--------------------------------------------------------------------------
  409.   # ● Rewrote invoke_item
  410.   #--------------------------------------------------------------------------
  411.   def invoke_item(target, item)
  412.     if rand < target.item_cnt(@subject, item)
  413.       invoke_counter_attack(target, item)
  414.     elsif rand < target.item_mrf(@subject, item)
  415.       invoke_magic_reflection(target, item)
  416.     else
  417.       if item.is_a?(RPG::Item)
  418.         @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_ITEM", item.id)
  419.         show_animation([target], item.animation_id)
  420.         apply_item_effects(apply_substitute(target, item), item)
  421.       elsif item.is_a?(RPG::Skill)
  422.         if item.id == @subject.attack_skill_id
  423.           @subject.move_to(target)
  424.           update_for_wait while @subject.moving?
  425.           @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_ATTACK")
  426.           target.set_pose = Animated_Battlers.get_pose(target.battler_name, "POSE_STRUCK")
  427.           show_animation([target], item.animation_id)
  428.           apply_item_effects(apply_substitute(target, item), item)
  429.           @subject.moving = 3
  430.           update_for_wait while @subject.moving?
  431.         elsif item.id == @subject.guard_skill_id
  432.           show_animation([target], item.animation_id)
  433.           apply_item_effects(apply_substitute(target, item), item)
  434.         elsif (item.magical? or item.note.include?("<range>")) and not item.note.include?("<close>")
  435.           @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_MAGIC",item.id)
  436.           target.set_pose = Animated_Battlers.get_pose(target.battler_name, "POSE_STRUCK") if item.for_opponent?
  437.           show_animation([target], item.animation_id)
  438.           apply_item_effects(apply_substitute(target, item), item)
  439.         else
  440.           if item.for_opponent?
  441.             @subject.move_to(target)
  442.             update_for_wait while @subject.moving?
  443.             @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_SKILL", item.id)
  444.             target.set_pose = Animated_Battlers.get_pose(target.battler_name, "POSE_STRUCK")
  445.             show_animation([target], item.animation_id)
  446.             apply_item_effects(apply_substitute(target, item), item)
  447.             @subject.moving = 3
  448.             update_for_wait while @subject.moving?
  449.           else
  450.             @subject.set_pose = Animated_Battlers.get_pose(@subject.battler_name, "POSE_SKILL", item.id)
  451.             show_animation([target], item.animation_id)
  452.             apply_item_effects(apply_substitute(target, item), item)
  453.           end
  454.         end
  455.       end
  456.     end
  457.     @subject.last_target_index = target.index
  458.   end
  459. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement