Guest User

Untitled

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