diff options
Diffstat (limited to 'home')
-rw-r--r-- | home/map.asm | 30 | ||||
-rwxr-xr-x | home/stone_queue.asm | 137 |
2 files changed, 152 insertions, 15 deletions
diff --git a/home/map.asm b/home/map.asm index 30314a55..d1c522d8 100644 --- a/home/map.asm +++ b/home/map.asm @@ -502,7 +502,7 @@ Function22ad:: ; 22ad (0:22ad) ret nc ldh a, [hROMBank] push af - call SwitchToMapScriptHeaderBank + call SwitchToMapScriptsBank call Function22c1 pop de ld a, d @@ -516,11 +516,11 @@ Function22c1:: ; 22c1 (0:22c1) ld a, [wPlayerStandingMapX] sub $4 ld d, a - ld a, [wCurrMapWarpCount] + ld a, [wCurMapWarpCount] and a ret z ld c, a - ld hl, wCurrMapWarpHeaderPointer + ld hl, wCurMapWarpsPointer ld a, [hli] ld h, [hl] ld l, a @@ -551,7 +551,7 @@ Function22c1:: ; 22c1 (0:22c1) pop hl call Function22fe ret nc - ld a, [wCurrMapWarpCount] + ld a, [wCurMapWarpCount] inc a sub c ld c, a @@ -567,7 +567,7 @@ Function22fe:: ; 22fe (0:22fe) Function2302:: ; 2302 (0:2302) ldh a, [hROMBank] push af - call SwitchToMapScriptHeaderBank + call SwitchToMapScriptsBank call Function230f pop af rst Bankswitch @@ -576,7 +576,7 @@ Function2302:: ; 2302 (0:2302) Function230f:: ; 230f (0:230f) push bc - ld hl, wCurrMapWarpHeaderPointer + ld hl, wCurMapWarpsPointer ld a, [hli] ld h, [hl] ld l, a @@ -697,7 +697,7 @@ CheckDungeonMap:: LoadMapAttributes:: call CopyMapHeaders - call SwitchToMapScriptHeaderBank + call SwitchToMapScriptsBank call ReadMapScripts xor a call ReadMapEventHeader @@ -705,7 +705,7 @@ LoadMapAttributes:: LoadMapAttributes_SkipPeople:: call CopyMapHeaders - call SwitchToMapScriptHeaderBank + call SwitchToMapScriptsBank call ReadMapScripts ld a, $1 call ReadMapEventHeader @@ -829,11 +829,11 @@ ReadMapCallbacks:: ; 24a2 (0:24a2) ReadWarps:: ; 24b9 (0:24b9) ld a, [hli] ld c, a - ld [wCurrMapWarpCount], a + ld [wCurMapWarpCount], a ld a, l - ld [wCurrMapWarpHeaderPointer], a + ld [wCurMapWarpsPointer], a ld a, h - ld [wCurrMapWarpHeaderPointer + 1], a + ld [wCurMapWarpsPointer + 1], a ld a, c and a ret z @@ -1260,7 +1260,7 @@ RunMapCallback:: ; 2764 (0:2764) ld b, a ldh a, [hROMBank] push af - call SwitchToMapScriptHeaderBank + call SwitchToMapScriptsBank call FindCallback jr nc, .asm_2779 call GetMapScriptHeaderBank @@ -1987,7 +1987,7 @@ CheckFacingSign:: ld c, a ldh a, [hROMBank] push af - call SwitchToMapScriptHeaderBank + call SwitchToMapScriptsBank call CheckIfFacingTileCoordIsSign pop hl ld a, h @@ -2037,7 +2037,7 @@ CheckCurrentMapXYTriggers:: ld c, a ldh a, [hROMBank] push af - call SwitchToMapScriptHeaderBank + call SwitchToMapScriptsBank call .TriggerCheck pop hl ld a, h @@ -2251,7 +2251,7 @@ PartiallyCopyMapHeader:: ; 2d16 (0:2d16) rst Bankswitch ret -SwitchToMapScriptHeaderBank:: ; 2d2b (0:2d2b) +SwitchToMapScriptsBank:: ; 2d2b (0:2d2b) ld a, [wd08c] rst Bankswitch ret diff --git a/home/stone_queue.asm b/home/stone_queue.asm new file mode 100755 index 00000000..ff59509d --- /dev/null +++ b/home/stone_queue.asm @@ -0,0 +1,137 @@ +HandleStoneQueue:: + ldh a, [hROMBank] + push af + + call SwitchToMapScriptsBank + call .WarpAction + + pop bc + ld a, b + rst Bankswitch + ret + +.WarpAction: + ld hl, OBJECT_MAP_OBJECT_INDEX + add hl, de + ld a, [hl] + cp $ff + jr z, .nope + + ld l, a + push hl + call .IsObjectOnWarp + pop hl + jr nc, .nope + ld d, a + ld e, l + call .IsObjectInStoneTable + jr nc, .nope + call CallMapScript + farcall EnableScriptMode + scf + ret + +.nope + and a + ret + +.IsObjectOnWarp: + push de + + ld hl, OBJECT_NEXT_MAP_X + add hl, de + ld a, [hl] + ld hl, OBJECT_NEXT_MAP_Y + add hl, de + ld e, [hl] + + sub 4 + ld d, a + ld a, e + sub 4 + ld e, a + call .check_on_warp + + pop de + ret + +.check_on_warp + ld hl, wCurMapWarpsPointer + ld a, [hli] + ld h, [hl] + ld l, a + ld a, [wCurMapWarpCount] + and a + jr z, .nope2 + +.loop + push af + ld a, [hl] + cp e + jr nz, .not_on_warp + inc hl + ld a, [hld] + cp d + jr nz, .not_on_warp + jr .found_warp + +.not_on_warp + ld a, WARP_EVENT_SIZE + add l + ld l, a + jr nc, .no_carry + inc h +.no_carry + + pop af + dec a + jr nz, .loop + +.nope2 + and a + ret + +.found_warp + pop af + ld d, a + ld a, [wCurMapWarpCount] + sub d + inc a + scf + ret + +.IsObjectInStoneTable: + ld hl, CMDQUEUE_ADDR + add hl, bc + ld a, [hli] + ld h, [hl] + ld l, a +.loop2 + ld a, [hli] + cp $ff + jr z, .nope3 + cp d + jr nz, .next_inc3 + ld a, [hli] + cp e + jr nz, .next_inc2 + ld a, [hli] + ld h, [hl] + ld l, a + jr .yes + +.next_inc3 + inc hl + +.next_inc2 + inc hl + inc hl + jr .loop2 + +.nope3 + and a + ret + +.yes + scf + ret
\ No newline at end of file |