You've already forked pokecrystal-board
mirror of
https://gitlab.com/xCrystal/pokecrystal-board.git
synced 2025-09-08 08:13:02 -07:00
Move more contiguous related code blocks from main.asm to engine/ and events/
This commit is contained in:
486
engine/mon_stats.asm
Normal file
486
engine/mon_stats.asm
Normal file
@@ -0,0 +1,486 @@
|
||||
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, [MonType]
|
||||
cp BOXMON
|
||||
jr z, .at_least_1_hp
|
||||
|
||||
ld a, [TempMonHP]
|
||||
ld b, a
|
||||
ld a, [TempMonHP + 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, [TempMonMaxHP]
|
||||
ld d, a
|
||||
ld a, [TempMonMaxHP + 1]
|
||||
ld e, a
|
||||
ld a, [MonType]
|
||||
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, TempMonHP
|
||||
ld a, [MonType]
|
||||
cp BOXMON
|
||||
jr nz, .not_boxmon_2
|
||||
ld de, TempMonMaxHP
|
||||
.not_boxmon_2
|
||||
lb bc, 2, 3
|
||||
call PrintNum
|
||||
|
||||
ld a, "/"
|
||||
ld [hli], a
|
||||
|
||||
; Print max HP
|
||||
ld de, TempMonMaxHP
|
||||
lb bc, 2, 3
|
||||
call PrintNum
|
||||
pop hl
|
||||
pop de
|
||||
ret
|
||||
|
||||
PrintTempMonStats: ; 50b7b
|
||||
; Print TempMon'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, TempMonAttack
|
||||
lb bc, 2, 3
|
||||
call .PrintStat
|
||||
ld de, TempMonDefense
|
||||
call .PrintStat
|
||||
ld de, TempMonSpclAtk
|
||||
call .PrintStat
|
||||
ld de, TempMonSpclDef
|
||||
call .PrintStat
|
||||
ld de, TempMonSpeed
|
||||
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 (CurPartyMon/CurOTMon/CurWildMon).
|
||||
; When calling this function, a should be set to an appropriate MonType 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, PartyMon1DVs
|
||||
ld bc, PARTYMON_STRUCT_LENGTH
|
||||
ld a, [MonType]
|
||||
and a
|
||||
jr z, .PartyMon
|
||||
|
||||
; 1: OTPartyMon
|
||||
ld hl, OTPartyMon1DVs
|
||||
dec a
|
||||
jr z, .PartyMon
|
||||
|
||||
; 2: sBoxMon
|
||||
ld hl, sBoxMon1DVs
|
||||
ld bc, BOXMON_STRUCT_LENGTH
|
||||
dec a
|
||||
jr z, .sBoxMon
|
||||
|
||||
; 3: Unknown
|
||||
ld hl, TempMonDVs
|
||||
dec a
|
||||
jr z, .DVs
|
||||
|
||||
; else: WildMon
|
||||
ld hl, EnemyMonDVs
|
||||
jr .DVs
|
||||
|
||||
; Get our place in the party/box.
|
||||
|
||||
.PartyMon:
|
||||
.sBoxMon
|
||||
ld a, [CurPartyMon]
|
||||
call AddNTimes
|
||||
|
||||
.DVs:
|
||||
|
||||
; sBoxMon data is read directly from SRAM.
|
||||
ld a, [MonType]
|
||||
cp BOXMON
|
||||
ld a, 1
|
||||
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, [MonType]
|
||||
cp BOXMON
|
||||
call z, CloseSRAM
|
||||
|
||||
; We need the gender ratio to do anything with this.
|
||||
push bc
|
||||
ld a, [CurPartySpecies]
|
||||
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, [Buffer1]
|
||||
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, TempMonMoves
|
||||
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
|
||||
callab GetMaxPPOfMove
|
||||
pop hl
|
||||
pop af
|
||||
ld [hl], a
|
||||
pop de
|
||||
pop hl
|
||||
push hl
|
||||
ld bc, TempMonPP - (TempMonMoves + 1)
|
||||
add hl, bc
|
||||
ld a, [hl]
|
||||
and $3f
|
||||
ld [StringBuffer1 + 4], a
|
||||
ld h, d
|
||||
ld l, e
|
||||
push hl
|
||||
ld de, StringBuffer1 + 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, [Buffer1]
|
||||
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
|
||||
|
||||
Function50cd0: ; 50cd0
|
||||
; XXX
|
||||
.loop
|
||||
ld [hl], $32
|
||||
inc hl
|
||||
ld [hl], $3e
|
||||
dec hl
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
||||
Predef22: ; unreferenced predef
|
||||
push hl
|
||||
push hl
|
||||
ld hl, PartyMonNicknames
|
||||
ld a, [CurPartyMon]
|
||||
call GetNick
|
||||
pop hl
|
||||
call PlaceString
|
||||
call CopyPkmnToTempMon
|
||||
pop hl
|
||||
ld a, [CurPartySpecies]
|
||||
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 [Buffer1] 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 [CurSpecies], a
|
||||
ld a, MOVE_NAME
|
||||
ld [wNamedObjectTypeBuffer], a
|
||||
call GetName
|
||||
ld de, StringBuffer1
|
||||
pop hl
|
||||
push bc
|
||||
call PlaceString
|
||||
pop bc
|
||||
ld a, b
|
||||
ld [wNumMoves], a
|
||||
inc b
|
||||
pop hl
|
||||
push bc
|
||||
ld a, [Buffer1]
|
||||
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, [Buffer1]
|
||||
ld c, a
|
||||
ld b, 0
|
||||
add hl, bc
|
||||
pop af
|
||||
inc a
|
||||
cp NUM_MOVES
|
||||
jr nz, .nonmove_loop
|
||||
|
||||
.done
|
||||
ret
|
||||
Reference in New Issue
Block a user