Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Requiem Materpeice
- #==============================================================================
- # Requiem Masterpiece
- #==============================================================================
- # This module is necessary to activate and enhance compatibility of all Requiem's Scripts
- #------------------------------------------------------------------------------
- module Requiem_Masterpiece
- Version = 1.2
- @scripts = {}
- @warnings = {}
- Print_Errors = false
- def self.register(script, version, date)
- @scripts[script] = [version, date]
- end
- def self.enabled?(script, version = nil)
- if version != nil and @scripts.include?(script)
- if @scripts[script][0] >= version
- return true
- elsif @warnings[script].nil? and Print_Errors
- print "'#{script}' is obsolete.\r\nSome functions won't work correctly"
- @warnings[script] = ["is obsolete"]
- self.write_log
- end
- end
- return true if @scripts[script] != nil
- if @scripts[script].nil? and $TEST and @warnings[script].nil? and Print_Errors
- print "Unable to find script '#{script}' or it is placed in wrong place.\r\nSome functions won't work correctly"
- @warnings[script] = ["Unable to find"]
- self.write_log
- end
- return false
- end
- def self.show_scripts(alert=true)
- list = "Requiem Scripts [#{@scripts.size}]:\r\n\r\n"
- @scripts.each { |key, value| list += "#{key.gsub("Requiem ", "")} #{value[0]} #{value[1]}\r\n" }
- list += "\r\nWarnings:\r\n" if @warnings != {}
- @warnings.each { |key, value| list += "#{key} #{value}\r\n" }
- return print list if alert
- return list
- end
- def self.write_log
- file = File.new("Requiem/Requiem_Log-#{Time.now.strftime("%m_%d_%Y")}.log", "w")
- file.write(self.show_scripts(false))
- file.close
- end
- end
- Input
- #==============================================================================
- # Input Module (Modificated by Vlad)
- #==============================================================================
- module Input
- Mouse_Left = 1
- Mouse_Right = 2
- Mouse_Middle = 4
- Back = 8
- Tab = 9
- Enter = 13
- Shift = 16
- Ctrl = 17
- Alt = 18
- CapsLock = 20
- Esc = 27
- Space = 32
- PGUP = 33
- PGDN = 34
- End = 35
- Home = 36
- Left = 37
- Up = 38
- Right = 39
- Down = 40
- PrintScreen = 44
- Insert = 45
- Delete = 46
- Numberkeys = {}
- Numberkeys[0] = 48
- Numberkeys[1] = 49
- Numberkeys[2] = 50
- Numberkeys[3] = 51
- Numberkeys[4] = 52
- Numberkeys[5] = 53
- Numberkeys[6] = 54
- Numberkeys[7] = 55
- Numberkeys[8] = 56
- Numberkeys[9] = 57
- Letters = {}
- Letters["A"] = 65
- Letters["B"] = 66
- Letters["C"] = 67
- Letters["D"] = 68
- Letters["E"] = 69
- Letters["F"] = 70
- Letters["G"] = 71
- Letters["H"] = 72
- Letters["I"] = 73
- Letters["J"] = 74
- Letters["K"] = 75
- Letters["L"] = 76
- Letters["M"] = 77
- Letters["N"] = 78
- Letters["O"] = 79
- Letters["P"] = 80
- Letters["Q"] = 81
- Letters["R"] = 82
- Letters["S"] = 83
- Letters["T"] = 84
- Letters["U"] = 85
- Letters["V"] = 86
- Letters["W"] = 87
- Letters["X"] = 88
- Letters["Y"] = 89
- Letters["Z"] = 90
- LWin = 91
- RWin = 92
- Apps = 93
- Numberpad = {}
- Numberpad[0] = 96
- Numberpad[1] = 97
- Numberpad[2] = 98
- Numberpad[3] = 99
- Numberpad[4] = 100
- Numberpad[5] = 101
- Numberpad[6] = 102
- Numberpad[7] = 103
- Numberpad[8] = 104
- Numberpad[9] = 105
- Multiply = 106
- Add = 107
- Subtract = 109
- Decimal = 110
- Divide = 111
- Fkeys = {}
- Fkeys[1] = 112
- Fkeys[2] = 113
- Fkeys[3] = 114
- Fkeys[4] = 115
- Fkeys[5] = 116
- Fkeys[6] = 117
- Fkeys[7] = 118
- Fkeys[8] = 119
- Fkeys[9] = 120
- Fkeys[10] = 121
- Fkeys[11] = 122
- Fkeys[12] = 123
- NumLock = 144
- ScrollLock = 145
- LShift = 160
- RShift = 161
- LControl = 162
- RControl = 163
- LAlt = 164
- RAlt = 165
- Collon = 186
- Equal = 187
- Comma = 188
- Underscore = 189
- Dot = 190
- Backslash = 191
- Uncle = 192
- LB = 219
- Bar = 220
- RB = 221
- Quote = 222
- @time = Array.new(256, 0)
- @press = Array.new(256, false)
- @trigger = Array.new(256, false)
- @repeat = Array.new(256, false)
- @release = Array.new(256, false)
- @dirs = [0, 0]
- InputInitialize = Win32API.new("Input", 'InputInitialize', 'LLLLLL', '')
- InputUpdate = Win32API.new("Input", 'InputUpdate', '', '')
- REG_KVALUES = {0=>32,1=>13,2=>27,3=>96,4=>16,5=>90,6=>88,7=>67,8=>86,9=>66,
- 10=>65,11=>83,12=>68,13=>81,14=>87}
- DEFAULT_KEYS = {11=>[16,90],12=>[27,88,96],13=>[13,32],14=>[65],15=>[83],
- 16=>[68],17=>[81],18=>[87]}
- def convert_keys(key)
- begin
- keys = []
- rkey = 'HKEY_CURRENT_USER\\Software\\Enterbrain\\RGSS'
- data = Registry.read_entry(rkey, 'ButtonAssign')[10, 25].scan(/./)
- 15.times {|i| keys.push(REG_KVALUES[i]) if key == data[i].unpack('C')[0]}
- keys
- rescue
- DEFAULT_KEYS[key] rescue []
- end
- end
- module_function :convert_keys
- LEFT = 37
- UP = 38
- RIGHT = 39
- DOWN = 40
- A = convert_keys(11)
- B = [45] + convert_keys(12)
- C = [90] + convert_keys(13)
- X = convert_keys(14)
- Y = convert_keys(15)
- Z = convert_keys(16)
- L = [33] + convert_keys(17)
- R = [34] + convert_keys(18)
- SHIFT = 16
- CTRL = 17
- ALT = 18
- F5 = 116
- F6 = 117
- F7 = 118
- F8 = 119
- F9 = 120
- InputInitialize.call(@time.object_id, @press.object_id, @trigger.object_id,
- @repeat.object_id, @release.object_id, @dirs.object_id)
- def self.update
- InputUpdate.call
- end
- def self.trigger?(id)
- @trigger.indexes(*id.to_a).include?(true)
- end
- def self.press?(id)
- @press.indexes(*id.to_a).include?(true)
- end
- def self.triggerd?(what)
- if triggered.include?(what)
- return true
- end
- end
- def self.triggered
- array = Array.new
- @trigger.each_index {|i| array.push(i) if @trigger[i]}
- array
- end
- def self.pressed?(what)
- if pressed.include?(what)
- return true
- end
- end
- def self.pressed
- array = Array.new
- @press.each_index {|i| array.push(i) if @press[i]}
- array
- end
- def self.repeat?(id)
- @repeat.indexes(*id.to_a).include?(true)
- end
- def self.repeated
- array = Array.new
- @repeat.each_index {|i| array.push(i) if @repeat[i]}
- array
- end
- def self.release?(id)
- @release.indexes(*id.to_a).include?(true)
- end
- def self.released
- array = Array.new
- @release.each_index {|i| array.push(i) if @release[i]}
- array
- end
- def self.dir4
- @dirs[0]
- end
- def self.dir8
- @dirs[1]
- end
- KEYS_NAMES = {1=>'Mouse Left',2=>'Mouse Right',3=>'Cancel',
- 4=>'Mouse Middle',5=>'Mouse 4th',6=>'Mouse 5th',8=>'Backspace',9=>'Tab',
- 12=>'Clear',13=>'Enter',16=>'Shift',17=>'Control',18=>'Alt',19=>'Pause',
- 20=>'Capitals Lock',21=>'Kana',23=>'Junja',24=>'Final',25=>'Kanji',
- 27=>'Escape',28=>'Convert',29=>'Non Convert',30=>'Accept',31=>'Mode Change',
- 32=>'Space',33=>'Page Up',34=>'Page Down',35=>'End',36=>'Home',37=>'Left',
- 38=>'Up',39=>'Right',40=>'Down',41=>'Select',42=>'Print',43=>'Execute',
- 44=>'PrintScreen',45=>'Insert',46=>'Delete',47=>'Help',48=>'0',49=>'1',50=>'2',
- 51=>'3',52=>'4',53=>'5',54=>'6',55=>'7',56=>'8',57=>'9',65=>'A',66=>'B',
- 67=>'C',68=>'D',69=>'E',70=>'F',71=>'G',72=>'H',73=>'I',74=>'J',75=>'K',
- 76=>'L',77=>'M',78=>'N',79=>'O',80=>'P',81=>'Q',82=>'R',83=>'S',84=>'T',
- 85=>'U',86=>'V',87=>'W',88=>'X',89=>'Y',90=>'Z',91=>'Left Windows',
- 92=>'Right Windows',93=>'Application',95=>'Sleep',96=>'PAD 0',97=>'PAD 1',
- 98=>'PAD 2',99=>'PAD 3',100=>'PAD 4',101=>'PAD 5',102=>'PAD 6',103=>'PAD 7',
- 104=>'PAD 8',105=>'PAD 9',106=>'*',107=>'+',108=>'Separator',109=>'-',110=>'.',
- 111=>'/',112=>'F1',113=>'F2',114=>'F3',115=>'F4',116=>'F5',117=>'F6',118=>'F7',
- 119=>'F8',120=>'F9',121=>'F10',122=>'F11',123=>'F12',124=>'F13',125=>'F14',
- 126=>'F15',127=>'F16',128=>'F17',129=>'F18',130=>'F19',131=>'F20',132=>'F21',
- 133=>'F22',134=>'F23',135=>'F24',144=>'Number Lock',145=>'Scroll Lock',
- 146=>'OEM 15',147=>'OEM 16',148=>'OEM 17',149=>'OEM 18',150=>'OEM 19',
- 160=>'Left Shift',161=>'Right Shift',162=>' Left Control',163=>'Right Control',
- 164=>' Left Alt',165=>'Right Alt',166=>'Browser Back',167=>'Browser Forward',
- 168=>'Browser Refresh',169=>'Browser Stop',170=>'Browser Search',
- 171=>'Browser Favorites',172=>'Browser Home',173=>'Volume Mute',
- 174=>'Volume Down',175=>'Volume Up',176=>'Media Next Track',
- 177=>'Media Previous Track',178=>'Media Stop',179=>'Media Play Pause',
- 180=>'Launch Mail',181=>'Launch Media Select',182=>'Launch Application',
- 183=>'Launch Application',186=>'OEM 1',187=>'OEM 2',188=>'OEM 3',189=>'OEM 4',
- 190=>'OEM 5',191=>'OEM 6',192=>'OEM 7',219=>'OEM 8',220=>'OEM 9',221=>'OEM 10',
- 222=>'OEM 11',223=>'OEM 13',225=>'OEM 20',226=>'OEM 14',227=>'OEM 21',
- 228=>'OEM 22',229=>'Proccess',230=>'OEM 23',232=>'OEM 24',240=>'OEM 25',
- 241=>'OEM 26',242=>'OEM 27',243=>'OEM 28',244=>'OEM 29',245=>'OEM 30',
- 246=>'ATTN',247=>'CRSEL',248=>'EXSEL',249=>'EREOF',250=>'Play',251=>'Zoom',
- 253=>'PA1',254=>'OEM Clear'}
- def self.name?(id)
- return (KEYS_NAMES[id].nil? ? '???' : KEYS_NAMES[id])
- end
- end
- #-----------------------------------------------------------------------------
- module Registry
- module_function
- RegCloseKey = Win32API.new('advapi32', 'RegCloseKey', 'L', 'L')
- RegOpenKeyExA = Win32API.new('advapi32', 'RegOpenKeyExA', 'LPLLP', 'L')
- RegQueryValueExA = Win32API.new('advapi32', 'RegQueryValueExA','LPLPPP','L')
- HKEYS = {'HKEY_CLASSES_ROOT' => 0x80000000,'HKEY_CURRENT_USER' =>0x80000001,
- 'HKEY_LOCAL_MACHINE' => 0x80000002, 'HKEY_USERS' => 0x80000003,
- 'HKEY_CURRENT_CONFIG' => 0x80000005}
- def read_entry(key, entry)
- key.sub!(/(.*?)\\/, '')
- if HKEYS[$1] != nil
- hkey = HKEYS[$1]
- else
- return nil
- end
- opened, type, size = [0].pack('V'), [0].pack('V'), [0].pack('V')
- RegOpenKeyExA.call(hkey, key, 0, 131097, opened)
- opened = (opened + [0].pack('V')).unpack('V')[0]
- RegQueryValueExA.call(opened, entry, 0, type, 0, size)
- data = ' ' * (size + [0].pack('V')).unpack('V')[0]
- RegQueryValueExA.call(opened, entry, 0, type, data, size)
- RegCloseKey.call(opened)
- data = data[0, (size + [0].pack('V')).unpack('V')[0]]
- type = (type += [0].pack('V')).unpack('V')[0]
- case type
- when 1
- data.chop
- when 2
- data.chop.gsub(/%([^%]+)%/) { ENV[$1] || $& }
- when 3
- data
- when 4
- (data += [0].pack('V')).unpack('V')[0]
- when 5
- data.unpack('N')[0]
- when 7
- data.split(/\0/)
- when 11
- (data.unpack('VV')[1] << 32) | data[0]
- else
- nil
- end
- end
- end
- Requiem Extended Movement
- #==============================================================================
- # Requiem Extended Movements
- #==============================================================================
- #------------------------------------------------------------------------------
- Requiem_Masterpiece.register("Requiem Extended Movements", 1.2, "04/29/2009")
- #------------------------------------------------------------------------------
- class Game_Character
- attr_accessor :character_name
- attr_accessor :character_index
- attr_accessor :move_type
- attr_accessor :move_route
- attr_accessor :direction_fix
- attr_accessor :walk_anime
- attr_accessor :step_anime
- attr_accessor :through
- attr_accessor :pattern
- attr_accessor :direction
- attr_accessor :bush_depth
- attr_accessor :blend_type
- attr_accessor :opacity
- attr_accessor :move_speed
- attr_accessor :priority_type
- def in_range?(parent, target, range)
- x = (parent.x - target.x) * (parent.x - target.x)
- y = (parent.y - target.y) * (parent.y - target.y)
- r = x + y
- return true if r <= (range * range)
- return false
- end
- def in_direction?(parent, target)
- return true if parent.direction == 2 and target.y >= parent.y and target.x == parent.x
- return true if parent.direction == 4 and target.x <= parent.x and target.y == parent.y
- return true if parent.direction == 6 and target.x >= parent.x and target.y == parent.y
- return true if parent.direction == 8 and target.y <= parent.y and target.x == parent.x
- return false
- end
- def in_front?(parent, target)
- return true if parent.direction == 2 and parent.x == target.x and (parent.y+1) == target.y
- return true if parent.direction == 4 and (parent.x-1) == target.x and parent.y == target.y
- return true if parent.direction == 6 and (parent.x+1) == target.x and parent.y == target.y
- return true if parent.direction == 8 and parent.x == target.x and (parent.y-1) == target.y
- return true if parent.x == target.x and parent.y == target.y
- return false
- end
- def in_behind?(parent, target)
- return true if target.direction == 2 and parent.x == target.x and parent.y < target.y
- return true if target.direction == 4 and parent.x > target.x and parent.y == target.y
- return true if target.direction == 6 and parent.x < target.x and parent.y == target.y
- return true if target.direction == 8 and parent.x == target.x and parent.y > target.y
- return false
- end
- def in_beside?(parent, target)
- return true if target.direction == 2 and parent.direction == 4 and target.x == (parent.x-1) and target.y == parent.y
- return true if target.direction == 2 and parent.direction == 6 and target.x == (parent.x+1) and target.y == parent.y
- return true if target.direction == 4 and parent.direction == 2 and target.x == parent.x and target.y == (parent.y+1)
- return true if target.direction == 4 and parent.direction == 8 and target.x == parent.x and target.y == (parent.y-1)
- return true if target.direction == 6 and parent.direction == 2 and target.x == parent.x and target.y == (parent.y+1)
- return true if target.direction == 6 and parent.direction == 8 and target.x == parent.x and target.y == (parent.y-1)
- return true if target.direction == 8 and parent.direction == 4 and target.x == (parent.x-1) and target.y == parent.y
- return true if target.direction == 8 and parent.direction == 6 and target.x == (parent.x+1) and target.y == parent.y
- return false
- end
- def face_to_face?(parent, target)
- return true if parent.direction == 2 and target.direction == 8
- return true if parent.direction == 4 and target.direction == 6
- return true if parent.direction == 6 and target.direction == 4
- return true if parent.direction == 8 and target.direction == 2
- return false
- end
- def is_passable?(object, dir)
- x = dir == 4 ? -1 : dir == 6 ? 1 : 0
- y = dir == 2 ? 1 : dir == 8 ? -1 : 0
- return false if !$game_map.passable?(object.x+x, object.y+y)
- return true
- end
- def events_xy(object, dir)
- x = dir == 4 ? -1 : dir == 6 ? 1 : 0
- y = dir == 2 ? 1 : dir == 8 ? -1 : 0
- for i in $game_map.events.values
- return true if i.x == object.x+x and i.y == object.y+y and !i.through
- end
- return false
- end
- def move_toward(target)
- sx = distance_x_from(target)
- sy = distance_y_from(target)
- if sx != 0 or sy != 0
- if sx.abs > sy.abs
- sx > 0 ? move_left : move_right
- if @move_failed and sy != 0
- sy > 0 ? move_up : move_down
- end
- else
- sy > 0 ? move_up : move_down
- if @move_failed and sx != 0
- sx > 0 ? move_left : move_right
- end
- end
- end
- end
- def move_type_toward(target)
- case rand(6)
- when 0..3; move_toward(target)
- when 4; move_random
- when 5; move_forward
- end
- end
- def turn_toward(target)
- sx = distance_x_from(target)
- sy = distance_y_from(target)
- if sx.abs > sy.abs
- sx > 0 ? turn_left : turn_right
- elsif sx.abs < sy.abs
- sy > 0 ? turn_up : turn_down
- end
- end
- def follow(x, y)
- sx = distance_x(x)
- sy = distance_y(y)
- if sx != 0 or sy != 0
- if sx.abs > sy.abs
- sx > 0 ? move_left : move_right
- if @move_failed and sy != 0
- sy > 0 ? move_up : move_down
- end
- else
- sy > 0 ? move_up : move_down
- if @move_failed and sx != 0
- sx > 0 ? move_left : move_right
- end
- end
- end
- end
- def look_at(x, y)
- sx = distance_x(x)
- sy = distance_y(y)
- if sx.abs > sy.abs
- sx > 0 ? turn_left : turn_right
- elsif sx.abs < sy.abs
- sy > 0 ? turn_up : turn_down
- end
- end
- def distance_x_from(target)
- sx = @x - target.x
- if $game_map.loop_horizontal?
- if sx.abs > $game_map.width / 2
- sx -= $game_map.width
- end
- end
- return sx
- end
- def distance_y_from(target)
- sy = @y - target.y
- if $game_map.loop_vertical?
- if sy.abs > $game_map.height / 2
- sy -= $game_map.height
- end
- end
- return sy
- end
- def distance_x(x)
- sx = @x - x
- if $game_map.loop_horizontal?
- if sx.abs > $game_map.width / 2
- sx -= $game_map.width
- end
- end
- return sx
- end
- def distance_y(y)
- sy = @y - y
- if $game_map.loop_vertical?
- if sy.abs > $game_map.height / 2
- sy -= $game_map.height
- end
- end
- return sy
- end
- end
- #------------------------------------------------------------------------------
- class Game_Event < Game_Character
- attr_reader :id
- def check_value(comment)
- return 0 if @list.nil? or @list.size <= 0
- for item in @list
- if item.code == 108 or item.code == 408
- if item.parameters[0] =~ /#{comment}[ ]?(\d+)?/
- return $1.to_i
- end
- end
- end
- return 0
- end
- def check_command(comment)
- return nil if @list.nil? or @list.size <= 0
- for item in @list
- next unless item.code == 108 or item.code == 408
- if item.parameters[0] =~ /#{comment} (.*)/
- return $1.to_s
- end
- end
- return nil
- end
- def check_comment(comment)
- return false if @list.nil? or @list.size <= 0
- for item in @list
- if item.code == 108 or item.code == 408
- if item.parameters[0].include?(comment)
- return true
- end
- end
- end
- return false
- end
- end
- #------------------------------------------------------------------------------
- class Game_Interpreter
- attr_reader :original_event_id
- end
- Requiem ABS 8
- #==============================================================================
- # Requiem ABS Version 8
- #==============================================================================
- #------------------------------------------------------------------------------
- # Credits: Vlad | Email: [email protected]
- #------------------------------------------------------------------------------
- #==============================================================================
- if Requiem_Masterpiece.enabled?("Requiem Extended Movements")
- #------------------------------------------------------------------------------
- Requiem_Masterpiece.register("Requiem ABS", 8.0, "06/20/2009")
- #------------------------------------------------------------------------------
- class Requiem_ABS
- attr_reader :attack_key1
- attr_reader :attack_key2
- attr_reader :skill_keys
- attr_reader :item_keys
- attr_reader :animations_divide
- attr_reader :memorized_text
- attr_reader :allow_weapons_graphics
- attr_reader :allow_shields_graphics
- attr_reader :allow_attack_with_shield
- attr_reader :allow_combo_damage
- attr_reader :levelup_animation
- attr_reader :recovery_when_levelup
- attr_reader :gold_drop_icon_index
- attr_reader :gold_drop_rate
- attr_reader :drop_duration_time
- attr_reader :show_reward
- attr_reader :drop_se
- attr_reader :auto_exp_e_gold
- attr_reader :auto_exp_rate
- attr_reader :auto_gold_rate
- attr_reader :damage_properties
- attr_reader :through_drop
- attr_reader :divide_exp
- attr_reader :change_group_order
- attr_reader :next_actor_if_dead
- attr_reader :trasfer_when_defending
- def initialize
- @attack_key1 = param("Attack_Key1")
- @attack_key2 = param("Attack_Key2")
- @skill_keys = param("Skills_Keys")
- @item_keys = param("Items_Keys")
- @animations_divide = param("Animations_Divide")
- @memorized_text = param("Memorized_Text")
- @allow_weapons_graphics = param("Allow_Weapons_Graphics")
- @allow_shields_graphics = param("Allow_Shields_Graphics")
- @allow_attack_with_shield = param("Allow_attack_with_shield")
- @allow_combo_damage = param("Allow_Combo_Damage")
- @levelup_animation = param("LevelUp_Animation")
- @recovery_when_levelup = param("Recovery_When_LevelUp")
- @gold_drop_icon_index = param("Gold_Drop_Icon_Index")
- @gold_drop_rate = param("Gold_Drop_Rate")
- @drop_duration_time = param("Drop_Duration_Time")
- @show_reward = param("Show_Reward")
- @drop_se = [param("Gold_Drop_SE"), param("Item_Drop_SE")]
- @auto_exp_e_gold = param("Auto_EXP_Gold")
- @auto_exp_rate = param("Auto_EXP_Rate")
- @auto_gold_rate = param("Auto_Gold_Rate")
- @through_drop = param("Through_Drop")
- @trasfer_when_defending = param("Trasfer_When_Defending")
- @divide_exp = param("Divide_EXP")
- @change_group_order = param("Change_Group_Order")
- @next_actor_if_dead = param("Next_Actor_If_Dead")
- @damage_properties = {}
- @damage_properties["Damage"] = ["Monotype Corsiva", 24, false, false]
- @damage_properties["Hits"] = ["Times New Roman", 26, true, true]
- @damage_properties["Texts"] = ["Miss", "Critical", "Combo", "Guard", "Level Up", "Hits", "Reflect"]
- @damage_properties["Colors"] = [Color.new(255,255,255), Color.new(125,200,120),
- Color.new(255,255,128), Color.new(245,150,120), Color.new(210,160,210), Color.new(180,165,215)]
- end
- def param(i)
- conf = File.read("Requiem/ABSConfig.ini").split("\n")
- conf.find_all { |data| return eval(conf[conf.index(data)]) if data.include?(i) }
- end
- end
- #------------------------------------------------------------------------------
- # Module RPG
- #------------------------------------------------------------------------------
- module RPG
- class State
- def animation_id
- self.note.each_line { |line|
- return line.gsub('Animation = ', '').chomp.to_i if line.include?('Animation = ')
- }
- return 0
- end
- def walk_slower?
- self.note.each_line { |line| return true if line.include?("Walk Slower") }
- return false
- end
- def walk_faster?
- self.note.each_line { |line| return true if line.include?("Walk Faster") }
- return false
- end
- def dont_walk?
- self.note.each_line { |line| return true if line.include?("Don't Walk") }
- return false
- end
- def confusion?
- self.note.each_line { |line| return true if line.include?("Confusion") }
- return false
- end
- def duration
- self.note.each_line { |line|
- return line.gsub('Duration = ', '').chomp.to_i if line.include?('Duration = ')
- }
- return 300
- end
- end
- class BaseItem
- def ranged?
- self.note.each_line { |line| return true if line.include?("Ranged") }
- return false
- end
- def explosive?
- self.note.each_line { |line| return true if line.include?("Explosive") }
- return false
- end
- def bomb?
- self.note.each_line { |line| return true if line.include?("Bomb") }
- return false
- end
- def graphic
- self.note.each_line { |line|
- return line.gsub!('Graphic = ', '').chomp if line.include?('Graphic = ')
- }
- return ""
- end
- def index
- self.note.each_line { |line|
- return line.gsub('Index = ', '').chomp.to_i if line.include?('Index = ')
- }
- return 0
- end
- def move_speed
- self.note.each_line { |line|
- return line.gsub('Speed = ', '').chomp.to_i if line.include?('Speed = ')
- }
- return 4
- end
- def range
- self.note.each_line { |line|
- return line.gsub('Range = ', '').chomp.to_i if line.include?('Range = ')
- }
- return 5
- end
- def delay
- self.note.each_line { |line|
- return line.gsub('Delay = ', '').chomp.to_i if line.include?('Delay = ')
- }
- return 60
- end
- def area
- self.note.each_line { |line|
- return line.gsub('Area = ', '').chomp.to_i if line.include?('Area = ')
- }
- return 3
- end
- def shot_se
- self.note.each_line { |line|
- return line.gsub('Shot SE = ', '').chomp.to_s if line.include?('Shot SE = ')
- }
- return nil
- end
- def combo_hits
- self.note.each_line { |line|
- return line.gsub('Combo Hits = ', '').chomp.to_i if line.include?('Combo Hits = ')
- }
- return 5
- end
- def combo_rate
- self.note.each_line { |line|
- return line.gsub('Combo Rate = ', '').chomp.to_i if line.include?('Combo Rate = ')
- }
- return 75
- end
- def ammo1
- self.note.each_line { |line|
- return $data_items[line.gsub('Ammo1 = ', '').chomp.to_i] if line.include?('Ammo1 = ')
- }
- return nil
- end
- def ammo2
- self.note.each_line { |line|
- return $data_items[line.gsub('Ammo2 = ', '').chomp.to_i] if line.include?('Ammo2 = ')
- }
- return nil
- end
- def defense_rate
- self.note.each_line { |line|
- return line.gsub('Defense Rate = ', '').chomp.to_i if line.include?('Defense Rate = ')
- }
- return 50
- end
- def reflect_rate
- self.note.each_line { |line|
- return line.gsub('Reflect Rate = ', '').chomp.to_i if line.include?('Reflect Rate = ')
- }
- return 0
- end
- def path
- self.note.each_line { |line|
- return line.gsub!('Path = ', '').chomp if line.include?('Path = ')
- }
- return "Line"
- end
- end
- end
- #------------------------------------------------------------------------------
- # Game Battler
- #------------------------------------------------------------------------------
- class Game_Battler
- attr_accessor :damage
- attr_accessor :critical
- attr_accessor :combo
- attr_accessor :reflect
- attr_accessor :state_turns
- attr_accessor :defending
- attr_accessor :piece
- alias requiem_abs_gbattler_make_obj_damage_value make_obj_damage_value
- def attack_effect(attacker)
- clear_action_results
- unless attack_effective?(attacker)
- @skipped = true
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- return
- end
- if rand(100) >= calc_hit(attacker)
- @missed = true
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- return
- end
- if rand(100) < calc_eva(attacker)
- @evaded = true
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- return
- end
- make_attack_damage_value(attacker)
- execute_damage(attacker)
- if @hp_damage == 0
- return
- end
- apply_state_changes(attacker)
- end
- def skill_effect(user, skill)
- clear_action_results
- unless skill_effective?(user, skill)
- @skipped = true
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- return
- end
- if rand(100) >= calc_hit(user, skill)
- @missed = true
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- return
- end
- if rand(100) < calc_eva(user, skill)
- @evaded = true
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- return
- end
- make_obj_damage_value(user, skill)
- make_obj_absorb_effect(user, skill)
- execute_damage(user)
- if skill.physical_attack and @hp_damage == 0
- return
- end
- apply_state_changes(skill)
- end
- def item_effect(user, item)
- clear_action_results
- unless item_effective?(user, item)
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- @skipped = true
- return
- end
- if rand(100) >= calc_hit(user, item)
- @missed = true
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- return
- end
- if rand(100) < calc_eva(user, item)
- @evaded = true
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- return
- end
- hp_recovery = calc_hp_recovery(user, item)
- mp_recovery = calc_mp_recovery(user, item)
- make_obj_damage_value(user, item)
- @hp_damage -= hp_recovery
- @mp_damage -= mp_recovery
- make_obj_absorb_effect(user, item)
- execute_damage(user)
- item_growth_effect(user, item)
- if item.physical_attack and @hp_damage == 0
- return
- end
- apply_state_changes(item)
- end
- def execute_damage(user)
- if @hp_damage == 0
- @damage = $Requiem_ABS.damage_properties["Texts"][0]
- elsif defending?(user)
- @damage = $Requiem_ABS.damage_properties["Texts"][3]
- return
- else
- if user.reflect
- user.damage = (@hp_damage/4 <= 0 ? 1 : @hp_damage/4)
- else
- @damage = @hp_damage
- end
- end
- if @hp_damage > 0
- remove_states_shock
- end
- if user.reflect
- user.hp -= (@hp_damage/4 <= 0 ? 1 : @hp_damage/4)
- user.mp -= (@mp_damage/4 <= 0 ? 1 : @mp_damage/4)
- else
- self.hp -= @hp_damage
- self.mp -= @mp_damage
- end
- if @absorbed
- user.hp += @hp_damage
- user.mp += @mp_damage
- end
- end
- def make_attack_damage_value(attacker)
- damage = attacker.atk * 4 - self.def * 2
- damage = 0 if damage < 0
- damage *= elements_max_rate(attacker.element_set)
- damage /= 100
- if damage == 0
- damage = rand(2)
- elsif damage > 0
- attacker.reflect = (rand(100) < reflect_rate)
- @critical = (rand(100) < attacker.cri)
- @critical = false if prevent_critical or @reflect
- damage *= 2 if @critical
- calculate_combo(attacker)
- damage *= 3 if @combo
- damage = apply_variance(damage, 20)
- damage = apply_guard(damage)
- @hp_damage = damage
- end
- end
- def make_obj_damage_value(user, obj)
- requiem_abs_gbattler_make_obj_damage_value(user, obj)
- user.reflect = (rand(100) < reflect_rate)
- end
- def calculate_combo(attacker)
- if attacker.is_a?(Game_Actor) and $Requiem_ABS.allow_combo_damage
- if $game_player.right_attack_on and attacker.weapons[0] != nil
- hits = attacker.weapons[0].combo_hits
- rate = attacker.weapons[0].combo_rate
- elsif $game_player.left_attack_on and attacker.weapons[1] != nil
- hits = attacker.weapons[1].combo_hits
- rate = attacker.weapons[1].combo_rate
- elsif $game_player.right_attack_on and attacker.weapons[0].nil?
- hits = 5
- rate = 75
- elsif $game_player.left_attack_on and attacker.weapons[1].nil?
- hits = 5
- rate = 75
- else
- hits = rate = 0
- end
- @combo = ($game_player.hits >= hits and rand(100) <= rate)
- @combo = false if @reflect
- else
- @combo = false
- end
- end
- def defending?(user)
- if self.is_a?(Game_Actor) and @defending and equips[1].is_a?(RPG::Armor) and
- rand(100) <= equips[1].defense_rate and @piece != nil and user.piece.face_to_face?(user.piece, @piece)
- return true
- elsif self.is_a?(Game_Monster) and @defending and rand(100) <= self.defense_rate and
- @piece != nil and user.piece.face_to_face?(user.piece, @piece)
- return true
- elsif self.is_a?(Game_Enemy) and @defending and rand(100) <= self.defense_rate and
- @piece != nil and user.piece.face_to_face?(user.piece, @piece)
- return true
- end
- return false
- end
- def remove_state(state_id)
- return unless state?(state_id)
- @states.delete(state_id)
- @state_turns.delete(state_id)
- end
- end
- #------------------------------------------------------------------------------
- # Game Actor
- #------------------------------------------------------------------------------
- class Game_Actor < Game_Battler
- attr_accessor :skill_hotkeys
- attr_accessor :item_hotkeys
- alias requiem_abs_gactor_initialize initialize
- def initialize(actor_id)
- requiem_abs_gactor_initialize(actor_id)
- @skill_hotkeys = {}
- for s in $Requiem_ABS.skill_keys
- if s.is_a?(Numeric)
- @skill_hotkeys[Input::Numberkeys[s]] = 0
- elsif s == "Enter"
- @skill_hotkeys[Input::Enter] = 0
- else
- @skill_hotkeys[Input::Letters[s]] = 0
- end
- end
- @item_hotkeys = {}
- for i in $Requiem_ABS.item_keys
- if i.is_a?(Numeric)
- @item_hotkeys[Input::Numberkeys[i]] = 0
- elsif s == "Enter"
- @item_hotkeys[Input::Enter] = 0
- else
- @item_hotkeys[Input::Letters[i]] = 0
- end
- end
- end
- def display_level_up(new_skills)
- $game_system.battle_end_me.play
- $game_player.animation_id = $Requiem_ABS.levelup_animation
- @damage = $Requiem_ABS.damage_properties[19]
- if $Requiem_ABS.recovery_when_levelup
- $game_player.actor.hp = $game_player.actor.maxhp
- $game_player.actor.mp = $game_player.actor.maxmp
- end
- end
- def atk_animation_id2
- if two_swords_style
- return weapons[1].nil? ? 1 : weapons[1].animation_id
- else
- return 1
- end
- end
- def reflect_rate
- r = 0
- for i in armors
- next if i.nil?
- r += i.reflect_rate
- end
- return r
- end
- def current_exp
- return (@exp - @exp_list[@level])
- end
- def next_exp
- exp = (@exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0)
- return exp
- end
- end
- #------------------------------------------------------------------------------
- # Game Enemy
- #------------------------------------------------------------------------------
- class Game_Enemy < Game_Battler
- def character_name
- enemy.note.each_line { |line|
- return line.gsub('Char Name = ', '').chomp if line.include?('Char Name = ')
- }
- return ""
- end
- def character_index
- enemy.note.each_line { |line|
- return line.gsub('Char Index = ', '').chomp.to_i if line.include?('Char Index = ')
- }
- return 0
- end
- def atk_animation_id
- enemy.note.each_line { |line|
- return line.gsub('Attack Animation = ', '').chomp.to_i if line.include?('Attack Animation = ')
- }
- return 1
- end
- def die_animation_id
- enemy.note.each_line { |line|
- return line.gsub('Die Animation = ', '').chomp.to_i if line.include?('Die Animation = ')
- }
- return 0
- end
- def die_se
- enemy.note.each_line { |line|
- return line.gsub('Die SE = ', '').chomp.to_s if line.include?('Die SE = ')
- }
- return nil
- end
- def weapon_icon
- enemy.note.each_line { |line|
- return line.gsub('Weapon Icon = ', '').chomp.to_i if line.include?('Weapon Icon = ')
- }
- return 0
- end
- def shield_icon
- enemy.note.each_line { |line|
- return line.gsub('Shield Icon = ', '').chomp.to_i if line.include?('Shield Icon = ')
- }
- return 0
- end
- def defense_rate
- enemy.note.each_line { |line|
- return line.gsub('Defense Rate = ', '').chomp.to_i if line.include?('Defense Rate = ')
- }
- return 50
- end
- def reflect_rate
- enemy.note.each_line { |line|
- return line.gsub('Reflect Rate = ', '').chomp.to_i if line.include?('Reflect Rate = ')
- }
- return 0
- end
- def move_speed
- enemy.note.each_line { |line|
- return line.gsub('Move Speed = ', '').chomp.to_i if line.include?('Move Speed = ')
- }
- return 3
- end
- def follow_range
- enemy.note.each_line { |line|
- return line.gsub('Follow Range = ', '').chomp.to_i if line.include?('Follow Range = ')
- }
- return 3
- end
- def move_route
- enemy.note.each_line { |line|
- return line.gsub('Move Route = ', '').chomp.to_i if line.include?('Move Route = ')
- }
- return 1
- end
- def respawn
- enemy.note.each_line { |line|
- return line.gsub('Respawn = ', '').chomp.to_i if line.include?('Respawn = ')
- }
- return 0
- end
- end
- #------------------------------------------------------------------------------
- # Game Party
- #------------------------------------------------------------------------------
- class Game_Party < Game_Unit
- alias requiem_sbabs_gparty_remove_actor remove_actor
- alias requiem_sbabs_gparty_setup_starting_members setup_starting_members
- def setup_starting_members
- requiem_sbabs_gparty_setup_starting_members
- for i in [email protected]
- next if @actors[i].nil?
- $game_allies[i] = Game_Ally.new(i)
- end
- end
- def add_actor(actor_id)
- if @actors.size < MAX_MEMBERS and not @actors.include?(actor_id)
- @actors.push(actor_id)
- $game_player.refresh
- id = @actors.size-1
- if @actors.size > 1
- $game_allies[id] = Game_Ally.new(id)
- $game_allies[id].moveto($game_player.x, $game_player.y)
- $game_allies[id].move_random
- end
- end
- end
- def remove_actor(actor_id)
- for ally in $game_allies
- next if ally.nil?
- ally.destroy = true if actor_id == ally.actor.id
- end
- $scene.refresh_sprites if $scene.is_a?(Scene_Map)
- requiem_sbabs_gparty_remove_actor(actor_id)
- end
- def change_group_order
- for ally in $game_allies
- next if ally.nil? or ally.map_id == $game_map.map_id
- return
- end
- return if members.size <= 1
- actor = @actors[0]
- @actors.delete(actor)
- @actors.compact
- if all_dead?
- @actors.insert(0, actor)
- return
- end
- @actors.push(actor)
- for a in members
- next if a.nil?
- if a.dead?
- ally = a
- @actors.delete(a.id)
- @actors.push(a.id)
- else
- for i in $game_allies
- next if i.nil? or i.actor != a
- ally = i
- end
- break
- end
- end
- allies = []
- for a in $game_allies
- next if a .nil?
- allies.push(a)
- end
- allies.delete(ally)
- allies.push($game_player)
- allies.compact
- for i in 1...members.size
- next if members[i].nil?
- $game_allies[i] = Game_Ally.new(i)
- $game_allies[i].refresh
- $game_allies[i].moveto(allies[i-1].x, allies[i-1].y)
- if !allies[i-1].is_a?(Game_Player)
- $game_allies[i].map_id = allies[i-1].map_id
- else
- $game_allies[i].map_id = $game_map.map_id
- end
- $game_allies[i].direction = allies[i-1].direction
- end
- $game_player.moveto(ally.x, ally.y)
- $game_player.refresh
- $scene.refresh_sprites if $scene.is_a?(Scene_Map)
- end
- end
- #------------------------------------------------------------------------------
- # Game Map
- #------------------------------------------------------------------------------
- class Game_Map
- alias requiem_abs_gmap_passable passable?
- alias requiem_abs_gmap_setup_events setup_events
- def setup_events
- requiem_abs_gmap_setup_events
- $game_monsters.clear
- for area in $data_areas.values
- next unless area.map_id == @map_id
- for i in area.encounter_list
- for m in $data_troops[i].members
- $game_monsters.push(Game_Monster.new($game_monsters.size, m.enemy_id, m.id, area))
- end
- end
- end
- for i in encounter_list
- for m in $data_troops[i].members
- $game_monsters.push(Game_Monster.new($game_monsters.size, m.enemy_id, m.id, nil))
- end
- end
- end
- def range_passable?(x, y, flag = 0x01)
- return true if @passages[@map.data[x, y, 0]] == 9
- passable?(x, y, flag)
- end
- def player_passable?(x, y, flag = 0x01)
- all_passable?(x, y, flag)
- end
- def passable?(x, y, flag = 0x01)
- for ally in $game_allies
- next if ally.nil? or ally.character_name == ""
- return false if ally.x == x and ally.y == y
- end
- all_passable?(x, y, flag)
- end
- def all_passable?(x, y, flag = 0x01)
- for monster in $game_monsters
- next if monster.nil?
- next if monster.actor.dead?
- return false if monster.x == x and monster.y == y
- end
- for drop in $game_drop
- next if drop.nil?
- next if $Requiem_ABS.through_drop
- return false if drop.x == x and drop.y == y
- end
- for event in events_xy(x, y)
- next if event.tile_id == 0
- next if event.priority_type > 0
- next if event.through
- pass = @passages[event.tile_id]
- next if pass & 0x10 == 0x10
- return true if pass & flag == 0x00
- return false if pass & flag == flag
- end
- for i in [2, 1, 0]
- tile_id = @map.data[x, y, i]
- return false if tile_id == nil
- pass = @passages[tile_id]
- next if pass & 0x10 == 0x10
- return true if pass & flag == 0x00
- return false if pass & flag == flag
- end
- return false
- end
- def update_events
- for event in @events.values
- next unless in_range?(event) or event.trigger == 3 or event.trigger == 4
- event.update
- end
- for common_event in @common_events.values
- common_event.update
- end
- end
- def in_range?(object)
- return true if object.is_a?(Game_Event) and object.check_comment("Force Update")
- return false if object.real_x < (@display_x-Graphics.width)
- return false if object.real_x > (@display_x+(Graphics.width*10))
- return false if object.real_y < (@display_y-Graphics.width)
- return false if object.real_y > (@display_y+(Graphics.height*10))
- return true
- end
- end
- #------------------------------------------------------------------------------
- # Game Character
- #------------------------------------------------------------------------------
- class Game_Character
- alias requiem_abs_gchar_initialize initialize
- alias requiem_abs_gchar_update update
- attr_accessor :actor
- attr_accessor :target
- attr_accessor :ani_time
- attr_accessor :state_time
- attr_accessor :weapon1_attack_time
- attr_accessor :weapon2_attack_time
- attr_accessor :assigned_skill
- attr_accessor :skill_attack_time
- attr_accessor :item_attack_time
- attr_accessor :recovery_time
- attr_accessor :right_attack_on
- attr_accessor :left_attack_on
- attr_accessor :freeze
- attr_accessor :anime_attack
- attr_accessor :lock_target
- attr_accessor :original_move_speed
- def initialize
- requiem_abs_gchar_initialize
- @weapon1_attack_time = 0
- @weapon2_attack_time = 0
- @skill_attack_time = 0
- @item_attack_time = 0
- @recovery_time = 0
- @assigned_skill = nil
- @ani_time = 0
- @anime_attack = 0
- @state_time = 0
- @original_move_speed = 0
- @actor = nil
- @target = nil
- @freeze = false
- @right_attack_on = false
- @left_attack_on = false
- @lock_target = false
- end
- def update
- requiem_abs_gchar_update
- return if $game_party.members.size <= 0
- decrease_counters
- states_effects
- end
- def decrease_counters
- @ani_time -= 1 if @ani_time > 0
- @weapon1_attack_time -= 1 if @weapon1_attack_time > 0
- @weapon2_attack_time -= 1 if @weapon2_attack_time > 0
- @skill_attack_time -= 1 if @skill_attack_time > 0
- @item_attack_time -= 1 if @item_attack_time > 0
- @recovery_time -= 1 if @recovery_time > 0
- @anime_attack -= 1 if @anime_attack > 0
- @right_attack_on = @left_attack_on = false if @anime_attack <= 0
- end
- def states_effects
- if self.is_a?(Game_Event) and self.in_battle or self.is_a?(Game_Player) or self.is_a?(Game_Ally)
- for state in @actor.states
- next if state.nil?
- if @state_time <= state.duration
- @state_time += 1
- @freeze = true if state.dont_walk?
- @move_speed = 2 if state.walk_slower?
- @move_speed = 5 if state.walk_faster?
- if self.is_a?(Game_Event) and @actor.slip_damage?
- @actor.slip_damage_effect if Graphics.frame_count % 60 <= 0
- end
- elsif @state_time > state.duration
- @freeze = false if state.dont_walk?
- @move_speed = @original_move_speed if state.walk_slower?
- @move_speed = @original_move_speed if state.walk_faster?
- @actor.remove_state(state.id)
- @state_time = 0
- end
- end
- end
- end
- end
- #------------------------------------------------------------------------------
- # Game Event
- #------------------------------------------------------------------------------
- class Game_Event < Game_Character
- attr_reader :in_battle
- attr_reader :kill_with_weapon
- attr_reader :kill_with_skill
- attr_reader :kill_with_item
- attr_reader :respawn
- attr_reader :boss
- attr_reader :object
- attr_reader :puzzle
- alias requiem_abs_gevent_initialize initialize
- alias requiem_abs_gevent_setup setup
- alias requiem_abs_gevent_update update
- alias requiem_abs_gevent_refresh refresh
- def initialize(map_id, event)
- @enemy_id = 0
- @respawn = nil
- @in_battle = false
- @boss = false
- @object = false
- @puzzle = false
- requiem_abs_gevent_initialize(map_id, event)
- end
- def setup(new_page)
- requiem_abs_gevent_setup(new_page)
- self.original_move_speed = @move_speed
- end
- def update
- requiem_abs_gevent_update
- @respawn -= 1 if !@in_battle and self.actor.nil? and @respawn != nil and @respawn > 0
- if @in_battle and self.actor != nil and !self.actor.dead?
- make_attack
- elsif @in_battle and self.actor != nil and self.actor.dead?
- kill_enemy
- erasing
- elsif !@in_battle and self.actor.nil? and @respawn != nil and @respawn <= 0
- @erased = @starting = false
- refresh
- end
- end
- def refresh
- requiem_abs_gevent_refresh
- @enemy_id = check_value("Enemy")
- @erase = check_comment("Die Erase")
- @self_switch_a = check_comment("Die Self Switch A")
- @self_switch_b = check_comment("Die Self Switch B")
- @self_switch_c = check_comment("Die Self Switch C")
- @self_switch_d = check_comment("Die Self Switch D")
- @switch = check_value("Die Switch")
- @variable = check_value("Die Variable")
- @kill_with_weapon = check_value("Kill With Weapon")
- @kill_with_skill = check_value("Kill With Skill")
- @kill_with_item = check_value("Kill With Item")
- @boss = check_comment("Boss")
- @object = check_comment("Object")
- @puzzle = check_comment("Puzzle")
- if @enemy_id > 0 and !@in_battle
- self.actor = Game_Enemy.new(0, @enemy_id)
- self.actor.recover_all
- @respawn = self.actor.respawn
- @respawn = nil if @respawn <= 0
- @follow_range = self.actor.follow_range
- self.actor.piece = self
- self.target = $game_player
- self.lock_target = false
- @in_battle = true
- elsif @enemy_id <= 0
- @in_battle = false
- end
- @opacity = 255
- @blend_type = 0
- end
- def make_attack
- return if $game_map.interpreter.running?
- return if $game_player.in_vehicle?
- for action in $data_enemies[@enemy_id].actions
- next unless self.actor.conditions_met?(action)
- next unless rand(11) < action.rating
- next if self.weapon1_attack_time > 0
- case action.kind
- when 0
- case action.basic
- when 0
- attack_normal
- when 1
- self.actor.defending = true
- end
- when 1
- self.assigned_skill = $data_skills[action.skill_id]
- case self.assigned_skill.scope
- when 1..7
- if self.assigned_skill.ranged?
- if in_direction?(self, $game_player) and in_range?(self, $game_player, self.assigned_skill.range)
- skill_attack_range
- elsif action.rating == 10
- skill_attack_range
- else
- for ally in $game_allies
- next if ally.nil?
- next unless in_direction?(self, ally) and in_range?(self, ally, self.assigned_skill.range)
- skill_attack_range
- end
- end
- elsif self.assigned_skill.explosive?
- if in_direction?(self, $game_player) and in_range?(self, $game_player, self.assigned_skill.range)
- skill_explode_range
- elsif action.rating == 10
- skill_explode_range
- else
- for ally in $game_allies
- next if ally.nil?
- next unless in_direction?(self, ally) and in_range?(self, ally, self.assigned_skill.range)
- skill_explode_range
- end
- end
- else
- skill_attack_normal
- end
- when 7..12
- skill_recover
- end
- end
- end
- end
- def attack_normal
- for ally in $game_allies
- next if ally.nil?
- next unless in_front?(self, ally)
- self.anime_attack = 20
- ally.animation_id = self.actor.atk_animation_id
- ally.actor.attack_effect(self.actor)
- ally.jump(0,0)
- self.weapon1_attack_time = 90
- return
- end
- return if $game_player.actor.nil?
- return unless in_front?(self, $game_player)
- self.anime_attack = 20
- $game_player.animation_id = self.actor.atk_animation_id
- $game_player.actor.attack_effect(self.actor)
- $game_player.jump(0,0)
- self.weapon1_attack_time = 90
- end
- def skill_attack_normal
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- for ally in $game_allies
- next if ally.nil?
- next unless in_front?(self, ally)
- ally.animation_id = self.assigned_skill.animation_id
- ally.actor.skill_effect(self.actor, self.assigned_skill)
- ally.jump(0,0)
- self.weapon1_attack_time = 90
- return
- end
- return if $game_player.actor.nil?
- return unless in_front?(self, $game_player)
- $game_player.animation_id = self.assigned_skill.animation_id
- $game_player.actor.skill_effect(self.actor, self.assigned_skill)
- $game_player.jump(0,0)
- self.weapon1_attack_time = 90
- end
- def skill_attack_range
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
- self.weapon1_attack_time = self.assigned_skill.delay
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- end
- def skill_explode_range
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
- self.weapon1_attack_time = self.assigned_skill.delay
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- end
- def skill_recover
- if self.actor.mp >= self.assigned_skill.mp_cost and self.actor.hp <= (self.actor.maxhp*25/100)
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- @animation_id = self.assigned_skill.animation_id
- self.actor.skill_effect(self.actor, self.assigned_skill)
- self.weapon1_attack_time = 90
- end
- for event in $game_map.events.values
- if event.in_battle and in_range?(self, event, 3)
- if self.actor.mp >= self.assigned_skill.mp_cost and event.actor.hp <= (event.actor.maxhp*25/100)
- self.actor.mp -= self.assigned_skill.mp_cost
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- event.animation_id = self.assigned_skill.animation_id
- event.actor.skill_effect(self.actor, self.assigned_skill)
- self.weapon1_attack_time = 90
- end
- end
- end
- end
- def erasing
- return if @puzzle
- @blend_type = 2
- @opacity -= 5
- end
- def kill_enemy
- dying unless @killed
- return if @opacity > 0 and !@puzzle
- self.actor = nil
- desactive_enemy
- @killed = false
- $game_player.hits = 0
- @in_battle = false
- for ally in $game_allies
- next if ally.nil? or ally.actor.dead?
- ally.target = $game_player
- ally.lock_target = false
- end
- end
- def dying
- if $Requiem_ABS.auto_exp_e_gold and !@puzzle and !@object
- exp = (self.actor.maxhp+self.actor.maxmp+self.actor.atk+self.actor.def+self.actor.spi+
- self.actor.agi+self.actor.hit+self.actor.eva) * $Requiem_ABS.auto_exp_rate / 100
- else
- exp = self.actor.exp
- end
- if $Requiem_ABS.divide_exp
- x = (exp/$game_party.members.size)
- for i in $game_party.members
- i.gain_exp(x, true)
- end
- else
- self.target.actor.gain_exp(exp, true)
- end
- make_drop
- unless @puzzle
- @animation_id = self.actor.die_animation_id if self.actor.die_animation_id > 0
- if self.actor.die_se != nil
- RPG::SE.new(self.actor.die_se).play
- else
- Sound.play_enemy_collapse
- end
- end
- @killed = true
- end
- def desactive_enemy
- if @erase
- erase
- elsif @self_switch_a
- key = [$game_map.map_id, self.id, "A"]
- $game_self_switches[key] = !$game_self_switches[key]
- elsif @self_switch_b
- key = [$game_map.map_id, self.id, "B"]
- $game_self_switches[key] = !$game_self_switches[key]
- elsif @self_switch_c
- key = [$game_map.map_id, self.id, "C"]
- $game_self_switches[key] = !$game_self_switches[key]
- elsif @self_switch_d
- key = [$game_map.map_id, self.id, "D"]
- $game_self_switches[key] = !$game_self_switches[key]
- elsif @switch > 0
- $game_switches[@switch] = !$game_switches[@switch]
- elsif @variable > 0
- $game_variables[@variable] += 1
- end
- $game_map.need_refresh = true
- end
- def make_drop
- droped_items = []
- for i in [self.actor.drop_item1, self.actor.drop_item2]
- next if i.kind <= 0
- next if rand(i.denominator) != 0
- if i.kind == 1
- droped_items.push($data_items[i.item_id])
- elsif i.kind == 2
- droped_items.push($data_weapons[i.weapon_id])
- elsif i.kind == 3
- droped_items.push($data_armors[i.armor_id])
- end
- end
- for t in droped_items
- next if t.nil?
- $game_drop.push(Game_Drop.new(self, t.icon_index, t , 0))
- end
- if $Requiem_ABS.auto_exp_e_gold
- gold = (self.actor.maxhp+self.actor.maxmp+self.actor.atk+self.actor.def+self.actor.spi+
- self.actor.agi+self.actor.hit+self.actor.eva) * $Requiem_ABS.auto_gold_rate / 100
- else
- gold = self.actor.gold
- end
- if gold > 0 and rand(100) <= $Requiem_ABS.gold_drop_rate
- $game_drop.push(Game_Drop.new(self, $Requiem_ABS.gold_drop_icon_index, nil, gold))
- end
- end
- def update_self_movement
- return if self.freeze or (self.anime_attack/2) > 0
- return unless @stop_count > 30 * (5 - @move_frequency)
- if @in_battle and in_range?(self, $game_player, @follow_range) and !self.lock_target
- self.target = $game_player
- self.lock_target = true
- end
- for ally in $game_allies
- next if ally.nil?
- if @in_battle and in_range?(self, ally, @follow_range) and !ally.actor.dead? and !self.lock_target
- self.target = ally
- self.lock_target = true
- elsif self.target == ally and ally.actor.dead? and self.lock_target
- self.target = nil
- self.lock_target = false
- end
- end
- if self.target != nil and @in_battle and in_range?(self, self.target, @follow_range)
- move_type_toward(self.target)
- else
- case @move_type
- when 1
- move_type_random
- when 2
- move_type_toward_player
- when 3
- move_type_custom
- end
- end
- end
- end
- #------------------------------------------------------------------------------
- # Game Player
- #------------------------------------------------------------------------------
- class Game_Player < Game_Character
- attr_accessor :hit
- attr_accessor :hits
- attr_accessor :hit_time
- attr_accessor :assigned_item
- attr_accessor :reward
- alias requiem_abs_gplayer_initialize initialize
- alias requiem_abs_gplayer_refresh refresh
- alias requiem_abs_gplayer_update update
- alias requiem_abs_gplayer_move_by_input move_by_input
- alias requiem_abs_gplayer_perform_transfer perform_transfer
- def initialize
- requiem_abs_gplayer_initialize
- @hits = 0
- @hit_time = 0
- @assigned_item = 0
- @hit = nil
- @reward = nil
- self.original_move_speed = 4
- end
- def refresh
- self.actor = $game_party.members[0]
- self.actor.piece = self unless self.actor.nil?
- requiem_abs_gplayer_refresh
- end
- def update
- requiem_abs_gplayer_update
- return if self.actor.nil?
- return if $game_map.interpreter.running?
- return if in_vehicle?
- attack_with_weapon
- attack_with_skill
- attack_with_item
- auto_recovery
- update_hits
- if $Requiem_ABS.next_actor_if_dead
- $game_temp.next_scene = "gameover" if $game_party.all_dead?
- $game_party.change_group_order if self.actor.dead? and !$game_party.all_dead?
- elsif self.actor.dead?
- $game_temp.next_scene = "gameover"
- end
- if Input.trigger?(Input::Tab) and !Input.press?(Input::CTRL) and $Requiem_ABS.change_group_order
- $game_party.change_group_order
- end
- end
- def hit_count
- return unless $Requiem_ABS.allow_combo_damage
- @hits += 1
- @hit = "#{@hits}"
- end
- def update_hits
- if self.right_attack_on and @attack_weapon != nil
- @hits = 0 if @hit_time <= 0 or @hits >= @attack_weapon.combo_hits
- elsif self.left_attack_on and @attack_weapon_and_Shield != nil
- @hits = 0 if @hit_time <= 0 or @hits >= @attack_weapon_and_Shield.combo_hits
- elsif self.right_attack_on and @attack_weapon.nil?
- @hits = 0 if @hit_time <= 0 or @hits >= 5
- elsif self.left_attack_on and @attack_weapon_and_Shield.nil?
- @hits = 0 if @hit_time <= 0 or @hits >= 5
- end
- @hit_time -= 1 if @hit_time > 0
- end
- def attack_with_weapon
- if Input.trigger?(Input::Letters[$Requiem_ABS.attack_key1])
- return if !$Requiem_ABS.allow_attack_with_shield and self.actor.defending
- return if self.weapon1_attack_time > 0
- @attack_weapon = self.actor.equips[0]
- RPG::SE.new(@attack_weapon.shot_se).play if @attack_weapon != nil and @attack_weapon.shot_se != nil
- self.anime_attack = 20
- self.right_attack_on = true
- self.left_attack_on = false
- if @attack_weapon != nil and @attack_weapon.ranged?
- range_attack_right
- self.weapon1_attack_time = @attack_weapon.delay
- @hit_time = self.weapon1_attack_time + 15
- else
- normal_attack_right
- self.weapon1_attack_time = 60
- @hit_time = self.weapon1_attack_time + 15
- end
- end
- if Input.press?(Input::Letters[$Requiem_ABS.attack_key2])
- self.actor.defending = (self.actor.equips[1].is_a?(RPG::Armor) and $Requiem_ABS.allow_shields_graphics)
- else
- self.actor.defending = false
- end
- if Input.trigger?(Input::Letters[$Requiem_ABS.attack_key2])
- return if self.weapon2_attack_time > 0
- return if !$Requiem_ABS.allow_attack_with_shield and self.actor.defending
- @attack_weapon_and_Shield = (self.actor.two_swords_style ? self.actor.equips[1] : self.actor.equips[0])
- RPG::SE.new(@attack_weapon_and_Shield.shot_se).play if @attack_weapon_and_Shield != nil and @attack_weapon_and_Shield.shot_se != nil
- self.anime_attack = 20
- self.right_attack_on = false
- self.left_attack_on = true
- if @attack_weapon_and_Shield != nil and @attack_weapon_and_Shield.ranged?
- range_attack_left
- self.weapon2_attack_time = 60
- @hit_time = self.weapon2_attack_time + 15
- elsif self.actor.two_swords_style
- normal_attack_left
- self.weapon2_attack_time = @attack_weapon_and_Shield.delay
- @hit_time = self.weapon1_attack_time + 15
- end
- end
- end
- def attack_with_skill
- for button in self.actor.skill_hotkeys.keys
- if Input.trigger?(button) and self.actor.skill_hotkeys[button] != nil and self.actor.skill_hotkeys[button] != 0
- return if self.skill_attack_time > 0
- return if !$Requiem_ABS.allow_attack_with_shield and self.actor.defending
- self.assigned_skill = $data_skills[self.actor.skill_hotkeys[button]]
- if self.assigned_skill.scope == 2
- skill_attack_all
- elsif self.assigned_skill.ranged?
- skill_attack_range
- elsif self.assigned_skill.explosive?
- skill_explode_range
- elsif self.assigned_skill.scope >= 7
- skill_recover
- else
- skill_attack_normal
- end
- end
- end
- end
- def attack_with_item
- for button in self.actor.item_hotkeys.keys
- if Input.trigger?(button) and self.actor.item_hotkeys[button] != nil and self.actor.item_hotkeys[button] != 0
- return if self.item_attack_time > 0
- return if !$Requiem_ABS.allow_attack_with_shield and self.actor.defending
- @assigned_item = $data_items[self.actor.item_hotkeys[button]]
- if @assigned_item.ranged?
- item_attack_range
- elsif @assigned_item.explosive?
- item_attack_explode
- elsif @assigned_item.bomb?
- item_attack_bomb
- else
- case @assigned_item.scope
- when 1
- item_normal_attack
- when 2
- item_attack_all
- when 3...7
- item_normal_attack
- when 7...12
- item_recover
- end
- end
- end
- end
- end
- def normal_attack_right
- for monster in $game_monsters
- next if monster.nil?
- next unless in_front?(self, monster)
- next if monster.actor.dead?
- monster.animation_id = self.actor.atk_animation_id
- hit_count
- monster.actor.attack_effect(self.actor)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next unless in_front?(self, event)
- next if event.actor.dead? or event.object
- event.animation_id = self.actor.atk_animation_id
- hit_count
- return if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon.id or
- event.kill_with_skill > 0 or event.kill_with_item > 0
- event.actor.attack_effect(self.actor)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def range_attack_right
- return if @attack_weapon.ammo1 != nil and !$game_party.has_item?(@attack_weapon.ammo1)
- $game_party.consume_item(@attack_weapon.ammo1) if @attack_weapon.ammo1 != nil
- $game_range.push(Game_Range.new(self, @attack_weapon.graphic, @attack_weapon.index, @attack_weapon.move_speed, @attack_weapon.range, 1))
- end
- def normal_attack_left
- for monster in $game_monsters
- next if monster.nil?
- next unless in_front?(self, monster)
- next if monster.actor.dead?
- monster.animation_id = self.actor.atk_animation_id2
- hit_count
- monster.actor.attack_effect(self.actor)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next unless in_front?(self,event)
- next if event.actor.dead? or event.object
- event.animation_id = self.actor.atk_animation_id2
- hit_count
- return if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon_and_Shield.id or
- event.kill_with_skill > 0 or event.kill_with_item > 0
- event.actor.attack_effect(self.actor)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def range_attack_left
- return if @attack_weapon_and_Shield.ammo2 != nil and !$game_party.has_item?(@attack_weapon_and_Shield.ammo2)
- $game_party.consume_item(@attack_weapon_and_Shield.ammo2) if @attack_weapon_and_Shield.ammo2 != nil
- $game_range.push(Game_Range.new(self, @attack_weapon_and_Shield.graphic, @attack_weapon_and_Shield.index, @attack_weapon_and_Shield.move_speed, @attack_weapon_and_Shield.range, 2))
- end
- def skill_attack_normal
- for monster in $game_monsters
- next if monster.nil?
- next unless in_front?(self, monster)
- next if monster.actor.dead?
- next unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- monster.animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = self.assigned_skill.delay
- monster.actor.skill_effect(self.actor, self.assigned_skill)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next unless in_front?(self,event)
- next if event.actor.dead? or event.object
- next unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- event.animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = self.assigned_skill.delay
- return if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
- event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
- event.actor.skill_effect(self.actor, self.assigned_skill)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def skill_attack_range
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- self.skill_attack_time = self.assigned_skill.delay
- end
- def skill_attack_all
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- for monster in $game_monsters
- next if monster.nil?
- next if monster.actor.dead?
- monster.animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = self.assigned_skill.delay
- monster.actor.skill_effect(self.actor, self.assigned_skill)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next if event.actor.dead? or event.object
- event.animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = self.assigned_skill.delay
- return if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
- event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
- event.actor.skill_effect(self.actor, self.assigned_skill)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def skill_explode_range
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- self.skill_attack_time = self.assigned_skill.delay
- end
- def skill_recover
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- self.actor.skill_effect(self.actor, self.assigned_skill)
- @animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = 60
- end
- def item_normal_attack
- for monster in $game_monsters
- next if monster.nil?
- next unless in_front?(self, monster)
- next if monster.actor.dead?
- next unless $game_party.has_item?(@assigned_item)
- $game_party.consume_item(@assigned_item)
- $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
- monster.animation_id = @assigned_item.animation_id
- self.item_attack_time = @assigned_item.delay
- monster.actor.item_effect(self.actor, @assigned_item)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next unless in_front?(self,event)
- next if event.actor.dead? or event.object
- next unless $game_party.has_item?(@assigned_item)
- $game_party.consume_item(@assigned_item)
- $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
- event.animation_id = @assigned_item.animation_id
- self.item_attack_time = @assigned_item.delay
- return if event.kill_with_weapon > 0 or event.kill_with_skill > 0 or
- event.kill_with_item > 0 and event.kill_with_item != self.assigned_item.id
- event.actor.item_effect(self.actor, @assigned_item)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def item_attack_range
- return unless $game_party.has_item?(@assigned_item)
- $game_party.consume_item(@assigned_item)
- $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
- $game_range.push(Game_Range.new(self, @assigned_item.graphic, @assigned_item.index, @assigned_item.move_speed, @assigned_item.range, 5))
- RPG::SE.new(@assigned_item.shot_se).play if @assigned_item.shot_se != nil
- self.item_attack_time = @assigned_item.delay
- end
- def item_attack_explode
- return unless $game_party.has_item?(@assigned_item)
- $game_party.consume_item(@assigned_item)
- $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
- $game_range.push(Game_Range.new(self, @assigned_item.graphic, @assigned_item.index, @assigned_item.move_speed, @assigned_item.range, 6))
- RPG::SE.new(@assigned_item.shot_se).play if @assigned_item.shot_se != nil
- self.item_attack_time = @assigned_item.delay
- end
- def item_recover
- return unless $game_party.has_item?(@assigned_item)
- $game_party.consume_item(@assigned_item)
- $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
- @animation_id = @assigned_item.animation_id
- self.actor.item_effect(self.actor, @assigned_item)
- self.item_attack_time = @assigned_item.delay
- end
- def item_attack_all
- next unless $game_party.has_item?(@assigned_item)
- $game_party.consume_item(@assigned_item)
- $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
- for monster in $game_monsters
- next if monster.nil?
- next unless in_front?(self, monster)
- next if monster.actor.dead?
- $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
- monster.animation_id = @assigned_item.animation_id
- self.item_attack_time = @assigned_item.delay
- monster.actor.item_effect(self.actor, @assigned_item)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next if event.actor.dead? or event.object
- event.animation_id = @assigned_item.animation_id
- self.item_attack_time = @assigned_item.delay
- return if event.kill_with_weapon > 0 or event.kill_with_skill > 0 or
- event.kill_with_item > 0 and event.kill_with_item != self.assigned_item.id
- event.actor.item_effect(self.actor, @assigned_item)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def item_attack_bomb
- return unless $game_party.has_item?(@assigned_item)
- $game_party.consume_item(@assigned_item)
- $game_temp.common_event_id = @assigned_item.common_event_id if @assigned_item.common_event_id > 0
- $game_bomb.push(Game_Bomb.new(self, @assigned_item))
- self.item_attack_time = 60
- end
- def auto_recovery
- return unless self.actor.auto_hp_recover and self.recovery_time <= 0
- self.actor.hp += (self.actor.maxhp*10/100)
- self.recovery_time = 1800
- end
- def perform_transfer
- requiem_abs_gplayer_perform_transfer
- for range in $game_range
- next if range.nil?
- range.destroy = true
- end
- for drop in $game_drop
- next if drop.nil?
- drop.destroy = true
- end
- for bomb in $game_bomb
- next if bomb.nil?
- bomb.destroy = true
- end
- for ally in $game_allies
- next if ally.nil?
- unless ally.actor.dead? or (ally.actor.defending and !$Requiem_ABS.trasfer_when_defending)
- ally.perform_transfer(@new_map_id, @new_x, @new_y, @new_direction)
- end
- ally.refresh
- end
- end
- def map_passable?(x, y)
- case @vehicle_type
- when 0
- return $game_map.boat_passable?(x, y)
- when 1
- return $game_map.ship_passable?(x, y)
- when 2
- return true
- else
- return $game_map.player_passable?(x, y)
- end
- end
- def move_by_input
- return if self.freeze or (self.anime_attack/2) > 0
- if self.actor != nil
- for state in self.actor.states
- next if state.nil?
- next unless state.confusion?
- return unless movable?
- return if $game_map.interpreter.running?
- case Input.dir4
- when 2,4,6,8
- move_random
- end
- return
- end
- end
- requiem_abs_gplayer_move_by_input
- end
- end
- #------------------------------------------------------------------------------
- # Game Ally
- #------------------------------------------------------------------------------
- class Game_Ally < Game_Character
- attr_reader :id
- attr_accessor :map_id
- attr_accessor :draw
- attr_accessor :destroy
- attr_accessor :command
- def initialize(id)
- super()
- @id = id
- @map_id = $game_map.map_id
- @command = 0
- @draw = false
- @destroy = false
- self.target = $game_player
- self.original_move_speed = 4
- refresh
- end
- def update
- super
- if self.actor.dead? and !@dead
- refresh
- @dead = true
- elsif !self.actor.dead? and @dead
- refresh
- @dead = false
- end
- if $game_player.in_vehicle? and !@in_vehicle and !self.actor.defending
- refresh
- @in_vehicle = true
- elsif !$game_player.in_vehicle? and @in_vehicle
- refresh
- moveto($game_player.x, $game_player.y) unless self.actor.dead?
- @in_vehicle = false
- end
- return if self.actor.nil? or self.actor.dead? or $game_player.in_vehicle?
- self.actor.defending = (@command == 2 ? true : false)
- make_action
- auto_recovery
- update_movement
- end
- def refresh
- self.actor = $game_party.members[@id]
- self.actor.piece = self
- if $game_player.in_vehicle? and !self.actor.dead? and !self.actor.defending
- @character_name = ""
- elsif self.actor.dead?
- if File.exists?("Graphics/Characters/$#{self.actor.name}_dead.png") and @map_id == $game_map.map_id
- @character_name = "$#{self.actor.name}_dead"
- @character_index = 0
- else
- @character_name = ""
- end
- elsif @map_id != $game_map.map_id
- @character_name = ""
- else
- @character_name = self.actor.character_name
- @character_index = self.actor.character_index
- end
- end
- def make_action
- return if $game_map.interpreter.running?
- return if self.actor.dead?
- case @command
- when 0
- if self.actor.weapons[0] != nil and self.actor.weapons[0].ranged? and self.weapon1_attack_time <= 0
- weapon_range_attack
- self.weapon1_attack_time = self.actor.weapons[0].delay
- else
- if self.actor.two_swords_style
- if self.weapon1_attack_time <= 0 and rand(100) <= 50
- normal_attack_right
- self.weapon1_attack_time = 60
- elsif self.weapon1_attack_time <= 0 and rand(100) > 50
- normal_attack_left
- self.weapon1_attack_time = 60
- end
- elsif self.weapon1_attack_time <= 0
- normal_attack_right
- self.weapon1_attack_time = 60
- end
- end
- when 1
- return if self.skill_attack_time > 0 or self.actor.skills == []
- self.assigned_skill = self.actor.skills[rand(self.actor.skills.size)]
- case self.assigned_skill.scope
- when 1
- if self.assigned_skill.ranged?
- skill_attack_range
- elsif self.assigned_skill.explosive?
- skill_explode_range
- else
- skill_attack_normal
- end
- when 2
- skill_attack_all
- when 3..7
- if self.assigned_skill.ranged?
- skill_attack_range
- elsif self.assigned_skill.explosive?
- skill_explode_range
- else
- skill_attack_normal
- end
- end
- when 3
- for skill in self.actor.skills
- self.assigned_skill = skill
- case self.assigned_skill.scope
- when 7..12
- skill_recover
- end
- end
- end
- end
- def normal_attack_right
- for monster in $game_monsters
- next if monster.nil?
- next unless in_front?(self, monster)
- next if monster.actor.dead?
- self.anime_attack = 20
- self.right_attack_on = true
- self.left_attack_on = false
- monster.animation_id = self.actor.atk_animation_id
- monster.actor.attack_effect(self.actor)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next unless in_front?(self, event)
- next if event.actor.dead? or event.object
- self.anime_attack = 20
- self.right_attack_on = true
- self.left_attack_on = false
- event.animation_id = self.actor.atk_animation_id
- next if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon.id or
- event.kill_with_skill > 0 or event.kill_with_item > 0
- event.actor.attack_effect(self.actor)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def weapon_range_attack
- for monster in $game_monsters
- next unless in_direction?(self, monster) and in_range?(self, monster, self.actor.weapons[0].range)
- next if monster.actor.dead?
- self.anime_attack = 20
- select = rand(100)
- self.right_attack_on = select >= 50
- self.left_attack_on = select < 50
- if $game_party.has_item?(select >= 50 ? self.actor.weapons[0].ammo1 : self.actor.weapons[0].ammo2)
- $game_party.consume_item(select >= 50 ? self.actor.weapons[0].ammo1 : self.actor.weapons[0].ammo2)
- $game_range.push(Game_Range.new(self, self.actor.weapons[0].graphic, self.actor.weapons[0].index, self.actor.weapons[0].move_speed, self.actor.weapons[0].range, (select >= 50 ? 1 : 2)))
- end
- self.weapon1_attack_time = self.actor.equips[0].delay
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next unless in_direction?(self, event) and in_range?(self, event, self.actor.weapons[0].range)
- next if event.actor.dead? or event.object
- self.anime_attack = 20
- select = rand(100)
- self.right_attack_on = select >= 50
- self.left_attack_on = select < 50
- if $game_party.has_item?(select >= 50 ? self.actor.weapons[0].ammo1 : self.actor.weapons[0].ammo2)
- $game_party.consume_item(select >= 50 ? self.actor.weapons[0].ammo1 : self.actor.weapons[0].ammo2)
- $game_range.push(Game_Range.new(self, self.actor.weapons[0].graphic, self.actor.weapons[0].index, self.actor.weapons[0].move_speed, self.actor.weapons[0].range, (select >= 50 ? 1 : 2)))
- end
- self.weapon1_attack_time = self.actor.equips[0].delay
- end
- end
- def range_attack_right
- return if @attack_weapon.ammo1 != nil and !$game_party.has_item?(@attack_weapon.ammo1)
- $game_party.consume_item(@attack_weapon.ammo1) if @attack_weapon.ammo1 != nil
- $game_range.push(Game_Range.new(self, @attack_weapon.graphic, @attack_weapon.index, @attack_weapon.move_speed, @attack_weapon.range, 1))
- end
- def normal_attack_left
- for monster in $game_monsters
- next if monster.nil?
- next unless in_front?(self, monster)
- next if monster.actor.dead?
- self.anime_attack = 20
- self.right_attack_on = false
- self.left_attack_on = true
- monster.animation_id = self.actor.atk_animation_id2
- monster.actor.attack_effect(self.actor)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next unless in_front?(self,event)
- next if event.actor.dead? or event.object
- self.anime_attack = 20
- self.right_attack_on = false
- self.left_attack_on = true
- event.animation_id = self.actor.atk_animation_id2
- next if event.kill_with_weapon > 0 and event.kill_with_weapon != @attack_weapon_and_Shield.id or
- event.kill_with_skill > 0 or event.kill_with_item > 0
- event.actor.attack_effect(self.actor)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def range_attack_left
- return if @attack_weapon_and_Shield.ammo2 != nil and !$game_party.has_item?(@attack_weapon_and_Shield.ammo2)
- $game_party.consume_item(@attack_weapon_and_Shield.ammo2) if @attack_weapon_and_Shield.ammo2 != nil
- $game_range.push(Game_Range.new(self, @attack_weapon_and_Shield.graphic, @attack_weapon_and_Shield.index, @attack_weapon_and_Shield.move_speed, @attack_weapon_and_Shield.range, 2))
- end
- def skill_attack_normal
- for monster in $game_monsters
- next if monster.nil?
- next unless in_front?(self, monster)
- next if monster.actor.dead?
- next if self.actor.mp < self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- monster.animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = self.assigned_skill.delay
- monster.actor.skill_effect(self.actor, self.assigned_skill)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next unless in_front?(self,event)
- next if event.actor.dead? or event.object
- next if self.actor.mp < self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- event.animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = self.assigned_skill.delay
- next if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
- event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
- event.actor.skill_effect(self.actor, self.assigned_skill)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def skill_attack_range
- for monster in $game_monsters
- next if monster.nil?
- next if monster.actor.dead?
- next unless in_direction?(self, monster) and in_range?(self, monster, self.assigned_skill.range)
- next if self.actor.mp < self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- self.skill_attack_time = self.assigned_skill.delay
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next unless in_direction?(self, event) and in_range?(self, event, self.assigned_skill.range)
- next self.actor.mp < self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- self.skill_attack_time = self.assigned_skill.delay
- end
- end
- def skill_attack_all
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- for monster in $game_mosnters
- next if monster.nil?
- next if monster.actor.dead?
- monster.animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = self.assigned_skill.delay
- monster.actor.skill_effect(self.actor, self.assigned_skill)
- monster.jump(0,0)
- monster.target = self
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next if event.actor.dead? or event.object
- event.animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = self.assigned_skill.delay
- next if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
- event.kill_with_skill > 0 and event.kill_with_skill != self.assigned_skill.id
- event.actor.skill_effect(self.actor, self.assigned_skill)
- event.jump(0,0) unless event.puzzle
- event.target = self
- end
- end
- def skill_explode_range
- for monster in $game_monsters
- next if monster.nil?
- next if monster.actor.dead?
- return unless in_direction?(self, monster) and in_range?(self, monster, self.assigned_skill.range)
- return if self.actor.mp < self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- self.skill_attack_time = self.assigned_skill.delay
- end
- for event in $game_map.events.values
- next unless event.in_battle
- return unless in_direction?(self, event) and in_range?(self, event, self.assigned_skill.range)
- return if self.actor.mp < self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- self.skill_attack_time = self.assigned_skill.delay
- end
- end
- def skill_recover
- for person in $game_party.members
- next unless person.hp <= (person.maxhp/4)
- next if self.actor.mp < self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- person.skill_effect(person, self.assigned_skill)
- person.piece.animation_id = self.assigned_skill.animation_id
- self.skill_attack_time = self.assigned_skill.delay
- end
- end
- def auto_recovery
- return unless self.actor.auto_hp_recover and self.recovery_time <= 0
- self.actor.hp += (self.actor.maxhp*10/100)
- self.recovery_time = 1800
- end
- def update_movement
- return if $game_map.interpreter.running?
- return if moving? or self.actor.defending
- return if self.freeze or (self.anime_attack/2) > 0
- if $game_player.dash? and self.target == $game_player
- @move_speed = 5
- else
- @move_speed = self.original_move_speed
- end
- if @target.nil? or @command == 3
- self.target = $game_player
- else
- for monster in $game_monsters
- next if monster.nil?
- next if monster.actor.dead?
- if in_range?(self, monster, 3) and !self.lock_target
- self.target = monster
- self.lock_target = true
- elsif !self.lock_target
- self.target = $game_player
- end
- end
- for event in $game_map.events.values
- if event.in_battle and in_range?(self, event, 3) and !self.lock_target
- next if event.object or event.puzzle
- self.target = event
- self.lock_target = true
- elsif !self.lock_target
- self.target = $game_player
- end
- end
- end
- move_toward(self.target)
- end
- def perform_transfer(map_id, x, y, dir)
- @map_id = map_id
- set_direction(dir)
- moveto(x, y)
- move_random
- self.target = $game_player
- self.lock_target = false
- end
- def screen_z
- return $game_player.screen_z-1
- end
- def check_event_trigger_touch(x, y)
- end
- end
- #------------------------------------------------------------------------------
- # Game Monster
- #------------------------------------------------------------------------------
- class Game_Monster < Game_Character
- attr_reader :respawn
- attr_reader :destroy
- def initialize(id, enemy_id, troop_id, area)
- super()
- @id = id
- @enemy_id = enemy_id
- @troop_id = troop_id
- @area = area
- setup_monster
- loop do
- set_start_position
- break if $game_map.passable?(@x_pos, @y_pos)
- end
- moveto(@x_pos, @y_pos)
- @move_type = self.actor.move_route
- @move_speed = self.actor.move_speed
- refresh
- end
- def setup_monster
- self.actor = Game_Enemy.new(0, @enemy_id)
- self.actor.piece = self
- @respawn = self.actor.respawn
- self.actor.recover_all
- @destroy = false
- @killed = false
- @opacity = 255
- @blend_type = 0
- refresh
- end
- def set_start_position
- if @area != nil
- x = []
- for i in (@area.rect.x)...(@[email protected])
- x << i
- end
- y = []
- for i in (@area.rect.y)...(@[email protected])
- y << i
- end
- @x_pos = x[rand(x.size)]
- @y_pos = y[rand(y.size)]
- else
- @x_pos = rand($game_map.width)
- @y_pos = rand($game_map.height)
- end
- end
- def refresh
- @character_name = self.actor.character_name
- @character_index = self.actor.character_index
- end
- def update
- super
- if !self.actor.dead?
- update_attack
- else
- update_dying
- end
- end
- def update_attack
- return if $game_map.interpreter.running?
- return if $game_player.in_vehicle?
- for action in $data_enemies[@enemy_id].actions
- next unless self.actor.conditions_met?(action)
- next unless rand(11) < action.rating
- next if self.weapon1_attack_time > 0
- case action.kind
- when 0
- case action.basic
- when 0
- attack_normal
- when 1
- self.actor.defending = true
- end
- when 1
- self.assigned_skill = $data_skills[action.skill_id]
- case self.assigned_skill.scope
- when 1..7
- if self.assigned_skill.ranged?
- if in_direction?(self, $game_player) and in_range?(self, $game_player, self.assigned_skill.range)
- skill_attack_range
- elsif action.rating == 10
- skill_attack_range
- else
- for ally in $game_allies
- next if ally.nil?
- next unless in_direction?(self, ally) and in_range?(self, ally, self.assigned_skill.range)
- skill_attack_range
- end
- end
- elsif self.assigned_skill.explosive?
- if in_direction?(self, $game_player) and in_range?(self, $game_player, self.assigned_skill.range)
- skill_explode_range
- elsif action.rating == 10
- skill_explode_range
- else
- for ally in $game_allies
- next if ally.nil?
- next unless in_direction?(self, ally) and in_range?(self, ally, self.assigned_skill.range)
- skill_explode_range
- end
- end
- else
- skill_attack_normal
- end
- when 7..12
- skill_recover
- end
- end
- end
- end
- def attack_normal
- for ally in $game_allies
- next if ally.nil?
- next unless in_front?(self, ally)
- self.anime_attack = 20
- ally.animation_id = self.actor.atk_animation_id
- ally.actor.attack_effect(self.actor)
- ally.jump(0,0)
- self.weapon1_attack_time = 90
- return
- end
- return if $game_player.actor.nil?
- return unless in_front?(self, $game_player)
- self.anime_attack = 20
- $game_player.animation_id = self.actor.atk_animation_id
- $game_player.actor.attack_effect(self.actor)
- $game_player.jump(0,0)
- self.weapon1_attack_time = 90
- end
- def skill_attack_normal
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- for ally in $game_allies
- next if ally.nil?
- next unless in_front?(self, ally)
- ally.animation_id = self.assigned_skill.animation_id
- ally.actor.skill_effect(self.actor, self.assigned_skill)
- ally.jump(0,0)
- self.weapon1_attack_time = 90
- return
- end
- return if $game_player.actor.nil?
- return unless in_front?(self, $game_player)
- $game_player.animation_id = self.assigned_skill.animation_id
- $game_player.actor.skill_effect(self.actor, self.assigned_skill)
- $game_player.jump(0,0)
- self.weapon1_attack_time = 90
- end
- def skill_attack_range
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 3))
- self.weapon1_attack_time = self.assigned_skill.delay
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- end
- def skill_explode_range
- return unless self.actor.mp >= self.assigned_skill.mp_cost
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- $game_range.push(Game_Range.new(self, self.assigned_skill.graphic, self.assigned_skill.index, self.assigned_skill.move_speed, self.assigned_skill.range, 4))
- self.weapon1_attack_time = self.assigned_skill.delay
- RPG::SE.new(self.assigned_skill.shot_se).play if self.assigned_skill.shot_se != nil
- end
- def skill_recover
- if self.actor.mp >= self.assigned_skill.mp_cost and self.actor.hp <= (self.actor.maxhp*25/100)
- self.actor.mp -= self.actor.calc_mp_cost(self.assigned_skill)
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- @animation_id = self.assigned_skill.animation_id
- self.actor.skill_effect(self.actor, self.assigned_skill)
- self.weapon1_attack_time = 90
- end
- for event in $game_map.events.values
- if event.in_battle and in_range?(self, event, 3)
- if self.actor.mp >= self.assigned_skill.mp_cost and event.actor.hp <= (event.actor.maxhp*25/100)
- self.actor.mp -= self.assigned_skill.mp_cost
- $game_temp.common_event_id = self.assigned_skill.common_event_id if self.assigned_skill.common_event_id > 0
- event.animation_id = self.assigned_skill.animation_id
- event.actor.skill_effect(self.actor, self.assigned_skill)
- self.weapon1_attack_time = 90
- end
- end
- end
- end
- def update_dying
- @blend_type = 2
- @opacity -= 5
- get_rewards unless @killed
- if @opacity <= 0 and !@destroy
- $game_player.hits = 0
- for ally in $game_allies
- next if ally.nil? or ally.actor.dead?
- ally.target = $game_player
- ally.lock_target = false
- end
- @destroy = true
- end
- if @destroy and @respawn > 0
- @respawn -= 1
- setup_monster if @respawn <= 0
- end
- end
- def get_rewards
- if $Requiem_ABS.auto_exp_e_gold
- exp = (self.actor.maxhp+self.actor.maxmp+self.actor.atk+self.actor.def+self.actor.spi+
- self.actor.agi+self.actor.hit+self.actor.eva) * $Requiem_ABS.auto_exp_rate / 100
- else
- exp = self.actor.exp
- end
- if $Requiem_ABS.divide_exp
- x = (exp/$game_party.members.size)
- for i in $game_party.members
- i.gain_exp(x, true)
- end
- else
- self.target.actor.gain_exp(exp, true)
- end
- droped_items = []
- for i in [self.actor.drop_item1, self.actor.drop_item2]
- next if i.kind <= 0
- next if rand(i.denominator) != 0
- if i.kind == 1
- droped_items.push($data_items[i.item_id])
- elsif i.kind == 2
- droped_items.push($data_weapons[i.weapon_id])
- elsif i.kind == 3
- droped_items.push($data_armors[i.armor_id])
- end
- end
- for t in droped_items
- next if t.nil?
- $game_drop.push(Game_Drop.new(self, t.icon_index, t , 0))
- end
- if $Requiem_ABS.auto_exp_e_gold
- gold = (self.actor.maxhp+self.actor.maxmp+self.actor.atk+self.actor.def+self.actor.spi+
- self.actor.agi+self.actor.hit+self.actor.eva) * $Requiem_ABS.auto_gold_rate / 100
- else
- gold = self.actor.gold
- end
- if gold > 0 and rand(100) <= $Requiem_ABS.gold_drop_rate
- $game_drop.push(Game_Drop.new(self, $Requiem_ABS.gold_drop_icon_index, nil, gold))
- end
- @animation_id = self.actor.die_animation_id if self.actor.die_animation_id > 0
- if self.actor.die_se != nil
- RPG::SE.new(self.actor.die_se).play
- else
- Sound.play_enemy_collapse
- end
- @killed = true
- end
- def update_self_movement
- return if moving?
- return if self.actor.dead?
- return if self.freeze or (self.anime_attack/2) > 0
- return unless @stop_count > 30 * (5 - @move_frequency)
- if in_range?(self, $game_player, self.actor.follow_range) and !self.lock_target
- self.target = $game_player
- self.lock_target = true
- end
- for ally in $game_allies
- next if ally.nil?
- if in_range?(self, ally, self.actor.follow_range) and !ally.actor.dead? and !self.lock_target
- self.target = ally
- self.lock_target = true
- elsif self.target == ally and ally.actor.dead? and self.lock_target
- self.target = nil
- self.lock_target = false
- end
- end
- if self.target != nil and in_range?(self, self.target, self.actor.follow_range)
- move_type_toward(self.target)
- else
- case @move_type
- when 1
- move_type_random
- when 2
- move_type_toward_player
- when 3
- move_type_custom
- end
- end
- end
- def check_event_trigger_touch(x, y)
- end
- end
- #------------------------------------------------------------------------------
- # Game Range
- #------------------------------------------------------------------------------
- class Game_Range < Game_Character
- attr_accessor :draw
- attr_accessor :destroy
- def initialize(parent, chara_name="", chara_index=0, speed=4, range=5, type=3)
- super()
- @parent = parent
- @character_name = chara_name
- @character_index = chara_index
- @move_speed = speed
- @range = range
- @type = type
- @step = 0
- @destroy = false
- @draw = false
- @moving = false
- @direction = @parent.direction
- moveto(@parent.x, @parent.y)
- case @type
- when 1
- @item = @parent.actor.equips[0]
- when 2
- if @parent.actor.two_hands_legal?
- @item = @parent.actor.equips[0]
- else
- @item = @parent.actor.equips[1]
- end
- when 3...5
- @item = @parent.assigned_skill
- when 5...7
- @item = @parent.assigned_item
- end
- end
- def update
- super
- return if @destroy
- @destroy = (@step > @range)
- return unless stopping?
- case @item.path
- when "Line"
- unless @moving
- @move_route = RPG::MoveRoute.new
- for i in 0...@range
- @move_route.list.insert(0, RPG::MoveCommand.new(12))
- end
- @moving = true
- end
- when "Boom"
- unless @moving
- @move_route = RPG::MoveRoute.new
- @move_route.list = [
- RPG::MoveCommand.new(12),
- RPG::MoveCommand.new(12),
- RPG::MoveCommand.new(12),
- RPG::MoveCommand.new(12),
- RPG::MoveCommand.new(12),
- RPG::MoveCommand.new(13),
- RPG::MoveCommand.new(13),
- RPG::MoveCommand.new(13),
- RPG::MoveCommand.new(13),
- RPG::MoveCommand.new(13),
- RPG::MoveCommand.new()]
- @range = @move_route.list.size-1
- @moving = true
- end
- when "Circle"
- unless @moving
- $game_player.anime_attack = 70
- @move_route = RPG::MoveRoute.new
- @move_route.list = [
- RPG::MoveCommand.new(37),
- RPG::MoveCommand.new(4),
- RPG::MoveCommand.new(2),
- RPG::MoveCommand.new(1),
- RPG::MoveCommand.new(1),
- RPG::MoveCommand.new(3),
- RPG::MoveCommand.new(3),
- RPG::MoveCommand.new(4),
- RPG::MoveCommand.new(4),
- RPG::MoveCommand.new(2),
- RPG::MoveCommand.new()]
- @range = @move_route.list.size-1
- @moving = true
- end
- when "Jump"
- unless @moving
- @move_route = RPG::MoveRoute.new
- case @parent.direction
- when 2
- dir = 0, 3
- when 4
- dir = -3, 0
- when 6
- dir = 3, 0
- when 8
- dir = 0, -3
- end
- @move_route.list = [
- RPG::MoveCommand.new(14, [dir[0], dir[1]]),
- RPG::MoveCommand.new()]
- @moving = true
- end
- when "Random"
- unless @moving
- @move_route = RPG::MoveRoute.new
- for i in 0...@range
- @move_route.list.insert(0, RPG::MoveCommand.new(9))
- end
- @moving = true
- end
- end
- @move_route.skippable = true
- move_type_custom
- x = (@direction == 4 ? -1 : @direction == 6 ? 1 : 0)
- y = (@direction == 2 ? 1 : @direction == 8 ? -1 : 0)
- check_event_trigger_touch(@x+x, @y+y) unless jumping?
- @step += 1
- end
- def check_event_trigger_touch(x, y)
- return if @destroy
- if @parent.is_a?(Game_Event) or @parent.is_a?(Game_Monster)
- case @type
- when 3
- for ally in $game_allies
- next if ally.nil?
- hurt_hero_skill(ally) if ally.pos?(x, y)
- end
- hurt_hero_skill($game_player) if $game_player.pos?(x, y)
- when 4
- for ally in $game_allies
- next if ally.nil?
- hurt_hero_skill_explode if ally.pos?(x, y)
- end
- hurt_hero_skill_explode if $game_player.pos?(x, y)
- end
- return
- end
- for monster in $game_monsters
- next if monster.nil?
- next unless monster.pos?(x, y)
- case @type
- when 1
- hurt_monster_weapon_right(monster)
- when 2
- hurt_monster_weapon_left(monster)
- when 3
- hurt_monster_skill(monster)
- when 4
- hurt_enemy_skill_explode
- when 5
- hurt_monster_item(monster)
- when 6
- hurt_enemy_item_explode
- end
- end
- for event in $game_map.events.values
- next unless event.in_battle and event.pos?(x, y)
- case @type
- when 1
- hurt_enemy_weapon_right(event)
- when 2
- hurt_enemy_weapon_left(event)
- when 3
- hurt_enemy_skill(event)
- when 4
- hurt_enemy_skill_explode
- when 5
- hurt_enemy_item(event)
- when 6
- hurt_enemy_item_explode
- end
- end
- end
- def hurt_hero_skill(hero)
- return if self.target == hero
- return if hero.actor.dead?
- self.target = hero
- hero.animation_id = @parent.assigned_skill.animation_id
- hero.actor.skill_effect(@parent.actor, @parent.assigned_skill)
- end
- def hurt_hero_skill_explode
- for ally in $game_allies
- next if ally.nil?
- next if self.target == ally
- next unless in_range?(self, ally, @parent.assigned_skill.range)
- next if ally.actor.dead?
- self.target = ally
- ally.animation_id = @parent.assigned_skill.animation_id
- ally.actor.skill_effect(@parent.actor, @parent.assigned_skill)
- end
- if in_range?(self, $game_player, @parent.assigned_skill.range) and
- self.target != $game_player and !$game_player.actor.dead?
- self.target = $game_player
- $game_player.animation_id = @parent.assigned_skill.animation_id
- $game_player.actor.skill_effect(@parent.actor, @parent.assigned_skill)
- end
- @destroy = true
- end
- def hurt_enemy_weapon_right(enemy)
- return if self.target == enemy
- return if enemy.actor.dead? or enemy.object
- if @parent.actor.weapons[0].ammo1 != nil
- enemy.animation_id = @parent.actor.equips[0].ammo1.animation_id
- else
- enemy.animation_id = @parent.actor.atk_animation_id
- end
- return if enemy.kill_with_weapon > 0 and enemy.kill_with_weapon != @parent.actor.weapon_id or
- enemy.kill_with_skill > 0 or enemy.kill_with_item > 0
- self.target = enemy
- enemy.actor.attack_effect(@parent.actor)
- enemy.jump(0,0) unless enemy.puzzle
- enemy.target = @parent
- end
- def hurt_enemy_weapon_left(enemy)
- return if self.target == enemy
- return if enemy.actor.dead? or enemy.object
- if @parent.actor.two_swords_style
- @weapon = @parent.actor.weapons[1]
- else
- @weapon = @parent.actor.weapons[0]
- end
- if @weapon.ammo2 != nil
- enemy.animation_id = @weapon.ammo2.animation_id
- else
- enemy.animation_id = @parent.actor.atk_animation_id2
- end
- return if enemy.kill_with_weapon > 0 and enemy.kill_with_weapon != @weapon.id or
- enemy.kill_with_skill > 0 or enemy.kill_with_item > 0
- self.target = enemy
- enemy.actor.attack_effect(@parent.actor)
- enemy.jump(0,0) unless enemy.puzzle
- enemy.target = @parent
- end
- def hurt_enemy_skill(enemy)
- return if self.target == enemy
- return if enemy.actor.dead? or enemy.object
- enemy.animation_id = @parent.assigned_skill.animation_id
- return if enemy.kill_with_weapon > 0 or enemy.kill_with_item > 0 or
- enemy.kill_with_skill > 0 and enemy.kill_with_skill != @parent.assigned_skill.id
- self.target = enemy
- enemy.actor.skill_effect(@parent.actor, @parent.assigned_skill)
- enemy.jump(0,0) unless enemy.puzzle
- enemy.target = @parent
- end
- def hurt_enemy_item(enemy)
- return if self.target == enemy
- return if enemy.actor.dead? or enemy.object
- enemy.animation_id = @parent.assigned_item.animation_id
- return if enemy.kill_with_weapon > 0 or enemy.kill_with_skill > 0 or
- enemy.kill_with_item > 0 and enemy.kill_with_item != @parent.assigned_item.id
- self.target = enemy
- enemy.actor.item_effect(@parent.actor, @parent.assigned_item)
- enemy.jump(0,0) unless enemy.puzzle
- enemy.target = @parent
- end
- def hurt_enemy_skill_explode
- for monster in $game_monsters
- next if monster.nil?
- next if self.target == monster
- next if monster.actor.dead?
- next unless in_range?(self, monster, @parent.assigned_skill.area)
- self.target = monster
- monster.animation_id = @parent.assigned_skill.animation_id
- monster.actor.skill_effect(@parent.actor, @parent.assigned_skill)
- monster.jump(0,0)
- monster.target = @parent
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next if self.target == event
- next if event.actor.dead? or event.object
- next unless in_range?(self, event, @parent.assigned_skill.area)
- self.target = event
- event.animation_id = @parent.assigned_skill.animation_id
- next if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
- event.kill_with_skill > 0 and event.kill_with_skill != @parent.assigned_skill.id
- event.actor.skill_effect(@parent.actor, @parent.assigned_skill)
- event.jump(0,0) unless event.puzzle
- event.target = @parent
- end
- @destroy = true
- end
- def hurt_enemy_item_explode
- for monster in $game_monsters
- next if monster.nil?
- next if self.target == monster
- next if monster.actor.dead?
- next unless in_range?(self, monster, @parent.assigned_item.area)
- self.target = monster
- monster.animation_id = @parent.assigned_item.animation_id
- monster.actor.item_effect(@parent.actor, @parent.assigned_item)
- monster.jump(0,0)
- monster.target = @parent
- end
- for event in $game_map.events.values
- next unless event.in_battle
- next if self.target == event
- next if event.actor.dead? or event.object
- next unless in_range?(self, event, @parent.assigned_item.area)
- self.target = event
- event.animation_id = @parent.assigned_item.animation_id
- next if event.kill_with_weapon > 0 or event.kill_with_item > 0 or
- event.kill_with_skill > 0 and event.kill_with_skill != @parent.assigned_item.id
- event.actor.item_effect(@parent.actor, @parent.assigned_item)
- event.jump(0,0) unless event.puzzle
- event.target = @parent
- end
- @destroy = true
- end
- def hurt_monster_weapon_right(monster)
- return if self.target == monster
- return if monster.actor.dead?
- self.target = monster
- if @parent.actor.weapons[0].ammo1 != nil
- monster.animation_id = @parent.actor.equips[0].ammo1.animation_id
- else
- monster.animation_id = @parent.actor.atk_animation_id
- end
- monster.actor.attack_effect(@parent.actor)
- monster.jump(0,0)
- monster.target = @parent
- end
- def hurt_monster_weapon_left(monster)
- return if self.target == monster
- return if monster.actor.dead?
- self.target = monster
- if @parent.actor.two_swords_style
- @weapon = @parent.actor.weapons[1]
- else
- @weapon = @parent.actor.weapons[0]
- end
- if @weapon.ammo2 != nil
- monster.animation_id = @weapon.ammo2.animation_id
- else
- monster.animation_id = @parent.actor.atk_animation_id2
- end
- monster.actor.attack_effect(@parent.actor)
- monster.jump(0,0)
- monster.target = @parent
- end
- def hurt_monster_skill(monster)
- return if self.target == monster
- return if monster.actor.dead?
- self.target = monster
- monster.animation_id = @parent.assigned_skill.animation_id
- monster.actor.skill_effect(@parent.actor, @parent.assigned_skill)
- monster.jump(0,0)
- monster.target = @parent
- end
- def hurt_monster_item(monster)
- return if self.target == monster
- return if monster.actor.dead?
- self.target = monster
- monster.animation_id = @parent.assigned_item.animation_id
- monster.actor.item_effect(@parent.actor, @parent.assigned_item)
- monster.jump(0,0)
- monster.target = @parent
- end
- def map_passable?(x, y)
- return $game_map.range_passable?(x, y)
- end
- end
- #------------------------------------------------------------------------------
- # Game Bomb
- #------------------------------------------------------------------------------
- class Game_Bomb < Game_Character
- attr_accessor :draw
- attr_accessor :destroy
- attr_accessor :graphic_name
- attr_accessor :graphic_index
- def initialize(parent, item)
- super()
- @parent = parent
- @item = item
- @graphic_name = "IconSet"
- @graphic_index = @item.icon_index
- @area = @item.area
- @time = @item.delay
- @destroy = false
- @draw = false
- self.priority_type = 2
- jump(0, 0)
- case @parent.direction
- when 2
- moveto(@parent.x, @parent.y+1)
- when 4
- moveto(@parent.x-1, @parent.y)
- when 6
- moveto(@parent.x+1, @parent.y)
- when 8
- moveto(@parent.x, @parent.y-1)
- end
- RPG::SE.new($Requiem_ABS.drop_se[1]).play if $Requiem_ABS.drop_se[1] != ""
- move_random if !$game_map.passable?(@x, @y) or $game_map.events_xy(@x, @y) != []
- end
- def update
- super
- return if @destroy
- if @item.shot_se != nil and Graphics.frame_count % 60 <= 0
- RPG::SE.new(@item.shot_se).play
- end
- @time -= 1 if @time > 0
- explode if @time <= 0
- end
- def explode
- @animation_id = @item.animation_id
- if in_range?(self, $game_player, @area)
- $game_player.actor.item_effect(@parent.actor, @item)
- $game_player.jump(0, 0)
- end
- for monster in $game_monsters
- next if monster.nil?
- next unless in_range?(self, monster, @area)
- monster.actor.item_effect(@parent.actor, @item)
- monster.jump(0, 0)
- end
- for event in $game_map.events.values
- next unless event.in_battle and in_range?(self, event, @area)
- event.actor.item_effect(@parent.actor, @item)
- event.jump(0, 0) unless event.puzzle
- end
- for ally in $game_allies
- next if ally.nil? or ally.actor.dead?
- next unless in_range?(self, ally, @area)
- ally.actor.item_effect(@parent.actor, @item)
- ally.jump(0, 0)
- end
- @destroy = true
- end
- def screen_z
- return $game_player.screen_z-2
- end
- def check_event_trigger_touch(x, y)
- end
- end
- #------------------------------------------------------------------------------
- # Game Drop
- #------------------------------------------------------------------------------
- class Game_Drop < Game_Character
- attr_accessor :draw
- attr_accessor :destroy
- attr_accessor :graphic_name
- attr_accessor :graphic_index
- def initialize(parent, graphic_index=0, item=nil, gold=0)
- super()
- @graphic_name = "IconSet"
- @graphic_index = graphic_index
- @item = item
- @gold = gold
- @drop_time = $Requiem_ABS.drop_duration_time
- moveto(parent.x, parent.y)
- RPG::SE.new($Requiem_ABS.drop_se[0]).play if $Requiem_ABS.drop_se[0] != "" and @gold > 0
- RPG::SE.new($Requiem_ABS.drop_se[1]).play if $Requiem_ABS.drop_se[1] != "" and @items != nil
- @destroy = false
- @draw = false
- jump(0,0)
- move_random if !moving?
- end
- def update
- super
- return if @destroy
- @drop_time -= 1 if @drop_time > 0
- @destroy = (@drop_time <= 0)
- return unless Input.trigger?(Input::C) and in_front?($game_player, self)
- get_reward
- end
- def get_reward
- Sound.play_decision
- case @item
- when RPG::Item
- $game_party.gain_item($data_items[@item.id],1)
- $game_player.reward = $data_items[@item.id].name
- when RPG::Weapon
- $game_party.gain_item($data_weapons[@item.id],1)
- $game_player.reward = $data_weapons[@item.id].name
- when RPG::Armor
- $game_party.gain_item($data_armors[@item.id],1)
- $game_player.reward = $data_armors[@item.id].name
- end
- if @gold > 0
- $game_party.gain_gold(@gold)
- $game_player.reward = "$ #{@gold}"
- end
- @destroy = true
- end
- def screen_z
- return $game_player.screen_z-2
- end
- def check_event_trigger_touch(x, y)
- end
- end
- #------------------------------------------------------------------------------
- # Sprite Base
- #------------------------------------------------------------------------------
- class Sprite_Base
- attr_reader :animation_duration
- def animation_set_sprites(frame)
- cell_data = frame.cell_data
- for i in 0..15
- sprite = @animation_sprites[i]
- next if sprite == nil
- pattern = cell_data[i, 0]
- if pattern == nil or pattern == -1
- sprite.visible = false
- next
- end
- if pattern < 100
- sprite.bitmap = @animation_bitmap1
- else
- sprite.bitmap = @animation_bitmap2
- end
- sprite.visible = true
- sprite.src_rect.set(pattern % 5 * 192, pattern % 100 / 5 * 192, 192, 192)
- if @animation_mirror
- sprite.x = @animation_ox - cell_data[i, 1] / $Requiem_ABS.animations_divide
- sprite.y = @animation_oy + cell_data[i, 2] / $Requiem_ABS.animations_divide
- sprite.angle = (360 - cell_data[i, 4])
- sprite.mirror = (cell_data[i, 5] == 0)
- else
- sprite.x = @animation_ox + cell_data[i, 1] / $Requiem_ABS.animations_divide
- sprite.y = @animation_oy + cell_data[i, 2] / $Requiem_ABS.animations_divide
- sprite.angle = cell_data[i, 4]
- sprite.mirror = (cell_data[i, 5] == 1)
- end
- sprite.z = self.z + 300 + i
- sprite.ox = 96
- sprite.oy = 96
- sprite.zoom_x = cell_data[i, 3] / (100.0 * $Requiem_ABS.animations_divide)
- sprite.zoom_y = cell_data[i, 3] / (100.0 * $Requiem_ABS.animations_divide)
- sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
- sprite.blend_type = cell_data[i, 7]
- end
- end
- end
- #------------------------------------------------------------------------------
- # Sprite Character
- #------------------------------------------------------------------------------
- class Sprite_Character < Sprite_Base
- alias requiem_abs_spchar_initialize initialize
- alias requiem_abs_spchar_dispose dispose
- def initialize(viewport, character=nil)
- @character = character
- @_damage_duration = 0
- @_hit_duration = 0
- @_reward_duration = 0
- requiem_abs_spchar_initialize(viewport,@character)
- end
- def dispose
- requiem_abs_spchar_dispose
- dispose_damage
- dispose_hit
- dispose_reward
- end
- 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
- @character.animation_id = 1 if @character.animation_id < 0
- animation = $data_animations[@character.animation_id]
- start_animation(animation)
- @character.animation_id = 0
- end
- if @character.balloon_id != 0
- @balloon_id = @character.balloon_id
- start_balloon
- @character.balloon_id = 0
- end
- update_show_dmg
- update_show_hit
- update_show_reward
- update_show_state_ani
- end
- def update_show_dmg
- if @_damage_duration > 0
- @_damage_duration -=1
- @_damage_sprite.y -= 1
- @_damage_sprite.x = self.x
- elsif @_damage_duration <= 0 and @_damage_sprite != nil and !@_damage_sprite.disposed?
- @_damage_sprite.y -= 1
- @_damage_sprite.opacity -= 5
- dispose_damage if @_damage_sprite.opacity <= 0
- end
- if @character.actor != nil and @character.actor.damage != 0
- return if @character.is_a?(Game_Event) and @character.puzzle
- damage(@character.actor.damage, @character.actor.critical, @character.actor.combo, @character.actor.reflect)
- @character.actor.damage = 0
- @character.actor.critical = @character.actor.combo = @character.actor.reflect = false
- end
- end
- def update_show_hit
- if @_hit_duration > 0
- @_hit_duration -=1
- elsif @_hit_duration <= 0 and @_hit_sprite != nil and !@_hit_sprite.disposed?
- @_hit_sprite.opacity -= 5
- dispose_hit if @_hit_sprite.opacity <= 0
- end
- if @character.is_a?(Game_Player) and @character.hit != nil
- hit(@character.hit)
- @character.hit = nil
- end
- end
- def update_show_reward
- if @_reward_duration > 0
- @_reward_duration -= 1
- elsif @_reward_duration <= 0 and @_reward_sprite != nil and !@_reward_sprite.disposed?
- @_reward_sprite.opacity -= 5
- dispose_reward if @_reward_sprite.opacity <= 0
- end
- if $game_player.reward != nil and $Requiem_ABS.show_reward
- show_reward($game_player.reward)
- $game_player.reward = nil
- end
- end
- def update_show_state_ani
- return if @character.actor.nil?
- for state in @character.actor.states
- next if state.nil? or state.animation_id <= 0
- if @character.ani_time <= 0
- @character.animation_id = state.animation_id
- @character.ani_time = $data_animations[@character.animation_id].frame_max * 4 + 1
- end
- end
- end
- def damage(value, critical, combo, reflect)
- dispose_damage
- damage_string = (value.is_a?(Numeric) ? value.abs.to_s : value.to_s)
- bitmap = Bitmap.new(160, ($Requiem_ABS.damage_properties["Damage"][1]*3)+10)
- bitmap.font.name = $Requiem_ABS.damage_properties["Damage"][0]
- bitmap.font.size = $Requiem_ABS.damage_properties["Damage"][1]
- bitmap.font.bold = $Requiem_ABS.damage_properties["Damage"][2]
- bitmap.font.italic = $Requiem_ABS.damage_properties["Damage"][3]
- bitmap.font.color.set(0,0,0)
- bitmap.draw_text(1, ($Requiem_ABS.damage_properties["Damage"][1]*2)+10, 160, $Requiem_ABS.damage_properties["Damage"][1], damage_string, 1)
- if value.is_a?(Numeric) and value <= 0
- bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][1]
- else
- bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][0]
- end
- bitmap.draw_text(0, ($Requiem_ABS.damage_properties["Damage"][1]*2)+8, 160, $Requiem_ABS.damage_properties["Damage"][1], damage_string, 1)
- if critical
- bitmap.font.color.set(0,0,0)
- bitmap.draw_text(1, $Requiem_ABS.damage_properties["Damage"][1]+5, 160, $Requiem_ABS.damage_properties["Damage"][1], $Requiem_ABS.damage_properties["Texts"][1], 1)
- bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][2]
- bitmap.draw_text(0, $Requiem_ABS.damage_properties["Damage"][1]+4, 160, $Requiem_ABS.damage_properties["Damage"][1], $Requiem_ABS.damage_properties["Texts"][1], 1)
- end
- if combo
- bitmap.font.color.set(0,0,0)
- bitmap.draw_text(1, 1, 160, $Requiem_ABS.damage_properties["Damage"][1],$Requiem_ABS.damage_properties["Texts"][2], 1)
- bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][3]
- bitmap.draw_text(0, 0, 160, $Requiem_ABS.damage_properties["Damage"][1],$Requiem_ABS.damage_properties["Texts"][2], 1)
- end
- if reflect
- bitmap.font.color.set(0,0,0)
- bitmap.draw_text(1, $Requiem_ABS.damage_properties["Damage"][1]+5, 160, $Requiem_ABS.damage_properties["Damage"][1], $Requiem_ABS.damage_properties["Texts"][6], 1)
- bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][5]
- bitmap.draw_text(0, $Requiem_ABS.damage_properties["Damage"][1]+4, 160, $Requiem_ABS.damage_properties["Damage"][1], $Requiem_ABS.damage_properties["Texts"][6], 1)
- end
- @_damage_sprite = ::Sprite.new(self.viewport)
- @_damage_sprite.bitmap = bitmap
- @_damage_sprite.ox = 80
- @_damage_sprite.oy = 80
- @_damage_sprite.x = self.x
- @_damage_sprite.y = self.y-self.oy
- @_damage_sprite.z = 99999
- @_damage_duration = 30
- end
- def hit(value)
- dispose_hit
- hit_string = (value.is_a?(Numeric) ? value.abs.to_s : value.to_s)
- bitmap = Bitmap.new(160, $Requiem_ABS.damage_properties["Hits"][1])
- bitmap.font.name = $Requiem_ABS.damage_properties["Hits"][0]
- bitmap.font.size = $Requiem_ABS.damage_properties["Hits"][1]
- bitmap.font.bold = $Requiem_ABS.damage_properties["Hits"][2]
- bitmap.font.italic = $Requiem_ABS.damage_properties["Hits"][3]
- bitmap.font.color.set(0,0,0)
- bitmap.draw_text(1, 1, 160, 36,"#{hit_string}"+" "+"#{$Requiem_ABS.damage_properties["Texts"][5]}", 2)
- bitmap.font.color = $Requiem_ABS.damage_properties["Colors"][4]
- bitmap.draw_text(0, 0, 160, 36,"#{hit_string}"+" "+"#{$Requiem_ABS.damage_properties["Texts"][5]}", 2)
- @_hit_sprite = ::Sprite.new(self.viewport)
- @_hit_sprite.bitmap = bitmap
- @_hit_sprite.x = 374
- @_hit_sprite.y = 208 - $Requiem_ABS.damage_properties["Hits"][1]
- @_hit_sprite.z = 99999
- @_hit_duration = 60
- end
- def show_reward(reward)
- dispose_reward
- bitmap = Bitmap.new(200, 16)
- bitmap.font.size = 16
- bitmap.font.color = Color.new(0,0,0)
- bitmap.draw_text(1, 1, bitmap.width, 16, reward)
- bitmap.font.color = Color.new(255,255,255)
- bitmap.draw_text(0, 0, bitmap.width, 16, reward)
- @_reward_sprite = ::Sprite.new(self.viewport)
- @_reward_sprite.bitmap = bitmap
- @_reward_sprite.x = 10
- @_reward_sprite.y = 200
- @_reward_sprite.z = 99999
- @_reward_duration = 300
- end
- def dispose_damage
- return if @_damage_sprite.nil?
- @_damage_sprite.bitmap.dispose
- @_damage_sprite.dispose
- @_damage_sprite = nil
- end
- def dispose_hit
- return if @_hit_sprite.nil?
- @_hit_sprite.bitmap.dispose
- @_hit_sprite.dispose
- @_hit_sprite = nil
- end
- def dispose_reward
- return if @_reward_sprite.nil?
- @_reward_sprite.bitmap.dispose
- @_reward_sprite.dispose
- @_reward_sprite = nil
- end
- end
- #------------------------------------------------------------------------------
- # Sprite Drop
- #------------------------------------------------------------------------------
- class Sprite_Drop < Sprite_Base
- attr_accessor :character
- def initialize(viewport, character=nil)
- super(viewport)
- @character = character
- update
- end
- def update
- super
- update_bitmap
- 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
- if @character.animation_id != 0
- @character.animation_id = 1 if @character.animation_id < 0
- start_animation($data_animations[@character.animation_id])
- @character.animation_id = 0
- end
- end
- def update_bitmap
- return if @graphic_name == @character.graphic_name
- @graphic_name = @character.graphic_name
- self.bitmap = Cache.system(@graphic_name)
- self.ox = 12
- self.oy = 24
- sx = @character.graphic_index % 16 * 24
- sy = @character.graphic_index / 16 * 24
- self.src_rect.set(sx, sy, 24, 24)
- end
- end
- #------------------------------------------------------------------------------
- # Sprite Weapon
- #------------------------------------------------------------------------------
- class Sprite_Weapon < Sprite_Base
- attr_accessor :character
- def initialize(viewport, character=nil)
- super(viewport)
- @character = character
- self.visible = false
- create_bitmap
- update
- end
- def update
- super
- return unless $Requiem_ABS.allow_weapons_graphics
- return if @character.actor.nil?
- return if @character.is_a?(Game_Ally) and @character.map_id != $game_map.map_id
- self.visible = (@character.anime_attack > 0)
- update_src_rect
- update_movement
- end
- def create_bitmap
- self.bitmap = Cache.system("Iconset")
- self.ox = 12
- self.oy = 24
- self.zoom_x = 0.80
- self.zoom_y = 0.80
- end
- def update_src_rect
- sx = weapon_index % 16 * 24
- sy = weapon_index / 16 * 24
- self.src_rect.set(sx, sy, 24, 24)
- end
- def update_movement
- case @character.direction
- when 2
- self.x = @character.screen_x-6
- self.z = @character.screen_z+2
- self.mirror = false
- change_angle(180, 135, 90)
- when 4
- self.x = @character.screen_x-10
- self.z = @character.screen_z-1
- self.mirror = false
- change_angle(-45, 0, 45)
- when 6
- self.x = @character.screen_x+10
- self.z = @character.screen_z+2
- self.mirror = true
- change_angle(45, 0, -45)
- when 8
- self.x = @character.screen_x+10
- self.z = @character.screen_z-1
- self.mirror = true
- change_angle(45, 0, -45)
- end
- self.y = @character.screen_y-4
- self.opacity = @character.opacity
- self.blend_type = @character.blend_type
- self.bush_depth = @character.bush_depth
- end
- def change_angle(a, b, c)
- if @character.anime_attack >= 20
- self.angle = a
- elsif @character.anime_attack >= 15
- self.angle = b
- elsif @character.anime_attack >= 10
- self.angle = c
- end
- end
- def weapon_index
- return 0 if @character.actor.nil?
- if @character.actor.is_a?(Game_Actor) and @character.right_attack_on and @character.actor.equips[0] != nil
- return @character.actor.equips[0].icon_index
- elsif @character.actor.is_a?(Game_Actor) and @character.left_attack_on
- if @character.actor.two_swords_style and @character.actor.equips[1] != nil
- return @character.actor.equips[1].icon_index
- elsif @character.actor.two_hands_legal? and @character.actor.equips[0] != nil and @character.actor.equips[0].ranged?
- return @character.actor.equips[0].icon_index
- end
- elsif @character.actor.is_a?(Game_Enemy) and @character.actor.weapon_icon > 0
- return @character.actor.weapon_icon
- end
- return 0
- end
- end
- #------------------------------------------------------------------------------
- # Sprite Shield
- #------------------------------------------------------------------------------
- class Sprite_Shield < Sprite_Base
- attr_accessor :character
- def initialize(viewport, character = nil)
- super(viewport)
- @character = character
- self.visible = false
- create_bitmap
- update
- end
- def update
- super
- return unless $Requiem_ABS.allow_shields_graphics
- return if @character.actor.nil?
- return if @character.is_a?(Game_Ally) and @character.map_id != $game_map.map_id
- self.visible = @character.actor.defending
- update_src_rect
- update_movement
- moving_with_shield
- end
- def create_bitmap
- self.bitmap = Cache.system("Iconset")
- self.ox = 12
- self.oy = 24
- self.zoom_x = 0.80
- self.zoom_y = 0.80
- end
- def update_src_rect
- sx = shield_index % 16 * 24
- sy = shield_index / 16 * 24
- self.src_rect.set(sx, sy, 24, 24)
- end
- def update_movement
- case @character.direction
- when 2
- self.mirror = true
- self.x = @character.screen_x+6
- self.z = @character.screen_z+1
- when 4
- self.mirror = false
- self.x = @character.screen_x-6
- self.z = @character.screen_z+1
- when 6
- self.mirror = true
- self.x = @character.screen_x+6
- self.z = @character.screen_z-1
- when 8
- self.mirror = false
- self.x = @character.screen_x-6
- self.z = @character.screen_z-1
- end
- self.y = @character.screen_y
- self.opacity = @character.opacity
- self.blend_type = @character.blend_type
- self.bush_depth = @character.bush_depth
- end
- def moving_with_shield
- if @character.moving?
- self.wave_amp = 1
- self.wave_length = 1
- self.wave_speed = 6
- else
- self.wave_amp = 0
- end
- end
- def shield_index
- return 0 if @character.actor.nil?
- if @character.actor.is_a?(Game_Actor) and [email protected]_swords_style and @character.actor.armor1_id > 0
- return @character.actor.armors[0].icon_index
- elsif @character.actor.is_a?(Game_Enemy) and @character.actor.shield_icon > 0
- return @character.actor.shield_icon
- end
- return 0
- end
- end
- #------------------------------------------------------------------------------
- # Spriteset Map
- #------------------------------------------------------------------------------
- class Spriteset_Map
- attr_accessor :viewport3
- alias requiem_abs_sp_map_create_characters create_characters
- alias requiem_abs_sp_map_dispose_characters dispose_characters
- def create_characters
- @allies_sprites = []
- for ally in $game_allies
- next if ally.nil?
- @allies_sprites.push(Sprite_Character.new(@viewport1, ally))
- end
- @range_sprites = []
- for range in $game_range
- next if range.nil? or !$game_map.in_range?(range)
- @range_sprites.push(Sprite_Character.new(@viewport1, range))
- end
- @drop_sprites = []
- for drop in $game_drop
- next if drop.nil? or !$game_map.in_range?(drop)
- @drop_sprites.push(Sprite_Drop.new(@viewport1, drop))
- end
- for bomb in $game_bomb
- next if bomb.nil? or !$game_map.in_range?(bomb)
- @drop_sprites.push(Sprite_Drop.new(@viewport1, bomb))
- end
- @weapon_sprites = []
- @shield_sprites = []
- @weapon_sprites.push(Sprite_Weapon.new(@viewport1, $game_player))
- @shield_sprites.push(Sprite_Shield.new(@viewport1, $game_player))
- for ally in $game_allies
- next if ally.nil?
- @weapon_sprites.push(Sprite_Weapon.new(@viewport1, ally))
- @shield_sprites.push(Sprite_Shield.new(@viewport1, ally))
- end
- for i in $game_map.events.keys.sort
- @weapon_sprites.push(Sprite_Weapon.new(@viewport1, $game_map.events[i]))
- @shield_sprites.push(Sprite_Shield.new(@viewport1, $game_map.events[i]))
- end
- @monsters_sprites = []
- for monster in $game_monsters
- next if monster.nil?
- @monsters_sprites.push(Sprite_Character.new(@viewport1, monster))
- @weapon_sprites.push(Sprite_Weapon.new(@viewport1, monster))
- @shield_sprites.push(Sprite_Shield.new(@viewport1, monster))
- end
- requiem_abs_sp_map_create_characters
- end
- def update_characters
- for sprite in @character_sprites
- if sprite.character.is_a?(Game_Event)
- sprite.update if $game_map.in_range?(sprite.character)
- else
- sprite.update
- end
- end
- for ally in @allies_sprites
- next if ally.nil?
- if ally.character.destroy and !ally.disposed?
- ally.dispose
- $game_allies.delete(ally.character)
- @allies_sprites.delete(ally)
- elsif !ally.disposed?
- ally.update if $game_map.in_range?(ally.character)
- end
- end
- for monster in @monsters_sprites
- next if monster.nil?
- if monster.character.destroy and !monster.character.respawn and !monster.disposed?
- monster.dispose
- $game_monsters.delete(monster.character)
- @monsters_sprites.delete(monster)
- elsif !monster.disposed?
- monster.update if $game_map.in_range?(monster.character)
- end
- end
- for range in @range_sprites
- next if range.nil?
- if range.character.destroy and !range.disposed?
- range.dispose
- $game_range.delete(range.character)
- @range_sprites.delete(range)
- elsif !range.disposed?
- range.update if $game_map.in_range?(range.character)
- end
- end
- for drop in @drop_sprites
- next if drop.nil?
- if drop.character.destroy and !drop.disposed?
- drop.update
- drop.character.graphic_name = ""
- drop.dispose unless drop.animation?
- $game_drop.delete(drop.character)
- $game_bomb.delete(drop.character)
- @drop_sprites.delete(self)
- elsif !drop.disposed?
- drop.update if $game_map.in_range?(drop.character)
- end
- end
- for ally in $game_allies
- next if ally.nil?
- unless ally.draw
- @allies_sprites.push(Sprite_Character.new(@viewport1, ally))
- @weapon_sprites.push(Sprite_Weapon.new(@viewport1, ally))
- @shield_sprites.push(Sprite_Shield.new(@viewport1 ,ally))
- ally.draw = true
- end
- end
- for range in $game_range
- next if range.nil? or !$game_map.in_range?(range)
- unless range.draw
- @range_sprites.push(Sprite_Character.new(@viewport1, range))
- range.draw = true
- end
- end
- for drop in $game_drop
- next if drop.nil? or !$game_map.in_range?(drop)
- unless drop.draw
- @drop_sprites.push(Sprite_Drop.new(@viewport1, drop))
- drop.draw = true
- end
- end
- for bomb in $game_bomb
- next if bomb.nil? or !$game_map.in_range?(bomb)
- unless bomb.draw
- @drop_sprites.push(Sprite_Drop.new(@viewport1, bomb))
- bomb.draw = true
- end
- end
- for weapon in @weapon_sprites
- next if weapon.nil? or !$game_map.in_range?(weapon.character)
- weapon.update
- end
- for shield in @shield_sprites
- next if shield.nil? or !$game_map.in_range?(shield.character)
- shield.update
- end
- end
- def dispose_characters
- requiem_abs_sp_map_dispose_characters
- for ally in @allies_sprites
- next if ally.nil?
- ally.dispose
- end
- for monster in @monsters_sprites
- next if monster.nil?
- monster.dispose
- end
- for range in @range_sprites
- next if range.nil?
- range.dispose
- end
- for drop in @drop_sprites
- next if drop.nil?
- drop.dispose
- end
- for weapon in @weapon_sprites
- next if weapon.nil?
- weapon.dispose
- end
- for shield in @shield_sprites
- next if shield.nil?
- shield.dispose
- end
- end
- def refresh_characters
- dispose_characters
- create_characters
- end
- end
- #------------------------------------------------------------------------------
- # Window Base
- #------------------------------------------------------------------------------
- class Window_Base < Window
- def draw_actor_head(actor, x, y, enabled=true)
- char_name = actor.character_name
- char_index = actor.character_index
- bitmap = Cache.character(char_name)
- sign = char_name[/^[\!\$]./]
- if sign != nil and sign.include?('$')
- cw = bitmap.width / 3
- ch = bitmap.height / 4
- else
- cw = bitmap.width / 12
- ch = bitmap.height / 8
- end
- enbl = (enabled ? 255 : 128)
- src_rect = Rect.new((char_index%4*3+1)*cw, (char_index/4*4)*ch, cw, ch/3*2)
- self.contents.blt(x, y, bitmap, src_rect, enbl)
- end
- end
- #------------------------------------------------------------------------------
- # Scene Title
- #------------------------------------------------------------------------------
- class Scene_Title < Scene_Base
- alias requiem_abs_scenetitle_create_game_objects create_game_objects
- alias requiem_abs_scenetitle_command_new_game command_new_game
- def create_game_objects
- $game_monsters = []
- $game_allies = []
- $game_range = []
- $game_drop = []
- $game_bomb = []
- requiem_abs_scenetitle_create_game_objects
- $Requiem_ABS = Requiem_ABS.new
- end
- def command_new_game
- requiem_abs_scenetitle_command_new_game
- for ally in $game_allies
- next if ally.nil?
- ally.map_id = $data_system.start_map_id
- ally.moveto($data_system.start_x, $data_system.start_y)
- ally.move_random
- end
- end
- end
- #------------------------------------------------------------------------------
- # Scene Map
- #------------------------------------------------------------------------------
- class Scene_Map < Scene_Base
- alias requiem_abs_scenemap_update update
- def update
- requiem_abs_scenemap_update
- for ally in $game_allies
- next if ally.nil?
- ally.update if $game_map.in_range?(ally)
- end
- for monster in $game_monsters
- next if monster.nil?
- monster.update if $game_map.in_range?(monster)
- end
- for range in $game_range
- next if range.nil?
- range.update if $game_map.in_range?(range)
- end
- for drop in $game_drop
- next if drop.nil?
- drop.update if $game_map.in_range?(drop)
- end
- for bomb in $game_bomb
- next if bomb.nil?
- bomb.update if $game_map.in_range?(bomb)
- end
- end
- def update_encounter
- end
- def refresh_sprites
- @spriteset.refresh_characters
- Cache.clear
- end
- end
- #------------------------------------------------------------------------------
- # Scene Item
- #------------------------------------------------------------------------------
- class Window_Item < Window_Selectable
- def update_help
- if $scene.is_a?(Scene_Item) and $scene.message != ""
- @help_window.set_text($scene.message)
- else
- @help_window.set_text(item == nil ? "" : item.description)
- end
- end
- end
- #------------------------------------------------------------------------------
- class Scene_Item < Scene_Base
- attr_accessor :message
- attr_accessor :delay
- alias requiem_abs_sitem_start start
- alias requiem_abs_sitem_update update
- alias requiem_abs_sitem_update_item_selection update_item_selection
- def start
- requiem_abs_sitem_start
- @actor = $game_party.members[0]
- @message = ""
- @delay = 0
- end
- def update
- requiem_abs_sitem_update
- if @delay <= 0
- @message = ""
- else
- @delay -= 1
- end
- end
- def update_item_selection
- requiem_abs_sitem_update_item_selection
- for button in @actor.item_hotkeys.keys
- if Input.trigger?(button) and @item_window.item.is_a?(RPG::Item)
- Sound.play_decision
- @actor.item_hotkeys[button] = @item_window.item.id
- @message = $Requiem_ABS.memorized_text
- @delay = 120
- end
- end
- end
- end
- #------------------------------------------------------------------------------
- # Scene Skill
- #------------------------------------------------------------------------------
- class Window_Skill < Window_Selectable
- def update_help
- if $scene.is_a?(Scene_Skill) and $scene.message != ""
- @help_window.set_text($scene.message)
- else
- @help_window.set_text(skill == nil ? "" : skill.description)
- end
- end
- end
- #------------------------------------------------------------------------------
- class Scene_Skill < Scene_Base
- attr_accessor :message
- attr_accessor :delay
- alias requiem_abs_sskill_start start
- alias requiem_abs_sskill_update update
- alias requiem_abs_sskill_update_skill_selection update_skill_selection
- def start
- requiem_abs_sskill_start
- @message = ""
- @delay = 0
- end
- def update
- requiem_abs_sskill_update
- if @delay <= 0
- @message = ""
- else
- @delay -= 1
- end
- end
- def update_skill_selection
- requiem_abs_sskill_update_skill_selection
- for button in @actor.skill_hotkeys.keys
- if Input.trigger?(button)
- Sound.play_decision
- @actor.skill_hotkeys[button] = @skill_window.skill.id
- @message = $Requiem_ABS.memorized_text
- @delay = 120
- end
- end
- end
- end
- #------------------------------------------------------------------------------
- # Scene File
- #------------------------------------------------------------------------------
- class Scene_File < Scene_Base
- alias requiem_abs_sfile_do_load do_load
- alias requiem_abs_sfile_write_save_data write_save_data
- alias requiem_abs_sfile_read_save_data read_save_data
- def do_load
- requiem_abs_sfile_do_load
- $game_player.refresh
- for ally in $game_allies
- next if ally.nil?
- ally.refresh
- end
- end
- def write_save_data(file)
- requiem_abs_sfile_write_save_data(file)
- Marshal.dump($game_allies, file)
- Marshal.dump($game_monsters, file)
- Marshal.dump($game_range, file)
- Marshal.dump($game_drop, file)
- Marshal.dump($game_bomb, file)
- end
- def read_save_data(file)
- requiem_abs_sfile_read_save_data(file)
- $game_allies = Marshal.load(file)
- $game_monsters = Marshal.load(file)
- $game_range = Marshal.load(file)
- $game_drop = Marshal.load(file)
- $game_bomb = Marshal.load(file)
- end
- end
- #------------------------------------------------------------------------------
- # High Priority
- #------------------------------------------------------------------------------
- Win32API.new("kernel32", "SetPriorityClass", "pi", "i").call(-1, 0x80)
- #------------------------------------------------------------------------------
- # End of ABS
- #------------------------------------------------------------------------------
- end
- Requiem HUD
- #==============================================================================
- # Requiem HUD
- #==============================================================================
- OnOff_Switch = 0 # Switch ID that show or hide the HUD
- Skills_Text = "Skills" # Text displayed on skills window
- Items_Text = "Items" # Text displayed on items window
- Ammo_Text = "Ammo" # Text displayed on ammunitions window
- #------------------------------------------------------------------------------
- if Requiem_Masterpiece.enabled?("Requiem ABS", 5.0)
- #------------------------------------------------------------------------------
- Requiem_Masterpiece.register("Requiem HUD", 1.1, "06/05/2009")
- #------------------------------------------------------------------------------
- class Requiem_HUD1 < Window_Base
- def initialize
- super(-32, -32, 224, 140)
- self.opacity = 0
- @actor = $game_party.members[0]
- @old_hp = @actor.hp if @actor != nil
- @old_mp = @actor.mp if @actor != nil
- @old_ezp = @actor.exp if @actor != nil
- update
- refresh
- end
- def update
- return if $game_party.members.size <= 0
- @actor = $game_party.members[0] if @actor != $game_party.members[0]
- return unless @old_hp != @actor.hp or @old_mp != @actor.mp or @old_exp != @actor.exp
- @old_hp = @actor.hp
- @old_mp = @actor.mp
- @old_exp = @actor.exp
- refresh
- end
- def refresh
- return if $game_party.members.size <= 0
- self.contents.clear
- draw_hpbar(@actor, 40, 16)
- draw_mpbar(@actor, 40, 38)
- draw_expbar(@actor, 40, 60) if @actor.next_exp > 0
- self.contents.font.size = 16
- self.contents.font.color = Color.new(0,0,0)
- self.contents.draw_text(19, 15, 24, 24, Vocab::hp_a)
- self.contents.draw_text(19, 37, 24, 24, Vocab::mp_a)
- self.contents.draw_text(19, 57, 24, 24, "Exp") if @actor.next_exp > 0
- self.contents.font.color = Color.new(255,255,255)
- self.contents.draw_text(18, 14, 24, 24, Vocab::hp_a)
- self.contents.draw_text(18, 36, 24, 24, Vocab::mp_a)
- self.contents.draw_text(18, 56, 24, 24, "Exp") if @actor.next_exp > 0
- return if $summon.nil?
- end
- def draw_hpbar(actor, x, y)
- base = Cache.system("Base")
- self.contents.blt(x, y, base, base.rect)
- bar = Cache.system("HP Bar")
- meter = Rect.new(0, 0, base.width * actor.hp / actor.maxhp, base.height)
- self.contents.blt(x, y, bar, meter)
- end
- def draw_mpbar(actor, x, y)
- base = Cache.system("Base")
- self.contents.blt(x, y, base, base.rect)
- bar = Cache.system("MP Bar")
- meter = Rect.new(0, 0, base.width * actor.mp / actor.maxmp, base.height)
- self.contents.blt(x, y, bar, meter)
- end
- def draw_expbar(actor, x, y)
- base = Cache.system("Base")
- self.contents.blt(x, y, base, base.rect)
- bar = Cache.system("Exp Bar")
- meter = Rect.new(0, 0, base.width * actor.current_exp / actor.next_exp, base.height)
- self.contents.blt(x, y, bar, meter)
- end
- end
- #------------------------------------------------------------------------------
- class Requiem_HUD2 < Window_Base
- def initialize
- super(-32, -32, 608, 480)
- self.opacity = 0
- @actor = $game_party.members[0]
- refresh
- end
- def update
- return if $game_party.members.size <= 0
- if @actor != $game_party.members[0]
- @actor = $game_party.members[0]
- refresh
- end
- end
- def refresh
- return if $game_party.members.size <= 0
- self.contents.clear
- self.contents.font.size = 16
- bitmap = Cache.system("HUD")
- rect = Rect.new(0, 0, 544, 416)
- self.contents.blt(16, 16, bitmap, rect)
- draw_skills(464, 28)
- draw_items(464, 396)
- draw_ammo(32, 396)
- end
- def draw_skills(x, y)
- skill_count = 0
- @actor.skill_hotkeys.each { |key, value|
- next if value.nil?
- skill = $data_skills[value]
- next if skill.nil?
- draw_icon(skill.icon_index, (32*skill_count)+x-4, y)
- self.contents.font.color = Color.new(0,0,0)
- self.contents.draw_text((32*skill_count)+x+5, y+17, 64, 24, Input.name?(key))
- self.contents.font.color = Color.new(255,255,255)
- self.contents.draw_text((32*skill_count)+x+4, y+16, 64, 24, Input.name?(key))
- skill_count += 1
- }
- self.contents.font.color = Color.new(0,0,0)
- self.contents.draw_text(x-7, y-15, 96, 24, Skills_Text, 1)
- self.contents.font.color = Color.new(255,255,255)
- self.contents.draw_text(x-8, y-16, 96, 24, Skills_Text, 1)
- end
- def draw_items(x, y)
- item_count = 0
- @actor.item_hotkeys.each { |key, value|
- next if value.nil?
- item = $data_items[value]
- next if item.nil?
- draw_icon(item.icon_index, (32*item_count)+x-4, y)
- self.contents.font.color = Color.new(0,0,0)
- self.contents.draw_text((32*item_count)+x+5, y+17, 64, 24, Input.name?(key))
- self.contents.font.color = Color.new(255,255,255)
- self.contents.draw_text((32*item_count)+x+4, y+16, 64, 24, Input.name?(key))
- item_count += 1
- }
- self.contents.font.color = Color.new(0,0,0)
- self.contents.draw_text(x-7, y-15, 96, 24, Items_Text, 1)
- self.contents.font.color = Color.new(255,255,255)
- self.contents.draw_text(x-8, y-16, 96, 24, Items_Text, 1)
- end
- def draw_ammo(x, y)
- if @actor.weapons[0] != nil and @actor.weapons[0].ranged?
- if @actor.weapons[0].ammo1 != nil
- draw_icon(@actor.equips[0].ammo1.icon_index, x-4, y) if @actor.equips[0].ammo1 != nil
- end
- if @actor.weapons[0].ammo2 != nil
- draw_icon(@actor.equips[0].ammo2.icon_index, x+28, y) if @actor.equips[0].ammo2 != nil
- end
- self.contents.font.color = Color.new(0,0,0)
- if $Requiem_ABS.attack_key1.is_a?(Numeric)
- self.contents.draw_text(x+5, y+17, 32, 24, Input.name?(Input::Numberkeys[$Requiem_ABS.attack_key1]))
- else
- self.contents.draw_text(x+5, y+17, 32, 24, Input.name?(Input::Letters[$Requiem_ABS.attack_key1]))
- end
- if $Requiem_ABS.attack_key2.is_a?(Numeric)
- self.contents.draw_text(x+37, y+17, 32, 24, Input.name?(Input::Numberkeys[$Requiem_ABS.attack_key2]))
- else
- self.contents.draw_text(x+37, y+17, 32, 24, Input.name?(Input::Letters[$Requiem_ABS.attack_key2]))
- end
- self.contents.font.color = Color.new(255,255,255)
- if $Requiem_ABS.attack_key1.is_a?(Numeric)
- self.contents.draw_text(x+4, y+16, 32, 24, Input.name?(Input::Numberkeys[$Requiem_ABS.attack_key1]))
- else
- self.contents.draw_text(x+5, y+17, 32, 24, Input.name?(Input::Letters[$Requiem_ABS.attack_key1]))
- end
- if $Requiem_ABS.attack_key2.is_a?(Numeric)
- self.contents.draw_text(x+36, y+16, 32, 24, Input.name?(Input::Numberkeys[$Requiem_ABS.attack_key2]))
- else
- self.contents.draw_text(x+36, y+16, 32, 24, Input.name?(Input::Letters[$Requiem_ABS.attack_key2]))
- end
- end
- self.contents.font.color = Color.new(0,0,0)
- self.contents.draw_text(x-7, y-16, 64, 24, Ammo_Text, 1)
- self.contents.font.color = Color.new(255,255,255)
- self.contents.draw_text(x-8, y-16, 64, 24, Ammo_Text, 1)
- end
- end
- #------------------------------------------------------------------------------
- class Scene_Map < Scene_Base
- alias requiem_hudstart start
- alias requiem_hudupdate update
- alias requiem_hudterminate terminate
- def start
- requiem_hudstart
- @hud_window1 = Requiem_HUD1.new
- @hud_window2 = Requiem_HUD2.new
- @hud_window1.visible = false
- @hud_window2.visible = false
- showing_hud
- end
- def update
- requiem_hudupdate
- showing_hud
- @hud_window1.update if @hud_window1.visible
- @hud_window2.update if @hud_window2.visible
- end
- def terminate
- requiem_hudterminate
- @hud_window1.dispose
- @hud_window2.dispose
- end
- def showing_hud
- if OnOff_Switch <= 0 or $game_switches[OnOff_Switch]
- @hud_window1.visible = true
- @hud_window2.visible = true
- else
- @hud_window1.visible = false
- @hud_window2.visible = false
- end
- end
- end
- #------------------------------------------------------------------------------
- end
- Requiem HP Bars
- #==============================================================================
- # Requiem HP Bars
- #==============================================================================
- #------------------------------------------------------------------------------
- if Requiem_Masterpiece.enabled?("Requiem ABS", 7.0)
- #------------------------------------------------------------------------------
- Requiem_Masterpiece.register("Requiem HP Bars", 1.0, "06/07/2009")
- #------------------------------------------------------------------------------
- class Requiem_EnemyHPBars < Sprite
- def initialize(enemy, viewport)
- super(viewport)
- @enemy = enemy
- @old_x = 0
- @old_y = 0
- @old_hp = @enemy.actor.hp
- self.bitmap = Bitmap.new(45, 8)
- update
- end
- def update
- super
- return unless something_changed?
- @old_x = self.x = @enemy.screen_x-(self.bitmap.width/2)
- @old_y = self.y = @enemy.screen_y
- @old_hp = @enemy.actor.hp
- self.bitmap.clear
- meter = (self.bitmap.width-2) * @enemy.actor.hp / @enemy.actor.maxhp
- self.bitmap.fill_rect(0, 0, self.bitmap.width, self.bitmap.height, Color.new(0,0,0))
- self.bitmap.gradient_fill_rect(1, 2, meter, (self.bitmap.height-4)/2, Color.new(255,160,160), Color.new(224,0,0))
- self.bitmap.gradient_fill_rect(1, 2+((self.bitmap.height-4)/2), meter, (self.bitmap.height-4)/2, Color.new(224,64,64), Color.new(96,0,0))
- end
- def dispose
- super
- self.bitmap.dispose
- end
- def something_changed?
- return true if @old_x != @enemy.screen_x-(self.bitmap.width/2)
- return true if @old_y != @enemy.screen_y
- return true if @old_hp != @enemy.actor.hp
- return false
- end
- end
- #------------------------------------------------------------------------------
- class Requiem_AlliesHPBars < Sprite
- attr_reader :ally
- def initialize(ally, viewport)
- super(viewport)
- @ally = ally
- @old_x = 0
- @old_y = 0
- @old_hp = @ally.actor.hp
- self.bitmap = Bitmap.new(45, 8)
- update
- end
- def update
- super
- return unless something_changed?
- @old_x = self.x = @ally.screen_x-(self.bitmap.width/2)
- @old_y = self.y = @ally.screen_y
- @old_hp = @ally.actor.hp
- self.bitmap.clear
- meter = (self.bitmap.width-2) * @ally.actor.hp / @ally.actor.maxhp
- self.bitmap.fill_rect(0, 0, self.bitmap.width, self.bitmap.height, Color.new(0,0,0))
- self.bitmap.gradient_fill_rect(1, 2, meter, (self.bitmap.height-4)/2, Color.new(145,190,240), Color.new(0,125,185))
- self.bitmap.gradient_fill_rect(1, 2+((self.bitmap.height-4)/2), meter, (self.bitmap.height-4)/2, Color.new(100,150,200), Color.new(0,65,145))
- end
- def dispose
- super
- self.bitmap.dispose
- end
- def something_changed?
- return true if @old_x != @ally.screen_x-(self.bitmap.width/2)
- return true if @old_y != @ally.screen_y
- return true if @old_hp != @ally.actor.hp
- return false
- end
- end
- #------------------------------------------------------------------------------
- class Requiem_BossHPBar < Sprite
- def initialize(event, viewport)
- super(viewport)
- @enemy = event
- @hp = @enemy.actor.hp
- @base = Cache.system("Boss Base")
- @bar = Cache.system("Boss Bar")
- self.bitmap = Bitmap.new(@base.width, @base.height)
- self.x = (544 - self.bitmap.width) / 2
- self.y = 416 - self.bitmap.height - 64
- update
- end
- def update
- super
- return if @hp == @enemy.actor.hp
- @hp = @enemy.actor.hp
- self.bitmap.clear
- self.bitmap.blt(0, 0, @base, @base.rect)
- meter = Rect.new(0, 0, @base.width * @enemy.actor.hp / @enemy.actor.maxhp, @base.height)
- self.bitmap.blt(0, 0, @bar, meter)
- end
- def dispose
- super
- self.bitmap.dispose
- end
- end
- #------------------------------------------------------------------------------
- class Scene_Map < Scene_Base
- alias requiem_abs_enemyhp_smap_start start
- alias requiem_abs_enemyhp_smap_update update
- alias requiem_abs_enemyhp_smap_terminate terminate
- alias requiem_abs_enemyhp_smap_update_transfer_player update_transfer_player
- alias requiem_abs_enemyhp_smap_refresh_sprites refresh_sprites
- def start
- @monsters_hp_bars ={}
- @enemies_hp_bars = {}
- @allies_hp_bars = {}
- requiem_abs_enemyhp_smap_start
- end
- def update
- requiem_abs_enemyhp_smap_update
- update_monsters_hp_bars
- update_enemies_hp_bars
- update_allies_hp_bars
- end
- def terminate
- requiem_abs_enemyhp_smap_terminate
- dispose_bars
- end
- def update_transfer_player
- dispose_bars if $game_player.transfer?
- requiem_abs_enemyhp_smap_update_transfer_player
- end
- def update_enemies_hp_bars
- for event in $game_map.events.values
- next unless event.in_battle
- if event.boss
- if @boss_hud.nil? and !event.actor.dead?
- @boss_hud = Requiem_BossHPBar.new(event, @spriteset.viewport3)
- elsif @boss_hud != nil and !event.actor.dead?
- @boss_hud.update
- elsif @boss_hud != nil and event.actor.dead?
- @boss_hud.dispose
- @boss_hud = nil
- end
- else
- if $game_player.in_range?($game_player, event, 3) and @enemies_hp_bars[event.id].nil? and !event.actor.dead?
- next if event.object or event.puzzle
- @enemies_hp_bars[event.id] = Requiem_EnemyHPBars.new(event, @spriteset.viewport3)
- elsif $game_player.in_range?($game_player, event, 3) and @enemies_hp_bars[event.id] != nil and !event.actor.dead?
- @enemies_hp_bars[event.id].update
- elsif @enemies_hp_bars[event.id] != nil
- @enemies_hp_bars[event.id].dispose
- @enemies_hp_bars[event.id] = nil
- end
- end
- end
- end
- def update_monsters_hp_bars
- for monster in $game_monsters
- next if monster.nil?
- if $game_player.in_range?($game_player, monster, 3) and @monsters_hp_bars[monster.id].nil? and !monster.actor.dead?
- @monsters_hp_bars[monster.id] = Requiem_EnemyHPBars.new(monster, @spriteset.viewport3)
- elsif $game_player.in_range?($game_player, monster, 3) and @monsters_hp_bars[monster.id] != nil and !monster.actor.dead?
- @monsters_hp_bars[monster.id].update
- elsif @monsters_hp_bars[monster.id] != nil
- @monsters_hp_bars[monster.id].dispose
- @monsters_hp_bars[monster.id] = nil
- end
- end
- end
- def update_allies_hp_bars
- for ally in $game_allies
- next if ally.nil?
- next if ally.map_id != $game_map.map_id
- if $game_player.in_range?($game_player, ally, 3) and @allies_hp_bars[ally.id].nil? and !ally.actor.dead? and !$game_player.in_vehicle?
- @allies_hp_bars[ally.id] = Requiem_AlliesHPBars.new(ally, @spriteset.viewport3)
- elsif $game_player.in_range?($game_player, ally, 3) and @allies_hp_bars[ally.id] != nil and !ally.actor.dead? and !$game_player.in_vehicle?
- @allies_hp_bars[ally.id].update
- elsif @allies_hp_bars[ally.id] != nil
- @allies_hp_bars[ally.id].dispose
- @allies_hp_bars[ally.id] = nil
- end
- end
- end
- def refresh_sprites
- requiem_abs_enemyhp_smap_refresh_sprites
- dispose_bars
- end
- def dispose_bars
- if @boss_hud != nil
- @boss_hud.dispose
- @boss_hud = nil
- end
- for bar in @monsters_hp_bars.values
- next if bar.nil?
- bar.dispose
- end
- @monsters_hp_bars.clear
- for bar in @enemies_hp_bars.values
- next if bar.nil?
- bar.dispose
- end
- @enemies_hp_bars.clear
- for bar in @allies_hp_bars.values
- next if bar.nil?
- bar.dispose
- end
- @allies_hp_bars.clear
- end
- end
- #------------------------------------------------------------------------------
- end
- Requiem Gruop Command
- #==============================================================================
- # Requiem Group Command
- #==============================================================================
- #------------------------------------------------------------------------------
- if Requiem_Masterpiece.enabled?("Requiem ABS", 7.0)
- #------------------------------------------------------------------------------
- Requiem_Masterpiece.register("Requiem Group Command", 1.0, "06/07/2009")
- #------------------------------------------------------------------------------
- class Window_RequiemGroupCommand < Window_Base
- def initialize
- super(220, 356, 80, 80)
- self.visible = self.active = false
- self.opacity = self.contents_opacity = 0
- refresh
- end
- def refresh
- self.contents.clear
- bitmap = Cache.system("Face_Base")
- self.contents.blt(0, 0, bitmap, bitmap.rect)
- return if $game_party.members.size <= 1 or $game_allies.empty?
- draw_actor_head($game_party.members[$ally_index], 4, 8, enabled?)
- end
- def enabled?
- return false if $game_party.members[$ally_index].dead?
- return false if $game_party.members[$ally_index].piece.map_id != $game_map.map_id
- return true
- end
- end
- #------------------------------------------------------------------------------
- class Window_RequiemGroupActions < Window_Base
- def initialize
- super(260, 356, 80, 80)
- self.visible = self.active = false
- self.opacity = self.contents_opacity = 0
- refresh
- end
- def refresh
- self.contents.clear
- bitmap = Cache.system("Face_Base")
- self.contents.blt(0, 0, bitmap, bitmap.rect)
- return if $game_party.members.size <= 1 or $game_allies.empty?
- case $game_allies[$ally_index].command
- when 0
- draw_icon(2, 8, 8, enabled?)
- when 1
- draw_icon(119,8, 8, enabled?)
- when 2
- draw_icon(52, 8, 8, enabled?)
- when 3
- draw_icon(128, 8, 8, enabled?)
- end
- end
- def enabled?
- return false if $game_party.members[$ally_index].dead?
- return false if $game_party.members[$ally_index].piece.map_id != $game_map.map_id
- return true
- end
- end
- #------------------------------------------------------------------------------
- class Scene_Map < Scene_Base
- alias requiem_group_command_start start
- alias requiem_group_command_update update
- alias requiem_group_command_terminate terminate
- def start
- requiem_group_command_start
- $ally_index = 1
- @group_window = Window_RequiemGroupCommand.new
- @group_action = Window_RequiemGroupActions.new
- end
- def update
- requiem_group_command_update
- return if $game_allies.empty?
- call_control_allies_window
- end
- def terminate
- requiem_group_command_terminate
- @group_window.dispose
- @group_action.dispose
- end
- def call_control_allies_window
- return if $game_party.members.size <= 1 or $game_allies.empty?
- if Input.press?(Input::Ctrl)
- @group_window.refresh unless @group_window.active
- @group_action.refresh unless @group_action.active
- @group_window.visible = @group_window.active = true
- @group_action.visible = @group_action.active = true
- @group_window.contents_opacity += 5
- @group_action.contents_opacity += 5
- update_allies_window
- update_allies_actions
- else
- @group_window.contents_opacity -= 5 if @group_window.contents_opacity > 0
- @group_action.contents_opacity -= 5 if @group_action.contents_opacity > 0
- @group_window.visible = @group_window.active = false if @group_window.contents_opacity <= 0
- @group_action.visible = @group_action.active = false if @group_action.contents_opacity <= 0
- end
- end
- def update_allies_window
- if Input.trigger?(Input::C) and @group_window.active
- if $ally_index < ($game_party.members.size-1)
- $ally_index += 1
- else
- $ally_index = 1
- end
- @group_window.refresh
- @group_action.refresh
- end
- end
- def update_allies_actions
- if Input.trigger?(Input::Tab) and @group_action.active
- return unless enabled?
- if $game_allies[$ally_index].command < 3
- $game_allies[$ally_index].command += 1
- else
- $game_allies[$ally_index].command = 0
- end
- @group_window.refresh
- @group_action.refresh
- end
- end
- def enabled?
- return false if $game_party.members[$ally_index].dead?
- return false if $game_party.members[$ally_index].piece.map_id != $game_map.map_id
- return true
- end
- end
- #------------------------------------------------------------------------------
- end
Advertisement
Add Comment
Please, Sign In to add comment