mirror of
https://github.com/pret/pokegold.git
synced 2026-08-09 11:47:26 -05:00
Partially disassemble engine/pokemon/mon_stats.asm
This commit is contained in:
parent
768e0477f9
commit
cc8f2afe78
476
engine/pokemon/mon_stats.asm
Executable file
476
engine/pokemon/mon_stats.asm
Executable file
|
|
@ -0,0 +1,476 @@
|
|||
DrawPlayerHP:
|
||||
ld a, 1
|
||||
jr DrawHP
|
||||
|
||||
DrawEnemyHP:
|
||||
ld a, 2
|
||||
|
||||
DrawHP:
|
||||
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
|
||||
|
||||
StatsScreenInit:
|
||||
dr $50bae, $5128f
|
||||
|
||||
PrintTempMonStats:
|
||||
; 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:
|
||||
push hl
|
||||
call PrintNum
|
||||
pop hl
|
||||
ld de, SCREEN_WIDTH * 2
|
||||
add hl, de
|
||||
ret
|
||||
|
||||
.StatNames:
|
||||
db "ATTACK"
|
||||
next "DEFENSE"
|
||||
next "SPCL.ATK"
|
||||
next "SPCL.DEF"
|
||||
next "SPEED"
|
||||
next "@"
|
||||
|
||||
GetGender:
|
||||
; Return the gender of a given monster (wCurPartyMon/wCurOTMon/wCurWildMon).
|
||||
; 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, OpenSRAM
|
||||
|
||||
; 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 GENDER_UNKNOWN
|
||||
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:
|
||||
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, wTempPP
|
||||
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
|
||||
ld [hli], a
|
||||
ld [hld], a
|
||||
add hl, de
|
||||
dec c
|
||||
jr nz, .load_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:
|
||||
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:
|
||||
db "FNT@"
|
||||
|
||||
CopyStatusString:
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
ld a, [de]
|
||||
inc de
|
||||
ld [hli], a
|
||||
ld a, [de]
|
||||
ld [hl], a
|
||||
ret
|
||||
|
||||
PlaceNonFaintStatus:
|
||||
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:
|
||||
; 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
|
||||
22
main.asm
22
main.asm
|
|
@ -368,28 +368,8 @@ INCLUDE "engine/events/sacred_ash.asm"
|
|||
INCLUDE "engine/pokemon/tempmon.asm"
|
||||
INCLUDE "engine/pokemon/types.asm"
|
||||
INCLUDE "engine/battle/unreferenced_getgen1trainerclassname.asm"
|
||||
INCLUDE "engine/pokemon/mon_stats.asm"
|
||||
|
||||
DrawPlayerHP::
|
||||
dr $50b3d, $50b41
|
||||
DrawEnemyHP::
|
||||
dr $50b41, $50bae
|
||||
StatsScreenInit::
|
||||
dr $50bae, $5128f
|
||||
|
||||
PrintTempMonStats::
|
||||
dr $5128f, $512f1
|
||||
GetGender::
|
||||
dr $512f1, $51364
|
||||
ListMovePP::
|
||||
dr $51364, $513e4
|
||||
Unused_PlaceEnemyHPLevel::
|
||||
dr $513e4, $51413
|
||||
PlaceStatusString::
|
||||
dr $51413, $51437
|
||||
PlaceNonFaintStatus::
|
||||
dr $51437, $51478
|
||||
ListMoves::
|
||||
dr $51478, $514c2
|
||||
InitList::
|
||||
dr $514c2, $51524
|
||||
CalcLevel::
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user