diff options
Diffstat (limited to 'home/map_objects.asm')
-rw-r--r-- | home/map_objects.asm | 683 |
1 files changed, 683 insertions, 0 deletions
diff --git a/home/map_objects.asm b/home/map_objects.asm new file mode 100644 index 000000000..3ebc1b597 --- /dev/null +++ b/home/map_objects.asm @@ -0,0 +1,683 @@ +; Functions handling map objects. + + +GetSpritePalette: ; 17ff + push hl + push de + push bc + ld c, a + callba _GetSpritePalette + ld a, c + pop bc + pop de + pop hl + ret +; 180e + + +Function180e: ; 180e + push hl + push bc + ld hl, $d156 + ld c, $1f + ld b, a + ld a, [hConnectionStripLength] + cp $0 + jr z, .asm_182b + ld a, b +.asm_181d + cp [hl] + jr z, .asm_1830 + inc hl + inc hl + dec c + jr nz, .asm_181d + ld a, [$d155] + scf + jr .asm_1833 + +.asm_182b + ld a, [$d155] + jr .asm_1833 + +.asm_1830 + inc hl + xor a + ld a, [hl] + +.asm_1833 + pop bc + pop hl + ret +; 1836 + +Function1836: ; 1836 + push de + push hl + + ld b, a + ld a, [hROMBank] + push af + ld a, BANK(Function142a7) + rst Bankswitch + + ld a, b + call Function142a7 + ld c, a + + pop de + ld a, d + rst Bankswitch + + pop hl + pop de + ret +; 184a + + + +Function184a: ; 184a + ld a, [StandingTile] + call GetTileCollision + ld b, a + ret +; 1852 + +Function1852: ; 1852 + ld a, [StandingTile] + call GetTileCollision + sub 1 + ret z + and a + ret +; 185d + + +GetTileCollision: ; 185d +; Get the collision type of tile a. + + push de + push hl + + ld hl, TileCollisionTable + ld e, a + ld d, 0 + add hl, de + + ld a, [hROMBank] + push af + ld a, BANK(TileCollisionTable) + rst Bankswitch + ld e, [hl] + pop af + rst Bankswitch + + ld a, e + and $f ; lo nybble only + + pop hl + pop de + ret +; 1875 + + +Function1875: ; 1875 + ld d, a + and $f0 + cp $10 + jr z, .asm_1882 + cp $20 + jr z, .asm_1888 + scf + ret + +.asm_1882 + ld a, d + and 7 + ret z + scf + ret + +.asm_1888 + ld a, d + and 7 + ret z + scf + ret +; 188e + +Function188e: ; 188e + cp $14 + ret z + cp $1c + ret +; 1894 + +CheckCutTreeTile: ; 1894 + cp $12 + ret z + cp $1a + ret +; 189a + +CheckHeadbuttTreeTile: ; 189a + cp $15 + ret z + cp $1d + ret +; 18a0 + +CheckCounterTile: ; 18a0 + cp $90 + ret z + cp $98 + ret +; 18a6 + +CheckPitTile: ; 18a6 + cp $60 + ret z + cp $68 + ret +; 18ac + +CheckIceTile: ; 18ac + cp $23 + ret z + cp $2b + ret z + scf + ret +; 18b4 + +CheckWhirlpoolTile: ; 18b4 + nop + cp $24 + ret z + cp $2c + ret z + scf + ret +; 18bd + +CheckWaterfallTile: ; 18bd + cp $33 + ret z + cp $3b + ret +; 18c3 + +CheckStandingOnEntrance: ; 18c3 + ld a, [StandingTile] + cp $71 ; door + ret z + cp $79 + ret z + cp $7a ; stairs + ret z + cp $7b ; cave + ret +; 18d2 + + +GetMapObject: ; 18d2 +; Return the location of map object a in bc. + ld hl, MapObjects + ld bc, $10 + call AddNTimes + ld b, h + ld c, l + ret +; 18de + + +Function18de: ; 18de + ld [hConnectionStripLength], a + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_18f3 + ld [hConnectedMapWidth], a + call Function1ae5 + and a + ret + +.asm_18f3 + scf + ret +; 18f5 + +Function18f5: ; 18f5 + ld hl, $0006 + add hl, bc + ld a, [hl] + cp $ff + jr nz, .asm_1921 + ld hl, $0007 + add hl, bc + ld a, [hl] + cp $ff + jr z, .asm_191c + ld hl, .data_191e + ld a, [TimeOfDay] + add l + ld l, a + jr nc, .asm_1912 + inc h + +.asm_1912 + ld a, [hl] + ld hl, $0007 + add hl, bc + and [hl] + jr nz, .asm_191c + scf + ret + +.asm_191c + and a + ret + +.data_191e + db $1 + db $2 + db $4 + +.asm_1921 + ld hl, $0006 + add hl, bc + ld d, [hl] + ld hl, $0007 + add hl, bc + ld e, [hl] + ld hl, hHours + ld a, d + cp e + jr z, .asm_1949 + jr c, .asm_193f + ld a, [hl] + cp d + jr nc, .asm_1949 + cp e + jr c, .asm_1949 + jr z, .asm_1949 + jr .asm_194b + +.asm_193f + ld a, e + cp [hl] + jr c, .asm_194b + ld a, [hl] + cp d + jr nc, .asm_1949 + jr .asm_194b + +.asm_1949 + and a + ret + +.asm_194b + scf + ret +; 194d + +Function194d: ; 194d + ld [hConnectionStripLength], a + call GetMapObject + call $40e7 + ret +; 1956 + + + +Function1956: ; 1956 + ld [hConnectionStripLength], a + call Function271e + ld a, [hConnectionStripLength] + call GetMapObject + ld a, $2 + ld hl, $40e7 + rst FarCall + ret +; 1967 + +Function1967: ; 1967 + ld [hConnectionStripLength], a + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + cp $ff + ret z + ld [hl], $ff + push af + call Function1985 + pop af + call Function1ae5 + callba Function4357 + ret +; 1985 + +Function1985: ; 1985 + ld hl, $d4cd + cp [hl] + jr z, .asm_1990 + ld hl, $d4ce + cp [hl] + ret nz + +.asm_1990 + callba Function581f + ld a, $ff + ld [$d4cd], a + ld [$d4ce], a + ret +; 199f + +Function199f: ; 199f + call Function1967 + call Function2712 + ret +; 19a6 + +Function19a6: ; 19a6 + push hl + call GetMapObject + ld d, b + ld e, c + ld a, $ff + ld [de], a + inc de + pop hl + ld bc, $000f + call CopyBytes + ret +; 19b8 + +Function19b8: ; 19b8 + call GetMapObject + ld hl, $0000 + add hl, bc + ld a, [hl] + push af + ld [hl], $ff + inc hl + ld bc, $000f + xor a + call ByteFill + pop af + cp $ff + ret z + cp $d + ret nc + ld b, a + ld a, [$d4cd] + cp b + jr nz, .asm_19de + ld a, $ff + ld [$d4cd], a + +.asm_19de + ld a, b + call Function1ae5 + callba Function4357 + ret +; 19e9 + + + +Function19e9: ; 19e9 + ld [$c2e2], a + ld a, [hROMBank] + ld [$c2e3], a + ld a, l + ld [$c2e4], a + ld a, h + ld [$c2e5], a + ld a, [$c2e2] + call Function18de + ret c + ld hl, $0003 + add hl, bc + ld [hl], $14 + ld hl, $0009 + add hl, bc + ld [hl], $0 + ld hl, VramState + set 7, [hl] + and a + ret +; 1a13 + + + +Function1a13: ; 1a13 + push bc + push de + ld hl, $d4d6 + ld de, $0028 + ld c, $d +.asm_1a1d + ld a, [hl] + and a + jr z, .asm_1a28 + add hl, de + dec c + jr nz, .asm_1a1d + xor a + jr .asm_1a2c + +.asm_1a28 + ld a, $d + sub c + scf + +.asm_1a2c + pop de + pop bc + ret +; 1a2f + + + +Function1a2f: ; 1a2f + ld hl, $0003 + add hl, bc + ld a, [hl] + cp $25 + jr c, .asm_1a39 + xor a + +.asm_1a39 + ld hl, Data4273 + ld e, a + ld d, 0 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld a, [hl] + ret +; 1a47 + +Function1a47: ; 1a47 + push bc + push de + ld e, a + ld d, 0 + ld hl, Data4273 + 1 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld a, BANK(Data4273) + call GetFarByte + add a + add a + and $c + pop de + pop bc + ret +; 1a61 + + +Function1a61: ; 1a61 + ld l, a + ld a, [hROMBank] + push af + ld a, BANK(Data4273) + rst Bankswitch + ld a, l + push bc + + call Function1a71 + + pop bc + pop af + rst Bankswitch + + ret +; 1a71 + +Function1a71: ; 1a71 + ld hl, $0003 + add hl, de + ld [hl], a + push de + ld e, a + ld d, 0 + ld hl, Data4273 + 1 + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + add hl, de + ld b, h + ld c, l + pop de + ld a, [bc] + inc bc + rlca + rlca + and $c + ld hl, $0008 + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $000b + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $0004 + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $0005 + add hl, de + ld [hl], a + ld a, [bc] + inc bc + ld hl, $0006 + add hl, de + ld [hl], a + ret +; 1aae + +Function1aae: ; 1aae + ld a, [hROMBank] + push af + ld a, [hli] + rst Bankswitch + + ld a, [hli] + ld d, [hl] + ld hl, $001b + add hl, bc + add [hl] + ld e, a + ld a, d + adc $0 + ld d, a + inc [hl] + ld a, [de] + ld h, a + pop af + rst Bankswitch + + ld a, h + ret +; 1ac6 + +Function1ac6: ; 1ac6 + ld hl, VramState + set 0, [hl] + ret +; 1acc + +Function1acc: ; 1acc + ld hl, VramState + res 0, [hl] + ret +; 1ad2 + + +Function1ad2: ; 1ad2 + ld a, [VramState] + bit 0, a + ret z + callba Function55e0 + callba Function5920 + ret +; 1ae5 + + +Function1ae5: ; 1ae5 + ld bc, $0028 + ld hl, $d4d6 + call AddNTimes + ld b, h + ld c, l + ret +; 1af1 + +Function1af1: ; 1af1 + ld hl, $0000 + add hl, bc + ld a, [hl] + and a + ret +; 1af8 + +Function1af8: ; 1af8 + push af + ld hl, $0008 + add hl, bc + ld a, [hl] + and $f3 + ld e, a + pop af + and $c + or e + ld [hl], a + ret +; 1b07 + + +GetSpriteDirection: ; 1b07 + ld hl, $0008 + add hl, bc + ld a, [hl] + and $c + ret +; 1b0f + |