Advertisement
Fomar0153

Fomar0153 - Animated Battlers 1.1

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