diff options
| -rw-r--r-- | battle/core.asm | 102 | ||||
| -rwxr-xr-x | engine/mysterygift.asm | 170 | ||||
| -rwxr-xr-x | engine/mysterygift2.asm | 2 | ||||
| -rw-r--r-- | hram.asm | 9 | 
4 files changed, 115 insertions, 168 deletions
| diff --git a/battle/core.asm b/battle/core.asm index 1abecba4c..ee362be41 100644 --- a/battle/core.asm +++ b/battle/core.asm @@ -116,8 +116,6 @@ DoBattle: ; 3c000  	jp BattleMenu  ; 3c0e5 - -  WildFled_EnemyFled_LinkBattleCanceled: ; 3c0e5  	call Call_LoadTempTileMapToTileMap  	ld a, [wBattleResult] @@ -160,7 +158,6 @@ WildFled_EnemyFled_LinkBattleCanceled: ; 3c0e5  	ret  ; 3c12f -  BattleTurn: ; 3c12f  .loop  	call MobileFn_3c1bf @@ -252,7 +249,6 @@ MobileFn_3c1bf: mobile  	ret  ; 3c1d6 -  HandleBetweenTurnEffects: ; 3c1d6  	ld a, [hLinkPlayerNumber]  	cp $1 @@ -769,7 +765,6 @@ HandleEncore: ; 3c4df  	jp StdBattleTextBox  ; 3c543 -  TryEnemyFlee: ; 3c543  	ld a, [wBattleMode]  	dec a @@ -861,7 +856,6 @@ AlwaysFleeMons: ; 3c5b1  	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 @@ MoveEffectPriorities: ; 3c5df  	db -1  ; 3c5ec -  GetMoveEffect: ; 3c5ec  	ld a, b  	dec a @@ -928,7 +921,6 @@ GetMoveEffect: ; 3c5ec  	ret  ; 3c5fe -  Battle_EnemyFirst: ; 3c5fe  	call LoadTileMapToTempTileMap  	call TryEnemyFlee @@ -1695,7 +1687,6 @@ HandleSafeguard: ; 3cafb  	ld hl, BattleText_SafeguardFaded  	jp StdBattleTextBox -  HandleScreens: ; 3cb36  	ld a, [hLinkPlayerNumber]  	cp 1 @@ -1739,7 +1730,6 @@ HandleScreens: ; 3cb36  	db "Enemy@"  ; 3cb80 -  .LightScreenTick: ; 3cb80  	ld a, [de]  	dec a @@ -1878,7 +1868,6 @@ SubtractHPFromUser: ; 3cc3f  	jp UpdateHPBarBattleHuds  ; 3cc45 -  SubtractHP: ; 3cc45  	ld hl, BattleMonHP  	ld a, [hBattleTurn] @@ -1925,7 +1914,6 @@ GetSixteenthMaxHP: ; 3cc76  	ret  ; 3cc83 -  GetEighthMaxHP: ; 3cc83  ; output: bc  	call GetQuarterMaxHP @@ -1941,7 +1929,6 @@ GetEighthMaxHP: ; 3cc83  	ret  ; 3cc8e -  GetQuarterMaxHP: ; 3cc8e  ; output: bc  	call GetMaxHP @@ -1962,7 +1949,6 @@ GetQuarterMaxHP: ; 3cc8e  	ret  ; 3cc9f -  GetHalfMaxHP: ; 3cc9f  ; output: bc  	call GetMaxHP @@ -1980,7 +1966,6 @@ GetHalfMaxHP: ; 3cc9f  	ret  ; 3ccac -  GetMaxHP: ; 3ccac  ; output: bc, Buffer1-2 @@ -2036,7 +2021,6 @@ CheckUserHasEnoughHP: ; 3ccde  	ret  ; 3ccef -  RestoreHP ; 3ccef  	ld hl, EnemyMonMaxHP  	ld a, [hBattleTurn] @@ -2349,8 +2333,6 @@ IsAnyMonHoldingExpShare: ; 3ceaa  	ret  ; 3ceec - -  StopDangerSound: ; 3ceec  	xor a  	ld [Danger], a @@ -2622,7 +2604,6 @@ WinTrainerBattle: ; 3cfa4  	dw SentAllToMomText  ; 3d0b1 -  .CheckMaxedOutMomMoney: ; 3d0b1  	ld hl, wMomsMoney + 2  	ld a, [hld] @@ -2705,8 +2686,6 @@ PlayVictoryMusic: ; 3d0ea  	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 @@ KantoGymLeaders:  	db BLUE  	db -1 -  HandlePlayerMonFaint: ; 3d14e  	call FaintYourPokemon  	ld hl, EnemyMonHP @@ -2961,7 +2939,6 @@ PlayerPartyMonEntrance: ; 3d2b3  	jp SpikesDamage  ; 3d2e0 -  CheckMobileBattleError: ; 3d2e0  	ld a, [wLinkMode]  	cp LINK_MOBILE @@ -3060,7 +3037,6 @@ ForcePickPartyMonInBattle: ; 3d362  	jr .pick  ; 3d375 -  PickSwitchMonInBattle: ; 3d375  .pick  	call PickPartyMonInBattle @@ -3085,7 +3061,6 @@ ForcePickSwitchMonInBattle: ; 3d380  	ret  ; 3d38e -  LostBattle: ; 3d38e  	ld a, 1  	ld [BattleEnded], a @@ -3182,7 +3157,6 @@ LostBattle: ; 3d38e  	ret  ; 3d432 -  EnemyMonFaintedAnimation: ; 3d432  	hlcoord 12, 5  	decoord 12, 6 @@ -3250,7 +3224,6 @@ MonFaintedAnimation: ; 3d444  	db "       @"  ; 3d490 -  SlideBattlePicOut: ; 3d490  	ld [hMapObjectIndexBuffer], a  	ld c, a @@ -3297,7 +3270,6 @@ SlideBattlePicOut: ; 3d490  	ret  ; 3d4c3 -  ForceEnemySwitch: ; 3d4c3  	call ResetEnemyBattleVars  	ld a, [wEnemySwitchMonIndex] @@ -3313,7 +3285,6 @@ ForceEnemySwitch: ; 3d4c3  	ret  ; 3d4e1 -  EnemySwitch: ; 3d4e1  	call CheckWhetherToAskSwitch  	jr nc, EnemySwitch_SetMode @@ -3846,7 +3817,6 @@ CheckPlayerPartyForFitPkmn: ; 3d873  	ret  ; 3d887 -  CheckIfCurPartyMonIsFitToFight: ; 3d887  	ld a, [CurPartyMon]  	ld hl, PartyMon1HP @@ -3878,7 +3848,6 @@ CheckIfCurPartyMonIsFitToFight: ; 3d887  	ret  ; 3d8b3 -  TryToRunAwayFromBattle: ; 3d8b3  ; Run away from battle, with or without item  	ld a, [BattleType] @@ -4068,7 +4037,6 @@ TryToRunAwayFromBattle: ; 3d8b3  	ret  ; 3da0d -  InitBattleMon: ; 3da0d  	ld a, MON_SPECIES  	call GetPartyParamLocation @@ -4159,7 +4127,6 @@ ResetPlayerStatLevels: ; 3dab1  	ret  ; 3dabd -  InitEnemyMon: ; 3dabd  	ld a, [CurPartyMon]  	ld hl, OTPartyMon1Species @@ -4213,7 +4180,6 @@ InitEnemyMon: ; 3dabd  	ret  ; 3db32 -  SwitchPlayerMon: ; 3db32  	call ClearSprites  	ld a, [CurBattleMon] @@ -4234,7 +4200,6 @@ SwitchPlayerMon: ; 3db32  	ret  ; 3db5f -  SendOutPlayerMon: ; 3db5f  	ld hl, BattleMonDVs  	predef GetUnownLetter @@ -4580,7 +4545,6 @@ UseOpponentItem:  	jp StdBattleTextBox  ; 3ddc8 -  ItemRecoveryAnim: ; 3ddc8  	push hl  	push de @@ -4665,7 +4629,6 @@ UseHeldStatusHealingItem: ; 3dde9  	db $ff  ; 3de51 -  UseConfusionHealingItem: ; 3de51  	ld a, BATTLE_VARS_SUBSTATUS3_OPP  	call GetBattleVar @@ -4790,7 +4753,6 @@ HandleStatBoostingHeldItems: ; 3de97  	db $ff  ; 3df12 -  GetPartymonItem: ; 3df12  	ld hl, PartyMon1Item  	ld a, [CurBattleMon] @@ -4824,8 +4786,6 @@ UpdateBattleHUDs: ; 3df2c  	ret  ; 3df48 - -  UpdatePlayerHUD:: ; 3df48  	push hl  	push de @@ -5383,35 +5343,42 @@ BattleMenuPKMN_Loop:  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  	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 @@ PassedBattleMonEntrance: ; 3e459  	jp SpikesDamage  ; 3e489 -  BattleMenu_Run: ; 3e489  	call Call_LoadTempTileMapToTileMap  	ld a, $3 @@ -5583,7 +5549,6 @@ BattleMenu_Run: ; 3e489  	jp BattleMenu  ; 3e4a8 -  CheckAmuletCoin: ; 3e4a8  	ld a, [BattleMonItem]  	ld b, a @@ -5990,7 +5955,6 @@ MoveInfoBox: ; 3e6c8  	db "TYPE/@"  ; 3e75f -  .PrintPP: ; 3e75f  	hlcoord 5, 11  	ld a, [wLinkMode] ; What's the point of this check? @@ -6060,8 +6024,6 @@ CheckPlayerHasUsableMoves: ; 3e786  	ret  ; 3e7c1 - -  ParseEnemyAction: ; 3e7c1  	ld a, [wEnemyIsSwitching]  	and a @@ -6242,7 +6204,6 @@ LinkBattleSendReceiveAction: ; 3e8e4  	ret  ; 3e8eb -  LoadEnemyMon: ; 3e8eb  ; Initialize enemy monster parameters  ; To do this we pull the species from TempEnemyMonSpecies @@ -6275,7 +6236,6 @@ LoadEnemyMon: ; 3e8eb  ; Grab the BaseData for this species  	call GetBaseData -  ; Let's get the item:  ; Is the item predetermined? @@ -6290,7 +6250,6 @@ LoadEnemyMon: ; 3e8eb  	ld a, [hl]  	jr .UpdateItem -  .WildItem:  ; In a wild battle, we pull from the item slots in BaseData @@ -6320,11 +6279,9 @@ LoadEnemyMon: ; 3e8eb  	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 @@ LoadEnemyMon: ; 3e8eb  	ld [de], a  	jp .Happiness -  .InitDVs:  ; Trainer DVs @@ -6359,7 +6315,6 @@ LoadEnemyMon: ; 3e8eb  	dec a  	jr nz, .UpdateDVs -  ; Wild DVs  ; Here's where the fun starts @@ -6402,7 +6357,6 @@ LoadEnemyMon: ; 3e8eb  ; We're done with DVs  	jr .UpdateDVs -  .NotRoaming:  ; Register a contains BattleType @@ -6429,16 +6383,13 @@ LoadEnemyMon: ; 3e8eb  	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 @@ LoadEnemyMon: ; 3e8eb  	call CheckUnownLetter  	jr c, .GenerateDVs ; try again -  .Magikarp:  ; Skimming this part recommended @@ -6513,7 +6463,6 @@ LoadEnemyMon: ; 3e8eb  	cp a, 1024 >> 8  	jr c, .GenerateDVs ; try again -  ; Finally done with DVs  .Happiness: @@ -6588,7 +6537,6 @@ LoadEnemyMon: ; 3e8eb  	ld [hl], a  	jr .Moves -  .OpponentParty:  ; Get HP from the party struct  	ld hl, (OTPartyMon1HP + 1) @@ -6608,7 +6556,6 @@ LoadEnemyMon: ; 3e8eb  	ld a, [hl] ; OTPartyMonStatus  	ld [EnemyMonStatus], a -  .Moves:  	ld hl, BaseType1  	ld de, EnemyMonType1 @@ -6718,7 +6665,6 @@ LoadEnemyMon: ; 3e8eb  	ret  ; 3eb38 -  CheckSleepingTreeMon: ; 3eb38  ; Return carry if species is in the list  ; for the current time of day @@ -6779,7 +6725,6 @@ CheckSleepingTreeMon: ; 3eb38  	db -1 ; end  ; 3eb75 -  CheckUnownLetter: ; 3eb75  ; Return carry if the Unown letter hasn't been unlocked yet @@ -6848,7 +6793,6 @@ CheckUnownLetter: ; 3eb75  ; 3ebc7 -  SwapBattlerLevels: ; 3ebc7  ; unreferenced  	push bc @@ -6924,7 +6868,6 @@ BattleWinSlideInEnemyTrainerFrontpic: ; 3ebd8  	ret  ; 3ec2c -  ApplyStatusEffectOnPlayerStats: ; 3ec2c  	ld a, 1  	jr ApplyStatusEffectOnStats @@ -7143,7 +7086,6 @@ ApplyStatLevelMultiplier: ; 3ecb7  	db  4,  1 ; 400%  ; 3ed45 -  BadgeStatBoosts: ; 3ed45  ; Raise BattleMon stats depending on which badges have been obtained. @@ -7202,7 +7144,6 @@ BadgeStatBoosts: ; 3ed45  	ret  ; 3ed7c -  BoostStat: ; 3ed7c  ; Raise stat at hl by 1/8. @@ -7235,7 +7176,6 @@ BoostStat: ; 3ed7c  	ret  ; 3ed9f -  _LoadBattleFontsHPBar: ; 3ed9f  	callab LoadBattleFontsHPBar  	ret @@ -7246,7 +7186,6 @@ _LoadHPBar: ; 3eda6  	ret  ; 3edad -  LoadHPExpBarGFX: ; unreferenced  	ld de, EnemyHPBarBorderGFX  	ld hl, VTiles2 tile $6c @@ -7262,7 +7201,6 @@ LoadHPExpBarGFX: ; unreferenced  	jp Get2bpp  ; 3edd1 -  EmptyBattleTextBox: ; 3edd1  	ld hl, .empty  	jp BattleTextBox @@ -7270,7 +7208,6 @@ EmptyBattleTextBox: ; 3edd1  	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 @@ _BattleRandom:: ; 3edd8  	ret  ; 3ee0f -  Call_PlayBattleAnim_OnlyIfVisible: ; 3ee0f  	ld a, BATTLE_VARS_SUBSTATUS3  	call GetBattleVar @@ -7373,7 +7309,6 @@ FinishBattleAnim: ; 3ee27  	ret  ; 3ee3b -  GiveExperiencePoints: ; 3ee3b  ; Give experience.  ; Don't give experience if linked or in the Battle Tower. @@ -7832,7 +7767,6 @@ TextJump_StringBuffer2ExpPoints: ; 3f131  	db "@"  ; 3f136 -  AnimateExpBar: ; 3f136  	push bc @@ -8019,8 +7953,6 @@ AnimateExpBar: ; 3f136  	ld [hBGMapMode], a  	ret - -  SendOutPkmnText: ; 3f26d  	ld a, [wLinkMode]  	and a @@ -8083,7 +8015,6 @@ SendOutPkmnText: ; 3f26d  	jp BattleTextBox  ; 3f2d1 -  JumpText_GoPkmn: ; 3f2d1  	text_jump Text_GoPkmn  	start_asm @@ -8197,7 +8128,6 @@ TextJump_ComeBack: ; 3f35b  	db "@"  ; 3f360 -  HandleSafariAngerEatingStatus: ; unreferenced  	ld hl, wSafariMonEating  	ld a, [hl] @@ -8230,7 +8160,6 @@ HandleSafariAngerEatingStatus: ; unreferenced  	jp StdBattleTextBox  ; 3f390 -  FillInExpBar: ; 3f390  	push hl  	call CalcExpBar @@ -8447,7 +8376,6 @@ GetFrontpic_DoAnim: ; 3f4b4  	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,14 +8395,12 @@ StartBattle: ; 3f4c1  	ret  ; 3f4d9 -  _DoBattle: ; 3f4d9  ; unreferenced  	call DoBattle  	ret  ; 3f4dd -  BattleIntro: ; 3f4dd  	callba MobileFn_106050 ; mobile  	call LoadTrainerOrWildMonPic @@ -8702,7 +8628,6 @@ Function3f662: ; 3f662  	ret  ; 3f69e -  ExitBattle: ; 3f69e  	call .HandleEndOfBattle  	call CleanUpBattleRAM @@ -8881,7 +8806,6 @@ DetermineMobileBattleResult: ; 3f77c  	db "  DRAW@"  ; 3f80f -  .Mobile_InvalidBattle: ; 3f80f  	hlcoord 6, 8  	ld de, .Invalid @@ -8896,14 +8820,12 @@ DetermineMobileBattleResult: ; 3f77c  	db "INVALID BATTLE@"  ; 3f830 -  IsMobileBattle2: ; 3f830  	ld a, [wLinkMode]  	cp LINK_MOBILE  	ret  ; 3f836 -  DisplayLinkRecord: ; 3f836  	ld a, BANK(sLinkBattleStats)  	call GetSRAMBank @@ -8925,7 +8847,6 @@ DisplayLinkRecord: ; 3f836  	ret  ; 3f85f -  ReadAndPrintLinkBattleRecord: ; 3f85f  	call ClearTileMap  	call ClearSprites @@ -9060,7 +8981,6 @@ ReadAndPrintLinkBattleRecord: ; 3f85f  	db "TOTAL  WIN LOSE DRAW@"  ; 3f998 -  BattleEnd_HandleRoamMons: ; 3f998  	ld a, [BattleType]  	cp BATTLETYPE_ROAMING @@ -9168,7 +9088,6 @@ GetRoamMonSpecies: ; 3fa31  	ret  ; 3fa42 -  AddLastMobileBattleToLinkRecord: ; 3fa42  	ld hl, OTPlayerID  	ld de, StringBuffer1 @@ -9449,7 +9368,6 @@ InitBattleDisplay: ; 3fb6c  	ret  ; 3fbff -  GetTrainerBackpic: ; 3fbff  ; Load the player character's backpic (6x6) into VRAM starting from VTiles2 tile $31. @@ -9484,7 +9402,6 @@ GetTrainerBackpic: ; 3fbff  	ret  ; 3fc30 -  CopyBackpic: ; 3fc30  	ld a, [rSVBK]  	push af @@ -9543,7 +9460,6 @@ CopyBackpic: ; 3fc30  	ret  ; 3fc8b -  BattleStartMessage: ; 3fc8b  	ld a, [wBattleMode]  	dec a diff --git a/engine/mysterygift.asm b/engine/mysterygift.asm index a7b182624..9f5302506 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 @@ -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 @@ -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] diff --git a/engine/mysterygift2.asm b/engine/mysterygift2.asm index 4fad773e1..4048ea533 100755 --- 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 @@ -69,6 +69,8 @@ hPrintNum8         EQU $ffba  hPrintNum9         EQU $ffbb  hPrintNum10        EQU $ffbc +hMGStatusFlags     EQU $ffbc +  hUsedSpriteIndex   EQU $ffbd  hUsedSpriteTile    EQU $ffbe  hFFBF              EQU $ffbf @@ -77,9 +79,12 @@ hFFC1              EQU $ffc1  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 | 
