diff options
Diffstat (limited to 'home/stone_queue.asm')
-rwxr-xr-x | home/stone_queue.asm | 137 |
1 files changed, 137 insertions, 0 deletions
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 |