SHARE
TWEET

Verus Tempus Proelium General Instructions

a guest May 25th, 2010 699 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #==============================================================================
  2. # Vampyr - Verus Tempus Proelium
  3. #==============================================================================
  4. Vampyr_Kernel.register("Vampyr Verus Tempus Proelium", 1.0, "03/23/2010")
  5. #------------------------------------------------------------------------------
  6. # Key to attack
  7. Attack_Key = Input::X
  8.  
  9. # Key to use shield
  10. Defend_Key = Input::Y
  11.  
  12. # Key used to cast skills (R = Letter W)
  13. Skills_Key = Input::R
  14.  
  15. # Key used to cast items ( L = Letter Q)
  16. Items_Key  = Input::L
  17.  
  18. # Key used to change allies actions (Z = Letter D)
  19. Allies_Key = Input::Z
  20.  
  21. # Index of the gold icon and drop %
  22. Gold_Properties = 147, 50
  23.  
  24. # Battle Area Variable (Used to open doors after kill X enemies, for example)
  25. Battle_Area_Variable = 0
  26.  
  27. # Hits Propertires
  28. Hit = {}
  29. Hit["show"]     = true
  30. Hit["font"]     = ["Georgia", 22, false, true] # Face, Size, Bold, Italic
  31. Hit["texts"]    = ["Hits", "Total Damage"]
  32. Hit["position"] = [334, 175]
  33.  
  34. # Damage Properties
  35. Damage = {}
  36. Damage["font"]  = ["Georgia", 20, false, true] # Face, Size, Bold, Italic
  37. Damage["texts"] = ["Miss", "Critical", "Guard"]
  38.  
  39. #------------------------------------------------------------------------------
  40. class VerusTempusProelium
  41.  
  42.   attr_reader :attack_key
  43.   attr_reader :defend_key
  44.   attr_reader :skills_key
  45.   attr_reader :items_key
  46.   attr_reader :allies_key
  47.   attr_reader :hit
  48.   attr_reader :damage
  49.   attr_reader :hits_total
  50.   attr_reader :damage_total
  51.   attr_reader :gold_properties
  52.   attr_reader :battle_area_variable
  53.  
  54.   def initialize
  55.     @hits_total = 0
  56.     @damage_total = 0
  57.     @hitcount_delay = 0
  58.     @attack_key = Attack_Key
  59.     @defend_key = Defend_Key
  60.     @skills_key = Skills_Key    
  61.     @items_key = Items_Key
  62.     @allies_key = Allies_Key
  63.     @hit = Hit
  64.     @damage = Damage
  65.     @gold_properties = Gold_Properties
  66.     @battle_area_variable = Battle_Area_Variable
  67.   end
  68.  
  69.   def update
  70.     if @hitcount_delay > 0
  71.       @hitcount_delay -= 1
  72.     elsif @hitcount_delay <= 0 and @hits_total > 0
  73.       @hits_total = 0
  74.       @damage_total = 0
  75.     end
  76.   end
  77.  
  78.   def melee_attack(attacker, target)
  79.     attacker.attack_delay = attacker.actor.attack_speed
  80.     attacker.animation_delay = 30
  81.     return unless valid_target?(target)
  82.     return if guard?(attacker, target)
  83.     target.actor.attack_effect(attacker.actor)
  84.     target.animation_id = attacker.actor.atk_animation_id.to_i
  85.     hit_count(attacker, target)
  86.     target.target = attacker unless same_team?(attacker, target)
  87.   end
  88.  
  89.   def melee_attack2(attacker, target)
  90.     attacker.attack2_delay = attacker.actor.attack_speed
  91.     attacker.animation_delay = 30
  92.     return unless valid_target?(target)
  93.     return unless attacker.in_front?(target)
  94.     return if guard?(attacker, target)
  95.     target.actor.attack_effect(attacker.actor)
  96.     target.animation_id = attacker.actor.atk_animation_id2
  97.     hit_count(attacker, target)
  98.     target.target = attacker unless same_team?(attacker, target)
  99.   end
  100.  
  101.   def range_attack(attacker, hand)
  102.     weapon = attacker.actor.weapons[hand]
  103.     return if weapon.ammo_list.empty?
  104.     return if attacker.actor.ammos[weapon.id] == nil
  105.     ammo = $data_items[attacker.actor.ammos[weapon.id]]
  106.     return if ammo == nil
  107.     return unless $game_party.has_item?(ammo)
  108.     $game_party.consume_item(ammo)
  109.     attacker.attack_delay = [(60-ammo.speed), 10].max if hand == 0
  110.     attacker.attack2_delay = [(60-ammo.speed), 10].max if hand == 1
  111.     attacker.animation_delay = 30
  112.     $game_projectiles << Game_Projectile.new(attacker, ammo)
  113.   end
  114.  
  115.   def skill_attack(attacker, skill, parent=nil)
  116.     return if attacker.actor.mp < skill.mp_cost
  117.     attacker = (parent == nil ? attacker : parent)
  118.     target = (attacker.heal_target == nil ? select_target(attacker, skill) :  attacker.heal_target)
  119.     if !target.empty? and parent == nil
  120.       attacker.actor.mp -= attacker.actor.calc_mp_cost(skill)
  121.       $game_temp.common_event_id = skill.common_event_id if skill.common_event_id > 0
  122.       attacker.skill_delay = [(60-skill.speed), 10].max
  123.       attacker.animation_delay = 30
  124.     end
  125.     for i in target.compact
  126.       next if guard?(attacker, i)
  127.       i.actor.skill_effect(attacker.actor, skill)
  128.       i.animation_id = skill.animation_id
  129.       hit_count(attacker, i)
  130.       i.target = attacker.actor.character unless same_team?(attacker, i)
  131.     end
  132.   end
  133.  
  134.   def cast_skill(attacker, skill)
  135.     return if attacker.actor.mp < skill.mp_cost
  136.     attacker.actor.mp -= attacker.actor.calc_mp_cost(skill)
  137.     $game_temp.common_event_id = skill.common_event_id if skill.common_event_id > 0
  138.     attacker.skill_delay = [(60-skill.speed), 10].max
  139.     attacker.animation_delay = 30
  140.     $game_projectiles << Game_Projectile.new(attacker, skill)
  141.   end
  142.  
  143.   def item_attack(attacker, item, parent=nil)
  144.     attacker = (parent == nil ? attacker : parent)
  145.     return unless $game_party.has_item?(item)
  146.     target = (attacker.heal_target == nil ? select_target(attacker, item) :  attacker.heal_target)
  147.     if !target.empty? and parent == nil
  148.       $game_party.consume_item(item)
  149.       $game_temp.common_event_id = item.common_event_id if item.common_event_id > 0
  150.       attacker.item_delay = [(60-item.speed), 10].max
  151.       attacker.animation_delay = 30
  152.     end
  153.     for i in target.compact
  154.       next if guard?(attacker, i)
  155.       i.actor.item_effect(attacker.actor, item)
  156.       i.animation_id = item.animation_id
  157.       hit_count(attacker, i)
  158.       i.target = attacker.actor.character unless same_team?(attacker, i)
  159.     end
  160.   end
  161.  
  162.   def cast_item(attacker, item)
  163.     return unless $game_party.has_item?(item)
  164.     $game_party.consume_item(item)
  165.     $game_temp.common_event_id = item.common_event_id if item.common_event_id > 0
  166.     attacker.item_delay = [(60-item.speed), 10].max
  167.     attacker.animation_delay = 30
  168.     $game_projectiles << Game_Projectile.new(attacker, item)
  169.   end
  170.  
  171.   def select_target(attacker, object=nil)
  172.     targets = []
  173.     targets << $game_player if $game_player.actor != nil
  174.     for ally in $game_allies.compact
  175.       next unless $game_map.in_range?(ally)
  176.       next if ally.actor.dead?
  177.       targets << ally
  178.     end
  179.     for monster in $game_monsters.compact
  180.       next unless $game_map.in_range?(monster)
  181.       next if monster.actor.dead?
  182.       targets << monster
  183.     end
  184.     for event in $game_map.events.values.compact
  185.       next unless $game_map.in_range?(event)
  186.       next if event.actor == nil
  187.       next if event.actor.dead?
  188.       targets << event
  189.     end
  190.     return targets if object == nil
  191.     case object.scope
  192.     when 1
  193.       selected = []
  194.       for target in targets
  195.         next if same_team?(attacker, target)
  196.         selected << target if attacker.in_front?(target)
  197.       end
  198.       return selected
  199.     when 2
  200.       selected = []
  201.       for target in targets
  202.         next if same_team?(attacker, target)
  203.         selected << target
  204.       end
  205.       return selected
  206.     when 3
  207.       selected = []
  208.       for target in targets
  209.         next if same_team?(attacker, target)
  210.         selected << target if attacker.in_front?(target)
  211.       end
  212.       return selected
  213.     when 4
  214.       selected = []
  215.       for target in targets
  216.         next if same_team?(attacker, target)
  217.         selected << target if attacker.in_front?(target)
  218.       end
  219.       return selected[rand(selected.size)]
  220.     when 5
  221.       selected = []
  222.       for target in targets
  223.         next if same_team?(attacker, target)
  224.         selected << target if attacker.in_front?(target)
  225.       end
  226.       return selected
  227.       a = selected[rand(selected.size)]
  228.       b = targets - a
  229.       c = b[rand(b.size)]
  230.       return [a, c]
  231.     when 6
  232.       selected = []
  233.       for target in targets
  234.         next if same_team?(attacker, target)
  235.         selected << target if attacker.in_front?(target)
  236.       end
  237.       return selected
  238.       a = selected[rand(selected.size)]
  239.       b = targets - a
  240.       c = b[rand(b.size)]
  241.       d = b - c
  242.       e = d[rand(d.size)]
  243.       return [a, c, e]
  244.     when 7
  245.       selected = []
  246.       for target in targets
  247.         next unless same_team?(attacker, target)
  248.         selected << target
  249.       end
  250.       return [selected[rand(selected.size)]]
  251.     when 8
  252.       selected = []
  253.       for target in targets
  254.         next unless same_team?(attacker, target)
  255.         selected << target
  256.       end
  257.       return selected
  258.     when 9
  259.       selected = []
  260.       targets = []
  261.       for ally in $game_allies.compact
  262.         next unless $game_map.in_range?(ally)
  263.         targets << ally if ally.actor.dead?
  264.       end
  265.       for monster in $game_monsters.compact
  266.         next unless $game_map.in_range?(monster)
  267.         targets << monster if monster.actor.dead?
  268.       end
  269.       for event in $game_map.events.values.compact
  270.         next unless $game_map.in_range?(event)
  271.         next if event.is_object?
  272.         next if event.actor == nil
  273.         next if event.actor.dead?
  274.         targets << event if event.actor.dead?
  275.       end
  276.       for target in targets
  277.         next unless same_team?(attacker, target)
  278.         selected << target
  279.       end
  280.       return [selected[rand(selected.size)]]
  281.     when 10
  282.       selected = []
  283.       targets = []
  284.       for ally in $game_allies.compact
  285.         next unless $game_map.in_range?(ally)
  286.         targets << ally if ally.actor.dead?
  287.       end
  288.       for monster in $game_monsters.compact
  289.         next unless $game_map.in_range?(monster)
  290.         targets << monster if monster.actor.dead?
  291.       end
  292.       for event in $game_map.events.values.compact
  293.         next unless $game_map.in_range?(event)
  294.         next if event.is_object?
  295.         next if event.actor == nil
  296.         next if event.actor.dead?
  297.         targets << event if event.actor.dead?
  298.       end
  299.       for target in targets
  300.         next unless same_team?(attacker, target)
  301.         selected << target
  302.       end
  303.       return selected
  304.     when 11
  305.       return [attacker]
  306.     end
  307.     return []
  308.   end
  309.  
  310.   def enemy_actions(attacker)
  311.     return if attacker.actor == nil
  312.     return if attacker.actor.dead?
  313.     for action in attacker.actor.enemy.actions
  314.       next unless attacker.actor.conditions_met?(action)
  315.       next if rand(11) > action.rating and (!action.kind == 1 and action.rating >= 10)
  316.       case action.kind
  317.       when 0
  318.         case action.basic
  319.         when 0
  320.           next if blocked_by_state?(attacker, 0)
  321.           next if attacker.attack_delay > 0
  322.           for target in select_target(attacker)
  323.             next if same_team?(attacker, target)
  324.             next unless attacker.in_front?(target)
  325.             attacker.target = target
  326.             melee_attack(attacker, target)
  327.           end
  328.         when 1
  329.           attacker.defend_delay = attacker.actor.attack_speed
  330.         end
  331.       when 1
  332.         next if blocked_by_state?(attacker, 1)
  333.         skill = $data_skills[action.skill_id]
  334.         next if attacker.skill_delay > 0
  335.         if skill.scope >= 7
  336.           targets = []
  337.           for monster in $game_monsters.compact
  338.             next unless $game_map.in_range?(monster)
  339.             next if monster.actor.dead?
  340.             targets << monster
  341.           end
  342.           for event in $game_map.events.values.compact
  343.             next unless $game_map.in_range?(event)
  344.             next if event.erased
  345.             next if event.actor == nil
  346.             next if event.is_object?
  347.             targets << event
  348.           end
  349.           for target in targets.compact
  350.             next unless curable?(target, skill)
  351.             attacker.heal_target = [target]
  352.             skill_attack(attacker, skill)
  353.           end
  354.         else
  355.           if skill.ranged?
  356.             if action.rating >= 10
  357.               cast_skill(attacker, skill)
  358.             else
  359.               for target in select_target(attacker, skill)
  360.                 next if same_team?(self, target)
  361.                 next unless attacker.in_range?(target, skill.range)
  362.                 next unless attacker.in_direction?(target)
  363.                 attacker.target = target
  364.                 cast_skill(attacker, skill)
  365.               end
  366.             end
  367.           else
  368.             skill_attack(attacker, skill)
  369.           end
  370.         end
  371.       end  
  372.     end
  373.   end
  374.  
  375.   def make_drop(attacker)
  376.     Sound.play_enemy_collapse
  377.     for ally in $game_allies.compact
  378.       ally.target = nil if ally.target == attacker
  379.     end
  380.     droped_items = []
  381.     for i in [attacker.actor.drop_item1, attacker.actor.drop_item2]
  382.       next if i.kind <= 0
  383.       next if rand(i.denominator) != 0
  384.       case i.kind
  385.         when 1; droped_items << $data_items[i.item_id]
  386.         when 2; droped_items << $data_weapons[i.weapon_id]
  387.         when 3; droped_items << $data_armors[i.armor_id]
  388.       end
  389.     end
  390.     for actors in $game_party.members
  391.       actors.gain_exp(attacker.actor.exp, true)
  392.     end
  393.     if rand(100) < @gold_properties[1] and attacker.actor.gold > 0
  394.       $game_items << Game_Item.new(attacker, attacker.actor.gold)
  395.     end
  396.     droped_items.compact.each { |i| $game_items << Game_Item.new(attacker, i) }
  397.     if $game_system.enemies_defeated[attacker.target.actor.id][attacker.actor.enemy_id] == nil
  398.       $game_system.enemies_defeated[attacker.target.actor.id][attacker.actor.enemy_id] = 1
  399.     else
  400.       $game_system.enemies_defeated[attacker.target.actor.id][attacker.actor.enemy_id] += 1
  401.     end
  402.     $game_variables[@battle_area_variable] += 1 if @battle_area_variable > 0
  403.    
  404.   end
  405.  
  406.   def hit_count(attacker, target)
  407.     return unless @hit["show"]
  408.     return unless attacker.is_a?(Game_Player)
  409.     return if target.is_a?(Game_Player)
  410.     return if target.is_object?
  411.     @hits_total += 1
  412.     @damage_total += target.damage.to_i
  413.     @hitcount_delay = 60
  414.   end
  415.  
  416.   def valid_target?(target)
  417.     return false if target == nil
  418.     return false if target.actor == nil
  419.     return false if target.actor.dead?
  420.     return false if target.in_vehicle?
  421.     return true if target.is_a?(Game_Player)
  422.     return true if target.is_a?(Game_Ally)
  423.     return true if target.is_a?(Game_Monster)
  424.     return true if target.is_a?(Game_Event) and target.actor != nil
  425.     return false
  426.   end
  427.  
  428.   def guard?(attacker, target)
  429.     return false if target == nil
  430.     return false unless target.defending
  431.     return false unless attacker.face_to_face?(target)
  432.     if target.actor.is_a?(Game_Actor)
  433.       return false unless target.actor.armors[0].is_a?(RPG::Armor)
  434.       rate = target.actor.armors[0].guard_rate.to_i
  435.     elsif target.actor.is_a?(Game_Enemy)
  436.       rate = target.actor.guard_rate.to_i
  437.     end
  438.     if rand(101) <= rate
  439.       target.damage = "Guard"
  440.       return true
  441.     end
  442.     return false
  443.   end
  444.  
  445.   def same_team?(attacker, target)
  446.     if attacker.is_a?(Game_Ally) or attacker.is_a?(Game_Player)
  447.       return true if target.is_a?(Game_Ally) or target.is_a?(Game_Player)
  448.     end
  449.     if attacker.is_a?(Game_Monster) or (attacker.is_a?(Game_Event) and attacker.actor != nil)
  450.       return true if target.is_a?(Game_Monster) or (target.is_a?(Game_Event) and target.actor != nil)
  451.     end
  452.     if attacker.is_a?(Game_Projectile)
  453.       if (attacker.parent.is_a?(Game_Ally) or attacker.parent.is_a?(Game_Player)) and
  454.         (target.is_a?(Game_Ally) or target.is_a?(Game_Player))
  455.         return true
  456.       end
  457.       if (attacker.parent.is_a?(Game_Monster) or (attacker.is_a?(Game_Event) and attacker.actor != nil)) and
  458.         (target.is_a?(Game_Monster) or (target.is_a?(Game_Event) and target.actor != nil))
  459.         return true
  460.       end
  461.     end
  462.     return false
  463.   end
  464.  
  465.   def curable?(target, object)
  466.     return false if object.scope < 7
  467.     for state in target.actor.states.compact
  468.       return true if object.minus_state_set.include?(state.id)
  469.     end
  470.     return false if target.actor.dead?
  471.     if (target.actor.hp < (target.actor.maxhp*25/100)) and
  472.       ((object.is_a?(RPG::Skill) and object.base_damage < 0) or
  473.       (object.is_a?(RPG::Item) and (object.hp_recovery_rate > 0 or object.hp_recovery > 0)))
  474.       return true
  475.     end
  476.     if (object.is_a?(RPG::Item) and target.actor.mp < (target.actor.maxmp*25/100)) and
  477.       (object.mp_recovery_rate > 0 or object.mp_recovery > 0)
  478.       return true
  479.     end
  480.     return false
  481.   end
  482.  
  483.   def blocked_by_state?(attacker, kind)
  484.     return if attacker.actor == nil
  485.     for state in attacker.actor.states.compact
  486.       return true if kind == 0 and state.restriction == 4
  487.       return true if kind == 1 and state.restriction == 1
  488.       return true if kind == 2 and state.restriction == 5
  489.     end
  490.     return false
  491.   end
  492.  
  493. end
  494.  
  495. #------------------------------------------------------------------------------
  496. module RPG
  497.  
  498.   class State
  499.    
  500.     def animation_id
  501.       self.note.read("Animation")
  502.     end
  503.    
  504.   end
  505.  
  506.   class BaseItem
  507.    
  508.     def ranged?
  509.       self.note.load("Ranged")
  510.     end
  511.    
  512.     def character
  513.       self.note.read("Character")
  514.     end
  515.    
  516.     def index
  517.       self.note.read("Index")
  518.     end
  519.    
  520.     def move_speed
  521.       self.note.read("Speed", 6)
  522.     end
  523.    
  524.     def range
  525.       self.note.read("Range", 5)
  526.     end
  527.    
  528.     def guard_rate
  529.       self.note.read("Guard Rate", 50)
  530.     end
  531.    
  532.     def ammo?
  533.       self.note.load("Ammo")
  534.     end
  535.    
  536.     def ammo_list
  537.       ammos = self.note.read("Ammos")
  538.       return [] if ammos == nil
  539.       list = []
  540.       for i in ammos.split(",")
  541.         list << i.to_i
  542.       end
  543.       return list
  544.     end
  545.    
  546.   end
  547.  
  548. end
  549.  
  550. #------------------------------------------------------------------------------
  551. class Object
  552.  
  553.   def load(param)
  554.     self.each_line { |i| return true if i =~ /#{param}/i }
  555.     return false
  556.   end
  557.  
  558.   def read(param, onfail=nil)    
  559.     self.each_line { |i| return i.gsub("#{param} = ", "").chomp if i =~ /#{param} = /i }
  560.     return onfail
  561.   end
  562.  
  563. end
  564.  
  565. #------------------------------------------------------------------------------
  566. class Bitmap
  567.  
  568.   def draw_outlined_text(*args)
  569.     if args[0].is_a?(Rect)
  570.       x = args[0].x
  571.       y = args[0].y
  572.       w = args[0].width
  573.       h = args[0].height
  574.       s = args[1]
  575.       a = (args[2].nil? ? 0 : args[2])
  576.     else
  577.       x = args[0]
  578.       y = args[1]
  579.       w = args[2]
  580.       h = args[3]
  581.       s = args[4]
  582.       a = (args[5].nil? ? 0 : args[5])
  583.     end
  584.     color = font.color.clone
  585.     font.shadow = false
  586.     font.color = Color.new(0,0,0)
  587.     draw_text(x-1, y-1, w, h, s, a)
  588.     draw_text(x+1, y-1, w, h, s, a)
  589.     draw_text(x-1, y+1, w, h, s, a)
  590.     draw_text(x+1, y+1, w, h, s, a)
  591.     font.color = color.clone
  592.     draw_text(x, y, w, h, s, a)
  593.   end
  594.  
  595. end
  596.  
  597. #------------------------------------------------------------------------------
  598. class Game_System
  599.  
  600.   attr_accessor :enemies_defeated
  601.  
  602.   alias vtp_gsystem_initialize initialize
  603.  
  604.   def initialize
  605.     vtp_gsystem_initialize
  606.     @enemies_defeated = {}
  607.   end
  608.  
  609. end
  610.  
  611. #------------------------------------------------------------------------------
  612. class Game_Battler
  613.  
  614.   attr_accessor :character
  615.  
  616.   alias vtp_gbattler_execute_damage execute_damage
  617.  
  618.   def attack_effect(attacker)
  619.     clear_action_results
  620.     return if @character.unkileable?
  621.     if @character.is_object?
  622.       self.hp -= self.maxhp
  623.       return
  624.     end
  625.     unless attack_effective?(attacker)
  626.       @character.damage = $VTP.damage["texts"][0]
  627.       @skipped = true
  628.       return
  629.     end
  630.     if rand(100) >= calc_hit(attacker)
  631.       @character.damage = $VTP.damage["texts"][0]
  632.       @missed = true
  633.       return
  634.     end
  635.     if rand(100) < calc_eva(attacker)
  636.       @character.damage = $VTP.damage["texts"][0]
  637.       @evaded = true
  638.       return
  639.     end
  640.     make_attack_damage_value(attacker)
  641.     execute_damage(attacker)
  642.     if @hp_damage == 0
  643.       @character.damage = $VTP.damage["texts"][0]
  644.       return                                    
  645.     end
  646.     apply_state_changes(attacker)
  647.   end
  648.  
  649.   def skill_effect(user, skill)
  650.     clear_action_results
  651.     return if @character.unkileable?
  652.     if @character.is_object?
  653.       self.hp -= self.maxhp
  654.       return
  655.     end
  656.     unless skill_effective?(user, skill)
  657.       @character.damage = $VTP.damage["texts"][0]
  658.       @skipped = true
  659.       return
  660.     end
  661.     if rand(100) >= calc_hit(user, skill)
  662.       @character.damage = $VTP.damage["texts"][0]
  663.       @missed = true
  664.       return
  665.     end
  666.     if rand(100) < calc_eva(user, skill)
  667.       @character.damage = $VTP.damage["texts"][0]
  668.       @evaded = true
  669.       return
  670.     end
  671.     make_obj_damage_value(user, skill)
  672.     make_obj_absorb_effect(user, skill)
  673.     execute_damage(user)
  674.     if skill.physical_attack and @hp_damage == 0
  675.       return                                    
  676.     end
  677.     apply_state_changes(skill)
  678.   end
  679.  
  680.   def item_effect(user, item)
  681.     clear_action_results
  682.     return if @character.unkileable?
  683.     if @character.is_object?
  684.       self.hp -= self.maxhp
  685.       return
  686.     end
  687.     unless item_effective?(user, item)
  688.       @character.damage = $VTP.damage["texts"][0]
  689.       @skipped = true
  690.       return
  691.     end
  692.     if rand(100) >= calc_hit(user, item)
  693.       @character.damage = $VTP.damage["texts"][0]
  694.       @missed = true
  695.       return
  696.     end
  697.     if rand(100) < calc_eva(user, item)
  698.       @character.damage = $VTP.damage["texts"][0]
  699.       @evaded = true
  700.       return
  701.     end
  702.     hp_recovery = calc_hp_recovery(user, item)
  703.     mp_recovery = calc_mp_recovery(user, item)
  704.     make_obj_damage_value(user, item)
  705.     @hp_damage -= hp_recovery
  706.     @mp_damage -= mp_recovery
  707.     make_obj_absorb_effect(user, item)
  708.     execute_damage(user)
  709.     item_growth_effect(user, item)
  710.     if item.physical_attack and @hp_damage == 0
  711.       return                                    
  712.     end
  713.     apply_state_changes(item)
  714.   end
  715.  
  716.   def execute_damage(user)
  717.     vtp_gbattler_execute_damage(user)
  718.     @character.damage = @hp_damage
  719.     @character.critical = @critical
  720.   end
  721.  
  722.   def remove_state(state_id)
  723.     return unless state?(state_id)
  724.     @states.delete(state_id)
  725.     @state_turns.delete(state_id)
  726.   end
  727.  
  728. end
  729. #------------------------------------------------------------------------------
  730. class Game_Party < Game_Unit
  731.  
  732.   attr_accessor :reward
  733.  
  734.   alias vtp_gparty_setup_starting_members setup_starting_members
  735.   alias vtp_gparty_add_actor add_actor
  736.   alias vtp_gparty_remove_actor remove_actor
  737.   alias vtp_gparty_gain_item gain_item
  738.   alias vtp_gparty_gain_gold gain_gold
  739.  
  740.   def setup_starting_members
  741.     vtp_gparty_setup_starting_members
  742.     for i in 1...@actors.size
  743.       next if @actors[i] == nil
  744.       $game_allies[i] = Game_Ally.new(i)
  745.     end
  746.     for i in members
  747.       $game_system.enemies_defeated[i.id] = {}
  748.     end
  749.   end
  750.  
  751.   def add_actor(actor_id)
  752.     vtp_gparty_add_actor(actor_id)
  753.     id = @actors.size-1
  754.     if @actors.size > 1
  755.       $game_allies[id] = Game_Ally.new(id)
  756.       $game_allies[id].moveto($game_player.x, $game_player.y)
  757.       $game_allies[id].move_random
  758.       $game_player.refresh
  759.       $scene.refresh_allies_sprites if $scene.is_a?(Scene_Map)
  760.     end
  761.     if $game_system.enemies_defeated[actor_id] == nil
  762.       $game_system.enemies_defeated[actor_id] = {}
  763.     end
  764.   end
  765.  
  766.   def remove_actor(actor_id)
  767.     vtp_gparty_remove_actor(actor_id)
  768.     for ally in $game_allies.compact
  769.       next if ally.actor.id != actor_id
  770.       $game_allies.delete(ally)
  771.       $game_player.refresh
  772.       $scene.refresh_allies_sprites if $scene.is_a?(Scene_Map)
  773.     end
  774.   end
  775.  
  776.   def gain_item(item, n, include_equip = false)
  777.     vtp_gparty_gain_item(item, n, include_equip)
  778.     @reward = item.name if n > 0 and item != nil and $scene.is_a?(Scene_Map)
  779.   end
  780.  
  781.   def gain_gold(n)
  782.     vtp_gparty_gain_gold(n)
  783.     @reward = "#{Vocab.gold} #{n}" if n > 0 and $scene.is_a?(Scene_Map)
  784.   end
  785.  
  786.   def change_group_order
  787.     availables = []
  788.     unavailables = []
  789.     for actor in members
  790.       if actor.dead?
  791.         unavailables << actor
  792.       else
  793.         availables << actor
  794.       end
  795.     end
  796.     return if availables.empty?
  797.     availables.reverse!
  798.     @actors.clear
  799.     for i in availables
  800.       add_actor(i.id)
  801.     end
  802.     for i in unavailables
  803.       add_actor(i.id)
  804.     end
  805.     $game_player.refresh
  806.     $game_allies.compact.each { |i| i.refresh }
  807.   end
  808.  
  809. end
  810.  
  811. #------------------------------------------------------------------------------
  812. class Game_Actor < Game_Battler
  813.  
  814.   attr_accessor :ammos
  815.   attr_accessor :skill_hotkeys
  816.   attr_accessor :item_hotkeys
  817.  
  818.   alias vtp_gactor_setup setup
  819.   alias vtp_gactor_forget_skill forget_skill
  820.  
  821.   def setup(actor_id)
  822.     vtp_gactor_setup(actor_id)
  823.     @ammos = {}
  824.     @skill_hotkeys = {}
  825.     @item_hotkeys = {}
  826.   end
  827.  
  828.   def forget_skill(skill_id)
  829.     vtp_gactor_forget_skill(skill_id)
  830.     @skill_hotkeys.delete(@skill_hotkeys.index(skill_id))
  831.   end
  832.  
  833.   def atk_animation_id
  834.     return (weapons[0] == nil ? 1 : weapons[0].animation_id)
  835.   end
  836.  
  837.   def atk_animation_id2
  838.     return (weapons[1] == nil ? 1 : weapons[1].animation_id)
  839.   end
  840.  
  841.   def display_level_up(new_skills)
  842.     return if dead?
  843.     @character.animation_id = 40
  844.     @damage = "Level Up"
  845.   end
  846.  
  847.   def current_exp
  848.     return (@exp - @exp_list[@level])
  849.   end
  850.  
  851.   def next_exp
  852.     return (@exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0)
  853.   end
  854.  
  855.   def attack_speed
  856.     return 30
  857.   end
  858.  
  859. end
  860.  
  861. #------------------------------------------------------------------------------
  862. class Game_Enemy < Game_Battler
  863.  
  864.   attr_accessor :level
  865.  
  866.   alias vtp_genemy_initialize initialize
  867.  
  868.   def initialize(index, enemy_id)
  869.     vtp_genemy_initialize(index, enemy_id)
  870.     @level = 1
  871.   end
  872. =begin  
  873.   def base_maxhp
  874.     return enemy.maxhp * ([@level, 1].max * 1.25)
  875.   end
  876.  
  877.   def base_maxmp
  878.     return enemy.maxmp * ([@level, 1].max * 1.25)
  879.   end
  880.  
  881.   def base_atk
  882.     return enemy.atk * ([@level, 1].max * 1.25)
  883.   end
  884.  
  885.   def base_def
  886.     return enemy.def * ([@level, 1].max * 1.25)
  887.   end
  888.  
  889.   def base_spi
  890.     return enemy.spi * ([@level, 1].max * 1.25)
  891.   end
  892.  
  893.   def base_agi
  894.     return enemy.agi * ([@level, 1].max * 1.25)
  895.   end
  896. =end  
  897.   def name
  898.     return (@level > 1 ? "#{enemy.name} #{Vocab.level_a}#{@level}" : enemy.name)
  899.   end
  900.  
  901.   def character_name
  902.     enemy.note.read("Character")
  903.   end
  904.  
  905.   def character_index
  906.     enemy.note.read("Index")
  907.   end
  908.  
  909.   def respawn
  910.     enemy.note.read("Respawn")
  911.   end
  912.  
  913.   def move_speed
  914.     enemy.note.read("Move Speed", 3)
  915.   end
  916.  
  917.   def atk_animation_id
  918.     enemy.note.read("Attack Animation", 1)
  919.   end
  920.  
  921.   def aggressiveness
  922.     enemy.note.read("Aggressiveness", 3)
  923.   end
  924.  
  925.   def weapon_icon
  926.     enemy.note.read("Weapon Icon")
  927.   end
  928.  
  929.   def shield_icon
  930.     enemy.note.read("Shield Icon")
  931.   end
  932.  
  933.   def guard_rate
  934.     enemy.note.read("Guard Rate", 50)
  935.   end
  936.  
  937.   def attack_speed
  938.     return 60
  939.   end
  940.  
  941.   def on_enemy_walk
  942.     if slip_damage?
  943.       enemy.hp -= 1 if enemy.hp > 1
  944.     end
  945.   end
  946.  
  947. end
  948.  
  949. #------------------------------------------------------------------------------
  950. class Game_Map
  951.  
  952.   alias vtp_hmap_passable passable?
  953.   alias vtp_gmap_setup_events setup_events
  954.  
  955.   def passable?(x, y, flag = 0x01)
  956.     for monster in $game_monsters.compact
  957.       next if monster.actor.dead?
  958.       return false if x == monster.x and y == monster.y
  959.     end
  960.     vtp_hmap_passable(x, y, flag)
  961.   end
  962.  
  963.   def passable2?(x, y, flag = 0x01)
  964.     for ally in $game_allies.compact
  965.       next if ally.actor.dead?
  966.       next if ally.in_vehicle?
  967.       return false if x == ally.x and y == ally.y
  968.     end
  969.     return passable?(x, y)
  970.   end
  971.  
  972.   def range_passable?(x, y)
  973.     return true if @passages[@map.data[x, y, 0]] == 9
  974.     return passable?(x, y)
  975.   end
  976.  
  977.   def setup_events
  978.     vtp_gmap_setup_events
  979.     $game_monsters.clear
  980.     for area in $data_areas.values
  981.       next if area.map_id != @map_id
  982.       for i in area.encounter_list
  983.         read_level = $data_troops[i].name[/Lv\d+/i]
  984.         level = (read_level == nil ? 1 : read_level[/\d+/].to_i)
  985.         for m in $data_troops[i].members
  986.           $game_monsters << Game_Monster.new(m.enemy_id, m.id, level, area)
  987.         end
  988.       end
  989.     end
  990.     for i in encounter_list
  991.       read_level = $data_troops[i].name[/Lv\d+/i]
  992.       level = (read_level == nil ? 1 : read_level[/\d+/].to_i)
  993.       for m in $data_troops[i].members
  994.         $game_monsters << Game_Monster.new(m.enemy_id, m.id, level, nil)
  995.       end
  996.     end
  997.   end
  998.  
  999. end
  1000.  
  1001. #------------------------------------------------------------------------------
  1002. class Game_Character
  1003.  
  1004.   attr_accessor :damage
  1005.   attr_accessor :critical
  1006.   attr_accessor :actor
  1007.   attr_accessor :attack_delay
  1008.   attr_accessor :attack2_delay
  1009.   attr_accessor :skill_delay
  1010.   attr_accessor :item_delay
  1011.   attr_accessor :animation_delay
  1012.   attr_accessor :balloon_delay
  1013.   attr_accessor :right_attack
  1014.   attr_accessor :left_attack
  1015.   attr_accessor :defending
  1016.   attr_accessor :target
  1017.   attr_accessor :heal_target
  1018.  
  1019.   alias vtp_gcharacter_initialize initialize
  1020.   alias vtp_gcharacter_update update
  1021.  
  1022.   def initialize
  1023.     vtp_gcharacter_initialize
  1024.     @attack_delay = 0
  1025.     @attack2_delay = 0
  1026.     @skill_delay = 0
  1027.     @item_delay = 0
  1028.     @defend_delay = 0
  1029.     @animation_delay = 0
  1030.     @state_delay = 0
  1031.     @balloon_delay = 0
  1032.   end
  1033.  
  1034.   def update
  1035.     vtp_gcharacter_update
  1036.     update_delay
  1037.     update_actions
  1038.     update_states
  1039.     update_attack_movement if @animation_delay > 0
  1040.   end
  1041.  
  1042.   def update_delay
  1043.     @attack_delay -= 1 if @attack_delay > 0
  1044.     @attack2_delay -= 1 if @attack2_delay > 0
  1045.     @skill_delay -= 1 if @skill_delay > 0
  1046.     @item_delay -= 1 if @item_delay > 0
  1047.     @defend_delay -= 1 if @defend_delay > 0
  1048.     @animation_delay -= 1 if @animation_delay > 0
  1049.     @balloon_delay -= 1 if @balloon_delay > 0
  1050.   end
  1051.  
  1052.   def update_attack_movement  
  1053.     return if is_object?
  1054.     if @animation_delay >= 20
  1055.       @pattern = 0
  1056.     elsif @animation_delay.between?(10, 20)
  1057.       @pattern = 1
  1058.     elsif @animation_delay.between?(1, 10)
  1059.       @pattern = 2
  1060.     elsif @animation_delay.between?(0, 1)
  1061.       @pattern = 1
  1062.     end
  1063.   end
  1064.  
  1065.   def update_states
  1066.     return if @actor == nil
  1067.     return if @actor.dead?
  1068.     return if is_object?
  1069.     for state in @actor.states.compact
  1070.       if @state_delay <= (state.hold_turn*Graphics.frame_rate)
  1071.         @state_delay += 1
  1072.       elsif @state_delay > (state.hold_turn*Graphics.frame_rate)
  1073.         if rand(101) <= state.auto_release_prob
  1074.           @actor.remove_state(state.id)
  1075.         end
  1076.         @state_delay = 0
  1077.       end
  1078.     end
  1079.   end
  1080.  
  1081.   def step_back
  1082.     old_speed = @move_speed
  1083.     @move_speed = 6
  1084.     move_backward
  1085.     move_backward
  1086.     @move_speed = old_speed
  1087.   end
  1088.  
  1089.   def update_actions
  1090.   end
  1091.  
  1092.   def check_event_trigger_touch(x, y)
  1093.   end
  1094.  
  1095.   def in_vehicle?
  1096.     return false
  1097.   end
  1098.  
  1099.   def is_object?
  1100.     return false
  1101.   end
  1102.  
  1103.   def unkileable?
  1104.     return false
  1105.   end
  1106.  
  1107. end
  1108.  
  1109. #------------------------------------------------------------------------------
  1110. class Game_Event < Game_Character
  1111.  
  1112.   alias vtp_gevent_refresh refresh
  1113.   alias vtp_gevent_update update
  1114.  
  1115.   def refresh
  1116.     vtp_gevent_refresh
  1117.     setup_enemy
  1118.   end
  1119.  
  1120.   def update
  1121.     vtp_gevent_update
  1122.     update_enemy
  1123.   end
  1124.  
  1125.   def setup_enemy
  1126.     return if @erased
  1127.     @enemy_id = check_comment("Enemy").to_i
  1128.     return if @enemy_id <= 0
  1129.     @actor = Game_Enemy.new(0, @enemy_id)
  1130.     @actor.character = self
  1131.     @respawn_delay = @actor.respawn.to_i
  1132.     @die_switch = check_comment("Die Switch").to_i
  1133.     @die_selfswitch = check_comment("Die Self Switch").to_s.upcase
  1134.     @die_variable = check_comment("Die Variable").to_i      
  1135.     @actor.recover_all
  1136.     @opacity = 255
  1137.     @dead = false
  1138.     @death_triggerd = false
  1139.   end
  1140.  
  1141.   def update_enemy
  1142.     return if @actor == nil
  1143.     if !@actor.dead?
  1144.       update_target_selection
  1145.     elsif @actor.dead?
  1146.       update_death unless @dead
  1147.       @opacity -= 10 if @opacity > 0 and !@death_triggerd
  1148.     end
  1149.     if @dead and @respawn_delay.to_i > 0
  1150.       if @respawn_delay <= 1
  1151.         @erased = false
  1152.         refresh
  1153.       else
  1154.         @respawn_delay -= 1
  1155.       end
  1156.     end
  1157.   end
  1158.  
  1159.   def update_target_selection
  1160.     return if is_object?
  1161.     return if @target != nil
  1162.     for target in $VTP.select_target(self)
  1163.       next if $VTP.same_team?(self, target)
  1164.       next unless in_range?(target, 5)
  1165.       @target = target
  1166.     end
  1167.   end
  1168.  
  1169.   def update_actions
  1170.     return if $game_map.interpreter.running?
  1171.     return if @target != nil and @target.in_vehicle?
  1172.     $VTP.enemy_actions(self)
  1173.     @heal_target = nil
  1174.     @defending = (@defend_delay > 0)
  1175.   end
  1176.  
  1177.   def update_death
  1178.     if is_object?
  1179.       update_triggers
  1180.       @dead = true
  1181.       return
  1182.     end
  1183.     $VTP.make_drop(self)
  1184.     update_triggers
  1185.     @dead = true
  1186.   end
  1187.  
  1188.   def update_triggers
  1189.     if @die_switch > 0
  1190.       $game_switches[@die_switch] = !$game_switches[@die_switch]
  1191.     elsif @die_selfswitch != ""
  1192.       key = [$game_map.map_id, @id, @die_selfswitch]
  1193.       $game_self_switches[key] = !$game_self_switches[key]
  1194.     elsif @die_variable > 0
  1195.       $game_variables[@die_variable] += 1
  1196.     else
  1197.       erase
  1198.     end
  1199.     if @die_switch > 0 or @die_selfswitch != "" or @die_variable > 0
  1200.       @death_triggerd = true
  1201.       $game_map.need_refresh = true
  1202.     end
  1203.   end
  1204.  
  1205.   def update_self_movement
  1206.     return if @actor != nil and @actor.dead?
  1207.     return if @attack_delay > 0 or @skill_delay > 0
  1208.     return if $VTP.blocked_by_state?(self, 2)
  1209.     if follow_target? and @stop_count > 30 * (5 - @move_frequency)
  1210.       move_toward(@target)
  1211.     else
  1212.       super
  1213.     end
  1214.   end
  1215.  
  1216.   def increase_steps
  1217.     super
  1218.     return if @actor == nil
  1219.     return if @actor.dead?
  1220.     @actor.on_enemy_walk
  1221.   end
  1222.  
  1223.   def follow_target?
  1224.     return false if is_object?
  1225.     return false if @actor == nil
  1226.     return false if @actor.dead?
  1227.     return false if @target == nil
  1228.     return true if in_range?(@target, 5)
  1229.     return false
  1230.   end
  1231.  
  1232.   def is_object?
  1233.     return comment_exists?("Object")
  1234.   end
  1235.  
  1236.   def unkileable?
  1237.     return comment_exists?("Unkileable")
  1238.   end
  1239.  
  1240.   def map_passable?(x, y)
  1241.     return $game_map.passable2?(x, y)
  1242.   end
  1243.  
  1244. end
  1245.  
  1246. #------------------------------------------------------------------------------
  1247. class Game_Player < Game_Character
  1248.  
  1249.   attr_reader :selecting_skill
  1250.   attr_reader :selecting_item
  1251.   attr_reader :selecting_action
  1252.   attr_reader :ally_action
  1253.  
  1254.   alias vtp_gplayer_refresh refresh
  1255.   alias vtp_gplayer_update update
  1256.   alias vtp_gplayer_move_by_input move_by_input
  1257.   alias vtp_gplayer_perform_transfer perform_transfer
  1258.  
  1259.   def refresh
  1260.     vtp_gplayer_refresh
  1261.     @actor = $game_party.members[0]
  1262.     @actor.character = self if @actor != nil
  1263.   end
  1264.  
  1265.   def update
  1266.     vtp_gplayer_update
  1267.     return if @actor == nil
  1268.     if $game_party.all_dead?
  1269.       $game_temp.next_scene = "gameover"
  1270.     elsif @actor.dead?
  1271.       $game_party.change_group_order
  1272.     end    
  1273.   end
  1274.  
  1275.   def update_actions
  1276.     return if @actor == nil
  1277.     return if in_vehicle?
  1278.     return if $game_map.interpreter.running?
  1279.     update_right_hand
  1280.     update_left_hand
  1281.     update_skills_items_usage
  1282.     update_allies_actions
  1283.   end
  1284.  
  1285.   def update_right_hand
  1286.     if Input.trigger?($VTP.attack_key)
  1287.       return if $VTP.blocked_by_state?(self, 0)
  1288.       return if @defending
  1289.       return if @attack_delay > 0
  1290.       @right_attack = true
  1291.       if @actor.weapons[0] != nil and @actor.weapons[0].ranged?
  1292.         $VTP.range_attack(self, 0)
  1293.       else
  1294.         @target = nil
  1295.         for target in $VTP.select_target(self)
  1296.           next if $VTP.same_team?(self, target)
  1297.           next unless self.in_front?(target)
  1298.           @target = target
  1299.         end
  1300.         $VTP.melee_attack(self, @target)
  1301.       end
  1302.     end
  1303.     if @right_attack and @attack_delay <= 0
  1304.       @right_attack = false
  1305.       @target = nil
  1306.     end
  1307.   end
  1308.  
  1309.   def update_left_hand
  1310.     if @actor.two_swords_style
  1311.       if Input.trigger?($VTP.defend_key)
  1312.         return if $VTP.blocked_by_state?(self, 0)
  1313.         return if @attack2_delay > 0
  1314.         @left_attack = true
  1315.         if @actor.weapons[1] != nil and @actor.weapons[1].ranged?
  1316.           $VTP.range_attack(self, 1)
  1317.         else
  1318.           @target = nil
  1319.           for target in $VTP.select_target(self)
  1320.             next if $VTP.same_team?(self, target)
  1321.             next unless self.in_front?(target)
  1322.             @target = target
  1323.           end
  1324.           $VTP.melee_attack2(self, @target)
  1325.         end
  1326.       end
  1327.     else
  1328.       if Input.press?($VTP.defend_key)
  1329.         return if @actor.two_swords_style
  1330.         return unless @actor.armors[0].is_a?(RPG::Armor)
  1331.         @defending = true
  1332.       else
  1333.         @defending = false
  1334.       end
  1335.     end
  1336.     if @left_attack and @attack2_delay <= 0
  1337.       @left_attack = false
  1338.       @target = nil
  1339.     end
  1340.   end
  1341.  
  1342.   def update_skills_items_usage
  1343.     @selecting_skill = Input.press?($VTP.skills_key)
  1344.     @selecting_item = Input.press?($VTP.items_key)
  1345.     if @selecting_skill
  1346.       return if @selecting_item
  1347.       return if @skill_delay > 0
  1348.       @actor.skill_hotkeys.each { |k, v|
  1349.         next unless Input.trigger?(k)
  1350.         next if $VTP.blocked_by_state?(self, 1)
  1351.         if $data_skills[v].ranged?
  1352.           $VTP.cast_skill(self, $data_skills[v])
  1353.         else
  1354.           $VTP.skill_attack(self, $data_skills[v])
  1355.         end
  1356.       }
  1357.     end
  1358.     if @selecting_item
  1359.       return if @selecting_skill
  1360.       return if @item_delay > 0
  1361.       @actor.item_hotkeys.each { |k, v|
  1362.         next unless Input.trigger?(k)
  1363.         if $data_items[v].ranged?
  1364.           $VTP.cast_item(self, $data_items[v])
  1365.         else
  1366.           $VTP.item_attack(self, $data_items[v])
  1367.         end
  1368.       }
  1369.     end
  1370.   end
  1371.  
  1372.   def update_allies_actions
  1373.     return if $game_party.members.size < 2
  1374.     @selecting_action = Input.press?($VTP.allies_key)
  1375.     if !@selecting_action
  1376.       @ally_action = nil
  1377.       @old_action = nil
  1378.     end
  1379.     return unless @selecting_action
  1380.     @action_delay -= 1 if @action_delay != nil and @action_delay > 0
  1381.     if Input.trigger?(Input::DOWN)
  1382.       Sound.play_decision
  1383.       $game_party.change_group_order
  1384.       @action_delay = 5
  1385.     end
  1386.     if @ally_action == nil
  1387.       if Input.trigger?(8)
  1388.         Sound.play_decision
  1389.         @ally_action = $game_allies[1]
  1390.         @action_delay = 5
  1391.       elsif Input.trigger?(4)
  1392.         return if $game_party.members.size < 3
  1393.         Sound.play_decision
  1394.         @ally_action = $game_allies[2]
  1395.         @old_action = @ally_action.action
  1396.         @action_delay = 5
  1397.       elsif Input.trigger?(6)
  1398.         return if $game_party.members.size < 4
  1399.         Sound.play_decision
  1400.         @ally_action = $game_allies[3]
  1401.         @old_action = @ally_action.action
  1402.         @action_delay = 5
  1403.       end
  1404.     elsif @ally_action != nil and @action_delay <= 0
  1405.       if Input.trigger?(8)
  1406.         Sound.play_equip
  1407.         @ally_action.action = 0
  1408.       elsif Input.trigger?(4)
  1409.         Sound.play_equip
  1410.         @ally_action.action = 2
  1411.       elsif Input.trigger?(6)
  1412.         Sound.play_equip
  1413.         @ally_action.action = 1
  1414.       elsif Input.trigger?(2)
  1415.         Sound.play_equip
  1416.         @ally_action.action = 3
  1417.       end
  1418.     end
  1419.   end
  1420.  
  1421.   def move_by_input
  1422.     return if $VTP.blocked_by_state?(self, 2)
  1423.     return if @right_attack and @actor.weapons[0] != nil
  1424.     return if @left_attack and @actor.weapons[1] != nil
  1425.     return if @selecting_skill or @selecting_item or @selecting_action
  1426.     vtp_gplayer_move_by_input
  1427.   end
  1428.  
  1429.   def perform_transfer
  1430.     vtp_gplayer_perform_transfer
  1431.     for ally in $game_allies.compact
  1432.       ally.target = nil
  1433.       ally.moveto(@new_x, @new_y)
  1434.       ally.move_random
  1435.     end
  1436.     $game_items.clear
  1437.     if $game_variables[$VTP.battle_area_variable] > 0
  1438.       $game_variables[$VTP.battle_area_variable] = 0
  1439.     end
  1440.   end
  1441.  
  1442. end
  1443.  
  1444. #------------------------------------------------------------------------------
  1445. class Game_Ally < Game_Character
  1446.  
  1447.   attr_accessor :action
  1448.  
  1449.   def initialize(actor_id)
  1450.     super()
  1451.     @actor_id = actor_id
  1452.     @action = 0
  1453.     @in_vehicle = false
  1454.     @protect = false
  1455.     refresh
  1456.   end
  1457.  
  1458.   def refresh
  1459.     @actor = $game_party.members[@actor_id]
  1460.     @actor.character = self
  1461.     if @actor.dead? or in_vehicle?
  1462.       @character_name = ""
  1463.       @character_index = 0
  1464.     else
  1465.       @character_name = @actor.character_name
  1466.       @character_index = @actor.character_index
  1467.     end
  1468.   end
  1469.  
  1470.   def update
  1471.     super
  1472.     update_death
  1473.     return if @actor.dead?
  1474.     update_on_off_vehicle
  1475.     return if in_vehicle?
  1476.     update_target_selection
  1477.   end
  1478.  
  1479.   def update_actions
  1480.     return if @actor.dead?
  1481.     return if in_vehicle?
  1482.     return if $game_map.interpreter.running?
  1483.     case @action
  1484.     when 0
  1485.       update_weapon_attack
  1486.     when 1
  1487.       update_skill_attack
  1488.     when 3
  1489.       update_cure
  1490.     end
  1491.     @defending = (@action == 2)
  1492.   end
  1493.  
  1494.   def update_target_selection
  1495.     for ally in $game_allies.compact
  1496.       next if ally.action != 3
  1497.       next unless $game_map.in_range?(ally)
  1498.       next if ally.balloon_delay <= 0
  1499.       next unless in_range?(ally, 2)
  1500.       @target = ally
  1501.       @protect = true
  1502.     end
  1503.     if @target.is_a?(Game_Ally) and in_range?(@target, 2)
  1504.       @target = nil
  1505.       @protect = false
  1506.     end
  1507.     if @target == nil and !@protect
  1508.       for item in $game_items.compact
  1509.         next unless $game_map.in_range?(item)
  1510.         next if item.target != nil
  1511.         @target = item
  1512.         item.target = self
  1513.       end
  1514.     end
  1515.     if @target == nil and @action < 2 and !@protect
  1516.       for target in $VTP.select_target(self, nil)
  1517.         next unless $game_map.in_range?(target)
  1518.         next if target.is_object?
  1519.         next if $VTP.same_team?(self, target)
  1520.         next if target.actor.dead?
  1521.         next unless in_range?(target, 5)
  1522.         @target = target
  1523.       end
  1524.     end
  1525.     @target = $game_player if @defending
  1526.   end
  1527.  
  1528.   def update_weapon_attack
  1529.     @right_attack = (@attack_delay > 0)
  1530.     @left_attack = (@attack2_delay > 0)
  1531.     return if $VTP.blocked_by_state?(self, 0)
  1532.     if @actor.two_swords_style
  1533.       hand = rand(2)
  1534.     else
  1535.       hand = 0
  1536.     end
  1537.     return if @target == nil
  1538.     return if @target.is_a?(Game_Item)
  1539.     return if @target.is_object?
  1540.     return if $VTP.same_team?(self, @target)
  1541.     return if (hand == 0 and @attack_delay > 0) or (hand == 1 and @attack2_delay > 0)
  1542.     return unless self.in_front?(@target)
  1543.     weapon = @actor.weapons[hand]
  1544.     if weapon != nil and weapon.ranged?
  1545.       return unless (in_direction?(@target) and in_range?(@target, weapon.range))
  1546.       ammos = []
  1547.       weapon.ammo_list.each { |i| ammos << i if $game_party.has_item?($data_items[i]) }
  1548.       @actor.ammos[weapon.id] = $data_items[ammos[rand(ammos.size)]]
  1549.       $VTP.range_attack(self, hand)
  1550.     else
  1551.       if hand == 1
  1552.         $VTP.melee_attack2(self, @target)
  1553.       else
  1554.         $VTP.melee_attack(self, @target)
  1555.       end
  1556.     end
  1557.   end
  1558.  
  1559.   def update_skill_attack
  1560.     return if @skill_delay > 0
  1561.     return if $VTP.blocked_by_state?(self, 1)
  1562.     return if @actor.skills.empty?
  1563.     if @actor.skill_hotkeys.empty?
  1564.       skill = @actor.skills[rand(@actor.skills.size)]
  1565.     else
  1566.       skill = $data_skills[@actor.skill_hotkeys[@actor.skill_hotkeys.keys[rand(@actor.skill_hotkeys.size)]]]
  1567.     end
  1568.     if skill.ranged?
  1569.       for target in $VTP.select_target(self, skill)
  1570.         next if target.is_object?
  1571.         next if $VTP.same_team?(self, target)
  1572.         next unless in_range?(target, skill.range)
  1573.         next unless in_direction?(target)
  1574.         @target = target
  1575.         $VTP.cast_skill(self, skill)
  1576.       end
  1577.     else
  1578.       $VTP.skill_attack(self, skill)
  1579.     end
  1580.   end
  1581.  
  1582.   def update_cure
  1583.     if @target != nil and in_range?(@target, 2) and @balloon_delay <= 0
  1584.       @balloon_id = 1
  1585.       @balloon_delay = 60
  1586.     end
  1587.     party = []
  1588.     $game_party.members.each { |i| party << i.character }
  1589.     for target in party
  1590.       next unless $game_map.in_range?(target)
  1591.       for skill in @actor.skills.compact
  1592.         next if @skill_delay > 0
  1593.         next unless $VTP.curable?(target, skill)
  1594.         @heal_target = [target]
  1595.         $VTP.skill_attack(self, skill)
  1596.       end
  1597.       for item in $game_party.items
  1598.         next unless item.is_a?(RPG::Item)
  1599.         next if @item_delay > 0
  1600.         next unless $VTP.curable?(target, item)
  1601.         @heal_target = [target]
  1602.         $VTP.item_attack(self, item)
  1603.       end
  1604.     end
  1605.     @heal_target = nil
  1606.   end
  1607.  
  1608.   def update_death
  1609.     if @actor.dead? and !@dead
  1610.       Sound.play_actor_collapse
  1611.       for monster in $game_monsters.compact
  1612.         monster.target = nil if monster.target == self
  1613.       end
  1614.       for event in $game_map.events.values.compact
  1615.         event.target = nil if event.target == self
  1616.       end
  1617.       @dead = true
  1618.       refresh
  1619.     elsif !@actor.dead? and @dead
  1620.       refresh
  1621.       moveto($game_player.x, $game_player.y)
  1622.       move_random
  1623.       @dead = false
  1624.     end
  1625.   end
  1626.  
  1627.   def update_self_movement
  1628.     return if moving?
  1629.     return if @right_attack or @left_attack
  1630.     return if $VTP.blocked_by_state?(self, 2)
  1631.     if @target != nil
  1632.       if @action == 3 and (!@target.is_a?(Game_Item) or @target == $game_player)
  1633.         move_away_from(@target)
  1634.       else
  1635.         move_toward(@target)
  1636.       end
  1637.     else
  1638.       move_toward($game_player)
  1639.     end
  1640.     if @target.is_a?(Game_Item) and over?(@target)
  1641.       @target.get
  1642.       @target = nil
  1643.     end
  1644.   end
  1645.  
  1646.   def update_on_off_vehicle
  1647.     if $game_player.in_vehicle? and !@in_vehicle
  1648.       @in_vehicle = true
  1649.       refresh
  1650.     elsif !$game_player.in_vehicle? and @in_vehicle
  1651.       @in_vehicle = false
  1652.       refresh
  1653.       moveto($game_player.x, $game_player.y)
  1654.       move_random
  1655.     end
  1656.   end
  1657.  
  1658.   def get_on_vehicle
  1659.     @in_vehicle = true
  1660.     refresh
  1661.   end
  1662.  
  1663.   def get_off_vehicle
  1664.     @in_vehicle = false
  1665.     refresh
  1666.     moveto($game_player.x, $game_player.y)
  1667.     move_random
  1668.   end
  1669.  
  1670.   def map_passable?(x, y)
  1671.     return $game_map.passable2?(x, y)
  1672.   end
  1673.  
  1674.   def dash?
  1675.     return ($game_player.dash? and $game_player.moving?)
  1676.   end
  1677.  
  1678.   def in_vehicle?
  1679.     return @in_vehicle
  1680.   end
  1681.  
  1682. end
  1683.  
  1684. #------------------------------------------------------------------------------
  1685. class Game_Monster < Game_Character
  1686.  
  1687.   attr_reader :level
  1688.  
  1689.   def initialize(enemy_id, troop_id, level, area)
  1690.     super()
  1691.     @enemy_id = enemy_id
  1692.     @troop_id = troop_id
  1693.     @level = level
  1694.     @area = area
  1695.     setup_enemy
  1696.     set_start_position
  1697.     while(!map_passable?(@x_pos, @y_pos))
  1698.       set_start_position
  1699.     end
  1700.     moveto(@x_pos, @y_pos)
  1701.   end
  1702.  
  1703.   def setup_enemy
  1704.     @actor = Game_Enemy.new(0, @enemy_id)
  1705.     @actor.level = @level
  1706.     @actor.recover_all
  1707.     @actor.character = self
  1708.     @move_speed = @actor.move_speed.to_i
  1709.     @respawn_delay = @actor.respawn.to_i
  1710.     @dead = false
  1711.     refresh
  1712.   end
  1713.  
  1714.   def refresh    
  1715.     @character_name = @actor.character_name.to_s
  1716.     @character_index = @actor.character_index.to_i
  1717.     @opacity = 255
  1718.   end
  1719.  
  1720.   def update
  1721.     super
  1722.     if @actor.dead?
  1723.       update_death unless @dead
  1724.       @opacity -= 10 if @opacity > 0
  1725.     end
  1726.     if @dead and @respawn_delay > 0
  1727.       if @respawn_delay <= 1
  1728.         setup_enemy
  1729.       else
  1730.         @respawn_delay -= 1
  1731.       end
  1732.     end
  1733.   end
  1734.  
  1735.   def update_actions
  1736.     return if $game_map.interpreter.running?
  1737.     return if @target != nil and @target.in_vehicle?
  1738.     $VTP.enemy_actions(self)
  1739.     @heal_target = nil
  1740.     @defending = (@defend_delay > 0)
  1741.   end
  1742.  
  1743.   def set_start_position
  1744.     x = []; y = []
  1745.     if @area != nil
  1746.       for a in (@area.rect.x)...(@area.rect.x+@area.rect.width)
  1747.         for b in (@area.rect.y)...(@area.rect.y+@area.rect.height)
  1748.           next unless $game_map.passable?(a, b)
  1749.           x << a; y << b
  1750.         end
  1751.       end
  1752.     else
  1753.       for a in 0...$game_map.width
  1754.         for b in 0...$game_map.height
  1755.           next unless map_passable?(a, b)
  1756.           x << a; y << b
  1757.         end
  1758.       end
  1759.     end
  1760.     @x_pos = x[rand(x.size)]
  1761.     @y_pos = y[rand(y.size)]
  1762.   end
  1763.  
  1764.   def update_death
  1765.     $VTP.make_drop(self)
  1766.     @dead = true
  1767.   end
  1768.  
  1769.   def update_self_movement
  1770.     return if @actor.dead?
  1771.     return if moving?
  1772.     return if @attack_delay > 0
  1773.     return if $VTP.blocked_by_state?(self, 2)
  1774.     update_target_selection if @actor.aggressiveness.to_i != 2
  1775.     if @target != nil
  1776.       move_by_aggressiveness
  1777.     else
  1778.       move_random
  1779.     end
  1780.   end
  1781.  
  1782.   def update_target_selection
  1783.     return @target != nil
  1784.     for target in $VTP.update_target_selection(self)
  1785.       next if $VTP.same_team?(self, target)
  1786.       next if  @vision != nil and in_range?(target, @vision)
  1787.       @target = target
  1788.     end
  1789.   end
  1790.  
  1791.   def move_by_aggressiveness
  1792.     case @actor.aggressiveness.to_i
  1793.     when 0
  1794.       if @target != nil and in_range?(@target, 5)
  1795.         move_away_from(@target)
  1796.       else
  1797.         move_random
  1798.       end
  1799.     when 1
  1800.       if @target != nil and in_range?(@target, 5)
  1801.         move_away_from(@target)
  1802.       else
  1803.         move_random
  1804.       end
  1805.     when 2
  1806.       if @target != nil and in_range?(@target, 5)
  1807.         move_type_toward(@target)
  1808.       else
  1809.         move_random
  1810.       end
  1811.     when 3
  1812.       if @target != nil and in_range?(@target, 5)
  1813.         move_type_toward(@target)
  1814.       else
  1815.         move_random
  1816.       end
  1817.     when 4
  1818.       if @target != nil and in_range?(@target, 7)
  1819.         move_toward(@target)
  1820.       else
  1821.         move_random
  1822.       end
  1823.     when 5
  1824.       if @target != nil and in_range?(@target, 10)
  1825.         move_toward(@target)
  1826.       else
  1827.         move_random
  1828.       end
  1829.     end
  1830.   end
  1831.  
  1832.   def increase_steps
  1833.     super
  1834.     return if @actor == nil
  1835.     return if @actor.dead?
  1836.     @actor.on_enemy_walk
  1837.   end
  1838.  
  1839.   def map_passable?(x, y)
  1840.     return $game_map.passable2?(x, y)
  1841.   end
  1842.  
  1843. end
  1844.  
  1845. #------------------------------------------------------------------------------
  1846. class Game_Projectile < Game_Character
  1847.  
  1848.   attr_reader :parent
  1849.   attr_accessor :draw
  1850.   attr_accessor :destroy
  1851.  
  1852.   def initialize(parent, object)
  1853.     super()
  1854.     @parent = parent
  1855.     @object = object
  1856.     @actor = @parent.actor
  1857.     @step = 0
  1858.     @direction = @parent.direction
  1859.     @move_speed = @object.move_speed.to_i
  1860.     @step_anime = true
  1861.     moveto(@parent.x, @parent.y)
  1862.     refresh
  1863.     update
  1864.   end
  1865.  
  1866.   def refresh
  1867.     @character_name = @object.character.to_s
  1868.     @character_index = @object.index.to_i
  1869.   end
  1870.  
  1871.   def update
  1872.     super
  1873.     if @step > @object.range
  1874.       @destroy = true
  1875.       $game_projectiles.delete(self)
  1876.       return
  1877.     end
  1878.     return if moving?
  1879.     move_forward
  1880.     @step += 1
  1881.     dx = (@direction == 4 ? -1 : @direction == 6 ? 1 : 0)
  1882.     dy = (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
  1883.   end
  1884.  
  1885.   def check_event_trigger_touch(x, y)
  1886.     if @object.is_a?(RPG::Skill)
  1887.       $VTP.skill_attack(@parent, @object, self)
  1888.     elsif @object.is_a?(RPG::Item)
  1889.       $VTP.item_attack(@parent, @object, self)
  1890.     end
  1891.     @destroy = true
  1892.     $game_projectiles.delete(self)
  1893.   end
  1894.  
  1895.   def map_passable?(x, y)
  1896.     return $game_map.range_passable?(x, y)
  1897.   end
  1898.  
  1899. end
  1900.  
  1901. #------------------------------------------------------------------------------
  1902. class Game_Item < Game_Character
  1903.  
  1904.   attr_reader :item
  1905.   attr_accessor :draw
  1906.   attr_accessor :destroy
  1907.  
  1908.   def initialize(parent, item)
  1909.     super()
  1910.     @item = item
  1911.     if parent.is_a?(Array)
  1912.       moveto(parent[0], parent[1])
  1913.     else
  1914.       moveto(parent.x, parent.y)
  1915.       a = [-1, 0, 1]
  1916.       new_x = a[rand(a.size)]
  1917.       new_y = a[rand(a.size)]
  1918.       map_passable?(@x+new_x, @y+new_y) ? jump(new_x, new_y) : jump(0, 0)
  1919.     end
  1920.   end
  1921.  
  1922.   def update
  1923.     super
  1924.     return unless Input.trigger?(Input::C)
  1925.     return unless $game_player.in_front?(self) or $game_player.over?(self)
  1926.     get
  1927.   end
  1928.  
  1929.   def get
  1930.     $game_allies.compact { |ally| ally.target = nil if ally.target == self }
  1931.     Sound.play_decision
  1932.     @item.is_a?(Numeric) ? $game_party.gain_gold(@item) : $game_party.gain_item(@item, 1)
  1933.     @destroy = true
  1934.     $game_items.delete(self)
  1935.   end
  1936.  
  1937.   def screen_z
  1938.     return $game_player.screen_z - 1
  1939.   end
  1940.  
  1941. end
  1942.  
  1943. #------------------------------------------------------------------------------
  1944. class Game_Interpreter
  1945.  
  1946.   attr_reader :id
  1947.  
  1948.   alias vtp_ginterpreter_setup setup
  1949.  
  1950.   def setup(list, event_id=0)
  1951.     vtp_ginterpreter_setup(list, event_id)
  1952.     @id = @original_event_id
  1953.   end
  1954.  
  1955.   def create_item(object, kind, x, y)
  1956.     case kind
  1957.     when 0
  1958.       item = $data_items[object]
  1959.     when 1
  1960.       item = $data_weapons[object]
  1961.     when 2
  1962.       item = $data_armors[object]
  1963.     when 3
  1964.       item = object
  1965.     end
  1966.     $game_items << Game_Item.new([x, y], item)
  1967.   end
  1968.  
  1969. end
  1970.  
  1971. #------------------------------------------------------------------------------
  1972. class Sprite
  1973.  
  1974.   def draw_face(actor, x, y)
  1975.     char_name = actor.character_name
  1976.     char_index = actor.character_index
  1977.     bitmap = Cache.character(char_name)
  1978.     sign = char_name[/^[\!\$]./]
  1979.     if sign != nil and sign.include?('$')
  1980.       cw = bitmap.width / 3
  1981.       ch = bitmap.height / 4
  1982.     else
  1983.       cw = bitmap.width / 12
  1984.       ch = bitmap.height / 8
  1985.     end
  1986.     src_rect = Rect.new((char_index%4*3+1)*cw, (char_index/4*4)*ch, cw, 20)
  1987.     self.bitmap.blt(x, y+6, bitmap, src_rect)
  1988.   end
  1989.  
  1990. end
  1991.  
  1992. #------------------------------------------------------------------------------
  1993. class Sprite_Base
  1994.  
  1995.   attr_reader :character
  1996.  
  1997.   alias vtp_spbase_initialize initialize
  1998.   alias vtp_spbase_update update
  1999.   alias vtp_spbase_dispose dispose
  2000.  
  2001.   def initialize(viewport=nil)
  2002.     vtp_spbase_initialize(viewport)
  2003.     @damage_sprites = []
  2004.     @state_animation_delay = 0
  2005.     create_hits_sprite
  2006.   end
  2007.  
  2008.   def update
  2009.     vtp_spbase_update
  2010.     @state_animation_delay -= 1 if @state_animation_delay > 0
  2011.     update_damage_sprites
  2012.     update_hits_sprite
  2013.     update_states_animations
  2014.   end
  2015.  
  2016.   def dispose
  2017.     vtp_spbase_dispose
  2018.     dispose_damage_sprites
  2019.     dispose_hits_sprite
  2020.   end
  2021.  
  2022.   def update_damage_sprites
  2023.     for i in @damage_sprites.compact
  2024.       next if i[0].disposed?
  2025.       i[0].x = self.x
  2026.       i[0].y -= 0.25
  2027.     end
  2028.     for i in @damage_sprites.compact
  2029.       if i[1] > 0
  2030.         i[1] -= 1
  2031.       elsif !i[0].disposed?
  2032.         if i[0].opacity > 0
  2033.           i[0].opacity -= 10
  2034.         else
  2035.           i[0].dispose
  2036.           @damage_sprites.delete(i[0])
  2037.         end
  2038.       end
  2039.     end
  2040.     if @character != nil and @character.actor != nil and @character.damage != nil
  2041.       @character.step_back if @character.critical
  2042.       show_damage(@character.damage, @character.critical)
  2043.       @character.damage = nil
  2044.       @character.critical = false
  2045.     end
  2046.   end
  2047.  
  2048.   def dispose_damage_sprites
  2049.     @damage_sprites.each { |i| i[0].dispose }
  2050.     @damage_sprites.clear
  2051.   end
  2052.  
  2053.   def show_damage(damage, critical)
  2054.     string = (damage.is_a?(Numeric) ? damage.abs.to_i : damage)
  2055.     if damage.to_i == 0
  2056.       color = Color.new(255,255,255)
  2057.     elsif damage.to_i < 0
  2058.       color = Color.new(128,255,128)
  2059.     else      
  2060.        if @character.is_a?(Game_Player) or @character.is_a?(Game_Ally)
  2061.          color = Color.new(255,56,16)
  2062.        else
  2063.          color = Color.new(255,255,255)
  2064.        end
  2065.     end
  2066.     bitmap = Bitmap.new(100, $VTP.damage["font"][1]*2)
  2067.     bitmap.font.name = $VTP.damage["font"][0]
  2068.     bitmap.font.size = $VTP.damage["font"][1]
  2069.     bitmap.font.color = Color.new(255,204,32)
  2070.     bitmap.draw_outlined_text(0, 0, 100, bitmap.font.size, $VTP.damage["texts"][1], 1) if critical
  2071.     bitmap.font.color = color
  2072.     bitmap.draw_outlined_text(0, bitmap.font.size, 100, bitmap.font.size, string.to_s, 1)
  2073.     sprite = Sprite.new(self.viewport)
  2074.     sprite.bitmap = bitmap
  2075.     sprite.ox = bitmap.width/2
  2076.     sprite.oy = bitmap.height/2
  2077.     sprite.x = self.x
  2078.     sprite.y = self.y-32
  2079.     sprite.z = 999999
  2080.     @damage_sprites << [sprite, 30]
  2081.   end
  2082.  
  2083.   def create_hits_sprite
  2084.     @hits_sprite = Sprite.new(self.viewport)
  2085.     @hits_sprite.bitmap = Bitmap.new(200, $VTP.hit["font"][1]*3)
  2086.     @hits_sprite.bitmap.font.name = $VTP.hit["font"][0]
  2087.     @hits_sprite.bitmap.font.size = $VTP.hit["font"][1]
  2088.     @hits_sprite.bitmap.font.bold = $VTP.hit["font"][2]
  2089.     @hits_sprite.bitmap.font.italic = $VTP.hit["font"][3]
  2090.     @hits_sprite.x = $VTP.hit["position"][0]
  2091.     @hits_sprite.y = $VTP.hit["position"][1]
  2092.     @hits_sprite.z = 999999
  2093.     @hits_sprite.opacity = 0
  2094.     @hits_delay = 0
  2095.   end
  2096.  
  2097.   def update_hits_sprite
  2098.     @hits_delay -= 1 if @hits_delay > 0
  2099.     if $VTP.hits_total > 0 and @num_hits != $VTP.hits_total
  2100.       @num_hits = $VTP.hits_total
  2101.       w = @hits_sprite.bitmap.width
  2102.       h = @hits_sprite.bitmap.font.size
  2103.       @hits_sprite.bitmap.clear
  2104.       @hits_sprite.bitmap.font.color = Color.new(255,255,255)
  2105.       @hits_sprite.bitmap.draw_text($VTP.hits_total.getw+4, 0, w, h, $VTP.hit["texts"][0])
  2106.       @hits_sprite.bitmap.draw_text($VTP.damage_total.getw+4, h, w, h, $VTP.hit["texts"][1])
  2107.       @hits_sprite.bitmap.font.color = Color.new(255,204,32)
  2108.       @hits_sprite.bitmap.draw_text(0, 0, w, h, $VTP.hits_total.to_s)
  2109.       @hits_sprite.bitmap.font.color = Color.new(255,56,16)
  2110.       @hits_sprite.bitmap.draw_text(0, h, w, h, $VTP.damage_total.to_s)
  2111.       @hits_sprite.bitmap.fill_rect(0, h*2+1, w, 1, Color.new(0,0,0))
  2112.       @hits_sprite.bitmap.fill_rect(0, h*2, w, 1, Color.new(255,255,255))
  2113.       @hits_sprite.opacity = 255
  2114.       @hits_delay = 60
  2115.     end
  2116.     @hits_sprite.opacity -= 10 if @hits_delay <= 0 and @hits_sprite.opacity > 0
  2117.   end
  2118.  
  2119.   def dispose_hits_sprite
  2120.     @hits_sprite.dispose
  2121.   end
  2122.  
  2123.   def update_states_animations
  2124.     return if @character == nil
  2125.     return if @character.actor == nil
  2126.     return if @character.in_vehicle?
  2127.     for state in @character.actor.states.compact
  2128.       next if state.animation_id.to_i <= 0
  2129.       next if @state_animation_delay > 0
  2130.       @character.animation_id = state.animation_id.to_i
  2131.       @state_animation_delay = ($data_animations[@character.animation_id].frame_max*4+1)
  2132.     end
  2133.   end
  2134.  
  2135.   def animation_set_sprites(frame)
  2136.     cell_data = frame.cell_data
  2137.     for i in 0..15
  2138.       sprite = @animation_sprites[i]
  2139.       next if sprite == nil
  2140.       pattern = cell_data[i, 0]
  2141.       if pattern == nil or pattern == -1
  2142.         sprite.visible = false
  2143.         next
  2144.       end
  2145.       if pattern < 100
  2146.         sprite.bitmap = @animation_bitmap1
  2147.       else
  2148.         sprite.bitmap = @animation_bitmap2
  2149.       end
  2150.       sprite.visible = true
  2151.       sprite.src_rect.set(pattern % 5 * 192,
  2152.         pattern % 100 / 5 * 192, 192, 192)
  2153.       if @animation_mirror
  2154.         sprite.x = @animation_ox - cell_data[i, 1] / 3
  2155.         sprite.y = @animation_oy + cell_data[i, 2] / 3
  2156.         sprite.angle = (360 - cell_data[i, 4])
  2157.         sprite.mirror = (cell_data[i, 5] == 0)
  2158.       else
  2159.         sprite.x = @animation_ox + cell_data[i, 1] / 3
  2160.         sprite.y = @animation_oy + cell_data[i, 2] / 3
  2161.         sprite.angle = cell_data[i, 4]
  2162.         sprite.mirror = (cell_data[i, 5] == 1)
  2163.       end
  2164.       sprite.z = self.z + 300 + i
  2165.       sprite.ox = 96
  2166.       sprite.oy = 96
  2167.       sprite.zoom_x = cell_data[i, 3] / 300.0
  2168.       sprite.zoom_y = cell_data[i, 3] / 300.0
  2169.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  2170.       sprite.blend_type = cell_data[i, 7]
  2171.     end
  2172.   end
  2173.  
  2174. end
  2175. #------------------------------------------------------------------------------
  2176. class Sprite_Character < Sprite_Base
  2177.  
  2178.   alias vtp_spcharacter_update update
  2179.  
  2180.   def update
  2181.     vtp_spcharacter_update
  2182.     if @character.actor != nil
  2183.       if @character.actor.dead? and !@flash
  2184.         self.flash(Color.new(200,0,0), 10)
  2185.         @flash = true
  2186.       elsif @flash and !@character.actor.dead?
  2187.         @flash = false
  2188.       end
  2189.     end
  2190.   end
  2191.  
  2192. end
  2193.  
  2194. #------------------------------------------------------------------------------
  2195. class Sprite_Weapon < Sprite
  2196.  
  2197.   attr_reader :character
  2198.  
  2199.   def initialize(viewport, character)
  2200.     super(viewport)
  2201.     @character = character
  2202.     self.bitmap = Cache.system("Iconset")
  2203.     self.ox = 12
  2204.     self.oy = 12
  2205.     self.zoom_x = 0.80
  2206.     self.zoom_y = 0.80
  2207.     @animation_delay = 0
  2208.     refresh
  2209.     update
  2210.   end
  2211.  
  2212.   def update
  2213.     super
  2214.     @animation_delay -= 1 if @animation_delay > 0
  2215.     @animation_delay = 20 if @animation_delay <= 0 and @character.animation_delay >= 30
  2216.     self.visible = (@animation_delay > 0 and show?)
  2217.     return unless self.visible
  2218.     refresh
  2219.     update_movement
  2220.   end
  2221.  
  2222.   def refresh
  2223.     self.src_rect.set(icon_index%16*24, icon_index/16*24, 24, 24)
  2224.   end
  2225.  
  2226.   def update_movement
  2227.     case @character.direction
  2228.     when 2
  2229.       self.x = @character.screen_x-12
  2230.       self.y = @character.screen_y
  2231.       self.z = @character.screen_z+2
  2232.       self.mirror = false
  2233.       change_angle(180, 135, 90)
  2234.     when 4
  2235.       self.x = @character.screen_x-14
  2236.       self.y = @character.screen_y-10
  2237.       self.z = @character.screen_z-1
  2238.       self.mirror = false
  2239.       change_angle(-45, 0, 45)
  2240.     when 6
  2241.       self.x = @character.screen_x+14
  2242.       self.y = @character.screen_y-10
  2243.       self.z = @character.screen_z+2
  2244.       self.mirror = true
  2245.       change_angle(45, 0, -45)
  2246.     when 8
  2247.       self.x = @character.screen_x+16
  2248.       self.y = @character.screen_y-14
  2249.       self.z = @character.screen_z-1
  2250.       self.mirror = true
  2251.       change_angle(45, 0, -45)
  2252.     end
  2253.     self.opacity = @character.opacity
  2254.     self.blend_type = @character.blend_type
  2255.   end
  2256.  
  2257.   def change_angle(a, b, c)
  2258.     if @animation_delay >= 20
  2259.       self.angle = a
  2260.     elsif @animation_delay >= 15
  2261.       self.angle = b
  2262.     elsif @animation_delay >= 10
  2263.       self.angle = c
  2264.     end
  2265.   end
  2266.  
  2267.   def icon_index
  2268.     return 0 if @character.actor == nil
  2269.     return 0 if @character.in_vehicle?
  2270.     return @character.actor.weapon_icon.to_i if (@character.is_a?(Game_Monster) or @character.is_a?(Game_Event))
  2271.     if @character.left_attack
  2272.       return 0 if @character.actor.weapons[1] == nil
  2273.       return @character.actor.weapons[1].icon_index
  2274.     else
  2275.       return 0 if @character.actor.weapons[0] == nil
  2276.       return @character.actor.weapons[0].icon_index
  2277.     end
  2278.   end
  2279.  
  2280.   def show?
  2281.     return false if @character.actor == nil
  2282.     return false if @character.actor.dead?
  2283.     return true if @character.is_a?(Game_Monster) or @character.is_a?(Game_Event)
  2284.     return true if @character.right_attack
  2285.     return true if @character.left_attack
  2286.     return false
  2287.   end
  2288.  
  2289. end
  2290.  
  2291. #------------------------------------------------------------------------------
  2292. class Sprite_Shield < Sprite
  2293.  
  2294.   attr_reader :character
  2295.  
  2296.   def initialize(viewport, character)
  2297.     super(viewport)
  2298.     @character = character
  2299.     self.bitmap = Cache.system("Iconset")
  2300.     self.ox = 12
  2301.     self.oy = 12
  2302.     self.zoom_x = 0.80
  2303.     self.zoom_y = 0.80
  2304.     self.src_rect.set(icon_index%16*24, icon_index/16*24, 24, 24)
  2305.     update
  2306.   end
  2307.  
  2308.   def update
  2309.     super
  2310.     self.visible = (@character.defending and icon_index > 0 and !@character.actor.dead?)
  2311.     return unless self.visible
  2312.     update_movement
  2313.     moving_with_shield
  2314.   end
  2315.  
  2316.   def update_movement
  2317.     case @character.direction
  2318.     when 2
  2319.       self.mirror = true
  2320.       self.x = @character.screen_x+6
  2321.       self.z = @character.screen_z+1
  2322.     when 4
  2323.       self.mirror = false
  2324.       self.x = @character.screen_x-6
  2325.       self.z = @character.screen_z+1
  2326.     when 6
  2327.       self.mirror = true
  2328.       self.x = @character.screen_x+6
  2329.       self.z = @character.screen_z-1
  2330.     when 8
  2331.       self.mirror = false
  2332.       self.x = @character.screen_x-6
  2333.       self.z = @character.screen_z-1
  2334.     end
  2335.     self.y = @character.screen_y-8
  2336.     self.opacity = @character.opacity
  2337.     self.blend_type = @character.blend_type
  2338.     self.bush_depth = @character.bush_depth
  2339.   end
  2340.  
  2341.   def moving_with_shield
  2342.     if @character.moving?
  2343.       self.wave_amp = 1
  2344.       self.wave_length = 1
  2345.       self.wave_speed = 6
  2346.     else
  2347.       self.wave_amp = 0
  2348.     end
  2349.   end
  2350.  
  2351.   def icon_index
  2352.     return 0 if @character.actor == nil
  2353.     return 0 if @character.in_vehicle?
  2354.     return @character.actor.shield_icon.to_i if (@character.is_a?(Game_Monster) or @character.is_a?(Game_Event))
  2355.     return 0 if @character.actor.armors[0] == nil
  2356.     return 0 unless @character.actor.armors[0].is_a?(RPG::Armor)
  2357.     return @character.actor.armors[0].icon_index
  2358.   end
  2359.  
  2360. end
  2361. #------------------------------------------------------------------------------
  2362. class Sprite_Item < Sprite
  2363.  
  2364.   attr_reader :character
  2365.  
  2366.   def initialize(viewport, character)
  2367.     super(viewport)
  2368.     @character = character
  2369.     self.bitmap = Cache.system("Iconset")
  2370.     self.ox = 12
  2371.     self.oy = 24
  2372.     index = @character.item.is_a?(Numeric) ? $VTP.gold_properties[0] : @character.item.icon_index
  2373.     self.src_rect.set(index%16*24, index/16*24, 24, 24)
  2374.     update
  2375.   end
  2376.  
  2377.   def update
  2378.     super
  2379.     self.x = @character.screen_x
  2380.     self.y = @character.screen_y
  2381.     self.z = @character.screen_z
  2382.     self.bush_depth = @character.bush_depth
  2383.   end
  2384.  
  2385. end
  2386.  
  2387. #------------------------------------------------------------------------------
  2388. class Sprite_Reward < Sprite
  2389.  
  2390.   def initialize(viewport)
  2391.     super(viewport)
  2392.     self.visible = false
  2393.     @duration = 0
  2394.   end
  2395.  
  2396.   def update
  2397.     refresh if $game_party.reward != nil
  2398.     return unless self.visible
  2399.     super
  2400.     @duration -= 1 if @duration > 0
  2401.     if @duration <= 0 and self.visible
  2402.       self.opacity -= 10
  2403.       self.visible = false if self.opacity <= 0
  2404.     end
  2405.     if @duration > 0 and self.visible and self.opacity < 200
  2406.       self.opacity += 10
  2407.     end
  2408.   end
  2409.  
  2410.   def refresh
  2411.     @text = $game_party.reward
  2412.     $game_party.reward = nil
  2413.     create_background
  2414.     self.bitmap.draw_text(self.bitmap.rect, @text, 1)
  2415.     self.x = Graphics.width - self.bitmap.width
  2416.     self.y = Graphics.height - self.bitmap.height
  2417.     self.visible = true
  2418.     @duration = 150
  2419.   end
  2420.  
  2421.   def create_background
  2422.     bitmap = Cache.system("Window")
  2423.     w, h = @text.getw+16, Font.default_size+16
  2424.     self.bitmap = Bitmap.new(w, h)
  2425.     self.bitmap.stretch_blt(Rect.new(4,4,w-8,h-8), bitmap, Rect.new(0,0,64,64))
  2426.     self.bitmap.stretch_blt(Rect.new(0,0,8,8), bitmap, Rect.new(64,0,8,8))    
  2427.     self.bitmap.stretch_blt(Rect.new(8,0,w-16,8), bitmap, Rect.new(72,0,48,8))
  2428.     self.bitmap.stretch_blt(Rect.new(w-8,0,8,8), bitmap, Rect.new(120,0,8,8))
  2429.     self.bitmap.stretch_blt(Rect.new(0,8,8,h-16), bitmap, Rect.new(64,8,8,48))
  2430.     self.bitmap.stretch_blt(Rect.new(0,h-8,8,8), bitmap, Rect.new(64,56,8,8))
  2431.     self.bitmap.stretch_blt(Rect.new(8,h-8,w-16,8), bitmap, Rect.new(72,56,48,8))
  2432.     self.bitmap.stretch_blt(Rect.new(w-8,h-8,8,8), bitmap, Rect.new(120,56,8,8))
  2433.     self.bitmap.stretch_blt(Rect.new(w-8,8,8,h-16), bitmap, Rect.new(120,8,8,48))
  2434.   end
  2435.  
  2436. end
  2437.  
  2438. #------------------------------------------------------------------------------
  2439. class Spriteset_Map
  2440.  
  2441.   alias vtp_spmap_create_characters create_characters
  2442.   alias vtp_spmap_update_characters update_characters
  2443.   alias vtp_spmap_dispose_characters dispose_characters
  2444.  
  2445.   def create_characters
  2446.     @allies_sprites = []
  2447.     @monsters_sprites = []
  2448.     @projectiles_sprites = []
  2449.     @items_sprites = []
  2450.     @weapons_sprites = []
  2451.     @shields_sprites = []
  2452.     vtp_spmap_create_characters
  2453.     @weapons_sprites << Sprite_Weapon.new(@viewport1, $game_player)
  2454.     @shields_sprites << Sprite_Shield.new(@viewport1, $game_player)
  2455.     for i in $game_map.events.values.compact
  2456.       next if i.actor == nil
  2457.       @weapons_sprites << Sprite_Weapon.new(@viewport1, i)
  2458.       @shields_sprites << Sprite_Shield.new(@viewport1, i)
  2459.     end
  2460.     for i in $game_allies.compact
  2461.       @allies_sprites << Sprite_Character.new(@viewport1, i)
  2462.       @weapons_sprites << Sprite_Weapon.new(@viewport1, i)
  2463.       @shields_sprites << Sprite_Shield.new(@viewport1, i)
  2464.     end
  2465.     for i in $game_monsters.compact
  2466.       @monsters_sprites << Sprite_Character.new(@viewport1, i)
  2467.       @weapons_sprites << Sprite_Weapon.new(@viewport1, i)
  2468.       @shields_sprites << Sprite_Shield.new(@viewport1, i)
  2469.     end
  2470.     for i in $game_projectiles.compact
  2471.       @projectiles_sprites << Sprite_Character.new(@viewport1, i)
  2472.     end
  2473.     for i in $game_items.compact
  2474.       @items_sprites << Sprite_Item.new(@viewport1, i)
  2475.     end
  2476.     @sprite_reward = Sprite_Reward.new(@viewport3)
  2477.   end
  2478.  
  2479.   def update_characters
  2480.     vtp_spmap_update_characters
  2481.     for i in @allies_sprites.compact
  2482.       next if i.disposed?
  2483.       i.update if $game_map.in_range?(i.character)
  2484.     end
  2485.     for i in @monsters_sprites.compact
  2486.       next if i.disposed?
  2487.       i.update if $game_map.in_range?(i.character)
  2488.     end
  2489.     for i in @weapons_sprites.compact
  2490.       next if i.disposed?
  2491.       i.update  if $game_map.in_range?(i.character)
  2492.     end
  2493.     for i in @shields_sprites.compact
  2494.       next if i.disposed?
  2495.       i.update  if $game_map.in_range?(i.character)
  2496.     end
  2497.     for i in @projectiles_sprites.compact
  2498.       next if i.disposed?
  2499.       if i.character.destroy
  2500.         i.dispose
  2501.         @projectiles_sprites.delete(i)
  2502.       elsif $game_map.in_range?(i.character)
  2503.         i.update
  2504.       end
  2505.     end
  2506.     for i in $game_projectiles.compact
  2507.       next if i.draw
  2508.       @projectiles_sprites << Sprite_Character.new(@viewport1, i)
  2509.       i.draw = true
  2510.     end
  2511.     for i in @items_sprites.compact
  2512.       next if i.disposed?
  2513.       if i.character.destroy
  2514.         i.dispose
  2515.         @items_sprites.delete(i)
  2516.       elsif $game_map.in_range?(i.character)
  2517.         i.update
  2518.       end
  2519.     end
  2520.     for i in $game_items.compact
  2521.       next if i.draw
  2522.       @items_sprites << Sprite_Item.new(@viewport1, i)
  2523.       i.draw = true
  2524.     end
  2525.     @sprite_reward.update
  2526.   end
  2527.  
  2528.   def dispose_characters
  2529.     vtp_spmap_dispose_characters
  2530.     @allies_sprites.compact.each { |i| i.dispose }
  2531.     @monsters_sprites.compact.each { |i| i.dispose }
  2532.     @weapons_sprites.compact.each { |i| i.dispose }
  2533.     @shields_sprites.compact.each { |i| i.dispose }
  2534.     @items_sprites.compact.each { |i| i.dispose }
  2535.     @sprite_reward.dispose
  2536.   end
  2537.  
  2538.   def refresh_allies_sprites
  2539.     @allies_sprites.compact.each { |i| i.dispose }
  2540.     @weapons_sprites.compact.each { |i| i.dispose if i.character.is_a?(Game_Ally) }
  2541.     @shields_sprites.compact.each { |i| i.dispose if i.character.is_a?(Game_Ally) }
  2542.     @allies_sprites.clear
  2543.     for i in $game_allies.compact
  2544.       @allies_sprites << Sprite_Character.new(@viewport1, i)
  2545.       @weapons_sprites << Sprite_Weapon.new(@viewport1, i)
  2546.       @shields_sprites << Sprite_Shield.new(@viewport1, i)
  2547.     end
  2548.   end
  2549.  
  2550. end
  2551.  
  2552. #------------------------------------------------------------------------------
  2553. class Scene_Title < Scene_Base
  2554.  
  2555.   alias vtp_stitle_command_new_game command_new_game
  2556.   alias vtp_stitle_create_game_objects create_game_objects
  2557.  
  2558.   def create_game_objects
  2559.     $game_allies = []
  2560.     $game_monsters = []
  2561.     $game_projectiles = []
  2562.     $game_items = []
  2563.     vtp_stitle_create_game_objects
  2564.     $VTP = VerusTempusProelium.new
  2565.   end
  2566.  
  2567.   def command_new_game
  2568.     vtp_stitle_command_new_game
  2569.     for ally in $game_allies.compact
  2570.       ally.moveto($data_system.start_x, $data_system.start_y)
  2571.     end
  2572.   end
  2573.  
  2574. end
  2575.  
  2576. #------------------------------------------------------------------------------
  2577. class Scene_File < Scene_Base
  2578.  
  2579.   alias vtp_stitle_do_load do_load
  2580.   alias vtp_stitle_read_save_data read_save_data
  2581.   alias vtp_stitle_write_save_data write_save_data
  2582.  
  2583.   def do_load
  2584.     vtp_stitle_do_load
  2585.     $game_player.refresh
  2586.     $game_allies.compact.each { |i| i.refresh }
  2587.   end
  2588.  
  2589.   def read_save_data(file)
  2590.     vtp_stitle_read_save_data(file)
  2591.     $game_allies      = Marshal.load(file)
  2592.     $game_monsters    = Marshal.load(file)
  2593.     $game_projectiles = Marshal.load(file)
  2594.     $game_items       = Marshal.load(file)
  2595.     $VTP              = Marshal.load(file)
  2596.   end
  2597.  
  2598.   def write_save_data(file)
  2599.     vtp_stitle_write_save_data(file)
  2600.     Marshal.dump($game_allies,      file)
  2601.     Marshal.dump($game_monsters,    file)
  2602.     Marshal.dump($game_projectiles, file)
  2603.     Marshal.dump($game_items,       file)
  2604.     Marshal.dump($VTP,              file)
  2605.   end
  2606.  
  2607. end
  2608.  
  2609. #------------------------------------------------------------------------------
  2610. class Scene_Map < Scene_Base
  2611.  
  2612.   alias vtp_smap_update update
  2613.  
  2614.   def update
  2615.     vtp_smap_update
  2616.     $VTP.update
  2617.     $game_allies.compact.each { |i| i.update if $game_map.in_range?(i) }
  2618.     $game_monsters.compact.each { |i| i.update if $game_map.in_range?(i) }
  2619.     $game_projectiles.compact.each { |i| i.update if $game_map.in_range?(i) }
  2620.     $game_items.compact.each { |i| i.update if $game_map.in_range?(i) }
  2621.   end
  2622.  
  2623.   def refresh_allies_sprites
  2624.     @spriteset.refresh_allies_sprites if @spriteset != nil
  2625.   end
  2626.  
  2627.   def update_encounter
  2628.   end
  2629.  
  2630. end
  2631.  
  2632. #------------------------------------------------------------------------------
  2633. class Window_Selectable < Window_Base
  2634.  
  2635.   alias vtp_wselectable_cursor_down cursor_down
  2636.   alias vtp_wselectable_cursor_left cursor_left
  2637.   alias vtp_wselectable_cursor_right cursor_right
  2638.   alias vtp_wselectable_cursor_up cursor_up
  2639.  
  2640.   def cursor_down(wrap=false)
  2641.     return if is_skill or is_item
  2642.     vtp_wselectable_cursor_down(wrap)
  2643.   end
  2644.  
  2645.   def cursor_left(wrap=false)
  2646.     return if is_skill or is_item
  2647.     vtp_wselectable_cursor_left(wrap)
  2648.   end
  2649.  
  2650.   def cursor_right(wrap=false)
  2651.     return if is_skill or is_item
  2652.     vtp_wselectable_cursor_right(wrap)
  2653.   end
  2654.  
  2655.   def cursor_up(wrap=false)
  2656.     return if is_skill or is_item
  2657.     vtp_wselectable_cursor_up(wrap)
  2658.   end
  2659.  
  2660.   def is_skill
  2661.     return true if self.is_a?(Window_Skill) and Input.press?($VTP.skills_key)
  2662.     return false
  2663.   end
  2664.  
  2665.   def is_item
  2666.     return true if self.is_a?(Window_Item) and Input.press?($VTP.items_key)
  2667.     return false
  2668.   end
  2669.  
  2670. end
  2671.  
  2672. #------------------------------------------------------------------------------
  2673. class Scene_Item < Scene_Base
  2674.  
  2675.   alias vtp_sitem_start start
  2676.   alias vtp_sitem_update_item_selection update_item_selection
  2677.  
  2678.   def start
  2679.     vtp_sitem_start
  2680.     @actor = $game_party.members[0]
  2681.   end
  2682.  
  2683.   def update_item_selection
  2684.     vtp_sitem_update_item_selection
  2685.     if Input.press?($VTP.items_key)
  2686.       return unless Input.trigger?(Input.dir4)
  2687.       Sound.play_use_item
  2688.       @actor.item_hotkeys[Input.dir4] = @item_window.item.id
  2689.     end
  2690.     if Input.trigger?($VTP.attack_key)
  2691.       return if @actor.weapons[0] == nil
  2692.       return unless @actor.weapons[0].ranged?
  2693.       return unless @actor.weapons[0].ammo_list.include?(@item_window.item.id)
  2694.       @actor.ammos[@actor.weapons[0].id] = @item_window.item.id
  2695.       Sound.play_equip
  2696.     end
  2697.     if Input.trigger?($VTP.defend_key)
  2698.       return unless @actor.two_swords_style
  2699.       return if @actor.weapons[1] == nil
  2700.       return unless @actor.weapons[1].ranged?
  2701.       return unless @actor.weapons[1].ammo_list.include?(@item_window.item.id)
  2702.       @actor.ammos[@actor.weapons[1].id] = @item_window.item.id
  2703.       Sound.play_equip
  2704.     end
  2705.   end
  2706.  
  2707. end
  2708.  
  2709. #------------------------------------------------------------------------------
  2710. class Scene_Skill < Scene_Base
  2711.  
  2712.   def update_skill_selection
  2713.     if Input.trigger?(Input::B)
  2714.       Sound.play_cancel
  2715.       return_scene
  2716.     elsif Input.trigger?(Input::C)
  2717.       @skill = @skill_window.skill
  2718.       if @skill != nil
  2719.         @actor.last_skill_id = @skill.id
  2720.       end
  2721.       if @actor.skill_can_use?(@skill)
  2722.         Sound.play_decision
  2723.         determine_skill
  2724.       else
  2725.         Sound.play_buzzer
  2726.       end
  2727.     end
  2728.     if Input.press?($VTP.skills_key)
  2729.       return unless Input.trigger?(Input.dir4)
  2730.       Sound.play_use_skill
  2731.       @actor.skill_hotkeys[Input.dir4] = @skill_window.skill.id
  2732.     end
  2733.   end
  2734.  
  2735. end
  2736.  
  2737. #==============================================================================
  2738. # End of Verus Tempus Proelium
  2739. #==============================================================================
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Top