rgss3_default_scripts 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +9 -0
  3. data/Gemfile +4 -0
  4. data/README.md +9 -0
  5. data/Rakefile +2 -0
  6. data/lib/rgss3_default_scripts.rb +109 -0
  7. data/lib/rgss3_default_scripts/BattleManager.rb +392 -0
  8. data/lib/rgss3_default_scripts/Cache.rb +134 -0
  9. data/lib/rgss3_default_scripts/DataManager.rb +267 -0
  10. data/lib/rgss3_default_scripts/Game_Action.rb +262 -0
  11. data/lib/rgss3_default_scripts/Game_ActionResult.rb +159 -0
  12. data/lib/rgss3_default_scripts/Game_Actor.rb +696 -0
  13. data/lib/rgss3_default_scripts/Game_Actors.rb +22 -0
  14. data/lib/rgss3_default_scripts/Game_BaseItem.rb +51 -0
  15. data/lib/rgss3_default_scripts/Game_Battler.rb +824 -0
  16. data/lib/rgss3_default_scripts/Game_BattlerBase.rb +731 -0
  17. data/lib/rgss3_default_scripts/Game_Character.rb +396 -0
  18. data/lib/rgss3_default_scripts/Game_CharacterBase.rb +443 -0
  19. data/lib/rgss3_default_scripts/Game_CommonEvent.rb +41 -0
  20. data/lib/rgss3_default_scripts/Game_Enemy.rb +264 -0
  21. data/lib/rgss3_default_scripts/Game_Event.rb +308 -0
  22. data/lib/rgss3_default_scripts/Game_Follower.rb +74 -0
  23. data/lib/rgss3_default_scripts/Game_Followers.rb +112 -0
  24. data/lib/rgss3_default_scripts/Game_Interpreter.rb +1413 -0
  25. data/lib/rgss3_default_scripts/Game_Map.rb +704 -0
  26. data/lib/rgss3_default_scripts/Game_Message.rb +101 -0
  27. data/lib/rgss3_default_scripts/Game_Party.rb +418 -0
  28. data/lib/rgss3_default_scripts/Game_Picture.rb +161 -0
  29. data/lib/rgss3_default_scripts/Game_Pictures.rb +28 -0
  30. data/lib/rgss3_default_scripts/Game_Player.rb +488 -0
  31. data/lib/rgss3_default_scripts/Game_Screen.rb +234 -0
  32. data/lib/rgss3_default_scripts/Game_SelfSwitches.rb +35 -0
  33. data/lib/rgss3_default_scripts/Game_Switches.rb +35 -0
  34. data/lib/rgss3_default_scripts/Game_System.rb +122 -0
  35. data/lib/rgss3_default_scripts/Game_Temp.rb +45 -0
  36. data/lib/rgss3_default_scripts/Game_Timer.rb +56 -0
  37. data/lib/rgss3_default_scripts/Game_Troop.rb +205 -0
  38. data/lib/rgss3_default_scripts/Game_Unit.rb +131 -0
  39. data/lib/rgss3_default_scripts/Game_Variables.rb +34 -0
  40. data/lib/rgss3_default_scripts/Game_Vehicle.rb +193 -0
  41. data/lib/rgss3_default_scripts/SceneManager.rb +94 -0
  42. data/lib/rgss3_default_scripts/Scene_Base.rb +132 -0
  43. data/lib/rgss3_default_scripts/Scene_Battle.rb +693 -0
  44. data/lib/rgss3_default_scripts/Scene_Debug.rb +87 -0
  45. data/lib/rgss3_default_scripts/Scene_End.rb +61 -0
  46. data/lib/rgss3_default_scripts/Scene_Equip.rb +144 -0
  47. data/lib/rgss3_default_scripts/Scene_File.rb +203 -0
  48. data/lib/rgss3_default_scripts/Scene_Gameover.rb +85 -0
  49. data/lib/rgss3_default_scripts/Scene_Item.rb +75 -0
  50. data/lib/rgss3_default_scripts/Scene_ItemBase.rb +147 -0
  51. data/lib/rgss3_default_scripts/Scene_Load.rb +40 -0
  52. data/lib/rgss3_default_scripts/Scene_Map.rb +276 -0
  53. data/lib/rgss3_default_scripts/Scene_Menu.rb +127 -0
  54. data/lib/rgss3_default_scripts/Scene_MenuBase.rb +63 -0
  55. data/lib/rgss3_default_scripts/Scene_Name.rb +32 -0
  56. data/lib/rgss3_default_scripts/Scene_Save.rb +38 -0
  57. data/lib/rgss3_default_scripts/Scene_Shop.rb +299 -0
  58. data/lib/rgss3_default_scripts/Scene_Skill.rb +108 -0
  59. data/lib/rgss3_default_scripts/Scene_Status.rb +25 -0
  60. data/lib/rgss3_default_scripts/Scene_Title.rb +137 -0
  61. data/lib/rgss3_default_scripts/Sound.rb +135 -0
  62. data/lib/rgss3_default_scripts/Sprite_Base.rb +232 -0
  63. data/lib/rgss3_default_scripts/Sprite_Battler.rb +231 -0
  64. data/lib/rgss3_default_scripts/Sprite_Character.rb +226 -0
  65. data/lib/rgss3_default_scripts/Sprite_Picture.rb +82 -0
  66. data/lib/rgss3_default_scripts/Sprite_Timer.rb +77 -0
  67. data/lib/rgss3_default_scripts/Spriteset_Battle.rb +389 -0
  68. data/lib/rgss3_default_scripts/Spriteset_Map.rb +273 -0
  69. data/lib/rgss3_default_scripts/Spriteset_Weather.rb +184 -0
  70. data/lib/rgss3_default_scripts/Vocab.rb +145 -0
  71. data/lib/rgss3_default_scripts/Window_ActorCommand.rb +78 -0
  72. data/lib/rgss3_default_scripts/Window_Base.rb +571 -0
  73. data/lib/rgss3_default_scripts/Window_BattleActor.rb +38 -0
  74. data/lib/rgss3_default_scripts/Window_BattleEnemy.rb +70 -0
  75. data/lib/rgss3_default_scripts/Window_BattleItem.rb +40 -0
  76. data/lib/rgss3_default_scripts/Window_BattleLog.rb +425 -0
  77. data/lib/rgss3_default_scripts/Window_BattleSkill.rb +34 -0
  78. data/lib/rgss3_default_scripts/Window_BattleStatus.rb +111 -0
  79. data/lib/rgss3_default_scripts/Window_ChoiceList.rb +88 -0
  80. data/lib/rgss3_default_scripts/Window_Command.rb +152 -0
  81. data/lib/rgss3_default_scripts/Window_DebugLeft.rb +104 -0
  82. data/lib/rgss3_default_scripts/Window_DebugRight.rb +119 -0
  83. data/lib/rgss3_default_scripts/Window_EquipCommand.rb +36 -0
  84. data/lib/rgss3_default_scripts/Window_EquipItem.rb +78 -0
  85. data/lib/rgss3_default_scripts/Window_EquipSlot.rb +111 -0
  86. data/lib/rgss3_default_scripts/Window_EquipStatus.rb +97 -0
  87. data/lib/rgss3_default_scripts/Window_GameEnd.rb +38 -0
  88. data/lib/rgss3_default_scripts/Window_Gold.rb +47 -0
  89. data/lib/rgss3_default_scripts/Window_Help.rb +43 -0
  90. data/lib/rgss3_default_scripts/Window_HorzCommand.rb +106 -0
  91. data/lib/rgss3_default_scripts/Window_ItemCategory.rb +54 -0
  92. data/lib/rgss3_default_scripts/Window_ItemList.rb +117 -0
  93. data/lib/rgss3_default_scripts/Window_KeyItem.rb +55 -0
  94. data/lib/rgss3_default_scripts/Window_MapName.rb +96 -0
  95. data/lib/rgss3_default_scripts/Window_MenuActor.rb +43 -0
  96. data/lib/rgss3_default_scripts/Window_MenuCommand.rb +106 -0
  97. data/lib/rgss3_default_scripts/Window_MenuStatus.rb +85 -0
  98. data/lib/rgss3_default_scripts/Window_Message.rb +397 -0
  99. data/lib/rgss3_default_scripts/Window_NameEdit.rb +129 -0
  100. data/lib/rgss3_default_scripts/Window_NameInput.rb +253 -0
  101. data/lib/rgss3_default_scripts/Window_NumberInput.rb +148 -0
  102. data/lib/rgss3_default_scripts/Window_PartyCommand.rb +47 -0
  103. data/lib/rgss3_default_scripts/Window_SaveFile.rb +69 -0
  104. data/lib/rgss3_default_scripts/Window_ScrollText.rb +90 -0
  105. data/lib/rgss3_default_scripts/Window_Selectable.rb +442 -0
  106. data/lib/rgss3_default_scripts/Window_ShopBuy.rb +115 -0
  107. data/lib/rgss3_default_scripts/Window_ShopCommand.rb +36 -0
  108. data/lib/rgss3_default_scripts/Window_ShopNumber.rb +137 -0
  109. data/lib/rgss3_default_scripts/Window_ShopSell.rb +27 -0
  110. data/lib/rgss3_default_scripts/Window_ShopStatus.rb +124 -0
  111. data/lib/rgss3_default_scripts/Window_SkillCommand.rb +76 -0
  112. data/lib/rgss3_default_scripts/Window_SkillList.rb +121 -0
  113. data/lib/rgss3_default_scripts/Window_SkillStatus.rb +38 -0
  114. data/lib/rgss3_default_scripts/Window_Status.rb +125 -0
  115. data/lib/rgss3_default_scripts/Window_TitleCommand.rb +45 -0
  116. data/rgss3_default_scripts.gemspec +23 -0
  117. metadata +186 -0
@@ -0,0 +1,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