Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module COZZIEKUNS
- module FF12
- module ABS
- ENEMY ={
- # id Name HP MP Attack Defense Spirit Agility Hit Ratio Evasion EXP Gold Traits Hit Ani Frequency Fade Self Switch Drop Item Skills
- 0 => [ "", nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil],
- 1 => [ "Thug", 100, 0, 12, 4, 8, 10, 95, 5, 3, 5, 1, 1, 60, true, nil, [[1, 1, 5], [1, 4, 8]], nil],
- 2 => [ "Thugette", 500, 0, 36, 12, 8, 15, 95, 5, 18, 10, 1, 3, 50, false, "A", [ [1, 2, 1]], nil],
- 3 => [ "Snake", 200, 0, 16, 6, 8, 10, 95, 5, 3, 5, 1, 36, 60, true, nil, [ [1, 6, 6]], [4]],
- 4 => [ "Bee", 250, 0, 28, 8, 8, 10, 95, 5, 9, 15, 1, 13, 45, true, nil, [ [1, 6, 6]], [4]],
- 5 => [ "Orc", 800, 0, 24, 8, 8, 10, 95, 5, 20, 200, 1, 36, 60, true, nil, [ [1, 1, 1]], nil],
- 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]],
- }
- STOP_ALL_MOVEMENT = 82
- TARGET_ALL_SCREEN = true
- end
- end
- end
- #==============================================================================
- # ** RPG::BaseItem
- #==============================================================================
- class RPG::BaseItem
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_reader :frames
- #--------------------------------------------------------------------------
- # * Frames
- #--------------------------------------------------------------------------
- def frames
- @frames = 0
- @frames = $1.to_i if self.note[/\\ff12_abs_frames\[(\d+)]/i] != nil
- return @frames
- end
- end
- #==============================================================================
- # ** RPG::UsableItem
- #==============================================================================
- class RPG::UsableItem < RPG::BaseItem
- #-------------------------------------------------------------------------
- # * Atk Force
- #--------------------------------------------------------------------------
- def atk_f
- atk_f = @atk_f
- atk_f = $1.to_i if self.note[/\\atk_f\[(\d+)]/i] != nil
- return atk_f
- end
- #-------------------------------------------------------------------------
- # * Status Infliction Chance
- #--------------------------------------------------------------------------
- def sic
- sic = 100
- sic = $1.to_i if self.note[/\\sic\[(\d+)]/i] != nil
- return sic
- end
- end
- #==============================================================================
- # ** RPG::Weapon
- #==============================================================================
- class RPG::Weapon < RPG::BaseItem
- #-------------------------------------------------------------------------
- # * Weapon Type
- #--------------------------------------------------------------------------
- def weapon_type
- weapon_typex = 0
- weapon_typex = 1 if self.note[/\\poke/i] != nil
- weapon_typex = 2 if self.note[/\\shoot/i] != nil
- return weapon_typex
- end
- #-------------------------------------------------------------------------
- # * Projectile
- #--------------------------------------------------------------------------
- def projectile
- return 0 if weapon_type != 2
- return $1.to_i if self.note[/\\projectile\[(\d+)]/i]
- end
- end
- #==============================================================================
- # ** RPG::State
- #==============================================================================
- class RPG::State
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :steps
- attr_accessor :step_created
- #--------------------------------------------------------------------------
- # * Steps
- #--------------------------------------------------------------------------
- def steps
- unless @step_created
- @steps = -1
- @steps = $1.to_i if self.note[/\\erase_after_steps\[(\d+)]/i] != nil
- @step_created = true
- end
- return @steps
- end
- end
- #==============================================================================
- # ** RPG::Weapon
- #==============================================================================
- class RPG::Weapon
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :mirror
- #--------------------------------------------------------------------------
- # * Mirror
- #--------------------------------------------------------------------------
- def mirror
- @mirror = false
- @mirror = true if self.note[/\\mirror/i] != nil
- return @mirror
- end
- end
- #==============================================================================
- # ** Game_Actor
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_reader :exp_list # experience list
- attr_accessor :item_index
- attr_accessor :skill_item
- attr_accessor :skill_index
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_ga_initialize initialize
- def initialize(actor_id)
- coz_ff12_abs_ga_initialize(actor_id)
- @skill_index = 0
- @item_index = 0
- @skill_item = 0
- end
- #--------------------------------------------------------------------------
- # * Level Up
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_ga_level_up level_up
- def level_up
- coz_ff12_abs_ga_level_up
- @hp = @maxhp
- @mp = @maxmp
- end
- end
- #==============================================================================
- # ** Game_Character
- #==============================================================================
- class Game_Character
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_reader :fading
- attr_reader :using_skill
- attr_accessor :crit
- attr_accessor :heal
- attr_accessor :frames
- attr_accessor :popup_text
- attr_accessor :popup_delay
- attr_accessor :animation_mirror
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_gc_initialize initialize
- def initialize
- coz_ff12_abs_gc_initialize
- @frames = 0
- @rech_frames = 0
- @fade = 255
- @fading = false
- @popup_text = []
- for i in 0..8
- @popup_text.push("")
- end
- @animation_mirror = false
- end
- #--------------------------------------------------------------------------
- # * Update During Self movement
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_gc_update_self_movement update_self_movement
- def update_self_movement
- return if $game_switches[COZZIEKUNS::FF12::ABS::STOP_ALL_MOVEMENT]
- coz_ff12_abs_gc_update_self_movement
- if @stop_count > 30 * (5 - @move_frequency)
- case @move_type
- when 4; approach
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_gc_update update
- def update
- coz_ff12_abs_gc_update
- @fade = @opacity
- @fade -= 5 if @fading and @fade > 0
- @opacity = @fade
- end
- #--------------------------------------------------------------------------
- # * Attacking?
- #--------------------------------------------------------------------------
- def attacking?
- @frames -= 1
- @rech_frames -= 1
- return false if moving?
- end
- #--------------------------------------------------------------------------
- # * Fade
- #--------------------------------------------------------------------------
- def fade
- @fading = true
- end
- #--------------------------------------------------------------------------
- # * Move Type : Approach
- #--------------------------------------------------------------------------
- def approach
- sx = @x - $game_player.x
- sy = @y - $game_player.y
- if sx.abs + sy.abs >= 20
- move_random
- else
- last_x = @x
- last_y = @y
- move_toward_player
- if last_x == @x and last_y == @y
- if (@x - $game_player.x).abs > 1 or (@y - $game_player.y).abs > 1
- case rand(2)
- when 0; turn_left_90
- when 1; turn_right_90
- when 2; turn_180
- end
- move_forward
- end
- end
- end
- end
- end
- #==============================================================================
- # ** Game_Party
- #==============================================================================
- class Game_Party < Game_Unit
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_accessor :text
- attr_accessor :hud_visible
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_gp_initialize initialize
- def initialize
- coz_ff12_abs_gp_initialize
- @text = []
- for i in 0...24
- @text.push("")
- end
- @hud_visible = false
- end
- #--------------------------------------------------------------------------
- # * Increase Steps
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_gp_increase_steps increase_steps
- def increase_steps
- coz_ff12_abs_gp_increase_steps
- for actor in members
- for state in actor.states
- next if state.steps == -1
- actor.remove_state(state.id) if state.steps.zero?
- state.steps -= 1
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Usable Item
- #--------------------------------------------------------------------------
- def usable_items
- usable_item = []
- for item in items
- next if item.is_a?(RPG::Weapon)
- next if item.is_a?(RPG::Armor)
- next if item.occasion > 1
- usable_item.push(item)
- end
- return usable_item
- end
- end
- #==============================================================================
- # ** Game_Event
- #==============================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # * Public Instance Variables
- #--------------------------------------------------------------------------
- attr_reader :hp
- attr_reader :mp
- attr_reader :atk
- attr_reader :def
- attr_reader :spi
- attr_reader :agi
- attr_reader :hit
- attr_reader :eva
- attr_reader :exp
- attr_reader :gold
- attr_reader :maxhp
- attr_reader :maxmp
- attr_reader :traits
- attr_reader :erased
- attr_reader :skills
- attr_reader :animation
- attr_reader :drop_item
- attr_reader :frame_rate
- attr_reader :frame_count
- attr_reader :self_switch
- attr_accessor :enemy
- attr_accessor :enemy_id
- attr_accessor :move_speed
- attr_accessor :move_type
- attr_accessor :move_frequency
- #--------------------------------------------------------------------------
- # * Event page setup
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_ge_setup setup
- def setup(new_page)
- coz_ff12_abs_ge_setup(new_page)
- unless @erased
- comment = ''
- for i in @page.list
- next if i.code != 108 and i.code != 408
- comment += i.parameters.to_s
- end
- @enemy = !(comment.scan(/\\enemy\[\d+\]/i).empty?)
- @enemy_id = comment.scan(/\\enemy\[(\d+)\]/i)[0].to_s.to_i
- create_parameters
- end
- end
- #--------------------------------------------------------------------------
- # * Create Parameters
- #--------------------------------------------------------------------------
- def create_parameters
- @maxhp = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][1]
- @maxmp = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][2]
- @hp = @maxhp
- @mp = @maxmp
- @atk = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][3]
- @def = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][4]
- @spi = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][5]
- @agi = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][5]
- @hit = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][7]
- @eva = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][8]
- @exp = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][9]
- @gold = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][10]
- @traits = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][11]
- @animation = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][12]
- @frame_rate = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][13]
- @will_fade = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][14]
- @self_switch = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][15]
- @drop_item = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][16]
- @skills = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][17]
- @frame_count = 0
- end
- #--------------------------------------------------------------------------
- # * Fade?
- #--------------------------------------------------------------------------
- def fade?
- return @will_fade
- end
- #--------------------------------------------------------------------------
- # * Change HP
- #--------------------------------------------------------------------------
- def hp=(hp)
- @hp = [[hp, maxhp].min, 0].max
- end
- #--------------------------------------------------------------------------
- # * Change MP
- #--------------------------------------------------------------------------
- def mp=(mp)
- @mp = [[mp, maxmp].min, 0].max
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_ge_update update
- def update
- coz_ff12_abs_ge_update
- @frame_count += 1 if !(@frame_count.nil?)
- erase if @fade == 0
- unless @frame_rate.nil?
- if @frame_count == @frame_rate
- @frame_count = 0
- @frame_rate = COZZIEKUNS::FF12::ABS::ENEMY[@enemy_id][13] + rand(5)
- end
- end
- end
- end
- #==============================================================================
- # ** Game_Player
- #==============================================================================
- class Game_Player < Game_Character
- #--------------------------------------------------------------------------
- # * Attacking?
- #--------------------------------------------------------------------------
- def attacking?
- return false if $game_switches[COZZIEKUNS::FF12::ABS::STOP_ALL_MOVEMENT]
- super
- actor = $game_party.members[0]
- return false if @vehicle_type != -1
- if Input.trigger?(Input::Y) and @rech_frames < 0
- attack_rate = 1
- for state in actor.states
- attack_rate = 2 if state.agi_rate > 100
- end
- @frames = 75 / attack_rate
- @rech_frames = 80 / attack_rate if @frames == 75 / attack_rate
- elsif Input.trigger?(Input::X) and @rech_frames < 0 and !(actor.skills.empty?)
- return unless skill_active?
- @frames = actor.skills[actor.skill_index].frames
- @rech_frames = @frames + 5 if @frames == actor.skills[actor.skill_index].frames
- @using_skill = true unless actor.skills[actor.skill_index].physical_attack
- end
- @using_skill = false if @frames.zero?
- return false if @using_skill
- return true if @frames > 0
- return false
- end
- #--------------------------------------------------------------------------
- # * Determine if Movement is Possible
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_gp_movable? movable?
- def movable?
- return false if attacking?
- return false if @using_skill
- coz_ff12_abs_gp_movable?
- end
- #--------------------------------------------------------------------------
- # * Determine if Using Skill
- #--------------------------------------------------------------------------
- def skill_active?
- actor = $game_party.members[0]
- skill = actor.skills[actor.skill_index]
- return false if actor.mp < skill.mp_cost
- return false if actor.skill_item == 1
- case skill.scope
- when 1
- case @direction
- when 2
- return false if ($game_map.events_xy(@x, @y + 1)).empty?
- for event in $game_map.events_xy(@x, @y + 1)
- return false unless event.enemy
- end
- when 4
- return false if ($game_map.events_xy(@x - 1, @y)).empty?
- for event in $game_map.events_xy(@x - 1, @y)
- return false unless event.enemy
- end
- when 6
- return false if ($game_map.events_xy(@x + 1, @y)).empty?
- for event in $game_map.events_xy(@x + 1, @y)
- return false unless event.enemy
- end
- when 8; return false if ($game_map.events_xy(@x, @y - 1)).empty?
- for event in $game_map.events_xy(@x, @y - 1)
- return false unless event.enemy
- end
- end
- end
- return true
- end
- end
- #==============================================================================
- # ** Sprite_Character
- #==============================================================================
- class Sprite_Character < Sprite_Base
- #--------------------------------------------------------------------------
- # * Object Initialization
- # viewport : viewport
- # character : character (Game_Character)
- #--------------------------------------------------------------------------
- def initialize(viewport, character = nil)
- super(viewport)
- @character = character
- @balloon_duration = 0
- @popup_texts = ["", "", "", "", "", "", "", "", ""]
- @popup_duration = []
- @popup_sprites = []
- @state_duration = 0
- start_popup
- start_state_popup
- update
- end
- #--------------------------------------------------------------------------
- # * Dispose
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_spc_dispose dispose
- def dispose
- dispose_popup
- dispose_state_popup
- coz_ff12_abs_spc_dispose
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- def update
- super
- update_bitmap
- self.visible = (not @character.transparent)
- update_src_rect
- self.x = @character.screen_x
- self.y = @character.screen_y
- self.z = @character.screen_z
- self.opacity = @character.opacity
- self.blend_type = @character.blend_type
- self.bush_depth = @character.bush_depth
- update_balloon
- if @character.animation_id != 0
- animation = $data_animations[@character.animation_id]
- mirror = @character.animation_mirror
- start_animation(animation, mirror)
- @character.animation_id = 0
- end
- if @character.balloon_id != 0
- @balloon_id = @character.balloon_id
- start_balloon
- @character.balloon_id = 0
- end
- update_popup
- update_state_popup
- end
- #--------------------------------------------------------------------------
- # * Start Popup Icon Display
- #--------------------------------------------------------------------------
- def start_popup
- for i in 0..8
- @popup_duration.push(48)
- @popup_sprites.push(Sprite.new(viewport))
- @popup_sprites[i].bitmap = Bitmap.new(544, 32)
- end
- update_popup
- end
- #--------------------------------------------------------------------------
- # * Dispose of Popup Icon
- #--------------------------------------------------------------------------
- def dispose_popup
- for i in 0..8; @popup_sprites[i].dispose; end
- end
- #--------------------------------------------------------------------------
- # * Update Popup Icon
- #--------------------------------------------------------------------------
- def update_popup
- for i in 0..8
- @popup_duration[i] -= 1
- return if @character.popup_text[i] == ""
- if @character.popup_text[i] != @popup_texts[i]
- @popup_texts[i] = @character.popup_text[i]
- @popup_duration[i] = 48
- @popup_sprites[i].x = x
- @popup_sprites[i].y = (y - height / 2) - i * 32
- @popup_sprites[i].z = z + 200 + i
- @popup_sprites[i].ox = 48
- @popup_sprites[i].oy = 0
- @popup_sprites[i].opacity = 255
- @popup_sprites[i].bitmap.clear
- @popup_sprites[i].bitmap.font.name = ["Verdana", "Arial", "Courier New"]
- @popup_sprites[i].bitmap.font.size = 24
- @popup_sprites[i].bitmap.font.size = 30 if !(@character.popup_text[i].scan(/Level Up!!/).empty?)
- @popup_sprites[i].bitmap.font.color = Color.new(237, 28, 36) if @character.crit
- @popup_sprites[i].bitmap.font.color = Color.new(0, 160, 16) if @character.heal
- @popup_sprites[i].bitmap.font.color = Color.new(255, 204, 32) if !(@character.popup_text[i].scan(/Level Up!!/).empty?)
- @popup_sprites[i].bitmap.font.bold = false
- @popup_sprites[i].bitmap.font.bold = true if !(@character.popup_text[i].scan(/Level Up!!/).empty?)
- @popup_sprites[i].bitmap.draw_text(0, 0, 96, 32, @character.popup_text[i], 1)
- end
- @popup_sprites[i].oy = 96 - (@popup_duration[i] * 2)
- @popup_sprites[i].opacity -= 8 if @popup_duration[i] < 24
- @character.popup_text[i] = "" if @popup_sprites[i].opacity < 0
- return if @character.popup_text[i] == ""
- end
- end
- #--------------------------------------------------------------------------
- # * Start State Popup Icon
- #--------------------------------------------------------------------------
- def start_state_popup
- @state_sprite = Sprite.new(viewport)
- @state_sprite.bitmap = Cache.system("Iconset")
- update_state_popup
- end
- #--------------------------------------------------------------------------
- # * Dispose of State Popup Icon
- #--------------------------------------------------------------------------
- def dispose_state_popup
- if @state_sprite != nil
- @state_sprite.dispose
- @state_sprite = nil
- end
- end
- #--------------------------------------------------------------------------
- # * Update State Popup Icon
- #--------------------------------------------------------------------------
- def update_state_popup
- @state_duration += 1
- if @state_duration < 0
- @state_sprite.oy = 0
- elsif @state_duration < 15
- @state_sprite.oy = 1
- elsif @state_duration < 30
- @state_sprite.oy = 0
- elsif @state_duration < 45
- @state_sprite.oy = -1
- else
- @state_duration = 0
- end
- @state_sprite.x = x - 12
- @state_sprite.y = y - 64
- @state_sprite.z = z + 201
- update_state_src_rect
- end
- #--------------------------------------------------------------------------
- # * Update Transfer Origin Rectangle
- #--------------------------------------------------------------------------
- def update_state_src_rect
- character = $game_party.members[0] if @character == $game_player
- priority = []
- my_states = []
- if character == $game_party.members[0]
- index = 0
- for state in character.states
- priority.push(state.priority)
- end
- priority.sort!
- for i in 0...character.states.size - 1
- priority.shift
- end
- for state in character.states
- if state.priority == priority[0]
- my_states.push(state)
- end
- end
- index = my_states[0].icon_index if !(character.states.empty?)
- index = 0 if character.states.empty?
- else
- index = 0
- end
- rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
- @state_sprite.src_rect = rect
- end
- end
- #==============================================================================
- # ** Sprite_AttackIcon
- #==============================================================================
- class Sprite_AttackIcon < Sprite
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- def initialize(viewport, character)
- super(viewport)
- @character = character
- @front = false
- update
- end
- #--------------------------------------------------------------------------
- # * Dispose
- #--------------------------------------------------------------------------
- def dispose
- if self.bitmap != nil
- self.bitmap.dispose
- end
- super
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- def update
- super
- self.bitmap = Cache.system("Iconset")
- self.visible = @character.attacking?
- self.x = @character.screen_x - 12
- self.y = @character.screen_y - 24
- self.mirror = false
- self.mirror = true if $game_party.members[0].weapon_id != 0 and $data_weapons[$game_party.members[0].weapon_id].mirror
- case @front
- when 0; self.z = @character.screen_z + 1
- when 1; self.z = @character.screen_z - 1
- when 2; self.z = -1
- end
- case $data_weapons[$game_party.members[0].weapon_id].weapon_type
- when 0
- case @character.direction
- when 2; attack_down
- when 4; attack_left
- when 6; attack_right
- when 8; attack_up
- end
- when 1
- case @character.direction
- when 2; poke(0)
- when 4; poke(1)
- when 6; poke(2)
- when 8; poke(3)
- end
- when 2
- case @character.direction
- when 2; shoot(0)
- when 4; shoot(1)
- when 6; shoot(2)
- when 8; shoot(3)
- end
- end
- update_src_rect
- end
- #--------------------------------------------------------------------------
- # * Shoot
- #--------------------------------------------------------------------------
- def shoot(direction)
- if self.visible
- case direction
- when 0
- self.x += 4
- self.y += 32
- self.angle = 135
- when 1
- self.x -= 8
- self.y += 16
- self.angle = 45
- when 2
- self.x += 32
- self.y += 16
- self.angle = 225
- when 3
- self.x += 8
- self.y -= 8
- self.angle = 315
- end
- @front = 0 if direction != 3
- else
- self.ox = 0
- self.oy = 0
- @front = 1
- end
- end
- #--------------------------------------------------------------------------
- # * Poke
- #--------------------------------------------------------------------------
- def poke(direction)
- if self.visible
- case direction
- when 0
- self.x += 4
- self.y += 24
- self.angle = 135
- when 1
- self.y += 16
- self.angle = 45
- when 2
- self.x += 24
- self.y += 16
- self.angle = 225
- when 3
- self.x += 8
- self.y -= 12
- self.angle = 315
- end
- self.ox += 4 if self.ox != 16
- self.oy += 4 if self.oy != 16
- @front = 0 if self.oy >= 12 and direction != 3
- else
- self.ox = 0
- self.oy = 0
- @front = 1
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Down
- #--------------------------------------------------------------------------
- def attack_down
- if self.visible
- self.x += 16
- self.y += 16
- self.ox = 24
- self.oy = 24
- if self.angle != 225
- self.angle += 18
- @front = 0
- @front = 1 if self.angle > 185
- @front = 2 if self.angle > 185 and !(@character.passable?(@character.x + 1, @character.y))
- end
- else
- @front = 0
- self.angle = 45
- self.ox = 0
- self.oy = 0
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Left
- #--------------------------------------------------------------------------
- def attack_left
- if self.visible
- self.x += 12
- self.y += 12
- self.ox = 24
- self.oy = 24
- if self.angle != 135
- self.angle += 18
- @front = 0
- @front = 1 if self.angle > 110
- @front = 2 if self.angle > 110 and !(@character.passable?(@character.x, @character.y + 1))
- end
- else
- @front = 0
- self.angle = -45
- self.ox = 0
- self.oy = 0
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Right
- #--------------------------------------------------------------------------
- def attack_right
- if self.visible
- self.x += 12
- self.y += 12
- self.ox = 24
- self.oy = 24
- if self.angle != -225
- self.angle -= 18
- @front = 2 if self.angle < -160 and !(@character.passable?(@character.x, @character.y + 1))
- end
- else
- @front = 1
- self.angle = -45
- self.ox = 0
- self.oy = 0
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Up
- #--------------------------------------------------------------------------
- def attack_up
- if self.visible
- self.x += 10
- self.y += 14
- self.ox = 24
- self.oy = 24
- if self.angle != 45
- self.angle += 18
- @front = 1
- @front = 2 if self.angle > 15 and !(@character.passable?(@character.x - 1, @character.y))
- end
- else
- @front = 0
- self.angle = -135
- self.ox = 0
- self.oy = 0
- end
- end
- #--------------------------------------------------------------------------
- # * Update Transfer Origin Rectangle
- #--------------------------------------------------------------------------
- def update_src_rect
- character = $game_party.members[0] if @character == $game_player
- if character.weapon_id.zero?
- index = 0
- else
- index = $data_weapons[character.weapon_id].icon_index if index == nil
- end
- rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
- self.src_rect = rect
- end
- end
- #==============================================================================
- # ** Sprite_Text
- #==============================================================================
- class Sprite_Text < Sprite
- #--------------------------------------------------------------------------
- # * Object Initialization
- # viewport : viewport
- #--------------------------------------------------------------------------
- def initialize(viewport, id)
- super(viewport)
- self.bitmap = Bitmap.new(544, 16)
- self.bitmap.font.name = "Arial"
- self.bitmap.font.size = 14
- self.x = 0
- self.y = 400 - (id * 16)
- self.z = 200
- @id = id
- @text = $game_party.text[@id]
- @wait_time = 60
- self.bitmap.font.color.set(255, 255, 255)
- self.bitmap.draw_text(-4, 0, 544, 16, $game_party.text[@id], 2)
- update
- end
- #--------------------------------------------------------------------------
- # * Dispose
- #--------------------------------------------------------------------------
- def dispose
- self.bitmap.dispose
- super
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- def update
- return if $game_switches[COZZIEKUNS::FF12::ABS::STOP_ALL_MOVEMENT]
- super
- @wait_time -= 1
- if $game_party.text[@id] != @text
- @text = $game_party.text[@id]
- @wait_time = 60
- self.opacity = 255
- self.bitmap.clear
- self.bitmap.font.color.set(255, 255, 255)
- self.bitmap.draw_text(-4, 0, 544, 16, $game_party.text[@id], 2)
- end
- self.opacity -= 5 if @wait_time.zero? and self.opacity != 0
- $game_party.text[@id] = "" if self.opacity == 0
- @wait_time = 1 if @wait_time <= 0
- end
- end
- #==============================================================================
- # ** Spriteset_Map
- #==============================================================================
- class Spriteset_Map
- #--------------------------------------------------------------------------
- # * Object Initialization
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_spm_initialize initialize
- def initialize
- coz_ff12_abs_spm_initialize
- create_hud
- create_icons
- create_text
- create_skill
- create_projectile
- end
- #--------------------------------------------------------------------------
- # * Create Icon Sprite(s)
- #--------------------------------------------------------------------------
- def create_icons
- @icon_sprite = Sprite_AttackIcon.new(@viewport1, $game_player)
- end
- #--------------------------------------------------------------------------
- # * Create HUD
- #--------------------------------------------------------------------------
- def create_hud
- actor = $game_party.members[0]
- x = 16
- y = 4
- width = 120
- exp = actor.next_exp_s == "-------" ? 0 : actor.exp - actor.exp_list[actor.level]
- next_exp = actor.next_rest_exp_s == "-------" ? 1 : actor.next_rest_exp_s.to_i + actor.exp - actor.exp_list[actor.level]
- gc1 = Color.new(102, 204, 64)
- gc2 = Color.new(0, 160, 16)
- gc1 = Color.new(224, 128, 64) if (actor.hp * 180 / actor.maxhp) < 120
- gc2 = Color.new(240, 192, 64) if (actor.hp * 180 / actor.maxhp) < 120
- gc1 = Color.new(255, 120, 76) if (actor.hp * 180 / actor.maxhp) < 60
- gc2 = Color.new(255, 56, 16) if (actor.hp * 180 / actor.maxhp) < 60
- gc3 = Color.new(64, 128, 192)
- gc4 = Color.new(64, 192, 240)
- gc5 = Color.new(255, 255, 160)
- gc6 = Color.new(255, 204, 32)
- @hud_sprite = Sprite.new(@viewport3)
- @hud_sprite2 = Sprite.new(@viewport3)
- @hud_sprite3 = Sprite.new(@viewport3)
- @hud_sprite2.y = 16
- @hud_sprite3.y = 32
- @hud_sprite.bitmap = Bitmap.new(136, 16)
- @hud_sprite2.bitmap = Bitmap.new(136, 16)
- @hud_sprite3.bitmap = Bitmap.new(136, 16)
- @hud_sprite.bitmap.font.size = 12
- @hud_sprite2.bitmap.font.size = 12
- @hud_sprite3.bitmap.font.size = 12
- @hud_sprite.bitmap.font.color = Color.new(132, 170, 255)
- @hud_sprite2.bitmap.font.color = Color.new(132, 170, 255)
- @hud_sprite3.bitmap.font.color = Color.new(132, 170, 255)
- @hud_sprite.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
- @hud_sprite2.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
- @hud_sprite3.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
- @hud_sprite.bitmap.gradient_fill_rect(x, y, (width * actor.hp / actor.maxhp), 9, gc1, gc2)
- @hud_sprite2.bitmap.gradient_fill_rect(x, y, (width * actor.mp / actor.maxmp), 9, gc3, gc4)
- @hud_sprite3.bitmap.gradient_fill_rect(x, y, (width * exp / next_exp), 9, gc5, gc6)
- @hud_sprite.bitmap.draw_text(x - 16, -1, 48, 16, "HP")
- @hud_sprite2.bitmap.draw_text(x - 16, -1, 48, 16, "MP")
- @hud_sprite3.bitmap.draw_text(x - 16, -1, 48, 16, "EP")
- @actor_hp = actor.hp
- @actor_mp = actor.mp
- @actor_maxhp = actor.maxhp
- @actor_maxmp = actor.maxmp
- @actor_exp = actor.exp
- @hud_sprite.visible = $game_party.hud_visible
- @hud_sprite2.visible = $game_party.hud_visible
- @hud_sprite3.visible = $game_party.hud_visible
- end
- #--------------------------------------------------------------------------
- # * Create Skill
- #--------------------------------------------------------------------------
- def create_skill
- @skill_sprite = Sprite.new(@viewport3)
- @skill_sprite.bitmap = Cache.system("Skill_Window")
- @skill_sprite.x = 48
- @skill_sprite.y = 352
- @skill_icon = Sprite.new(@viewport3)
- @skill_icon.x = 52
- @skill_icon.y = 356
- @skill_icon.z = 5
- @skill_icon.bitmap = Cache.system("Iconset")
- skill_item = $game_party.members[0].skill_item
- actor = $game_party.members[0]
- case skill_item
- when 0
- if @actor_skill_index != actor.skill_index or @actor_skills != actor.skills or @skill_item != skill_item
- if $game_party.members[0].skills.empty?
- index = 0
- else
- index = actor.skills[actor.skill_index].icon_index
- end
- rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
- @skill_icon.src_rect = rect
- @actor_skill_index = actor.skill_index
- @actor_skills = actor.skills
- @skill_item = skill_item
- end
- when 1
- if @actor_item_index != actor.item_index or @actor_items != $game_party.usable_items or @skill_item != skill_item
- if $game_party.usable_items.empty?
- index = 0
- else
- index = $game_party.usable_items[actor.item_index].icon_index
- end
- rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
- @skill_icon.src_rect = rect
- @actor_item_index = actor.item_index
- @actor_items = $game_party.usable_items
- @skill_item = skill_item
- end
- end
- text2 = ""
- text3 = ""
- case skill_item
- when 0
- text = "Skills"
- unless actor.skills.empty?
- text2 = actor.skills[actor.skill_index].name
- end
- when 1
- text = "Items"
- unless $game_party.usable_items.empty?
- text2 = $game_party.usable_items[actor.item_index].name
- text3 = "x" + sprintf("%02d", ($game_party.item_number($game_party.usable_items[actor.item_index])))
- end
- end
- @skill_text = Sprite.new(@viewport3)
- @skill_text.bitmap = Bitmap.new(32, 16)
- @skill_text.bitmap.font.size = 14
- @skill_text.bitmap.font.name = "Arial"
- @skill_text.bitmap.draw_text(0, 0, 32, 16, text, 1)
- @skill_text.x = 48
- @skill_text.y = 336
- @skill_text2 = Sprite.new(@viewport3)
- @skill_text2.bitmap = Bitmap.new(128, 16)
- @skill_text2.bitmap.font.size = 14
- @skill_text2.bitmap.font.name = "Arial"
- @skill_text2.bitmap.draw_text(0, 0, 128, 16, text2, 1)
- @skill_text2.x = 0
- @skill_text2.y = 384
- @skill_text3 = Sprite.new(@viewport3)
- @skill_text3.bitmap = Bitmap.new(32, 16)
- @skill_text3.bitmap.font.size = 14
- @skill_text3.bitmap.font.name = "Arial"
- @skill_text3.bitmap.draw_text(0, 0, 32, 16, text3)
- @skill_text3.x = 58
- @skill_text3.y = 368
- @skill_text3.z = 10
- @skill_sprite.visible = $game_party.hud_visible
- @skill_icon.visible = $game_party.hud_visible
- @skill_text.visible = $game_party.hud_visible
- @skill_text2.visible = $game_party.hud_visible
- @skill_text3.visible = $game_party.hud_visible
- end
- #--------------------------------------------------------------------------
- # * Create Text
- #--------------------------------------------------------------------------
- def create_text
- @text_sprites = []
- for i in 0...24
- @text_sprites.push(Sprite_Text.new(@viewport3, i))
- end
- end
- #--------------------------------------------------------------------------
- # * Create Projectile
- #--------------------------------------------------------------------------
- def create_projectile
- @projectile_sprite = Sprite.new
- @projectile_sprite.bitmap = Cache.system("IconSet")
- index = $data_weapons[$game_party.members[0].weapon_id].projectile
- rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
- @projectile_sprite.src_rect = rect
- @projectile_index = index
- end
- #--------------------------------------------------------------------------
- # * Dispose
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_sbm_dispose dispose
- def dispose
- coz_ff12_abs_sbm_dispose
- dispose_icons
- dispose_hud
- dispose_text
- dispose_skill
- dispose_projectile
- end
- #--------------------------------------------------------------------------
- # * Dispose of Icon Sprite(s)
- #--------------------------------------------------------------------------
- def dispose_icons
- @icon_sprite.dispose
- end
- #--------------------------------------------------------------------------
- # * Dispose of Projectile Sprite
- #--------------------------------------------------------------------------
- def dispose_projectile
- @projectile_sprite.dispose
- end
- #--------------------------------------------------------------------------
- # * Dispose of HUD Sprite
- #--------------------------------------------------------------------------
- def dispose_hud
- @hud_sprite.dispose
- @hud_sprite2.dispose
- @hud_sprite3.dispose
- end
- #--------------------------------------------------------------------------
- # * Dispose of Skill Sprite
- #--------------------------------------------------------------------------
- def dispose_skill
- @skill_sprite.dispose
- @skill_icon.dispose
- @skill_text.dispose
- @skill_text2.dispose
- @skill_text3.dispose
- end
- #--------------------------------------------------------------------------
- # * Dispose Text
- #--------------------------------------------------------------------------
- def dispose_text
- for i in 0...24
- @text_sprites[i].dispose
- end
- end
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_sbm_update update
- def update
- coz_ff12_abs_sbm_update
- update_icons if @icon_sprite != nil
- update_hud if @hud_sprite != nil
- update_text if @text_sprites != nil
- update_skill if @skill_sprite != nil
- update_projectile if @projectile_sprite != nil
- end
- #--------------------------------------------------------------------------
- # * Update Projectile
- #--------------------------------------------------------------------------
- def update_projectile
- index = $data_weapons[$game_party.members[0].weapon_id].projectile
- if index != @projectile_index
- rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
- @projectile_sprite.src_rect = rect
- @projectile_index = index
- end
- @projectile_sprite.visible = @icon_sprite.visible
- case $game_player.direction
- when 2
- @projectile_sprite.angle = 225
- when 4
- @projectile_sprite.angle = 135
- when 6
- @projectile_sprite.angle = 315
- when 8
- @projectile_sprite.angle = 45
- end
- @projectile_sprite.x = 96
- @projectile_sprite.y = 96
- @projectile_sprite.update
- end
- #--------------------------------------------------------------------------
- # * Update Tilemap
- #--------------------------------------------------------------------------
- def update_icons
- @icon_sprite.update
- end
- #--------------------------------------------------------------------------
- # * Update HUD
- #--------------------------------------------------------------------------
- def update_hud
- actor = $game_party.members[0]
- x = 16
- y = 4
- width = 120
- exp = actor.next_exp_s == "-------" ? 0 : actor.exp - actor.exp_list[actor.level]
- next_exp = actor.next_rest_exp_s == "-------" ? 1 : actor.next_rest_exp_s.to_i + actor.exp - actor.exp_list[actor.level]
- gc1 = Color.new(102, 204, 64)
- gc2 = Color.new(0, 160, 16)
- gc1 = Color.new(224, 128, 64) if (actor.hp * 180 / actor.maxhp) < 120
- gc2 = Color.new(240, 192, 64) if (actor.hp * 180 / actor.maxhp) < 120
- gc1 = Color.new(255, 120, 76) if (actor.hp * 180 / actor.maxhp) < 60
- gc2 = Color.new(255, 56, 16) if (actor.hp * 180 / actor.maxhp) < 60
- gc3 = Color.new(64, 128, 192)
- gc4 = Color.new(64, 192, 240)
- gc5 = Color.new(255, 255, 160)
- gc6 = Color.new(255, 204, 32)
- if @actor_hp != actor.hp or @actor_maxhp != actor.maxhp
- @hud_sprite.flash(Color.new(255, 255, 255), 15)
- @hud_sprite.bitmap = Bitmap.new(136, 16)
- @hud_sprite.bitmap.font.size = 12
- @hud_sprite.bitmap.font.color = Color.new(132, 170, 255)
- @hud_sprite.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
- @hud_sprite.bitmap.gradient_fill_rect(x, y, (width * actor.hp / actor.maxhp), 9, gc1, gc2)
- @hud_sprite.bitmap.draw_text(x - 16, -1, 48, 16, "HP")
- @actor_hp = actor.hp
- @actor_maxhp = actor.maxhp
- end
- if @actor_mp != actor.mp or @actor_maxmp != actor.maxmp
- @hud_sprite2.flash(Color.new(255, 255, 255), 15)
- @hud_sprite2.y = 16
- @hud_sprite2.bitmap = Bitmap.new(136, 16)
- @hud_sprite2.bitmap.font.size = 12
- @hud_sprite2.bitmap.font.color = Color.new(132, 170, 255)
- @hud_sprite2.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
- @hud_sprite2.bitmap.gradient_fill_rect(x, y, (width * actor.mp / actor.maxmp), 9, gc3, gc4)
- @hud_sprite2.bitmap.draw_text(x - 16, -1, 48, 16, "MP")
- @actor_mp = actor.mp
- @actor_maxmp = actor.maxmp
- end
- if @actor_exp != actor.exp
- @hud_sprite3.flash(Color.new(255, 255, 255), 15)
- @hud_sprite3.y = 32
- @hud_sprite3.bitmap = Bitmap.new(136, 16)
- @hud_sprite3.bitmap.font.size = 12
- @hud_sprite3.bitmap.font.color = Color.new(132, 170, 255)
- @hud_sprite3.bitmap.fill_rect(x, y, width, 9, Color.new(0, 0, 0))
- @hud_sprite3.bitmap.gradient_fill_rect(x, y, (width * exp / next_exp), 9, gc5, gc6)
- @hud_sprite3.bitmap.draw_text(x - 16, -1, 48, 16, "EP")
- @actor_exp = actor.exp
- end
- @hud_sprite.visible = $game_party.hud_visible
- @hud_sprite2.visible = $game_party.hud_visible
- @hud_sprite3.visible = $game_party.hud_visible
- @hud_sprite.update
- @hud_sprite2.update
- @hud_sprite3.update
- end
- #--------------------------------------------------------------------------
- # * Update Text
- #--------------------------------------------------------------------------
- def update_text
- for i in 0...24
- @text_sprites[i].update
- end
- end
- #--------------------------------------------------------------------------
- # * Update Skill
- #--------------------------------------------------------------------------
- def update_skill
- skill_item = $game_party.members[0].skill_item
- actor = $game_party.members[0]
- text2 = ""
- text3 = ""
- @skill_sprite.visible = $game_party.hud_visible
- @skill_icon.visible = $game_party.hud_visible
- @skill_text.visible = $game_party.hud_visible
- @skill_text2.visible = $game_party.hud_visible
- @skill_text3.visible = $game_party.hud_visible
- case skill_item
- when 0
- text = "Skills"
- unless actor.skills.empty?
- text2 = actor.skills[actor.skill_index].name
- end
- when 1
- text = "Items"
- unless $game_party.usable_items.empty? or $game_party.item_number($game_party.usable_items[actor.item_index]) == 0
- text2 = $game_party.usable_items[actor.item_index].name
- text3 = "x" + sprintf("%02d", ($game_party.item_number($game_party.usable_items[actor.item_index])))
- end
- end
- @skill_text.bitmap.clear
- @skill_text.bitmap.draw_text(0, 0, 32, 16, text, 1)
- @skill_text.update
- @skill_text2.bitmap.clear
- @skill_text2.bitmap.draw_text(0, 0, 128, 16, text2, 1)
- @skill_text2.update
- @skill_text3.bitmap.clear
- @skill_text3.bitmap.draw_text(0, 0, 32, 16, text3)
- @skill_text3.update
- case skill_item
- when 0
- if @actor_skill_index != actor.skill_index or @actor_skills != actor.skills or @skill_item != skill_item
- if $game_party.members[0].skills.empty?
- index = 0
- else
- index = actor.skills[actor.skill_index].icon_index
- end
- rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
- @skill_icon.src_rect = rect
- @skill_sprite.update
- @actor_skill_index = actor.skill_index
- @actor_skills = actor.skills
- @skill_item = skill_item
- end
- when 1
- if @actor_item_index != actor.item_index or @actor_items != $game_party.usable_items or @skill_item != skill_item
- if $game_party.usable_items.empty? or $game_party.item_number($game_party.usable_items[actor.item_index]) == 0
- index = 0
- else
- index = $game_party.usable_items[actor.item_index].icon_index
- end
- rect = Rect.new(index % 16 * 24, index / 16 * 24, 24, 24)
- @skill_icon.src_rect = rect
- @skill_sprite.update
- @actor_item_index = actor.item_index
- @actor_items = $game_party.usable_items
- @skill_item = skill_item
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Determine if animation is being displayed
- #--------------------------------------------------------------------------
- def animation?
- for sprite in @character_sprites
- return true if sprite.animation?
- end
- return false
- end
- end
- #==============================================================================
- # ** Scene_Map
- #==============================================================================
- class Scene_Map < Scene_Base
- #--------------------------------------------------------------------------
- # * Frame Update
- #--------------------------------------------------------------------------
- alias coz_ff12_abs_sm_update_1536 update
- def update
- coz_ff12_abs_sm_update_1536
- return if not $game_party.hud_visible
- return if $game_switches[COZZIEKUNS::FF12::ABS::STOP_ALL_MOVEMENT]
- actor = $game_party.members[0]
- items_empty = false
- if $game_player.vehicle_type == - 1
- if Input.trigger?(Input::Y) and $game_player.frames == 75 / attack_rate - 1
- case $game_player.direction
- when 2; attack_down
- when 4; attack_left
- when 6; attack_right
- when 8; attack_up
- end
- elsif Input.trigger?(Input::X)
- case actor.skill_item
- when 0; return if actor.skills.empty?; start_skill_activation if $game_player.frames == (actor.skills[actor.skill_index].frames - 1)
- when 1; start_item_activation
- end
- elsif Input.trigger?(Input::R)
- case actor.skill_item
- when 0
- if actor.skills.size != 0
- actor.skill_index += 1
- actor.skill_index %= actor.skills.size
- end
- when 1
- if !($game_party.usable_items.empty?)
- actor.item_index += 1
- actor.item_index %= $game_party.usable_items.size
- end
- end
- elsif Input.trigger?(Input::L)
- case actor.skill_item
- when 0
- if actor.skills.size != 0
- actor.skill_index += actor.skills.size - 1
- actor.skill_index %= actor.skills.size
- end
- when 1
- if !($game_party.usable_items.empty?)
- actor.item_index += $game_party.usable_items.size - 1
- actor.item_index %= $game_party.usable_items.size
- end
- end
- elsif Input.trigger?(Input::Z)
- actor.skill_item += 1
- actor.skill_item %= 2
- end
- make_enemy_movements
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Down
- #--------------------------------------------------------------------------
- def attack_down(char = 0)
- case char
- when 0
- for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
- attack_enemy(event) if event.enemy and !(event.erased)
- end
- when 1
- for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
- attack_player(event) if event.enemy and !(event.erased)
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Left
- #--------------------------------------------------------------------------
- def attack_left(char = 0)
- case char
- when 0
- for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
- attack_enemy(event) if event.enemy and !(event.erased)
- end
- when 1
- for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
- attack_player(event) if event.enemy and !(event.erased)
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Right
- #--------------------------------------------------------------------------
- def attack_right(char = 0)
- case char
- when 0
- char = $game_party.members[0]
- for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
- attack_enemy(event) if event.enemy and !(event.erased)
- end
- when 1
- for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
- attack_player(event) if event.enemy and !(event.erased)
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Up
- #--------------------------------------------------------------------------
- def attack_up(char = 0)
- case char
- when 0
- for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
- attack_enemy(event) if event.enemy and !(event.erased)
- end
- when 1
- for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
- attack_player(event) if event.enemy and !(event.erased)
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Enemy
- #--------------------------------------------------------------------------
- def attack_enemy(event)
- event.heal = false
- unless event.fading
- char = $game_party.members[0]
- variance = rand(2)
- event.animation_id = char.weapon_id.zero? ? 1 : $data_weapons[char.weapon_id].animation_id
- event.turn_toward_player
- result = calc_damage(event, char)
- event.hp -= (result[0] == "Miss" ? 0 : result[0])
- event.popup_text[popup_line(event)] = result[0].to_s
- event.crit = result[1]
- event_death(event)
- case event.traits
- when 1
- event.move_type = 4
- event.move_frequency = event.move_frequency + 2 > 5 ? 5 : event.move_frequency + 2
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Player
- #--------------------------------------------------------------------------
- def attack_player(event)
- unless event.fading or event.frame_count != 0
- $game_player.heal = false
- char = $game_party.members[0]
- event.turn_toward_player
- $game_player.animation_id = event.animation
- result = calc_damage(event, char, 1)
- char.hp -= (result[0] == "Miss" ? 0 : result[0])
- $game_player.popup_text[popup_line($game_player)] = result[0].to_s
- $game_player.crit = result[1]
- if $game_party.members[0].hp.zero?
- $game_temp.next_scene = "gameover"
- return
- end
- case event.traits
- when 1
- event.move_type = 4
- event.move_frequency = event.move_frequency + 2 > 5 ? 5 : event.move_frequency + 2
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Apply Damage Calculations
- #--------------------------------------------------------------------------
- def calc_damage(event, char, situation = 0)
- variance = rand(2)
- case situation
- when 0
- hit_change = 1
- hit_change = 12 if char.reduce_hit_ratio?
- chance = char.hit - event.eva < 0 ? chance = 0 : chance = char.hit - event.eva
- miss = rand(char.hit / hit_change - event.eva).to_i.zero?
- 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
- damage = (damage < 1 ? 1 : damage)
- crit = rand(100) < $game_party.members[0].cri
- if miss
- damage = "Miss"
- crit = false
- end
- when 1
- chance = event.hit - char.eva < 0 ? chance = 0 : chance = event.hit - char.eva
- miss = rand(chance).zero?
- 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
- damage = (damage < 1 ? 1 : damage)
- crit = rand(100) < 4
- if miss
- damage = "Miss"
- crit = false
- end
- end
- damage *= 3 if crit
- return damage, crit
- end
- #--------------------------------------------------------------------------
- # * Mess Line
- #--------------------------------------------------------------------------
- def mess_line
- for i in 0...24
- return i if $game_party.text[i] == ""
- end
- return 0
- end
- #--------------------------------------------------------------------------
- # * Popup Line
- #--------------------------------------------------------------------------
- def popup_line(character)
- for i in 0..8
- return i if character.popup_text[i] == ""
- end
- return 0
- end
- #--------------------------------------------------------------------------
- # * Make Drop Items
- #--------------------------------------------------------------------------
- def make_drop_items(event_drop)
- for event in event_drop
- randomizer = rand(event[2])
- if randomizer.zero?
- case event[0]
- when 1
- $game_party.gain_item($data_items[event[1]], 1)
- $game_party.text[mess_line] = "You have gained " + ($data_items[event[1]].name).to_s + "."
- when 2
- $game_party.gain_item($data_weapons[event[1]], 1, false)
- $game_party.text[mess_line] = "You have gained " + ($data_weapons[event[1]].name).to_s + "."
- when 3
- $game_party.gain_item($data_armors[event[1]], 1, false)
- $game_party.text[mess_line] = "You have gained " + ($data_armors[event[1]].name).to_s + "."
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Level Up
- #--------------------------------------------------------------------------
- def char_level_up
- $game_player.popup_delay = 0
- $game_player.popup_text[popup_line($game_player)] = "Level Up!!"
- $game_player.popup_delay = 10
- $game_player.animation_id = 40
- end
- #--------------------------------------------------------------------------
- # * Use Skill
- #--------------------------------------------------------------------------
- def use_skill(skill, char, event = nil)
- actor = $game_party.members[0] if char == $game_player
- if skill.mp_cost > actor.mp
- Sound.play_buzzer
- return
- end
- if skill.base_damage > 0
- if skill.scope == 1
- use_attack_skill(skill, event)
- elsif skill.scope == 2
- use_area_skill(skill, 17, 13)
- elsif skill.scope == 3
- use_attack_skill(skill, event)
- use_attack_skill(skill, event, 3)
- end
- elsif skill.base_damage == 0
- if skill.for_user?
- char.animation_id = skill.animation_id
- actor.mp -= skill.mp_cost
- apply_state_changes(actor, skill)
- end
- elsif skill.base_damage < 0
- variance = rand(2)
- if skill.for_user?
- char.animation_id = skill.animation_id
- damage = skill.base_damage
- damage -= (actor.atk * 4 * skill.atk_f / 100)
- damage -= (actor.spi * 2 * skill.spi_f / 100)
- variance.zero? ? damage += rand(damage / 10).to_i : damage -= rand(damage / 10).to_i
- actor.hp -= damage
- actor.mp -= skill.mp_cost
- char.popup_text[popup_line(char)] = (-damage).to_s
- char.heal = true
- apply_state_changes(actor, skill)
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Use Attack Skill
- #--------------------------------------------------------------------------
- def use_attack_skill(skill, event, scope = 1)
- return if event.fading or event.erased
- actor = $game_party.members[0]
- variance = rand(2)
- animation = skill.animation_id < 0 ? $data_weapons[actor.weapon_id].animation_id : skill.animation_id
- event.animation_id = animation unless scope == 2
- event.animation_mirror = (scope == 3)
- event.turn_toward_player
- damage = skill.base_damage
- damage += actor.atk * 4 * skill.atk_f / 100
- damage += actor.spi * 2 * skill.spi_f / 100
- damage -= event.def * 2 * skill.atk_f / 100
- damage -= event.spi * 2 * skill.spi_f / 100
- variance.zero? ? damage += rand(damage / 10).to_i : damage -= rand(damage / 10).to_i
- event.hp -= damage
- actor.mp -= skill.mp_cost unless scope == 2
- event.popup_text[popup_line(event)] = damage.to_s
- wait_for_animation unless scope == 2
- event_death(event)
- case event.traits
- when 1
- event.move_type = 4
- event.move_frequency = event.move_frequency + 2 > 5 ? 5 : event.move_frequency + 2
- end
- end
- #--------------------------------------------------------------------------
- # * Apply State Changes
- #--------------------------------------------------------------------------
- def apply_state_changes(actor, skill)
- for state in skill.plus_state_set
- actor.add_state(state)
- actor.states[actor.states.size - 1].step_created = false
- actor.perform_collapse
- end
- for state in skill.minus_state_set
- actor.remove_state(state)
- end
- end
- #--------------------------------------------------------------------------
- # * Event Death
- #--------------------------------------------------------------------------
- def event_death(event, char = $game_party.members[0])
- if event.hp.zero?
- level = char.level
- char.gain_exp(event.exp, false)
- $game_party.text[mess_line] = "You have gained " + (char.double_exp_gain ? event.exp : event.exp * 2).to_s + " exp."
- event.fade if event.fade?
- Sound.play_enemy_collapse
- char_level_up if char.level > level
- $game_party.gain_gold(event.gold)
- $game_party.text[mess_line] = "You have gained " + event.gold.to_s + " gold." unless event.gold.zero?
- make_drop_items(event.drop_item)
- unless event.fade?
- $game_self_switches[[$game_map.map_id, event.id, event.self_switch]] = true
- event.refresh
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Wait Until Animation Display has Finished
- #--------------------------------------------------------------------------
- def wait_for_animation
- update_basic
- update_basic while @spriteset.animation?
- end
- #--------------------------------------------------------------------------
- # * Use Area Skill
- #--------------------------------------------------------------------------
- def use_area_skill(skill, area_x, area_y, scope = 2)
- weapon_ani = $game_party.members[0].atk_animation_id
- for event in $game_map.events.values
- next unless event.enemy and !(event.fading)
- next unless in_area?(event, $game_player.x - 9, $game_player.y - 7, area_x, area_y)
- animation_event = event
- break
- end
- if animation_event != nil
- $game_party.members[0].mp -= skill.mp_cost
- ani = (skill.animation_id == -1 ? weapon_ani : skill.animation_id)
- animation_event.animation_id = ani
- for events in $game_map.events.values
- next unless events.enemy and !(events.fading)
- if COZZIEKUNS::FF12::ABS::TARGET_ALL_SCREEN and scope == 2
- next unless in_area?(events, $game_player.x - 9, $game_player.y - 7, area_x, area_y)
- end
- use_attack_skill(skill, events, 2)
- end
- else
- return
- end
- end
- #--------------------------------------------------------------------------
- # * Make Enemy Movements
- #--------------------------------------------------------------------------
- def make_enemy_movements
- case rand(2)
- when 0
- attack_down(1) if !($game_map.events_xy($game_player.x, $game_player.y + 1).empty?)
- attack_right(1) if !($game_map.events_xy($game_player.x + 1, $game_player.y).empty?)
- attack_left(1) if !($game_map.events_xy($game_player.x - 1, $game_player.y).empty?)
- attack_up(1) if !($game_map.events_xy($game_player.x, $game_player.y - 1).empty?)
- when 1
- for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
- if event.skills.nil?
- attack_down(1)
- else
- start_skill_activation(event) if event.enemy and !(event.erased)
- end
- end
- for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
- if event.skills.nil?
- attack_right(1)
- else
- start_skill_activation(event) if event.enemy and !(event.erased)
- end
- end
- for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
- if event.skills.nil?
- attack_left(1)
- else
- start_skill_activation(event) if event.enemy and !(event.erased)
- end
- end
- for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
- if event.skills.nil?
- attack_left(1)
- else
- start_skill_activation(event) if event.enemy and !(event.erased)
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Attack Rate
- #--------------------------------------------------------------------------
- def attack_rate
- actor = $game_party.members[0]
- attack_rate = 1
- for state in actor.states; attack_rate = 2 if state.agi_rate > 100; end
- return attack_rate
- end
- #--------------------------------------------------------------------------
- # * Use Skills
- #--------------------------------------------------------------------------
- def start_skill_activation(actor = $game_party.members[0])
- if actor.is_a?(Game_Actor)
- actor_use_skill(actor)
- else
- event_use_skill(actor)
- end
- end
- #--------------------------------------------------------------------------
- # * Use Items
- #--------------------------------------------------------------------------
- def start_item_activation(actor = $game_party.members[0])
- if $game_party.usable_items.empty?
- Sound.play_buzzer
- return
- end
- use_item($game_party.usable_items[actor.item_index])
- end
- #--------------------------------------------------------------------------
- # * Use Item
- #--------------------------------------------------------------------------
- def use_item(item, char = $game_party)
- if item.is_a?(RPG::Weapon) or item.is_a?(RPG::Armor)
- Sound.play_buzzer
- return
- end
- actor = $game_party.members[0]
- variance = rand(2)
- case item.scope
- when 11
- char.lose_item(item, 1)
- $game_player.animation_id = item.animation_id
- damage = item.base_damage
- damage -= (actor.atk * 4 * item.atk_f / 100)
- damage -= (actor.spi * 2 * item.spi_f / 100)
- variance.zero? ? damage += rand(damage / 10).to_i : damage -= rand(damage / 10).to_i
- if item.damage_to_mp
- actor.mp += damage
- else
- actor.hp += damage
- end
- actor.hp += calc_hp_recovery(actor, item)
- actor.mp += calc_mp_recovery(actor, item)
- recovery = calc_hp_recovery(actor, item) > calc_mp_recovery(actor, item)
- unless calc_hp_recovery(actor, item) == 0 and calc_mp_recovery(actor, item) == 0
- $game_player.popup_text[popup_line($game_player)] = recovery ? calc_hp_recovery(actor, item).to_s : calc_mp_recovery(actor, item).to_s
- end
- $game_player.heal = true
- apply_state_changes(actor, item)
- if !($game_party.usable_items.empty?) and char.item_number(item) == 0
- actor.item_index += 1
- actor.item_index %= $game_party.usable_items.size
- end
- end
- end
- #--------------------------------------------------------------------------
- # * Calculating HP Recovery Amount From an Item
- #--------------------------------------------------------------------------
- def calc_hp_recovery(user, item)
- result = user.maxhp * item.hp_recovery_rate / 100 + item.hp_recovery
- result *= 2 if user.pharmacology # Pharmacology doubles the effect
- return result
- end
- #--------------------------------------------------------------------------
- # * Calculating MP Recovery Amount From an Item
- #--------------------------------------------------------------------------
- def calc_mp_recovery(user, item)
- result = user.maxmp * item.mp_recovery_rate / 100 + item.mp_recovery
- result *= 2 if user.pharmacology # Pharmacology doubles the effect
- return result
- end
- #--------------------------------------------------------------------------
- # * Actor Use Skill
- #--------------------------------------------------------------------------
- def actor_use_skill(actor)
- if actor.skills.empty? or actor.mp < actor.skills[actor.skill_index].mp_cost
- Sound.play_buzzer
- return
- end
- if [1, 3].include?(actor.skills[actor.skill_index].scope)
- case $game_player.direction
- when 2
- for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
- use_skill(actor.skills[actor.skill_index], $game_player, event) if event.enemy and !(event.erased)
- end
- when 4
- for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
- use_skill(actor.skills[actor.skill_index], $game_player, event) if event.enemy and !(event.erased)
- end
- when 6
- for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
- use_skill(actor.skills[actor.skill_index], $game_player, event) if event.enemy and !(event.erased)
- end
- when 8
- for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
- use_skill(actor.skills[actor.skill_index], $game_player, event) if event.enemy and !(event.erased)
- end
- end
- else
- use_skill(actor.skills[actor.skill_index], $game_player)
- end
- end
- #--------------------------------------------------------------------------
- # * Event Use Skill
- #--------------------------------------------------------------------------
- def event_use_skill(event)
- skill_index = event.skills[rand(event.skills.size)]
- skill = $data_skills[skill_index]
- return if event.mp < skill.mp_cost
- if skill.scope == 1
- case $game_player.direction
- when 2
- for event in $game_map.events_xy($game_player.x, $game_player.y + 1)
- use_skill_event(skill, event)
- end
- when 4
- for event in $game_map.events_xy($game_player.x - 1, $game_player.y)
- use_skill_event(skill, event)
- end
- when 6
- for event in $game_map.events_xy($game_player.x + 1, $game_player.y)
- use_skill_event(skill, event)
- end
- when 8
- for event in $game_map.events_xy($game_player.x, $game_player.y - 1)
- use_skill_event(skill, event)
- end
- end
- else
- use_skill_event(skill, event)
- end
- end
- #--------------------------------------------------------------------------
- # * Use Skill Event
- #--------------------------------------------------------------------------
- def use_skill_event(skill, event)
- unless event.fading or event.frame_count != 0
- variance = rand(2)
- if skill.scope == 1
- $game_player.heal = false
- char = $game_party.members[0]
- event.turn_toward_player
- animation = skill.animation_id < 0 ? event.animation : skill.animation_id
- $game_player.animation_id = animation
- damage = skill.base_damage
- damage += event.atk * 4 * skill.atk_f / 100
- damage += event.spi * 2 * skill.spi_f / 100
- damage -= char.def * 2 * skill.atk_f / 100
- damage -= char.spi * 2 * skill.spi_f / 100
- variance.zero? ? damage += rand(damage / 10).to_i : damage -= rand(damage / 10).to_i
- char.hp -= damage
- event.mp -= skill.mp_cost
- $game_player.popup_text[popup_line($game_player)] = damage.to_s
- if $game_party.members[0].hp.zero?
- $game_temp.next_scene = "gameover"
- return
- end
- case event.traits
- when 1
- event.move_type = 4
- event.move_frequency = event.move_frequency + 2 > 5 ? 5 : event.move_frequency + 2
- end
- apply_state_changes(char, skill) if skill.sic > rand(100)
- else
- return
- end
- end
- end
- #--------------------------------------------------------------------------
- # * In Area?
- #--------------------------------------------------------------------------
- def in_area?(event, x, y, width = 17, height = 13)
- x = 0 if x < 0; x = $game_map.width - 17 if x > $game_map.width - 17
- y = 0 if y < 0; y = $game_map.height - 13 if y > $game_map.height - 13
- return true if event.x >= x and event.x <= (x + width) and event.y >= y and event.y <= (y + height)
- return false
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement