summaryrefslogtreecommitdiff
path: root/engine/mysterygift.asm
diff options
context:
space:
mode:
Diffstat (limited to 'engine/mysterygift.asm')
-rwxr-xr-xengine/mysterygift.asm178
1 files changed, 102 insertions, 76 deletions
diff --git a/engine/mysterygift.asm b/engine/mysterygift.asm
index 5e6d317ba..f2d29b08a 100755
--- a/engine/mysterygift.asm
+++ b/engine/mysterygift.asm
@@ -2,13 +2,13 @@ DoMysteryGift: ; 1048ba (41:48ba)
call ClearTileMap
call ClearSprites
call WaitBGMap
- call Function105153
+ call InitMysteryGiftLayout
hlcoord 3, 8
ld de, .String_PressAToLink_BToCancel
call PlaceString
call WaitBGMap
- callba Function2c642
- call Function1050fb
+ callba PrepMysteryGiftDataToSend
+ call MysteryGift_ClearTrainerData
ld a, $2
ld [wca01], a
ld a, $14
@@ -27,7 +27,7 @@ DoMysteryGift: ; 1048ba (41:48ba)
call ClearTileMap
call EnableLCD
call WaitBGMap
- ld b, SCGB_08
+ ld b, SCGB_DIPLOMA
call GetSGBLayout
call SetPalettes
pop de
@@ -63,7 +63,7 @@ DoMysteryGift: ; 1048ba (41:48ba)
jr z, .skip_append_save
call .SaveMysteryGiftTrainerName
callba RestoreMobileEventIndex
- callba MobileFn_1060a9
+ callba TrainerRankings_MysteryGift
callba BackupMobileEventIndex
.skip_append_save
ld a, [wMysteryGiftPartnerSentDeco]
@@ -239,14 +239,16 @@ Function104a95: ; 104a95 (41:4a95)
di
callba ClearChannels
call Function104d5e
+
.loop2
call Function104d96
call Function104ddd
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $10
jp z, Function104bd0
cp $6c
jr nz, .loop2
+
ld a, [hPrintNum9]
cp $2
jr z, Function104b22
@@ -256,7 +258,8 @@ Function104a95: ; 104a95 (41:4a95)
jr nz, .ly_loop
call Function104b49
jp nz, Function104bd0
- jr asm_104b0a
+ jr Function104b0a
+ ; Delay frame
.ly_loop
ld a, [rLY]
cp $90
@@ -264,12 +267,15 @@ Function104a95: ; 104a95 (41:4a95)
ld c, rRP % $100
ld a, $c0
ld [$ff00+c], a
- ld b, $f0
+ ld b, 240 ; This might have been intended as a 4-second timeout buffer.
+ ; However, it is reset with each frame.
.loop3
push bc
- call Function105038
+ call MysteryGift_ReadJoypad
+
ld b, $2
ld c, rRP % $100
+ ; Delay frame
.ly_loop2
ld a, [$ff00+c]
and b
@@ -284,24 +290,25 @@ Function104a95: ; 104a95 (41:4a95)
ld a, [rLY]
cp $90
jr c, .ly_loop3
+
ld a, b
pop bc
dec b
- jr z, .loop2
+ jr z, .loop2 ; we never jump here
or a
jr nz, .loop2
- ld a, [hMoneyTemp + 1]
- bit 1, a
+ ; Check if we've pressed the B button
+ ld a, [hMGJoypadReleased]
+ bit B_BUTTON_F, a
jr z, .loop3
ld a, $10
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
jp Function104bd0
Function104b04: ; 104b04 (41:4b04)
call Function104b40
jp nz, Function104bd0
-
-asm_104b0a: ; 104b0a (41:4b0a)
+Function104b0a: ; 104b0a (41:4b0a)
call Function104d38
jp nz, Function104bd0
call Function104b88
@@ -331,7 +338,7 @@ Function104b40: ; 104b40 (41:4b40)
Function104b49: ; 104b49 (41:4b49)
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
@@ -346,7 +353,7 @@ Function104b49: ; 104b49 (41:4b49)
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
@@ -357,7 +364,7 @@ Function104b49: ; 104b49 (41:4b49)
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
@@ -369,7 +376,7 @@ Function104b88: ; 104b88 (41:4b88)
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
@@ -379,7 +386,7 @@ Function104b88: ; 104b88 (41:4b88)
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
@@ -393,29 +400,29 @@ Function104b88: ; 104b88 (41:4b88)
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
Function104bd0: ; 104bd0 (41:4bd0)
nop
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $10
- jr z, .asm_104c18
+ jr z, .quit
cp $6c
- jr nz, .asm_104c18
+ jr nz, .quit
ld hl, wca01
dec [hl]
- jr z, .asm_104c18
+ jr z, .quit
ld hl, wMysteryGiftTrainerData
ld de, wMysteryGiftPartnerData
ld bc, wMysteryGiftPartnerDataEnd - wMysteryGiftPartnerData
call CopyBytes
ld a, [wMysteryGiftTrainerData]
cp $3
- jr nc, .asm_104c18
+ jr nc, .quit
callba StagePartyDataForMysteryGift
- call Function1050fb
+ call MysteryGift_ClearTrainerData
ld a, $26
ld [wca02], a
ld a, [hPrintNum9]
@@ -424,12 +431,14 @@ Function104bd0: ; 104bd0 (41:4bd0)
call Function104d43
jr nz, Function104bd0
jp Function104b04
+
.asm_104c10
call Function104d38
jr nz, Function104bd0
jp Function104b22
-.asm_104c18
- ld a, [hPrintNum10]
+
+.quit
+ ld a, [hMGStatusFlags]
push af
call Function104da0
xor a
@@ -449,7 +458,7 @@ Function104c2d: ; 104c2d (41:4c2d)
.asm_104c37
call Function104d96
call Function104ddd
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $10
jp z, Function104d1c
cp $6c
@@ -485,7 +494,7 @@ Function104c8a: ; 104c8a (41:4c8a)
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
@@ -500,7 +509,7 @@ Function104c8a: ; 104c8a (41:4c8a)
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
@@ -511,7 +520,7 @@ Function104c8a: ; 104c8a (41:4c8a)
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
@@ -523,7 +532,7 @@ Function104cd2: ; 104cd2 (41:4cd2)
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
@@ -533,7 +542,7 @@ Function104cd2: ; 104cd2 (41:4cd2)
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
@@ -548,13 +557,13 @@ Function104cd2: ; 104cd2 (41:4cd2)
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
Function104d1c: ; 104d1c (41:4d1c)
nop
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
push af
call Function104da0
xor a
@@ -569,33 +578,33 @@ Function104d1c: ; 104d1c (41:4d1c)
Function104d32: ; 104d32 (41:4d32)
ld a, $80
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
and a
ret
Function104d38: ; 104d38 (41:4d38)
call Function104d96
call Function104e46
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
Function104d43: ; 104d43 (41:4d43)
call Function104d96
call Function104dfe
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
Function104d4e: ; 104d4e (41:4d4e)
call Function104e93
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
Function104d56: ; 104d56 (41:4d56)
call Function104f57
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
@@ -704,19 +713,19 @@ Function104ddd: ; 104ddd (41:4ddd)
ld a, $1
ld [hPrintNum9], a
.loop
- call Function105038
+ call MysteryGift_ReadJoypad
ld b, $2
ld c, rRP % $100
- ld a, [hMoneyTemp + 1]
- bit 1, a
+ ld a, [hMGJoypadReleased]
+ bit B_BUTTON_F, a
jr z, .next
ld a, $10
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
ret
.next
bit 0, a
- jr nz, asm_104e3a
+ jr nz, Function104e3a
ld a, [$ff00+c]
and b
jr nz, .loop
@@ -735,7 +744,7 @@ Function104dfe: ; 104dfe (41:4dfe)
call Function104da9
jp z, Function104f42
ld a, $6c
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
ld d, $3d
call Function104dd1
ld d, $5
@@ -748,17 +757,17 @@ Function104dfe: ; 104dfe (41:4dfe)
call Function104dd1
ret
-asm_104e3a: ; 104e3a (41:4e3a)
+Function104e3a: ; 104e3a (41:4e3a)
+ ; Wait a random amount of time
call Random
ld e, a
and $f
ld d, a
-.asm_104e41
+.loop
dec de
ld a, d
or e
- jr nz, .asm_104e41
-
+ jr nz, .loop
Function104e46: ; 104e46 (41:4e46)
ld a, $2
ld [hPrintNum9], a
@@ -788,13 +797,13 @@ Function104e46: ; 104e46 (41:4e46)
ld d, $3d
call Function104dd1
ld a, $6c
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
ret
Function104e8c: ; 104e8c (41:4e8c)
ld [rRP], a
ld a, $ff
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
ret
Function104e93: ; 104e93 (41:4e93)
@@ -824,7 +833,7 @@ Function104e93: ; 104e93 (41:4e93)
ld hl, hPrintNum2 ; $ffb4 (aliases: hMultiplicand)
ld b, $2
call Function104ed6
- ld hl, hPrintNum10
+ ld hl, hMGStatusFlags
ld b, $1
call Function104faf
ld a, [hPrintNum2]
@@ -902,21 +911,21 @@ Function104ed6: ; 104ed6 (41:4ed6)
ret
Function104f42: ; 104f42 (41:4f42)
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
or $2
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
ret
Function104f49: ; 104f49 (41:4f49)
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
or $1
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
ret
Function104f50: ; 104f50 (41:4f50)
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
or $80
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
ret
Function104f57: ; 104f57 (41:4f57)
@@ -960,7 +969,7 @@ Function104f57: ; 104f57 (41:4f57)
push de
ld d, $3d
call Function104dd1
- ld hl, hPrintNum10
+ ld hl, hMGStatusFlags
ld b, $1
call Function104ed6
pop de
@@ -986,7 +995,7 @@ Function104faf: ; 104faf (41:4faf)
cpl
ld b, a
xor a
- ld [hMoneyTemp + 2], a
+ ld [hMGJoypadPressed + 2], a
call Function104d86
.asm_104fd2
inc b
@@ -1009,10 +1018,10 @@ Function104faf: ; 104faf (41:4faf)
bit 1, a
jr nz, .asm_104fe5
.asm_104fed
- ld a, [hMoneyTemp + 2]
+ ld a, [hMGJoypadPressed + 2]
ld d, a
ld a, [rTIMA]
- ld [hMoneyTemp + 2], a
+ ld [hMGJoypadPressed + 2], a
sub d
cp $12
jr c, .asm_104ffd
@@ -1058,31 +1067,48 @@ Function105033: ; 105033 (41:5033)
ld b, $0
jp Function104f57
-Function105038: ; 105038 (41:5038)
- ld a, $20
+MysteryGift_ReadJoypad: ; 105038 (41:5038)
+; We can only get four inputs at a time.
+; We take d-pad first for no particular reason.
+ ld a, R_DPAD
ld [rJOYP], a
+; Read twice to give the request time to take.
ld a, [rJOYP]
ld a, [rJOYP]
+
+; The Joypad register output is in the lo nybble (inversed).
+; We make the hi nybble of our new container d-pad input.
cpl
and $f
swap a
+
+; We'll keep this in b for now.
ld b, a
- ld a, $10
+
+; Buttons make 8 total inputs (A, B, Select, Start).
+; We can fit this into one byte.
+ ld a, R_BUTTONS
ld [rJOYP], a
+; Wait for input to stabilize.
rept 6
ld a, [rJOYP]
endr
+; Buttons take the lo nybble.
cpl
and $f
or b
ld c, a
- ld a, [hMoneyTemp]
+; To get the delta we xor the last frame's input with the new one.
+ ld a, [hMGJoypadPressed]
xor c
+; Released this frame:
and c
- ld [hMoneyTemp + 1], a
+ ld [hMGJoypadReleased], a
+; Pressed this frame:
ld a, c
- ld [hMoneyTemp], a
+ ld [hMGJoypadPressed], a
ld a, $30
+; Reset the joypad register since we're done with it.
ld [rJOYP], a
ret
@@ -1179,7 +1205,7 @@ RestoreMysteryGift: ; 1050ea (41:50ea)
ld [de], a
jp CloseSRAM
-Function1050fb: ; 1050fb (41:50fb)
+MysteryGift_ClearTrainerData: ; 1050fb (41:50fb)
ld hl, wMysteryGiftTrainerData
xor a
ld b, wMysteryGiftTrainerDataEnd - wMysteryGiftTrainerData
@@ -1247,7 +1273,7 @@ StagePartyDataForMysteryGift: ; 10510b (41:510b)
ld [wca00], a
jp CloseSRAM
-Function105153: ; 105153 (41:5153)
+InitMysteryGiftLayout: ; 105153 (41:5153)
call ClearBGPalettes
call DisableLCD
ld hl, MysteryGiftGFX
@@ -1333,7 +1359,7 @@ Function105153: ; 105153 (41:5153)
ld [hl], $41
call EnableLCD
call WaitBGMap
- ld b, SCGB_1D
+ ld b, SCGB_MYSTERY_GIFT
call GetSGBLayout
call SetPalettes
ret
@@ -1398,7 +1424,7 @@ Function105688: ; 105688 (41:5688)
call PlaceString
call WaitBGMap
call Function10578c
- call Function1050fb
+ call MysteryGift_ClearTrainerData
ld a, $24
ld [wca02], a
ld a, [rIE]
@@ -1511,7 +1537,7 @@ Function105777: ; 105777 (41:5777)
call ClearTileMap
call EnableLCD
call WaitBGMap
- ld b, SCGB_08
+ ld b, SCGB_DIPLOMA
call GetSGBLayout
call SetPalettes
ret