diff options
-rwxr-xr-x | engine/events/haircut.asm | 76 | ||||
-rwxr-xr-x | engine/events/happiness_egg.asm | 4 | ||||
-rwxr-xr-x | engine/events/shuckle.asm | 116 | ||||
-rwxr-xr-x | engine/specials.asm | 6 | ||||
-rw-r--r-- | main.asm | 2 | ||||
-rw-r--r-- | wram.asm | 3 |
6 files changed, 115 insertions, 92 deletions
diff --git a/engine/events/haircut.asm b/engine/events/haircut.asm index 2365e74f..b67e2b2d 100755 --- a/engine/events/haircut.asm +++ b/engine/events/haircut.asm @@ -1,49 +1,58 @@ BillsGrandfather: - callba Function50000 - jr c, .asm_74e2 - ld a, [wd004] + callba SelectMonFromParty + jr c, .cancel + ld a, [wCurPartySpecies] ld [wScriptVar], a - ld [wd151], a + ld [wNamedObjectIndexBuffer], a call GetPokemonName - jp Function7542 + jp CopyPokemonName_Buffer1_Buffer3 -.asm_74e2 +.cancel xor a ld [wScriptVar], a ret -Function74e7: - ld hl, Data_752d - jr asm_74f4 +YoungerHaircutBrother: + ld hl, HappinessData_YoungerHaircutBrother + jr HaircutOrGrooming + +OlderHaircutBrother: + ld hl, HappinessData_OlderHaircutBrother + jr HaircutOrGrooming -Function74ec: - ld hl, Data_7536 - jr asm_74f4 +DaisysGrooming: + ld hl, HappinessData_DaisysGrooming + ; fallthrough -Function74f1: - ld hl, Data_753f -asm_74f4 +HaircutOrGrooming: push hl - callba Function50000 + callba SelectMonFromParty pop hl - jr c, .asm_7522 + jr c, .nope ld a, [wCurPartySpecies] cp EGG - jr z, .asm_7527 + jr z, .egg push hl call GetCurNick - call Function7542 + call CopyPokemonName_Buffer1_Buffer3 pop hl call Random -.asm_7510 +.loop +; 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. sub [hl] - jr c, .asm_7518 + jr c, .ok inc hl inc hl inc hl - jr .asm_7510 + jr .loop -.asm_7518 +.ok inc hl ld a, [hli] ld [wScriptVar], a @@ -51,30 +60,19 @@ asm_74f4 call ChangeHappiness ret -.asm_7522 +.nope xor a ld [wScriptVar], a ret -.asm_7527 - ld a, $1 +.egg + ld a, 1 ld [wScriptVar], a ret -Data_752d: - db $4c, $02, $09 - db $80, $03, $0a - db $ff, $04, $0b - -Data_7536: - db $9a, $02, $0c - db $4c, $03, $0d - db $ff, $04, $0e - -Data_753f: - db $ff, $02, $12 +INCLUDE "data/events/happiness_probabilities.asm" -Function7542: ; 7542 (1:7542) +CopyPokemonName_Buffer1_Buffer3: ld hl, wStringBuffer1 ld de, wStringBuffer3 ld bc, MON_NAME_LENGTH diff --git a/engine/events/happiness_egg.asm b/engine/events/happiness_egg.asm index 5a7a8ba3..fe0710fc 100755 --- a/engine/events/happiness_egg.asm +++ b/engine/events/happiness_egg.asm @@ -15,7 +15,7 @@ GetFirstPokemonHappiness: ld a, [hl] ld [wScriptVar], a call GetPokemonName - jp Function7542 + jp CopyPokemonName_Buffer1_Buffer3 CheckFirstMonIsEgg: ld a, [wPartySpecies] @@ -27,7 +27,7 @@ CheckFirstMonIsEgg: .asm_7298 ld [wScriptVar], a call GetPokemonName - jp Function7542 + jp CopyPokemonName_Buffer1_Buffer3 ChangeHappiness: ; 72a1 (1:72a1) ld a, [wd005] diff --git a/engine/events/shuckle.asm b/engine/events/shuckle.asm index 82d0427e..37f80db4 100755 --- a/engine/events/shuckle.asm +++ b/engine/events/shuckle.asm @@ -1,14 +1,22 @@ +MANIA_OT_ID EQU 00518 + GiveShuckle: +; Adding to the party. xor a ld [wMonType], a + +; Level 15 Shuckle. ld a, SHUCKLE - ld [wd004], a - ld a, $f + ld [wCurPartySpecies], a + ld a, 15 ld [wCurPartyLevel], a + predef TryAddMonToParty - jr nc, .asm_743f - ld bc, $30 - ld a, [wPokemonData] + jr nc, .NotGiven + +; Holding a Berry. + ld bc, PARTYMON_STRUCT_LENGTH + ld a, [wPartyCount] dec a push af push bc @@ -17,98 +25,112 @@ GiveShuckle: ld [hl], BERRY pop bc pop af + +; OT ID. ld hl, wPartyMon1ID call AddNTimes - ld a, $2 + ld a, HIGH(MANIA_OT_ID) ld [hli], a - ld [hl], $6 + ld [hl], LOW(MANIA_OT_ID) + +; Nickname. ld a, [wPokemonData] dec a ld hl, wPartyMonNicknames call SkipNames - ld de, ShuckieName + ld de, SpecialShuckleNick call CopyName2 + +; OT. ld a, [wPartyCount] dec a - ld hl, wPartyMon6StatsEnd + ld hl, wPartyMonOT call SkipNames - ld de, ManiaName + ld de, SpecialShuckleOT call CopyName2 + +; Engine flag for this event. SetFlag ENGINE_SHUCKLE_GIVEN - ld a, $1 + ld a, 1 ld [wScriptVar], a ret -.asm_743f +.NotGiven: xor a ld [wScriptVar], a ret -ManiaName: +SpecialShuckleOT: db "MANIA@" -ShuckieName: +SpecialShuckleNick: db "SHUCKIE@" ReturnShuckle: - callba Function50000 - jr c, .asm_74ba - ld a, [wd004] + callba SelectMonFromParty + jr c, .refused + + ld a, [wCurPartySpecies] cp SHUCKLE - jr nz, .asm_74c0 - ld a, [wd005] + jr nz, .DontReturn + + ld a, [wCurPartyMon] ld hl, wPartyMon1ID - ld bc, $30 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes + +; OT ID ld a, [hli] - cp $2 - jr nz, .asm_74c0 + cp HIGH(MANIA_OT_ID) + jr nz, .DontReturn ld a, [hl] - cp $6 - jr nz, .asm_74c0 - ld a, [wd005] + cp LOW(MANIA_OT_ID) + jr nz, .DontReturn + +; OT + ld a, [wCurPartyMon] ld hl, wPartyMonOT call SkipNames - ld de, ManiaName -.asm_7483 + ld de, SpecialShuckleOT +.CheckOT: ld a, [de] cp [hl] - jr nz, .asm_74c0 + jr nz, .DontReturn cp "@" - jr z, .asm_748f + jr z, .done inc de inc hl - jr .asm_7483 + jr .CheckOT -.asm_748f +.done callba CheckCurPartyMonFainted - jr c, .asm_74c5 - ld a, [wd005] + jr c, .fainted + ld a, [wCurPartyMon] ld hl, wPartyMon1Happiness - ld bc, $30 + ld bc, PARTYMON_STRUCT_LENGTH call AddNTimes ld a, [hl] - cp $96 - ld a, $3 - jr nc, .asm_74b6 - xor a - ld [wd008], a + cp 150 + ld a, SHUCKIE_HAPPY + jr nc, .HappyToStayWithYou + xor a ; REMOVE_PARTY + ld [wPokemonWithdrawDepositParameter], a callab RemoveMonFromPartyOrBox - ld a, $2 -.asm_74b6 + ld a, SHUCKIE_RETURNED +.HappyToStayWithYou: ld [wScriptVar], a ret -.asm_74ba - ld a, $1 +.refused + ld a, SHUCKIE_REFUSED ld [wScriptVar], a ret -.asm_74c0 - xor a +.DontReturn: + xor a ; SHUCKIE_WRONG_MON ld [wScriptVar], a ret -.asm_74c5 - ld a, $4 +.fainted + ld a, SHUCKIE_FAINTED ld [wScriptVar], a ret diff --git a/engine/specials.asm b/engine/specials.asm index 59b8fc2f..6bc3fc48 100755 --- a/engine/specials.asm +++ b/engine/specials.asm @@ -126,9 +126,9 @@ SpecialsPointers: add_special Function14226 add_special Functionfb94b add_special Functionc5d6 - add_special Function74e7 - add_special Function74ec - add_special Function74f1 + add_special YoungerHaircutBrother + add_special OlderHaircutBrother + add_special DaisysGrooming add_special Functionc60b add_special Function267ca add_special Functionc611 @@ -989,7 +989,7 @@ SECTION "bank13", ROMX, BANK[$13] dr $4c000, $50000 SECTION "bank14", ROMX, BANK[$14] -Function50000: +SelectMonFromParty: dr $50000, $5004f LoadPartyMenuGFX: @@ -2424,9 +2424,11 @@ wd003:: ds 1 ; d003 wCurPartySpecies:: wd004:: ds 1 ; d004 +wCurPartyMon:: wd005:: ds 1 ; d005 wd006:: ds 1 ; d006 wd007:: ds 1 ; d007 +wPokemonWithdrawDepositParameter:: wd008:: ds 1 ; d008 wItemQuantityChangeBuffer:: wd009:: ds 1 ; d009 @@ -2675,6 +2677,7 @@ wd14e:: ds 1 ; d14e wWildMon:: ds 1 ; d14f wd150:: ds 1 ; d150 wTempNumBuffer:: +wNamedObjectIndexBuffer:: wd151:: ds 1 ; d151 wd152:: ds 1 ; d152 wd153:: ds 1 ; d153 |