summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xengine/events/haircut.asm76
-rwxr-xr-xengine/events/happiness_egg.asm4
-rwxr-xr-xengine/events/shuckle.asm116
-rwxr-xr-xengine/specials.asm6
-rw-r--r--main.asm2
-rw-r--r--wram.asm3
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
diff --git a/main.asm b/main.asm
index 3d802515..bc169e08 100644
--- a/main.asm
+++ b/main.asm
@@ -989,7 +989,7 @@ SECTION "bank13", ROMX, BANK[$13]
dr $4c000, $50000
SECTION "bank14", ROMX, BANK[$14]
-Function50000:
+SelectMonFromParty:
dr $50000, $5004f
LoadPartyMenuGFX:
diff --git a/wram.asm b/wram.asm
index 57009d30..a2233f96 100644
--- a/wram.asm
+++ b/wram.asm
@@ -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