shithub: pokecrystal

Download patch

ref: 557ce82073dc7c84ad701099713b00bcb7194860
parent: cb32c895e479f4a470ca7fb113dc8db870302a5e
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Sun Aug 26 09:49:38 EDT 2018

hQuotient is a four-byte buffer (fixes #558)

--- a/engine/battle/ai/items.asm
+++ b/engine/battle/ai/items.asm
@@ -763,9 +763,9 @@
 	ldh [hDividend + 1], a
 	ld b, 2
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld c, a
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	ld b, a
 	ld hl, wEnemyMonHP + 1
 	ld a, [hld]
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -3715,9 +3715,9 @@
 	inc a
 	ld [wNumFleeAttempts], a
 	ld a, [hli]
-	ldh [hPartyMon1Speed + 0], a
+	ldh [hMultiplicand + 1], a
 	ld a, [hl]
-	ldh [hPartyMon1Speed + 1], a
+	ldh [hMultiplicand + 2], a
 	ld a, [de]
 	inc de
 	ldh [hEnemyMonSpeed + 0], a
@@ -3724,7 +3724,7 @@
 	ld a, [de]
 	ldh [hEnemyMonSpeed + 1], a
 	call Call_LoadTempTileMapToTileMap
-	ld de, hPartyMon1Speed
+	ld de, hMultiplicand + 1
 	ld hl, hEnemyMonSpeed
 	ld c, 2
 	call CompareBytes
@@ -3731,7 +3731,7 @@
 	jr nc, .can_escape
 
 	xor a
-	ldh [hMultiplicand], a
+	ldh [hMultiplicand + 0], a
 	ld a, 32
 	ldh [hMultiplier], a
 	call Multiply
@@ -3751,7 +3751,7 @@
 	ldh [hDivisor], a
 	ld b, 2
 	call Divide
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	and a
 	jr nz, .can_escape
 	ld a, [wNumFleeAttempts]
@@ -3760,9 +3760,9 @@
 	dec c
 	jr z, .cant_escape_2
 	ld b, 30
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	add b
-	ldh [hQuotient + 2], a
+	ldh [hQuotient + 3], a
 	jr c, .can_escape
 	jr .loop
 
@@ -3769,7 +3769,7 @@
 .cant_escape_2
 	call BattleRandom
 	ld b, a
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	cp b
 	jr nc, .can_escape
 	ld a, BATTLEPLAYERACTION_USEITEM
@@ -4787,7 +4787,7 @@
 
 .not_fainted
 	xor a
-	ldh [hMultiplicand], a
+	ldh [hMultiplicand + 0], a
 	ld a, HP_BAR_LENGTH_PX
 	ldh [hMultiplier], a
 	call Multiply
@@ -4824,7 +4824,7 @@
 	ld a, 2
 	ld b, a
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld e, a
 	ld a, HP_BAR_LENGTH
 	ld d, a
@@ -6723,22 +6723,22 @@
 	pop hl
 
 ; Cap at 999.
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	sub LOW(MAX_STAT_VALUE)
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	sbc HIGH(MAX_STAT_VALUE)
 	jp c, .okay3
 
 	ld a, HIGH(MAX_STAT_VALUE)
-	ldh [hQuotient + 1], a
-	ld a, LOW(MAX_STAT_VALUE)
 	ldh [hQuotient + 2], a
+	ld a, LOW(MAX_STAT_VALUE)
+	ldh [hQuotient + 3], a
 
 .okay3
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	ld [hli], a
 	ld b, a
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld [hl], a
 	or b
 	jr nz, .okay4
@@ -7095,9 +7095,9 @@
 	ld a, [hl]
 	cp LUCKY_EGG
 	call z, BoostExp
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld [wStringBuffer2 + 1], a
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	ld [wStringBuffer2], a
 	ld a, [wCurPartyMon]
 	ld hl, wPartyMonNicknames
@@ -7105,9 +7105,9 @@
 	ld hl, Text_MonGainedExpPoint
 	call BattleTextBox
 	ld a, [wStringBuffer2 + 1]
-	ldh [hQuotient + 2], a
+	ldh [hQuotient + 3], a
 	ld a, [wStringBuffer2]
-	ldh [hQuotient + 1], a
+	ldh [hQuotient + 2], a
 	pop bc
 	call AnimateExpBar
 	push bc
@@ -7116,11 +7116,11 @@
 	ld hl, MON_EXP + 2
 	add hl, bc
 	ld d, [hl]
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	add d
 	ld [hld], a
 	ld d, [hl]
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	adc d
 	ld [hl], a
 	jr nc, .skip2
@@ -7148,11 +7148,11 @@
 	ld hl, MON_EXP + 2
 	add hl, bc
 	push bc
-	ldh a, [hQuotient]
-	ld b, a
 	ldh a, [hQuotient + 1]
-	ld c, a
+	ld b, a
 	ldh a, [hQuotient + 2]
+	ld c, a
+	ldh a, [hQuotient + 3]
 	ld d, a
 	ld a, [hld]
 	sub d
@@ -7371,7 +7371,7 @@
 	ldh [hDivisor], a
 	ld b, 2
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld [hli], a
 	dec c
 	jr nz, .count_loop2
@@ -7646,7 +7646,7 @@
 	ldh [hDivisor], a
 	call Divide
 
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld hl, JumpText_GoMon
 	cp 70
 	jr nc, .skip_to_textbox
@@ -7728,7 +7728,7 @@
 	call Divide
 	pop bc
 	pop de
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld hl, TextJump_ThatsEnoughComeBack
 	and a
 	ret z
@@ -7869,7 +7869,7 @@
 	xor a
 	ld [hl], a
 ; multiply by 64
-	ld a, $40
+	ld a, 64
 	ldh [hMultiplier], a
 	call Multiply
 	pop af
@@ -7897,7 +7897,7 @@
 	ldh [hDivisor], a
 	ld b, 4
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld b, a
 	ld a, $40
 	sub b
--- a/engine/battle/effect_commands.asm
+++ b/engine/battle/effect_commands.asm
@@ -1368,9 +1368,9 @@
 	ldh [hDivisor], a
 	ld b, 4
 	call Divide
-	ldh a, [hQuotient + 1]
-	ld b, a
 	ldh a, [hQuotient + 2]
+	ld b, a
+	ldh a, [hQuotient + 3]
 	or b
 	jr nz, .ok
 
@@ -1469,7 +1469,7 @@
 	ld b, 4
 	call Divide
 	pop bc
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld [wTypeMatchup], a
 	jr .TypesLoop
 
@@ -1547,10 +1547,10 @@
 	call Divide
 
 ; ...to get .85-1.00x damage.
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	ld hl, wCurDamage
 	ld [hli], a
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld [hl], a
 	ret
 
@@ -1832,14 +1832,14 @@
 	ld b, 4
 	call Divide
 	; minimum accuracy is $0001
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld b, a
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	or b
 	jr nz, .min_accuracy
-	ldh [hQuotient + 1], a
-	ld a, 1
 	ldh [hQuotient + 2], a
+	ld a, 1
+	ldh [hQuotient + 3], a
 
 .min_accuracy
 	; do the same thing to the target's evasion
@@ -1848,9 +1848,9 @@
 	jr nz, .accuracy_loop
 
 	; if the result is more than 2 bytes, max out at 100%
-	ldh a, [hQuotient + 1]
-	and a
 	ldh a, [hQuotient + 2]
+	and a
+	ldh a, [hQuotient + 3]
 	jr z, .finish_accuracy
 	ld a, $ff
 
@@ -2984,7 +2984,7 @@
 	ld a, e
 	add a
 	jr nc, .level_not_overflowing
-	ld [hl], $1
+	ld [hl], 1
 .level_not_overflowing
 	inc hl
 	ld [hli], a
@@ -2993,7 +2993,7 @@
 	ld a, 5
 	ld [hld], a
 	push bc
-	ld b, $4
+	ld b, 4
 	call Divide
 	pop bc
 
@@ -3012,7 +3012,7 @@
 
 ; / Defense
 	ld [hl], c
-	ld b, $4
+	ld b, 4
 	call Divide
 
 ; / 50
@@ -3146,11 +3146,11 @@
 	ret z
 
 ; x2
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	add a
 	ldh [hProduct + 3], a
 
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	rl a
 	ldh [hProduct + 2], a
 
@@ -3257,7 +3257,7 @@
 	ldh [hMultiplicand + 1], a
 	ld a, [hli]
 	ldh [hMultiplicand + 2], a
-	ld a, $30
+	ld a, 48
 	ldh [hMultiplier], a
 	call Multiply
 	ld a, [hli]
@@ -3288,7 +3288,7 @@
 .skip_to_divide
 	ld b, 4
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld b, a
 	ld hl, FlailReversalPower
 
@@ -4918,18 +4918,18 @@
 	ld b, 4
 	call Divide
 
-	ldh a, [hQuotient + 1]
-	ld b, a
 	ldh a, [hQuotient + 2]
+	ld b, a
+	ldh a, [hQuotient + 3]
 	or b
 	jr nz, .check_maxed_out
 
 	ld a, 1
-	ldh [hQuotient + 2], a
+	ldh [hQuotient + 3], a
 	jr .not_maxed_out
 
 .check_maxed_out
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	cp LOW(MAX_STAT_VALUE)
 	ld a, b
 	sbc HIGH(MAX_STAT_VALUE)
@@ -4936,16 +4936,16 @@
 	jr c, .not_maxed_out
 
 	ld a, LOW(MAX_STAT_VALUE)
-	ldh [hQuotient + 2], a
+	ldh [hQuotient + 3], a
 	ld a, HIGH(MAX_STAT_VALUE)
-	ldh [hQuotient + 1], a
+	ldh [hQuotient + 2], a
 
 .not_maxed_out
 	pop bc
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	ld [bc], a
 	inc bc
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld [bc], a
 	inc bc
 	pop hl
--- a/engine/battle/link_result.asm
+++ b/engine/battle/link_result.asm
@@ -100,10 +100,10 @@
 	ldh [hDivisor], a
 	ld b, $4
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	add e
 	ld e, a
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	adc d
 	ld d, a
 	dec hl
--- a/engine/battle/misc.asm
+++ b/engine/battle/misc.asm
@@ -119,14 +119,14 @@
 	ld b, 4
 	call Divide
 
-	ldh a, [hQuotient + 0]
+	ldh a, [hQuotient + 1]
 	and a
 	ld bc, -1
 	jr nz, .Update
 
-	ldh a, [hQuotient + 1]
-	ld b, a
 	ldh a, [hQuotient + 2]
+	ld b, a
+	ldh a, [hQuotient + 3]
 	ld c, a
 	or b
 	jr nz, .Update
--- a/engine/battle/move_effects/frustration.asm
+++ b/engine/battle/move_effects/frustration.asm
@@ -21,7 +21,7 @@
 	ldh [hDivisor], a
 	ld b, 4
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld d, a
 	pop bc
 	ret
--- a/engine/battle/move_effects/return.asm
+++ b/engine/battle/move_effects/return.asm
@@ -19,7 +19,7 @@
 	ldh [hDivisor], a
 	ld b, 4
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld d, a
 	pop bc
 	ret
--- a/engine/battle/read_trainer_party.asm
+++ b/engine/battle/read_trainer_party.asm
@@ -305,12 +305,12 @@
 	ld hl, hProduct
 	xor a
 	ld [hli], a
-	ld [hli], a
-	ld [hli], a
+	ld [hli], a ; hMultiplicand + 0
+	ld [hli], a ; hMultiplicand + 1
 	ld a, [wEnemyTrainerBaseReward]
-	ld [hli], a
+	ld [hli], a ; hMultiplicand + 2
 	ld a, [wCurPartyLevel]
-	ld [hl], a
+	ld [hl], a ; hMultiplier
 	call Multiply
 	ld hl, wBattleReward
 	xor a
--- a/engine/events/magikarp.asm
+++ b/engine/events/magikarp.asm
@@ -205,7 +205,7 @@
 	ldh [hDivisor], a
 	ld b, 2
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld c, a
 
 	; de = c + 100 × (2 + i)
--- a/engine/events/treemons.asm
+++ b/engine/events/treemons.asm
@@ -250,9 +250,9 @@
 	ld b, 2
 	call Divide
 
-	ldh a, [hQuotient + 1]
-	ldh [hDividend], a
 	ldh a, [hQuotient + 2]
+	ldh [hDividend], a
+	ldh a, [hQuotient + 3]
 	ldh [hDividend + 1], a
 	ld a, 10
 	ldh [hDivisor], a
--- a/engine/gfx/load_pics.asm
+++ b/engine/gfx/load_pics.asm
@@ -43,7 +43,7 @@
 	call Divide
 
 ; Increment to get 1-26
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	inc a
 	ld [wUnownLetter], a
 	ret
--- a/engine/items/item_effects.asm
+++ b/engine/items/item_effects.asm
@@ -310,10 +310,10 @@
 
 	ld a, b
 	ldh [hDivisor], a
-	ld b, $4
+	ld b, 4
 	call Divide
 
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	and a
 	jr nz, .statuscheck
 	ld a, 1
@@ -1313,7 +1313,7 @@
 	ld a, MON_EXP
 	call GetPartyParamLocation
 
-	ldh a, [hMultiplicand]
+	ldh a, [hMultiplicand + 0]
 	ld [hli], a
 	ldh a, [hMultiplicand + 1]
 	ld [hli], a
@@ -1963,9 +1963,9 @@
 	ldh [hDivisor], a
 	ld b, 2
 	call Divide
-	ldh a, [hQuotient + 1]
-	ld d, a
 	ldh a, [hQuotient + 2]
+	ld d, a
+	ldh a, [hQuotient + 3]
 	ld e, a
 	pop bc
 	ret
@@ -2814,7 +2814,7 @@
 	; Since this would overflow into bit 6, we prevent that from happening
 	; by decreasing the extra amount of PP each PP Up provides, resulting
 	; in a maximum of 61.
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	cp $8
 	jr c, .okay
 	ld a, $7
--- a/engine/link/link.asm
+++ b/engine/link/link.asm
@@ -786,10 +786,10 @@
 	pop bc
 	pop de
 
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	ld [de], a
 	inc de
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld [de], a
 	inc de
 	ld h, b
@@ -1059,10 +1059,10 @@
 	predef CalcMonStatC
 	pop bc
 	pop hl
-	ldh a, [hQuotient + 1]
-	ld [hli], a
 	ldh a, [hQuotient + 2]
 	ld [hli], a
+	ldh a, [hQuotient + 3]
+	ld [hli], a
 	push hl
 	push bc
 	ld hl, MON_STAT_EXP - 1
@@ -1072,9 +1072,9 @@
 	predef CalcMonStatC
 	pop bc
 	pop hl
-	ldh a, [hQuotient + 1]
-	ld [hli], a
 	ldh a, [hQuotient + 2]
+	ld [hli], a
+	ldh a, [hQuotient + 3]
 	ld [hli], a
 	push hl
 	ld hl, $1b
--- a/engine/math/math.asm
+++ b/engine/math/math.asm
@@ -175,15 +175,15 @@
 	ldh [hRemainder], a
 
 	ldh a, [hMathBuffer + 4]
-	ldh [hQuotient + 2], a
+	ldh [hQuotient + 3], a
 
 	ldh a, [hMathBuffer + 3]
-	ldh [hQuotient + 1], a
+	ldh [hQuotient + 2], a
 
 	ldh a, [hMathBuffer + 2]
-	ldh [hQuotient + 0], a
+	ldh [hQuotient + 1], a
 
 	ldh a, [hMathBuffer + 1]
-	ldh [hQuotient - 1], a
+	ldh [hQuotient + 0], a
 
 	ret
--- a/engine/pokemon/experience.asm
+++ b/engine/pokemon/experience.asm
@@ -58,11 +58,11 @@
 	ld b, 4
 	call Divide
 ; Push the cubic term to the stack
-	ldh a, [hQuotient + 0]
-	push af
 	ldh a, [hQuotient + 1]
 	push af
 	ldh a, [hQuotient + 2]
+	push af
+	ldh a, [hQuotient + 3]
 	push af
 ; Square the level and multiply by the lower 7 bits of c
 	call .LevelSquared
--- a/engine/pokemon/health.asm
+++ b/engine/pokemon/health.asm
@@ -91,7 +91,7 @@
 	ldh [hDivisor], a
 	ld b, 4
 	call Divide
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld e, a
 	pop hl
 	and a
--- a/engine/pokemon/mon_menu.asm
+++ b/engine/pokemon/mon_menu.asm
@@ -766,10 +766,10 @@
 	call Divide
 	ld a, MON_HP + 1
 	call GetPartyParamLocation
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	sub [hl]
 	dec hl
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	sbc [hl]
 	ret
 
--- a/engine/pokemon/move_mon.asm
+++ b/engine/pokemon/move_mon.asm
@@ -1570,11 +1570,11 @@
 	jr nz, .not_hp
 	ld a, [wCurPartyLevel]
 	ld b, a
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	add b
 	ldh [hMultiplicand + 2], a
 	jr nc, .no_overflow_3
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	inc a
 	ldh [hMultiplicand + 1], a
 
@@ -1583,21 +1583,21 @@
 
 .not_hp
 	ld b, a
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	add b
 	ldh [hMultiplicand + 2], a
 	jr nc, .no_overflow_4
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	inc a
 	ldh [hMultiplicand + 1], a
 
 .no_overflow_4
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	cp HIGH(MAX_STAT_VALUE + 1) + 1
 	jr nc, .max_stat
 	cp HIGH(MAX_STAT_VALUE + 1)
 	jr c, .stat_value_okay
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	cp LOW(MAX_STAT_VALUE + 1)
 	jr c, .stat_value_okay
 
--- a/engine/pokemon/stats_screen.asm
+++ b/engine/pokemon/stats_screen.asm
@@ -636,15 +636,15 @@
 	farcall CalcExpAtLevel
 	ld hl, wTempMonExp + 2
 	ld hl, wTempMonExp + 2
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	sub [hl]
 	dec hl
 	ld [wBuffer3], a
-	ldh a, [hQuotient + 1]
+	ldh a, [hQuotient + 2]
 	sbc [hl]
 	dec hl
 	ld [wBuffer2], a
-	ldh a, [hQuotient]
+	ldh a, [hQuotient + 1]
 	sbc [hl]
 	ld [wBuffer1], a
 	ret
--- a/hram.asm
+++ b/hram.asm
@@ -63,9 +63,7 @@
 
 UNION ; ffb3
 ; miscellaneous
-	ds 2
-hPartyMon1Speed:: dw ; ffb5
-	ds 5
+	ds 9
 hMGStatusFlags:: db ; ffbc
 
 NEXTU ; ffb3
@@ -85,8 +83,7 @@
 
 NEXTU ; ffb3
 ; results of Divide
-	ds 1
-hQuotient:: ds 3 ; ffb4
+hQuotient:: ds 4 ; ffb3
 hRemainder:: db ; ffb7
 
 NEXTU ; ffb3
--- a/mobile/mobile_12.asm
+++ b/mobile/mobile_12.asm
@@ -1799,7 +1799,7 @@
 	sla b
 	or b
 	ld [hld], a
-	ldh a, [hQuotient + 2]
+	ldh a, [hQuotient + 3]
 	ld c, 10
 	call SimpleDivide
 	sla b
--- a/mobile/mobile_46.asm
+++ b/mobile/mobile_46.asm
@@ -5145,7 +5145,7 @@
 	ld bc, hDividend
 	ld hl, Unknown_11a89a
 	call Function11a88c
-	ld bc, hQuotient
+	ld bc, hQuotient + 1
 	ld hl, Unknown_11a8ba
 	call Function11a88c
 	ld bc, hPrintNumBuffer + 2