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