shithub: pokecrystal

Download patch

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