more sprite asm

This commit is contained in:
yenatch 2013-07-14 14:51:07 -04:00
parent 9540a15b0c
commit 8d75f962e4
1 changed files with 268 additions and 15 deletions

283
main.asm
View File

@ -2575,7 +2575,29 @@ UpdateGameTimer: ; 20ad
; 210f
INCBIN "baserom.gbc", $210f, $23a3 - $210f
INCBIN "baserom.gbc", $210f, $22ee - $210f
CheckOutdoorMap: ; 22ee
cp ROUTE
ret z
cp TOWN
ret
; 22f4
CheckIndoorMap: ; 22f4
cp INDOOR
ret z
cp CAVE
ret z
cp DUNGEON
ret z
cp GATE
ret
; 2300
INCBIN "baserom.gbc", $2300, $23a3 - $2300
GetMapConnection: ; 23a3
@ -3113,8 +3135,25 @@ GetSecondaryMapHeaderPointer: ; 0x2c7d
pop de
pop bc
ret
; 2c8a
GetMapPermission: ; 2c8a
push hl
push de
push bc
ld de, 2
call GetMapHeaderMember
ld a, c
pop bc
pop de
pop hl
ret
; 2c98
INCBIN "baserom.gbc", $2c98, $2caf - $2c98
INCBIN "baserom.gbc", $2c8a, $2caf-$2c8a
GetWorldMapLocation: ; 0x2caf
; given a map group/id in bc, return its location on the Pokégear map.
@ -3130,7 +3169,9 @@ GetWorldMapLocation: ; 0x2caf
ret
; 0x2cbd
INCBIN "baserom.gbc", $2cbd, $2d63-$2cbd
INCBIN "baserom.gbc", $2cbd, $2d63 - $2cbd
FarJpHl: ; 2d63
; Jump to a:hl.
@ -8851,21 +8892,19 @@ GetPlayerSprite: ; 14183
; 141c9
; 141c9
call $2c8a
call $22ee
AddMapSprites: ; 141c9
call GetMapPermission
call CheckOutdoorMap
jr z, .outdoor
call IndoorSpriteGFX
call AddIndoorSprites
ret
.outdoor
call OutdoorSpriteGFX
call AddOutdoorSprites
ret
; 141d9
IndoorSpriteGFX: ; 141d9
AddIndoorSprites: ; 141d9
ld hl, MapObjects + 1 * OBJECT_LENGTH + 1 ; sprite
ld a, 1
.loop
@ -8882,7 +8921,7 @@ IndoorSpriteGFX: ; 141d9
; 141ee
OutdoorSpriteGFX: ; 141ee
AddOutdoorSprites: ; 141ee
ld a, [MapGroup]
dec a
ld c, a
@ -8905,9 +8944,16 @@ OutdoorSpriteGFX: ; 141ee
; 14209
INCBIN "baserom.gbc", $14209, $1423c - $14209
INCBIN "baserom.gbc", $14209, $14236 - $14209
SafeGetSprite: ; 14236
push hl
call GetSprite
pop hl
ret
; 1423c
GetSprite: ; 1423c
call GetMonSprite
ret c
@ -8999,7 +9045,59 @@ GetMonSprite: ; 14259
; 142a7
INCBIN "baserom.gbc", $142a7, $142e5 - $142a7
Function142a7: ; 142a7
cp SPRITE_POKEMON
jr nc, .asm_142c2
push hl
push bc
ld hl, SpriteHeaders + 4
dec a
ld c, a
ld b, 0
ld a, 6
call AddNTimes
ld a, [hl]
pop bc
pop hl
cp 3
jr nz, .asm_142c2
scf
ret
.asm_142c2
and a
ret
; 142c4
GetSpritePalette: ; 142c4
ld a, c
call GetMonSprite
jr c, .asm_142d8
ld hl, SpriteHeaders + 5 ; palette
dec a
ld c, a
ld b, 0
ld a, 6
call AddNTimes
ld c, [hl]
ret
.asm_142d8
xor a
ld c, a
ret
; 142db
Function142db: ; 142db
call LoadSpriteGFX
call SortUsedSprites
call ArrangeUsedSprites
ret
; 142e5
AddSpriteGFX: ; 142e5
@ -9067,7 +9165,162 @@ LoadSpriteGFX: ; 14306
; 1431e
INCBIN "baserom.gbc", $1431e, $14495 - $1431e
SortUsedSprites: ; 1431e
; Bubble-sort sprites by type.
; Run backwards through UsedSprites to find the last one.
ld c, $20
ld de, UsedSprites + ($20 - 1) * 2
.FindLastSprite
ld a, [de]
and a
jr nz, .FoundLastSprite
dec de
dec de
dec c
jr nz, .FindLastSprite
.FoundLastSprite
dec c
jr z, .quit
; If the length of the current sprite is
; higher than a later one, swap them.
inc de
ld hl, UsedSprites + 1
.CheckSprite
push bc
push de
push hl
.CheckFollowing
ld a, [de]
cp [hl]
jr nc, .next
; Swap the two sprites.
ld b, a
ld a, [hl]
ld [hl], b
ld [de], a
dec de
dec hl
ld a, [de]
ld b, a
ld a, [hl]
ld [hl], b
ld [de], a
inc de
inc hl
; Keep doing this until everything's in order.
.next
dec de
dec de
dec c
jr nz, .CheckFollowing
pop hl
inc hl
inc hl
pop de
pop bc
dec c
jr nz, .CheckSprite
.quit
ret
; 14355
ArrangeUsedSprites: ; 14355
; Get the length of each sprite and space them out in VRAM.
; Crystal introduces a second table in VRAM bank 0.
ld hl, UsedSprites
ld c, $20
ld b, 0
.FirstTableLength
; Keep going until the end of the list.
ld a, [hli]
and a
jr z, .quit
ld a, [hl]
call GetSpriteLength
; Spill over into the second table after $80 tiles.
add b
cp $80
jr z, .next
jr nc, .SecondTable
.next
ld [hl], b
inc hl
ld b, a
; Assumes the next table will be reached before c hits 0.
dec c
jr nz, .FirstTableLength
.SecondTable
; The second tile table starts at tile $80.
ld b, $80
dec hl
.SecondTableLength
; Keep going until the end of the list.
ld a, [hli]
and a
jr z, .quit
ld a, [hl]
call GetSpriteLength
; There are only two tables, so don't go any further than that.
add b
jr c, .quit
ld [hl], b
ld b, a
inc hl
dec c
jr nz, .SecondTableLength
.quit
ret
; 14386
GetSpriteLength: ; 14386
; Return the length of sprite type a in tiles.
cp WALKING_SPRITE
jr z, .AnyDirection
cp STANDING_SPRITE
jr z, .AnyDirection
cp STILL_SPRITE
jr z, .OneDirection
ld a, 12
ret
.AnyDirection
ld a, 12
ret
.OneDirection
ld a, 4
ret
; 1439b
INCBIN "baserom.gbc", $1439b, $14495 - $1439b
SpriteMons: ; 14495