ref: 110477cd9e6ed4c9249f7bac28b5a84fa81e8efc
dir: /common/map.asm/
; 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