Document Day Care Exp bug (#895)

This commit is contained in:
Idain 2022-03-20 20:43:10 -04:00 committed by GitHub
parent 9b4ebe9400
commit 5206ac6836
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -62,10 +62,11 @@ Fixes in the [multi-player battle engine](#multi-player-battle-engine) category
- [`RIVAL2` has lower DVs than `RIVAL1`](#rival2-has-lower-dvs-than-rival1)
- [`HELD_CATCH_CHANCE` has no effect](#held_catch_chance-has-no-effect)
- [Credits sequence changes move selection menu behavior](#credits-sequence-changes-move-selection-menu-behavior)
- [Overworld engine](#overworld-engine)
- [Game engine](#game-engine)
- [`LoadMetatiles` wraps around past 128 blocks](#loadmetatiles-wraps-around-past-128-blocks)
- [Surfing directly across a map connection does not load the new map](#surfing-directly-across-a-map-connection-does-not-load-the-new-map)
- [Swimming NPCs aren't limited by their movement radius](#swimming-npcs-arent-limited-by-their-movement-radius)
- [Pokémon deposited in the Day-Care might lose experience](#pokémon-deposited-in-the-day-care-might-lose-experience)
- [Graphics](#graphics)
- [In-battle “`…`” ellipsis is too high](#in-battle--ellipsis-is-too-high)
- [Two tiles in the `port` tileset are drawn incorrectly](#two-tiles-in-the-port-tileset-are-drawn-incorrectly)
@ -1559,7 +1560,7 @@ The `[hInMenu]` value determines this button behavior. However, the battle moves
```
## Overworld engine
## Game engine
### `LoadMetatiles` wraps around past 128 blocks
@ -1672,6 +1673,57 @@ This bug is why the Lapras in [maps/UnionCaveB2F.asm](https://github.com/pret/po
```
### Pokémon deposited in the Day-Care might lose experience
This happens because when a Pokémon is withdrawn from the Day-Care, its Exp. Points are reset to the minimum required for its level. This means that if it hasn't gained any levels, it may lose experience.
**Fix**: Edit `RetrieveBreedmon` in [engine/pokemon/move_mon.asm](https://github.com/pret/pokecrystal/blob/master/engine/pokemon/move_mon.asm):
```diff
RetrieveBreedmon:
...
ld a, [wPartyCount]
dec a
ld [wCurPartyMon], a
farcall HealPartyMon
- ld a, [wCurPartyLevel]
- ld d, a
+ ; Check if there's an exp overflow
+ ld d, MAX_LEVEL
callfar CalcExpAtLevel
pop bc
- ld hl, MON_EXP
+ ld hl, MON_EXP + 2
add hl, bc
ldh a, [hMultiplicand]
- ld [hli], a
+ ld b, a
ldh a, [hMultiplicand + 1]
- ld [hli], a
+ ld c, a
ldh a, [hMultiplicand + 2]
+ ld d, a
+ ld a, [hld]
+ sub d
+ ld a, [hld]
+ sbc c
+ ld a, [hl]
+ sbc b
+ jr c, .not_max_exp
+ ld a, b
+ ld [hli], a
+ ld a, c
+ ld [hli], a
+ ld a, d
ld [hl], a
+.not_max_exp
and a
ret
```
## Graphics