ref: 662b3459f606ebe1018c21f4bde11bddb7eb1efd
dir: /engine/events/special.asm/
MANIA_OT_ID EQU 00518 GiveShuckle: ; 7305 ; Adding to the party. xor a ld [MonType], a ; Level 15 Shuckle. ld a, SHUCKLE ld [CurPartySpecies], a ld a, 15 ld [CurPartyLevel], a predef TryAddMonToParty jr nc, .NotGiven ; Caught data. ld b, 0 farcall SetGiftPartyMonCaughtData ; Holding a Berry. ld bc, PARTYMON_STRUCT_LENGTH ld a, [PartyCount] dec a push af push bc ld hl, PartyMon1Item call AddNTimes ld [hl], BERRY pop bc pop af ; OT ID. ld hl, PartyMon1ID call AddNTimes ld a, HIGH(MANIA_OT_ID) ld [hli], a ld [hl], LOW(MANIA_OT_ID) ; Nickname. ld a, [PartyCount] dec a ld hl, PartyMonNicknames call SkipNames ld de, SpecialShuckleNick call CopyName2 ; OT. ld a, [PartyCount] dec a ld hl, PartyMonOT call SkipNames ld de, SpecialShuckleOT call CopyName2 ; Engine flag for this event. ld hl, wDailyFlags set DAILYFLAGS_GOT_SHUCKIE_TODAY_F, [hl] ld a, 1 ld [ScriptVar], a ret .NotGiven: xor a ld [ScriptVar], a ret SpecialShuckleOT: db "MANIA@" SpecialShuckleNick: db "SHUCKIE@" ReturnShuckle: ; 737e farcall SelectMonFromParty jr c, .refused ld a, [CurPartySpecies] cp SHUCKLE jr nz, .DontReturn ld a, [CurPartyMon] ld hl, PartyMon1ID ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ; OT ID ld a, [hli] cp HIGH(MANIA_OT_ID) jr nz, .DontReturn ld a, [hl] cp LOW(MANIA_OT_ID) jr nz, .DontReturn ; OT ld a, [CurPartyMon] ld hl, PartyMonOT call SkipNames ld de, SpecialShuckleOT .CheckOT: ld a, [de] cp [hl] jr nz, .DontReturn cp "@" jr z, .done inc de inc hl jr .CheckOT .done farcall CheckCurPartyMonFainted jr c, .fainted ld a, [CurPartyMon] ld hl, PartyMon1Happiness ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hl] cp 150 ld a, SHUCKIE_HAPPY jr nc, .HappyToStayWithYou xor a ; take from pc ld [wPokemonWithdrawDepositParameter], a callfar RemoveMonFromPartyOrBox ld a, SHUCKIE_RETURNED .HappyToStayWithYou: ld [ScriptVar], a ret .refused ld a, SHUCKIE_REFUSED ld [ScriptVar], a ret .DontReturn: xor a ; SHUCKIE_WRONG_MON ld [ScriptVar], a ret .fainted ld a, SHUCKIE_FAINTED ld [ScriptVar], a ret BillsGrandfather: ; 73f7 farcall SelectMonFromParty jr c, .cancel ld a, [CurPartySpecies] ld [ScriptVar], a ld [wNamedObjectIndexBuffer], a call GetPokemonName jp CopyPokemonName_Buffer1_Buffer3 .cancel xor a ld [ScriptVar], a ret YoungerHaircutBrother: ; 7413 ld hl, HappinessData_YoungerHaircutBrother jr HaircutOrGrooming OlderHaircutBrother: ; 7418 ld hl, HappinessData_OlderHaircutBrother jr HaircutOrGrooming DaisysGrooming: ; 741d ld hl, HappinessData_DaisysGrooming ; fallthrough HaircutOrGrooming: ; 7420 push hl farcall SelectMonFromParty pop hl jr c, .nope ld a, [CurPartySpecies] 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 [ScriptVar], a ld c, [hl] call ChangeHappiness ret .nope xor a ld [ScriptVar], a ret .egg ld a, 1 ld [ScriptVar], a ret INCLUDE "data/events/happiness_chances.asm" CopyPokemonName_Buffer1_Buffer3: ; 746e ld hl, StringBuffer1 ld de, StringBuffer3 ld bc, MON_NAME_LENGTH jp CopyBytes DummyPredef1: ; 747a ret