shithub: pokecrystal

Download patch

ref: 731311cb151ec43330a08c0a45e8278f848954af
parent: 333524f0beb876ceaaed99b97f4c7dacf6466050
author: xCrystal <rgr.crystal@gmail.com>
date: Thu Dec 28 11:42:57 EST 2017

Update Magikarp length documentation

--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -6371,8 +6371,14 @@
 	jr c, .GenerateDVs ; try again
 
 .Magikarp:
-; Skimming this part recommended
+; These filters are untranslated
+; They expect at wMagikarpLength a 2-byte value in mm,
+; but the value is at ft and in (one byte each)
 
+; The first filter is supposed to make very large Magikarp even rarer,
+; by targeting those 1600 mm or larger.
+; After the conversion to feet, they are unable to target any,
+; as the largest possible Magikarp is 5'3'', which reads as 1283.
 	ld a, [TempEnemyMonSpecies]
 	cp MAGIKARP
 	jr nz, .Happiness
@@ -6393,7 +6399,7 @@
 	jr c, .CheckMagikarpArea
 ; Try again if > 1614
 	ld a, [wMagikarpLength + 1]
-	cp LOW(1614) + 2
+	cp LOW(1616)
 	jr nc, .GenerateDVs
 
 ; 20% chance of skipping this check
@@ -6402,7 +6408,7 @@
 	jr c, .CheckMagikarpArea
 ; Try again if > 1598
 	ld a, [wMagikarpLength + 1]
-	cp LOW(1598) + 2
+	cp LOW(1600)
 	jr nc, .GenerateDVs
 
 .CheckMagikarpArea:
@@ -6415,6 +6421,9 @@
 
 ; Intended behavior enforces a minimum size at Lake of Rage
 ; The real behavior prevents size flooring in the Lake of Rage area
+
+; Moreover, due to the check not being translated to feet, all Magikarp
+; smaller than 4'0'' may be caught by the filter, a lot more than intended
 	ld a, [MapGroup]
 	cp GROUP_LAKE_OF_RAGE
 	jr z, .Happiness
--- a/engine/events/magikarp.asm
+++ b/engine/events/magikarp.asm
@@ -108,7 +108,7 @@
 ; fbbfc
 
 CalcMagikarpLength: ; fbbfc
-; Return Magikarp's length (in mm) at wMagikarpLength (big endian).
+; Return Magikarp's length (in feet and inches) at wMagikarpLength (big endian).
 ;
 ; input:
 ;   de: EnemyMonDVs
@@ -247,6 +247,10 @@
 	ld e, l
 
 .done
+	; convert from mm to feet and inches
+	; in = mm / 25.4
+	; ft = in / 12
+
 	; hl = de × 10
 	ld h, d
 	ld l, e
@@ -275,9 +279,9 @@
 	ld e, a
 
 	ld hl, wMagikarpLength
-	ld [hl], d
+	ld [hl], d ; ft
 	inc hl
-	ld [hl], e
+	ld [hl], e ; in
 	ret
 ; fbc9a
 
@@ -305,8 +309,11 @@
 ; fbca8
 
 .Lengths: ; fbca8
-;	     ????, divisor
-	dwb   110, 1
+; [wMagikarpLength] = z * 100 + (bc - x) / y
+; First argument is the bc threshold as well as x.
+; Second argument is y.
+; In reality, due to the bug at .BCLessThanDE, the threshold is determined by only register b.
+	dwb   110, 1 ; not used unless the bug is fixed
 	dwb   310, 2
 	dwb   710, 4
 	dwb  2710, 20