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,159 @@
1
+ #==============================================================================
2
+ # ** Game_ActionResult
3
+ #------------------------------------------------------------------------------
4
+ # This class handles the results of battle actions. It is used internally for
5
+ # the Game_Battler class.
6
+ #==============================================================================
7
+
8
+ class Game_ActionResult
9
+ #--------------------------------------------------------------------------
10
+ # * Public Instance Variables
11
+ #--------------------------------------------------------------------------
12
+ attr_accessor :used # used flag
13
+ attr_accessor :missed # missed flag
14
+ attr_accessor :evaded # evaded flag
15
+ attr_accessor :critical # critical flag
16
+ attr_accessor :success # success flag
17
+ attr_accessor :hp_damage # HP damage
18
+ attr_accessor :mp_damage # MP damage
19
+ attr_accessor :tp_damage # TP damage
20
+ attr_accessor :hp_drain # HP drain
21
+ attr_accessor :mp_drain # MP drain
22
+ attr_accessor :added_states # added states
23
+ attr_accessor :removed_states # removed states
24
+ attr_accessor :added_buffs # added buffs
25
+ attr_accessor :added_debuffs # added debuffs
26
+ attr_accessor :removed_buffs # removed buffs/debuffs
27
+ #--------------------------------------------------------------------------
28
+ # * Object Initialization
29
+ #--------------------------------------------------------------------------
30
+ def initialize(battler)
31
+ @battler = battler
32
+ clear
33
+ end
34
+ #--------------------------------------------------------------------------
35
+ # * Clear
36
+ #--------------------------------------------------------------------------
37
+ def clear
38
+ clear_hit_flags
39
+ clear_damage_values
40
+ clear_status_effects
41
+ end
42
+ #--------------------------------------------------------------------------
43
+ # * Clear Hit Flags
44
+ #--------------------------------------------------------------------------
45
+ def clear_hit_flags
46
+ @used = false
47
+ @missed = false
48
+ @evaded = false
49
+ @critical = false
50
+ @success = false
51
+ end
52
+ #--------------------------------------------------------------------------
53
+ # * Clear Damage Values
54
+ #--------------------------------------------------------------------------
55
+ def clear_damage_values
56
+ @hp_damage = 0
57
+ @mp_damage = 0
58
+ @tp_damage = 0
59
+ @hp_drain = 0
60
+ @mp_drain = 0
61
+ end
62
+ #--------------------------------------------------------------------------
63
+ # * Create Damage
64
+ #--------------------------------------------------------------------------
65
+ def make_damage(value, item)
66
+ @critical = false if value == 0
67
+ @hp_damage = value if item.damage.to_hp?
68
+ @mp_damage = value if item.damage.to_mp?
69
+ @mp_damage = [@battler.mp, @mp_damage].min
70
+ @hp_drain = @hp_damage if item.damage.drain?
71
+ @mp_drain = @mp_damage if item.damage.drain?
72
+ @hp_drain = [@battler.hp, @hp_drain].min
73
+ @success = true if item.damage.to_hp? || @mp_damage != 0
74
+ end
75
+ #--------------------------------------------------------------------------
76
+ # * Clear Status Effects
77
+ #--------------------------------------------------------------------------
78
+ def clear_status_effects
79
+ @added_states = []
80
+ @removed_states = []
81
+ @added_buffs = []
82
+ @added_debuffs = []
83
+ @removed_buffs = []
84
+ end
85
+ #--------------------------------------------------------------------------
86
+ # * Get Added States as an Object Array
87
+ #--------------------------------------------------------------------------
88
+ def added_state_objects
89
+ @added_states.collect {|id| $data_states[id] }
90
+ end
91
+ #--------------------------------------------------------------------------
92
+ # * Get Removed States as an Object Array
93
+ #--------------------------------------------------------------------------
94
+ def removed_state_objects
95
+ @removed_states.collect {|id| $data_states[id] }
96
+ end
97
+ #--------------------------------------------------------------------------
98
+ # * Determine Whether Some Sort of Status (Parameter or State) Was Affected
99
+ #--------------------------------------------------------------------------
100
+ def status_affected?
101
+ !(@added_states.empty? && @removed_states.empty? &&
102
+ @added_buffs.empty? && @added_debuffs.empty? && @removed_buffs.empty?)
103
+ end
104
+ #--------------------------------------------------------------------------
105
+ # * Determine Final Hit
106
+ #--------------------------------------------------------------------------
107
+ def hit?
108
+ @used && !@missed && !@evaded
109
+ end
110
+ #--------------------------------------------------------------------------
111
+ # * Get Text for HP Damage
112
+ #--------------------------------------------------------------------------
113
+ def hp_damage_text
114
+ if @hp_drain > 0
115
+ fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
116
+ sprintf(fmt, @battler.name, Vocab::hp, @hp_drain)
117
+ elsif @hp_damage > 0
118
+ fmt = @battler.actor? ? Vocab::ActorDamage : Vocab::EnemyDamage
119
+ sprintf(fmt, @battler.name, @hp_damage)
120
+ elsif @hp_damage < 0
121
+ fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
122
+ sprintf(fmt, @battler.name, Vocab::hp, -hp_damage)
123
+ else
124
+ fmt = @battler.actor? ? Vocab::ActorNoDamage : Vocab::EnemyNoDamage
125
+ sprintf(fmt, @battler.name)
126
+ end
127
+ end
128
+ #--------------------------------------------------------------------------
129
+ # * Get Text for MP Damage
130
+ #--------------------------------------------------------------------------
131
+ def mp_damage_text
132
+ if @mp_drain > 0
133
+ fmt = @battler.actor? ? Vocab::ActorDrain : Vocab::EnemyDrain
134
+ sprintf(fmt, @battler.name, Vocab::mp, @mp_drain)
135
+ elsif @mp_damage > 0
136
+ fmt = @battler.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss
137
+ sprintf(fmt, @battler.name, Vocab::mp, @mp_damage)
138
+ elsif @mp_damage < 0
139
+ fmt = @battler.actor? ? Vocab::ActorRecovery : Vocab::EnemyRecovery
140
+ sprintf(fmt, @battler.name, Vocab::mp, -@mp_damage)
141
+ else
142
+ ""
143
+ end
144
+ end
145
+ #--------------------------------------------------------------------------
146
+ # * Get Text for TP Damage
147
+ #--------------------------------------------------------------------------
148
+ def tp_damage_text
149
+ if @tp_damage > 0
150
+ fmt = @battler.actor? ? Vocab::ActorLoss : Vocab::EnemyLoss
151
+ sprintf(fmt, @battler.name, Vocab::tp, @tp_damage)
152
+ elsif @tp_damage < 0
153
+ fmt = @battler.actor? ? Vocab::ActorGain : Vocab::EnemyGain
154
+ sprintf(fmt, @battler.name, Vocab::tp, -@tp_damage)
155
+ else
156
+ ""
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,696 @@
1
+ #==============================================================================
2
+ # ** Game_Actor
3
+ #------------------------------------------------------------------------------
4
+ # This class handles actors. It is used within the Game_Actors class
5
+ # ($game_actors) and is also referenced from the Game_Party class ($game_party).
6
+ #==============================================================================
7
+
8
+ class Game_Actor < Game_Battler
9
+ #--------------------------------------------------------------------------
10
+ # * Public Instance Variables
11
+ #--------------------------------------------------------------------------
12
+ attr_accessor :name # Name
13
+ attr_accessor :nickname # Nickname
14
+ attr_reader :character_name # character graphic filename
15
+ attr_reader :character_index # character graphic index
16
+ attr_reader :face_name # face graphic filename
17
+ attr_reader :face_index # face graphic index
18
+ attr_reader :class_id # class ID
19
+ attr_reader :level # level
20
+ attr_reader :action_input_index # action number being input
21
+ attr_reader :last_skill # For cursor memorization: Skill
22
+ #--------------------------------------------------------------------------
23
+ # * Object Initialization
24
+ #--------------------------------------------------------------------------
25
+ def initialize(actor_id)
26
+ super()
27
+ setup(actor_id)
28
+ @last_skill = Game_BaseItem.new
29
+ end
30
+ #--------------------------------------------------------------------------
31
+ # * Setup
32
+ #--------------------------------------------------------------------------
33
+ def setup(actor_id)
34
+ @actor_id = actor_id
35
+ @name = actor.name
36
+ @nickname = actor.nickname
37
+ init_graphics
38
+ @class_id = actor.class_id
39
+ @level = actor.initial_level
40
+ @exp = {}
41
+ @equips = []
42
+ init_exp
43
+ init_skills
44
+ init_equips(actor.equips)
45
+ clear_param_plus
46
+ recover_all
47
+ end
48
+ #--------------------------------------------------------------------------
49
+ # * Get Actor Object
50
+ #--------------------------------------------------------------------------
51
+ def actor
52
+ $data_actors[@actor_id]
53
+ end
54
+ #--------------------------------------------------------------------------
55
+ # * Initialize Graphics
56
+ #--------------------------------------------------------------------------
57
+ def init_graphics
58
+ @character_name = actor.character_name
59
+ @character_index = actor.character_index
60
+ @face_name = actor.face_name
61
+ @face_index = actor.face_index
62
+ end
63
+ #--------------------------------------------------------------------------
64
+ # * Get Total EXP Required for Rising to Specified Level
65
+ #--------------------------------------------------------------------------
66
+ def exp_for_level(level)
67
+ self.class.exp_for_level(level)
68
+ end
69
+ #--------------------------------------------------------------------------
70
+ # * Initialize EXP
71
+ #--------------------------------------------------------------------------
72
+ def init_exp
73
+ @exp[@class_id] = current_level_exp
74
+ end
75
+ #--------------------------------------------------------------------------
76
+ # * Get Experience
77
+ #--------------------------------------------------------------------------
78
+ def exp
79
+ @exp[@class_id]
80
+ end
81
+ #--------------------------------------------------------------------------
82
+ # * Get Minimum EXP for Current Level
83
+ #--------------------------------------------------------------------------
84
+ def current_level_exp
85
+ exp_for_level(@level)
86
+ end
87
+ #--------------------------------------------------------------------------
88
+ # * Get EXP for Next Level
89
+ #--------------------------------------------------------------------------
90
+ def next_level_exp
91
+ exp_for_level(@level + 1)
92
+ end
93
+ #--------------------------------------------------------------------------
94
+ # * Maximum Level
95
+ #--------------------------------------------------------------------------
96
+ def max_level
97
+ actor.max_level
98
+ end
99
+ #--------------------------------------------------------------------------
100
+ # * Determine Maximum Level
101
+ #--------------------------------------------------------------------------
102
+ def max_level?
103
+ @level >= max_level
104
+ end
105
+ #--------------------------------------------------------------------------
106
+ # * Initialize Skills
107
+ #--------------------------------------------------------------------------
108
+ def init_skills
109
+ @skills = []
110
+ self.class.learnings.each do |learning|
111
+ learn_skill(learning.skill_id) if learning.level <= @level
112
+ end
113
+ end
114
+ #--------------------------------------------------------------------------
115
+ # * Initialize Equipment
116
+ # equips: An array of initial equipment
117
+ #--------------------------------------------------------------------------
118
+ def init_equips(equips)
119
+ @equips = Array.new(equip_slots.size) { Game_BaseItem.new }
120
+ equips.each_with_index do |item_id, i|
121
+ etype_id = index_to_etype_id(i)
122
+ slot_id = empty_slot(etype_id)
123
+ @equips[slot_id].set_equip(etype_id == 0, item_id) if slot_id
124
+ end
125
+ refresh
126
+ end
127
+ #--------------------------------------------------------------------------
128
+ # * Convert Index Set by Editor to Equipment Type ID
129
+ #--------------------------------------------------------------------------
130
+ def index_to_etype_id(index)
131
+ index == 1 && dual_wield? ? 0 : index
132
+ end
133
+ #--------------------------------------------------------------------------
134
+ # * Convert from Equipment Type to List of Slot IDs
135
+ #--------------------------------------------------------------------------
136
+ def slot_list(etype_id)
137
+ result = []
138
+ equip_slots.each_with_index {|e, i| result.push(i) if e == etype_id }
139
+ result
140
+ end
141
+ #--------------------------------------------------------------------------
142
+ # * Convert from Equipment Type to Slot ID (Empty Take Precedence)
143
+ #--------------------------------------------------------------------------
144
+ def empty_slot(etype_id)
145
+ list = slot_list(etype_id)
146
+ list.find {|i| @equips[i].is_nil? } || list[0]
147
+ end
148
+ #--------------------------------------------------------------------------
149
+ # * Get Equipment Slot Array
150
+ #--------------------------------------------------------------------------
151
+ def equip_slots
152
+ return [0,0,2,3,4] if dual_wield? # Dual wield
153
+ return [0,1,2,3,4] # Normal
154
+ end
155
+ #--------------------------------------------------------------------------
156
+ # * Get Weapon Object Array
157
+ #--------------------------------------------------------------------------
158
+ def weapons
159
+ @equips.select {|item| item.is_weapon? }.collect {|item| item.object }
160
+ end
161
+ #--------------------------------------------------------------------------
162
+ # * Get Armor Object Array
163
+ #--------------------------------------------------------------------------
164
+ def armors
165
+ @equips.select {|item| item.is_armor? }.collect {|item| item.object }
166
+ end
167
+ #--------------------------------------------------------------------------
168
+ # * Get Equipped Item Object Array
169
+ #--------------------------------------------------------------------------
170
+ def equips
171
+ @equips.collect {|item| item.object }
172
+ end
173
+ #--------------------------------------------------------------------------
174
+ # * Determine if Equipment Change Possible
175
+ # slot_id: Equipment slot ID
176
+ #--------------------------------------------------------------------------
177
+ def equip_change_ok?(slot_id)
178
+ return false if equip_type_fixed?(equip_slots[slot_id])
179
+ return false if equip_type_sealed?(equip_slots[slot_id])
180
+ return true
181
+ end
182
+ #--------------------------------------------------------------------------
183
+ # * Change Equipment
184
+ # slot_id: Equipment slot ID
185
+ # item: Weapon/armor (remove equipment if nil)
186
+ #--------------------------------------------------------------------------
187
+ def change_equip(slot_id, item)
188
+ return unless trade_item_with_party(item, equips[slot_id])
189
+ return if item && equip_slots[slot_id] != item.etype_id
190
+ @equips[slot_id].object = item
191
+ refresh
192
+ end
193
+ #--------------------------------------------------------------------------
194
+ # * Forcibly Change Equipment
195
+ # slot_id: Equipment slot ID
196
+ # item: Weapon/armor (remove equipment if nil)
197
+ #--------------------------------------------------------------------------
198
+ def force_change_equip(slot_id, item)
199
+ @equips[slot_id].object = item
200
+ release_unequippable_items(false)
201
+ refresh
202
+ end
203
+ #--------------------------------------------------------------------------
204
+ # * Trade Item with Party
205
+ # new_item: Item to get from party
206
+ # old_item: Item to give to party
207
+ #--------------------------------------------------------------------------
208
+ def trade_item_with_party(new_item, old_item)
209
+ return false if new_item && !$game_party.has_item?(new_item)
210
+ $game_party.gain_item(old_item, 1)
211
+ $game_party.lose_item(new_item, 1)
212
+ return true
213
+ end
214
+ #--------------------------------------------------------------------------
215
+ # * Change Equipment (Specify with ID)
216
+ # slot_id: Equipment slot ID
217
+ # item_id: Weapons/armor ID
218
+ #--------------------------------------------------------------------------
219
+ def change_equip_by_id(slot_id, item_id)
220
+ if equip_slots[slot_id] == 0
221
+ change_equip(slot_id, $data_weapons[item_id])
222
+ else
223
+ change_equip(slot_id, $data_armors[item_id])
224
+ end
225
+ end
226
+ #--------------------------------------------------------------------------
227
+ # * Discard Equipment
228
+ # item: Weapon/armor to discard
229
+ #--------------------------------------------------------------------------
230
+ def discard_equip(item)
231
+ slot_id = equips.index(item)
232
+ @equips[slot_id].object = nil if slot_id
233
+ end
234
+ #--------------------------------------------------------------------------
235
+ # * Remove Equipment that Cannot Be Equipped
236
+ # item_gain: Return removed equipment to party.
237
+ #--------------------------------------------------------------------------
238
+ def release_unequippable_items(item_gain = true)
239
+ loop do
240
+ last_equips = equips.dup
241
+ @equips.each_with_index do |item, i|
242
+ if !equippable?(item.object) || item.object.etype_id != equip_slots[i]
243
+ trade_item_with_party(nil, item.object) if item_gain
244
+ item.object = nil
245
+ end
246
+ end
247
+ return if equips == last_equips
248
+ end
249
+ end
250
+ #--------------------------------------------------------------------------
251
+ # * Remove All Equipment
252
+ #--------------------------------------------------------------------------
253
+ def clear_equipments
254
+ equip_slots.size.times do |i|
255
+ change_equip(i, nil) if equip_change_ok?(i)
256
+ end
257
+ end
258
+ #--------------------------------------------------------------------------
259
+ # * Ultimate Equipment
260
+ #--------------------------------------------------------------------------
261
+ def optimize_equipments
262
+ clear_equipments
263
+ equip_slots.size.times do |i|
264
+ next if !equip_change_ok?(i)
265
+ items = $game_party.equip_items.select do |item|
266
+ item.etype_id == equip_slots[i] &&
267
+ equippable?(item) && item.performance >= 0
268
+ end
269
+ change_equip(i, items.max_by {|item| item.performance })
270
+ end
271
+ end
272
+ #--------------------------------------------------------------------------
273
+ # * Determine if Skill-Required Weapon Is Equipped
274
+ #--------------------------------------------------------------------------
275
+ def skill_wtype_ok?(skill)
276
+ wtype_id1 = skill.required_wtype_id1
277
+ wtype_id2 = skill.required_wtype_id2
278
+ return true if wtype_id1 == 0 && wtype_id2 == 0
279
+ return true if wtype_id1 > 0 && wtype_equipped?(wtype_id1)
280
+ return true if wtype_id2 > 0 && wtype_equipped?(wtype_id2)
281
+ return false
282
+ end
283
+ #--------------------------------------------------------------------------
284
+ # * Determine if Specific Type of Weapon Is Equipped
285
+ #--------------------------------------------------------------------------
286
+ def wtype_equipped?(wtype_id)
287
+ weapons.any? {|weapon| weapon.wtype_id == wtype_id }
288
+ end
289
+ #--------------------------------------------------------------------------
290
+ # * Refresh
291
+ #--------------------------------------------------------------------------
292
+ def refresh
293
+ release_unequippable_items
294
+ super
295
+ end
296
+ #--------------------------------------------------------------------------
297
+ # * Determine if Actor or Not
298
+ #--------------------------------------------------------------------------
299
+ def actor?
300
+ return true
301
+ end
302
+ #--------------------------------------------------------------------------
303
+ # * Get Allied Units
304
+ #--------------------------------------------------------------------------
305
+ def friends_unit
306
+ $game_party
307
+ end
308
+ #--------------------------------------------------------------------------
309
+ # * Get Enemy Units
310
+ #--------------------------------------------------------------------------
311
+ def opponents_unit
312
+ $game_troop
313
+ end
314
+ #--------------------------------------------------------------------------
315
+ # * Get Actor ID
316
+ #--------------------------------------------------------------------------
317
+ def id
318
+ @actor_id
319
+ end
320
+ #--------------------------------------------------------------------------
321
+ # * Get Index
322
+ #--------------------------------------------------------------------------
323
+ def index
324
+ $game_party.members.index(self)
325
+ end
326
+ #--------------------------------------------------------------------------
327
+ # * Determine Battle Members
328
+ #--------------------------------------------------------------------------
329
+ def battle_member?
330
+ $game_party.battle_members.include?(self)
331
+ end
332
+ #--------------------------------------------------------------------------
333
+ # * Get Class Object
334
+ #--------------------------------------------------------------------------
335
+ def class
336
+ $data_classes[@class_id]
337
+ end
338
+ #--------------------------------------------------------------------------
339
+ # * Get Skill Object Array
340
+ #--------------------------------------------------------------------------
341
+ def skills
342
+ (@skills | added_skills).sort.collect {|id| $data_skills[id] }
343
+ end
344
+ #--------------------------------------------------------------------------
345
+ # * Get Array of Currently Usable Skills
346
+ #--------------------------------------------------------------------------
347
+ def usable_skills
348
+ skills.select {|skill| usable?(skill) }
349
+ end
350
+ #--------------------------------------------------------------------------
351
+ # * Get Array of All Objects Retaining Features
352
+ #--------------------------------------------------------------------------
353
+ def feature_objects
354
+ super + [actor] + [self.class] + equips.compact
355
+ end
356
+ #--------------------------------------------------------------------------
357
+ # * Get Attack Element
358
+ #--------------------------------------------------------------------------
359
+ def atk_elements
360
+ set = super
361
+ set |= [1] if weapons.compact.empty? # Unarmed: Physical element
362
+ return set
363
+ end
364
+ #--------------------------------------------------------------------------
365
+ # * Get Maximum Value of Parameter
366
+ #--------------------------------------------------------------------------
367
+ def param_max(param_id)
368
+ return 9999 if param_id == 0 # MHP
369
+ return super
370
+ end
371
+ #--------------------------------------------------------------------------
372
+ # * Get Base Value of Parameter
373
+ #--------------------------------------------------------------------------
374
+ def param_base(param_id)
375
+ self.class.params[param_id, @level]
376
+ end
377
+ #--------------------------------------------------------------------------
378
+ # * Get Added Value of Parameter
379
+ #--------------------------------------------------------------------------
380
+ def param_plus(param_id)
381
+ equips.compact.inject(super) {|r, item| r += item.params[param_id] }
382
+ end
383
+ #--------------------------------------------------------------------------
384
+ # * Get Normal Attack Animation ID
385
+ #--------------------------------------------------------------------------
386
+ def atk_animation_id1
387
+ if dual_wield?
388
+ return weapons[0].animation_id if weapons[0]
389
+ return weapons[1] ? 0 : 1
390
+ else
391
+ return weapons[0] ? weapons[0].animation_id : 1
392
+ end
393
+ end
394
+ #--------------------------------------------------------------------------
395
+ # * Get Animation ID of Normal Attack (Dual Wield: Weapon 2)
396
+ #--------------------------------------------------------------------------
397
+ def atk_animation_id2
398
+ if dual_wield?
399
+ return weapons[1] ? weapons[1].animation_id : 0
400
+ else
401
+ return 0
402
+ end
403
+ end
404
+ #--------------------------------------------------------------------------
405
+ # * Change Experience
406
+ # show : Level up display flag
407
+ #--------------------------------------------------------------------------
408
+ def change_exp(exp, show)
409
+ @exp[@class_id] = [exp, 0].max
410
+ last_level = @level
411
+ last_skills = skills
412
+ level_up while !max_level? && self.exp >= next_level_exp
413
+ level_down while self.exp < current_level_exp
414
+ display_level_up(skills - last_skills) if show && @level > last_level
415
+ refresh
416
+ end
417
+ #--------------------------------------------------------------------------
418
+ # * Get Experience
419
+ #--------------------------------------------------------------------------
420
+ def exp
421
+ @exp[@class_id]
422
+ end
423
+ #--------------------------------------------------------------------------
424
+ # * Level Up
425
+ #--------------------------------------------------------------------------
426
+ def level_up
427
+ @level += 1
428
+ self.class.learnings.each do |learning|
429
+ learn_skill(learning.skill_id) if learning.level == @level
430
+ end
431
+ end
432
+ #--------------------------------------------------------------------------
433
+ # * Level Down
434
+ #--------------------------------------------------------------------------
435
+ def level_down
436
+ @level -= 1
437
+ end
438
+ #--------------------------------------------------------------------------
439
+ # * Show Level Up Message
440
+ # new_skills : Array of newly learned skills
441
+ #--------------------------------------------------------------------------
442
+ def display_level_up(new_skills)
443
+ $game_message.new_page
444
+ $game_message.add(sprintf(Vocab::LevelUp, @name, Vocab::level, @level))
445
+ new_skills.each do |skill|
446
+ $game_message.add(sprintf(Vocab::ObtainSkill, skill.name))
447
+ end
448
+ end
449
+ #--------------------------------------------------------------------------
450
+ # * Get EXP (Account for Experience Rate)
451
+ #--------------------------------------------------------------------------
452
+ def gain_exp(exp)
453
+ change_exp(self.exp + (exp * final_exp_rate).to_i, true)
454
+ end
455
+ #--------------------------------------------------------------------------
456
+ # * Calculate Final EXP Rate
457
+ #--------------------------------------------------------------------------
458
+ def final_exp_rate
459
+ exr * (battle_member? ? 1 : reserve_members_exp_rate)
460
+ end
461
+ #--------------------------------------------------------------------------
462
+ # * Get EXP Rate for Reserve Members
463
+ #--------------------------------------------------------------------------
464
+ def reserve_members_exp_rate
465
+ $data_system.opt_extra_exp ? 1 : 0
466
+ end
467
+ #--------------------------------------------------------------------------
468
+ # * Change Level
469
+ # show : Level up display flag
470
+ #--------------------------------------------------------------------------
471
+ def change_level(level, show)
472
+ level = [[level, max_level].min, 1].max
473
+ change_exp(exp_for_level(level), show)
474
+ end
475
+ #--------------------------------------------------------------------------
476
+ # * Learn Skill
477
+ #--------------------------------------------------------------------------
478
+ def learn_skill(skill_id)
479
+ unless skill_learn?($data_skills[skill_id])
480
+ @skills.push(skill_id)
481
+ @skills.sort!
482
+ end
483
+ end
484
+ #--------------------------------------------------------------------------
485
+ # * Forget Skill
486
+ #--------------------------------------------------------------------------
487
+ def forget_skill(skill_id)
488
+ @skills.delete(skill_id)
489
+ end
490
+ #--------------------------------------------------------------------------
491
+ # * Determine if Skill Is Already Learned
492
+ #--------------------------------------------------------------------------
493
+ def skill_learn?(skill)
494
+ skill.is_a?(RPG::Skill) && @skills.include?(skill.id)
495
+ end
496
+ #--------------------------------------------------------------------------
497
+ # * Get Description
498
+ #--------------------------------------------------------------------------
499
+ def description
500
+ actor.description
501
+ end
502
+ #--------------------------------------------------------------------------
503
+ # * Change Class
504
+ # keep_exp: Keep EXP
505
+ #--------------------------------------------------------------------------
506
+ def change_class(class_id, keep_exp = false)
507
+ @exp[class_id] = exp if keep_exp
508
+ @class_id = class_id
509
+ change_exp(@exp[@class_id] || 0, false)
510
+ refresh
511
+ end
512
+ #--------------------------------------------------------------------------
513
+ # * Change Graphics
514
+ #--------------------------------------------------------------------------
515
+ def set_graphic(character_name, character_index, face_name, face_index)
516
+ @character_name = character_name
517
+ @character_index = character_index
518
+ @face_name = face_name
519
+ @face_index = face_index
520
+ end
521
+ #--------------------------------------------------------------------------
522
+ # * Use Sprites?
523
+ #--------------------------------------------------------------------------
524
+ def use_sprite?
525
+ return false
526
+ end
527
+ #--------------------------------------------------------------------------
528
+ # * Execute Damage Effect
529
+ #--------------------------------------------------------------------------
530
+ def perform_damage_effect
531
+ $game_troop.screen.start_shake(5, 5, 10)
532
+ @sprite_effect_type = :blink
533
+ Sound.play_actor_damage
534
+ end
535
+ #--------------------------------------------------------------------------
536
+ # * Execute Collapse Effect
537
+ #--------------------------------------------------------------------------
538
+ def perform_collapse_effect
539
+ if $game_party.in_battle
540
+ @sprite_effect_type = :collapse
541
+ Sound.play_actor_collapse
542
+ end
543
+ end
544
+ #--------------------------------------------------------------------------
545
+ # * Create Action Candidate List for Auto Battle
546
+ #--------------------------------------------------------------------------
547
+ def make_action_list
548
+ list = []
549
+ list.push(Game_Action.new(self).set_attack.evaluate)
550
+ usable_skills.each do |skill|
551
+ list.push(Game_Action.new(self).set_skill(skill.id).evaluate)
552
+ end
553
+ list
554
+ end
555
+ #--------------------------------------------------------------------------
556
+ # * Create Action During Auto Battle
557
+ #--------------------------------------------------------------------------
558
+ def make_auto_battle_actions
559
+ @actions.size.times do |i|
560
+ @actions[i] = make_action_list.max_by {|action| action.value }
561
+ end
562
+ end
563
+ #--------------------------------------------------------------------------
564
+ # * Create Action During Confusion
565
+ #--------------------------------------------------------------------------
566
+ def make_confusion_actions
567
+ @actions.size.times do |i|
568
+ @actions[i].set_confusion
569
+ end
570
+ end
571
+ #--------------------------------------------------------------------------
572
+ # * Create Battle Action
573
+ #--------------------------------------------------------------------------
574
+ def make_actions
575
+ super
576
+ if auto_battle?
577
+ make_auto_battle_actions
578
+ elsif confusion?
579
+ make_confusion_actions
580
+ end
581
+ end
582
+ #--------------------------------------------------------------------------
583
+ # * Processing Performed When Player Takes 1 Step
584
+ #--------------------------------------------------------------------------
585
+ def on_player_walk
586
+ @result.clear
587
+ check_floor_effect
588
+ if $game_player.normal_walk?
589
+ turn_end_on_map
590
+ states.each {|state| update_state_steps(state) }
591
+ show_added_states
592
+ show_removed_states
593
+ end
594
+ end
595
+ #--------------------------------------------------------------------------
596
+ # * Update Step Count for State
597
+ #--------------------------------------------------------------------------
598
+ def update_state_steps(state)
599
+ if state.remove_by_walking
600
+ @state_steps[state.id] -= 1 if @state_steps[state.id] > 0
601
+ remove_state(state.id) if @state_steps[state.id] == 0
602
+ end
603
+ end
604
+ #--------------------------------------------------------------------------
605
+ # * Show Added State
606
+ #--------------------------------------------------------------------------
607
+ def show_added_states
608
+ @result.added_state_objects.each do |state|
609
+ $game_message.add(name + state.message1) unless state.message1.empty?
610
+ end
611
+ end
612
+ #--------------------------------------------------------------------------
613
+ # * Show Removed State
614
+ #--------------------------------------------------------------------------
615
+ def show_removed_states
616
+ @result.removed_state_objects.each do |state|
617
+ $game_message.add(name + state.message4) unless state.message4.empty?
618
+ end
619
+ end
620
+ #--------------------------------------------------------------------------
621
+ # * Number of Steps Regarded as One Turn in Battle
622
+ #--------------------------------------------------------------------------
623
+ def steps_for_turn
624
+ return 20
625
+ end
626
+ #--------------------------------------------------------------------------
627
+ # * End of Turn Processing on Map Screen
628
+ #--------------------------------------------------------------------------
629
+ def turn_end_on_map
630
+ if $game_party.steps % steps_for_turn == 0
631
+ on_turn_end
632
+ perform_map_damage_effect if @result.hp_damage > 0
633
+ end
634
+ end
635
+ #--------------------------------------------------------------------------
636
+ # * Determine Floor Effect
637
+ #--------------------------------------------------------------------------
638
+ def check_floor_effect
639
+ execute_floor_damage if $game_player.on_damage_floor?
640
+ end
641
+ #--------------------------------------------------------------------------
642
+ # * Floor Damage Processing
643
+ #--------------------------------------------------------------------------
644
+ def execute_floor_damage
645
+ damage = (basic_floor_damage * fdr).to_i
646
+ self.hp -= [damage, max_floor_damage].min
647
+ perform_map_damage_effect if damage > 0
648
+ end
649
+ #--------------------------------------------------------------------------
650
+ # * Get Base Value for Floor Damage
651
+ #--------------------------------------------------------------------------
652
+ def basic_floor_damage
653
+ return 10
654
+ end
655
+ #--------------------------------------------------------------------------
656
+ # * Get Maximum Value for Floor Damage
657
+ #--------------------------------------------------------------------------
658
+ def max_floor_damage
659
+ $data_system.opt_floor_death ? hp : [hp - 1, 0].max
660
+ end
661
+ #--------------------------------------------------------------------------
662
+ # * Execute Damage Effect on Map
663
+ #--------------------------------------------------------------------------
664
+ def perform_map_damage_effect
665
+ $game_map.screen.start_flash_for_damage
666
+ end
667
+ #--------------------------------------------------------------------------
668
+ # * Clear Actions
669
+ #--------------------------------------------------------------------------
670
+ def clear_actions
671
+ super
672
+ @action_input_index = 0
673
+ end
674
+ #--------------------------------------------------------------------------
675
+ # * Get Action Being Input
676
+ #--------------------------------------------------------------------------
677
+ def input
678
+ @actions[@action_input_index]
679
+ end
680
+ #--------------------------------------------------------------------------
681
+ # * To Next Command Input
682
+ #--------------------------------------------------------------------------
683
+ def next_command
684
+ return false if @action_input_index >= @actions.size - 1
685
+ @action_input_index += 1
686
+ return true
687
+ end
688
+ #--------------------------------------------------------------------------
689
+ # * To Previous Command Input
690
+ #--------------------------------------------------------------------------
691
+ def prior_command
692
+ return false if @action_input_index <= 0
693
+ @action_input_index -= 1
694
+ return true
695
+ end
696
+ end