BillsGrandfather: farcall SelectMonFromParty jr c, .cancel ld a, [wCurPartySpecies] ld [wScriptVar], a ld [wNamedObjectIndexBuffer], a call GetPokemonName jp CopyPokemonName_Buffer1_Buffer3 .cancel xor a ld [wScriptVar], a ret YoungerHaircutBrother: ld hl, HappinessData_YoungerHaircutBrother jr HaircutOrGrooming OlderHaircutBrother: ld hl, HappinessData_OlderHaircutBrother jr HaircutOrGrooming DaisysGrooming: ld hl, HappinessData_DaisysGrooming ; fallthrough HaircutOrGrooming: push hl farcall SelectMonFromParty pop hl jr c, .nope ld a, [wCurPartySpecies] cp EGG jr z, .egg push hl call GetCurNick call CopyPokemonName_Buffer1_Buffer3 pop hl call Random ; Bug: Subtracting $ff from $ff fails to set c. ; This can result in overflow into the next data array. ; In the case of getting a grooming from Daisy, we bleed ; into CopyPokemonName_Buffer1_Buffer3, which passes ; $d0 to ChangeHappiness and returns $73 to the script. ; The end result is that there is a 0.4% chance your ; Pokemon's happiness will not change at all. .loop sub [hl] jr c, .ok inc hl inc hl inc hl jr .loop .ok inc hl ld a, [hli] ld [wScriptVar], a ld c, [hl] call ChangeHappiness ret .nope xor a ld [wScriptVar], a ret .egg ld a, 1 ld [wScriptVar], a ret INCLUDE "data/events/happiness_probabilities.asm" CopyPokemonName_Buffer1_Buffer3: ld hl, wStringBuffer1 ld de, wStringBuffer3 ld bc, MON_NAME_LENGTH jp CopyBytes DummyPredef1: ret