Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 74.04 KB | None | 0 0
  1. module COZZIEKUNS
  2.   module FF12
  3.     module ABS
  4.       ENEMY ={
  5.       # id            Name      HP    MP  Attack Defense  Spirit Agility Hit Ratio Evasion   EXP  Gold  Traits Hit Ani Frequency    Fade  Self Switch               Drop Item  Skills
  6.         0 => [          "",     nil,  nil,   nil,    nil,    nil,     nil,     nil,     nil,  nil,  nil,   nil,     nil,      nil,    nil,        nil,                    nil,   nil],
  7.         1 => [      "Thug",     100,   0,     12,      4,      8,      10,      95,       5,    3,    5,     1,       1,       60,   true,        nil, [[1, 1, 5], [1, 4, 8]],   nil],
  8.         2 => [  "Thugette",     500,   0,     36,     12,      8,      15,      95,       5,   18,   10,     1,       3,       50,  false,        "A", [           [1, 2, 1]],   nil],
  9.         3 => [    "Snake",      200,   0,     16,      6,      8,      10,      95,       5,    3,    5,     1,      36,       60,   true,        nil, [           [1, 6, 6]],   [4]],
  10.         4 => [      "Bee",      250,   0,     28,      8,      8,      10,      95,       5,    9,   15,     1,      13,       45,   true,        nil, [           [1, 6, 6]],   [4]],
  11.         5 => [      "Orc",      800,   0,     24,      8,      8,      10,      95,       5,   20,  200,     1,      36,       60,   true,        nil, [           [1, 1, 1]],   nil],
  12.         6 => ["Major Orc",     2000,   0,     32,     12,      8,      10,      95,       5,   50,  200,     1,      85,       60,  false,        "A", [[1, 3, 1], [1, 2, 1]], [105]],
  13.       }
  14.      
  15.       STOP_ALL_MOVEMENT = 82
  16.       TARGET_ALL_SCREEN = true
  17.      
  18.     end
  19.   end
  20. end
  21.  
  22. #==============================================================================
  23. # ** RPG::BaseItem
  24. #==============================================================================
  25.  
  26. class RPG::BaseItem
  27.   #--------------------------------------------------------------------------
  28.   # * Public Instance Variables
  29.   #--------------------------------------------------------------------------
  30.   attr_reader   :frames  
  31.   #--------------------------------------------------------------------------
  32.   # * Frames
  33.   #--------------------------------------------------------------------------
  34.   def frames
  35.     @frames = 0
  36.     @frames = $1.to_i if self.note[/\\ff12_abs_frames\[(\d+)]/i] != nil
  37.     return @frames
  38.   end
  39. end
  40.  
  41. #==============================================================================
  42. # ** RPG::UsableItem
  43. #==============================================================================
  44.  
  45. class RPG::UsableItem < RPG::BaseItem
  46.   #-------------------------------------------------------------------------
  47.   # * Atk Force
  48.   #--------------------------------------------------------------------------
  49.   def atk_f
  50.     atk_f = @atk_f
  51.     atk_f = $1.to_i if self.note[/\\atk_f\[(\d+)]/i] != nil
  52.     return atk_f
  53.   end
  54.   #-------------------------------------------------------------------------
  55.   # * Status Infliction Chance
  56.   #--------------------------------------------------------------------------
  57.   def sic
  58.     sic = 100
  59.     sic = $1.to_i if self.note[/\\sic\[(\d+)]/i] != nil
  60.     return sic
  61.   end
  62. end
  63.  
  64. #==============================================================================
  65. # ** RPG::Weapon
  66. #==============================================================================
  67.  
  68. class RPG::Weapon < RPG::BaseItem
  69.   #-------------------------------------------------------------------------
  70.   # * Weapon Type
  71.   #--------------------------------------------------------------------------
  72.   def weapon_type
  73.     weapon_typex = 0
  74.     weapon_typex = 1 if self.note[/\\poke/i] != nil
  75.     weapon_typex = 2 if self.note[/\\shoot/i] != nil
  76.     return weapon_typex
  77.   end
  78.   #-------------------------------------------------------------------------
  79.   # * Projectile
  80.   #--------------------------------------------------------------------------
  81.   def projectile
  82.     return 0 if weapon_type != 2
  83.     return $1.to_i if self.note[/\\projectile\[(\d+)]/i]
  84.   end
  85. end
  86.  
  87. #==============================================================================
  88. # ** RPG::State
  89. #==============================================================================
  90.  
  91. class RPG::State
  92.   #--------------------------------------------------------------------------
  93.   # * Public Instance Variables
  94.   #--------------------------------------------------------------------------
  95.   attr_accessor :steps  
  96.   attr_accessor :step_created
  97.   #--------------------------------------------------------------------------
  98.   # * Steps
  99.   #--------------------------------------------------------------------------
  100.   def steps
  101.     unless @step_created
  102.       @steps = -1
  103.       @steps = $1.to_i if self.note[/\\erase_after_steps\[(\d+)]/i] != nil
  104.       @step_created = true
  105.     end
  106.     return @steps
  107.   end
  108. end
  109.  
  110. #==============================================================================
  111. # ** RPG::Weapon
  112. #==============================================================================
  113.  
  114. class RPG::Weapon
  115.   #--------------------------------------------------------------------------
  116.   # * Public Instance Variables
  117.   #--------------------------------------------------------------------------
  118.   attr_accessor :mirror
  119.   #--------------------------------------------------------------------------
  120.   # * Mirror
  121.   #--------------------------------------------------------------------------
  122.   def mirror
  123.     @mirror = false
  124.     @mirror = true if self.note[/\\mirror/i] != nil
  125.     return @mirror
  126.   end
  127. end
  128.  
  129. #==============================================================================
  130. # ** Game_Actor
  131. #==============================================================================
  132.  
  133. class Game_Actor < Game_Battler
  134.   #--------------------------------------------------------------------------
  135.   # * Public Instance Variables
  136.   #--------------------------------------------------------------------------
  137.   attr_reader   :exp_list                 # experience list
  138.   attr_accessor :item_index
  139.   attr_accessor :skill_item
  140.   attr_accessor :skill_index
  141.   #--------------------------------------------------------------------------
  142.   # * Object Initialization
  143.   #--------------------------------------------------------------------------
  144.   alias coz_ff12_abs_ga_initialize initialize
  145.   def initialize(actor_id)
  146.     coz_ff12_abs_ga_initialize(actor_id)
  147.     @skill_index = 0
  148.     @item_index = 0
  149.     @skill_item = 0
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # * Level Up
  153.   #--------------------------------------------------------------------------
  154.   alias coz_ff12_abs_ga_level_up level_up
  155.   def level_up
  156.     coz_ff12_abs_ga_level_up
  157.     @hp = @maxhp
  158.     @mp = @maxmp
  159.   end
  160. end
  161.  
  162. #==============================================================================
  163. # ** Game_Character
  164. #==============================================================================
  165.  
  166. class Game_Character
  167.   #--------------------------------------------------------------------------
  168.   # * Public Instance Variables
  169.   #--------------------------------------------------------------------------
  170.   attr_reader   :fading
  171.   attr_reader   :using_skill
  172.   attr_accessor :crit
  173.   attr_accessor :heal
  174.   attr_accessor :frames
  175.   attr_accessor :popup_text
  176.   attr_accessor :popup_delay
  177.   attr_accessor :animation_mirror
  178.   #--------------------------------------------------------------------------
  179.   # * Object Initialization
  180.   #--------------------------------------------------------------------------
  181.   alias coz_ff12_abs_gc_initialize initialize
  182.   def initialize
  183.     coz_ff12_abs_gc_initialize
  184.     @frames = 0
  185.     @rech_frames = 0
  186.     @fade = 255
  187.     @fading = false
  188.     @popup_text = []
  189.     for i in 0..8
  190.       @popup_text.push("")
  191.     end
  192.     @animation_mirror = false
  193.   end
  194.   #--------------------------------------------------------------------------
  195.   # * Update During Self movement
  196.   #--------------------------------------------------------------------------
  197.   alias coz_ff12_abs_gc_update_self_movement update_self_movement
  198.     def update_self_movement
  199.     return if $game_switches[COZZIEKUNS::FF12::ABS::STOP_ALL_MOVEMENT]
  200.     coz_ff12_abs_gc_update_self_movement
  201.     if @stop_count > 30 * (5 - @move_frequency)
  202.       case @move_type
  203.       when 4; approach
  204.       end
  205.     end
  206.   end
  207.   #--------------------------------------------------------------------------
  208.   # * Frame Update
  209.   #--------------------------------------------------------------------------
  210.   alias coz_ff12_abs_gc_update update
  211.   def update
  212.     coz_ff12_abs_gc_update
  213.     @fade = @opacity
  214.     @fade -= 5 if @fading and @fade > 0
  215.     @opacity = @fade
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # * Attacking?
  219.   #--------------------------------------------------------------------------
  220.   def attacking?
  221.     @frames -= 1
  222.     @rech_frames -= 1
  223.     return false if moving?
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   # * Fade
  227.   #--------------------------------------------------------------------------
  228.   def fade
  229.     @fading = true
  230.   end
  231.   #--------------------------------------------------------------------------
  232.   # * Move Type : Approach
  233.   #--------------------------------------------------------------------------
  234.   def approach
  235.     sx = @x - $game_player.x
  236.     sy = @y - $game_player.y
  237.     if sx.abs + sy.abs >= 20
  238.       move_random
  239.     else
  240.       last_x = @x
  241.       last_y = @y
  242.       move_toward_player
  243.       if last_x == @x and last_y == @y
  244.         if (@x - $game_player.x).abs > 1 or (@y - $game_player.y).abs > 1
  245.           case rand(2)
  246.           when 0; turn_left_90
  247.           when 1; turn_right_90
  248.           when 2; turn_180
  249.           end
  250.           move_forward
  251.         end
  252.       end
  253.     end
  254.   end
  255. end
  256.  
  257. #==============================================================================
  258. # ** Game_Party
  259. #==============================================================================
  260.  
  261. class Game_Party < Game_Unit
  262.   #--------------------------------------------------------------------------
  263.   # * Public Instance Variables
  264.   #--------------------------------------------------------------------------
  265.   attr_accessor :text
  266.   attr_accessor :hud_visible
  267.   #--------------------------------------------------------------------------
  268.   # * Object Initialization
  269.   #--------------------------------------------------------------------------
  270.   alias coz_ff12_abs_gp_initialize initialize
  271.   def initialize
  272.     coz_ff12_abs_gp_initialize
  273.     @text = []
  274.     for i in 0...24
  275.       @text.push("")
  276.     end
  277.     @hud_visible = false
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # * Increase Steps
  281.   #--------------------------------------------------------------------------
  282.   alias coz_ff12_abs_gp_increase_steps increase_steps
  283.   def increase_steps
  284.     coz_ff12_abs_gp_increase_steps
  285.     for actor in members
  286.       for state in actor.states
  287.         next if state.steps == -1
  288.         actor.remove_state(state.id) if state.steps.zero?
  289.         state.steps -= 1
  290.       end
  291.     end
  292.   end
  293.   #--------------------------------------------------------------------------
  294.   # * Usable Item
  295.   #--------------------------------------------------------------------------
  296.   def usable_items
  297.     usable_item = []
  298.     for item in items
  299.       next if item.is_a?(RPG::Weapon)
  300.       next if item.is_a?(RPG::Armor)
  301.       next if item.occasion > 1
  302.       usable_item.push(item)
  303.     end
  304.     return usable_item
  305.   end
  306. end
  307.  
  308. #==============================================================================
  309. # ** Game_Event
  310. #==============================================================================
  311.  
  312. class Game_Event < Game_Character
  313.   #--------------------------------------------------------------------------
  314.   # * Public Instance Variables
  315.   #--------------------------------------------------------------------------
  316.   attr_reader   :hp
  317.   attr_reader   :mp
  318.   attr_reader   :atk
  319.   attr_reader   :def
  320.   attr_reader   :spi
  321.   attr_reader   :agi
  322.   attr_reader   :hit
  323.   attr_reader   :eva
  324.   attr_reader   :exp
  325.   attr_reader   :gold
  326.   attr_reader   :maxhp
  327.   attr_reader   :maxmp
  328.   attr_reader   :traits
  329.   attr_reader   :erased
  330.   attr_reader   :skills
  331.   attr_reader   :animation
  332.   attr_reader   :drop_item
  333.   attr_reader   :frame_rate
  334.   attr_reader   :frame_count
  335.   attr_reader   :self_switch
  336.   attr_accessor :enemy
  337.   attr_accessor :enemy_id
  338.   attr_accessor :move_speed
  339.   attr_accessor :move_type
  340.   attr_accessor :move_frequency
  341.   #--------------------------------------------------------------------------
  342.   # * Event page setup
  343.   #--------------------------------------------------------------------------
  344.   alias coz_ff12_abs_ge_setup setup
  345.   def setup(new_page)
  346.     coz_ff12_abs_ge_setup(new_page)
  347.     unless @erased
  348.       comment = ''
  349.       for i in @page.list
  350.         next if i.code != 108 and i.code != 408
  351.         comment += i.parameters.to_s
  352.       end
  353.       @enemy = !(comment.scan(/\\enemy\[\d+\]/i).empty?)
  354.       @enemy_id = comment.scan(/\\enemy\[(\d+)\]/i)[0].to_s.to_i
  355.       create_parameters
  356.     end
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # * Create Parameters
  360.   #--------------------------------------------------------------------------
  361.   def create_parameters
  362.     @maxhp = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][1]
  363.     @maxmp = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][2]
  364.     @hp = @maxhp
  365.     @mp = @maxmp
  366.     @atk = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][3]
  367.     @def = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][4]
  368.     @spi = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][5]
  369.     @agi = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][5]
  370.     @hit = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][7]
  371.     @eva = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][8]
  372.     @exp = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][9]
  373.     @gold = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][10]
  374.     @traits = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][11]
  375.     @animation = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][12]
  376.     @frame_rate = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][13]
  377.     @will_fade = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][14]
  378.     @self_switch = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][15]
  379.     @drop_item = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][16]
  380.     @skills = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][17]
  381.     @frame_count = 0
  382.   end
  383.   #--------------------------------------------------------------------------
  384.   # * Fade?
  385.   #--------------------------------------------------------------------------
  386.   def fade?
  387.     return @will_fade
  388.   end
  389.   #--------------------------------------------------------------------------
  390.   # * Change HP
  391.   #--------------------------------------------------------------------------
  392.   def hp=(hp)
  393.     @hp = [[hp, maxhp].min, 0].max
  394.   end
  395.   #--------------------------------------------------------------------------
  396.   # * Change MP
  397.   #--------------------------------------------------------------------------
  398.   def mp=(mp)
  399.     @mp = [[mp, maxmp].min, 0].max
  400.   end
  401.   #--------------------------------------------------------------------------
  402.   # * Frame Update
  403.   #--------------------------------------------------------------------------
  404.   alias coz_ff12_abs_ge_update update
  405.   def update
  406.     coz_ff12_abs_ge_update
  407.     @frame_count += 1 if !(@frame_count.nil?)
  408.     erase if @fade == 0
  409.     unless @frame_rate.nil?
  410.       if @frame_count == @frame_rate
  411.         @frame_count = 0
  412.         @frame_rate = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][13] + rand(5)
  413.       end
  414.     end
  415.   end
  416. end
  417.  
  418. #==============================================================================
  419. # ** Game_Player
  420. #==============================================================================
  421.  
  422. class Game_Player < Game_Character
  423.   #--------------------------------------------------------------------------
  424.   # * Attacking?
  425.   #--------------------------------------------------------------------------
  426.   def attacking?
  427.     return false if $game_switches[COZZIEKUNS::FF12::ABS::STOP_ALL_MOVEMENT]
  428.     super
  429.     actor = $game_party.members[0]
  430.     return false if @vehicle_type != -1
  431.     if Input.trigger?(Input::Y) and @rech_frames < 0
  432.       attack_rate = 1
  433.       for state in actor.states
  434.         attack_rate = 2 if state.agi_rate > 100
  435.       end
  436.       @frames = 75 / attack_rate
  437.       @rech_frames = 80 / attack_rate if @frames == 75 / attack_rate
  438.     elsif Input.trigger?(Input::X) and @rech_frames < 0 and !(actor.skills.empty?)
  439.       return unless skill_active?
  440.       @frames = actor.skills[actor.skill_index].frames
  441.       @rech_frames = @frames + 5 if @frames == actor.skills[actor.skill_index].frames
  442.       @using_skill = true unless actor.skills[actor.skill_index].physical_attack
  443.     end
  444.     @using_skill = false if @frames.zero?
  445.     return false if @using_skill
  446.     return true if @frames > 0  
  447.     return false
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # * Determine if Movement is Possible
  451.   #--------------------------------------------------------------------------
  452.   alias coz_ff12_abs_gp_movable? movable?
  453.   def movable?
  454.     return false if attacking?
  455.     return false if @using_skill
  456.     coz_ff12_abs_gp_movable?
  457.   end
  458.   #--------------------------------------------------------------------------
  459.   # * Determine if Using Skill
  460.   #--------------------------------------------------------------------------
  461.   def skill_active?
  462.     actor = $game_party.members[0]
  463.     skill = actor.skills[actor.skill_index]
  464.     return false if actor.mp < skill.mp_cost
  465.     return false if actor.skill_item == 1
  466.     case skill.scope
  467.     when 1
  468.       case @direction
  469.       when 2
  470.         return false if ($game_map.events_xy(@x, @y + 1)).empty?
  471.         for event in $game_map.events_xy(@x, @y + 1)
  472.           return false unless event.enemy
  473.         end
  474.       when 4
  475.         return false if ($game_map.events_xy(@x - 1, @y)).empty?
  476.         for event in $game_map.events_xy(@x - 1, @y)
  477.           return false unless event.enemy
  478.         end
  479.       when 6
  480.         return false if ($game_map.events_xy(@x + 1, @y)).empty?
  481.         for event in $game_map.events_xy(@x + 1, @y)
  482.           return false unless event.enemy
  483.         end
  484.       when 8; return false if ($game_map.events_xy(@x, @y - 1)).empty?
  485.         for event in $game_map.events_xy(@x, @y - 1)
  486.           return false unless event.enemy
  487.         end
  488.       end
  489.     end
  490.     return true
  491.   end
  492. end
  493.  
  494. #==============================================================================
  495. # ** Sprite_Character
  496. #==============================================================================
  497.  
  498. class Sprite_Character < Sprite_Base
  499.   #--------------------------------------------------------------------------
  500.   # * Object Initialization
  501.   #     viewport  : viewport
  502.   #     character : character (Game_Character)
  503.   #--------------------------------------------------------------------------
  504.   def initialize(viewport, character = nil)
  505.     super(viewport)
  506.     @character = character
  507.     @balloon_duration = 0
  508.     @popup_texts = ["", "", "", "", "", "", "", "", ""]
  509.     @popup_duration = []
  510.     @popup_sprites = []
  511.     @state_duration = 0
  512.     start_popup
  513.     start_state_popup
  514.     update
  515.   end
  516.   #--------------------------------------------------------------------------
  517.   # * Dispose
  518.   #--------------------------------------------------------------------------
  519.   alias coz_ff12_abs_spc_dispose dispose
  520.   def dispose
  521.     dispose_popup
  522.     dispose_state_popup
  523.     coz_ff12_abs_spc_dispose
  524.   end
  525.   #--------------------------------------------------------------------------
  526.   # * Frame Update
  527.   #--------------------------------------------------------------------------
  528.   def update
  529.     super
  530.     update_bitmap
  531.     self.visible = (not @character.transparent)
  532.     update_src_rect
  533.     self.x = @character.screen_x
  534.     self.y = @character.screen_y
  535.     self.z = @character.screen_z
  536.     self.opacity = @character.opacity
  537.     self.blend_type = @character.blend_type
  538.     self.bush_depth = @character.bush_depth
  539.     update_balloon
  540.     if @character.animation_id != 0
  541.       animation = $data_animations[@character.animation_id]
  542.       mirror = @character.animation_mirror
  543.       start_animation(animation, mirror)
  544.       @character.animation_id = 0
  545.     end
  546.     if @character.balloon_id != 0
  547.       @balloon_id = @character.balloon_id
  548.       start_balloon
  549.       @character.balloon_id = 0
  550.     end
  551.     update_popup
  552.     update_state_popup
  553.   end
  554.   #--------------------------------------------------------------------------
  555.   # * Start Popup Icon Display
  556.   #--------------------------------------------------------------------------
  557.   def start_popup
  558.     for i in 0..8
  559.       @popup_duration.push(48)
  560.       @popup_sprites.push(Sprite.new(viewport))
  561.       @popup_sprites[i].bitmap = Bitmap.new(544, 32)
  562.     end
  563.     update_popup
  564.   end
  565.   #--------------------------------------------------------------------------
  566.   # * Dispose of Popup Icon
  567.   #--------------------------------------------------------------------------
  568.   def dispose_popup
  569.     for i in 0..8; @popup_sprites[i].dispose; end
  570.   end
  571.   #--------------------------------------------------------------------------
  572.   # * Update Popup Icon
  573.   #--------------------------------------------------------------------------
  574.   def update_popup
  575.     for i in 0..8
  576.       @popup_duration[i] -= 1
  577.       return if @character.popup_text[i] == ""
  578.       if @character.popup_text[i] != @popup_texts[i]
  579.         @popup_texts[i] = @character.popup_text[i]
  580.         @popup_duration[i] = 48
  581.         @popup_sprites[i].x = x
  582.         @popup_sprites[i].y = (y - height / 2) - i * 32
  583.         @popup_sprites[i].z = z + 200 + i
  584.         @popup_sprites[i].ox = 48
  585.         @popup_sprites[i].oy = 0
  586.         @popup_sprites[i].opacity = 255
  587.         @popup_sprites[i].bitmap.clear
  588.         @popup_sprites[i].bitmap.font.name = ["Verdana", "Arial", "Courier New"]
  589.         @popup_sprites[i].bitmap.font.size = 24
  590.         @popup_sprites[i].bitmap.font.size = 30 if !(@character.popup_text[i].scan(/Level Up!!/).empty?)
  591.         @popup_sprites[i].bitmap.font.color = Color.new(237, 28, 36) if @character.crit
  592.         @popup_sprites[i].bitmap.font.color = Color.new(0, 160, 16) if @character.heal
  593.         @popup_sprites[i].bitmap.font.color = Color.new(255, 204, 32) if !(@character.popup_text[i].scan(/Level Up!!/).empty?)
  594.         @popup_sprites[i].bitmap.font.bold = false
  595.         @popup_sprites[i].bitmap.font.bold = true if !(@character.popup_text[i].scan(/Level Up!!/).empty?)
  596.         @popup_sprites[i].bitmap.draw_text(0, 0, 96, 32, @character.popup_text[i], 1)
  597.       end
  598.       @popup_sprites[i].oy = 96 - (@popup_duration[i] * 2)
  599.       @popup_sprites[i].opacity -= 8 if @popup_duration[i] < 24
  600.       @character.popup_text[i] = "" if @popup_sprites[i].opacity < 0
  601.       return if @character.popup_text[i] == ""
  602.     end
  603.   end
  604.   #--------------------------------------------------------------------------
  605.   # * Start State Popup Icon
  606.   #--------------------------------------------------------------------------
  607.   def start_state_popup
  608.     @state_sprite = Sprite.new(viewport)
  609.     @state_sprite.bitmap = Cache.system("Iconset")
  610.     update_state_popup
  611.   end
  612.   #--------------------------------------------------------------------------
  613.   # * Dispose of State Popup Icon
  614.   #--------------------------------------------------------------------------
  615.   def dispose_state_popup
  616.     if @state_sprite != nil
  617.       @state_sprite.dispose
  618.       @state_sprite = nil
  619.     end
  620.   end
  621.   #--------------------------------------------------------------------------
  622.   # * Update State Popup Icon
  623.   #--------------------------------------------------------------------------
  624.   def update_state_popup
  625.     @state_duration += 1
  626.     if @state_duration < 0
  627.       @state_sprite.oy = 0
  628.     elsif @state_duration < 15
  629.       @state_sprite.oy = 1
  630.     elsif @state_duration < 30
  631.       @state_sprite.oy = 0
  632.     elsif @state_duration < 45
  633.       @state_sprite.oy = -1
  634.     else
  635.       @state_duration = 0
  636.     end
  637.     @state_sprite.x = x - 12
  638.     @state_sprite.y = y - 64
  639.     @state_sprite.z = z + 201
  640.     update_state_src_rect
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # * Update Transfer Origin Rectangle
  644.   #--------------------------------------------------------------------------
  645.   def update_state_src_rect
  646.     character = $game_party.members[0] if @character == $game_player
  647.     priority = []
  648.     my_states = []
  649.     if character == $game_party.members[0]
  650.       index = 0
  651.       for state in character.states
  652.         priority.push(state.priority)
  653.       end
  654.       priority.sort!
  655.       for i in 0...character.states.size - 1
  656.         priority.shift
  657.       end
  658.       for state in character.states
  659.         if state.priority == priority[0]
  660.           my_states.push(state)
  661.         end
  662.       end
  663.       index = my_states[0].icon_index if !(character.states.empty?)
  664.       index = 0 if character.states.empty?
  665.     else
  666.       index = 0
  667.     end
  668.     rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
  669.     @state_sprite.src_rect = rect
  670.   end
  671. end
  672.  
  673. #==============================================================================
  674. # ** Sprite_AttackIcon
  675. #==============================================================================
  676.  
  677. class Sprite_AttackIcon < Sprite
  678.   #--------------------------------------------------------------------------
  679.   # * Object Initialization
  680.   #--------------------------------------------------------------------------
  681.   def initialize(viewport, character)
  682.     super(viewport)
  683.     @character = character
  684.     @front = false
  685.     update
  686.   end
  687.   #--------------------------------------------------------------------------
  688.   # * Dispose
  689.   #--------------------------------------------------------------------------
  690.   def dispose
  691.     if self.bitmap != nil
  692.       self.bitmap.dispose
  693.     end
  694.     super
  695.   end
  696.   #--------------------------------------------------------------------------
  697.   # * Frame Update
  698.   #--------------------------------------------------------------------------
  699.   def update
  700.     super
  701.     self.bitmap = Cache.system("Iconset")
  702.     self.visible = @character.attacking?
  703.     self.x = @character.screen_x - 12
  704.     self.y = @character.screen_y - 24
  705.     self.mirror = false
  706.     self.mirror = true if $game_party.members[0].weapon_id != 0 and $data_weapons[$game_party.members[0].weapon_id].mirror
  707.     case @front
  708.     when 0; self.z = @character.screen_z + 1
  709.     when 1; self.z = @character.screen_z - 1
  710.     when 2; self.z = -1
  711.     end
  712.     case $data_weapons[$game_party.members[0].weapon_id].weapon_type
  713.     when 0
  714.       case @character.direction
  715.       when 2; attack_down
  716.       when 4; attack_left
  717.       when 6; attack_right
  718.       when 8; attack_up
  719.       end
  720.     when 1
  721.       case @character.direction
  722.       when 2; poke(0)
  723.       when 4; poke(1)
  724.       when 6; poke(2)
  725.       when 8; poke(3)
  726.       end
  727.     when 2
  728.       case @character.direction
  729.       when 2; shoot(0)
  730.       when 4; shoot(1)
  731.       when 6; shoot(2)
  732.       when 8; shoot(3)
  733.       end
  734.     end
  735.     update_src_rect
  736.   end
  737.   #--------------------------------------------------------------------------
  738.   # * Shoot
  739.   #--------------------------------------------------------------------------
  740.   def shoot(direction)
  741.     if self.visible
  742.       case direction
  743.       when 0
  744.         self.x += 4
  745.         self.y += 32  
  746.         self.angle = 135
  747.       when 1
  748.         self.x -= 8
  749.         self.y += 16  
  750.         self.angle = 45
  751.       when 2
  752.         self.x += 32
  753.         self.y += 16  
  754.         self.angle = 225
  755.       when 3
  756.         self.x += 8
  757.         self.y -= 8
  758.         self.angle = 315
  759.       end
  760.       @front = 0 if direction != 3
  761.     else
  762.       self.ox = 0
  763.       self.oy = 0
  764.       @front = 1
  765.     end
  766.   end
  767.   #--------------------------------------------------------------------------
  768.   # * Poke
  769.   #--------------------------------------------------------------------------
  770.   def poke(direction)
  771.     if self.visible
  772.       case direction
  773.       when 0
  774.         self.x += 4
  775.         self.y += 24  
  776.         self.angle = 135
  777.       when 1
  778.         self.y += 16  
  779.         self.angle = 45
  780.       when 2
  781.         self.x += 24
  782.         self.y += 16  
  783.         self.angle = 225
  784.       when 3
  785.         self.x += 8
  786.         self.y -= 12
  787.         self.angle = 315
  788.       end
  789.       self.ox += 4 if self.ox != 16
  790.       self.oy += 4 if self.oy != 16
  791.       @front = 0 if self.oy >= 12 and direction != 3
  792.     else
  793.       self.ox = 0
  794.       self.oy = 0
  795.       @front = 1
  796.     end
  797.   end
  798.   #--------------------------------------------------------------------------
  799.   # * Attack Down
  800.   #--------------------------------------------------------------------------
  801.   def attack_down
  802.     if self.visible
  803.       self.x += 16
  804.       self.y += 16
  805.       self.ox = 24
  806.       self.oy = 24
  807.       if self.angle != 225
  808.         self.angle += 18
  809.         @front = 0
  810.         @front = 1 if self.angle > 185
  811.         @front = 2 if self.angle > 185 and !(@character.passable?(@character.x + 1, @character.y))
  812.       end
  813.     else
  814.       @front = 0
  815.       self.angle = 45
  816.       self.ox = 0
  817.       self.oy = 0
  818.     end
  819.   end
  820.   #--------------------------------------------------------------------------
  821.   # * Attack Left
  822.   #--------------------------------------------------------------------------
  823.   def attack_left
  824.     if self.visible
  825.       self.x += 12
  826.       self.y += 12
  827.       self.ox = 24
  828.       self.oy = 24
  829.       if self.angle != 135
  830.         self.angle += 18
  831.         @front = 0
  832.         @front = 1 if self.angle > 110
  833.         @front = 2 if self.angle > 110 and !(@character.passable?(@character.x, @character.y + 1))
  834.       end
  835.     else
  836.       @front = 0
  837.       self.angle = -45
  838.       self.ox = 0
  839.       self.oy = 0
  840.     end
  841.   end
  842.   #--------------------------------------------------------------------------
  843.   # * Attack Right
  844.   #--------------------------------------------------------------------------
  845.   def attack_right
  846.     if self.visible
  847.       self.x += 12
  848.       self.y += 12
  849.       self.ox = 24
  850.       self.oy = 24
  851.       if self.angle != -225
  852.         self.angle -= 18
  853.         @front = 2 if self.angle < -160 and !(@character.passable?(@character.x, @character.y + 1))
  854.       end
  855.     else
  856.       @front = 1
  857.       self.angle = -45
  858.       self.ox = 0
  859.       self.oy = 0
  860.     end
  861.   end
  862.   #--------------------------------------------------------------------------
  863.   # * Attack Up
  864.   #--------------------------------------------------------------------------
  865.   def attack_up
  866.     if self.visible
  867.       self.x += 10
  868.       self.y += 14
  869.       self.ox = 24
  870.       self.oy = 24
  871.       if self.angle != 45
  872.         self.angle += 18
  873.         @front = 1
  874.         @front = 2 if self.angle > 15 and !(@character.passable?(@character.x - 1, @character.y))
  875.       end
  876.     else
  877.       @front = 0
  878.       self.angle = -135
  879.       self.ox = 0
  880.       self.oy = 0
  881.     end
  882.   end
  883.   #--------------------------------------------------------------------------
  884.   # * Update Transfer Origin Rectangle
  885.   #--------------------------------------------------------------------------
  886.   def update_src_rect
  887.     character = $game_party.members[0] if @character == $game_player
  888.     if character.weapon_id.zero?
  889.       index = 0
  890.     else
  891.       index = $data_weapons[character.weapon_id].icon_index if index == nil
  892.     end
  893.     rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
  894.     self.src_rect = rect
  895.   end
  896. end
  897.  
  898. #==============================================================================
  899. # ** Sprite_Text
  900. #==============================================================================
  901.  
  902. class Sprite_Text < Sprite
  903.   #--------------------------------------------------------------------------
  904.   # * Object Initialization
  905.   #     viewport : viewport
  906.   #--------------------------------------------------------------------------
  907.   def initialize(viewport, id)
  908.     super(viewport)
  909.     self.bitmap = Bitmap.new(544, 16)
  910.     self.bitmap.font.name = "Arial"
  911.     self.bitmap.font.size = 14
  912.     self.x = 0
  913.     self.y = 400 - (id * 16)
  914.     self.z = 200
  915.     @id = id
  916.     @text = $game_party.text[@id]
  917.     @wait_time = 60
  918.     self.bitmap.font.color.set(255, 255, 255)
  919.     self.bitmap.draw_text(-4, 0, 544, 16, $game_party.text[@id], 2)
  920.     update
  921.   end
  922.   #--------------------------------------------------------------------------
  923.   # * Dispose
  924.   #--------------------------------------------------------------------------
  925.   def dispose
  926.     self.bitmap.dispose
  927.     super
  928.   end
  929.   #--------------------------------------------------------------------------
  930.   # * Frame Update
  931.   #--------------------------------------------------------------------------
  932.   def update
  933.     return if $game_switches[COZZIEKUNS::FF12::ABS::STOP_ALL_MOVEMENT]
  934.     super
  935.     @wait_time -= 1
  936.     if $game_party.text[@id] != @text
  937.       @text = $game_party.text[@id]
  938.       @wait_time = 60
  939.       self.opacity = 255
  940.       self.bitmap.clear
  941.       self.bitmap.font.color.set(255, 255, 255)
  942.       self.bitmap.draw_text(-4, 0, 544, 16, $game_party.text[@id], 2)
  943.     end
  944.     self.opacity -= 5 if @wait_time.zero? and self.opacity != 0
  945.     $game_party.text[@id] = "" if self.opacity == 0
  946.     @wait_time = 1 if @wait_time <= 0
  947.   end
  948. end
  949.  
  950. #==============================================================================
  951. # ** Spriteset_Map
  952. #==============================================================================
  953.  
  954. class Spriteset_Map
  955.   #--------------------------------------------------------------------------
  956.   # * Object Initialization
  957.   #--------------------------------------------------------------------------
  958.   alias coz_ff12_abs_spm_initialize initialize
  959.   def initialize
  960.     coz_ff12_abs_spm_initialize
  961.     create_hud
  962.     create_icons
  963.     create_text
  964.     create_skill
  965.     create_projectile
  966.   end
  967.   #--------------------------------------------------------------------------
  968.   # * Create Icon Sprite(s)
  969.   #--------------------------------------------------------------------------
  970.   def create_icons
  971.     @icon_sprite = Sprite_AttackIcon.new(@viewport1, $game_player)
  972.   end
  973.   #--------------------------------------------------------------------------
  974.   # * Create HUD
  975.   #--------------------------------------------------------------------------
  976.   def create_hud
  977.     actor = $game_party.members[0]
  978.     x = 16
  979.     y = 4
  980.     width = 120
  981.     exp = actor.next_exp_s == "-------" ? 0 : actor.exp - actor.exp_list[actor.level]
  982.     next_exp = actor.next_rest_exp_s == "-------" ? 1 : actor.next_rest_exp_s.to_i + actor.exp - actor.exp_list[actor.level]
  983.     gc1 = Color.new(102, 204, 64)
  984.     gc2 = Color.new(0, 160, 16)
  985.     gc1 = Color.new(224, 128, 64) if (actor.hp * 180 / actor.maxhp) < 120
  986.     gc2 = Color.new(240, 192, 64) if (actor.hp * 180 / actor.maxhp) < 120
  987.     gc1 = Color.new(255, 120, 76) if (actor.hp * 180 / actor.maxhp) < 60  
  988.     gc2 = Color.new(255, 56, 16)  if (actor.hp * 180 / actor.maxhp) < 60
  989.     gc3 = Color.new(64, 128, 192)
  990.     gc4 = Color.new(64, 192, 240)
  991.     gc5 = Color.new(255, 255, 160)
  992.     gc6 = Color.new(255, 204, 32)
  993.     @hud_sprite = Sprite.new(@viewport3)
  994.     @hud_sprite2 = Sprite.new(@viewport3)
  995.     @hud_sprite3 = Sprite.new(@viewport3)
  996.     @hud_sprite2.y = 16
  997.     @hud_sprite3.y = 32
  998.     @hud_sprite.bitmap = Bitmap.new(136, 16)
  999.     @hud_sprite2.bitmap = Bitmap.new(136, 16)
  1000.     @hud_sprite3.bitmap = Bitmap.new(136, 16)
  1001.     @hud_sprite.bitmap.font.size = 12
  1002.     @hud_sprite2.bitmap.font.size = 12
  1003.     @hud_sprite3.bitmap.font.size = 12
  1004.     @hud_sprite.bitmap.font.color = Color.new(132, 170, 255)
  1005.     @hud_sprite2.bitmap.font.color = Color.new(132, 170, 255)
  1006.     @hud_sprite3.bitmap.font.color = Color.new(132, 170, 255)
  1007.     @hud_sprite.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
  1008.     @hud_sprite2.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
  1009.     @hud_sprite3.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
  1010.     @hud_sprite.bitmap.gradient_fill_rect(x, y, (width * actor.hp / actor.maxhp), 9, gc1, gc2)
  1011.     @hud_sprite2.bitmap.gradient_fill_rect(x, y, (width * actor.mp / actor.maxmp), 9, gc3, gc4)
  1012.     @hud_sprite3.bitmap.gradient_fill_rect(x, y, (width * exp / next_exp), 9, gc5, gc6)
  1013.     @hud_sprite.bitmap.draw_text(x - 16, -1, 48, 16, "HP")
  1014.     @hud_sprite2.bitmap.draw_text(x - 16, -1, 48, 16, "MP")
  1015.     @hud_sprite3.bitmap.draw_text(x - 16, -1, 48, 16, "EP")
  1016.     @actor_hp = actor.hp
  1017.     @actor_mp = actor.mp
  1018.     @actor_maxhp = actor.maxhp
  1019.     @actor_maxmp = actor.maxmp
  1020.     @actor_exp = actor.exp
  1021.     @hud_sprite.visible = $game_party.hud_visible
  1022.     @hud_sprite2.visible = $game_party.hud_visible
  1023.     @hud_sprite3.visible = $game_party.hud_visible
  1024.   end
  1025.   #--------------------------------------------------------------------------
  1026.   # * Create Skill
  1027.   #--------------------------------------------------------------------------
  1028.   def create_skill
  1029.     @skill_sprite = Sprite.new(@viewport3)
  1030.     @skill_sprite.bitmap = Cache.system("Skill_Window")
  1031.     @skill_sprite.x = 48
  1032.     @skill_sprite.y = 352
  1033.     @skill_icon = Sprite.new(@viewport3)
  1034.     @skill_icon.x = 52
  1035.     @skill_icon.y = 356
  1036.     @skill_icon.z = 5
  1037.     @skill_icon.bitmap = Cache.system("Iconset")
  1038.     skill_item = $game_party.members[0].skill_item
  1039.     actor = $game_party.members[0]
  1040.     case skill_item
  1041.     when 0
  1042.       if @actor_skill_index != actor.skill_index or @actor_skills != actor.skills or @skill_item != skill_item
  1043.         if $game_party.members[0].skills.empty?
  1044.           index = 0
  1045.         else
  1046.           index = actor.skills[actor.skill_index].icon_index
  1047.         end
  1048.         rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
  1049.         @skill_icon.src_rect = rect
  1050.         @actor_skill_index = actor.skill_index
  1051.         @actor_skills = actor.skills
  1052.         @skill_item = skill_item
  1053.       end
  1054.     when 1
  1055.       if @actor_item_index != actor.item_index or @actor_items != $game_party.usable_items or @skill_item != skill_item
  1056.         if $game_party.usable_items.empty?
  1057.           index = 0
  1058.         else
  1059.           index = $game_party.usable_items[actor.item_index].icon_index
  1060.         end
  1061.         rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
  1062.         @skill_icon.src_rect = rect
  1063.         @actor_item_index = actor.item_index
  1064.         @actor_items = $game_party.usable_items
  1065.         @skill_item = skill_item
  1066.       end
  1067.     end
  1068.     text2 = ""
  1069.     text3 = ""
  1070.     case skill_item
  1071.     when 0
  1072.       text = "Skills"
  1073.       unless actor.skills.empty?
  1074.         text2 = actor.skills[actor.skill_index].name
  1075.       end
  1076.     when 1
  1077.       text = "Items"
  1078.       unless $game_party.usable_items.empty?
  1079.         text2 = $game_party.usable_items[actor.item_index].name
  1080.         text3 = "x" + sprintf("%02d", ($game_party.item_number($game_party.usable_items[actor.item_index])))
  1081.       end
  1082.     end
  1083.     @skill_text = Sprite.new(@viewport3)
  1084.     @skill_text.bitmap = Bitmap.new(32, 16)
  1085.     @skill_text.bitmap.font.size = 14
  1086.     @skill_text.bitmap.font.name = "Arial"
  1087.     @skill_text.bitmap.draw_text(0, 0, 32, 16, text, 1)
  1088.     @skill_text.x = 48
  1089.     @skill_text.y = 336
  1090.     @skill_text2 = Sprite.new(@viewport3)
  1091.     @skill_text2.bitmap = Bitmap.new(128, 16)
  1092.     @skill_text2.bitmap.font.size = 14
  1093.     @skill_text2.bitmap.font.name = "Arial"
  1094.     @skill_text2.bitmap.draw_text(0, 0, 128, 16, text2, 1)
  1095.     @skill_text2.x = 0
  1096.     @skill_text2.y = 384
  1097.     @skill_text3 = Sprite.new(@viewport3)
  1098.     @skill_text3.bitmap = Bitmap.new(32, 16)
  1099.     @skill_text3.bitmap.font.size = 14
  1100.     @skill_text3.bitmap.font.name = "Arial"
  1101.     @skill_text3.bitmap.draw_text(0, 0, 32, 16, text3)
  1102.     @skill_text3.x = 58
  1103.     @skill_text3.y = 368
  1104.     @skill_text3.z = 10
  1105.     @skill_sprite.visible = $game_party.hud_visible
  1106.     @skill_icon.visible = $game_party.hud_visible
  1107.     @skill_text.visible  = $game_party.hud_visible
  1108.     @skill_text2.visible  = $game_party.hud_visible
  1109.     @skill_text3.visible  = $game_party.hud_visible
  1110.   end
  1111.   #--------------------------------------------------------------------------
  1112.   # * Create Text
  1113.   #--------------------------------------------------------------------------
  1114.   def create_text
  1115.     @text_sprites = []
  1116.     for i in 0...24
  1117.       @text_sprites.push(Sprite_Text.new(@viewport3, i))
  1118.     end
  1119.   end
  1120.   #--------------------------------------------------------------------------
  1121.   # * Create Projectile
  1122.   #--------------------------------------------------------------------------
  1123.   def create_projectile
  1124.     @projectile_sprite = Sprite.new
  1125.     @projectile_sprite.bitmap = Cache.system("IconSet")
  1126.     index = $data_weapons[$game_party.members[0].weapon_id].projectile
  1127.     rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
  1128.     @projectile_sprite.src_rect = rect
  1129.     @projectile_index = index
  1130.   end
  1131.   #--------------------------------------------------------------------------
  1132.   # * Dispose
  1133.   #--------------------------------------------------------------------------
  1134.   alias coz_ff12_abs_sbm_dispose dispose
  1135.   def dispose
  1136.     coz_ff12_abs_sbm_dispose
  1137.     dispose_icons
  1138.     dispose_hud
  1139.     dispose_text
  1140.     dispose_skill
  1141.     dispose_projectile
  1142.   end
  1143.   #--------------------------------------------------------------------------
  1144.   # * Dispose of Icon Sprite(s)
  1145.   #--------------------------------------------------------------------------
  1146.   def dispose_icons
  1147.     @icon_sprite.dispose
  1148.   end
  1149.   #--------------------------------------------------------------------------
  1150.   # * Dispose of Projectile Sprite
  1151.   #--------------------------------------------------------------------------
  1152.   def dispose_projectile
  1153.     @projectile_sprite.dispose
  1154.   end
  1155.   #--------------------------------------------------------------------------
  1156.   # * Dispose of HUD Sprite
  1157.   #--------------------------------------------------------------------------
  1158.   def dispose_hud
  1159.     @hud_sprite.dispose
  1160.     @hud_sprite2.dispose
  1161.     @hud_sprite3.dispose
  1162.   end
  1163.   #--------------------------------------------------------------------------
  1164.   # * Dispose of Skill Sprite
  1165.   #--------------------------------------------------------------------------
  1166.   def dispose_skill
  1167.     @skill_sprite.dispose
  1168.     @skill_icon.dispose
  1169.     @skill_text.dispose
  1170.     @skill_text2.dispose
  1171.     @skill_text3.dispose
  1172.   end
  1173.   #--------------------------------------------------------------------------
  1174.   # * Dispose Text
  1175.   #--------------------------------------------------------------------------
  1176.   def dispose_text
  1177.     for i in 0...24
  1178.       @text_sprites[i].dispose
  1179.     end
  1180.   end
  1181.   #--------------------------------------------------------------------------
  1182.   # * Frame Update
  1183.   #--------------------------------------------------------------------------
  1184.   alias coz_ff12_abs_sbm_update update
  1185.   def update
  1186.     coz_ff12_abs_sbm_update
  1187.     update_icons if @icon_sprite != nil
  1188.     update_hud if @hud_sprite != nil
  1189.     update_text if @text_sprites != nil
  1190.     update_skill if @skill_sprite != nil
  1191.     update_projectile if @projectile_sprite != nil
  1192.   end
  1193.   #--------------------------------------------------------------------------
  1194.   # * Update Projectile
  1195.   #--------------------------------------------------------------------------
  1196.   def update_projectile
  1197.     index = $data_weapons[$game_party.members[0].weapon_id].projectile
  1198.     if index != @projectile_index
  1199.       rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
  1200.       @projectile_sprite.src_rect = rect
  1201.       @projectile_index = index
  1202.     end
  1203.     @projectile_sprite.visible = @icon_sprite.visible
  1204.     case $game_player.direction
  1205.     when 2
  1206.       @projectile_sprite.angle = 225
  1207.     when 4
  1208.       @projectile_sprite.angle = 135
  1209.     when 6
  1210.       @projectile_sprite.angle = 315
  1211.     when 8
  1212.       @projectile_sprite.angle = 45
  1213.     end
  1214.     @projectile_sprite.x = 96
  1215.     @projectile_sprite.y = 96
  1216.     @projectile_sprite.update
  1217.   end
  1218.   #--------------------------------------------------------------------------
  1219.   # * Update Tilemap
  1220.   #--------------------------------------------------------------------------
  1221.   def update_icons
  1222.     @icon_sprite.update
  1223.   end
  1224.   #--------------------------------------------------------------------------
  1225.   # * Update HUD
  1226.   #--------------------------------------------------------------------------
  1227.   def update_hud
  1228.     actor = $game_party.members[0]
  1229.     x = 16
  1230.     y = 4
  1231.     width = 120
  1232.     exp = actor.next_exp_s == "-------" ? 0 : actor.exp - actor.exp_list[actor.level]
  1233.     next_exp = actor.next_rest_exp_s == "-------" ? 1 : actor.next_rest_exp_s.to_i + actor.exp - actor.exp_list[actor.level]
  1234.     gc1 = Color.new(102, 204, 64)
  1235.     gc2 = Color.new(0, 160, 16)
  1236.     gc1 = Color.new(224, 128, 64) if (actor.hp * 180 / actor.maxhp) < 120
  1237.     gc2 = Color.new(240, 192, 64) if (actor.hp * 180 / actor.maxhp) < 120
  1238.     gc1 = Color.new(255, 120, 76) if (actor.hp * 180 / actor.maxhp) < 60  
  1239.     gc2 = Color.new(255, 56, 16)  if (actor.hp * 180 / actor.maxhp) < 60
  1240.     gc3 = Color.new(64, 128, 192)
  1241.     gc4 = Color.new(64, 192, 240)
  1242.     gc5 = Color.new(255, 255, 160)
  1243.     gc6 = Color.new(255, 204, 32)
  1244.     if @actor_hp != actor.hp or @actor_maxhp != actor.maxhp
  1245.       @hud_sprite.flash(Color.new(255, 255, 255), 15)
  1246.       @hud_sprite.bitmap = Bitmap.new(136, 16)
  1247.       @hud_sprite.bitmap.font.size = 12
  1248.       @hud_sprite.bitmap.font.color = Color.new(132, 170, 255)
  1249.       @hud_sprite.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
  1250.       @hud_sprite.bitmap.gradient_fill_rect(x, y, (width * actor.hp / actor.maxhp), 9, gc1, gc2)
  1251.       @hud_sprite.bitmap.draw_text(x - 16, -1, 48, 16, "HP")
  1252.       @actor_hp = actor.hp
  1253.       @actor_maxhp = actor.maxhp
  1254.     end
  1255.     if @actor_mp != actor.mp or @actor_maxmp != actor.maxmp
  1256.       @hud_sprite2.flash(Color.new(255, 255, 255), 15)
  1257.       @hud_sprite2.y = 16
  1258.       @hud_sprite2.bitmap = Bitmap.new(136, 16)
  1259.       @hud_sprite2.bitmap.font.size = 12
  1260.       @hud_sprite2.bitmap.font.color = Color.new(132, 170, 255)
  1261.       @hud_sprite2.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
  1262.       @hud_sprite2.bitmap.gradient_fill_rect(x, y, (width * actor.mp / actor.maxmp), 9, gc3, gc4)
  1263.       @hud_sprite2.bitmap.draw_text(x - 16, -1, 48, 16, "MP")
  1264.       @actor_mp = actor.mp
  1265.       @actor_maxmp = actor.maxmp
  1266.     end
  1267.     if @actor_exp != actor.exp
  1268.       @hud_sprite3.flash(Color.new(255, 255, 255), 15)
  1269.       @hud_sprite3.y = 32
  1270.       @hud_sprite3.bitmap = Bitmap.new(136, 16)
  1271.       @hud_sprite3.bitmap.font.size = 12
  1272.       @hud_sprite3.bitmap.font.color = Color.new(132, 170, 255)
  1273.       @hud_sprite3.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
  1274.       @hud_sprite3.bitmap.gradient_fill_rect(x, y, (width * exp / next_exp), 9, gc5, gc6)
  1275.       @hud_sprite3.bitmap.draw_text(x - 16, -1, 48, 16, "EP")
  1276.       @actor_exp = actor.exp
  1277.     end
  1278.     @hud_sprite.visible = $game_party.hud_visible
  1279.     @hud_sprite2.visible = $game_party.hud_visible
  1280.     @hud_sprite3.visible = $game_party.hud_visible
  1281.     @hud_sprite.update
  1282.     @hud_sprite2.update
  1283.     @hud_sprite3.update
  1284.   end
  1285.   #--------------------------------------------------------------------------
  1286.   # * Update Text
  1287.   #--------------------------------------------------------------------------
  1288.   def update_text
  1289.     for i in 0...24
  1290.       @text_sprites[i].update
  1291.     end
  1292.   end
  1293.   #--------------------------------------------------------------------------
  1294.   # * Update Skill
  1295.   #--------------------------------------------------------------------------
  1296.   def update_skill
  1297.     skill_item = $game_party.members[0].skill_item
  1298.     actor = $game_party.members[0]
  1299.     text2 = ""
  1300.     text3 = ""
  1301.     @skill_sprite.visible = $game_party.hud_visible
  1302.     @skill_icon.visible = $game_party.hud_visible
  1303.     @skill_text.visible  = $game_party.hud_visible
  1304.     @skill_text2.visible  = $game_party.hud_visible
  1305.     @skill_text3.visible  = $game_party.hud_visible
  1306.     case skill_item
  1307.     when 0
  1308.       text = "Skills"
  1309.       unless actor.skills.empty?
  1310.         text2 = actor.skills[actor.skill_index].name
  1311.       end
  1312.     when 1
  1313.       text = "Items"
  1314.       unless $game_party.usable_items.empty? or $game_party.item_number($game_party.usable_items[actor.item_index]) == 0
  1315.         text2 = $game_party.usable_items[actor.item_index].name
  1316.         text3 = "x" + sprintf("%02d", ($game_party.item_number($game_party.usable_items[actor.item_index])))
  1317.       end
  1318.     end
  1319.     @skill_text.bitmap.clear
  1320.     @skill_text.bitmap.draw_text(0, 0, 32, 16, text, 1)
  1321.     @skill_text.update
  1322.     @skill_text2.bitmap.clear
  1323.     @skill_text2.bitmap.draw_text(0, 0, 128, 16, text2, 1)
  1324.     @skill_text2.update
  1325.     @skill_text3.bitmap.clear
  1326.     @skill_text3.bitmap.draw_text(0, 0, 32, 16, text3)
  1327.     @skill_text3.update
  1328.     case skill_item
  1329.     when 0
  1330.       if @actor_skill_index != actor.skill_index or @actor_skills != actor.skills or @skill_item != skill_item
  1331.         if $game_party.members[0].skills.empty?
  1332.           index = 0
  1333.         else
  1334.           index = actor.skills[actor.skill_index].icon_index
  1335.         end
  1336.         rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
  1337.         @skill_icon.src_rect = rect
  1338.         @skill_sprite.update
  1339.         @actor_skill_index = actor.skill_index
  1340.         @actor_skills = actor.skills
  1341.         @skill_item = skill_item
  1342.       end
  1343.     when 1
  1344.       if @actor_item_index != actor.item_index or @actor_items != $game_party.usable_items or @skill_item != skill_item
  1345.         if $game_party.usable_items.empty? or $game_party.item_number($game_party.usable_items[actor.item_index]) == 0
  1346.           index = 0
  1347.         else
  1348.           index = $game_party.usable_items[actor.item_index].icon_index
  1349.         end
  1350.         rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
  1351.         @skill_icon.src_rect = rect
  1352.         @skill_sprite.update
  1353.         @actor_item_index = actor.item_index
  1354.         @actor_items = $game_party.usable_items
  1355.         @skill_item = skill_item
  1356.       end
  1357.     end
  1358.   end
  1359.   #--------------------------------------------------------------------------
  1360.   # * Determine if animation is being displayed
  1361.   #--------------------------------------------------------------------------
  1362.   def animation?
  1363.     for sprite in @character_sprites
  1364.       return true if sprite.animation?
  1365.     end
  1366.     return false
  1367.   end
  1368. end
  1369.  
  1370. #==============================================================================
  1371. # ** Scene_Map
  1372. #==============================================================================
  1373.  
  1374. class Scene_Map < Scene_Base
  1375.   #--------------------------------------------------------------------------
  1376.   # * Frame Update
  1377.   #--------------------------------------------------------------------------
  1378.   alias coz_ff12_abs_sm_update_1536 update
  1379.   def update
  1380.     coz_ff12_abs_sm_update_1536
  1381.     return if not $game_party.hud_visible
  1382.     return if $game_switches[COZZIEKUNS::FF12::ABS::STOP_ALL_MOVEMENT]
  1383.     actor = $game_party.members[0]
  1384.     items_empty = false
  1385.     if $game_player.vehicle_type == - 1
  1386.       if Input.trigger?(Input::Y) and $game_player.frames == 75 / attack_rate - 1
  1387.         case $game_player.direction
  1388.         when 2; attack_down
  1389.         when 4; attack_left
  1390.         when 6; attack_right
  1391.         when 8; attack_up
  1392.         end
  1393.       elsif Input.trigger?(Input::X)
  1394.         case actor.skill_item
  1395.         when 0; return if actor.skills.empty?; start_skill_activation if $game_player.frames == (actor.skills[actor.skill_index].frames - 1)
  1396.         when 1; start_item_activation
  1397.         end
  1398.       elsif Input.trigger?(Input::R)
  1399.         case actor.skill_item
  1400.         when 0
  1401.           if actor.skills.size != 0
  1402.             actor.skill_index += 1
  1403.             actor.skill_index %= actor.skills.size
  1404.           end
  1405.         when 1
  1406.           if !($game_party.usable_items.empty?)
  1407.             actor.item_index += 1
  1408.             actor.item_index %= $game_party.usable_items.size
  1409.           end
  1410.         end
  1411.       elsif Input.trigger?(Input::L)
  1412.         case actor.skill_item
  1413.         when 0
  1414.           if actor.skills.size != 0
  1415.             actor.skill_index += actor.skills.size - 1
  1416.             actor.skill_index %= actor.skills.size
  1417.           end
  1418.         when 1
  1419.           if !($game_party.usable_items.empty?)
  1420.             actor.item_index += $game_party.usable_items.size - 1
  1421.             actor.item_index %= $game_party.usable_items.size
  1422.           end
  1423.         end
  1424.       elsif Input.trigger?(Input::Z)
  1425.         actor.skill_item += 1
  1426.         actor.skill_item %= 2
  1427.       end
  1428.       make_enemy_movements
  1429.     end
  1430.   end
  1431.   #--------------------------------------------------------------------------
  1432.   # * Attack Down
  1433.   #--------------------------------------------------------------------------
  1434.   def attack_down(char = 0)
  1435.     case char
  1436.     when 0
  1437.       for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
  1438.         attack_enemy(event) if event.enemy and !(event.erased)
  1439.       end
  1440.     when 1
  1441.       for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
  1442.         attack_player(event) if event.enemy and !(event.erased)
  1443.       end
  1444.     end
  1445.   end
  1446.   #--------------------------------------------------------------------------
  1447.   # * Attack Left
  1448.   #--------------------------------------------------------------------------
  1449.   def attack_left(char = 0)
  1450.     case char
  1451.     when 0
  1452.       for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
  1453.         attack_enemy(event) if event.enemy and !(event.erased)
  1454.       end
  1455.     when 1
  1456.       for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
  1457.         attack_player(event) if event.enemy and !(event.erased)
  1458.       end
  1459.     end
  1460.   end
  1461.   #--------------------------------------------------------------------------
  1462.   # * Attack Right
  1463.   #--------------------------------------------------------------------------
  1464.   def attack_right(char = 0)
  1465.     case char
  1466.     when 0
  1467.       char = $game_party.members[0]
  1468.       for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
  1469.         attack_enemy(event) if event.enemy and !(event.erased)
  1470.       end
  1471.     when 1
  1472.       for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
  1473.         attack_player(event) if event.enemy and !(event.erased)
  1474.       end
  1475.     end
  1476.   end
  1477.   #--------------------------------------------------------------------------
  1478.   # * Attack Up
  1479.   #--------------------------------------------------------------------------
  1480.   def attack_up(char = 0)
  1481.     case char
  1482.     when 0
  1483.       for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
  1484.         attack_enemy(event) if event.enemy and !(event.erased)
  1485.       end
  1486.     when 1
  1487.       for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
  1488.         attack_player(event) if event.enemy and !(event.erased)
  1489.       end
  1490.     end
  1491.   end
  1492.   #--------------------------------------------------------------------------
  1493.   # * Attack Enemy
  1494.   #--------------------------------------------------------------------------
  1495.   def attack_enemy(event)
  1496.     event.heal = false
  1497.     unless event.fading
  1498.       char = $game_party.members[0]
  1499.       variance = rand(2)
  1500.       event.animation_id = char.weapon_id.zero? ? 1 : $data_weapons[char.weapon_id].animation_id
  1501.       event.turn_toward_player
  1502.       result = calc_damage(event, char)
  1503.       event.hp -= (result[0] == "Miss" ? 0 : result[0])
  1504.       event.popup_text[popup_line(event)] = result[0].to_s
  1505.       event.crit = result[1]
  1506.       event_death(event)
  1507.       case event.traits
  1508.       when 1
  1509.         event.move_type = 4
  1510.         event.move_frequency = event.move_frequency + 2 > 5 ? 5 : event.move_frequency + 2
  1511.       end
  1512.     end
  1513.   end
  1514.   #--------------------------------------------------------------------------
  1515.   # * Attack Player
  1516.   #--------------------------------------------------------------------------
  1517.   def attack_player(event)
  1518.     unless event.fading or event.frame_count != 0
  1519.       $game_player.heal = false
  1520.       char = $game_party.members[0]
  1521.       event.turn_toward_player
  1522.       $game_player.animation_id = event.animation
  1523.       result = calc_damage(event, char, 1)
  1524.       char.hp -= (result[0] == "Miss" ? 0 : result[0])
  1525.       $game_player.popup_text[popup_line($game_player)] = result[0].to_s
  1526.       $game_player.crit = result[1]
  1527.       if $game_party.members[0].hp.zero?
  1528.         $game_temp.next_scene = "gameover"
  1529.         return
  1530.       end
  1531.       case event.traits
  1532.       when 1
  1533.         event.move_type = 4
  1534.         event.move_frequency = event.move_frequency + 2 > 5 ? 5 : event.move_frequency + 2
  1535.       end
  1536.     end
  1537.   end
  1538.   #--------------------------------------------------------------------------
  1539.   # * Apply Damage Calculations
  1540.   #--------------------------------------------------------------------------
  1541.   def calc_damage(event, char, situation = 0)
  1542.     variance = rand(2)
  1543.     case situation
  1544.     when 0
  1545.       hit_change = 1
  1546.       hit_change = 12 if char.reduce_hit_ratio?  
  1547.       chance = char.hit - event.eva < 0 ? chance = 0 : chance = char.hit - event.eva
  1548.       miss = rand(char.hit / hit_change - event.eva).to_i.zero?
  1549.       damage = (variance.zero? ? 4 * char.atk - 2 * event.def + rand((4 * char.atk - 2 * event.def) / 10) : 4 * char.atk - 2 * event.def - rand((4 * char.atk - 2 * event.def) / 10)).to_i
  1550.       damage = (damage < 1 ? 1 : damage)
  1551.       crit = rand(100) < $game_party.members[0].cri
  1552.       if miss
  1553.         damage = "Miss"
  1554.         crit = false
  1555.       end
  1556.     when 1
  1557.       chance = event.hit - char.eva < 0 ? chance = 0 : chance = event.hit - char.eva
  1558.       miss = rand(chance).zero?
  1559.       damage = (variance.zero? ? 4 * event.atk - 2 * char.def + rand((4 * event.atk - 2 * char.def) / 10) : 4 * event.atk - 2 * char.def - rand((4 * event.atk - 2 * char.def) / 10)).to_i
  1560.       damage = (damage < 1 ? 1 : damage)
  1561.       crit = rand(100) < 4
  1562.       if miss
  1563.         damage = "Miss"
  1564.         crit = false
  1565.       end
  1566.     end
  1567.     damage *= 3 if crit
  1568.     return damage, crit
  1569.   end
  1570.   #--------------------------------------------------------------------------
  1571.   # * Mess Line
  1572.   #--------------------------------------------------------------------------
  1573.   def mess_line
  1574.     for i in 0...24
  1575.       return i if $game_party.text[i] == ""
  1576.     end
  1577.     return 0
  1578.   end
  1579.   #--------------------------------------------------------------------------
  1580.   # * Popup Line
  1581.   #--------------------------------------------------------------------------
  1582.   def popup_line(character)
  1583.     for i in 0..8
  1584.       return i if character.popup_text[i] == ""
  1585.     end
  1586.     return 0
  1587.   end
  1588.   #--------------------------------------------------------------------------
  1589.   # * Make Drop Items
  1590.   #--------------------------------------------------------------------------
  1591.   def make_drop_items(event_drop)
  1592.     for event in event_drop
  1593.       randomizer = rand(event[2])
  1594.       if randomizer.zero?
  1595.         case event[0]
  1596.         when 1
  1597.           $game_party.gain_item($data_items[event[1]], 1)
  1598.           $game_party.text[mess_line] = "You have gained " + ($data_items[event[1]].name).to_s + "."
  1599.         when 2
  1600.           $game_party.gain_item($data_weapons[event[1]], 1, false)
  1601.           $game_party.text[mess_line] = "You have gained " + ($data_weapons[event[1]].name).to_s + "."
  1602.         when 3
  1603.           $game_party.gain_item($data_armors[event[1]], 1, false)
  1604.           $game_party.text[mess_line] = "You have gained " + ($data_armors[event[1]].name).to_s + "."
  1605.         end
  1606.       end
  1607.     end
  1608.   end
  1609.   #--------------------------------------------------------------------------
  1610.   # * Level Up
  1611.   #--------------------------------------------------------------------------
  1612.   def char_level_up
  1613.     $game_player.popup_delay = 0
  1614.     $game_player.popup_text[popup_line($game_player)] = "Level Up!!"
  1615.     $game_player.popup_delay = 10
  1616.     $game_player.animation_id = 40
  1617.   end
  1618.   #--------------------------------------------------------------------------
  1619.   # * Use Skill
  1620.   #--------------------------------------------------------------------------
  1621.   def use_skill(skill, char, event = nil)
  1622.     actor = $game_party.members[0] if char == $game_player
  1623.     if skill.mp_cost > actor.mp
  1624.       Sound.play_buzzer
  1625.       return
  1626.     end
  1627.     if skill.base_damage > 0
  1628.       if skill.scope == 1
  1629.         use_attack_skill(skill, event)
  1630.       elsif skill.scope == 2
  1631.         use_area_skill(skill, 17, 13)
  1632.       elsif skill.scope == 3
  1633.         use_attack_skill(skill, event)
  1634.         use_attack_skill(skill, event, 3)
  1635.       end
  1636.     elsif skill.base_damage == 0
  1637.       if skill.for_user?
  1638.         char.animation_id = skill.animation_id
  1639.         actor.mp -= skill.mp_cost
  1640.         apply_state_changes(actor, skill)
  1641.       end
  1642.     elsif skill.base_damage < 0
  1643.       variance = rand(2)
  1644.       if skill.for_user?
  1645.         char.animation_id = skill.animation_id
  1646.         damage = skill.base_damage
  1647.         damage -= (actor.atk * 4 * skill.atk_f / 100)
  1648.         damage -= (actor.spi * 2 * skill.spi_f / 100)
  1649.         variance.zero? ? damage += rand(damage / 10).to_i : damage -= rand(damage / 10).to_i
  1650.         actor.hp -= damage
  1651.         actor.mp -= skill.mp_cost
  1652.         char.popup_text[popup_line(char)] = (-damage).to_s
  1653.         char.heal = true
  1654.         apply_state_changes(actor, skill)
  1655.       end
  1656.     end
  1657.   end
  1658.   #--------------------------------------------------------------------------
  1659.   # * Use Attack Skill
  1660.   #--------------------------------------------------------------------------
  1661.   def use_attack_skill(skill, event, scope = 1)
  1662.     return if event.fading or event.erased
  1663.     actor = $game_party.members[0]
  1664.     variance = rand(2)
  1665.     animation = skill.animation_id < 0 ? $data_weapons[actor.weapon_id].animation_id : skill.animation_id
  1666.     event.animation_id = animation unless scope == 2
  1667.     event.animation_mirror = (scope == 3)
  1668.     event.turn_toward_player
  1669.     damage = skill.base_damage
  1670.     damage += actor.atk * 4 * skill.atk_f / 100
  1671.     damage += actor.spi * 2 * skill.spi_f / 100
  1672.     damage -= event.def * 2 * skill.atk_f / 100
  1673.     damage -= event.spi * 2 * skill.spi_f / 100
  1674.     variance.zero? ? damage += rand(damage / 10).to_i : damage -= rand(damage / 10).to_i
  1675.     event.hp -= damage
  1676.     actor.mp -= skill.mp_cost unless scope == 2
  1677.     event.popup_text[popup_line(event)] = damage.to_s
  1678.     wait_for_animation unless scope == 2
  1679.     event_death(event)  
  1680.     case event.traits
  1681.     when 1
  1682.       event.move_type = 4
  1683.       event.move_frequency = event.move_frequency + 2 > 5 ? 5 : event.move_frequency + 2
  1684.     end
  1685.   end
  1686.   #--------------------------------------------------------------------------
  1687.   # * Apply State Changes
  1688.   #--------------------------------------------------------------------------
  1689.   def apply_state_changes(actor, skill)
  1690.     for state in skill.plus_state_set
  1691.       actor.add_state(state)
  1692.       actor.states[actor.states.size - 1].step_created = false
  1693.       actor.perform_collapse
  1694.     end
  1695.     for state in skill.minus_state_set
  1696.       actor.remove_state(state)
  1697.     end
  1698.   end
  1699.   #--------------------------------------------------------------------------
  1700.   # * Event Death
  1701.   #--------------------------------------------------------------------------
  1702.   def event_death(event, char = $game_party.members[0])
  1703.     if event.hp.zero?
  1704.       level = char.level
  1705.       char.gain_exp(event.exp, false)
  1706.       $game_party.text[mess_line] = "You have gained " + (char.double_exp_gain ? event.exp : event.exp * 2).to_s + " exp."
  1707.       event.fade if event.fade?
  1708.       Sound.play_enemy_collapse
  1709.       char_level_up if char.level > level
  1710.       $game_party.gain_gold(event.gold)
  1711.       $game_party.text[mess_line] = "You have gained " + event.gold.to_s + " gold." unless event.gold.zero?
  1712.       make_drop_items(event.drop_item)
  1713.       unless event.fade?
  1714.         $game_self_switches[[$game_map.map_id, event.id, event.self_switch]] = true
  1715.         event.refresh
  1716.       end
  1717.     end
  1718.   end
  1719.   #--------------------------------------------------------------------------
  1720.   # * Wait Until Animation Display has Finished
  1721.   #--------------------------------------------------------------------------
  1722.   def wait_for_animation
  1723.     update_basic
  1724.     update_basic while @spriteset.animation?
  1725.   end
  1726.   #--------------------------------------------------------------------------
  1727.   # * Use Area Skill
  1728.   #--------------------------------------------------------------------------
  1729.   def use_area_skill(skill, area_x, area_y, scope = 2)
  1730.     weapon_ani = $game_party.members[0].atk_animation_id
  1731.     for event in $game_map.events.values
  1732.       next unless event.enemy and !(event.fading)
  1733.       next unless in_area?(event, $game_player.x - 9, $game_player.y - 7, area_x, area_y)
  1734.       animation_event = event
  1735.       break
  1736.     end
  1737.     if animation_event != nil
  1738.       $game_party.members[0].mp -= skill.mp_cost
  1739.       ani = (skill.animation_id == -1 ? weapon_ani : skill.animation_id)
  1740.       animation_event.animation_id = ani
  1741.       for events in $game_map.events.values
  1742.         next unless events.enemy and !(events.fading)
  1743.         if COZZIEKUNS::FF12::ABS::TARGET_ALL_SCREEN and scope == 2
  1744.           next unless in_area?(events, $game_player.x - 9, $game_player.y - 7, area_x, area_y)
  1745.         end
  1746.         use_attack_skill(skill, events, 2)
  1747.       end
  1748.     else
  1749.       return
  1750.     end
  1751.   end
  1752.   #--------------------------------------------------------------------------
  1753.   # * Make Enemy Movements
  1754.   #--------------------------------------------------------------------------
  1755.   def make_enemy_movements
  1756.     case rand(2)
  1757.     when 0
  1758.       attack_down(1) if !($game_map.events_xy($game_player.x, $game_player.y + 1).empty?)
  1759.       attack_right(1) if !($game_map.events_xy($game_player.x + 1, $game_player.y).empty?)
  1760.       attack_left(1) if !($game_map.events_xy($game_player.x - 1, $game_player.y).empty?)
  1761.       attack_up(1) if !($game_map.events_xy($game_player.x, $game_player.y - 1).empty?)
  1762.     when 1
  1763.       for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
  1764.         if event.skills.nil?
  1765.           attack_down(1)
  1766.         else
  1767.           start_skill_activation(event) if event.enemy and !(event.erased)
  1768.         end
  1769.       end
  1770.       for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
  1771.         if event.skills.nil?
  1772.           attack_right(1)
  1773.         else
  1774.           start_skill_activation(event) if event.enemy and !(event.erased)
  1775.         end
  1776.       end
  1777.       for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
  1778.         if event.skills.nil?
  1779.           attack_left(1)
  1780.         else
  1781.           start_skill_activation(event) if event.enemy and !(event.erased)
  1782.         end
  1783.       end
  1784.       for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
  1785.         if event.skills.nil?
  1786.           attack_left(1)
  1787.         else
  1788.           start_skill_activation(event) if event.enemy and !(event.erased)
  1789.         end
  1790.       end
  1791.     end
  1792.   end
  1793.   #--------------------------------------------------------------------------
  1794.   # * Attack Rate
  1795.   #--------------------------------------------------------------------------
  1796.   def attack_rate
  1797.     actor = $game_party.members[0]
  1798.     attack_rate = 1
  1799.     for state in actor.states; attack_rate = 2 if state.agi_rate > 100; end
  1800.     return attack_rate
  1801.   end
  1802.   #--------------------------------------------------------------------------
  1803.   # * Use Skills
  1804.   #--------------------------------------------------------------------------
  1805.   def start_skill_activation(actor = $game_party.members[0])
  1806.     if actor.is_a?(Game_Actor)
  1807.       actor_use_skill(actor)
  1808.     else
  1809.       event_use_skill(actor)
  1810.     end
  1811.   end
  1812.   #--------------------------------------------------------------------------
  1813.   # * Use Items
  1814.   #--------------------------------------------------------------------------
  1815.   def start_item_activation(actor = $game_party.members[0])
  1816.     if $game_party.usable_items.empty?
  1817.       Sound.play_buzzer
  1818.       return
  1819.     end
  1820.     use_item($game_party.usable_items[actor.item_index])
  1821.   end
  1822.   #--------------------------------------------------------------------------
  1823.   # * Use Item
  1824.   #--------------------------------------------------------------------------
  1825.   def use_item(item, char = $game_party)
  1826.     if item.is_a?(RPG::Weapon) or item.is_a?(RPG::Armor)
  1827.       Sound.play_buzzer
  1828.       return
  1829.     end
  1830.     actor = $game_party.members[0]
  1831.     variance = rand(2)
  1832.     case item.scope
  1833.     when 11
  1834.       char.lose_item(item, 1)
  1835.       $game_player.animation_id = item.animation_id
  1836.       damage = item.base_damage
  1837.       damage -= (actor.atk * 4 * item.atk_f / 100)
  1838.       damage -= (actor.spi * 2 * item.spi_f / 100)
  1839.       variance.zero? ? damage += rand(damage / 10).to_i : damage -= rand(damage / 10).to_i
  1840.       if item.damage_to_mp
  1841.         actor.mp += damage
  1842.       else
  1843.         actor.hp += damage
  1844.       end
  1845.       actor.hp += calc_hp_recovery(actor, item)
  1846.       actor.mp += calc_mp_recovery(actor, item)
  1847.       recovery = calc_hp_recovery(actor, item) > calc_mp_recovery(actor, item)
  1848.       unless calc_hp_recovery(actor, item) == 0 and calc_mp_recovery(actor, item) == 0
  1849.         $game_player.popup_text[popup_line($game_player)] = recovery ? calc_hp_recovery(actor, item).to_s : calc_mp_recovery(actor, item).to_s
  1850.       end
  1851.       $game_player.heal = true
  1852.       apply_state_changes(actor, item)
  1853.       if !($game_party.usable_items.empty?) and char.item_number(item) == 0
  1854.         actor.item_index += 1
  1855.         actor.item_index %= $game_party.usable_items.size
  1856.       end
  1857.     end
  1858.   end
  1859.   #--------------------------------------------------------------------------
  1860.   # * Calculating HP Recovery Amount From an Item
  1861.   #--------------------------------------------------------------------------
  1862.   def calc_hp_recovery(user, item)
  1863.     result = user.maxhp * item.hp_recovery_rate / 100 + item.hp_recovery
  1864.     result *= 2 if user.pharmacology    # Pharmacology doubles the effect
  1865.     return result
  1866.   end
  1867.   #--------------------------------------------------------------------------
  1868.   # * Calculating MP Recovery Amount From an Item
  1869.   #--------------------------------------------------------------------------
  1870.   def calc_mp_recovery(user, item)
  1871.     result = user.maxmp * item.mp_recovery_rate / 100 + item.mp_recovery
  1872.     result *= 2 if user.pharmacology    # Pharmacology doubles the effect
  1873.     return result
  1874.   end
  1875.   #--------------------------------------------------------------------------
  1876.   # * Actor Use Skill
  1877.   #--------------------------------------------------------------------------
  1878.   def actor_use_skill(actor)
  1879.     if actor.skills.empty? or actor.mp < actor.skills[actor.skill_index].mp_cost
  1880.       Sound.play_buzzer
  1881.       return
  1882.     end
  1883.     if [1, 3].include?(actor.skills[actor.skill_index].scope)  
  1884.       case $game_player.direction
  1885.       when 2
  1886.         for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
  1887.           use_skill(actor.skills[actor.skill_index], $game_player, event) if event.enemy and !(event.erased)
  1888.         end
  1889.       when 4
  1890.         for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
  1891.           use_skill(actor.skills[actor.skill_index], $game_player, event) if event.enemy and !(event.erased)
  1892.         end
  1893.       when 6
  1894.         for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
  1895.           use_skill(actor.skills[actor.skill_index], $game_player, event) if event.enemy and !(event.erased)
  1896.         end
  1897.       when 8
  1898.         for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
  1899.           use_skill(actor.skills[actor.skill_index], $game_player, event) if event.enemy and !(event.erased)
  1900.         end
  1901.       end
  1902.     else
  1903.       use_skill(actor.skills[actor.skill_index], $game_player)
  1904.     end
  1905.   end
  1906.   #--------------------------------------------------------------------------
  1907.   # * Event Use Skill
  1908.   #--------------------------------------------------------------------------
  1909.   def event_use_skill(event)
  1910.     skill_index = event.skills[rand(event.skills.size)]
  1911.     skill = $data_skills[skill_index]
  1912.     return if event.mp < skill.mp_cost
  1913.     if skill.scope == 1
  1914.       case $game_player.direction
  1915.       when 2
  1916.         for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
  1917.           use_skill_event(skill, event)
  1918.         end
  1919.       when 4
  1920.         for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
  1921.           use_skill_event(skill, event)      
  1922.         end
  1923.       when 6
  1924.         for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
  1925.           use_skill_event(skill, event)      
  1926.         end
  1927.       when 8
  1928.         for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
  1929.           use_skill_event(skill, event)
  1930.         end
  1931.       end
  1932.     else
  1933.       use_skill_event(skill, event)
  1934.     end
  1935.   end
  1936.   #--------------------------------------------------------------------------
  1937.   # * Use Skill Event
  1938.   #--------------------------------------------------------------------------
  1939.   def use_skill_event(skill, event)
  1940.     unless event.fading or event.frame_count != 0
  1941.       variance = rand(2)
  1942.       if skill.scope == 1
  1943.         $game_player.heal = false
  1944.         char = $game_party.members[0]
  1945.         event.turn_toward_player
  1946.         animation = skill.animation_id < 0 ? event.animation : skill.animation_id
  1947.         $game_player.animation_id = animation
  1948.         damage = skill.base_damage
  1949.         damage += event.atk * 4 * skill.atk_f / 100
  1950.         damage += event.spi * 2 * skill.spi_f / 100
  1951.         damage -= char.def * 2 * skill.atk_f / 100
  1952.         damage -= char.spi * 2 * skill.spi_f / 100
  1953.         variance.zero? ? damage += rand(damage / 10).to_i : damage -= rand(damage / 10).to_i
  1954.         char.hp -= damage
  1955.         event.mp -= skill.mp_cost
  1956.         $game_player.popup_text[popup_line($game_player)] = damage.to_s
  1957.         if $game_party.members[0].hp.zero?
  1958.           $game_temp.next_scene = "gameover"
  1959.           return
  1960.         end
  1961.         case event.traits
  1962.         when 1
  1963.           event.move_type = 4
  1964.           event.move_frequency = event.move_frequency + 2 > 5 ? 5 : event.move_frequency + 2      
  1965.         end
  1966.         apply_state_changes(char, skill) if skill.sic > rand(100)
  1967.       else
  1968.         return
  1969.       end
  1970.     end
  1971.   end
  1972.   #--------------------------------------------------------------------------
  1973.   # * In Area?
  1974.   #--------------------------------------------------------------------------
  1975.   def in_area?(event, x, y, width = 17, height = 13)
  1976.     x = 0 if x < 0; x = $game_map.width - 17 if x > $game_map.width - 17
  1977.     y = 0 if y < 0; y = $game_map.height - 13 if y > $game_map.height - 13
  1978.     return true if event.x >= x and event.x <= (x + width) and event.y >= y and event.y <= (y + height)
  1979.     return false
  1980.   end
  1981. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement