ref: bbb86671eaac735fe6ef57da01ef79fd16953238
parent: c34156c5fb333864c1ae85036ea587c9f615a65a
author: xCrystal <rgr.crystal@gmail.com>
date: Fri Jul 24 06:49:33 EDT 2015
Use more wram labels and other constants
--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -1,13 +1,17 @@
MAX_LEVEL EQU 100
-NUM_MOVES EQU 4
+NUM_MOVES EQU 4
+NUM_STATS EQU 5
+NUM_STAT_MODS EQU 8
+NUM_DVS EQU 2
+
PARTY_LENGTH EQU 6
MONS_PER_BOX EQU 20
NUM_BOXES EQU 12
-HOF_MON EQU $10
-HOF_TEAM EQU PARTY_LENGTH * HOF_MON
+HOF_MON EQU $10
+HOF_TEAM EQU PARTY_LENGTH * HOF_MON
HOF_TEAM_CAPACITY EQU 50
A_BUTTON EQU %00000001
--- a/data/baseStats/rhydon.asm
+++ b/data/baseStats/rhydon.asm
@@ -1,3 +1,4 @@
+MonBaseStats:
RhydonBaseStats: ; 39002 (e:5002)
db DEX_RHYDON ; pokedex id
db 105 ; base hp
@@ -27,3 +28,4 @@
db %10001000
db %00110010
db 0 ; padding
+MonBaseStatsEnd:
\ No newline at end of file
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -1696,19 +1696,19 @@
; copies from party data to battle mon data when sending out a new player mon
LoadBattleMonFromParty: ; 3cba6 (f:4ba6)
ld a, [wWhichPokemon]
- ld bc, $2c
+ ld bc, wPartyMon2 - wPartyMon1
ld hl, wPartyMon1Species
call AddNTimes
ld de, wBattleMonSpecies
- ld bc, $c
+ ld bc, wBattleMonDVs - wBattleMonSpecies
call CopyData
- ld bc, $f
+ ld bc, wPartyMon1DVs - wPartyMon1OTID
add hl, bc
ld de, wBattleMonDVs
- ld bc, $2
+ ld bc, NUM_DVS
call CopyData
ld de, wBattleMonPP
- ld bc, $4
+ ld bc, NUM_MOVES
call CopyData
ld de, wBattleMonLevel
ld bc, $b
@@ -1724,12 +1724,12 @@
call CopyData
ld hl, wBattleMonLevel
ld de, wPlayerMonUnmodifiedLevel ; block of memory used for unmodified stats
- ld bc, $b
+ ld bc, 1 + NUM_STATS * 2
call CopyData
call ApplyBurnAndParalysisPenaltiesToPlayer
call ApplyBadgeStatBoosts
ld a, $7 ; default stat modifier
- ld b, $8
+ ld b, NUM_STAT_MODS
ld hl, wPlayerMonAttackMod
.statModLoop
ld [hli], a
@@ -1740,19 +1740,19 @@
; copies from enemy party data to current enemy mon data when sending out a new enemy mon
LoadEnemyMonFromParty: ; 3cc13 (f:4c13)
ld a, [wWhichPokemon]
- ld bc, $2c
+ ld bc, wEnemyMon2 - wEnemyMon1
ld hl, wEnemyMons
call AddNTimes
ld de, wEnemyMonSpecies
- ld bc, $c
+ ld bc, wEnemyMonDVs - wEnemyMonSpecies
call CopyData
- ld bc, $f
+ ld bc, wEnemyMon1DVs - wEnemyMon1OTID
add hl, bc
ld de, wEnemyMonDVs
- ld bc, $2
+ ld bc, NUM_DVS
call CopyData
ld de, wEnemyMonPP
- ld bc, $4
+ ld bc, NUM_MOVES
call CopyData
ld de, wEnemyMonLevel
ld bc, $b
@@ -1768,12 +1768,12 @@
call CopyData
ld hl, wEnemyMonLevel
ld de, wEnemyMonUnmodifiedLevel ; block of memory used for unmodified stats
- ld bc, $b
+ ld bc, 1 + NUM_STATS * 2
call CopyData
call ApplyBurnAndParalysisPenaltiesToEnemy
ld hl, W_MONHBASESTATS
ld de, wEnemyMonBaseStats
- ld b, $5
+ ld b, NUM_STATS
.copyBaseStatsLoop
ld a, [hli]
ld [de], a
@@ -1781,7 +1781,7 @@
dec b
jr nz, .copyBaseStatsLoop
ld a, $7 ; default stat modifier
- ld b, $8
+ ld b, NUM_STAT_MODS
ld hl, wEnemyMonStatMods
.statModLoop
ld [hli], a
@@ -6300,7 +6300,7 @@
predef LoadMovePPs
ld hl, W_MONHBASESTATS
ld de, wEnemyMonBaseStats
- ld b, $5
+ ld b, NUM_STATS
.copyBaseStatsLoop
ld a, [hli]
ld [de], a
@@ -6331,10 +6331,10 @@
predef FlagActionPredef ; mark this mon as seen in the pokedex
ld hl, wEnemyMonLevel
ld de, wEnemyMonUnmodifiedLevel
- ld bc, $b
+ ld bc, 1 + NUM_STATS * 2
call CopyData
ld a, $7 ; default stat mod
- ld b, $8 ; number of stat mods
+ ld b, NUM_STAT_MODS ; number of stat mods
ld hl, wEnemyMonStatMods
.statModLoop
ld [hli], a
@@ -6561,7 +6561,7 @@
call CalculateModifiedStat
inc c
ld a, c
- cp 4
+ cp NUM_STATS - 1
jr nz, .loop
ret
--- a/engine/battle/draw_hud_pokeball_gfx.asm
+++ b/engine/battle/draw_hud_pokeball_gfx.asm
@@ -90,7 +90,7 @@
.done
ld a, b
ld [de], a
- ld bc, $0028 ; rest of mon struct
+ ld bc, wPartyMon2 - wPartyMon1 - 4 ; rest of mon struct
add hl, bc
ret
--- a/engine/battle/experience.asm
+++ b/engine/battle/experience.asm
@@ -26,7 +26,7 @@
ld d, h
ld e, l
ld hl, wEnemyMonBaseStats
- ld c, $5
+ ld c, NUM_STATS
.gainStatExpLoop
ld a, [hli]
ld b, a ; enemy mon base stat
@@ -66,7 +66,7 @@
ld [H_DIVISOR], a
ld b, 4
call Divide
- ld hl, -((wPartyMon1HPExp + 1) - wPartyMon1OTID + 4 * 2)
+ ld hl, wPartyMon1OTID - (wPartyMon1DVs - 1)
add hl, de
ld b, [hl] ; party mon OTID
inc hl
@@ -220,7 +220,7 @@
add hl, bc
push hl
ld de, wBattleMonLevel
- ld bc, $b ; size of stats
+ ld bc, 1 + NUM_STATS * 2 ; size of stats
call CopyData
pop hl
ld a, [W_PLAYERBATTSTATUS3]
@@ -228,7 +228,7 @@
jr nz, .recalcStatChanges
; the mon is not transformed, so update the unmodified stats
ld de, wPlayerMonUnmodifiedLevel
- ld bc, $b
+ ld bc, 1 + NUM_STATS * 2
call CopyData
.recalcStatChanges
xor a
@@ -308,7 +308,7 @@
ret c ; return if only one mon is gaining exp
ld [wd11e], a ; store number of mons gaining exp
ld hl, wEnemyMonBaseStats
- ld c, $7
+ ld c, wEnemyMonBaseExp + 1 - wEnemyMonBaseStats
.divideLoop
xor a
ld [H_DIVIDEND], a
--- a/engine/evos_moves.asm
+++ b/engine/evos_moves.asm
@@ -161,7 +161,7 @@
ld a, [wd11e]
dec a
ld hl, BaseStats
- ld bc, $1c
+ ld bc, MonBaseStatsEnd - MonBaseStats
call AddNTimes
ld de, W_MONHEADER
call CopyData
--- a/engine/items/items.asm
+++ b/engine/items/items.asm
@@ -2417,11 +2417,11 @@
ld b,a ; b = normal max PP
pop hl
push bc
- ld bc,21 ; PP offset if not player's in-battle pokemon data
+ ld bc,wPartyMon1PP - wPartyMon1Moves ; PP offset if not player's in-battle pokemon data
ld a,[wMonDataLocation]
cp a,4 ; player's in-battle pokemon?
jr nz,.addPPOffset
- ld bc,17 ; PP offset if player's in-battle pokemon data
+ ld bc,wBattleMonPP - wBattleMonMoves ; PP offset if player's in-battle pokemon data
.addPPOffset
add hl,bc
ld a,[hl] ; a = current PP
@@ -2601,7 +2601,7 @@
pop hl
ld d, h
ld e, l
- ld bc, $fff5
+ ld bc, -$b
add hl, bc
pop bc
dec b
@@ -2635,7 +2635,7 @@
pop hl
ld d, h
ld e, l
- ld bc, $fff5
+ ld bc, -$b
add hl, bc
pop bc
dec b
@@ -2669,7 +2669,7 @@
pop hl
ld d, h
ld e, l
- ld bc, $ffdf
+ ld bc, wBoxMon1 - wBoxMon2
add hl, bc
pop bc
dec b
@@ -2679,7 +2679,7 @@
ld [wEnemyMonBoxLevel], a
ld hl, wEnemyMon
ld de, wBoxMon1
- ld bc, $c
+ ld bc, wEnemyMonDVs - wEnemyMon
call CopyData
ld hl, wPlayerID
ld a, [hli]
@@ -2703,7 +2703,7 @@
ld [de], a
inc de
xor a
- ld b, $a
+ ld b, NUM_STATS * 2
.asm_e89f
ld [de], a
inc de
@@ -2716,7 +2716,7 @@
ld a, [hli]
ld [de], a
ld hl, wEnemyMonPP
- ld b, $4
+ ld b, NUM_MOVES
.asm_e8b1
ld a, [hli]
inc de
--- a/engine/learn_move.asm
+++ b/engine/learn_move.asm
@@ -10,12 +10,12 @@
DontAbandonLearning: ; 6e5b (1:6e5b)
ld hl, wPartyMon1Moves
- ld bc, $2c
+ ld bc, wPartyMon2Moves - wPartyMon1Moves
ld a, [wWhichPokemon]
call AddNTimes
ld d, h
ld e, l
- ld b, $4
+ ld b, NUM_MOVES
.asm_6e6b
ld a, [hl]
and a
@@ -38,7 +38,7 @@
.asm_6e8b
ld a, [wMoveNum]
ld [hl], a
- ld bc, $15
+ ld bc, wPartyMon1PP - wPartyMon1Moves
add hl, bc
push hl
push de
@@ -66,10 +66,10 @@
ld de, wBattleMonMoves
ld bc, NUM_MOVES
call CopyData
- ld bc, $11
+ ld bc, wPartyMon1PP - wPartyMon1OTID
add hl, bc
ld de, wBattleMonPP
- ld bc, $4
+ ld bc, NUM_MOVES
call CopyData
jp PrintLearnedMove
@@ -108,7 +108,7 @@
ld a, [wCurrentMenuItem]
rra
ret c
- ld bc, $fffc
+ ld bc, - NUM_MOVES
add hl, bc
push hl
ld de, wMoves
--- a/home.asm
+++ b/home.asm
@@ -583,11 +583,11 @@
predef IndexToPokedex ; convert pokemon ID in [wd11e] to pokedex number
ld a,[wd11e]
dec a
- ld bc,28
+ ld bc,MonBaseStatsEnd - MonBaseStats
ld hl,BaseStats
call AddNTimes
ld de,W_MONHEADER
- ld bc,28
+ ld bc,MonBaseStatsEnd - MonBaseStats
call CopyData
jr .done
.specialID
@@ -601,7 +601,7 @@
.mew
ld hl,MewBaseStats
ld de,W_MONHEADER
- ld bc,28
+ ld bc,MonBaseStatsEnd - MonBaseStats
ld a,BANK(MewBaseStats)
call FarCopyData
.done
@@ -3611,7 +3611,7 @@
ld [de], a
inc de
ld a, c
- cp $5
+ cp NUM_STATS
jr nz, .statsLoop
ret
@@ -3662,7 +3662,7 @@
srl c
pop hl
push bc
- ld bc, $b ; skip to stat IV values
+ ld bc, wPartyMon1DVs - (wPartyMon1HPExp - 1) ; also wEnemyMonDVs - wEnemyMonHP
add hl, bc
pop bc
ld a, c
@@ -3756,7 +3756,7 @@
call Divide ; (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100
ld a, c
cp $1
- ld a, $5
+ ld a, 5 ; + 5 for non-HP stat
jr nz, .notHPStat
ld a, [W_CURENEMYLVL]
ld b, a
@@ -3768,7 +3768,7 @@
inc a
ld [H_MULTIPLICAND+1], a ; HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + Level
.noCarry3
- ld a, $a
+ ld a, 10 ; +10 for HP stat
.notHPStat
ld b, a
ld a, [H_MULTIPLICAND+2]
@@ -3780,17 +3780,17 @@
ld [H_MULTIPLICAND+1], a ; HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + Level + 10
.noCarry4
ld a, [H_MULTIPLICAND+1] ; check for overflow (>999)
- cp $4
+ cp 999 / $100 + 1
jr nc, .overflow
- cp $3
+ cp 999 / $100
jr c, .noOverflow
ld a, [H_MULTIPLICAND+2]
- cp $e8
+ cp 999 % $100 + 1
jr c, .noOverflow
.overflow
- ld a, $3 ; overflow: cap at 999
+ ld a, 999 / $100 ; overflow: cap at 999
ld [H_MULTIPLICAND+1], a
- ld a, $e7
+ ld a, 999 % $100
ld [H_MULTIPLICAND+2], a
.noOverflow
pop bc
--- a/main.asm
+++ b/main.asm
@@ -3691,7 +3691,7 @@
inc de
jr .copyMonTypesAndMoves
.copyEnemyMonData
- ld bc, wPartyMon1DVs - wPartyMon1
+ ld bc, wEnemyMon1DVs - wEnemyMon1
add hl, bc
ld a, [wEnemyMonDVs] ; copy IVs from cur enemy mon
ld [hli], a
@@ -3762,7 +3762,7 @@
ld a, [hExperience + 2]
ld [de], a
xor a
- ld b, $a
+ ld b, NUM_STATS * 2
.writeEVsLoop ; set all EVs to 0
inc de
ld [de], a
@@ -3786,7 +3786,7 @@
jr .done
.calcFreshStats
pop hl
- ld bc, $10
+ ld bc, wPartyMon1HPExp - 1 - wPartyMon1
add hl, bc
ld b, $0
call CalcStats ; calculate fresh set of stats
@@ -3798,7 +3798,7 @@
call GetPredefRegisters
; fallthrough
AddPartyMon_WriteMovePP: ; f476 (3:7476)
- ld b, $4
+ ld b, NUM_MOVES
.pploop
ld a, [hli] ; read move ID
and a