diff options
-rw-r--r-- | common/map.asm | 2369 | ||||
-rw-r--r-- | main.asm | 2367 |
2 files changed, 2370 insertions, 2366 deletions
diff --git a/common/map.asm b/common/map.asm new file mode 100644 index 000000000..d4cfe1be9 --- /dev/null +++ b/common/map.asm @@ -0,0 +1,2369 @@ +; Functions dealing with rendering and interacting with maps. + +Function210f: ; 210f + ld hl, $c7e8 + ld bc, $0018 + ld a, $0 + call ByteFill + ret +; 211b + +Function211b: ; 211b + push hl + ld hl, $dbf7 + ld a, [hli] + ld h, [hl] + ld l, a + or h + ld a, [hl] + jr nz, .asm_2128 + ld a, $ff + +.asm_2128 + pop hl + ret +; 212a + +Function212a: ; 212a + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + xor a + ld [$dbf7], a + ld [$dbf8], a + call Function2147 + ret c + ld a, e + ld [$dbf7], a + ld a, d + ld [$dbf8], a + xor a + ret +; 2147 + +Function2147: ; 2147 + push bc + ld a, [hROMBank] + push af + ld a, $13 + rst Bankswitch + + ld hl, $501e +.asm_2151 + push hl + ld a, [hli] + cp $ff + jr z, .asm_2167 + cp b + jr nz, .asm_2160 + ld a, [hli] + cp c + jr nz, .asm_2160 + jr .asm_216a + +.asm_2160 + pop hl + ld de, $0004 + add hl, de + jr .asm_2151 + +.asm_2167 + scf + jr .asm_216d + +.asm_216a + ld e, [hl] + inc hl + ld d, [hl] + +.asm_216d + pop hl + pop bc + ld a, b + rst Bankswitch + + pop bc + ret +; 2173 + +Function2173: ; 2173 + call Function217a + call Functiondb1 + ret +; 217a + +Function217a: ; 217a + ld a, [hROMBank] + push af + ld a, [TilesetBlocksBank] + rst Bankswitch + + call Function2198 + ld a, $60 + ld hl, TileMap + ld bc, $0168 + call ByteFill + ld a, $13 + rst Bankswitch + + call $515b + pop af + rst Bankswitch + + ret +; 2198 + +Function2198: ; 2198 + ld a, [$d194] + ld e, a + ld a, [$d195] + ld d, a + ld hl, EnemyMoveAnimation + ld b, $5 + +.asm_21a5 + push de + push hl + ld c, $6 + +.asm_21a9 + push de + push hl + ld a, [de] + and a + jr nz, .asm_21b2 + ld a, [$d19d] + +.asm_21b2 + ld e, l + ld d, h + add a + ld l, a + ld h, $0 + add hl, hl + add hl, hl + add hl, hl + ld a, [TilesetBlocksAddress] + add l + ld l, a + ld a, [TilesetBlocksAddress + 1] + adc h + ld h, a + +rept 3 + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + + ld a, e + add 20 + ld e, a + jr nc, .next\@ + inc d +.next\@ +endr + + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + + pop hl + ld de, $0004 + add hl, de + pop de + inc de + dec c + jp nz, .asm_21a9 + pop hl + ld de, $0060 + add hl, de + pop de + ld a, [$d19f] + add $6 + add e + ld e, a + jr nc, .asm_2225 + inc d + +.asm_2225 + dec b + jp nz, .asm_21a5 + ret +; 222a + +Function222a: ; 222a + ld a, $fa + ld [$ff9f], a + callba Function15363 + xor a + ld [$ff9f], a + ret +; 2238 + +Function2238: ; 2238 + call Function2252 + ret nc + push bc + callba Function149af + pop bc + ret nc + call Function22a7 + scf + ret +; 224a + + + +Function224a: ; 224a + call Function2252 + ret nc + call Function22a7 + ret +; 2252 + +Function2252: ; 2252 + callba Function1499a + ret nc + + ld a, [hROMBank] + push af + + call Function2c52 + call Function2266 + + pop de + ld a, d + rst Bankswitch + ret +; 2266 + +Function2266: ; 2266 + ld a, [MapY] + sub $4 + ld e, a + ld a, [MapX] + sub $4 + ld d, a + ld a, [$dbfb] + and a + ret z + ld c, a + ld hl, $dbfc + ld a, [hli] + ld h, [hl] + ld l, a +.asm_227e + push hl + ld a, [hli] + cp e + jr nz, .asm_2289 + ld a, [hli] + cp d + jr nz, .asm_2289 + jr .asm_2296 + +.asm_2289 + pop hl + ld a, $5 + add l + ld l, a + jr nc, .asm_2291 + inc h + +.asm_2291 + dec c + jr nz, .asm_227e + xor a + ret + +.asm_2296 + pop hl + call Function22a3 + ret nc + ld a, [$dbfb] + inc a + sub c + ld c, a + scf + ret +; 22a3 + +Function22a3: ; 22a3 + inc hl + inc hl + scf + ret +; 22a7 + +Function22a7: ; 22a7 + ld a, [hROMBank] + push af + + call Function2c52 + call Function22b4 + + pop af + rst Bankswitch + scf + ret +; 22b4 + +Function22b4: ; 22b4 + push bc + ld hl, $dbfc + ld a, [hli] + ld h, [hl] + ld l, a + ld a, c + dec a + ld bc, $0005 + call AddNTimes + ld bc, $0002 + add hl, bc + ld a, [hli] + cp $ff + jr nz, .asm_22d0 + ld hl, $dcac + ld a, [hli] + +.asm_22d0 + pop bc + ld [$d146], a + ld a, [hli] + ld [$d147], a + ld a, [hli] + ld [$d148], a + ld a, c + ld [$d149], a + ld a, [MapGroup] + ld [$d14a], a + ld a, [MapNumber] + ld [$d14b], a + scf + ret +; 22ee + + + +CheckOutdoorMap: ; 22ee + cp ROUTE + ret z + cp TOWN + ret +; 22f4 + +CheckIndoorMap: ; 22f4 + cp INDOOR + ret z + cp CAVE + ret z + cp DUNGEON + ret z + cp GATE + ret +; 2300 + +Function2300: ; 2300 + cp INDOOR + ret z + cp GATE + ret z + cp $5 + ret +; 2309 + + +Function2309: ; 2309 + call Function2326 + call Function2c52 + call Function234f + xor a + call Function2336 + ret +; 2317 + +Function2317: ; 2317 + call Function2326 + call Function2c52 + call Function234f + ld a, $1 + call Function2336 + ret +; 2326 + +Function2326: ; 2326 + call Function2c3d + call Function2c1c + call GetSecondaryMapHeaderPointer + call Function235c + call Function2368 + ret +; 2336 + +Function2336: ; 2336 + push af + ld hl, $d1a6 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + call Function23da + call Function23f1 + call Function2408 + pop af + and a + ret nz + call Function241f + ret +; 234f + +Function234f: ; 234f + ld hl, $d1a4 + ld a, [hli] + ld h, [hl] + ld l, a + call Function23ac + call Function23c3 + ret +; 235c + +Function235c: ; 235c + ld de, $d19d + ld c, $c +.asm_2361 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_2361 + ret +; 2368 + +Function2368: ; 2368 + ld a, $ff + ld [NorthConnectedMapGroup], a + ld [SouthConnectedMapGroup], a + ld [WestConnectedMapGroup], a + ld [EastConnectedMapGroup], a + + ld a, [$d1a8] + ld b, a + + bit 3, b + jr z, .asm_2384 + ld de, NorthMapConnection + call GetMapConnection + +.asm_2384 + bit 2, b + jr z, .asm_238e + ld de, SouthMapConnection + call GetMapConnection + +.asm_238e + bit 1, b + jr z, .asm_2398 + ld de, WestMapConnection + call GetMapConnection + +.asm_2398 + bit 0, b + jr z, .asm_23a2 + ld de, EastMapConnection + call GetMapConnection + +.asm_23a2 + ret +; 23a3 + + +GetMapConnection: ; 23a3 +; Load map connection struct at hl into de. + ld c, SouthMapConnection - NorthMapConnection +.loop + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .loop + ret +; 23ac + + +Function23ac: ; 23ac + ld a, [hli] + ld c, a + ld [$dc07], a + ld a, l + ld [$dc08], a + ld a, h + ld [$dc09], a + ld a, c + and a + ret z + ld bc, $0004 + call AddNTimes + ret +; 23c3 + +Function23c3: ; 23c3 + ld a, [hli] + ld c, a + ld [$dc0a], a + ld a, l + ld [$dc0b], a + ld a, h + ld [$dc0c], a + ld a, c + and a + ret z + ld bc, $0003 + call AddNTimes + ret +; 23da + +Function23da: ; 23da + ld a, [hli] + ld c, a + ld [$dbfb], a + ld a, l + ld [$dbfc], a + ld a, h + ld [$dbfd], a + ld a, c + and a + ret z + ld bc, $0005 + call AddNTimes + ret +; 23f1 + +Function23f1: ; 23f1 + ld a, [hli] + ld c, a + ld [$dbfe], a + ld a, l + ld [$dbff], a + ld a, h + ld [$dc00], a + ld a, c + and a + ret z + ld bc, $0008 + call AddNTimes + ret +; 2408 + +Function2408: ; 2408 + ld a, [hli] + ld c, a + ld [$dc01], a + ld a, l + ld [$dc02], a + ld a, h + ld [$dc03], a + ld a, c + and a + ret z + ld bc, $0005 + call AddNTimes + ret +; 241f + +Function241f: ; 241f + push hl + call Function2471 + pop de + ld hl, $d72e + ld a, [de] + inc de + ld [$dc04], a + ld a, e + ld [$dc05], a + ld a, d + ld [$dc06], a + ld a, [$dc04] + call Function2457 + ld a, [$dc04] + ld c, a + ld a, $10 + sub c + jr z, .asm_2454 + ld bc, $0001 + add hl, bc + ld bc, $0010 +.asm_244a + ld [hl], $0 + inc hl + ld [hl], $ff + dec hl + add hl, bc + dec a + jr nz, .asm_244a + +.asm_2454 + ld h, d + ld l, e + ret +; 2457 + +Function2457: ; 2457 + and a + ret z + ld c, a +.asm_245a + push bc + push hl + ld a, $ff + ld [hli], a + ld b, $d +.asm_2461 + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_2461 + pop hl + ld bc, $0010 + add hl, bc + pop bc + dec c + jr nz, .asm_245a + ret +; 2471 + +Function2471: ; 2471 + ld hl, $d4fe + ld bc, $01e0 + xor a + call ByteFill + ld hl, $d4fe + ld de, $0028 + ld c, $c + xor a +.asm_2484 + ld [hl], a + add hl, de + dec c + jr nz, .asm_2484 + ret +; 248a + +Function248a: ; 248a + call GetMapEventBank + rst Bankswitch + + ld hl, $d1a6 + ld a, [hli] + ld h, [hl] + ld l, a + inc hl + inc hl + inc hl + ld a, [WarpNumber] + dec a + ld c, a + ld b, $0 + ld a, $5 + call AddNTimes + ld a, [hli] + ld [YCoord], a + ld a, [hli] + ld [XCoord], a + ld a, [hli] + cp $ff + jr nz, .asm_24b3 + call Function24ba + +.asm_24b3 + ld a, $41 + ld hl, $486d + rst FarCall + ret +; 24ba + +Function24ba: ; 24ba + ld a, [$d149] + ld [$dcac], a + ld a, [$d14a] + ld [BackupMapGroup], a + ld a, [$d14b] + ld [BackupMapNumber], a + ret +; 24cd + +Function24cd: ; 24cd + ld hl, OverworldMap + ld bc, $0514 + ld a, $0 + call ByteFill + call Function24e4 + call FillMapConnections + ld a, $1 + call Function263b + ret +; 24e4 + + + +Function24e4: ; 24e4 + ld a, [hROMBank] + push af + ld hl, OverworldMap + ld a, [$d19f] + ld [hConnectedMapWidth], a + add $6 + ld [hConnectionStripLength], a + ld c, a + ld b, $0 + add hl, bc + add hl, bc + add hl, bc + ld c, $3 + add hl, bc + ld a, [$d1a0] + rst Bankswitch + + ld a, [$d1a1] + ld e, a + ld a, [$d1a2] + ld d, a + ld a, [$d19e] + ld b, a +.asm_250c + push hl + ld a, [hConnectedMapWidth] + ld c, a +.asm_2510 + ld a, [de] + inc de + ld [hli], a + dec c + jr nz, .asm_2510 + pop hl + ld a, [hConnectionStripLength] + add l + ld l, a + jr nc, .asm_251e + inc h + +.asm_251e + dec b + jr nz, .asm_250c + pop af + rst Bankswitch + + ret +; 2524 + + + +FillMapConnections: ; 2524 + +; North + ld a, [NorthConnectedMapGroup] + cp $ff + jr z, .South + ld b, a + ld a, [NorthConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [NorthConnectionStripPointer] + ld l, a + ld a, [NorthConnectionStripPointer + 1] + ld h, a + ld a, [NorthConnectionStripLocation] + ld e, a + ld a, [NorthConnectionStripLocation + 1] + ld d, a + ld a, [NorthConnectionStripLength] + ld [hConnectionStripLength], a + ld a, [NorthConnectedMapWidth] + ld [hConnectedMapWidth], a + call FillNorthConnectionStrip + +.South + ld a, [SouthConnectedMapGroup] + cp $ff + jr z, .West + ld b, a + ld a, [SouthConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [SouthConnectionStripPointer] + ld l, a + ld a, [SouthConnectionStripPointer + 1] + ld h, a + ld a, [SouthConnectionStripLocation] + ld e, a + ld a, [SouthConnectionStripLocation + 1] + ld d, a + ld a, [SouthConnectionStripLength] + ld [hConnectionStripLength], a + ld a, [SouthConnectedMapWidth] + ld [hConnectedMapWidth], a + call FillSouthConnectionStrip + +.West + ld a, [WestConnectedMapGroup] + cp $ff + jr z, .East + ld b, a + ld a, [WestConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [WestConnectionStripPointer] + ld l, a + ld a, [WestConnectionStripPointer + 1] + ld h, a + ld a, [WestConnectionStripLocation] + ld e, a + ld a, [WestConnectionStripLocation + 1] + ld d, a + ld a, [WestConnectionStripLength] + ld b, a + ld a, [WestConnectedMapWidth] + ld [hConnectionStripLength], a + call FillWestConnectionStrip + +.East + ld a, [EastConnectedMapGroup] + cp $ff + jr z, .Done + ld b, a + ld a, [EastConnectedMapNumber] + ld c, a + call GetAnyMapBlockdataBank + + ld a, [EastConnectionStripPointer] + ld l, a + ld a, [EastConnectionStripPointer + 1] + ld h, a + ld a, [EastConnectionStripLocation] + ld e, a + ld a, [EastConnectionStripLocation + 1] + ld d, a + ld a, [EastConnectionStripLength] + ld b, a + ld a, [EastConnectedMapWidth] + ld [hConnectionStripLength], a + call FillEastConnectionStrip + +.Done + ret +; 25d3 + + +FillNorthConnectionStrip: +FillSouthConnectionStrip: ; 25d3 + + ld c, 3 +.y + push de + + push hl + ld a, [hConnectionStripLength] + ld b, a +.x + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .x + pop hl + + ld a, [hConnectedMapWidth] + ld e, a + ld d, 0 + add hl, de + pop de + + ld a, [$d19f] + add 6 + add e + ld e, a + jr nc, .asm_25f2 + inc d +.asm_25f2 + dec c + jr nz, .y + ret +; 25f6 + + +FillWestConnectionStrip: +FillEastConnectionStrip: ; 25f6 + +.asm_25f6 + ld a, [$d19f] + add 6 + ld [hConnectedMapWidth], a + + push de + + push hl + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + ld a, [hli] + ld [de], a + inc de + pop hl + + ld a, [hConnectionStripLength] + ld e, a + ld d, 0 + add hl, de + pop de + + ld a, [hConnectedMapWidth] + add e + ld e, a + jr nc, .asm_2617 + inc d +.asm_2617 + dec b + jr nz, .asm_25f6 + ret +; 261b + +Function261b: ; 261b + ld [$d432], a + ret +; 261f + + +CallScript: ; 261f +; Call a script at a:hl. + + ld [ScriptBank], a + ld a, l + ld [ScriptPos], a + ld a, h + ld [ScriptPos + 1], a + + ld a, $ff + ld [ScriptRunning], a + + scf + ret +; 2631 + +Function2631: ; 2631 + ld a, [ScriptRunning] + and a + ret nz + call GetMapEventBank + jr CallScript +; 263b + +Function263b: ; 263b + ld b, a + ld a, [hROMBank] + push af + call Function2c52 + call Function2653 + jr nc, .done + + call GetMapEventBank + ld b, a + ld d, h + ld e, l + call Function2674 + +.done + pop af + rst Bankswitch + ret +; 2653 + +Function2653: ; 2653 + ld a, [$dc0a] + ld c, a + and a + ret z + ld hl, $dc0b + ld a, [hli] + ld h, [hl] + ld l, a + or h + ret z + ld de, $0003 +.asm_2664 + ld a, [hl] + cp b + jr z, .asm_266e + add hl, de + dec c + jr nz, .asm_2664 + xor a + ret + +.asm_266e + inc hl + ld a, [hli] + ld h, [hl] + ld l, a + scf + ret +; 2674 + +Function2674: ; 2674 + callba Unknown_0x974f3 + ld a, [ScriptMode] + push af + ld hl, ScriptFlags + ld a, [hl] + push af + set 1, [hl] + callba Function96c56 + callba ScriptEvents + pop af + ld [ScriptFlags], a + pop af + ld [ScriptMode], a + ret +; 269a + +Function269a: ; 269a + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + push hl + call SpeechTextBox + call Function2e31 + ld a, 1 + ld [hOAMUpdate], a + call Function321c + pop hl + call PrintTextBoxText + xor a + ld [hOAMUpdate], a + pop af + rst Bankswitch + + ret +; 26b7 + +Function26b7: ; 26b7 +; Call a:de. + + ld [hBuffer], a + ld a, [hROMBank] + push af + ld a, [hBuffer] + rst Bankswitch + + call .de + + pop af + rst Bankswitch + ret + +.de + push de + ret +; 26c7 + +Function26c7: ; 26c7 + ld a, [hROMBank] + push af + ld a, b + rst Bankswitch + + ld a, c + call Function19e9 + + pop hl + ld a, h + rst Bankswitch + ret +; 26d4 + + +GetScriptByte: ; 0x26d4 +; Return byte at ScriptBank:ScriptPos in a. + + push hl + push bc + ld a, [hROMBank] + push af + ld a, [ScriptBank] + rst Bankswitch + + ld hl, ScriptPos + ld c, [hl] + inc hl + ld b, [hl] + + ld a, [bc] + + inc bc + ld [hl], b + dec hl + ld [hl], c + + ld b, a + pop af + rst Bankswitch + ld a, b + pop bc + pop hl + ret +; 0x26ef + + +ObjectEvent: ; 0x26ef + jumptextfaceplayer ObjectEventText +; 0x26f2 + +ObjectEventText: + TX_FAR _ObjectEventText + db "@" +; 0x26f7 + + +BGEvent: ; 26f7 + jumptext BGEventText +; 26fa + +BGEventText: ; 26fa + text_jump UnknownText_0x1c46fc, BANK(UnknownText_0x1c46fc) + db "@" +; 26ff + + +CoordinatesEvent: ; 26ff + jumptext CoordinatesEventText +; 2702 + +CoordinatesEventText: ; 2702 + text_jump UnknownText_0x1c4706, BANK(UnknownText_0x1c4706) + db "@" +; 2707 + + +Function2707: ; 2707 + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld a, [hl] + ret +; 2712 + +Function2712: ; 2712 + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld [hl], $ff + ret +; 271e + +Function271e: ; 271e + ld a, [hConnectionStripLength] + ld e, a + ld d, $0 + ld hl, $d81e + add hl, de + ld [hl], $0 + ret +; 272a + + +Function272a: ; 272a + ld hl, TileMap + ld de, BGMapBuffer + call Function27b7 + ld c, $28 + call Functiondbd + ld a, [$d152] + ld e, a + ld a, [$d153] + ld d, a + call Function27d3 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 2748 + +Function2748: ; 2748 + ld hl, $c5e0 + ld de, BGMapBuffer + call Function27b7 + ld c, $28 + call Functiondbd + ld a, [$d152] + ld l, a + ld a, [$d153] + ld h, a + ld bc, $0200 + add hl, bc + ld a, h + and $3 + or $98 + ld e, l + ld d, a + call Function27d3 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 2771 + +Function2771: ; 2771 + ld hl, TileMap + ld de, BGMapBuffer + call Function27c0 + ld c, $24 + call Functiondbd + ld a, [$d152] + ld e, a + ld a, [$d153] + ld d, a + call Function27f8 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 278f + +Function278f: ; 278f + ld hl, $c4b2 + ld de, BGMapBuffer + call Function27c0 + ld c, $24 + call Functiondbd + ld a, [$d152] + ld e, a + and $e0 + ld b, a + ld a, e + add $12 + and $1f + or b + ld e, a + ld a, [$d153] + ld d, a + call Function27f8 + ld a, $1 + ld [hBGMapUpdate], a + ret +; 27b7 + +Function27b7: ; 27b7 + ld c, $28 +.asm_27b9 + ld a, [hli] + ld [de], a + inc de + dec c + jr nz, .asm_27b9 + ret +; 27c0 + +Function27c0: ; 27c0 + ld c, $12 +.asm_27c2 + ld a, [hli] + ld [de], a + inc de + ld a, [hl] + ld [de], a + inc de + ld a, $13 + add l + ld l, a + jr nc, .asm_27cf + inc h + +.asm_27cf + dec c + jr nz, .asm_27c2 + ret +; 27d3 + +Function27d3: ; 27d3 + ld hl, BGMapBufferPtrs + push de + call .asm_27df + pop de + ld a, $20 + add e + ld e, a + +.asm_27df + ld c, $a +.asm_27e1 + ld a, e + ld [hli], a + ld a, d + ld [hli], a + ld a, e + inc a + inc a + and $1f + ld b, a + ld a, e + and $e0 + or b + ld e, a + dec c + jr nz, .asm_27e1 + ld a, $14 + ld [$ffdc], a + ret +; 27f8 + +Function27f8: ; 27f8 + ld hl, BGMapBufferPtrs + ld c, $12 +.asm_27fd + ld a, e + ld [hli], a + ld a, d + ld [hli], a + ld a, $20 + add e + ld e, a + jr nc, .asm_280e + inc d + ld a, d + and $3 + or $98 + ld d, a + +.asm_280e + dec c + jr nz, .asm_27fd + ld a, $12 + ld [$ffdc], a + ret +; 2816 + +Function2816: ; 2816 + ld hl, BGMapBuffer + ld bc, $0078 + xor a + call ByteFill + ret +; 2821 + +Function2821: ; 2821 + ld hl, TilesetAddress + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [TilesetBank] + ld e, a + ld a, [rSVBK] + push af + ld a, $6 + ld [rSVBK], a + ld a, e + ld de, $d000 + call FarDecompress + ld hl, $d000 + ld de, VTiles2 + ld bc, $0600 + call CopyBytes + ld a, [rVBK] + push af + ld a, $1 + ld [rVBK], a + ld hl, $d600 + ld de, VTiles2 + ld bc, $0600 + call CopyBytes + pop af + ld [rVBK], a + pop af + ld [rSVBK], a + ld a, [$d199] + cp $1 + jr z, .asm_286f + cp $2 + jr z, .asm_286f + cp $4 + jr z, .asm_286f + jr .asm_2875 + +.asm_286f + ld a, $7 + ld hl, $4000 + rst FarCall + +.asm_2875 + xor a + ld [hTileAnimFrame], a + ret +; 2879 + +Function2879: ; 2879 + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $dcb9 + ld c, $5 + ld b, $6 +.asm_2886 + push bc + push hl +.asm_2888 + ld a, [hli] + ld [de], a + inc de + dec b + jr nz, .asm_2888 + pop hl + ld a, [$d19f] + add $6 + ld c, a + ld b, $0 + add hl, bc + pop bc + dec c + jr nz, .asm_2886 + ret +; 289d + +Function289d: ; 289d + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld de, $dcb9 + ld a, [$d19f] + add $6 + ld [hConnectionStripLength], a + ld a, [$d151] + and a + jr z, .asm_28cb + cp $1 + jr z, .asm_28c0 + cp $2 + jr z, .asm_28d4 + cp $3 + jr z, .asm_28da + ret + +.asm_28c0 + ld de, $dcbf + ld a, [hConnectionStripLength] + ld c, a + ld b, $0 + add hl, bc + jr .asm_28ce + +.asm_28cb + ld de, $dcb9 + +.asm_28ce + ld b, $6 + ld c, $4 + jr .asm_28f7 + +.asm_28d4 + ld de, $dcba + inc hl + jr .asm_28dd + +.asm_28da + ld de, $dcb9 + +.asm_28dd + ld b, $5 + ld c, $5 + jr .asm_28f7 + + ld hl, $d194 + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [$d19f] + add $6 + ld [hConnectionStripLength], a + ld de, $dcb9 + ld b, $6 + ld c, $5 + +.asm_28f7 + push bc + push hl + push de +.asm_28fa + ld a, [de] + inc de + ld [hli], a + dec b + jr nz, .asm_28fa + pop de + ld a, e + add $6 + ld e, a + jr nc, .asm_2908 + inc d + +.asm_2908 + pop hl + ld a, [hConnectionStripLength] + ld c, a + ld b, $0 + add hl, bc + pop bc + dec c + jr nz, .asm_28f7 + ret +; 2914 + +Function2914: ; 2914 + xor a + ld [TilePermissions], a + call Function296c + call Function294d + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + call Function2a3c + ld [StandingTile], a + call Function29ff + ret nz + ld a, [StandingTile] + and 7 + ld hl, .data_2945 + add l + ld l, a + ld a, 0 + adc h + ld h, a + ld a, [hl] + ld hl, TilePermissions + or [hl] + ld [hl], a + ret +; 2945 + +.data_2945 ; 2945 + db 1, 2, 4, 8, 9, 10, 5, 6 +; 294d + +Function294d: ; 294d + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + push de + inc e + call Function2a3c + ld [TileDown], a + call Function298b + pop de + dec e + call Function2a3c + ld [TileUp], a + call Function29a8 + ret +; 296c + +Function296c: ; 296c + ld a, [MapX] + ld d, a + ld a, [MapY] + ld e, a + push de + dec d + call Function2a3c + ld [TileLeft], a + call Function29e2 + pop de + inc d + call Function2a3c + ld [TileRight], a + call Function29c5 + ret +; 298b + +Function298b: ; 298b + call Function29ff + ret nz + ld a, [TileDown] + and $7 + cp $2 + jr z, .asm_299f + cp $6 + jr z, .asm_299f + cp $7 + ret nz + +.asm_299f + ld a, [TilePermissions] + or $8 + ld [TilePermissions], a + ret +; 29a8 + +Function29a8: ; 29a8 + call Function29ff + ret nz + ld a, [TileUp] + and $7 + cp $3 + jr z, .asm_29bc + cp $4 + jr z, .asm_29bc + cp $5 + ret nz + +.asm_29bc + ld a, [TilePermissions] + or $4 + ld [TilePermissions], a + ret +; 29c5 + +Function29c5: ; 29c5 + call Function29ff + ret nz + ld a, [TileRight] + and $7 + cp $1 + jr z, .asm_29d9 + cp $5 + jr z, .asm_29d9 + cp $7 + ret nz + +.asm_29d9 + ld a, [TilePermissions] + or $1 + ld [TilePermissions], a + ret +; 29e2 + +Function29e2: ; 29e2 + call Function29ff + ret nz + ld a, [TileLeft] + and $7 + cp $0 + jr z, .asm_29f6 + cp $4 + jr z, .asm_29f6 + cp $6 + ret nz + +.asm_29f6 + ld a, [TilePermissions] + or $2 + ld [TilePermissions], a + ret +; 29ff + +Function29ff: ; 29ff + and $f0 + cp $b0 + ret z + cp $c0 + ret +; 2a07 + + +GetFacingTileCoord: ; 2a07 +; Return map coordinates in (d, e) and tile id in a +; of the tile the player is facing. + + ld a, [PlayerDirection] + and %1100 + srl a + srl a + ld l, a + ld h, 0 + add hl, hl + add hl, hl + ld de, .Directions + add hl, de + + ld d, [hl] + inc hl + ld e, [hl] + inc hl + + ld a, [hli] + ld h, [hl] + ld l, a + + ld a, [MapX] + add d + ld d, a + ld a, [MapY] + add e + ld e, a + ld a, [hl] + ret + +.Directions + ; x, y + db 0, 1 + dw TileDown + db 0, -1 + dw TileUp + db -1, 0 + dw TileLeft + db 1, 0 + dw TileRight +; 2a3c + + +Function2a3c: ; 2a3c + call Function2a66 + ld a, [hl] + and a + jr z, .asm_2a63 + ld l, a + ld h, $0 + add hl, hl + add hl, hl + ld a, [TilesetCollisionAddress] + ld c, a + ld a, [$d1e1] + ld b, a + add hl, bc + rr d + jr nc, .asm_2a56 + inc hl + +.asm_2a56 + rr e + jr nc, .asm_2a5c + inc hl + inc hl + +.asm_2a5c + ld a, [TilesetCollisionBank] + call GetFarByte + ret + +.asm_2a63 + ld a, $ff + ret +; 2a66 + +Function2a66: ; 2a66 + ld a, [$d19f] + add $6 + ld c, a + ld b, $0 + ld hl, $c801 + add hl, bc + ld a, e + srl a + jr z, .asm_2a84 + and a +.asm_2a78 + srl a + jr nc, .asm_2a7d + add hl, bc + +.asm_2a7d + sla c + rl b + and a + jr nz, .asm_2a78 + +.asm_2a84 + ld c, d + srl c + ld b, $0 + add hl, bc + ret +; 2a8b + + +CheckFacingSign: ; 2a8b + call GetFacingTileCoord + ld b, a + ld a, d + sub 4 + ld d, a + ld a, e + sub 4 + ld e, a + ld a, [$dc01] + and a + ret z + ld c, a + ld a, [hROMBank] + push af + call Function2c52 + call Function2aaa + pop hl + ld a, h + rst Bankswitch + ret +; 2aaa + +Function2aaa: ; 2aaa + ld hl, $dc02 + ld a, [hli] + ld h, [hl] + ld l, a +.asm_2ab0 + push hl + ld a, [hli] + cp e + jr nz, .asm_2abb + ld a, [hli] + cp d + jr nz, .asm_2abb + jr .asm_2ac8 + +.asm_2abb + pop hl + ld a, 5 + add l + ld l, a + jr nc, .asm_2ac3 + inc h + +.asm_2ac3 + dec c + jr nz, .asm_2ab0 + xor a + ret + +.asm_2ac8 + pop hl + ld de, EngineBuffer1 + ld bc, 5 + call CopyBytes + scf + ret +; 2ad4 + +Function2ad4: ; 2ad4 + ld a, [$dbfe] + and a + ret z + ld c, a + ld a, [hROMBank] + push af + call Function2c52 + call Function2ae7 + pop hl + ld a, h + rst Bankswitch + ret +; 2ae7 + +Function2ae7: ; 2ae7 + ld hl, $dbff + ld a, [hli] + ld h, [hl] + ld l, a + call Function211b + ld b, a + ld a, [MapX] + sub $4 + ld d, a + ld a, [MapY] + sub $4 + ld e, a +.asm_2afd + push hl + ld a, [hli] + cp b + jr z, .asm_2b06 + cp $ff + jr nz, .asm_2b10 + +.asm_2b06 + ld a, [hli] + cp e + jr nz, .asm_2b10 + ld a, [hli] + cp d + jr nz, .asm_2b10 + jr .asm_2b1d + +.asm_2b10 + pop hl + ld a, $8 + add l + ld l, a + jr nc, .asm_2b18 + inc h + +.asm_2b18 + dec c + jr nz, .asm_2afd + xor a + ret + +.asm_2b1d + pop hl + ld de, EngineBuffer1 + ld bc, $0008 + call CopyBytes + scf + ret +; 2b29 + + +FadeToMenu: ; 2b29 + xor a + ld [hBGMapMode], a + call Function1d6e + ld a, $23 + ld hl, $4084 + rst FarCall + call ClearSprites + call Function2ed3 + ret +; 2b3c + + +Function2b3c: ; 2b3c + call WhiteBGMap + call Function2bae + call Function1ad2 + call Function1d7d + call Functiond90 + jr Function2b5c +; 2b4d + +Function2b4d: ; 2b4d + call WhiteBGMap + call Function1d7d + call Function2bae + call Function1ad2 + call Functiond90 +; 2b5c + +Function2b5c: ; 2b5c + ld b, $9 + call GetSGBLayout + ld a, $12 + ld hl, $5409 + rst FarCall + call Function3200 + ld a, $23 + ld hl, $4079 + rst FarCall + call Function2ee4 + ret +; 2b74 + + +Function2b74: ; 0x2b74 + push af + ld a, $1 + ld [$c2ce], a + call WhiteBGMap + call ClearSprites + call Function2bae + ld hl, $c590 ; tile 0, 12 + ld bc, $0412 + call TextBox + ld hl, VramState + set 0, [hl] + call Function1ad2 + call Function3200 + ld b, $9 + call GetSGBLayout + callba Function49409 + call UpdateTimePals + call DelayFrame + ld a, $1 + ld [$ffde], a + pop af + ret +; 0x2bae + +Function2bae: ; 2bae + call DisableLCD + call ClearSprites + ld a, $5 + ld hl, $4168 + rst FarCall + call Functione51 + call Functione5f + ld a, [hROMBank] + push af + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + call Function2c24 + ld a, $23 + ld hl, $4001 + rst FarCall + call Function2173 + call Function2821 + ld a, $9 + call Function3cb4 + pop af + rst Bankswitch + + call EnableLCD + ret +; 2be5 + + +GetMapHeaderPointer: ; 2be5 + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a +; 2bed + +GetAnyMapHeaderPointer: ; 0x2bed +; Prior to calling this function, you must have switched banks so that +; MapGroupPointers is visible. + +; inputs: +; b = map group, c = map number +; XXX de = ??? + +; outputs: +; hl points to the map header + push bc ; save map number for later + + ; get pointer to map group + dec b + ld c, b + ld b, $0 + ld hl, MapGroupPointers + add hl, bc + add hl, bc + + ld a, [hli] + ld h, [hl] + ld l, a + pop bc ; restore map number + + ; find the cth map header + dec c + ld b, $0 + ld a, OlivineGym_MapHeader - OlivinePokeCenter1F_MapHeader + call AddNTimes + ret +; 0x2c04 + +GetMapHeaderMember: ; 0x2c04 +; Extract data from the current map's header. + +; inputs: +; de = offset of desired data within the mapheader + +; outputs: +; bc = data from the current map's header +; (e.g., de = $0003 would return a pointer to the secondary map header) + + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a + ; fallthrough + +GetAnyMapHeaderMember: ; 0x2c0c + ; bankswitch + ld a, [hROMBank] + push af + ld a, BANK(MapGroupPointers) + rst Bankswitch + + call GetAnyMapHeaderPointer + add hl, de + ld c, [hl] + inc hl + ld b, [hl] + + ; bankswitch back + pop af + rst Bankswitch + ret +; 0x2c1c + + +Function2c1c: ; 2c1c + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a +; 2c24 + +Function2c24: ; 2c24 + call Function2c31 + rst Bankswitch + ret +; 2c29 + + +Function2c29: ; 2c29 + ld a, [MapGroup] + ld b, a + ld a, [MapNumber] + ld c, a +; 2c31 + +Function2c31: ; 2c31 + push hl + push de + ld de, $0000 + call GetAnyMapHeaderMember + ld a, c + pop de + pop hl + ret +; 2c3d + +Function2c3d: ; 2c3d + ld a, [hROMBank] + push af + ld a, $25 + rst Bankswitch + call GetMapHeaderPointer + ld de, $d198 + ld bc, $0005 + call CopyBytes + pop af + rst Bankswitch + ret +; 2c52 + +Function2c52: ; 2c52 + ld a, [MapEventBank] + rst Bankswitch + ret +; 2c57 + + +GetMapEventBank: ; 2c57 + ld a, [MapEventBank] + ret +; 2c5b + +GetAnyMapBlockdataBank: ; 2c5b +; Return the blockdata bank for group b map c. + push hl + push de + push bc + + push bc + ld de, 3 ; second map header pointer + call GetAnyMapHeaderMember + ld l, c + ld h, b + pop bc + + push hl + ld de, 0 ; second map header bank + call GetAnyMapHeaderMember + pop hl + + ld de, 3 ; blockdata bank + add hl, de + ld a, c + call GetFarByte + rst Bankswitch + + pop bc + pop de + pop hl + ret +; 2c7d + +GetSecondaryMapHeaderPointer: ; 0x2c7d +; returns the current map's secondary map header pointer in hl. + push bc + push de + ld de, $0003 ; secondary map header pointer (offset within header) + call GetMapHeaderMember + ld l, c + ld h, b + pop de + pop bc + ret +; 2c8a + +GetMapPermission: ; 2c8a + push hl + push de + push bc + ld de, 2 + call GetMapHeaderMember + ld a, c + pop bc + pop de + pop hl + ret +; 2c98 + +Function2c98: ; 2c98 + ret +; 2c99 + +Function2c99: ; 2c99 + push hl + push de + push bc + ld de, $0002 + call GetAnyMapHeaderMember + ld a, c + pop bc + pop de + pop hl + ret +; 2ca7 + +Function2ca7: ; 2ca7 + ld de, $0001 + call GetAnyMapHeaderMember + ld a, c + ret +; 2caf + +GetWorldMapLocation: ; 0x2caf +; given a map group/id in bc, return its location on the Pokégear map. + push hl + push de + push bc + ld de, 5 + call GetAnyMapHeaderMember + ld a, c + pop bc + pop de + pop hl + ret +; 0x2cbd + +Function2cbd: ; 2cbd + push hl + push bc + ld de, $0006 + call GetMapHeaderMember + ld a, c + cp $64 + jr z, .asm_2cee + bit 7, c + jr nz, .asm_2cda + ld a, $22 + ld hl, $7342 + rst FarCall + ld e, c + ld d, $0 +.asm_2cd7 + pop bc + pop hl + ret + +.asm_2cda + ld a, [StatusFlags2] + bit 0, a + jr z, .asm_2ce6 + ld de, $0056 + jr .asm_2cd7 + +.asm_2ce6 + ld a, c + and $7f + ld e, a + ld d, $0 + jr .asm_2cd7 + +.asm_2cee + ld a, [StatusFlags2] + bit 7, a + jr z, .asm_2cfa + ld de, $0048 + jr .asm_2cd7 + +.asm_2cfa + ld de, $0026 + jr .asm_2cd7 +; 2cff + +Function2cff: ; 2cff + call Function2d0d + and $f + ret +; 2d05 + +Function2d05: ; 2d05 + call Function2d0d + and $f0 + swap a + ret +; 2d0d + +Function2d0d: ; 2d0d + push hl + push bc + ld de, $0007 + call GetMapHeaderMember + ld a, c + pop bc + pop hl + ret +; 2d19 + +Function2d19: ; 2d19 + push de + push hl + push bc + ld de, $0008 + call GetMapHeaderMember + ld a, c + pop bc + pop hl + pop de + ret +; 2d27 + +Function2d27: ; 2d27 + push hl + push bc + ld hl, $5596 + ld bc, $000f + ld a, [$d199] + call AddNTimes + ld de, TilesetBank + ld bc, $000f + ld a, $13 + call FarCopyBytes + pop bc + pop hl + ret +; 2d43 + @@ -517,2373 +517,8 @@ AskSerial: ; 2063 INCLUDE "common/game_time.asm" +INCLUDE "common/map.asm" -Function210f: ; 210f - ld hl, $c7e8 - ld bc, $0018 - ld a, $0 - call ByteFill - ret -; 211b - -Function211b: ; 211b - push hl - ld hl, $dbf7 - ld a, [hli] - ld h, [hl] - ld l, a - or h - ld a, [hl] - jr nz, .asm_2128 - ld a, $ff - -.asm_2128 - pop hl - ret -; 212a - -Function212a: ; 212a - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - xor a - ld [$dbf7], a - ld [$dbf8], a - call Function2147 - ret c - ld a, e - ld [$dbf7], a - ld a, d - ld [$dbf8], a - xor a - ret -; 2147 - -Function2147: ; 2147 - push bc - ld a, [hROMBank] - push af - ld a, $13 - rst Bankswitch - - ld hl, $501e -.asm_2151 - push hl - ld a, [hli] - cp $ff - jr z, .asm_2167 - cp b - jr nz, .asm_2160 - ld a, [hli] - cp c - jr nz, .asm_2160 - jr .asm_216a - -.asm_2160 - pop hl - ld de, $0004 - add hl, de - jr .asm_2151 - -.asm_2167 - scf - jr .asm_216d - -.asm_216a - ld e, [hl] - inc hl - ld d, [hl] - -.asm_216d - pop hl - pop bc - ld a, b - rst Bankswitch - - pop bc - ret -; 2173 - -Function2173: ; 2173 - call Function217a - call Functiondb1 - ret -; 217a - -Function217a: ; 217a - ld a, [hROMBank] - push af - ld a, [TilesetBlocksBank] - rst Bankswitch - - call Function2198 - ld a, $60 - ld hl, TileMap - ld bc, $0168 - call ByteFill - ld a, $13 - rst Bankswitch - - call $515b - pop af - rst Bankswitch - - ret -; 2198 - -Function2198: ; 2198 - ld a, [$d194] - ld e, a - ld a, [$d195] - ld d, a - ld hl, EnemyMoveAnimation - ld b, $5 - -.asm_21a5 - push de - push hl - ld c, $6 - -.asm_21a9 - push de - push hl - ld a, [de] - and a - jr nz, .asm_21b2 - ld a, [$d19d] - -.asm_21b2 - ld e, l - ld d, h - add a - ld l, a - ld h, $0 - add hl, hl - add hl, hl - add hl, hl - ld a, [TilesetBlocksAddress] - add l - ld l, a - ld a, [TilesetBlocksAddress + 1] - adc h - ld h, a - -rept 3 - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - - ld a, e - add 20 - ld e, a - jr nc, .next\@ - inc d -.next\@ -endr - - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - - pop hl - ld de, $0004 - add hl, de - pop de - inc de - dec c - jp nz, .asm_21a9 - pop hl - ld de, $0060 - add hl, de - pop de - ld a, [$d19f] - add $6 - add e - ld e, a - jr nc, .asm_2225 - inc d - -.asm_2225 - dec b - jp nz, .asm_21a5 - ret -; 222a - -Function222a: ; 222a - ld a, $fa - ld [$ff9f], a - callba Function15363 - xor a - ld [$ff9f], a - ret -; 2238 - -Function2238: ; 2238 - call Function2252 - ret nc - push bc - callba Function149af - pop bc - ret nc - call Function22a7 - scf - ret -; 224a - - - -Function224a: ; 224a - call Function2252 - ret nc - call Function22a7 - ret -; 2252 - -Function2252: ; 2252 - callba Function1499a - ret nc - - ld a, [hROMBank] - push af - - call Function2c52 - call Function2266 - - pop de - ld a, d - rst Bankswitch - ret -; 2266 - -Function2266: ; 2266 - ld a, [MapY] - sub $4 - ld e, a - ld a, [MapX] - sub $4 - ld d, a - ld a, [$dbfb] - and a - ret z - ld c, a - ld hl, $dbfc - ld a, [hli] - ld h, [hl] - ld l, a -.asm_227e - push hl - ld a, [hli] - cp e - jr nz, .asm_2289 - ld a, [hli] - cp d - jr nz, .asm_2289 - jr .asm_2296 - -.asm_2289 - pop hl - ld a, $5 - add l - ld l, a - jr nc, .asm_2291 - inc h - -.asm_2291 - dec c - jr nz, .asm_227e - xor a - ret - -.asm_2296 - pop hl - call Function22a3 - ret nc - ld a, [$dbfb] - inc a - sub c - ld c, a - scf - ret -; 22a3 - -Function22a3: ; 22a3 - inc hl - inc hl - scf - ret -; 22a7 - -Function22a7: ; 22a7 - ld a, [hROMBank] - push af - - call Function2c52 - call Function22b4 - - pop af - rst Bankswitch - scf - ret -; 22b4 - -Function22b4: ; 22b4 - push bc - ld hl, $dbfc - ld a, [hli] - ld h, [hl] - ld l, a - ld a, c - dec a - ld bc, $0005 - call AddNTimes - ld bc, $0002 - add hl, bc - ld a, [hli] - cp $ff - jr nz, .asm_22d0 - ld hl, $dcac - ld a, [hli] - -.asm_22d0 - pop bc - ld [$d146], a - ld a, [hli] - ld [$d147], a - ld a, [hli] - ld [$d148], a - ld a, c - ld [$d149], a - ld a, [MapGroup] - ld [$d14a], a - ld a, [MapNumber] - ld [$d14b], a - scf - ret -; 22ee - - - -CheckOutdoorMap: ; 22ee - cp ROUTE - ret z - cp TOWN - ret -; 22f4 - -CheckIndoorMap: ; 22f4 - cp INDOOR - ret z - cp CAVE - ret z - cp DUNGEON - ret z - cp GATE - ret -; 2300 - -Function2300: ; 2300 - cp INDOOR - ret z - cp GATE - ret z - cp $5 - ret -; 2309 - - -Function2309: ; 2309 - call Function2326 - call Function2c52 - call Function234f - xor a - call Function2336 - ret -; 2317 - -Function2317: ; 2317 - call Function2326 - call Function2c52 - call Function234f - ld a, $1 - call Function2336 - ret -; 2326 - -Function2326: ; 2326 - call Function2c3d - call Function2c1c - call GetSecondaryMapHeaderPointer - call Function235c - call Function2368 - ret -; 2336 - -Function2336: ; 2336 - push af - ld hl, $d1a6 - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - inc hl - call Function23da - call Function23f1 - call Function2408 - pop af - and a - ret nz - call Function241f - ret -; 234f - -Function234f: ; 234f - ld hl, $d1a4 - ld a, [hli] - ld h, [hl] - ld l, a - call Function23ac - call Function23c3 - ret -; 235c - -Function235c: ; 235c - ld de, $d19d - ld c, $c -.asm_2361 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_2361 - ret -; 2368 - -Function2368: ; 2368 - ld a, $ff - ld [NorthConnectedMapGroup], a - ld [SouthConnectedMapGroup], a - ld [WestConnectedMapGroup], a - ld [EastConnectedMapGroup], a - - ld a, [$d1a8] - ld b, a - - bit 3, b - jr z, .asm_2384 - ld de, NorthMapConnection - call GetMapConnection - -.asm_2384 - bit 2, b - jr z, .asm_238e - ld de, SouthMapConnection - call GetMapConnection - -.asm_238e - bit 1, b - jr z, .asm_2398 - ld de, WestMapConnection - call GetMapConnection - -.asm_2398 - bit 0, b - jr z, .asm_23a2 - ld de, EastMapConnection - call GetMapConnection - -.asm_23a2 - ret -; 23a3 - - -GetMapConnection: ; 23a3 -; Load map connection struct at hl into de. - ld c, SouthMapConnection - NorthMapConnection -.loop - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .loop - ret -; 23ac - - -Function23ac: ; 23ac - ld a, [hli] - ld c, a - ld [$dc07], a - ld a, l - ld [$dc08], a - ld a, h - ld [$dc09], a - ld a, c - and a - ret z - ld bc, $0004 - call AddNTimes - ret -; 23c3 - -Function23c3: ; 23c3 - ld a, [hli] - ld c, a - ld [$dc0a], a - ld a, l - ld [$dc0b], a - ld a, h - ld [$dc0c], a - ld a, c - and a - ret z - ld bc, $0003 - call AddNTimes - ret -; 23da - -Function23da: ; 23da - ld a, [hli] - ld c, a - ld [$dbfb], a - ld a, l - ld [$dbfc], a - ld a, h - ld [$dbfd], a - ld a, c - and a - ret z - ld bc, $0005 - call AddNTimes - ret -; 23f1 - -Function23f1: ; 23f1 - ld a, [hli] - ld c, a - ld [$dbfe], a - ld a, l - ld [$dbff], a - ld a, h - ld [$dc00], a - ld a, c - and a - ret z - ld bc, $0008 - call AddNTimes - ret -; 2408 - -Function2408: ; 2408 - ld a, [hli] - ld c, a - ld [$dc01], a - ld a, l - ld [$dc02], a - ld a, h - ld [$dc03], a - ld a, c - and a - ret z - ld bc, $0005 - call AddNTimes - ret -; 241f - -Function241f: ; 241f - push hl - call Function2471 - pop de - ld hl, $d72e - ld a, [de] - inc de - ld [$dc04], a - ld a, e - ld [$dc05], a - ld a, d - ld [$dc06], a - ld a, [$dc04] - call Function2457 - ld a, [$dc04] - ld c, a - ld a, $10 - sub c - jr z, .asm_2454 - ld bc, $0001 - add hl, bc - ld bc, $0010 -.asm_244a - ld [hl], $0 - inc hl - ld [hl], $ff - dec hl - add hl, bc - dec a - jr nz, .asm_244a - -.asm_2454 - ld h, d - ld l, e - ret -; 2457 - -Function2457: ; 2457 - and a - ret z - ld c, a -.asm_245a - push bc - push hl - ld a, $ff - ld [hli], a - ld b, $d -.asm_2461 - ld a, [de] - inc de - ld [hli], a - dec b - jr nz, .asm_2461 - pop hl - ld bc, $0010 - add hl, bc - pop bc - dec c - jr nz, .asm_245a - ret -; 2471 - -Function2471: ; 2471 - ld hl, $d4fe - ld bc, $01e0 - xor a - call ByteFill - ld hl, $d4fe - ld de, $0028 - ld c, $c - xor a -.asm_2484 - ld [hl], a - add hl, de - dec c - jr nz, .asm_2484 - ret -; 248a - -Function248a: ; 248a - call GetMapEventBank - rst Bankswitch - - ld hl, $d1a6 - ld a, [hli] - ld h, [hl] - ld l, a - inc hl - inc hl - inc hl - ld a, [WarpNumber] - dec a - ld c, a - ld b, $0 - ld a, $5 - call AddNTimes - ld a, [hli] - ld [YCoord], a - ld a, [hli] - ld [XCoord], a - ld a, [hli] - cp $ff - jr nz, .asm_24b3 - call Function24ba - -.asm_24b3 - ld a, $41 - ld hl, $486d - rst FarCall - ret -; 24ba - -Function24ba: ; 24ba - ld a, [$d149] - ld [$dcac], a - ld a, [$d14a] - ld [BackupMapGroup], a - ld a, [$d14b] - ld [BackupMapNumber], a - ret -; 24cd - -Function24cd: ; 24cd - ld hl, OverworldMap - ld bc, $0514 - ld a, $0 - call ByteFill - call Function24e4 - call FillMapConnections - ld a, $1 - call Function263b - ret -; 24e4 - - - -Function24e4: ; 24e4 - ld a, [hROMBank] - push af - ld hl, OverworldMap - ld a, [$d19f] - ld [hConnectedMapWidth], a - add $6 - ld [hConnectionStripLength], a - ld c, a - ld b, $0 - add hl, bc - add hl, bc - add hl, bc - ld c, $3 - add hl, bc - ld a, [$d1a0] - rst Bankswitch - - ld a, [$d1a1] - ld e, a - ld a, [$d1a2] - ld d, a - ld a, [$d19e] - ld b, a -.asm_250c - push hl - ld a, [hConnectedMapWidth] - ld c, a -.asm_2510 - ld a, [de] - inc de - ld [hli], a - dec c - jr nz, .asm_2510 - pop hl - ld a, [hConnectionStripLength] - add l - ld l, a - jr nc, .asm_251e - inc h - -.asm_251e - dec b - jr nz, .asm_250c - pop af - rst Bankswitch - - ret -; 2524 - - - -FillMapConnections: ; 2524 - -; North - ld a, [NorthConnectedMapGroup] - cp $ff - jr z, .South - ld b, a - ld a, [NorthConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [NorthConnectionStripPointer] - ld l, a - ld a, [NorthConnectionStripPointer + 1] - ld h, a - ld a, [NorthConnectionStripLocation] - ld e, a - ld a, [NorthConnectionStripLocation + 1] - ld d, a - ld a, [NorthConnectionStripLength] - ld [hConnectionStripLength], a - ld a, [NorthConnectedMapWidth] - ld [hConnectedMapWidth], a - call FillNorthConnectionStrip - -.South - ld a, [SouthConnectedMapGroup] - cp $ff - jr z, .West - ld b, a - ld a, [SouthConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [SouthConnectionStripPointer] - ld l, a - ld a, [SouthConnectionStripPointer + 1] - ld h, a - ld a, [SouthConnectionStripLocation] - ld e, a - ld a, [SouthConnectionStripLocation + 1] - ld d, a - ld a, [SouthConnectionStripLength] - ld [hConnectionStripLength], a - ld a, [SouthConnectedMapWidth] - ld [hConnectedMapWidth], a - call FillSouthConnectionStrip - -.West - ld a, [WestConnectedMapGroup] - cp $ff - jr z, .East - ld b, a - ld a, [WestConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [WestConnectionStripPointer] - ld l, a - ld a, [WestConnectionStripPointer + 1] - ld h, a - ld a, [WestConnectionStripLocation] - ld e, a - ld a, [WestConnectionStripLocation + 1] - ld d, a - ld a, [WestConnectionStripLength] - ld b, a - ld a, [WestConnectedMapWidth] - ld [hConnectionStripLength], a - call FillWestConnectionStrip - -.East - ld a, [EastConnectedMapGroup] - cp $ff - jr z, .Done - ld b, a - ld a, [EastConnectedMapNumber] - ld c, a - call GetAnyMapBlockdataBank - - ld a, [EastConnectionStripPointer] - ld l, a - ld a, [EastConnectionStripPointer + 1] - ld h, a - ld a, [EastConnectionStripLocation] - ld e, a - ld a, [EastConnectionStripLocation + 1] - ld d, a - ld a, [EastConnectionStripLength] - ld b, a - ld a, [EastConnectedMapWidth] - ld [hConnectionStripLength], a - call FillEastConnectionStrip - -.Done - ret -; 25d3 - - -FillNorthConnectionStrip: -FillSouthConnectionStrip: ; 25d3 - - ld c, 3 -.y - push de - - push hl - ld a, [hConnectionStripLength] - ld b, a -.x - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .x - pop hl - - ld a, [hConnectedMapWidth] - ld e, a - ld d, 0 - add hl, de - pop de - - ld a, [$d19f] - add 6 - add e - ld e, a - jr nc, .asm_25f2 - inc d -.asm_25f2 - dec c - jr nz, .y - ret -; 25f6 - - -FillWestConnectionStrip: -FillEastConnectionStrip: ; 25f6 - -.asm_25f6 - ld a, [$d19f] - add 6 - ld [hConnectedMapWidth], a - - push de - - push hl - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - ld a, [hli] - ld [de], a - inc de - pop hl - - ld a, [hConnectionStripLength] - ld e, a - ld d, 0 - add hl, de - pop de - - ld a, [hConnectedMapWidth] - add e - ld e, a - jr nc, .asm_2617 - inc d -.asm_2617 - dec b - jr nz, .asm_25f6 - ret -; 261b - -Function261b: ; 261b - ld [$d432], a - ret -; 261f - - -CallScript: ; 261f -; Call a script at a:hl. - - ld [ScriptBank], a - ld a, l - ld [ScriptPos], a - ld a, h - ld [ScriptPos + 1], a - - ld a, $ff - ld [ScriptRunning], a - - scf - ret -; 2631 - -Function2631: ; 2631 - ld a, [ScriptRunning] - and a - ret nz - call GetMapEventBank - jr CallScript -; 263b - -Function263b: ; 263b - ld b, a - ld a, [hROMBank] - push af - call Function2c52 - call Function2653 - jr nc, .done - - call GetMapEventBank - ld b, a - ld d, h - ld e, l - call Function2674 - -.done - pop af - rst Bankswitch - ret -; 2653 - -Function2653: ; 2653 - ld a, [$dc0a] - ld c, a - and a - ret z - ld hl, $dc0b - ld a, [hli] - ld h, [hl] - ld l, a - or h - ret z - ld de, $0003 -.asm_2664 - ld a, [hl] - cp b - jr z, .asm_266e - add hl, de - dec c - jr nz, .asm_2664 - xor a - ret - -.asm_266e - inc hl - ld a, [hli] - ld h, [hl] - ld l, a - scf - ret -; 2674 - -Function2674: ; 2674 - callba Unknown_0x974f3 - ld a, [ScriptMode] - push af - ld hl, ScriptFlags - ld a, [hl] - push af - set 1, [hl] - callba Function96c56 - callba ScriptEvents - pop af - ld [ScriptFlags], a - pop af - ld [ScriptMode], a - ret -; 269a - -Function269a: ; 269a - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - push hl - call SpeechTextBox - call Function2e31 - ld a, 1 - ld [hOAMUpdate], a - call Function321c - pop hl - call PrintTextBoxText - xor a - ld [hOAMUpdate], a - pop af - rst Bankswitch - - ret -; 26b7 - -Function26b7: ; 26b7 -; Call a:de. - - ld [hBuffer], a - ld a, [hROMBank] - push af - ld a, [hBuffer] - rst Bankswitch - - call .de - - pop af - rst Bankswitch - ret - -.de - push de - ret -; 26c7 - -Function26c7: ; 26c7 - ld a, [hROMBank] - push af - ld a, b - rst Bankswitch - - ld a, c - call Function19e9 - - pop hl - ld a, h - rst Bankswitch - ret -; 26d4 - - -GetScriptByte: ; 0x26d4 -; Return byte at ScriptBank:ScriptPos in a. - - push hl - push bc - ld a, [hROMBank] - push af - ld a, [ScriptBank] - rst Bankswitch - - ld hl, ScriptPos - ld c, [hl] - inc hl - ld b, [hl] - - ld a, [bc] - - inc bc - ld [hl], b - dec hl - ld [hl], c - - ld b, a - pop af - rst Bankswitch - ld a, b - pop bc - pop hl - ret -; 0x26ef - - -ObjectEvent: ; 0x26ef - jumptextfaceplayer ObjectEventText -; 0x26f2 - -ObjectEventText: - TX_FAR _ObjectEventText - db "@" -; 0x26f7 - - -BGEvent: ; 26f7 - jumptext BGEventText -; 26fa - -BGEventText: ; 26fa - text_jump UnknownText_0x1c46fc, BANK(UnknownText_0x1c46fc) - db "@" -; 26ff - - -CoordinatesEvent: ; 26ff - jumptext CoordinatesEventText -; 2702 - -CoordinatesEventText: ; 2702 - text_jump UnknownText_0x1c4706, BANK(UnknownText_0x1c4706) - db "@" -; 2707 - - -Function2707: ; 2707 - ld a, [hConnectionStripLength] - ld e, a - ld d, $0 - ld hl, $d81e - add hl, de - ld a, [hl] - ret -; 2712 - -Function2712: ; 2712 - ld a, [hConnectionStripLength] - ld e, a - ld d, $0 - ld hl, $d81e - add hl, de - ld [hl], $ff - ret -; 271e - -Function271e: ; 271e - ld a, [hConnectionStripLength] - ld e, a - ld d, $0 - ld hl, $d81e - add hl, de - ld [hl], $0 - ret -; 272a - - -Function272a: ; 272a - ld hl, TileMap - ld de, BGMapBuffer - call Function27b7 - ld c, $28 - call Functiondbd - ld a, [$d152] - ld e, a - ld a, [$d153] - ld d, a - call Function27d3 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 2748 - -Function2748: ; 2748 - ld hl, $c5e0 - ld de, BGMapBuffer - call Function27b7 - ld c, $28 - call Functiondbd - ld a, [$d152] - ld l, a - ld a, [$d153] - ld h, a - ld bc, $0200 - add hl, bc - ld a, h - and $3 - or $98 - ld e, l - ld d, a - call Function27d3 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 2771 - -Function2771: ; 2771 - ld hl, TileMap - ld de, BGMapBuffer - call Function27c0 - ld c, $24 - call Functiondbd - ld a, [$d152] - ld e, a - ld a, [$d153] - ld d, a - call Function27f8 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 278f - -Function278f: ; 278f - ld hl, $c4b2 - ld de, BGMapBuffer - call Function27c0 - ld c, $24 - call Functiondbd - ld a, [$d152] - ld e, a - and $e0 - ld b, a - ld a, e - add $12 - and $1f - or b - ld e, a - ld a, [$d153] - ld d, a - call Function27f8 - ld a, $1 - ld [hBGMapUpdate], a - ret -; 27b7 - -Function27b7: ; 27b7 - ld c, $28 -.asm_27b9 - ld a, [hli] - ld [de], a - inc de - dec c - jr nz, .asm_27b9 - ret -; 27c0 - -Function27c0: ; 27c0 - ld c, $12 -.asm_27c2 - ld a, [hli] - ld [de], a - inc de - ld a, [hl] - ld [de], a - inc de - ld a, $13 - add l - ld l, a - jr nc, .asm_27cf - inc h - -.asm_27cf - dec c - jr nz, .asm_27c2 - ret -; 27d3 - -Function27d3: ; 27d3 - ld hl, BGMapBufferPtrs - push de - call .asm_27df - pop de - ld a, $20 - add e - ld e, a - -.asm_27df - ld c, $a -.asm_27e1 - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ld a, e - inc a - inc a - and $1f - ld b, a - ld a, e - and $e0 - or b - ld e, a - dec c - jr nz, .asm_27e1 - ld a, $14 - ld [$ffdc], a - ret -; 27f8 - -Function27f8: ; 27f8 - ld hl, BGMapBufferPtrs - ld c, $12 -.asm_27fd - ld a, e - ld [hli], a - ld a, d - ld [hli], a - ld a, $20 - add e - ld e, a - jr nc, .asm_280e - inc d - ld a, d - and $3 - or $98 - ld d, a - -.asm_280e - dec c - jr nz, .asm_27fd - ld a, $12 - ld [$ffdc], a - ret -; 2816 - -Function2816: ; 2816 - ld hl, BGMapBuffer - ld bc, $0078 - xor a - call ByteFill - ret -; 2821 - -Function2821: ; 2821 - ld hl, TilesetAddress - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [TilesetBank] - ld e, a - ld a, [rSVBK] - push af - ld a, $6 - ld [rSVBK], a - ld a, e - ld de, $d000 - call FarDecompress - ld hl, $d000 - ld de, VTiles2 - ld bc, $0600 - call CopyBytes - ld a, [rVBK] - push af - ld a, $1 - ld [rVBK], a - ld hl, $d600 - ld de, VTiles2 - ld bc, $0600 - call CopyBytes - pop af - ld [rVBK], a - pop af - ld [rSVBK], a - ld a, [$d199] - cp $1 - jr z, .asm_286f - cp $2 - jr z, .asm_286f - cp $4 - jr z, .asm_286f - jr .asm_2875 - -.asm_286f - ld a, $7 - ld hl, $4000 - rst FarCall - -.asm_2875 - xor a - ld [hTileAnimFrame], a - ret -; 2879 - -Function2879: ; 2879 - ld hl, $d194 - ld a, [hli] - ld h, [hl] - ld l, a - ld de, $dcb9 - ld c, $5 - ld b, $6 -.asm_2886 - push bc - push hl -.asm_2888 - ld a, [hli] - ld [de], a - inc de - dec b - jr nz, .asm_2888 - pop hl - ld a, [$d19f] - add $6 - ld c, a - ld b, $0 - add hl, bc - pop bc - dec c - jr nz, .asm_2886 - ret -; 289d - -Function289d: ; 289d - ld hl, $d194 - ld a, [hli] - ld h, [hl] - ld l, a - ld de, $dcb9 - ld a, [$d19f] - add $6 - ld [hConnectionStripLength], a - ld a, [$d151] - and a - jr z, .asm_28cb - cp $1 - jr z, .asm_28c0 - cp $2 - jr z, .asm_28d4 - cp $3 - jr z, .asm_28da - ret - -.asm_28c0 - ld de, $dcbf - ld a, [hConnectionStripLength] - ld c, a - ld b, $0 - add hl, bc - jr .asm_28ce - -.asm_28cb - ld de, $dcb9 - -.asm_28ce - ld b, $6 - ld c, $4 - jr .asm_28f7 - -.asm_28d4 - ld de, $dcba - inc hl - jr .asm_28dd - -.asm_28da - ld de, $dcb9 - -.asm_28dd - ld b, $5 - ld c, $5 - jr .asm_28f7 - - ld hl, $d194 - ld a, [hli] - ld h, [hl] - ld l, a - ld a, [$d19f] - add $6 - ld [hConnectionStripLength], a - ld de, $dcb9 - ld b, $6 - ld c, $5 - -.asm_28f7 - push bc - push hl - push de -.asm_28fa - ld a, [de] - inc de - ld [hli], a - dec b - jr nz, .asm_28fa - pop de - ld a, e - add $6 - ld e, a - jr nc, .asm_2908 - inc d - -.asm_2908 - pop hl - ld a, [hConnectionStripLength] - ld c, a - ld b, $0 - add hl, bc - pop bc - dec c - jr nz, .asm_28f7 - ret -; 2914 - -Function2914: ; 2914 - xor a - ld [TilePermissions], a - call Function296c - call Function294d - ld a, [MapX] - ld d, a - ld a, [MapY] - ld e, a - call Function2a3c - ld [StandingTile], a - call Function29ff - ret nz - ld a, [StandingTile] - and 7 - ld hl, .data_2945 - add l - ld l, a - ld a, 0 - adc h - ld h, a - ld a, [hl] - ld hl, TilePermissions - or [hl] - ld [hl], a - ret -; 2945 - -.data_2945 ; 2945 - db 1, 2, 4, 8, 9, 10, 5, 6 -; 294d - -Function294d: ; 294d - ld a, [MapX] - ld d, a - ld a, [MapY] - ld e, a - push de - inc e - call Function2a3c - ld [TileDown], a - call Function298b - pop de - dec e - call Function2a3c - ld [TileUp], a - call Function29a8 - ret -; 296c - -Function296c: ; 296c - ld a, [MapX] - ld d, a - ld a, [MapY] - ld e, a - push de - dec d - call Function2a3c - ld [TileLeft], a - call Function29e2 - pop de - inc d - call Function2a3c - ld [TileRight], a - call Function29c5 - ret -; 298b - -Function298b: ; 298b - call Function29ff - ret nz - ld a, [TileDown] - and $7 - cp $2 - jr z, .asm_299f - cp $6 - jr z, .asm_299f - cp $7 - ret nz - -.asm_299f - ld a, [TilePermissions] - or $8 - ld [TilePermissions], a - ret -; 29a8 - -Function29a8: ; 29a8 - call Function29ff - ret nz - ld a, [TileUp] - and $7 - cp $3 - jr z, .asm_29bc - cp $4 - jr z, .asm_29bc - cp $5 - ret nz - -.asm_29bc - ld a, [TilePermissions] - or $4 - ld [TilePermissions], a - ret -; 29c5 - -Function29c5: ; 29c5 - call Function29ff - ret nz - ld a, [TileRight] - and $7 - cp $1 - jr z, .asm_29d9 - cp $5 - jr z, .asm_29d9 - cp $7 - ret nz - -.asm_29d9 - ld a, [TilePermissions] - or $1 - ld [TilePermissions], a - ret -; 29e2 - -Function29e2: ; 29e2 - call Function29ff - ret nz - ld a, [TileLeft] - and $7 - cp $0 - jr z, .asm_29f6 - cp $4 - jr z, .asm_29f6 - cp $6 - ret nz - -.asm_29f6 - ld a, [TilePermissions] - or $2 - ld [TilePermissions], a - ret -; 29ff - -Function29ff: ; 29ff - and $f0 - cp $b0 - ret z - cp $c0 - ret -; 2a07 - - -GetFacingTileCoord: ; 2a07 -; Return map coordinates in (d, e) and tile id in a -; of the tile the player is facing. - - ld a, [PlayerDirection] - and %1100 - srl a - srl a - ld l, a - ld h, 0 - add hl, hl - add hl, hl - ld de, .Directions - add hl, de - - ld d, [hl] - inc hl - ld e, [hl] - inc hl - - ld a, [hli] - ld h, [hl] - ld l, a - - ld a, [MapX] - add d - ld d, a - ld a, [MapY] - add e - ld e, a - ld a, [hl] - ret - -.Directions - ; x, y - db 0, 1 - dw TileDown - db 0, -1 - dw TileUp - db -1, 0 - dw TileLeft - db 1, 0 - dw TileRight -; 2a3c - - -Function2a3c: ; 2a3c - call Function2a66 - ld a, [hl] - and a - jr z, .asm_2a63 - ld l, a - ld h, $0 - add hl, hl - add hl, hl - ld a, [TilesetCollisionAddress] - ld c, a - ld a, [$d1e1] - ld b, a - add hl, bc - rr d - jr nc, .asm_2a56 - inc hl - -.asm_2a56 - rr e - jr nc, .asm_2a5c - inc hl - inc hl - -.asm_2a5c - ld a, [TilesetCollisionBank] - call GetFarByte - ret - -.asm_2a63 - ld a, $ff - ret -; 2a66 - -Function2a66: ; 2a66 - ld a, [$d19f] - add $6 - ld c, a - ld b, $0 - ld hl, $c801 - add hl, bc - ld a, e - srl a - jr z, .asm_2a84 - and a -.asm_2a78 - srl a - jr nc, .asm_2a7d - add hl, bc - -.asm_2a7d - sla c - rl b - and a - jr nz, .asm_2a78 - -.asm_2a84 - ld c, d - srl c - ld b, $0 - add hl, bc - ret -; 2a8b - - -CheckFacingSign: ; 2a8b - call GetFacingTileCoord - ld b, a - ld a, d - sub 4 - ld d, a - ld a, e - sub 4 - ld e, a - ld a, [$dc01] - and a - ret z - ld c, a - ld a, [hROMBank] - push af - call Function2c52 - call Function2aaa - pop hl - ld a, h - rst Bankswitch - ret -; 2aaa - -Function2aaa: ; 2aaa - ld hl, $dc02 - ld a, [hli] - ld h, [hl] - ld l, a -.asm_2ab0 - push hl - ld a, [hli] - cp e - jr nz, .asm_2abb - ld a, [hli] - cp d - jr nz, .asm_2abb - jr .asm_2ac8 - -.asm_2abb - pop hl - ld a, 5 - add l - ld l, a - jr nc, .asm_2ac3 - inc h - -.asm_2ac3 - dec c - jr nz, .asm_2ab0 - xor a - ret - -.asm_2ac8 - pop hl - ld de, EngineBuffer1 - ld bc, 5 - call CopyBytes - scf - ret -; 2ad4 - -Function2ad4: ; 2ad4 - ld a, [$dbfe] - and a - ret z - ld c, a - ld a, [hROMBank] - push af - call Function2c52 - call Function2ae7 - pop hl - ld a, h - rst Bankswitch - ret -; 2ae7 - -Function2ae7: ; 2ae7 - ld hl, $dbff - ld a, [hli] - ld h, [hl] - ld l, a - call Function211b - ld b, a - ld a, [MapX] - sub $4 - ld d, a - ld a, [MapY] - sub $4 - ld e, a -.asm_2afd - push hl - ld a, [hli] - cp b - jr z, .asm_2b06 - cp $ff - jr nz, .asm_2b10 - -.asm_2b06 - ld a, [hli] - cp e - jr nz, .asm_2b10 - ld a, [hli] - cp d - jr nz, .asm_2b10 - jr .asm_2b1d - -.asm_2b10 - pop hl - ld a, $8 - add l - ld l, a - jr nc, .asm_2b18 - inc h - -.asm_2b18 - dec c - jr nz, .asm_2afd - xor a - ret - -.asm_2b1d - pop hl - ld de, EngineBuffer1 - ld bc, $0008 - call CopyBytes - scf - ret -; 2b29 - - -FadeToMenu: ; 2b29 - xor a - ld [hBGMapMode], a - call Function1d6e - ld a, $23 - ld hl, $4084 - rst FarCall - call ClearSprites - call Function2ed3 - ret -; 2b3c - - -Function2b3c: ; 2b3c - call WhiteBGMap - call Function2bae - call Function1ad2 - call Function1d7d - call Functiond90 - jr Function2b5c -; 2b4d - -Function2b4d: ; 2b4d - call WhiteBGMap - call Function1d7d - call Function2bae - call Function1ad2 - call Functiond90 -; 2b5c - -Function2b5c: ; 2b5c - ld b, $9 - call GetSGBLayout - ld a, $12 - ld hl, $5409 - rst FarCall - call Function3200 - ld a, $23 - ld hl, $4079 - rst FarCall - call Function2ee4 - ret -; 2b74 - - -Function2b74: ; 0x2b74 - push af - ld a, $1 - ld [$c2ce], a - call WhiteBGMap - call ClearSprites - call Function2bae - ld hl, $c590 ; tile 0, 12 - ld bc, $0412 - call TextBox - ld hl, VramState - set 0, [hl] - call Function1ad2 - call Function3200 - ld b, $9 - call GetSGBLayout - callba Function49409 - call UpdateTimePals - call DelayFrame - ld a, $1 - ld [$ffde], a - pop af - ret -; 0x2bae - -Function2bae: ; 2bae - call DisableLCD - call ClearSprites - ld a, $5 - ld hl, $4168 - rst FarCall - call Functione51 - call Functione5f - ld a, [hROMBank] - push af - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - call Function2c24 - ld a, $23 - ld hl, $4001 - rst FarCall - call Function2173 - call Function2821 - ld a, $9 - call Function3cb4 - pop af - rst Bankswitch - - call EnableLCD - ret -; 2be5 - - -GetMapHeaderPointer: ; 2be5 - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a -; 2bed - -GetAnyMapHeaderPointer: ; 0x2bed -; Prior to calling this function, you must have switched banks so that -; MapGroupPointers is visible. - -; inputs: -; b = map group, c = map number -; XXX de = ??? - -; outputs: -; hl points to the map header - push bc ; save map number for later - - ; get pointer to map group - dec b - ld c, b - ld b, $0 - ld hl, MapGroupPointers - add hl, bc - add hl, bc - - ld a, [hli] - ld h, [hl] - ld l, a - pop bc ; restore map number - - ; find the cth map header - dec c - ld b, $0 - ld a, OlivineGym_MapHeader - OlivinePokeCenter1F_MapHeader - call AddNTimes - ret -; 0x2c04 - -GetMapHeaderMember: ; 0x2c04 -; Extract data from the current map's header. - -; inputs: -; de = offset of desired data within the mapheader - -; outputs: -; bc = data from the current map's header -; (e.g., de = $0003 would return a pointer to the secondary map header) - - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a - ; fallthrough - -GetAnyMapHeaderMember: ; 0x2c0c - ; bankswitch - ld a, [hROMBank] - push af - ld a, BANK(MapGroupPointers) - rst Bankswitch - - call GetAnyMapHeaderPointer - add hl, de - ld c, [hl] - inc hl - ld b, [hl] - - ; bankswitch back - pop af - rst Bankswitch - ret -; 0x2c1c - - -Function2c1c: ; 2c1c - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a -; 2c24 - -Function2c24: ; 2c24 - call Function2c31 - rst Bankswitch - ret -; 2c29 - - -Function2c29: ; 2c29 - ld a, [MapGroup] - ld b, a - ld a, [MapNumber] - ld c, a -; 2c31 - -Function2c31: ; 2c31 - push hl - push de - ld de, $0000 - call GetAnyMapHeaderMember - ld a, c - pop de - pop hl - ret -; 2c3d - -Function2c3d: ; 2c3d - ld a, [hROMBank] - push af - ld a, $25 - rst Bankswitch - call GetMapHeaderPointer - ld de, $d198 - ld bc, $0005 - call CopyBytes - pop af - rst Bankswitch - ret -; 2c52 - -Function2c52: ; 2c52 - ld a, [MapEventBank] - rst Bankswitch - ret -; 2c57 - - -GetMapEventBank: ; 2c57 - ld a, [MapEventBank] - ret -; 2c5b - -GetAnyMapBlockdataBank: ; 2c5b -; Return the blockdata bank for group b map c. - push hl - push de - push bc - - push bc - ld de, 3 ; second map header pointer - call GetAnyMapHeaderMember - ld l, c - ld h, b - pop bc - - push hl - ld de, 0 ; second map header bank - call GetAnyMapHeaderMember - pop hl - - ld de, 3 ; blockdata bank - add hl, de - ld a, c - call GetFarByte - rst Bankswitch - - pop bc - pop de - pop hl - ret -; 2c7d - -GetSecondaryMapHeaderPointer: ; 0x2c7d -; returns the current map's secondary map header pointer in hl. - push bc - push de - ld de, $0003 ; secondary map header pointer (offset within header) - call GetMapHeaderMember - ld l, c - ld h, b - pop de - pop bc - ret -; 2c8a - -GetMapPermission: ; 2c8a - push hl - push de - push bc - ld de, 2 - call GetMapHeaderMember - ld a, c - pop bc - pop de - pop hl - ret -; 2c98 - -Function2c98: ; 2c98 - ret -; 2c99 - -Function2c99: ; 2c99 - push hl - push de - push bc - ld de, $0002 - call GetAnyMapHeaderMember - ld a, c - pop bc - pop de - pop hl - ret -; 2ca7 - -Function2ca7: ; 2ca7 - ld de, $0001 - call GetAnyMapHeaderMember - ld a, c - ret -; 2caf - -GetWorldMapLocation: ; 0x2caf -; given a map group/id in bc, return its location on the Pokégear map. - push hl - push de - push bc - ld de, 5 - call GetAnyMapHeaderMember - ld a, c - pop bc - pop de - pop hl - ret -; 0x2cbd - -Function2cbd: ; 2cbd - push hl - push bc - ld de, $0006 - call GetMapHeaderMember - ld a, c - cp $64 - jr z, .asm_2cee - bit 7, c - jr nz, .asm_2cda - ld a, $22 - ld hl, $7342 - rst FarCall - ld e, c - ld d, $0 -.asm_2cd7 - pop bc - pop hl - ret - -.asm_2cda - ld a, [StatusFlags2] - bit 0, a - jr z, .asm_2ce6 - ld de, $0056 - jr .asm_2cd7 - -.asm_2ce6 - ld a, c - and $7f - ld e, a - ld d, $0 - jr .asm_2cd7 - -.asm_2cee - ld a, [StatusFlags2] - bit 7, a - jr z, .asm_2cfa - ld de, $0048 - jr .asm_2cd7 - -.asm_2cfa - ld de, $0026 - jr .asm_2cd7 -; 2cff - -Function2cff: ; 2cff - call Function2d0d - and $f - ret -; 2d05 - -Function2d05: ; 2d05 - call Function2d0d - and $f0 - swap a - ret -; 2d0d - -Function2d0d: ; 2d0d - push hl - push bc - ld de, $0007 - call GetMapHeaderMember - ld a, c - pop bc - pop hl - ret -; 2d19 - -Function2d19: ; 2d19 - push de - push hl - push bc - ld de, $0008 - call GetMapHeaderMember - ld a, c - pop bc - pop hl - pop de - ret -; 2d27 - -Function2d27: ; 2d27 - push hl - push bc - ld hl, $5596 - ld bc, $000f - ld a, [$d199] - call AddNTimes - ld de, TilesetBank - ld bc, $000f - ld a, $13 - call FarCopyBytes - pop bc - pop hl - ret -; 2d43 Function2d43: ; 2d43 nop |