From 731311cb151ec43330a08c0a45e8278f848954af Mon Sep 17 00:00:00 2001 From: xCrystal Date: Thu, 28 Dec 2017 16:42:57 +0100 Subject: [PATCH] Update Magikarp length documentation --- engine/battle/core.asm | 15 ++++++++++++--- engine/events/magikarp.asm | 17 ++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/engine/battle/core.asm b/engine/battle/core.asm index 1a3ee24f6..7e234a99e 100644 --- a/engine/battle/core.asm +++ b/engine/battle/core.asm @@ -6371,8 +6371,14 @@ LoadEnemyMon: ; 3e8eb 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 @@ LoadEnemyMon: ; 3e8eb 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 @@ LoadEnemyMon: ; 3e8eb 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 @@ LoadEnemyMon: ; 3e8eb ; 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 diff --git a/engine/events/magikarp.asm b/engine/events/magikarp.asm index 6b5768029..68e8baad7 100644 --- a/engine/events/magikarp.asm +++ b/engine/events/magikarp.asm @@ -108,7 +108,7 @@ PrintMagikarpLength: ; fbbdb ; 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 @@ CalcMagikarpLength: ; fbbfc 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 @@ CalcMagikarpLength: ; fbbfc 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 @@ CalcMagikarpLength: ; fbbfc ; 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