1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
|
Elevator:: ; 1342d
call .LoadPointer
call .FindCurrentFloor
jr c, .quit
ld [wElevatorOriginFloor], a
call Elevator_AskWhichFloor
jr c, .quit
ld hl, wElevatorOriginFloor
cp [hl]
jr z, .quit
call Elevator_GoToFloor
and a
ret
.quit
scf
ret
; 1344a
.LoadPointer: ; 1344a
ld a, b
ld [wElevatorPointerBank], a
ld a, e
ld [wElevatorPointer], a
ld a, d
ld [wElevatorPointer + 1], a
call .LoadFloors
ret
; 1345a
.LoadFloors: ; 1345a
ld de, CurElevator
ld bc, 4
ld hl, wElevatorPointer
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wElevatorPointerBank]
call GetFarByte
inc hl
ld [de], a
inc de
.loop
ld a, [wElevatorPointerBank]
call GetFarByte
ld [de], a
inc de
add hl, bc
cp -1
jr nz, .loop
ret
; 1347d
.FindCurrentFloor: ; 1347d
ld hl, wElevatorPointer
ld a, [hli]
ld h, [hl]
ld l, a
ld a, [wElevatorPointerBank]
call GetFarByte
ld c, a
inc hl
ld a, [BackupMapGroup]
ld d, a
ld a, [BackupMapNumber]
ld e, a
ld b, 0
.loop2
ld a, [wElevatorPointerBank]
call GetFarByte
cp -1
jr z, .fail
inc hl
inc hl
ld a, [wElevatorPointerBank]
call GetFarByte
inc hl
cp d
jr nz, .next1
ld a, [wElevatorPointerBank]
call GetFarByte
inc hl
cp e
jr nz, .next2
jr .done
.next1
inc hl
.next2
inc b
jr .loop2
.done
xor a
ld a, b
ret
.fail
scf
ret
; 134c0
Elevator_GoToFloor: ; 134c0
push af
ld hl, wElevatorPointer
ld a, [hli]
ld h, [hl]
ld l, a
inc hl
pop af
ld bc, 4
call AddNTimes
inc hl
ld de, BackupWarpNumber
ld a, [wElevatorPointerBank]
ld bc, 3
call FarCopyBytes
ret
; 134dd
Elevator_AskWhichFloor: ; 134dd
call LoadStandardMenuDataHeader
ld hl, Elevator_WhichFloorText
call PrintText
call Elevator_GetCurrentFloorText
ld hl, Elevator_MenuDataHeader
call CopyMenuDataHeader
call InitScrollingMenu
call UpdateSprites
xor a
ld [wMenuScrollPosition], a
call ScrollingMenu
call CloseWindow
ld a, [wMenuJoypad]
cp B_BUTTON
jr z, .cancel
xor a
ld a, [wScrollingMenuCursorPosition]
ret
.cancel
scf
ret
; 1350d
Elevator_WhichFloorText: ; 0x1350d
; Which floor?
text_jump UnknownText_0x1bd2bc
db "@"
; 0x13512
Elevator_GetCurrentFloorText: ; 13512
ld hl, Options
ld a, [hl]
push af
set NO_TEXT_SCROLL, [hl]
hlcoord 0, 0
ld b, 4
ld c, 8
call TextBox
hlcoord 1, 2
ld de, Elevator_CurrentFloorText
call PlaceString
hlcoord 4, 4
call Elevator_GetCurrentFloorString
pop af
ld [Options], a
ret
; 13537
Elevator_CurrentFloorText: ; 13537
db "Now on:@"
; 1353f
Elevator_GetCurrentFloorString: ; 1353f
push hl
ld a, [wElevatorOriginFloor]
ld e, a
ld d, 0
ld hl, CurElevatorFloors
add hl, de
ld a, [hl]
pop de
call GetFloorString
ret
; 13550
Elevator_MenuDataHeader: ; 0x13550
db $40 ; flags
db 01, 12 ; start coords
db 09, 18 ; end coords
dw Elevator_MenuData2
db 1 ; default option
; 0x13558
Elevator_MenuData2: ; 0x13558
db $10 ; flags
db 4, 0 ; rows, columns
db 1 ; horizontal spacing
dbw 0, CurElevator
dba GetElevatorFloorStrings
dba NULL
dba NULL
; 13568
GetElevatorFloorStrings: ; 13568
ld a, [MenuSelection]
GetFloorString: ; 1356b
push de
call FloorToString
ld d, h
ld e, l
pop hl
jp PlaceString
; 13575
FloorToString: ; 13575
push de
ld e, a
ld d, 0
ld hl, ElevatorFloorNames
add hl, de
add hl, de
ld a, [hli]
ld h, [hl]
ld l, a
pop de
ret
; 13583
INCLUDE "data/elevator_floors.asm"
|