Advertisement
Guest User

Untitled

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