Identify remaining Mystery Gift labels and constants

Source: https://projectpokemon.org/home/forums/topic/43930-mystery-gift-reverse-engineering-of-ir-protocol/
This commit is contained in:
Rangi 2020-10-27 13:22:27 -04:00
parent 2738858985
commit 446f1846b1
11 changed files with 667 additions and 519 deletions

View File

@ -71,10 +71,10 @@ rTIMA EQU $ff05 ; Timer counter (R/W)
rTMA EQU $ff06 ; Timer Modulo (R/W)
rTAC EQU $ff07 ; Timer Control (R/W)
rTAC_ON EQU 2
rTAC_4096_HZ EQU 0
rTAC_262144_HZ EQU 1
rTAC_65536_HZ EQU 2
rTAC_16384_HZ EQU 3
rTAC_4096_HZ EQU %00
rTAC_262144_HZ EQU %01
rTAC_65536_HZ EQU %10
rTAC_16384_HZ EQU %11
rIF EQU $ff0f ; Interrupt Flag (R/W)
rNR10 EQU $ff10 ; Channel 1 Sweep register (R/W)
rNR11 EQU $ff11 ; Channel 1 Sound length/Wave pattern duty (R/W)
@ -147,6 +147,9 @@ rHDMA3 EQU $ff53 ; CGB Mode Only - New DMA Destination, High
rHDMA4 EQU $ff54 ; CGB Mode Only - New DMA Destination, Low
rHDMA5 EQU $ff55 ; CGB Mode Only - New DMA Length/Mode/Start
rRP EQU $ff56 ; CGB Mode Only - Infrared Communications Port
rRP_LED_ON EQU 0
rRP_RECEIVING EQU 1
rRP_ENABLE_READ_MASK EQU %11000000
rBGPI EQU $ff68 ; CGB Mode Only - Background Palette Index
rBGPI_AUTO_INCREMENT EQU 7 ; increment rBGPI after write to rBGPD
rBGPD EQU $ff69 ; CGB Mode Only - Background Palette Data

View File

@ -14,6 +14,8 @@ FEMALE EQU 1
; G/S version ID: 0 = Gold, 1 = Silver (used by checkver)
GS_VERSION EQU 0
; Pokémon Pikachu 2, a step counter / virtual pet device (used by Mystery Gift)
POKEMON_PIKACHU_2_VERSION EQU 3
; save file corruption check values
SAVE_CHECK_VALUE_1 EQU 99

View File

@ -30,3 +30,5 @@ SERIAL_NO_DATA_BYTE EQU $fe
SERIAL_PATCH_LIST_PART_TERMINATOR EQU $ff
SERIAL_PREAMBLE_LENGTH EQU 6
MAX_MYSTERY_GIFT_PARTNERS EQU 5

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
PrepMysteryGiftDataToSend:
StageDataForMysteryGift:
ld de, wMysteryGiftStaging
ld a, $1 + GS_VERSION
ld a, GS_VERSION + 1
ld [de], a
inc de ; wMysteryGiftStaging+1
ld a, BANK(sGameData)
@ -46,10 +46,10 @@ PrepMysteryGiftDataToSend:
ld a, [sBackupMysteryGiftItem]
ld [de], a
inc de
ld a, [sBackupMysteryGiftItem + 1]
ld a, [sNumDailyMysteryGiftPartnerIDs]
ld [de], a
ld a, $14
ld [wca00], a
ld a, wMysteryGiftPlayerDataEnd - wMysteryGiftPlayerData
ld [wUnusedMysteryGiftStagedDataLength], a
call CloseSRAM
ld hl, wMysteryGiftStaging
ld de, wMysteryGiftPlayerData
@ -121,7 +121,7 @@ PrepMysteryGiftDataToSend:
pop de
ret
MysteryGiftGetItemHeldEffect:
MysteryGiftGetItem:
ld a, c
cp MysteryGiftItems.End - MysteryGiftItems
jr nc, MysteryGiftFallbackItem

View File

@ -173,12 +173,13 @@ _ResetWRAM:
ld [wRoamMon2MapNumber], a
ld [wRoamMon3MapNumber], a
ld a, BANK(sMysteryGiftItem)
ld a, BANK(sMysteryGiftItem) ; aka BANK(sMysteryGiftUnlocked)
call OpenSRAM
ld hl, sMysteryGiftItem
xor a
ld [hli], a
dec a
assert sMysteryGiftItem + 1 == sMysteryGiftUnlocked
dec a ; -1
ld [hl], a
call CloseSRAM
@ -370,7 +371,7 @@ Continue:
ld c, 20
call DelayFrames
farcall JumpRoamMons
farcall MysteryGift_CopyReceivedDecosToPC
farcall CopyMysteryGiftReceivedDecorationsToPC
farcall ClockContinue
ld a, [wSpawnAfterChampion]
cp SPAWN_LANCE

View File

@ -206,7 +206,7 @@ MainMenu_GetWhichMenu:
ld a, BANK(sNumDailyMysteryGiftPartnerIDs)
call OpenSRAM
ld a, [sNumDailyMysteryGiftPartnerIDs]
cp -1
cp -1 ; locked?
call CloseSRAM
jr nz, .mystery_gift
; This check makes no difference.

View File

@ -272,7 +272,7 @@ DoMysteryGiftIfDayHasPassed:
ld hl, wBuffer1
call InitOneDayCountdown
call CloseSRAM
farcall Function1050c8
farcall ResetDailyMysteryGiftLimitIfUnlocked
.not_timed_out
ld a, BANK(sMysteryGiftTimer)

View File

@ -88,8 +88,14 @@ NEXTU
hPrintNumBuffer:: ds 10
NEXTU
; miscellaneous
ds 9
; Mystery Gift
hMGExchangedByte:: db
hMGExchangedWord:: dw
hMGNumBits:: db
hMGChecksum:: dw
ds 1
hMGUnusedMsgLength:: db
hMGRole:: db
hMGStatusFlags:: db
ENDU

View File

@ -47,19 +47,20 @@ sMailbox8Backup:: mailmsg sMailbox8Backup
sMailbox9Backup:: mailmsg sMailbox9Backup
sMailbox10Backup:: mailmsg sMailbox10Backup
sMysteryGiftData::
sMysteryGiftItem:: db
sMysteryGiftUnlocked:: db
sBackupMysteryGiftItem:: db
sNumDailyMysteryGiftPartnerIDs:: db
sDailyMysteryGiftPartnerIDs:: ds 5 * 2 ; maximum 5 per day, 2 bytes per ID
sDailyMysteryGiftPartnerIDs:: ds MAX_MYSTERY_GIFT_PARTNERS * 2
sMysteryGiftDecorationsReceived:: flag_array NUM_NON_TROPHY_DECOS
ds 4
sMysteryGiftTimer:: dw
ds 1
sMysteryGiftTrainerHouseFlag:: db
sMysteryGiftPartnerName:: ds NAME_LENGTH
ds 1
sMysteryGiftTrainer:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
sMysteryGiftUnusedFlag:: db
sMysteryGiftTrainer:: ds wMysteryGiftTrainerEnd - wMysteryGiftTrainer
sBackupMysteryGiftItemEnd::
ds $30

View File

@ -1000,29 +1000,11 @@ ENDU
NEXTU
; mystery gift data
UNION
wMysteryGiftPartyTemp:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH
NEXTU
wMysteryGiftStaging:: ds 80
NEXTU
ds 7
wc807:: ds 1
ds 10
wMobileSDK_PacketChecksum:: dw
ds 4
wMobileSDK_AdapterType:: db
ds 5
wMobileSDK_SendCommandID:: db
ds 2
wc821:: ds 1
wc822:: ds 46
ENDU
UNION
wMysteryGiftTrainerData:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
wMysteryGiftTrainerDataEnd::
wMysteryGiftTrainer:: ds 1 + (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 1
wMysteryGiftTrainerEnd::
NEXTU
wMysteryGiftCardHolderName:: ds PLAYER_NAME_LENGTH
@ -1031,7 +1013,7 @@ ENDU
ds 138
wMysteryGiftPartnerData::
wc900:: db
wMysteryGiftGameVersion:: db
wMysteryGiftPartnerID:: dw
wMysteryGiftPartnerName:: ds NAME_LENGTH
wMysteryGiftPartnerDexCaught:: db
@ -1069,9 +1051,9 @@ wCreditsBlankFrame2bppEnd::
NEXTU
; mystery gift data
wca00:: db
wca01:: db
wca02:: db
wUnusedMysteryGiftStagedDataLength:: db
wMysteryGiftMessageCount:: db
wMysteryGiftStagedDataLength:: db
NEXTU
; link data
@ -1108,6 +1090,20 @@ wccb8:: ds 1
wccb9:: ds 1
wccba:: ds 102
NEXTU
; mobile
ds 7
wc807:: ds 1
ds 10
wMobileSDK_PacketChecksum:: dw
ds 4
wMobileSDK_AdapterType:: db
ds 5
wMobileSDK_SendCommandID:: db
ds 2
wc821:: ds 1
wc822:: ds 46
if DEF(_DEBUG)
NEXTU
; debug room