mirror of https://github.com/pret/pokecrystal.git
287 lines
4.1 KiB
NASM
287 lines
4.1 KiB
NASM
AnimateDexSearchSlowpoke:
|
|
ld hl, .FrameIDs
|
|
ld b, 25
|
|
.loop
|
|
ld a, [hli]
|
|
|
|
; Wrap around
|
|
cp $fe
|
|
jr nz, .ok
|
|
ld hl, .FrameIDs
|
|
ld a, [hli]
|
|
.ok
|
|
|
|
ld [wDexSearchSlowpokeFrame], a
|
|
ld a, [hli]
|
|
ld c, a
|
|
push bc
|
|
push hl
|
|
call DoDexSearchSlowpokeFrame
|
|
pop hl
|
|
pop bc
|
|
call DelayFrames
|
|
dec b
|
|
jr nz, .loop
|
|
xor a
|
|
ld [wDexSearchSlowpokeFrame], a
|
|
call DoDexSearchSlowpokeFrame
|
|
ld c, 32
|
|
call DelayFrames
|
|
ret
|
|
|
|
.FrameIDs:
|
|
; frame ID, duration
|
|
db 0, 7
|
|
db 1, 7
|
|
db 2, 7
|
|
db 3, 7
|
|
db 4, 7
|
|
db -2
|
|
|
|
DoDexSearchSlowpokeFrame:
|
|
ld a, [wDexSearchSlowpokeFrame]
|
|
ld hl, .SlowpokeSpriteData
|
|
ld de, wVirtualOAMSprite00
|
|
.loop
|
|
ld a, [hli]
|
|
cp -1
|
|
ret z
|
|
ld [de], a ; y
|
|
inc de
|
|
ld a, [hli]
|
|
ld [de], a ; x
|
|
inc de
|
|
ld a, [wDexSearchSlowpokeFrame]
|
|
ld b, a
|
|
add a
|
|
add b
|
|
add [hl]
|
|
inc hl
|
|
ld [de], a ; tile id
|
|
inc de
|
|
ld a, [hli]
|
|
ld [de], a ; attributes
|
|
inc de
|
|
jr .loop
|
|
|
|
.SlowpokeSpriteData:
|
|
dsprite 11, 0, 9, 0, $00, 0
|
|
dsprite 11, 0, 10, 0, $01, 0
|
|
dsprite 11, 0, 11, 0, $02, 0
|
|
dsprite 12, 0, 9, 0, $10, 0
|
|
dsprite 12, 0, 10, 0, $11, 0
|
|
dsprite 12, 0, 11, 0, $12, 0
|
|
dsprite 13, 0, 9, 0, $20, 0
|
|
dsprite 13, 0, 10, 0, $21, 0
|
|
dsprite 13, 0, 11, 0, $22, 0
|
|
db -1
|
|
|
|
DisplayDexEntry:
|
|
call GetPokemonName
|
|
hlcoord 9, 3
|
|
call PlaceString ; mon species
|
|
ld a, [wTempSpecies]
|
|
ld b, a
|
|
call GetDexEntryPointer
|
|
ld a, b
|
|
push af
|
|
hlcoord 9, 5
|
|
call FarString ; dex species
|
|
ld h, b
|
|
ld l, c
|
|
push de
|
|
; Print dex number
|
|
hlcoord 2, 8
|
|
ld a, $5c ; No
|
|
ld [hli], a
|
|
ld a, $5d ; .
|
|
ld [hli], a
|
|
ld de, wTempSpecies
|
|
lb bc, PRINTNUM_LEADINGZEROS | 1, 3
|
|
call PrintNum
|
|
; Check to see if we caught it. Get out of here if we haven't.
|
|
ld a, [wTempSpecies]
|
|
dec a
|
|
call CheckCaughtMon
|
|
pop hl
|
|
pop bc
|
|
ret z
|
|
; Get the height of the Pokemon.
|
|
ld a, [wCurPartySpecies]
|
|
ld [wCurSpecies], a
|
|
inc hl
|
|
ld a, b
|
|
push af
|
|
push hl
|
|
call GetFarHalfword
|
|
ld d, l
|
|
ld e, h
|
|
pop hl
|
|
inc hl
|
|
inc hl
|
|
ld a, d
|
|
or e
|
|
jr z, .skip_height
|
|
push hl
|
|
push de
|
|
; Print the height, with two of the four digits in front of the decimal point
|
|
ld hl, sp+$0
|
|
ld d, h
|
|
ld e, l
|
|
hlcoord 12, 7
|
|
lb bc, 2, (2 << 4) | 4
|
|
call PrintNum
|
|
; Replace the decimal point with a ft symbol
|
|
hlcoord 14, 7
|
|
ld [hl], $5e
|
|
pop af
|
|
pop hl
|
|
|
|
.skip_height
|
|
pop af
|
|
push af
|
|
inc hl
|
|
push hl
|
|
dec hl
|
|
call GetFarHalfword
|
|
ld d, l
|
|
ld e, h
|
|
ld a, e
|
|
or d
|
|
jr z, .skip_weight
|
|
push de
|
|
; Print the weight, with four of the five digits in front of the decimal point
|
|
ld hl, sp+$0
|
|
ld d, h
|
|
ld e, l
|
|
hlcoord 11, 9
|
|
lb bc, 2, (4 << 4) | 5
|
|
call PrintNum
|
|
pop de
|
|
|
|
.skip_weight
|
|
; Page 1
|
|
lb bc, 5, SCREEN_WIDTH - 2
|
|
hlcoord 2, 11
|
|
call ClearBox
|
|
hlcoord 1, 10
|
|
ld bc, SCREEN_WIDTH - 1
|
|
ld a, $61 ; horizontal divider
|
|
call ByteFill
|
|
; page number
|
|
hlcoord 1, 9
|
|
ld [hl], $55
|
|
inc hl
|
|
ld [hl], $55
|
|
hlcoord 1, 10
|
|
ld [hl], $56 ; P.
|
|
inc hl
|
|
ld [hl], $57 ; 1
|
|
pop de
|
|
inc de
|
|
pop af
|
|
hlcoord 2, 11
|
|
push af
|
|
call FarString
|
|
pop bc
|
|
ld a, [wPokedexStatus]
|
|
or a ; check for page 2
|
|
ret z
|
|
|
|
; Page 2
|
|
push bc
|
|
push de
|
|
lb bc, 5, SCREEN_WIDTH - 2
|
|
hlcoord 2, 11
|
|
call ClearBox
|
|
hlcoord 1, 10
|
|
ld bc, SCREEN_WIDTH - 1
|
|
ld a, $61
|
|
call ByteFill
|
|
; page number
|
|
hlcoord 1, 9
|
|
ld [hl], $55
|
|
inc hl
|
|
ld [hl], $55
|
|
hlcoord 1, 10
|
|
ld [hl], $56 ; P.
|
|
inc hl
|
|
ld [hl], $58 ; 2
|
|
pop de
|
|
inc de
|
|
pop af
|
|
hlcoord 2, 11
|
|
call FarString
|
|
ret
|
|
|
|
UnreferencedPOKeString:
|
|
; unused
|
|
db "#@"
|
|
|
|
GetDexEntryPointer:
|
|
; return dex entry pointer b:de
|
|
push hl
|
|
ld hl, PokedexDataPointerTable
|
|
ld a, b
|
|
dec a
|
|
ld d, 0
|
|
ld e, a
|
|
add hl, de
|
|
add hl, de
|
|
ld e, [hl]
|
|
inc hl
|
|
ld d, [hl]
|
|
push de
|
|
rlca
|
|
rlca
|
|
maskbits NUM_DEX_ENTRY_BANKS
|
|
ld hl, .PokedexEntryBanks
|
|
ld d, 0
|
|
ld e, a
|
|
add hl, de
|
|
ld b, [hl]
|
|
pop de
|
|
pop hl
|
|
ret
|
|
|
|
.PokedexEntryBanks:
|
|
db BANK("Pokedex Entries 001-064")
|
|
db BANK("Pokedex Entries 065-128")
|
|
db BANK("Pokedex Entries 129-192")
|
|
db BANK("Pokedex Entries 193-251")
|
|
|
|
GetDexEntryPagePointer:
|
|
call GetDexEntryPointer
|
|
push hl
|
|
ld h, d
|
|
ld l, e
|
|
; skip species name
|
|
.loop1
|
|
ld a, b
|
|
call GetFarByte
|
|
inc hl
|
|
cp "@"
|
|
jr nz, .loop1
|
|
; skip height and weight
|
|
rept 4
|
|
inc hl
|
|
endr
|
|
; if c != 1: skip entry
|
|
dec c
|
|
jr z, .done
|
|
; skip entry
|
|
.loop2
|
|
ld a, b
|
|
call GetFarByte
|
|
inc hl
|
|
cp "@"
|
|
jr nz, .loop2
|
|
|
|
.done
|
|
ld d, h
|
|
ld e, l
|
|
pop hl
|
|
ret
|
|
|
|
INCLUDE "data/pokemon/dex_entry_pointers.asm"
|