rgss3_default_scripts 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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