ref: b0e7d04ccfc19dfac96c703d56d7ef8e30938624
parent: d7a01e92e9b571b91b956cda873de89f4bf8f5f5
author: pikalaxalt <PikalaxALT@gmail.com>
date: Tue Jun 7 04:08:51 EDT 2016
Some mystery gift functions
--- a/battle/core.asm
+++ b/battle/core.asm
@@ -116,8 +116,6 @@
jp BattleMenu
; 3c0e5
-
-
WildFled_EnemyFled_LinkBattleCanceled: ; 3c0e5
call Call_LoadTempTileMapToTileMap
ld a, [wBattleResult]
@@ -160,7 +158,6 @@
ret
; 3c12f
-
BattleTurn: ; 3c12f
.loop
call MobileFn_3c1bf
@@ -252,7 +249,6 @@
ret
; 3c1d6
-
HandleBetweenTurnEffects: ; 3c1d6
ld a, [hLinkPlayerNumber]
cp $1
@@ -769,7 +765,6 @@
jp StdBattleTextBox
; 3c543
-
TryEnemyFlee: ; 3c543
ld a, [wBattleMode]
dec a
@@ -861,7 +856,6 @@
db -1
; 3c5b4
-
CompareMovePriority: ; 3c5b4
; Compare the priority of the player and enemy's moves.
; Return carry if the player goes first, or z if they match.
@@ -915,7 +909,6 @@
db -1
; 3c5ec
-
GetMoveEffect: ; 3c5ec
ld a, b
dec a
@@ -928,7 +921,6 @@
ret
; 3c5fe
-
Battle_EnemyFirst: ; 3c5fe
call LoadTileMapToTempTileMap
call TryEnemyFlee
@@ -1695,7 +1687,6 @@
ld hl, BattleText_SafeguardFaded
jp StdBattleTextBox
-
HandleScreens: ; 3cb36
ld a, [hLinkPlayerNumber]
cp 1
@@ -1739,7 +1730,6 @@
db "Enemy@"
; 3cb80
-
.LightScreenTick: ; 3cb80
ld a, [de]
dec a
@@ -1878,7 +1868,6 @@
jp UpdateHPBarBattleHuds
; 3cc45
-
SubtractHP: ; 3cc45
ld hl, BattleMonHP
ld a, [hBattleTurn]
@@ -1925,7 +1914,6 @@
ret
; 3cc83
-
GetEighthMaxHP: ; 3cc83
; output: bc
call GetQuarterMaxHP
@@ -1941,7 +1929,6 @@
ret
; 3cc8e
-
GetQuarterMaxHP: ; 3cc8e
; output: bc
call GetMaxHP
@@ -1962,7 +1949,6 @@
ret
; 3cc9f
-
GetHalfMaxHP: ; 3cc9f
; output: bc
call GetMaxHP
@@ -1980,7 +1966,6 @@
ret
; 3ccac
-
GetMaxHP: ; 3ccac
; output: bc, Buffer1-2
@@ -2036,7 +2021,6 @@
ret
; 3ccef
-
RestoreHP ; 3ccef
ld hl, EnemyMonMaxHP
ld a, [hBattleTurn]
@@ -2349,8 +2333,6 @@
ret
; 3ceec
-
-
StopDangerSound: ; 3ceec
xor a
ld [Danger], a
@@ -2622,7 +2604,6 @@
dw SentAllToMomText
; 3d0b1
-
.CheckMaxedOutMomMoney: ; 3d0b1
ld hl, wMomsMoney + 2
ld a, [hld]
@@ -2705,8 +2686,6 @@
ret
; 3d123
-
-
; These functions check if the current opponent is a gym leader or one of a
; few other special trainers.
@@ -2760,7 +2739,6 @@
db BLUE
db -1
-
HandlePlayerMonFaint: ; 3d14e
call FaintYourPokemon
ld hl, EnemyMonHP
@@ -2961,7 +2939,6 @@
jp SpikesDamage
; 3d2e0
-
CheckMobileBattleError: ; 3d2e0
ld a, [wLinkMode]
cp LINK_MOBILE
@@ -3060,7 +3037,6 @@
jr .pick
; 3d375
-
PickSwitchMonInBattle: ; 3d375
.pick
call PickPartyMonInBattle
@@ -3085,7 +3061,6 @@
ret
; 3d38e
-
LostBattle: ; 3d38e
ld a, 1
ld [BattleEnded], a
@@ -3182,7 +3157,6 @@
ret
; 3d432
-
EnemyMonFaintedAnimation: ; 3d432
hlcoord 12, 5
decoord 12, 6
@@ -3250,7 +3224,6 @@
db " @"
; 3d490
-
SlideBattlePicOut: ; 3d490
ld [hMapObjectIndexBuffer], a
ld c, a
@@ -3297,7 +3270,6 @@
ret
; 3d4c3
-
ForceEnemySwitch: ; 3d4c3
call ResetEnemyBattleVars
ld a, [wEnemySwitchMonIndex]
@@ -3313,7 +3285,6 @@
ret
; 3d4e1
-
EnemySwitch: ; 3d4e1
call CheckWhetherToAskSwitch
jr nc, EnemySwitch_SetMode
@@ -3846,7 +3817,6 @@
ret
; 3d887
-
CheckIfCurPartyMonIsFitToFight: ; 3d887
ld a, [CurPartyMon]
ld hl, PartyMon1HP
@@ -3878,7 +3848,6 @@
ret
; 3d8b3
-
TryToRunAwayFromBattle: ; 3d8b3
; Run away from battle, with or without item
ld a, [BattleType]
@@ -4068,7 +4037,6 @@
ret
; 3da0d
-
InitBattleMon: ; 3da0d
ld a, MON_SPECIES
call GetPartyParamLocation
@@ -4159,7 +4127,6 @@
ret
; 3dabd
-
InitEnemyMon: ; 3dabd
ld a, [CurPartyMon]
ld hl, OTPartyMon1Species
@@ -4213,7 +4180,6 @@
ret
; 3db32
-
SwitchPlayerMon: ; 3db32
call ClearSprites
ld a, [CurBattleMon]
@@ -4234,7 +4200,6 @@
ret
; 3db5f
-
SendOutPlayerMon: ; 3db5f
ld hl, BattleMonDVs
predef GetUnownLetter
@@ -4580,7 +4545,6 @@
jp StdBattleTextBox
; 3ddc8
-
ItemRecoveryAnim: ; 3ddc8
push hl
push de
@@ -4665,7 +4629,6 @@
db $ff
; 3de51
-
UseConfusionHealingItem: ; 3de51
ld a, BATTLE_VARS_SUBSTATUS3_OPP
call GetBattleVar
@@ -4790,7 +4753,6 @@
db $ff
; 3df12
-
GetPartymonItem: ; 3df12
ld hl, PartyMon1Item
ld a, [CurBattleMon]
@@ -4824,8 +4786,6 @@
ret
; 3df48
-
-
UpdatePlayerHUD:: ; 3df48
push hl
push de
@@ -5383,15 +5343,19 @@
Battle_StatsScreen: ; 3e308
call DisableLCD
+
ld hl, VTiles2 tile $31
ld de, VTiles0
- ld bc, $0110
+ ld bc, $11 tiles
call CopyBytes
+
ld hl, VTiles2
ld de, VTiles0 tile $11
ld bc, $31 tiles
call CopyBytes
+
call EnableLCD
+
call ClearSprites
call LowVolume
xor a ; PARTYMON
@@ -5398,20 +5362,23 @@
ld [MonType], a
callba BattleStatsScreenInit
call MaxVolume
+
call DisableLCD
+
ld hl, VTiles0
ld de, VTiles2 tile $31
ld bc, $11 tiles
call CopyBytes
+
ld hl, VTiles0 tile $11
ld de, VTiles2
ld bc, $31 tiles
call CopyBytes
+
call EnableLCD
ret
; 3e358
-
TryPlayerSwitch: ; 3e358
ld a, [CurBattleMon]
ld d, a
@@ -5566,7 +5533,6 @@
jp SpikesDamage
; 3e489
-
BattleMenu_Run: ; 3e489
call Call_LoadTempTileMapToTileMap
ld a, $3
@@ -5583,7 +5549,6 @@
jp BattleMenu
; 3e4a8
-
CheckAmuletCoin: ; 3e4a8
ld a, [BattleMonItem]
ld b, a
@@ -5990,7 +5955,6 @@
db "TYPE/@"
; 3e75f
-
.PrintPP: ; 3e75f
hlcoord 5, 11
ld a, [wLinkMode] ; What's the point of this check?
@@ -6060,8 +6024,6 @@
ret
; 3e7c1
-
-
ParseEnemyAction: ; 3e7c1
ld a, [wEnemyIsSwitching]
and a
@@ -6242,7 +6204,6 @@
ret
; 3e8eb
-
LoadEnemyMon: ; 3e8eb
; Initialize enemy monster parameters
; To do this we pull the species from TempEnemyMonSpecies
@@ -6275,7 +6236,6 @@
; Grab the BaseData for this species
call GetBaseData
-
; Let's get the item:
; Is the item predetermined?
@@ -6290,7 +6250,6 @@
ld a, [hl]
jr .UpdateItem
-
.WildItem:
; In a wild battle, we pull from the item slots in BaseData
@@ -6320,11 +6279,9 @@
jr nc, .UpdateItem
ld a, [BaseItems+1]
-
.UpdateItem:
ld [EnemyMonItem], a
-
; Initialize DVs
; If we're in a trainer battle, DVs are predetermined
@@ -6346,7 +6303,6 @@
ld [de], a
jp .Happiness
-
.InitDVs:
; Trainer DVs
@@ -6359,7 +6315,6 @@
dec a
jr nz, .UpdateDVs
-
; Wild DVs
; Here's where the fun starts
@@ -6402,7 +6357,6 @@
; We're done with DVs
jr .UpdateDVs
-
.NotRoaming:
; Register a contains BattleType
@@ -6429,16 +6383,13 @@
ld [hli], a
ld [hl], c
-
; We've still got more to do if we're dealing with a wild monster
ld a, [wBattleMode]
dec a
jr nz, .Happiness
-
; Species-specfic:
-
; Unown
ld a, [TempEnemyMonSpecies]
cp a, UNOWN
@@ -6452,7 +6403,6 @@
call CheckUnownLetter
jr c, .GenerateDVs ; try again
-
.Magikarp:
; Skimming this part recommended
@@ -6513,7 +6463,6 @@
cp a, 1024 >> 8
jr c, .GenerateDVs ; try again
-
; Finally done with DVs
.Happiness:
@@ -6588,7 +6537,6 @@
ld [hl], a
jr .Moves
-
.OpponentParty:
; Get HP from the party struct
ld hl, (OTPartyMon1HP + 1)
@@ -6608,7 +6556,6 @@
ld a, [hl] ; OTPartyMonStatus
ld [EnemyMonStatus], a
-
.Moves:
ld hl, BaseType1
ld de, EnemyMonType1
@@ -6718,7 +6665,6 @@
ret
; 3eb38
-
CheckSleepingTreeMon: ; 3eb38
; Return carry if species is in the list
; for the current time of day
@@ -6779,7 +6725,6 @@
db -1 ; end
; 3eb75
-
CheckUnownLetter: ; 3eb75
; Return carry if the Unown letter hasn't been unlocked yet
@@ -6848,7 +6793,6 @@
; 3ebc7
-
SwapBattlerLevels: ; 3ebc7
; unreferenced
push bc
@@ -6924,7 +6868,6 @@
ret
; 3ec2c
-
ApplyStatusEffectOnPlayerStats: ; 3ec2c
ld a, 1
jr ApplyStatusEffectOnStats
@@ -7143,7 +7086,6 @@
db 4, 1 ; 400%
; 3ed45
-
BadgeStatBoosts: ; 3ed45
; Raise BattleMon stats depending on which badges have been obtained.
@@ -7202,7 +7144,6 @@
ret
; 3ed7c
-
BoostStat: ; 3ed7c
; Raise stat at hl by 1/8.
@@ -7235,7 +7176,6 @@
ret
; 3ed9f
-
_LoadBattleFontsHPBar: ; 3ed9f
callab LoadBattleFontsHPBar
ret
@@ -7246,7 +7186,6 @@
ret
; 3edad
-
LoadHPExpBarGFX: ; unreferenced
ld de, EnemyHPBarBorderGFX
ld hl, VTiles2 tile $6c
@@ -7262,7 +7201,6 @@
jp Get2bpp
; 3edd1
-
EmptyBattleTextBox: ; 3edd1
ld hl, .empty
jp BattleTextBox
@@ -7270,7 +7208,6 @@
db "@"
; 3edd8
-
_BattleRandom:: ; 3edd8
; If the normal RNG is used in a link battle it'll desync.
; To circumvent this a shared PRNG is used instead.
@@ -7340,7 +7277,6 @@
ret
; 3ee0f
-
Call_PlayBattleAnim_OnlyIfVisible: ; 3ee0f
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVar
@@ -7373,7 +7309,6 @@
ret
; 3ee3b
-
GiveExperiencePoints: ; 3ee3b
; Give experience.
; Don't give experience if linked or in the Battle Tower.
@@ -7832,7 +7767,6 @@
db "@"
; 3f136
-
AnimateExpBar: ; 3f136
push bc
@@ -8019,8 +7953,6 @@
ld [hBGMapMode], a
ret
-
-
SendOutPkmnText: ; 3f26d
ld a, [wLinkMode]
and a
@@ -8083,7 +8015,6 @@
jp BattleTextBox
; 3f2d1
-
JumpText_GoPkmn: ; 3f2d1
text_jump Text_GoPkmn
start_asm
@@ -8197,7 +8128,6 @@
db "@"
; 3f360
-
HandleSafariAngerEatingStatus: ; unreferenced
ld hl, wSafariMonEating
ld a, [hl]
@@ -8230,7 +8160,6 @@
jp StdBattleTextBox
; 3f390
-
FillInExpBar: ; 3f390
push hl
call CalcExpBar
@@ -8447,7 +8376,6 @@
ret
; 3f4c1
-
StartBattle: ; 3f4c1
; This check prevents you from entering a battle without any Pokemon.
; Those using walk-through-walls to bypass getting a Pokemon experience
@@ -8467,7 +8395,6 @@
ret
; 3f4d9
-
_DoBattle: ; 3f4d9
; unreferenced
call DoBattle
@@ -8474,7 +8401,6 @@
ret
; 3f4dd
-
BattleIntro: ; 3f4dd
callba MobileFn_106050 ; mobile
call LoadTrainerOrWildMonPic
@@ -8702,7 +8628,6 @@
ret
; 3f69e
-
ExitBattle: ; 3f69e
call .HandleEndOfBattle
call CleanUpBattleRAM
@@ -8881,7 +8806,6 @@
db " DRAW@"
; 3f80f
-
.Mobile_InvalidBattle: ; 3f80f
hlcoord 6, 8
ld de, .Invalid
@@ -8896,7 +8820,6 @@
db "INVALID BATTLE@"
; 3f830
-
IsMobileBattle2: ; 3f830
ld a, [wLinkMode]
cp LINK_MOBILE
@@ -8903,7 +8826,6 @@
ret
; 3f836
-
DisplayLinkRecord: ; 3f836
ld a, BANK(sLinkBattleStats)
call GetSRAMBank
@@ -8925,7 +8847,6 @@
ret
; 3f85f
-
ReadAndPrintLinkBattleRecord: ; 3f85f
call ClearTileMap
call ClearSprites
@@ -9060,7 +8981,6 @@
db "TOTAL WIN LOSE DRAW@"
; 3f998
-
BattleEnd_HandleRoamMons: ; 3f998
ld a, [BattleType]
cp BATTLETYPE_ROAMING
@@ -9168,7 +9088,6 @@
ret
; 3fa42
-
AddLastMobileBattleToLinkRecord: ; 3fa42
ld hl, OTPlayerID
ld de, StringBuffer1
@@ -9449,7 +9368,6 @@
ret
; 3fbff
-
GetTrainerBackpic: ; 3fbff
; Load the player character's backpic (6x6) into VRAM starting from VTiles2 tile $31.
@@ -9484,7 +9402,6 @@
ret
; 3fc30
-
CopyBackpic: ; 3fc30
ld a, [rSVBK]
push af
@@ -9542,7 +9459,6 @@
jr nz, .outer_loop
ret
; 3fc8b
-
BattleStartMessage: ; 3fc8b
ld a, [wBattleMode]
--- a/engine/mysterygift.asm
+++ b/engine/mysterygift.asm
@@ -2,13 +2,13 @@
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
@@ -239,14 +239,16 @@
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 @@
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 @@
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 @@
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 @@
Function104b49: ; 104b49 (41:4b49)
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
@@ -346,7 +353,7 @@
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
@@ -357,7 +364,7 @@
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
@@ -369,7 +376,7 @@
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
@@ -379,7 +386,7 @@
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
@@ -393,20 +400,20 @@
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
@@ -413,9 +420,9 @@
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 @@
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 @@
.asm_104c37
call Function104d96
call Function104ddd
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $10
jp z, Function104d1c
cp $6c
@@ -485,7 +494,7 @@
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
@@ -500,7 +509,7 @@
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
@@ -511,7 +520,7 @@
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
@@ -523,7 +532,7 @@
call Function104d4e
ret nz
call Function10502e
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
call Function104d43
@@ -533,7 +542,7 @@
call Function104d56
ret nz
call Function105033
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret nz
ld a, [hPrintNum1]
@@ -548,13 +557,13 @@
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,7 +578,7 @@
Function104d32: ; 104d32 (41:4d32)
ld a, $80
- ld [hPrintNum10], a
+ ld [hMGStatusFlags], a
and a
ret
@@ -576,7 +585,7 @@
Function104d38: ; 104d38 (41:4d38)
call Function104d96
call Function104e46
- ld a, [hPrintNum10]
+ ld a, [hMGStatusFlags]
cp $6c
ret
@@ -583,19 +592,19 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
push de
ld d, $3d
call Function104dd1
- ld hl, hPrintNum10
+ ld hl, hMGStatusFlags
ld b, $1
call Function104ed6
pop de
@@ -986,7 +995,7 @@
cpl
ld b, a
xor a
- ld [hMoneyTemp + 2], a
+ ld [hMGJoypadPressed + 2], a
call Function104d86
.asm_104fd2
inc b
@@ -1009,10 +1018,10 @@
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 @@
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 @@
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 @@
ld [wca00], a
jp CloseSRAM
-Function105153: ; 105153 (41:5153)
+InitMysteryGiftLayout: ; 105153 (41:5153)
call ClearBGPalettes
call DisableLCD
ld hl, MysteryGiftGFX
@@ -1398,7 +1424,7 @@
call PlaceString
call WaitBGMap
call Function10578c
- call Function1050fb
+ call MysteryGift_ClearTrainerData
ld a, $24
ld [wca02], a
ld a, [rIE]
--- a/engine/mysterygift2.asm
+++ b/engine/mysterygift2.asm
@@ -1,4 +1,4 @@
-Function2c642: ; 2c642 (b:4642)
+PrepMysteryGiftDataToSend: ; 2c642 (b:4642)
ld de, wMysteryGiftStaging
ld a, $1
ld [de], a
--- a/hram.asm
+++ b/hram.asm
@@ -69,6 +69,8 @@
hPrintNum9 EQU $ffbb
hPrintNum10 EQU $ffbc
+hMGStatusFlags EQU $ffbc
+
hUsedSpriteIndex EQU $ffbd
hUsedSpriteTile EQU $ffbe
hFFBF EQU $ffbf
@@ -77,9 +79,12 @@
hFFC2 EQU $ffc2
hMoneyTemp EQU $ffc3
+hMGJoypadPressed EQU $ffc3
+hMGJoypadReleased EQU $ffc4
+
hFFC6 EQU $ffc6
-hLYOverrideStart EQU $ffc7
-hLYOverrideEnd EQU $ffc8
+hLYOverrideStart EQU $ffc7
+hLYOverrideEnd EQU $ffc8
hMobileReceive EQU $ffc9
hFFCA EQU $ffca
hLinkPlayerNumber EQU $ffcb