rgss3_default_scripts 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/Gemfile +4 -0
  4. data/README.md +9 -0
  5. data/Rakefile +2 -0
  6. data/lib/rgss3_default_scripts.rb +109 -0
  7. data/lib/rgss3_default_scripts/BattleManager.rb +392 -0
  8. data/lib/rgss3_default_scripts/Cache.rb +134 -0
  9. data/lib/rgss3_default_scripts/DataManager.rb +267 -0
  10. data/lib/rgss3_default_scripts/Game_Action.rb +262 -0
  11. data/lib/rgss3_default_scripts/Game_ActionResult.rb +159 -0
  12. data/lib/rgss3_default_scripts/Game_Actor.rb +696 -0
  13. data/lib/rgss3_default_scripts/Game_Actors.rb +22 -0
  14. data/lib/rgss3_default_scripts/Game_BaseItem.rb +51 -0
  15. data/lib/rgss3_default_scripts/Game_Battler.rb +824 -0
  16. data/lib/rgss3_default_scripts/Game_BattlerBase.rb +731 -0
  17. data/lib/rgss3_default_scripts/Game_Character.rb +396 -0
  18. data/lib/rgss3_default_scripts/Game_CharacterBase.rb +443 -0
  19. data/lib/rgss3_default_scripts/Game_CommonEvent.rb +41 -0
  20. data/lib/rgss3_default_scripts/Game_Enemy.rb +264 -0
  21. data/lib/rgss3_default_scripts/Game_Event.rb +308 -0
  22. data/lib/rgss3_default_scripts/Game_Follower.rb +74 -0
  23. data/lib/rgss3_default_scripts/Game_Followers.rb +112 -0
  24. data/lib/rgss3_default_scripts/Game_Interpreter.rb +1413 -0
  25. data/lib/rgss3_default_scripts/Game_Map.rb +704 -0
  26. data/lib/rgss3_default_scripts/Game_Message.rb +101 -0
  27. data/lib/rgss3_default_scripts/Game_Party.rb +418 -0
  28. data/lib/rgss3_default_scripts/Game_Picture.rb +161 -0
  29. data/lib/rgss3_default_scripts/Game_Pictures.rb +28 -0
  30. data/lib/rgss3_default_scripts/Game_Player.rb +488 -0
  31. data/lib/rgss3_default_scripts/Game_Screen.rb +234 -0
  32. data/lib/rgss3_default_scripts/Game_SelfSwitches.rb +35 -0
  33. data/lib/rgss3_default_scripts/Game_Switches.rb +35 -0
  34. data/lib/rgss3_default_scripts/Game_System.rb +122 -0
  35. data/lib/rgss3_default_scripts/Game_Temp.rb +45 -0
  36. data/lib/rgss3_default_scripts/Game_Timer.rb +56 -0
  37. data/lib/rgss3_default_scripts/Game_Troop.rb +205 -0
  38. data/lib/rgss3_default_scripts/Game_Unit.rb +131 -0
  39. data/lib/rgss3_default_scripts/Game_Variables.rb +34 -0
  40. data/lib/rgss3_default_scripts/Game_Vehicle.rb +193 -0
  41. data/lib/rgss3_default_scripts/SceneManager.rb +94 -0
  42. data/lib/rgss3_default_scripts/Scene_Base.rb +132 -0
  43. data/lib/rgss3_default_scripts/Scene_Battle.rb +693 -0
  44. data/lib/rgss3_default_scripts/Scene_Debug.rb +87 -0
  45. data/lib/rgss3_default_scripts/Scene_End.rb +61 -0
  46. data/lib/rgss3_default_scripts/Scene_Equip.rb +144 -0
  47. data/lib/rgss3_default_scripts/Scene_File.rb +203 -0
  48. data/lib/rgss3_default_scripts/Scene_Gameover.rb +85 -0
  49. data/lib/rgss3_default_scripts/Scene_Item.rb +75 -0
  50. data/lib/rgss3_default_scripts/Scene_ItemBase.rb +147 -0
  51. data/lib/rgss3_default_scripts/Scene_Load.rb +40 -0
  52. data/lib/rgss3_default_scripts/Scene_Map.rb +276 -0
  53. data/lib/rgss3_default_scripts/Scene_Menu.rb +127 -0
  54. data/lib/rgss3_default_scripts/Scene_MenuBase.rb +63 -0
  55. data/lib/rgss3_default_scripts/Scene_Name.rb +32 -0
  56. data/lib/rgss3_default_scripts/Scene_Save.rb +38 -0
  57. data/lib/rgss3_default_scripts/Scene_Shop.rb +299 -0
  58. data/lib/rgss3_default_scripts/Scene_Skill.rb +108 -0
  59. data/lib/rgss3_default_scripts/Scene_Status.rb +25 -0
  60. data/lib/rgss3_default_scripts/Scene_Title.rb +137 -0
  61. data/lib/rgss3_default_scripts/Sound.rb +135 -0
  62. data/lib/rgss3_default_scripts/Sprite_Base.rb +232 -0
  63. data/lib/rgss3_default_scripts/Sprite_Battler.rb +231 -0
  64. data/lib/rgss3_default_scripts/Sprite_Character.rb +226 -0
  65. data/lib/rgss3_default_scripts/Sprite_Picture.rb +82 -0
  66. data/lib/rgss3_default_scripts/Sprite_Timer.rb +77 -0
  67. data/lib/rgss3_default_scripts/Spriteset_Battle.rb +389 -0
  68. data/lib/rgss3_default_scripts/Spriteset_Map.rb +273 -0
  69. data/lib/rgss3_default_scripts/Spriteset_Weather.rb +184 -0
  70. data/lib/rgss3_default_scripts/Vocab.rb +145 -0
  71. data/lib/rgss3_default_scripts/Window_ActorCommand.rb +78 -0
  72. data/lib/rgss3_default_scripts/Window_Base.rb +571 -0
  73. data/lib/rgss3_default_scripts/Window_BattleActor.rb +38 -0
  74. data/lib/rgss3_default_scripts/Window_BattleEnemy.rb +70 -0
  75. data/lib/rgss3_default_scripts/Window_BattleItem.rb +40 -0
  76. data/lib/rgss3_default_scripts/Window_BattleLog.rb +425 -0
  77. data/lib/rgss3_default_scripts/Window_BattleSkill.rb +34 -0
  78. data/lib/rgss3_default_scripts/Window_BattleStatus.rb +111 -0
  79. data/lib/rgss3_default_scripts/Window_ChoiceList.rb +88 -0
  80. data/lib/rgss3_default_scripts/Window_Command.rb +152 -0
  81. data/lib/rgss3_default_scripts/Window_DebugLeft.rb +104 -0
  82. data/lib/rgss3_default_scripts/Window_DebugRight.rb +119 -0
  83. data/lib/rgss3_default_scripts/Window_EquipCommand.rb +36 -0
  84. data/lib/rgss3_default_scripts/Window_EquipItem.rb +78 -0
  85. data/lib/rgss3_default_scripts/Window_EquipSlot.rb +111 -0
  86. data/lib/rgss3_default_scripts/Window_EquipStatus.rb +97 -0
  87. data/lib/rgss3_default_scripts/Window_GameEnd.rb +38 -0
  88. data/lib/rgss3_default_scripts/Window_Gold.rb +47 -0
  89. data/lib/rgss3_default_scripts/Window_Help.rb +43 -0
  90. data/lib/rgss3_default_scripts/Window_HorzCommand.rb +106 -0
  91. data/lib/rgss3_default_scripts/Window_ItemCategory.rb +54 -0
  92. data/lib/rgss3_default_scripts/Window_ItemList.rb +117 -0
  93. data/lib/rgss3_default_scripts/Window_KeyItem.rb +55 -0
  94. data/lib/rgss3_default_scripts/Window_MapName.rb +96 -0
  95. data/lib/rgss3_default_scripts/Window_MenuActor.rb +43 -0
  96. data/lib/rgss3_default_scripts/Window_MenuCommand.rb +106 -0
  97. data/lib/rgss3_default_scripts/Window_MenuStatus.rb +85 -0
  98. data/lib/rgss3_default_scripts/Window_Message.rb +397 -0
  99. data/lib/rgss3_default_scripts/Window_NameEdit.rb +129 -0
  100. data/lib/rgss3_default_scripts/Window_NameInput.rb +253 -0
  101. data/lib/rgss3_default_scripts/Window_NumberInput.rb +148 -0
  102. data/lib/rgss3_default_scripts/Window_PartyCommand.rb +47 -0
  103. data/lib/rgss3_default_scripts/Window_SaveFile.rb +69 -0
  104. data/lib/rgss3_default_scripts/Window_ScrollText.rb +90 -0
  105. data/lib/rgss3_default_scripts/Window_Selectable.rb +442 -0
  106. data/lib/rgss3_default_scripts/Window_ShopBuy.rb +115 -0
  107. data/lib/rgss3_default_scripts/Window_ShopCommand.rb +36 -0
  108. data/lib/rgss3_default_scripts/Window_ShopNumber.rb +137 -0
  109. data/lib/rgss3_default_scripts/Window_ShopSell.rb +27 -0
  110. data/lib/rgss3_default_scripts/Window_ShopStatus.rb +124 -0
  111. data/lib/rgss3_default_scripts/Window_SkillCommand.rb +76 -0
  112. data/lib/rgss3_default_scripts/Window_SkillList.rb +121 -0
  113. data/lib/rgss3_default_scripts/Window_SkillStatus.rb +38 -0
  114. data/lib/rgss3_default_scripts/Window_Status.rb +125 -0
  115. data/lib/rgss3_default_scripts/Window_TitleCommand.rb +45 -0
  116. data/rgss3_default_scripts.gemspec +23 -0
  117. metadata +186 -0
@@ -0,0 +1,22 @@
1
+ #==============================================================================
2
+ # ** Game_Actors
3
+ #------------------------------------------------------------------------------
4
+ # This is a wrapper for an actor array. Instances of this class are referenced
5
+ # by $game_actors.
6
+ #==============================================================================
7
+
8
+ class Game_Actors
9
+ #--------------------------------------------------------------------------
10
+ # * Object Initialization
11
+ #--------------------------------------------------------------------------
12
+ def initialize
13
+ @data = []
14
+ end
15
+ #--------------------------------------------------------------------------
16
+ # * Get Actor
17
+ #--------------------------------------------------------------------------
18
+ def [](actor_id)
19
+ return nil unless $data_actors[actor_id]
20
+ @data[actor_id] ||= Game_Actor.new(actor_id)
21
+ end
22
+ end
@@ -0,0 +1,51 @@
1
+ #==============================================================================
2
+ # ** Game_BaseItem
3
+ #------------------------------------------------------------------------------
4
+ # This class uniformly handles skills, items, weapons, and armor. References
5
+ # to the database object itself are not retained to enable inclusion in save
6
+ # data.
7
+ #==============================================================================
8
+
9
+ class Game_BaseItem
10
+ #--------------------------------------------------------------------------
11
+ # * Object Initialization
12
+ #--------------------------------------------------------------------------
13
+ def initialize
14
+ @class = nil
15
+ @item_id = 0
16
+ end
17
+ #--------------------------------------------------------------------------
18
+ # * Determine Class
19
+ #--------------------------------------------------------------------------
20
+ def is_skill?; @class == RPG::Skill; end
21
+ def is_item?; @class == RPG::Item; end
22
+ def is_weapon?; @class == RPG::Weapon; end
23
+ def is_armor?; @class == RPG::Armor; end
24
+ def is_nil?; @class == nil; end
25
+ #--------------------------------------------------------------------------
26
+ # * Get Item Object
27
+ #--------------------------------------------------------------------------
28
+ def object
29
+ return $data_skills[@item_id] if is_skill?
30
+ return $data_items[@item_id] if is_item?
31
+ return $data_weapons[@item_id] if is_weapon?
32
+ return $data_armors[@item_id] if is_armor?
33
+ return nil
34
+ end
35
+ #--------------------------------------------------------------------------
36
+ # * Set Item Object
37
+ #--------------------------------------------------------------------------
38
+ def object=(item)
39
+ @class = item ? item.class : nil
40
+ @item_id = item ? item.id : 0
41
+ end
42
+ #--------------------------------------------------------------------------
43
+ # * Set Equipment with ID
44
+ # is_weapon: Whether it is a weapon
45
+ # item_id: Weapon/armor ID
46
+ #--------------------------------------------------------------------------
47
+ def set_equip(is_weapon, item_id)
48
+ @class = is_weapon ? RPG::Weapon : RPG::Armor
49
+ @item_id = item_id
50
+ end
51
+ end
@@ -0,0 +1,824 @@
1
+ #==============================================================================
2
+ # ** Game_Battler
3
+ #------------------------------------------------------------------------------
4
+ # A battler class with methods for sprites and actions added. This class
5
+ # is used as a super class of the Game_Actor class and Game_Enemy class.
6
+ #==============================================================================
7
+
8
+ class Game_Battler < Game_BattlerBase
9
+ #--------------------------------------------------------------------------
10
+ # * Constants (Effects)
11
+ #--------------------------------------------------------------------------
12
+ EFFECT_RECOVER_HP = 11 # HP Recovery
13
+ EFFECT_RECOVER_MP = 12 # MP Recovery
14
+ EFFECT_GAIN_TP = 13 # TP Gain
15
+ EFFECT_ADD_STATE = 21 # Add State
16
+ EFFECT_REMOVE_STATE = 22 # Remove State
17
+ EFFECT_ADD_BUFF = 31 # Add Buff
18
+ EFFECT_ADD_DEBUFF = 32 # Add Debuff
19
+ EFFECT_REMOVE_BUFF = 33 # Remove Buff
20
+ EFFECT_REMOVE_DEBUFF = 34 # Remove Debuff
21
+ EFFECT_SPECIAL = 41 # Special Effect
22
+ EFFECT_GROW = 42 # Raise Parameter
23
+ EFFECT_LEARN_SKILL = 43 # Learn Skill
24
+ EFFECT_COMMON_EVENT = 44 # Common Events
25
+ #--------------------------------------------------------------------------
26
+ # * Constants (Special Effects)
27
+ #--------------------------------------------------------------------------
28
+ SPECIAL_EFFECT_ESCAPE = 0 # Escape
29
+ #--------------------------------------------------------------------------
30
+ # * Public Instance Variables
31
+ #--------------------------------------------------------------------------
32
+ attr_reader :battler_name # battle graphic filename
33
+ attr_reader :battler_hue # battle graphic hue
34
+ attr_reader :action_times # action times
35
+ attr_reader :actions # combat actions (action side)
36
+ attr_reader :speed # action speed
37
+ attr_reader :result # action result (target side)
38
+ attr_accessor :last_target_index # last target
39
+ attr_accessor :animation_id # animation ID
40
+ attr_accessor :animation_mirror # animation flip horizontal flag
41
+ attr_accessor :sprite_effect_type # sprite effect
42
+ attr_accessor :magic_reflection # reflection flag
43
+ #--------------------------------------------------------------------------
44
+ # * Object Initialization
45
+ #--------------------------------------------------------------------------
46
+ def initialize
47
+ @battler_name = ""
48
+ @battler_hue = 0
49
+ @actions = []
50
+ @speed = 0
51
+ @result = Game_ActionResult.new(self)
52
+ @last_target_index = 0
53
+ @guarding = false
54
+ clear_sprite_effects
55
+ super
56
+ end
57
+ #--------------------------------------------------------------------------
58
+ # * Clear Sprite Effects
59
+ #--------------------------------------------------------------------------
60
+ def clear_sprite_effects
61
+ @animation_id = 0
62
+ @animation_mirror = false
63
+ @sprite_effect_type = nil
64
+ end
65
+ #--------------------------------------------------------------------------
66
+ # * Clear Actions
67
+ #--------------------------------------------------------------------------
68
+ def clear_actions
69
+ @actions.clear
70
+ end
71
+ #--------------------------------------------------------------------------
72
+ # * Clear State Information
73
+ #--------------------------------------------------------------------------
74
+ def clear_states
75
+ super
76
+ @result.clear_status_effects
77
+ end
78
+ #--------------------------------------------------------------------------
79
+ # * Add State
80
+ #--------------------------------------------------------------------------
81
+ def add_state(state_id)
82
+ if state_addable?(state_id)
83
+ add_new_state(state_id) unless state?(state_id)
84
+ reset_state_counts(state_id)
85
+ @result.added_states.push(state_id).uniq!
86
+ end
87
+ end
88
+ #--------------------------------------------------------------------------
89
+ # * Determine if States Are Addable
90
+ #--------------------------------------------------------------------------
91
+ def state_addable?(state_id)
92
+ alive? && $data_states[state_id] && !state_resist?(state_id) &&
93
+ !state_removed?(state_id) && !state_restrict?(state_id)
94
+ end
95
+ #--------------------------------------------------------------------------
96
+ # * Determine States Removed During Same Action
97
+ #--------------------------------------------------------------------------
98
+ def state_removed?(state_id)
99
+ @result.removed_states.include?(state_id)
100
+ end
101
+ #--------------------------------------------------------------------------
102
+ # * Determine States Removed by Action Restriction
103
+ #--------------------------------------------------------------------------
104
+ def state_restrict?(state_id)
105
+ $data_states[state_id].remove_by_restriction && restriction > 0
106
+ end
107
+ #--------------------------------------------------------------------------
108
+ # * Add New State
109
+ #--------------------------------------------------------------------------
110
+ def add_new_state(state_id)
111
+ die if state_id == death_state_id
112
+ @states.push(state_id)
113
+ on_restrict if restriction > 0
114
+ sort_states
115
+ refresh
116
+ end
117
+ #--------------------------------------------------------------------------
118
+ # * Processing Performed When Action Restriction Occurs
119
+ #--------------------------------------------------------------------------
120
+ def on_restrict
121
+ clear_actions
122
+ states.each do |state|
123
+ remove_state(state.id) if state.remove_by_restriction
124
+ end
125
+ end
126
+ #--------------------------------------------------------------------------
127
+ # * Reset State Counts (Turns and Steps)
128
+ #--------------------------------------------------------------------------
129
+ def reset_state_counts(state_id)
130
+ state = $data_states[state_id]
131
+ variance = 1 + [state.max_turns - state.min_turns, 0].max
132
+ @state_turns[state_id] = state.min_turns + rand(variance)
133
+ @state_steps[state_id] = state.steps_to_remove
134
+ end
135
+ #--------------------------------------------------------------------------
136
+ # * Remove State
137
+ #--------------------------------------------------------------------------
138
+ def remove_state(state_id)
139
+ if state?(state_id)
140
+ revive if state_id == death_state_id
141
+ erase_state(state_id)
142
+ refresh
143
+ @result.removed_states.push(state_id).uniq!
144
+ end
145
+ end
146
+ #--------------------------------------------------------------------------
147
+ # * Knock Out
148
+ #--------------------------------------------------------------------------
149
+ def die
150
+ @hp = 0
151
+ clear_states
152
+ clear_buffs
153
+ end
154
+ #--------------------------------------------------------------------------
155
+ # * Revive from Knock Out
156
+ #--------------------------------------------------------------------------
157
+ def revive
158
+ @hp = 1 if @hp == 0
159
+ end
160
+ #--------------------------------------------------------------------------
161
+ # * Escape
162
+ #--------------------------------------------------------------------------
163
+ def escape
164
+ hide if $game_party.in_battle
165
+ clear_actions
166
+ clear_states
167
+ Sound.play_escape
168
+ end
169
+ #--------------------------------------------------------------------------
170
+ # * Add Buff
171
+ #--------------------------------------------------------------------------
172
+ def add_buff(param_id, turns)
173
+ return unless alive?
174
+ @buffs[param_id] += 1 unless buff_max?(param_id)
175
+ erase_buff(param_id) if debuff?(param_id)
176
+ overwrite_buff_turns(param_id, turns)
177
+ @result.added_buffs.push(param_id).uniq!
178
+ refresh
179
+ end
180
+ #--------------------------------------------------------------------------
181
+ # * Add Debuff
182
+ #--------------------------------------------------------------------------
183
+ def add_debuff(param_id, turns)
184
+ return unless alive?
185
+ @buffs[param_id] -= 1 unless debuff_max?(param_id)
186
+ erase_buff(param_id) if buff?(param_id)
187
+ overwrite_buff_turns(param_id, turns)
188
+ @result.added_debuffs.push(param_id).uniq!
189
+ refresh
190
+ end
191
+ #--------------------------------------------------------------------------
192
+ # * Remove Buff/Debuff
193
+ #--------------------------------------------------------------------------
194
+ def remove_buff(param_id)
195
+ return unless alive?
196
+ return if @buffs[param_id] == 0
197
+ erase_buff(param_id)
198
+ @buff_turns.delete(param_id)
199
+ @result.removed_buffs.push(param_id).uniq!
200
+ refresh
201
+ end
202
+ #--------------------------------------------------------------------------
203
+ # * Erase Buff/Debuff
204
+ #--------------------------------------------------------------------------
205
+ def erase_buff(param_id)
206
+ @buffs[param_id] = 0
207
+ @buff_turns[param_id] = 0
208
+ end
209
+ #--------------------------------------------------------------------------
210
+ # * Determine Buff Status
211
+ #--------------------------------------------------------------------------
212
+ def buff?(param_id)
213
+ @buffs[param_id] > 0
214
+ end
215
+ #--------------------------------------------------------------------------
216
+ # * Determine Debuff Status
217
+ #--------------------------------------------------------------------------
218
+ def debuff?(param_id)
219
+ @buffs[param_id] < 0
220
+ end
221
+ #--------------------------------------------------------------------------
222
+ # * Determine if Buff Is at Maximum Level
223
+ #--------------------------------------------------------------------------
224
+ def buff_max?(param_id)
225
+ @buffs[param_id] == 2
226
+ end
227
+ #--------------------------------------------------------------------------
228
+ # * Determine if Debuff Is at Maximum Level
229
+ #--------------------------------------------------------------------------
230
+ def debuff_max?(param_id)
231
+ @buffs[param_id] == -2
232
+ end
233
+ #--------------------------------------------------------------------------
234
+ # * Overwrite Buff/Debuff Turns
235
+ # Doesn't overwrite if number of turns would become shorter.
236
+ #--------------------------------------------------------------------------
237
+ def overwrite_buff_turns(param_id, turns)
238
+ @buff_turns[param_id] = turns if @buff_turns[param_id].to_i < turns
239
+ end
240
+ #--------------------------------------------------------------------------
241
+ # * Update State Turn Count
242
+ #--------------------------------------------------------------------------
243
+ def update_state_turns
244
+ states.each do |state|
245
+ @state_turns[state.id] -= 1 if @state_turns[state.id] > 0
246
+ end
247
+ end
248
+ #--------------------------------------------------------------------------
249
+ # * Update Buff/Debuff Turn Count
250
+ #--------------------------------------------------------------------------
251
+ def update_buff_turns
252
+ @buff_turns.keys.each do |param_id|
253
+ @buff_turns[param_id] -= 1 if @buff_turns[param_id] > 0
254
+ end
255
+ end
256
+ #--------------------------------------------------------------------------
257
+ # * Remove Battle States
258
+ #--------------------------------------------------------------------------
259
+ def remove_battle_states
260
+ states.each do |state|
261
+ remove_state(state.id) if state.remove_at_battle_end
262
+ end
263
+ end
264
+ #--------------------------------------------------------------------------
265
+ # * Remove All Buffs/Debuffs
266
+ #--------------------------------------------------------------------------
267
+ def remove_all_buffs
268
+ @buffs.size.times {|param_id| remove_buff(param_id) }
269
+ end
270
+ #--------------------------------------------------------------------------
271
+ # * Automatically Remove States
272
+ # timing: Timing (1: End of action 2: End of turn)
273
+ #--------------------------------------------------------------------------
274
+ def remove_states_auto(timing)
275
+ states.each do |state|
276
+ if @state_turns[state.id] == 0 && state.auto_removal_timing == timing
277
+ remove_state(state.id)
278
+ end
279
+ end
280
+ end
281
+ #--------------------------------------------------------------------------
282
+ # * Automatically Remove Buffs/Debuffs
283
+ #--------------------------------------------------------------------------
284
+ def remove_buffs_auto
285
+ @buffs.size.times do |param_id|
286
+ next if @buffs[param_id] == 0 || @buff_turns[param_id] > 0
287
+ remove_buff(param_id)
288
+ end
289
+ end
290
+ #--------------------------------------------------------------------------
291
+ # * Remove State by Damage
292
+ #--------------------------------------------------------------------------
293
+ def remove_states_by_damage
294
+ states.each do |state|
295
+ if state.remove_by_damage && rand(100) < state.chance_by_damage
296
+ remove_state(state.id)
297
+ end
298
+ end
299
+ end
300
+ #--------------------------------------------------------------------------
301
+ # * Determine Action Times
302
+ #--------------------------------------------------------------------------
303
+ def make_action_times
304
+ action_plus_set.inject(1) {|r, p| rand < p ? r + 1 : r }
305
+ end
306
+ #--------------------------------------------------------------------------
307
+ # * Create Battle Action
308
+ #--------------------------------------------------------------------------
309
+ def make_actions
310
+ clear_actions
311
+ return unless movable?
312
+ @actions = Array.new(make_action_times) { Game_Action.new(self) }
313
+ end
314
+ #--------------------------------------------------------------------------
315
+ # * Determine Action Speed
316
+ #--------------------------------------------------------------------------
317
+ def make_speed
318
+ @speed = @actions.collect {|action| action.speed }.min || 0
319
+ end
320
+ #--------------------------------------------------------------------------
321
+ # * Get Current Action
322
+ #--------------------------------------------------------------------------
323
+ def current_action
324
+ @actions[0]
325
+ end
326
+ #--------------------------------------------------------------------------
327
+ # * Remove Current Action
328
+ #--------------------------------------------------------------------------
329
+ def remove_current_action
330
+ @actions.shift
331
+ end
332
+ #--------------------------------------------------------------------------
333
+ # * Force Action
334
+ #--------------------------------------------------------------------------
335
+ def force_action(skill_id, target_index)
336
+ clear_actions
337
+ action = Game_Action.new(self, true)
338
+ action.set_skill(skill_id)
339
+ if target_index == -2
340
+ action.target_index = last_target_index
341
+ elsif target_index == -1
342
+ action.decide_random_target
343
+ else
344
+ action.target_index = target_index
345
+ end
346
+ @actions.push(action)
347
+ end
348
+ #--------------------------------------------------------------------------
349
+ # * Calculate Damage
350
+ #--------------------------------------------------------------------------
351
+ def make_damage_value(user, item)
352
+ value = item.damage.eval(user, self, $game_variables)
353
+ value *= item_element_rate(user, item)
354
+ value *= pdr if item.physical?
355
+ value *= mdr if item.magical?
356
+ value *= rec if item.damage.recover?
357
+ value = apply_critical(value) if @result.critical
358
+ value = apply_variance(value, item.damage.variance)
359
+ value = apply_guard(value)
360
+ @result.make_damage(value.to_i, item)
361
+ end
362
+ #--------------------------------------------------------------------------
363
+ # * Get Element Modifier for Skill/Item
364
+ #--------------------------------------------------------------------------
365
+ def item_element_rate(user, item)
366
+ if item.damage.element_id < 0
367
+ user.atk_elements.empty? ? 1.0 : elements_max_rate(user.atk_elements)
368
+ else
369
+ element_rate(item.damage.element_id)
370
+ end
371
+ end
372
+ #--------------------------------------------------------------------------
373
+ # * Get Maximum Elemental Adjustment Amount
374
+ # elements : An array of attribute IDs
375
+ # Returns the most effective adjustment of all elemental alignments.
376
+ #--------------------------------------------------------------------------
377
+ def elements_max_rate(elements)
378
+ elements.inject([0.0]) {|r, i| r.push(element_rate(i)) }.max
379
+ end
380
+ #--------------------------------------------------------------------------
381
+ # * Apply Critical
382
+ #--------------------------------------------------------------------------
383
+ def apply_critical(damage)
384
+ damage * 3
385
+ end
386
+ #--------------------------------------------------------------------------
387
+ # * Applying Variance
388
+ #--------------------------------------------------------------------------
389
+ def apply_variance(damage, variance)
390
+ amp = [damage.abs * variance / 100, 0].max.to_i
391
+ var = rand(amp + 1) + rand(amp + 1) - amp
392
+ damage >= 0 ? damage + var : damage - var
393
+ end
394
+ #--------------------------------------------------------------------------
395
+ # * Applying Guard Adjustment
396
+ #--------------------------------------------------------------------------
397
+ def apply_guard(damage)
398
+ damage / (damage > 0 && guard? ? 2 * grd : 1)
399
+ end
400
+ #--------------------------------------------------------------------------
401
+ # * Damage Processing
402
+ # @result.hp_damage @result.mp_damage @result.hp_drain
403
+ # @result.mp_drain must be set before call.
404
+ #--------------------------------------------------------------------------
405
+ def execute_damage(user)
406
+ on_damage(@result.hp_damage) if @result.hp_damage > 0
407
+ self.hp -= @result.hp_damage
408
+ self.mp -= @result.mp_damage
409
+ user.hp += @result.hp_drain
410
+ user.mp += @result.mp_drain
411
+ end
412
+ #--------------------------------------------------------------------------
413
+ # * Use Skill/Item
414
+ # Called for the acting side and applies the effect to other than the user.
415
+ #--------------------------------------------------------------------------
416
+ def use_item(item)
417
+ pay_skill_cost(item) if item.is_a?(RPG::Skill)
418
+ consume_item(item) if item.is_a?(RPG::Item)
419
+ item.effects.each {|effect| item_global_effect_apply(effect) }
420
+ end
421
+ #--------------------------------------------------------------------------
422
+ # * Consume Items
423
+ #--------------------------------------------------------------------------
424
+ def consume_item(item)
425
+ $game_party.consume_item(item)
426
+ end
427
+ #--------------------------------------------------------------------------
428
+ # * Apply Effect of Use to Other Than User
429
+ #--------------------------------------------------------------------------
430
+ def item_global_effect_apply(effect)
431
+ if effect.code == EFFECT_COMMON_EVENT
432
+ $game_temp.reserve_common_event(effect.data_id)
433
+ end
434
+ end
435
+ #--------------------------------------------------------------------------
436
+ # * Test Skill/Item Application
437
+ # Used to determine, for example, if a character is already fully healed
438
+ # and so cannot recover anymore.
439
+ #--------------------------------------------------------------------------
440
+ def item_test(user, item)
441
+ return false if item.for_dead_friend? != dead?
442
+ return true if $game_party.in_battle
443
+ return true if item.for_opponent?
444
+ return true if item.damage.recover? && item.damage.to_hp? && hp < mhp
445
+ return true if item.damage.recover? && item.damage.to_mp? && mp < mmp
446
+ return true if item_has_any_valid_effects?(user, item)
447
+ return false
448
+ end
449
+ #--------------------------------------------------------------------------
450
+ # * Determine if Skill/Item Has Any Valid Effects
451
+ #--------------------------------------------------------------------------
452
+ def item_has_any_valid_effects?(user, item)
453
+ item.effects.any? {|effect| item_effect_test(user, item, effect) }
454
+ end
455
+ #--------------------------------------------------------------------------
456
+ # * Calculate Counterattack Rate for Skill/Item
457
+ #--------------------------------------------------------------------------
458
+ def item_cnt(user, item)
459
+ return 0 unless item.physical? # Hit type is not physical
460
+ return 0 unless opposite?(user) # No counterattack on allies
461
+ return cnt # Return counterattack rate
462
+ end
463
+ #--------------------------------------------------------------------------
464
+ # * Calculate Reflection Rate of Skill/Item
465
+ #--------------------------------------------------------------------------
466
+ def item_mrf(user, item)
467
+ return mrf if item.magical? # Return magic reflection if magic attack
468
+ return 0
469
+ end
470
+ #--------------------------------------------------------------------------
471
+ # * Calculate Hit Rate of Skill/Item
472
+ #--------------------------------------------------------------------------
473
+ def item_hit(user, item)
474
+ rate = item.success_rate * 0.01 # Get success rate
475
+ rate *= user.hit if item.physical? # Physical attack: Multiply hit rate
476
+ return rate # Return calculated hit rate
477
+ end
478
+ #--------------------------------------------------------------------------
479
+ # * Calculate Evasion Rate for Skill/Item
480
+ #--------------------------------------------------------------------------
481
+ def item_eva(user, item)
482
+ return eva if item.physical? # Return evasion if physical attack
483
+ return mev if item.magical? # Return magic evasion if magic attack
484
+ return 0
485
+ end
486
+ #--------------------------------------------------------------------------
487
+ # * Calculate Critical Rate of Skill/Item
488
+ #--------------------------------------------------------------------------
489
+ def item_cri(user, item)
490
+ item.damage.critical ? user.cri * (1 - cev) : 0
491
+ end
492
+ #--------------------------------------------------------------------------
493
+ # * Apply Normal Attack Effects
494
+ #--------------------------------------------------------------------------
495
+ def attack_apply(attacker)
496
+ item_apply(attacker, $data_skills[attacker.attack_skill_id])
497
+ end
498
+ #--------------------------------------------------------------------------
499
+ # * Apply Effect of Skill/Item
500
+ #--------------------------------------------------------------------------
501
+ def item_apply(user, item)
502
+ @result.clear
503
+ @result.used = item_test(user, item)
504
+ @result.missed = (@result.used && rand >= item_hit(user, item))
505
+ @result.evaded = (!@result.missed && rand < item_eva(user, item))
506
+ if @result.hit?
507
+ unless item.damage.none?
508
+ @result.critical = (rand < item_cri(user, item))
509
+ make_damage_value(user, item)
510
+ execute_damage(user)
511
+ end
512
+ item.effects.each {|effect| item_effect_apply(user, item, effect) }
513
+ item_user_effect(user, item)
514
+ end
515
+ end
516
+ #--------------------------------------------------------------------------
517
+ # * Test Effect
518
+ #--------------------------------------------------------------------------
519
+ def item_effect_test(user, item, effect)
520
+ case effect.code
521
+ when EFFECT_RECOVER_HP
522
+ hp < mhp || effect.value1 < 0 || effect.value2 < 0
523
+ when EFFECT_RECOVER_MP
524
+ mp < mmp || effect.value1 < 0 || effect.value2 < 0
525
+ when EFFECT_ADD_STATE
526
+ !state?(effect.data_id)
527
+ when EFFECT_REMOVE_STATE
528
+ state?(effect.data_id)
529
+ when EFFECT_ADD_BUFF
530
+ !buff_max?(effect.data_id)
531
+ when EFFECT_ADD_DEBUFF
532
+ !debuff_max?(effect.data_id)
533
+ when EFFECT_REMOVE_BUFF
534
+ buff?(effect.data_id)
535
+ when EFFECT_REMOVE_DEBUFF
536
+ debuff?(effect.data_id)
537
+ when EFFECT_LEARN_SKILL
538
+ actor? && !skills.include?($data_skills[effect.data_id])
539
+ else
540
+ true
541
+ end
542
+ end
543
+ #--------------------------------------------------------------------------
544
+ # * Apply Effect
545
+ #--------------------------------------------------------------------------
546
+ def item_effect_apply(user, item, effect)
547
+ method_table = {
548
+ EFFECT_RECOVER_HP => :item_effect_recover_hp,
549
+ EFFECT_RECOVER_MP => :item_effect_recover_mp,
550
+ EFFECT_GAIN_TP => :item_effect_gain_tp,
551
+ EFFECT_ADD_STATE => :item_effect_add_state,
552
+ EFFECT_REMOVE_STATE => :item_effect_remove_state,
553
+ EFFECT_ADD_BUFF => :item_effect_add_buff,
554
+ EFFECT_ADD_DEBUFF => :item_effect_add_debuff,
555
+ EFFECT_REMOVE_BUFF => :item_effect_remove_buff,
556
+ EFFECT_REMOVE_DEBUFF => :item_effect_remove_debuff,
557
+ EFFECT_SPECIAL => :item_effect_special,
558
+ EFFECT_GROW => :item_effect_grow,
559
+ EFFECT_LEARN_SKILL => :item_effect_learn_skill,
560
+ EFFECT_COMMON_EVENT => :item_effect_common_event,
561
+ }
562
+ method_name = method_table[effect.code]
563
+ send(method_name, user, item, effect) if method_name
564
+ end
565
+ #--------------------------------------------------------------------------
566
+ # * [HP Recovery] Effect
567
+ #--------------------------------------------------------------------------
568
+ def item_effect_recover_hp(user, item, effect)
569
+ value = (mhp * effect.value1 + effect.value2) * rec
570
+ value *= user.pha if item.is_a?(RPG::Item)
571
+ value = value.to_i
572
+ @result.hp_damage -= value
573
+ @result.success = true
574
+ self.hp += value
575
+ end
576
+ #--------------------------------------------------------------------------
577
+ # * [MP Recovery] Effect
578
+ #--------------------------------------------------------------------------
579
+ def item_effect_recover_mp(user, item, effect)
580
+ value = (mmp * effect.value1 + effect.value2) * rec
581
+ value *= user.pha if item.is_a?(RPG::Item)
582
+ value = value.to_i
583
+ @result.mp_damage -= value
584
+ @result.success = true if value != 0
585
+ self.mp += value
586
+ end
587
+ #--------------------------------------------------------------------------
588
+ # * [TP Gain] Effect
589
+ #--------------------------------------------------------------------------
590
+ def item_effect_gain_tp(user, item, effect)
591
+ value = effect.value1.to_i
592
+ @result.tp_damage -= value
593
+ @result.success = true if value != 0
594
+ self.tp += value
595
+ end
596
+ #--------------------------------------------------------------------------
597
+ # * [Add State] Effect
598
+ #--------------------------------------------------------------------------
599
+ def item_effect_add_state(user, item, effect)
600
+ if effect.data_id == 0
601
+ item_effect_add_state_attack(user, item, effect)
602
+ else
603
+ item_effect_add_state_normal(user, item, effect)
604
+ end
605
+ end
606
+ #--------------------------------------------------------------------------
607
+ # * [Add State] Effect: Normal Attack
608
+ #--------------------------------------------------------------------------
609
+ def item_effect_add_state_attack(user, item, effect)
610
+ user.atk_states.each do |state_id|
611
+ chance = effect.value1
612
+ chance *= state_rate(state_id)
613
+ chance *= user.atk_states_rate(state_id)
614
+ chance *= luk_effect_rate(user)
615
+ if rand < chance
616
+ add_state(state_id)
617
+ @result.success = true
618
+ end
619
+ end
620
+ end
621
+ #--------------------------------------------------------------------------
622
+ # * [Add State] Effect: Normal
623
+ #--------------------------------------------------------------------------
624
+ def item_effect_add_state_normal(user, item, effect)
625
+ chance = effect.value1
626
+ chance *= state_rate(effect.data_id) if opposite?(user)
627
+ chance *= luk_effect_rate(user) if opposite?(user)
628
+ if rand < chance
629
+ add_state(effect.data_id)
630
+ @result.success = true
631
+ end
632
+ end
633
+ #--------------------------------------------------------------------------
634
+ # * [Remove State] Effect
635
+ #--------------------------------------------------------------------------
636
+ def item_effect_remove_state(user, item, effect)
637
+ chance = effect.value1
638
+ if rand < chance
639
+ remove_state(effect.data_id)
640
+ @result.success = true
641
+ end
642
+ end
643
+ #--------------------------------------------------------------------------
644
+ # * [Buff] Effect
645
+ #--------------------------------------------------------------------------
646
+ def item_effect_add_buff(user, item, effect)
647
+ add_buff(effect.data_id, effect.value1)
648
+ @result.success = true
649
+ end
650
+ #--------------------------------------------------------------------------
651
+ # * [Debuff] Effect
652
+ #--------------------------------------------------------------------------
653
+ def item_effect_add_debuff(user, item, effect)
654
+ chance = debuff_rate(effect.data_id) * luk_effect_rate(user)
655
+ if rand < chance
656
+ add_debuff(effect.data_id, effect.value1)
657
+ @result.success = true
658
+ end
659
+ end
660
+ #--------------------------------------------------------------------------
661
+ # * [Remove Buff] Effect
662
+ #--------------------------------------------------------------------------
663
+ def item_effect_remove_buff(user, item, effect)
664
+ remove_buff(effect.data_id) if @buffs[effect.data_id] > 0
665
+ @result.success = true
666
+ end
667
+ #--------------------------------------------------------------------------
668
+ # * [Remove Debuff] Effect
669
+ #--------------------------------------------------------------------------
670
+ def item_effect_remove_debuff(user, item, effect)
671
+ remove_buff(effect.data_id) if @buffs[effect.data_id] < 0
672
+ @result.success = true
673
+ end
674
+ #--------------------------------------------------------------------------
675
+ # * [Special Effect] Effect
676
+ #--------------------------------------------------------------------------
677
+ def item_effect_special(user, item, effect)
678
+ case effect.data_id
679
+ when SPECIAL_EFFECT_ESCAPE
680
+ escape
681
+ end
682
+ @result.success = true
683
+ end
684
+ #--------------------------------------------------------------------------
685
+ # * [Raise Parameter] Effect
686
+ #--------------------------------------------------------------------------
687
+ def item_effect_grow(user, item, effect)
688
+ add_param(effect.data_id, effect.value1.to_i)
689
+ @result.success = true
690
+ end
691
+ #--------------------------------------------------------------------------
692
+ # * [Learn Skill] Effect
693
+ #--------------------------------------------------------------------------
694
+ def item_effect_learn_skill(user, item, effect)
695
+ learn_skill(effect.data_id) if actor?
696
+ @result.success = true
697
+ end
698
+ #--------------------------------------------------------------------------
699
+ # * [Common Event] Effect
700
+ #--------------------------------------------------------------------------
701
+ def item_effect_common_event(user, item, effect)
702
+ end
703
+ #--------------------------------------------------------------------------
704
+ # * Effect of Skill/Item on Using Side
705
+ #--------------------------------------------------------------------------
706
+ def item_user_effect(user, item)
707
+ user.tp += item.tp_gain * user.tcr
708
+ end
709
+ #--------------------------------------------------------------------------
710
+ # * Get Effect Change Rate by Luck
711
+ #--------------------------------------------------------------------------
712
+ def luk_effect_rate(user)
713
+ [1.0 + (user.luk - luk) * 0.001, 0.0].max
714
+ end
715
+ #--------------------------------------------------------------------------
716
+ # * Determine if Hostile Relation
717
+ #--------------------------------------------------------------------------
718
+ def opposite?(battler)
719
+ actor? != battler.actor? || battler.magic_reflection
720
+ end
721
+ #--------------------------------------------------------------------------
722
+ # * Effect When Taking Damage on Map
723
+ #--------------------------------------------------------------------------
724
+ def perform_map_damage_effect
725
+ end
726
+ #--------------------------------------------------------------------------
727
+ # * Initialize TP
728
+ #--------------------------------------------------------------------------
729
+ def init_tp
730
+ self.tp = rand * 25
731
+ end
732
+ #--------------------------------------------------------------------------
733
+ # * Clear TP
734
+ #--------------------------------------------------------------------------
735
+ def clear_tp
736
+ self.tp = 0
737
+ end
738
+ #--------------------------------------------------------------------------
739
+ # * Charge TP by Damage Suffered
740
+ #--------------------------------------------------------------------------
741
+ def charge_tp_by_damage(damage_rate)
742
+ self.tp += 50 * damage_rate * tcr
743
+ end
744
+ #--------------------------------------------------------------------------
745
+ # * Regenerate HP
746
+ #--------------------------------------------------------------------------
747
+ def regenerate_hp
748
+ damage = -(mhp * hrg).to_i
749
+ perform_map_damage_effect if $game_party.in_battle && damage > 0
750
+ @result.hp_damage = [damage, max_slip_damage].min
751
+ self.hp -= @result.hp_damage
752
+ end
753
+ #--------------------------------------------------------------------------
754
+ # * Get Maximum Value of Slip Damage
755
+ #--------------------------------------------------------------------------
756
+ def max_slip_damage
757
+ $data_system.opt_slip_death ? hp : [hp - 1, 0].max
758
+ end
759
+ #--------------------------------------------------------------------------
760
+ # * Regenerate MP
761
+ #--------------------------------------------------------------------------
762
+ def regenerate_mp
763
+ @result.mp_damage = -(mmp * mrg).to_i
764
+ self.mp -= @result.mp_damage
765
+ end
766
+ #--------------------------------------------------------------------------
767
+ # * Regenerate TP
768
+ #--------------------------------------------------------------------------
769
+ def regenerate_tp
770
+ self.tp += 100 * trg
771
+ end
772
+ #--------------------------------------------------------------------------
773
+ # * Regenerate All
774
+ #--------------------------------------------------------------------------
775
+ def regenerate_all
776
+ if alive?
777
+ regenerate_hp
778
+ regenerate_mp
779
+ regenerate_tp
780
+ end
781
+ end
782
+ #--------------------------------------------------------------------------
783
+ # * Processing at Start of Battle
784
+ #--------------------------------------------------------------------------
785
+ def on_battle_start
786
+ init_tp unless preserve_tp?
787
+ end
788
+ #--------------------------------------------------------------------------
789
+ # * Processing at End of Action
790
+ #--------------------------------------------------------------------------
791
+ def on_action_end
792
+ @result.clear
793
+ remove_states_auto(1)
794
+ remove_buffs_auto
795
+ end
796
+ #--------------------------------------------------------------------------
797
+ # * Processing at End of Turn
798
+ #--------------------------------------------------------------------------
799
+ def on_turn_end
800
+ @result.clear
801
+ regenerate_all
802
+ update_state_turns
803
+ update_buff_turns
804
+ remove_states_auto(2)
805
+ end
806
+ #--------------------------------------------------------------------------
807
+ # * Processing at End of Battle
808
+ #--------------------------------------------------------------------------
809
+ def on_battle_end
810
+ @result.clear
811
+ remove_battle_states
812
+ remove_all_buffs
813
+ clear_actions
814
+ clear_tp unless preserve_tp?
815
+ appear
816
+ end
817
+ #--------------------------------------------------------------------------
818
+ # * Processing When Suffering Damage
819
+ #--------------------------------------------------------------------------
820
+ def on_damage(value)
821
+ remove_states_by_damage
822
+ charge_tp_by_damage(value.to_f / mhp)
823
+ end
824
+ end