Organize the engine/ directory
This is an informed attempt at reorganizing the engine/ directory by creating categorized subdirectories, in order to make it easier to navigate and find things. The directories created are as follows: * engine/game: Contains all "minigames", things like the unown puzzle and slot machine. * engine/gfx: Contains all handling of graphics. From loading palettes to playing animations. * engine/link: Contains all multiplayer functionality. * engine/menu: Contains all generic/misc. menus and menu code. Other, more specialized menus are in their own subdirectories (pokedex, pokegear, party menu, etc). * engine/overworld: Contains all handling of the overworld. From loading and connecting maps to wild encounters and the scripting engine. * engine/pokegear: In the same vein as engine/pokedex, except it could use some more splitting up. * engine/pokemon: Contains everything related to manipulating pokemon data. From the pokemon storage system to evolution and mail. * engine/printer: Contains everything related to printing things as well as the printer communication. * engine/title: Contains intro sequences, title screens and credits.
This commit is contained in:
485
engine/pokemon/mon_stats.asm
Normal file
485
engine/pokemon/mon_stats.asm
Normal file
@@ -0,0 +1,485 @@
|
||||
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/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, 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
|
Reference in New Issue
Block a user