Advertisement
Guest User

Untitled

a guest
May 6th, 2017
659
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 125.82 KB | None | 0 0
  1. #==============================================================================
  2. # Requiem ABS Version 8
  3. #==============================================================================
  4. #------------------------------------------------------------------------------
  5. # Credits: Vlad | Email: demon_of_lust@live.com | Buny | and FireFox
  6. #------------------------------------------------------------------------------
  7. #==============================================================================
  8. if Requiem_Masterpiece.enabled?("Requiem Extended Movements")
  9. #------------------------------------------------------------------------------
  10. Requiem_Masterpiece.register("Requiem ABS", 8.0, "06/20/2009")
  11. #------------------------------------------------------------------------------
  12. class Requiem_ABS
  13.  
  14.   attr_reader :attack_key1
  15.   attr_reader :attack_key2
  16.   attr_reader :skill_keys
  17.   attr_reader :item_keys
  18.   attr_reader :animations_divide
  19.   attr_reader :memorized_text
  20.   attr_reader :allow_weapons_graphics
  21.   attr_reader :allow_shields_graphics
  22.   attr_reader :allow_attack_with_shield
  23.   attr_reader :allow_combo_damage
  24.   attr_reader :levelup_animation
  25.   attr_reader :recovery_when_levelup
  26.   attr_reader :gold_drop_icon_index
  27.   attr_reader :gold_drop_rate
  28.   attr_reader :drop_duration_time
  29.   attr_reader :show_reward
  30.   attr_reader :drop_se
  31.   attr_reader :auto_exp_e_gold
  32.   attr_reader :auto_exp_rate
  33.   attr_reader :auto_gold_rate
  34.   attr_reader :damage_properties
  35.   attr_reader :through_drop
  36.   attr_reader :divide_exp
  37.   attr_reader :change_group_order
  38.   attr_reader :next_actor_if_dead
  39.   attr_reader :trasfer_when_defending
  40.   # Modded By FireFox @ Rpgrevolution.com
  41.   def initialize
  42.     @attack_key1 = "A"
  43.     @attack_key2 = "S"
  44.     @skill_keys = [1,2,3]
  45.     @item_keys = ['Q','W','E']
  46.     @animations_divide = 3
  47.     @memorized_text = "Memorized!"
  48.     @allow_weapons_graphics = true
  49.     @allow_shields_graphics = true
  50.     @allow_attack_with_shield = false
  51.     @allow_combo_damage = true
  52.     @levelup_animation = 40
  53.     @recovery_when_levelup = true
  54.     @gold_drop_icon_index  = 147
  55.     @gold_drop_rate  = 75
  56.     @drop_duration_time = 450
  57.     @show_reward = true
  58.     @drop_se = ["Fire8","Fire8"] # Defines The Drop SE For Gold, Items (I Used Fire 8 As Example + So I Can Hear It To See If It Worked.)
  59.     @auto_exp_e_gold  = true
  60.     @auto_exp_rate  = 5
  61.     @auto_gold_rate  = 10
  62.     @through_drop = true
  63.     @trasfer_when_defending = true
  64.     @divide_exp = true
  65.     @change_group_order = true
  66.     @next_actor_if_dead = true
  67.     @damage_properties = {}
  68.     @damage_properties["Damage"] = ["Monotype Corsiva", 24, false, false]
  69.     @damage_properties["Hits"] = ["Times New Roman", 26, true, true]
  70.     @damage_properties["Texts"] = ["Miss", "Critical", "Combo", "Guard", "Level Up", "Hits", "Reflect"]
  71.     @damage_properties["Colors"] = [Color.new(255,255,255), Color.new(125,200,120),
  72.     Color.new(255,255,128), Color.new(245,150,120), Color.new(210,160,210), Color.new(180,165,215)]
  73.   end
  74. end
  75.  
  76. #------------------------------------------------------------------------------
  77. # Module RPG
  78. #------------------------------------------------------------------------------
  79. module RPG
  80.  
  81.   class State
  82.    
  83.     def animation_id
  84.       self.note.each_line { |line|
  85.       return line.gsub('Animation = ', '').chomp.to_i if line.include?('Animation = ')
  86.       }
  87.       return 0
  88.     end
  89.    
  90.     def walk_slower?
  91.       self.note.each_line { |line| return true if line.include?("Walk Slower") }
  92.       return false
  93.     end
  94.    
  95.     def walk_faster?
  96.       self.note.each_line { |line| return true if line.include?("Walk Faster") }
  97.       return false
  98.     end
  99.    
  100.     def dont_walk?
  101.       self.note.each_line { |line| return true if line.include?("Don't Walk") }
  102.       return false
  103.     end
  104.    
  105.     def confusion?
  106.       self.note.each_line { |line| return true if line.include?("Confusion") }
  107.       return false
  108.     end
  109.    
  110.     def duration
  111.       self.note.each_line { |line|
  112.       return line.gsub('Duration = ', '').chomp.to_i if line.include?('Duration = ')
  113.       }
  114.       return 300
  115.     end
  116.    
  117.   end
  118.  
  119.   class BaseItem
  120.    
  121.     def ranged?
  122.       self.note.each_line { |line| return true if line.include?("Ranged") }
  123.       return false
  124.     end
  125.    
  126.     def explosive?
  127.       self.note.each_line { |line| return true if line.include?("Explosive") }
  128.       return false
  129.     end
  130.    
  131.     def bomb?
  132.       self.note.each_line { |line| return true if line.include?("Bomb") }
  133.       return false
  134.     end
  135.      
  136.     def graphic
  137.       self.note.each_line { |line|
  138.       return line.gsub!('Graphic = ', '').chomp if line.include?('Graphic = ')
  139.       }
  140.       return ""
  141.     end
  142.    
  143.     def index
  144.       self.note.each_line { |line|
  145.       return line.gsub('Index = ', '').chomp.to_i if line.include?('Index = ')
  146.       }
  147.       return 0
  148.     end
  149.    
  150.     def move_speed
  151.       self.note.each_line { |line|
  152.       return line.gsub('Speed = ', '').chomp.to_i if line.include?('Speed = ')
  153.       }
  154.       return 4
  155.     end
  156.    
  157.     def range
  158.       self.note.each_line { |line|
  159.       return line.gsub('Range = ', '').chomp.to_i if line.include?('Range = ')
  160.       }
  161.       return 5
  162.     end
  163.    
  164.     def delay
  165.       self.note.each_line { |line|
  166.       return line.gsub('Delay = ', '').chomp.to_i if line.include?('Delay = ')
  167.       }
  168.       return 60
  169.     end
  170.    
  171.     def area
  172.       self.note.each_line { |line|
  173.       return line.gsub('Area = ', '').chomp.to_i if line.include?('Area = ')
  174.       }
  175.       return 3
  176.     end
  177.    
  178.     def shot_se
  179.       self.note.each_line { |line|
  180.       return line.gsub('Shot SE = ', '').chomp.to_s if line.include?('Shot SE = ')
  181.       }
  182.       return nil
  183.     end
  184.    
  185.     def combo_hits
  186.       self.note.each_line { |line|
  187.       return line.gsub('Combo Hits = ', '').chomp.to_i if line.include?('Combo Hits = ')
  188.       }
  189.       return 5
  190.     end
  191.    
  192.     def combo_rate
  193.       self.note.each_line { |line|
  194.       return line.gsub('Combo Rate = ', '').chomp.to_i if line.include?('Combo Rate = ')
  195.       }
  196.       return 75
  197.     end
  198.    
  199.     def ammo1
  200.       self.note.each_line { |line|
  201.       return $data_items[line.gsub('Ammo1 = ', '').chomp.to_i] if line.include?('Ammo1 = ')
  202.       }
  203.       return nil
  204.     end
  205.    
  206.     def ammo2
  207.       self.note.each_line { |line|
  208.       return $data_items[line.gsub('Ammo2 = ', '').chomp.to_i] if line.include?('Ammo2 = ')
  209.       }
  210.       return nil
  211.     end
  212.    
  213.     def defense_rate
  214.       self.note.each_line { |line|
  215.       return line.gsub('Defense Rate = ', '').chomp.to_i if line.include?('Defense Rate = ')
  216.       }
  217.       return 50
  218.     end
  219.    
  220.     def reflect_rate
  221.       self.note.each_line { |line|
  222.       return line.gsub('Reflect Rate = ', '').chomp.to_i if line.include?('Reflect Rate = ')
  223.       }
  224.       return 0
  225.     end
  226.    
  227.     def path
  228.       self.note.each_line { |line|
  229.       return line.gsub!('Path = ', '').chomp if line.include?('Path = ')
  230.       }
  231.       return "Line"
  232.     end
  233.    
  234.   end
  235.  
  236. end
  237.  
  238.  
  239. #------------------------------------------------------------------------------
  240. # Game Battler
  241. #------------------------------------------------------------------------------
  242. class Game_Battler
  243.  
  244.   attr_accessor :damage
  245.   attr_accessor :critical
  246.   attr_accessor :combo
  247.   attr_accessor :reflect
  248.   attr_accessor :state_turns
  249.   attr_accessor :defending
  250.   attr_accessor :piece
  251.  
  252.   alias requiem_abs_gbattler_make_obj_damage_value make_obj_damage_value
  253.  
  254.   def attack_effect(attacker)
  255.     clear_action_results
  256.     unless attack_effective?(attacker)
  257.       @skipped = true
  258.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  259.       return
  260.     end
  261.     if rand(100) >= calc_hit(attacker)
  262.       @missed = true
  263.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  264.       return
  265.     end
  266.     if rand(100) < calc_eva(attacker)
  267.       @evaded = true
  268.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  269.       return
  270.     end
  271.     make_attack_damage_value(attacker)
  272.     execute_damage(attacker)
  273.     if @hp_damage == 0
  274.       return
  275.     end
  276.     apply_state_changes(attacker)
  277.   end
  278.  
  279.   def skill_effect(user, skill)
  280.     clear_action_results
  281.     unless skill_effective?(user, skill)
  282.       @skipped = true
  283.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  284.       return
  285.     end
  286.     if rand(100) >= calc_hit(user, skill)
  287.       @missed = true
  288.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  289.       return
  290.     end
  291.     if rand(100) < calc_eva(user, skill)
  292.       @evaded = true
  293.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  294.       return
  295.     end
  296.     make_obj_damage_value(user, skill)
  297.     make_obj_absorb_effect(user, skill)
  298.     execute_damage(user)
  299.     if skill.physical_attack and @hp_damage == 0
  300.       return
  301.     end
  302.     apply_state_changes(skill)
  303.   end
  304.  
  305.   def item_effect(user, item)
  306.     clear_action_results
  307.     unless item_effective?(user, item)
  308.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  309.       @skipped = true
  310.       return
  311.     end
  312.     if rand(100) >= calc_hit(user, item)
  313.       @missed = true
  314.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  315.       return
  316.     end
  317.     if rand(100) < calc_eva(user, item)
  318.       @evaded = true
  319.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  320.       return
  321.     end
  322.     hp_recovery = calc_hp_recovery(user, item)
  323.     mp_recovery = calc_mp_recovery(user, item)
  324.     make_obj_damage_value(user, item)
  325.     @hp_damage -= hp_recovery
  326.     @mp_damage -= mp_recovery
  327.     make_obj_absorb_effect(user, item)
  328.     execute_damage(user)
  329.     item_growth_effect(user, item)
  330.     if item.physical_attack and @hp_damage == 0
  331.       return
  332.     end
  333.     apply_state_changes(item)
  334.   end
  335.  
  336.   def execute_damage(user)
  337.     if @hp_damage == 0
  338.       @damage = $Requiem_ABS.damage_properties["Texts"][0]
  339.     elsif defending?(user)
  340.       @damage = $Requiem_ABS.damage_properties["Texts"][3]
  341.       return
  342.     else
  343.       if user.reflect
  344.         user.damage = (@hp_damage/4 <= 0 ? 1 : @hp_damage/4)
  345.       else
  346.         @damage = @hp_damage
  347.       end
  348.     end
  349.     if @hp_damage > 0
  350.       remove_states_shock
  351.     end
  352.     if user.reflect
  353.       user.hp -= (@hp_damage/4 <= 0 ? 1 : @hp_damage/4)
  354.       user.mp -= (@mp_damage/4 <= 0 ? 1 : @mp_damage/4)
  355.     else
  356.       self.hp -= @hp_damage
  357.       self.mp -= @mp_damage
  358.     end
  359.     if @absorbed
  360.       user.hp += @hp_damage
  361.       user.mp += @mp_damage
  362.     end
  363.   end
  364.  
  365.   def make_attack_damage_value(attacker)
  366.     damage = attacker.atk * 4 - self.def * 2
  367.     damage = 0 if damage < 0
  368.     damage *= elements_max_rate(attacker.element_set)
  369.     damage /= 100
  370.     if damage == 0
  371.       damage = rand(2)
  372.     elsif damage > 0
  373.       attacker.reflect = (rand(100) < reflect_rate)
  374.       @critical = (rand(100) < attacker.cri)
  375.       @critical = false if prevent_critical or @reflect
  376.       damage *= 2 if @critical
  377.       calculate_combo(attacker)
  378.       damage *= 3 if @combo
  379.       damage = apply_variance(damage, 20)
  380.       damage = apply_guard(damage)
  381.       @hp_damage = damage
  382.     end
  383.   end
  384.  
  385.   def make_obj_damage_value(user, obj)
  386.     requiem_abs_gbattler_make_obj_damage_value(user, obj)
  387.     user.reflect = (rand(100) < reflect_rate)
  388.   end
  389.  
  390.   def calculate_combo(attacker)
  391.     if attacker.is_a?(Game_Actor) and $Requiem_ABS.allow_combo_damage
  392.       if $game_player.right_attack_on and attacker.weapons[0] != nil
  393.         hits = attacker.weapons[0].combo_hits
  394.         rate = attacker.weapons[0].combo_rate
  395.       elsif $game_player.left_attack_on and attacker.weapons[1] != nil
  396.         hits = attacker.weapons[1].combo_hits
  397.         rate = attacker.weapons[1].combo_rate
  398.       elsif $game_player.right_attack_on and attacker.weapons[0].nil?
  399.         hits = 5
  400.         rate = 75
  401.       elsif $game_player.left_attack_on and attacker.weapons[1].nil?
  402.         hits = 5
  403.         rate = 75
  404.       else
  405.         hits = rate = 0
  406.       end
  407.       @combo = ($game_player.hits >= hits and rand(100) <= rate)
  408.       @combo = false if @reflect
  409.     else
  410.       @combo = false
  411.     end
  412.   end
  413.  
  414.   def defending?(user)
  415.     if self.is_a?(Game_Actor) and @defending and equips[1].is_a?(RPG::Armor) and
  416.       rand(100) <= equips[1].defense_rate and @piece != nil and user.piece.face_to_face?(user.piece, @piece)
  417.       return true
  418.     elsif self.is_a?(Game_Monster) and @defending and rand(100) <= self.defense_rate and
  419.       @piece != nil and user.piece.face_to_face?(user.piece, @piece)
  420.       return true
  421.     elsif self.is_a?(Game_Enemy) and @defending and rand(100) <= self.defense_rate and
  422.       @piece != nil and user.piece.face_to_face?(user.piece, @piece)
  423.       return true
  424.     end
  425.     return false
  426.   end
  427.  
  428.   def remove_state(state_id)
  429.     return unless state?(state_id)
  430.     @states.delete(state_id)
  431.     @state_turns.delete(state_id)
  432.   end
  433.  
  434. end
  435.  
  436. #------------------------------------------------------------------------------
  437. # Game Actor
  438. #------------------------------------------------------------------------------
  439. class Game_Actor < Game_Battler
  440.  
  441.   attr_accessor :skill_hotkeys
  442.   attr_accessor :item_hotkeys
  443.  
  444.   alias requiem_abs_gactor_initialize initialize
  445.  
  446.   def initialize(actor_id)
  447.     requiem_abs_gactor_initialize(actor_id)
  448.     @skill_hotkeys = {}
  449.     for s in $Requiem_ABS.skill_keys
  450.       if s.is_a?(Numeric)
  451.         @skill_hotkeys[Input::Numberkeys[s]] = 0
  452.       elsif s == "Enter"
  453.         @skill_hotkeys[Input::Enter] = 0
  454.       else
  455.         @skill_hotkeys[Input::Letters[s]] = 0
  456.       end
  457.     end
  458.     @item_hotkeys = {}
  459.     for i in $Requiem_ABS.item_keys
  460.       if i.is_a?(Numeric)
  461.         @item_hotkeys[Input::Numberkeys[i]] = 0
  462.       elsif s == "Enter"
  463.         @item_hotkeys[Input::Enter] = 0
  464.       else
  465.         @item_hotkeys[Input::Letters[i]] = 0
  466.       end
  467.     end
  468.   end
  469.  
  470.   def display_level_up(new_skills)
  471.     $game_system.battle_end_me.play
  472.     $game_player.animation_id = $Requiem_ABS.levelup_animation
  473.     @damage = $Requiem_ABS.damage_properties[19]
  474.     if $Requiem_ABS.recovery_when_levelup
  475.       $game_player.actor.hp = $game_player.actor.maxhp
  476.       $game_player.actor.mp = $game_player.actor.maxmp
  477.     end
  478.   end
  479.  
  480.   def atk_animation_id2
  481.     if two_swords_style
  482.       return weapons[1].nil? ? 1 : weapons[1].animation_id
  483.     else
  484.       return 1
  485.     end
  486.   end
  487.  
  488.   def reflect_rate
  489.     r = 0
  490.     for i in armors
  491.       next if i.nil?
  492.       r += i.reflect_rate
  493.     end
  494.     return r
  495.   end
  496.  
  497.   def current_exp
  498.     return (@exp - @exp_list[@level])
  499.   end
  500.  
  501.   def next_exp
  502.     exp = (@exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0)
  503.     return exp
  504.   end
  505.  
  506. end
  507.  
  508. #------------------------------------------------------------------------------
  509. # Game Enemy
  510. #------------------------------------------------------------------------------
  511. class Game_Enemy < Game_Battler
  512.  
  513.   def character_name
  514.     enemy.note.each_line { |line|
  515.     return line.gsub('Char Name = ', '').chomp if line.include?('Char Name = ')
  516.     }
  517.     return ""
  518.   end
  519.  
  520.   def character_index
  521.     enemy.note.each_line { |line|
  522.     return line.gsub('Char Index = ', '').chomp.to_i if line.include?('Char Index = ')
  523.     }
  524.     return 0
  525.   end
  526.  
  527.   def atk_animation_id
  528.     enemy.note.each_line { |line|
  529.     return line.gsub('Attack Animation = ', '').chomp.to_i if line.include?('Attack Animation = ')
  530.     }
  531.     return 1
  532.   end
  533.  
  534.   def die_animation_id
  535.     enemy.note.each_line { |line|
  536.     return line.gsub('Die Animation = ', '').chomp.to_i if line.include?('Die Animation = ')
  537.     }
  538.     return 0
  539.   end
  540.  
  541.   def die_se
  542.     enemy.note.each_line { |line|
  543.     return line.gsub('Die SE = ', '').chomp.to_s if line.include?('Die SE = ')
  544.     }
  545.     return nil
  546.   end
  547.  
  548.   def weapon_icon
  549.     enemy.note.each_line { |line|
  550.     return line.gsub('Weapon Icon = ', '').chomp.to_i if line.include?('Weapon Icon = ')
  551.     }
  552.     return 0
  553.   end
  554.  
  555.   def shield_icon
  556.     enemy.note.each_line { |line|
  557.     return line.gsub('Shield Icon = ', '').chomp.to_i if line.include?('Shield Icon = ')
  558.     }
  559.     return 0
  560.   end
  561.  
  562.   def defense_rate
  563.     enemy.note.each_line { |line|
  564.     return line.gsub('Defense Rate = ', '').chomp.to_i if line.include?('Defense Rate = ')
  565.     }
  566.     return 50
  567.   end
  568.  
  569.   def reflect_rate
  570.     enemy.note.each_line { |line|
  571.     return line.gsub('Reflect Rate = ', '').chomp.to_i if line.include?('Reflect Rate = ')
  572.     }
  573.     return 0
  574.   end
  575.  
  576.   def move_speed
  577.     enemy.note.each_line { |line|
  578.     return line.gsub('Move Speed = ', '').chomp.to_i if line.include?('Move Speed = ')
  579.     }
  580.     return 3
  581.   end
  582.  
  583.   def follow_range
  584.     enemy.note.each_line { |line|
  585.     return line.gsub('Follow Range = ', '').chomp.to_i if line.include?('Follow Range = ')
  586.     }
  587.     return 3
  588.   end
  589.  
  590.   def move_route
  591.     enemy.note.each_line { |line|
  592.     return line.gsub('Move Route = ', '').chomp.to_i if line.include?('Move Route = ')
  593.     }
  594.     return 1
  595.   end
  596.  
  597.   def respawn
  598.     enemy.note.each_line { |line|
  599.     return line.gsub('Respawn = ', '').chomp.to_i if line.include?('Respawn = ')
  600.     }
  601.     return 0
  602.   end
  603.  
  604. end
  605.  
  606. #------------------------------------------------------------------------------
  607. # Game Party
  608. #------------------------------------------------------------------------------
  609. class Game_Party < Game_Unit
  610.  
  611.   alias requiem_sbabs_gparty_remove_actor remove_actor
  612.   alias requiem_sbabs_gparty_setup_starting_members setup_starting_members
  613.  
  614.   def setup_starting_members
  615.     requiem_sbabs_gparty_setup_starting_members
  616.     for i in 1..@actors.size
  617.       next if @actors[i].nil?
  618.       $game_allies[i] = Game_Ally.new(i)
  619.     end
  620.   end
  621.  
  622.   def add_actor(actor_id)
  623.     if @actors.size < MAX_MEMBERS and not @actors.include?(actor_id)
  624.       @actors.push(actor_id)
  625.       $game_player.refresh
  626.       id = @actors.size-1
  627.       if @actors.size > 1
  628.         $game_allies[id] = Game_Ally.new(id)
  629.         $game_allies[id].moveto($game_player.x, $game_player.y)
  630.         $game_allies[id].move_random
  631.       end
  632.     end
  633.   end
  634.  
  635.   def remove_actor(actor_id)
  636.     for ally in $game_allies
  637.       next if ally.nil?
  638.       ally.destroy = true if actor_id == ally.actor.id
  639.     end
  640.     $scene.refresh_sprites if $scene.is_a?(Scene_Map)
  641.     requiem_sbabs_gparty_remove_actor(actor_id)
  642.   end
  643.  
  644.   def change_group_order
  645.     for ally in $game_allies
  646.       next if ally.nil? or ally.map_id == $game_map.map_id
  647.       return
  648.     end
  649.     return if members.size <= 1
  650.     actor = @actors[0]
  651.     @actors.delete(actor)
  652.     @actors.compact
  653.     if all_dead?
  654.       @actors.insert(0, actor)
  655.       return
  656.     end
  657.     @actors.push(actor)
  658.     for a in members
  659.       next if a.nil?
  660.       if a.dead?
  661.         ally = a
  662.         @actors.delete(a.id)
  663.         @actors.push(a.id)
  664.       else
  665.         for i in $game_allies
  666.           next if i.nil? or i.actor != a
  667.           ally = i
  668.         end
  669.         break
  670.       end
  671.     end
  672.     allies = []
  673.     for a in $game_allies
  674.       next if a .nil?
  675.       allies.push(a)
  676.     end
  677.     allies.delete(ally)
  678.     allies.push($game_player)
  679.     allies.compact
  680.     for i in 1...members.size
  681.       next if members[i].nil?
  682.       $game_allies[i] = Game_Ally.new(i)
  683.       $game_allies[i].refresh
  684.       $game_allies[i].moveto(allies[i-1].x, allies[i-1].y)
  685.       if !allies[i-1].is_a?(Game_Player)
  686.         $game_allies[i].map_id = allies[i-1].map_id
  687.       else
  688.         $game_allies[i].map_id = $game_map.map_id
  689.       end
  690.       $game_allies[i].direction = allies[i-1].direction
  691.     end
  692.     $game_player.moveto(ally.x, ally.y)
  693.     $game_player.refresh
  694.     $scene.refresh_sprites if $scene.is_a?(Scene_Map)
  695.   end
  696.  
  697. end
  698.  
  699. #------------------------------------------------------------------------------
  700. # Game Map
  701. #------------------------------------------------------------------------------
  702. class Game_Map
  703.  
  704.   alias requiem_abs_gmap_passable passable?
  705.   alias requiem_abs_gmap_setup_events setup_events
  706.  
  707.   def setup_events
  708.     requiem_abs_gmap_setup_events
  709.     $game_monsters.clear
  710.     for area in $data_areas.values
  711.       next unless area.map_id == @map_id
  712.       for i in area.encounter_list
  713.         for m in $data_troops[i].members
  714.           $game_monsters.push(Game_Monster.new($game_monsters.size, m.enemy_id, m.id, area))
  715.         end
  716.       end
  717.     end
  718.     for i in encounter_list
  719.       for m in $data_troops[i].members
  720.         $game_monsters.push(Game_Monster.new($game_monsters.size, m.enemy_id, m.id, nil))
  721.       end
  722.     end
  723.   end
  724.  
  725.   def range_passable?(x, y, flag = 0x01)
  726.     return true if @passages[@map.data[x, y, 0]] == 9
  727.     passable?(x, y, flag)
  728.   end
  729.  
  730.   def player_passable?(x, y, flag = 0x01)
  731.     all_passable?(x, y, flag)
  732.   end
  733.  
  734.   def passable?(x, y, flag = 0x01)
  735.     for ally in $game_allies
  736.       next if ally.nil? or ally.character_name == ""
  737.       return false if ally.x == x and ally.y == y
  738.     end
  739.     all_passable?(x, y, flag)
  740.   end
  741.  
  742.   def all_passable?(x, y, flag = 0x01)
  743.     for monster in $game_monsters
  744.       next if monster.nil?
  745.       next if monster.actor.dead?
  746.       return false if monster.x == x and monster.y == y
  747.     end
  748.     for drop in $game_drop
  749.       next if drop.nil?
  750.       next if $Requiem_ABS.through_drop
  751.       return false if drop.x == x and drop.y == y
  752.     end
  753.     for event in events_xy(x, y)
  754.       next if event.tile_id == 0
  755.       next if event.priority_type > 0
  756.       next if event.through
  757.       pass = @passages[event.tile_id]
  758.       next if pass & 0x10 == 0x10
  759.       return true if pass & flag == 0x00
  760.       return false if pass & flag == flag
  761.     end
  762.     for i in [2, 1, 0]
  763.       tile_id = @map.data[x, y, i]
  764.       return false if tile_id == nil
  765.       pass = @passages[tile_id]
  766.       next if pass & 0x10 == 0x10
  767.       return true if pass & flag == 0x00
  768.       return false if pass & flag == flag
  769.     end
  770.     return false
  771.   end
  772.  
  773.   def update_events
  774.     for event in @events.values
  775.       next unless in_range?(event) or event.trigger == 3 or event.trigger == 4
  776.       event.update
  777.     end
  778.     for common_event in @common_events.values
  779.       common_event.update
  780.     end
  781.   end
  782.  
  783.   def in_range?(object)
  784.     return true if object.is_a?(Game_Event) and object.check_comment("Force Update")
  785.     return false if object.real_x < (@display_x-Graphics.width)
  786.     return false if object.real_x > (@display_x+(Graphics.width*10))
  787.     return false if object.real_y < (@display_y-Graphics.width)
  788.     return false if object.real_y > (@display_y+(Graphics.height*10))
  789.     return true
  790.   end
  791.  
  792. end
  793.  
  794. #------------------------------------------------------------------------------
  795. # Game Character
  796. #------------------------------------------------------------------------------
  797. class Game_Character
  798.  
  799.   alias requiem_abs_gchar_initialize initialize
  800.   alias requiem_abs_gchar_update update
  801.  
  802.   attr_accessor :actor
  803.   attr_accessor :target
  804.   attr_accessor :ani_time
  805.   attr_accessor :state_time
  806.   attr_accessor :weapon1_attack_time
  807.   attr_accessor :weapon2_attack_time
  808.   attr_accessor :assigned_skill
  809.   attr_accessor :skill_attack_time
  810.   attr_accessor :item_attack_time
  811.   attr_accessor :recovery_time
  812.   attr_accessor :right_attack_on
  813.   attr_accessor :left_attack_on
  814.   attr_accessor :freeze
  815.   attr_accessor :anime_attack
  816.   attr_accessor :lock_target
  817.   attr_accessor :original_move_speed
  818.  
  819.   def initialize
  820.     requiem_abs_gchar_initialize
  821.     @weapon1_attack_time = 0
  822.     @weapon2_attack_time = 0
  823.     @skill_attack_time = 0
  824.     @item_attack_time = 0
  825.     @recovery_time = 0
  826.     @assigned_skill = nil
  827.     @ani_time = 0
  828.     @anime_attack = 0
  829.     @state_time = 0
  830.     @original_move_speed = 0
  831.     @actor = nil
  832.     @target = nil
  833.     @freeze = false
  834.     @right_attack_on = false
  835.     @left_attack_on = false
  836.     @lock_target = false
  837.   end
  838.  
  839.   def update
  840.     requiem_abs_gchar_update
  841.     return if $game_party.members.size <= 0
  842.     decrease_counters
  843.     states_effects
  844.   end
  845.  
  846.   def decrease_counters
  847.     @ani_time -= 1 if @ani_time > 0
  848.     @weapon1_attack_time -= 1 if @weapon1_attack_time > 0
  849.     @weapon2_attack_time -= 1 if @weapon2_attack_time > 0
  850.     @skill_attack_time -= 1 if @skill_attack_time > 0
  851.     @item_attack_time -= 1 if @item_attack_time > 0
  852.     @recovery_time -= 1 if @recovery_time > 0
  853.     @anime_attack -= 1 if @anime_attack > 0
  854.     @right_attack_on = @left_attack_on = false if @anime_attack <= 0
  855.   end
  856.  
  857.   def states_effects
  858.     if self.is_a?(Game_Event) and self.in_battle or self.is_a?(Game_Player) or self.is_a?(Game_Ally)
  859.       for state in @actor.states
  860.         next if state.nil?
  861.         if @state_time <= state.duration
  862.           @state_time += 1
  863.           @freeze = true if state.dont_walk?
  864.           @move_speed = 2 if state.walk_slower?
  865.           @move_speed = 5 if state.walk_faster?
  866.           if self.is_a?(Game_Event) and @actor.slip_damage?
  867.             @actor.slip_damage_effect if Graphics.frame_count % 60 <= 0
  868.           end
  869.         elsif @state_time > state.duration
  870.           @freeze = false if state.dont_walk?
  871.           @move_speed = @original_move_speed if state.walk_slower?
  872.           @move_speed = @original_move_speed if state.walk_faster?
  873.           @actor.remove_state(state.id)
  874.           @state_time = 0
  875.         end
  876.       end
  877.     end
  878.   end
  879.  
  880. end
  881.  
  882. #------------------------------------------------------------------------------
  883. # Game Event
  884. #------------------------------------------------------------------------------
  885. class Game_Event < Game_Character
  886.  
  887.   attr_reader :in_battle
  888.   attr_reader :kill_with_weapon
  889.   attr_reader :kill_with_skill
  890.   attr_reader :kill_with_item
  891.   attr_reader :respawn
  892.   attr_reader :boss
  893.   attr_reader :object
  894.   attr_reader :puzzle
  895.  
  896.   alias requiem_abs_gevent_initialize initialize
  897.   alias requiem_abs_gevent_setup setup
  898.   alias requiem_abs_gevent_update update
  899.   alias requiem_abs_gevent_refresh refresh
  900.  
  901.   def initialize(map_id, event)
  902.     @enemy_id = 0
  903.     @respawn = nil
  904.     @in_battle = false
  905.     @boss = false
  906.     @object = false
  907.     @puzzle = false
  908.     requiem_abs_gevent_initialize(map_id, event)
  909.   end
  910.  
  911.   def setup(new_page)
  912.     requiem_abs_gevent_setup(new_page)
  913.     self.original_move_speed = @move_speed
  914.   end
  915.  
  916.   def update
  917.     requiem_abs_gevent_update
  918.     @respawn -= 1 if !@in_battle and self.actor.nil? and @respawn != nil and @respawn > 0
  919.     if @in_battle and self.actor != nil and !self.actor.dead?
  920.       make_attack
  921.     elsif @in_battle and self.actor != nil and self.actor.dead?
  922.       kill_enemy
  923.       erasing
  924.     elsif !@in_battle and self.actor.nil? and @respawn != nil and @respawn <= 0
  925.       @erased = @starting = false
  926.       refresh
  927.     end
  928.   end
  929.  
  930.   def refresh
  931.     requiem_abs_gevent_refresh
  932.     @enemy_id = check_value("Enemy")
  933.     @erase = check_comment("Die Erase")
  934.     @self_switch_a = check_comment("Die Self Switch A")
  935.     @self_switch_b = check_comment("Die Self Switch B")
  936.     @self_switch_c = check_comment("Die Self Switch C")
  937.     @self_switch_d = check_comment("Die Self Switch D")
  938.     @switch = check_value("Die Switch")
  939.     @variable = check_value("Die Variable")
  940.     @kill_with_weapon = check_value("Kill With Weapon")
  941.     @kill_with_skill = check_value("Kill With Skill")
  942.     @kill_with_item = check_value("Kill With Item")
  943.     @boss = check_comment("Boss")
  944.     @object = check_comment("Object")
  945.     @puzzle = check_comment("Puzzle")
  946.     if @enemy_id > 0 and !@in_battle
  947.       self.actor = Game_Enemy.new(0, @enemy_id)
  948.       self.actor.recover_all
  949.       @respawn = self.actor.respawn
  950.       @respawn = nil if @respawn <= 0
  951.       @follow_range = self.actor.follow_range
  952.       self.actor.piece = self
  953.       self.target = $game_player
  954.       self.lock_target = false
  955.       @in_battle = true
  956.     elsif @enemy_id <= 0
  957.       @in_battle = false
  958.     end
  959.     @opacity = 255
  960.     @blend_type = 0
  961.   end
  962.  
  963.   def make_attack
  964.     return if $game_map.interpreter.running?
  965.     return if $game_player.in_vehicle?
  966.     for action in $data_enemies[@enemy_id].actions
  967.       next unless self.actor.conditions_met?(action)
  968.       next unless rand(11) < action.rating
  969.       next if self.weapon1_attack_time > 0
  970.       case action.kind
  971.       when 0      
  972.         case action.basic
  973.         when 0
  974.           attack_normal
  975.         when 1
  976.           self.actor.defending = true
  977.         end
  978.       when 1
  979.         self.assigned_skill = $data_skills[action.skill_id]
  980.         case self.assigned_skill.scope
  981.         when 1..7
  982.           if self.assigned_skill.ranged?
  983.             if in_direction?(self, $game_player) and in_range?(self, $game_player, self.assigned_skill.range)
  984.               skill_attack_range
  985.             elsif action.rating == 10
  986.               skill_attack_range
  987.             else
  988.               for ally in $game_allies
  989.                 next if ally.nil?
  990.                 next unless in_direction?(self, ally) and in_range?(self, ally, self.assigned_skill.range)
  991.                 skill_attack_range
  992.               end
  993.             end
  994.           elsif self.assigned_skill.explosive?
  995.             if in_direction?(self, $game_player) and in_range?(self, $game_player, self.assigned_skill.range)
  996.               skill_explode_range
  997.             elsif action.rating == 10
  998.               skill_explode_range
  999.             else
  1000.               for ally in $game_allies
  1001.                 next if ally.nil?
  1002.                 next unless in_direction?(self, ally) and in_range?(self, ally, self.assigned_skill.range)
  1003.                 skill_explode_range
  1004.               end
  1005.             end
  1006.           else
  1007.              skill_attack_normal
  1008.            end
  1009.         when 7..12
  1010.           skill_recover
  1011.         end
  1012.       end
  1013.     end
  1014.   end
  1015.  
  1016.   def attack_normal
  1017.     for ally in $game_allies
  1018.       next if ally.nil?
  1019.       next unless in_front?(self, ally)
  1020.       self.anime_attack = 20
  1021.       ally.animation_id = self.actor.atk_animation_id
  1022.       ally.actor.attack_effect(self.actor)
  1023.       ally.jump(0,0)
  1024.       self.weapon1_attack_time = 90
  1025.       return
  1026.     end
  1027.     return if $game_player.actor.nil?
  1028.     return unless in_front?(self, $game_player)
  1029.     self.anime_attack = 20
  1030.     $game_player.animation_id = self.actor.atk_animation_id
  1031.     $game_player.actor.attack_effect(self.actor)
  1032.     $game_player.jump(0,0)
  1033.     self.weapon1_attack_time = 90
  1034.   end
  1035.  
  1036.   def skill_attack_normal
  1037.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  1038.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1039.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1040.     for ally in $game_allies
  1041.       next if ally.nil?
  1042.       next unless in_front?(self, ally)
  1043.       ally.animation_id = self.assigned_skill.animation_id
  1044.       ally.actor.skill_effect(self.actor, self.assigned_skill)
  1045.       ally.jump(0,0)
  1046.       self.weapon1_attack_time = 90
  1047.       return
  1048.     end
  1049.     return if $game_player.actor.nil?
  1050.     return unless in_front?(self, $game_player)
  1051.     $game_player.animation_id = self.assigned_skill.animation_id
  1052.     $game_player.actor.skill_effect(self.actor, self.assigned_skill)
  1053.     $game_player.jump(0,0)
  1054.     self.weapon1_attack_time = 90
  1055.   end
  1056.  
  1057.   def skill_attack_range
  1058.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  1059.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1060.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1061.     $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
  1062.     self.weapon1_attack_time = self.assigned_skill.delay
  1063.     RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  1064.   end
  1065.  
  1066.   def skill_explode_range
  1067.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  1068.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1069.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1070.     $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
  1071.     self.weapon1_attack_time = self.assigned_skill.delay
  1072.     RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  1073.   end
  1074.  
  1075.   def skill_recover
  1076.     if self.actor.mp >= self.assigned_skill.mp_cost and self.actor.hp <= (self.actor.maxhp*25/100)
  1077.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1078.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1079.       @animation_id = self.assigned_skill.animation_id
  1080.       self.actor.skill_effect(self.actor, self.assigned_skill)
  1081.       self.weapon1_attack_time = 90
  1082.     end
  1083.     for event in $game_map.events.values
  1084.       if event.in_battle and in_range?(self, event, 3)
  1085.         if self.actor.mp >= self.assigned_skill.mp_cost and event.actor.hp <= (event.actor.maxhp*25/100)
  1086.           self.actor.mp -= self.assigned_skill.mp_cost
  1087.           $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1088.           event.animation_id = self.assigned_skill.animation_id
  1089.           event.actor.skill_effect(self.actor, self.assigned_skill)
  1090.           self.weapon1_attack_time = 90
  1091.         end
  1092.       end
  1093.     end
  1094.   end
  1095.  
  1096.   def erasing
  1097.     return if @puzzle
  1098.     @blend_type = 2
  1099.     @opacity -= 5
  1100.   end
  1101.  
  1102.   def kill_enemy
  1103.     dying unless @killed
  1104.     return if @opacity > 0 and !@puzzle
  1105.     self.actor = nil
  1106.     desactive_enemy
  1107.     @killed = false
  1108.     $game_player.hits = 0
  1109.     @in_battle = false
  1110.     for ally in $game_allies
  1111.       next if ally.nil? or ally.actor.dead?
  1112.       ally.target = $game_player
  1113.       ally.lock_target = false
  1114.     end
  1115.   end
  1116.  
  1117.   def dying
  1118.     if $Requiem_ABS.auto_exp_e_gold and !@puzzle and !@object
  1119.       exp = (self.actor.maxhp+self.actor.maxmp+self.actor.atk+self.actor.def+self.actor.spi+
  1120.       self.actor.agi+self.actor.hit+self.actor.eva) * $Requiem_ABS.auto_exp_rate / 100
  1121.     else
  1122.       exp = self.actor.exp
  1123.     end
  1124.     if $Requiem_ABS.divide_exp
  1125.       x = (exp/$game_party.members.size)
  1126.       for i in $game_party.members
  1127.         i.gain_exp(x, true)
  1128.       end
  1129.     else
  1130.       self.target.actor.gain_exp(exp, true)
  1131.     end
  1132.     make_drop
  1133.     unless @puzzle
  1134.       @animation_id = self.actor.die_animation_id if self.actor.die_animation_id > 0
  1135.       if self.actor.die_se != nil
  1136.         RPG::SE.new(self.actor.die_se).play
  1137.       else
  1138.         Sound.play_enemy_collapse
  1139.       end
  1140.     end
  1141.     @killed = true
  1142.   end
  1143.  
  1144.   def desactive_enemy
  1145.     if @erase
  1146.       erase
  1147.     elsif @self_switch_a
  1148.       key = [$game_map.map_id, self.id, "A"]
  1149.       $game_self_switches[key] = !$game_self_switches[key]
  1150.     elsif @self_switch_b
  1151.       key = [$game_map.map_id, self.id, "B"]
  1152.       $game_self_switches[key] = !$game_self_switches[key]
  1153.     elsif @self_switch_c
  1154.       key = [$game_map.map_id, self.id, "C"]
  1155.       $game_self_switches[key] = !$game_self_switches[key]
  1156.     elsif @self_switch_d
  1157.       key = [$game_map.map_id, self.id, "D"]
  1158.       $game_self_switches[key] = !$game_self_switches[key]
  1159.     elsif @switch > 0
  1160.       $game_switches[@switch] = !$game_switches[@switch]
  1161.     elsif @variable > 0
  1162.       $game_variables[@variable] += 1
  1163.     end
  1164.     $game_map.need_refresh = true
  1165.   end
  1166.  
  1167.   def make_drop
  1168.     droped_items = []
  1169.     for i in [self.actor.drop_item1, self.actor.drop_item2]
  1170.       next if i.kind <= 0
  1171.       next if rand(i.denominator) != 0
  1172.       if i.kind == 1
  1173.         droped_items.push($data_items[i.item_id])
  1174.       elsif i.kind == 2
  1175.         droped_items.push($data_weapons[i.weapon_id])
  1176.       elsif i.kind == 3
  1177.         droped_items.push($data_armors[i.armor_id])
  1178.       end
  1179.     end
  1180.     for t in droped_items
  1181.       next if t.nil?
  1182.       $game_drop.push(Game_Drop.new(self, t.icon_index, t , 0))
  1183.     end
  1184.     if $Requiem_ABS.auto_exp_e_gold
  1185.       gold = (self.actor.maxhp+self.actor.maxmp+self.actor.atk+self.actor.def+self.actor.spi+
  1186.       self.actor.agi+self.actor.hit+self.actor.eva) * $Requiem_ABS.auto_gold_rate / 100
  1187.     else
  1188.       gold = self.actor.gold
  1189.     end
  1190.     if gold > 0 and rand(100) <= $Requiem_ABS.gold_drop_rate
  1191.       $game_drop.push(Game_Drop.new(self, $Requiem_ABS.gold_drop_icon_index, nil, gold))
  1192.     end
  1193.   end
  1194.  
  1195.   def update_self_movement
  1196.     return if self.freeze or (self.anime_attack/2) > 0
  1197.     return unless @stop_count > 30 * (5 - @move_frequency)
  1198.     if @in_battle and in_range?(self, $game_player, @follow_range) and !self.lock_target
  1199.       self.target = $game_player
  1200.       self.lock_target = true
  1201.     end
  1202.     for ally in $game_allies
  1203.       next if ally.nil?
  1204.       if @in_battle and in_range?(self, ally, @follow_range) and !ally.actor.dead? and !self.lock_target
  1205.         self.target = ally
  1206.         self.lock_target = true
  1207.       elsif self.target == ally and ally.actor.dead? and self.lock_target
  1208.         self.target = nil
  1209.         self.lock_target = false
  1210.       end
  1211.     end
  1212.     if self.target != nil and @in_battle and in_range?(self, self.target, @follow_range)
  1213.       move_type_toward(self.target)
  1214.     else
  1215.       case @move_type
  1216.       when 1
  1217.         move_type_random
  1218.       when 2
  1219.         move_type_toward_player
  1220.       when 3
  1221.         move_type_custom
  1222.       end
  1223.     end
  1224.   end
  1225.  
  1226. end
  1227.  
  1228. #------------------------------------------------------------------------------
  1229. # Game Player
  1230. #------------------------------------------------------------------------------
  1231. class Game_Player < Game_Character
  1232.  
  1233.   attr_accessor :hit
  1234.   attr_accessor :hits
  1235.   attr_accessor :hit_time
  1236.   attr_accessor :assigned_item
  1237.   attr_accessor :reward
  1238.  
  1239.   alias requiem_abs_gplayer_initialize initialize
  1240.   alias requiem_abs_gplayer_refresh refresh
  1241.   alias requiem_abs_gplayer_update update
  1242.   alias requiem_abs_gplayer_move_by_input move_by_input
  1243.   alias requiem_abs_gplayer_perform_transfer perform_transfer
  1244.  
  1245.   def initialize
  1246.     requiem_abs_gplayer_initialize
  1247.     @hits = 0
  1248.     @hit_time = 0
  1249.     @assigned_item = 0
  1250.     @hit = nil
  1251.     @reward = nil
  1252.     self.original_move_speed = 4
  1253.   end
  1254.  
  1255.   def refresh
  1256.     self.actor = $game_party.members[0]
  1257.     self.actor.piece = self unless self.actor.nil?
  1258.     requiem_abs_gplayer_refresh
  1259.   end
  1260.  
  1261.   def update
  1262.     requiem_abs_gplayer_update
  1263.     return if self.actor.nil?
  1264.     return if $game_map.interpreter.running?
  1265.     return if in_vehicle?
  1266.     attack_with_weapon
  1267.     attack_with_skill
  1268.     attack_with_item
  1269.     auto_recovery
  1270.     update_hits
  1271.     if $Requiem_ABS.next_actor_if_dead
  1272.       $game_temp.next_scene = "gameover" if $game_party.all_dead?
  1273.       $game_party.change_group_order if self.actor.dead? and !$game_party.all_dead?
  1274.     elsif self.actor.dead?
  1275.       $game_temp.next_scene = "gameover"
  1276.     end
  1277.     if Input.trigger?(Input::Tab) and !Input.press?(Input::CTRL) and $Requiem_ABS.change_group_order
  1278.       $game_party.change_group_order
  1279.     end
  1280.   end
  1281.  
  1282.   def hit_count
  1283.     return unless $Requiem_ABS.allow_combo_damage
  1284.     @hits += 1
  1285.     @hit = "#{@hits}"
  1286.   end
  1287.  
  1288.   def update_hits
  1289.     if self.right_attack_on and @attack_weapon != nil
  1290.       @hits = 0 if @hit_time <= 0 or @hits >= @attack_weapon.combo_hits
  1291.     elsif self.left_attack_on and @attack_weapon_and_Shield != nil
  1292.       @hits = 0 if @hit_time <= 0 or @hits >= @attack_weapon_and_Shield.combo_hits
  1293.     elsif self.right_attack_on and @attack_weapon.nil?
  1294.       @hits = 0 if @hit_time <= 0 or @hits >= 5
  1295.     elsif self.left_attack_on and @attack_weapon_and_Shield.nil?
  1296.       @hits = 0 if @hit_time <= 0 or @hits >= 5
  1297.     end
  1298.     @hit_time -= 1 if @hit_time > 0
  1299.   end
  1300.  
  1301.   def attack_with_weapon
  1302.     if Input.trigger?(Input::Letters[$Requiem_ABS.attack_key1])
  1303.       return if !$Requiem_ABS.allow_attack_with_shield and self.actor.defending
  1304.       return if self.weapon1_attack_time > 0
  1305.       @attack_weapon = self.actor.equips[0]
  1306.       RPG::SE.new(@attack_weapon.shot_se).play if @attack_weapon != nil and @attack_weapon.shot_se != nil
  1307.       self.anime_attack = 20
  1308.       self.right_attack_on = true
  1309.       self.left_attack_on = false
  1310.       if @attack_weapon != nil and @attack_weapon.ranged?
  1311.         range_attack_right
  1312.         self.weapon1_attack_time = @attack_weapon.delay
  1313.         @hit_time = self.weapon1_attack_time + 15
  1314.       else
  1315.         normal_attack_right
  1316.         self.weapon1_attack_time = 60
  1317.         @hit_time = self.weapon1_attack_time + 15
  1318.       end
  1319.     end
  1320.     if Input.press?(Input::Letters[$Requiem_ABS.attack_key2])
  1321.       self.actor.defending = (self.actor.equips[1].is_a?(RPG::Armor) and $Requiem_ABS.allow_shields_graphics)
  1322.     else
  1323.       self.actor.defending = false
  1324.     end
  1325.     if Input.trigger?(Input::Letters[$Requiem_ABS.attack_key2])
  1326.       return if self.weapon2_attack_time > 0
  1327.       return if !$Requiem_ABS.allow_attack_with_shield and self.actor.defending
  1328.       @attack_weapon_and_Shield = (self.actor.two_swords_style ? self.actor.equips[1] : self.actor.equips[0])
  1329.       RPG::SE.new(@attack_weapon_and_Shield.shot_se).play if @attack_weapon_and_Shield != nil and @attack_weapon_and_Shield.shot_se != nil
  1330.       self.anime_attack = 20
  1331.       self.right_attack_on = false
  1332.       self.left_attack_on = true
  1333.       if @attack_weapon_and_Shield != nil and @attack_weapon_and_Shield.ranged?
  1334.         range_attack_left
  1335.         self.weapon2_attack_time = 60
  1336.         @hit_time = self.weapon2_attack_time + 15
  1337.       elsif self.actor.two_swords_style
  1338.         normal_attack_left
  1339.         self.weapon2_attack_time = @attack_weapon_and_Shield.delay
  1340.         @hit_time = self.weapon1_attack_time + 15
  1341.       end
  1342.     end
  1343.   end
  1344.  
  1345.   def attack_with_skill
  1346.     for button in self.actor.skill_hotkeys.keys
  1347.       if Input.trigger?(button) and self.actor.skill_hotkeys[button] != nil and self.actor.skill_hotkeys[button] != 0
  1348.         return if self.skill_attack_time > 0
  1349.         return if !$Requiem_ABS.allow_attack_with_shield and self.actor.defending
  1350.         self.assigned_skill = $data_skills[self.actor.skill_hotkeys[button]]
  1351.         if self.assigned_skill.scope == 2
  1352.           skill_attack_all
  1353.         elsif self.assigned_skill.ranged?
  1354.           skill_attack_range
  1355.         elsif self.assigned_skill.explosive?
  1356.           skill_explode_range
  1357.         elsif self.assigned_skill.scope >= 7
  1358.           skill_recover
  1359.         else
  1360.           skill_attack_normal
  1361.         end
  1362.       end
  1363.     end
  1364.   end
  1365.  
  1366.   def attack_with_item
  1367.     for button in self.actor.item_hotkeys.keys
  1368.       if Input.trigger?(button) and self.actor.item_hotkeys[button] != nil and self.actor.item_hotkeys[button] != 0
  1369.         return if self.item_attack_time > 0
  1370.         return if !$Requiem_ABS.allow_attack_with_shield and self.actor.defending
  1371.         @assigned_item = $data_items[self.actor.item_hotkeys[button]]
  1372.         if @assigned_item.ranged?
  1373.           item_attack_range
  1374.         elsif @assigned_item.explosive?
  1375.           item_attack_explode
  1376.         elsif  @assigned_item.bomb?
  1377.           item_attack_bomb
  1378.         else
  1379.           case @assigned_item.scope
  1380.           when 1
  1381.             item_normal_attack
  1382.           when 2
  1383.             item_attack_all
  1384.           when 3...7
  1385.             item_normal_attack
  1386.           when 7...12
  1387.             item_recover
  1388.           end
  1389.         end
  1390.       end
  1391.     end
  1392.   end
  1393.  
  1394.   def normal_attack_right
  1395.     for monster in $game_monsters
  1396.       next if monster.nil?
  1397.       next unless in_front?(self, monster)
  1398.       next if monster.actor.dead?
  1399.       monster.animation_id = self.actor.atk_animation_id
  1400.       hit_count
  1401.       monster.actor.attack_effect(self.actor)
  1402.       monster.jump(0,0)
  1403.       monster.target = self
  1404.     end
  1405.     for event in $game_map.events.values
  1406.       next unless event.in_battle
  1407.       next unless in_front?(self, event)
  1408.       next if event.actor.dead? or event.object
  1409.       event.animation_id = self.actor.atk_animation_id
  1410.       hit_count
  1411.       return if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon.id or
  1412.       event.kill_with_skill > 0 or event.kill_with_item > 0
  1413.       event.actor.attack_effect(self.actor)
  1414.       event.jump(0,0) unless event.puzzle
  1415.       event.target = self
  1416.     end
  1417.   end
  1418.  
  1419.   def range_attack_right
  1420.     return if @attack_weapon.ammo1 != nil and !$game_party.has_item?(@attack_weapon.ammo1)
  1421.     $game_party.consume_item(@attack_weapon.ammo1) if @attack_weapon.ammo1 != nil
  1422.     $game_range.push(Game_Range.new(self, @attack_weapon.graphic, @attack_weapon.index, @attack_weapon.move_speed, @attack_weapon.range, 1))
  1423.   end
  1424.  
  1425.   def normal_attack_left
  1426.     for monster in $game_monsters
  1427.       next if monster.nil?
  1428.       next unless in_front?(self, monster)
  1429.       next if monster.actor.dead?
  1430.       monster.animation_id = self.actor.atk_animation_id2
  1431.       hit_count
  1432.       monster.actor.attack_effect(self.actor)
  1433.       monster.jump(0,0)
  1434.       monster.target = self
  1435.     end
  1436.     for event in $game_map.events.values
  1437.       next unless event.in_battle
  1438.       next unless in_front?(self,event)
  1439.       next if event.actor.dead? or event.object
  1440.       event.animation_id = self.actor.atk_animation_id2
  1441.       hit_count
  1442.       return if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon_and_Shield.id or
  1443.       event.kill_with_skill > 0 or event.kill_with_item > 0
  1444.       event.actor.attack_effect(self.actor)
  1445.       event.jump(0,0) unless event.puzzle
  1446.       event.target = self
  1447.     end
  1448.   end
  1449.  
  1450.   def range_attack_left
  1451.     return if @attack_weapon_and_Shield.ammo2 != nil and !$game_party.has_item?(@attack_weapon_and_Shield.ammo2)
  1452.     $game_party.consume_item(@attack_weapon_and_Shield.ammo2) if @attack_weapon_and_Shield.ammo2 != nil
  1453.     $game_range.push(Game_Range.new(self, @attack_weapon_and_Shield.graphic, @attack_weapon_and_Shield.index, @attack_weapon_and_Shield.move_speed, @attack_weapon_and_Shield.range, 2))
  1454.   end
  1455.  
  1456.   def skill_attack_normal
  1457.     for monster in $game_monsters
  1458.       next if monster.nil?
  1459.       next unless in_front?(self, monster)
  1460.       next if monster.actor.dead?
  1461.       next unless self.actor.mp >= self.assigned_skill.mp_cost
  1462.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1463.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1464.       monster.animation_id = self.assigned_skill.animation_id
  1465.       self.skill_attack_time = self.assigned_skill.delay
  1466.       monster.actor.skill_effect(self.actor, self.assigned_skill)
  1467.       monster.jump(0,0)
  1468.       monster.target = self
  1469.     end
  1470.     for event in $game_map.events.values
  1471.       next unless event.in_battle
  1472.       next unless in_front?(self,event)
  1473.       next if event.actor.dead? or event.object
  1474.       next unless self.actor.mp >= self.assigned_skill.mp_cost
  1475.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1476.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1477.       event.animation_id = self.assigned_skill.animation_id
  1478.       self.skill_attack_time = self.assigned_skill.delay
  1479.       return if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
  1480.       event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
  1481.       event.actor.skill_effect(self.actor, self.assigned_skill)
  1482.       event.jump(0,0) unless event.puzzle
  1483.       event.target = self
  1484.     end
  1485.   end
  1486.  
  1487.   def skill_attack_range
  1488.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  1489.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1490.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1491.     $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
  1492.     RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  1493.     self.skill_attack_time = self.assigned_skill.delay
  1494.   end
  1495.  
  1496.   def skill_attack_all
  1497.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  1498.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1499.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1500.     for monster in $game_monsters
  1501.       next if monster.nil?
  1502.       next if monster.actor.dead?
  1503.       monster.animation_id = self.assigned_skill.animation_id
  1504.       self.skill_attack_time = self.assigned_skill.delay
  1505.       monster.actor.skill_effect(self.actor, self.assigned_skill)
  1506.       monster.jump(0,0)
  1507.       monster.target = self
  1508.     end
  1509.     for event in $game_map.events.values
  1510.       next unless event.in_battle
  1511.       next if event.actor.dead? or event.object
  1512.       event.animation_id = self.assigned_skill.animation_id
  1513.       self.skill_attack_time = self.assigned_skill.delay
  1514.       return if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
  1515.       event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
  1516.       event.actor.skill_effect(self.actor, self.assigned_skill)
  1517.       event.jump(0,0) unless event.puzzle
  1518.       event.target = self
  1519.     end
  1520.   end
  1521.  
  1522.   def skill_explode_range
  1523.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  1524.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1525.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1526.     $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
  1527.     RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  1528.     self.skill_attack_time = self.assigned_skill.delay
  1529.   end
  1530.  
  1531.   def skill_recover
  1532.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  1533.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1534.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1535.     self.actor.skill_effect(self.actor, self.assigned_skill)
  1536.     @animation_id = self.assigned_skill.animation_id
  1537.     self.skill_attack_time = 60
  1538.   end
  1539.  
  1540.   def item_normal_attack
  1541.     for monster in $game_monsters
  1542.       next if monster.nil?
  1543.       next unless in_front?(self, monster)
  1544.       next if monster.actor.dead?
  1545.       next unless $game_party.has_item?(@assigned_item)
  1546.       $game_party.consume_item(@assigned_item)
  1547.       $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
  1548.       monster.animation_id = @assigned_item.animation_id
  1549.       self.item_attack_time = @assigned_item.delay
  1550.       monster.actor.item_effect(self.actor, @assigned_item)
  1551.       monster.jump(0,0)
  1552.       monster.target = self
  1553.     end
  1554.     for event in $game_map.events.values
  1555.       next unless event.in_battle
  1556.       next unless in_front?(self,event)
  1557.       next if event.actor.dead? or event.object
  1558.       next unless $game_party.has_item?(@assigned_item)
  1559.       $game_party.consume_item(@assigned_item)
  1560.       $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
  1561.       event.animation_id = @assigned_item.animation_id
  1562.       self.item_attack_time = @assigned_item.delay
  1563.       return if event.kill_with_weapon > 0 or event.kill_with_skill > 0 or
  1564.       event.kill_with_item > 0 and event.kill_with_item != self.assigned_item.id
  1565.       event.actor.item_effect(self.actor, @assigned_item)
  1566.       event.jump(0,0) unless event.puzzle
  1567.       event.target = self
  1568.     end
  1569.   end
  1570.  
  1571.   def item_attack_range
  1572.     return unless $game_party.has_item?(@assigned_item)
  1573.     $game_party.consume_item(@assigned_item)
  1574.     $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
  1575.     $game_range.push(Game_Range.new(self, @assigned_item.graphic, @assigned_item.index, @assigned_item.move_speed, @assigned_item.range, 5))
  1576.     RPG::SE.new(@assigned_item.shot_se).play if @assigned_item.shot_se != nil
  1577.     self.item_attack_time = @assigned_item.delay
  1578.   end
  1579.  
  1580.   def item_attack_explode
  1581.     return unless $game_party.has_item?(@assigned_item)
  1582.     $game_party.consume_item(@assigned_item)
  1583.     $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
  1584.     $game_range.push(Game_Range.new(self, @assigned_item.graphic, @assigned_item.index, @assigned_item.move_speed, @assigned_item.range, 6))
  1585.     RPG::SE.new(@assigned_item.shot_se).play if @assigned_item.shot_se != nil
  1586.     self.item_attack_time = @assigned_item.delay
  1587.   end
  1588.  
  1589.   def item_recover
  1590.     return unless $game_party.has_item?(@assigned_item)
  1591.     $game_party.consume_item(@assigned_item)
  1592.     $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
  1593.     @animation_id = @assigned_item.animation_id
  1594.     self.actor.item_effect(self.actor, @assigned_item)
  1595.     self.item_attack_time = @assigned_item.delay
  1596.   end
  1597.  
  1598.   def item_attack_all
  1599.     next unless $game_party.has_item?(@assigned_item)
  1600.     $game_party.consume_item(@assigned_item)
  1601.     $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
  1602.     for monster in $game_monsters
  1603.       next if monster.nil?
  1604.       next unless in_front?(self, monster)
  1605.       next if monster.actor.dead?
  1606.       $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
  1607.       monster.animation_id = @assigned_item.animation_id
  1608.       self.item_attack_time = @assigned_item.delay
  1609.       monster.actor.item_effect(self.actor, @assigned_item)
  1610.       monster.jump(0,0)
  1611.       monster.target = self
  1612.     end
  1613.     for event in $game_map.events.values
  1614.       next unless event.in_battle
  1615.       next if event.actor.dead? or event.object
  1616.       event.animation_id = @assigned_item.animation_id
  1617.       self.item_attack_time = @assigned_item.delay
  1618.       return if event.kill_with_weapon > 0 or event.kill_with_skill > 0 or
  1619.       event.kill_with_item > 0 and event.kill_with_item != self.assigned_item.id
  1620.       event.actor.item_effect(self.actor, @assigned_item)
  1621.       event.jump(0,0) unless event.puzzle
  1622.       event.target = self
  1623.     end
  1624.   end
  1625.  
  1626.   def item_attack_bomb
  1627.     return unless $game_party.has_item?(@assigned_item)
  1628.     $game_party.consume_item(@assigned_item)
  1629.     $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
  1630.     $game_bomb.push(Game_Bomb.new(self, @assigned_item))
  1631.     self.item_attack_time = 60
  1632.   end
  1633.  
  1634.   def auto_recovery
  1635.     return unless self.actor.auto_hp_recover and self.recovery_time <= 0
  1636.     self.actor.hp += (self.actor.maxhp*10/100)
  1637.     self.recovery_time = 1800
  1638.   end
  1639.  
  1640.   def perform_transfer
  1641.     requiem_abs_gplayer_perform_transfer
  1642.     for range in $game_range
  1643.       next if range.nil?
  1644.       range.destroy = true
  1645.     end
  1646.     for drop in $game_drop
  1647.       next if drop.nil?
  1648.       drop.destroy = true
  1649.     end
  1650.     for bomb in $game_bomb
  1651.       next if bomb.nil?
  1652.       bomb.destroy = true
  1653.     end
  1654.     for ally in $game_allies
  1655.       next if ally.nil?
  1656.       unless ally.actor.dead? or (ally.actor.defending and !$Requiem_ABS.trasfer_when_defending)
  1657.         ally.perform_transfer(@new_map_id, @new_x, @new_y, @new_direction)
  1658.       end
  1659.       ally.refresh
  1660.     end
  1661.   end
  1662.  
  1663.   def map_passable?(x, y)
  1664.     case @vehicle_type
  1665.     when 0
  1666.       return $game_map.boat_passable?(x, y)
  1667.     when 1
  1668.       return $game_map.ship_passable?(x, y)
  1669.     when 2
  1670.       return true
  1671.     else
  1672.       return $game_map.player_passable?(x, y)
  1673.     end
  1674.   end
  1675.  
  1676.   def move_by_input
  1677.     return if self.freeze or (self.anime_attack/2) > 0
  1678.     if self.actor != nil
  1679.       for state in self.actor.states
  1680.         next if state.nil?
  1681.         next unless state.confusion?
  1682.         return unless movable?
  1683.         return if $game_map.interpreter.running?
  1684.         case Input.dir4
  1685.         when 2,4,6,8
  1686.           move_random
  1687.         end
  1688.         return
  1689.       end
  1690.     end
  1691.     requiem_abs_gplayer_move_by_input
  1692.   end
  1693.  
  1694. end
  1695.  
  1696. #------------------------------------------------------------------------------
  1697. # Game Ally
  1698. #------------------------------------------------------------------------------
  1699. class Game_Ally < Game_Character
  1700.  
  1701.   attr_reader :id
  1702.   attr_accessor :map_id
  1703.   attr_accessor :draw
  1704.   attr_accessor :destroy
  1705.   attr_accessor :command
  1706.  
  1707.   def initialize(id)
  1708.     super()
  1709.     @id = id
  1710.     @map_id = $game_map.map_id
  1711.     @command = 0
  1712.     @draw = false
  1713.     @destroy = false
  1714.     self.target = $game_player
  1715.     self.original_move_speed = 4
  1716.     refresh
  1717.   end
  1718.  
  1719.   def update
  1720.     super
  1721.     if self.actor.dead? and !@dead
  1722.       refresh
  1723.       @dead = true
  1724.     elsif !self.actor.dead? and @dead
  1725.       refresh
  1726.       @dead = false
  1727.     end
  1728.     if $game_player.in_vehicle? and !@in_vehicle and !self.actor.defending
  1729.       refresh
  1730.       @in_vehicle = true
  1731.     elsif !$game_player.in_vehicle? and @in_vehicle
  1732.       refresh
  1733.       moveto($game_player.x, $game_player.y) unless self.actor.dead?
  1734.       @in_vehicle = false
  1735.     end
  1736.     return if self.actor.nil? or self.actor.dead? or $game_player.in_vehicle?
  1737.     self.actor.defending = (@command == 2 ? true : false)
  1738.     make_action
  1739.     auto_recovery
  1740.     update_movement
  1741.   end
  1742.  
  1743.   def refresh
  1744.     self.actor = $game_party.members[@id]
  1745.     self.actor.piece = self
  1746.     if $game_player.in_vehicle? and !self.actor.dead? and !self.actor.defending
  1747.       @character_name = ""
  1748.     elsif self.actor.dead?
  1749.       if File.exists?("Graphics/Characters/$#{self.actor.name}_dead.png") and @map_id == $game_map.map_id
  1750.         @character_name = "$#{self.actor.name}_dead"
  1751.         @character_index = 0
  1752.       else
  1753.         @character_name = ""
  1754.       end
  1755.     elsif @map_id != $game_map.map_id
  1756.       @character_name = ""
  1757.     else
  1758.       @character_name = self.actor.character_name
  1759.       @character_index = self.actor.character_index
  1760.     end
  1761.   end
  1762.  
  1763.   def make_action
  1764.     return if $game_map.interpreter.running?
  1765.     return if self.actor.dead?
  1766.     case @command
  1767.     when 0
  1768.       if self.actor.weapons[0] != nil and self.actor.weapons[0].ranged? and self.weapon1_attack_time <= 0
  1769.         weapon_range_attack
  1770.         self.weapon1_attack_time = self.actor.weapons[0].delay
  1771.       else
  1772.         if self.actor.two_swords_style
  1773.           if self.weapon1_attack_time <= 0 and rand(100) <= 50
  1774.             normal_attack_right
  1775.             self.weapon1_attack_time = 60
  1776.           elsif self.weapon1_attack_time <= 0 and rand(100) > 50
  1777.             normal_attack_left
  1778.             self.weapon1_attack_time = 60
  1779.           end
  1780.         elsif self.weapon1_attack_time <= 0
  1781.           normal_attack_right
  1782.           self.weapon1_attack_time = 60
  1783.         end
  1784.       end
  1785.     when 1
  1786.       return if self.skill_attack_time > 0 or self.actor.skills == []
  1787.       self.assigned_skill = self.actor.skills[rand(self.actor.skills.size)]
  1788.       case self.assigned_skill.scope
  1789.       when 1
  1790.         if self.assigned_skill.ranged?
  1791.           skill_attack_range
  1792.         elsif self.assigned_skill.explosive?
  1793.           skill_explode_range
  1794.         else
  1795.           skill_attack_normal
  1796.         end
  1797.       when 2
  1798.         skill_attack_all
  1799.       when 3..7
  1800.         if self.assigned_skill.ranged?
  1801.           skill_attack_range
  1802.         elsif self.assigned_skill.explosive?
  1803.           skill_explode_range
  1804.         else
  1805.           skill_attack_normal
  1806.         end
  1807.       end
  1808.     when 3
  1809.       for skill in self.actor.skills
  1810.         self.assigned_skill = skill
  1811.         case self.assigned_skill.scope
  1812.         when 7..12
  1813.           skill_recover
  1814.         end
  1815.       end
  1816.     end
  1817.   end
  1818.  
  1819.   def normal_attack_right
  1820.     for monster in $game_monsters
  1821.       next if monster.nil?
  1822.       next unless in_front?(self, monster)
  1823.       next if monster.actor.dead?
  1824.       self.anime_attack = 20
  1825.       self.right_attack_on = true
  1826.       self.left_attack_on = false
  1827.       monster.animation_id = self.actor.atk_animation_id
  1828.       monster.actor.attack_effect(self.actor)
  1829.       monster.jump(0,0)
  1830.       monster.target = self
  1831.     end
  1832.     for event in $game_map.events.values
  1833.       next unless event.in_battle
  1834.       next unless in_front?(self, event)
  1835.       next if event.actor.dead? or event.object
  1836.       self.anime_attack = 20
  1837.       self.right_attack_on = true
  1838.       self.left_attack_on = false
  1839.       event.animation_id = self.actor.atk_animation_id
  1840.       next if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon.id or
  1841.       event.kill_with_skill > 0 or event.kill_with_item > 0
  1842.       event.actor.attack_effect(self.actor)
  1843.       event.jump(0,0) unless event.puzzle
  1844.       event.target = self
  1845.     end
  1846.   end
  1847.  
  1848.   def weapon_range_attack
  1849.     for monster in $game_monsters
  1850.       next unless in_direction?(self, monster) and in_range?(self, monster, self.actor.weapons[0].range)
  1851.       next if monster.actor.dead?
  1852.       self.anime_attack = 20
  1853.       select = rand(100)
  1854.       self.right_attack_on = select >= 50
  1855.       self.left_attack_on = select < 50
  1856.       if $game_party.has_item?(select >= 50 ? self.actor.weapons[0].ammo1 : self.actor.weapons[0].ammo2)
  1857.         $game_party.consume_item(select >= 50 ? self.actor.weapons[0].ammo1 : self.actor.weapons[0].ammo2)
  1858.         $game_range.push(Game_Range.new(self, self.actor.weapons[0].graphic, self.actor.weapons[0].index, self.actor.weapons[0].move_speed, self.actor.weapons[0].range, (select >= 50 ? 1 : 2)))
  1859.       end
  1860.       self.weapon1_attack_time = self.actor.equips[0].delay
  1861.     end
  1862.     for event in $game_map.events.values
  1863.       next unless event.in_battle
  1864.       next unless in_direction?(self, event) and in_range?(self, event, self.actor.weapons[0].range)
  1865.       next if event.actor.dead? or event.object
  1866.       self.anime_attack = 20
  1867.       select = rand(100)
  1868.       self.right_attack_on = select >= 50
  1869.       self.left_attack_on = select < 50
  1870.       if $game_party.has_item?(select >= 50 ? self.actor.weapons[0].ammo1 : self.actor.weapons[0].ammo2)
  1871.         $game_party.consume_item(select >= 50 ? self.actor.weapons[0].ammo1 : self.actor.weapons[0].ammo2)
  1872.         $game_range.push(Game_Range.new(self, self.actor.weapons[0].graphic, self.actor.weapons[0].index, self.actor.weapons[0].move_speed, self.actor.weapons[0].range, (select >= 50 ? 1 : 2)))
  1873.       end
  1874.       self.weapon1_attack_time = self.actor.equips[0].delay
  1875.     end
  1876.   end
  1877.  
  1878.   def range_attack_right
  1879.     return if @attack_weapon.ammo1 != nil and !$game_party.has_item?(@attack_weapon.ammo1)
  1880.     $game_party.consume_item(@attack_weapon.ammo1) if @attack_weapon.ammo1 != nil
  1881.     $game_range.push(Game_Range.new(self, @attack_weapon.graphic, @attack_weapon.index, @attack_weapon.move_speed, @attack_weapon.range, 1))
  1882.   end
  1883.  
  1884.   def normal_attack_left
  1885.     for monster in $game_monsters
  1886.       next if monster.nil?
  1887.       next unless in_front?(self, monster)
  1888.       next if monster.actor.dead?
  1889.       self.anime_attack = 20
  1890.       self.right_attack_on = false
  1891.       self.left_attack_on = true
  1892.       monster.animation_id = self.actor.atk_animation_id2
  1893.       monster.actor.attack_effect(self.actor)
  1894.       monster.jump(0,0)
  1895.       monster.target = self
  1896.     end
  1897.     for event in $game_map.events.values
  1898.       next unless event.in_battle
  1899.       next unless in_front?(self,event)
  1900.       next if event.actor.dead? or event.object
  1901.       self.anime_attack = 20
  1902.       self.right_attack_on = false
  1903.       self.left_attack_on = true
  1904.       event.animation_id = self.actor.atk_animation_id2
  1905.       next if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon_and_Shield.id or
  1906.       event.kill_with_skill > 0 or event.kill_with_item > 0
  1907.       event.actor.attack_effect(self.actor)
  1908.       event.jump(0,0) unless event.puzzle
  1909.       event.target = self
  1910.     end
  1911.   end
  1912.  
  1913.   def range_attack_left
  1914.     return if @attack_weapon_and_Shield.ammo2 != nil and !$game_party.has_item?(@attack_weapon_and_Shield.ammo2)
  1915.     $game_party.consume_item(@attack_weapon_and_Shield.ammo2) if @attack_weapon_and_Shield.ammo2 != nil
  1916.     $game_range.push(Game_Range.new(self, @attack_weapon_and_Shield.graphic, @attack_weapon_and_Shield.index, @attack_weapon_and_Shield.move_speed, @attack_weapon_and_Shield.range, 2))
  1917.   end
  1918.  
  1919.   def skill_attack_normal
  1920.     for monster in $game_monsters
  1921.       next if monster.nil?
  1922.       next unless in_front?(self, monster)
  1923.       next if monster.actor.dead?
  1924.       next if self.actor.mp < self.assigned_skill.mp_cost
  1925.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1926.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1927.       monster.animation_id = self.assigned_skill.animation_id
  1928.       self.skill_attack_time = self.assigned_skill.delay
  1929.       monster.actor.skill_effect(self.actor, self.assigned_skill)
  1930.       monster.jump(0,0)
  1931.       monster.target = self
  1932.     end
  1933.     for event in $game_map.events.values
  1934.       next unless event.in_battle
  1935.       next unless in_front?(self,event)
  1936.       next if event.actor.dead? or event.object
  1937.       next if self.actor.mp < self.assigned_skill.mp_cost
  1938.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1939.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1940.       event.animation_id = self.assigned_skill.animation_id
  1941.       self.skill_attack_time = self.assigned_skill.delay
  1942.       next if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
  1943.       event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
  1944.       event.actor.skill_effect(self.actor, self.assigned_skill)
  1945.       event.jump(0,0) unless event.puzzle
  1946.       event.target = self
  1947.     end
  1948.   end
  1949.  
  1950.   def skill_attack_range
  1951.     for monster in $game_monsters
  1952.       next if monster.nil?
  1953.       next if monster.actor.dead?
  1954.       next unless in_direction?(self, monster) and in_range?(self, monster, self.assigned_skill.range)
  1955.       next if self.actor.mp < self.assigned_skill.mp_cost
  1956.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1957.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1958.       $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
  1959.       RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  1960.       self.skill_attack_time = self.assigned_skill.delay
  1961.     end
  1962.     for event in $game_map.events.values
  1963.       next unless event.in_battle
  1964.       next unless in_direction?(self, event) and in_range?(self, event, self.assigned_skill.range)
  1965.       next self.actor.mp < self.assigned_skill.mp_cost
  1966.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1967.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1968.       $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
  1969.       RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  1970.       self.skill_attack_time = self.assigned_skill.delay
  1971.     end
  1972.   end
  1973.  
  1974.   def skill_attack_all
  1975.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  1976.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  1977.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  1978.     for monster in $game_mosnters
  1979.       next if monster.nil?
  1980.       next if monster.actor.dead?
  1981.       monster.animation_id = self.assigned_skill.animation_id
  1982.       self.skill_attack_time = self.assigned_skill.delay
  1983.       monster.actor.skill_effect(self.actor, self.assigned_skill)
  1984.       monster.jump(0,0)
  1985.       monster.target = self
  1986.     end
  1987.     for event in $game_map.events.values
  1988.       next unless event.in_battle
  1989.       next if event.actor.dead? or event.object
  1990.       event.animation_id = self.assigned_skill.animation_id
  1991.       self.skill_attack_time = self.assigned_skill.delay
  1992.       next if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
  1993.       event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
  1994.       event.actor.skill_effect(self.actor, self.assigned_skill)
  1995.       event.jump(0,0) unless event.puzzle
  1996.       event.target = self
  1997.     end
  1998.   end
  1999.  
  2000.   def skill_explode_range
  2001.     for monster in $game_monsters
  2002.       next if monster.nil?
  2003.       next if monster.actor.dead?
  2004.       return unless in_direction?(self, monster) and in_range?(self, monster, self.assigned_skill.range)
  2005.       return if self.actor.mp < self.assigned_skill.mp_cost
  2006.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  2007.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  2008.       $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
  2009.       RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  2010.       self.skill_attack_time = self.assigned_skill.delay
  2011.     end
  2012.     for event in $game_map.events.values
  2013.       next unless event.in_battle
  2014.       return unless in_direction?(self, event) and in_range?(self, event, self.assigned_skill.range)
  2015.       return if self.actor.mp < self.assigned_skill.mp_cost
  2016.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  2017.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  2018.       $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
  2019.       RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  2020.       self.skill_attack_time = self.assigned_skill.delay
  2021.     end
  2022.   end
  2023.  
  2024.   def skill_recover
  2025.     for person in $game_party.members
  2026.       next unless person.hp <= (person.maxhp/4)
  2027.       next if self.actor.mp < self.assigned_skill.mp_cost
  2028.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  2029.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  2030.       person.skill_effect(person, self.assigned_skill)
  2031.       person.piece.animation_id = self.assigned_skill.animation_id
  2032.       self.skill_attack_time = self.assigned_skill.delay
  2033.     end
  2034.   end
  2035.  
  2036.   def auto_recovery
  2037.     return unless self.actor.auto_hp_recover and self.recovery_time <= 0
  2038.     self.actor.hp += (self.actor.maxhp*10/100)
  2039.     self.recovery_time = 1800
  2040.   end
  2041.  
  2042.   def update_movement
  2043.     return if $game_map.interpreter.running?
  2044.     return if moving? or self.actor.defending
  2045.     return if self.freeze or (self.anime_attack/2) > 0
  2046.     if $game_player.dash? and self.target == $game_player
  2047.       @move_speed = 5
  2048.     else
  2049.       @move_speed = self.original_move_speed
  2050.     end
  2051.     if @target.nil? or @command == 3
  2052.       self.target = $game_player
  2053.     else
  2054.       for monster in $game_monsters
  2055.         next if monster.nil?
  2056.         next if monster.actor.dead?
  2057.         if in_range?(self, monster, 3) and !self.lock_target
  2058.           self.target = monster
  2059.           self.lock_target = true
  2060.         elsif !self.lock_target
  2061.           self.target = $game_player
  2062.         end
  2063.       end
  2064.       for event in $game_map.events.values
  2065.         if event.in_battle and in_range?(self, event, 3) and !self.lock_target
  2066.           next if event.object or event.puzzle
  2067.           self.target = event
  2068.           self.lock_target = true
  2069.         elsif !self.lock_target
  2070.           self.target = $game_player
  2071.         end
  2072.       end
  2073.     end
  2074.     move_toward(self.target)
  2075.   end
  2076.  
  2077.   def perform_transfer(map_id, x, y, dir)
  2078.     @map_id = map_id
  2079.     set_direction(dir)
  2080.     moveto(x, y)
  2081.     move_random
  2082.     self.target = $game_player
  2083.     self.lock_target = false
  2084.   end
  2085.  
  2086.   def screen_z
  2087.     return $game_player.screen_z-1
  2088.   end
  2089.  
  2090.   def check_event_trigger_touch(x, y)
  2091.   end
  2092.  
  2093. end
  2094.  
  2095. #------------------------------------------------------------------------------
  2096. # Game Monster
  2097. #------------------------------------------------------------------------------
  2098. class Game_Monster < Game_Character
  2099.  
  2100.   attr_reader :respawn
  2101.   attr_reader :destroy
  2102.  
  2103.   def initialize(id, enemy_id, troop_id, area)
  2104.     super()
  2105.     @id = id
  2106.     @enemy_id = enemy_id
  2107.     @troop_id = troop_id
  2108.     @area = area
  2109.     setup_monster
  2110.     loop do
  2111.       set_start_position
  2112.       break if $game_map.passable?(@x_pos, @y_pos)
  2113.     end
  2114.     moveto(@x_pos, @y_pos)
  2115.     @move_type = self.actor.move_route
  2116.     @move_speed = self.actor.move_speed
  2117.     refresh
  2118.   end
  2119.  
  2120.   def setup_monster
  2121.     self.actor = Game_Enemy.new(0, @enemy_id)
  2122.     self.actor.piece = self
  2123.     @respawn = self.actor.respawn
  2124.     self.actor.recover_all
  2125.     @destroy = false
  2126.     @killed = false
  2127.     @opacity = 255
  2128.     @blend_type = 0
  2129.     refresh
  2130.   end
  2131.  
  2132.   def set_start_position
  2133.     if @area != nil
  2134.       x = []
  2135.       for i in (@area.rect.x)...(@area.rect.x+@area.rect.width)
  2136.         x << i
  2137.       end
  2138.       y = []
  2139.       for i in (@area.rect.y)...(@area.rect.y+@area.rect.height)
  2140.         y << i
  2141.       end
  2142.       @x_pos = x[rand(x.size)]
  2143.       @y_pos = y[rand(y.size)]
  2144.     else
  2145.       @x_pos = rand($game_map.width)
  2146.       @y_pos = rand($game_map.height)
  2147.     end
  2148.   end
  2149.  
  2150.   def refresh
  2151.     @character_name = self.actor.character_name
  2152.     @character_index = self.actor.character_index
  2153.   end
  2154.  
  2155.   def update
  2156.     super
  2157.     if !self.actor.dead?
  2158.       update_attack
  2159.     else
  2160.       update_dying
  2161.     end
  2162.   end
  2163.  
  2164.   def update_attack
  2165.     return if $game_map.interpreter.running?
  2166.     return if $game_player.in_vehicle?
  2167.     for action in $data_enemies[@enemy_id].actions
  2168.       next unless self.actor.conditions_met?(action)
  2169.       next unless rand(11) < action.rating
  2170.       next if self.weapon1_attack_time > 0
  2171.       case action.kind
  2172.       when 0      
  2173.         case action.basic
  2174.         when 0
  2175.           attack_normal
  2176.         when 1
  2177.           self.actor.defending = true
  2178.         end
  2179.       when 1
  2180.         self.assigned_skill = $data_skills[action.skill_id]
  2181.         case self.assigned_skill.scope
  2182.         when 1..7
  2183.           if self.assigned_skill.ranged?
  2184.             if in_direction?(self, $game_player) and in_range?(self, $game_player, self.assigned_skill.range)
  2185.               skill_attack_range
  2186.             elsif action.rating == 10
  2187.               skill_attack_range
  2188.             else
  2189.               for ally in $game_allies
  2190.                 next if ally.nil?
  2191.                 next unless in_direction?(self, ally) and in_range?(self, ally, self.assigned_skill.range)
  2192.                 skill_attack_range
  2193.               end
  2194.             end
  2195.            elsif self.assigned_skill.explosive?
  2196.             if in_direction?(self, $game_player) and in_range?(self, $game_player, self.assigned_skill.range)
  2197.               skill_explode_range
  2198.             elsif action.rating == 10
  2199.               skill_explode_range
  2200.             else
  2201.               for ally in $game_allies
  2202.                 next if ally.nil?
  2203.                 next unless in_direction?(self, ally) and in_range?(self, ally, self.assigned_skill.range)
  2204.                 skill_explode_range
  2205.               end
  2206.             end
  2207.           else
  2208.              skill_attack_normal
  2209.            end
  2210.         when 7..12
  2211.           skill_recover
  2212.         end
  2213.       end
  2214.     end
  2215.   end
  2216.  
  2217.   def attack_normal
  2218.     for ally in $game_allies
  2219.       next if ally.nil?
  2220.       next unless in_front?(self, ally)
  2221.       self.anime_attack = 20
  2222.       ally.animation_id = self.actor.atk_animation_id
  2223.       ally.actor.attack_effect(self.actor)
  2224.       ally.jump(0,0)
  2225.       self.weapon1_attack_time = 90
  2226.       return
  2227.     end
  2228.     return if $game_player.actor.nil?
  2229.     return unless in_front?(self, $game_player)
  2230.     self.anime_attack = 20
  2231.     $game_player.animation_id = self.actor.atk_animation_id
  2232.     $game_player.actor.attack_effect(self.actor)
  2233.     $game_player.jump(0,0)
  2234.     self.weapon1_attack_time = 90
  2235.   end
  2236.  
  2237.   def skill_attack_normal
  2238.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  2239.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  2240.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  2241.     for ally in $game_allies
  2242.       next if ally.nil?
  2243.       next unless in_front?(self, ally)
  2244.       ally.animation_id = self.assigned_skill.animation_id
  2245.       ally.actor.skill_effect(self.actor, self.assigned_skill)
  2246.       ally.jump(0,0)
  2247.       self.weapon1_attack_time = 90
  2248.       return
  2249.     end
  2250.     return if $game_player.actor.nil?
  2251.     return unless in_front?(self, $game_player)
  2252.     $game_player.animation_id = self.assigned_skill.animation_id
  2253.     $game_player.actor.skill_effect(self.actor, self.assigned_skill)
  2254.     $game_player.jump(0,0)
  2255.     self.weapon1_attack_time = 90
  2256.   end
  2257.  
  2258.   def skill_attack_range
  2259.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  2260.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  2261.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  2262.     $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
  2263.     self.weapon1_attack_time = self.assigned_skill.delay
  2264.     RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  2265.   end
  2266.  
  2267.   def skill_explode_range
  2268.     return unless self.actor.mp >= self.assigned_skill.mp_cost
  2269.     self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  2270.     $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  2271.     $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
  2272.     self.weapon1_attack_time = self.assigned_skill.delay
  2273.     RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
  2274.   end
  2275.  
  2276.   def skill_recover
  2277.     if self.actor.mp >= self.assigned_skill.mp_cost and self.actor.hp <= (self.actor.maxhp*25/100)
  2278.       self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
  2279.       $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  2280.       @animation_id = self.assigned_skill.animation_id
  2281.       self.actor.skill_effect(self.actor, self.assigned_skill)
  2282.       self.weapon1_attack_time = 90
  2283.     end
  2284.     for event in $game_map.events.values
  2285.       if event.in_battle and in_range?(self, event, 3)
  2286.         if self.actor.mp >= self.assigned_skill.mp_cost and event.actor.hp <= (event.actor.maxhp*25/100)
  2287.           self.actor.mp -= self.assigned_skill.mp_cost
  2288.           $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
  2289.           event.animation_id = self.assigned_skill.animation_id
  2290.           event.actor.skill_effect(self.actor, self.assigned_skill)
  2291.           self.weapon1_attack_time = 90
  2292.         end
  2293.       end
  2294.     end
  2295.   end
  2296.  
  2297.   def update_dying
  2298.     @blend_type = 2
  2299.     @opacity -= 5
  2300.     get_rewards unless @killed
  2301.     if @opacity <= 0 and !@destroy
  2302.       $game_player.hits = 0
  2303.       for ally in $game_allies
  2304.         next if ally.nil? or ally.actor.dead?
  2305.         ally.target = $game_player
  2306.         ally.lock_target = false
  2307.       end
  2308.       @destroy = true
  2309.     end
  2310.     if @destroy and @respawn > 0
  2311.       @respawn -= 1
  2312.       setup_monster if @respawn <= 0
  2313.     end
  2314.   end
  2315.  
  2316.   def get_rewards
  2317.     if $Requiem_ABS.auto_exp_e_gold
  2318.       exp = (self.actor.maxhp+self.actor.maxmp+self.actor.atk+self.actor.def+self.actor.spi+
  2319.       self.actor.agi+self.actor.hit+self.actor.eva) * $Requiem_ABS.auto_exp_rate / 100
  2320.     else
  2321.       exp = self.actor.exp
  2322.     end
  2323.     if $Requiem_ABS.divide_exp
  2324.       x = (exp/$game_party.members.size)
  2325.       for i in $game_party.members
  2326.         i.gain_exp(x, true)
  2327.       end
  2328.     else
  2329.       self.target.actor.gain_exp(exp, true)
  2330.     end
  2331.     droped_items = []
  2332.     for i in [self.actor.drop_item1, self.actor.drop_item2]
  2333.       next if i.kind <= 0
  2334.       next if rand(i.denominator) != 0
  2335.       if i.kind == 1
  2336.         droped_items.push($data_items[i.item_id])
  2337.       elsif i.kind == 2
  2338.         droped_items.push($data_weapons[i.weapon_id])
  2339.       elsif i.kind == 3
  2340.         droped_items.push($data_armors[i.armor_id])
  2341.       end
  2342.     end
  2343.     for t in droped_items
  2344.       next if t.nil?
  2345.       $game_drop.push(Game_Drop.new(self, t.icon_index, t , 0))
  2346.     end
  2347.     if $Requiem_ABS.auto_exp_e_gold
  2348.       gold = (self.actor.maxhp+self.actor.maxmp+self.actor.atk+self.actor.def+self.actor.spi+
  2349.       self.actor.agi+self.actor.hit+self.actor.eva) * $Requiem_ABS.auto_gold_rate / 100
  2350.     else
  2351.       gold = self.actor.gold
  2352.     end
  2353.     if gold > 0 and rand(100) <= $Requiem_ABS.gold_drop_rate
  2354.       $game_drop.push(Game_Drop.new(self, $Requiem_ABS.gold_drop_icon_index, nil, gold))
  2355.     end
  2356.     @animation_id = self.actor.die_animation_id if self.actor.die_animation_id > 0
  2357.     if self.actor.die_se != nil    
  2358.       RPG::SE.new(self.actor.die_se).play
  2359.     else
  2360.       Sound.play_enemy_collapse
  2361.     end
  2362.     @killed = true
  2363.   end
  2364.  
  2365.   def update_self_movement
  2366.     return if moving?
  2367.     return if self.actor.dead?
  2368.     return if self.freeze or (self.anime_attack/2) > 0
  2369.     return unless @stop_count > 30 * (5 - @move_frequency)
  2370.     if in_range?(self, $game_player, self.actor.follow_range) and !self.lock_target
  2371.       self.target = $game_player
  2372.       self.lock_target = true
  2373.     end
  2374.     for ally in $game_allies
  2375.       next if ally.nil?
  2376.       if in_range?(self, ally, self.actor.follow_range) and !ally.actor.dead? and !self.lock_target
  2377.         self.target = ally
  2378.         self.lock_target = true
  2379.       elsif self.target == ally and ally.actor.dead? and self.lock_target
  2380.         self.target = nil
  2381.         self.lock_target = false
  2382.       end
  2383.     end
  2384.     if self.target != nil and in_range?(self, self.target, self.actor.follow_range)
  2385.       move_type_toward(self.target)
  2386.     else
  2387.       case @move_type
  2388.       when 1
  2389.         move_type_random
  2390.       when 2
  2391.         move_type_toward_player
  2392.       when 3
  2393.         move_type_custom
  2394.       end
  2395.     end
  2396.   end
  2397.  
  2398.   def check_event_trigger_touch(x, y)
  2399.   end
  2400.  
  2401. end
  2402.  
  2403. #------------------------------------------------------------------------------
  2404. # Game Range
  2405. #------------------------------------------------------------------------------
  2406. class Game_Range < Game_Character
  2407.  
  2408.   attr_accessor :draw
  2409.   attr_accessor :destroy
  2410.  
  2411.   def initialize(parent, chara_name="", chara_index=0, speed=4, range=5, type=3)
  2412.     super()
  2413.     @parent = parent
  2414.     @character_name = chara_name
  2415.     @character_index = chara_index
  2416.     @move_speed = speed
  2417.     @range = range
  2418.     @type = type
  2419.     @step = 0
  2420.     @destroy = false
  2421.     @draw = false
  2422.     @moving = false
  2423.     @direction = @parent.direction
  2424.     moveto(@parent.x, @parent.y)
  2425.     case @type
  2426.     when 1
  2427.       @item = @parent.actor.equips[0]
  2428.     when 2
  2429.       if @parent.actor.two_hands_legal?
  2430.         @item = @parent.actor.equips[0]
  2431.       else
  2432.         @item = @parent.actor.equips[1]
  2433.       end
  2434.     when 3...5
  2435.       @item = @parent.assigned_skill
  2436.     when 5...7
  2437.       @item = @parent.assigned_item
  2438.     end
  2439.   end
  2440.  
  2441.   def update
  2442.     super
  2443.     return if @destroy
  2444.     @destroy = (@step > @range)
  2445.     return unless stopping?
  2446.     case @item.path
  2447.     when "Line"
  2448.       unless @moving
  2449.         @move_route = RPG::MoveRoute.new
  2450.         for i in 0...@range
  2451.           @move_route.list.insert(0, RPG::MoveCommand.new(12))
  2452.         end
  2453.         @moving = true
  2454.       end
  2455.     when "Boom"
  2456.       unless @moving
  2457.         @move_route = RPG::MoveRoute.new
  2458.         @move_route.list = [
  2459.         RPG::MoveCommand.new(12),
  2460.         RPG::MoveCommand.new(12),
  2461.         RPG::MoveCommand.new(12),
  2462.         RPG::MoveCommand.new(12),
  2463.         RPG::MoveCommand.new(12),
  2464.         RPG::MoveCommand.new(13),
  2465.         RPG::MoveCommand.new(13),
  2466.         RPG::MoveCommand.new(13),
  2467.         RPG::MoveCommand.new(13),
  2468.         RPG::MoveCommand.new(13),
  2469.         RPG::MoveCommand.new()]
  2470.         @range = @move_route.list.size-1
  2471.         @moving = true
  2472.       end
  2473.     when "Circle"
  2474.       unless @moving
  2475.         $game_player.anime_attack = 70
  2476.         @move_route = RPG::MoveRoute.new
  2477.         @move_route.list = [
  2478.         RPG::MoveCommand.new(37),
  2479.         RPG::MoveCommand.new(4),
  2480.         RPG::MoveCommand.new(2),
  2481.         RPG::MoveCommand.new(1),
  2482.         RPG::MoveCommand.new(1),
  2483.         RPG::MoveCommand.new(3),
  2484.         RPG::MoveCommand.new(3),
  2485.         RPG::MoveCommand.new(4),
  2486.         RPG::MoveCommand.new(4),
  2487.         RPG::MoveCommand.new(2),
  2488.         RPG::MoveCommand.new()]
  2489.         @range = @move_route.list.size-1
  2490.         @moving = true
  2491.       end
  2492.     when "Jump"
  2493.        unless @moving
  2494.         @move_route = RPG::MoveRoute.new
  2495.         case @parent.direction
  2496.         when 2
  2497.           dir = 0, 3
  2498.         when 4
  2499.           dir = -3, 0
  2500.         when 6
  2501.           dir = 3, 0
  2502.         when 8
  2503.           dir = 0, -3
  2504.         end
  2505.         @move_route.list = [
  2506.         RPG::MoveCommand.new(14, [dir[0], dir[1]]),
  2507.         RPG::MoveCommand.new()]
  2508.         @moving = true
  2509.       end
  2510.     when "Random"
  2511.       unless @moving
  2512.         @move_route = RPG::MoveRoute.new
  2513.         for i in 0...@range
  2514.           @move_route.list.insert(0, RPG::MoveCommand.new(9))
  2515.         end
  2516.         @moving = true
  2517.       end
  2518.     end
  2519.     @move_route.skippable = true
  2520.     move_type_custom
  2521.     x = (@direction == 4 ? -1 : @direction == 6 ? 1 : 0)
  2522.     y = (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  2523.     check_event_trigger_touch(@x+x, @y+y) unless jumping?
  2524.     @step += 1
  2525.   end
  2526.  
  2527.   def check_event_trigger_touch(x, y)
  2528.     return if @destroy
  2529.     if @parent.is_a?(Game_Event) or @parent.is_a?(Game_Monster)
  2530.       case @type
  2531.       when 3
  2532.          for ally in $game_allies
  2533.            next if ally.nil?
  2534.            hurt_hero_skill(ally) if ally.pos?(x, y)
  2535.          end
  2536.          hurt_hero_skill($game_player) if $game_player.pos?(x, y)
  2537.       when 4
  2538.         for ally in $game_allies
  2539.           next if ally.nil?
  2540.           hurt_hero_skill_explode if ally.pos?(x, y)
  2541.         end
  2542.         hurt_hero_skill_explode if $game_player.pos?(x, y)
  2543.       end
  2544.       return
  2545.     end
  2546.     for monster in $game_monsters
  2547.       next if monster.nil?
  2548.       next unless monster.pos?(x, y)
  2549.       case @type
  2550.       when 1
  2551.         hurt_monster_weapon_right(monster)
  2552.       when 2
  2553.         hurt_monster_weapon_left(monster)
  2554.       when 3
  2555.         hurt_monster_skill(monster)
  2556.       when 4
  2557.         hurt_enemy_skill_explode
  2558.       when 5
  2559.         hurt_monster_item(monster)
  2560.       when 6
  2561.         hurt_enemy_item_explode
  2562.       end
  2563.     end
  2564.     for event in $game_map.events.values
  2565.       next unless event.in_battle and event.pos?(x, y)
  2566.       case @type
  2567.       when 1
  2568.         hurt_enemy_weapon_right(event)
  2569.       when 2
  2570.         hurt_enemy_weapon_left(event)
  2571.       when 3
  2572.         hurt_enemy_skill(event)
  2573.       when 4
  2574.         hurt_enemy_skill_explode
  2575.       when 5
  2576.         hurt_enemy_item(event)
  2577.       when 6
  2578.         hurt_enemy_item_explode
  2579.       end
  2580.     end
  2581.   end
  2582.  
  2583.   def hurt_hero_skill(hero)
  2584.     return if self.target == hero
  2585.     return if hero.actor.dead?
  2586.     self.target = hero
  2587.     hero.animation_id = @parent.assigned_skill.animation_id
  2588.     hero.actor.skill_effect(@parent.actor, @parent.assigned_skill)
  2589.   end
  2590.  
  2591.   def hurt_hero_skill_explode
  2592.     for ally in $game_allies
  2593.       next if ally.nil?
  2594.       next if self.target == ally
  2595.       next unless in_range?(self, ally, @parent.assigned_skill.range)
  2596.       next if ally.actor.dead?
  2597.       self.target = ally  
  2598.       ally.animation_id = @parent.assigned_skill.animation_id
  2599.       ally.actor.skill_effect(@parent.actor, @parent.assigned_skill)
  2600.     end
  2601.     if in_range?(self, $game_player, @parent.assigned_skill.range) and
  2602.       self.target != $game_player and !$game_player.actor.dead?
  2603.       self.target = $game_player  
  2604.       $game_player.animation_id = @parent.assigned_skill.animation_id
  2605.       $game_player.actor.skill_effect(@parent.actor, @parent.assigned_skill)
  2606.     end
  2607.     @destroy = true
  2608.   end
  2609.  
  2610.   def hurt_enemy_weapon_right(enemy)
  2611.     return if self.target == enemy
  2612.     return if enemy.actor.dead? or enemy.object
  2613.     if @parent.actor.weapons[0].ammo1 != nil
  2614.       enemy.animation_id = @parent.actor.equips[0].ammo1.animation_id
  2615.     else
  2616.       enemy.animation_id = @parent.actor.atk_animation_id
  2617.     end
  2618.     return if enemy.kill_with_weapon > 0 and enemy.kill_with_weapon != @parent.actor.weapon_id or
  2619.     enemy.kill_with_skill > 0 or enemy.kill_with_item > 0
  2620.     self.target = enemy
  2621.     enemy.actor.attack_effect(@parent.actor)
  2622.     enemy.jump(0,0) unless enemy.puzzle
  2623.     enemy.target = @parent
  2624.   end
  2625.  
  2626.   def hurt_enemy_weapon_left(enemy)
  2627.     return if self.target == enemy
  2628.     return if enemy.actor.dead? or enemy.object
  2629.     if @parent.actor.two_swords_style
  2630.       @weapon = @parent.actor.weapons[1]
  2631.     else
  2632.       @weapon = @parent.actor.weapons[0]
  2633.     end
  2634.     if @weapon.ammo2 != nil
  2635.       enemy.animation_id = @weapon.ammo2.animation_id
  2636.     else
  2637.       enemy.animation_id = @parent.actor.atk_animation_id2
  2638.     end
  2639.     return if enemy.kill_with_weapon > 0 and enemy.kill_with_weapon != @weapon.id or
  2640.     enemy.kill_with_skill > 0 or enemy.kill_with_item > 0
  2641.     self.target = enemy
  2642.     enemy.actor.attack_effect(@parent.actor)
  2643.     enemy.jump(0,0) unless enemy.puzzle
  2644.     enemy.target = @parent
  2645.   end
  2646.  
  2647.   def hurt_enemy_skill(enemy)
  2648.     return if self.target == enemy
  2649.     return if enemy.actor.dead? or enemy.object
  2650.     enemy.animation_id = @parent.assigned_skill.animation_id
  2651.     return if enemy.kill_with_weapon > 0 or enemy.kill_with_item > 0 or
  2652.     enemy.kill_with_skill > 0 and enemy.kill_with_skill != @parent.assigned_skill.id
  2653.     self.target = enemy
  2654.     enemy.actor.skill_effect(@parent.actor, @parent.assigned_skill)
  2655.     enemy.jump(0,0) unless enemy.puzzle
  2656.     enemy.target = @parent
  2657.   end
  2658.  
  2659.   def hurt_enemy_item(enemy)
  2660.     return if self.target == enemy
  2661.     return if enemy.actor.dead? or enemy.object
  2662.     enemy.animation_id = @parent.assigned_item.animation_id
  2663.     return if enemy.kill_with_weapon > 0 or enemy.kill_with_skill > 0 or
  2664.     enemy.kill_with_item > 0 and enemy.kill_with_item != @parent.assigned_item.id
  2665.     self.target = enemy
  2666.     enemy.actor.item_effect(@parent.actor, @parent.assigned_item)
  2667.     enemy.jump(0,0) unless enemy.puzzle
  2668.     enemy.target = @parent
  2669.   end
  2670.  
  2671.   def hurt_enemy_skill_explode
  2672.     for monster in $game_monsters
  2673.       next if monster.nil?
  2674.       next if self.target == monster
  2675.       next if monster.actor.dead?
  2676.       next unless in_range?(self, monster, @parent.assigned_skill.area)
  2677.       self.target = monster
  2678.       monster.animation_id = @parent.assigned_skill.animation_id
  2679.       monster.actor.skill_effect(@parent.actor, @parent.assigned_skill)
  2680.       monster.jump(0,0)
  2681.       monster.target = @parent
  2682.     end
  2683.     for event in $game_map.events.values
  2684.       next unless event.in_battle
  2685.       next if self.target == event
  2686.       next if event.actor.dead? or event.object
  2687.       next unless in_range?(self, event, @parent.assigned_skill.area)
  2688.       self.target = event
  2689.       event.animation_id = @parent.assigned_skill.animation_id
  2690.       next if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
  2691.       event.kill_with_skill > 0 and event.kill_with_skill != @parent.assigned_skill.id
  2692.       event.actor.skill_effect(@parent.actor, @parent.assigned_skill)
  2693.       event.jump(0,0) unless event.puzzle
  2694.       event.target = @parent
  2695.     end
  2696.     @destroy = true
  2697.   end
  2698.  
  2699.   def hurt_enemy_item_explode
  2700.     for monster in $game_monsters
  2701.       next if monster.nil?
  2702.       next if self.target == monster
  2703.       next if monster.actor.dead?
  2704.       next unless in_range?(self, monster, @parent.assigned_item.area)
  2705.       self.target = monster
  2706.       monster.animation_id = @parent.assigned_item.animation_id
  2707.       monster.actor.item_effect(@parent.actor, @parent.assigned_item)
  2708.       monster.jump(0,0)
  2709.       monster.target = @parent
  2710.     end
  2711.     for event in $game_map.events.values
  2712.       next unless event.in_battle
  2713.       next if self.target == event
  2714.       next if event.actor.dead? or event.object
  2715.       next unless in_range?(self, event, @parent.assigned_item.area)
  2716.       self.target = event
  2717.       event.animation_id = @parent.assigned_item.animation_id
  2718.       next if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
  2719.       event.kill_with_skill > 0 and event.kill_with_skill != @parent.assigned_item.id
  2720.       event.actor.item_effect(@parent.actor, @parent.assigned_item)
  2721.       event.jump(0,0) unless event.puzzle
  2722.       event.target = @parent
  2723.     end
  2724.     @destroy = true
  2725.   end
  2726.  
  2727.   def hurt_monster_weapon_right(monster)
  2728.     return if self.target == monster
  2729.     return if monster.actor.dead?
  2730.     self.target = monster
  2731.     if @parent.actor.weapons[0].ammo1 != nil
  2732.       monster.animation_id = @parent.actor.equips[0].ammo1.animation_id
  2733.     else
  2734.       monster.animation_id = @parent.actor.atk_animation_id
  2735.     end
  2736.     monster.actor.attack_effect(@parent.actor)
  2737.     monster.jump(0,0)
  2738.     monster.target = @parent
  2739.   end
  2740.  
  2741.   def hurt_monster_weapon_left(monster)
  2742.     return if self.target == monster
  2743.     return if monster.actor.dead?
  2744.     self.target = monster
  2745.     if @parent.actor.two_swords_style
  2746.       @weapon = @parent.actor.weapons[1]
  2747.     else
  2748.       @weapon = @parent.actor.weapons[0]
  2749.     end
  2750.     if @weapon.ammo2 != nil
  2751.       monster.animation_id = @weapon.ammo2.animation_id
  2752.     else
  2753.       monster.animation_id = @parent.actor.atk_animation_id2
  2754.     end
  2755.     monster.actor.attack_effect(@parent.actor)
  2756.     monster.jump(0,0)
  2757.     monster.target = @parent
  2758.   end
  2759.  
  2760.   def hurt_monster_skill(monster)
  2761.     return if self.target == monster
  2762.     return if monster.actor.dead?
  2763.     self.target = monster
  2764.     monster.animation_id = @parent.assigned_skill.animation_id
  2765.     monster.actor.skill_effect(@parent.actor, @parent.assigned_skill)
  2766.     monster.jump(0,0)
  2767.     monster.target = @parent
  2768.   end
  2769.  
  2770.   def hurt_monster_item(monster)
  2771.     return if self.target == monster
  2772.     return if monster.actor.dead?
  2773.     self.target = monster
  2774.     monster.animation_id = @parent.assigned_item.animation_id
  2775.     monster.actor.item_effect(@parent.actor, @parent.assigned_item)
  2776.     monster.jump(0,0)
  2777.     monster.target = @parent
  2778.   end
  2779.  
  2780.   def map_passable?(x, y)
  2781.     return $game_map.range_passable?(x, y)
  2782.   end
  2783.  
  2784. end
  2785.  
  2786. #------------------------------------------------------------------------------
  2787. # Game Bomb
  2788. #------------------------------------------------------------------------------
  2789. class Game_Bomb < Game_Character
  2790.  
  2791.   attr_accessor :draw
  2792.   attr_accessor :destroy
  2793.   attr_accessor :graphic_name
  2794.   attr_accessor :graphic_index
  2795.  
  2796.   def initialize(parent, item)
  2797.     super()
  2798.     @parent = parent
  2799.     @item = item
  2800.     @graphic_name = "IconSet"
  2801.     @graphic_index = @item.icon_index
  2802.     @area = @item.area
  2803.     @time = @item.delay
  2804.     @destroy = false
  2805.     @draw = false
  2806.     self.priority_type = 2
  2807.     jump(0, 0)
  2808.     case @parent.direction
  2809.     when 2
  2810.       moveto(@parent.x, @parent.y+1)
  2811.     when 4
  2812.       moveto(@parent.x-1, @parent.y)
  2813.     when 6
  2814.       moveto(@parent.x+1, @parent.y)
  2815.     when 8
  2816.       moveto(@parent.x, @parent.y-1)
  2817.     end
  2818.     RPG::SE.new($Requiem_ABS.drop_se[1]).play if $Requiem_ABS.drop_se[1] != ""
  2819.     move_random if !$game_map.passable?(@x, @y) or $game_map.events_xy(@x, @y) != []
  2820.   end
  2821.  
  2822.   def update
  2823.     super
  2824.     return if @destroy
  2825.     if @item.shot_se != nil and Graphics.frame_count % 60 <= 0
  2826.       RPG::SE.new(@item.shot_se).play
  2827.     end
  2828.     @time -= 1 if @time > 0
  2829.     explode if @time <= 0
  2830.   end
  2831.  
  2832.   def explode
  2833.     @animation_id = @item.animation_id
  2834.     if in_range?(self, $game_player, @area)
  2835.       $game_player.actor.item_effect(@parent.actor, @item)
  2836.       $game_player.jump(0, 0)
  2837.     end
  2838.     for monster in $game_monsters
  2839.       next if monster.nil?
  2840.       next unless in_range?(self, monster, @area)
  2841.       monster.actor.item_effect(@parent.actor, @item)
  2842.       monster.jump(0, 0)
  2843.     end
  2844.     for event in $game_map.events.values
  2845.       next unless event.in_battle and in_range?(self, event, @area)
  2846.       event.actor.item_effect(@parent.actor, @item)
  2847.       event.jump(0, 0) unless event.puzzle
  2848.     end
  2849.     for ally in $game_allies
  2850.       next if ally.nil? or ally.actor.dead?
  2851.       next unless in_range?(self, ally, @area)
  2852.       ally.actor.item_effect(@parent.actor, @item)
  2853.       ally.jump(0, 0)
  2854.     end
  2855.     @destroy = true
  2856.   end
  2857.  
  2858.   def screen_z
  2859.     return $game_player.screen_z-2
  2860.   end
  2861.  
  2862.   def check_event_trigger_touch(x, y)
  2863.   end
  2864.  
  2865. end
  2866.  
  2867. #------------------------------------------------------------------------------
  2868. # Game Drop
  2869. #------------------------------------------------------------------------------
  2870. class Game_Drop < Game_Character
  2871.  
  2872.   attr_accessor :draw
  2873.   attr_accessor :destroy
  2874.   attr_accessor :graphic_name
  2875.   attr_accessor :graphic_index
  2876.  
  2877.   def initialize(parent, graphic_index=0, item=nil, gold=0)
  2878.     super()
  2879.     @graphic_name = "IconSet"
  2880.     @graphic_index = graphic_index
  2881.     @item = item
  2882.     @gold = gold
  2883.     @drop_time = $Requiem_ABS.drop_duration_time
  2884.     moveto(parent.x, parent.y)
  2885.     RPG::SE.new($Requiem_ABS.drop_se[0]).play if $Requiem_ABS.drop_se[0] != "" and @gold > 0
  2886.     RPG::SE.new($Requiem_ABS.drop_se[1]).play if $Requiem_ABS.drop_se[1] != "" and @items != nil
  2887.     @destroy = false
  2888.     @draw = false
  2889.     jump(0,0)
  2890.     move_random if !moving?
  2891.   end
  2892.  
  2893.   def update
  2894.     super
  2895.     return if @destroy
  2896.     @drop_time -= 1 if @drop_time > 0
  2897.     @destroy = (@drop_time <= 0)
  2898.     return unless Input.trigger?(Input::C) and in_front?($game_player, self)
  2899.     get_reward
  2900.   end
  2901.  
  2902.   def get_reward
  2903.     Sound.play_decision
  2904.     case @item
  2905.     when RPG::Item
  2906.       $game_party.gain_item($data_items[@item.id],1)
  2907.       $game_player.reward = $data_items[@item.id].name
  2908.     when RPG::Weapon
  2909.       $game_party.gain_item($data_weapons[@item.id],1)
  2910.       $game_player.reward = $data_weapons[@item.id].name
  2911.     when RPG::Armor
  2912.       $game_party.gain_item($data_armors[@item.id],1)
  2913.       $game_player.reward = $data_armors[@item.id].name
  2914.     end
  2915.     if @gold > 0
  2916.       $game_party.gain_gold(@gold)
  2917.       $game_player.reward = "$ #{@gold}"
  2918.     end
  2919.     @destroy = true
  2920.   end
  2921.  
  2922.   def screen_z
  2923.     return $game_player.screen_z-2
  2924.   end
  2925.  
  2926.   def check_event_trigger_touch(x, y)
  2927.   end
  2928.  
  2929. end
  2930.  
  2931. #------------------------------------------------------------------------------
  2932. # Sprite Base
  2933. #------------------------------------------------------------------------------
  2934. class Sprite_Base
  2935.  
  2936.   attr_reader :animation_duration
  2937.  
  2938.   def animation_set_sprites(frame)
  2939.     cell_data = frame.cell_data
  2940.     for i in 0..15
  2941.       sprite = @animation_sprites[i]
  2942.       next if sprite == nil
  2943.       pattern = cell_data[i, 0]
  2944.       if pattern == nil or pattern == -1
  2945.         sprite.visible = false
  2946.         next
  2947.       end
  2948.       if pattern < 100
  2949.         sprite.bitmap = @animation_bitmap1
  2950.       else
  2951.         sprite.bitmap = @animation_bitmap2
  2952.       end
  2953.       sprite.visible = true
  2954.       sprite.src_rect.set(pattern % 5 * 192, pattern % 100 / 5 * 192, 192, 192)
  2955.       if @animation_mirror
  2956.         sprite.x = @animation_ox - cell_data[i, 1] / $Requiem_ABS.animations_divide
  2957.         sprite.y = @animation_oy + cell_data[i, 2] / $Requiem_ABS.animations_divide
  2958.         sprite.angle = (360 - cell_data[i, 4])
  2959.         sprite.mirror = (cell_data[i, 5] == 0)
  2960.       else
  2961.         sprite.x = @animation_ox + cell_data[i, 1] / $Requiem_ABS.animations_divide
  2962.         sprite.y = @animation_oy + cell_data[i, 2] / $Requiem_ABS.animations_divide
  2963.         sprite.angle = cell_data[i, 4]
  2964.         sprite.mirror = (cell_data[i, 5] == 1)
  2965.       end
  2966.       sprite.z = self.z + 300 + i
  2967.       sprite.ox = 96
  2968.       sprite.oy = 96
  2969.       sprite.zoom_x = cell_data[i, 3] / (100.0 * $Requiem_ABS.animations_divide)
  2970.       sprite.zoom_y = cell_data[i, 3] / (100.0 * $Requiem_ABS.animations_divide)
  2971.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  2972.       sprite.blend_type = cell_data[i, 7]
  2973.     end
  2974.   end
  2975.  
  2976. end
  2977.  
  2978. #------------------------------------------------------------------------------
  2979. # Sprite Character
  2980. #------------------------------------------------------------------------------
  2981. class Sprite_Character < Sprite_Base
  2982.  
  2983.   alias requiem_abs_spchar_initialize initialize
  2984.   alias requiem_abs_spchar_dispose dispose
  2985.  
  2986.   def initialize(viewport, character=nil)
  2987.     @character = character
  2988.     @_damage_duration = 0
  2989.     @_hit_duration = 0
  2990.     @_reward_duration = 0
  2991.     requiem_abs_spchar_initialize(viewport,@character)
  2992.   end
  2993.  
  2994.   def dispose
  2995.     requiem_abs_spchar_dispose
  2996.     dispose_damage
  2997.     dispose_hit
  2998.     dispose_reward
  2999.   end
  3000.  
  3001.   def update
  3002.     super
  3003.     update_bitmap
  3004.     self.visible = (not @character.transparent)
  3005.     update_src_rect
  3006.     self.x = @character.screen_x
  3007.     self.y = @character.screen_y
  3008.     self.z = @character.screen_z
  3009.     self.opacity = @character.opacity
  3010.     self.blend_type = @character.blend_type
  3011.     self.bush_depth = @character.bush_depth
  3012.     update_balloon
  3013.     if @character.animation_id != 0
  3014.       @character.animation_id = 1 if @character.animation_id < 0
  3015.       animation = $data_animations[@character.animation_id]
  3016.       start_animation(animation)
  3017.       @character.animation_id = 0
  3018.     end
  3019.     if @character.balloon_id != 0
  3020.       @balloon_id = @character.balloon_id
  3021.       start_balloon
  3022.       @character.balloon_id = 0
  3023.     end
  3024.     update_show_dmg
  3025.     update_show_hit
  3026.     update_show_reward
  3027.     update_show_state_ani
  3028.   end
  3029.  
  3030.   def update_show_dmg
  3031.     if @_damage_duration > 0
  3032.       @_damage_duration -=1
  3033.       @_damage_sprite.y -= 1
  3034.       @_damage_sprite.x = self.x
  3035.     elsif @_damage_duration <= 0 and @_damage_sprite != nil and !@_damage_sprite.disposed?
  3036.       @_damage_sprite.y -= 1
  3037.       @_damage_sprite.opacity -= 5
  3038.       dispose_damage if @_damage_sprite.opacity <= 0
  3039.     end
  3040.     if @character.actor != nil and @character.actor.damage != 0
  3041.       return if @character.is_a?(Game_Event) and @character.puzzle
  3042.       damage(@character.actor.damage, @character.actor.critical, @character.actor.combo, @character.actor.reflect)
  3043.       @character.actor.damage = 0
  3044.       @character.actor.critical = @character.actor.combo = @character.actor.reflect = false
  3045.     end
  3046.   end
  3047.  
  3048.   def update_show_hit
  3049.     if @_hit_duration > 0
  3050.       @_hit_duration -=1
  3051.     elsif @_hit_duration <= 0 and @_hit_sprite != nil and !@_hit_sprite.disposed?
  3052.       @_hit_sprite.opacity -= 5
  3053.       dispose_hit if @_hit_sprite.opacity <= 0
  3054.     end
  3055.     if @character.is_a?(Game_Player) and @character.hit != nil
  3056.       hit(@character.hit)
  3057.       @character.hit = nil
  3058.     end
  3059.   end
  3060.  
  3061.   def update_show_reward
  3062.     if @_reward_duration > 0
  3063.       @_reward_duration -= 1
  3064.     elsif @_reward_duration <= 0 and @_reward_sprite != nil and !@_reward_sprite.disposed?
  3065.       @_reward_sprite.opacity -= 5
  3066.       dispose_reward if @_reward_sprite.opacity <= 0
  3067.     end
  3068.     if $game_player.reward != nil and $Requiem_ABS.show_reward
  3069.       show_reward($game_player.reward)
  3070.       $game_player.reward = nil
  3071.     end
  3072.   end
  3073.  
  3074.   def update_show_state_ani
  3075.     return if @character.actor.nil?
  3076.     for state in @character.actor.states
  3077.       next if state.nil? or state.animation_id <= 0
  3078.       if @character.ani_time <= 0
  3079.         @character.animation_id = state.animation_id
  3080.         @character.ani_time = $data_animations[@character.animation_id].frame_max * 4 + 1
  3081.       end
  3082.     end
  3083.   end
  3084.  
  3085.   def damage(value, critical, combo, reflect)
  3086.     dispose_damage
  3087.     damage_string = (value.is_a?(Numeric) ? value.abs.to_s : value.to_s)
  3088.     bitmap = Bitmap.new(160, ($Requiem_ABS.damage_properties["Damage"][1]*3)+10)
  3089.     bitmap.font.name = $Requiem_ABS.damage_properties["Damage"][0]
  3090.     bitmap.font.size = $Requiem_ABS.damage_properties["Damage"][1]
  3091.     bitmap.font.bold = $Requiem_ABS.damage_properties["Damage"][2]
  3092.     bitmap.font.italic = $Requiem_ABS.damage_properties["Damage"][3]
  3093.     bitmap.font.color.set(0,0,0)
  3094.     bitmap.draw_text(1, ($Requiem_ABS.damage_properties["Damage"][1]*2)+10, 160, $Requiem_ABS.damage_properties["Damage"][1], damage_string, 1)
  3095.     if value.is_a?(Numeric) and value <= 0
  3096.       bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][1]
  3097.     else
  3098.       bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][0]
  3099.     end
  3100.     bitmap.draw_text(0, ($Requiem_ABS.damage_properties["Damage"][1]*2)+8, 160, $Requiem_ABS.damage_properties["Damage"][1], damage_string, 1)
  3101.     if critical
  3102.       bitmap.font.color.set(0,0,0)
  3103.       bitmap.draw_text(1, $Requiem_ABS.damage_properties["Damage"][1]+5, 160, $Requiem_ABS.damage_properties["Damage"][1], $Requiem_ABS.damage_properties["Texts"][1], 1)
  3104.       bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][2]
  3105.       bitmap.draw_text(0, $Requiem_ABS.damage_properties["Damage"][1]+4, 160, $Requiem_ABS.damage_properties["Damage"][1], $Requiem_ABS.damage_properties["Texts"][1], 1)
  3106.     end
  3107.     if combo
  3108.       bitmap.font.color.set(0,0,0)
  3109.       bitmap.draw_text(1, 1, 160, $Requiem_ABS.damage_properties["Damage"][1],$Requiem_ABS.damage_properties["Texts"][2], 1)
  3110.       bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][3]
  3111.       bitmap.draw_text(0, 0, 160, $Requiem_ABS.damage_properties["Damage"][1],$Requiem_ABS.damage_properties["Texts"][2], 1)
  3112.     end
  3113.     if reflect
  3114.       bitmap.font.color.set(0,0,0)
  3115.       bitmap.draw_text(1, $Requiem_ABS.damage_properties["Damage"][1]+5, 160, $Requiem_ABS.damage_properties["Damage"][1], $Requiem_ABS.damage_properties["Texts"][6], 1)
  3116.       bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][5]
  3117.       bitmap.draw_text(0, $Requiem_ABS.damage_properties["Damage"][1]+4, 160, $Requiem_ABS.damage_properties["Damage"][1], $Requiem_ABS.damage_properties["Texts"][6], 1)
  3118.     end
  3119.     @_damage_sprite = ::Sprite.new(self.viewport)
  3120.     @_damage_sprite.bitmap = bitmap
  3121.     @_damage_sprite.ox = 80
  3122.     @_damage_sprite.oy = 80
  3123.     @_damage_sprite.x = self.x
  3124.     @_damage_sprite.y = self.y-self.oy
  3125.     @_damage_sprite.z = 99999
  3126.     @_damage_duration = 30
  3127.   end
  3128.  
  3129.   def hit(value)
  3130.     dispose_hit
  3131.     hit_string = (value.is_a?(Numeric) ? value.abs.to_s : value.to_s)
  3132.     bitmap = Bitmap.new(160, $Requiem_ABS.damage_properties["Hits"][1])
  3133.     bitmap.font.name = $Requiem_ABS.damage_properties["Hits"][0]
  3134.     bitmap.font.size = $Requiem_ABS.damage_properties["Hits"][1]
  3135.     bitmap.font.bold = $Requiem_ABS.damage_properties["Hits"][2]
  3136.     bitmap.font.italic = $Requiem_ABS.damage_properties["Hits"][3]
  3137.     bitmap.font.color.set(0,0,0)
  3138.     bitmap.draw_text(1, 1, 160, 36,"#{hit_string}"+" "+"#{$Requiem_ABS.damage_properties["Texts"][5]}", 2)
  3139.     bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][4]
  3140.     bitmap.draw_text(0, 0, 160, 36,"#{hit_string}"+" "+"#{$Requiem_ABS.damage_properties["Texts"][5]}", 2)
  3141.     @_hit_sprite = ::Sprite.new(self.viewport)
  3142.     @_hit_sprite.bitmap = bitmap
  3143.     @_hit_sprite.x = 374
  3144.     @_hit_sprite.y = 208 - $Requiem_ABS.damage_properties["Hits"][1]
  3145.     @_hit_sprite.z = 99999
  3146.     @_hit_duration = 60
  3147.   end
  3148.  
  3149.   def show_reward(reward)
  3150.     dispose_reward
  3151.     bitmap = Bitmap.new(200, 16)
  3152.     bitmap.font.size = 16
  3153.     bitmap.font.color = Color.new(0,0,0)
  3154.     bitmap.draw_text(1, 1, bitmap.width, 16, reward)
  3155.     bitmap.font.color = Color.new(255,255,255)
  3156.     bitmap.draw_text(0, 0, bitmap.width, 16, reward)
  3157.     @_reward_sprite = ::Sprite.new(self.viewport)
  3158.     @_reward_sprite.bitmap = bitmap
  3159.     @_reward_sprite.x = 10
  3160.     @_reward_sprite.y = 200
  3161.     @_reward_sprite.z = 99999
  3162.     @_reward_duration = 300
  3163.   end
  3164.  
  3165.   def dispose_damage
  3166.     return if @_damage_sprite.nil?
  3167.     @_damage_sprite.bitmap.dispose
  3168.     @_damage_sprite.dispose
  3169.     @_damage_sprite = nil
  3170.   end
  3171.  
  3172.   def dispose_hit
  3173.     return if @_hit_sprite.nil?
  3174.     @_hit_sprite.bitmap.dispose
  3175.     @_hit_sprite.dispose
  3176.     @_hit_sprite = nil
  3177.   end
  3178.  
  3179.   def dispose_reward
  3180.     return if @_reward_sprite.nil?
  3181.     @_reward_sprite.bitmap.dispose
  3182.     @_reward_sprite.dispose
  3183.     @_reward_sprite = nil
  3184.   end
  3185.  
  3186. end
  3187.  
  3188. #------------------------------------------------------------------------------
  3189. # Sprite Drop
  3190. #------------------------------------------------------------------------------
  3191. class Sprite_Drop < Sprite_Base
  3192.  
  3193.   attr_accessor :character
  3194.  
  3195.   def initialize(viewport, character=nil)
  3196.     super(viewport)
  3197.     @character = character
  3198.     update
  3199.   end
  3200.  
  3201.   def update
  3202.     super
  3203.     update_bitmap
  3204.     self.x = @character.screen_x
  3205.     self.y = @character.screen_y
  3206.     self.z = @character.screen_z
  3207.     self.opacity = @character.opacity
  3208.     self.blend_type = @character.blend_type
  3209.     self.bush_depth = @character.bush_depth
  3210.     if @character.animation_id != 0
  3211.       @character.animation_id = 1 if @character.animation_id < 0
  3212.       start_animation($data_animations[@character.animation_id])
  3213.       @character.animation_id = 0
  3214.     end
  3215.   end
  3216.  
  3217.   def update_bitmap
  3218.     return if @graphic_name == @character.graphic_name
  3219.     @graphic_name = @character.graphic_name
  3220.     self.bitmap = Cache.system(@graphic_name)
  3221.     self.ox = 12
  3222.     self.oy = 24
  3223.     sx = @character.graphic_index % 16 * 24
  3224.     sy = @character.graphic_index / 16 * 24
  3225.     self.src_rect.set(sx, sy, 24, 24)
  3226.   end
  3227.  
  3228. end
  3229.  
  3230. #------------------------------------------------------------------------------
  3231. # Sprite Weapon
  3232. #------------------------------------------------------------------------------
  3233. class Sprite_Weapon < Sprite_Base
  3234.  
  3235.   attr_accessor :character
  3236.  
  3237.   def initialize(viewport, character=nil)
  3238.     super(viewport)
  3239.     @character = character
  3240.     self.visible = false
  3241.     create_bitmap
  3242.     update
  3243.   end
  3244.  
  3245.   def update
  3246.     super
  3247.     return unless $Requiem_ABS.allow_weapons_graphics
  3248.     return if @character.actor.nil?
  3249.     return if @character.is_a?(Game_Ally) and @character.map_id != $game_map.map_id
  3250.     self.visible = (@character.anime_attack > 0)
  3251.     update_src_rect
  3252.     update_movement
  3253.   end
  3254.  
  3255.   def create_bitmap
  3256.     self.bitmap = Cache.system("Iconset")
  3257.     self.ox = 12
  3258.     self.oy = 24
  3259.     self.zoom_x = 0.80
  3260.     self.zoom_y = 0.80
  3261.   end
  3262.  
  3263.   def update_src_rect
  3264.     sx = weapon_index % 16 * 24
  3265.     sy = weapon_index / 16 * 24
  3266.     self.src_rect.set(sx, sy, 24, 24)
  3267.   end
  3268.  
  3269.   def update_movement
  3270.     case @character.direction
  3271.     when 2
  3272.       self.x = @character.screen_x-6
  3273.       self.z = @character.screen_z+2
  3274.       self.mirror = false
  3275.       change_angle(180, 135, 90)
  3276.     when 4
  3277.       self.x = @character.screen_x-10
  3278.       self.z = @character.screen_z-1
  3279.       self.mirror = false
  3280.       change_angle(-45, 0, 45)
  3281.     when 6
  3282.       self.x = @character.screen_x+10
  3283.       self.z = @character.screen_z+2
  3284.       self.mirror = true
  3285.       change_angle(45, 0, -45)
  3286.     when 8
  3287.       self.x = @character.screen_x+10
  3288.       self.z = @character.screen_z-1
  3289.       self.mirror = true
  3290.       change_angle(45, 0, -45)
  3291.     end
  3292.     self.y = @character.screen_y-4
  3293.     self.opacity = @character.opacity
  3294.     self.blend_type = @character.blend_type
  3295.     self.bush_depth = @character.bush_depth
  3296.   end
  3297.  
  3298.   def change_angle(a, b, c)
  3299.     if @character.anime_attack >= 20
  3300.       self.angle = a
  3301.     elsif @character.anime_attack >= 15
  3302.       self.angle = b
  3303.     elsif @character.anime_attack >= 10
  3304.       self.angle = c
  3305.     end
  3306.   end
  3307.  
  3308.   def weapon_index
  3309.     return 0 if @character.actor.nil?
  3310.     if @character.actor.is_a?(Game_Actor) and @character.right_attack_on and @character.actor.equips[0] != nil
  3311.       return @character.actor.equips[0].icon_index
  3312.     elsif @character.actor.is_a?(Game_Actor) and @character.left_attack_on
  3313.       if @character.actor.two_swords_style and @character.actor.equips[1] != nil
  3314.         return @character.actor.equips[1].icon_index
  3315.       elsif @character.actor.two_hands_legal? and @character.actor.equips[0] != nil and @character.actor.equips[0].ranged?
  3316.         return @character.actor.equips[0].icon_index
  3317.       end
  3318.     elsif @character.actor.is_a?(Game_Enemy) and @character.actor.weapon_icon > 0
  3319.       return @character.actor.weapon_icon
  3320.     end
  3321.     return 0
  3322.   end
  3323.  
  3324. end
  3325.  
  3326. #------------------------------------------------------------------------------
  3327. # Sprite Shield
  3328. #------------------------------------------------------------------------------
  3329. class Sprite_Shield < Sprite_Base
  3330.  
  3331.   attr_accessor :character
  3332.  
  3333.   def initialize(viewport, character = nil)
  3334.     super(viewport)
  3335.     @character = character
  3336.     self.visible = false
  3337.     create_bitmap
  3338.     update
  3339.   end
  3340.  
  3341.   def update
  3342.     super
  3343.     return unless $Requiem_ABS.allow_shields_graphics
  3344.     return if @character.actor.nil?
  3345.     return if @character.is_a?(Game_Ally) and @character.map_id != $game_map.map_id
  3346.     self.visible = @character.actor.defending
  3347.     update_src_rect
  3348.     update_movement
  3349.     moving_with_shield
  3350.   end
  3351.  
  3352.   def create_bitmap
  3353.     self.bitmap = Cache.system("Iconset")
  3354.     self.ox = 12
  3355.     self.oy = 24
  3356.     self.zoom_x = 0.80
  3357.     self.zoom_y = 0.80
  3358.   end
  3359.  
  3360.   def update_src_rect
  3361.     sx = shield_index % 16 * 24
  3362.     sy = shield_index / 16 * 24
  3363.     self.src_rect.set(sx, sy, 24, 24)
  3364.   end
  3365.  
  3366.   def update_movement
  3367.     case @character.direction
  3368.     when 2
  3369.       self.mirror = true
  3370.       self.x = @character.screen_x+6
  3371.       self.z = @character.screen_z+1
  3372.     when 4
  3373.       self.mirror = false
  3374.       self.x = @character.screen_x-6
  3375.       self.z = @character.screen_z+1
  3376.     when 6
  3377.       self.mirror = true
  3378.       self.x = @character.screen_x+6
  3379.       self.z = @character.screen_z-1
  3380.     when 8
  3381.       self.mirror = false
  3382.       self.x = @character.screen_x-6
  3383.       self.z = @character.screen_z-1
  3384.     end
  3385.     self.y = @character.screen_y
  3386.     self.opacity = @character.opacity
  3387.     self.blend_type = @character.blend_type
  3388.     self.bush_depth = @character.bush_depth
  3389.   end
  3390.  
  3391.   def moving_with_shield
  3392.     if @character.moving?
  3393.       self.wave_amp = 1
  3394.       self.wave_length = 1
  3395.       self.wave_speed = 6
  3396.     else
  3397.       self.wave_amp = 0
  3398.     end
  3399.   end
  3400.  
  3401.   def shield_index
  3402.     return 0 if @character.actor.nil?
  3403.     if @character.actor.is_a?(Game_Actor) and !@character.actor.two_swords_style and @character.actor.armor1_id > 0
  3404.       return @character.actor.armors[0].icon_index
  3405.     elsif @character.actor.is_a?(Game_Enemy) and @character.actor.shield_icon > 0
  3406.       return @character.actor.shield_icon
  3407.     end
  3408.     return 0
  3409.   end
  3410.  
  3411. end
  3412.  
  3413. #------------------------------------------------------------------------------
  3414. # Spriteset Map
  3415. #------------------------------------------------------------------------------
  3416. class Spriteset_Map
  3417.  
  3418.   attr_accessor :viewport3
  3419.  
  3420.   alias requiem_abs_sp_map_create_characters create_characters
  3421.   alias requiem_abs_sp_map_dispose_characters dispose_characters
  3422.  
  3423.   def create_characters
  3424.     @allies_sprites = []
  3425.     for ally in $game_allies
  3426.       next if ally.nil?
  3427.       @allies_sprites.push(Sprite_Character.new(@viewport1, ally))
  3428.     end
  3429.     @range_sprites = []
  3430.     for range in $game_range
  3431.       next if range.nil? or !$game_map.in_range?(range)
  3432.       @range_sprites.push(Sprite_Character.new(@viewport1, range))
  3433.     end
  3434.     @drop_sprites = []
  3435.     for drop in $game_drop
  3436.       next if drop.nil? or !$game_map.in_range?(drop)
  3437.       @drop_sprites.push(Sprite_Drop.new(@viewport1, drop))
  3438.     end
  3439.     for bomb in $game_bomb
  3440.       next if bomb.nil? or !$game_map.in_range?(bomb)
  3441.       @drop_sprites.push(Sprite_Drop.new(@viewport1, bomb))
  3442.     end
  3443.     @weapon_sprites = []
  3444.     @shield_sprites = []
  3445.     @weapon_sprites.push(Sprite_Weapon.new(@viewport1, $game_player))
  3446.     @shield_sprites.push(Sprite_Shield.new(@viewport1, $game_player))
  3447.     for ally in $game_allies
  3448.       next if ally.nil?
  3449.       @weapon_sprites.push(Sprite_Weapon.new(@viewport1, ally))
  3450.       @shield_sprites.push(Sprite_Shield.new(@viewport1, ally))
  3451.     end
  3452.     for i in $game_map.events.keys.sort
  3453.       @weapon_sprites.push(Sprite_Weapon.new(@viewport1, $game_map.events[i]))
  3454.       @shield_sprites.push(Sprite_Shield.new(@viewport1, $game_map.events[i]))
  3455.     end
  3456.     @monsters_sprites = []
  3457.     for monster in $game_monsters
  3458.       next if monster.nil?
  3459.       @monsters_sprites.push(Sprite_Character.new(@viewport1, monster))
  3460.       @weapon_sprites.push(Sprite_Weapon.new(@viewport1, monster))
  3461.       @shield_sprites.push(Sprite_Shield.new(@viewport1, monster))
  3462.     end
  3463.     requiem_abs_sp_map_create_characters
  3464.   end
  3465.  
  3466.   def update_characters
  3467.     for sprite in @character_sprites    
  3468.       if sprite.character.is_a?(Game_Event)
  3469.         sprite.update if $game_map.in_range?(sprite.character)
  3470.       else
  3471.         sprite.update
  3472.       end
  3473.     end
  3474.     for ally in @allies_sprites
  3475.       next if ally.nil?
  3476.       if ally.character.destroy and !ally.disposed?
  3477.         ally.dispose
  3478.         $game_allies.delete(ally.character)
  3479.         @allies_sprites.delete(ally)
  3480.       elsif !ally.disposed?
  3481.         ally.update if $game_map.in_range?(ally.character)
  3482.       end
  3483.     end
  3484.     for monster in @monsters_sprites
  3485.       next if monster.nil?
  3486.       if monster.character.destroy and !monster.character.respawn and !monster.disposed?
  3487.         monster.dispose
  3488.         $game_monsters.delete(monster.character)
  3489.         @monsters_sprites.delete(monster)
  3490.       elsif !monster.disposed?
  3491.         monster.update if $game_map.in_range?(monster.character)
  3492.       end
  3493.     end
  3494.     for range in @range_sprites
  3495.       next if range.nil?
  3496.       if range.character.destroy and !range.disposed?
  3497.         range.dispose
  3498.         $game_range.delete(range.character)
  3499.         @range_sprites.delete(range)
  3500.       elsif !range.disposed?
  3501.         range.update if $game_map.in_range?(range.character)
  3502.       end
  3503.     end
  3504.     for drop in @drop_sprites
  3505.       next if drop.nil?
  3506.       if drop.character.destroy and !drop.disposed?
  3507.         drop.update
  3508.         drop.character.graphic_name = ""
  3509.         drop.dispose unless drop.animation?
  3510.         $game_drop.delete(drop.character)
  3511.         $game_bomb.delete(drop.character)
  3512.         @drop_sprites.delete(self)
  3513.       elsif !drop.disposed?
  3514.         drop.update if $game_map.in_range?(drop.character)
  3515.       end
  3516.     end
  3517.     for ally in $game_allies
  3518.       next if ally.nil?
  3519.       unless ally.draw
  3520.         @allies_sprites.push(Sprite_Character.new(@viewport1, ally))
  3521.         @weapon_sprites.push(Sprite_Weapon.new(@viewport1, ally))
  3522.         @shield_sprites.push(Sprite_Shield.new(@viewport1 ,ally))
  3523.         ally.draw = true
  3524.       end
  3525.     end
  3526.     for range in $game_range
  3527.       next if range.nil? or !$game_map.in_range?(range)
  3528.       unless range.draw
  3529.         @range_sprites.push(Sprite_Character.new(@viewport1, range))
  3530.         range.draw = true
  3531.       end
  3532.     end
  3533.     for drop in $game_drop
  3534.       next if drop.nil? or !$game_map.in_range?(drop)
  3535.       unless drop.draw
  3536.         @drop_sprites.push(Sprite_Drop.new(@viewport1, drop))
  3537.         drop.draw = true
  3538.       end
  3539.     end
  3540.     for bomb in $game_bomb
  3541.       next if bomb.nil? or !$game_map.in_range?(bomb)
  3542.       unless bomb.draw
  3543.         @drop_sprites.push(Sprite_Drop.new(@viewport1, bomb))
  3544.         bomb.draw = true
  3545.       end
  3546.     end
  3547.     for weapon in @weapon_sprites
  3548.       next if weapon.nil?  or !$game_map.in_range?(weapon.character)
  3549.       weapon.update
  3550.     end
  3551.     for shield in @shield_sprites
  3552.       next if shield.nil?  or !$game_map.in_range?(shield.character)
  3553.       shield.update
  3554.     end
  3555.   end
  3556.  
  3557.   def dispose_characters
  3558.     requiem_abs_sp_map_dispose_characters
  3559.     for ally in @allies_sprites
  3560.       next if ally.nil?
  3561.       ally.dispose
  3562.     end
  3563.     for monster in @monsters_sprites
  3564.       next if monster.nil?
  3565.       monster.dispose
  3566.     end
  3567.     for range in @range_sprites
  3568.       next if range.nil?
  3569.       range.dispose
  3570.     end
  3571.     for drop in @drop_sprites
  3572.       next if drop.nil?
  3573.       drop.dispose
  3574.     end
  3575.     for weapon in @weapon_sprites
  3576.       next if weapon.nil?
  3577.       weapon.dispose
  3578.     end
  3579.     for shield in @shield_sprites
  3580.       next if shield.nil?
  3581.       shield.dispose
  3582.     end
  3583.   end
  3584.  
  3585.   def refresh_characters
  3586.     dispose_characters
  3587.     create_characters
  3588.   end
  3589.  
  3590. end
  3591.  
  3592. #------------------------------------------------------------------------------
  3593. # Window Base
  3594. #------------------------------------------------------------------------------
  3595. class Window_Base < Window
  3596.  
  3597.   def draw_actor_head(actor, x, y, enabled=true)
  3598.     char_name = actor.character_name
  3599.     char_index = actor.character_index
  3600.     bitmap = Cache.character(char_name)
  3601.     sign = char_name[/^[\!\$]./]
  3602.     if sign != nil and sign.include?('$')
  3603.       cw = bitmap.width / 3
  3604.       ch = bitmap.height / 4
  3605.     else
  3606.       cw = bitmap.width / 12
  3607.       ch = bitmap.height / 8
  3608.     end
  3609.     enbl = (enabled ? 255 : 128)
  3610.     src_rect = Rect.new((char_index%4*3+1)*cw, (char_index/4*4)*ch, cw, ch/3*2)
  3611.     self.contents.blt(x, y, bitmap, src_rect, enbl)
  3612.   end
  3613.  
  3614. end
  3615.  
  3616. #------------------------------------------------------------------------------
  3617. # Scene Title
  3618. #------------------------------------------------------------------------------
  3619. class Scene_Title < Scene_Base
  3620.  
  3621.   alias requiem_abs_scenetitle_create_game_objects create_game_objects
  3622.   alias requiem_abs_scenetitle_command_new_game command_new_game
  3623.  
  3624.   def create_game_objects
  3625.     $game_monsters = []
  3626.     $game_allies = []
  3627.     $game_range = []
  3628.     $game_drop = []
  3629.     $game_bomb = []
  3630.     requiem_abs_scenetitle_create_game_objects
  3631.     $Requiem_ABS = Requiem_ABS.new
  3632.   end
  3633.  
  3634.   def command_new_game
  3635.     requiem_abs_scenetitle_command_new_game
  3636.     for ally in $game_allies
  3637.       next if ally.nil?
  3638.       ally.map_id = $data_system.start_map_id
  3639.       ally.moveto($data_system.start_x, $data_system.start_y)
  3640.       ally.move_random
  3641.     end
  3642.   end
  3643.  
  3644. end
  3645.  
  3646. #------------------------------------------------------------------------------
  3647. # Scene Map
  3648. #------------------------------------------------------------------------------
  3649. class Scene_Map < Scene_Base
  3650.  
  3651.   alias requiem_abs_scenemap_update update
  3652.  
  3653.   def update
  3654.     requiem_abs_scenemap_update
  3655.     for ally in $game_allies
  3656.       next if ally.nil?
  3657.       ally.update if $game_map.in_range?(ally)
  3658.     end
  3659.     for monster in $game_monsters
  3660.       next if monster.nil?
  3661.       monster.update if $game_map.in_range?(monster)
  3662.     end
  3663.     for range in $game_range
  3664.       next if range.nil?
  3665.       range.update if $game_map.in_range?(range)
  3666.     end
  3667.     for drop in $game_drop
  3668.       next if drop.nil?
  3669.       drop.update if $game_map.in_range?(drop)
  3670.     end
  3671.     for bomb in $game_bomb
  3672.       next if bomb.nil?
  3673.       bomb.update if $game_map.in_range?(bomb)
  3674.     end
  3675.   end
  3676.  
  3677.   def update_encounter
  3678.   end
  3679.  
  3680.   def refresh_sprites
  3681.     @spriteset.refresh_characters
  3682.     Cache.clear
  3683.   end
  3684.  
  3685. end
  3686.  
  3687. #------------------------------------------------------------------------------
  3688. # Scene Item
  3689. #------------------------------------------------------------------------------
  3690. class Window_Item < Window_Selectable
  3691.  
  3692.   def update_help
  3693.     if $scene.is_a?(Scene_Item) and $scene.message != ""
  3694.       @help_window.set_text($scene.message)
  3695.     else
  3696.       @help_window.set_text(item == nil ? "" : item.description)
  3697.     end
  3698.   end
  3699.  
  3700. end
  3701.  
  3702. #------------------------------------------------------------------------------
  3703. class Scene_Item < Scene_Base
  3704.  
  3705.   attr_accessor :message
  3706.   attr_accessor :delay
  3707.  
  3708.   alias requiem_abs_sitem_start start
  3709.   alias requiem_abs_sitem_update update
  3710.   alias requiem_abs_sitem_update_item_selection update_item_selection
  3711.  
  3712.   def start
  3713.     requiem_abs_sitem_start
  3714.     @actor = $game_party.members[0]
  3715.     @message = ""
  3716.     @delay = 0
  3717.   end
  3718.  
  3719.   def update
  3720.     requiem_abs_sitem_update
  3721.     if @delay <= 0
  3722.       @message = ""
  3723.     else
  3724.       @delay -= 1
  3725.     end
  3726.   end
  3727.  
  3728.   def update_item_selection
  3729.     requiem_abs_sitem_update_item_selection
  3730.     for button in @actor.item_hotkeys.keys
  3731.       if Input.trigger?(button) and @item_window.item.is_a?(RPG::Item)
  3732.         Sound.play_decision
  3733.         @actor.item_hotkeys[button] = @item_window.item.id
  3734.         @message = $Requiem_ABS.memorized_text
  3735.         @delay = 120
  3736.       end
  3737.     end
  3738.   end
  3739.  
  3740. end
  3741.  
  3742. #------------------------------------------------------------------------------
  3743. # Scene Skill
  3744. #------------------------------------------------------------------------------
  3745. class Window_Skill < Window_Selectable
  3746.  
  3747.   def update_help
  3748.     if $scene.is_a?(Scene_Skill) and $scene.message != ""
  3749.       @help_window.set_text($scene.message)
  3750.     else
  3751.       @help_window.set_text(skill == nil ? "" : skill.description)
  3752.     end
  3753.   end
  3754.  
  3755. end
  3756.  
  3757. #------------------------------------------------------------------------------
  3758. class Scene_Skill < Scene_Base
  3759.  
  3760.   attr_accessor :message
  3761.   attr_accessor :delay
  3762.  
  3763.   alias requiem_abs_sskill_start start
  3764.   alias requiem_abs_sskill_update update
  3765.   alias requiem_abs_sskill_update_skill_selection update_skill_selection
  3766.  
  3767.   def start
  3768.     requiem_abs_sskill_start
  3769.     @message = ""
  3770.     @delay = 0
  3771.   end
  3772.  
  3773.   def update
  3774.     requiem_abs_sskill_update
  3775.     if @delay <= 0
  3776.       @message = ""
  3777.     else
  3778.       @delay -= 1
  3779.     end
  3780.   end
  3781.  
  3782.   def update_skill_selection
  3783.     requiem_abs_sskill_update_skill_selection
  3784.     for button in @actor.skill_hotkeys.keys
  3785.       if Input.trigger?(button)
  3786.         Sound.play_decision
  3787.         @actor.skill_hotkeys[button] = @skill_window.skill.id
  3788.         @message = $Requiem_ABS.memorized_text
  3789.         @delay = 120
  3790.       end
  3791.     end
  3792.   end
  3793.  
  3794. end
  3795.  
  3796. #------------------------------------------------------------------------------
  3797. # Scene File
  3798. #------------------------------------------------------------------------------
  3799. class Scene_File < Scene_Base
  3800.  
  3801.   alias requiem_abs_sfile_do_load do_load
  3802.   alias requiem_abs_sfile_write_save_data write_save_data
  3803.   alias requiem_abs_sfile_read_save_data read_save_data
  3804.  
  3805.   def do_load
  3806.     requiem_abs_sfile_do_load
  3807.     $game_player.refresh
  3808.     for ally in $game_allies
  3809.       next if ally.nil?
  3810.       ally.refresh
  3811.     end
  3812.   end
  3813.  
  3814.   def write_save_data(file)
  3815.     requiem_abs_sfile_write_save_data(file)
  3816.     Marshal.dump($game_allies, file)
  3817.     Marshal.dump($game_monsters, file)
  3818.     Marshal.dump($game_range, file)
  3819.     Marshal.dump($game_drop, file)
  3820.     Marshal.dump($game_bomb, file)
  3821.   end
  3822.  
  3823.   def read_save_data(file)
  3824.     requiem_abs_sfile_read_save_data(file)
  3825.     $game_allies = Marshal.load(file)
  3826.     $game_monsters = Marshal.load(file)
  3827.     $game_range = Marshal.load(file)
  3828.     $game_drop = Marshal.load(file)
  3829.     $game_bomb = Marshal.load(file)
  3830.   end
  3831.  
  3832. end
  3833.  
  3834. #------------------------------------------------------------------------------
  3835. # High Priority
  3836. #------------------------------------------------------------------------------
  3837. Win32API.new("kernel32", "SetPriorityClass", "pi", "i").call(-1, 0x80)
  3838.  
  3839. #------------------------------------------------------------------------------
  3840. # End of ABS
  3841. #------------------------------------------------------------------------------
  3842. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement