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