rgss3_default_scripts 1.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/Gemfile +4 -0
- data/README.md +9 -0
- data/Rakefile +2 -0
- data/lib/rgss3_default_scripts.rb +109 -0
- data/lib/rgss3_default_scripts/BattleManager.rb +392 -0
- data/lib/rgss3_default_scripts/Cache.rb +134 -0
- data/lib/rgss3_default_scripts/DataManager.rb +267 -0
- data/lib/rgss3_default_scripts/Game_Action.rb +262 -0
- data/lib/rgss3_default_scripts/Game_ActionResult.rb +159 -0
- data/lib/rgss3_default_scripts/Game_Actor.rb +696 -0
- data/lib/rgss3_default_scripts/Game_Actors.rb +22 -0
- data/lib/rgss3_default_scripts/Game_BaseItem.rb +51 -0
- data/lib/rgss3_default_scripts/Game_Battler.rb +824 -0
- data/lib/rgss3_default_scripts/Game_BattlerBase.rb +731 -0
- data/lib/rgss3_default_scripts/Game_Character.rb +396 -0
- data/lib/rgss3_default_scripts/Game_CharacterBase.rb +443 -0
- data/lib/rgss3_default_scripts/Game_CommonEvent.rb +41 -0
- data/lib/rgss3_default_scripts/Game_Enemy.rb +264 -0
- data/lib/rgss3_default_scripts/Game_Event.rb +308 -0
- data/lib/rgss3_default_scripts/Game_Follower.rb +74 -0
- data/lib/rgss3_default_scripts/Game_Followers.rb +112 -0
- data/lib/rgss3_default_scripts/Game_Interpreter.rb +1413 -0
- data/lib/rgss3_default_scripts/Game_Map.rb +704 -0
- data/lib/rgss3_default_scripts/Game_Message.rb +101 -0
- data/lib/rgss3_default_scripts/Game_Party.rb +418 -0
- data/lib/rgss3_default_scripts/Game_Picture.rb +161 -0
- data/lib/rgss3_default_scripts/Game_Pictures.rb +28 -0
- data/lib/rgss3_default_scripts/Game_Player.rb +488 -0
- data/lib/rgss3_default_scripts/Game_Screen.rb +234 -0
- data/lib/rgss3_default_scripts/Game_SelfSwitches.rb +35 -0
- data/lib/rgss3_default_scripts/Game_Switches.rb +35 -0
- data/lib/rgss3_default_scripts/Game_System.rb +122 -0
- data/lib/rgss3_default_scripts/Game_Temp.rb +45 -0
- data/lib/rgss3_default_scripts/Game_Timer.rb +56 -0
- data/lib/rgss3_default_scripts/Game_Troop.rb +205 -0
- data/lib/rgss3_default_scripts/Game_Unit.rb +131 -0
- data/lib/rgss3_default_scripts/Game_Variables.rb +34 -0
- data/lib/rgss3_default_scripts/Game_Vehicle.rb +193 -0
- data/lib/rgss3_default_scripts/SceneManager.rb +94 -0
- data/lib/rgss3_default_scripts/Scene_Base.rb +132 -0
- data/lib/rgss3_default_scripts/Scene_Battle.rb +693 -0
- data/lib/rgss3_default_scripts/Scene_Debug.rb +87 -0
- data/lib/rgss3_default_scripts/Scene_End.rb +61 -0
- data/lib/rgss3_default_scripts/Scene_Equip.rb +144 -0
- data/lib/rgss3_default_scripts/Scene_File.rb +203 -0
- data/lib/rgss3_default_scripts/Scene_Gameover.rb +85 -0
- data/lib/rgss3_default_scripts/Scene_Item.rb +75 -0
- data/lib/rgss3_default_scripts/Scene_ItemBase.rb +147 -0
- data/lib/rgss3_default_scripts/Scene_Load.rb +40 -0
- data/lib/rgss3_default_scripts/Scene_Map.rb +276 -0
- data/lib/rgss3_default_scripts/Scene_Menu.rb +127 -0
- data/lib/rgss3_default_scripts/Scene_MenuBase.rb +63 -0
- data/lib/rgss3_default_scripts/Scene_Name.rb +32 -0
- data/lib/rgss3_default_scripts/Scene_Save.rb +38 -0
- data/lib/rgss3_default_scripts/Scene_Shop.rb +299 -0
- data/lib/rgss3_default_scripts/Scene_Skill.rb +108 -0
- data/lib/rgss3_default_scripts/Scene_Status.rb +25 -0
- data/lib/rgss3_default_scripts/Scene_Title.rb +137 -0
- data/lib/rgss3_default_scripts/Sound.rb +135 -0
- data/lib/rgss3_default_scripts/Sprite_Base.rb +232 -0
- data/lib/rgss3_default_scripts/Sprite_Battler.rb +231 -0
- data/lib/rgss3_default_scripts/Sprite_Character.rb +226 -0
- data/lib/rgss3_default_scripts/Sprite_Picture.rb +82 -0
- data/lib/rgss3_default_scripts/Sprite_Timer.rb +77 -0
- data/lib/rgss3_default_scripts/Spriteset_Battle.rb +389 -0
- data/lib/rgss3_default_scripts/Spriteset_Map.rb +273 -0
- data/lib/rgss3_default_scripts/Spriteset_Weather.rb +184 -0
- data/lib/rgss3_default_scripts/Vocab.rb +145 -0
- data/lib/rgss3_default_scripts/Window_ActorCommand.rb +78 -0
- data/lib/rgss3_default_scripts/Window_Base.rb +571 -0
- data/lib/rgss3_default_scripts/Window_BattleActor.rb +38 -0
- data/lib/rgss3_default_scripts/Window_BattleEnemy.rb +70 -0
- data/lib/rgss3_default_scripts/Window_BattleItem.rb +40 -0
- data/lib/rgss3_default_scripts/Window_BattleLog.rb +425 -0
- data/lib/rgss3_default_scripts/Window_BattleSkill.rb +34 -0
- data/lib/rgss3_default_scripts/Window_BattleStatus.rb +111 -0
- data/lib/rgss3_default_scripts/Window_ChoiceList.rb +88 -0
- data/lib/rgss3_default_scripts/Window_Command.rb +152 -0
- data/lib/rgss3_default_scripts/Window_DebugLeft.rb +104 -0
- data/lib/rgss3_default_scripts/Window_DebugRight.rb +119 -0
- data/lib/rgss3_default_scripts/Window_EquipCommand.rb +36 -0
- data/lib/rgss3_default_scripts/Window_EquipItem.rb +78 -0
- data/lib/rgss3_default_scripts/Window_EquipSlot.rb +111 -0
- data/lib/rgss3_default_scripts/Window_EquipStatus.rb +97 -0
- data/lib/rgss3_default_scripts/Window_GameEnd.rb +38 -0
- data/lib/rgss3_default_scripts/Window_Gold.rb +47 -0
- data/lib/rgss3_default_scripts/Window_Help.rb +43 -0
- data/lib/rgss3_default_scripts/Window_HorzCommand.rb +106 -0
- data/lib/rgss3_default_scripts/Window_ItemCategory.rb +54 -0
- data/lib/rgss3_default_scripts/Window_ItemList.rb +117 -0
- data/lib/rgss3_default_scripts/Window_KeyItem.rb +55 -0
- data/lib/rgss3_default_scripts/Window_MapName.rb +96 -0
- data/lib/rgss3_default_scripts/Window_MenuActor.rb +43 -0
- data/lib/rgss3_default_scripts/Window_MenuCommand.rb +106 -0
- data/lib/rgss3_default_scripts/Window_MenuStatus.rb +85 -0
- data/lib/rgss3_default_scripts/Window_Message.rb +397 -0
- data/lib/rgss3_default_scripts/Window_NameEdit.rb +129 -0
- data/lib/rgss3_default_scripts/Window_NameInput.rb +253 -0
- data/lib/rgss3_default_scripts/Window_NumberInput.rb +148 -0
- data/lib/rgss3_default_scripts/Window_PartyCommand.rb +47 -0
- data/lib/rgss3_default_scripts/Window_SaveFile.rb +69 -0
- data/lib/rgss3_default_scripts/Window_ScrollText.rb +90 -0
- data/lib/rgss3_default_scripts/Window_Selectable.rb +442 -0
- data/lib/rgss3_default_scripts/Window_ShopBuy.rb +115 -0
- data/lib/rgss3_default_scripts/Window_ShopCommand.rb +36 -0
- data/lib/rgss3_default_scripts/Window_ShopNumber.rb +137 -0
- data/lib/rgss3_default_scripts/Window_ShopSell.rb +27 -0
- data/lib/rgss3_default_scripts/Window_ShopStatus.rb +124 -0
- data/lib/rgss3_default_scripts/Window_SkillCommand.rb +76 -0
- data/lib/rgss3_default_scripts/Window_SkillList.rb +121 -0
- data/lib/rgss3_default_scripts/Window_SkillStatus.rb +38 -0
- data/lib/rgss3_default_scripts/Window_Status.rb +125 -0
- data/lib/rgss3_default_scripts/Window_TitleCommand.rb +45 -0
- data/rgss3_default_scripts.gemspec +23 -0
- metadata +186 -0
@@ -0,0 +1,704 @@
|
|
1
|
+
#==============================================================================
|
2
|
+
# ** Game_Map
|
3
|
+
#------------------------------------------------------------------------------
|
4
|
+
# This class handles maps. It includes scrolling and passage determination
|
5
|
+
# functions. The instance of this class is referenced by $game_map.
|
6
|
+
#==============================================================================
|
7
|
+
|
8
|
+
class Game_Map
|
9
|
+
#--------------------------------------------------------------------------
|
10
|
+
# * Public Instance Variables
|
11
|
+
#--------------------------------------------------------------------------
|
12
|
+
attr_reader :screen # map screen state
|
13
|
+
attr_reader :interpreter # map event interpreter
|
14
|
+
attr_reader :events # events
|
15
|
+
attr_reader :display_x # display X coordinate
|
16
|
+
attr_reader :display_y # display Y coordinate
|
17
|
+
attr_reader :parallax_name # parallax background filename
|
18
|
+
attr_reader :vehicles # vehicle
|
19
|
+
attr_reader :battleback1_name # battle background (floor) filename
|
20
|
+
attr_reader :battleback2_name # battle background (wall) filename
|
21
|
+
attr_accessor :name_display # map name display flag
|
22
|
+
attr_accessor :need_refresh # refresh request flag
|
23
|
+
#--------------------------------------------------------------------------
|
24
|
+
# * Object Initialization
|
25
|
+
#--------------------------------------------------------------------------
|
26
|
+
def initialize
|
27
|
+
@screen = Game_Screen.new
|
28
|
+
@interpreter = Game_Interpreter.new
|
29
|
+
@map_id = 0
|
30
|
+
@events = {}
|
31
|
+
@display_x = 0
|
32
|
+
@display_y = 0
|
33
|
+
create_vehicles
|
34
|
+
@name_display = true
|
35
|
+
end
|
36
|
+
#--------------------------------------------------------------------------
|
37
|
+
# * Setup
|
38
|
+
#--------------------------------------------------------------------------
|
39
|
+
def setup(map_id)
|
40
|
+
@map_id = map_id
|
41
|
+
@map = load_data(sprintf("Data/Map%03d.rvdata2", @map_id))
|
42
|
+
@tileset_id = @map.tileset_id
|
43
|
+
@display_x = 0
|
44
|
+
@display_y = 0
|
45
|
+
referesh_vehicles
|
46
|
+
setup_events
|
47
|
+
setup_scroll
|
48
|
+
setup_parallax
|
49
|
+
setup_battleback
|
50
|
+
@need_refresh = false
|
51
|
+
end
|
52
|
+
#--------------------------------------------------------------------------
|
53
|
+
# * Create Vehicles
|
54
|
+
#--------------------------------------------------------------------------
|
55
|
+
def create_vehicles
|
56
|
+
@vehicles = []
|
57
|
+
@vehicles[0] = Game_Vehicle.new(:boat)
|
58
|
+
@vehicles[1] = Game_Vehicle.new(:ship)
|
59
|
+
@vehicles[2] = Game_Vehicle.new(:airship)
|
60
|
+
end
|
61
|
+
#--------------------------------------------------------------------------
|
62
|
+
# * Refresh Vehicles
|
63
|
+
#--------------------------------------------------------------------------
|
64
|
+
def referesh_vehicles
|
65
|
+
@vehicles.each {|vehicle| vehicle.refresh }
|
66
|
+
end
|
67
|
+
#--------------------------------------------------------------------------
|
68
|
+
# * Get Vehicle
|
69
|
+
#--------------------------------------------------------------------------
|
70
|
+
def vehicle(type)
|
71
|
+
return @vehicles[0] if type == :boat
|
72
|
+
return @vehicles[1] if type == :ship
|
73
|
+
return @vehicles[2] if type == :airship
|
74
|
+
return nil
|
75
|
+
end
|
76
|
+
#--------------------------------------------------------------------------
|
77
|
+
# * Get Boat
|
78
|
+
#--------------------------------------------------------------------------
|
79
|
+
def boat
|
80
|
+
@vehicles[0]
|
81
|
+
end
|
82
|
+
#--------------------------------------------------------------------------
|
83
|
+
# * Get Ship
|
84
|
+
#--------------------------------------------------------------------------
|
85
|
+
def ship
|
86
|
+
@vehicles[1]
|
87
|
+
end
|
88
|
+
#--------------------------------------------------------------------------
|
89
|
+
# * Get Airship
|
90
|
+
#--------------------------------------------------------------------------
|
91
|
+
def airship
|
92
|
+
@vehicles[2]
|
93
|
+
end
|
94
|
+
#--------------------------------------------------------------------------
|
95
|
+
# * Event Setup
|
96
|
+
#--------------------------------------------------------------------------
|
97
|
+
def setup_events
|
98
|
+
@events = {}
|
99
|
+
@map.events.each do |i, event|
|
100
|
+
@events[i] = Game_Event.new(@map_id, event)
|
101
|
+
end
|
102
|
+
@common_events = parallel_common_events.collect do |common_event|
|
103
|
+
Game_CommonEvent.new(common_event.id)
|
104
|
+
end
|
105
|
+
refresh_tile_events
|
106
|
+
end
|
107
|
+
#--------------------------------------------------------------------------
|
108
|
+
# * Get Array of Parallel Common Events
|
109
|
+
#--------------------------------------------------------------------------
|
110
|
+
def parallel_common_events
|
111
|
+
$data_common_events.select {|event| event && event.parallel? }
|
112
|
+
end
|
113
|
+
#--------------------------------------------------------------------------
|
114
|
+
# * Scroll Setup
|
115
|
+
#--------------------------------------------------------------------------
|
116
|
+
def setup_scroll
|
117
|
+
@scroll_direction = 2
|
118
|
+
@scroll_rest = 0
|
119
|
+
@scroll_speed = 4
|
120
|
+
end
|
121
|
+
#--------------------------------------------------------------------------
|
122
|
+
# * Parallax Background Setup
|
123
|
+
#--------------------------------------------------------------------------
|
124
|
+
def setup_parallax
|
125
|
+
@parallax_name = @map.parallax_name
|
126
|
+
@parallax_loop_x = @map.parallax_loop_x
|
127
|
+
@parallax_loop_y = @map.parallax_loop_y
|
128
|
+
@parallax_sx = @map.parallax_sx
|
129
|
+
@parallax_sy = @map.parallax_sy
|
130
|
+
@parallax_x = 0
|
131
|
+
@parallax_y = 0
|
132
|
+
end
|
133
|
+
#--------------------------------------------------------------------------
|
134
|
+
# * Set Up Battle Background
|
135
|
+
#--------------------------------------------------------------------------
|
136
|
+
def setup_battleback
|
137
|
+
if @map.specify_battleback
|
138
|
+
@battleback1_name = @map.battleback1_name
|
139
|
+
@battleback2_name = @map.battleback2_name
|
140
|
+
else
|
141
|
+
@battleback1_name = nil
|
142
|
+
@battleback2_name = nil
|
143
|
+
end
|
144
|
+
end
|
145
|
+
#--------------------------------------------------------------------------
|
146
|
+
# * Set Display Position
|
147
|
+
#--------------------------------------------------------------------------
|
148
|
+
def set_display_pos(x, y)
|
149
|
+
x = [0, [x, width - screen_tile_x].min].max unless loop_horizontal?
|
150
|
+
y = [0, [y, height - screen_tile_y].min].max unless loop_vertical?
|
151
|
+
@display_x = (x + width) % width
|
152
|
+
@display_y = (y + height) % height
|
153
|
+
@parallax_x = x
|
154
|
+
@parallax_y = y
|
155
|
+
end
|
156
|
+
#--------------------------------------------------------------------------
|
157
|
+
# * Calculate X Coordinate of Parallax Display Origin
|
158
|
+
#--------------------------------------------------------------------------
|
159
|
+
def parallax_ox(bitmap)
|
160
|
+
if @parallax_loop_x
|
161
|
+
@parallax_x * 16
|
162
|
+
else
|
163
|
+
w1 = [bitmap.width - Graphics.width, 0].max
|
164
|
+
w2 = [width * 32 - Graphics.width, 1].max
|
165
|
+
@parallax_x * 16 * w1 / w2
|
166
|
+
end
|
167
|
+
end
|
168
|
+
#--------------------------------------------------------------------------
|
169
|
+
# * Calculate Y Coordinate of Parallax Display Origin
|
170
|
+
#--------------------------------------------------------------------------
|
171
|
+
def parallax_oy(bitmap)
|
172
|
+
if @parallax_loop_y
|
173
|
+
@parallax_y * 16
|
174
|
+
else
|
175
|
+
h1 = [bitmap.height - Graphics.height, 0].max
|
176
|
+
h2 = [height * 32 - Graphics.height, 1].max
|
177
|
+
@parallax_y * 16 * h1 / h2
|
178
|
+
end
|
179
|
+
end
|
180
|
+
#--------------------------------------------------------------------------
|
181
|
+
# * Get Map ID
|
182
|
+
#--------------------------------------------------------------------------
|
183
|
+
def map_id
|
184
|
+
@map_id
|
185
|
+
end
|
186
|
+
#--------------------------------------------------------------------------
|
187
|
+
# * Get Tileset
|
188
|
+
#--------------------------------------------------------------------------
|
189
|
+
def tileset
|
190
|
+
$data_tilesets[@tileset_id]
|
191
|
+
end
|
192
|
+
#--------------------------------------------------------------------------
|
193
|
+
# * Get Display Name
|
194
|
+
#--------------------------------------------------------------------------
|
195
|
+
def display_name
|
196
|
+
@map.display_name
|
197
|
+
end
|
198
|
+
#--------------------------------------------------------------------------
|
199
|
+
# * Get Width
|
200
|
+
#--------------------------------------------------------------------------
|
201
|
+
def width
|
202
|
+
@map.width
|
203
|
+
end
|
204
|
+
#--------------------------------------------------------------------------
|
205
|
+
# * Get Height
|
206
|
+
#--------------------------------------------------------------------------
|
207
|
+
def height
|
208
|
+
@map.height
|
209
|
+
end
|
210
|
+
#--------------------------------------------------------------------------
|
211
|
+
# * Loop Horizontally?
|
212
|
+
#--------------------------------------------------------------------------
|
213
|
+
def loop_horizontal?
|
214
|
+
@map.scroll_type == 2 || @map.scroll_type == 3
|
215
|
+
end
|
216
|
+
#--------------------------------------------------------------------------
|
217
|
+
# * Loop Vertically?
|
218
|
+
#--------------------------------------------------------------------------
|
219
|
+
def loop_vertical?
|
220
|
+
@map.scroll_type == 1 || @map.scroll_type == 3
|
221
|
+
end
|
222
|
+
#--------------------------------------------------------------------------
|
223
|
+
# * Get Whether Dash is Disabled
|
224
|
+
#--------------------------------------------------------------------------
|
225
|
+
def disable_dash?
|
226
|
+
@map.disable_dashing
|
227
|
+
end
|
228
|
+
#--------------------------------------------------------------------------
|
229
|
+
# * Get Encounter List
|
230
|
+
#--------------------------------------------------------------------------
|
231
|
+
def encounter_list
|
232
|
+
@map.encounter_list
|
233
|
+
end
|
234
|
+
#--------------------------------------------------------------------------
|
235
|
+
# * Get Encounter Steps
|
236
|
+
#--------------------------------------------------------------------------
|
237
|
+
def encounter_step
|
238
|
+
@map.encounter_step
|
239
|
+
end
|
240
|
+
#--------------------------------------------------------------------------
|
241
|
+
# * Get Map Data
|
242
|
+
#--------------------------------------------------------------------------
|
243
|
+
def data
|
244
|
+
@map.data
|
245
|
+
end
|
246
|
+
#--------------------------------------------------------------------------
|
247
|
+
# * Determine if Field Type
|
248
|
+
#--------------------------------------------------------------------------
|
249
|
+
def overworld?
|
250
|
+
tileset.mode == 0
|
251
|
+
end
|
252
|
+
#--------------------------------------------------------------------------
|
253
|
+
# * Number of Horizontal Tiles on Screen
|
254
|
+
#--------------------------------------------------------------------------
|
255
|
+
def screen_tile_x
|
256
|
+
Graphics.width / 32
|
257
|
+
end
|
258
|
+
#--------------------------------------------------------------------------
|
259
|
+
# * Number of Vertical Tiles on Screen
|
260
|
+
#--------------------------------------------------------------------------
|
261
|
+
def screen_tile_y
|
262
|
+
Graphics.height / 32
|
263
|
+
end
|
264
|
+
#--------------------------------------------------------------------------
|
265
|
+
# * Calculate X Coordinate, Minus Display Coordinate
|
266
|
+
#--------------------------------------------------------------------------
|
267
|
+
def adjust_x(x)
|
268
|
+
if loop_horizontal? && x < @display_x - (width - screen_tile_x) / 2
|
269
|
+
x - @display_x + @map.width
|
270
|
+
else
|
271
|
+
x - @display_x
|
272
|
+
end
|
273
|
+
end
|
274
|
+
#--------------------------------------------------------------------------
|
275
|
+
# * Calculate Y Coordinate, Minus Display Coordinate
|
276
|
+
#--------------------------------------------------------------------------
|
277
|
+
def adjust_y(y)
|
278
|
+
if loop_vertical? && y < @display_y - (height - screen_tile_y) / 2
|
279
|
+
y - @display_y + @map.height
|
280
|
+
else
|
281
|
+
y - @display_y
|
282
|
+
end
|
283
|
+
end
|
284
|
+
#--------------------------------------------------------------------------
|
285
|
+
# * Calculate X Coordinate After Loop Adjustment
|
286
|
+
#--------------------------------------------------------------------------
|
287
|
+
def round_x(x)
|
288
|
+
loop_horizontal? ? (x + width) % width : x
|
289
|
+
end
|
290
|
+
#--------------------------------------------------------------------------
|
291
|
+
# * Calculate Y Coordinate After Loop Adjustment
|
292
|
+
#--------------------------------------------------------------------------
|
293
|
+
def round_y(y)
|
294
|
+
loop_vertical? ? (y + height) % height : y
|
295
|
+
end
|
296
|
+
#--------------------------------------------------------------------------
|
297
|
+
# * Calculate X Coordinate Shifted One Tile in Specific Direction
|
298
|
+
# (No Loop Adjustment)
|
299
|
+
#--------------------------------------------------------------------------
|
300
|
+
def x_with_direction(x, d)
|
301
|
+
x + (d == 6 ? 1 : d == 4 ? -1 : 0)
|
302
|
+
end
|
303
|
+
#--------------------------------------------------------------------------
|
304
|
+
# * Calculate Y Coordinate Shifted One Tile in Specific Direction
|
305
|
+
# (No Loop Adjustment)
|
306
|
+
#--------------------------------------------------------------------------
|
307
|
+
def y_with_direction(y, d)
|
308
|
+
y + (d == 2 ? 1 : d == 8 ? -1 : 0)
|
309
|
+
end
|
310
|
+
#--------------------------------------------------------------------------
|
311
|
+
# * Calculate X Coordinate Shifted One Tile in Specific Direction
|
312
|
+
# (With Loop Adjustment)
|
313
|
+
#--------------------------------------------------------------------------
|
314
|
+
def round_x_with_direction(x, d)
|
315
|
+
round_x(x + (d == 6 ? 1 : d == 4 ? -1 : 0))
|
316
|
+
end
|
317
|
+
#--------------------------------------------------------------------------
|
318
|
+
# * Calculate Y Coordinate Shifted One Tile in Specific Direction
|
319
|
+
# (With Loop Adjustment)
|
320
|
+
#--------------------------------------------------------------------------
|
321
|
+
def round_y_with_direction(y, d)
|
322
|
+
round_y(y + (d == 2 ? 1 : d == 8 ? -1 : 0))
|
323
|
+
end
|
324
|
+
#--------------------------------------------------------------------------
|
325
|
+
# * Automatically Switch BGM and BGS
|
326
|
+
#--------------------------------------------------------------------------
|
327
|
+
def autoplay
|
328
|
+
@map.bgm.play if @map.autoplay_bgm
|
329
|
+
@map.bgs.play if @map.autoplay_bgs
|
330
|
+
end
|
331
|
+
#--------------------------------------------------------------------------
|
332
|
+
# * Refresh
|
333
|
+
#--------------------------------------------------------------------------
|
334
|
+
def refresh
|
335
|
+
@events.each_value {|event| event.refresh }
|
336
|
+
@common_events.each {|event| event.refresh }
|
337
|
+
refresh_tile_events
|
338
|
+
@need_refresh = false
|
339
|
+
end
|
340
|
+
#--------------------------------------------------------------------------
|
341
|
+
# * Refresh Array of Tile-Handling Events
|
342
|
+
#--------------------------------------------------------------------------
|
343
|
+
def refresh_tile_events
|
344
|
+
@tile_events = @events.values.select {|event| event.tile? }
|
345
|
+
end
|
346
|
+
#--------------------------------------------------------------------------
|
347
|
+
# * Get Array of Events at Designated Coordinates
|
348
|
+
#--------------------------------------------------------------------------
|
349
|
+
def events_xy(x, y)
|
350
|
+
@events.values.select {|event| event.pos?(x, y) }
|
351
|
+
end
|
352
|
+
#--------------------------------------------------------------------------
|
353
|
+
# * Get Array of Events at Designated Coordinates (Except Pass-Through)
|
354
|
+
#--------------------------------------------------------------------------
|
355
|
+
def events_xy_nt(x, y)
|
356
|
+
@events.values.select {|event| event.pos_nt?(x, y) }
|
357
|
+
end
|
358
|
+
#--------------------------------------------------------------------------
|
359
|
+
# * Get Array of Tile-Handling Events at Designated Coordinates
|
360
|
+
# (Except Pass-Through)
|
361
|
+
#--------------------------------------------------------------------------
|
362
|
+
def tile_events_xy(x, y)
|
363
|
+
@tile_events.select {|event| event.pos_nt?(x, y) }
|
364
|
+
end
|
365
|
+
#--------------------------------------------------------------------------
|
366
|
+
# * Get ID of Events at Designated Coordinates (One Only)
|
367
|
+
#--------------------------------------------------------------------------
|
368
|
+
def event_id_xy(x, y)
|
369
|
+
list = events_xy(x, y)
|
370
|
+
list.empty? ? 0 : list[0].id
|
371
|
+
end
|
372
|
+
#--------------------------------------------------------------------------
|
373
|
+
# * Scroll Down
|
374
|
+
#--------------------------------------------------------------------------
|
375
|
+
def scroll_down(distance)
|
376
|
+
if loop_vertical?
|
377
|
+
@display_y += distance
|
378
|
+
@display_y %= @map.height
|
379
|
+
@parallax_y += distance if @parallax_loop_y
|
380
|
+
else
|
381
|
+
last_y = @display_y
|
382
|
+
@display_y = [@display_y + distance, height - screen_tile_y].min
|
383
|
+
@parallax_y += @display_y - last_y
|
384
|
+
end
|
385
|
+
end
|
386
|
+
#--------------------------------------------------------------------------
|
387
|
+
# * Scroll Left
|
388
|
+
#--------------------------------------------------------------------------
|
389
|
+
def scroll_left(distance)
|
390
|
+
if loop_horizontal?
|
391
|
+
@display_x += @map.width - distance
|
392
|
+
@display_x %= @map.width
|
393
|
+
@parallax_x -= distance if @parallax_loop_x
|
394
|
+
else
|
395
|
+
last_x = @display_x
|
396
|
+
@display_x = [@display_x - distance, 0].max
|
397
|
+
@parallax_x += @display_x - last_x
|
398
|
+
end
|
399
|
+
end
|
400
|
+
#--------------------------------------------------------------------------
|
401
|
+
# * Scroll Right
|
402
|
+
#--------------------------------------------------------------------------
|
403
|
+
def scroll_right(distance)
|
404
|
+
if loop_horizontal?
|
405
|
+
@display_x += distance
|
406
|
+
@display_x %= @map.width
|
407
|
+
@parallax_x += distance if @parallax_loop_x
|
408
|
+
else
|
409
|
+
last_x = @display_x
|
410
|
+
@display_x = [@display_x + distance, (width - screen_tile_x)].min
|
411
|
+
@parallax_x += @display_x - last_x
|
412
|
+
end
|
413
|
+
end
|
414
|
+
#--------------------------------------------------------------------------
|
415
|
+
# * Scroll Up
|
416
|
+
#--------------------------------------------------------------------------
|
417
|
+
def scroll_up(distance)
|
418
|
+
if loop_vertical?
|
419
|
+
@display_y += @map.height - distance
|
420
|
+
@display_y %= @map.height
|
421
|
+
@parallax_y -= distance if @parallax_loop_y
|
422
|
+
else
|
423
|
+
last_y = @display_y
|
424
|
+
@display_y = [@display_y - distance, 0].max
|
425
|
+
@parallax_y += @display_y - last_y
|
426
|
+
end
|
427
|
+
end
|
428
|
+
#--------------------------------------------------------------------------
|
429
|
+
# * Determine Valid Coordinates
|
430
|
+
#--------------------------------------------------------------------------
|
431
|
+
def valid?(x, y)
|
432
|
+
x >= 0 && x < width && y >= 0 && y < height
|
433
|
+
end
|
434
|
+
#--------------------------------------------------------------------------
|
435
|
+
# * Check Passage
|
436
|
+
# bit: Inhibit passage check bit
|
437
|
+
#--------------------------------------------------------------------------
|
438
|
+
def check_passage(x, y, bit)
|
439
|
+
all_tiles(x, y).each do |tile_id|
|
440
|
+
flag = tileset.flags[tile_id]
|
441
|
+
next if flag & 0x10 != 0 # [☆]: No effect on passage
|
442
|
+
return true if flag & bit == 0 # [○] : Passable
|
443
|
+
return false if flag & bit == bit # [×] : Impassable
|
444
|
+
end
|
445
|
+
return false # Impassable
|
446
|
+
end
|
447
|
+
#--------------------------------------------------------------------------
|
448
|
+
# * Get Tile ID at Specified Coordinates
|
449
|
+
#--------------------------------------------------------------------------
|
450
|
+
def tile_id(x, y, z)
|
451
|
+
@map.data[x, y, z] || 0
|
452
|
+
end
|
453
|
+
#--------------------------------------------------------------------------
|
454
|
+
# * Get Array of All Layer Tiles (Top to Bottom) at Specified Coordinates
|
455
|
+
#--------------------------------------------------------------------------
|
456
|
+
def layered_tiles(x, y)
|
457
|
+
[2, 1, 0].collect {|z| tile_id(x, y, z) }
|
458
|
+
end
|
459
|
+
#--------------------------------------------------------------------------
|
460
|
+
# * Get Array of All Tiles (Including Events) at Specified Coordinates
|
461
|
+
#--------------------------------------------------------------------------
|
462
|
+
def all_tiles(x, y)
|
463
|
+
tile_events_xy(x, y).collect {|ev| ev.tile_id } + layered_tiles(x, y)
|
464
|
+
end
|
465
|
+
#--------------------------------------------------------------------------
|
466
|
+
# * Get Type of Auto Tile at Specified Coordinates
|
467
|
+
#--------------------------------------------------------------------------
|
468
|
+
def autotile_type(x, y, z)
|
469
|
+
tile_id(x, y, z) >= 2048 ? (tile_id(x, y, z) - 2048) / 48 : -1
|
470
|
+
end
|
471
|
+
#--------------------------------------------------------------------------
|
472
|
+
# * Determine Passability of Normal Character
|
473
|
+
# d: direction (2,4,6,8)
|
474
|
+
# Determines whether the tile at the specified coordinates is passable
|
475
|
+
# in the specified direction.
|
476
|
+
#--------------------------------------------------------------------------
|
477
|
+
def passable?(x, y, d)
|
478
|
+
check_passage(x, y, (1 << (d / 2 - 1)) & 0x0f)
|
479
|
+
end
|
480
|
+
#--------------------------------------------------------------------------
|
481
|
+
# * Determine if Passable by Boat
|
482
|
+
#--------------------------------------------------------------------------
|
483
|
+
def boat_passable?(x, y)
|
484
|
+
check_passage(x, y, 0x0200)
|
485
|
+
end
|
486
|
+
#--------------------------------------------------------------------------
|
487
|
+
# * Determine if Passable by Ship
|
488
|
+
#--------------------------------------------------------------------------
|
489
|
+
def ship_passable?(x, y)
|
490
|
+
check_passage(x, y, 0x0400)
|
491
|
+
end
|
492
|
+
#--------------------------------------------------------------------------
|
493
|
+
# * Determine if Airship can Land
|
494
|
+
#--------------------------------------------------------------------------
|
495
|
+
def airship_land_ok?(x, y)
|
496
|
+
check_passage(x, y, 0x0800) && check_passage(x, y, 0x0f)
|
497
|
+
end
|
498
|
+
#--------------------------------------------------------------------------
|
499
|
+
# * Determine Flag for All Layers at Specified Coordinates
|
500
|
+
#--------------------------------------------------------------------------
|
501
|
+
def layered_tiles_flag?(x, y, bit)
|
502
|
+
layered_tiles(x, y).any? {|tile_id| tileset.flags[tile_id] & bit != 0 }
|
503
|
+
end
|
504
|
+
#--------------------------------------------------------------------------
|
505
|
+
# * Determine if Ladder
|
506
|
+
#--------------------------------------------------------------------------
|
507
|
+
def ladder?(x, y)
|
508
|
+
valid?(x, y) && layered_tiles_flag?(x, y, 0x20)
|
509
|
+
end
|
510
|
+
#--------------------------------------------------------------------------
|
511
|
+
# * Determine if Bush
|
512
|
+
#--------------------------------------------------------------------------
|
513
|
+
def bush?(x, y)
|
514
|
+
valid?(x, y) && layered_tiles_flag?(x, y, 0x40)
|
515
|
+
end
|
516
|
+
#--------------------------------------------------------------------------
|
517
|
+
# * Determine if Counter
|
518
|
+
#--------------------------------------------------------------------------
|
519
|
+
def counter?(x, y)
|
520
|
+
valid?(x, y) && layered_tiles_flag?(x, y, 0x80)
|
521
|
+
end
|
522
|
+
#--------------------------------------------------------------------------
|
523
|
+
# * Determine if Damage Floor
|
524
|
+
#--------------------------------------------------------------------------
|
525
|
+
def damage_floor?(x, y)
|
526
|
+
valid?(x, y) && layered_tiles_flag?(x, y, 0x100)
|
527
|
+
end
|
528
|
+
#--------------------------------------------------------------------------
|
529
|
+
# * Get Terrain Tag
|
530
|
+
#--------------------------------------------------------------------------
|
531
|
+
def terrain_tag(x, y)
|
532
|
+
return 0 unless valid?(x, y)
|
533
|
+
layered_tiles(x, y).each do |tile_id|
|
534
|
+
tag = tileset.flags[tile_id] >> 12
|
535
|
+
return tag if tag > 0
|
536
|
+
end
|
537
|
+
return 0
|
538
|
+
end
|
539
|
+
#--------------------------------------------------------------------------
|
540
|
+
# * Get Region ID
|
541
|
+
#--------------------------------------------------------------------------
|
542
|
+
def region_id(x, y)
|
543
|
+
valid?(x, y) ? @map.data[x, y, 3] >> 8 : 0
|
544
|
+
end
|
545
|
+
#--------------------------------------------------------------------------
|
546
|
+
# * Start Scroll
|
547
|
+
#--------------------------------------------------------------------------
|
548
|
+
def start_scroll(direction, distance, speed)
|
549
|
+
@scroll_direction = direction
|
550
|
+
@scroll_rest = distance
|
551
|
+
@scroll_speed = speed
|
552
|
+
end
|
553
|
+
#--------------------------------------------------------------------------
|
554
|
+
# * Determine if Scrolling
|
555
|
+
#--------------------------------------------------------------------------
|
556
|
+
def scrolling?
|
557
|
+
@scroll_rest > 0
|
558
|
+
end
|
559
|
+
#--------------------------------------------------------------------------
|
560
|
+
# * Frame Update
|
561
|
+
# main: Interpreter update flag
|
562
|
+
#--------------------------------------------------------------------------
|
563
|
+
def update(main = false)
|
564
|
+
refresh if @need_refresh
|
565
|
+
update_interpreter if main
|
566
|
+
update_scroll
|
567
|
+
update_events
|
568
|
+
update_vehicles
|
569
|
+
update_parallax
|
570
|
+
@screen.update
|
571
|
+
end
|
572
|
+
#--------------------------------------------------------------------------
|
573
|
+
# * Update Scroll
|
574
|
+
#--------------------------------------------------------------------------
|
575
|
+
def update_scroll
|
576
|
+
return unless scrolling?
|
577
|
+
last_x = @display_x
|
578
|
+
last_y = @display_y
|
579
|
+
do_scroll(@scroll_direction, scroll_distance)
|
580
|
+
if @display_x == last_x && @display_y == last_y
|
581
|
+
@scroll_rest = 0
|
582
|
+
else
|
583
|
+
@scroll_rest -= scroll_distance
|
584
|
+
end
|
585
|
+
end
|
586
|
+
#--------------------------------------------------------------------------
|
587
|
+
# * Calculate Scroll Distance
|
588
|
+
#--------------------------------------------------------------------------
|
589
|
+
def scroll_distance
|
590
|
+
2 ** @scroll_speed / 256.0
|
591
|
+
end
|
592
|
+
#--------------------------------------------------------------------------
|
593
|
+
# * Execute Scroll
|
594
|
+
#--------------------------------------------------------------------------
|
595
|
+
def do_scroll(direction, distance)
|
596
|
+
case direction
|
597
|
+
when 2; scroll_down (distance)
|
598
|
+
when 4; scroll_left (distance)
|
599
|
+
when 6; scroll_right(distance)
|
600
|
+
when 8; scroll_up (distance)
|
601
|
+
end
|
602
|
+
end
|
603
|
+
#--------------------------------------------------------------------------
|
604
|
+
# * Update Events
|
605
|
+
#--------------------------------------------------------------------------
|
606
|
+
def update_events
|
607
|
+
@events.each_value {|event| event.update }
|
608
|
+
@common_events.each {|event| event.update }
|
609
|
+
end
|
610
|
+
#--------------------------------------------------------------------------
|
611
|
+
# * Update Vehicles
|
612
|
+
#--------------------------------------------------------------------------
|
613
|
+
def update_vehicles
|
614
|
+
@vehicles.each {|vehicle| vehicle.update }
|
615
|
+
end
|
616
|
+
#--------------------------------------------------------------------------
|
617
|
+
# * Update Parallax
|
618
|
+
#--------------------------------------------------------------------------
|
619
|
+
def update_parallax
|
620
|
+
@parallax_x += @parallax_sx / 64.0 if @parallax_loop_x
|
621
|
+
@parallax_y += @parallax_sy / 64.0 if @parallax_loop_y
|
622
|
+
end
|
623
|
+
#--------------------------------------------------------------------------
|
624
|
+
# * Change Tileset
|
625
|
+
#--------------------------------------------------------------------------
|
626
|
+
def change_tileset(tileset_id)
|
627
|
+
@tileset_id = tileset_id
|
628
|
+
refresh
|
629
|
+
end
|
630
|
+
#--------------------------------------------------------------------------
|
631
|
+
# * Change Battle Background
|
632
|
+
#--------------------------------------------------------------------------
|
633
|
+
def change_battleback(battleback1_name, battleback2_name)
|
634
|
+
@battleback1_name = battleback1_name
|
635
|
+
@battleback2_name = battleback2_name
|
636
|
+
end
|
637
|
+
#--------------------------------------------------------------------------
|
638
|
+
# * Change Parallax Background
|
639
|
+
#--------------------------------------------------------------------------
|
640
|
+
def change_parallax(name, loop_x, loop_y, sx, sy)
|
641
|
+
@parallax_name = name
|
642
|
+
@parallax_x = 0 if @parallax_loop_x && !loop_x
|
643
|
+
@parallax_y = 0 if @parallax_loop_y && !loop_y
|
644
|
+
@parallax_loop_x = loop_x
|
645
|
+
@parallax_loop_y = loop_y
|
646
|
+
@parallax_sx = sx
|
647
|
+
@parallax_sy = sy
|
648
|
+
end
|
649
|
+
#--------------------------------------------------------------------------
|
650
|
+
# * Update Interpreter
|
651
|
+
#--------------------------------------------------------------------------
|
652
|
+
def update_interpreter
|
653
|
+
loop do
|
654
|
+
@interpreter.update
|
655
|
+
return if @interpreter.running?
|
656
|
+
if @interpreter.event_id > 0
|
657
|
+
unlock_event(@interpreter.event_id)
|
658
|
+
@interpreter.clear
|
659
|
+
end
|
660
|
+
return unless setup_starting_event
|
661
|
+
end
|
662
|
+
end
|
663
|
+
#--------------------------------------------------------------------------
|
664
|
+
# * Unlock Event
|
665
|
+
#--------------------------------------------------------------------------
|
666
|
+
def unlock_event(event_id)
|
667
|
+
@events[event_id].unlock if @events[event_id]
|
668
|
+
end
|
669
|
+
#--------------------------------------------------------------------------
|
670
|
+
# * Starting Event Setup
|
671
|
+
#--------------------------------------------------------------------------
|
672
|
+
def setup_starting_event
|
673
|
+
refresh if @need_refresh
|
674
|
+
return true if @interpreter.setup_reserved_common_event
|
675
|
+
return true if setup_starting_map_event
|
676
|
+
return true if setup_autorun_common_event
|
677
|
+
return false
|
678
|
+
end
|
679
|
+
#--------------------------------------------------------------------------
|
680
|
+
# * Determine Existence of Starting Map Event
|
681
|
+
#--------------------------------------------------------------------------
|
682
|
+
def any_event_starting?
|
683
|
+
@events.values.any? {|event| event.starting }
|
684
|
+
end
|
685
|
+
#--------------------------------------------------------------------------
|
686
|
+
# * Detect/Set Up Starting Map Event
|
687
|
+
#--------------------------------------------------------------------------
|
688
|
+
def setup_starting_map_event
|
689
|
+
event = @events.values.find {|event| event.starting }
|
690
|
+
event.clear_starting_flag if event
|
691
|
+
@interpreter.setup(event.list, event.id) if event
|
692
|
+
event
|
693
|
+
end
|
694
|
+
#--------------------------------------------------------------------------
|
695
|
+
# * Detect/Set Up Autorun Common Event
|
696
|
+
#--------------------------------------------------------------------------
|
697
|
+
def setup_autorun_common_event
|
698
|
+
event = $data_common_events.find do |event|
|
699
|
+
event && event.autorun? && $game_switches[event.switch_id]
|
700
|
+
end
|
701
|
+
@interpreter.setup(event.list) if event
|
702
|
+
event
|
703
|
+
end
|
704
|
+
end
|