summaryrefslogtreecommitdiff
path: root/engine
diff options
context:
space:
mode:
authorZumi Daxuya <daxuya.zumi+code@protonmail.com>2021-05-16 14:19:50 +0700
committerZumi Daxuya <daxuya.zumi+code@protonmail.com>2021-05-16 14:22:32 +0700
commit9b6130052de39c7ce09b899cb495db50bc5b4020 (patch)
tree8ab3c6578a2a75b0a3bf5ee1f532a5fbef9eaeb3 /engine
parente7e6b3624829144be2145fc6792790f5cb4dff6c (diff)
Disassemble more OW sprite routines
Diffstat (limited to 'engine')
-rw-r--r--engine/sprites/sprites.asm191
1 files changed, 190 insertions, 1 deletions
diff --git a/engine/sprites/sprites.asm b/engine/sprites/sprites.asm
index f17e68f..87bf7b3 100644
--- a/engine/sprites/sprites.asm
+++ b/engine/sprites/sprites.asm
@@ -1,6 +1,195 @@
INCLUDE "constants.asm"
-SECTION "engine/sprites/sprites.asm@LoadOverworldSprite", ROMX
+SECTION "engine/sprites/sprites.asm@RefreshSprites", ROMX
+
+RefreshSprites:
+ call GetPlayerSprite
+ call CheckInteriorMap
+ jr c, .outdoor
+ call AddIndoorSprites
+ call LoadUsedSpritesGfx
+ ret
+.outdoor
+ call AddOutdoorSprites
+ call LoadUsedSpritesGfx
+ ret
+
+CheckInteriorMap:
+ call GetMapEnvironment
+ cp TOWN
+ jr z, .got_outdoor
+ cp ROUTE
+ jr z, .got_outdoor
+ xor a
+ ret
+.got_outdoor
+ scf
+ ret
+
+AddIndoorSprites:
+ ld hl, wUsedNPCSprites
+ ld bc, SPRITE_SET_LENGTH
+ xor a
+ call ByteFill
+ ld a, [wPlayerObjectSprite]
+ ld [wUsedSprites], a
+ ld hl, wMap2ObjectSprite
+ ld a, 2
+.asm_14070
+ push af
+ ld a, [hl]
+ and a
+ jr z, .asm_1408d
+ ld c, a
+ call IsAnimatedSprite
+ jr nc, .static_sprite
+ ld de, wUsedStaticSprites
+ ld b, 2
+ call Function14099
+ jr .asm_1408d
+.static_sprite
+ ld de, wUsedNPCSprites
+ ld b, 8
+ call Function14099
+.asm_1408d
+ ld de, $10
+ add hl, de
+ pop af
+ inc a
+ cp $10
+ jp nz, .asm_14070
+ ret
+
+Function14099:
+.loop
+ ld a, [de]
+ and a
+ jr z, .asm_140a5
+ cp c
+ ret z
+ dec b
+ jr z, .asm_140a8
+ inc de
+ jr .loop
+
+.asm_140a5
+ ld a, c
+ ld [de], a
+ ret
+
+.asm_140a8
+ scf
+ ret
+
+
+AddOutdoorSprites:
+ ld a, [wPlayerObjectSprite]
+ ld [wUsedSprites], a
+ ld a, [wMapGroup]
+ dec a
+ ld c, a
+ ld b, 0
+ ld hl, MapGroupSpriteSets
+ add hl, bc
+ ld a, [hl]
+ push af
+ dec a
+ ld hl, SpriteSets
+ ld bc, SPRITE_SET_LENGTH
+ call AddNTimes
+ ld de, wUsedNPCSprites
+ ld bc, SPRITE_SET_LENGTH
+ call CopyBytes
+ ld a, [wd642]
+ ld c, a
+ pop af
+ ld [wd642], a
+ ret
+
+Function140d9:
+ ld hl, wcdaf
+ ld a, [hl]
+ push af
+ res 7, [hl]
+ set 6, [hl]
+ call LoadUsedSpritesGfx
+ pop af
+ ld [wcdaf], a
+ ret
+
+Function140ea:
+ ld hl, wcdaf
+ ld a, [hl]
+ push af
+ set 7, [hl]
+ res 6, [hl]
+ call LoadUsedSpritesGfx
+ pop af
+ ld [wcdaf], a
+ ret
+
+LoadUsedSpritesGfx:
+ ld hl, vNPCSprites
+ ld de, wUsedSprites
+ ld b, SPRITE_SET_LENGTH
+ ld c, 0
+.asm_14105
+ push bc
+ push de
+ push hl
+ ld a, [de]
+ and a
+ jr z, .asm_1410f
+ call LoadOverworldSprite
+.asm_1410f
+ pop hl
+ ld bc, $c0
+ add hl, bc
+ pop de
+ inc de
+ pop bc
+ inc c
+ dec b
+ jr nz, .asm_14105
+ ld a, [de]
+ and a
+ jr z, .asm_14127
+ push de
+ ld hl, vNPCSprites + $780
+ call LoadOverworldSprite
+ pop de
+.asm_14127
+ inc de
+ ld a, [de]
+ and a
+ jr z, .asm_14132
+ ld hl, vNPCSprites + $7c0
+ call LoadOverworldSprite
+.asm_14132
+ ret
+
+Function14133:
+ swap b
+ ld a, b
+ and $f0
+ ld e, a
+ ld a, b
+ and $f
+ ld d, a
+ ld hl, vNPCSprites
+ add hl, de
+ ld a, c
+ jr LoadOverworldSprite
+
+Function14144:
+ ld a, c
+ ld hl, vNPCSprites
+ jr LoadOverworldSprite
+
+Function1414a:
+ ld a, c
+ ld hl, vNPCSprites + $c0
+ jr LoadOverworldSprite
LoadOverworldSprite:
push af