mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2024-09-09 09:51:34 -07:00
e8bc86d1fe
Since we're aiming for consistency across the codebase, I believe it includes a uniform way to refer to the creatures this game consists of in the labels of the code. The only exceptions to this rule are labels referring to things named through the use of the <PK><MN> or <PKMN> characters, in which case PKMN is used. Most of this was already consistent enoughâ„¢, I just picked the convention with the most occurences and fixed the outliers.
486 lines
6.2 KiB
NASM
486 lines
6.2 KiB
NASM
DrawPlayerHP: ; 50b0a
|
|
ld a, $1
|
|
jr DrawHP
|
|
|
|
DrawEnemyHP: ; 50b0e
|
|
ld a, $2
|
|
|
|
DrawHP: ; 50b10
|
|
ld [wWhichHPBar], a
|
|
push hl
|
|
push bc
|
|
; box mons have full HP
|
|
ld a, [wMonType]
|
|
cp BOXMON
|
|
jr z, .at_least_1_hp
|
|
|
|
ld a, [wTempMonHP]
|
|
ld b, a
|
|
ld a, [wTempMonHP + 1]
|
|
ld c, a
|
|
|
|
; Any HP?
|
|
or b
|
|
jr nz, .at_least_1_hp
|
|
|
|
xor a
|
|
ld c, a
|
|
ld e, a
|
|
ld a, 6
|
|
ld d, a
|
|
jp .fainted
|
|
|
|
.at_least_1_hp
|
|
ld a, [wTempMonMaxHP]
|
|
ld d, a
|
|
ld a, [wTempMonMaxHP + 1]
|
|
ld e, a
|
|
ld a, [wMonType]
|
|
cp BOXMON
|
|
jr nz, .not_boxmon
|
|
|
|
ld b, d
|
|
ld c, e
|
|
|
|
.not_boxmon
|
|
predef ComputeHPBarPixels
|
|
ld a, 6
|
|
ld d, a
|
|
ld c, a
|
|
|
|
.fainted
|
|
ld a, c
|
|
pop bc
|
|
ld c, a
|
|
pop hl
|
|
push de
|
|
push hl
|
|
push hl
|
|
call DrawBattleHPBar
|
|
pop hl
|
|
|
|
; Print HP
|
|
bccoord 1, 1, 0
|
|
add hl, bc
|
|
ld de, wTempMonHP
|
|
ld a, [wMonType]
|
|
cp BOXMON
|
|
jr nz, .not_boxmon_2
|
|
ld de, wTempMonMaxHP
|
|
.not_boxmon_2
|
|
lb bc, 2, 3
|
|
call PrintNum
|
|
|
|
ld a, "/"
|
|
ld [hli], a
|
|
|
|
; Print max HP
|
|
ld de, wTempMonMaxHP
|
|
lb bc, 2, 3
|
|
call PrintNum
|
|
pop hl
|
|
pop de
|
|
ret
|
|
|
|
PrintTempMonStats: ; 50b7b
|
|
; Print wTempMon's stats at hl, with spacing bc.
|
|
push bc
|
|
push hl
|
|
ld de, .StatNames
|
|
call PlaceString
|
|
pop hl
|
|
pop bc
|
|
add hl, bc
|
|
ld bc, SCREEN_WIDTH
|
|
add hl, bc
|
|
ld de, wTempMonAttack
|
|
lb bc, 2, 3
|
|
call .PrintStat
|
|
ld de, wTempMonDefense
|
|
call .PrintStat
|
|
ld de, wTempMonSpclAtk
|
|
call .PrintStat
|
|
ld de, wTempMonSpclDef
|
|
call .PrintStat
|
|
ld de, wTempMonSpeed
|
|
jp PrintNum
|
|
|
|
.PrintStat: ; 50bab
|
|
push hl
|
|
call PrintNum
|
|
pop hl
|
|
ld de, SCREEN_WIDTH * 2
|
|
add hl, de
|
|
ret
|
|
|
|
.StatNames: ; 50bb5
|
|
db "ATTACK"
|
|
next "DEFENSE"
|
|
next "SPCL.ATK"
|
|
next "SPCL.DEF"
|
|
next "SPEED"
|
|
next "@"
|
|
|
|
GetGender: ; 50bdd
|
|
; Return the gender of a given monster (wCurPartyMon/wCurOTMon/CurWildMon).
|
|
; When calling this function, a should be set to an appropriate wMonType value.
|
|
|
|
; return values:
|
|
; a = 1: f = nc|nz; male
|
|
; a = 0: f = nc|z; female
|
|
; f = c: genderless
|
|
|
|
; This is determined by comparing the Attack and Speed DVs
|
|
; with the species' gender ratio.
|
|
|
|
; Figure out what type of monster struct we're looking at.
|
|
|
|
; 0: PartyMon
|
|
ld hl, wPartyMon1DVs
|
|
ld bc, PARTYMON_STRUCT_LENGTH
|
|
ld a, [wMonType]
|
|
and a
|
|
jr z, .PartyMon
|
|
|
|
; 1: OTPartyMon
|
|
ld hl, wOTPartyMon1DVs
|
|
dec a
|
|
jr z, .PartyMon
|
|
|
|
; 2: sBoxMon
|
|
ld hl, sBoxMon1DVs
|
|
ld bc, BOXMON_STRUCT_LENGTH
|
|
dec a
|
|
jr z, .sBoxMon
|
|
|
|
; 3: Unknown
|
|
ld hl, wTempMonDVs
|
|
dec a
|
|
jr z, .DVs
|
|
|
|
; else: WildMon
|
|
ld hl, wEnemyMonDVs
|
|
jr .DVs
|
|
|
|
; Get our place in the party/box.
|
|
|
|
.PartyMon:
|
|
.sBoxMon
|
|
ld a, [wCurPartyMon]
|
|
call AddNTimes
|
|
|
|
.DVs:
|
|
|
|
; sBoxMon data is read directly from SRAM.
|
|
ld a, [wMonType]
|
|
cp BOXMON
|
|
ld a, BANK(sBox)
|
|
call z, GetSRAMBank
|
|
|
|
; Attack DV
|
|
ld a, [hli]
|
|
and $f0
|
|
ld b, a
|
|
; Speed DV
|
|
ld a, [hl]
|
|
and $f0
|
|
swap a
|
|
|
|
; Put our DVs together.
|
|
or b
|
|
ld b, a
|
|
|
|
; Close SRAM if we were dealing with a sBoxMon.
|
|
ld a, [wMonType]
|
|
cp BOXMON
|
|
call z, CloseSRAM
|
|
|
|
; We need the gender ratio to do anything with this.
|
|
push bc
|
|
ld a, [wCurPartySpecies]
|
|
dec a
|
|
ld hl, BaseData + BASE_GENDER
|
|
ld bc, BASE_DATA_SIZE
|
|
call AddNTimes
|
|
pop bc
|
|
|
|
ld a, BANK(BaseData)
|
|
call GetFarByte
|
|
|
|
; The higher the ratio, the more likely the monster is to be female.
|
|
|
|
cp GENDERLESS
|
|
jr z, .Genderless
|
|
|
|
and a ; GENDER_F0?
|
|
jr z, .Male
|
|
|
|
cp GENDER_F100
|
|
jr z, .Female
|
|
|
|
; Values below the ratio are male, and vice versa.
|
|
cp b
|
|
jr c, .Male
|
|
|
|
.Female:
|
|
xor a
|
|
ret
|
|
|
|
.Male:
|
|
ld a, 1
|
|
and a
|
|
ret
|
|
|
|
.Genderless:
|
|
scf
|
|
ret
|
|
|
|
ListMovePP: ; 50c50
|
|
ld a, [wNumMoves]
|
|
inc a
|
|
ld c, a
|
|
ld a, NUM_MOVES
|
|
sub c
|
|
ld b, a
|
|
push hl
|
|
ld a, [wBuffer1]
|
|
ld e, a
|
|
ld d, $0
|
|
ld a, $3e ; P
|
|
call .load_loop
|
|
ld a, b
|
|
and a
|
|
jr z, .skip
|
|
ld c, a
|
|
ld a, "-"
|
|
call .load_loop
|
|
|
|
.skip
|
|
pop hl
|
|
inc hl
|
|
inc hl
|
|
inc hl
|
|
ld d, h
|
|
ld e, l
|
|
ld hl, wTempMonMoves
|
|
ld b, 0
|
|
.loop
|
|
ld a, [hli]
|
|
and a
|
|
jr z, .done
|
|
push bc
|
|
push hl
|
|
push de
|
|
ld hl, wMenuCursorY
|
|
ld a, [hl]
|
|
push af
|
|
ld [hl], b
|
|
push hl
|
|
callfar GetMaxPPOfMove
|
|
pop hl
|
|
pop af
|
|
ld [hl], a
|
|
pop de
|
|
pop hl
|
|
push hl
|
|
ld bc, wTempMonPP - (wTempMonMoves + 1)
|
|
add hl, bc
|
|
ld a, [hl]
|
|
and $3f
|
|
ld [wStringBuffer1 + 4], a
|
|
ld h, d
|
|
ld l, e
|
|
push hl
|
|
ld de, wStringBuffer1 + 4
|
|
lb bc, 1, 2
|
|
call PrintNum
|
|
ld a, "/"
|
|
ld [hli], a
|
|
ld de, wd265
|
|
lb bc, 1, 2
|
|
call PrintNum
|
|
pop hl
|
|
ld a, [wBuffer1]
|
|
ld e, a
|
|
ld d, 0
|
|
add hl, de
|
|
ld d, h
|
|
ld e, l
|
|
pop hl
|
|
pop bc
|
|
inc b
|
|
ld a, b
|
|
cp NUM_MOVES
|
|
jr nz, .loop
|
|
|
|
.done
|
|
ret
|
|
|
|
.load_loop ; 50cc9
|
|
ld [hli], a
|
|
ld [hld], a
|
|
add hl, de
|
|
dec c
|
|
jr nz, .load_loop
|
|
ret
|
|
|
|
Unreferenced_Function50cd0: ; 50cd0
|
|
.loop
|
|
ld [hl], $32
|
|
inc hl
|
|
ld [hl], $3e
|
|
dec hl
|
|
add hl, de
|
|
dec c
|
|
jr nz, .loop
|
|
ret
|
|
|
|
Unused_PlaceEnemyHPLevel:
|
|
push hl
|
|
push hl
|
|
ld hl, wPartyMonNicknames
|
|
ld a, [wCurPartyMon]
|
|
call GetNick
|
|
pop hl
|
|
call PlaceString
|
|
call CopyMonToTempMon
|
|
pop hl
|
|
ld a, [wCurPartySpecies]
|
|
cp EGG
|
|
jr z, .egg
|
|
push hl
|
|
ld bc, -12
|
|
add hl, bc
|
|
ld b, $0
|
|
call DrawEnemyHP
|
|
pop hl
|
|
ld bc, 5
|
|
add hl, bc
|
|
push de
|
|
call PrintLevel
|
|
pop de
|
|
|
|
.egg
|
|
ret
|
|
|
|
PlaceStatusString: ; 50d0a
|
|
push de
|
|
inc de
|
|
inc de
|
|
ld a, [de]
|
|
ld b, a
|
|
inc de
|
|
ld a, [de]
|
|
or b
|
|
pop de
|
|
jr nz, PlaceNonFaintStatus
|
|
push de
|
|
ld de, FntString
|
|
call CopyStatusString
|
|
pop de
|
|
ld a, $1
|
|
and a
|
|
ret
|
|
|
|
FntString: ; 50d22
|
|
db "FNT@"
|
|
|
|
CopyStatusString: ; 50d25
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
ld a, [de]
|
|
inc de
|
|
ld [hli], a
|
|
ld a, [de]
|
|
ld [hl], a
|
|
ret
|
|
|
|
PlaceNonFaintStatus: ; 50d2e
|
|
push de
|
|
ld a, [de]
|
|
ld de, PsnString
|
|
bit PSN, a
|
|
jr nz, .place
|
|
ld de, BrnString
|
|
bit BRN, a
|
|
jr nz, .place
|
|
ld de, FrzString
|
|
bit FRZ, a
|
|
jr nz, .place
|
|
ld de, ParString
|
|
bit PAR, a
|
|
jr nz, .place
|
|
ld de, SlpString
|
|
and SLP
|
|
jr z, .no_status
|
|
|
|
.place
|
|
call CopyStatusString
|
|
ld a, $1
|
|
and a
|
|
|
|
.no_status
|
|
pop de
|
|
ret
|
|
|
|
SlpString: db "SLP@"
|
|
PsnString: db "PSN@"
|
|
BrnString: db "BRN@"
|
|
FrzString: db "FRZ@"
|
|
ParString: db "PAR@"
|
|
|
|
ListMoves: ; 50d6f
|
|
; List moves at hl, spaced every [wBuffer1] tiles.
|
|
ld de, wListMoves_MoveIndicesBuffer
|
|
ld b, $0
|
|
.moves_loop
|
|
ld a, [de]
|
|
inc de
|
|
and a
|
|
jr z, .no_more_moves
|
|
push de
|
|
push hl
|
|
push hl
|
|
ld [wCurSpecies], a
|
|
ld a, MOVE_NAME
|
|
ld [wNamedObjectTypeBuffer], a
|
|
call GetName
|
|
ld de, wStringBuffer1
|
|
pop hl
|
|
push bc
|
|
call PlaceString
|
|
pop bc
|
|
ld a, b
|
|
ld [wNumMoves], a
|
|
inc b
|
|
pop hl
|
|
push bc
|
|
ld a, [wBuffer1]
|
|
ld c, a
|
|
ld b, 0
|
|
add hl, bc
|
|
pop bc
|
|
pop de
|
|
ld a, b
|
|
cp NUM_MOVES
|
|
jr z, .done
|
|
jr .moves_loop
|
|
|
|
.no_more_moves
|
|
ld a, b
|
|
.nonmove_loop
|
|
push af
|
|
ld [hl], "-"
|
|
ld a, [wBuffer1]
|
|
ld c, a
|
|
ld b, 0
|
|
add hl, bc
|
|
pop af
|
|
inc a
|
|
cp NUM_MOVES
|
|
jr nz, .nonmove_loop
|
|
|
|
.done
|
|
ret
|