summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--home/cry.asm104
-rw-r--r--home/map.asm416
-rw-r--r--home/tileset.asm419
-rw-r--r--shim.sym2
-rw-r--r--wram.asm20
5 files changed, 541 insertions, 420 deletions
diff --git a/home/cry.asm b/home/cry.asm
new file mode 100644
index 0000000..b018ac7
--- /dev/null
+++ b/home/cry.asm
@@ -0,0 +1,104 @@
+include "constants.asm"
+
+SECTION "Cry Home", ROM0 [$39b1]
+
+Function39b1::
+ push af
+ ld a, $1
+ ld [wc1b9], a
+ pop af
+ jr asm_39c3
+
+PlayCry:: ; 00:39ba
+ push af
+ xor a
+ ld [wc1b9], a
+ ld [wc1ba], a
+ pop af
+asm_39c3: ; 00:39c3
+ push hl
+ push de
+ push bc
+ call GetCryIndex
+ ld e, c
+ ld d, b
+ call PlayCryHeader
+ call WaitSFX
+ pop bc
+ pop de
+ pop hl
+ ret
+
+LoadCryHeader::
+ call GetCryIndex
+ ldh a, [hROMBank]
+ push af
+ ld a, BANK(CryHeaders)
+ call Bankswitch
+ ld hl, CryHeaders
+ add hl, bc
+ add hl, bc
+ add hl, bc
+ add hl, bc
+ add hl, bc
+ add hl, bc
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+ inc hl
+ ld a, [hli]
+ ld [wCryPitch], a
+ ld a, [hli]
+ ld [wCryPitch + 1], a
+ ld a, [hli]
+ ld [wCryLength], a
+ ld a, [hl]
+ ld [wCryLength + 1], a
+ pop af
+ call Bankswitch
+ ret
+
+GetCryIndex:: ; 00:3a02
+ ld d, a
+ ld a, [wce37]
+ push af
+ ld a, d
+ ld [wce37], a
+ callba Function40b45
+ ld a, [wce37]
+ dec a
+ ld c, a
+ ld b, $0
+ pop af
+ ld [wce37], a
+ ret
+
+Function3a1f::
+ ld a, $6e
+ ld [hli], a
+ ld c, $2
+ ld a, [wcd9e]
+ cp $64
+ jr c, asm_3a37
+ dec hl
+ inc c
+ jr asm_3a37
+
+Function3a2f::
+ ld a, $6e
+ ld [hli], a
+ ld c, $3
+ ld a, [wcd9e]
+asm_3a37: ; 00:3a37
+ ld [wce37], a
+ ld de, wce37
+ ld b, $41
+ jp PrintNumber
+
+Function3a42::
+ ld hl, wce2e
+ ld c, a
+ ld b, $0
+ add hl, bc
+ ld a, [hl]
+ ret
diff --git a/home/map.asm b/home/map.asm
index c07bc96..9078f64 100644
--- a/home/map.asm
+++ b/home/map.asm
@@ -1734,419 +1734,3 @@ Function2be5:: ; 00:2be5
.Return: ; 00:2c04
ret
-
-SECTION "LoadTilesetGFX", ROM0[$2D26]
-LoadTilesetGFX:: ; 2d26
- call GetMapEnvironment
- cp 1 ; TODO: constantify this
- jr z, .exterior
- cp 2 ; TODO: constantify this
- jr z, .exterior
- ld a, [wMapTileset]
- cp $1B ; TODO: constantify this
- jr z, .exterior
-
- ld a, [wTilesetTilesAddress]
- ld e, a
- ld a, [wTilesetTilesAddress + 1]
- ld d, a
- ld hl, vTileset
- ld a, [wTilesetBank]
- ld b, a
- ld c, $60
- call Get2bpp
- xor a
- ldh [hTileAnimFrame], a
- ret
-
-.exterior
- ld de, CommonExteriorTiles ; TODO: maybe find a better name
- ld hl, vTileset
- lb bc, BANK(CommonExteriorTiles), $20
- call Get2bpp
-
- ld a, [wTilesetTilesAddress]
- ld e, a
- ld a, [wTilesetTilesAddress + 1]
- ld d, a
- ld hl, vExteriorTileset
- ld a, [wTilesetBank]
- ld b, a
- ld c, $40
- call Get2bpp
- xor a
- ldh [hTileAnimFrame], a
- ret
-
-
-RefreshPlayerCoords:: ; 2d74
- ld a, [wXCoord]
- add a, 4
- ld d, a
- ld hl, wPlayerStandingMapX
- sub [hl]
- ld [hl], d
- ld hl, wPlayerObjectXCoord
- ld [hl], d
- ld hl, wPlayerLastMapX
- ld [hl], d
- ld d, a
- ld a, [wYCoord]
- add a, 4
- ld e, a
- ld hl, wPlayerStandingMapY
- sub [hl]
- ld [hl], e
- ld hl, wPlayerObjectYCoord
- ld [hl], e
- ld hl, wPlayerLastMapY
- ld [hl], e
- ld e, a
-
- ld a, [wObjectFollow_Leader]
- cp 1
- ret nz
- ld a, [wObjectFollow_Follower]
- and a
- ret z
-
- ; This piece of code has been removed in pokegold (note that the conditions above were altered, as well)
- call GetObjectStruct
- ld hl, 16 ; TODO: constantify this
- add hl, bc
- ld a, [hl]
- add a, d
- ld [hl], a
- ld [wMap1ObjectXCoord], a
- ld hl, 18 ; TODO: constantify this
- add hl, bc
- ld a, [hl]
- add a, d
- ld [hl], a
- ld hl, 17 ; TODO: constantify this
- add hl, bc
- ld a, [hl]
- add a, e
- ld [hl], a
- ld [wMap1ObjectYCoord], a
- ld hl, 19
- add hl, bc
- ld a, [hl]
- add a, e
- ld [hl], a
- ret
-
-
-BufferScreen:: ; 2dcd
- ld hl, wOverworldMapAnchor
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wScreenSave
- ld c, 5
- ld b, 6
-.row
- push bc
- push hl
-.col
- ld a, [hli]
- ld [de], a
- inc de
- dec b
- jr nz, .col
- pop hl
- ld a, [wMapWidth]
- add a, 6
- ld c, a
- ld b, 0
- add hl, bc
- pop bc
- dec c
- jr nz, .row
- ret
-
-SaveScreen:: ; 2df1
- ld hl, wOverworldMapAnchor
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld de, wScreenSave
- ld a, [wMapWidth]
- add 6
- ldh [hMapObjectIndexBuffer], a
- ld a, [wPlayerStepDirection]
- and a
- jr z, .down
- cp UP
- jr z, .up
- cp LEFT
- jr z, .left
- cp RIGHT
- jr z, .right
- ret
-
-.up
- ld de, wScreenSave + 6
- ldh a, [hMapObjectIndexBuffer]
- ld c, a
- ld b, 0
- add hl, bc
- jr .vertical
-
-.down
- ld de, wScreenSave
-.vertical
- ld b, 6
- ld c, 4
- jr .load_neighbor
-
-.left
- ld de, wScreenSave + 1
- inc hl
- jr .horizontal
-
-.right
- ld de, wScreenSave
-.horizontal
- ld b, 5
- ld c, 5
-
-.load_neighbor ; 2e35
-.row
- push bc
- push hl
- push de
-.col
- ld a, [de]
- inc de
- ld [hli], a
- dec b
- jr nz, .col
- pop de
- ld a, e
- add a, 6
- ld e, a
- jr nc, .okay
- inc d
-
-.okay
- pop hl
- ldh a, [hConnectionStripLength]
- ld c, a
- ld b, 0
- add hl, bc
- pop bc
- dec c
- jr nz, .row
- ret
-
-
-RefreshTiles:: ; 2e52
- call .left_right
- call .up_down
- ld a, [wPlayerStandingMapX]
- ld d, a
- ld a, [wPlayerStandingMapY]
- ld e, a
- call GetCoordTile
- ld [wPlayerStandingTile], a
- ret
-
-.up_down ; 2e67
- ld a, [wPlayerStandingMapX]
- ld d, a
- ld a, [wPlayerStandingMapY]
- ld e, a
- push de
- inc e
- call GetCoordTile
- ld [wTileDown], a
- pop de
- dec e
- call GetCoordTile
- ld [wTileUp], a
- ret
-
-.left_right ; 2e80
- ld a, [wPlayerStandingMapX]
- ld d, a
- ld a, [wPlayerStandingMapY]
- ld e, a
- push de
- dec d
- call GetCoordTile
- ld [wTileLeft], a
- pop de
- inc d
- call GetCoordTile
- ld [wTileRight], a
- ret
-
-
-GetFacingTileCoord:: ; 2e99
- ld a, [wPlayerWalking] ; TODO: wPlayerDirection in Crystal. Not here?
- 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, [wPlayerStandingMapX]
- add a, d
- ld d, a
- ld a, [wPlayerStandingMapY]
- add a, e
- ld e, a
- ld a, [hl]
- ret
-
-.directions
- db 0, 1
- dw wTileDown
-
- db 0, -1
- dw wTileUp
-
- db -1, 0
- dw wTileLeft
-
- db 1, 0
- dw wTileRight
-
-GetCoordTile:: ; 2ece
-; Get the collision byte for tile d, e
- call GetBlockLocation
- ld a, [hl]
- and a
- jr z, .nope
- ld l, a
- ld h, 0
- add hl, hl
- add hl, hl
- ld a, [wTilesetCollisionAddress]
- ld c, a
- ld a, [wTilesetCollisionAddress + 1]
- ld b, a
- add hl, bc
- rr d
- jr nc, .nocarry
- inc hl
-
-.nocarry
- rr e
- jr nc, .nocarry2
- inc hl
- inc hl
-
-.nocarry2
- ld a, [wTilesetBank]
- call GetFarByte
- ret
-
-.nope
- ld a, -1
- ret
-
-GetBlockLocation:: ; 2ef8
- ld a, [wMapWidth]
- add a, 6
- ld c, a
- ld b, 0
- ld hl, wOverworldMap + 1
- add hl, bc
- ld a, e
- srl a
- jr z, .nope
- and a
-.loop
- srl a
- jr nc, .ok
- add hl, bc
-
-.ok
- sla c
- rl b
- and a
- jr nz, .loop
-
-.nope
- ld c, d
- srl c
- ld b, 0
- add hl, bc
- ret
-
-GetFacingSignpost:: ; 00:2f1d
- call GetFacingTileCoord
- ld b, a
- ld a, d
- sub $4
- ld d, a
- ld a, e
- sub $4
- ld e, a
- ld a, [wCurrMapSignCount]
- and a
- ret z
- ld c, a
- ld hl, wCurrMapSigns
-.asm_2f32: ; 00:2f32
- ld a, [hli]
- cp e
- jr nz, .asm_2f3e
- ld a, [hli]
- cp d
- jr nz, .asm_2f3f
- ld a, [hli]
- cp b ; useless comparison
- jr .asm_2f46
-
-.asm_2f3e: ; 00:2f3e
- inc hl
-.asm_2f3f: ; 00:2f3f
- inc hl
- inc hl
- dec c
- jr nz, .asm_2f32
- xor a
- ret
-
-.asm_2f46: ; 00:2f46
- scf
- ret
-
-LoadTileset:: ; 2f48
- push hl
- push bc
-
- ld hl, Tilesets
- ld bc, wTilesetEnd - wTileset
- ld a, [wMapTileset]
- call AddNTimes
-
- ld de, wTileset
- ld bc, wTilesetEnd - wTileset
-
- ld a, BANK(Tilesets)
- call FarCopyBytes
-
- ld a, 1
- ldh [hMapAnims], a
- xor a
- ldh [hTileAnimFrame], a
-
- pop bc
- pop hl
- ret
diff --git a/home/tileset.asm b/home/tileset.asm
new file mode 100644
index 0000000..e3093c9
--- /dev/null
+++ b/home/tileset.asm
@@ -0,0 +1,419 @@
+include "constants.asm"
+
+
+SECTION "LoadTilesetGFX", ROM0[$2D26]
+
+LoadTilesetGFX:: ; 2d26
+ call GetMapEnvironment
+ cp 1 ; TODO: constantify this
+ jr z, .exterior
+ cp 2 ; TODO: constantify this
+ jr z, .exterior
+ ld a, [wMapTileset]
+ cp $1B ; TODO: constantify this
+ jr z, .exterior
+
+ ld a, [wTilesetTilesAddress]
+ ld e, a
+ ld a, [wTilesetTilesAddress + 1]
+ ld d, a
+ ld hl, vTileset
+ ld a, [wTilesetBank]
+ ld b, a
+ ld c, $60
+ call Get2bpp
+ xor a
+ ldh [hTileAnimFrame], a
+ ret
+
+.exterior
+ ld de, CommonExteriorTiles ; TODO: maybe find a better name
+ ld hl, vTileset
+ lb bc, BANK(CommonExteriorTiles), $20
+ call Get2bpp
+
+ ld a, [wTilesetTilesAddress]
+ ld e, a
+ ld a, [wTilesetTilesAddress + 1]
+ ld d, a
+ ld hl, vExteriorTileset
+ ld a, [wTilesetBank]
+ ld b, a
+ ld c, $40
+ call Get2bpp
+ xor a
+ ldh [hTileAnimFrame], a
+ ret
+
+
+RefreshPlayerCoords:: ; 2d74
+ ld a, [wXCoord]
+ add a, 4
+ ld d, a
+ ld hl, wPlayerStandingMapX
+ sub [hl]
+ ld [hl], d
+ ld hl, wPlayerObjectXCoord
+ ld [hl], d
+ ld hl, wPlayerLastMapX
+ ld [hl], d
+ ld d, a
+ ld a, [wYCoord]
+ add a, 4
+ ld e, a
+ ld hl, wPlayerStandingMapY
+ sub [hl]
+ ld [hl], e
+ ld hl, wPlayerObjectYCoord
+ ld [hl], e
+ ld hl, wPlayerLastMapY
+ ld [hl], e
+ ld e, a
+
+ ld a, [wObjectFollow_Leader]
+ cp 1
+ ret nz
+ ld a, [wObjectFollow_Follower]
+ and a
+ ret z
+
+ ; This piece of code has been removed in pokegold (note that the conditions above were altered, as well)
+ call GetObjectStruct
+ ld hl, 16 ; TODO: constantify this
+ add hl, bc
+ ld a, [hl]
+ add a, d
+ ld [hl], a
+ ld [wMap1ObjectXCoord], a
+ ld hl, 18 ; TODO: constantify this
+ add hl, bc
+ ld a, [hl]
+ add a, d
+ ld [hl], a
+ ld hl, 17 ; TODO: constantify this
+ add hl, bc
+ ld a, [hl]
+ add a, e
+ ld [hl], a
+ ld [wMap1ObjectYCoord], a
+ ld hl, 19
+ add hl, bc
+ ld a, [hl]
+ add a, e
+ ld [hl], a
+ ret
+
+
+BufferScreen:: ; 2dcd
+ ld hl, wOverworldMapAnchor
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, wScreenSave
+ ld c, 5
+ ld b, 6
+.row
+ push bc
+ push hl
+.col
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec b
+ jr nz, .col
+ pop hl
+ ld a, [wMapWidth]
+ add a, 6
+ ld c, a
+ ld b, 0
+ add hl, bc
+ pop bc
+ dec c
+ jr nz, .row
+ ret
+
+SaveScreen:: ; 2df1
+ ld hl, wOverworldMapAnchor
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, wScreenSave
+ ld a, [wMapWidth]
+ add 6
+ ldh [hMapObjectIndexBuffer], a
+ ld a, [wPlayerStepDirection]
+ and a
+ jr z, .down
+ cp UP
+ jr z, .up
+ cp LEFT
+ jr z, .left
+ cp RIGHT
+ jr z, .right
+ ret
+
+.up
+ ld de, wScreenSave + 6
+ ldh a, [hMapObjectIndexBuffer]
+ ld c, a
+ ld b, 0
+ add hl, bc
+ jr .vertical
+
+.down
+ ld de, wScreenSave
+.vertical
+ ld b, 6
+ ld c, 4
+ jr .load_neighbor
+
+.left
+ ld de, wScreenSave + 1
+ inc hl
+ jr .horizontal
+
+.right
+ ld de, wScreenSave
+.horizontal
+ ld b, 5
+ ld c, 5
+
+.load_neighbor ; 2e35
+.row
+ push bc
+ push hl
+ push de
+.col
+ ld a, [de]
+ inc de
+ ld [hli], a
+ dec b
+ jr nz, .col
+ pop de
+ ld a, e
+ add a, 6
+ ld e, a
+ jr nc, .okay
+ inc d
+
+.okay
+ pop hl
+ ldh a, [hConnectionStripLength]
+ ld c, a
+ ld b, 0
+ add hl, bc
+ pop bc
+ dec c
+ jr nz, .row
+ ret
+
+
+RefreshTiles:: ; 2e52
+ call .left_right
+ call .up_down
+ ld a, [wPlayerStandingMapX]
+ ld d, a
+ ld a, [wPlayerStandingMapY]
+ ld e, a
+ call GetCoordTile
+ ld [wPlayerStandingTile], a
+ ret
+
+.up_down ; 2e67
+ ld a, [wPlayerStandingMapX]
+ ld d, a
+ ld a, [wPlayerStandingMapY]
+ ld e, a
+ push de
+ inc e
+ call GetCoordTile
+ ld [wTileDown], a
+ pop de
+ dec e
+ call GetCoordTile
+ ld [wTileUp], a
+ ret
+
+.left_right ; 2e80
+ ld a, [wPlayerStandingMapX]
+ ld d, a
+ ld a, [wPlayerStandingMapY]
+ ld e, a
+ push de
+ dec d
+ call GetCoordTile
+ ld [wTileLeft], a
+ pop de
+ inc d
+ call GetCoordTile
+ ld [wTileRight], a
+ ret
+
+
+GetFacingTileCoord:: ; 2e99
+ ld a, [wPlayerWalking] ; TODO: wPlayerDirection in Crystal. Not here?
+ 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, [wPlayerStandingMapX]
+ add a, d
+ ld d, a
+ ld a, [wPlayerStandingMapY]
+ add a, e
+ ld e, a
+ ld a, [hl]
+ ret
+
+.directions
+ db 0, 1
+ dw wTileDown
+
+ db 0, -1
+ dw wTileUp
+
+ db -1, 0
+ dw wTileLeft
+
+ db 1, 0
+ dw wTileRight
+
+GetCoordTile:: ; 2ece
+; Get the collision byte for tile d, e
+ call GetBlockLocation
+ ld a, [hl]
+ and a
+ jr z, .nope
+ ld l, a
+ ld h, 0
+ add hl, hl
+ add hl, hl
+ ld a, [wTilesetCollisionAddress]
+ ld c, a
+ ld a, [wTilesetCollisionAddress + 1]
+ ld b, a
+ add hl, bc
+ rr d
+ jr nc, .nocarry
+ inc hl
+
+.nocarry
+ rr e
+ jr nc, .nocarry2
+ inc hl
+ inc hl
+
+.nocarry2
+ ld a, [wTilesetBank]
+ call GetFarByte
+ ret
+
+.nope
+ ld a, -1
+ ret
+
+GetBlockLocation:: ; 2ef8
+ ld a, [wMapWidth]
+ add a, 6
+ ld c, a
+ ld b, 0
+ ld hl, wOverworldMap + 1
+ add hl, bc
+ ld a, e
+ srl a
+ jr z, .nope
+ and a
+.loop
+ srl a
+ jr nc, .ok
+ add hl, bc
+
+.ok
+ sla c
+ rl b
+ and a
+ jr nz, .loop
+
+.nope
+ ld c, d
+ srl c
+ ld b, 0
+ add hl, bc
+ ret
+
+GetFacingSignpost:: ; 00:2f1d
+ call GetFacingTileCoord
+ ld b, a
+ ld a, d
+ sub $4
+ ld d, a
+ ld a, e
+ sub $4
+ ld e, a
+ ld a, [wCurrMapSignCount]
+ and a
+ ret z
+ ld c, a
+ ld hl, wCurrMapSigns
+.asm_2f32: ; 00:2f32
+ ld a, [hli]
+ cp e
+ jr nz, .asm_2f3e
+ ld a, [hli]
+ cp d
+ jr nz, .asm_2f3f
+ ld a, [hli]
+ cp b ; useless comparison
+ jr .asm_2f46
+
+.asm_2f3e: ; 00:2f3e
+ inc hl
+.asm_2f3f: ; 00:2f3f
+ inc hl
+ inc hl
+ dec c
+ jr nz, .asm_2f32
+ xor a
+ ret
+
+.asm_2f46: ; 00:2f46
+ scf
+ ret
+
+LoadTileset:: ; 2f48
+ push hl
+ push bc
+
+ ld hl, Tilesets
+ ld bc, wTilesetEnd - wTileset
+ ld a, [wMapTileset]
+ call AddNTimes
+
+ ld de, wTileset
+ ld bc, wTilesetEnd - wTileset
+
+ ld a, BANK(Tilesets)
+ call FarCopyBytes
+
+ ld a, 1
+ ldh [hMapAnims], a
+ xor a
+ ldh [hTileAnimFrame], a
+
+ pop bc
+ pop hl
+ ret
diff --git a/shim.sym b/shim.sym
index 6366fcf..54c1c8b 100644
--- a/shim.sym
+++ b/shim.sym
@@ -5,7 +5,6 @@
00:3233 Function3233
00:323E Function323e
00:3240 Function3240
-00:39BA PlayCry
00:3CA8 InitSpriteAnimStruct
00:3D86 WaitSFX
00:3D87 WaitSFX.wait
@@ -159,6 +158,7 @@
10:4000 Function40000
10:40A6 ShowPokedexMenu
10:4AC7 Function40ac7
+10:4B45 Function40b45
10:4B5C Function40b5c
10:5FA1 Function41fa1
10:61F8 Function421f8
diff --git a/wram.asm b/wram.asm
index b639e5e..9ce471f 100644
--- a/wram.asm
+++ b/wram.asm
@@ -62,10 +62,15 @@ wIncrementTempo: dw ; c1ab
wMapMusic:: db ; c1ad
wCryPitch:: dw ; c1ae
wCryLength:: dw ; c1b0
+; c1b2
+ ds 7 ; TODO
- ds 10 ; TODO
-
+wc1b9:: db ; c1b9
+wc1ba:: db ; c1ba
; either wChannelsEnd or wMusicEnd, unsure
+
+ ds 1 ; TODO
+
wMusicInitEnd:: ; c1bc
@@ -436,6 +441,11 @@ SECTION "CD7D", WRAM0[$CD7D]
wItemQuantity:: db ; cd7d
wItemQuantityBuffer:: db ; cd7e
+SECTION "CD9E", WRAM0 [$CD9E]
+
+wcd9e::
+ db
+
SECTION "CDB0", WRAM0 [$CDB0]
wcdb0:: ; bit 0 = has engaged NPC in dialogue (?)
db
@@ -530,9 +540,13 @@ wMonHGrowthRate:: ; ce1d
wMonHLearnset:: ; ce1e
; bit field
- flag_array 50 + 5
+ flag_array 50 + 5 ; size = 7
ds 1
+SECTION "CE2E", WRAM0[$CE2E]
+wce2e:: ; ce2e
+ ds 9
+
SECTION "CE37", WRAM0[$CE37]
wNamedObjectIndexBuffer::