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,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