summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/bugs_and_glitches.md163
-rw-r--r--docs/design_flaws.md52
2 files changed, 139 insertions, 76 deletions
diff --git a/docs/bugs_and_glitches.md b/docs/bugs_and_glitches.md
index 875a2ac77..3a6e5508c 100644
--- a/docs/bugs_and_glitches.md
+++ b/docs/bugs_and_glitches.md
@@ -76,21 +76,21 @@ This is a bug with `SpeciesItemBoost` in [engine/battle/effect_commands.asm](/en
**Fix:**
-```asm
+```diff
; Double the stat
sla l
rl h
-
- ld a, HIGH(MAX_STAT_VALUE)
- cp h
- jr c, .cap
- ld a, LOW(MAX_STAT_VALUE)
- cp l
- ret nc
-
-.cap
- ld h, HIGH(MAX_STAT_VALUE)
- ld l, LOW(MAX_STAT_VALUE)
++
++ ld a, HIGH(MAX_STAT_VALUE)
++ cp h
++ jr c, .cap
++ ld a, LOW(MAX_STAT_VALUE)
++ cp l
++ ret nc
++
++.cap
++ ld h, HIGH(MAX_STAT_VALUE)
++ ld l, LOW(MAX_STAT_VALUE)
ret
```
@@ -123,7 +123,7 @@ This is a bug with `DittoMetalPowder` in [engine/battle/effect_commands.asm](/en
**Fix:**
-```asm
+```diff
ld a, c
srl a
add c
@@ -138,17 +138,17 @@ This is a bug with `DittoMetalPowder` in [engine/battle/effect_commands.asm](/en
.done
scf
rr c
-
- ld a, HIGH(MAX_STAT_VALUE)
- cp b
- jr c, .cap
- ld a, LOW(MAX_STAT_VALUE)
- cp c
- ret nc
-
-.cap
- ld b, HIGH(MAX_STAT_VALUE)
- ld c, LOW(MAX_STAT_VALUE)
++
++ ld a, HIGH(MAX_STAT_VALUE)
++ cp b
++ jr c, .cap
++ ld a, LOW(MAX_STAT_VALUE)
++ cp c
++ ret nc
++
++.cap
++ ld b, HIGH(MAX_STAT_VALUE)
++ ld c, LOW(MAX_STAT_VALUE)
ret
```
@@ -329,8 +329,14 @@ CheckHiddenOpponent:
ret
```
-*To do:* Fix this bug.
+Fix:
+
+```asm
+CheckHiddenOpponent: ; 37daa
+ ret
+```
+The code in `CheckHiddenOpponent` is completely redundant as `CheckHit` already does what this code is doing. Another option is to remove `CheckHiddenOpponent` completely, the calls to `CheckHiddenOpponent`, and the jump afterwards.
## Beat Up can desynchronize link battles
@@ -430,16 +436,16 @@ BattleCommand_BeatUpFailText:
**Fix:**
-```asm
+```diff
BattleCommand_BeatUpFailText:
; beatupfailtext
ld a, [wBeatUpHitAtLeastOnce]
and a
ret nz
-
- inc a
- ld [wAttackMissed], a
++
++ inc a
++ ld [wAttackMissed], a
jp PrintButItFailed
```
@@ -640,22 +646,22 @@ CalcExpAtLevel:
**Fix:**
-```asm
+```diff
CalcExpAtLevel:
; (a/b)*n**3 + c*n**2 + d*n - e
- ld a, d
- cp 1
- jr nz, .UseExpFormula
-; Pokémon have 0 experience at level 1
- xor a
- ld hl, hProduct
- ld [hli], a
- ld [hli], a
- ld [hli], a
- ld [hl], a
- ret
-
-.UseExpFormula
++ ld a, d
++ cp 1
++ jr nz, .UseExpFormula
++; Pokémon have 0 experience at level 1
++ xor a
++ ld hl, hProduct
++ ld [hli], a
++ ld [hli], a
++ ld [hli], a
++ ld [hl], a
++ ret
++
++.UseExpFormula
ld a, [wBaseGrowthRate]
add a
add a
@@ -864,10 +870,11 @@ HappinessData_DaisysGrooming:
**Fix:**
-```asm
+```diff
HappinessData_DaisysGrooming:
- db $80, 2, HAPPINESS_GROOMING ; 50% chance
- db $ff, 2, HAPPINESS_GROOMING ; 50% chance
+- db $ff, 2, HAPPINESS_GROOMING ; 99.6% chance
++ db $80, 2, HAPPINESS_GROOMING ; 50% chance
++ db $ff, 2, HAPPINESS_GROOMING ; 50% chance
```
@@ -1061,18 +1068,18 @@ This is a bug with `PlayBattleMusic` in [engine/battle/start_battle.asm](/engine
**Fix:**
-```asm
+```diff
ld de, MUSIC_ROCKET_BATTLE
cp GRUNTM
jr z, .done
cp GRUNTF
jr z, .done
- cp EXECUTIVEM
- jr z, .done
- cp EXECUTIVEF
- jr z, .done
- cp SCIENTIST
- jr z, .done
++ cp EXECUTIVEM
++ jr z, .done
++ cp EXECUTIVEF
++ jr z, .done
++ cp SCIENTIST
++ jr z, .done
```
@@ -1107,10 +1114,12 @@ This is a bug with `DoPlayerMovement.CheckWarp` in [engine/overworld/player_move
**Fix:**
-```asm
+```diff
ld a, [wWalkingDirection]
- cp STANDING
- jr z, .not_warp
+- ; cp STANDING
+- ; jr z, .not_warp
++ cp STANDING
++ jr z, .not_warp
ld e, a
ld d, 0
ld hl, .EdgeWarps
@@ -1122,6 +1131,9 @@ This is a bug with `DoPlayerMovement.CheckWarp` in [engine/overworld/player_move
ld a, 1
ld [wd041], a
ld a, [wWalkingDirection]
+- ; This is in the wrong place.
+- cp STANDING
+- jr z, .not_warp
```
@@ -1303,15 +1315,27 @@ This is a bug with `PokeBallEffect` in [engine/items/item_effects.asm](/engine/i
**Fix:**
-```asm
+```diff
ld hl, wEnemySubStatus5
ld a, [hl]
push af
set SUBSTATUS_TRANSFORMED, [hl]
+-; This code is buggy. Any wild Pokémon that has Transformed will be
+-; caught as a Ditto, even if it was something else like Mew.
+-; To fix, do not set [wTempEnemyMonSpecies] to DITTO.
bit SUBSTATUS_TRANSFORMED, a
- jr nz, .load_data
-
+- jr nz, .ditto
+- jr .not_ditto
++ jr nz, .load_data
+
+-.ditto
+- ld a, DITTO
+- ld [wTempEnemyMonSpecies], a
+- jr .load_data
+-
+-.not_ditto
+- set SUBSTATUS_TRANSFORMED, [hl]
ld hl, wEnemyBackupDVs
ld a, [wEnemyMonDVs]
ld [hli], a
@@ -1347,12 +1371,14 @@ This is a bug with `PokeBallEffect` in [engine/items/item_effects.asm](/engine/i
**Fix:**
-```asm
+```diff
.room_in_party
xor a
ld [wWildMon], a
- ld a, [wBattleType]
- cp BATTLETYPE_CONTEST
+- ld a, [wCurItem]
+- cp PARK_BALL
++ ld a, [wBattleType]
++ cp BATTLETYPE_CONTEST
call nz, ReturnToBattle_UseBall
```
@@ -1429,10 +1455,10 @@ This is a bug with `PlacePartyMonEvoStoneCompatibility.DetermineCompatibility` i
ld a, [hli]
and a
jr z, .nope
- cp EVOLVE_STAT
- jr nz, .not_four_bytes
- inc hl
-.not_four_bytes
++ cp EVOLVE_STAT
++ jr nz, .not_four_bytes
++ inc hl
++.not_four_bytes
inc hl
inc hl
cp EVOLVE_ITEM
@@ -1542,11 +1568,12 @@ ValidateTempWildMonSpecies:
**Fix:**
-```asm
+```diff
ld a, b
ld [wCurPartyLevel], a
ld b, [hl]
- ld a, b
+- ; ld a, b
++ ld a, b
call ValidateTempWildMonSpecies
jr c, .nowildbattle
diff --git a/docs/design_flaws.md b/docs/design_flaws.md
index 4b24a0cc3..c7a032702 100644
--- a/docs/design_flaws.md
+++ b/docs/design_flaws.md
@@ -152,21 +152,22 @@ Don't enforce `org $4000` in pokecrystal.link.
Modify `GetFrontpicPointer`:
-```asm
+```diff
ld a, [wCurPartySpecies]
cp UNOWN
jr z, .unown
ld a, [wCurPartySpecies]
- ld hl, PokemonPicPointers
++ ld hl, PokemonPicPointers
ld d, BANK(PokemonPicPointers)
jr .ok
.unown
ld a, [wUnownLetter]
- ld hl, UnownPicPointers
++ ld hl, UnownPicPointers
ld d, BANK(UnownPicPointers)
.ok
+- ld hl, PokemonPicPointers ; UnownPicPointers
dec a
ld bc, 6
call AddNTimes
@@ -175,13 +176,15 @@ Modify `GetFrontpicPointer`:
And `GetMonBackpic`:
```asm
+- ; These are assumed to be at the same address in their respective banks.
+- ld hl, PokemonPicPointers ; UnownPicPointers
ld a, b
- ld hl, PokemonPicPointers
++ ld hl, PokemonPicPointers
ld d, BANK(PokemonPicPointers)
cp UNOWN
jr nz, .ok
ld a, c
- ld hl, UnownPicPointers
++ ld hl, UnownPicPointers
ld d, BANK(UnownPicPointers)
.ok
dec a
@@ -268,12 +271,26 @@ INCBIN "gfx/footprints/wartortle.1bpp"
Modify `Pokedex_LoadAnyFootprint`:
-```asm
+```diff
+- push hl
ld e, l
ld d, h
ld hl, vTiles2 tile $62
- lb bc, BANK(Footprints), 4
+- lb bc, BANK(Footprints), 2
++ lb bc, BANK(Footprints), 4
call Request1bpp
+- pop hl
+-
+- ; Whoever was editing footprints forgot to fix their
+- ; tile editor. Now each bottom half is 8 tiles off.
+- ld de, 8 tiles
+- add hl, de
+-
+- ld e, l
+- ld d, h
+- ld hl, vTiles2 tile $64
+- lb bc, BANK(Footprints), 2
+- call Request1bpp
```
@@ -341,10 +358,19 @@ Move `ITEM_C3` and `ITEM_DC` above all the TMs in every table of item data.
Modify engine/items/items.asm:
-```asm
+```diff
GetTMHMNumber::
; Return the number of a TM/HM by item id c.
ld a, c
+-; Skip any dummy items.
+- cp ITEM_C3 ; TM04-05
+- jr c, .done
+- cp ITEM_DC ; TM28-29
+- jr c, .skip
+- dec a
+-.skip
+- dec a
+-.done
sub TM01
inc a
ld c, a
@@ -353,6 +379,16 @@ GetTMHMNumber::
GetNumberedTMHM:
; Return the item id of a TM/HM by number c.
ld a, c
+-; Skip any gaps.
+- cp ITEM_C3 - (TM01 - 1)
+- jr c, .done
+- cp ITEM_DC - (TM01 - 1) - 1
+- jr c, .skip_one
+-.skip_two
+- inc a
+-.skip_one
+- inc a
+-.done
add TM01
dec a
ld c, a