@@ -173,6 +173,9 @@ $(C_BUILDDIR)/isagbprn.o: CFLAGS := -mthumb-interwork
|
||||
$(C_BUILDDIR)/trainer_tower.o: CFLAGS += -ffreestanding
|
||||
$(C_BUILDDIR)/flying.o: CFLAGS += -ffreestanding
|
||||
|
||||
$(C_BUILDDIR)/librfu_intr.o: CC1 := tools/agbcc/bin/agbcc_arm
|
||||
$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet
|
||||
|
||||
ifeq ($(NODEP),1)
|
||||
$(C_BUILDDIR)/%.o: c_dep :=
|
||||
else
|
||||
|
||||
+2
-2
@@ -1270,7 +1270,7 @@ _0800FBF8:
|
||||
_0800FC00: .4byte gTrainers
|
||||
_0800FC04: .4byte gTrainerBattleOpponent_A
|
||||
_0800FC08:
|
||||
bl sav1_map_get_battletype
|
||||
bl GetCurrentMapBattleScene
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _0800FC20
|
||||
@@ -1341,7 +1341,7 @@ _0800FC88:
|
||||
movs r0, 0x13
|
||||
b _0800FCAA
|
||||
_0800FC90:
|
||||
bl sav1_map_get_battletype
|
||||
bl GetCurrentMapBattleScene
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0
|
||||
|
||||
+4
-4
@@ -45,7 +45,7 @@ _0814B716:
|
||||
ldr r0, _0814B74C @ =0x0000012f
|
||||
bl PlayNewMapMusic
|
||||
ldr r0, _0814B750 @ =sub_8056534
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
_0814B73E:
|
||||
movs r0, 0
|
||||
_0814B740:
|
||||
@@ -58,8 +58,8 @@ _0814B74C: .4byte 0x0000012f
|
||||
_0814B750: .4byte sub_8056534
|
||||
thumb_func_end sub_814B6FC
|
||||
|
||||
thumb_func_start sub_814B754
|
||||
sub_814B754: @ 814B754
|
||||
thumb_func_start StartBerryCrush
|
||||
StartBerryCrush: @ 814B754
|
||||
push {r4-r7,lr}
|
||||
mov r7, r8
|
||||
push {r7}
|
||||
@@ -183,7 +183,7 @@ _0814B84C:
|
||||
.align 2, 0
|
||||
_0814B858: .4byte sub_814BA80
|
||||
_0814B85C: .4byte sub_814BA98
|
||||
thumb_func_end sub_814B754
|
||||
thumb_func_end StartBerryCrush
|
||||
|
||||
thumb_func_start sub_814B860
|
||||
sub_814B860: @ 814B860
|
||||
|
||||
+17
-17
@@ -143,7 +143,7 @@ _0814BC30:
|
||||
movs r0, 0x3
|
||||
b _0814BC6A
|
||||
_0814BC44:
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814BC66
|
||||
_0814BC4A:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -359,7 +359,7 @@ sub_814BDBC: @ 814BDBC
|
||||
beq _0814BDD2
|
||||
b _0814BDFC
|
||||
_0814BDCC:
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814BDFC
|
||||
_0814BDD2:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -494,7 +494,7 @@ _0814BEB4:
|
||||
bl sub_814BB4C
|
||||
b _0814BFC6
|
||||
_0814BED4:
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814BFC0
|
||||
_0814BEDA:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -650,7 +650,7 @@ _0814C008:
|
||||
adds r1, r4, r0
|
||||
adds r0, r4, 0
|
||||
bl sub_814DA24
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814C108
|
||||
_0814C01A:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -720,7 +720,7 @@ _0814C080:
|
||||
ldrb r0, [r2]
|
||||
adds r0, 0x1
|
||||
strb r0, [r2]
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814C108
|
||||
.align 2, 0
|
||||
_0814C0AC: .4byte sub_814DB84
|
||||
@@ -748,7 +748,7 @@ _0814C0D2:
|
||||
adds r1, r4, r3
|
||||
adds r0, r4, 0
|
||||
bl sub_814DC24
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814C108
|
||||
_0814C0E4:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -904,7 +904,7 @@ _0814C1FC:
|
||||
movs r0, 0x1E
|
||||
movs r1, 0
|
||||
bl SetGpuReg
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814C23C
|
||||
_0814C21E:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -962,14 +962,14 @@ _0814C26C:
|
||||
adds r0, r1, 0
|
||||
movs r2, 0x78
|
||||
movs r3, 0x50
|
||||
bl sub_815F138
|
||||
bl StartMinigameCountdown
|
||||
b _0814C2EC
|
||||
_0814C28A:
|
||||
bl sub_815F198
|
||||
bl IsMinigameCountdownRunning
|
||||
cmp r0, 0
|
||||
bne _0814C2F2
|
||||
_0814C292:
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814C2EC
|
||||
_0814C298:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -1655,7 +1655,7 @@ _0814C77A:
|
||||
movs r2, 0xC
|
||||
bl memcpy
|
||||
adds r0, r4, 0
|
||||
bl sub_80F9E2C
|
||||
bl RfuPrepareSend0x2f00
|
||||
_0814C7AC:
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
@@ -2065,7 +2065,7 @@ _0814CADA:
|
||||
bl sub_814DE50
|
||||
cmp r0, 0
|
||||
beq _0814CB18
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
movs r0, 0
|
||||
strh r0, [r4, 0x10]
|
||||
b _0814CB12
|
||||
@@ -2158,7 +2158,7 @@ _0814CB8A:
|
||||
bl sub_814DE50
|
||||
cmp r0, 0
|
||||
beq _0814CC02
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
movs r0, 0
|
||||
strh r0, [r5, 0x10]
|
||||
movs r0, 0x12
|
||||
@@ -2846,7 +2846,7 @@ _0814D0D6:
|
||||
.align 2, 0
|
||||
_0814D0FC: .4byte 0x00008c9f
|
||||
_0814D100:
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814D178
|
||||
_0814D106:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -3028,7 +3028,7 @@ _0814D256:
|
||||
beq _0814D296
|
||||
b _0814D30C
|
||||
_0814D260:
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814D30C
|
||||
_0814D266:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -3316,14 +3316,14 @@ _0814D47C:
|
||||
beq _0814D498
|
||||
b _0814D4B8
|
||||
_0814D482:
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814D4B8
|
||||
_0814D488:
|
||||
bl IsLinkTaskFinished
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _0814D4BE
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
b _0814D4B8
|
||||
_0814D498:
|
||||
ldr r0, _0814D4B4 @ =gReceivedRemoteLinkPlayers
|
||||
|
||||
+15
-15
@@ -63,7 +63,7 @@ _0814D63A:
|
||||
ldr r0, _0814D65C @ =gReservedSpritePaletteCount
|
||||
strb r4, [r0]
|
||||
movs r0, 0x3
|
||||
bl sub_815C980
|
||||
bl DigitObjUtil_Init
|
||||
b _0814D878
|
||||
.align 2, 0
|
||||
_0814D658: .4byte 0x01000200
|
||||
@@ -338,7 +338,7 @@ _0814D8B4:
|
||||
.4byte _0814D9A2
|
||||
.4byte _0814D9B2
|
||||
_0814D8D4:
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _0814D9BA
|
||||
_0814D8DA:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -427,7 +427,7 @@ _0814D9A2:
|
||||
bl DestroyWirelessStatusIndicatorSprite
|
||||
adds r0, r5, 0
|
||||
bl sub_814EF10
|
||||
bl sub_815C9F4
|
||||
bl DigitObjUtil_Teardown
|
||||
b _0814D9BA
|
||||
_0814D9B2:
|
||||
movs r0, 0
|
||||
@@ -2578,15 +2578,15 @@ sub_814EAD4: @ 814EAD4
|
||||
movs r0, 0x4
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r0, 0
|
||||
bl sub_815CD70
|
||||
bl DigitObjUtil_PrintNumOn
|
||||
movs r0, 0x6
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r0, 0x1
|
||||
bl sub_815CD70
|
||||
bl DigitObjUtil_PrintNumOn
|
||||
movs r0, 0x8
|
||||
ldrsh r1, [r4, r0]
|
||||
movs r0, 0x2
|
||||
bl sub_815CD70
|
||||
bl DigitObjUtil_PrintNumOn
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
bx r0
|
||||
@@ -2608,13 +2608,13 @@ sub_814EB04: @ 814EB04
|
||||
strb r0, [r1]
|
||||
movs r0, 0x2
|
||||
movs r1, 0x1
|
||||
bl sub_815D1A8
|
||||
bl DigitObjUtil_HideOrShow
|
||||
movs r0, 0x1
|
||||
movs r1, 0x1
|
||||
bl sub_815D1A8
|
||||
bl DigitObjUtil_HideOrShow
|
||||
movs r0, 0
|
||||
movs r1, 0x1
|
||||
bl sub_815D1A8
|
||||
bl DigitObjUtil_HideOrShow
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_814EB04
|
||||
@@ -3060,17 +3060,17 @@ _0814EE3E:
|
||||
movs r0, 0
|
||||
movs r1, 0
|
||||
adds r2, r4, 0
|
||||
bl sub_815CA40
|
||||
bl DigitObjUtil_CreatePrinter
|
||||
adds r2, r4, 0
|
||||
adds r2, 0x10
|
||||
movs r0, 0x1
|
||||
movs r1, 0
|
||||
bl sub_815CA40
|
||||
bl DigitObjUtil_CreatePrinter
|
||||
adds r4, 0x20
|
||||
movs r0, 0x2
|
||||
movs r1, 0
|
||||
adds r2, r4, 0
|
||||
bl sub_815CA40
|
||||
bl DigitObjUtil_CreatePrinter
|
||||
ldrh r0, [r6, 0x12]
|
||||
cmp r0, 0x1
|
||||
bne _0814EED8
|
||||
@@ -3130,11 +3130,11 @@ _0814EF46:
|
||||
cmp r4, 0x1
|
||||
bls _0814EF46
|
||||
movs r0, 0x2
|
||||
bl sub_815D108
|
||||
bl DigitObjUtil_DeletePrinter
|
||||
movs r0, 0x1
|
||||
bl sub_815D108
|
||||
bl DigitObjUtil_DeletePrinter
|
||||
movs r0, 0
|
||||
bl sub_815D108
|
||||
bl DigitObjUtil_DeletePrinter
|
||||
movs r4, 0
|
||||
movs r1, 0xC2
|
||||
lsls r1, 1
|
||||
|
||||
+18
-16
@@ -751,7 +751,7 @@ sub_8080CDC: @ 8080CDC
|
||||
lsrs r0, 16
|
||||
cmp r0, 0x1
|
||||
bhi _08080D3C
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
bl HideFieldMessageBox
|
||||
ldr r0, _08080D38 @ =sub_8080F78
|
||||
b _08080D72
|
||||
@@ -845,14 +845,14 @@ sub_8080DC0: @ 8080DC0
|
||||
bl sub_8080D8C
|
||||
cmp r0, 0x1
|
||||
beq _08080DFE
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
b _08080E02
|
||||
.align 2, 0
|
||||
_08080DE8: .4byte gSpecialVar_Result
|
||||
_08080DEC:
|
||||
cmp r0, 0x3
|
||||
bne _08080DF6
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
b _08080E02
|
||||
_08080DF6:
|
||||
cmp r0, 0x7
|
||||
@@ -1010,7 +1010,7 @@ _08080F48: .4byte gLinkType
|
||||
_08080F4C: .4byte 0x00004411
|
||||
_08080F50: .4byte gTasks
|
||||
_08080F54:
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
ldr r0, _08080F70 @ =gTasks
|
||||
mov r2, r8
|
||||
adds r1, r2, r7
|
||||
@@ -1564,7 +1564,7 @@ _0808138C:
|
||||
ble _0808143A
|
||||
b _080813AA
|
||||
_0808139C:
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
b _080813AA
|
||||
_080813A2:
|
||||
ldr r0, _080813B4 @ =gReceivedRemoteLinkPlayers
|
||||
@@ -1756,7 +1756,7 @@ _08081510:
|
||||
ldr r1, [r1]
|
||||
str r1, [r0]
|
||||
adds r0, r5, 0
|
||||
bl sub_800B284
|
||||
bl IntlConvertLinkPlayerName
|
||||
lsls r0, r4, 24
|
||||
lsrs r0, 24
|
||||
bl ResetBlockReceivedFlag
|
||||
@@ -1785,7 +1785,7 @@ _0808154C:
|
||||
strh r0, [r6]
|
||||
b _0808160A
|
||||
_08081560:
|
||||
bl sub_800AB9C
|
||||
bl PrepareSendLinkCmd2FFE_or_RfuCmd6600
|
||||
movs r0, 0x6
|
||||
strh r0, [r6]
|
||||
b _0808160A
|
||||
@@ -1895,7 +1895,7 @@ sub_8081624: @ 8081624
|
||||
.align 2, 0
|
||||
_0808163C: .4byte gMain
|
||||
_08081640:
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
ldrb r0, [r4]
|
||||
adds r0, 0x1
|
||||
strb r0, [r4]
|
||||
@@ -1942,9 +1942,9 @@ sub_8081668: @ 8081668
|
||||
beq _0808170A
|
||||
ldr r0, _080816C4 @ =gBattleOutcome
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0x1
|
||||
cmp r0, 0x1 @ B_OUTCOME_WON
|
||||
beq _080816C8
|
||||
cmp r0, 0x2
|
||||
cmp r0, 0x2 @ B_OUTCOME_LOST
|
||||
beq _080816EC
|
||||
b _0808170A
|
||||
.align 2, 0
|
||||
@@ -1955,6 +1955,7 @@ _080816BC: .4byte gLocalLinkPlayerId
|
||||
_080816C0: .4byte gWirelessCommType
|
||||
_080816C4: .4byte gBattleOutcome
|
||||
_080816C8:
|
||||
@ MEvent_RecordIdOfWonderCardSenderByEventType(0, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
|
||||
ldr r4, _080816E8 @ =gLinkPlayers
|
||||
bl GetMultiplayerId
|
||||
eors r0, r5
|
||||
@@ -1967,11 +1968,12 @@ _080816C8:
|
||||
adds r1, r4
|
||||
ldr r1, [r1]
|
||||
movs r0, 0
|
||||
bl sub_8144714
|
||||
bl MEvent_RecordIdOfWonderCardSenderByEventType
|
||||
b _0808170A
|
||||
.align 2, 0
|
||||
_080816E8: .4byte gLinkPlayers
|
||||
_080816EC:
|
||||
@ MEvent_RecordIdOfWonderCardSenderByEventType(1, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId);
|
||||
ldr r4, _08081718 @ =gLinkPlayers
|
||||
bl GetMultiplayerId
|
||||
eors r0, r5
|
||||
@@ -1984,7 +1986,7 @@ _080816EC:
|
||||
adds r1, r4
|
||||
ldr r1, [r1]
|
||||
movs r0, 0x1
|
||||
bl sub_8144714
|
||||
bl MEvent_RecordIdOfWonderCardSenderByEventType
|
||||
_0808170A:
|
||||
bl InUnionRoom
|
||||
cmp r0, 0x1
|
||||
@@ -2198,7 +2200,7 @@ _080818A8:
|
||||
strb r0, [r1]
|
||||
strb r0, [r1, 0x1]
|
||||
bl m4aMPlayAllStop
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
_080818B8:
|
||||
ldrh r0, [r4, 0x8]
|
||||
adds r0, 0x1
|
||||
@@ -2274,7 +2276,7 @@ _08081940:
|
||||
strb r0, [r1]
|
||||
strb r0, [r1, 0x1]
|
||||
bl m4aMPlayAllStop
|
||||
bl sub_800AB9C
|
||||
bl PrepareSendLinkCmd2FFE_or_RfuCmd6600
|
||||
_08081950:
|
||||
ldrh r0, [r4]
|
||||
adds r0, 0x1
|
||||
@@ -2287,7 +2289,7 @@ _0808195C:
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08081970
|
||||
bl sub_8117118
|
||||
bl UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade
|
||||
adds r0, r5, 0
|
||||
bl DestroyTask
|
||||
_08081970:
|
||||
@@ -2507,7 +2509,7 @@ sub_8081B08: @ 8081B08
|
||||
adds r4, r0, 0
|
||||
lsls r4, 24
|
||||
lsrs r4, 24
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
ldr r1, _08081B28 @ =gTasks
|
||||
lsls r0, r4, 2
|
||||
adds r0, r4
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_81507FC
|
||||
sub_81507FC: @ 81507FC
|
||||
thumb_func_start StartDodrioBerryPicking
|
||||
StartDodrioBerryPicking: @ 81507FC
|
||||
push {r4-r6,lr}
|
||||
adds r5, r1, 0
|
||||
lsls r0, 16
|
||||
@@ -97,7 +97,7 @@ _081508D2:
|
||||
pop {r4-r6}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_81507FC
|
||||
thumb_func_end StartDodrioBerryPicking
|
||||
|
||||
thumb_func_start sub_81508D8
|
||||
sub_81508D8: @ 81508D8
|
||||
@@ -382,7 +382,7 @@ _08150B08:
|
||||
bl sub_8155E68
|
||||
cmp r0, 0
|
||||
bne _08150BFC
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
b _08150BDC
|
||||
_08150B16:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -649,7 +649,7 @@ _08150D28:
|
||||
movs r1, 0x8
|
||||
movs r2, 0x78
|
||||
movs r3, 0x50
|
||||
bl sub_815F138
|
||||
bl StartMinigameCountdown
|
||||
b _08150D52
|
||||
_08150D3A:
|
||||
bl IsLinkTaskFinished
|
||||
@@ -658,11 +658,11 @@ _08150D3A:
|
||||
beq _08150D74
|
||||
b _08150D52
|
||||
_08150D46:
|
||||
bl sub_815F198
|
||||
bl IsMinigameCountdownRunning
|
||||
cmp r0, 0
|
||||
bne _08150D74
|
||||
_08150D4E:
|
||||
bl sub_80FA42C
|
||||
bl LinkRfu_SetRfuFuncToSend6600
|
||||
_08150D52:
|
||||
ldr r0, _08150D60 @ =gUnknown_203F3E0
|
||||
ldr r1, [r0]
|
||||
@@ -1611,7 +1611,7 @@ _081514A4:
|
||||
beq _081514C0
|
||||
b _081514D6
|
||||
_081514AA:
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
movs r0, 0x7
|
||||
bl sub_81549D4
|
||||
b _081514CC
|
||||
|
||||
@@ -407,7 +407,7 @@ sub_815A61C: @ 815A61C
|
||||
ands r5, r7
|
||||
orrs r5, r4
|
||||
strb r5, [r0, 0xB]
|
||||
bl sub_80F9E2C
|
||||
bl RfuPrepareSend0x2f00
|
||||
add sp, 0x20
|
||||
pop {r3-r5}
|
||||
mov r8, r3
|
||||
@@ -637,7 +637,7 @@ sub_815AAD8: @ 815AAD8
|
||||
orrs r1, r0
|
||||
str r1, [sp, 0x4]
|
||||
mov r0, sp
|
||||
bl sub_80F9E2C
|
||||
bl RfuPrepareSend0x2f00
|
||||
add sp, 0x8
|
||||
pop {r0}
|
||||
bx r0
|
||||
@@ -692,7 +692,7 @@ sub_815AB3C: @ 815AB3C
|
||||
str r1, [sp]
|
||||
str r0, [sp, 0x4]
|
||||
mov r0, sp
|
||||
bl sub_80F9E2C
|
||||
bl RfuPrepareSend0x2f00
|
||||
add sp, 0x8
|
||||
pop {r0}
|
||||
bx r0
|
||||
|
||||
+3
-3
@@ -334,8 +334,8 @@ sub_80FEE24: @ 80FEE24
|
||||
bx r0
|
||||
thumb_func_end sub_80FEE24
|
||||
|
||||
thumb_func_start sub_80FEE44
|
||||
sub_80FEE44: @ 80FEE44
|
||||
thumb_func_start ShowEasyChatScreen
|
||||
ShowEasyChatScreen: @ 80FEE44
|
||||
push {lr}
|
||||
ldr r0, _080FEE58 @ =gSpecialVar_0x8004
|
||||
ldrh r0, [r0]
|
||||
@@ -431,7 +431,7 @@ _080FEF1C: .4byte gSpecialVar_0x8005
|
||||
_080FEF20: .4byte 0x00002cd0
|
||||
_080FEF24: .4byte gSpecialVar_0x8004
|
||||
_080FEF28: .4byte sub_80568C4
|
||||
thumb_func_end sub_80FEE44
|
||||
thumb_func_end ShowEasyChatScreen
|
||||
|
||||
thumb_func_start sub_80FEF2C
|
||||
sub_80FEF2C: @ 80FEF2C
|
||||
|
||||
@@ -1,697 +0,0 @@
|
||||
.include "constants/gba_constants.inc"
|
||||
.include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start IntrSIO32
|
||||
IntrSIO32: @ 81DFC50
|
||||
mov r12, sp
|
||||
stmdb sp!, {r11,r12,lr,pc}
|
||||
ldr r3, _081DFCB0 @ =gSTWIStatus
|
||||
ldr r0, [r3]
|
||||
ldr r2, [r0]
|
||||
sub r11, r12, 0x4
|
||||
cmp r2, 0xA
|
||||
bne _081DFC8C
|
||||
ldr r0, [r0, 0x20]
|
||||
cmp r0, 0
|
||||
ldmdbeq r11, {r11,sp,lr}
|
||||
bxeq lr
|
||||
bl Callback_Dummy_ID
|
||||
ldmdb r11, {r11,sp,lr}
|
||||
bx lr
|
||||
_081DFC8C:
|
||||
ldrb r3, [r0, 0x14]
|
||||
cmp r3, 0x1
|
||||
bne _081DFCA4
|
||||
bl sio32intr_clock_master
|
||||
ldmdb r11, {r11,sp,lr}
|
||||
bx lr
|
||||
_081DFCA4:
|
||||
bl sio32intr_clock_slave
|
||||
ldmdb r11, {r11,sp,lr}
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_081DFCB0: .4byte gSTWIStatus
|
||||
arm_func_end IntrSIO32
|
||||
|
||||
arm_func_start sio32intr_clock_master
|
||||
sio32intr_clock_master: @ 81DFCB4
|
||||
mov r12, sp
|
||||
stmdb sp!, {r4-r6,r11,r12,lr,pc}
|
||||
mov r0, 0x50
|
||||
sub r11, r12, 0x4
|
||||
bl STWI_set_timer_in_RAM
|
||||
mov r4, 0x120
|
||||
ldr r2, _081DFF28 @ =gSTWIStatus
|
||||
add r4, r4, 0x4000000
|
||||
ldr lr, [r4]
|
||||
ldr r12, [r2]
|
||||
ldr r3, [r12]
|
||||
mov r6, r2
|
||||
cmp r3, 0
|
||||
bne _081DFD34
|
||||
cmp lr, 0x80000000
|
||||
bne _081DFDB4
|
||||
ldrb r2, [r12, 0x5]
|
||||
ldrb r3, [r12, 0x4]
|
||||
cmp r2, r3
|
||||
bhi _081DFD24
|
||||
ldr r3, [r12, 0x24]
|
||||
mov r1, r2
|
||||
ldr r2, [r3, r1, lsl 2]
|
||||
str r2, [r4]
|
||||
ldrb r3, [r12, 0x5]
|
||||
add r3, r3, 0x1
|
||||
strb r3, [r12, 0x5]
|
||||
b _081DFE10
|
||||
_081DFD24:
|
||||
mov r3, 0x1
|
||||
str r3, [r12]
|
||||
str lr, [r4]
|
||||
b _081DFE10
|
||||
_081DFD34:
|
||||
ldr r3, [r12]
|
||||
cmp r3, 0x1
|
||||
bne _081DFDC4
|
||||
mov r3, 0x99000000
|
||||
add r3, r3, 0x660000
|
||||
mov r5, 0x80000000
|
||||
and r2, lr, r5, asr 15
|
||||
cmp r2, r3
|
||||
bne _081DFDB4
|
||||
mov r3, 0
|
||||
strb r3, [r12, 0x8]
|
||||
ldr r1, [r6]
|
||||
ldrb r0, [r1, 0x8]
|
||||
ldr r2, [r1, 0x28]
|
||||
str lr, [r2, r0, lsl 2]
|
||||
ldrb r3, [r1, 0x8]
|
||||
add r3, r3, 0x1
|
||||
strb r3, [r1, 0x8]
|
||||
ldr r2, [r6]
|
||||
strb lr, [r2, 0x9]
|
||||
ldr r3, [r6]
|
||||
mov r2, lr, lsr 8
|
||||
strb r2, [r3, 0x7]
|
||||
ldr r1, [r6]
|
||||
ldrb r2, [r1, 0x7]
|
||||
ldrb r3, [r1, 0x8]
|
||||
cmp r2, r3
|
||||
bcc _081DFDFC
|
||||
mov r3, 0x2
|
||||
str r3, [r1]
|
||||
str r5, [r4]
|
||||
b _081DFE10
|
||||
_081DFDB4:
|
||||
bl STWI_stop_timer_in_RAM
|
||||
mov r0, 0x82
|
||||
bl STWI_set_timer_in_RAM
|
||||
b _081DFF3C
|
||||
_081DFDC4:
|
||||
ldr r3, [r12]
|
||||
cmp r3, 0x2
|
||||
bne _081DFE10
|
||||
ldrb r1, [r12, 0x8]
|
||||
ldr r2, [r12, 0x28]
|
||||
str lr, [r2, r1, lsl 2]
|
||||
ldrb r3, [r12, 0x8]
|
||||
add r3, r3, 0x1
|
||||
strb r3, [r12, 0x8]
|
||||
ldr r1, [r6]
|
||||
ldrb r2, [r1, 0x7]
|
||||
ldrb r3, [r1, 0x8]
|
||||
cmp r2, r3
|
||||
bcs _081DFE08
|
||||
_081DFDFC:
|
||||
mov r3, 0x3
|
||||
str r3, [r1]
|
||||
b _081DFE10
|
||||
_081DFE08:
|
||||
mov r3, 0x80000000
|
||||
str r3, [r4]
|
||||
_081DFE10:
|
||||
mov r0, 0x1
|
||||
bl handshake_wait
|
||||
mov r0, r0, lsl 16
|
||||
cmp r0, 0x10000
|
||||
beq _081DFF3C
|
||||
mov r4, 0x128
|
||||
add r4, r4, 0x4000000
|
||||
mov r5, 0x5000
|
||||
add r3, r5, 0xB
|
||||
strh r3, [r4]
|
||||
mov r0, 0
|
||||
bl handshake_wait
|
||||
mov r0, r0, lsl 16
|
||||
cmp r0, 0x10000
|
||||
beq _081DFF3C
|
||||
bl STWI_stop_timer_in_RAM
|
||||
ldr r1, [r6]
|
||||
ldr r0, [r1]
|
||||
cmp r0, 0x3
|
||||
bne _081DFF2C
|
||||
ldrb r3, [r1, 0x9]
|
||||
cmp r3, 0xA5
|
||||
cmpne r3, 0xA7
|
||||
beq _081DFE84
|
||||
and r3, r3, 0xFF
|
||||
cmp r3, 0xB5
|
||||
beq _081DFE84
|
||||
cmp r3, 0xB7
|
||||
bne _081DFECC
|
||||
_081DFE84:
|
||||
mov r1, 0x120
|
||||
add r1, r1, 0x4000000
|
||||
mov r12, 0x128
|
||||
add r12, r12, 0x4000000
|
||||
ldr r0, [r6]
|
||||
mov r3, 0
|
||||
strb r3, [r0, 0x14]
|
||||
mov r2, 0x80000000
|
||||
str r2, [r1]
|
||||
add r3, r3, 0x5000
|
||||
add r2, r3, 0x2
|
||||
strh r2, [r12]
|
||||
add r3, r3, 0x82
|
||||
strh r3, [r12]
|
||||
ldr r2, [r6]
|
||||
mov r3, 0x5
|
||||
str r3, [r2]
|
||||
b _081DFEFC
|
||||
_081DFECC:
|
||||
cmp r3, 0xEE
|
||||
bne _081DFEEC
|
||||
add r3, r5, 0x3
|
||||
strh r3, [r4]
|
||||
mov r2, 0x4
|
||||
str r2, [r1]
|
||||
strh r0, [r1, 0x12]
|
||||
b _081DFEFC
|
||||
_081DFEEC:
|
||||
add r3, r5, 0x3
|
||||
strh r3, [r4]
|
||||
mov r2, 0x4
|
||||
str r2, [r1]
|
||||
_081DFEFC:
|
||||
ldr r2, [r6]
|
||||
mov r3, 0
|
||||
strb r3, [r2, 0x2C]
|
||||
ldr r0, [r6]
|
||||
ldr r2, [r0, 0x18]
|
||||
cmp r2, r3
|
||||
beq _081DFF3C
|
||||
ldrh r1, [r0, 0x12]
|
||||
ldrb r0, [r0, 0x6]
|
||||
bl Callback_Dummy_M
|
||||
b _081DFF3C
|
||||
.align 2, 0
|
||||
_081DFF28: .4byte gSTWIStatus
|
||||
_081DFF2C:
|
||||
add r3, r5, 0x3
|
||||
strh r3, [r4]
|
||||
add r2, r5, 0x83
|
||||
strh r2, [r4]
|
||||
_081DFF3C:
|
||||
ldmdb r11, {r4-r6,r11,sp,lr}
|
||||
bx lr
|
||||
arm_func_end sio32intr_clock_master
|
||||
|
||||
arm_func_start sio32intr_clock_slave
|
||||
sio32intr_clock_slave: @ 81DFF44
|
||||
mov r12, sp
|
||||
stmdb sp!, {r4-r6,r11,r12,lr,pc}
|
||||
ldr r4, _081E02F0 @ =gSTWIStatus
|
||||
mov r0, 0x64
|
||||
ldr r3, [r4]
|
||||
mov r6, 0
|
||||
strb r6, [r3, 0x10]
|
||||
sub r11, r12, 0x4
|
||||
bl STWI_set_timer_in_RAM
|
||||
mov r0, r6
|
||||
bl handshake_wait
|
||||
mov r0, r0, lsl 16
|
||||
cmp r0, 0x10000
|
||||
mov r5, r4
|
||||
beq _081E0348
|
||||
mov r3, 0x128
|
||||
add r3, r3, 0x4000000
|
||||
mov r2, 0x5000
|
||||
add r2, r2, 0xA
|
||||
strh r2, [r3]
|
||||
mov lr, 0x120
|
||||
ldr r0, [r5]
|
||||
add lr, lr, 0x4000000
|
||||
ldr r12, [lr]
|
||||
ldr r3, [r0]
|
||||
cmp r3, 0x5
|
||||
bne _081E0074
|
||||
ldr r3, [r0, 0x28]
|
||||
mov r4, 0x1
|
||||
mov r0, 0x99000000
|
||||
str r12, [r3]
|
||||
add r0, r0, 0x660000
|
||||
ldr r2, [r5]
|
||||
mov r3, r0, lsr 16
|
||||
strb r4, [r2, 0x5]
|
||||
cmp r3, r12, lsr 16
|
||||
bne _081E01C0
|
||||
ldr r3, [r5]
|
||||
mov r2, r12, lsr 8
|
||||
strb r2, [r3, 0x4]
|
||||
ldr r2, [r5]
|
||||
strb r12, [r2, 0x6]
|
||||
ldr r1, [r5]
|
||||
ldrb r3, [r1, 0x4]
|
||||
cmp r3, r6
|
||||
bne _081E0058
|
||||
ldrb r2, [r1, 0x6]
|
||||
sub r3, r2, 0x27
|
||||
cmp r2, 0x36
|
||||
cmpne r3, 0x2
|
||||
bhi _081E002C
|
||||
add r3, r2, 0x80
|
||||
strb r3, [r1, 0x9]
|
||||
ldr r2, [r5]
|
||||
ldrb r3, [r2, 0x9]
|
||||
ldr r1, [r2, 0x24]
|
||||
add r3, r3, r0
|
||||
b _081E00DC
|
||||
_081E002C:
|
||||
ldr r2, [r1, 0x24]
|
||||
ldr r3, _081E02F4 @ =0x996601ee
|
||||
str r3, [r2]
|
||||
ldr r2, [r5]
|
||||
ldrb r3, [r2, 0x6]
|
||||
sub r3, r3, 0x10
|
||||
cmp r3, 0x2D
|
||||
bhi _081E0114
|
||||
ldr r3, [r2, 0x24]
|
||||
str r4, [r3, 0x4]
|
||||
b _081E0120
|
||||
_081E0058:
|
||||
mov r3, 0x80000000
|
||||
str r3, [lr]
|
||||
strb r4, [r1, 0x5]
|
||||
ldr r2, [r5]
|
||||
add r3, r3, 0x80000006
|
||||
str r3, [r2]
|
||||
b _081E01D0
|
||||
_081E0074:
|
||||
ldr r3, [r0]
|
||||
cmp r3, 0x6
|
||||
bne _081E0174
|
||||
ldrb r1, [r0, 0x5]
|
||||
ldr r2, [r0, 0x28]
|
||||
str r12, [r2, r1, lsl 2]
|
||||
ldrb r3, [r0, 0x5]
|
||||
add r3, r3, 0x1
|
||||
strb r3, [r0, 0x5]
|
||||
ldr r1, [r5]
|
||||
ldrb r2, [r1, 0x4]
|
||||
ldrb r3, [r1, 0x5]
|
||||
cmp r2, r3
|
||||
bcs _081E0168
|
||||
ldrb r2, [r1, 0x6]
|
||||
sub r3, r2, 0x28
|
||||
cmp r2, 0x36
|
||||
cmpne r3, 0x1
|
||||
bhi _081E00EC
|
||||
add r3, r2, 0x80
|
||||
strb r3, [r1, 0x9]
|
||||
ldr r2, [r5]
|
||||
ldrb r3, [r2, 0x9]
|
||||
ldr r1, [r2, 0x24]
|
||||
orr r3, r3, 0x99000000
|
||||
orr r3, r3, 0x660000
|
||||
_081E00DC:
|
||||
str r3, [r1]
|
||||
ldr r2, [r5]
|
||||
strb r6, [r2, 0x7]
|
||||
b _081E0138
|
||||
_081E00EC:
|
||||
ldr r2, [r1, 0x24]
|
||||
ldr r3, _081E02F4 @ =0x996601ee
|
||||
str r3, [r2]
|
||||
ldr r2, [r5]
|
||||
ldrb r3, [r2, 0x6]
|
||||
sub r3, r3, 0x10
|
||||
cmp r3, 0x2D
|
||||
ldrls r2, [r2, 0x24]
|
||||
movls r3, 0x1
|
||||
bls _081E011C
|
||||
_081E0114:
|
||||
ldr r2, [r2, 0x24]
|
||||
mov r3, 0x2
|
||||
_081E011C:
|
||||
str r3, [r2, 0x4]
|
||||
_081E0120:
|
||||
ldr r2, [r5]
|
||||
mov r3, 0x1
|
||||
strb r3, [r2, 0x7]
|
||||
ldr r1, [r5]
|
||||
add r3, r3, 0x2
|
||||
strh r3, [r1, 0x12]
|
||||
_081E0138:
|
||||
ldr r0, [r5]
|
||||
ldr r2, [r0, 0x24]
|
||||
mov r3, 0x120
|
||||
ldr r1, [r2]
|
||||
add r3, r3, 0x4000000
|
||||
str r1, [r3]
|
||||
mov r2, 0x1
|
||||
strb r2, [r0, 0x8]
|
||||
ldr r1, [r5]
|
||||
mov r3, 0x7
|
||||
str r3, [r1]
|
||||
b _081E01D0
|
||||
_081E0168:
|
||||
mov r3, 0x80000000
|
||||
str r3, [lr]
|
||||
b _081E01D0
|
||||
_081E0174:
|
||||
ldr r3, [r0]
|
||||
cmp r3, 0x7
|
||||
bne _081E01D0
|
||||
cmp r12, 0x80000000
|
||||
bne _081E01C0
|
||||
ldrb r2, [r0, 0x7]
|
||||
ldrb r3, [r0, 0x8]
|
||||
cmp r2, r3
|
||||
movcc r3, 0x8
|
||||
strcc r3, [r0]
|
||||
bcc _081E01D0
|
||||
ldrb r1, [r0, 0x8]
|
||||
ldr r3, [r0, 0x24]
|
||||
ldr r2, [r3, r1, lsl 2]
|
||||
str r2, [lr]
|
||||
ldrb r3, [r0, 0x8]
|
||||
add r3, r3, 0x1
|
||||
strb r3, [r0, 0x8]
|
||||
b _081E01D0
|
||||
_081E01C0:
|
||||
bl STWI_stop_timer_in_RAM
|
||||
mov r0, 0x64
|
||||
bl STWI_set_timer_in_RAM
|
||||
b _081E0348
|
||||
_081E01D0:
|
||||
mov r0, 0x1
|
||||
bl handshake_wait
|
||||
mov r0, r0, lsl 16
|
||||
cmp r0, 0x10000
|
||||
beq _081E0348
|
||||
mov r6, r5
|
||||
ldr r3, [r6]
|
||||
ldr r2, [r3]
|
||||
cmp r2, 0x8
|
||||
bne _081E0298
|
||||
mov r4, 0x128
|
||||
add r4, r4, 0x4000000
|
||||
mov r3, 0x5000
|
||||
add r3, r3, 0x2
|
||||
strh r3, [r4]
|
||||
bl STWI_stop_timer_in_RAM
|
||||
ldr r0, [r6]
|
||||
ldrh r3, [r0, 0x12]
|
||||
cmp r3, 0x3
|
||||
bne _081E0244
|
||||
bl STWI_init_slave
|
||||
ldr r3, [r6]
|
||||
ldr r1, [r3, 0x1C]
|
||||
cmp r1, 0
|
||||
beq _081E0348
|
||||
mov r0, 0x1EC
|
||||
add r0, r0, 0x2
|
||||
bl Callback_Dummy_S
|
||||
b _081E0348
|
||||
_081E0244:
|
||||
mov r3, 0x120
|
||||
add r3, r3, 0x4000000
|
||||
mov r1, 0
|
||||
str r1, [r3]
|
||||
mov r2, 0x5000
|
||||
strh r1, [r4]
|
||||
add r2, r2, 0x3
|
||||
strh r2, [r4]
|
||||
mov r3, 0x1
|
||||
strb r3, [r0, 0x14]
|
||||
ldr r0, [r5]
|
||||
ldr r2, [r0, 0x1C]
|
||||
str r1, [r0]
|
||||
cmp r2, r1
|
||||
beq _081E0348
|
||||
ldrb r3, [r0, 0x4]
|
||||
ldrb r0, [r0, 0x6]
|
||||
mov r1, r2
|
||||
orr r0, r0, r3, lsl 8
|
||||
bl Callback_Dummy_S
|
||||
b _081E0348
|
||||
_081E0298:
|
||||
mov r3, 0x208
|
||||
add r3, r3, 0x4000000
|
||||
mov r2, 0
|
||||
strh r2, [r3]
|
||||
mov r1, 0x100
|
||||
add r2, r1, 0x4000002
|
||||
ldrh r3, [r2]
|
||||
tst r3, 0x80
|
||||
beq _081E031C
|
||||
ldrh r3, [r2]
|
||||
tst r3, 0x3
|
||||
bne _081E02F8
|
||||
mov r2, 0xFF00
|
||||
add r1, r1, 0x4000000
|
||||
ldrh r3, [r1]
|
||||
add r2, r2, 0x9B
|
||||
cmp r3, r2
|
||||
bls _081E031C
|
||||
_081E02E0:
|
||||
ldrh r3, [r1]
|
||||
cmp r3, r2
|
||||
bhi _081E02E0
|
||||
b _081E031C
|
||||
.align 2, 0
|
||||
_081E02F0: .4byte gSTWIStatus
|
||||
_081E02F4: .4byte 0x996601ee
|
||||
_081E02F8:
|
||||
mov r2, 0xFF00
|
||||
add r1, r1, 0x4000000
|
||||
ldrh r3, [r1]
|
||||
add r2, r2, 0xFE
|
||||
cmp r3, r2
|
||||
bls _081E031C
|
||||
_081E0310:
|
||||
ldrh r3, [r1]
|
||||
cmp r3, r2
|
||||
bhi _081E0310
|
||||
_081E031C:
|
||||
mov r1, 0x128
|
||||
add r1, r1, 0x4000000
|
||||
mov r0, 0x208
|
||||
add r0, r0, 0x4000000
|
||||
mov r3, 0x5000
|
||||
add r2, r3, 0x2
|
||||
strh r2, [r1]
|
||||
add r3, r3, 0x82
|
||||
strh r3, [r1]
|
||||
mov r2, 0x1
|
||||
strh r2, [r0]
|
||||
_081E0348:
|
||||
ldmdb r11, {r4-r6,r11,sp,lr}
|
||||
bx lr
|
||||
arm_func_end sio32intr_clock_slave
|
||||
|
||||
arm_func_start handshake_wait
|
||||
handshake_wait: @ 81E0350
|
||||
mov r12, sp
|
||||
stmdb sp!, {r11,r12,lr,pc}
|
||||
mov r1, 0x128
|
||||
add r1, r1, 0x4000000
|
||||
mov r0, r0, lsl 16
|
||||
ldr r2, _081E03B4 @ =gSTWIStatus
|
||||
sub r11, r12, 0x4
|
||||
mov lr, r0, lsr 14
|
||||
ldr r12, [r2]
|
||||
_081E0374:
|
||||
ldrb r3, [r12, 0x10]
|
||||
and r0, r3, 0xFF
|
||||
cmp r0, 0x1
|
||||
beq _081E03A0
|
||||
ldrh r3, [r1]
|
||||
and r3, r3, 0x4
|
||||
cmp r3, lr
|
||||
bne _081E0374
|
||||
mov r0, 0
|
||||
ldmdb r11, {r11,sp,lr}
|
||||
bx lr
|
||||
_081E03A0:
|
||||
ldr r2, [r2]
|
||||
mov r3, 0
|
||||
strb r3, [r2, 0x10]
|
||||
ldmdb r11, {r11,sp,lr}
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_081E03B4: .4byte gSTWIStatus
|
||||
arm_func_end handshake_wait
|
||||
|
||||
arm_func_start STWI_set_timer_in_RAM
|
||||
STWI_set_timer_in_RAM: @ 81E03B8
|
||||
mov r12, sp
|
||||
stmdb sp!, {r4,r5,r11,r12,lr,pc}
|
||||
mov r1, 0x208
|
||||
add r1, r1, 0x4000000
|
||||
mov r3, 0
|
||||
sub r11, r12, 0x4
|
||||
ldr r12, _081E0470 @ =gSTWIStatus
|
||||
and lr, r0, 0xFF
|
||||
ldr r2, [r12]
|
||||
cmp lr, 0x50
|
||||
ldrb r0, [r2, 0xA]
|
||||
mov r4, r12
|
||||
mov r2, lr
|
||||
strh r3, [r1]
|
||||
mov r0, r0, lsl 2
|
||||
add r3, r3, 0x100
|
||||
add r1, r3, 0x4000000
|
||||
add r3, r3, 0x4000002
|
||||
add r5, r0, r3
|
||||
beq _081E0440
|
||||
bgt _081E0418
|
||||
cmp lr, 0x32
|
||||
beq _081E042C
|
||||
b _081E048C
|
||||
_081E0418:
|
||||
cmp r2, 0x64
|
||||
beq _081E0458
|
||||
cmp r2, 0x82
|
||||
beq _081E0474
|
||||
b _081E048C
|
||||
_081E042C:
|
||||
mvn r3, 0x334
|
||||
strh r3, [r0, r1]
|
||||
ldr r2, [r4]
|
||||
mov r3, 0x1
|
||||
b _081E0488
|
||||
_081E0440:
|
||||
mov r3, 0xAE000000
|
||||
mov r3, r3, asr 20
|
||||
strh r3, [r0, r1]
|
||||
ldr r2, [r4]
|
||||
mov r3, 0x2
|
||||
b _081E0488
|
||||
_081E0458:
|
||||
mvn r3, 0x660
|
||||
sub r3, r3, 0x9
|
||||
strh r3, [r0, r1]
|
||||
ldr r2, [r4]
|
||||
mov r3, 0x3
|
||||
b _081E0488
|
||||
.align 2, 0
|
||||
_081E0470: .4byte gSTWIStatus
|
||||
_081E0474:
|
||||
mvn r3, 0x850
|
||||
sub r3, r3, 0x2
|
||||
strh r3, [r0, r1]
|
||||
ldr r2, [r4]
|
||||
mov r3, 0x4
|
||||
_081E0488:
|
||||
str r3, [r2, 0xC]
|
||||
_081E048C:
|
||||
mov r12, 0x200
|
||||
add r12, r12, 0x4000002
|
||||
mov r3, 0xC3
|
||||
strh r3, [r5]
|
||||
mov r1, 0x208
|
||||
ldr r2, [r4]
|
||||
add r1, r1, 0x4000000
|
||||
ldrb r0, [r2, 0xA]
|
||||
sub r3, r3, 0xBB
|
||||
mov r3, r3, lsl r0
|
||||
strh r3, [r12]
|
||||
mov r2, 0x1
|
||||
strh r2, [r1]
|
||||
ldmdb r11, {r4,r5,r11,sp,lr}
|
||||
bx lr
|
||||
arm_func_end STWI_set_timer_in_RAM
|
||||
|
||||
arm_func_start STWI_stop_timer_in_RAM
|
||||
STWI_stop_timer_in_RAM: @ 81E04C8
|
||||
mov r12, sp
|
||||
stmdb sp!, {r11,r12,lr,pc}
|
||||
mov r1, 0x100
|
||||
ldr lr, _081E0514 @ =gSTWIStatus
|
||||
add r0, r1, 0x4000000
|
||||
ldr r2, [lr]
|
||||
sub r11, r12, 0x4
|
||||
ldrb r3, [r2, 0xA]
|
||||
mov r12, 0
|
||||
str r12, [r2, 0xC]
|
||||
mov r3, r3, lsl 2
|
||||
strh r12, [r3, r0]
|
||||
ldr r2, [lr]
|
||||
ldrb r3, [r2, 0xA]
|
||||
add r1, r1, 0x4000002
|
||||
mov r3, r3, lsl 2
|
||||
strh r12, [r3, r1]
|
||||
ldmdb r11, {r11,sp,lr}
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_081E0514: .4byte gSTWIStatus
|
||||
arm_func_end STWI_stop_timer_in_RAM
|
||||
|
||||
arm_func_start STWI_init_slave
|
||||
STWI_init_slave: @ 81E0518
|
||||
mov r12, sp
|
||||
stmdb sp!, {r11,r12,lr,pc}
|
||||
ldr r0, _081E05A0 @ =gSTWIStatus
|
||||
ldr r2, [r0]
|
||||
mov r3, 0x5
|
||||
str r3, [r2]
|
||||
mov r1, 0
|
||||
strb r1, [r2, 0x14]
|
||||
ldr r3, [r0]
|
||||
strb r1, [r3, 0x4]
|
||||
ldr r2, [r0]
|
||||
strb r1, [r2, 0x5]
|
||||
ldr r3, [r0]
|
||||
strb r1, [r3, 0x6]
|
||||
ldr r2, [r0]
|
||||
strb r1, [r2, 0x7]
|
||||
ldr r3, [r0]
|
||||
strb r1, [r3, 0x8]
|
||||
ldr r2, [r0]
|
||||
strb r1, [r2, 0x9]
|
||||
ldr r3, [r0]
|
||||
str r1, [r3, 0xC]
|
||||
sub r11, r12, 0x4
|
||||
strb r1, [r3, 0x10]
|
||||
mov r2, 0x128
|
||||
ldr r12, [r0]
|
||||
add r2, r2, 0x4000000
|
||||
strh r1, [r12, 0x12]
|
||||
mov r3, 0x5000
|
||||
strb r1, [r12, 0x15]
|
||||
add r3, r3, 0x82
|
||||
strh r3, [r2]
|
||||
ldmdb r11, {r11,sp,lr}
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_081E05A0: .4byte gSTWIStatus
|
||||
arm_func_end STWI_init_slave
|
||||
|
||||
arm_func_start Callback_Dummy_M
|
||||
Callback_Dummy_M: @ 81E05A4
|
||||
bx r2
|
||||
arm_func_end Callback_Dummy_M
|
||||
|
||||
arm_func_start Callback_Dummy_S
|
||||
Callback_Dummy_S: @ 81E05A8
|
||||
bx r1
|
||||
arm_func_end Callback_Dummy_S
|
||||
|
||||
arm_func_start Callback_Dummy_ID
|
||||
Callback_Dummy_ID: @ 81E05AC
|
||||
bx r0
|
||||
arm_func_end Callback_Dummy_ID
|
||||
+64
-64
@@ -2597,7 +2597,7 @@ GetMapMusicFadeoutSpeed: @ 8055F68
|
||||
push {lr}
|
||||
bl warp1_get_mapheader
|
||||
ldrb r0, [r0, 0x17]
|
||||
bl is_light_level_8_or_9
|
||||
bl IsMapTypeIndoors
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x1
|
||||
@@ -2981,8 +2981,8 @@ _08056218:
|
||||
bx r1
|
||||
thumb_func_end Overworld_MapTypeAllowsTeleportAndFly
|
||||
|
||||
thumb_func_start is_light_level_8_or_9
|
||||
is_light_level_8_or_9: @ 805621C
|
||||
thumb_func_start IsMapTypeIndoors
|
||||
IsMapTypeIndoors: @ 805621C
|
||||
push {lr}
|
||||
lsls r0, 24
|
||||
movs r1, 0xF8
|
||||
@@ -2998,10 +2998,10 @@ _08056230:
|
||||
_08056232:
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end is_light_level_8_or_9
|
||||
thumb_func_end IsMapTypeIndoors
|
||||
|
||||
thumb_func_start sav1_saved_warp2_map_get_name
|
||||
sav1_saved_warp2_map_get_name: @ 8056238
|
||||
thumb_func_start GetSavedWarpRegionMapSectionId
|
||||
GetSavedWarpRegionMapSectionId: @ 8056238
|
||||
push {lr}
|
||||
ldr r0, _0805625C @ =gSaveBlock1Ptr
|
||||
ldr r1, [r0]
|
||||
@@ -3020,7 +3020,7 @@ sav1_saved_warp2_map_get_name: @ 8056238
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_0805625C: .4byte gSaveBlock1Ptr
|
||||
thumb_func_end sav1_saved_warp2_map_get_name
|
||||
thumb_func_end GetSavedWarpRegionMapSectionId
|
||||
|
||||
thumb_func_start GetCurrentRegionMapSectionId
|
||||
GetCurrentRegionMapSectionId: @ 8056260
|
||||
@@ -3044,8 +3044,8 @@ GetCurrentRegionMapSectionId: @ 8056260
|
||||
_08056284: .4byte gSaveBlock1Ptr
|
||||
thumb_func_end GetCurrentRegionMapSectionId
|
||||
|
||||
thumb_func_start sav1_map_get_battletype
|
||||
sav1_map_get_battletype: @ 8056288
|
||||
thumb_func_start GetCurrentMapBattleScene
|
||||
GetCurrentMapBattleScene: @ 8056288
|
||||
push {lr}
|
||||
ldr r0, _080562AC @ =gSaveBlock1Ptr
|
||||
ldr r1, [r0]
|
||||
@@ -3064,10 +3064,10 @@ sav1_map_get_battletype: @ 8056288
|
||||
bx r1
|
||||
.align 2, 0
|
||||
_080562AC: .4byte gSaveBlock1Ptr
|
||||
thumb_func_end sav1_map_get_battletype
|
||||
thumb_func_end GetCurrentMapBattleScene
|
||||
|
||||
thumb_func_start sub_80562B0
|
||||
sub_80562B0: @ 80562B0
|
||||
thumb_func_start InitOverworldBgs
|
||||
InitOverworldBgs: @ 80562B0
|
||||
push {r4-r6,lr}
|
||||
mov r6, r8
|
||||
push {r6}
|
||||
@@ -3130,7 +3130,7 @@ _08056344: .4byte gUnknown_826D320
|
||||
_08056348: .4byte gUnknown_3005018
|
||||
_0805634C: .4byte gUnknown_3005014
|
||||
_08056350: .4byte gUnknown_300501C
|
||||
thumb_func_end sub_80562B0
|
||||
thumb_func_end InitOverworldBgs
|
||||
|
||||
thumb_func_start sub_8056354
|
||||
sub_8056354: @ 8056354
|
||||
@@ -3430,14 +3430,14 @@ _080565D4:
|
||||
_080565DC: .4byte gPaletteFade
|
||||
thumb_func_end sub_80565B4
|
||||
|
||||
thumb_func_start sub_80565E0
|
||||
sub_80565E0: @ 80565E0
|
||||
thumb_func_start SetMainCallback1
|
||||
SetMainCallback1: @ 80565E0
|
||||
ldr r1, _080565E8 @ =gMain
|
||||
str r0, [r1]
|
||||
bx lr
|
||||
.align 2, 0
|
||||
_080565E8: .4byte gMain
|
||||
thumb_func_end sub_80565E0
|
||||
thumb_func_end SetMainCallback1
|
||||
|
||||
thumb_func_start map_post_load_hook_exec
|
||||
map_post_load_hook_exec: @ 80565EC
|
||||
@@ -3490,7 +3490,7 @@ _08056640: .4byte gFieldCallback
|
||||
thumb_func_start CB2_NewGame
|
||||
CB2_NewGame: @ 8056644
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
bl StopMapMusic
|
||||
bl sub_8056420
|
||||
bl NewGameInitData
|
||||
@@ -3508,7 +3508,7 @@ CB2_NewGame: @ 8056644
|
||||
bl do_load_map_stuff_loop
|
||||
bl SetFieldVBlankCallback
|
||||
ldr r0, _0805669C @ =sub_8056534
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
ldr r0, _080566A0 @ =sub_80565B4
|
||||
bl SetMainCallback2
|
||||
pop {r0}
|
||||
@@ -3537,7 +3537,7 @@ CB2_WhiteOut: @ 80566A4
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x77
|
||||
bls _08056702
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
bl StopMapMusic
|
||||
bl sub_8056420
|
||||
bl sub_8054BC8
|
||||
@@ -3556,7 +3556,7 @@ CB2_WhiteOut: @ 80566A4
|
||||
bl sub_8112364
|
||||
bl SetFieldVBlankCallback
|
||||
ldr r0, _08056714 @ =sub_8056534
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
ldr r0, _08056718 @ =sub_80565B4
|
||||
bl SetMainCallback2
|
||||
_08056702:
|
||||
@@ -3574,11 +3574,11 @@ _08056718: .4byte sub_80565B4
|
||||
thumb_func_start CB2_LoadMap
|
||||
CB2_LoadMap: @ 805671C
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
bl ScriptContext1_Init
|
||||
bl ScriptContext2_Disable
|
||||
movs r0, 0
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
ldr r0, _08056740 @ =sub_80C9BFC
|
||||
bl SetMainCallback2
|
||||
ldr r1, _08056744 @ =gMain
|
||||
@@ -3609,7 +3609,7 @@ _08056768: .4byte gMain + 0x438
|
||||
_0805676C:
|
||||
bl SetFieldVBlankCallback
|
||||
ldr r0, _08056780 @ =sub_8056534
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
ldr r0, _08056784 @ =sub_80565B4
|
||||
bl SetMainCallback2
|
||||
_0805677C:
|
||||
@@ -3620,12 +3620,12 @@ _08056780: .4byte sub_8056534
|
||||
_08056784: .4byte sub_80565B4
|
||||
thumb_func_end sub_805674C
|
||||
|
||||
thumb_func_start sub_8056788
|
||||
sub_8056788: @ 8056788
|
||||
thumb_func_start CB2_ReturnToFieldCableClub
|
||||
CB2_ReturnToFieldCableClub: @ 8056788
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
ldr r0, _080567A0 @ =gFieldCallback
|
||||
ldr r1, _080567A4 @ =sub_807DE58
|
||||
ldr r1, _080567A4 @ =FieldCB_ReturnToFieldWirelessLink
|
||||
str r1, [r0]
|
||||
ldr r0, _080567A8 @ =c2_80567AC
|
||||
bl SetMainCallback2
|
||||
@@ -3633,20 +3633,20 @@ sub_8056788: @ 8056788
|
||||
bx r0
|
||||
.align 2, 0
|
||||
_080567A0: .4byte gFieldCallback
|
||||
_080567A4: .4byte sub_807DE58
|
||||
_080567A4: .4byte FieldCB_ReturnToFieldWirelessLink
|
||||
_080567A8: .4byte c2_80567AC
|
||||
thumb_func_end sub_8056788
|
||||
thumb_func_end CB2_ReturnToFieldCableClub
|
||||
|
||||
thumb_func_start c2_80567AC
|
||||
c2_80567AC: @ 80567AC
|
||||
push {lr}
|
||||
ldr r0, _080567D0 @ =gMain + 0x438
|
||||
bl sub_8056A5C
|
||||
bl map_loading_iteration_3
|
||||
cmp r0, 0
|
||||
beq _080567CC
|
||||
bl SetFieldVBlankCallback
|
||||
ldr r0, _080567D4 @ =c1_link_related
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
bl sub_80578D8
|
||||
ldr r0, _080567D8 @ =sub_80565B4
|
||||
bl SetMainCallback2
|
||||
@@ -3671,7 +3671,7 @@ CB2_ReturnToField: @ 80567DC
|
||||
.align 2, 0
|
||||
_080567F0: .4byte c2_exit_to_overworld_2_link
|
||||
_080567F4:
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
ldr r0, _08056804 @ =c2_exit_to_overworld_2_local
|
||||
bl SetMainCallback2
|
||||
_080567FE:
|
||||
@@ -3722,23 +3722,23 @@ _08056850: .4byte sub_80565B4
|
||||
thumb_func_start c2_8056854
|
||||
c2_8056854: @ 8056854
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
bl StopMapMusic
|
||||
ldr r0, _08056878 @ =c1_link_related
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
bl sub_80578D8
|
||||
ldr r0, _0805687C @ =gWirelessCommType
|
||||
ldrb r0, [r0]
|
||||
cmp r0, 0
|
||||
beq _08056888
|
||||
ldr r1, _08056880 @ =gFieldCallback
|
||||
ldr r0, _08056884 @ =sub_807DE58
|
||||
ldr r0, _08056884 @ =FieldCB_ReturnToFieldWirelessLink
|
||||
b _0805688C
|
||||
.align 2, 0
|
||||
_08056878: .4byte c1_link_related
|
||||
_0805687C: .4byte gWirelessCommType
|
||||
_08056880: .4byte gFieldCallback
|
||||
_08056884: .4byte sub_807DE58
|
||||
_08056884: .4byte FieldCB_ReturnToFieldWirelessLink
|
||||
_08056888:
|
||||
ldr r1, _080568A0 @ =gFieldCallback
|
||||
ldr r0, _080568A4 @ =sub_807DDD0
|
||||
@@ -3757,7 +3757,7 @@ _080568A4: .4byte sub_807DDD0
|
||||
thumb_func_start CB2_ReturnToFieldWithOpenMenu
|
||||
CB2_ReturnToFieldWithOpenMenu: @ 80568A8
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
ldr r1, _080568BC @ =gFieldCallback2
|
||||
ldr r0, _080568C0 @ =FieldCB2_ReturnToStartMenuInit
|
||||
str r0, [r1]
|
||||
@@ -3772,7 +3772,7 @@ _080568C0: .4byte FieldCB2_ReturnToStartMenuInit
|
||||
thumb_func_start sub_80568C4
|
||||
sub_80568C4: @ 80568C4
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
ldr r1, _080568D8 @ =gFieldCallback
|
||||
ldr r0, _080568DC @ =sub_807DD44
|
||||
str r0, [r1]
|
||||
@@ -3787,7 +3787,7 @@ _080568DC: .4byte sub_807DD44
|
||||
thumb_func_start CB2_ReturnToFieldContinueScriptPlayMapMusic
|
||||
CB2_ReturnToFieldContinueScriptPlayMapMusic: @ 80568E0
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
ldr r1, _080568F4 @ =gFieldCallback
|
||||
ldr r0, _080568F8 @ =FieldCallback_ReturnToEventScript2
|
||||
str r0, [r1]
|
||||
@@ -3802,7 +3802,7 @@ _080568F8: .4byte FieldCallback_ReturnToEventScript2
|
||||
thumb_func_start CB2_Overworld
|
||||
CB2_Overworld: @ 80568FC
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
ldr r1, _08056910 @ =gFieldCallback
|
||||
ldr r0, _08056914 @ =sub_807DF7C
|
||||
str r0, [r1]
|
||||
@@ -3836,7 +3836,7 @@ _08056934: .4byte gMapHeader
|
||||
thumb_func_start CB2_ContinueSavedGame
|
||||
CB2_ContinueSavedGame: @ 8056938
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
bl StopMapMusic
|
||||
bl sub_8056420
|
||||
bl set_current_map_header_from_sav1
|
||||
@@ -3871,7 +3871,7 @@ _0805699C:
|
||||
ldr r1, _080569B4 @ =sub_8056918
|
||||
str r1, [r0]
|
||||
ldr r0, _080569B8 @ =sub_8056534
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
bl CB2_ReturnToField
|
||||
_080569AC:
|
||||
pop {r0}
|
||||
@@ -3882,8 +3882,8 @@ _080569B4: .4byte sub_8056918
|
||||
_080569B8: .4byte sub_8056534
|
||||
thumb_func_end CB2_ContinueSavedGame
|
||||
|
||||
thumb_func_start sub_80569BC
|
||||
sub_80569BC: @ 80569BC
|
||||
thumb_func_start FieldClearVBlankHBlankCallbacks
|
||||
FieldClearVBlankHBlankCallbacks: @ 80569BC
|
||||
push {lr}
|
||||
bl sub_80CC87C
|
||||
lsls r0, 24
|
||||
@@ -3915,7 +3915,7 @@ _080569F4:
|
||||
bl SetHBlankCallback
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_80569BC
|
||||
thumb_func_end FieldClearVBlankHBlankCallbacks
|
||||
|
||||
thumb_func_start SetFieldVBlankCallback
|
||||
SetFieldVBlankCallback: @ 8056A04
|
||||
@@ -3962,8 +3962,8 @@ _08056A52:
|
||||
_08056A58: .4byte gFlashEffectParams
|
||||
thumb_func_end InitCurrentFlashLevelScanlineEffect
|
||||
|
||||
thumb_func_start sub_8056A5C
|
||||
sub_8056A5C: @ 8056A5C
|
||||
thumb_func_start map_loading_iteration_3
|
||||
map_loading_iteration_3: @ 8056A5C
|
||||
push {r4,lr}
|
||||
adds r4, r0, 0
|
||||
ldrb r0, [r4]
|
||||
@@ -3995,7 +3995,7 @@ _08056A78:
|
||||
.4byte _08056B58
|
||||
.4byte _08056B6A
|
||||
_08056AB0:
|
||||
bl sub_80562B0
|
||||
bl InitOverworldBgs
|
||||
bl ScriptContext1_Init
|
||||
bl ScriptContext2_Disable
|
||||
b _08056B62
|
||||
@@ -4084,7 +4084,7 @@ _08056B70:
|
||||
pop {r4}
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_8056A5C
|
||||
thumb_func_end map_loading_iteration_3
|
||||
|
||||
thumb_func_start sub_8056B78
|
||||
sub_8056B78: @ 8056B78
|
||||
@@ -4121,8 +4121,8 @@ _08056B94:
|
||||
.4byte _08056CC0
|
||||
.4byte _08056BFA
|
||||
_08056BD0:
|
||||
bl sub_80562B0
|
||||
bl sub_80569BC
|
||||
bl InitOverworldBgs
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
adds r0, r5, 0
|
||||
bl sub_8055920
|
||||
b _08056CCA
|
||||
@@ -4266,7 +4266,7 @@ _08056CF0:
|
||||
.4byte _08056D26
|
||||
.4byte _08056D38
|
||||
_08056D04:
|
||||
bl sub_80562B0
|
||||
bl InitOverworldBgs
|
||||
bl sub_8111F14
|
||||
movs r0, 0
|
||||
bl sub_8057024
|
||||
@@ -4331,8 +4331,8 @@ _08056D60:
|
||||
.4byte _08056E34
|
||||
.4byte _08056E46
|
||||
_08056D98:
|
||||
bl sub_80562B0
|
||||
bl sub_80569BC
|
||||
bl InitOverworldBgs
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
b _08056E3E
|
||||
_08056DA2:
|
||||
bl sub_8111F14
|
||||
@@ -4914,14 +4914,14 @@ _08057268: .4byte gLinkPlayers
|
||||
thumb_func_start sub_805726C
|
||||
sub_805726C: @ 805726C
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
ldr r1, _08057298 @ =gUnknown_2036E28
|
||||
movs r0, 0x1
|
||||
strb r0, [r1]
|
||||
bl ScriptContext1_Init
|
||||
bl ScriptContext2_Disable
|
||||
movs r0, 0
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
ldr r0, _0805729C @ =sub_80C9BFC
|
||||
bl SetMainCallback2
|
||||
ldr r1, _080572A0 @ =gMain
|
||||
@@ -4939,7 +4939,7 @@ _080572A4: .4byte sub_80572D8
|
||||
thumb_func_start sub_80572A8
|
||||
sub_80572A8: @ 80572A8
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
ldr r0, _080572D0 @ =gUnknown_2036E28
|
||||
movs r1, 0x1
|
||||
strb r1, [r0]
|
||||
@@ -4947,7 +4947,7 @@ sub_80572A8: @ 80572A8
|
||||
bl ScriptContext1_Init
|
||||
bl ScriptContext2_Disable
|
||||
movs r0, 0
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
ldr r0, _080572D4 @ =sub_80572D8
|
||||
bl SetMainCallback2
|
||||
pop {r0}
|
||||
@@ -4964,7 +4964,7 @@ sub_80572D8: @ 80572D8
|
||||
bl sub_8057300
|
||||
bl SetFieldVBlankCallback
|
||||
ldr r0, _080572F8 @ =sub_8056534
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
ldr r0, _080572FC @ =sub_80565B4
|
||||
bl SetMainCallback2
|
||||
pop {r0}
|
||||
@@ -5019,8 +5019,8 @@ _08057330:
|
||||
.4byte _08057404
|
||||
.4byte _0805740A
|
||||
_0805735C:
|
||||
bl sub_80562B0
|
||||
bl sub_80569BC
|
||||
bl InitOverworldBgs
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
bl sub_8111F14
|
||||
bl sub_81113E4
|
||||
bl sub_8111438
|
||||
@@ -5118,7 +5118,7 @@ _0805742A:
|
||||
thumb_func_start sub_8057430
|
||||
sub_8057430: @ 8057430
|
||||
push {lr}
|
||||
bl sub_80569BC
|
||||
bl FieldClearVBlankHBlankCallbacks
|
||||
bl StopMapMusic
|
||||
ldr r1, _08057484 @ =gUnknown_2036E28
|
||||
movs r0, 0x3
|
||||
@@ -5149,7 +5149,7 @@ _08057488: .4byte gUnknown_2031DE0
|
||||
_0805748C: .4byte CB2_LoadMap
|
||||
_08057490:
|
||||
ldr r0, _080574A0 @ =sub_8056534
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
bl CB2_ReturnToField
|
||||
_0805749A:
|
||||
pop {r0}
|
||||
@@ -5313,7 +5313,7 @@ _08057560:
|
||||
bl ScriptContext1_Init
|
||||
bl ScriptContext2_Disable
|
||||
movs r0, 0
|
||||
bl sub_80565E0
|
||||
bl SetMainCallback1
|
||||
ldr r1, _08057614 @ =gFieldCallback2
|
||||
ldr r0, _08057618 @ =sub_80574EC
|
||||
str r0, [r1]
|
||||
|
||||
@@ -1839,7 +1839,7 @@ _08106478:
|
||||
bl FillWindowPixelBuffer
|
||||
movs r0, 0xB0
|
||||
movs r1, 0x1
|
||||
bl sub_8107D38
|
||||
bl ListMenuLoadStdPalAt
|
||||
mov r0, r10
|
||||
cmp r0, 0
|
||||
beq _08106504
|
||||
|
||||
+1
-1
@@ -621,7 +621,7 @@ _08147A5C:
|
||||
ldrh r0, [r4, 0x18]
|
||||
strh r0, [r1, 0x2]
|
||||
mov r0, sp
|
||||
bl sub_80F9E2C
|
||||
bl RfuPrepareSend0x2f00
|
||||
b _08147A9E
|
||||
.align 2, 0
|
||||
_08147A88: .4byte gTasks+0x8
|
||||
|
||||
+20
-17
@@ -5,8 +5,8 @@
|
||||
|
||||
.text
|
||||
|
||||
thumb_func_start sub_8147AA8
|
||||
sub_8147AA8: @ 8147AA8
|
||||
thumb_func_start StartPokemonJump
|
||||
StartPokemonJump: @ 8147AA8
|
||||
push {r4-r7,lr}
|
||||
adds r6, r1, 0
|
||||
lsls r0, 16
|
||||
@@ -73,7 +73,7 @@ _08147B42:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8147AA8
|
||||
thumb_func_end StartPokemonJump
|
||||
|
||||
thumb_func_start sub_8147B48
|
||||
sub_8147B48: @ 8147B48
|
||||
@@ -2535,7 +2535,7 @@ _08148DEA:
|
||||
ands r0, r1
|
||||
cmp r0, 0
|
||||
bne _08148E20
|
||||
bl sub_800AAC0
|
||||
bl Link_TryStartSend5FFF
|
||||
_08148DFA:
|
||||
ldr r0, _08148E0C @ =gUnknown_203F3D4
|
||||
ldr r1, [r0]
|
||||
@@ -4302,7 +4302,7 @@ sub_8149A6C: @ 8149A6C
|
||||
ldr r0, [r0, 0x8]
|
||||
str r0, [sp, 0x4]
|
||||
mov r0, sp
|
||||
bl sub_80F9E2C
|
||||
bl RfuPrepareSend0x2f00
|
||||
add sp, 0xC
|
||||
pop {r0}
|
||||
bx r0
|
||||
@@ -4363,7 +4363,7 @@ sub_8149AE0: @ 8149AE0
|
||||
strb r1, [r2]
|
||||
str r0, [sp, 0x4]
|
||||
mov r0, sp
|
||||
bl sub_80F9E2C
|
||||
bl RfuPrepareSend0x2f00
|
||||
add sp, 0xC
|
||||
pop {r0}
|
||||
bx r0
|
||||
@@ -4425,7 +4425,7 @@ sub_8149AF8: @ 8149AF8
|
||||
ldrh r0, [r0, 0xE]
|
||||
strh r0, [r1, 0x4]
|
||||
mov r0, sp
|
||||
bl sub_80F9E2C
|
||||
bl RfuPrepareSend0x2f00
|
||||
add sp, 0xC
|
||||
pop {r3}
|
||||
mov r8, r3
|
||||
@@ -4520,7 +4520,7 @@ sub_8149BF4: @ 8149BF4
|
||||
mov r0, sp
|
||||
strb r1, [r0, 0x6]
|
||||
strh r2, [r0, 0x8]
|
||||
bl sub_80F9E2C
|
||||
bl RfuPrepareSend0x2f00
|
||||
add sp, 0xC
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
@@ -4665,7 +4665,7 @@ _08149D20: .4byte sub_8149DC8
|
||||
sub_8149D24: @ 8149D24
|
||||
push {lr}
|
||||
bl FreeAllWindowBuffers
|
||||
bl sub_815C9F4
|
||||
bl DigitObjUtil_Teardown
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_8149D24
|
||||
@@ -6284,7 +6284,10 @@ sub_814A9C8: @ 814A9C8
|
||||
push {r4,lr}
|
||||
sub sp, 0x10
|
||||
mov r1, sp
|
||||
movs r0, 0x40
|
||||
movs r0, 0x40 @ strConvMode = 0
|
||||
@ shape = SPRITE_SHAPE(8x8)
|
||||
@ size = SPRITE_SIZE(8x8)
|
||||
@ priority = 1
|
||||
strb r0, [r1]
|
||||
movs r0, 0x5
|
||||
strb r0, [r1, 0x1]
|
||||
@@ -6299,11 +6302,11 @@ sub_814A9C8: @ 814A9C8
|
||||
ldr r0, _0814AA20 @ =gUnknown_846D968
|
||||
str r0, [sp, 0xC]
|
||||
movs r0, 0x2
|
||||
bl sub_815C980
|
||||
bl DigitObjUtil_Init
|
||||
movs r0, 0
|
||||
movs r1, 0
|
||||
mov r2, sp
|
||||
bl sub_815CA40
|
||||
bl DigitObjUtil_CreatePrinter
|
||||
mov r1, sp
|
||||
movs r0, 0x4
|
||||
strb r0, [r1, 0x1]
|
||||
@@ -6314,7 +6317,7 @@ sub_814A9C8: @ 814A9C8
|
||||
movs r0, 0x1
|
||||
movs r1, 0
|
||||
mov r2, sp
|
||||
bl sub_815CA40
|
||||
bl DigitObjUtil_CreatePrinter
|
||||
add sp, 0x10
|
||||
pop {r4}
|
||||
pop {r0}
|
||||
@@ -6329,7 +6332,7 @@ sub_814AA24: @ 814AA24
|
||||
push {lr}
|
||||
adds r1, r0, 0
|
||||
movs r0, 0
|
||||
bl sub_815CD70
|
||||
bl DigitObjUtil_PrintNumOn
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_814AA24
|
||||
@@ -6341,7 +6344,7 @@ sub_814AA34: @ 814AA34
|
||||
lsls r1, 16
|
||||
lsrs r1, 16
|
||||
movs r0, 0x1
|
||||
bl sub_815CD70
|
||||
bl DigitObjUtil_PrintNumOn
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end sub_814AA34
|
||||
@@ -7699,7 +7702,7 @@ sub_814B43C: @ 814B43C
|
||||
movs r1, 0x7
|
||||
movs r2, 0x78
|
||||
movs r3, 0x50
|
||||
bl sub_815F138
|
||||
bl StartMinigameCountdown
|
||||
adds r0, r4, 0
|
||||
bl sub_814B134
|
||||
add sp, 0x4
|
||||
@@ -7711,7 +7714,7 @@ sub_814B43C: @ 814B43C
|
||||
thumb_func_start sub_814B460
|
||||
sub_814B460: @ 814B460
|
||||
push {lr}
|
||||
bl sub_815F198
|
||||
bl IsMinigameCountdownRunning
|
||||
pop {r1}
|
||||
bx r1
|
||||
thumb_func_end sub_814B460
|
||||
|
||||
@@ -3187,7 +3187,7 @@ _08135FC8: .4byte gUnknown_8E9B310
|
||||
_08135FCC:
|
||||
movs r0, 0x60
|
||||
movs r1, 0x1
|
||||
bl sub_8107D38
|
||||
bl ListMenuLoadStdPalAt
|
||||
ldr r0, _08135FE0 @ =gUnknown_84636C0
|
||||
movs r1, 0x70
|
||||
_08135FD8:
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
lman
|
||||
@@ -1,2 +1,2 @@
|
||||
gUnknown_3005E9C
|
||||
sHelpSystemState
|
||||
gSomeVariableBackup
|
||||
|
||||
@@ -10,11 +10,11 @@ gFiller_3003EC0
|
||||
gLinkHeldKeys
|
||||
gRecvCmds
|
||||
gLinkStatus
|
||||
gUnknown_3003F24
|
||||
gLinkAllAcked5FFF
|
||||
gUnknown_3003F28
|
||||
gUnknown_3003F2C
|
||||
gUnknown_3003F30
|
||||
gUnknown_3003F34
|
||||
gLinkCommand2FFEAck
|
||||
gLinkCommand5FFFAck
|
||||
gLinkCmd5FFFparam
|
||||
gSuppressLinkErrorMessage
|
||||
gWirelessCommType
|
||||
gSavedLinkPlayerCount
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
gUnknown_3005E10
|
||||
@@ -1 +1 @@
|
||||
gUnknown_3005ED0
|
||||
sMEventSendToEReaderManager
|
||||
|
||||
+19
-13
@@ -339,22 +339,28 @@ gUnknown_846F458:: @ 846F458
|
||||
gUnknown_846F470:: @ 846F470
|
||||
spr_template 5, 5, gOamData_AffineDouble_ObjNormal_32x32, gUnknown_846F404, NULL, gUnknown_846F408, SpriteCallbackDummy
|
||||
|
||||
gUnknown_846F488:: @ 846F488 struct UnkStruct3? perhaps not
|
||||
.byte 9, 2, 8
|
||||
gUnknown_846F488:: @ 846F488 DigitObjUtilTemplate
|
||||
@ strConvMode, shape, size, priority
|
||||
.byte 1 | (2 /*ST_OAM_V_RECTANGLE*/ << 2) | (0 << 4) | (0 << 6) @ 9
|
||||
.byte 2, 8 @ ndigits, width
|
||||
.align 2
|
||||
.2byte 0x9c, 0x00
|
||||
.4byte gUnknown_846F2F8 + 0x18
|
||||
.4byte gUnknown_846F320 + 0x10
|
||||
.byte 8, 2, 8
|
||||
.2byte 0x9c, 0x00 @ x, y
|
||||
.4byte gUnknown_846F2F8 + 0x18 @ spriteSheet
|
||||
.4byte gUnknown_846F320 + 0x10 @ spritePalette
|
||||
@ strConvMode, shape, size, priority
|
||||
.byte 0 | (2 /*ST_OAM_V_RECTANGLE*/ << 2) | (0 << 4) | (0 << 6) @ 8
|
||||
.byte 2, 8 @ ndigits, width
|
||||
.align 2
|
||||
.2byte 0xb4, 0x00
|
||||
.4byte gUnknown_846F2F8 + 0x18
|
||||
.4byte gUnknown_846F320 + 0x10
|
||||
.byte 8, 2, 8
|
||||
.2byte 0xb4, 0x00 @ x, y
|
||||
.4byte gUnknown_846F2F8 + 0x18 @ spriteSheet
|
||||
.4byte gUnknown_846F320 + 0x10 @ spritePalette
|
||||
@ strConvMode, shape, size, priority
|
||||
.byte 0 | (2 /*ST_OAM_V_RECTANGLE*/ << 2) | (0 << 4) | (0 << 6) @ 8
|
||||
.byte 2, 8 @ ndigits, width
|
||||
.align 2
|
||||
.2byte 0xcc, 0x00
|
||||
.4byte gUnknown_846F2F8 + 0x18
|
||||
.4byte gUnknown_846F320 + 0x10
|
||||
.2byte 0xcc, 0x00 @ x, y
|
||||
.4byte gUnknown_846F2F8 + 0x18 @ spriteSheet
|
||||
.4byte gUnknown_846F320 + 0x10 @ spritePalette
|
||||
|
||||
gUnknown_846F4B8:: @ 846F4B8
|
||||
.4byte gUnknown_841D034
|
||||
|
||||
@@ -174,52 +174,10 @@ gText_UnionRoomChatKeyboard_Emoji9::
|
||||
gText_UnionRoomChatKeyboard_Emoji10::
|
||||
.string "{EXTRA 210}{EXTRA 208}ょ: $"
|
||||
|
||||
// trainer_tower (again?)
|
||||
|
||||
@ 847ABAC
|
||||
.align 2
|
||||
.include "data/trainer_tower/trainers.inc"
|
||||
|
||||
.align 2
|
||||
gUnknown_84827AC:: @ 84827AC
|
||||
.byte 0x08, 0x01
|
||||
.align 2
|
||||
.4byte 0
|
||||
|
||||
gUnknown_84827B4:: @ 84827B4
|
||||
.4byte gUnknown_847F16C
|
||||
.4byte gUnknown_847D26C
|
||||
.4byte gUnknown_84808AC
|
||||
.4byte gUnknown_847ABAC
|
||||
.4byte gUnknown_847CAAC
|
||||
.4byte gUnknown_847E9AC
|
||||
.4byte gUnknown_847AF8C
|
||||
.4byte gUnknown_847CE8C
|
||||
.4byte gUnknown_847DA2C
|
||||
.4byte gUnknown_847BF0C
|
||||
.4byte gUnknown_847D64C
|
||||
.4byte gUnknown_847DE0C
|
||||
.4byte gUnknown_847B74C
|
||||
.4byte gUnknown_847BB2C
|
||||
.4byte gUnknown_848182C
|
||||
.4byte gUnknown_847F92C
|
||||
.4byte gUnknown_847C2EC
|
||||
.4byte gUnknown_847C6CC
|
||||
.4byte gUnknown_847E5CC
|
||||
.4byte gUnknown_84804CC
|
||||
.4byte gUnknown_84823CC
|
||||
.4byte gUnknown_8481FEC
|
||||
.4byte gUnknown_84800EC
|
||||
.4byte gUnknown_847E1EC
|
||||
.4byte gUnknown_847ED8C
|
||||
.4byte gUnknown_848106C
|
||||
.4byte gUnknown_8480C8C
|
||||
.4byte gUnknown_847F92C
|
||||
.4byte gUnknown_847F54C
|
||||
.4byte gUnknown_847E1EC
|
||||
.4byte gUnknown_847D64C
|
||||
.4byte gUnknown_847C6CC
|
||||
|
||||
.include "data/text/move_descriptions.inc"
|
||||
|
||||
.align 2, 0
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "constants/trade.h"
|
||||
#include "constants/quest_log.h"
|
||||
#include "constants/daycare.h"
|
||||
#include "constants/easy_chat.h"
|
||||
.include "asm/macros.inc"
|
||||
.include "asm/macros/event.inc"
|
||||
.set FALSE, 0
|
||||
@@ -1169,10 +1170,9 @@ EventScript_ResetEliteFour:: @ 81A6551
|
||||
.include "data/scripts/obtain_item.inc"
|
||||
.include "data/scripts/pc.inc"
|
||||
|
||||
@ DoEasyChatScreen?
|
||||
EventScript_1A6AC0:: @ 81A6AC0
|
||||
Common_ShowEasyChatScreen:: @ 81A6AC0
|
||||
fadescreen FADE_TO_BLACK
|
||||
special sub_80FEE44
|
||||
special ShowEasyChatScreen
|
||||
fadescreen FADE_FROM_BLACK
|
||||
return
|
||||
|
||||
@@ -1332,8 +1332,8 @@ gUnknown_81A7702:: @ 81A7702
|
||||
msgbox Text_FillOutQuestionnaire, MSGBOX_YESNO
|
||||
compare VAR_RESULT, NO
|
||||
goto_if_eq EventScript_1A778A
|
||||
setvar VAR_0x8004, 14
|
||||
call EventScript_1A6AC0
|
||||
setvar VAR_0x8004, EASY_CHAT_TYPE_QUESTIONNAIRE
|
||||
call Common_ShowEasyChatScreen
|
||||
lock
|
||||
faceplayer
|
||||
specialvar VAR_0x8008, Special_GetMartClerkObjectId
|
||||
|
||||
@@ -1149,7 +1149,7 @@ CableClub_EventScript_81BBFD8:: @ 81BBFD8
|
||||
goto_if_eq CableClub_EventScript_AdapterNotConnected
|
||||
special HelpSystem_Disable
|
||||
fadescreen FADE_TO_BLACK
|
||||
special sub_814F1D4
|
||||
special Special_WirelessCommunicationScreen
|
||||
waitstate
|
||||
msgbox CableClub_Text_ParticipantsStepUpToCounter
|
||||
special HelpSystem_Enable
|
||||
|
||||
@@ -101,7 +101,7 @@ EventScript_GaveSpecialProfile: @ 81BEF3F
|
||||
|
||||
EventScript_GiveProfile: @ 81BEF5A
|
||||
setvar VAR_0x8004, 0
|
||||
call EventScript_1A6AC0
|
||||
call Common_ShowEasyChatScreen
|
||||
lock
|
||||
faceplayer
|
||||
compare VAR_0x8004, 0
|
||||
|
||||
+2
-2
@@ -103,7 +103,7 @@ gSpecials:: @ 815FD60
|
||||
def_special sub_8081128
|
||||
def_special Field_AskSaveTheGame
|
||||
def_special nullsub_56
|
||||
def_special sub_80FEE44
|
||||
def_special ShowEasyChatScreen
|
||||
def_special Special_BufferEasyChatMessage
|
||||
def_special nullsub_75
|
||||
def_special nullsub_75
|
||||
@@ -374,7 +374,7 @@ gSpecials:: @ 815FD60
|
||||
def_special TryBecomeLinkLeader
|
||||
def_special TryJoinLinkGroup
|
||||
def_special UnionRoomSpecial
|
||||
def_special sub_814F1D4
|
||||
def_special Special_WirelessCommunicationScreen
|
||||
def_special EnableNationalPokedex
|
||||
def_special sub_80699E0
|
||||
def_special sub_80699BC
|
||||
|
||||
+20
-20
@@ -4230,51 +4230,51 @@ gJPText_MysteryGift:: @ 841DE50
|
||||
gJPText_DecideStop:: @ 841DE51
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE52:: @ 841DE52
|
||||
gJPText_ReceiveMysteryGiftWithEReader:: @ 841DE52
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE53:: @ 841DE53
|
||||
gJPText_SelectConnectFromEReaderMenu:: @ 841DE53
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE54:: @ 841DE54
|
||||
gJPText_SelectConnectWithGBA:: @ 841DE54
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE55:: @ 841DE55
|
||||
gJPText_SelectConnectAndPressA:: @ 841DE55
|
||||
.string "カ-ドeリ-ダ-{PLUS}の ‘つうしん'を\n"
|
||||
.string "えらんで Aボタンを おしてください$"
|
||||
|
||||
gUnknown_841DE7C:: @ 841DE7C
|
||||
gJPText_LinkIsIncorrect:: @ 841DE7C
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE7D:: @ 841DE7D
|
||||
gJPText_CardReadingHasBeenHalted:: @ 841DE7D
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE7E:: @ 841DE7E
|
||||
gJPText_UnableConnectWithEReader:: @ 841DE7E
|
||||
.string "カ-ドeリ-ダ-{PLUS}と\n"
|
||||
.string "つうしん できません$"
|
||||
|
||||
gUnknown_841DE95:: @ 841DE95
|
||||
gJPText_Connecting:: @ 841DE95
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE96:: @ 841DE96
|
||||
gJPText_ConnectionErrorCheckLink:: @ 841DE96
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE97:: @ 841DE97
|
||||
gJPText_ConnectionErrorTryAgain:: @ 841DE97
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE98:: @ 841DE98
|
||||
gJPText_AllowEReaderToLoadCard:: @ 841DE98
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE99:: @ 841DE99
|
||||
gJPText_ConnectionComplete:: @ 841DE99
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE9A:: @ 841DE9A
|
||||
gJPText_NewTrainerHasComeToSevii:: @ 841DE9A
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE9B:: @ 841DE9B
|
||||
gJPText_PleaseWaitAMoment:: @ 841DE9B
|
||||
.string "$"
|
||||
|
||||
gUnknown_841DE9C:: @ 841DE9C
|
||||
gJPText_WriteErrorUnableToSaveData:: @ 841DE9C
|
||||
.string "$"
|
||||
|
||||
gText_CommErrorCheckConnections:: @ 841DE9D
|
||||
@@ -4498,19 +4498,19 @@ gUnknown_841E243:: @ 841E243
|
||||
gUnknown_841E244:: @ 841E244
|
||||
.string "$"
|
||||
|
||||
gUnknown_841E245:: @ 841E245
|
||||
gText_WirelessCommunicationStatus:: @ 841E245
|
||||
.string "Wireless Communication Status$"
|
||||
|
||||
gUnknown_841E263:: @ 841E263
|
||||
gText_PeopleTrading:: @ 841E263
|
||||
.string "People trading:$"
|
||||
|
||||
gUnknown_841E273:: @ 841E273
|
||||
gText_PeopleBattling:: @ 841E273
|
||||
.string "People battling:$"
|
||||
|
||||
gUnknown_841E284:: @ 841E284
|
||||
gText_PeopleInUnionRoom:: @ 841E284
|
||||
.string "People in the UNION ROOM:$"
|
||||
|
||||
gUnknown_841E29E:: @ 841E29E
|
||||
gText_PeopleCommunicating:: @ 841E29E
|
||||
.string "People communicating:$"
|
||||
|
||||
gUnknown_841E2B4:: @ 841E2B4
|
||||
|
||||
@@ -5111,3 +5111,43 @@ gUnknown_84823CC::
|
||||
.byte 255 @ friendship
|
||||
|
||||
.byte 0x80, 0x6b, 0x01
|
||||
|
||||
.align 2
|
||||
gUnknown_84827AC:: @ 84827AC
|
||||
.byte 0x08, 0x01
|
||||
.2byte 0
|
||||
.4byte 0
|
||||
|
||||
gUnknown_84827B4:: @ 84827B4
|
||||
.4byte gUnknown_847F16C
|
||||
.4byte gUnknown_847D26C
|
||||
.4byte gUnknown_84808AC
|
||||
.4byte gUnknown_847ABAC
|
||||
.4byte gUnknown_847CAAC
|
||||
.4byte gUnknown_847E9AC
|
||||
.4byte gUnknown_847AF8C
|
||||
.4byte gUnknown_847CE8C
|
||||
.4byte gUnknown_847DA2C
|
||||
.4byte gUnknown_847BF0C
|
||||
.4byte gUnknown_847D64C
|
||||
.4byte gUnknown_847DE0C
|
||||
.4byte gUnknown_847B74C
|
||||
.4byte gUnknown_847BB2C
|
||||
.4byte gUnknown_848182C
|
||||
.4byte gUnknown_847F92C
|
||||
.4byte gUnknown_847C2EC
|
||||
.4byte gUnknown_847C6CC
|
||||
.4byte gUnknown_847E5CC
|
||||
.4byte gUnknown_84804CC
|
||||
.4byte gUnknown_84823CC
|
||||
.4byte gUnknown_8481FEC
|
||||
.4byte gUnknown_84800EC
|
||||
.4byte gUnknown_847E1EC
|
||||
.4byte gUnknown_847ED8C
|
||||
.4byte gUnknown_848106C
|
||||
.4byte gUnknown_8480C8C
|
||||
.4byte gUnknown_847F92C
|
||||
.4byte gUnknown_847F54C
|
||||
.4byte gUnknown_847E1EC
|
||||
.4byte gUnknown_847D64C
|
||||
.4byte gUnknown_847C6CC
|
||||
|
||||
@@ -0,0 +1,245 @@
|
||||
#ifndef GUARD_LINKMANAGER_H
|
||||
#define GUARD_LINKMANAGER_H
|
||||
|
||||
//-----------------------------------------------------------------
|
||||
// Constant definition
|
||||
//-----------------------------------------------------------------
|
||||
|
||||
// Link Manager operation mode (specified by u8 parent_child argument of rfu_LMAN_establishConnection)
|
||||
//#define MODE_CHILD 0 // Start Link Manager in CHILD mode
|
||||
//#define MODE_PARENT 1 // Start Link Manager in PARENT mode
|
||||
//Note: This value uses the item defined by AgbRFU_LL.h.
|
||||
#define MODE_P_C_SWITCH 2 // Start Link Manager in parent-child switching mode.
|
||||
|
||||
// Value of lman.p_c_switch_flag
|
||||
#define PCSWITCH_1ST_SC_START 0x01
|
||||
#define PCSWITCH_1ST_SC 0x02
|
||||
#define PCSWITCH_2ND_SP_START 0x03
|
||||
#define PCSWITCH_2ND_SP 0x04
|
||||
#define PCSWITCH_3RD_SC_START 0x05
|
||||
#define PCSWITCH_3RD_SC 0x06
|
||||
#define PCSWITCH_CP 0x07
|
||||
#define PCSWITCH_SC_LOCK 0x08
|
||||
#define PCSWITCH_FORCE_SP_START 0x09
|
||||
|
||||
// Period for which parent-child switching search specified
|
||||
#define PCSWITCH_ALL_PERIOD 180 // Entire cycle 180 frames
|
||||
#define PCSWITCH_SP_PERIOD 40 // Child period 40 frames
|
||||
|
||||
// Error code returned by Link Manager API (rfu_LMAN_...return value of function)
|
||||
#define LMAN_ERROR_MANAGER_BUSY 1 // Link Manager is already running.
|
||||
#define LMAN_ERROR_AGB_CLK_SLAVE 2 // AGB is clock slave so link manager cannot run.
|
||||
#define LMAN_ERROR_PID_NOT_FOUND 3 // Parent device information of the specified PID does not exist in rfuLinkStatus->partner[0-3].
|
||||
#define LMAN_ERROR_ILLEGAL_PARAMETER 4 // Specified argument is unusual.
|
||||
#define LMAN_ERROR_NOW_LINK_RECOVERY 5 // New settings were ignored because link recovery was under way when current link recovery was ON and new settings turned link recovery OFF.
|
||||
#define LMAN_ERROR_NOW_COMMUNICATION 6 // New settings were ignored because currently communicating with NI.
|
||||
#define LMAN_ERROR_NOW_SEARCH_PARENT 7 // Parent search currently under way, so ignore new setting.
|
||||
|
||||
// Details of messages and the related parameters returned by the u8 msg, u8 param_count, and lman.param[0-1] arguments of the LMAN callback generated by the operation of the Link Manager.
|
||||
// msg name msg No. param qty param[0] param[1] Description
|
||||
#define LMAN_MSG_INITIALIZE_COMPLETED 0x00 // 0 - - Generated when RFU reset and initial settings are completed
|
||||
#define LMAN_MSG_NEW_CHILD_CONNECT_DETECTED 0x10 // 1 Bit indicating slot - Generated when new child device connection was detected at RFU level.
|
||||
// with detected connection
|
||||
#define LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED 0x11 // 1 Bit indicating slot - Generated when game identification information from child device connected at RFU level is received and accepted (game serial numbers match).
|
||||
// where connection was accepted
|
||||
#define LMAN_MSG_NEW_CHILD_CONNECT_REJECTED 0x12 // 1 Bit indicating slot - Generated when the connection from the child device connected at RFU level is rejected (game identification information reception failed or game serial numbers do not match).
|
||||
// where connection was rejected
|
||||
#define LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED 0x13 // 0 - - Generated when SearchChild operation time expires.
|
||||
#define LMAN_MSG_END_WAIT_CHILD_NAME 0x14 // 0 - - Generated when reception of game identification information from all child devices completes after the SearchChild operation time expires.
|
||||
#define LMAN_MSG_PARENT_FOUND 0x20 // 1 Bit indicating - Generated when valid (game serial numbers match) parent devices are found during SearchParent.
|
||||
// rfuLinkStatus->partner[x] index number storing the valid parent devices (game serial number matches) from among the discovered parent devices.
|
||||
#define LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED 0x21 // 0 - - Generated when SearchParent time expires.
|
||||
#define LMAN_MSG_CONNECT_PARENT_SUCCESSED 0x22 // 1 Connected slot number - Generated when connection with parent device at RFU level succeeds.
|
||||
#define LMAN_MSG_CONNECT_PARENT_FAILED 0x23 // 1 Connection failure reason - Generated when connection with parent device at RFU level fails.
|
||||
#define LMAN_MSG_CHILD_NAME_SEND_COMPLETED 0x24 // 0 - - Generated when transmission of the child's game identification information to the parent device succeeds after connection with parent device at RFU level succeeds.
|
||||
#define LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED 0x25 // 0 - - Generated when transmission of the child's game identification information to the parent device fails after connection with parent device at RFU level succeeds.
|
||||
#define LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED 0x30 // 1 Bit indicating slot - Generated when a link cut is detected and that slot disconnects. (Generated only when link recovery is OFF.)
|
||||
// that was disconnected and where link cut was detected but link recover not attempted
|
||||
#define LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY 0x31 // 1 Bit indicating slot - Generated when a link cut is detected and the link recovery process starts. (Generated only when link recovery is ON.)
|
||||
// where link cut was detected and link recovery was started
|
||||
#define LMAN_MSG_LINK_RECOVERY_SUCCESSED 0x32 // 1 Bit indicating slot - Generated when link recovery succeeds. (Generated only when link recovery is ON.)
|
||||
// where link recovery succeeded
|
||||
#define LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED 0x33 // 1 Bit indicating slot - Generated when link recovery fails and that slot disconnects. (Generated only when link recovery is ON.)
|
||||
// where link recovery failed and that disconnected
|
||||
#define LMAN_MSG_LINK_DISCONNECTED_BY_USER 0x40 // 1 Generated on disconnection by execution of rfu_REQ_disconnect by disconnected user.
|
||||
// Slot indicated in bits *Note: If rfu_REQ_disconnect is used for disconnection during link recovery in the child device, the link recovery is also suspended, but the only message returned is DISCONNECTED_BY_USER.
|
||||
#define LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE 0x41 // 0 - - Generated when the AGB-RFU clock switches to AGB clock slave after a successful connection or link recovery in the child device. (This message is not generated when the AGB switches to a clock slave when an MSC callback completes.)
|
||||
#define LMAN_MSG_CHANGE_AGB_CLOCK_MASTER 0x45 // 0 - - Generated when the AGB-RFU intercommunication clock is switched to the AGB clock master in the child device.
|
||||
#define LMAN_MSG_RFU_POWER_DOWN 0x42 // 0 - - Generated when the RFU enters power conservation mode with rfu_LMAN_powerDownRFU.
|
||||
#define LMAN_MSG_MANAGER_STOPPED 0x43 // 0 - - Generated when the Link Manager is halted by rfu_LMAN_stopLMAN(0). (This message is not generated during SearchChild, SearchParent, ConnectParent, and LinkRecovery. A message (-PERIOD_EXPIRED, -SUCCESSED, -FAILED) corresponding to the operation completion is returned.)
|
||||
#define LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET 0x44 // 0 - - Generates when the Link Manager is forcibly halted by rfu_LMAN_stopLMAN(1) and RFU is reset.
|
||||
|
||||
#define LMAN_MSG_RECV_DATA_REQ_COMPLETED 0x50 // 0 - - Generated when the execution of rfu_REQ_recvData completes. (This message is not notification of data reception from a RFU.)
|
||||
|
||||
#define LMAN_MSG_REQ_API_ERROR 0xf0 // 2 REQ_commandID REQ_result REQ-API resulted in error. This message is also generated by an REQ-API executed by either the link manager or the user.
|
||||
#define LMAN_MSG_WATCH_DOG_TIMER_ERROR 0xf1 // 0 - - Generated when a MSC callback does not occur even after 6 seconds pass when the AGB is the clock slave.
|
||||
#define LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA 0xf2 // 0 - - Generated when an automatic starting DMA, such as HDMA, is issued at the same time the RFU attempts to send notification and to return the AGB to the clock master while the AGB is the clock slave and the exchange of that information (REQ command) fails.
|
||||
#define LMAN_MSG_LMAN_API_ERROR_RETURN 0xf3 // 1 Return error code - Generated when LMAN-API execution returns an error.
|
||||
#define LMAN_MSG_RFU_FATAL_ERROR 0xff // 0 - - Generated when the Link Manager cannot recongize a RFU because of the execution of rfu_REQBN_softReset_and_checkID.
|
||||
|
||||
|
||||
// Value of lman.childClockSlave_flag
|
||||
#define RFU_CHILD_CLOCK_SLAVE_OFF 0 // The child device is not operating in AGB clock slave mode. (The child device is in this mode in cases such as when the child has not established a connection or during link recovery.)
|
||||
#define RFU_CHILD_CLOCK_SLAVE_ON 1 // The child device is operating in AGB clock slave mode. (Child automatically enters this mode when a connection is established.)
|
||||
#define RFU_CHILD_CLOCK_SLAVE_OFF_REQ 2 // The child device has requested that AGB clock slave mode be halted.
|
||||
|
||||
// State of Link Manager (values of lman.state, lman.next_state)
|
||||
#define LMAN_STATE_READY 0x00 // Waiting
|
||||
#define LMAN_STATE_SOFT_RESET_AND_CHECK_ID 0x01 // Requesting execution of rfu_REQBN_softResetAndCheckID (same as below)
|
||||
#define LMAN_STATE_RESET 0x02 // rfu_REQ_reset
|
||||
#define LMAN_STATE_CONFIG_SYSTEM 0x03 // rfu_REQ_configSystem
|
||||
#define LMAN_STATE_CONFIG_GAME_DATA 0x04 // rfu_REQ_configGameData
|
||||
#define LMAN_STATE_START_SEARCH_CHILD 0x05 // rfu_REQ_startSearchChild
|
||||
#define LMAN_STATE_POLL_SEARCH_CHILD 0x06 // rfu_REQ_pollSearchChild
|
||||
#define LMAN_STATE_END_SEARCH_CHILD 0x07 // rfu_REQ_endSearchChild
|
||||
#define LMAN_STATE_WAIT_RECV_CHILD_NAME 0x08 // Awaiting reception of game name from connected child device.
|
||||
#define LMAN_STATE_START_SEARCH_PARENT 0x09 // rfu_REQ_startSearchParent
|
||||
#define LMAN_STATE_POLL_SEARCH_PARENT 0x0a // rfu_REQ_pollSearchParent
|
||||
#define LMAN_STATE_END_SEARCH_PARENT 0x0b // rfu_REQ_endSearchParent
|
||||
#define LMAN_STATE_START_CONNECT_PARENT 0x0c // rfu_REQ_startConnectParent
|
||||
#define LMAN_STATE_POLL_CONNECT_PARENT 0x0d // rfu_REQ_pollConnectParent
|
||||
#define LMAN_STATE_END_CONNECT_PARENT 0x0e // rfu_REQ_endConnectParent
|
||||
#define LMAN_STATE_SEND_CHILD_NAME 0x0f // Sending child game name.
|
||||
#define LMAN_STATE_START_LINK_RECOVERY 0x10 // rfu_REQ_CHILD_startConnectRecovery
|
||||
#define LMAN_STATE_POLL_LINK_RECOVERY 0x11 // rfu_REQ_CHILD_pollConnectRecovery
|
||||
#define LMAN_STATE_END_LINK_RECOVERY 0x12 // rfu_REQ_CHILD_endConnectRecovery
|
||||
#define LMAN_STATE_MS_CHANGE 0x13 // rfu_REQ_changeMasterSlave
|
||||
#define LMAN_STATE_WAIT_CLOCK_MASTER 0x14 // Waiting for AGB-RFU intercommunication clock to become AGB clock master.
|
||||
#define LMAN_STATE_STOP_MODE 0x15 // rfu_REQ_stopMode
|
||||
#define LMAN_STATE_BACK_STATE 0x16 // Following the completion of link-recovery processing, return the Link Manager state to the state present before link-recovery processing was initiated.
|
||||
#define LMAN_FORCED_STOP_AND_RFU_RESET 0x17 // Attempt to forcibly stop Link Manager using rfu_LMAN_stopLMAN(1).
|
||||
#define LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER 0x18 // Attempt to return to AGB clock master after child fails in sending game name.
|
||||
|
||||
// RfuTgtData.gname is read as these structs.
|
||||
struct GFtgtGnameSub
|
||||
{
|
||||
u16 language:4;
|
||||
u16 hasNews:1;
|
||||
u16 hasCard:1;
|
||||
u16 unk_00_6:1;
|
||||
u16 isChampion:1;
|
||||
u16 hasNationalDex:1;
|
||||
u16 gameClear:1;
|
||||
u16 version:4;
|
||||
u16 unk_01_6:2;
|
||||
u8 playerTrainerId[2];
|
||||
};
|
||||
|
||||
struct __attribute__((packed, aligned(2))) GFtgtGname
|
||||
{
|
||||
struct GFtgtGnameSub unk_00;
|
||||
u8 child_sprite_gender[RFU_CHILD_MAX]; // u8 sprite_idx:3;
|
||||
// u8 gender:1;
|
||||
// u8 unk_4:3
|
||||
// u8 active:1
|
||||
u16 species:10;
|
||||
u16 type:6;
|
||||
u8 activity:7;
|
||||
u8 started:1;
|
||||
u8 playerGender:1;
|
||||
u8 level:7;
|
||||
u8 padding;
|
||||
}; // size: RFU_GNAME_SIZE
|
||||
|
||||
struct Padded_U8
|
||||
{
|
||||
u8 value;
|
||||
};
|
||||
|
||||
// Parameter group used in initial setting run of the link manager (rfu_LMAN_initializeRFU)
|
||||
typedef struct InitializeParametersTag {
|
||||
// rfu_REQ_configSystem argument
|
||||
u8 maxMFrame; // Maximum number of times to re-transmit of RFU level
|
||||
u8 MC_TimerCount; // MC_Timer count (x16.7ms)
|
||||
u16 availSlot_flag; // Use RFU-API constant "AVAIL_SLOT1-4" to specify the maximum number of child devices (1 - 4) that can be connected to a parent device.
|
||||
|
||||
// rfu_REQB_configGameData argument
|
||||
u8 mboot_flag; // Multiplayer boot flag
|
||||
u16 serialNo; // Game serial number
|
||||
u8 *gameName; // Game name
|
||||
u8 *userName; // User name
|
||||
|
||||
// ON/OFF flag for parent fast search operation by child.
|
||||
u8 fastSearchParent_flag; // Flag indicating whether parent fast search operation to be performed by child.
|
||||
|
||||
// Link recovery settings
|
||||
u8 linkRecovery_enable; // Determines whether or not to execute the link recovery process when a link cut occurs
|
||||
u16 linkRecovery_period; // Time to spend on the link recovery process (x 16.7 ms) Note: Runs for unlimited time when specifying 0.
|
||||
|
||||
// Setting for NI-type data transmit/receive period
|
||||
u16 NI_failCounter_limit; // Limit for failCounter during NI type data transmit/receive (x 16.7 ms) Note: Runs for unlimited time when specifying 0.
|
||||
}INIT_PARAM;
|
||||
|
||||
|
||||
// Timer that counts with the V-Blank cycle
|
||||
typedef struct VblankTimerTag {
|
||||
u8 active; // Timer ON/OFF (bits 0 - 3 indicate ON/OFF for each connected slot)
|
||||
u16 count_max; // Maximum count value (x16.7ms)
|
||||
u16 count[RFU_CHILD_MAX]; // Current count value (x 16.7 ms) for each connected slot
|
||||
}VBL_TIMER;
|
||||
|
||||
struct UnkLinkRfuStruct_02022B44
|
||||
{
|
||||
u8 fill_00[6];
|
||||
u16 unk_06;
|
||||
u8 fill_08[6];
|
||||
vu8 unk_0e;
|
||||
u8 unk_0f;
|
||||
u8 fill_10[0x54];
|
||||
u16 unk_64;
|
||||
u8 fill_66[0x1d];
|
||||
u8 unk_83;
|
||||
u8 fill_84[0x58];
|
||||
};
|
||||
|
||||
typedef struct linkManagerTag
|
||||
{
|
||||
/* 0x000 */ u8 acceptSlot_flag;
|
||||
/* 0x001 */ u8 acceptCount;
|
||||
/* 0x002 */ vu8 childClockSlave_flag;
|
||||
/* 0x003 */ vu8 parentAck_flag;
|
||||
/* 0x004 */ u8 state;
|
||||
/* 0x005 */ u8 next_state;
|
||||
/* 0x006 */ u8 parent_child;
|
||||
/* 0x007 */ u8 pcswitch_flag;
|
||||
/* 0x008 */ u8 RFU_powerOn_flag;
|
||||
/* 0x009 */ u8 linkRecovery_enable;
|
||||
/* 0x00a */ u8 linkRecovery_start_flag;
|
||||
/* 0x00b */ u8 fastSearchParent_flag;
|
||||
/* 0x00c */ u8 connectSlot_flag_old;
|
||||
/* 0x00d */ u8 reserveDisconnectSlot_flag;
|
||||
/* 0x00e */ u8 active;
|
||||
/* 0x00f */ u8 msc_exe_flag;
|
||||
/* 0x010 */ u8 child_slot;
|
||||
/* 0x011 */ u8 state_bak[2];
|
||||
/* 0x014 */ u16 param[2];
|
||||
/* 0x018 */ u16 NI_failCounter_limit;
|
||||
/* 0x01a */ u16 connect_period;
|
||||
/* 0x01c */ u16 pcswitch_period_bak;
|
||||
/* 0x01e */ u16 work;
|
||||
/* 0x020 */ u16 *acceptable_serialNo_list;
|
||||
/* 0x024 */ VBL_TIMER nameAcceptTimer;
|
||||
/* 0x030 */ VBL_TIMER linkRecoveryTimer;
|
||||
/* 0x03c */ INIT_PARAM *init_param;
|
||||
/* 0x040 */ void (*LMAN_callback)(u8, u8);
|
||||
/* 0x044 */ void (*MSC_callback)(u16);
|
||||
} LINK_MANAGER;
|
||||
|
||||
extern struct linkManagerTag lman;
|
||||
|
||||
u32 rfu_LMAN_REQBN_softReset_and_checkID(void);
|
||||
void rfu_LMAN_requestChangeAgbClockMaster(void);
|
||||
void rfu_LMAN_initializeRFU(INIT_PARAM *init_params);
|
||||
u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_accept_period, u16 *acceptable_serialNo_list);
|
||||
void rfu_LMAN_stopManager(bool8 forced_stop_and_RFU_reset_flag);
|
||||
void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16));
|
||||
void rfu_LMAN_REQ_sendData(bool8 clockChangeFlag);
|
||||
void rfu_LMAN_powerDownRFU(void);
|
||||
u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period);
|
||||
u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period);
|
||||
void rfu_LMAN_manager_entity(u32 rand);
|
||||
void rfu_LMAN_syncVBlank(void);
|
||||
u8 rfu_LMAN_initializeManager(void (*LMAN_callback_p)(u8, u8), void (*MSC_callback_p)(u16));
|
||||
void rfu_LMAN_forceChangeSP(void);
|
||||
|
||||
#endif //GUARD_LINKMANAGER_H
|
||||
@@ -1,6 +1,6 @@
|
||||
#ifndef GUARD_BERRY_CRUSH_H
|
||||
#define GUARD_BERRY_CRUSH_H
|
||||
|
||||
void sub_814B754(MainCallback callback);
|
||||
void StartBerryCrush(MainCallback callback);
|
||||
|
||||
#endif //GUARD_BERRY_CRUSH_H
|
||||
|
||||
@@ -6,22 +6,7 @@
|
||||
#define EASY_CHAT_TYPE_BATTLE_WON 2
|
||||
#define EASY_CHAT_TYPE_BATTLE_LOST 3
|
||||
#define EASY_CHAT_TYPE_MAIL 4
|
||||
#define EASY_CHAT_TYPE_INTERVIEW 5
|
||||
#define EASY_CHAT_TYPE_BARD_SONG 6
|
||||
#define EASY_CHAT_TYPE_FAN_CLUB 7
|
||||
#define EASY_CHAT_TYPE_UNK_8 8
|
||||
#define EASY_CHAT_TYPE_TRENDY_PHRASE 9
|
||||
#define EASY_CHAT_TYPE_GABBY_AND_TY 10
|
||||
#define EASY_CHAT_TYPE_CONTEST_INTERVIEW 11
|
||||
#define EASY_CHAT_TYPE_BATTLE_TOWER_INTERVIEW 12
|
||||
#define EASY_CHAT_TYPE_GOOD_SAYING 13
|
||||
#define EASY_CHAT_TYPE_FAN_QUESTION 14
|
||||
#define EASY_CHAT_TYPE_QUIZ_ANSWER 15
|
||||
#define EASY_CHAT_TYPE_QUIZ_QUESTION 16
|
||||
#define EASY_CHAT_TYPE_QUIZ_SET_QUESTION 17
|
||||
#define EASY_CHAT_TYPE_QUIZ_SET_ANSWER 18
|
||||
#define EASY_CHAT_TYPE_APPRENTICE 19
|
||||
#define EASY_CHAT_TYPE_QUESTIONNAIRE 20
|
||||
#define EASY_CHAT_TYPE_QUESTIONNAIRE 14
|
||||
|
||||
#define EC_GROUP_POKEMON_2 0x0
|
||||
#define EC_GROUP_TRAINER 0x1
|
||||
|
||||
@@ -1,6 +1,48 @@
|
||||
#ifndef GUARD_CONSTANTS_UNION_ROOM_H
|
||||
#define GUARD_CONSTANTS_UNION_ROOM_H
|
||||
|
||||
#define UNION_ROOM_SPAWN_NONE 0
|
||||
#define UNION_ROOM_SPAWN_IN 1
|
||||
#define UNION_ROOM_SPAWN_OUT 2
|
||||
|
||||
#define ACTIVITY_NONE 0
|
||||
#define ACTIVITY_BATTLE 1
|
||||
#define ACTIVITY_DBLBATTLE 2
|
||||
#define ACTIVITY_MLTBATTLE 3
|
||||
#define ACTIVITY_TRADE 4
|
||||
#define ACTIVITY_CHAT 5
|
||||
#define ACTIVITY_WCARD 6
|
||||
#define ACTIVITY_WNEWS 7
|
||||
#define ACTIVITY_CARD 8
|
||||
#define ACTIVITY_PJUMP 9
|
||||
#define ACTIVITY_BCRUSH 10
|
||||
#define ACTIVITY_BPICK 11
|
||||
#define ACTIVITY_SEARCH 12
|
||||
#define ACTIVITY_SPINTRADE 13
|
||||
#define ACTIVITY_ITEMTRADE 14
|
||||
|
||||
// Player response
|
||||
#define ACTIVITY_ACCEPT 17
|
||||
#define ACTIVITY_DECLINE 18
|
||||
|
||||
#define ACTIVITY_NPCTALK 19
|
||||
#define ACTIVITY_PLYRTALK 20
|
||||
|
||||
// Duplicate IDs?
|
||||
#define ACTIVITY_WCARD2 21
|
||||
#define ACTIVITY_WNEWS2 22
|
||||
|
||||
#define IN_UNION_ROOM 0x40
|
||||
|
||||
// Used in UR_AddTextPrinterParameterized
|
||||
#define UR_COLOR_DKE_WHT_LTE 0
|
||||
#define UR_COLOR_RED_WHT_LTR 1
|
||||
#define UR_COLOR_GRN_WHT_LTG 2
|
||||
#define UR_COLOR_WHT_WHT_LTE 3
|
||||
#define UR_COLOR_WHT_DKE_LTE 4
|
||||
#define UR_COLOR_GRN_DN6_LTB 5
|
||||
#define UR_COLOR_DN5_DN6_LTB 6
|
||||
|
||||
#define LINK_GROUP_SINGLE_BATTLE 0
|
||||
#define LINK_GROUP_DOUBLE_BATTLE 1
|
||||
#define LINK_GROUP_MULTI_BATTLE 2
|
||||
@@ -12,4 +54,7 @@
|
||||
#define LINK_GROUP_WONDER_NEWS 8
|
||||
#define NUM_LINK_GROUP_TYPES 9
|
||||
|
||||
#define LINK_GROUP_UNION_ROOM_RESUME 9
|
||||
#define LINK_GROUP_UNION_ROOM_INIT 10
|
||||
|
||||
#endif //GUARD_CONSTANTS_UNION_ROOM_H
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef GUARD_DIGIT_OBJ_UTIL_H
|
||||
#define GUARD_DIGIT_OBJ_UTIL_H
|
||||
|
||||
struct DigitObjUtilTemplate
|
||||
{
|
||||
u8 strConvMode:2;
|
||||
u8 shape:2;
|
||||
u8 size:2;
|
||||
u8 priority:2;
|
||||
u8 oamCount;
|
||||
u8 xDelta;
|
||||
s16 x;
|
||||
s16 y;
|
||||
const struct SpriteSheet *spriteSheet;
|
||||
const struct SpritePalette *spritePal;
|
||||
};
|
||||
|
||||
void DigitObjUtil_Teardown(void);
|
||||
bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemplate *template);
|
||||
void DigitObjUtil_PrintNumOn(u32 id, s32 num);
|
||||
void DigitObjUtil_DeletePrinter(u32 id);
|
||||
void DigitObjUtil_HideOrShow(u32 id, bool32 hide);
|
||||
|
||||
#endif //GUARD_DIGIT_OBJ_UTIL_H
|
||||
@@ -1,6 +1,6 @@
|
||||
#ifndef GUARD_DODRIO_BERRY_PICKING_H
|
||||
#define GUARD_DODRIO_BERRY_PICKING_H
|
||||
|
||||
void sub_81507FC(u16 species, MainCallback callback);
|
||||
void StartDodrioBerryPicking(u16 species, MainCallback callback);
|
||||
|
||||
#endif //GUARD_DODRIO_BERRY_PICKING_H
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
#ifndef GUARD_EREADER_HELPERS_H
|
||||
#define GUARD_EREADER_HELPERS_H
|
||||
|
||||
enum {
|
||||
EREADER_XFR_STATE_INIT = 0,
|
||||
EREADER_XFR_STATE_HANDSHAKE,
|
||||
EREADER_XFR_STATE_START,
|
||||
EREADER_XFR_STATE_TRANSFER,
|
||||
EREADER_XFR_STATE_TRANSFER_DONE,
|
||||
EREADER_XFR_STATE_CHECKSUM,
|
||||
EREADER_XFR_STATE_DONE
|
||||
};
|
||||
|
||||
#define EREADER_XFER_EXE 1
|
||||
#define EREADER_XFER_CHK 2
|
||||
#define EREADER_XFER_SHIFT 0
|
||||
#define EREADER_XFER_MASK 3
|
||||
|
||||
#define EREADER_CANCEL_TIMEOUT 1
|
||||
#define EREADER_CANCEL_KEY 2
|
||||
#define EREADER_CANCEL_MASK 0xC
|
||||
#define EREADER_CANCEL_SHIFT 2
|
||||
|
||||
#define EREADER_CHECKSUM_OK 1
|
||||
#define EREADER_CHECKSUM_ERR 2
|
||||
#define EREADER_CHECKSUM_MASK 0x30
|
||||
#define EREADER_CHECKSUM_SHIFT 4
|
||||
|
||||
void EReaderHelper_SerialCallback(void);
|
||||
void EReaderHelper_Timer3Callback(void);
|
||||
void EReaderHelper_SaveRegsState(void);
|
||||
void EReaderHelper_ClearsSendRecvMgr(void);
|
||||
void EReaderHelper_RestoreRegsState(void);
|
||||
u16 EReaderHandleTransfer(u8 mode, size_t size, const void * src, void * dest);
|
||||
|
||||
#endif //GUARD_EREADER_HELPERS_H
|
||||
@@ -54,8 +54,8 @@ bool8 FlagGet(u16 id);
|
||||
u16 * GetVarPointer(u16 id);
|
||||
bool32 IsMysteryGiftEnabled(void);
|
||||
void ResetSpecialVars(void);
|
||||
void sub_806E2D0(void);
|
||||
void sub_806E370(void);
|
||||
void ResetMysteryEventFlags(void);
|
||||
void ResetMysteryEventVars(void);
|
||||
bool32 IsNationalPokedexEnabled(void);
|
||||
void sub_806E190(void);
|
||||
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
void FreezeObjectEvents(void);
|
||||
bool8 FreezeObjectEvent(struct ObjectEvent *);
|
||||
void FreezeObjectEventsExceptOne(u8 objEventId);
|
||||
void RfuUnionObjectToggleInvisibility(u8 a0, bool32 a1);
|
||||
u32 RfuUnionObjectIsInvisible(u8 a0);
|
||||
void RfuUnionObjectStartWarp(u8 a0, u8 a1);
|
||||
void RfuUnionObjectSetFacingDirection(u8 a0, u8 a1);
|
||||
bool32 RfuUnionObjectIsWarping(u8 a0);
|
||||
void RfuUnionObjectSetFacingDirection(u8 objectEventId, u8 direction);
|
||||
void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible);
|
||||
bool32 RfuUnionObjectIsInvisible(u8 objectEventId);
|
||||
void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo);
|
||||
bool32 RfuUnionObjectIsWarping(u8 objectEventId);
|
||||
|
||||
#endif // GUARD_EVENT_OBJECT_80688E4_H
|
||||
|
||||
@@ -11,6 +11,6 @@ void sub_8098630(void);
|
||||
bool8 sub_8098734(void);
|
||||
void sub_80696C0(void);
|
||||
bool8 walkrun_is_standing_still(void);
|
||||
void sub_80696F0(void);
|
||||
void UnionRoom_UnlockPlayerAndChatPartner(void);
|
||||
|
||||
#endif // GUARD_EVENT_OBJECT_LOCK_H
|
||||
|
||||
+1
-1
@@ -31,6 +31,6 @@ void sub_8059948(u8 a0, u8 a1);
|
||||
void save_serialize_map(void);
|
||||
u32 sub_8058F1C(u32 original, u8 bit);
|
||||
u32 sub_8058F48(s16 x, s16 y, u8 z);
|
||||
void sub_8059024(s32 x, s32 y, bool32 arg2);
|
||||
void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2);
|
||||
|
||||
#endif //GUARD_FIELDMAP_H
|
||||
|
||||
+12
-11
@@ -74,8 +74,8 @@
|
||||
// GameFreak never ceases to amaze.
|
||||
// TODO: Propagate use of this macro
|
||||
#define TEST_BUTTON(field, button) ({(field) & (button);})
|
||||
#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
|
||||
#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
|
||||
#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
|
||||
#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
|
||||
#define JOY_REPT(button) TEST_BUTTON(gMain.newAndRepeatedKeys, button)
|
||||
|
||||
extern u8 gStringVar1[];
|
||||
@@ -658,8 +658,8 @@ struct FameCheckerSaveData
|
||||
|
||||
struct MEWonderNewsData
|
||||
{
|
||||
u16 unk_00;
|
||||
u8 unk_02;
|
||||
u16 newsId;
|
||||
u8 shareState;
|
||||
u8 unk_03;
|
||||
u8 unk_04[40];
|
||||
u8 unk_2C[10][40];
|
||||
@@ -673,13 +673,13 @@ struct MEWonderNewsStruct
|
||||
|
||||
struct MEWonderCardData
|
||||
{
|
||||
u16 unk_00;
|
||||
u16 cardId;
|
||||
u16 unk_02;
|
||||
u32 unk_04;
|
||||
u8 unk_08_0:2;
|
||||
u8 unk_08_2:4;
|
||||
u8 unk_08_6:2;
|
||||
u8 unk_09;
|
||||
u8 shareState:2;
|
||||
u8 recvMonCapacity;
|
||||
u8 unk_0A[40];
|
||||
u8 unk_32[40];
|
||||
u8 unk_5A[4][40];
|
||||
@@ -695,11 +695,12 @@ struct MEWonderCardStruct
|
||||
|
||||
struct MEventBuffer_3430_Sub
|
||||
{
|
||||
u16 unk_00;
|
||||
u16 unk_02;
|
||||
u16 unk_04;
|
||||
u16 linkWins;
|
||||
u16 linkLosses;
|
||||
u16 linkTrades;
|
||||
u16 unk_06;
|
||||
u16 unk_08[2][7];
|
||||
u16 distributedMons[2][7]; // [0][x] = species
|
||||
// [1][x] = ???
|
||||
};
|
||||
|
||||
struct MEventBuffer_3430
|
||||
|
||||
+17
-17
@@ -17,16 +17,16 @@ struct HelpSystemListMenu_sub
|
||||
struct HelpSystemListMenu
|
||||
{
|
||||
struct HelpSystemListMenu_sub sub;
|
||||
u8 field_0C;
|
||||
u8 field_0D;
|
||||
u8 field_0E;
|
||||
u8 itemsAbove;
|
||||
u8 cursorPos;
|
||||
u8 state;
|
||||
u8 filler_10[0xC];
|
||||
};
|
||||
|
||||
extern struct HelpSystemListMenu gHelpSystemListMenu;
|
||||
extern struct ListMenuItem gHelpSystemListMenuItems[];
|
||||
extern bool8 gHelpSystemEnabled;
|
||||
extern u8 gUnknown_203F175;
|
||||
extern bool8 gHelpSystemToggleWithRButtonDisabled;
|
||||
|
||||
// help_system_812B1E0
|
||||
void HelpSystem_SetSomeVariable(u8);
|
||||
@@ -35,19 +35,19 @@ bool8 sub_812B40C(void);
|
||||
bool8 sub_812B45C(void);
|
||||
void HelpSystem_Disable(void);
|
||||
void HelpSystem_Enable(void);
|
||||
void sub_812B4B8(void);
|
||||
bool8 sub_812BB9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 sub_812BC54(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 sub_812BC80(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 sub_812BCA8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 sub_812BD2C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 sub_812BD64(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
void HelpSystem_EnableToggleWithRButton(void);
|
||||
bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
void sub_812BDEC(void);
|
||||
bool8 sub_812BE10(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 sub_812BEEC(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer);
|
||||
bool8 sub_812BF88(void);
|
||||
|
||||
// help_system
|
||||
@@ -92,6 +92,6 @@ bool8 MoveCursor(u8 by, u8 dirn);
|
||||
void HelpSystem_BackupSomeVariable(void);
|
||||
void HelpSystem_RestoreSomeVariable(void);
|
||||
void HelpSystemRenderText(u8 font, u8 * dest, const u8 * src, u8 x, u8 y, u8 width, u8 height);
|
||||
void sub_812B4AC(void);
|
||||
void HelpSystem_DisableToggleWithRButton(void);
|
||||
|
||||
#endif //GUARD_HELP_SYSTEM_H
|
||||
|
||||
+18
-37
@@ -4,11 +4,8 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
|
||||
/* TODOs:
|
||||
* - split files
|
||||
/* TODOs:
|
||||
* - documentation
|
||||
* - decompile librfu_intr.s once arm support is back again
|
||||
(for internal structs not documented in SDK)
|
||||
* - check if any field needs to be volatile
|
||||
* - check if field names make sense
|
||||
*/
|
||||
@@ -71,6 +68,7 @@
|
||||
#define ID_CPR_POLL_REQ 0x0033
|
||||
#define ID_CPR_END_REQ 0x0034
|
||||
#define ID_UNK35_REQ 0x0035 // not defined in SDK header
|
||||
#define ID_UNK36_REQ 0x0036 // not defined in SDK header
|
||||
#define ID_RESUME_RETRANSMIT_AND_CHANGE_REQ 0x0037
|
||||
#define ID_STOP_MODE_REQ 0x003d
|
||||
#define ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ 0x00ff // When the AGB is the clock slave, the RFU generates an informational notice, and an automatically started DMA, such as HDMA, is generated at the instant the AGB is being returned as the clock master. This ID is notified by a REQ callback when the exchange of this information (REQ command) fails.
|
||||
@@ -90,8 +88,13 @@
|
||||
|
||||
#define RFU_MBOOT_DOWNLOADER_SERIAL_NO 0x0000 // The game serial number of the multi-boot downloader (programs that boot without a Game Pak)
|
||||
|
||||
#if LIBRFU_VERSION >= 1028
|
||||
#define RFU_API_BUFF_SIZE_RAM 0x0e8c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in RAM)
|
||||
#define RFU_API_BUFF_SIZE_ROM 0x052c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in ROM)
|
||||
#else
|
||||
#define RFU_API_BUFF_SIZE_RAM 0x0e64 // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in RAM)
|
||||
#define RFU_API_BUFF_SIZE_ROM 0x0504 // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in ROM)
|
||||
#endif
|
||||
|
||||
#define RFU_CHILD_MAX 4 // Maximum number of slaves that can be connected to one parent device
|
||||
|
||||
@@ -314,10 +317,10 @@ struct STWIStatus
|
||||
u8 unk_17;
|
||||
void (*callbackM)();
|
||||
void (*callbackS)(u16);
|
||||
void (*unk_20)(void);
|
||||
void (*callbackID)(void);
|
||||
union RfuPacket *txPacket;
|
||||
union RfuPacket *rxPacket;
|
||||
vu8 unk_2c;
|
||||
vu8 sending;
|
||||
};
|
||||
|
||||
// This struct is used as u8 array in SDK.
|
||||
@@ -452,54 +455,32 @@ struct RfuStatic
|
||||
u8 nullFrameCount;
|
||||
u8 emberCount;
|
||||
u8 SCStartFlag;
|
||||
u8 linkEmergencyFlag[4];
|
||||
u8 lsFixedCount[4];
|
||||
u16 cidBak[4];
|
||||
u16 unk_1a;
|
||||
u8 linkEmergencyFlag[RFU_CHILD_MAX];
|
||||
u8 lsFixedCount[RFU_CHILD_MAX];
|
||||
u16 cidBak[RFU_CHILD_MAX];
|
||||
u16 linkEmergencyLimit;
|
||||
u16 reqResult;
|
||||
u16 tryPid;
|
||||
u16 watchdogTimer;
|
||||
u32 totalPacketSize;
|
||||
};
|
||||
|
||||
struct RfuSIO32Id
|
||||
{
|
||||
u8 unk0;
|
||||
u8 unk1;
|
||||
u16 unk2;
|
||||
u16 unk4;
|
||||
u16 unk6;
|
||||
u16 unk8; // unused
|
||||
u16 unkA;
|
||||
};
|
||||
|
||||
struct RfuAPIBuffer
|
||||
{
|
||||
struct RfuLinkStatus linkStatus;
|
||||
struct RfuStatic static_;
|
||||
struct RfuFixed fixed;
|
||||
struct RfuSlotStatusNI NI[RFU_CHILD_MAX];
|
||||
struct RfuSlotStatusUNI UNI[RFU_CHILD_MAX];
|
||||
struct RfuIntrStruct intr;
|
||||
};
|
||||
|
||||
extern struct STWIStatus *gSTWIStatus;
|
||||
extern struct RfuLinkStatus *gRfuLinkStatus;
|
||||
extern struct RfuStatic *gRfuStatic;
|
||||
extern struct RfuFixed *gRfuFixed;
|
||||
extern struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX];
|
||||
extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX];
|
||||
extern struct RfuSIO32Id gRfuSIO32Id;
|
||||
|
||||
// librfu_s32id
|
||||
s32 AgbRFU_checkID(u8);
|
||||
s32 AgbRFU_checkID(u8 maxTries);
|
||||
|
||||
// Arguments with "bm..." specify slots of the form (0x01 << slot number) that are the object of a function operation.
|
||||
|
||||
// librfu_rfu
|
||||
// API Initialization and Initial Settings
|
||||
// API Initialization
|
||||
u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam);
|
||||
u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam);
|
||||
// Set Timer Interrupt
|
||||
void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p);
|
||||
// Resident Function called from within a V-Blank Interrupt
|
||||
@@ -600,7 +581,7 @@ u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void);
|
||||
|
||||
// For Debug
|
||||
// Obtain address of the SWTI-layer receive buffer
|
||||
struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void);
|
||||
u8 *rfu_getSTWIRecvBuffer(void);
|
||||
// Obtain RFU state
|
||||
void rfu_REQ_RFUStatus(void);
|
||||
u16 rfu_getRFUStatus(u8 *rfuState);
|
||||
@@ -626,14 +607,14 @@ void STWI_send_DataRxREQ(void);
|
||||
void STWI_send_MS_ChangeREQ(void);
|
||||
void STWI_send_StopModeREQ(void);
|
||||
void STWI_send_SystemStatusREQ(void);
|
||||
void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data);
|
||||
void STWI_send_GameConfigREQ(const u8 *serial_uname, const u8 *gname);
|
||||
void STWI_send_ResetREQ(void);
|
||||
void STWI_send_LinkStatusREQ(void);
|
||||
void STWI_send_VersionStatusREQ(void);
|
||||
void STWI_send_SlotStatusREQ(void);
|
||||
void STWI_send_ConfigStatusREQ(void);
|
||||
void STWI_send_ResumeRetransmitAndChangeREQ(void);
|
||||
void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3);
|
||||
void STWI_send_SystemConfigREQ(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer);
|
||||
void STWI_send_SC_StartREQ(void);
|
||||
void STWI_send_SC_PollingREQ(void);
|
||||
void STWI_send_SC_EndREQ(void);
|
||||
|
||||
+11
-11
@@ -246,38 +246,38 @@ void sub_800E0E8(void);
|
||||
bool8 sub_800A520(void);
|
||||
bool8 sub_8010500(void);
|
||||
void sub_800DFB4(u8, u8);
|
||||
void sub_800AB9C(void);
|
||||
void sub_800B1F4(void);
|
||||
void PrepareSendLinkCmd2FFE_or_RfuCmd6600(void);
|
||||
void SetWirelessCommType1(void);
|
||||
void sub_8009734(void);
|
||||
void sub_800A620(void);
|
||||
void sub_80FBB4C(void);
|
||||
void LinkRfu_DestroyIdleTask(void);
|
||||
u8 sub_800ABAC(void);
|
||||
u8 sub_800ABBC(void);
|
||||
void sub_800AAC0(void);
|
||||
void Link_TryStartSend5FFF(void);
|
||||
void OpenLink(void);
|
||||
bool8 IsLinkMaster(void);
|
||||
void CheckShouldAdvanceLinkState(void);
|
||||
void sub_800AA80(u16 a0);
|
||||
void Link_StartSend5FFFwithParam(u16 a0);
|
||||
void sub_80098D8(void);
|
||||
void CloseLink(void);
|
||||
bool8 IsLinkTaskFinished(void);
|
||||
bool32 sub_800B270(void);
|
||||
void ResetSerial(void);
|
||||
void sub_8054A28(void);
|
||||
void sub_800B1F4(void);
|
||||
void SetWirelessCommType1(void);
|
||||
void LoadWirelessStatusIndicatorSpriteGfx(void);
|
||||
void CreateWirelessStatusIndicatorSprite(u8, u8);
|
||||
void sub_8009FE8(void);
|
||||
void ClearLinkCallback_2(void);
|
||||
void sub_80FA42C(void);
|
||||
void sub_800B284(struct LinkPlayer * linkPlayer);
|
||||
void LinkRfu_SetRfuFuncToSend6600(void);
|
||||
void IntlConvertLinkPlayerName(struct LinkPlayer * linkPlayer);
|
||||
bool8 IsWirelessAdapterConnected(void);
|
||||
bool8 sub_800A474(u8 a0);
|
||||
void LinkVSync(void);
|
||||
bool8 HandleLinkConnection(void);
|
||||
void sub_800B0B4(void);
|
||||
void sub_800B110(u32 who);
|
||||
void sub_800ACBC(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
|
||||
void PrepareLocalLinkPlayerBlock(void);
|
||||
void LinkPlayerFromBlock(u32 who);
|
||||
void SetLinkErrorFromRfu(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06);
|
||||
u8 sub_800A8D4(void);
|
||||
|
||||
#endif // GUARD_LINK_H
|
||||
|
||||
+110
-215
@@ -3,169 +3,78 @@
|
||||
|
||||
#include "global.h"
|
||||
#include "librfu.h"
|
||||
#include "AgbRfu_LinkManager.h"
|
||||
|
||||
// RfuTgtData.gname is read as these structs.
|
||||
struct GFtgtGnameSub
|
||||
{
|
||||
u16 unk_00_0:4;
|
||||
u16 unk_00_4:1;
|
||||
u16 unk_00_5:1;
|
||||
u16 unk_00_6:1;
|
||||
u16 isChampion:1;
|
||||
u16 hasNationalDex:1;
|
||||
u16 gameClear:1;
|
||||
u16 unk_01_2:4;
|
||||
u16 unk_01_6:2;
|
||||
u8 playerTrainerId[2];
|
||||
};
|
||||
#define RFU_COMMAND_0x8800 0x8800
|
||||
#define RFU_COMMAND_0x8900 0x8900
|
||||
#define RFU_COMMAND_0xa100 0xa100
|
||||
#define RFU_COMMAND_0x7700 0x7700
|
||||
#define RFU_COMMAND_0x7800 0x7800
|
||||
#define RFU_COMMAND_0x6600 0x6600
|
||||
#define RFU_COMMAND_0x5f00 0x5f00
|
||||
#define RFU_COMMAND_0x2f00 0x2f00
|
||||
#define RFU_COMMAND_0xbe00 0xbe00
|
||||
#define RFU_COMMAND_0xee00 0xee00
|
||||
#define RFU_COMMAND_0xed00 0xed00
|
||||
|
||||
struct __attribute__((packed, aligned(2))) GFtgtGname
|
||||
struct RfuBlockSend
|
||||
{
|
||||
struct GFtgtGnameSub unk_00;
|
||||
u8 unk_04[4];
|
||||
u16 species:10;
|
||||
u16 type:6;
|
||||
u8 unk_0a_0:7;
|
||||
u8 unk_0a_7:1;
|
||||
u8 playerGender:1;
|
||||
u8 level:7;
|
||||
u8 unk_0c;
|
||||
};
|
||||
|
||||
struct Padded_U8
|
||||
{
|
||||
u8 value;
|
||||
};
|
||||
|
||||
struct UnkLinkRfuStruct_02022B2C
|
||||
{
|
||||
u8 maxMFrame;
|
||||
u8 mcTimer;
|
||||
u16 availSlotFlag;
|
||||
u8 mbootFlag;
|
||||
u16 serialNo;
|
||||
struct GFtgtGname *gname;
|
||||
u8 *uname;
|
||||
u8 unk_10;
|
||||
u8 unk_11;
|
||||
u16 unk_12;
|
||||
u16 unk_14;
|
||||
};
|
||||
|
||||
struct UnkLinkRfuStruct_02022B44
|
||||
{
|
||||
u8 fill_00[6];
|
||||
u16 unk_06;
|
||||
u8 fill_08[6];
|
||||
vu8 unk_0e;
|
||||
u8 unk_0f;
|
||||
u8 fill_10[0x54];
|
||||
u16 unk_64;
|
||||
u8 fill_66[0x1d];
|
||||
u8 unk_83;
|
||||
u8 fill_84[0x58];
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_1
|
||||
{
|
||||
/* 0x000 */ u8 unk_00;
|
||||
/* 0x001 */ u8 unk_01;
|
||||
/* 0x002 */ vu8 unk_02;
|
||||
/* 0x003 */ vu8 unk_03;
|
||||
/* 0x004 */ u8 unk_04;
|
||||
/* 0x005 */ u8 unk_05;
|
||||
/* 0x006 */ u8 unk_06;
|
||||
/* 0x007 */ u8 unk_07;
|
||||
/* 0x008 */ u8 unk_08;
|
||||
/* 0x009 */ u8 unk_09;
|
||||
/* 0x00a */ u8 unk_0a;
|
||||
/* 0x00b */ u8 unk_0b;
|
||||
/* 0x00c */ u8 unk_0c;
|
||||
/* 0x00d */ u8 unk_0d;
|
||||
/* 0x00e */ u8 unk_0e;
|
||||
/* 0x00f */ u8 unk_0f;
|
||||
/* 0x010 */ u8 unk_10;
|
||||
/* 0x011 */ u8 unk_11;
|
||||
/* 0x012 */ u8 unk_12;
|
||||
// aligned
|
||||
/* 0x014 */ u16 unk_14;
|
||||
/* 0x016 */ u16 unk_16;
|
||||
/* 0x018 */ u16 unk_18;
|
||||
/* 0x01a */ u16 unk_1a;
|
||||
/* 0x01c */ u16 unk_1c;
|
||||
/* 0x01e */ u16 unk_1e;
|
||||
/* 0x020 */ const u16 *unk_20;
|
||||
/* 0x024 */ u8 unk_24;
|
||||
/* 0x026 */ u16 unk_26;
|
||||
/* 0x028 */ u16 unk_28[RFU_CHILD_MAX];
|
||||
/* 0x030 */ u8 unk_30;
|
||||
// aligned
|
||||
/* 0x032 */ u16 unk_32;
|
||||
/* 0x034 */ u16 unk_34[RFU_CHILD_MAX];
|
||||
/* 0x03c */ const struct UnkLinkRfuStruct_02022B2C *unk_3c;
|
||||
/* 0x040 */ void (*unk_40)(u8, u8);
|
||||
/* 0x044 */ void (*unk_44)(u16);
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_6c
|
||||
{
|
||||
/* 0x00 */ u16 unk_00;
|
||||
/* 0x02 */ u16 unk_02;
|
||||
/* 0x04 */ const u8 *unk_04;
|
||||
/* 0x08 */ u32 unk_08;
|
||||
/* 0x0c */ u32 unk_0c;
|
||||
/* 0x10 */ u8 unk_10;
|
||||
/* 0x11 */ u8 unk_11;
|
||||
/* 0x12 */ u8 unk_12;
|
||||
/* 0x00 */ u16 next;
|
||||
/* 0x02 */ u16 count; // max 21
|
||||
/* 0x04 */ const u8 *payload;
|
||||
/* 0x08 */ u32 receivedFlags;
|
||||
/* 0x0c */ u32 failedFlags;
|
||||
/* 0x10 */ u8 sending;
|
||||
/* 0x11 */ u8 owner;
|
||||
/* 0x12 */ u8 receiving;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_124
|
||||
{
|
||||
/* 0x000 */ u8 unk_00[20][70];
|
||||
/* 0x578 */ vu8 unk_8c0;
|
||||
/* 0x579 */ vu8 unk_8c1;
|
||||
/* 0x57a */ vu8 unk_8c2;
|
||||
/* 0x57b */ vu8 unk_8c3;
|
||||
/* 0x000 */ u8 slots[20][70];
|
||||
/* 0x578 */ vu8 recv_slot;
|
||||
/* 0x579 */ vu8 send_slot;
|
||||
/* 0x57a */ vu8 count;
|
||||
/* 0x57b */ vu8 full;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_9e8
|
||||
{
|
||||
/* 0x000 */ u8 unk_00[40][14];
|
||||
/* 0x230 */ vu8 unk_230;
|
||||
/* 0x231 */ vu8 unk_231;
|
||||
/* 0x232 */ vu8 unk_232;
|
||||
/* 0x233 */ vu8 unk_233;
|
||||
/* 0x000 */ u8 slots[40][14];
|
||||
/* 0x230 */ vu8 recv_slot;
|
||||
/* 0x231 */ vu8 send_slot;
|
||||
/* 0x232 */ vu8 count;
|
||||
/* 0x233 */ vu8 full;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2_Sub_c1c
|
||||
{
|
||||
/* 0x00 */ u8 unk_00[2][14];
|
||||
/* 0x1c */ vu8 unk_1c;
|
||||
/* 0x1d */ vu8 unk_1d;
|
||||
/* 0x1e */ vu8 unk_1e;
|
||||
/* 0x00 */ u8 slots[2][14];
|
||||
/* 0x1c */ vu8 recv_slot;
|
||||
/* 0x1d */ vu8 send_slot;
|
||||
/* 0x1e */ vu8 count;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_Sub_Unused
|
||||
{
|
||||
/* 0x000 */ u8 unk_00[2][256];
|
||||
/* 0x200 */ vu8 unk_200;
|
||||
/* 0x201 */ vu8 unk_201;
|
||||
/* 0x202 */ vu8 unk_202;
|
||||
/* 0x203 */ vu8 unk_203;
|
||||
/* 0x000 */ u8 slots[2][256];
|
||||
/* 0x200 */ vu8 recv_slot;
|
||||
/* 0x201 */ vu8 send_slot;
|
||||
/* 0x202 */ vu8 count;
|
||||
/* 0x203 */ vu8 full;
|
||||
};
|
||||
|
||||
struct UnkRfuStruct_2
|
||||
typedef struct UnkRfuStruct_2
|
||||
{
|
||||
/* 0x000 */ void (*RfuFunc)(void);
|
||||
/* 0x004 */ u16 unk_04;
|
||||
/* 0x004 */ u16 state;
|
||||
/* 0x006 */ u8 filler_06[4];
|
||||
/* 0x00a */ u16 unk_0a;
|
||||
/* 0x00c */ u8 unk_0c; // parentChildMode?
|
||||
/* 0x00a */ u16 linkman_msg;
|
||||
/* 0x00c */ u8 parent_child;
|
||||
/* 0x00d */ u8 playerCount;
|
||||
/* 0x00e */ u8 unk_0e;
|
||||
/* 0x00f */ u8 unk_0f;
|
||||
/* 0x010 */ u16 unk_10;
|
||||
/* 0x012 */ u16 unk_12;
|
||||
/* 0x010 */ u16 linkman_param[2];
|
||||
/* 0x014 */ u8 unk_14[RFU_CHILD_MAX][14];
|
||||
/* 0x04c */ u8 unk_4c[14];
|
||||
/* 0x05a */ u8 unk_5a;
|
||||
@@ -175,30 +84,30 @@ struct UnkRfuStruct_2
|
||||
/* 0x066 */ u8 unk_66;
|
||||
/* 0x067 */ u8 unk_67;
|
||||
/* 0x068 */ u8 filler_68[4];
|
||||
/* 0x06c */ struct UnkRfuStruct_2_Sub_6c unk_6c;
|
||||
/* 0x080 */ struct UnkRfuStruct_2_Sub_6c unk_80[5];
|
||||
/* 0x0e4 */ u8 unk_e4[5];
|
||||
/* 0x0e9 */ u8 unk_e9[5];
|
||||
/* 0x0ee */ vu8 unk_ee;
|
||||
/* 0x06c */ struct RfuBlockSend cmd_8800_sendbuf;
|
||||
/* 0x080 */ struct RfuBlockSend cmd_8800_recvbuf[5];
|
||||
/* 0x0e4 */ u8 cmd5f00Ack[5];
|
||||
/* 0x0e9 */ u8 cmd_6600_recvd[5];
|
||||
/* 0x0ee */ vu8 errorState;
|
||||
/* 0x0ef */ u8 unk_ef;
|
||||
/* 0x0f0 */ u8 unk_f0;
|
||||
/* 0x0f0 */ u8 linkLossRecoveryState;
|
||||
/* 0x0f1 */ u8 unk_f1;
|
||||
/* 0x0f2 */ u16 unk_f2[6];
|
||||
/* 0x0fe */ u16 unk_fe;
|
||||
/* 0x100 */ u16 unk_100;
|
||||
/* 0x0fe */ u16 cmd_6600_timer;
|
||||
/* 0x100 */ u16 cmd_6600_count;
|
||||
/* 0x102 */ u8 unk_102;
|
||||
/* 0x104 */ struct RfuTgtData unk_104;
|
||||
/* 0x124 */ struct UnkRfuStruct_2_Sub_124 unk_124;
|
||||
/* 0x6a0 */ struct UnkRfuStruct_2_Sub_9e8 unk_9e8;
|
||||
/* 0x8d4 */ struct UnkRfuStruct_2_Sub_c1c unk_c1c;
|
||||
/* 0x8f4 */ vu8 unk_c3c;
|
||||
/* 0x8f5 */ u8 unk_c3d;
|
||||
/* 0x8f6 */ vu8 unk_c3e;
|
||||
/* 0x8f5 */ u8 reconnectedParentIdx;
|
||||
/* 0x8f6 */ vu8 child_slot;
|
||||
/* 0x8f7 */ u8 unk_c3f[70];
|
||||
/* 0x93d */ u8 unk_c85;
|
||||
/* 0x93e */ u8 unk_c86;
|
||||
/* 0x93f */ u8 unk_c87[5][7][2];
|
||||
/* 0x985 */ u8 unk_ccd;
|
||||
/* 0x93f */ u8 recvCmds[5][7][2];
|
||||
/* 0x985 */ u8 parentId;
|
||||
/* 0x986 */ u8 unk_cce; // childId
|
||||
/* 0x987 */ u8 unk_ccf;
|
||||
/* 0x988 */ vu8 unk_cd0;
|
||||
@@ -209,43 +118,42 @@ struct UnkRfuStruct_2
|
||||
/* 0x993 */ vu8 unk_cdb;
|
||||
/* 0x994 */ vu8 unk_cdc;
|
||||
/* 0x995 */ u8 unk_cdd;
|
||||
/* 0x996 */ u8 unk_cde[RFU_CHILD_MAX];
|
||||
/* 0x99a */ u8 unk_ce2;
|
||||
/* 0x99b */ u8 unk_ce3;
|
||||
/* 0x996 */ u8 linkPlayerIdx[RFU_CHILD_MAX];
|
||||
/* 0x99a */ u8 bm_PartnerFlags;
|
||||
/* 0x99b */ u8 bm_DisconnectSlot;
|
||||
/* 0x99c */ u8 unk_ce4;
|
||||
/* 0x99d */ u8 unk_ce5;
|
||||
/* 0x99e */ u8 unk_ce6;
|
||||
/* 0x99f */ u8 unk_ce7;
|
||||
/* 0x99e */ u8 unionRoomChatters;
|
||||
/* 0x99f */ u8 acceptSlot_flag;
|
||||
/* 0x9a0 */ bool8 unk_ce8;
|
||||
/* 0x9a1 */ u8 unk_ce9;
|
||||
/* 0x9a2 */ u8 unk_cea[RFU_CHILD_MAX];
|
||||
/* 0x9a6 */ u8 unk_cee[RFU_CHILD_MAX];
|
||||
}; // size: 0x9AC
|
||||
} GF_RFU_MANAGER; // size: 0x9AC
|
||||
|
||||
extern struct UnkRfuStruct_1 gUnknown_3005E10;
|
||||
extern struct GFtgtGname gHostRFUtgtGnameBuffer;
|
||||
extern u8 gHostRFUtgtUnameBuffer[];
|
||||
|
||||
// GameFreak signatures
|
||||
void AddTextPrinterToWindow1(const u8 *str);
|
||||
bool32 MG_PrintTextOnWindow1AndWaitButton(u8 * cmdPtr, const u8 * src);
|
||||
void LinkRfu_FatalError(void);
|
||||
void MG_DrawCheckerboardPattern(void);
|
||||
void task_add_05_task_del_08FA224_when_no_RfuFunc(void);
|
||||
void Rfu_BeginBuildAndSendCommand5F(void);
|
||||
bool8 IsLinkRfuTaskFinished(void);
|
||||
void DestroyWirelessStatusIndicatorSprite(void);
|
||||
void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0);
|
||||
void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0);
|
||||
void MEvent_CreateTask_Leader(u32 arg0);
|
||||
void sub_80F9E2C(void * data);
|
||||
u8 sub_8116DE0(void);
|
||||
void sub_80FBB4C(void);
|
||||
void RfuPrepareSend0x2f00(void * data);
|
||||
u8 CreateTask_ListenToWireless(void);
|
||||
void LinkRfu_DestroyIdleTask(void);
|
||||
void sub_80F86F4(void);
|
||||
void sub_80FB128(bool32 a0);
|
||||
u32 sub_80FD3A4(void);
|
||||
bool32 IsSendingKeysToRfu(void);
|
||||
void Rfu_set_zero(void);
|
||||
u8 GetRfuPlayerCount(void);
|
||||
void sub_80F9828(void);
|
||||
void StartSendingKeysToRfu(void);
|
||||
u8 LinkRfu_GetMultiplayerId(void);
|
||||
bool32 Rfu_InitBlockSend(const u8 * src, size_t size);
|
||||
bool8 sub_80FA0F8(u8 a0);
|
||||
@@ -253,78 +161,65 @@ u8 Rfu_GetBlockReceivedStatus(void);
|
||||
void Rfu_SetBlockReceivedFlag(u8 who);
|
||||
void Rfu_ResetBlockReceivedFlag(u8 who);
|
||||
bool8 Rfu_IsMaster(void);
|
||||
void sub_80F85F8(void);
|
||||
bool32 sub_80FAE94(void);
|
||||
bool32 sub_80FAEF0(void);
|
||||
void ResetLinkRfuGFLayer(void);
|
||||
bool32 LinkRfuMain1(void);
|
||||
bool32 LinkRfuMain2(void);
|
||||
bool32 IsRfuRecvQueueEmpty(void);
|
||||
u32 GetRfuRecvQueueLength(void);
|
||||
void sub_80F8DC0(void);
|
||||
void sub_80FBB20(void);
|
||||
void LinkRfu_Shutdown(void);
|
||||
void LinkRfu_CreateIdleTask(void);
|
||||
bool8 sub_80FA484(bool32 a0);
|
||||
void var_800D_set_xB(void);
|
||||
struct GFtgtGname *sub_80F9800(void);
|
||||
struct GFtgtGname *GetHostRFUtgtGname(void);
|
||||
void UpdateWirelessStatusIndicatorSprite(void);
|
||||
void InitRFU(void);
|
||||
void sub_80FEB14(void);
|
||||
bool32 sub_80FBA00(void);
|
||||
bool32 RfuIsErrorStatus1or2(void);
|
||||
|
||||
void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr);
|
||||
void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr);
|
||||
void RFU_queue_20_70_reset(struct UnkRfuStruct_2_Sub_124 *ptr);
|
||||
void RFU_queue_40_14_reset(struct UnkRfuStruct_2_Sub_9e8 *ptr);
|
||||
|
||||
void sub_80FD4B0(const struct UnkLinkRfuStruct_02022B2C *unk0);
|
||||
u8 sub_80FD538(u8 r5, u16 r7, u16 r8, const u16 *r6);
|
||||
void sub_80FD760(bool8 a0);
|
||||
void sub_80FEA10(void (*func)(u16));
|
||||
void sub_80FB9E4(u8 a0, u16 a1);
|
||||
u8 sub_80FB9F4(void);
|
||||
void LinkRfu_REQ_SendData_HandleParentRelationship(bool8 clockChangeFlag);
|
||||
void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
|
||||
void sub_80FD52C(void);
|
||||
u8 sub_80FD610(u16 parentId, u16 unk_1a);
|
||||
bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
|
||||
bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
|
||||
void sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
|
||||
bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
|
||||
void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
|
||||
u8 sub_80FEA34(u8 a0, u16 a1);
|
||||
void sub_80FDA30(u32 a0);
|
||||
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3);
|
||||
void LinkRfu_syncVBlank_(void);
|
||||
s32 sub_80FD430(void (*func1)(u8, u8), void (*func2)(u16));
|
||||
void sub_80FEB3C(void);
|
||||
void sub_80FAFE0(u8 a0);
|
||||
bool32 sub_80FA44C(u32 a0);
|
||||
void RfuSetErrorStatus(u8 a0, u16 msg);
|
||||
u8 RfuGetErrorStatus(void);
|
||||
void RFU_queue_20_70_recv(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2);
|
||||
bool8 RFU_queue_40_14_send(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2);
|
||||
bool8 RFU_queue_2_14_send(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2);
|
||||
void RFU_queue_2_14_recv(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2);
|
||||
bool8 RFU_queue_20_70_send(struct UnkRfuStruct_2_Sub_124 * a0, u8 *a1);
|
||||
void RFU_queue_40_14_recv(struct UnkRfuStruct_2_Sub_9e8 * a0, u8 *a1);
|
||||
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders);
|
||||
void UpdateGameData_GroupLockedIn(bool8 started);
|
||||
bool32 RfuSerialNumberIsValid(u32 a0);
|
||||
bool8 sub_80FC1B0(void);
|
||||
bool8 sub_80F8F40(void);
|
||||
void sub_80F8F5C(void);
|
||||
bool8 LmanAcceptSlotFlagIsNotZero(void);
|
||||
void LinkRfu_StopManagerAndFinalizeSlots(void);
|
||||
bool32 sub_80FA5D4(void);
|
||||
bool32 sub_80FC1CC(void);
|
||||
bool32 sub_80F8F7C(bool32 a0);
|
||||
bool32 sub_80FA634(u16 a0, const u8 *a1);
|
||||
void sub_80FA670(u8 a0, u16 a1, const u8 *a2);
|
||||
u32 sub_80FA6FC(u16 a0, const u8 *a1);
|
||||
void SetHostRFUtgtGname(u8 a0, u32 a1, u32 a2);
|
||||
void sub_80FBB8C(u32 a0);
|
||||
void sub_80FBD4C(const u8 *ptr, u16 a1);
|
||||
bool32 WaitRfuState(bool32 a0);
|
||||
bool32 TrainerIdAndNameStillInPartnersList(u16 trainerId, const u8 *trainerName);
|
||||
void SendByteToPartnerByIdAndName(u8 a0, u16 a1, const u8 *a2);
|
||||
u32 WaitSendByteToPartnerByIdAndName(u16 a0, const u8 *a1);
|
||||
void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 a2);
|
||||
void InitializeRfuLinkManager_LinkLeader(u32 availSlots);
|
||||
void RequestDisconnectSlotByTrainerNameAndId(const u8 *trainerName, u16 trainerId);
|
||||
void LinkRfu3_SetGnameUnameFromStaticBuffers(struct GFtgtGname *gname, u8 *uname);
|
||||
void sub_80FBBD8(void);
|
||||
void sub_80FA6BC(void);
|
||||
void sub_80FBF54(const u8 *src, u16 trainerId);
|
||||
void sub_80FB008(u8 a0, u32 a1, u32 a2);
|
||||
void InitializeRfuLinkManager_JoinGroup(void);
|
||||
void LinkRfuNIsend8(void);
|
||||
void CreateTask_RfuReconnectWithParent(const u8 *src, u16 trainerId);
|
||||
void UpdateGameDataWithActivitySpriteGendersFlag(u8 activity, u32 child_sprite_genders, u32 started);
|
||||
void RecordMixTrainerNames(void);
|
||||
void sub_80F8CFC();
|
||||
void sub_80F8D14();
|
||||
void sub_80FAF74(bool32 a0, bool32 a1);
|
||||
void LinkRfu_CreateConnectionAsParent();
|
||||
void LinkRfu_StopManagerBeforeEnteringChat();
|
||||
void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard);
|
||||
void ClearAndInitHostRFUtgtGname(void);
|
||||
void sub_80F8FA0(void);
|
||||
void sub_80FAFA0(u32 type, u32 species, u32 level);
|
||||
bool32 sub_80FBB0C(void);
|
||||
void sub_80FBC00(void);
|
||||
void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level);
|
||||
bool32 IsUnionRoomListenTaskActive(void);
|
||||
void InitializeRfuLinkManager_EnterUnionRoom(void);
|
||||
void sub_80FBD6C(u32 a0);
|
||||
void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2);
|
||||
bool32 PlayerHasMetTrainerBefore(u16 id, u8 *name);
|
||||
bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx);
|
||||
bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx);
|
||||
bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx);
|
||||
bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *gname, u8 *uname, u8 idx);
|
||||
bool32 GetRfuUnkCE8(void);
|
||||
void sub_80FA4A8(void);
|
||||
void sub_80FB9D0(void);
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ s8 sub_812EAE4(u16 species, u32 personality, u8 a2);
|
||||
// list_menu
|
||||
void sub_8107CD8(u8 palOffset, u16 speciesId);
|
||||
void sub_8107CF8(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y);
|
||||
void sub_8107D38(u8 palOffset, u8 palId);
|
||||
void ListMenuLoadStdPalAt(u8 palOffset, u8 palId);
|
||||
void BlitMoveInfoIcon(u8 windowId, u8 iconId, u16 x, u16 y);
|
||||
|
||||
// menu
|
||||
|
||||
+29
-12
@@ -13,7 +13,7 @@ struct MEventClientHeaderStruct
|
||||
u16 id;
|
||||
u16 unk_16[4];
|
||||
struct MEventBuffer_3430_Sub unk_20;
|
||||
u8 unk_44;
|
||||
u8 maxDistributionMons;
|
||||
u8 playerName[7];
|
||||
u8 playerTrainerId[4];
|
||||
u16 easyChatProfile[6];
|
||||
@@ -33,21 +33,38 @@ struct MEvent_Str_2
|
||||
u8 fill_00[0x40];
|
||||
};
|
||||
|
||||
struct UnkStruct_8467FB8
|
||||
{
|
||||
u8 textPal1:4;
|
||||
u8 textPal2:4;
|
||||
u8 textPal3:4;
|
||||
u8 index:4;
|
||||
const u8 * tiles;
|
||||
const u8 * map;
|
||||
const u16 * pal;
|
||||
};
|
||||
|
||||
extern const u16 gCard1Pal[];
|
||||
extern const u16 gCard2Pal[];
|
||||
extern const u16 gCard3Pal[];
|
||||
extern const u16 gCard4Pal[];
|
||||
extern const u16 gCard5Pal[];
|
||||
|
||||
struct MEWonderNewsData * GetSavedWonderNews(void);
|
||||
struct MEWonderCardData * GetSavedWonderCard(void);
|
||||
struct MEventBuffer_3430_Sub * sav1_get_mevent_buffer_2(void);
|
||||
struct MENewsJisanStruct * GetMENewsJisanStructPtr(void);
|
||||
bool32 sub_8143DC8(const struct MEWonderNewsData * src);
|
||||
bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct MEWonderNewsData * src);
|
||||
bool32 ValidateReceivedWonderNews(void);
|
||||
bool32 ValidateReceivedWonderCard(void);
|
||||
bool32 sub_8143EF4(const u8 * src);
|
||||
bool32 sub_8143F68(const struct MEWonderCardData * data);
|
||||
void sub_814410C(struct MEWonderCardData * buffer);
|
||||
bool32 sub_8144254(const u16 * data);
|
||||
bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src);
|
||||
bool32 OverwriteSavedWonderCardWithReceivedCard(const struct MEWonderCardData * data);
|
||||
void MEvent_WonderCardResetUnk08_6(struct MEWonderCardData * buffer);
|
||||
bool32 MEvent_ReceiveDistributionMon(const u16 * data);
|
||||
void BuildMEventClientHeader(struct MEventClientHeaderStruct * data);
|
||||
bool32 ValidateMEventClientHeader(const struct MEventClientHeaderStruct * data);
|
||||
u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
|
||||
u32 sub_8144434(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
|
||||
u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
|
||||
bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1);
|
||||
u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command);
|
||||
bool32 InitWonderCardResources(struct MEWonderCardData * r5, struct MEventBuffer_3430_Sub * r6);
|
||||
@@ -66,12 +83,12 @@ void MENews_RemoveScrollIndicatorArrowPair(void);
|
||||
bool32 WonderNews_Test_Unk_02(void);
|
||||
bool32 WonderCard_Test_Unk_08_6(void);
|
||||
u32 MENews_GetInput(u16 input);
|
||||
void sub_8143D24(void);
|
||||
u16 sub_81445C0(u32 command);
|
||||
void sub_8144714(u32 a0, u32 a1);
|
||||
void InitMEventData(void);
|
||||
u16 MEvent_GetBattleCardCount(u32 command);
|
||||
void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId);
|
||||
u16 *GetMEventProfileECWordsMaybe(void);
|
||||
void sub_81446C4(void);
|
||||
bool32 sub_81446D0(u16 a0);
|
||||
void ResetReceivedWonderCardFlag(void);
|
||||
bool32 MEventHandleReceivedWonderCard(u16 cardId);
|
||||
u16 GetWonderCardFlagId(void);
|
||||
|
||||
#endif //GUARD_MEVENT_H
|
||||
|
||||
@@ -48,6 +48,7 @@ struct mevent_client_cmd
|
||||
#define CLI_RECVBUF {.instr = 12, .parameter = 0}
|
||||
#define CLI_REQWORD {.instr = 13, .parameter = 0}
|
||||
#define CLI_SNDWORD {.instr = 14, .parameter = 0}
|
||||
#define CLI_RECVMON {.instr = 16, .parameter = 0}
|
||||
#define CLI_RECVRAM {.instr = 17, .parameter = 0}
|
||||
#define CLI_SENDALL {.instr = 20, .parameter = 0}
|
||||
|
||||
|
||||
+2
-2
@@ -147,7 +147,7 @@ void Overworld_ResetStateAfterTeleport(void);
|
||||
void Overworld_FadeOutMapMusic(void);
|
||||
void CB2_LoadMap(void);
|
||||
bool8 BGMusicStopped(void);
|
||||
bool8 is_light_level_8_or_9(u8 mapType);
|
||||
bool8 IsMapTypeIndoors(u8 mapType);
|
||||
bool32 sub_8055C9C(void);
|
||||
void Overworld_ResetStateAfterDigEscRope(void);
|
||||
bool32 sub_8058244(void);
|
||||
@@ -156,7 +156,7 @@ u8 GetCurrentMapType(void);
|
||||
u8 get_map_light_from_warp0(void);
|
||||
const struct MapHeader *warp1_get_mapheader(void);
|
||||
void sub_8055F88(void);
|
||||
void sub_8056788(void);
|
||||
void CB2_ReturnToFieldCableClub(void);
|
||||
void ResetGameStats(void);
|
||||
|
||||
void Overworld_CreditsMainCB(void);
|
||||
|
||||
@@ -5,6 +5,6 @@
|
||||
|
||||
void ResetPokeJumpResults(void);
|
||||
bool32 IsSpeciesAllowedInPokemonJump(u16 species);
|
||||
void sub_8147AA8(u16 species, MainCallback callback);
|
||||
void StartPokemonJump(u16 species, MainCallback callback);
|
||||
|
||||
#endif // GUARD_POKEMON_JUMP_H
|
||||
|
||||
@@ -3,15 +3,14 @@
|
||||
|
||||
#include "union_room.h"
|
||||
|
||||
void sub_811C1C8(void);
|
||||
void sub_811BAAC(u8 *spriteIds, s32 arg1);
|
||||
void sub_811BB40(u8 *spriteIds);
|
||||
void sub_811BB68(void);
|
||||
void sub_811BECC(struct UnkStruct_URoom *arg0);
|
||||
void sub_811BEDC(struct UnkStruct_URoom *arg0);
|
||||
bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3);
|
||||
void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2);
|
||||
u8 ZeroUnionObjWork(struct UnionObj * ptr);
|
||||
void sub_811BA78(void);
|
||||
void DeleteUnionObjWorkAndStopTask(void);
|
||||
void CreateGroupMemberObjectsInvisible(u8 *spriteIds, s32 group);
|
||||
void DestroyGroupMemberObjects(u8 *spriteIds);
|
||||
void MakeGroupAssemblyAreasPassable(void);
|
||||
void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
|
||||
void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p);
|
||||
bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds);
|
||||
void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_PLAYER_AVATAR_H
|
||||
|
||||
+1
-1
@@ -62,7 +62,7 @@ u8 *GetRamScript(u8 objectId, u8 *script);
|
||||
bool32 sub_80991F8(void);
|
||||
u8 *sub_8099244(void);
|
||||
void sub_80992A0(u8 *script, u16 scriptSize);
|
||||
bool32 sub_8069DFC(void);
|
||||
bool32 ValidateRamScript(void);
|
||||
void MEventSetRamScript(u8 * script, u16 scriptSize);
|
||||
u8 * sub_8069E48(void);
|
||||
void sub_8069998(u8 var);
|
||||
|
||||
+1
-1
@@ -315,6 +315,6 @@ void CopyFromSprites(u8 *dest);
|
||||
u8 SpriteTileAllocBitmapOp(u16 bit, u8 op);
|
||||
void ClearSpriteCopyRequests(void);
|
||||
void ResetAffineAnimData(void);
|
||||
void sub_8007FFC(struct Sprite* sprite, s16 a2, s16 a3);
|
||||
void obj_pos2_update_enable(struct Sprite* sprite, s16 xmod, s16 ymod);
|
||||
|
||||
#endif //GUARD_SPRITE_H
|
||||
|
||||
@@ -1100,4 +1100,30 @@ extern const u8 gText_Symbols[];
|
||||
extern const u8 gText_Register2[];
|
||||
extern const u8 gText_Exit[];
|
||||
|
||||
// wireless_communication_status_screen
|
||||
extern const u8 gUnknown_841E2B4[];
|
||||
extern const u8 gUnknown_841E2BF[];
|
||||
extern const u8 gUnknown_841E2C9[];
|
||||
extern const u8 gUnknown_841E2D4[];
|
||||
extern const u8 gText_WirelessCommunicationStatus[];
|
||||
extern const u8 gText_PeopleTrading[];
|
||||
extern const u8 gText_PeopleBattling[];
|
||||
extern const u8 gText_PeopleInUnionRoom[];
|
||||
extern const u8 gText_PeopleCommunicating[];
|
||||
|
||||
// mevent
|
||||
extern const u8 gJPText_ReceiveMysteryGiftWithEReader[];
|
||||
extern const u8 gJPText_SelectConnectFromEReaderMenu[];
|
||||
extern const u8 gJPText_SelectConnectWithGBA[];
|
||||
extern const u8 gJPText_LinkIsIncorrect[];
|
||||
extern const u8 gJPText_CardReadingHasBeenHalted[];
|
||||
extern const u8 gJPText_Connecting[];
|
||||
extern const u8 gJPText_ConnectionErrorCheckLink[];
|
||||
extern const u8 gJPText_ConnectionErrorTryAgain[];
|
||||
extern const u8 gJPText_AllowEReaderToLoadCard[];
|
||||
extern const u8 gJPText_ConnectionComplete[];
|
||||
extern const u8 gJPText_NewTrainerHasComeToSevii[];
|
||||
extern const u8 gJPText_PleaseWaitAMoment[];
|
||||
extern const u8 gJPText_WriteErrorUnableToSaveData[];
|
||||
|
||||
#endif //GUARD_STRINGS_H
|
||||
|
||||
+45
-37
@@ -4,28 +4,34 @@
|
||||
#include "global.h"
|
||||
#include "link_rfu.h"
|
||||
|
||||
struct UnkStruct_Shared
|
||||
// Return value of IsRequestedTypeAndSpeciesInPlayerParty
|
||||
#define UR_TRADE_MATCH 0
|
||||
#define UR_TRADE_NOTYPE 1
|
||||
#define UR_TRADE_NOEGG 2
|
||||
|
||||
#define UROOM_MAX_GROUP_COUNT 8
|
||||
#define UROOM_MAX_PARTY_SIZE 5
|
||||
|
||||
struct UnionGnameUnamePair
|
||||
{
|
||||
struct GFtgtGname gname;
|
||||
u8 ALIGNED(4) playerName[PLAYER_NAME_LENGTH + 1];
|
||||
u8 ALIGNED(4) uname[PLAYER_NAME_LENGTH + 1];
|
||||
};
|
||||
|
||||
struct UnkStruct_x1C
|
||||
{
|
||||
struct UnkStruct_Shared unk0;
|
||||
u8 unk18:1;
|
||||
struct UnionGnameUnamePair gname_uname;
|
||||
u8 active:1;
|
||||
};
|
||||
|
||||
struct UnkStruct_x20
|
||||
{
|
||||
struct UnkStruct_Shared unk;
|
||||
struct UnionGnameUnamePair gname_uname;
|
||||
u16 field_18;
|
||||
u8 field_1A_0:2;
|
||||
u8 field_1A_1:1;
|
||||
u8 groupScheduledAnim:2;
|
||||
bool8 field_1A_1:1;
|
||||
u8 field_1B;
|
||||
u8 field_1D;
|
||||
u8 field_1E;
|
||||
u8 field_1F;
|
||||
u32 field_1C; // unused
|
||||
};
|
||||
|
||||
// These arrays are dynamically allocated but must be
|
||||
@@ -51,17 +57,17 @@ struct UnkStruct_Leader
|
||||
struct UnkStruct_Main0 * field_8;
|
||||
u8 state;
|
||||
u8 textState;
|
||||
u8 field_E;
|
||||
u8 delayTimerAfterOk;
|
||||
u8 listWindowId;
|
||||
u8 field_10;
|
||||
u8 field_11;
|
||||
u8 bButtonCancelWindowId;
|
||||
u8 nPlayerModeWindowId;
|
||||
u8 listTaskId;
|
||||
u8 field_13;
|
||||
u8 field_14;
|
||||
u8 playerCount;
|
||||
u8 messageWindowId;
|
||||
u8 field_15;
|
||||
u8 field_16;
|
||||
u8 field_17;
|
||||
u8 field_18;
|
||||
u8 listenTaskId;
|
||||
u8 activity;
|
||||
u8 field_19;
|
||||
u16 field_1A;
|
||||
};
|
||||
@@ -72,18 +78,18 @@ struct UnkStruct_Group
|
||||
struct UnkStruct_Main4 * field_4;
|
||||
u8 state;
|
||||
u8 textState;
|
||||
u8 field_A;
|
||||
u8 field_A; // unused
|
||||
u8 listWindowId;
|
||||
u8 field_C;
|
||||
u8 field_D;
|
||||
u8 bButtonCancelWindowId;
|
||||
u8 playerNameAndIdWindowId;
|
||||
u8 listTaskId;
|
||||
u8 field_F;
|
||||
u8 leaderId;
|
||||
u8 field_10;
|
||||
u8 field_11;
|
||||
u8 field_12;
|
||||
u8 field_13;
|
||||
u8 field_14;
|
||||
u8 field_15;
|
||||
u8 listenTaskId;
|
||||
u8 cardOrNews;
|
||||
u8 field_13; // referenced but never set
|
||||
u8 refreshTimer;
|
||||
u8 delayBeforePrint;
|
||||
};
|
||||
|
||||
struct UnionObj
|
||||
@@ -109,19 +115,21 @@ struct UnkStruct_URoom
|
||||
/* 0x018 */ u8 field_18;
|
||||
/* 0x019 */ u8 field_19;
|
||||
/* 0x01A */ u8 field_1A;
|
||||
/* 0x01B */ u8 field_1B;
|
||||
/* 0x01C */ u8 field_1C;
|
||||
/* 0x01D */ u8 field_1D;
|
||||
/* 0x01E */ u8 field_1E;
|
||||
/* 0x01B */ u8 topListMenuWindowId;
|
||||
/* 0x01C */ u8 topListMenuListMenuId;
|
||||
/* 0x01D */ u8 tradeBoardSelectWindowId;
|
||||
/* 0x01E */ u8 tradeBoardDetailsWindowId;
|
||||
/* 0x01F */ u8 field_1F;
|
||||
/* 0x020 */ u8 field_20;
|
||||
/* 0x021 */ u8 spriteIds[40];
|
||||
/* 0x049 */ u8 field_49;
|
||||
/* 0x04A */ u8 field_4A;
|
||||
/* 0x04C */ u16 field_4C[6];
|
||||
/* 0x058 */ u8 field_58[4][11];
|
||||
/* 0x084 */ u16 field_98;
|
||||
/* 0x086 */ u16 field_9A[3];
|
||||
/* 0x04A */ u8 tradeBoardListMenuId;
|
||||
|
||||
// For communication with potential link partners
|
||||
/* 0x04C */ u16 playerSendBuffer[6];
|
||||
/* 0x058 */ u8 activityRequestStrbufs[4][11];
|
||||
/* 0x084 */ u16 partnerYesNoResponse;
|
||||
/* 0x086 */ u16 recvActivityRequest[3]; // activity[, species, level]
|
||||
/* 0x08C */ struct UnionObj unionObjs[8];
|
||||
/* 0x0AC */ u8 trainerCardStrbufs[12][15];
|
||||
/* 0x160 */ u8 field_174[48];
|
||||
@@ -150,10 +158,10 @@ struct UnionRoomTrade
|
||||
u32 personality;
|
||||
};
|
||||
|
||||
extern struct GFtgtGnameSub gUnknown_203B064;
|
||||
extern struct GFtgtGnameSub gPartnerTgtGnameSub;
|
||||
extern u16 gUnionRoomOfferedSpecies;
|
||||
extern u8 gUnionRoomRequestedMonType;
|
||||
|
||||
void sub_81173C0(u16 battleFlags);
|
||||
void StartUnionRoomBattle(u16 battleFlags);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_H
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
#ifndef GUARD_UNION_ROOM_BATTLE_H
|
||||
#define GUARD_UNION_ROOM_BATTLE_H
|
||||
|
||||
void CB2_UnionRoomBattle(void);
|
||||
|
||||
#endif //GUARD_UNION_ROOM_BATTLE_H
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
extern const u8 gUnknown_84571AC[];
|
||||
extern const u8 gUnionRoomActivity_Blank[];
|
||||
extern const u8 gUnknown_84571B0[];
|
||||
extern const u8 gUnknown_84571B4[];
|
||||
extern const u8 gUnknown_84571B8[];
|
||||
@@ -31,8 +31,8 @@ extern const u8 gUnknown_84577BC[];
|
||||
extern const u8 gUnknown_84577F8[];
|
||||
extern const u8 *const gUnknown_8457838[];
|
||||
extern const u8 gUnknown_84578BC[];
|
||||
extern const u8 *const gUnknown_8457A34[];
|
||||
extern const u8 *const gUnknown_8457B04[][2];
|
||||
extern const u8 *const gURText_PleaseWaitMsgs[];
|
||||
extern const u8 *const gURText_FriendPromptsForActivity[][2];
|
||||
extern const u8 *const gUnknown_8457BCC[];
|
||||
extern const u8 *const gUnknown_8457C20[];
|
||||
extern const u8 gUnknown_8457C48[];
|
||||
@@ -46,7 +46,7 @@ extern const u8 gUnknown_8457E44[];
|
||||
extern const u8 gUnknown_8457E60[];
|
||||
extern const u8 *const gUnknown_8457F80[][2];
|
||||
extern const u8 gUnknown_8457F90[];
|
||||
extern const u8 *const gUnknown_84580F4[][4];
|
||||
extern const u8 *const gResponseToURoomActivityInviteStringPtrs[][4];
|
||||
extern const u8 *const gUnknown_8458230[][2][3];
|
||||
extern const u8 *const gUnknown_8458314[];
|
||||
extern const u8 *const gUnknown_84583B4[];
|
||||
@@ -63,7 +63,7 @@ extern const u8 *const gUnknown_8458A78[2][4];
|
||||
extern const u8 gUnknown_8458A98[];
|
||||
extern const u8 gUnknown_8458AB8[];
|
||||
extern const u8 gUnknown_8458B44[];
|
||||
extern const u8 gUnknown_8458CD4[];
|
||||
extern const u8 gURText_PleaseChooseTypeOfMon[];
|
||||
extern const u8 gUnknown_8458D1C[];
|
||||
extern const u8 gUnknown_8458D54[];
|
||||
extern const u8 gUnknown_8458D78[];
|
||||
@@ -75,7 +75,7 @@ extern const u8 gUnknown_8458E70[];
|
||||
extern const u8 gUnknown_8458ED0[];
|
||||
extern const u8 gUnknown_8458F04[];
|
||||
extern const u8 gUnknown_8458F9C[];
|
||||
extern const u8 gUnknown_8458FBC[];
|
||||
extern const u8 gText_EggTrade[];
|
||||
extern const u8 gUnknown_8458FC8[];
|
||||
extern const u8 gUnknown_8458FE4[];
|
||||
extern const u8 gUnknown_84591DC[];
|
||||
@@ -91,20 +91,20 @@ extern const u8 gUnknown_8459360[];
|
||||
extern const u8 gUnknown_8459368[];
|
||||
extern const u8 gUnknown_8459370[];
|
||||
extern const u8 gUnknown_8459378[];
|
||||
extern const u8 gUnknown_8459394[];
|
||||
extern const u8 gUnknown_84593A4[];
|
||||
extern const u8 gUnknown_84593B4[];
|
||||
extern const u8 gUnknown_84593C4[];
|
||||
extern const u8 gUnknown_84593D4[];
|
||||
extern const u8 gUnknown_84593E4[];
|
||||
extern const u8 gUnknown_84593F4[];
|
||||
extern const u8 gUnknown_84593DC[];
|
||||
extern const u8 gUnknown_8459400[];
|
||||
extern const u8 gUnknown_8459410[];
|
||||
extern const u8 gUnknown_845941C[];
|
||||
extern const u8 gUnknown_845942C[];
|
||||
extern const u8 gUnknown_8459434[];
|
||||
extern const u8 gUnknown_8459440[];
|
||||
extern const u8 gUnionRoomActivity_SingleBattle[];
|
||||
extern const u8 gUnionRoomActivity_DoubleBattle[];
|
||||
extern const u8 gUnionRoomActivity_MultiBattle[];
|
||||
extern const u8 gUnionRoomActivity_PokemonTrades[];
|
||||
extern const u8 gUnionRoomActivity_Chat[];
|
||||
extern const u8 gUnionRoomActivity_WonderCards[];
|
||||
extern const u8 gunionRoomActivity_WonderNews[];
|
||||
extern const u8 gUnionRoomActivity_Cards[];
|
||||
extern const u8 gUnionRoomActivity_PokemonJump[];
|
||||
extern const u8 gUnionRoomActivity_BerryCrush[];
|
||||
extern const u8 gUnionRoomActivity_BerryPicking[];
|
||||
extern const u8 gUnionRoomActivity_Search[];
|
||||
extern const u8 gUnionRoomActivity_SpinTradeJP[];
|
||||
extern const u8 gUnionRoomActivity_ItemTradeJP[];
|
||||
extern const u8 *const gUnknown_84594B0[];
|
||||
extern const u8 gUnknown_84594C4[];
|
||||
extern const u8 gUnknown_8459504[];
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
#ifndef GUARD_UNK_810C3A4_H
|
||||
#define GUARD_UNK_810C3A4_H
|
||||
|
||||
#define GET_VS_SEEKER_COUNTER_0() (gSaveBlock1Ptr->trainerRematch.stepCounter & 0xFF)
|
||||
#define GET_VS_SEEKER_COUNTER_1() (gSaveBlock1Ptr->trainerRematch.stepCounter >> 8)
|
||||
#define SET_VS_SEEKER_COUNTER_0(x) ({\
|
||||
gSaveBlock1Ptr->trainerRematch.stepCounter &= 0xFF00;\
|
||||
gSaveBlock1Ptr->trainerRematch.stepCounter |= (x);\
|
||||
})
|
||||
#define SET_VS_SEEKER_COUNTER_1(x) ({\
|
||||
gSaveBlock1Ptr->trainerRematch.stepCounter &= 0x00FF;\
|
||||
gSaveBlock1Ptr->trainerRematch.stepCounter |= ((x) << 8);\
|
||||
})
|
||||
#define INC_VS_SEEKER_COUNTER_0() ({\
|
||||
u8 x = GET_VS_SEEKER_COUNTER_0();\
|
||||
if (x < 100) gSaveBlock1Ptr->trainerRematch.stepCounter++;\
|
||||
})
|
||||
#define INC_VS_SEEKER_COUNTER_1() ({\
|
||||
u8 x = GET_VS_SEEKER_COUNTER_1();\
|
||||
if (x < 100) {x++; SET_VS_SEEKER_COUNTER_1(x);}\
|
||||
})
|
||||
|
||||
void sub_810C604(void);
|
||||
void sub_810C640(void);
|
||||
|
||||
#endif //GUARD_UNK_810C3A4_H
|
||||
@@ -1,24 +0,0 @@
|
||||
#ifndef GUARD_UNK_815C980_H
|
||||
#define GUARD_UNK_815C980_H
|
||||
|
||||
struct UnkStruct3
|
||||
{
|
||||
u8 field_0_0:2;
|
||||
u8 shape:2;
|
||||
u8 size:2;
|
||||
u8 priority:2;
|
||||
u8 field_1;
|
||||
u8 xDelta;
|
||||
s16 x;
|
||||
s16 y;
|
||||
const struct SpriteSheet *spriteSheet;
|
||||
const struct SpritePalette *spritePal;
|
||||
};
|
||||
|
||||
void sub_815C9F4(void);
|
||||
void sub_815D108(u32 id);
|
||||
void sub_815D1A8(u32 id, bool32 arg1);
|
||||
bool32 sub_815CA40(u32 id, s32 arg1, const struct UnkStruct3 *arg2);
|
||||
void sub_815CD70(u32 id, s32 arg1);
|
||||
|
||||
#endif //GUARD_UNK_815C980_H
|
||||
@@ -1,11 +0,0 @@
|
||||
#ifndef GUARD_UNK_815C27C_H
|
||||
#define GUARD_UNK_815C27C_H
|
||||
|
||||
void EReaderHelper_SerialCallback(void);
|
||||
void EReaderHelper_Timer3Callback(void);
|
||||
void EReaderHelper_SaveRegsState(void);
|
||||
void EReaderHelper_ClearsSendRecvMgr(void);
|
||||
void EReaderHelper_RestoreRegsState(void);
|
||||
u16 EReaderHandleTransfer(u8, size_t, const void *, void *);
|
||||
|
||||
#endif //GUARD_UNK_815C27C_H
|
||||
@@ -3,6 +3,9 @@
|
||||
|
||||
#include "global.h"
|
||||
|
||||
void sub_810C604(void);
|
||||
void sub_810C640(void);
|
||||
|
||||
void Task_VsSeeker_0(u8 taskId);
|
||||
void sub_810CB90(void);
|
||||
void sub_810CDE8(void);
|
||||
|
||||
+10
-8
@@ -226,7 +226,7 @@ SECTIONS {
|
||||
src/map_preview_screen.o(.text);
|
||||
src/link_rfu_2.o(.text);
|
||||
src/link_rfu_3.o(.text);
|
||||
src/link_rfu.o(.text);
|
||||
src/AgbRfu_LinkManager.o(.text);
|
||||
asm/easy_chat_2.o(.text);
|
||||
src/pokedex_screen.o(.text);
|
||||
asm/pokedex_screen.o(.text);
|
||||
@@ -270,7 +270,8 @@ SECTIONS {
|
||||
src/mevent_server_helpers.o(.text);
|
||||
src/mevent_client.o(.text);
|
||||
src/mevent_server.o(.text);
|
||||
src/mevent_8145654.o(.text);
|
||||
src/mevent_show_card.o(.text);
|
||||
src/mevent_show_news.o(.text);
|
||||
src/menews_jisan.o(.text);
|
||||
src/seagallop.o(.text);
|
||||
asm/pokemon_jump.o(.text);
|
||||
@@ -289,13 +290,13 @@ SECTIONS {
|
||||
asm/dodrio_berry_picking_2.o(.text);
|
||||
src/teachy_tv.o(.text);
|
||||
src/ereader_helpers.o(.text);
|
||||
src/unk_815C980.o(.text);
|
||||
src/digit_obj_util.o(.text);
|
||||
src/ss_anne.o(.text);
|
||||
src/cereader_tool.o(.text);
|
||||
src/renewable_hidden_items.o(.text);
|
||||
src/trainer_tower.o(.text);
|
||||
src/berry_powder.o(.text);
|
||||
src/unk_815F138.o(.text);
|
||||
src/minigame_countdown.o(.text);
|
||||
src/berry_fix_program.o(.text);
|
||||
} =0
|
||||
|
||||
@@ -322,7 +323,7 @@ SECTIONS {
|
||||
src/agb_flash_mx.o(.text);
|
||||
src/agb_flash_le.o(.text);
|
||||
src/librfu_stwi.o(.text);
|
||||
asm/librfu_intr.o(.text);
|
||||
src/librfu_intr.o(.text);
|
||||
src/librfu_rfu.o(.text);
|
||||
src/librfu_sio32id.o(.text);
|
||||
src/isagbprn.o(.text);
|
||||
@@ -558,7 +559,8 @@ SECTIONS {
|
||||
src/mevent_server_helpers.o(.rodata);
|
||||
src/mevent_client.o(.rodata);
|
||||
src/mevent_server.o(.rodata);
|
||||
src/mevent_8145654.o(.rodata);
|
||||
src/mevent_show_card.o(.rodata);
|
||||
src/mevent_show_news.o(.rodata);
|
||||
src/mevent_scripts.o(.rodata);
|
||||
src/menews_jisan.o(.rodata);
|
||||
src/menews_jisan.o(.rodata.str1.4);
|
||||
@@ -573,13 +575,13 @@ SECTIONS {
|
||||
src/dodrio_berry_picking.o(.rodata);
|
||||
src/battle_controller_pokedude.o(.rodata);
|
||||
src/teachy_tv.o(.rodata);
|
||||
src/unk_815C980.o(.rodata);
|
||||
src/digit_obj_util.o(.rodata);
|
||||
data/data_8479668.o(.rodata);
|
||||
src/ss_anne.o(.rodata);
|
||||
src/cereader_tool.o(.rodata);
|
||||
src/renewable_hidden_items.o(.rodata);
|
||||
src/trainer_tower.o(.rodata);
|
||||
src/unk_815F138.o(.rodata);
|
||||
src/minigame_countdown.o(.rodata);
|
||||
src/berry_fix_program.o(.rodata);
|
||||
data/data_8479668.o(.rodata.after_trainer_tower);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -831,9 +831,9 @@ void sub_802F6A8(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (gWirelessCommType == 0)
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
else
|
||||
sub_800AB9C();
|
||||
PrepareSendLinkCmd2FFE_or_RfuCmd6600();
|
||||
gBattlerControllerFuncs[gActiveBattler] = sub_802F610;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -35,7 +35,7 @@ void HandleLinkBattleSetup(void)
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
sub_800B1F4();
|
||||
SetWirelessCommType1();
|
||||
if (!gReceivedRemoteLinkPlayers)
|
||||
OpenLink();
|
||||
CreateTask(sub_8081A90, 0);
|
||||
@@ -491,7 +491,7 @@ void sub_800DD28(void)
|
||||
|
||||
if (gReceivedRemoteLinkPlayers && (gBattleTypeFlags & BATTLE_TYPE_20) && (gLinkPlayers[0].linkType == 0x2211))
|
||||
{
|
||||
sub_80FBB4C();
|
||||
LinkRfu_DestroyIdleTask();
|
||||
for (i = 0; i < GetLinkPlayerCount(); ++i)
|
||||
{
|
||||
if (GetBlockReceivedStatus() & gBitTable[i])
|
||||
|
||||
+2
-2
@@ -1152,9 +1152,9 @@ static void CB2_PreInitMultiBattle(void)
|
||||
{
|
||||
++gBattleCommunication[MULTIUSE_STATE];
|
||||
if (gWirelessCommType)
|
||||
sub_800AB9C();
|
||||
PrepareSendLinkCmd2FFE_or_RfuCmd6600();
|
||||
else
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
}
|
||||
break;
|
||||
case 3:
|
||||
|
||||
@@ -0,0 +1,449 @@
|
||||
#include "global.h"
|
||||
#include "malloc.h"
|
||||
#include "decompress.h"
|
||||
#include "digit_obj_util.h"
|
||||
#include "main.h"
|
||||
#include "battle.h"
|
||||
|
||||
struct DigitPrinterAlloc
|
||||
{
|
||||
u32 count;
|
||||
struct DigitPrinter
|
||||
{
|
||||
bool8 isActive;
|
||||
u8 firstOamId;
|
||||
u8 strConvMode;
|
||||
u8 oamCount;
|
||||
u8 palTagIndex;
|
||||
u8 size;
|
||||
u8 shape;
|
||||
u8 priority;
|
||||
u8 xDelta;
|
||||
u8 tilesPerImage;
|
||||
u16 tileStart;
|
||||
s16 x;
|
||||
s16 y;
|
||||
u16 tileTag;
|
||||
u16 palTag;
|
||||
u32 pow10;
|
||||
s32 lastPrinted;
|
||||
} *array;
|
||||
};
|
||||
|
||||
// this file's functions
|
||||
static u8 GetFirstOamId(u8 oamCount);
|
||||
static void CopyWorkToOam(struct DigitPrinter *objWork);
|
||||
static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign);
|
||||
static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign);
|
||||
static void DrawNumObjsMinusInBack(struct DigitPrinter *objWork, s32 num, bool32 sign);
|
||||
static bool32 SharesTileWithAnyActive(u32 id);
|
||||
static bool32 SharesPalWithAnyActive(u32 id);
|
||||
static u8 GetTilesPerImage(u32 shape, u32 size);
|
||||
|
||||
// ewram
|
||||
static EWRAM_DATA struct DigitPrinterAlloc *sOamWork = {0};
|
||||
|
||||
// const rom data
|
||||
static const u8 sTilesPerImage[4][4] =
|
||||
{
|
||||
[ST_OAM_SQUARE] = {
|
||||
[ST_OAM_SIZE_0] = 0x01, // SPRITE_SIZE_8x8
|
||||
[ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_16x16
|
||||
[ST_OAM_SIZE_2] = 0x10, // SPRITE_SIZE_32x32
|
||||
[ST_OAM_SIZE_3] = 0x40 // SPRITE_SIZE_64x64
|
||||
},
|
||||
[ST_OAM_H_RECTANGLE] = {
|
||||
[ST_OAM_SIZE_0] = 0x02, // SPRITE_SIZE_16x8
|
||||
[ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_32x8
|
||||
[ST_OAM_SIZE_2] = 0x08, // SPRITE_SIZE_32x16
|
||||
[ST_OAM_SIZE_3] = 0x20 // SPRITE_SIZE_64x32
|
||||
},
|
||||
[ST_OAM_V_RECTANGLE] = {
|
||||
[ST_OAM_SIZE_0] = 0x02, // SPRITE_SIZE_8x16
|
||||
[ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_8x32
|
||||
[ST_OAM_SIZE_2] = 0x08, // SPRITE_SIZE_16x32
|
||||
[ST_OAM_SIZE_3] = 0x20 // SPRITE_SIZE_32x64
|
||||
}
|
||||
};
|
||||
|
||||
// code
|
||||
bool32 DigitObjUtil_Init(u32 count)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
if (sOamWork != NULL)
|
||||
DigitObjUtil_Teardown();
|
||||
|
||||
sOamWork = Alloc(sizeof(*sOamWork));
|
||||
if (sOamWork == NULL)
|
||||
return FALSE;
|
||||
|
||||
sOamWork->array = Alloc(sizeof(struct DigitPrinter) * count);
|
||||
if (sOamWork->array == NULL)
|
||||
{
|
||||
Free(sOamWork);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
sOamWork->count = count;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
sOamWork->array[i].isActive = FALSE;
|
||||
sOamWork->array[i].firstOamId = 0xFF;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DigitObjUtil_Teardown(void)
|
||||
{
|
||||
if (sOamWork != NULL)
|
||||
{
|
||||
if (sOamWork->array != NULL)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < sOamWork->count; i++)
|
||||
DigitObjUtil_DeletePrinter(i);
|
||||
|
||||
Free(sOamWork->array);
|
||||
}
|
||||
|
||||
FREE_AND_SET_NULL(sOamWork);
|
||||
}
|
||||
}
|
||||
|
||||
bool32 DigitObjUtil_CreatePrinter(u32 id, s32 num, const struct DigitObjUtilTemplate *template)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
if (sOamWork == NULL)
|
||||
return FALSE;
|
||||
if (sOamWork->array[id].isActive)
|
||||
return FALSE;
|
||||
|
||||
sOamWork->array[id].firstOamId = GetFirstOamId(template->oamCount);
|
||||
if (sOamWork->array[id].firstOamId == 0xFF)
|
||||
return FALSE;
|
||||
|
||||
sOamWork->array[id].tileStart = GetSpriteTileStartByTag(template->spriteSheet->tag);
|
||||
if (sOamWork->array[id].tileStart == 0xFFFF)
|
||||
{
|
||||
if (template->spriteSheet->size != 0)
|
||||
{
|
||||
sOamWork->array[id].tileStart = LoadSpriteSheet(template->spriteSheet);
|
||||
}
|
||||
else
|
||||
{
|
||||
struct CompressedSpriteSheet compObjectPic;
|
||||
|
||||
compObjectPic = *(struct CompressedSpriteSheet*)(template->spriteSheet);
|
||||
compObjectPic.size = GetDecompressedDataSize(template->spriteSheet->data);
|
||||
sOamWork->array[id].tileStart = LoadCompressedSpriteSheet(&compObjectPic);
|
||||
}
|
||||
|
||||
if (sOamWork->array[id].tileStart == 0xFFFF)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
sOamWork->array[id].palTagIndex = IndexOfSpritePaletteTag(template->spritePal->tag);
|
||||
if (sOamWork->array[id].palTagIndex == 0xFF)
|
||||
sOamWork->array[id].palTagIndex = LoadSpritePalette(template->spritePal);
|
||||
|
||||
sOamWork->array[id].strConvMode = template->strConvMode;
|
||||
sOamWork->array[id].oamCount = template->oamCount;
|
||||
sOamWork->array[id].x = template->x;
|
||||
sOamWork->array[id].y = template->y;
|
||||
sOamWork->array[id].shape = template->shape;
|
||||
sOamWork->array[id].size = template->size;
|
||||
sOamWork->array[id].priority = template->priority;
|
||||
sOamWork->array[id].xDelta = template->xDelta;
|
||||
sOamWork->array[id].tilesPerImage = GetTilesPerImage(template->shape, template->size);
|
||||
sOamWork->array[id].tileTag = template->spriteSheet->tag;
|
||||
sOamWork->array[id].palTag = template->spritePal->tag;
|
||||
sOamWork->array[id].isActive = TRUE;
|
||||
|
||||
// Decimal left shift
|
||||
sOamWork->array[id].pow10 = 1;
|
||||
for (i = 1; i < template->oamCount; i++)
|
||||
sOamWork->array[id].pow10 *= 10;
|
||||
|
||||
CopyWorkToOam(&sOamWork->array[id]);
|
||||
DigitObjUtil_PrintNumOn(id, num);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void CopyWorkToOam(struct DigitPrinter *objWork)
|
||||
{
|
||||
u32 i;
|
||||
u32 oamId = objWork->firstOamId;
|
||||
u32 x = objWork->x;
|
||||
u32 oamCount = objWork->oamCount + 1;
|
||||
|
||||
CpuFill16(0, &gMain.oamBuffer[oamId], sizeof(struct OamData) * oamCount);
|
||||
for (i = 0, oamId = objWork->firstOamId; i < oamCount; i++, oamId++)
|
||||
{
|
||||
gMain.oamBuffer[oamId].y = objWork->y;
|
||||
gMain.oamBuffer[oamId].x = x;
|
||||
gMain.oamBuffer[oamId].shape = objWork->shape;
|
||||
gMain.oamBuffer[oamId].size = objWork->size;
|
||||
gMain.oamBuffer[oamId].tileNum = objWork->tileStart;
|
||||
gMain.oamBuffer[oamId].priority = objWork->priority;
|
||||
gMain.oamBuffer[oamId].paletteNum = objWork->palTagIndex;
|
||||
|
||||
x += objWork->xDelta;
|
||||
}
|
||||
|
||||
oamId--;
|
||||
gMain.oamBuffer[oamId].x = objWork->x - objWork->xDelta;
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
|
||||
gMain.oamBuffer[oamId].tileNum = objWork->tileStart + (objWork->tilesPerImage * 10);
|
||||
}
|
||||
|
||||
void DigitObjUtil_PrintNumOn(u32 id, s32 num)
|
||||
{
|
||||
bool32 sign;
|
||||
|
||||
if (sOamWork == NULL)
|
||||
return;
|
||||
if (!sOamWork->array[id].isActive)
|
||||
return;
|
||||
|
||||
sOamWork->array[id].lastPrinted = num;
|
||||
if (num < 0)
|
||||
{
|
||||
sign = TRUE;
|
||||
num *= -1;
|
||||
}
|
||||
else
|
||||
{
|
||||
sign = FALSE;
|
||||
}
|
||||
|
||||
switch (sOamWork->array[id].strConvMode)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
DrawNumObjsLeadingZeros(&sOamWork->array[id], num, sign);
|
||||
break;
|
||||
case 1:
|
||||
DrawNumObjsMinusInFront(&sOamWork->array[id], num, sign);
|
||||
break;
|
||||
case 2:
|
||||
DrawNumObjsMinusInBack(&sOamWork->array[id], num, sign);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void DrawNumObjsLeadingZeros(struct DigitPrinter *objWork, s32 num, bool32 sign)
|
||||
{
|
||||
u32 pow10 = objWork->pow10;
|
||||
u32 oamId = objWork->firstOamId;
|
||||
|
||||
while (pow10 != 0)
|
||||
{
|
||||
u32 digit = num / pow10;
|
||||
num -= (digit * pow10);
|
||||
pow10 /= 10;
|
||||
|
||||
gMain.oamBuffer[oamId].tileNum = (digit * objWork->tilesPerImage) + objWork->tileStart;
|
||||
oamId++;
|
||||
}
|
||||
|
||||
if (sign)
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
|
||||
else
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
|
||||
}
|
||||
|
||||
static void DrawNumObjsMinusInFront(struct DigitPrinter *objWork, s32 num, bool32 sign)
|
||||
{
|
||||
u32 pow10 = objWork->pow10;
|
||||
static int oamId;
|
||||
static int curDigit;
|
||||
static int firstDigit;
|
||||
|
||||
oamId = objWork->firstOamId;
|
||||
curDigit = 0;
|
||||
firstDigit = -1;
|
||||
|
||||
while (pow10 != 0)
|
||||
{
|
||||
u32 digit = num / pow10;
|
||||
num -= (digit * pow10);
|
||||
pow10 /= 10;
|
||||
|
||||
if (digit != 0 || firstDigit != -1 || pow10 == 0)
|
||||
{
|
||||
gMain.oamBuffer[oamId].tileNum = (digit * objWork->tilesPerImage) + objWork->tileStart;
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
|
||||
|
||||
if (firstDigit == -1)
|
||||
firstDigit = curDigit;
|
||||
}
|
||||
else
|
||||
{
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
|
||||
}
|
||||
|
||||
oamId++;
|
||||
curDigit++;
|
||||
}
|
||||
|
||||
if (sign)
|
||||
{
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
|
||||
gMain.oamBuffer[oamId].x = objWork->x + ((firstDigit - 1) * objWork->xDelta);
|
||||
}
|
||||
else
|
||||
{
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
|
||||
}
|
||||
}
|
||||
|
||||
static void DrawNumObjsMinusInBack(struct DigitPrinter *objWork, s32 num, bool32 sign)
|
||||
{
|
||||
u32 pow10 = objWork->pow10;
|
||||
u32 oamId = objWork->firstOamId;
|
||||
u32 printingDigits = 0;
|
||||
s32 nsprites = 0;
|
||||
|
||||
while (pow10 != 0)
|
||||
{
|
||||
u32 digit = num / pow10;
|
||||
num -= (digit * pow10);
|
||||
pow10 /= 10;
|
||||
|
||||
if (digit != 0 || printingDigits != 0 || pow10 == 0)
|
||||
{
|
||||
printingDigits = 1;
|
||||
gMain.oamBuffer[oamId].tileNum = (digit * objWork->tilesPerImage) + objWork->tileStart;
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
|
||||
|
||||
oamId++;
|
||||
nsprites++;
|
||||
}
|
||||
}
|
||||
|
||||
while (nsprites < objWork->oamCount)
|
||||
{
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
|
||||
oamId++;
|
||||
nsprites++;
|
||||
}
|
||||
|
||||
if (sign)
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
|
||||
else
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
|
||||
}
|
||||
|
||||
void DigitObjUtil_DeletePrinter(u32 id)
|
||||
{
|
||||
s32 oamId, oamCount, i;
|
||||
|
||||
if (sOamWork == NULL)
|
||||
return;
|
||||
if (!sOamWork->array[id].isActive)
|
||||
return;
|
||||
|
||||
oamCount = sOamWork->array[id].oamCount + 1;
|
||||
oamId = sOamWork->array[id].firstOamId;
|
||||
|
||||
for (i = 0; i < oamCount; i++, oamId++)
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
|
||||
|
||||
if (!SharesTileWithAnyActive(id))
|
||||
FreeSpriteTilesByTag(sOamWork->array[id].tileTag);
|
||||
if (!SharesPalWithAnyActive(id))
|
||||
FreeSpritePaletteByTag(sOamWork->array[id].palTag);
|
||||
|
||||
sOamWork->array[id].isActive = FALSE;
|
||||
}
|
||||
|
||||
void DigitObjUtil_HideOrShow(u32 id, bool32 hide)
|
||||
{
|
||||
s32 oamId, oamCount, i;
|
||||
|
||||
if (sOamWork == NULL)
|
||||
return;
|
||||
if (!sOamWork->array[id].isActive)
|
||||
return;
|
||||
|
||||
oamCount = sOamWork->array[id].oamCount + 1;
|
||||
oamId = sOamWork->array[id].firstOamId;
|
||||
if (hide)
|
||||
{
|
||||
for (i = 0; i < oamCount; i++, oamId++)
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_ERASE;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < oamCount; i++, oamId++)
|
||||
gMain.oamBuffer[oamId].affineMode = ST_OAM_AFFINE_OFF;
|
||||
|
||||
DigitObjUtil_PrintNumOn(id, sOamWork->array[id].lastPrinted);
|
||||
}
|
||||
}
|
||||
|
||||
static u8 GetFirstOamId(u8 oamCount)
|
||||
{
|
||||
u32 i;
|
||||
u16 firstOamId = 64;
|
||||
|
||||
for (i = 0; i < sOamWork->count; i++)
|
||||
{
|
||||
if (!sOamWork->array[i].isActive)
|
||||
{
|
||||
if (sOamWork->array[i].firstOamId != 0xFF && sOamWork->array[i].oamCount <= oamCount)
|
||||
return sOamWork->array[i].firstOamId;
|
||||
}
|
||||
else
|
||||
{
|
||||
firstOamId += 1 + sOamWork->array[i].oamCount;
|
||||
}
|
||||
}
|
||||
|
||||
if (firstOamId + oamCount + 1 > 128)
|
||||
return 0xFF;
|
||||
else
|
||||
return firstOamId;
|
||||
}
|
||||
|
||||
static bool32 SharesTileWithAnyActive(u32 id)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < sOamWork->count; i++)
|
||||
{
|
||||
if (sOamWork->array[i].isActive && i != id
|
||||
&& sOamWork->array[i].tileTag == sOamWork->array[id].tileTag)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 SharesPalWithAnyActive(u32 id)
|
||||
{
|
||||
u32 i;
|
||||
|
||||
for (i = 0; i < sOamWork->count; i++)
|
||||
{
|
||||
if (sOamWork->array[i].isActive && i != id
|
||||
&& sOamWork->array[i].palTag == sOamWork->array[id].palTag)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static u8 GetTilesPerImage(u32 shape, u32 size)
|
||||
{
|
||||
return sTilesPerImage[shape][size];
|
||||
}
|
||||
@@ -7,7 +7,7 @@ void sub_815A5BC(s32 a0)
|
||||
struct Padded_U8 data[2];
|
||||
data[0].value = 1;
|
||||
data[1].value = a0;
|
||||
sub_80F9E2C(data);
|
||||
RfuPrepareSend0x2f00(data);
|
||||
}
|
||||
|
||||
u8 sub_815A5E8(s32 a0)
|
||||
|
||||
@@ -2,16 +2,89 @@
|
||||
#include "text.h"
|
||||
#include "dynamic_placeholder_text_util.h"
|
||||
#include "string_util.h"
|
||||
#include "constants/object_events.h"
|
||||
|
||||
static EWRAM_DATA const u8 *sStringPointers[8] = {0};
|
||||
|
||||
static const u8 sTextColorTable[] =
|
||||
{
|
||||
0, 0, 0, 16, 17, 17, 17, 16, 16, 0, 0, 17, 1, 0, 17, 16,
|
||||
0, 16, 16, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,
|
||||
17, 1, 0, 0, 0, 16, 17, 0, 16, 16, 16, 0, 1, 0, 51, 51,
|
||||
51, 51, 51, 51, 51, 51, 35, 34, 34, 34, 34, 34, 34, 34, 34, 34,
|
||||
34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 50,
|
||||
// [LOW_NYBBLE / 2] = 0xXY, // HIGH_NYBBLE
|
||||
[OBJECT_EVENT_GFX_RED_NORMAL / 2] = 0x00, // OBJECT_EVENT_GFX_RED_BIKE
|
||||
[OBJECT_EVENT_GFX_RED_RUN / 2] = 0x00, // OBJECT_EVENT_GFX_RED_ITEM
|
||||
[OBJECT_EVENT_GFX_RED_FISH / 2] = 0x00, // OBJECT_EVENT_GFX_RED_ITEM_COPY
|
||||
[OBJECT_EVENT_GFX_RED_VS_SEEKER / 2] = 0x10, // OBJECT_EVENT_GFX_GREEN_NORMAL
|
||||
[OBJECT_EVENT_GFX_GREEN_BIKE / 2] = 0x11, // OBJECT_EVENT_GFX_GREEN_RUN
|
||||
[OBJECT_EVENT_GFX_GREEN_ITEM / 2] = 0x11, // OBJECT_EVENT_GFX_GREEN_FISH
|
||||
[OBJECT_EVENT_GFX_GREEN_ITEM_COPY / 2] = 0x11, // OBJECT_EVENT_GFX_GREEN_VS_SEEKER
|
||||
[OBJECT_EVENT_GFX_RS_BRENDAN / 2] = 0x10, // OBJECT_EVENT_GFX_RS_MAY
|
||||
[OBJECT_EVENT_GFX_LITTLE_BOY / 2] = 0x10, // OBJECT_EVENT_GFX_LITTLE_GIRL
|
||||
[OBJECT_EVENT_GFX_YOUNGSTER / 2] = 0x00, // OBJECT_EVENT_GFX_BOY
|
||||
[OBJECT_EVENT_GFX_BUG_CATCHER / 2] = 0x00, // OBJECT_EVENT_GFX_SITTING_BOY
|
||||
[OBJECT_EVENT_GFX_LASS / 2] = 0x11, // OBJECT_EVENT_GFX_WOMAN_1
|
||||
[OBJECT_EVENT_GFX_BATTLE_GIRL / 2] = 0x01, // OBJECT_EVENT_GFX_MAN
|
||||
[OBJECT_EVENT_GFX_ROCKER / 2] = 0x00, // OBJECT_EVENT_GFX_FAT_MAN
|
||||
[OBJECT_EVENT_GFX_WOMAN_2 / 2] = 0x11, // OBJECT_EVENT_GFX_BEAUTY
|
||||
[OBJECT_EVENT_GFX_BALDING_MAN / 2] = 0x10, // OBJECT_EVENT_GFX_WOMAN_3
|
||||
[OBJECT_EVENT_GFX_OLD_MAN_1 / 2] = 0x00, // OBJECT_EVENT_GFX_OLD_MAN_2
|
||||
[OBJECT_EVENT_GFX_OLD_MAN_LYING_DOWN / 2] = 0x10, // OBJECT_EVENT_GFX_OLD_WOMAN
|
||||
[OBJECT_EVENT_GFX_TUBER_M_1 / 2] = 0x10, // OBJECT_EVENT_GFX_TUBER_F
|
||||
[OBJECT_EVENT_GFX_TUBER_M_2 / 2] = 0x00, // OBJECT_EVENT_GFX_CAMPER
|
||||
[OBJECT_EVENT_GFX_PICNICKER / 2] = 0x01, // OBJECT_EVENT_GFX_COOLTRAINER_M
|
||||
[OBJECT_EVENT_GFX_COOLTRAINER_F / 2] = 0x01, // OBJECT_EVENT_GFX_SWIMMER_M_WATER
|
||||
[OBJECT_EVENT_GFX_SWIMMER_F_WATER / 2] = 0x01, // OBJECT_EVENT_GFX_SWIMMER_M_LAND
|
||||
[OBJECT_EVENT_GFX_SWIMMER_F_LAND / 2] = 0x01, // OBJECT_EVENT_GFX_WORKER_M
|
||||
[OBJECT_EVENT_GFX_WORKER_F / 2] = 0x01, // OBJECT_EVENT_GFX_ROCKET_M
|
||||
[OBJECT_EVENT_GFX_ROCKET_F / 2] = 0x01, // OBJECT_EVENT_GFX_GBA_KID
|
||||
[OBJECT_EVENT_GFX_SUPER_NERD / 2] = 0x00, // OBJECT_EVENT_GFX_BIKER
|
||||
[OBJECT_EVENT_GFX_BLACKBELT / 2] = 0x00, // OBJECT_EVENT_GFX_SCIENTIST
|
||||
[OBJECT_EVENT_GFX_HIKER / 2] = 0x00, // OBJECT_EVENT_GFX_FISHER
|
||||
[OBJECT_EVENT_GFX_CHANNELER / 2] = 0x01, // OBJECT_EVENT_GFX_CHEF
|
||||
[OBJECT_EVENT_GFX_POLICEMAN / 2] = 0x00, // OBJECT_EVENT_GFX_GENTLEMAN
|
||||
[OBJECT_EVENT_GFX_SAILOR / 2] = 0x00, // OBJECT_EVENT_GFX_CAPTAIN
|
||||
[OBJECT_EVENT_GFX_NURSE / 2] = 0x11, // OBJECT_EVENT_GFX_CABLE_CLUB_RECEPTIONIST
|
||||
[OBJECT_EVENT_GFX_UNION_ROOM_RECEPTIONIST / 2] = 0x01, // OBJECT_EVENT_GFX_UNUSED_MALE_RECEPTIONIST
|
||||
[OBJECT_EVENT_GFX_CLERK / 2] = 0x00, // OBJECT_EVENT_GFX_MG_DELIVERYMAN
|
||||
[OBJECT_EVENT_GFX_TRAINER_TOWER_DUDE / 2] = 0x00, // OBJECT_EVENT_GFX_PROF_OAK
|
||||
[OBJECT_EVENT_GFX_BLUE / 2] = 0x00, // OBJECT_EVENT_GFX_BILL
|
||||
[OBJECT_EVENT_GFX_LANCE / 2] = 0x10, // OBJECT_EVENT_GFX_AGATHA
|
||||
[OBJECT_EVENT_GFX_DAISY / 2] = 0x11, // OBJECT_EVENT_GFX_LORELEI
|
||||
[OBJECT_EVENT_GFX_MR_FUJI / 2] = 0x00, // OBJECT_EVENT_GFX_BRUNO
|
||||
[OBJECT_EVENT_GFX_BROCK / 2] = 0x10, // OBJECT_EVENT_GFX_MISTY
|
||||
[OBJECT_EVENT_GFX_LT_SURGE / 2] = 0x10, // OBJECT_EVENT_GFX_ERIKA
|
||||
[OBJECT_EVENT_GFX_KOGA / 2] = 0x10, // OBJECT_EVENT_GFX_SABRINA
|
||||
[OBJECT_EVENT_GFX_BLAINE / 2] = 0x00, // OBJECT_EVENT_GFX_GIOVANNI
|
||||
[OBJECT_EVENT_GFX_MOM / 2] = 0x01, // OBJECT_EVENT_GFX_CELIO
|
||||
[OBJECT_EVENT_GFX_TEACHY_TV_HOST / 2] = 0x00, // OBJECT_EVENT_GFX_GYM_GUY
|
||||
[OBJECT_EVENT_GFX_ITEM_BALL / 2] = 0x33, // OBJECT_EVENT_GFX_TOWN_MAP
|
||||
[OBJECT_EVENT_GFX_POKEDEX / 2] = 0x33, // OBJECT_EVENT_GFX_CUT_TREE
|
||||
[OBJECT_EVENT_GFX_ROCK_SMASH_ROCK / 2] = 0x33, // OBJECT_EVENT_GFX_STRENGTH_BOULDER
|
||||
[OBJECT_EVENT_GFX_FOSSIL / 2] = 0x33, // OBJECT_EVENT_GFX_RUBY
|
||||
[OBJECT_EVENT_GFX_SAPPHIRE / 2] = 0x33, // OBJECT_EVENT_GFX_OLD_AMBER
|
||||
[OBJECT_EVENT_GFX_GYM_SIGN / 2] = 0x33, // OBJECT_EVENT_GFX_SIGN
|
||||
[OBJECT_EVENT_GFX_TRAINER_TIPS / 2] = 0x33, // OBJECT_EVENT_GFX_CLIPBOARD
|
||||
[OBJECT_EVENT_GFX_METEORITE / 2] = 0x33, // OBJECT_EVENT_GFX_LAPRAS_DOLL
|
||||
[OBJECT_EVENT_GFX_SEAGALLOP / 2] = 0x23, // OBJECT_EVENT_GFX_SNORLAX
|
||||
[OBJECT_EVENT_GFX_SPEAROW / 2] = 0x22, // OBJECT_EVENT_GFX_CUBONE
|
||||
[OBJECT_EVENT_GFX_POLIWRATH / 2] = 0x22, // OBJECT_EVENT_GFX_CLEFAIRY
|
||||
[OBJECT_EVENT_GFX_PIDGEOT / 2] = 0x22, // OBJECT_EVENT_GFX_JIGGLYPUFF
|
||||
[OBJECT_EVENT_GFX_PIDGEY / 2] = 0x22, // OBJECT_EVENT_GFX_CHANSEY
|
||||
[OBJECT_EVENT_GFX_OMANYTE / 2] = 0x22, // OBJECT_EVENT_GFX_KANGASKHAN
|
||||
[OBJECT_EVENT_GFX_PIKACHU / 2] = 0x22, // OBJECT_EVENT_GFX_PSYDUCK
|
||||
[OBJECT_EVENT_GFX_NIDORAN_F / 2] = 0x22, // OBJECT_EVENT_GFX_NIDORAN_M
|
||||
[OBJECT_EVENT_GFX_NIDORINO / 2] = 0x22, // OBJECT_EVENT_GFX_MEOWTH
|
||||
[OBJECT_EVENT_GFX_SEEL / 2] = 0x22, // OBJECT_EVENT_GFX_VOLTORB
|
||||
[OBJECT_EVENT_GFX_SLOWPOKE / 2] = 0x22, // OBJECT_EVENT_GFX_SLOWBRO
|
||||
[OBJECT_EVENT_GFX_MACHOP / 2] = 0x22, // OBJECT_EVENT_GFX_WIGGLYTUFF
|
||||
[OBJECT_EVENT_GFX_DODUO / 2] = 0x22, // OBJECT_EVENT_GFX_FEAROW
|
||||
[OBJECT_EVENT_GFX_MACHOKE / 2] = 0x22, // OBJECT_EVENT_GFX_LAPRAS
|
||||
[OBJECT_EVENT_GFX_ZAPDOS / 2] = 0x22, // OBJECT_EVENT_GFX_MOLTRES
|
||||
[OBJECT_EVENT_GFX_ARTICUNO / 2] = 0x22, // OBJECT_EVENT_GFX_MEWTWO
|
||||
[OBJECT_EVENT_GFX_MEW / 2] = 0x22, // OBJECT_EVENT_GFX_ENTEI
|
||||
[OBJECT_EVENT_GFX_SUICUNE / 2] = 0x22, // OBJECT_EVENT_GFX_RAIKOU
|
||||
[OBJECT_EVENT_GFX_LUGIA / 2] = 0x22, // OBJECT_EVENT_GFX_HO_OH
|
||||
[OBJECT_EVENT_GFX_CELEBI / 2] = 0x22, // OBJECT_EVENT_GFX_KABUTO
|
||||
[OBJECT_EVENT_GFX_DEOXYS_D / 2] = 0x22, // OBJECT_EVENT_GFX_DEOXYS_A
|
||||
[OBJECT_EVENT_GFX_DEOXYS_N / 2] = 0x32, // OBJECT_EVENT_GFX_SS_ANNE
|
||||
};
|
||||
|
||||
void DynamicPlaceholderTextUtil_Reset(void)
|
||||
@@ -63,7 +136,7 @@ u8 GetColorFromTextColorTable(u16 graphicId)
|
||||
u32 test = graphicId >> 1;
|
||||
u32 shift = (graphicId & 1) << 2;
|
||||
|
||||
if (test > 0x4B)
|
||||
if (test >= NELEMS(sTextColorTable))
|
||||
return 3;
|
||||
else
|
||||
return (sTextColorTable[graphicId >> 1] >> shift) & 0xF;
|
||||
|
||||
+84
-75
@@ -1,25 +1,18 @@
|
||||
#include "global.h"
|
||||
#include "link.h"
|
||||
#include "unk_815c27c.h"
|
||||
|
||||
enum {
|
||||
EREADER_XFR_STATE_INIT,
|
||||
EREADER_XFR_STATE_HANDSHAKE,
|
||||
EREADER_XFR_STATE_START,
|
||||
EREADER_XFR_STATE_TRANSFER,
|
||||
};
|
||||
#include "ereader_helpers.h"
|
||||
|
||||
struct SendRecvMgr
|
||||
{
|
||||
u8 sendOrRecv;
|
||||
u8 state;
|
||||
u8 field_02;
|
||||
u8 field_03;
|
||||
u8 field_04;
|
||||
u32 * dataptr;
|
||||
int cursor;
|
||||
int size;
|
||||
u32 checksum;
|
||||
u8 master_slave; // 0: clock slave; 1: clock master
|
||||
u8 state; // EREADER_XFR_STATE_*
|
||||
u8 xferState; // EREADER_XFER_*
|
||||
u8 checksumResult; // EREADER_CHECKSUM_*
|
||||
u8 cancellationReason; // EREADER_CANCEL_*
|
||||
u32 * dataptr; // Payload source or destination
|
||||
int cursor; // Index of the next word
|
||||
int size; // Last word index
|
||||
u32 checksum; // Validation checksum
|
||||
};
|
||||
|
||||
static bool16 DetermineSendRecvState(u8);
|
||||
@@ -39,10 +32,9 @@ static u16 sSavedIme;
|
||||
static u16 sSavedIe;
|
||||
static u16 sSavedTm3Cnt;
|
||||
static u16 sSavedSioCnt;
|
||||
static u16 sSavedSioCnt;
|
||||
static u16 sSavedRCnt;
|
||||
|
||||
int EReader_Send(size_t r6, const void * r5)
|
||||
int EReader_Send(size_t size, const void * src)
|
||||
{
|
||||
int result;
|
||||
EReaderHelper_SaveRegsState();
|
||||
@@ -53,18 +45,18 @@ int EReader_Send(size_t r6, const void * r5)
|
||||
if (TEST_BUTTON(sJoyNew, B_BUTTON))
|
||||
gShouldAdvanceLinkState = 2;
|
||||
|
||||
sSendRecvStatus = EReaderHandleTransfer(1, r6, r5, NULL);
|
||||
if ((sSendRecvStatus & 0x13) == 0x10)
|
||||
sSendRecvStatus = EReaderHandleTransfer(1, size, src, NULL);
|
||||
if ((sSendRecvStatus & 0x13) == 0x10) // checksum OK and xfer off
|
||||
{
|
||||
result = 0;
|
||||
break;
|
||||
}
|
||||
else if (sSendRecvStatus & 8)
|
||||
else if (sSendRecvStatus & 8) // cancelled by player
|
||||
{
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
else if (sSendRecvStatus & 4)
|
||||
else if (sSendRecvStatus & 4) // timed out
|
||||
{
|
||||
result = 2;
|
||||
break;
|
||||
@@ -81,7 +73,7 @@ int EReader_Send(size_t r6, const void * r5)
|
||||
return result;
|
||||
}
|
||||
|
||||
int EReader_Recv(void * r5)
|
||||
int EReader_Recv(void * dest)
|
||||
{
|
||||
int result;
|
||||
EReaderHelper_SaveRegsState();
|
||||
@@ -92,18 +84,18 @@ int EReader_Recv(void * r5)
|
||||
if (TEST_BUTTON(sJoyNew, B_BUTTON))
|
||||
gShouldAdvanceLinkState = 2;
|
||||
|
||||
sSendRecvStatus = EReaderHandleTransfer(0, 0, NULL, r5);
|
||||
if ((sSendRecvStatus & 0x13) == 0x10)
|
||||
sSendRecvStatus = EReaderHandleTransfer(0, 0, NULL, dest);
|
||||
if ((sSendRecvStatus & 0x13) == 0x10) // checksum OK and xfer off
|
||||
{
|
||||
result = 0;
|
||||
break;
|
||||
}
|
||||
else if (sSendRecvStatus & 8)
|
||||
else if (sSendRecvStatus & 8) // cancelled by player
|
||||
{
|
||||
result = 1;
|
||||
break;
|
||||
}
|
||||
else if (sSendRecvStatus & 4)
|
||||
else if (sSendRecvStatus & 4) // timed out
|
||||
{
|
||||
result = 2;
|
||||
break;
|
||||
@@ -159,92 +151,98 @@ u16 EReaderHandleTransfer(u8 mode, size_t size, const void * data, void * recvBu
|
||||
{
|
||||
switch (sSendRecvMgr.state)
|
||||
{
|
||||
case 0:
|
||||
case EREADER_XFR_STATE_INIT:
|
||||
OpenSerialMulti();
|
||||
sSendRecvMgr.field_02 = 1;
|
||||
sSendRecvMgr.state = 1;
|
||||
sSendRecvMgr.xferState = EREADER_XFER_EXE;
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_HANDSHAKE;
|
||||
break;
|
||||
case 1:
|
||||
case EREADER_XFR_STATE_HANDSHAKE:
|
||||
if (DetermineSendRecvState(mode))
|
||||
EnableSio();
|
||||
if (gShouldAdvanceLinkState == 2)
|
||||
{
|
||||
sSendRecvMgr.field_04 = 2;
|
||||
sSendRecvMgr.state = 6;
|
||||
sSendRecvMgr.cancellationReason = EREADER_CANCEL_KEY;
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
|
||||
}
|
||||
// Progression is handled by the serial callback
|
||||
break;
|
||||
case 2:
|
||||
case EREADER_XFR_STATE_START:
|
||||
OpenSerial32();
|
||||
SetUpTransferManager(size, data, recvBuffer);
|
||||
sSendRecvMgr.state = 3;
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_TRANSFER;
|
||||
// fallthrough
|
||||
case 3:
|
||||
case EREADER_XFR_STATE_TRANSFER:
|
||||
if (gShouldAdvanceLinkState == 2)
|
||||
{
|
||||
sSendRecvMgr.field_04 = 2;
|
||||
sSendRecvMgr.state = 6;
|
||||
sSendRecvMgr.cancellationReason = EREADER_CANCEL_KEY;
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
sCounter1++;
|
||||
sCounter2++;
|
||||
if (sSendRecvMgr.sendOrRecv == 0 && sCounter2 > 60)
|
||||
if (sSendRecvMgr.master_slave == 0 && sCounter2 > 60)
|
||||
{
|
||||
sSendRecvMgr.field_04 = 1;
|
||||
sSendRecvMgr.state = 6;
|
||||
sSendRecvMgr.cancellationReason = EREADER_CANCEL_TIMEOUT;
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
|
||||
}
|
||||
if (sSendRecvMgr.field_02 != 2)
|
||||
if (sSendRecvMgr.xferState != EREADER_XFER_CHK)
|
||||
{
|
||||
if (sSendRecvMgr.sendOrRecv != 0 && sCounter1 > 2)
|
||||
if (sSendRecvMgr.master_slave != 0 && sCounter1 > 2)
|
||||
{
|
||||
EnableSio();
|
||||
sSendRecvMgr.field_02 = 2;
|
||||
sSendRecvMgr.xferState = EREADER_XFER_CHK;
|
||||
}
|
||||
else
|
||||
{
|
||||
EnableSio();
|
||||
sSendRecvMgr.field_02 = 2;
|
||||
sSendRecvMgr.xferState = EREADER_XFER_CHK;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Progression is handled by the serial callback
|
||||
break;
|
||||
case 4:
|
||||
case EREADER_XFR_STATE_TRANSFER_DONE:
|
||||
OpenSerialMulti();
|
||||
sSendRecvMgr.state = 5;
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_CHECKSUM;
|
||||
break;
|
||||
case 5:
|
||||
if (sSendRecvMgr.sendOrRecv == 1 && sCounter1 > 2)
|
||||
case EREADER_XFR_STATE_CHECKSUM:
|
||||
if (sSendRecvMgr.master_slave == 1 && sCounter1 > 2)
|
||||
EnableSio();
|
||||
if (++sCounter1 > 60)
|
||||
{
|
||||
sSendRecvMgr.field_04 = 1;
|
||||
sSendRecvMgr.state = 6;
|
||||
sSendRecvMgr.cancellationReason = EREADER_CANCEL_TIMEOUT;
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
|
||||
}
|
||||
break;
|
||||
case 6:
|
||||
if (sSendRecvMgr.field_02 != 0)
|
||||
// Progression is handled by the serial callback
|
||||
case EREADER_XFR_STATE_DONE:
|
||||
if (sSendRecvMgr.xferState != 0)
|
||||
{
|
||||
CloseSerial();
|
||||
sSendRecvMgr.field_02 = 0;
|
||||
sSendRecvMgr.xferState = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return sSendRecvMgr.field_02 | (sSendRecvMgr.field_04 << 2) | (sSendRecvMgr.field_03 << 4);
|
||||
return
|
||||
(sSendRecvMgr.xferState << EREADER_XFER_SHIFT)
|
||||
| (sSendRecvMgr.cancellationReason << EREADER_CANCEL_SHIFT)
|
||||
| (sSendRecvMgr.checksumResult << EREADER_CHECKSUM_SHIFT);
|
||||
}
|
||||
|
||||
static bool16 DetermineSendRecvState(u8 mode)
|
||||
{
|
||||
bool16 resp;
|
||||
if ((*(vu32 *)REG_ADDR_SIOCNT & (SIO_MULTI_SI | SIO_MULTI_SD)) == SIO_MULTI_SD && mode)
|
||||
resp = sSendRecvMgr.sendOrRecv = TRUE;
|
||||
resp = sSendRecvMgr.master_slave = TRUE;
|
||||
else
|
||||
resp = sSendRecvMgr.sendOrRecv = FALSE;
|
||||
resp = sSendRecvMgr.master_slave = FALSE;
|
||||
return resp;
|
||||
}
|
||||
|
||||
static void SetUpTransferManager(size_t size, const void * data, void * recvBuffer)
|
||||
{
|
||||
if (sSendRecvMgr.sendOrRecv)
|
||||
if (sSendRecvMgr.master_slave)
|
||||
{
|
||||
REG_SIOCNT |= SIO_38400_BPS;
|
||||
sSendRecvMgr.dataptr = (void *)data;
|
||||
@@ -284,7 +282,7 @@ void EReaderHelper_SerialCallback(void)
|
||||
|
||||
switch (sSendRecvMgr.state)
|
||||
{
|
||||
case 1:
|
||||
case EREADER_XFR_STATE_HANDSHAKE:
|
||||
REG_SIOMLT_SEND = 0xCCD0;
|
||||
*(u64 *)recv = REG_SIOMLT_RECV;
|
||||
for (i = 0, cnt1 = 0, cnt2 = 0; i < 4; i++)
|
||||
@@ -295,14 +293,17 @@ void EReaderHelper_SerialCallback(void)
|
||||
cnt2++;
|
||||
}
|
||||
if (cnt1 == 2 && cnt2 == 0)
|
||||
sSendRecvMgr.state = 2;
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_START;
|
||||
break;
|
||||
case 3:
|
||||
// Progression is handled by software
|
||||
case EREADER_XFR_STATE_TRANSFER:
|
||||
recv32 = REG_SIODATA32;
|
||||
if (sSendRecvMgr.cursor == 0 && sSendRecvMgr.sendOrRecv == 0)
|
||||
// The first value sent by the EReader is the payload size
|
||||
if (sSendRecvMgr.cursor == 0 && sSendRecvMgr.master_slave == 0)
|
||||
sSendRecvMgr.size = recv32 / 4 + 1;
|
||||
if (sSendRecvMgr.sendOrRecv == 1)
|
||||
if (sSendRecvMgr.master_slave == 1)
|
||||
{
|
||||
// Send mode
|
||||
if (sSendRecvMgr.cursor < sSendRecvMgr.size)
|
||||
{
|
||||
REG_SIODATA32 = sSendRecvMgr.dataptr[sSendRecvMgr.cursor];
|
||||
@@ -313,43 +314,51 @@ void EReaderHelper_SerialCallback(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Receive mode
|
||||
if (sSendRecvMgr.cursor > 0 && sSendRecvMgr.cursor < sSendRecvMgr.size + 1)
|
||||
{
|
||||
// Receive next word
|
||||
sSendRecvMgr.dataptr[sSendRecvMgr.cursor - 1] = recv32;
|
||||
sSendRecvMgr.checksum += recv32;
|
||||
}
|
||||
else if (sSendRecvMgr.cursor != 0)
|
||||
{
|
||||
// Reached the end, test the received checksum
|
||||
if (sSendRecvMgr.checksum == recv32)
|
||||
sSendRecvMgr.field_03 = 1;
|
||||
sSendRecvMgr.checksumResult = EREADER_CHECKSUM_OK;
|
||||
else
|
||||
sSendRecvMgr.field_03 = 2;
|
||||
sSendRecvMgr.checksumResult = EREADER_CHECKSUM_ERR;
|
||||
}
|
||||
sCounter2 = 0;
|
||||
}
|
||||
sSendRecvMgr.cursor++;
|
||||
if (sSendRecvMgr.cursor < sSendRecvMgr.size + 2)
|
||||
{
|
||||
if (sSendRecvMgr.sendOrRecv != 0)
|
||||
if (sSendRecvMgr.master_slave != 0)
|
||||
// Clock master; start timer
|
||||
REG_TM3CNT_H |= TIMER_ENABLE;
|
||||
else
|
||||
// Clock slave; reset
|
||||
EnableSio();
|
||||
}
|
||||
else
|
||||
{
|
||||
sSendRecvMgr.state = 4;
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_TRANSFER_DONE;
|
||||
sCounter1 = 0;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
if (sSendRecvMgr.sendOrRecv == 0)
|
||||
REG_SIODATA8 = sSendRecvMgr.field_03;
|
||||
// Progression is handled by the software
|
||||
case EREADER_XFR_STATE_CHECKSUM:
|
||||
if (sSendRecvMgr.master_slave == 0)
|
||||
// Clock slave
|
||||
REG_SIODATA8 = sSendRecvMgr.checksumResult;
|
||||
*(vu64 *)recv = REG_SIOMLT_RECV;
|
||||
if (recv[1] == 1 || recv[1] == 2)
|
||||
if (recv[1] == EREADER_CHECKSUM_OK || recv[1] == EREADER_CHECKSUM_ERR)
|
||||
{
|
||||
if (sSendRecvMgr.sendOrRecv == 1)
|
||||
sSendRecvMgr.field_03 = recv[1];
|
||||
sSendRecvMgr.state = 6;
|
||||
if (sSendRecvMgr.master_slave == 1)
|
||||
// EReader has (in)validated the payload
|
||||
sSendRecvMgr.checksumResult = recv[1];
|
||||
sSendRecvMgr.state = EREADER_XFR_STATE_DONE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
+2
-2
@@ -118,7 +118,7 @@ bool32 IsMysteryGiftEnabled(void)
|
||||
return FlagGet(FLAG_SYS_MYSTERY_GIFT_ENABLED);
|
||||
}
|
||||
|
||||
void sub_806E2D0(void)
|
||||
void ResetMysteryEventFlags(void)
|
||||
{
|
||||
FlagClear(FLAG_MYSTERY_EVENT_DONE);
|
||||
FlagClear(FLAG_0x3D9);
|
||||
@@ -138,7 +138,7 @@ void sub_806E2D0(void)
|
||||
FlagClear(FLAG_0x3E7);
|
||||
}
|
||||
|
||||
void sub_806E370(void)
|
||||
void ResetMysteryEventVars(void)
|
||||
{
|
||||
VarSet(VAR_EVENT_PICHU_SLOT, 0);
|
||||
VarSet(VAR_0x40B6, 0);
|
||||
|
||||
@@ -524,12 +524,12 @@ void RfuUnionObjectSetFacingDirection(u8 objectEventId, u8 direction)
|
||||
}
|
||||
}
|
||||
|
||||
void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 arg1)
|
||||
void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible)
|
||||
{
|
||||
u8 spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
if (arg1)
|
||||
if (invisible)
|
||||
gSprites[spriteId].tInvisible = TRUE;
|
||||
else
|
||||
gSprites[spriteId].tInvisible = FALSE;
|
||||
@@ -544,12 +544,12 @@ bool32 RfuUnionObjectIsInvisible(u8 objectEventId)
|
||||
return gSprites[spriteId].tInvisible == TRUE;
|
||||
}
|
||||
|
||||
void RfuUnionObjectStartWarp(u8 objectEventId, u8 direction)
|
||||
void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo)
|
||||
{
|
||||
u8 spriteId = GetObjectEventSpriteId(objectEventId);
|
||||
if (spriteId != MAX_SPRITES)
|
||||
{
|
||||
gSprites[spriteId].tUnionRoomWarpAnimNo = direction;
|
||||
gSprites[spriteId].tUnionRoomWarpAnimNo = animNo;
|
||||
gSprites[spriteId].tUnionRoomWarpAnimState = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ void sub_80696C0(void)
|
||||
UnfreezeObjectEvents();
|
||||
}
|
||||
|
||||
void sub_80696F0(void)
|
||||
void UnionRoom_UnlockPlayerAndChatPartner(void)
|
||||
{
|
||||
u8 objectEventId;
|
||||
if (gObjectEvents[gSelectedObjectEvent].active)
|
||||
|
||||
@@ -206,7 +206,7 @@ static void sub_807DDF0(u8 taskId)
|
||||
switch (task->data[0])
|
||||
{
|
||||
case 0:
|
||||
sub_800AB9C();
|
||||
PrepareSendLinkCmd2FFE_or_RfuCmd6600();
|
||||
task->data[0]++;
|
||||
break;
|
||||
case 1:
|
||||
@@ -227,7 +227,7 @@ static void sub_807DDF0(u8 taskId)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_807DE58(void)
|
||||
void FieldCB_ReturnToFieldWirelessLink(void)
|
||||
{
|
||||
ScriptContext2_Enable();
|
||||
Overworld_PlaySpecialMapMusic();
|
||||
@@ -632,7 +632,7 @@ static void sub_807E5EC(u8 taskId)
|
||||
break;
|
||||
case 2:
|
||||
WarpIntoMap();
|
||||
SetMainCallback2(sub_8056788);
|
||||
SetMainCallback2(CB2_ReturnToFieldCableClub);
|
||||
DestroyTask(taskId);
|
||||
break;
|
||||
}
|
||||
@@ -662,7 +662,7 @@ static void sub_807E678(u8 taskId)
|
||||
case 1:
|
||||
if (!sub_807E40C() && BGMusicStopped())
|
||||
{
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
data[0]++;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -1920,15 +1920,15 @@ u16 Special_BattleCardAction(void)
|
||||
switch (gSpecialVar_Result)
|
||||
{
|
||||
case 0:
|
||||
return sub_81445C0(3);
|
||||
return MEvent_GetBattleCardCount(3);
|
||||
case 1:
|
||||
return sub_81445C0(4);
|
||||
return MEvent_GetBattleCardCount(4);
|
||||
case 2:
|
||||
return sub_81445C0(0);
|
||||
return MEvent_GetBattleCardCount(0);
|
||||
case 3:
|
||||
return sub_81445C0(1);
|
||||
return MEvent_GetBattleCardCount(1);
|
||||
case 4:
|
||||
return sub_81445C0(2);
|
||||
return MEvent_GetBattleCardCount(2);
|
||||
default:
|
||||
AGB_ASSERT_EX(0, ABSPATH("scr_tool.c"), 3873);
|
||||
return 0;
|
||||
|
||||
+1
-1
@@ -490,7 +490,7 @@ void MapGridSetMetatileEntryAt(s32 x, s32 y, u16 metatile)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8059024(s32 x, s32 y, bool32 arg2)
|
||||
void MapGridSetMetatileImpassabilityAt(s32 x, s32 y, bool32 arg2)
|
||||
{
|
||||
if (x >= 0 && x < VMap.Xsize
|
||||
&& y >= 0 && y < VMap.Ysize)
|
||||
|
||||
+30
-30
@@ -33,7 +33,7 @@ struct HelpSystemVideoState
|
||||
|
||||
static EWRAM_DATA u8 sMapTilesBackup[BG_CHAR_SIZE] = {0};
|
||||
EWRAM_DATA u8 gUnknown_203F174 = 0;
|
||||
EWRAM_DATA u8 gUnknown_203F175 = 0;
|
||||
EWRAM_DATA bool8 gHelpSystemToggleWithRButtonDisabled = FALSE;
|
||||
static EWRAM_DATA u8 sDelayTimer = 0;
|
||||
static EWRAM_DATA u8 sInHelpSystem = 0;
|
||||
static EWRAM_DATA struct HelpSystemVideoState sVideoState = {0};
|
||||
@@ -53,7 +53,7 @@ u8 RunHelpSystemCallback(void)
|
||||
sInHelpSystem = 0;
|
||||
if (gSaveBlock2Ptr->optionsButtonMode != OPTIONS_BUTTON_MODE_HELP)
|
||||
return 0;
|
||||
if (JOY_NEW(R_BUTTON) && gUnknown_203F175 == 1)
|
||||
if (JOY_NEW(R_BUTTON) && gHelpSystemToggleWithRButtonDisabled == TRUE)
|
||||
return 0;
|
||||
if (JOY_NEW(L_BUTTON | R_BUTTON))
|
||||
{
|
||||
@@ -93,9 +93,9 @@ u8 RunHelpSystemCallback(void)
|
||||
HelpSystem_PrintText_Row61(gString_Help);
|
||||
sub_813BD14(1);
|
||||
if (sub_812B40C() == TRUE)
|
||||
sub_812BC54(&gHelpSystemListMenu, gHelpSystemListMenuItems);
|
||||
HelpSystemSubroutine_PrintWelcomeMessage(&gHelpSystemListMenu, gHelpSystemListMenuItems);
|
||||
else
|
||||
sub_812BCA8(&gHelpSystemListMenu, gHelpSystemListMenuItems);
|
||||
HelpSystemSubroutine_WelcomeEndGotoMenu(&gHelpSystemListMenu, gHelpSystemListMenuItems);
|
||||
sub_813BE78(1);
|
||||
sub_813BF50(1);
|
||||
CommitTilemap();
|
||||
@@ -110,7 +110,7 @@ u8 RunHelpSystemCallback(void)
|
||||
sVideoState.state = 5;
|
||||
break;
|
||||
case 5:
|
||||
if (!sub_812BB9C(&gHelpSystemListMenu, gHelpSystemListMenuItems))
|
||||
if (!RunHelpMenuSubroutine(&gHelpSystemListMenu, gHelpSystemListMenuItems))
|
||||
{
|
||||
PlaySE(SE_HELP_CL);
|
||||
sVideoState.state = 6;
|
||||
@@ -981,9 +981,9 @@ void HelpSystem_FillPanel1(void)
|
||||
void HelpSystem_InitListMenuController(struct HelpSystemListMenu * a0, u8 a1, u8 a2)
|
||||
{
|
||||
gHelpSystemListMenu.sub = a0->sub;
|
||||
gHelpSystemListMenu.field_0C = a1;
|
||||
gHelpSystemListMenu.field_0D = a2;
|
||||
gHelpSystemListMenu.field_0E = 0;
|
||||
gHelpSystemListMenu.itemsAbove = a1;
|
||||
gHelpSystemListMenu.cursorPos = a2;
|
||||
gHelpSystemListMenu.state = 0;
|
||||
if (gHelpSystemListMenu.sub.totalItems < gHelpSystemListMenu.sub.maxShowed)
|
||||
gHelpSystemListMenu.sub.maxShowed = gHelpSystemListMenu.sub.totalItems;
|
||||
sub_813BDA4(0);
|
||||
@@ -1007,7 +1007,7 @@ s32 HelpSystem_GetMenuInput(void)
|
||||
else if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.field_0C + gHelpSystemListMenu.field_0D].index;
|
||||
return gHelpSystemListMenu.sub.items[gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos].index;
|
||||
}
|
||||
else if (JOY_NEW(B_BUTTON))
|
||||
{
|
||||
@@ -1051,15 +1051,15 @@ void sub_813C75C(void)
|
||||
u8 r6 = gHelpSystemListMenu.sub.totalItems - 7;
|
||||
if (gHelpSystemListMenu.sub.totalItems > 7)
|
||||
{
|
||||
s32 r4 = gHelpSystemListMenu.field_0C + gHelpSystemListMenu.field_0D;
|
||||
s32 r4 = gHelpSystemListMenu.itemsAbove + gHelpSystemListMenu.cursorPos;
|
||||
sub_813C004(0, 0);
|
||||
if (r4 == 0)
|
||||
sub_813C004(1, 1);
|
||||
else if (gHelpSystemListMenu.field_0C == 0 && gHelpSystemListMenu.field_0D != 0)
|
||||
else if (gHelpSystemListMenu.itemsAbove == 0 && gHelpSystemListMenu.cursorPos != 0)
|
||||
sub_813C004(1, 1);
|
||||
else if (gHelpSystemListMenu.field_0C == r6)
|
||||
else if (gHelpSystemListMenu.itemsAbove == r6)
|
||||
sub_813C004(0, 1);
|
||||
else if (gHelpSystemListMenu.field_0C != 0)
|
||||
else if (gHelpSystemListMenu.itemsAbove != 0)
|
||||
{
|
||||
sub_813C004(0, 1);
|
||||
sub_813C004(1, 1);
|
||||
@@ -1071,7 +1071,7 @@ void PrintListMenuItems(void)
|
||||
{
|
||||
u8 glyphHeight = GetFontAttribute(2, 1) + 1;
|
||||
s32 i;
|
||||
s32 r5 = gHelpSystemListMenu.field_0C;
|
||||
s32 r5 = gHelpSystemListMenu.itemsAbove;
|
||||
|
||||
for (i = 0; i < gHelpSystemListMenu.sub.maxShowed; i++)
|
||||
{
|
||||
@@ -1086,7 +1086,7 @@ void PlaceListMenuCursor(void)
|
||||
{
|
||||
u8 glyphHeight = GetFontAttribute(2, 1) + 1;
|
||||
u8 x = gHelpSystemListMenu.sub.left;
|
||||
u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.field_0D;
|
||||
u8 y = gHelpSystemListMenu.sub.top + glyphHeight * gHelpSystemListMenu.cursorPos;
|
||||
HelpSystem_PrintTextAt(gFameCheckerText_ListMenuCursor, x, y);
|
||||
}
|
||||
|
||||
@@ -1107,24 +1107,24 @@ u8 TryMoveCursor1(u8 dirn)
|
||||
r4 = 0;
|
||||
else
|
||||
r4 = gHelpSystemListMenu.sub.maxShowed - (gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1)) - 1;
|
||||
if (gHelpSystemListMenu.field_0C == 0)
|
||||
if (gHelpSystemListMenu.itemsAbove == 0)
|
||||
{
|
||||
if (gHelpSystemListMenu.field_0D != 0)
|
||||
if (gHelpSystemListMenu.cursorPos != 0)
|
||||
{
|
||||
gHelpSystemListMenu.field_0D--;
|
||||
gHelpSystemListMenu.cursorPos--;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
if (gHelpSystemListMenu.field_0D > r4)
|
||||
if (gHelpSystemListMenu.cursorPos > r4)
|
||||
{
|
||||
gHelpSystemListMenu.field_0D--;
|
||||
gHelpSystemListMenu.cursorPos--;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gHelpSystemListMenu.field_0C--;
|
||||
gHelpSystemListMenu.itemsAbove--;
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
@@ -1134,24 +1134,24 @@ u8 TryMoveCursor1(u8 dirn)
|
||||
r4 = 0;
|
||||
else
|
||||
r4 = gHelpSystemListMenu.sub.maxShowed / 2 + (gHelpSystemListMenu.sub.maxShowed & 1);
|
||||
if (gHelpSystemListMenu.field_0C == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed)
|
||||
if (gHelpSystemListMenu.itemsAbove == gHelpSystemListMenu.sub.totalItems - gHelpSystemListMenu.sub.maxShowed)
|
||||
{
|
||||
if (gHelpSystemListMenu.field_0D < gHelpSystemListMenu.sub.maxShowed - 1)
|
||||
if (gHelpSystemListMenu.cursorPos < gHelpSystemListMenu.sub.maxShowed - 1)
|
||||
{
|
||||
gHelpSystemListMenu.field_0D++;
|
||||
gHelpSystemListMenu.cursorPos++;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
else if (gHelpSystemListMenu.field_0D < r4)
|
||||
else if (gHelpSystemListMenu.cursorPos < r4)
|
||||
{
|
||||
gHelpSystemListMenu.field_0D++;
|
||||
gHelpSystemListMenu.cursorPos++;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
gHelpSystemListMenu.field_0C++;
|
||||
gHelpSystemListMenu.itemsAbove++;
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
@@ -1159,7 +1159,7 @@ u8 TryMoveCursor1(u8 dirn)
|
||||
|
||||
bool8 MoveCursor(u8 by, u8 dirn)
|
||||
{
|
||||
u8 r7 = gHelpSystemListMenu.field_0D;
|
||||
u8 r7 = gHelpSystemListMenu.cursorPos;
|
||||
u8 flags = 0;
|
||||
s32 i;
|
||||
for (i = 0; i < by; i++)
|
||||
@@ -1172,14 +1172,14 @@ bool8 MoveCursor(u8 by, u8 dirn)
|
||||
// neither changed
|
||||
return TRUE;
|
||||
case 1:
|
||||
// changed field_0D only
|
||||
// changed cursorPos only
|
||||
sub_813C860(r7);
|
||||
PlaceListMenuCursor();
|
||||
CommitTilemap();
|
||||
break;
|
||||
case 2:
|
||||
case 3:
|
||||
// changed field_0C
|
||||
// changed itemsAbove
|
||||
if (sub_812BF88() == TRUE)
|
||||
{
|
||||
HelpSystem_SetInputDelay(2);
|
||||
|
||||
+209
-210
@@ -19,22 +19,22 @@
|
||||
static EWRAM_DATA u16 sSomeVariable = 0;
|
||||
static EWRAM_DATA u8 gUnknown_203B0EE = 0;
|
||||
|
||||
u8 gUnknown_3005E9C[4];
|
||||
u8 sHelpSystemState[4];
|
||||
u16 gSomeVariableBackup;
|
||||
|
||||
static bool32 IsCurrentMapInArray(const u16 * mapIdxs);
|
||||
static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
static bool8 sub_812B754(void);
|
||||
static bool8 sub_812B780(u8);
|
||||
static bool8 sub_812BB10(void);
|
||||
static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
static bool8 HelpSystem_HasDefeatedBrock(void);
|
||||
static bool8 HelpSystemSubmenuIndexIsActive(u8);
|
||||
static bool8 HasGottenAtLeastOneHM(void);
|
||||
|
||||
static void sub_812BF5C(void);
|
||||
static void sub_812BF74(const u8 *);
|
||||
static void sub_812BF94(struct HelpSystemListMenu * a0);
|
||||
static void sub_812BF9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
static void PrintWelcomeMessageOnPanel1(void);
|
||||
static void PrintTextOnPanel2Row52RightAlign(const u8 *);
|
||||
static void ResetHelpSystemCursor(struct HelpSystemListMenu * a0);
|
||||
static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * a0, struct ListMenuItem * a1);
|
||||
|
||||
static const u8 *const gUnknown_845B080[] = {
|
||||
static const u8 *const sHelpSystemTopicPtrs[] = {
|
||||
gUnknown_81B2DF8,
|
||||
gUnknown_81B2E1C,
|
||||
gUnknown_81B2E2E,
|
||||
@@ -43,7 +43,7 @@ static const u8 *const gUnknown_845B080[] = {
|
||||
gUnknown_81B2E6A
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B098[] = {
|
||||
static const u8 *const sHelpSystemTopicMouseoverDescriptionPtrs[] = {
|
||||
gUnknown_81B2E88,
|
||||
gUnknown_81B2EC8,
|
||||
gUnknown_81B2F00,
|
||||
@@ -52,7 +52,7 @@ static const u8 *const gUnknown_845B098[] = {
|
||||
gUnknown_81B2FA9
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B0B0[] = {
|
||||
static const u8 *const sHelpSystemSpecializedQuestionTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81B3083,
|
||||
gUnknown_81B30A9,
|
||||
@@ -100,7 +100,7 @@ static const u8 *const gUnknown_845B0B0[] = {
|
||||
gUnknown_81B3516
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B164[] = {
|
||||
static const u8 *const sHelpSystemSpecializedAnswerTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81B3525,
|
||||
gUnknown_81B35E6,
|
||||
@@ -148,7 +148,7 @@ static const u8 *const gUnknown_845B164[] = {
|
||||
gUnknown_81B55F4
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B218[] = {
|
||||
static const u8 *const sHelpSystemMenuTopicTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81B56E3,
|
||||
gUnknown_81B56F4,
|
||||
@@ -200,7 +200,7 @@ static const u8 *const gUnknown_845B218[] = {
|
||||
gUnknown_81B5A37
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B2DC[] = {
|
||||
static const u8 *const sHelpSystemSpecializedControlsTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81B5A4D,
|
||||
gUnknown_81B5B0C,
|
||||
@@ -252,7 +252,7 @@ static const u8 *const gUnknown_845B2DC[] = {
|
||||
gUnknown_81B7C57
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B3A0[] = {
|
||||
static const u8 *const sHelpSystemSpecializedStringsTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81B7CC1,
|
||||
gUnknown_81B7CC4,
|
||||
@@ -299,7 +299,7 @@ static const u8 *const gUnknown_845B3A0[] = {
|
||||
gUnknown_81B7E0F
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B450[] = {
|
||||
static const u8 *const sHelpSystemSpecializedStringDefinitionsTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81B7E16,
|
||||
gUnknown_81B7F0A,
|
||||
@@ -346,7 +346,7 @@ static const u8 *const gUnknown_845B450[] = {
|
||||
gUnknown_81B9B2F
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B500[] = {
|
||||
static const u8 *const sHelpSystemGeneralTopicTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81B9BB7,
|
||||
gUnknown_81B9BC7,
|
||||
@@ -357,7 +357,7 @@ static const u8 *const gUnknown_845B500[] = {
|
||||
gUnknown_81B9C1D
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B520[] = {
|
||||
static const u8 *const sHelpSystemGeneralTopicDescriptionTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81B9C2F,
|
||||
gUnknown_81B9D04,
|
||||
@@ -368,7 +368,7 @@ static const u8 *const gUnknown_845B520[] = {
|
||||
gUnknown_81BA027
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B540[] = {
|
||||
static const u8 *const sHelpSystemTypeMatchupTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81BA0F1,
|
||||
gUnknown_81BA10D,
|
||||
@@ -407,7 +407,7 @@ static const u8 *const gUnknown_845B540[] = {
|
||||
gUnknown_81BA400
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B5D0[] = {
|
||||
static const u8 *const sHelpSystemTypeMatchupDescriptionTextPtrs[] = {
|
||||
NULL,
|
||||
gUnknown_81BA416,
|
||||
gUnknown_81BA4E6,
|
||||
@@ -446,7 +446,6 @@ static const u8 *const gUnknown_845B5D0[] = {
|
||||
gUnknown_81BB156
|
||||
};
|
||||
|
||||
|
||||
static const u8 gUnknown_845B660[] = {
|
||||
0x01, 0x02, 0x03, 0xff
|
||||
};
|
||||
@@ -739,7 +738,7 @@ static const u8 gUnknown_845B9BE[] = {
|
||||
0x09, 0x01, 0x02, 0x03, 0x23, 0x25, 0x24, 0x04, 0x05, 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0c, 0x0d, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x27, 0x15, 0x26, 0x16, 0x17, 0x18, 0x1a, 0x0e, 0x1b, 0xff
|
||||
};
|
||||
|
||||
static const u8 *const gUnknown_845B9E0[] = {
|
||||
static const u8 *const sHelpSystemSubmenuIndexPointers[] = {
|
||||
NULL, NULL, NULL, NULL, NULL,
|
||||
NULL, NULL, NULL, gUnknown_845B660, NULL,
|
||||
NULL, NULL, NULL, gUnknown_845B664, NULL,
|
||||
@@ -780,48 +779,48 @@ static const u8 *const gUnknown_845B9E0[] = {
|
||||
|
||||
static const u16 unref_845BCB0[] = INCBIN_U16("graphics/help_system/unk_845BCB0.bin");
|
||||
|
||||
static const u8 gUnknown_845C4B0[] = {
|
||||
static const u8 sHelpSystemContextTopicOrder[] = {
|
||||
3, 0, 1, 2, 4, 5
|
||||
};
|
||||
|
||||
static const u8 gUnknown_845C4B6[][6] = {
|
||||
{0, 0, 0, 0, 0, 1},
|
||||
{0, 0, 0, 1, 0, 1},
|
||||
{0, 0, 0, 1, 0, 1},
|
||||
{0, 1, 0, 1, 0, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 1, 1, 0, 0, 1},
|
||||
{0, 1, 1, 0, 0, 1},
|
||||
{0, 0, 1, 0, 0, 1},
|
||||
{0, 0, 1, 0, 0, 1},
|
||||
{0, 1, 1, 0, 0, 1},
|
||||
{0, 1, 1, 0, 0, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 1, 1, 0, 0, 1},
|
||||
{0, 1, 1, 0, 0, 1},
|
||||
{1, 0, 0, 1, 0, 1},
|
||||
{1, 1, 1, 0, 0, 1},
|
||||
{1, 1, 1, 1, 0, 1},
|
||||
{1, 1, 1, 0, 0, 1},
|
||||
{1, 1, 1, 0, 1, 1},
|
||||
{1, 1, 1, 0, 0, 1},
|
||||
{1, 1, 1, 0, 0, 1},
|
||||
{1, 1, 1, 0, 0, 1},
|
||||
{1, 1, 1, 0, 0, 1},
|
||||
{1, 1, 1, 0, 1, 1},
|
||||
{1, 1, 1, 0, 1, 1},
|
||||
{1, 1, 1, 0, 1, 1},
|
||||
{1, 1, 1, 0, 1, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 1, 0, 0, 0, 1},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{0, 0, 0, 0, 0, 0}
|
||||
static const bool8 sHelpSystemContextTopicFlags[][6] = {
|
||||
{FALSE, FALSE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, FALSE, FALSE, TRUE, FALSE, TRUE },
|
||||
{FALSE, FALSE, FALSE, TRUE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, TRUE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{FALSE, FALSE, TRUE, FALSE, FALSE, TRUE },
|
||||
{FALSE, FALSE, TRUE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{TRUE, FALSE, FALSE, TRUE, FALSE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{TRUE, TRUE, TRUE, TRUE, FALSE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, FALSE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
|
||||
{TRUE, TRUE, TRUE, FALSE, TRUE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, TRUE, FALSE, FALSE, FALSE, TRUE },
|
||||
{FALSE, FALSE, FALSE, FALSE, FALSE, FALSE},
|
||||
{FALSE, FALSE, FALSE, FALSE, FALSE, FALSE}
|
||||
};
|
||||
|
||||
static const u16 sMartMaps[] = {
|
||||
@@ -961,12 +960,12 @@ static bool8 IsInDungeonMap(void)
|
||||
|
||||
void sub_812B35C(void)
|
||||
{
|
||||
sub_812B4B8();
|
||||
HelpSystem_EnableToggleWithRButton();
|
||||
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
|
||||
HelpSystem_SetSomeVariable2(0x16);
|
||||
else if (IsInDungeonMap())
|
||||
HelpSystem_SetSomeVariable2(0x15);
|
||||
else if (is_light_level_8_or_9(gMapHeader.mapType))
|
||||
else if (IsMapTypeIndoors(gMapHeader.mapType))
|
||||
{
|
||||
if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_1F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_1F)) || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_PLAYERS_HOUSE_2F) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_PLAYERS_HOUSE_2F)))
|
||||
HelpSystem_SetSomeVariable2(0x0E);
|
||||
@@ -1015,126 +1014,126 @@ void HelpSystem_Enable(void)
|
||||
if (gQuestLogState != 2 && gQuestLogState != 3)
|
||||
{
|
||||
gHelpSystemEnabled = TRUE;
|
||||
sub_812B4B8();
|
||||
HelpSystem_EnableToggleWithRButton();
|
||||
}
|
||||
}
|
||||
|
||||
void sub_812B4AC(void)
|
||||
void HelpSystem_DisableToggleWithRButton(void)
|
||||
{
|
||||
gUnknown_203F175 = 1;
|
||||
gHelpSystemToggleWithRButtonDisabled = TRUE;
|
||||
}
|
||||
|
||||
void sub_812B4B8(void)
|
||||
void HelpSystem_EnableToggleWithRButton(void)
|
||||
{
|
||||
gUnknown_203F175 = 0;
|
||||
gHelpSystemToggleWithRButtonDisabled = FALSE;
|
||||
}
|
||||
|
||||
static void sub_812B4C4(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
static void ResetHelpSystemListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
a0->sub.items = a1;
|
||||
a0->sub.totalItems = 1;
|
||||
a0->sub.maxShowed = 1;
|
||||
a0->sub.left = 1;
|
||||
a0->sub.top = 4;
|
||||
helpListMenu->sub.items = listMenuItemsBuffer;
|
||||
helpListMenu->sub.totalItems = 1;
|
||||
helpListMenu->sub.maxShowed = 1;
|
||||
helpListMenu->sub.left = 1;
|
||||
helpListMenu->sub.top = 4;
|
||||
}
|
||||
|
||||
static void sub_812B4D8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
static void BuildAndPrintMainTopicsListMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
sub_812B4C4(a0, a1);
|
||||
sub_812B520(a0, a1);
|
||||
sub_812BF74(gUnknown_841DFAC);
|
||||
HelpSystem_InitListMenuController(a0, 0, gUnknown_3005E9C[2]);
|
||||
sub_812BF9C(a0, a1);
|
||||
ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
|
||||
BuildMainTopicsListAndMoveToH00(helpListMenu, listMenuItemsBuffer);
|
||||
PrintTextOnPanel2Row52RightAlign(gUnknown_841DFAC);
|
||||
HelpSystem_InitListMenuController(helpListMenu, 0, sHelpSystemState[2]);
|
||||
PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
|
||||
sub_813BDA4(1);
|
||||
sub_813BD5C(1);
|
||||
}
|
||||
|
||||
static void sub_812B520(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
static void BuildMainTopicsListAndMoveToH00(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
u8 i;
|
||||
u8 r4 = 0;
|
||||
u8 totalItems = 0;
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
if (gUnknown_845C4B6[sSomeVariable][gUnknown_845C4B0[i]] == 1)
|
||||
if (sHelpSystemContextTopicFlags[sSomeVariable][sHelpSystemContextTopicOrder[i]] == TRUE)
|
||||
{
|
||||
a1[r4].label = gUnknown_845B080[gUnknown_845C4B0[i]];
|
||||
a1[r4].index = gUnknown_845C4B0[i];
|
||||
r4++;
|
||||
listMenuItemsBuffer[totalItems].label = sHelpSystemTopicPtrs[sHelpSystemContextTopicOrder[i]];
|
||||
listMenuItemsBuffer[totalItems].index = sHelpSystemContextTopicOrder[i];
|
||||
totalItems++;
|
||||
}
|
||||
}
|
||||
a1[r4 - 1].index = -2;
|
||||
a0->sub.totalItems = r4;
|
||||
a0->sub.maxShowed = r4;
|
||||
a0->sub.left = 0;
|
||||
listMenuItemsBuffer[totalItems - 1].index = -2;
|
||||
helpListMenu->sub.totalItems = totalItems;
|
||||
helpListMenu->sub.maxShowed = totalItems;
|
||||
helpListMenu->sub.left = 0;
|
||||
}
|
||||
|
||||
static void sub_812B5A8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
static void BuildAndPrintSubmenuList(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
sub_813BDE8(0);
|
||||
sub_813BFC0(0);
|
||||
sub_813BE78(1);
|
||||
sub_812B4C4(a0, a1);
|
||||
sub_812B614(a0, a1);
|
||||
sub_812BF74(gUnknown_841DFC9);
|
||||
HelpSystem_InitListMenuController(a0, a0->field_0C, a0->field_0D);
|
||||
HelpSystem_PrintTextAt(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
|
||||
ResetHelpSystemListMenu(helpListMenu, listMenuItemsBuffer);
|
||||
SetHelpSystemSubmenuItems(helpListMenu, listMenuItemsBuffer);
|
||||
PrintTextOnPanel2Row52RightAlign(gUnknown_841DFC9);
|
||||
HelpSystem_InitListMenuController(helpListMenu, helpListMenu->itemsAbove, helpListMenu->cursorPos);
|
||||
HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[sHelpSystemState[1]], 0, 0);
|
||||
sub_813BDA4(1);
|
||||
sub_813BD5C(1);
|
||||
}
|
||||
|
||||
static void sub_812B614(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
static void SetHelpSystemSubmenuItems(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
u8 r6 = 0;
|
||||
const u8 * r3 = gUnknown_845B9E0[sSomeVariable * 5 + gUnknown_3005E9C[1]];
|
||||
u8 totalItems = 0;
|
||||
const u8 * indexPtr = sHelpSystemSubmenuIndexPointers[sSomeVariable * 5 + sHelpSystemState[1]];
|
||||
u8 i;
|
||||
for (i = 0; r3[i] != 0xFF; i++)
|
||||
for (i = 0; indexPtr[i] != 0xFF; i++)
|
||||
{
|
||||
if (sub_812B780(r3[i]) == TRUE)
|
||||
if (HelpSystemSubmenuIndexIsActive(indexPtr[i]) == TRUE)
|
||||
{
|
||||
if (gUnknown_3005E9C[1] == 0)
|
||||
a1[r6].label = gUnknown_845B0B0[r3[i]];
|
||||
else if (gUnknown_3005E9C[1] == 1)
|
||||
a1[r6].label = gUnknown_845B218[r3[i]];
|
||||
else if (gUnknown_3005E9C[1] == 2)
|
||||
a1[r6].label = gUnknown_845B3A0[r3[i]];
|
||||
else if (gUnknown_3005E9C[1] == 3)
|
||||
a1[r6].label = gUnknown_845B500[r3[i]];
|
||||
if (sHelpSystemState[1] == 0)
|
||||
listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedQuestionTextPtrs[indexPtr[i]];
|
||||
else if (sHelpSystemState[1] == 1)
|
||||
listMenuItemsBuffer[totalItems].label = sHelpSystemMenuTopicTextPtrs[indexPtr[i]];
|
||||
else if (sHelpSystemState[1] == 2)
|
||||
listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedStringsTextPtrs[indexPtr[i]];
|
||||
else if (sHelpSystemState[1] == 3)
|
||||
listMenuItemsBuffer[totalItems].label = sHelpSystemGeneralTopicTextPtrs[indexPtr[i]];
|
||||
else
|
||||
a1[r6].label = gUnknown_845B540[r3[i]];
|
||||
a1[r6].index = r3[i];
|
||||
r6++;
|
||||
listMenuItemsBuffer[totalItems].label = sHelpSystemTypeMatchupTextPtrs[indexPtr[i]];
|
||||
listMenuItemsBuffer[totalItems].index = indexPtr[i];
|
||||
totalItems++;
|
||||
}
|
||||
}
|
||||
if (sub_812B754() == TRUE)
|
||||
if (HelpSystem_HasDefeatedBrock() == TRUE)
|
||||
{
|
||||
for (i = 0, r3 = gUnknown_845B9BE; r3[i] != 0xFF; i++)
|
||||
for (i = 0, indexPtr = gUnknown_845B9BE; indexPtr[i] != 0xFF; i++)
|
||||
{
|
||||
a1[r6].label = gUnknown_845B3A0[r3[i]];
|
||||
a1[r6].index = r3[i];
|
||||
r6++;
|
||||
listMenuItemsBuffer[totalItems].label = sHelpSystemSpecializedStringsTextPtrs[indexPtr[i]];
|
||||
listMenuItemsBuffer[totalItems].index = indexPtr[i];
|
||||
totalItems++;
|
||||
}
|
||||
}
|
||||
a1[r6].label = gUnknown_81B2E6F;
|
||||
a1[r6].index = -2;
|
||||
r6++;
|
||||
a0->sub.totalItems = r6;
|
||||
a0->sub.maxShowed = 7;
|
||||
a0->sub.left = 0;
|
||||
a0->sub.top = 21;
|
||||
listMenuItemsBuffer[totalItems].label = gUnknown_81B2E6F;
|
||||
listMenuItemsBuffer[totalItems].index = -2;
|
||||
totalItems++;
|
||||
helpListMenu->sub.totalItems = totalItems;
|
||||
helpListMenu->sub.maxShowed = 7;
|
||||
helpListMenu->sub.left = 0;
|
||||
helpListMenu->sub.top = 21;
|
||||
}
|
||||
|
||||
static bool8 sub_812B754(void)
|
||||
static bool8 HelpSystem_HasDefeatedBrock(void)
|
||||
{
|
||||
if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && gUnknown_3005E9C[1] == 2)
|
||||
if (FlagGet(FLAG_DEFEATED_BROCK) == TRUE && sHelpSystemState[1] == 2)
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_812B780(u8 id)
|
||||
static bool8 HelpSystemSubmenuIndexIsActive(u8 id)
|
||||
{
|
||||
u8 i = 0;
|
||||
|
||||
if (gUnknown_3005E9C[1] == 0)
|
||||
if (sHelpSystemState[1] == 0)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
@@ -1188,7 +1187,7 @@ static bool8 sub_812B780(u8 id)
|
||||
return FlagGet(FLAG_BADGE01_GET);
|
||||
case 28:
|
||||
case 40:
|
||||
return sub_812BB10();
|
||||
return HasGottenAtLeastOneHM();
|
||||
case 39:
|
||||
return FlagGet(FLAG_GOT_FAME_CHECKER);
|
||||
case 44:
|
||||
@@ -1196,7 +1195,7 @@ static bool8 sub_812B780(u8 id)
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
if (gUnknown_3005E9C[1] == 1)
|
||||
if (sHelpSystemState[1] == 1)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
@@ -1254,7 +1253,7 @@ static bool8 sub_812B780(u8 id)
|
||||
return FlagGet(FLAG_BADGE01_GET);
|
||||
case 16:
|
||||
case 17:
|
||||
return sub_812BB10();
|
||||
return HasGottenAtLeastOneHM();
|
||||
case 18:
|
||||
return FlagGet(FLAG_GOT_BICYCLE);
|
||||
case 48:
|
||||
@@ -1262,9 +1261,9 @@ static bool8 sub_812B780(u8 id)
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
if (gUnknown_3005E9C[1] == 2)
|
||||
if (sHelpSystemState[1] == 2)
|
||||
{
|
||||
if (sub_812B754() == TRUE)
|
||||
if (HelpSystem_HasDefeatedBrock() == TRUE)
|
||||
{
|
||||
for (i = 0; gUnknown_845B9BE[i] != 0xFF; i++)
|
||||
{
|
||||
@@ -1311,7 +1310,7 @@ static bool8 sub_812B780(u8 id)
|
||||
return FlagGet(FLAG_SYS_POKEMON_GET);
|
||||
case 36:
|
||||
case 37:
|
||||
return sub_812BB10();
|
||||
return HasGottenAtLeastOneHM();
|
||||
case 3:
|
||||
case 15:
|
||||
case 18:
|
||||
@@ -1320,7 +1319,7 @@ static bool8 sub_812B780(u8 id)
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
if (gUnknown_3005E9C[1] == 3)
|
||||
if (sHelpSystemState[1] == 3)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
@@ -1331,7 +1330,7 @@ static bool8 sub_812B780(u8 id)
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
if (gUnknown_3005E9C[1] == 4)
|
||||
if (sHelpSystemState[1] == 4)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
@@ -1339,7 +1338,7 @@ static bool8 sub_812B780(u8 id)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool8 sub_812BB10(void)
|
||||
static bool8 HasGottenAtLeastOneHM(void)
|
||||
{
|
||||
if (FlagGet(FLAG_GOT_HM01) == TRUE)
|
||||
return TRUE;
|
||||
@@ -1358,64 +1357,64 @@ static bool8 sub_812BB10(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_812BB9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 RunHelpMenuSubroutine(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
switch (a0->field_0E)
|
||||
switch (helpListMenu->state)
|
||||
{
|
||||
case 8:
|
||||
return sub_812BC54(a0, a1);
|
||||
return HelpSystemSubroutine_PrintWelcomeMessage(helpListMenu, listMenuItemsBuffer);
|
||||
case 9:
|
||||
return sub_812BC80(a0, a1);
|
||||
return HelpSystemSubroutine_WelcomeWaitButton(helpListMenu, listMenuItemsBuffer);
|
||||
case 10:
|
||||
return sub_812BCA8(a0, a1);
|
||||
return HelpSystemSubroutine_WelcomeEndGotoMenu(helpListMenu, listMenuItemsBuffer);
|
||||
case 0:
|
||||
return sub_812BCD0(a0, a1);
|
||||
return HelpSystemSubroutine_MenuInputHandlerMain(helpListMenu, listMenuItemsBuffer);
|
||||
case 1:
|
||||
return sub_812BD2C(a0, a1);
|
||||
return HelpMenuSubroutine_InitSubmenu(helpListMenu, listMenuItemsBuffer);
|
||||
case 2:
|
||||
return sub_812BD64(a0, a1);
|
||||
return HelpMenuSubroutine_ReturnFromSubmenu(helpListMenu, listMenuItemsBuffer);
|
||||
case 3:
|
||||
return sub_812BD98(a0, a1);
|
||||
return HelpMenuSubroutine_SubmenuInputHandler(helpListMenu, listMenuItemsBuffer);
|
||||
case 4:
|
||||
return sub_812BE10(a0, a1);
|
||||
return HelpMenuSubroutine_HelpItemPrint(helpListMenu, listMenuItemsBuffer);
|
||||
case 5:
|
||||
return sub_812BEEC(a0, a1);
|
||||
return HelpMenuSubroutine_ReturnFromHelpItem(helpListMenu, listMenuItemsBuffer);
|
||||
case 6:
|
||||
return sub_812BF18(a0, a1);
|
||||
return HelpMenuSubroutine_HelpItemWaitButton(helpListMenu, listMenuItemsBuffer);
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
bool8 sub_812BC54(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpSystemSubroutine_PrintWelcomeMessage(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
sub_812BF74(gUnknown_841DFA5);
|
||||
sub_812BF5C();
|
||||
PrintTextOnPanel2Row52RightAlign(gUnknown_841DFA5);
|
||||
PrintWelcomeMessageOnPanel1();
|
||||
sub_813BDA4(1);
|
||||
sub_813BD5C(1);
|
||||
a0->field_0E = 9;
|
||||
helpListMenu->state = 9;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_812BC80(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpSystemSubroutine_WelcomeWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
if (JOY_NEW(A_BUTTON))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
a0->field_0E = 10;
|
||||
helpListMenu->state = 10;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_812BCA8(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpSystemSubroutine_WelcomeEndGotoMenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
gUnknown_3005E9C[2] = 0;
|
||||
sub_812BF94(a0);
|
||||
sub_812B4D8(a0, a1);
|
||||
a0->field_0E = 0;
|
||||
sHelpSystemState[2] = 0;
|
||||
ResetHelpSystemCursor(helpListMenu);
|
||||
BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
|
||||
helpListMenu->state = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpSystemSubroutine_MenuInputHandlerMain(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
s32 v0 = HelpSystem_GetMenuInput();
|
||||
switch (v0)
|
||||
@@ -1425,42 +1424,42 @@ bool8 sub_812BCD0(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
return FALSE;
|
||||
case -5:
|
||||
case -4:
|
||||
sub_812BF9C(a0, a1);
|
||||
PrintHelpSystemTopicMouseoverDescription(helpListMenu, listMenuItemsBuffer);
|
||||
break;
|
||||
case -3:
|
||||
case -1:
|
||||
break;
|
||||
default:
|
||||
gUnknown_3005E9C[1] = v0;
|
||||
a0->field_0E = 1;
|
||||
sHelpSystemState[1] = v0;
|
||||
helpListMenu->state = 1;
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_812BD2C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpMenuSubroutine_InitSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
gUnknown_3005E9C[0] = 1;
|
||||
gUnknown_3005E9C[2] = a0->field_0D;
|
||||
sub_812BF94(a0);
|
||||
sub_812B5A8(a0, a1);
|
||||
sHelpSystemState[0] = 1;
|
||||
sHelpSystemState[2] = helpListMenu->cursorPos;
|
||||
ResetHelpSystemCursor(helpListMenu);
|
||||
BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
|
||||
sub_813C75C();
|
||||
HelpSystem_SetInputDelay(2);
|
||||
a0->field_0E = 3;
|
||||
helpListMenu->state = 3;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_812BD64(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpMenuSubroutine_ReturnFromSubmenu(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
sub_813C004(0, 0);
|
||||
sub_813C004(1, 0);
|
||||
gUnknown_3005E9C[0] = 0;
|
||||
sub_812B4D8(a0, a1);
|
||||
a0->field_0E = 0;
|
||||
sHelpSystemState[0] = 0;
|
||||
BuildAndPrintMainTopicsListMenu(helpListMenu, listMenuItemsBuffer);
|
||||
helpListMenu->state = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpMenuSubroutine_SubmenuInputHandler(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
s32 v0 = HelpSystem_GetMenuInput();
|
||||
switch (v0)
|
||||
@@ -1468,7 +1467,7 @@ bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
case -6:
|
||||
return FALSE;
|
||||
case -2:
|
||||
a0->field_0E = 2;
|
||||
helpListMenu->state = 2;
|
||||
break;
|
||||
case -5:
|
||||
case -4:
|
||||
@@ -1476,8 +1475,8 @@ bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
case -1:
|
||||
break;
|
||||
default:
|
||||
gUnknown_3005E9C[3] = v0;
|
||||
a0->field_0E = 4;
|
||||
sHelpSystemState[3] = v0;
|
||||
helpListMenu->state = 4;
|
||||
break;
|
||||
}
|
||||
return TRUE;
|
||||
@@ -1485,60 +1484,60 @@ bool8 sub_812BD98(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
|
||||
void sub_812BDEC(void)
|
||||
{
|
||||
HelpSystem_PrintTextAt(gUnknown_845B080[gUnknown_3005E9C[1]], 0, 0);
|
||||
HelpSystem_PrintTextAt(sHelpSystemTopicPtrs[sHelpSystemState[1]], 0, 0);
|
||||
}
|
||||
|
||||
bool8 sub_812BE10(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpMenuSubroutine_HelpItemPrint(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
gUnknown_3005E9C[0] = 2;
|
||||
sHelpSystemState[0] = 2;
|
||||
sub_813BDA4(0);
|
||||
HelpSystem_FillPanel1();
|
||||
sub_812BF74(gUnknown_841DFBE);
|
||||
PrintTextOnPanel2Row52RightAlign(gUnknown_841DFBE);
|
||||
sub_813BDE8(1);
|
||||
sub_813BEE4(1);
|
||||
|
||||
if (gUnknown_3005E9C[1] == 0)
|
||||
if (sHelpSystemState[1] == 0)
|
||||
{
|
||||
HelpSystem_PrintTwoStrings(gUnknown_845B0B0[gUnknown_3005E9C[3]], gUnknown_845B164[gUnknown_3005E9C[3]]);
|
||||
HelpSystem_PrintTwoStrings(sHelpSystemSpecializedQuestionTextPtrs[sHelpSystemState[3]], sHelpSystemSpecializedAnswerTextPtrs[sHelpSystemState[3]]);
|
||||
}
|
||||
else if (gUnknown_3005E9C[1] == 1)
|
||||
else if (sHelpSystemState[1] == 1)
|
||||
{
|
||||
HelpSystem_PrintTwoStrings(gUnknown_845B218[gUnknown_3005E9C[3]], gUnknown_845B2DC[gUnknown_3005E9C[3]]);
|
||||
HelpSystem_PrintTwoStrings(sHelpSystemMenuTopicTextPtrs[sHelpSystemState[3]], sHelpSystemSpecializedControlsTextPtrs[sHelpSystemState[3]]);
|
||||
}
|
||||
else if (gUnknown_3005E9C[1] == 2)
|
||||
else if (sHelpSystemState[1] == 2)
|
||||
{
|
||||
HelpSystem_PrintTwoStrings(gUnknown_845B3A0[gUnknown_3005E9C[3]], gUnknown_845B450[gUnknown_3005E9C[3]]);
|
||||
HelpSystem_PrintTwoStrings(sHelpSystemSpecializedStringsTextPtrs[sHelpSystemState[3]], sHelpSystemSpecializedStringDefinitionsTextPtrs[sHelpSystemState[3]]);
|
||||
}
|
||||
else if (gUnknown_3005E9C[1] == 3)
|
||||
else if (sHelpSystemState[1] == 3)
|
||||
{
|
||||
HelpSystem_PrintTwoStrings(gUnknown_845B500[gUnknown_3005E9C[3]], gUnknown_845B520[gUnknown_3005E9C[3]]);
|
||||
HelpSystem_PrintTwoStrings(sHelpSystemGeneralTopicTextPtrs[sHelpSystemState[3]], sHelpSystemGeneralTopicDescriptionTextPtrs[sHelpSystemState[3]]);
|
||||
}
|
||||
else
|
||||
{
|
||||
HelpSystem_PrintTwoStrings(gUnknown_845B540[gUnknown_3005E9C[3]], gUnknown_845B5D0[gUnknown_3005E9C[3]]);
|
||||
HelpSystem_PrintTwoStrings(sHelpSystemTypeMatchupTextPtrs[sHelpSystemState[3]], sHelpSystemTypeMatchupDescriptionTextPtrs[sHelpSystemState[3]]);
|
||||
}
|
||||
sub_813BDA4(1);
|
||||
sub_813BD5C(1);
|
||||
a0->field_0E = 6;
|
||||
helpListMenu->state = 6;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_812BEEC(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpMenuSubroutine_ReturnFromHelpItem(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
gUnknown_3005E9C[0] = 1;
|
||||
sub_812B5A8(a0, a1);
|
||||
sHelpSystemState[0] = 1;
|
||||
BuildAndPrintSubmenuList(helpListMenu, listMenuItemsBuffer);
|
||||
sub_813C75C();
|
||||
HelpSystem_SetInputDelay(2);
|
||||
a0->field_0E = 3;
|
||||
helpListMenu->state = 3;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
bool8 HelpMenuSubroutine_HelpItemWaitButton(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
if (JOY_NEW(B_BUTTON) || JOY_NEW(A_BUTTON))
|
||||
{
|
||||
PlaySE(SE_SELECT);
|
||||
a0->field_0E = 5;
|
||||
helpListMenu->state = 5;
|
||||
return TRUE;
|
||||
}
|
||||
if (JOY_NEW(L_BUTTON | R_BUTTON))
|
||||
@@ -1546,13 +1545,13 @@ bool8 sub_812BF18(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void sub_812BF5C(void)
|
||||
static void PrintWelcomeMessageOnPanel1(void)
|
||||
{
|
||||
HelpSystem_FillPanel1();
|
||||
HelpSystem_PrintTextAt(gUnknown_81B2FC9, 0, 0);
|
||||
}
|
||||
|
||||
static void sub_812BF74(const u8 * str)
|
||||
static void PrintTextOnPanel2Row52RightAlign(const u8 * str)
|
||||
{
|
||||
HelpSystem_FillPanel2();
|
||||
HelpSystem_PrintTextRightAlign_Row52(str);
|
||||
@@ -1560,21 +1559,21 @@ static void sub_812BF74(const u8 * str)
|
||||
|
||||
u8 sub_812BF88(void)
|
||||
{
|
||||
return gUnknown_3005E9C[0];
|
||||
return sHelpSystemState[0];
|
||||
}
|
||||
|
||||
static void sub_812BF94(struct HelpSystemListMenu * a0)
|
||||
static void ResetHelpSystemCursor(struct HelpSystemListMenu * helpListMenu)
|
||||
{
|
||||
a0->field_0C = 0;
|
||||
a0->field_0D = 0;
|
||||
helpListMenu->itemsAbove = 0;
|
||||
helpListMenu->cursorPos = 0;
|
||||
}
|
||||
|
||||
static void sub_812BF9C(struct HelpSystemListMenu * a0, struct ListMenuItem * a1)
|
||||
static void PrintHelpSystemTopicMouseoverDescription(struct HelpSystemListMenu * helpListMenu, struct ListMenuItem * listMenuItemsBuffer)
|
||||
{
|
||||
s32 index = a1[a0->field_0C + a0->field_0D].index;
|
||||
s32 index = listMenuItemsBuffer[helpListMenu->itemsAbove + helpListMenu->cursorPos].index;
|
||||
if (index == -2)
|
||||
HelpSystem_PrintText_813C584(gUnknown_845B098[5]);
|
||||
HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[5]);
|
||||
else
|
||||
HelpSystem_PrintText_813C584(gUnknown_845B098[index]);
|
||||
HelpSystem_PrintText_813C584(sHelpSystemTopicMouseoverDescriptionPtrs[index]);
|
||||
sub_813BE30(1);
|
||||
}
|
||||
|
||||
+2
-2
@@ -1431,7 +1431,7 @@ static void sub_80EDB70(struct IntroSequenceData * this)
|
||||
{
|
||||
this->field_0018->pos1.x += this->field_0018->pos2.x;
|
||||
this->field_0018->pos1.y += this->field_0018->pos2.y;
|
||||
sub_8007FFC(this->field_0018, 0, 0x2A);
|
||||
obj_pos2_update_enable(this->field_0018, 0, 0x2A);
|
||||
this->field_0018->callback = SpriteCallbackDummy;
|
||||
StartSpriteAffineAnim(this->field_0018, 1);
|
||||
}
|
||||
@@ -1448,7 +1448,7 @@ static void sub_80EDBAC(struct IntroSequenceData * this)
|
||||
{
|
||||
StartSpriteAffineAnim(this->field_0028[i], 1);
|
||||
this->field_0028[i]->callback = nullsub_83;
|
||||
sub_8007FFC(this->field_0028[i], gUnknown_840BBB8[i][0], gUnknown_840BBB8[i][1]);
|
||||
obj_pos2_update_enable(this->field_0028[i], gUnknown_840BBB8[i][0], gUnknown_840BBB8[i][1]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -309,7 +309,7 @@ static void MoveRelearnerLoadBgGfx(void)
|
||||
FillBgTilemapBufferRect(0, 0x000, 0, 0, 30, 20, 0xF);
|
||||
SetBgTilemapBuffer(1, sMoveRelearner->bg1TilemapBuffer);
|
||||
TextWindow_SetUserSelectedFrame(0, 1, 0xE0);
|
||||
sub_8107D38(0xD0, 1);
|
||||
ListMenuLoadStdPalAt(0xD0, 1);
|
||||
LoadPalette(gUnknown_8E97DDC, 0x00, 0x20);
|
||||
DecompressAndLoadBgGfxUsingHeap(1, gUnknown_8E97DFC, 0, 0, 0);
|
||||
CopyToBgTilemapBuffer(1, gUnknown_8E97EC4, 0, 0);
|
||||
|
||||
@@ -0,0 +1,402 @@
|
||||
#include "global.h"
|
||||
#include "librfu.h"
|
||||
|
||||
static void sio32intr_clock_master(void);
|
||||
static void sio32intr_clock_slave(void);
|
||||
static u16 handshake_wait(u16 slot);
|
||||
static void STWI_set_timer_in_RAM(u8 count);
|
||||
static void STWI_stop_timer_in_RAM(void);
|
||||
static void STWI_init_slave(void);
|
||||
static void Callback_Dummy_M(int reqCommandId, int error, void (*callbackM)());
|
||||
static void Callback_Dummy_S(u16 reqCommandId, void (*callbackS)(u16));
|
||||
static void Callback_Dummy_ID(void (*callbackId)(void));
|
||||
|
||||
void IntrSIO32(void)
|
||||
{
|
||||
if (gSTWIStatus->state == 10)
|
||||
{
|
||||
if (gSTWIStatus->callbackID != NULL)
|
||||
Callback_Dummy_ID(gSTWIStatus->callbackID);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gSTWIStatus->msMode == AGB_CLK_MASTER)
|
||||
sio32intr_clock_master();
|
||||
else
|
||||
sio32intr_clock_slave();
|
||||
}
|
||||
}
|
||||
|
||||
static void sio32intr_clock_master(void)
|
||||
{
|
||||
u32 regSIODATA32;
|
||||
u32 ackLen;
|
||||
|
||||
STWI_set_timer_in_RAM(80);
|
||||
regSIODATA32 = REG_SIODATA32;
|
||||
|
||||
if (gSTWIStatus->state == 0) // master send req
|
||||
{
|
||||
if (regSIODATA32 == 0x80000000)
|
||||
{
|
||||
if (gSTWIStatus->reqNext <= gSTWIStatus->reqLength)
|
||||
{
|
||||
REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket->rfuPacket8.data)[gSTWIStatus->reqNext];
|
||||
gSTWIStatus->reqNext++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSTWIStatus->state = 1; // master wait ack
|
||||
REG_SIODATA32 = 0x80000000;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
STWI_stop_timer_in_RAM();
|
||||
STWI_set_timer_in_RAM(130);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (gSTWIStatus->state == 1) // master wait ack
|
||||
{
|
||||
if ((regSIODATA32 & 0xFFFF0000) == 0x99660000)
|
||||
{
|
||||
gSTWIStatus->ackNext = 0;
|
||||
((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
|
||||
gSTWIStatus->ackNext++;
|
||||
gSTWIStatus->ackActiveCommand = regSIODATA32;
|
||||
gSTWIStatus->ackLength = ackLen = regSIODATA32 >> 8;
|
||||
if ((ackLen = gSTWIStatus->ackLength) >= gSTWIStatus->ackNext)
|
||||
{
|
||||
gSTWIStatus->state = 2; // master receive ack
|
||||
REG_SIODATA32 = 0x80000000;
|
||||
}
|
||||
else
|
||||
{
|
||||
gSTWIStatus->state = 3; // master done ack
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
STWI_stop_timer_in_RAM();
|
||||
STWI_set_timer_in_RAM(130);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (gSTWIStatus->state == 2) // master receive ack
|
||||
{
|
||||
((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->ackNext] = regSIODATA32;
|
||||
gSTWIStatus->ackNext++;
|
||||
if (gSTWIStatus->ackLength < gSTWIStatus->ackNext)
|
||||
gSTWIStatus->state = 3; // master done ack
|
||||
else
|
||||
REG_SIODATA32 = 0x80000000;
|
||||
}
|
||||
|
||||
if (handshake_wait(1) == 1)
|
||||
return;
|
||||
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS | SIO_MULTI_SD;
|
||||
|
||||
if (handshake_wait(0) == 1)
|
||||
return;
|
||||
|
||||
STWI_stop_timer_in_RAM();
|
||||
|
||||
if (gSTWIStatus->state == 3) // master done ack
|
||||
{
|
||||
if (
|
||||
gSTWIStatus->ackActiveCommand == (0x80 | ID_MS_CHANGE_REQ)
|
||||
|| gSTWIStatus->ackActiveCommand == (0x80 | ID_DATA_TX_AND_CHANGE_REQ)
|
||||
|| gSTWIStatus->ackActiveCommand == (0x80 | ID_UNK35_REQ)
|
||||
|| gSTWIStatus->ackActiveCommand == (0x80 | ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
|
||||
)
|
||||
{
|
||||
|
||||
gSTWIStatus->msMode = AGB_CLK_SLAVE;
|
||||
REG_SIODATA32 = 0x80000000;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
|
||||
gSTWIStatus->state = 5; // slave receive req init
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gSTWIStatus->ackActiveCommand == 0xEE)
|
||||
{
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
|
||||
gSTWIStatus->state = 4; // error
|
||||
gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
|
||||
}
|
||||
else
|
||||
{
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
|
||||
gSTWIStatus->state = 4; // error
|
||||
}
|
||||
}
|
||||
gSTWIStatus->sending = 0;
|
||||
if (gSTWIStatus->callbackM != NULL)
|
||||
Callback_Dummy_M(gSTWIStatus->reqActiveCommand, gSTWIStatus->error, gSTWIStatus->callbackM);
|
||||
}
|
||||
else
|
||||
{
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS | SIO_ENABLE;
|
||||
}
|
||||
}
|
||||
|
||||
static void sio32intr_clock_slave(void)
|
||||
{
|
||||
u32 regSIODATA32;
|
||||
u32 r0;
|
||||
register u32 reqLen asm("r2");
|
||||
|
||||
gSTWIStatus->timerActive = 0;
|
||||
STWI_set_timer_in_RAM(100);
|
||||
if (handshake_wait(0) == 1)
|
||||
return;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_MULTI_SD;
|
||||
regSIODATA32 = REG_SIODATA32;
|
||||
if (gSTWIStatus->state == 5) // slave receive req init
|
||||
{
|
||||
((u32*)gSTWIStatus->rxPacket)[0] = regSIODATA32;
|
||||
gSTWIStatus->reqNext = 1;
|
||||
r0 = 0x99660000;
|
||||
if ((regSIODATA32 >> 16) == (r0 >> 16))
|
||||
{
|
||||
gSTWIStatus->reqLength = reqLen = regSIODATA32 >> 8;
|
||||
gSTWIStatus->reqActiveCommand = regSIODATA32;
|
||||
if (gSTWIStatus->reqLength == 0)
|
||||
{
|
||||
if (
|
||||
gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ
|
||||
|| gSTWIStatus->reqActiveCommand == ID_DATA_READY_AND_CHANGE_REQ
|
||||
|| gSTWIStatus->reqActiveCommand == ID_DISCONNECTED_AND_CHANGE_REQ
|
||||
|| gSTWIStatus->reqActiveCommand == ID_UNK36_REQ
|
||||
)
|
||||
{
|
||||
gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80;
|
||||
((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 + gSTWIStatus->ackActiveCommand;
|
||||
gSTWIStatus->ackLength = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE;
|
||||
if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D)
|
||||
{
|
||||
((u32*)gSTWIStatus->txPacket)[1] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
((u32*)gSTWIStatus->txPacket)[1] = 2;
|
||||
}
|
||||
gSTWIStatus->ackLength = 1;
|
||||
gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
|
||||
}
|
||||
REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
|
||||
gSTWIStatus->ackNext = 1;
|
||||
gSTWIStatus->state = 7; // slave send ack
|
||||
}
|
||||
else
|
||||
{
|
||||
REG_SIODATA32 = 0x80000000;
|
||||
gSTWIStatus->reqNext = 1;
|
||||
gSTWIStatus->state = 6; // slave receive req
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
STWI_stop_timer_in_RAM();
|
||||
STWI_set_timer_in_RAM(100);
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (gSTWIStatus->state == 6) // slave receive req
|
||||
{
|
||||
((u32*)gSTWIStatus->rxPacket)[gSTWIStatus->reqNext] = regSIODATA32;
|
||||
gSTWIStatus->reqNext++;
|
||||
if (gSTWIStatus->reqLength < gSTWIStatus->reqNext)
|
||||
{
|
||||
if (
|
||||
gSTWIStatus->reqActiveCommand == ID_DATA_READY_AND_CHANGE_REQ
|
||||
|| gSTWIStatus->reqActiveCommand == ID_DISCONNECTED_AND_CHANGE_REQ
|
||||
|| gSTWIStatus->reqActiveCommand == ID_UNK36_REQ
|
||||
)
|
||||
{
|
||||
gSTWIStatus->ackActiveCommand = gSTWIStatus->reqActiveCommand + 0x80;
|
||||
((u32*)gSTWIStatus->txPacket)[0] = 0x99660000 | gSTWIStatus->ackActiveCommand;
|
||||
gSTWIStatus->ackLength = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
((u32*)gSTWIStatus->txPacket)[0] = 0x996601EE;
|
||||
if (gSTWIStatus->reqActiveCommand >= 0x10 && gSTWIStatus->reqActiveCommand <= 0x3D)
|
||||
{
|
||||
((u32*)gSTWIStatus->txPacket)[1] = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
((u32*)gSTWIStatus->txPacket)[1] = 2;
|
||||
}
|
||||
gSTWIStatus->ackLength = 1;
|
||||
gSTWIStatus->error = ERR_REQ_CMD_ACK_REJECTION;
|
||||
}
|
||||
REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[0];
|
||||
gSTWIStatus->ackNext = 1;
|
||||
gSTWIStatus->state = 7; // slave send ack
|
||||
}
|
||||
else
|
||||
{
|
||||
REG_SIODATA32 = 0x80000000;
|
||||
}
|
||||
}
|
||||
else if (gSTWIStatus->state == 7) // slave send ack
|
||||
{
|
||||
if (regSIODATA32 == 0x80000000)
|
||||
{
|
||||
if (gSTWIStatus->ackLength < gSTWIStatus->ackNext)
|
||||
{
|
||||
gSTWIStatus->state = 8; // slave done ack
|
||||
}
|
||||
else
|
||||
{
|
||||
REG_SIODATA32 = ((u32*)gSTWIStatus->txPacket)[gSTWIStatus->ackNext];
|
||||
gSTWIStatus->ackNext++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
STWI_stop_timer_in_RAM();
|
||||
STWI_set_timer_in_RAM(100);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (handshake_wait(1) == 1)
|
||||
return;
|
||||
if (gSTWIStatus->state == 8) // slave done ack
|
||||
{
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
|
||||
STWI_stop_timer_in_RAM();
|
||||
if (gSTWIStatus->error == ERR_REQ_CMD_ACK_REJECTION)
|
||||
{
|
||||
STWI_init_slave();
|
||||
if (gSTWIStatus->callbackS != NULL)
|
||||
{
|
||||
Callback_Dummy_S(0x1EE, gSTWIStatus->callbackS);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
REG_SIODATA32 = 0;
|
||||
REG_SIOCNT = 0;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
|
||||
gSTWIStatus->msMode = AGB_CLK_MASTER;
|
||||
gSTWIStatus->state = 0; // master send req
|
||||
if (gSTWIStatus->callbackS != NULL)
|
||||
{
|
||||
Callback_Dummy_S((gSTWIStatus->reqLength << 8) | (gSTWIStatus->reqActiveCommand), gSTWIStatus->callbackS);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
REG_IME = 0;
|
||||
if (REG_TM0CNT_H & TIMER_ENABLE)
|
||||
{
|
||||
if ((REG_TM0CNT_H & 0x03) == TIMER_1CLK)
|
||||
{
|
||||
while (REG_TM0CNT_L > 0xFF9B);
|
||||
}
|
||||
else
|
||||
{
|
||||
while (REG_TM0CNT_L > 0xFFFE);
|
||||
}
|
||||
}
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
|
||||
REG_IME = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static u16 handshake_wait(u16 slot)
|
||||
{
|
||||
do
|
||||
{
|
||||
if ((gSTWIStatus->timerActive & 0xFF) == 1)
|
||||
{
|
||||
gSTWIStatus->timerActive = 0;
|
||||
return 1;
|
||||
}
|
||||
} while ((REG_SIOCNT & SIO_MULTI_SI) != (slot << SIO_MULTI_SI_SHIFT));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void STWI_set_timer_in_RAM(u8 count)
|
||||
{
|
||||
vu16* regTMCNTL = (vu16*)(REG_ADDR_TMCNT_L + gSTWIStatus->timerSelect * 4);
|
||||
vu16* regTMCNTH = (vu16*)(REG_ADDR_TMCNT_H + gSTWIStatus->timerSelect * 4);
|
||||
REG_IME = 0;
|
||||
switch (count)
|
||||
{
|
||||
case 50:
|
||||
*regTMCNTL = 0xFCCB;
|
||||
gSTWIStatus->timerState = 1;
|
||||
break;
|
||||
case 80:
|
||||
*regTMCNTL = 0xFAE0;
|
||||
gSTWIStatus->timerState = 2;
|
||||
break;
|
||||
case 100:
|
||||
*regTMCNTL = 0xF996;
|
||||
gSTWIStatus->timerState = 3;
|
||||
break;
|
||||
case 130:
|
||||
*regTMCNTL = 0xF7AD;
|
||||
gSTWIStatus->timerState = 4;
|
||||
break;
|
||||
}
|
||||
*regTMCNTH = TIMER_ENABLE | TIMER_64CLK | TIMER_256CLK | TIMER_INTR_ENABLE;
|
||||
REG_IF = INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect;
|
||||
REG_IME = 1;
|
||||
}
|
||||
|
||||
static void STWI_stop_timer_in_RAM(void)
|
||||
{
|
||||
gSTWIStatus->timerState = 0;
|
||||
REG_TMCNT_L(gSTWIStatus->timerSelect) = 0;
|
||||
REG_TMCNT_H(gSTWIStatus->timerSelect) = 0;
|
||||
}
|
||||
|
||||
static void STWI_init_slave(void)
|
||||
{
|
||||
gSTWIStatus->state = 5; // slave receive req init
|
||||
gSTWIStatus->msMode = AGB_CLK_SLAVE;
|
||||
gSTWIStatus->reqLength = 0;
|
||||
gSTWIStatus->reqNext = 0;
|
||||
gSTWIStatus->reqActiveCommand = 0;
|
||||
gSTWIStatus->ackLength = 0;
|
||||
gSTWIStatus->ackNext = 0;
|
||||
gSTWIStatus->ackActiveCommand = 0;
|
||||
gSTWIStatus->timerState = 0;
|
||||
gSTWIStatus->timerActive = 0;
|
||||
gSTWIStatus->error = 0;
|
||||
gSTWIStatus->recoveryCount = 0;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_57600_BPS | SIO_ENABLE;
|
||||
}
|
||||
|
||||
NAKED
|
||||
static void Callback_Dummy_M(int reqCommandId, int error, void (*callbackM)())
|
||||
{
|
||||
asm("bx r2");
|
||||
}
|
||||
|
||||
NAKED
|
||||
static void Callback_Dummy_S(u16 reqCommandId, void (*callbackS)(u16))
|
||||
{
|
||||
asm("bx r1");
|
||||
}
|
||||
|
||||
NAKED
|
||||
static void Callback_Dummy_ID(void (*callbackId)(void))
|
||||
{
|
||||
asm("bx r0");
|
||||
}
|
||||
+904
-840
File diff suppressed because it is too large
Load Diff
+76
-66
@@ -4,44 +4,56 @@ static void Sio32IDIntr(void);
|
||||
static void Sio32IDInit(void);
|
||||
static s32 Sio32IDMain(void);
|
||||
|
||||
struct RfuSIO32Id
|
||||
{
|
||||
u8 MS_mode;
|
||||
u8 state;
|
||||
u16 count;
|
||||
u16 send_id;
|
||||
u16 recv_id;
|
||||
u16 unk8; // unused
|
||||
u16 lastId;
|
||||
};
|
||||
|
||||
struct RfuSIO32Id gRfuSIO32Id;
|
||||
|
||||
static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO
|
||||
static const char Sio32IDLib_Var[] = "Sio32ID_030820";
|
||||
|
||||
s32 AgbRFU_checkID(u8 r5)
|
||||
s32 AgbRFU_checkID(u8 maxTries)
|
||||
{
|
||||
u16 r8;
|
||||
vu16 *r4;
|
||||
s32 r6;
|
||||
u16 ieBak;
|
||||
vu16 *regTMCNTL;
|
||||
s32 id;
|
||||
|
||||
// Interrupts must be enabled
|
||||
if (REG_IME == 0)
|
||||
return -1;
|
||||
r8 = REG_IE;
|
||||
ieBak = REG_IE;
|
||||
gSTWIStatus->state = 10;
|
||||
STWI_set_Callback_ID(Sio32IDIntr);
|
||||
Sio32IDInit();
|
||||
r4 = ®_TMCNT_L(gSTWIStatus->timerSelect);
|
||||
r5 *= 8;
|
||||
while (--r5 != 0xFF)
|
||||
regTMCNTL = ®_TMCNT_L(gSTWIStatus->timerSelect);
|
||||
maxTries *= 8;
|
||||
while (--maxTries != 0xFF)
|
||||
{
|
||||
r6 = Sio32IDMain();
|
||||
if (r6 != 0)
|
||||
id = Sio32IDMain();
|
||||
if (id != 0)
|
||||
break;
|
||||
r4[1] = 0;
|
||||
r4[0] = 0;
|
||||
r4[1] = TIMER_1024CLK | TIMER_ENABLE;
|
||||
while (r4[0] < 32)
|
||||
regTMCNTL[1] = 0;
|
||||
regTMCNTL[0] = 0;
|
||||
regTMCNTL[1] = TIMER_1024CLK | TIMER_ENABLE;
|
||||
while (regTMCNTL[0] < 32)
|
||||
;
|
||||
r4[1] = 0;
|
||||
r4[0] = 0;
|
||||
regTMCNTL[1] = 0;
|
||||
regTMCNTL[0] = 0;
|
||||
}
|
||||
REG_IME = 0;
|
||||
REG_IE = r8;
|
||||
REG_IE = ieBak;
|
||||
REG_IME = 1;
|
||||
gSTWIStatus->state = 0;
|
||||
STWI_set_Callback_ID(NULL);
|
||||
return r6;
|
||||
return id;
|
||||
}
|
||||
|
||||
static void Sio32IDInit(void)
|
||||
@@ -58,107 +70,105 @@ static void Sio32IDInit(void)
|
||||
|
||||
static s32 Sio32IDMain(void)
|
||||
{
|
||||
u8 r12;
|
||||
|
||||
switch (r12 = gRfuSIO32Id.unk1)
|
||||
switch (gRfuSIO32Id.state)
|
||||
{
|
||||
case 0:
|
||||
gRfuSIO32Id.unk0 = 1;
|
||||
gRfuSIO32Id.MS_mode = AGB_CLK_MASTER;
|
||||
REG_SIOCNT |= SIO_38400_BPS;
|
||||
REG_IME = r12;
|
||||
REG_IME = 0;
|
||||
REG_IE |= INTR_FLAG_SERIAL;
|
||||
REG_IME = 1;
|
||||
gRfuSIO32Id.unk1 = 1;
|
||||
gRfuSIO32Id.state = 1;
|
||||
*(vu8 *)®_SIOCNT |= SIO_ENABLE;
|
||||
break;
|
||||
case 1:
|
||||
if (gRfuSIO32Id.unkA == 0)
|
||||
if (gRfuSIO32Id.lastId == 0)
|
||||
{
|
||||
if (gRfuSIO32Id.unk0 == 1)
|
||||
if (gRfuSIO32Id.MS_mode == AGB_CLK_MASTER)
|
||||
{
|
||||
if (gRfuSIO32Id.unk2 == 0)
|
||||
if (gRfuSIO32Id.count == 0)
|
||||
{
|
||||
REG_IME = gRfuSIO32Id.unk2;
|
||||
REG_IME = 0;
|
||||
REG_SIOCNT |= SIO_ENABLE;
|
||||
REG_IME = r12;
|
||||
REG_IME = 1;
|
||||
}
|
||||
}
|
||||
else if (gRfuSIO32Id.unk4 != 0x8001 && !gRfuSIO32Id.unk2)
|
||||
else if (gRfuSIO32Id.send_id != RFU_ID && !gRfuSIO32Id.count)
|
||||
{
|
||||
REG_IME = gRfuSIO32Id.unk2;
|
||||
REG_IME = 0;
|
||||
REG_IE &= ~INTR_FLAG_SERIAL;
|
||||
REG_IME = r12;
|
||||
REG_SIOCNT = gRfuSIO32Id.unk2;
|
||||
REG_IME = 1;
|
||||
REG_SIOCNT = 0;
|
||||
REG_SIOCNT = SIO_32BIT_MODE;
|
||||
REG_IF = INTR_FLAG_SERIAL;
|
||||
REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE;
|
||||
REG_IME = gRfuSIO32Id.unk2;
|
||||
REG_IME = 0;
|
||||
REG_IE |= INTR_FLAG_SERIAL;
|
||||
REG_IME = r12;
|
||||
REG_IME = 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
gRfuSIO32Id.unk1 = 2;
|
||||
gRfuSIO32Id.state = 2;
|
||||
// fallthrough
|
||||
}
|
||||
default:
|
||||
return gRfuSIO32Id.unkA;
|
||||
return gRfuSIO32Id.lastId;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void Sio32IDIntr(void)
|
||||
{
|
||||
u32 r5;
|
||||
u16 r0;
|
||||
u32 regSIODATA32;
|
||||
u16 delay;
|
||||
#ifndef NONMATCHING
|
||||
register u32 r1 asm("r1");
|
||||
register u16 r0_ asm("r0");
|
||||
register u32 rfuSIO32IdUnk0_times_16 asm("r1");
|
||||
register u16 negRfuSIO32IdUnk6 asm("r0");
|
||||
#else
|
||||
u32 r1;
|
||||
u16 r0_;
|
||||
u32 rfuSIO32IdUnk0_times_16;
|
||||
u16 negRfuSIO32IdUnk6;
|
||||
#endif
|
||||
|
||||
r5 = REG_SIODATA32;
|
||||
if (gRfuSIO32Id.unk0 != 1)
|
||||
regSIODATA32 = REG_SIODATA32;
|
||||
if (gRfuSIO32Id.MS_mode != AGB_CLK_MASTER)
|
||||
REG_SIOCNT |= SIO_ENABLE;
|
||||
r1 = 16 * gRfuSIO32Id.unk0; // to handle side effect of inline asm
|
||||
r1 = (r5 << r1) >> 16;
|
||||
r5 = (r5 << 16 * (1 - gRfuSIO32Id.unk0)) >> 16;
|
||||
if (gRfuSIO32Id.unkA == 0)
|
||||
rfuSIO32IdUnk0_times_16 = 16 * gRfuSIO32Id.MS_mode; // to handle side effect of inline asm
|
||||
rfuSIO32IdUnk0_times_16 = (regSIODATA32 << rfuSIO32IdUnk0_times_16) >> 16;
|
||||
regSIODATA32 = (regSIODATA32 << 16 * (1 - gRfuSIO32Id.MS_mode)) >> 16;
|
||||
if (gRfuSIO32Id.lastId == 0)
|
||||
{
|
||||
if (r1 == gRfuSIO32Id.unk6)
|
||||
if (rfuSIO32IdUnk0_times_16 == gRfuSIO32Id.recv_id)
|
||||
{
|
||||
if (gRfuSIO32Id.unk2 > 3)
|
||||
if (gRfuSIO32Id.count > 3)
|
||||
{
|
||||
gRfuSIO32Id.unkA = r5;
|
||||
gRfuSIO32Id.lastId = regSIODATA32;
|
||||
}
|
||||
else if (r1 == (u16)~gRfuSIO32Id.unk4)
|
||||
else if (rfuSIO32IdUnk0_times_16 == (u16)~gRfuSIO32Id.send_id)
|
||||
{
|
||||
r0_ = ~gRfuSIO32Id.unk6;
|
||||
if (r5 == r0_)
|
||||
++gRfuSIO32Id.unk2;
|
||||
negRfuSIO32IdUnk6 = ~gRfuSIO32Id.recv_id;
|
||||
if (regSIODATA32 == negRfuSIO32IdUnk6)
|
||||
++gRfuSIO32Id.count;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gRfuSIO32Id.unk2 = gRfuSIO32Id.unkA;
|
||||
gRfuSIO32Id.count = 0;
|
||||
}
|
||||
}
|
||||
if (gRfuSIO32Id.unk2 < 4)
|
||||
gRfuSIO32Id.unk4 = *(gRfuSIO32Id.unk2 + Sio32ConnectionData);
|
||||
if (gRfuSIO32Id.count < 4)
|
||||
gRfuSIO32Id.send_id = *(gRfuSIO32Id.count + Sio32ConnectionData);
|
||||
else
|
||||
gRfuSIO32Id.unk4 = 0x8001;
|
||||
gRfuSIO32Id.unk6 = ~r5;
|
||||
REG_SIODATA32 = (gRfuSIO32Id.unk4 << 16 * (1 - gRfuSIO32Id.unk0))
|
||||
+ (gRfuSIO32Id.unk6 << 16 * gRfuSIO32Id.unk0);
|
||||
if (gRfuSIO32Id.unk0 == 1 && (gRfuSIO32Id.unk2 || r5 == 0x494E))
|
||||
gRfuSIO32Id.send_id = RFU_ID;
|
||||
gRfuSIO32Id.recv_id = ~regSIODATA32;
|
||||
REG_SIODATA32 = (gRfuSIO32Id.send_id << 16 * (1 - gRfuSIO32Id.MS_mode))
|
||||
+ (gRfuSIO32Id.recv_id << 16 * gRfuSIO32Id.MS_mode);
|
||||
if (gRfuSIO32Id.MS_mode == AGB_CLK_MASTER && (gRfuSIO32Id.count != 0 || regSIODATA32 == 0x494e))
|
||||
{
|
||||
for (r0 = 0; r0 < 600; ++r0)
|
||||
for (delay = 0; delay < 600; ++delay)
|
||||
;
|
||||
if (gRfuSIO32Id.unkA == 0)
|
||||
if (gRfuSIO32Id.lastId == 0)
|
||||
REG_SIOCNT |= SIO_ENABLE;
|
||||
}
|
||||
}
|
||||
|
||||
+42
-39
@@ -28,8 +28,8 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
|
||||
}
|
||||
gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc;
|
||||
gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc;
|
||||
gSTWIStatus->msMode = 1;
|
||||
gSTWIStatus->state = 0;
|
||||
gSTWIStatus->msMode = AGB_CLK_MASTER;
|
||||
gSTWIStatus->state = 0; // master send req
|
||||
gSTWIStatus->reqLength = 0;
|
||||
gSTWIStatus->reqNext = 0;
|
||||
gSTWIStatus->ackLength = 0;
|
||||
@@ -39,7 +39,7 @@ void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, b
|
||||
gSTWIStatus->timerActive = 0;
|
||||
gSTWIStatus->error = 0;
|
||||
gSTWIStatus->recoveryCount = 0;
|
||||
gSTWIStatus->unk_2c = 0;
|
||||
gSTWIStatus->sending = 0;
|
||||
REG_RCNT = 0x100; // TODO: mystery bit?
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
|
||||
STWI_init_Callback_M();
|
||||
@@ -71,7 +71,7 @@ void AgbRFU_SoftReset(void)
|
||||
*timerH = 3;
|
||||
REG_RCNT = 0x80A0;
|
||||
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
|
||||
gSTWIStatus->state = 0;
|
||||
gSTWIStatus->state = 0; // master send req
|
||||
gSTWIStatus->reqLength = 0;
|
||||
gSTWIStatus->reqNext = 0;
|
||||
gSTWIStatus->reqActiveCommand = 0;
|
||||
@@ -81,9 +81,9 @@ void AgbRFU_SoftReset(void)
|
||||
gSTWIStatus->timerState = 0;
|
||||
gSTWIStatus->timerActive = 0;
|
||||
gSTWIStatus->error = 0;
|
||||
gSTWIStatus->msMode = 1;
|
||||
gSTWIStatus->msMode = AGB_CLK_MASTER;
|
||||
gSTWIStatus->recoveryCount = 0;
|
||||
gSTWIStatus->unk_2c = 0;
|
||||
gSTWIStatus->sending = 0;
|
||||
}
|
||||
|
||||
void STWI_set_MS_mode(u8 mode)
|
||||
@@ -131,12 +131,12 @@ void STWI_set_Callback_S(void (*callbackS)(u16))
|
||||
|
||||
void STWI_set_Callback_ID(void (*func)(void)) // name in SDK, but is actually setting a function pointer
|
||||
{
|
||||
gSTWIStatus->unk_20 = func;
|
||||
gSTWIStatus->callbackID = func;
|
||||
}
|
||||
|
||||
u16 STWI_poll_CommandEnd(void)
|
||||
{
|
||||
while (gSTWIStatus->unk_2c == TRUE)
|
||||
while (gSTWIStatus->sending == 1)
|
||||
;
|
||||
return gSTWIStatus->error;
|
||||
}
|
||||
@@ -195,7 +195,7 @@ void STWI_send_ConfigStatusREQ(void)
|
||||
}
|
||||
}
|
||||
|
||||
void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
|
||||
void STWI_send_GameConfigREQ(const u8 *serial_gname, const u8 *uname)
|
||||
{
|
||||
u8 *packetBytes;
|
||||
s32 i;
|
||||
@@ -203,29 +203,28 @@ void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
|
||||
if (!STWI_init(ID_GAME_CONFIG_REQ))
|
||||
{
|
||||
gSTWIStatus->reqLength = 6;
|
||||
// TODO: what is unk1
|
||||
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
|
||||
packetBytes += sizeof(u32);
|
||||
*(u16 *)packetBytes = *(u16 *)unk1;
|
||||
*(u16 *)packetBytes = *(u16 *)serial_gname;
|
||||
packetBytes += sizeof(u16);
|
||||
unk1 += sizeof(u16);
|
||||
serial_gname += sizeof(u16);
|
||||
for (i = 0; i < 14; ++i)
|
||||
{
|
||||
*packetBytes = *unk1;
|
||||
*packetBytes = *serial_gname;
|
||||
++packetBytes;
|
||||
++unk1;
|
||||
++serial_gname;
|
||||
}
|
||||
for (i = 0; i < 8; ++i)
|
||||
{
|
||||
*packetBytes = *data;
|
||||
*packetBytes = *uname;
|
||||
++packetBytes;
|
||||
++data;
|
||||
++uname;
|
||||
}
|
||||
STWI_start_Command();
|
||||
}
|
||||
}
|
||||
|
||||
void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
|
||||
void STWI_send_SystemConfigREQ(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer)
|
||||
{
|
||||
if (!STWI_init(ID_SYSTEM_CONFIG_REQ))
|
||||
{
|
||||
@@ -234,9 +233,9 @@ void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
|
||||
gSTWIStatus->reqLength = 1;
|
||||
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
|
||||
packetBytes += sizeof(u32);
|
||||
*packetBytes++ = unk3;
|
||||
*packetBytes++ = unk2;
|
||||
*(u16*)packetBytes = unk1;
|
||||
*packetBytes++ = mcTimer;
|
||||
*packetBytes++ = maxMFrame;
|
||||
*(u16*)packetBytes = availSlotFlag;
|
||||
STWI_start_Command();
|
||||
}
|
||||
}
|
||||
@@ -499,20 +498,17 @@ static void STWI_intr_timer(void)
|
||||
STWI_stop_timer();
|
||||
STWI_reset_ClockCounter();
|
||||
if (gSTWIStatus->callbackM != NULL)
|
||||
gSTWIStatus->callbackM(255, 0);
|
||||
gSTWIStatus->callbackM(ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void STWI_set_timer(u8 unk)
|
||||
static void STWI_set_timer(u8 count)
|
||||
{
|
||||
vu16 *timerL;
|
||||
vu16 *timerH;
|
||||
|
||||
timerL = ®_TMCNT_L(gSTWIStatus->timerSelect);
|
||||
timerH = ®_TMCNT_H(gSTWIStatus->timerSelect);
|
||||
vu16 *timerL = ®_TMCNT_L(gSTWIStatus->timerSelect);
|
||||
vu16 *timerH = ®_TMCNT_H(gSTWIStatus->timerSelect);
|
||||
REG_IME = 0;
|
||||
switch (unk)
|
||||
switch (count)
|
||||
{
|
||||
case 50:
|
||||
*timerL = 0xFCCB;
|
||||
@@ -543,25 +539,31 @@ static void STWI_stop_timer(void)
|
||||
REG_TMCNT_H(gSTWIStatus->timerSelect) = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set up STWI to send REQ. Returns 1 if error (see below).
|
||||
*/
|
||||
static u16 STWI_init(u8 request)
|
||||
{
|
||||
if (!REG_IME)
|
||||
{
|
||||
// Can't start sending if IME is disabled.
|
||||
gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE;
|
||||
if (gSTWIStatus->callbackM != NULL)
|
||||
gSTWIStatus->callbackM(request, gSTWIStatus->error);
|
||||
return TRUE;
|
||||
}
|
||||
else if (gSTWIStatus->unk_2c == TRUE)
|
||||
else if (gSTWIStatus->sending == 1)
|
||||
{
|
||||
// Already sending something. Cancel and error.
|
||||
gSTWIStatus->error = ERR_REQ_CMD_SENDING;
|
||||
gSTWIStatus->unk_2c = FALSE;
|
||||
gSTWIStatus->sending = 0;
|
||||
if (gSTWIStatus->callbackM != NULL)
|
||||
gSTWIStatus->callbackM(request, gSTWIStatus->error);
|
||||
return TRUE;
|
||||
}
|
||||
else if(!gSTWIStatus->msMode)
|
||||
else if (gSTWIStatus->msMode == AGB_CLK_SLAVE)
|
||||
{
|
||||
// Can't send if clock slave
|
||||
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_SLAVE;
|
||||
if (gSTWIStatus->callbackM != NULL)
|
||||
gSTWIStatus->callbackM(request, gSTWIStatus->error, gSTWIStatus);
|
||||
@@ -569,9 +571,10 @@ static u16 STWI_init(u8 request)
|
||||
}
|
||||
else
|
||||
{
|
||||
gSTWIStatus->unk_2c = TRUE;
|
||||
// Good to go, start sending
|
||||
gSTWIStatus->sending = 1;
|
||||
gSTWIStatus->reqActiveCommand = request;
|
||||
gSTWIStatus->state = 0;
|
||||
gSTWIStatus->state = 0; // master send req
|
||||
gSTWIStatus->reqLength = 0;
|
||||
gSTWIStatus->reqNext = 0;
|
||||
gSTWIStatus->ackLength = 0;
|
||||
@@ -595,7 +598,7 @@ static s32 STWI_start_Command(void)
|
||||
// but the cast here is required to avoid register issue
|
||||
*(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand;
|
||||
REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command;
|
||||
gSTWIStatus->state = 0;
|
||||
gSTWIStatus->state = 0; // master send req
|
||||
gSTWIStatus->reqNext = 1;
|
||||
imeTemp = REG_IME;
|
||||
REG_IME = 0;
|
||||
@@ -608,7 +611,7 @@ static s32 STWI_start_Command(void)
|
||||
|
||||
static s32 STWI_restart_Command(void)
|
||||
{
|
||||
if (gSTWIStatus->recoveryCount <= 1)
|
||||
if (gSTWIStatus->recoveryCount < 2)
|
||||
{
|
||||
++gSTWIStatus->recoveryCount;
|
||||
STWI_start_Command();
|
||||
@@ -618,17 +621,17 @@ static s32 STWI_restart_Command(void)
|
||||
if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_UNK35_REQ || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
|
||||
{
|
||||
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
|
||||
gSTWIStatus->unk_2c = 0;
|
||||
gSTWIStatus->sending = 0;
|
||||
if (gSTWIStatus->callbackM != NULL)
|
||||
gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
|
||||
}
|
||||
else
|
||||
{
|
||||
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
|
||||
gSTWIStatus->unk_2c = 0;
|
||||
gSTWIStatus->sending = 0;
|
||||
if (gSTWIStatus->callbackM != NULL)
|
||||
gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
|
||||
gSTWIStatus->state = 4; // TODO: what's 4
|
||||
gSTWIStatus->state = 4; // error
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@@ -636,7 +639,7 @@ static s32 STWI_restart_Command(void)
|
||||
|
||||
static s32 STWI_reset_ClockCounter(void)
|
||||
{
|
||||
gSTWIStatus->state = 5; // TODO: what is 5
|
||||
gSTWIStatus->state = 5; // slave receive req init
|
||||
gSTWIStatus->reqLength = 0;
|
||||
gSTWIStatus->reqNext = 0;
|
||||
REG_SIODATA32 = (1 << 31);
|
||||
|
||||
+67
-67
@@ -82,14 +82,14 @@ u32 gFiller_3003EC0;
|
||||
u16 gLinkHeldKeys;
|
||||
u16 gRecvCmds[MAX_RFU_PLAYERS][CMD_LENGTH];
|
||||
u32 gLinkStatus;
|
||||
bool8 gUnknown_3003F24;
|
||||
bool8 gLinkAllAcked5FFF;
|
||||
bool8 gUnknown_3003F28;
|
||||
bool8 gUnknown_3003F2C[MAX_LINK_PLAYERS];
|
||||
bool8 gUnknown_3003F30[MAX_LINK_PLAYERS];
|
||||
u16 gUnknown_3003F34;
|
||||
bool8 gLinkCommand2FFEAck[MAX_LINK_PLAYERS];
|
||||
bool8 gLinkCommand5FFFAck[MAX_LINK_PLAYERS];
|
||||
u16 gLinkCmd5FFFparam;
|
||||
u8 gSuppressLinkErrorMessage;
|
||||
bool8 gWirelessCommType;
|
||||
bool8 gSavedLinkPlayerCount;
|
||||
u8 gWirelessCommType;
|
||||
u8 gSavedLinkPlayerCount;
|
||||
u16 gSendCmd[CMD_LENGTH];
|
||||
u8 gSavedMultiplayerId;
|
||||
bool8 gReceivedRemoteLinkPlayers;
|
||||
@@ -123,8 +123,8 @@ EWRAM_DATA struct {
|
||||
u8 lastSendQueueCount;
|
||||
u8 unk_06;
|
||||
} sLinkErrorBuffer = {};
|
||||
EWRAM_DATA u16 gUnknown_202285C = 0;
|
||||
EWRAM_DATA void *gUnknown_2022860 = NULL;
|
||||
static EWRAM_DATA u16 sStartSend5FFFfailures = 0;
|
||||
static EWRAM_DATA void *sLinkErrorBgTilemapBuffer = NULL;
|
||||
|
||||
static void InitLocalLinkPlayer(void);
|
||||
static void sub_800978C(void);
|
||||
@@ -142,13 +142,13 @@ static u16 LinkTestCalcBlockChecksum(const u16 *src, u16 size);
|
||||
static void LinkTest_prnthex(u32 pos, u8 a0, u8 a1, u8 a2);
|
||||
static void LinkCB_RequestPlayerDataExchange(void);
|
||||
static void Task_PrintTestData(u8 taskId);
|
||||
static void sub_800AB0C(void);
|
||||
static void sub_800AB38(void);
|
||||
static void sub_800ABD4(void);
|
||||
static void sub_800AC00(void);
|
||||
static void LinkCB_BuildCommand5FFF(void);
|
||||
static void LinkCB_WaitAckCommand5FFF(void);
|
||||
static void LinkFunc_Send2FFE_1(void);
|
||||
static void LinkFunc_Send2FFE_2(void);
|
||||
static void CheckErrorStatus(void);
|
||||
static void CB2_PrintErrorMessage(void);
|
||||
static void sub_800B210(void);
|
||||
static void SetWirelessCommType0(void);
|
||||
static void DisableSerial(void);
|
||||
static void EnableSerial(void);
|
||||
static bool8 IsSioMultiMaster(void);
|
||||
@@ -232,16 +232,16 @@ bool8 IsWirelessAdapterConnected(void)
|
||||
if (gQuestLogState == 2 || gQuestLogState == 3)
|
||||
return FALSE;
|
||||
|
||||
sub_800B1F4();
|
||||
SetWirelessCommType1();
|
||||
sub_80F86F4();
|
||||
sub_80FB128(TRUE);
|
||||
if (sub_80FD3A4() == RFU_ID)
|
||||
if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID)
|
||||
{
|
||||
rfu_REQ_stopMode();
|
||||
rfu_waitREQComplete();
|
||||
return TRUE;
|
||||
}
|
||||
sub_800B210();
|
||||
SetWirelessCommType0();
|
||||
CloseLink();
|
||||
RestoreSerialTimer3IntrHandlers();
|
||||
return FALSE;
|
||||
@@ -379,8 +379,8 @@ void OpenLink(void)
|
||||
ResetBlockSend();
|
||||
gUnknown_3000E4C = 0;
|
||||
gUnknown_3003F28 = FALSE;
|
||||
gUnknown_3003F24 = FALSE;
|
||||
gUnknown_3003F34 = 0;
|
||||
gLinkAllAcked5FFF = FALSE;
|
||||
gLinkCmd5FFFparam = 0;
|
||||
CreateTask(Task_TriggerHandshake, 2);
|
||||
}
|
||||
else
|
||||
@@ -391,8 +391,8 @@ void OpenLink(void)
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gRemoteLinkPlayersNotReceived[i] = TRUE;
|
||||
gUnknown_3003F30[i] = FALSE;
|
||||
gUnknown_3003F2C[i] = FALSE;
|
||||
gLinkCommand5FFFAck[i] = FALSE;
|
||||
gLinkCommand2FFEAck[i] = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -401,7 +401,7 @@ void CloseLink(void)
|
||||
gReceivedRemoteLinkPlayers = FALSE;
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_80F8DC0();
|
||||
LinkRfu_Shutdown();
|
||||
}
|
||||
gLinkOpen = FALSE;
|
||||
DisableSerial();
|
||||
@@ -468,7 +468,7 @@ void LinkTestProcessKeyInput(void)
|
||||
}
|
||||
if (JOY_NEW(SELECT_BUTTON))
|
||||
{
|
||||
sub_800AAC0();
|
||||
Link_TryStartSend5FFF();
|
||||
}
|
||||
if (gLinkTestDebugValuesEnabled)
|
||||
{
|
||||
@@ -613,7 +613,7 @@ void ProcessRecvCmds(u8 unused)
|
||||
linkPlayer->name[9] = 0;
|
||||
linkPlayer->name[8] = 0;
|
||||
}
|
||||
sub_800B284(linkPlayer);
|
||||
IntlConvertLinkPlayerName(linkPlayer);
|
||||
if (strcmp(block->magic1, sASCIIGameFreakInc) != 0
|
||||
|| strcmp(block->magic2, sASCIIGameFreakInc) != 0)
|
||||
{
|
||||
@@ -632,10 +632,10 @@ void ProcessRecvCmds(u8 unused)
|
||||
}
|
||||
break;
|
||||
case LINKCMD_0x5FFF:
|
||||
gUnknown_3003F30[i] = TRUE;
|
||||
gLinkCommand5FFFAck[i] = TRUE;
|
||||
break;
|
||||
case LINKCMD_0x2FFE:
|
||||
gUnknown_3003F2C[i] = TRUE;
|
||||
gLinkCommand2FFEAck[i] = TRUE;
|
||||
break;
|
||||
case LINKCMD_0xAAAA:
|
||||
sub_800A3CC();
|
||||
@@ -701,7 +701,7 @@ void BuildSendCmd(u16 command)
|
||||
break;
|
||||
case LINKCMD_0x5FFF:
|
||||
gSendCmd[0] = LINKCMD_0x5FFF;
|
||||
gSendCmd[1] = gUnknown_3003F34;
|
||||
gSendCmd[1] = gLinkCmd5FFFparam;
|
||||
break;
|
||||
case LINKCMD_0x5566:
|
||||
gSendCmd[0] = LINKCMD_0x5566;
|
||||
@@ -721,7 +721,7 @@ void sub_8009FE8(void)
|
||||
{
|
||||
if (gWirelessCommType)
|
||||
{
|
||||
sub_80F9828();
|
||||
StartSendingKeysToRfu();
|
||||
}
|
||||
gLinkCallback = sub_800A040;
|
||||
}
|
||||
@@ -1312,54 +1312,54 @@ u8 sub_800AA74(void)
|
||||
return gUnknown_3000E50;
|
||||
}
|
||||
|
||||
void sub_800AA80(u16 a0)
|
||||
void Link_StartSend5FFFwithParam(u16 a0)
|
||||
{
|
||||
if (gWirelessCommType == 1)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_BeginBuildAndSendCommand5F();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gLinkCallback = sub_800AB0C;
|
||||
gUnknown_3003F24 = FALSE;
|
||||
gUnknown_3003F34 = a0;
|
||||
gLinkCallback = LinkCB_BuildCommand5FFF;
|
||||
gLinkAllAcked5FFF = FALSE;
|
||||
gLinkCmd5FFFparam = a0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800AAC0(void)
|
||||
void Link_TryStartSend5FFF(void)
|
||||
{
|
||||
if (gWirelessCommType == 1)
|
||||
{
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_BeginBuildAndSendCommand5F();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback != NULL)
|
||||
{
|
||||
gUnknown_202285C++;
|
||||
sStartSend5FFFfailures++;
|
||||
}
|
||||
else
|
||||
{
|
||||
gLinkCallback = sub_800AB0C;
|
||||
gUnknown_3003F24 = FALSE;
|
||||
gUnknown_3003F34 = 0;
|
||||
gLinkCallback = LinkCB_BuildCommand5FFF;
|
||||
gLinkAllAcked5FFF = FALSE;
|
||||
gLinkCmd5FFFparam = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AB0C(void)
|
||||
static void LinkCB_BuildCommand5FFF(void)
|
||||
{
|
||||
if (gLastRecvQueueCount == 0)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_0x5FFF);
|
||||
gLinkCallback = sub_800AB38;
|
||||
gLinkCallback = LinkCB_WaitAckCommand5FFF;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AB38(void)
|
||||
static void LinkCB_WaitAckCommand5FFF(void)
|
||||
{
|
||||
int i;
|
||||
unsigned count;
|
||||
@@ -1369,7 +1369,7 @@ static void sub_800AB38(void)
|
||||
count = 0;
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
if (gUnknown_3003F30[i])
|
||||
if (gLinkCommand5FFFAck[i])
|
||||
{
|
||||
count++;
|
||||
}
|
||||
@@ -1380,36 +1380,36 @@ static void sub_800AB38(void)
|
||||
gLinkVSyncDisabled = TRUE;
|
||||
CloseLink();
|
||||
gLinkCallback = NULL;
|
||||
gUnknown_3003F24 = TRUE;
|
||||
gLinkAllAcked5FFF = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800AB9C(void)
|
||||
void PrepareSendLinkCmd2FFE_or_RfuCmd6600(void)
|
||||
{
|
||||
if (gWirelessCommType == 1)
|
||||
{
|
||||
sub_80FA42C();
|
||||
LinkRfu_SetRfuFuncToSend6600();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (gLinkCallback == NULL)
|
||||
{
|
||||
gLinkCallback = sub_800ABD4;
|
||||
gLinkCallback = LinkFunc_Send2FFE_1;
|
||||
}
|
||||
gUnknown_3003F24 = FALSE;
|
||||
gLinkAllAcked5FFF = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800ABD4(void)
|
||||
static void LinkFunc_Send2FFE_1(void)
|
||||
{
|
||||
if (gLastRecvQueueCount == 0)
|
||||
{
|
||||
BuildSendCmd(LINKCMD_0x2FFE);
|
||||
gLinkCallback = sub_800AC00;
|
||||
gLinkCallback = LinkFunc_Send2FFE_2;
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800AC00(void)
|
||||
static void LinkFunc_Send2FFE_2(void)
|
||||
{
|
||||
u8 i;
|
||||
u8 linkPlayerCount;
|
||||
@@ -1417,7 +1417,7 @@ static void sub_800AC00(void)
|
||||
linkPlayerCount = GetLinkPlayerCount();
|
||||
for (i = 0; i < linkPlayerCount; i++)
|
||||
{
|
||||
if (!gUnknown_3003F2C[i])
|
||||
if (!gLinkCommand2FFEAck[i])
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -1426,7 +1426,7 @@ static void sub_800AC00(void)
|
||||
{
|
||||
for (i = 0; i < MAX_LINK_PLAYERS; i++)
|
||||
{
|
||||
gUnknown_3003F2C[i] = FALSE;
|
||||
gLinkCommand2FFEAck[i] = FALSE;
|
||||
}
|
||||
gLinkCallback = NULL;
|
||||
}
|
||||
@@ -1448,7 +1448,7 @@ static void CheckErrorStatus(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800ACBC(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06)
|
||||
void SetLinkErrorFromRfu(u32 status, u8 lastSendQueueCount, u8 lastRecvQueueCount, u8 unk_06)
|
||||
{
|
||||
sLinkErrorBuffer.status = status;
|
||||
sLinkErrorBuffer.lastSendQueueCount = lastSendQueueCount;
|
||||
@@ -1477,12 +1477,12 @@ void CB2_LinkError(void)
|
||||
{
|
||||
gWirelessCommType = 3;
|
||||
}
|
||||
sub_80F85F8();
|
||||
ResetLinkRfuGFLayer();
|
||||
}
|
||||
SetVBlankCallback(sub_800978C);
|
||||
ResetBgsAndClearDma3BusyFlags(0);
|
||||
ResetBgsAndClearDma3BusyFlags(FALSE);
|
||||
InitBgsFromTemplates(0, sLinkErrorBgTemplates, 2);
|
||||
gUnknown_2022860 = tilemapBuffer = malloc(0x800);
|
||||
sLinkErrorBgTilemapBuffer = tilemapBuffer = malloc(0x800);
|
||||
SetBgTilemapBuffer(1, tilemapBuffer);
|
||||
if (InitWindows(sLinkErrorWindowTemplates))
|
||||
{
|
||||
@@ -1603,12 +1603,12 @@ static void CB2_PrintErrorMessage(void)
|
||||
|
||||
bool8 GetSioMultiSI(void)
|
||||
{
|
||||
return (REG_SIOCNT & 0x04) != 0;
|
||||
return (REG_SIOCNT & SIO_MULTI_SI) != 0;
|
||||
}
|
||||
|
||||
static bool8 IsSioMultiMaster(void)
|
||||
{
|
||||
return (REG_SIOCNT & 0x8) && !(REG_SIOCNT & 0x04);
|
||||
return (REG_SIOCNT & SIO_MULTI_SD) && !(REG_SIOCNT & SIO_MULTI_SI);
|
||||
}
|
||||
|
||||
bool8 IsLinkConnectionEstablished(void)
|
||||
@@ -1626,7 +1626,7 @@ bool8 HasLinkErrorOccurred(void)
|
||||
return gLinkErrorOccurred;
|
||||
}
|
||||
|
||||
void sub_800B0B4(void)
|
||||
void PrepareLocalLinkPlayerBlock(void)
|
||||
{
|
||||
struct LinkPlayerBlock * block;
|
||||
|
||||
@@ -1638,7 +1638,7 @@ void sub_800B0B4(void)
|
||||
memcpy(gBlockSendBuffer, block, sizeof(*block));
|
||||
}
|
||||
|
||||
void sub_800B110(u32 who)
|
||||
void LinkPlayerFromBlock(u32 who)
|
||||
{
|
||||
u8 who_ = who;
|
||||
struct LinkPlayerBlock * block;
|
||||
@@ -1647,7 +1647,7 @@ void sub_800B110(u32 who)
|
||||
block = (struct LinkPlayerBlock *)gBlockRecvBuffer[who_];
|
||||
player = &gLinkPlayers[who_];
|
||||
*player = block->linkPlayer;
|
||||
sub_800B284(player);
|
||||
IntlConvertLinkPlayerName(player);
|
||||
if (strcmp(block->magic1, sASCIIGameFreakInc) != 0 || strcmp(block->magic2, sASCIIGameFreakInc) != 0)
|
||||
{
|
||||
SetMainCallback2(CB2_LinkError);
|
||||
@@ -1670,8 +1670,8 @@ bool8 HandleLinkConnection(void)
|
||||
}
|
||||
else
|
||||
{
|
||||
r4 = sub_80FAE94();
|
||||
r5 = sub_80FAEF0();
|
||||
r4 = LinkRfuMain1();
|
||||
r5 = LinkRfuMain2();
|
||||
if (sub_8058318() == TRUE)
|
||||
{
|
||||
if (r4 == TRUE || IsRfuRecvQueueEmpty() || r5)
|
||||
@@ -1683,7 +1683,7 @@ bool8 HandleLinkConnection(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_800B1F4(void)
|
||||
void SetWirelessCommType1(void)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
@@ -1691,7 +1691,7 @@ void sub_800B1F4(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_800B210(void)
|
||||
static void SetWirelessCommType0(void)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
@@ -1699,7 +1699,7 @@ static void sub_800B210(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_800B22C(void)
|
||||
void SetWirelessCommType0_UnusedCopy(void)
|
||||
{
|
||||
if (gReceivedRemoteLinkPlayers == 0)
|
||||
{
|
||||
@@ -1725,7 +1725,7 @@ bool32 sub_800B270(void)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_800B284(struct LinkPlayer * player)
|
||||
void IntlConvertLinkPlayerName(struct LinkPlayer * player)
|
||||
{
|
||||
player->name[10] = player->name[8];
|
||||
ConvertInternationalString(player->name, player->language);
|
||||
|
||||
-1381
File diff suppressed because it is too large
Load Diff
+781
-754
File diff suppressed because it is too large
Load Diff
+110
-97
@@ -166,7 +166,7 @@ static const struct SpriteTemplate sWirelessStatusIndicatorSpriteTemplate = {
|
||||
SpriteCallbackDummy
|
||||
};
|
||||
|
||||
void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr)
|
||||
void RFU_queue_20_70_reset(struct UnkRfuStruct_2_Sub_124 *queue)
|
||||
{
|
||||
s32 i;
|
||||
s32 j;
|
||||
@@ -175,16 +175,16 @@ void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr)
|
||||
{
|
||||
for (j = 0; j < 70; j++)
|
||||
{
|
||||
ptr->unk_00[i][j] = 0;
|
||||
queue->slots[i][j] = 0;
|
||||
}
|
||||
}
|
||||
ptr->unk_8c1 = 0;
|
||||
ptr->unk_8c0 = 0;
|
||||
ptr->unk_8c2 = 0;
|
||||
ptr->unk_8c3 = 0;
|
||||
queue->send_slot = 0;
|
||||
queue->recv_slot = 0;
|
||||
queue->count = 0;
|
||||
queue->full = 0;
|
||||
}
|
||||
|
||||
void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr)
|
||||
void RFU_queue_40_14_reset(struct UnkRfuStruct_2_Sub_9e8 *ptr)
|
||||
{
|
||||
s32 i;
|
||||
s32 j;
|
||||
@@ -193,16 +193,16 @@ void sub_80FC4D4(struct UnkRfuStruct_2_Sub_9e8 *ptr)
|
||||
{
|
||||
for (j = 0; j < 14; j++)
|
||||
{
|
||||
ptr->unk_00[i][j] = 0;
|
||||
ptr->slots[i][j] = 0;
|
||||
}
|
||||
}
|
||||
ptr->unk_231 = 0;
|
||||
ptr->unk_230 = 0;
|
||||
ptr->unk_232 = 0;
|
||||
ptr->unk_233 = 0;
|
||||
ptr->send_slot = 0;
|
||||
ptr->recv_slot = 0;
|
||||
ptr->count = 0;
|
||||
ptr->full = 0;
|
||||
}
|
||||
|
||||
static void sub_80FC530(struct UnkRfuStruct_Sub_Unused *ptr)
|
||||
static void RFU_queue_2_256_reset(struct UnkRfuStruct_Sub_Unused *ptr)
|
||||
{
|
||||
s32 i;
|
||||
s32 j;
|
||||
@@ -211,29 +211,29 @@ static void sub_80FC530(struct UnkRfuStruct_Sub_Unused *ptr)
|
||||
{
|
||||
for (j = 0; j < 256; j++)
|
||||
{
|
||||
ptr->unk_00[i][j] = 0;
|
||||
ptr->slots[i][j] = 0;
|
||||
}
|
||||
}
|
||||
ptr->unk_201 = 0;
|
||||
ptr->unk_200 = 0;
|
||||
ptr->unk_202 = 0;
|
||||
ptr->unk_203 = 0;
|
||||
ptr->send_slot = 0;
|
||||
ptr->recv_slot = 0;
|
||||
ptr->count = 0;
|
||||
ptr->full = 0;
|
||||
}
|
||||
|
||||
void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
|
||||
void RFU_queue_20_70_recv(struct UnkRfuStruct_2_Sub_124 *queue, u8 *data)
|
||||
{
|
||||
s32 i;
|
||||
u16 imeBak;
|
||||
u8 count;
|
||||
|
||||
if (q1->unk_8c2 < 20)
|
||||
if (queue->count < 20)
|
||||
{
|
||||
imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
count = 0;
|
||||
for (i = 0; i < 70; i += 14)
|
||||
{
|
||||
if (q2[i] == 0 && q2[i + 1] == 0)
|
||||
if (data[i] == 0 && data[i + 1] == 0)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
@@ -242,36 +242,36 @@ void sub_80FC588(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
|
||||
{
|
||||
for (i = 0; i < 70; i++)
|
||||
{
|
||||
q1->unk_00[q1->unk_8c0][i] = q2[i];
|
||||
queue->slots[queue->recv_slot][i] = data[i];
|
||||
}
|
||||
q1->unk_8c0++;
|
||||
q1->unk_8c0 %= 20;
|
||||
q1->unk_8c2++;
|
||||
queue->recv_slot++;
|
||||
queue->recv_slot %= 20;
|
||||
queue->count++;
|
||||
for (i = 0; i < 70; i++)
|
||||
{
|
||||
q2[i] = 0;
|
||||
data[i] = 0;
|
||||
}
|
||||
}
|
||||
REG_IME = imeBak;
|
||||
}
|
||||
else
|
||||
{
|
||||
q1->unk_8c3 = 1;
|
||||
queue->full = 1;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
|
||||
void RFU_queue_40_14_recv(struct UnkRfuStruct_2_Sub_9e8 *queue, u8 *data)
|
||||
{
|
||||
s32 i;
|
||||
u16 imeBak;
|
||||
|
||||
if (q1->unk_232 < 40)
|
||||
if (queue->count < 40)
|
||||
{
|
||||
imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
for (i = 0; i < 14; i++)
|
||||
{
|
||||
if (q2[i] != 0)
|
||||
if (data[i] != 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -280,57 +280,57 @@ void sub_80FC63C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
|
||||
{
|
||||
for (i = 0; i < 14; i++)
|
||||
{
|
||||
q1->unk_00[q1->unk_230][i] = q2[i];
|
||||
queue->slots[queue->recv_slot][i] = data[i];
|
||||
}
|
||||
q1->unk_230++;
|
||||
q1->unk_230 %= 40;
|
||||
q1->unk_232++;
|
||||
queue->recv_slot++;
|
||||
queue->recv_slot %= 40;
|
||||
queue->count++;
|
||||
for (i = 0; i < 14; i++)
|
||||
{
|
||||
q2[i] = 0;
|
||||
data[i] = 0;
|
||||
}
|
||||
}
|
||||
REG_IME = imeBak;
|
||||
}
|
||||
else
|
||||
{
|
||||
q1->unk_233 = 1;
|
||||
queue->full = 1;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_80FC6E8(struct UnkRfuStruct_2_Sub_124 *q1, u8 *q2)
|
||||
bool8 RFU_queue_20_70_send(struct UnkRfuStruct_2_Sub_124 *queue, u8 *dest)
|
||||
{
|
||||
u16 imeBak;
|
||||
s32 i;
|
||||
|
||||
imeBak = REG_IME;
|
||||
REG_IME = 0;
|
||||
if (q1->unk_8c0 == q1->unk_8c1 || q1->unk_8c3 != 0)
|
||||
if (queue->recv_slot == queue->send_slot || queue->full)
|
||||
{
|
||||
for (i = 0; i < 70; i++)
|
||||
{
|
||||
q2[i] = 0;
|
||||
dest[i] = 0;
|
||||
}
|
||||
REG_IME = imeBak;
|
||||
return FALSE;
|
||||
}
|
||||
for (i = 0; i < 70; i++)
|
||||
{
|
||||
q2[i] = q1->unk_00[q1->unk_8c1][i];
|
||||
dest[i] = queue->slots[queue->send_slot][i];
|
||||
}
|
||||
q1->unk_8c1++;
|
||||
q1->unk_8c1 %= 20;
|
||||
q1->unk_8c2--;
|
||||
queue->send_slot++;
|
||||
queue->send_slot %= 20;
|
||||
queue->count--;
|
||||
REG_IME = imeBak;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
|
||||
bool8 RFU_queue_40_14_send(struct UnkRfuStruct_2_Sub_9e8 *queue, u8 *dest)
|
||||
{
|
||||
s32 i;
|
||||
u16 imeBak;
|
||||
|
||||
if (q1->unk_230 == q1->unk_231 || q1->unk_233 != 0)
|
||||
if (queue->recv_slot == queue->send_slot || queue->full != 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -338,98 +338,98 @@ bool8 sub_80FC79C(struct UnkRfuStruct_2_Sub_9e8 *q1, u8 *q2)
|
||||
REG_IME = 0;
|
||||
for (i = 0; i < 14; i++)
|
||||
{
|
||||
q2[i] = q1->unk_00[q1->unk_231][i];
|
||||
dest[i] = queue->slots[queue->send_slot][i];
|
||||
}
|
||||
q1->unk_231++;
|
||||
q1->unk_231 %= 40;
|
||||
q1->unk_232--;
|
||||
queue->send_slot++;
|
||||
queue->send_slot %= 40;
|
||||
queue->count--;
|
||||
REG_IME = imeBak;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_80FC828(struct UnkRfuStruct_2_Sub_c1c *q1, const u8 *q2)
|
||||
void RFU_queue_2_14_recv(struct UnkRfuStruct_2_Sub_c1c *queue, const u8 *data)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (q2[1] == 0)
|
||||
if (data[1] == 0)
|
||||
{
|
||||
sub_80FC888(q1, NULL);
|
||||
RFU_queue_2_14_send(queue, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 0; i < 14; i++)
|
||||
{
|
||||
q1->unk_00[q1->unk_1c][i] = q2[i];
|
||||
queue->slots[queue->recv_slot][i] = data[i];
|
||||
}
|
||||
q1->unk_1c++;
|
||||
q1->unk_1c %= 2;
|
||||
if (q1->unk_1e < 2)
|
||||
queue->recv_slot++;
|
||||
queue->recv_slot %= 2;
|
||||
if (queue->count < 2)
|
||||
{
|
||||
q1->unk_1e++;
|
||||
queue->count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
q1->unk_1d = q1->unk_1c;
|
||||
queue->send_slot = queue->recv_slot;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_80FC888(struct UnkRfuStruct_2_Sub_c1c *q1, u8 *q2)
|
||||
bool8 RFU_queue_2_14_send(struct UnkRfuStruct_2_Sub_c1c *queue, u8 *dest)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (q1->unk_1e == 0)
|
||||
if (queue->count == 0)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
if (q2 != NULL)
|
||||
if (dest != NULL)
|
||||
{
|
||||
for (i = 0; i < 14; i++)
|
||||
{
|
||||
q2[i] = q1->unk_00[q1->unk_1d][i];
|
||||
dest[i] = queue->slots[queue->send_slot][i];
|
||||
}
|
||||
}
|
||||
q1->unk_1d++;
|
||||
q1->unk_1d %= 2;
|
||||
q1->unk_1e--;
|
||||
queue->send_slot++;
|
||||
queue->send_slot %= 2;
|
||||
queue->count--;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void sub_80FC8D8(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
|
||||
static void RFU_queue_2_256_recv(struct UnkRfuStruct_Sub_Unused *queue, u8 *data)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (q1->unk_202 < 2)
|
||||
if (queue->count < 2)
|
||||
{
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
q1->unk_00[q1->unk_200][i] = q2[i];
|
||||
queue->slots[queue->recv_slot][i] = data[i];
|
||||
}
|
||||
q1->unk_200++;
|
||||
q1->unk_200 %= 2;
|
||||
q1->unk_202++;
|
||||
queue->recv_slot++;
|
||||
queue->recv_slot %= 2;
|
||||
queue->count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
q1->unk_203 = 1;
|
||||
queue->full = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static bool8 sub_80FC944(struct UnkRfuStruct_Sub_Unused *q1, u8 *q2)
|
||||
static bool8 RFU_queue_2_256_send(struct UnkRfuStruct_Sub_Unused *queue, u8 *send)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
if (q1->unk_200 == q1->unk_201 || q1->unk_203)
|
||||
if (queue->recv_slot == queue->send_slot || queue->full)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
q2[i] = q1->unk_00[q1->unk_201][i];
|
||||
send[i] = queue->slots[queue->send_slot][i];
|
||||
}
|
||||
q1->unk_201++;
|
||||
q1->unk_201 %= 2;
|
||||
q1->unk_202--;
|
||||
queue->send_slot++;
|
||||
queue->send_slot %= 2;
|
||||
queue->count--;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@@ -438,7 +438,7 @@ static void sub_80FC9B8(u8 *q1, u8 mode)
|
||||
s32 i;
|
||||
u8 rval;
|
||||
u16 r5 = 0;
|
||||
static u8 _3002018;
|
||||
static u8 counter;
|
||||
|
||||
switch (mode)
|
||||
{
|
||||
@@ -470,11 +470,11 @@ static void sub_80FC9B8(u8 *q1, u8 mode)
|
||||
case 3:
|
||||
for (i = 0; i < 200; i++)
|
||||
{
|
||||
q1[i] = i + 1 + _3002018;
|
||||
r5 += (i + 1 + _3002018) & 0xFF;
|
||||
q1[i] = i + 1 + counter;
|
||||
r5 += (i + 1 + counter) & 0xFF;
|
||||
}
|
||||
*((u16 *)(q1 + i)) = r5;
|
||||
_3002018++;
|
||||
counter++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -603,7 +603,7 @@ static u8 GetConnectedChildStrength(u8 maxFlags)
|
||||
}
|
||||
#endif
|
||||
|
||||
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3)
|
||||
void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 started, s32 child_sprite_genders)
|
||||
{
|
||||
s32 i;
|
||||
|
||||
@@ -613,30 +613,37 @@ void InitHostRFUtgtGname(struct GFtgtGname *data, u8 activity, bool32 r2, s32 r3
|
||||
}
|
||||
for (i = 0; i < RFU_CHILD_MAX; i++)
|
||||
{
|
||||
data->unk_04[i] = r3;
|
||||
r3 >>= 8;
|
||||
data->child_sprite_gender[i] = child_sprite_genders;
|
||||
child_sprite_genders >>= 8;
|
||||
}
|
||||
data->playerGender = gSaveBlock2Ptr->playerGender;
|
||||
data->unk_0a_0 = activity;
|
||||
data->unk_0a_7 = r2;
|
||||
data->unk_00.unk_00_0 = GAME_LANGUAGE;
|
||||
data->unk_00.unk_01_2 = GAME_VERSION;
|
||||
data->unk_00.unk_00_4 = 0;
|
||||
data->unk_00.unk_00_5 = 0;
|
||||
data->activity = activity;
|
||||
data->started = started;
|
||||
data->unk_00.language = GAME_LANGUAGE;
|
||||
data->unk_00.version = GAME_VERSION;
|
||||
data->unk_00.hasNews = FALSE;
|
||||
data->unk_00.hasCard = FALSE;
|
||||
data->unk_00.unk_00_6 = 0;
|
||||
data->unk_00.isChampion = FlagGet(FLAG_SYS_CAN_LINK_WITH_RS);
|
||||
data->unk_00.hasNationalDex = IsNationalPokedexEnabled();
|
||||
data->unk_00.gameClear = FlagGet(FLAG_SYS_GAME_CLEAR);
|
||||
}
|
||||
|
||||
bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
/*
|
||||
* ==========================================================
|
||||
* Returns 1 if parent, 0 if child or neutral.
|
||||
* If partner serial number is valid, copies gname and uname.
|
||||
* Otherwise, blanks these.
|
||||
* ==========================================================
|
||||
*/
|
||||
bool8 LinkRfu_GetNameIfCompatible(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
{
|
||||
bool8 retVal;
|
||||
|
||||
if (gUnknown_3005E10.unk_06 == 1)
|
||||
if (lman.parent_child == MODE_PARENT)
|
||||
{
|
||||
retVal = TRUE;
|
||||
if (sub_80FA44C(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1))
|
||||
if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[idx].serialNo) && ((gRfuLinkStatus->getNameFlag >> idx) & 1))
|
||||
{
|
||||
memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
|
||||
@@ -650,7 +657,7 @@ bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
else
|
||||
{
|
||||
retVal = FALSE;
|
||||
if (sub_80FA44C(gRfuLinkStatus->partner[idx].serialNo))
|
||||
if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[idx].serialNo))
|
||||
{
|
||||
memcpy(gname, &gRfuLinkStatus->partner[idx].gname, RFU_GAME_NAME_LENGTH);
|
||||
memcpy(uname, gRfuLinkStatus->partner[idx].uname, RFU_USER_NAME_LENGTH);
|
||||
@@ -664,7 +671,13 @@ bool8 sub_80FCC3C(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
return retVal;
|
||||
}
|
||||
|
||||
bool8 sub_80FCCF4(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
/*
|
||||
* ==========================================================
|
||||
* Specific check for serial number 0x7F7D,
|
||||
* which comes from ???
|
||||
* ==========================================================
|
||||
*/
|
||||
bool8 LinkRfu_GetNameIfSerial7F7D(struct GFtgtGname *gname, u8 *uname, u8 idx)
|
||||
{
|
||||
bool8 retVal = FALSE;
|
||||
if (gRfuLinkStatus->partner[idx].serialNo == 0x7F7D)
|
||||
@@ -824,7 +837,7 @@ void UpdateWirelessStatusIndicatorSprite(void)
|
||||
gMain.oamBuffer[125].paletteNum = sprite->oam.paletteNum;
|
||||
gMain.oamBuffer[125].tileNum = sprite->data[6] + sprite->anims[sprite->data[2]][sprite->data[4]].frame.imageValue;
|
||||
CpuCopy16(gMain.oamBuffer + 125, (struct OamData *)OAM + 125, sizeof(struct OamData));
|
||||
if (sub_80FB9F4() == 1)
|
||||
if (RfuGetErrorStatus() == 1)
|
||||
{
|
||||
DestroyWirelessStatusIndicatorSprite();
|
||||
}
|
||||
|
||||
+1
-1
@@ -763,7 +763,7 @@ void sub_8107CF8(u8 windowId, u16 speciesId, u32 personality, u16 x, u16 y)
|
||||
BlitBitmapToWindow(windowId, GetMonIconPtr(speciesId, personality, 1), x, y, 32, 32);
|
||||
}
|
||||
|
||||
void sub_8107D38(u8 palOffset, u8 palId)
|
||||
void ListMenuLoadStdPalAt(u8 palOffset, u8 palId)
|
||||
{
|
||||
const u16 *palette;
|
||||
|
||||
|
||||
+224
-221
File diff suppressed because it is too large
Load Diff
@@ -1,793 +0,0 @@
|
||||
#include "global.h"
|
||||
#include "constants/species.h"
|
||||
#include "bg.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "palette.h"
|
||||
#include "decompress.h"
|
||||
#include "malloc.h"
|
||||
#include "menu.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "string_util.h"
|
||||
#include "link_rfu.h"
|
||||
#include "mevent.h"
|
||||
#include "battle_anim.h"
|
||||
|
||||
struct UnkStruct_8467FB8
|
||||
{
|
||||
u8 textPal1:4;
|
||||
u8 textPal2:4;
|
||||
u8 textPal3:4;
|
||||
u8 textPal4:4;
|
||||
const u8 * tiles;
|
||||
const u8 * map;
|
||||
const u16 * pal;
|
||||
};
|
||||
|
||||
struct UnkStruct_203F3C8_02DC
|
||||
{
|
||||
u8 unk_00;
|
||||
u8 unk_01[41];
|
||||
u8 unk_42[4];
|
||||
};
|
||||
|
||||
struct UnkStruct_203F3C8
|
||||
{
|
||||
/*0000*/ struct MEWonderCardData unk_0000;
|
||||
/*014c*/ struct MEventBuffer_3430_Sub unk_014C;
|
||||
/*0170*/ const struct UnkStruct_8467FB8 * unk_0170;
|
||||
/*0174*/ u8 unk_0174;
|
||||
/*0175*/ u8 unk_0175;
|
||||
/*0176*/ u16 unk_0176[3];
|
||||
/*017C*/ u8 unk_017C;
|
||||
/*017D*/ u8 unk_017D[7][2];
|
||||
/*018B*/ u8 unk_018B[41];
|
||||
/*01B4*/ u8 unk_01B4[41];
|
||||
/*01DD*/ u8 unk_01DD[7];
|
||||
/*01E4*/ u8 unk_01E4[4][41];
|
||||
/*0288*/ u8 unk_0288[41];
|
||||
/*02B1*/ u8 unk_02B1[41];
|
||||
/*02DC*/ struct UnkStruct_203F3C8_02DC unk_02DC[8];
|
||||
/*045C*/ u8 buffer_045C[0x1000];
|
||||
};
|
||||
|
||||
EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_203F3C8 = NULL;
|
||||
|
||||
void sub_8145A98(void);
|
||||
void sub_8145D18(u8 whichWindow);
|
||||
void sub_8146060(void);
|
||||
void sub_81461D8(void);
|
||||
|
||||
const u8 gUnknown_8467068[][3] = {
|
||||
{0, 2, 3},
|
||||
{0, 1, 2}
|
||||
};
|
||||
const u8 ALIGNED(4) gUnknown_8467070[3] = {7, 4, 7};
|
||||
const struct WindowTemplate gUnknown_8467074[] = {
|
||||
{0x01, 0x01, 0x01, 0x19, 0x04, 0x0f, 0x029c},
|
||||
{0x01, 0x01, 0x06, 0x1c, 0x08, 0x0f, 0x01bc},
|
||||
{0x01, 0x01, 0x0e, 0x1c, 0x05, 0x0f, 0x0130}
|
||||
};
|
||||
|
||||
const u16 gUnknown_846708C[] = INCBIN_U16("data/graphics/mevent/pal_46708C.gbapal");
|
||||
const u16 gUnknown_84670AC[] = INCBIN_U16("data/graphics/mevent/pal_4670AC.gbapal");
|
||||
const u16 gUnknown_84670CC[] = INCBIN_U16("data/graphics/mevent/pal_4670CC.gbapal");
|
||||
const u16 gUnknown_84670EC[] = INCBIN_U16("data/graphics/mevent/pal_4670EC.gbapal");
|
||||
const u16 gUnknown_846710C[] = INCBIN_U16("data/graphics/mevent/pal_46710C.gbapal");
|
||||
const u16 gUnknown_846712C[] = INCBIN_U16("data/graphics/mevent/pal_46712C.gbapal");
|
||||
const u16 gUnknown_846714C[] = INCBIN_U16("data/graphics/mevent/pal_46714C.gbapal");
|
||||
const u16 gUnknown_846716C[] = INCBIN_U16("data/graphics/mevent/pal_46716C.gbapal");
|
||||
const u8 gUnknown_846718C[] = INCBIN_U8("data/graphics/mevent/gfx_46718C.4bpp.lz");
|
||||
const u8 gUnknown_8467288[] = INCBIN_U8("data/graphics/mevent/tilemap_467288.bin.lz");
|
||||
const u8 gUnknown_846737C[] = INCBIN_U8("data/graphics/mevent/gfx_46737C.4bpp.lz");
|
||||
const u8 gUnknown_8467470[] = INCBIN_U8("data/graphics/mevent/tilemap_467470.bin.lz");
|
||||
const u8 gUnknown_8467558[] = INCBIN_U8("data/graphics/mevent/gfx_467558.4bpp.lz");
|
||||
const u8 gUnknown_846762C[] = INCBIN_U8("data/graphics/mevent/tilemap_46762C.bin.lz");
|
||||
const u8 gUnknown_8467700[] = INCBIN_U8("data/graphics/mevent/gfx_467700.4bpp.lz");
|
||||
const u8 gUnknown_8467934[] = INCBIN_U8("data/graphics/mevent/tilemap_467934.bin.lz");
|
||||
const u8 gUnknown_8467A7C[] = INCBIN_U8("data/graphics/mevent/gfx_467A7C.4bpp.lz");
|
||||
const u8 gUnknown_8467CAC[] = INCBIN_U8("data/graphics/mevent/tilemap_467CAC.bin.lz");
|
||||
const u16 gUnknown_8467DF4[] = INCBIN_U16("data/graphics/mevent/pal_467DF4.gbapal");
|
||||
const u16 gUnknown_8467E14[] = INCBIN_U16("data/graphics/mevent/pal_467E14.gbapal");
|
||||
const u16 gUnknown_8467E34[] = INCBIN_U16("data/graphics/mevent/pal_467E34.gbapal");
|
||||
const u16 gUnknown_8467E54[] = INCBIN_U16("data/graphics/mevent/pal_467E54.gbapal");
|
||||
const u16 gUnknown_8467E74[] = INCBIN_U16("data/graphics/mevent/pal_467E74.gbapal");
|
||||
const u16 gUnknown_8467E94[] = INCBIN_U16("data/graphics/mevent/pal_467E94.gbapal");
|
||||
const u16 gUnknown_8467EB4[] = INCBIN_U16("data/graphics/mevent/pal_467EB4.gbapal");
|
||||
const u16 gUnknown_8467ED4[] = INCBIN_U16("data/graphics/mevent/pal_467ED4.gbapal");
|
||||
const u32 gUnknown_8467EF4[] = INCBIN_U32("data/graphics/mevent/gfx_467EF4.4bpp.lz");
|
||||
|
||||
const struct CompressedSpriteSheet gUnknown_8467F58 = {
|
||||
gUnknown_8467EF4, 0x100, 0x8000
|
||||
};
|
||||
const struct SpritePalette gUnknown_8467F60[] = {
|
||||
{gUnknown_8467DF4, 0x8000},
|
||||
{gUnknown_8467E14, 0x8000},
|
||||
{gUnknown_8467E34, 0x8000},
|
||||
{gUnknown_8467E54, 0x8000},
|
||||
{gUnknown_8467E74, 0x8000},
|
||||
{gUnknown_8467E94, 0x8000},
|
||||
{gUnknown_8467EB4, 0x8000},
|
||||
{gUnknown_8467ED4, 0x8000}
|
||||
};
|
||||
const struct SpriteTemplate gUnknown_8467FA0 = {
|
||||
0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
|
||||
};
|
||||
const struct UnkStruct_8467FB8 gUnknown_8467FB8[8] = {
|
||||
{1, 0, 0, 0, gUnknown_846718C, gUnknown_8467288, gUnknown_846708C},
|
||||
{1, 0, 0, 1, gUnknown_846737C, gUnknown_8467470, gUnknown_84670AC},
|
||||
{1, 0, 0, 2, gUnknown_8467558, gUnknown_846762C, gUnknown_84670CC},
|
||||
{1, 0, 0, 3, gUnknown_8467558, gUnknown_846762C, gUnknown_84670EC},
|
||||
{1, 0, 0, 4, gUnknown_8467558, gUnknown_846762C, gUnknown_846710C},
|
||||
{1, 0, 0, 5, gUnknown_8467558, gUnknown_846762C, gUnknown_846712C},
|
||||
{1, 0, 0, 6, gUnknown_8467700, gUnknown_8467934, gUnknown_846714C},
|
||||
{1, 0, 0, 7, gUnknown_8467A7C, gUnknown_8467CAC, gUnknown_846716C}
|
||||
};
|
||||
|
||||
bool32 InitWonderCardResources(struct MEWonderCardData * r5, struct MEventBuffer_3430_Sub * r6)
|
||||
{
|
||||
if (r5 == NULL || r6 == NULL)
|
||||
return FALSE;
|
||||
gUnknown_203F3C8 = AllocZeroed(sizeof(struct UnkStruct_203F3C8));
|
||||
if (gUnknown_203F3C8 == NULL)
|
||||
return FALSE;
|
||||
gUnknown_203F3C8->unk_0000 = *r5;
|
||||
gUnknown_203F3C8->unk_014C = *r6;
|
||||
if (gUnknown_203F3C8->unk_0000.unk_08_2 >= NELEMS(gUnknown_8467FB8))
|
||||
gUnknown_203F3C8->unk_0000.unk_08_2 = 0;
|
||||
if (gUnknown_203F3C8->unk_0000.unk_08_0 >= NELEMS(gUnknown_8467070))
|
||||
gUnknown_203F3C8->unk_0000.unk_08_0 = 0;
|
||||
if (gUnknown_203F3C8->unk_0000.unk_09 > NELEMS(gUnknown_203F3C8->unk_017D))
|
||||
gUnknown_203F3C8->unk_0000.unk_09 = 0;
|
||||
gUnknown_203F3C8->unk_0170 = &gUnknown_8467FB8[gUnknown_203F3C8->unk_0000.unk_08_2];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DestroyWonderCardResources(void)
|
||||
{
|
||||
if (gUnknown_203F3C8 != NULL)
|
||||
{
|
||||
*gUnknown_203F3C8 = (struct UnkStruct_203F3C8){};
|
||||
Free(gUnknown_203F3C8);
|
||||
gUnknown_203F3C8 = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
s32 FadeToWonderCardMenu(void)
|
||||
{
|
||||
if (gUnknown_203F3C8 == NULL)
|
||||
return -1;
|
||||
switch(gUnknown_203F3C8->unk_0174)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
DecompressAndCopyTileDataToVram(2, gUnknown_203F3C8->unk_0170->tiles, 0, 0x008, 0);
|
||||
gUnknown_203F3C8->unk_0176[0] = AddWindow(&gUnknown_8467074[0]);
|
||||
gUnknown_203F3C8->unk_0176[1] = AddWindow(&gUnknown_8467074[1]);
|
||||
gUnknown_203F3C8->unk_0176[2] = AddWindow(&gUnknown_8467074[2]);
|
||||
break;
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(gUnknown_203F3C8->unk_0170->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(gUnknown_203F3C8->unk_0170->map, gUnknown_203F3C8->buffer_045C);
|
||||
CopyRectToBgTilemapBufferRect(2, gUnknown_203F3C8->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 4:
|
||||
sub_8145A98();
|
||||
break;
|
||||
case 5:
|
||||
sub_8145D18(0);
|
||||
sub_8145D18(1);
|
||||
sub_8145D18(2);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
break;
|
||||
case 6:
|
||||
LoadMonIconPalettes();
|
||||
break;
|
||||
case 7:
|
||||
ShowBg(1);
|
||||
ShowBg(2);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
sub_8146060();
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
UpdatePaletteFade();
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
gUnknown_203F3C8->unk_0174 = 0;
|
||||
return 1;
|
||||
}
|
||||
++gUnknown_203F3C8->unk_0174;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 FadeOutFromWonderCard(bool32 flag)
|
||||
{
|
||||
if (gUnknown_203F3C8 == NULL)
|
||||
return -1;
|
||||
switch (gUnknown_203F3C8->unk_0174)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 3:
|
||||
HideBg(1);
|
||||
HideBg(2);
|
||||
RemoveWindow(gUnknown_203F3C8->unk_0176[2]);
|
||||
RemoveWindow(gUnknown_203F3C8->unk_0176[1]);
|
||||
RemoveWindow(gUnknown_203F3C8->unk_0176[0]);
|
||||
break;
|
||||
case 4:
|
||||
sub_81461D8();
|
||||
FreeMonIconPalettes();
|
||||
break;
|
||||
case 5:
|
||||
PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
|
||||
break;
|
||||
case 6:
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
gUnknown_203F3C8->unk_0174 = 0;
|
||||
return 1;
|
||||
}
|
||||
++gUnknown_203F3C8->unk_0174;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sub_8145A98(void)
|
||||
{
|
||||
u16 i = 0;
|
||||
u16 r6;
|
||||
u16 sp0[3] = {0, 0, 0};
|
||||
|
||||
memcpy(gUnknown_203F3C8->unk_018B, gUnknown_203F3C8->unk_0000.unk_0A, 40);
|
||||
gUnknown_203F3C8->unk_018B[40] = EOS;
|
||||
memcpy(gUnknown_203F3C8->unk_01B4, gUnknown_203F3C8->unk_0000.unk_32, 40);
|
||||
gUnknown_203F3C8->unk_01B4[40] = EOS;
|
||||
if (gUnknown_203F3C8->unk_0000.unk_04 > 999999)
|
||||
gUnknown_203F3C8->unk_0000.unk_04 = 999999;
|
||||
ConvertIntToDecimalStringN(gUnknown_203F3C8->unk_01DD, gUnknown_203F3C8->unk_0000.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
memcpy(gUnknown_203F3C8->unk_01E4[i], gUnknown_203F3C8->unk_0000.unk_5A[i], 40);
|
||||
gUnknown_203F3C8->unk_01E4[i][40] = EOS;
|
||||
}
|
||||
memcpy(gUnknown_203F3C8->unk_0288, gUnknown_203F3C8->unk_0000.unk_FA, 40);
|
||||
gUnknown_203F3C8->unk_0288[40] = EOS;
|
||||
switch (gUnknown_203F3C8->unk_0000.unk_08_0)
|
||||
{
|
||||
case 0:
|
||||
memcpy(gUnknown_203F3C8->unk_02B1, gUnknown_203F3C8->unk_0000.unk_122, 40);
|
||||
gUnknown_203F3C8->unk_02B1[40] = EOS;
|
||||
break;
|
||||
case 1:
|
||||
gUnknown_203F3C8->unk_02B1[00] = EOS;
|
||||
break;
|
||||
case 2:
|
||||
gUnknown_203F3C8->unk_02B1[00] = EOS;
|
||||
sp0[0] = gUnknown_203F3C8->unk_014C.unk_00 < 999 ? gUnknown_203F3C8->unk_014C.unk_00 : 999;
|
||||
sp0[1] = gUnknown_203F3C8->unk_014C.unk_02 < 999 ? gUnknown_203F3C8->unk_014C.unk_02 : 999;
|
||||
sp0[2] = gUnknown_203F3C8->unk_014C.unk_04 < 999 ? gUnknown_203F3C8->unk_014C.unk_04 : 999;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
memset(gUnknown_203F3C8->unk_02DC[i].unk_42, EOS, 4);
|
||||
memset(gUnknown_203F3C8->unk_02DC[i].unk_01, EOS, 41);
|
||||
}
|
||||
for (i = 0, r6 = 0; i < 40; i++)
|
||||
{
|
||||
if (gUnknown_203F3C8->unk_0000.unk_122[i] != 0xF7)
|
||||
{
|
||||
gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_01[r6] = gUnknown_203F3C8->unk_0000.unk_122[i];
|
||||
r6++;
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 r3 = gUnknown_203F3C8->unk_0000.unk_122[i + 1];
|
||||
if (r3 > 2)
|
||||
{
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertIntToDecimalStringN(gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_42, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3);
|
||||
gUnknown_203F3C8->unk_02DC[gUnknown_203F3C8->unk_0175].unk_00 = gUnknown_203F3C8->unk_0000.unk_122[i + 2];
|
||||
gUnknown_203F3C8->unk_0175++;
|
||||
if (gUnknown_203F3C8->unk_0175 > 7)
|
||||
break;
|
||||
r6 = 0;
|
||||
i += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8145D18(u8 whichWindow)
|
||||
{
|
||||
s8 sp0C = 0;
|
||||
s32 windowId = gUnknown_203F3C8->unk_0176[whichWindow];
|
||||
PutWindowTilemap(windowId);
|
||||
FillWindowPixelBuffer(windowId, 0);
|
||||
switch (whichWindow)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
s32 x;
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_018B);
|
||||
x = 160 - GetStringWidth(3, gUnknown_203F3C8->unk_01B4, GetFontAttribute(3, 2));
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_01B4);
|
||||
if (gUnknown_203F3C8->unk_0000.unk_04 != 0)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 2, 166, 17, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal1], 0, gUnknown_203F3C8->unk_01DD);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
for (; sp0C < 4; sp0C++)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal2], 0, gUnknown_203F3C8->unk_01E4[sp0C]);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0], gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_0288);
|
||||
if (gUnknown_203F3C8->unk_0000.unk_08_0 != 2)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 16 + gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0], gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02B1);
|
||||
}
|
||||
else
|
||||
{
|
||||
s32 x = 0;
|
||||
s32 y = gUnknown_8467070[gUnknown_203F3C8->unk_0000.unk_08_0] + 16;
|
||||
s32 spacing = GetFontAttribute(3, 2);
|
||||
for (; sp0C < gUnknown_203F3C8->unk_0175; sp0C++)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02DC[sp0C].unk_01);
|
||||
if (gUnknown_203F3C8->unk_02DC[sp0C].unk_42[0] != EOS)
|
||||
{
|
||||
x += GetStringWidth(3, gUnknown_203F3C8->unk_02DC[sp0C].unk_01, spacing);
|
||||
AddTextPrinterParameterized3(windowId, 2, x, y, gUnknown_8467068[gUnknown_203F3C8->unk_0170->textPal3], 0, gUnknown_203F3C8->unk_02DC[sp0C].unk_42);
|
||||
x += GetStringWidth(3, gUnknown_203F3C8->unk_02DC[sp0C].unk_42, spacing) + gUnknown_203F3C8->unk_02DC[sp0C].unk_00;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
CopyWindowToVram(windowId, 3);
|
||||
}
|
||||
|
||||
void sub_8146060(void)
|
||||
{
|
||||
u8 r7 = 0;
|
||||
gUnknown_203F3C8->unk_017C = 0xFF;
|
||||
if (gUnknown_203F3C8->unk_014C.unk_06 != SPECIES_NONE)
|
||||
{
|
||||
gUnknown_203F3C8->unk_017C = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(gUnknown_203F3C8->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE);
|
||||
gSprites[gUnknown_203F3C8->unk_017C].oam.priority = 2;
|
||||
}
|
||||
if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1)
|
||||
{
|
||||
LoadCompressedSpriteSheetUsingHeap(&gUnknown_8467F58);
|
||||
LoadSpritePalette(&gUnknown_8467F60[gUnknown_203F3C8->unk_0170->textPal4]);
|
||||
for (; r7 < gUnknown_203F3C8->unk_0000.unk_09; r7++)
|
||||
{
|
||||
gUnknown_203F3C8->unk_017D[r7][0] = 0xFF;
|
||||
gUnknown_203F3C8->unk_017D[r7][1] = 0xFF;
|
||||
gUnknown_203F3C8->unk_017D[r7][0] = CreateSprite(&gUnknown_8467FA0, 0xd8 - 32 * r7, 0x90, 8);
|
||||
if (gUnknown_203F3C8->unk_014C.unk_08[0][r7] != 0)
|
||||
{
|
||||
gUnknown_203F3C8->unk_017D[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(gUnknown_203F3C8->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0);
|
||||
gSprites[gUnknown_203F3C8->unk_017D[r7][1]].oam.priority = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_81461D8(void)
|
||||
{
|
||||
u8 r6 = 0;
|
||||
if (gUnknown_203F3C8->unk_017C != 0xFF)
|
||||
DestroyMonIcon(&gSprites[gUnknown_203F3C8->unk_017C]);
|
||||
if (gUnknown_203F3C8->unk_0000.unk_09 != 0 && gUnknown_203F3C8->unk_0000.unk_08_0 == 1)
|
||||
{
|
||||
for (; r6 < gUnknown_203F3C8->unk_0000.unk_09; r6++)
|
||||
{
|
||||
if (gUnknown_203F3C8->unk_017D[r6][0] != 0xFF)
|
||||
{
|
||||
DestroySprite(&gSprites[gUnknown_203F3C8->unk_017D[r6][0]]);
|
||||
// This might be a typo. Uncomment the next line, and comment the one that follows, to get the presumed intended behavior.
|
||||
// if (gUnknown_203F3C8->unk_017D[r6][1] != 0xFF)
|
||||
if (gUnknown_203F3C8->unk_017D[r6][0] != 0xFF)
|
||||
{
|
||||
DestroyMonIcon(&gSprites[gUnknown_203F3C8->unk_017D[r6][1]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
FreeSpriteTilesByTag(0x8000);
|
||||
FreeSpritePaletteByTag(0x8000);
|
||||
}
|
||||
}
|
||||
|
||||
struct UnkStruct_203F3CC
|
||||
{
|
||||
/*0000*/ struct MEWonderNewsData unk_0000;
|
||||
/*01bc*/ const struct UnkStruct_8467FB8 * unk_01BC;
|
||||
/*01c0*/ u8 unk_01C0_0:1;
|
||||
u8 unk_01C0_1:7;
|
||||
/*01c1*/ u8 unk_01C1;
|
||||
/*01c2*/ u8 unk_01C2_0:1;
|
||||
u8 unk_01C2_1:7;
|
||||
/*01c3*/ u8 unk_01C3_0:1;
|
||||
u8 unk_01C3_1:7;
|
||||
/*01c4*/ u16 unk_01C4;
|
||||
/*01c6*/ u16 unk_01C6;
|
||||
/*01c8*/ u16 unk_01C8[2];
|
||||
/*01cc*/ u8 filler_01CC[2];
|
||||
/*01ce*/ u8 unk_01CE[41];
|
||||
/*01f7*/ u8 unk_01F7[10][41];
|
||||
/*0394*/ struct ScrollArrowsTemplate unk_0394;
|
||||
/*03a4*/ u8 buffer_03A4[0x1000];
|
||||
};
|
||||
|
||||
EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_203F3CC = NULL;
|
||||
|
||||
void sub_8146980(void);
|
||||
void sub_8146A30(void);
|
||||
void sub_8146B58(void);
|
||||
|
||||
const u8 gUnknown_8468038[][3] = {
|
||||
{0, 2, 3},
|
||||
{0, 1, 2}
|
||||
};
|
||||
const struct WindowTemplate gUnknown_8468040[] = {
|
||||
{0, 1, 0, 28, 3, 15, 0x000},
|
||||
{2, 1, 3, 28, 20, 15, 0x000}
|
||||
};
|
||||
const struct ScrollArrowsTemplate gUnknown_8468050 = {
|
||||
0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98,
|
||||
0x0000, 0x0002, 0x1000, 0x1000, 0x0,
|
||||
};
|
||||
|
||||
const u16 gUnknown_8468060[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal");
|
||||
const u16 gUnknown_8468080[] = INCBIN_U16("data/graphics/mevent/pal_468080.gbapal");
|
||||
const u16 gUnknown_84680A0[] = INCBIN_U16("data/graphics/mevent/pal_4680A0.gbapal");
|
||||
const u8 gUnknown_84680C0[] = INCBIN_U8("data/graphics/mevent/gfx_4680C0.4bpp.lz");
|
||||
const u8 gUnknown_8468140[] = INCBIN_U8("data/graphics/mevent/tilemap_468140.bin.lz");
|
||||
const u8 gUnknown_846821C[] = INCBIN_U8("data/graphics/mevent/gfx_46821C.4bpp.lz");
|
||||
const u8 gUnknown_846824C[] = INCBIN_U8("data/graphics/mevent/tilemap_46824C.bin.lz");
|
||||
const u8 gUnknown_846830C[] = INCBIN_U8("data/graphics/mevent/gfx_46830C.4bpp.lz");
|
||||
const u8 gUnknown_846837C[] = INCBIN_U8("data/graphics/mevent/tilemap_46837C.bin.lz");
|
||||
const u8 gUnknown_8468448[] = INCBIN_U8("data/graphics/mevent/gfx_468448.4bpp.lz");
|
||||
const u8 gUnknown_84684D8[] = INCBIN_U8("data/graphics/mevent/tilemap_4684D8.bin.lz");
|
||||
const u8 gUnknown_84685B4[] = INCBIN_U8("data/graphics/mevent/gfx_4685B4.4bpp.lz");
|
||||
const u8 gUnknown_8468644[] = INCBIN_U8("data/graphics/mevent/tilemap_468644.bin.lz");
|
||||
|
||||
const struct UnkStruct_8467FB8 gUnknown_8468720[] = {
|
||||
{1, 0, 0, 0, gUnknown_84680C0, gUnknown_8468140, gUnknown_8468060},
|
||||
{1, 0, 0, 0, gUnknown_846821C, gUnknown_846824C, gUnknown_84670AC},
|
||||
{1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_84670CC},
|
||||
{1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_84670EC},
|
||||
{1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_846710C},
|
||||
{1, 0, 0, 0, gUnknown_846830C, gUnknown_846837C, gUnknown_846712C},
|
||||
{1, 0, 0, 0, gUnknown_8468448, gUnknown_84684D8, gUnknown_8468080},
|
||||
{1, 0, 0, 0, gUnknown_84685B4, gUnknown_8468644, gUnknown_84680A0}
|
||||
};
|
||||
|
||||
bool32 InitWonderNewsResources(const struct MEWonderNewsData * a0)
|
||||
{
|
||||
if (a0 == NULL)
|
||||
return FALSE;
|
||||
gUnknown_203F3CC = AllocZeroed(sizeof(struct UnkStruct_203F3CC));
|
||||
if (gUnknown_203F3CC == NULL)
|
||||
return FALSE;
|
||||
gUnknown_203F3CC->unk_0000 = *a0;
|
||||
if (gUnknown_203F3CC->unk_0000.unk_03 >= NELEMS(gUnknown_8468720))
|
||||
gUnknown_203F3CC->unk_0000.unk_03 = 0;
|
||||
gUnknown_203F3CC->unk_01BC = &gUnknown_8468720[gUnknown_203F3CC->unk_0000.unk_03];
|
||||
gUnknown_203F3CC->unk_01C1 = 0xFF;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DestroyWonderNewsResources(void)
|
||||
{
|
||||
if (gUnknown_203F3CC != NULL)
|
||||
{
|
||||
*gUnknown_203F3CC = (struct UnkStruct_203F3CC){};
|
||||
Free(gUnknown_203F3CC);
|
||||
gUnknown_203F3CC = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
s32 FadeToWonderNewsMenu(void)
|
||||
{
|
||||
if (gUnknown_203F3CC == NULL)
|
||||
return -1;
|
||||
|
||||
switch (gUnknown_203F3CC->unk_01C0_1)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
ChangeBgY(0, 0, 0);
|
||||
ChangeBgY(1, 0, 0);
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0x1A98);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0x1F);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0x1B);
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
DecompressAndCopyTileDataToVram(3, gUnknown_203F3CC->unk_01BC->tiles, 0, 8, 0);
|
||||
gUnknown_203F3CC->unk_01C8[0] = AddWindow(&gUnknown_8468040[0]);
|
||||
gUnknown_203F3CC->unk_01C8[1] = AddWindow(&gUnknown_8468040[1]);
|
||||
break;
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(gUnknown_203F3CC->unk_01BC->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(gUnknown_203F3CC->unk_01BC->map, gUnknown_203F3CC->buffer_03A4);
|
||||
CopyRectToBgTilemapBufferRect(1, gUnknown_203F3CC->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0);
|
||||
CopyRectToBgTilemapBufferRect(3, gUnknown_203F3CC->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
break;
|
||||
case 4:
|
||||
sub_8146980();
|
||||
break;
|
||||
case 5:
|
||||
sub_8146A30();
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 6:
|
||||
ShowBg(1);
|
||||
ShowBg(2);
|
||||
ShowBg(3);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
gUnknown_203F3CC->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_203F3CC->unk_0394, &gUnknown_203F3CC->unk_01C6);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
UpdatePaletteFade();
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
gUnknown_203F3CC->unk_01C0_1 = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
++gUnknown_203F3CC->unk_01C0_1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 FadeOutFromWonderNews(bool32 flag)
|
||||
{
|
||||
if (gUnknown_203F3CC == NULL)
|
||||
return -1;
|
||||
switch (gUnknown_203F3CC->unk_01C0_1)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
ChangeBgY(2, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24);
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
break;
|
||||
case 3:
|
||||
HideBg(1);
|
||||
HideBg(2);
|
||||
RemoveWindow(gUnknown_203F3CC->unk_01C8[1]);
|
||||
RemoveWindow(gUnknown_203F3CC->unk_01C8[0]);
|
||||
break;
|
||||
case 4:
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
if (gUnknown_203F3CC->unk_01C1 != 0xFF)
|
||||
{
|
||||
RemoveScrollIndicatorArrowPair(gUnknown_203F3CC->unk_01C1);
|
||||
gUnknown_203F3CC->unk_01C1 = 0xFF;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
|
||||
break;
|
||||
case 6:
|
||||
MG_DrawCheckerboardPattern();
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
gUnknown_203F3CC->unk_01C0_1 = 0;
|
||||
return 1;
|
||||
}
|
||||
++gUnknown_203F3CC->unk_01C0_1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void MENews_RemoveScrollIndicatorArrowPair(void)
|
||||
{
|
||||
if (!gUnknown_203F3CC->unk_01C0_0 && gUnknown_203F3CC->unk_01C1 != 0xFF)
|
||||
{
|
||||
RemoveScrollIndicatorArrowPair(gUnknown_203F3CC->unk_01C1);
|
||||
gUnknown_203F3CC->unk_01C1 = 0xFF;
|
||||
gUnknown_203F3CC->unk_01C0_0 = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MENews_AddScrollIndicatorArrowPair(void)
|
||||
{
|
||||
if (gUnknown_203F3CC->unk_01C0_0)
|
||||
{
|
||||
gUnknown_203F3CC->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_203F3CC->unk_0394, &gUnknown_203F3CC->unk_01C6);
|
||||
gUnknown_203F3CC->unk_01C0_0 = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
u32 MENews_GetInput(u16 input)
|
||||
{
|
||||
if (gUnknown_203F3CC->unk_01C2_0)
|
||||
{
|
||||
sub_8146B58();
|
||||
return 0xFF;
|
||||
}
|
||||
switch (input)
|
||||
{
|
||||
case A_BUTTON:
|
||||
return 0;
|
||||
case B_BUTTON:
|
||||
return 1;
|
||||
case DPAD_UP:
|
||||
if (gUnknown_203F3CC->unk_01C6 == 0)
|
||||
return 0xFF;
|
||||
if (gUnknown_203F3CC->unk_01C0_0)
|
||||
return 0xFF;
|
||||
gUnknown_203F3CC->unk_01C3_0 = FALSE;
|
||||
break;
|
||||
case DPAD_DOWN:
|
||||
if (gUnknown_203F3CC->unk_01C6 == gUnknown_203F3CC->unk_01C4)
|
||||
return 0xFF;
|
||||
if (gUnknown_203F3CC->unk_01C0_0)
|
||||
return 0xFF;
|
||||
gUnknown_203F3CC->unk_01C3_0 = TRUE;
|
||||
break;
|
||||
default:
|
||||
return 0xFF;
|
||||
}
|
||||
gUnknown_203F3CC->unk_01C2_0 = TRUE;
|
||||
gUnknown_203F3CC->unk_01C2_1 = 2;
|
||||
gUnknown_203F3CC->unk_01C3_1 = 0;
|
||||
if (gUnknown_203F3CC->unk_01C3_0 == FALSE)
|
||||
return 2;
|
||||
else
|
||||
return 3;
|
||||
}
|
||||
|
||||
void sub_8146980(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
memcpy(gUnknown_203F3CC->unk_01CE, gUnknown_203F3CC->unk_0000.unk_04, 40);
|
||||
gUnknown_203F3CC->unk_01CE[40] = EOS;
|
||||
for (; i < 10; ++i)
|
||||
{
|
||||
memcpy(gUnknown_203F3CC->unk_01F7[i], gUnknown_203F3CC->unk_0000.unk_2C[i], 40);
|
||||
gUnknown_203F3CC->unk_01F7[i][40] = EOS;
|
||||
if (i > 7 && gUnknown_203F3CC->unk_01F7[i][0] != EOS)
|
||||
++gUnknown_203F3CC->unk_01C4;
|
||||
}
|
||||
gUnknown_203F3CC->unk_0394 = gUnknown_8468050;
|
||||
gUnknown_203F3CC->unk_0394.fullyDownThreshold = gUnknown_203F3CC->unk_01C4;
|
||||
}
|
||||
|
||||
void sub_8146A30(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
s32 x;
|
||||
PutWindowTilemap(gUnknown_203F3CC->unk_01C8[0]);
|
||||
PutWindowTilemap(gUnknown_203F3CC->unk_01C8[1]);
|
||||
FillWindowPixelBuffer(gUnknown_203F3CC->unk_01C8[0], 0);
|
||||
FillWindowPixelBuffer(gUnknown_203F3CC->unk_01C8[1], 0);
|
||||
x = (0xe0 - GetStringWidth(3, gUnknown_203F3CC->unk_01CE, GetFontAttribute(3, 2))) / 2;
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(gUnknown_203F3CC->unk_01C8[0], 3, x, 6, gUnknown_8468038[gUnknown_203F3CC->unk_01BC->textPal1], 0, gUnknown_203F3CC->unk_01CE);
|
||||
for (; i < 10; ++i)
|
||||
{
|
||||
AddTextPrinterParameterized3(gUnknown_203F3CC->unk_01C8[1], 3, 0, 16 * i + 2, gUnknown_8468038[gUnknown_203F3CC->unk_01BC->textPal2], 0, gUnknown_203F3CC->unk_01F7[i]);
|
||||
}
|
||||
CopyWindowToVram(gUnknown_203F3CC->unk_01C8[0], 3);
|
||||
CopyWindowToVram(gUnknown_203F3CC->unk_01C8[1], 3);
|
||||
}
|
||||
|
||||
void sub_8146B58(void)
|
||||
{
|
||||
u16 r4 = gUnknown_203F3CC->unk_01C2_1;
|
||||
r4 <<= 8;
|
||||
if (gUnknown_203F3CC->unk_01C3_0)
|
||||
{
|
||||
ChangeBgY(2, r4, 1);
|
||||
ChangeBgY(3, r4, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeBgY(2, r4, 2);
|
||||
ChangeBgY(3, r4, 2);
|
||||
}
|
||||
gUnknown_203F3CC->unk_01C3_1 += gUnknown_203F3CC->unk_01C2_1;
|
||||
if (gUnknown_203F3CC->unk_01C3_1 > 15)
|
||||
{
|
||||
if (gUnknown_203F3CC->unk_01C3_0)
|
||||
++gUnknown_203F3CC->unk_01C6;
|
||||
else
|
||||
--gUnknown_203F3CC->unk_01C6;
|
||||
gUnknown_203F3CC->unk_01C2_0 = FALSE;
|
||||
gUnknown_203F3CC->unk_01C3_1 = 0;
|
||||
}
|
||||
}
|
||||
+5
-4
@@ -195,15 +195,16 @@ static u32 client_mainseq_4(struct mevent_client * svr)
|
||||
mevent_client_send_word(svr, 0x13, svr->param);
|
||||
break;
|
||||
case 10:
|
||||
sub_8143F68(svr->recvBuffer);
|
||||
OverwriteSavedWonderCardWithReceivedCard(svr->recvBuffer);
|
||||
break;
|
||||
case 9:
|
||||
if (!sub_8143EF4(svr->recvBuffer))
|
||||
if (!MEvent_HaveAlreadyReceivedWonderNews(svr->recvBuffer))
|
||||
{
|
||||
sub_8143DC8(svr->recvBuffer);
|
||||
OverwriteSavedWonderNewsWithReceivedNews(svr->recvBuffer);
|
||||
mevent_client_send_word(svr, 0x13, 0);
|
||||
}
|
||||
else
|
||||
// Other trainer already has news
|
||||
mevent_client_send_word(svr, 0x13, 1);
|
||||
break;
|
||||
case 15:
|
||||
@@ -211,7 +212,7 @@ static u32 client_mainseq_4(struct mevent_client * svr)
|
||||
svr->flag = 0;
|
||||
break;
|
||||
case 16:
|
||||
sub_8144254(svr->recvBuffer);
|
||||
MEvent_ReceiveDistributionMon(svr->recvBuffer);
|
||||
break;
|
||||
case 17:
|
||||
MEventSetRamScript(svr->recvBuffer, 1000);
|
||||
|
||||
+2
-2
@@ -176,7 +176,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
|
||||
case 9:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 408);
|
||||
ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord);
|
||||
svr->param = sub_8144434(ptr, svr->mevent_unk1442cc, ptr);
|
||||
svr->param = MEvent_CanPlayerReceiveDistributionMon(ptr, svr->mevent_unk1442cc, ptr);
|
||||
break;
|
||||
case 10:
|
||||
AGB_ASSERT_EX(cmd->parameter == NULL, ABSPATH("mevent_server.c"), 415);
|
||||
@@ -247,7 +247,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
|
||||
case 26:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 506);
|
||||
memcpy(svr->card, GetSavedWonderCard(), 332);
|
||||
sub_814410C(svr->card);
|
||||
MEvent_WonderCardResetUnk08_6(svr->card);
|
||||
break;
|
||||
case 27:
|
||||
AGB_ASSERT_EX(cmd->flag == FALSE && cmd->parameter == NULL, ABSPATH("mevent_server.c"), 512);
|
||||
|
||||
@@ -0,0 +1,459 @@
|
||||
#include "global.h"
|
||||
#include "constants/species.h"
|
||||
#include "bg.h"
|
||||
#include "gpu_regs.h"
|
||||
#include "palette.h"
|
||||
#include "decompress.h"
|
||||
#include "malloc.h"
|
||||
#include "menu.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "pokemon_icon.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "string_util.h"
|
||||
#include "link_rfu.h"
|
||||
#include "mevent.h"
|
||||
#include "battle_anim.h"
|
||||
|
||||
struct MEventScreenMgr_02DC
|
||||
{
|
||||
u8 nDigits;
|
||||
u8 nameTxt[41];
|
||||
u8 numberTxt[4];
|
||||
};
|
||||
|
||||
struct MEventScreenMgr
|
||||
{
|
||||
/*0000*/ struct MEWonderCardData wonderCard;
|
||||
/*014c*/ struct MEventBuffer_3430_Sub buff3430Sub;
|
||||
/*0170*/ const struct UnkStruct_8467FB8 * bgSpec;
|
||||
/*0174*/ u8 state;
|
||||
/*0175*/ u8 recordIdx;
|
||||
/*0176*/ u16 windowIds[3];
|
||||
/*017C*/ u8 monIconId;
|
||||
/*017D*/ u8 cardIconAndShadowSprites[7][2];
|
||||
/*018B*/ u8 title[41];
|
||||
/*01B4*/ u8 subtitle[41];
|
||||
/*01DD*/ u8 unk_01DD[7];
|
||||
/*01E4*/ u8 mainMessageLines[4][41];
|
||||
/*0288*/ u8 instructionsLine1[41];
|
||||
/*02B1*/ u8 instructionsLine2[41];
|
||||
/*02DC*/ struct MEventScreenMgr_02DC recordStrings[8];
|
||||
/*045C*/ u8 buffer_045C[0x1000];
|
||||
};
|
||||
|
||||
static EWRAM_DATA struct MEventScreenMgr * sMEventScreenData = NULL;
|
||||
|
||||
static void sub_8145A98(void);
|
||||
static void sub_8145D18(u8 whichWindow);
|
||||
static void sub_8146060(void);
|
||||
static void sub_81461D8(void);
|
||||
|
||||
static const u8 gUnknown_8467068[][3] = {
|
||||
{0, 2, 3},
|
||||
{0, 1, 2}
|
||||
};
|
||||
|
||||
static const u8 ALIGNED(4) sTextYCoords[3] = {7, 4, 7};
|
||||
|
||||
static const struct WindowTemplate sWindowTemplates[] = {
|
||||
{
|
||||
.bg = 1,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 1,
|
||||
.width = 25,
|
||||
.height = 4,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x29c},
|
||||
{
|
||||
.bg = 1,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 6,
|
||||
.width = 28,
|
||||
.height = 8,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x1bc},
|
||||
{
|
||||
.bg = 1,
|
||||
.tilemapLeft = 1,
|
||||
.tilemapTop = 14,
|
||||
.width = 28,
|
||||
.height = 5,
|
||||
.paletteNum = 15,
|
||||
.baseBlock = 0x130}
|
||||
};
|
||||
|
||||
static const u16 gCard0Pal[] = INCBIN_U16("data/graphics/mevent/pal_46708C.gbapal");
|
||||
const u16 gCard1Pal[] = INCBIN_U16("data/graphics/mevent/pal_4670AC.gbapal");
|
||||
const u16 gCard2Pal[] = INCBIN_U16("data/graphics/mevent/pal_4670CC.gbapal");
|
||||
const u16 gCard3Pal[] = INCBIN_U16("data/graphics/mevent/pal_4670EC.gbapal");
|
||||
const u16 gCard4Pal[] = INCBIN_U16("data/graphics/mevent/pal_46710C.gbapal");
|
||||
const u16 gCard5Pal[] = INCBIN_U16("data/graphics/mevent/pal_46712C.gbapal");
|
||||
static const u16 gCard6Pal[] = INCBIN_U16("data/graphics/mevent/pal_46714C.gbapal");
|
||||
static const u16 gCard7Pal[] = INCBIN_U16("data/graphics/mevent/pal_46716C.gbapal");
|
||||
static const u8 sCard0Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46718C.4bpp.lz");
|
||||
static const u8 sCard0Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467288.bin.lz");
|
||||
static const u8 sCard1Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46737C.4bpp.lz");
|
||||
static const u8 sCard1Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467470.bin.lz");
|
||||
static const u8 sCard2Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_467558.4bpp.lz");
|
||||
static const u8 sCard2Map[] = INCBIN_U8("data/graphics/mevent/tilemap_46762C.bin.lz");
|
||||
static const u8 sCard6Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_467700.4bpp.lz");
|
||||
static const u8 sCard6Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467934.bin.lz");
|
||||
static const u8 sCard7Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_467A7C.4bpp.lz");
|
||||
static const u8 sCard7Map[] = INCBIN_U8("data/graphics/mevent/tilemap_467CAC.bin.lz");
|
||||
static const u16 gUnknown_8467DF4[] = INCBIN_U16("data/graphics/mevent/pal_467DF4.gbapal");
|
||||
static const u16 gUnknown_8467E14[] = INCBIN_U16("data/graphics/mevent/pal_467E14.gbapal");
|
||||
static const u16 gUnknown_8467E34[] = INCBIN_U16("data/graphics/mevent/pal_467E34.gbapal");
|
||||
static const u16 gUnknown_8467E54[] = INCBIN_U16("data/graphics/mevent/pal_467E54.gbapal");
|
||||
static const u16 gUnknown_8467E74[] = INCBIN_U16("data/graphics/mevent/pal_467E74.gbapal");
|
||||
static const u16 gUnknown_8467E94[] = INCBIN_U16("data/graphics/mevent/pal_467E94.gbapal");
|
||||
static const u16 gUnknown_8467EB4[] = INCBIN_U16("data/graphics/mevent/pal_467EB4.gbapal");
|
||||
static const u16 gUnknown_8467ED4[] = INCBIN_U16("data/graphics/mevent/pal_467ED4.gbapal");
|
||||
static const u32 gUnknown_8467EF4[] = INCBIN_U32("data/graphics/mevent/gfx_467EF4.4bpp.lz");
|
||||
|
||||
static const struct CompressedSpriteSheet sShadowSpriteSheet = {
|
||||
gUnknown_8467EF4, 0x100, 0x8000
|
||||
};
|
||||
|
||||
static const struct SpritePalette sShadowSpritePalettes[] = {
|
||||
{gUnknown_8467DF4, 0x8000},
|
||||
{gUnknown_8467E14, 0x8000},
|
||||
{gUnknown_8467E34, 0x8000},
|
||||
{gUnknown_8467E54, 0x8000},
|
||||
{gUnknown_8467E74, 0x8000},
|
||||
{gUnknown_8467E94, 0x8000},
|
||||
{gUnknown_8467EB4, 0x8000},
|
||||
{gUnknown_8467ED4, 0x8000}
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate sShadowSpriteTemplate = {
|
||||
0x8000, 0x8000, &gOamData_AffineOff_ObjNormal_32x16, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
|
||||
};
|
||||
|
||||
static const struct UnkStruct_8467FB8 sCardGfxPtrs[8] = {
|
||||
{1, 0, 0, 0, sCard0Gfx, sCard0Map, gCard0Pal},
|
||||
{1, 0, 0, 1, sCard1Gfx, sCard1Map, gCard1Pal},
|
||||
{1, 0, 0, 2, sCard2Gfx, sCard2Map, gCard2Pal},
|
||||
{1, 0, 0, 3, sCard2Gfx, sCard2Map, gCard3Pal},
|
||||
{1, 0, 0, 4, sCard2Gfx, sCard2Map, gCard4Pal},
|
||||
{1, 0, 0, 5, sCard2Gfx, sCard2Map, gCard5Pal},
|
||||
{1, 0, 0, 6, sCard6Gfx, sCard6Map, gCard6Pal},
|
||||
{1, 0, 0, 7, sCard7Gfx, sCard7Map, gCard7Pal}
|
||||
};
|
||||
|
||||
bool32 InitWonderCardResources(struct MEWonderCardData * card, struct MEventBuffer_3430_Sub * b3430sub)
|
||||
{
|
||||
if (card == NULL || b3430sub == NULL)
|
||||
return FALSE;
|
||||
sMEventScreenData = AllocZeroed(sizeof(struct MEventScreenMgr));
|
||||
if (sMEventScreenData == NULL)
|
||||
return FALSE;
|
||||
sMEventScreenData->wonderCard = *card;
|
||||
sMEventScreenData->buff3430Sub = *b3430sub;
|
||||
if (sMEventScreenData->wonderCard.unk_08_2 >= NELEMS(sCardGfxPtrs))
|
||||
sMEventScreenData->wonderCard.unk_08_2 = 0;
|
||||
if (sMEventScreenData->wonderCard.unk_08_0 >= NELEMS(sTextYCoords))
|
||||
sMEventScreenData->wonderCard.unk_08_0 = 0;
|
||||
if (sMEventScreenData->wonderCard.recvMonCapacity > NELEMS(sMEventScreenData->cardIconAndShadowSprites))
|
||||
sMEventScreenData->wonderCard.recvMonCapacity = 0;
|
||||
sMEventScreenData->bgSpec = &sCardGfxPtrs[sMEventScreenData->wonderCard.unk_08_2];
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DestroyWonderCardResources(void)
|
||||
{
|
||||
if (sMEventScreenData != NULL)
|
||||
{
|
||||
*sMEventScreenData = (struct MEventScreenMgr){};
|
||||
Free(sMEventScreenData);
|
||||
sMEventScreenData = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
s32 FadeToWonderCardMenu(void)
|
||||
{
|
||||
if (sMEventScreenData == NULL)
|
||||
return -1;
|
||||
switch(sMEventScreenData->state)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
DecompressAndCopyTileDataToVram(2, sMEventScreenData->bgSpec->tiles, 0, 0x008, 0);
|
||||
sMEventScreenData->windowIds[0] = AddWindow(&sWindowTemplates[0]);
|
||||
sMEventScreenData->windowIds[1] = AddWindow(&sWindowTemplates[1]);
|
||||
sMEventScreenData->windowIds[2] = AddWindow(&sWindowTemplates[2]);
|
||||
break;
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(sMEventScreenData->bgSpec->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(sMEventScreenData->bgSpec->map, sMEventScreenData->buffer_045C);
|
||||
CopyRectToBgTilemapBufferRect(2, sMEventScreenData->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 4:
|
||||
sub_8145A98();
|
||||
break;
|
||||
case 5:
|
||||
sub_8145D18(0);
|
||||
sub_8145D18(1);
|
||||
sub_8145D18(2);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
break;
|
||||
case 6:
|
||||
LoadMonIconPalettes();
|
||||
break;
|
||||
case 7:
|
||||
ShowBg(1);
|
||||
ShowBg(2);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
sub_8146060();
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
|
||||
UpdatePaletteFade();
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
sMEventScreenData->state = 0;
|
||||
return 1;
|
||||
}
|
||||
++sMEventScreenData->state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 FadeOutFromWonderCard(bool32 flag)
|
||||
{
|
||||
if (sMEventScreenData == NULL)
|
||||
return -1;
|
||||
switch (sMEventScreenData->state)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 3:
|
||||
HideBg(1);
|
||||
HideBg(2);
|
||||
RemoveWindow(sMEventScreenData->windowIds[2]);
|
||||
RemoveWindow(sMEventScreenData->windowIds[1]);
|
||||
RemoveWindow(sMEventScreenData->windowIds[0]);
|
||||
break;
|
||||
case 4:
|
||||
sub_81461D8();
|
||||
FreeMonIconPalettes();
|
||||
break;
|
||||
case 5:
|
||||
PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
|
||||
break;
|
||||
case 6:
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
sMEventScreenData->state = 0;
|
||||
return 1;
|
||||
}
|
||||
++sMEventScreenData->state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void sub_8145A98(void)
|
||||
{
|
||||
u16 i = 0;
|
||||
u16 r6;
|
||||
u16 sp0[3] = {0, 0, 0};
|
||||
|
||||
memcpy(sMEventScreenData->title, sMEventScreenData->wonderCard.unk_0A, 40);
|
||||
sMEventScreenData->title[40] = EOS;
|
||||
memcpy(sMEventScreenData->subtitle, sMEventScreenData->wonderCard.unk_32, 40);
|
||||
sMEventScreenData->subtitle[40] = EOS;
|
||||
if (sMEventScreenData->wonderCard.unk_04 > 999999)
|
||||
sMEventScreenData->wonderCard.unk_04 = 999999;
|
||||
ConvertIntToDecimalStringN(sMEventScreenData->unk_01DD, sMEventScreenData->wonderCard.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6);
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
memcpy(sMEventScreenData->mainMessageLines[i], sMEventScreenData->wonderCard.unk_5A[i], 40);
|
||||
sMEventScreenData->mainMessageLines[i][40] = EOS;
|
||||
}
|
||||
memcpy(sMEventScreenData->instructionsLine1, sMEventScreenData->wonderCard.unk_FA, 40);
|
||||
sMEventScreenData->instructionsLine1[40] = EOS;
|
||||
switch (sMEventScreenData->wonderCard.unk_08_0)
|
||||
{
|
||||
case 0:
|
||||
memcpy(sMEventScreenData->instructionsLine2, sMEventScreenData->wonderCard.unk_122, 40);
|
||||
sMEventScreenData->instructionsLine2[40] = EOS;
|
||||
break;
|
||||
case 1:
|
||||
sMEventScreenData->instructionsLine2[00] = EOS;
|
||||
break;
|
||||
case 2:
|
||||
sMEventScreenData->instructionsLine2[00] = EOS;
|
||||
sp0[0] = sMEventScreenData->buff3430Sub.linkWins < 999 ? sMEventScreenData->buff3430Sub.linkWins : 999;
|
||||
sp0[1] = sMEventScreenData->buff3430Sub.linkLosses < 999 ? sMEventScreenData->buff3430Sub.linkLosses : 999;
|
||||
sp0[2] = sMEventScreenData->buff3430Sub.linkTrades < 999 ? sMEventScreenData->buff3430Sub.linkTrades : 999;
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
memset(sMEventScreenData->recordStrings[i].numberTxt, EOS, 4);
|
||||
memset(sMEventScreenData->recordStrings[i].nameTxt, EOS, 41);
|
||||
}
|
||||
for (i = 0, r6 = 0; i < 40; i++)
|
||||
{
|
||||
if (sMEventScreenData->wonderCard.unk_122[i] != CHAR_SPECIAL_F7)
|
||||
{
|
||||
sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nameTxt[r6] = sMEventScreenData->wonderCard.unk_122[i];
|
||||
r6++;
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 r3 = sMEventScreenData->wonderCard.unk_122[i + 1];
|
||||
if (r3 > 2)
|
||||
{
|
||||
i += 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
ConvertIntToDecimalStringN(sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].numberTxt, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3);
|
||||
sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nDigits = sMEventScreenData->wonderCard.unk_122[i + 2];
|
||||
sMEventScreenData->recordIdx++;
|
||||
if (sMEventScreenData->recordIdx > 7)
|
||||
break;
|
||||
r6 = 0;
|
||||
i += 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_8145D18(u8 whichWindow)
|
||||
{
|
||||
s8 sp0C = 0;
|
||||
s32 windowId = sMEventScreenData->windowIds[whichWindow];
|
||||
PutWindowTilemap(windowId);
|
||||
FillWindowPixelBuffer(windowId, 0);
|
||||
switch (whichWindow)
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
s32 x;
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->title);
|
||||
x = 160 - GetStringWidth(3, sMEventScreenData->subtitle, GetFontAttribute(3, 2));
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->subtitle);
|
||||
if (sMEventScreenData->wonderCard.unk_04 != 0)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 2, 166, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->unk_01DD);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
for (; sp0C < 4; sp0C++)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_8467068[sMEventScreenData->bgSpec->textPal2], 0, sMEventScreenData->mainMessageLines[sp0C]);
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, sTextYCoords[sMEventScreenData->wonderCard.unk_08_0], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine1);
|
||||
if (sMEventScreenData->wonderCard.unk_08_0 != 2)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, 0, 16 + sTextYCoords[sMEventScreenData->wonderCard.unk_08_0], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine2);
|
||||
}
|
||||
else
|
||||
{
|
||||
s32 x = 0;
|
||||
s32 y = sTextYCoords[sMEventScreenData->wonderCard.unk_08_0] + 16;
|
||||
s32 spacing = GetFontAttribute(3, 2);
|
||||
for (; sp0C < sMEventScreenData->recordIdx; sp0C++)
|
||||
{
|
||||
AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->recordStrings[sp0C].nameTxt);
|
||||
if (sMEventScreenData->recordStrings[sp0C].numberTxt[0] != EOS)
|
||||
{
|
||||
x += GetStringWidth(3, sMEventScreenData->recordStrings[sp0C].nameTxt, spacing);
|
||||
AddTextPrinterParameterized3(windowId, 2, x, y, gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->recordStrings[sp0C].numberTxt);
|
||||
x += GetStringWidth(3, sMEventScreenData->recordStrings[sp0C].numberTxt, spacing) + sMEventScreenData->recordStrings[sp0C].nDigits;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
CopyWindowToVram(windowId, 3);
|
||||
}
|
||||
|
||||
static void sub_8146060(void)
|
||||
{
|
||||
u8 r7 = 0;
|
||||
sMEventScreenData->monIconId = 0xFF;
|
||||
if (sMEventScreenData->buff3430Sub.unk_06 != SPECIES_NONE)
|
||||
{
|
||||
sMEventScreenData->monIconId = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE);
|
||||
gSprites[sMEventScreenData->monIconId].oam.priority = 2;
|
||||
}
|
||||
if (sMEventScreenData->wonderCard.recvMonCapacity != 0 && sMEventScreenData->wonderCard.unk_08_0 == 1)
|
||||
{
|
||||
LoadCompressedSpriteSheetUsingHeap(&sShadowSpriteSheet);
|
||||
LoadSpritePalette(&sShadowSpritePalettes[sMEventScreenData->bgSpec->index]);
|
||||
for (; r7 < sMEventScreenData->wonderCard.recvMonCapacity; r7++)
|
||||
{
|
||||
sMEventScreenData->cardIconAndShadowSprites[r7][0] = 0xFF;
|
||||
sMEventScreenData->cardIconAndShadowSprites[r7][1] = 0xFF;
|
||||
sMEventScreenData->cardIconAndShadowSprites[r7][0] = CreateSprite(&sShadowSpriteTemplate, 0xd8 - 32 * r7, 0x90, 8);
|
||||
if (sMEventScreenData->buff3430Sub.distributedMons[0][r7] != 0)
|
||||
{
|
||||
sMEventScreenData->cardIconAndShadowSprites[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.distributedMons[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0);
|
||||
gSprites[sMEventScreenData->cardIconAndShadowSprites[r7][1]].oam.priority = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_81461D8(void)
|
||||
{
|
||||
u8 r6 = 0;
|
||||
if (sMEventScreenData->monIconId != 0xFF)
|
||||
DestroyMonIcon(&gSprites[sMEventScreenData->monIconId]);
|
||||
if (sMEventScreenData->wonderCard.recvMonCapacity != 0 && sMEventScreenData->wonderCard.unk_08_0 == 1)
|
||||
{
|
||||
for (; r6 < sMEventScreenData->wonderCard.recvMonCapacity; r6++)
|
||||
{
|
||||
if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF)
|
||||
{
|
||||
DestroySprite(&gSprites[sMEventScreenData->cardIconAndShadowSprites[r6][0]]);
|
||||
// This might be a typo. Uncomment the next line, and comment the one that follows, to get the presumed intended behavior.
|
||||
// if (sMEventScreenData->cardIconAndShadowSprites[r6][1] != 0xFF)
|
||||
if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF)
|
||||
{
|
||||
DestroyMonIcon(&gSprites[sMEventScreenData->cardIconAndShadowSprites[r6][1]]);
|
||||
}
|
||||
}
|
||||
}
|
||||
FreeSpriteTilesByTag(0x8000);
|
||||
FreeSpritePaletteByTag(0x8000);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,357 @@
|
||||
#include "global.h"
|
||||
#include "gflib.h"
|
||||
#include "menu_indicators.h"
|
||||
#include "new_menu_helpers.h"
|
||||
#include "mevent.h"
|
||||
#include "mystery_gift_menu.h"
|
||||
#include "menu.h"
|
||||
#include "link_rfu.h"
|
||||
|
||||
struct UnkStruct_203F3CC
|
||||
{
|
||||
/*0000*/ struct MEWonderNewsData wonderNews;
|
||||
/*01bc*/ const struct UnkStruct_8467FB8 * bgSpec;
|
||||
/*01c0*/ u8 verticalScrollDisabled:1;
|
||||
u8 state:7;
|
||||
/*01c1*/ u8 menuIndicatorsId;
|
||||
/*01c2*/ u8 unk_01C2_0:1;
|
||||
u8 unk_01C2_1:7;
|
||||
/*01c3*/ u8 scrollDirection:1;
|
||||
u8 unk_01C3_1:7;
|
||||
/*01c4*/ u16 numMails;
|
||||
/*01c6*/ u16 scrollOffset;
|
||||
/*01c8*/ u16 windowIds[2];
|
||||
/*01cc*/ u8 filler_01CC[2];
|
||||
/*01ce*/ u8 title[41];
|
||||
/*01f7*/ u8 messages[10][41];
|
||||
/*0394*/ struct ScrollArrowsTemplate scrollArrowsTemplate;
|
||||
/*03a4*/ u8 buffer_03A4[0x1000];
|
||||
};
|
||||
|
||||
static EWRAM_DATA struct UnkStruct_203F3CC * sWork = NULL;
|
||||
|
||||
static void sub_8146980(void);
|
||||
static void sub_8146A30(void);
|
||||
static void sub_8146B58(void);
|
||||
|
||||
static const u8 sTextPals[][3] = {
|
||||
{0, 2, 3},
|
||||
{0, 1, 2}
|
||||
};
|
||||
static const struct WindowTemplate gUnknown_8468040[] = {
|
||||
{0, 1, 0, 28, 3, 15, 0x000},
|
||||
{2, 1, 3, 28, 20, 15, 0x000}
|
||||
};
|
||||
static const struct ScrollArrowsTemplate sScrollArrowsTemplate = {
|
||||
0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98,
|
||||
0x0000, 0x0002, 0x1000, 0x1000, 0x0,
|
||||
};
|
||||
|
||||
static const u16 sNews1Pal[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal");
|
||||
static const u16 sNews6Pal[] = INCBIN_U16("data/graphics/mevent/pal_468080.gbapal");
|
||||
static const u16 sNews7Pal[] = INCBIN_U16("data/graphics/mevent/pal_4680A0.gbapal");
|
||||
static const u8 sNews0Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_4680C0.4bpp.lz");
|
||||
static const u8 sNews0Map[] = INCBIN_U8("data/graphics/mevent/tilemap_468140.bin.lz");
|
||||
static const u8 sNews1Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46821C.4bpp.lz");
|
||||
static const u8 sNews1Map[] = INCBIN_U8("data/graphics/mevent/tilemap_46824C.bin.lz");
|
||||
static const u8 sNews2Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_46830C.4bpp.lz");
|
||||
static const u8 sNews2Map[] = INCBIN_U8("data/graphics/mevent/tilemap_46837C.bin.lz");
|
||||
static const u8 sNews6Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_468448.4bpp.lz");
|
||||
static const u8 sNews6Map[] = INCBIN_U8("data/graphics/mevent/tilemap_4684D8.bin.lz");
|
||||
static const u8 sNews7Gfx[] = INCBIN_U8("data/graphics/mevent/gfx_4685B4.4bpp.lz");
|
||||
static const u8 sNews7Map[] = INCBIN_U8("data/graphics/mevent/tilemap_468644.bin.lz");
|
||||
|
||||
static const struct UnkStruct_8467FB8 sBgSpecs[] = {
|
||||
{1, 0, 0, 0, sNews0Gfx, sNews0Map, sNews1Pal},
|
||||
{1, 0, 0, 0, sNews1Gfx, sNews1Map, gCard1Pal},
|
||||
{1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard2Pal},
|
||||
{1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard3Pal},
|
||||
{1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard4Pal},
|
||||
{1, 0, 0, 0, sNews2Gfx, sNews2Map, gCard5Pal},
|
||||
{1, 0, 0, 0, sNews6Gfx, sNews6Map, sNews6Pal},
|
||||
{1, 0, 0, 0, sNews7Gfx, sNews7Map, sNews7Pal}
|
||||
};
|
||||
|
||||
bool32 InitWonderNewsResources(const struct MEWonderNewsData * news)
|
||||
{
|
||||
if (news == NULL)
|
||||
return FALSE;
|
||||
sWork = AllocZeroed(sizeof(struct UnkStruct_203F3CC));
|
||||
if (sWork == NULL)
|
||||
return FALSE;
|
||||
sWork->wonderNews = *news;
|
||||
if (sWork->wonderNews.unk_03 >= NELEMS(sBgSpecs))
|
||||
sWork->wonderNews.unk_03 = 0;
|
||||
sWork->bgSpec = &sBgSpecs[sWork->wonderNews.unk_03];
|
||||
sWork->menuIndicatorsId = 0xFF;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void DestroyWonderNewsResources(void)
|
||||
{
|
||||
if (sWork != NULL)
|
||||
{
|
||||
*sWork = (struct UnkStruct_203F3CC){};
|
||||
Free(sWork);
|
||||
sWork = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
s32 FadeToWonderNewsMenu(void)
|
||||
{
|
||||
if (sWork == NULL)
|
||||
return -1;
|
||||
|
||||
switch (sWork->state)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
ChangeBgY(0, 0, 0);
|
||||
ChangeBgY(1, 0, 0);
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(0, 240));
|
||||
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(26, 152));
|
||||
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ);
|
||||
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
DecompressAndCopyTileDataToVram(3, sWork->bgSpec->tiles, 0, 8, 0);
|
||||
sWork->windowIds[0] = AddWindow(&gUnknown_8468040[0]);
|
||||
sWork->windowIds[1] = AddWindow(&gUnknown_8468040[1]);
|
||||
break;
|
||||
case 3:
|
||||
if (FreeTempTileDataBuffersIfPossible())
|
||||
return 0;
|
||||
gPaletteFade.bufferTransferDisabled = TRUE;
|
||||
LoadPalette(sWork->bgSpec->pal, 0x10, 0x20);
|
||||
LZ77UnCompWram(sWork->bgSpec->map, sWork->buffer_03A4);
|
||||
CopyRectToBgTilemapBufferRect(1, sWork->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0);
|
||||
CopyRectToBgTilemapBufferRect(3, sWork->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
break;
|
||||
case 4:
|
||||
sub_8146980();
|
||||
break;
|
||||
case 5:
|
||||
sub_8146A30();
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
break;
|
||||
case 6:
|
||||
ShowBg(1);
|
||||
ShowBg(2);
|
||||
ShowBg(3);
|
||||
gPaletteFade.bufferTransferDisabled = FALSE;
|
||||
sWork->menuIndicatorsId = AddScrollIndicatorArrowPair(&sWork->scrollArrowsTemplate, &sWork->scrollOffset);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
|
||||
UpdatePaletteFade();
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
sWork->state = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
++sWork->state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 FadeOutFromWonderNews(bool32 flag)
|
||||
{
|
||||
if (sWork == NULL)
|
||||
return -1;
|
||||
switch (sWork->state)
|
||||
{
|
||||
case 0:
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
|
||||
break;
|
||||
case 1:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
ChangeBgY(2, 0, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0H, 0);
|
||||
SetGpuReg(REG_OFFSET_WIN0V, 0);
|
||||
SetGpuReg(REG_OFFSET_WININ, 0);
|
||||
SetGpuReg(REG_OFFSET_WINOUT, 0);
|
||||
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
|
||||
break;
|
||||
case 2:
|
||||
FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20);
|
||||
FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24);
|
||||
FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24);
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(1);
|
||||
CopyBgTilemapBufferToVram(2);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
break;
|
||||
case 3:
|
||||
HideBg(1);
|
||||
HideBg(2);
|
||||
RemoveWindow(sWork->windowIds[1]);
|
||||
RemoveWindow(sWork->windowIds[0]);
|
||||
break;
|
||||
case 4:
|
||||
ChangeBgY(2, 0, 0);
|
||||
ChangeBgY(3, 0, 0);
|
||||
if (sWork->menuIndicatorsId != 0xFF)
|
||||
{
|
||||
RemoveScrollIndicatorArrowPair(sWork->menuIndicatorsId);
|
||||
sWork->menuIndicatorsId = 0xFF;
|
||||
}
|
||||
break;
|
||||
case 5:
|
||||
PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag);
|
||||
break;
|
||||
case 6:
|
||||
MG_DrawCheckerboardPattern();
|
||||
CopyBgTilemapBufferToVram(0);
|
||||
CopyBgTilemapBufferToVram(3);
|
||||
BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
|
||||
break;
|
||||
default:
|
||||
if (UpdatePaletteFade())
|
||||
return 0;
|
||||
sWork->state = 0;
|
||||
return 1;
|
||||
}
|
||||
++sWork->state;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void MENews_RemoveScrollIndicatorArrowPair(void)
|
||||
{
|
||||
if (!sWork->verticalScrollDisabled && sWork->menuIndicatorsId != 0xFF)
|
||||
{
|
||||
RemoveScrollIndicatorArrowPair(sWork->menuIndicatorsId);
|
||||
sWork->menuIndicatorsId = 0xFF;
|
||||
sWork->verticalScrollDisabled = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MENews_AddScrollIndicatorArrowPair(void)
|
||||
{
|
||||
if (sWork->verticalScrollDisabled)
|
||||
{
|
||||
sWork->menuIndicatorsId = AddScrollIndicatorArrowPair(&sWork->scrollArrowsTemplate, &sWork->scrollOffset);
|
||||
sWork->verticalScrollDisabled = FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
u32 MENews_GetInput(u16 input)
|
||||
{
|
||||
if (sWork->unk_01C2_0)
|
||||
{
|
||||
sub_8146B58();
|
||||
return 0xFF;
|
||||
}
|
||||
switch (input)
|
||||
{
|
||||
case A_BUTTON:
|
||||
return 0;
|
||||
case B_BUTTON:
|
||||
return 1;
|
||||
case DPAD_UP:
|
||||
if (sWork->scrollOffset == 0)
|
||||
return 0xFF;
|
||||
if (sWork->verticalScrollDisabled)
|
||||
return 0xFF;
|
||||
sWork->scrollDirection = FALSE;
|
||||
break;
|
||||
case DPAD_DOWN:
|
||||
if (sWork->scrollOffset == sWork->numMails)
|
||||
return 0xFF;
|
||||
if (sWork->verticalScrollDisabled)
|
||||
return 0xFF;
|
||||
sWork->scrollDirection = TRUE;
|
||||
break;
|
||||
default:
|
||||
return 0xFF;
|
||||
}
|
||||
sWork->unk_01C2_0 = TRUE;
|
||||
sWork->unk_01C2_1 = 2;
|
||||
sWork->unk_01C3_1 = 0;
|
||||
if (sWork->scrollDirection == FALSE)
|
||||
return 2;
|
||||
else
|
||||
return 3;
|
||||
}
|
||||
|
||||
static void sub_8146980(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
memcpy(sWork->title, sWork->wonderNews.unk_04, 40);
|
||||
sWork->title[40] = EOS;
|
||||
for (; i < 10; ++i)
|
||||
{
|
||||
memcpy(sWork->messages[i], sWork->wonderNews.unk_2C[i], 40);
|
||||
sWork->messages[i][40] = EOS;
|
||||
if (i > 7 && sWork->messages[i][0] != EOS)
|
||||
++sWork->numMails;
|
||||
}
|
||||
sWork->scrollArrowsTemplate = sScrollArrowsTemplate;
|
||||
sWork->scrollArrowsTemplate.fullyDownThreshold = sWork->numMails;
|
||||
}
|
||||
|
||||
static void sub_8146A30(void)
|
||||
{
|
||||
u8 i = 0;
|
||||
s32 x;
|
||||
PutWindowTilemap(sWork->windowIds[0]);
|
||||
PutWindowTilemap(sWork->windowIds[1]);
|
||||
FillWindowPixelBuffer(sWork->windowIds[0], 0);
|
||||
FillWindowPixelBuffer(sWork->windowIds[1], 0);
|
||||
x = (0xe0 - GetStringWidth(3, sWork->title, GetFontAttribute(3, 2))) / 2;
|
||||
if (x < 0)
|
||||
x = 0;
|
||||
AddTextPrinterParameterized3(sWork->windowIds[0], 3, x, 6, sTextPals[sWork->bgSpec->textPal1], 0, sWork->title);
|
||||
for (; i < 10; ++i)
|
||||
{
|
||||
AddTextPrinterParameterized3(sWork->windowIds[1], 3, 0, 16 * i + 2, sTextPals[sWork->bgSpec->textPal2], 0, sWork->messages[i]);
|
||||
}
|
||||
CopyWindowToVram(sWork->windowIds[0], 3);
|
||||
CopyWindowToVram(sWork->windowIds[1], 3);
|
||||
}
|
||||
|
||||
static void sub_8146B58(void)
|
||||
{
|
||||
u16 r4 = sWork->unk_01C2_1;
|
||||
r4 <<= 8;
|
||||
if (sWork->scrollDirection)
|
||||
{
|
||||
ChangeBgY(2, r4, 1);
|
||||
ChangeBgY(3, r4, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
ChangeBgY(2, r4, 2);
|
||||
ChangeBgY(3, r4, 2);
|
||||
}
|
||||
sWork->unk_01C3_1 += sWork->unk_01C2_1;
|
||||
if (sWork->unk_01C3_1 > 15)
|
||||
{
|
||||
if (sWork->scrollDirection)
|
||||
++sWork->scrollOffset;
|
||||
else
|
||||
--sWork->scrollOffset;
|
||||
sWork->unk_01C2_0 = FALSE;
|
||||
sWork->unk_01C3_1 = 0;
|
||||
}
|
||||
}
|
||||
@@ -5,72 +5,83 @@
|
||||
#include "trig.h"
|
||||
#include "constants/songs.h"
|
||||
|
||||
void sub_815F1AC(u8 taskId);
|
||||
bool32 sub_815F2AC(u8 spriteId);
|
||||
void sub_815F3E0(u8 spriteId1, u8 spriteId2, u8 spriteId3);
|
||||
bool32 sub_815F444(u8 spriteId);
|
||||
void sub_815F470(struct Sprite * sprite);
|
||||
void sub_815F564(u16 tilesTag, u16 palTag);
|
||||
u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority);
|
||||
void sub_815F610(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p);
|
||||
static void Task_MinigameCountdown(u8 taskId);
|
||||
static bool32 RunMinigameCountdownDigitsAnim(u8 spriteId);
|
||||
static void StartStartGraphic(u8 spriteId1, u8 spriteId2, u8 spriteId3);
|
||||
static bool32 IsStartGraphicAnimRunning(u8 spriteId);
|
||||
static void SpriteCB_Start(struct Sprite * sprite);
|
||||
static void Load321StartGfx(u16 tilesTag, u16 palTag);
|
||||
static u8 CreateNumberSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority);
|
||||
static void CreateStartSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p);
|
||||
|
||||
void sub_815F138(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
|
||||
#define tState data[0]
|
||||
#define tTilesTag data[2]
|
||||
#define tPalTag data[3]
|
||||
#define tX data[4]
|
||||
#define tY data[5]
|
||||
#define tSubpriority data[6]
|
||||
#define tSpriteId1 data[7]
|
||||
#define tSpriteId2 data[8]
|
||||
#define tSpriteId3 data[9]
|
||||
|
||||
void StartMinigameCountdown(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
|
||||
{
|
||||
u8 taskId = CreateTask(sub_815F1AC, 80);
|
||||
gTasks[taskId].data[2] = tilesTag;
|
||||
gTasks[taskId].data[3] = palTag;
|
||||
gTasks[taskId].data[4] = x;
|
||||
gTasks[taskId].data[5] = y;
|
||||
gTasks[taskId].data[6] = subpriority;
|
||||
u8 taskId = CreateTask(Task_MinigameCountdown, 80);
|
||||
gTasks[taskId].tTilesTag = tilesTag;
|
||||
gTasks[taskId].tPalTag = palTag;
|
||||
gTasks[taskId].tX = x;
|
||||
gTasks[taskId].tY = y;
|
||||
gTasks[taskId].tSubpriority = subpriority;
|
||||
}
|
||||
|
||||
bool8 sub_815F198(void)
|
||||
bool8 IsMinigameCountdownRunning(void)
|
||||
{
|
||||
return FuncIsActiveTask(sub_815F1AC);
|
||||
return FuncIsActiveTask(Task_MinigameCountdown);
|
||||
}
|
||||
|
||||
void sub_815F1AC(u8 taskId)
|
||||
static void Task_MinigameCountdown(u8 taskId)
|
||||
{
|
||||
s16 * data = gTasks[taskId].data;
|
||||
|
||||
switch (data[0])
|
||||
switch (tState)
|
||||
{
|
||||
case 0:
|
||||
sub_815F564(data[2], data[3]);
|
||||
data[7] = sub_815F5BC(data[2], data[3], data[4], data[5], data[6]);
|
||||
sub_815F610(data[2], data[3], data[4], data[5], data[6], &data[8], &data[9]);
|
||||
data[0]++;
|
||||
Load321StartGfx(tTilesTag, tPalTag);
|
||||
tSpriteId1 = CreateNumberSprite(tTilesTag, tPalTag, tX, tY, tSubpriority);
|
||||
CreateStartSprite(tTilesTag, tPalTag, tX, tY, tSubpriority, &tSpriteId2, &tSpriteId3);
|
||||
tState++;
|
||||
break;
|
||||
case 1:
|
||||
if (!sub_815F2AC(data[7]))
|
||||
if (!RunMinigameCountdownDigitsAnim(tSpriteId1))
|
||||
{
|
||||
sub_815F3E0(data[7], data[8], data[9]);
|
||||
FreeSpriteOamMatrix(&gSprites[data[7]]);
|
||||
DestroySprite(&gSprites[data[7]]);
|
||||
data[0]++;
|
||||
StartStartGraphic(tSpriteId1, tSpriteId2, tSpriteId3);
|
||||
FreeSpriteOamMatrix(&gSprites[tSpriteId1]);
|
||||
DestroySprite(&gSprites[tSpriteId1]);
|
||||
tState++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (!sub_815F444(data[8]))
|
||||
if (!IsStartGraphicAnimRunning(tSpriteId2))
|
||||
{
|
||||
DestroySprite(&gSprites[data[8]]);
|
||||
DestroySprite(&gSprites[data[9]]);
|
||||
FreeSpriteTilesByTag(data[2]);
|
||||
FreeSpritePaletteByTag(data[3]);
|
||||
DestroySprite(&gSprites[tSpriteId2]);
|
||||
DestroySprite(&gSprites[tSpriteId3]);
|
||||
FreeSpriteTilesByTag(tTilesTag);
|
||||
FreeSpritePaletteByTag(tPalTag);
|
||||
DestroyTask(taskId);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
bool32 sub_815F2AC(u8 spriteId)
|
||||
static bool32 RunMinigameCountdownDigitsAnim(u8 spriteId)
|
||||
{
|
||||
struct Sprite * sprite = &gSprites[spriteId];
|
||||
|
||||
switch (sprite->data[0])
|
||||
{
|
||||
case 0:
|
||||
sub_8007FFC(sprite, 0x800, 0x1A);
|
||||
// some sort of affine transform; x transform disabled
|
||||
obj_pos2_update_enable(sprite, 0x800, 0x1A);
|
||||
sprite->data[0]++;
|
||||
// fallthrough
|
||||
case 1:
|
||||
@@ -134,22 +145,22 @@ bool32 sub_815F2AC(u8 spriteId)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_815F3E0(u8 spriteId1, u8 spriteId2, u8 spriteId3)
|
||||
static void StartStartGraphic(u8 spriteId1, u8 spriteId2, u8 spriteId3)
|
||||
{
|
||||
gSprites[spriteId2].pos2.y = -40;
|
||||
gSprites[spriteId3].pos2.y = -40;
|
||||
gSprites[spriteId2].invisible = FALSE;
|
||||
gSprites[spriteId3].invisible = FALSE;
|
||||
gSprites[spriteId2].callback = sub_815F470;
|
||||
gSprites[spriteId3].callback = sub_815F470;
|
||||
gSprites[spriteId2].callback = SpriteCB_Start;
|
||||
gSprites[spriteId3].callback = SpriteCB_Start;
|
||||
}
|
||||
|
||||
bool32 sub_815F444(u8 spriteId)
|
||||
static bool32 IsStartGraphicAnimRunning(u8 spriteId)
|
||||
{
|
||||
return gSprites[spriteId].callback == sub_815F470;
|
||||
return gSprites[spriteId].callback == SpriteCB_Start;
|
||||
}
|
||||
|
||||
void sub_815F470(struct Sprite * sprite)
|
||||
static void SpriteCB_Start(struct Sprite * sprite)
|
||||
{
|
||||
s16 * data = sprite->data;
|
||||
s32 y;
|
||||
@@ -200,103 +211,103 @@ void sub_815F470(struct Sprite * sprite)
|
||||
}
|
||||
}
|
||||
|
||||
const u16 gUnknown_847A328[] = INCBIN_U16("data/graphics/unk_847a348.gbapal");
|
||||
const u16 gUnknown_847A348[] = INCBIN_U16("data/graphics/unk_847a348.4bpp.lz");
|
||||
static const u16 sSpritePal_321Start[] = INCBIN_U16("data/graphics/unk_847a348.gbapal");
|
||||
static const u16 sSpriteSheet_321Start[] = INCBIN_U16("data/graphics/unk_847a348.4bpp.lz");
|
||||
|
||||
void sub_815F564(u16 tilesTag, u16 palTag)
|
||||
static void Load321StartGfx(u16 tilesTag, u16 palTag)
|
||||
{
|
||||
struct CompressedSpriteSheet spriteSheet = {(const void *)gUnknown_847A348, 0xE00};
|
||||
struct SpritePalette spritePalette = {gUnknown_847A328};
|
||||
struct CompressedSpriteSheet spriteSheet = {(const void *)sSpriteSheet_321Start, 0xE00};
|
||||
struct SpritePalette spritePalette = {sSpritePal_321Start};
|
||||
spriteSheet.tag = tilesTag;
|
||||
spritePalette.tag = palTag;
|
||||
LoadCompressedSpriteSheet(&spriteSheet);
|
||||
LoadSpritePalette(&spritePalette);
|
||||
}
|
||||
|
||||
const struct OamData gOamData_847A7AC = {
|
||||
static const struct OamData sOamData_Numbers = {
|
||||
.affineMode = ST_OAM_AFFINE_DOUBLE,
|
||||
.shape = ST_OAM_SQUARE,
|
||||
.size = 2
|
||||
.shape = SPRITE_SHAPE(32x32),
|
||||
.size = SPRITE_SIZE(32x32)
|
||||
};
|
||||
|
||||
const struct OamData gOamData_847A7B4 = {
|
||||
static const struct OamData sOamData_Start = {
|
||||
.affineMode = ST_OAM_AFFINE_OFF,
|
||||
.shape = ST_OAM_H_RECTANGLE,
|
||||
.size = 3
|
||||
.shape = SPRITE_SHAPE(64x32),
|
||||
.size = SPRITE_SIZE(64x32)
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7BC[] = {
|
||||
static const union AnimCmd sAnim_Numbers_Three[] = {
|
||||
ANIMCMD_FRAME( 0, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7C4[] = {
|
||||
static const union AnimCmd sAnim_Numbers_Two[] = {
|
||||
ANIMCMD_FRAME(16, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7CC[] = {
|
||||
static const union AnimCmd sAnim_Numbers_One[] = {
|
||||
ANIMCMD_FRAME(32, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd *const gUnknown_847A7D4[] = {
|
||||
gUnknown_847A7BC,
|
||||
gUnknown_847A7C4,
|
||||
gUnknown_847A7CC
|
||||
static const union AnimCmd *const sAnimTable_Numbers[] = {
|
||||
sAnim_Numbers_Three,
|
||||
sAnim_Numbers_Two,
|
||||
sAnim_Numbers_One
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7E0[] = {
|
||||
static const union AnimCmd sAnim_StartLeft[] = {
|
||||
ANIMCMD_FRAME(48, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd gUnknown_847A7E8[] = {
|
||||
static const union AnimCmd sAnim_StartRight[] = {
|
||||
ANIMCMD_FRAME(80, 1),
|
||||
ANIMCMD_END
|
||||
};
|
||||
|
||||
const union AnimCmd *const gUnknown_847A7F0[] = {
|
||||
gUnknown_847A7E0,
|
||||
gUnknown_847A7E8
|
||||
static const union AnimCmd *const sAnimTable_Start[] = {
|
||||
sAnim_StartLeft,
|
||||
sAnim_StartRight
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_847A7F8[] = {
|
||||
static const union AffineAnimCmd sAffineAnim_Numbers_0[] = {
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_847A808[] = {
|
||||
static const union AffineAnimCmd sAffineAnim_Numbers_1[] = {
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_FRAME( 0x10, -0x10, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_847A820[] = {
|
||||
static const union AffineAnimCmd sAffineAnim_Numbers_2[] = {
|
||||
AFFINEANIMCMD_FRAME(-0x12, 0x12, 0, 8),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd gUnknown_847A830[] = {
|
||||
static const union AffineAnimCmd sAffineAnim_Numbers_3[] = {
|
||||
AFFINEANIMCMD_FRAME( 0x6, -0x6, 0, 8),
|
||||
AFFINEANIMCMD_FRAME( -0x4, 0x4, 0, 8),
|
||||
AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
|
||||
AFFINEANIMCMD_END
|
||||
};
|
||||
|
||||
const union AffineAnimCmd *const gUnknown_847A850[] = {
|
||||
gUnknown_847A7F8,
|
||||
gUnknown_847A808,
|
||||
gUnknown_847A820,
|
||||
gUnknown_847A830
|
||||
static const union AffineAnimCmd *const sAffineAnimTable_Numbers[] = {
|
||||
sAffineAnim_Numbers_0,
|
||||
sAffineAnim_Numbers_1,
|
||||
sAffineAnim_Numbers_2,
|
||||
sAffineAnim_Numbers_3
|
||||
};
|
||||
|
||||
u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
|
||||
static u8 CreateNumberSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
|
||||
{
|
||||
struct SpriteTemplate spriteTemplate = {
|
||||
.oam = &gOamData_847A7AC,
|
||||
.anims = gUnknown_847A7D4,
|
||||
.affineAnims = gUnknown_847A850,
|
||||
.oam = &sOamData_Numbers,
|
||||
.anims = sAnimTable_Numbers,
|
||||
.affineAnims = sAffineAnimTable_Numbers,
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
spriteTemplate.tileTag = tilesTag;
|
||||
@@ -304,11 +315,11 @@ u8 sub_815F5BC(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority)
|
||||
return CreateSprite(&spriteTemplate, x, y, subpriority);
|
||||
}
|
||||
|
||||
void sub_815F610(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p)
|
||||
static void CreateStartSprite(u16 tilesTag, u16 palTag, s16 x, s16 y, u8 subpriority, s16 * spriteId2_p, s16 * spriteId3_p)
|
||||
{
|
||||
struct SpriteTemplate spriteTemplate = {
|
||||
.oam = &gOamData_847A7B4,
|
||||
.anims = gUnknown_847A7F0,
|
||||
.oam = &sOamData_Start,
|
||||
.anims = sAnimTable_Start,
|
||||
.affineAnims = gDummySpriteAffineAnimTable,
|
||||
.callback = SpriteCallbackDummy
|
||||
};
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "help_system.h"
|
||||
#include "strings.h"
|
||||
#include "constants/songs.h"
|
||||
#include "constants/union_room.h"
|
||||
|
||||
EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {};
|
||||
EWRAM_DATA bool8 gGiftIsFromEReader = FALSE;
|
||||
@@ -1237,21 +1238,21 @@ void task00_mystery_gift(u8 taskId)
|
||||
case 0:
|
||||
if (data->source == 1)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(0x15);
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WCARD2);
|
||||
}
|
||||
else if (data->source == 0)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(0x15);
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WCARD2);
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (data->source == 1)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(0x16);
|
||||
MEvent_CreateTask_CardOrNewsWithFriend(ACTIVITY_WNEWS2);
|
||||
}
|
||||
else if (data->source == 0)
|
||||
{
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(0x16);
|
||||
MEvent_CreateTask_CardOrNewsOverWireless(ACTIVITY_WNEWS2);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1278,7 +1279,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
switch (mevent_client_do_exec(&data->curPromptWindowId))
|
||||
{
|
||||
case 6: // done
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_BeginBuildAndSendCommand5F();
|
||||
data->prevPromptWindowId = data->curPromptWindowId;
|
||||
data->state = 13;
|
||||
break;
|
||||
@@ -1595,10 +1596,10 @@ void task00_mystery_gift(u8 taskId)
|
||||
switch (data->IsCardOrNews)
|
||||
{
|
||||
case 0:
|
||||
MEvent_CreateTask_Leader(21);
|
||||
MEvent_CreateTask_Leader(ACTIVITY_WCARD2);
|
||||
break;
|
||||
case 1:
|
||||
MEvent_CreateTask_Leader(22);
|
||||
MEvent_CreateTask_Leader(ACTIVITY_WNEWS2);
|
||||
break;
|
||||
}
|
||||
data->source = 1;
|
||||
@@ -1644,7 +1645,7 @@ void task00_mystery_gift(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 33:
|
||||
task_add_05_task_del_08FA224_when_no_RfuFunc();
|
||||
Rfu_BeginBuildAndSendCommand5F();
|
||||
StringCopy(gStringVar1, gLinkPlayers[1].name);
|
||||
data->state = 34;
|
||||
break;
|
||||
|
||||
+1
-1
@@ -145,7 +145,7 @@ void NewGameInitData(void)
|
||||
ResetTrainerFanClub();
|
||||
UnionRoomChat_InitializeRegisteredTexts();
|
||||
ResetMiniGamesResults();
|
||||
sub_8143D24();
|
||||
InitMEventData();
|
||||
SetAllRenewableItemFlags();
|
||||
WarpToPlayersRoom();
|
||||
ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags);
|
||||
|
||||
+2
-2
@@ -3881,7 +3881,7 @@ static void CursorCB_Register(u8 taskId)
|
||||
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
|
||||
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
|
||||
|
||||
switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)sub_80F9800(), species2, species, obedience))
|
||||
switch (CanRegisterMonForTradingBoard(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), species2, species, obedience))
|
||||
{
|
||||
case CANT_REGISTER_MON:
|
||||
StringExpandPlaceholders(gStringVar4, gText_PkmnCantBeTradedNow);
|
||||
@@ -3907,7 +3907,7 @@ static void CursorCB_Trade1(u8 taskId)
|
||||
u16 species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES2);
|
||||
u16 species = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES);
|
||||
u8 obedience = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_OBEDIENCE);
|
||||
u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)sub_80F9800(), gUnknown_203B064, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
|
||||
u32 stringId = GetUnionRoomTradeMessageId(*(struct GFtgtGnameSub *)GetHostRFUtgtGname(), gPartnerTgtGnameSub, species2, gUnionRoomOfferedSpecies, gUnionRoomRequestedMonType, species, obedience);
|
||||
|
||||
if (stringId != UR_TRADE_MSG_NONE)
|
||||
{
|
||||
|
||||
@@ -562,8 +562,8 @@ void sub_8102F80(u8 taskId)
|
||||
switch (gUnknown_203ACF0->field_01)
|
||||
{
|
||||
case 0:
|
||||
sub_8107D38(0x10, 0);
|
||||
sub_8107D38(0x20, 1);
|
||||
ListMenuLoadStdPalAt(0x10, 0);
|
||||
ListMenuLoadStdPalAt(0x20, 1);
|
||||
gUnknown_203ACF0->field_48 = sub_8103518(gUnknown_203ACF0->field_42);
|
||||
gUnknown_203ACF0->field_01 = 2;
|
||||
break;
|
||||
@@ -648,8 +648,8 @@ void sub_8103238(u8 taskId)
|
||||
switch (gUnknown_203ACF0->field_01)
|
||||
{
|
||||
case 0:
|
||||
sub_8107D38(0x10, 0);
|
||||
sub_8107D38(0x20, 1);
|
||||
ListMenuLoadStdPalAt(0x10, 0);
|
||||
ListMenuLoadStdPalAt(0x20, 1);
|
||||
gUnknown_203ACF0->field_48 = sub_8103518(gUnknown_203ACF0->field_42);
|
||||
gUnknown_203ACF0->field_01 = 2;
|
||||
break;
|
||||
|
||||
+107
-105
@@ -10,14 +10,15 @@
|
||||
#include "task.h"
|
||||
#include "constants/flags.h"
|
||||
#include "constants/event_object_movement.h"
|
||||
#include "constants/union_room.h"
|
||||
#include "constants/object_events.h"
|
||||
|
||||
static EWRAM_DATA struct UnionObj * UnionObjWork = NULL;
|
||||
static EWRAM_DATA u32 sUnionObjRefreshTimer = 0;
|
||||
|
||||
static u8 StartUnionObjAnimTask(void);
|
||||
static u32 sub_811BBC8(u32 playerIdx, u32 arg1);
|
||||
static void sub_811C008(s32 arg0, s32 arg1, u8 arg2);
|
||||
static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member);
|
||||
static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction);
|
||||
|
||||
static const u8 sUnionObjectEventGfxIds[][10] = {
|
||||
[MALE] = {
|
||||
@@ -69,12 +70,12 @@ static const u8 sOppositeFacingDirection[] = {
|
||||
[DIR_EAST] = DIR_WEST
|
||||
};
|
||||
|
||||
static const u8 gUnknown_845711B[] = {
|
||||
1,
|
||||
3,
|
||||
1,
|
||||
4,
|
||||
2
|
||||
static const u8 sUnionGroupMemberFacings[] = {
|
||||
DIR_SOUTH,
|
||||
DIR_WEST,
|
||||
DIR_SOUTH,
|
||||
DIR_EAST,
|
||||
DIR_NORTH
|
||||
};
|
||||
|
||||
static const u8 sUnionRoomLocalIds[] = {
|
||||
@@ -116,19 +117,19 @@ static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
|
||||
return sUnionObjectEventGfxIds[gender][id % 8];
|
||||
}
|
||||
|
||||
static void GetUnionRoomPlayerFacingCoords(u32 id, u32 dirn, s32 * xp, s32 * yp)
|
||||
static void GetUnionRoomPlayerFacingCoords(u32 group, u32 member, s32 * xp, s32 * yp)
|
||||
{
|
||||
*xp = sUnionPartnerCoords[id][0] + sFacingDirectionOffsets[dirn][0] + 7;
|
||||
*yp = sUnionPartnerCoords[id][1] + sFacingDirectionOffsets[dirn][1] + 7;
|
||||
*xp = sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[member][0] + 7;
|
||||
*yp = sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[member][1] + 7;
|
||||
}
|
||||
|
||||
static bool32 sub_811B58C(u32 id, u32 dirn, s32 x, s32 y)
|
||||
static bool32 IsUnionRoomPlayerFacingTileAt(u32 group, u32 member, s32 x, s32 y)
|
||||
{
|
||||
if (sUnionPartnerCoords[id][0] + sFacingDirectionOffsets[dirn][0] + 7 != x)
|
||||
if (sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[member][0] + 7 != x)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
else if (sUnionPartnerCoords[id][1] + sFacingDirectionOffsets[dirn][1] + 7 != y)
|
||||
else if (sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[member][1] + 7 != y)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
@@ -188,6 +189,7 @@ static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * move
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static bool32 TryReleaseUnionRoomPlayerObjectEvent(u32 playerIdx)
|
||||
{
|
||||
u8 objectId;
|
||||
@@ -263,11 +265,11 @@ static const u8 sMovement_UnionPlayerEnter[2] = {
|
||||
MOVEMENT_ACTION_STEP_END
|
||||
};
|
||||
|
||||
static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionObj * ptr)
|
||||
static bool32 AnimateUnionRoomPlayerSpawn(s8 * state_p, u32 playerIdx, struct UnionObj * ptr)
|
||||
{
|
||||
s16 x, y;
|
||||
|
||||
switch (*a0)
|
||||
switch (*state_p)
|
||||
{
|
||||
case 0:
|
||||
if (!is_walking_or_running())
|
||||
@@ -275,30 +277,30 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionOb
|
||||
break;
|
||||
}
|
||||
PlayerGetDestCoords(&x, &y);
|
||||
if (sub_811B58C(playerIdx, 0, x, y) == TRUE)
|
||||
if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
|
||||
{
|
||||
break;
|
||||
}
|
||||
player_get_pos_including_state_based_drift(&x, &y);
|
||||
if (sub_811B58C(playerIdx, 0, x, y) == TRUE)
|
||||
if (IsUnionRoomPlayerFacingTileAt(playerIdx, 0, x, y) == TRUE)
|
||||
{
|
||||
break;
|
||||
}
|
||||
SetUnionRoomPlayerGfx(playerIdx, ptr->gfxId);
|
||||
CreateUnionRoomPlayerObjectEvent(playerIdx);
|
||||
ShowUnionRoomPlayer(playerIdx);
|
||||
(*a0)++;
|
||||
(*state_p)++;
|
||||
// fallthrough
|
||||
case 3: // incorrect?
|
||||
if (SetUnionRoomPlayerEnterExitMovement(playerIdx, sMovement_UnionPlayerEnter) == 1)
|
||||
{
|
||||
(*a0)++;
|
||||
(*state_p)++;
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
if (TryReleaseUnionRoomPlayerObjectEvent(playerIdx))
|
||||
{
|
||||
*a0 = 0;
|
||||
*state_p = 0;
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
@@ -306,12 +308,12 @@ static bool32 AnimateUnionRoomPlayerSpawn(s8 * a0, u32 playerIdx, struct UnionOb
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2)
|
||||
static bool32 SpawnGroupLeader(u32 playerIdx, u32 gender, u32 idMod256)
|
||||
{
|
||||
struct UnionObj * ptr = &UnionObjWork[playerIdx];
|
||||
AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 561)
|
||||
ptr->schedAnim = 1;
|
||||
ptr->gfxId = GetUnionRoomPlayerGraphicsId(a1, a2);
|
||||
ptr->schedAnim = UNION_ROOM_SPAWN_IN;
|
||||
ptr->gfxId = GetUnionRoomPlayerGraphicsId(gender, idMod256);
|
||||
if (ptr->state == 0)
|
||||
{
|
||||
return TRUE;
|
||||
@@ -322,11 +324,11 @@ static bool32 sub_811B8BC(u32 playerIdx, u32 a1, u32 a2)
|
||||
}
|
||||
}
|
||||
|
||||
static bool32 sub_811B90C(u32 playerIdx)
|
||||
static bool32 DespawnGroupLeader(u32 playerIdx)
|
||||
{
|
||||
struct UnionObj * ptr = &UnionObjWork[playerIdx];
|
||||
AGB_ASSERT_EX(UnionObjWork != NULL, ABSPATH("rfu_union_tool.c"), 577)
|
||||
ptr->schedAnim = 2;
|
||||
ptr->schedAnim = UNION_ROOM_SPAWN_OUT;
|
||||
if (ptr->state == 1)
|
||||
{
|
||||
return TRUE;
|
||||
@@ -342,7 +344,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
|
||||
switch (ptr->state)
|
||||
{
|
||||
case 0:
|
||||
if (ptr->schedAnim == 1)
|
||||
if (ptr->schedAnim == UNION_ROOM_SPAWN_IN)
|
||||
{
|
||||
ptr->state = 2;
|
||||
ptr->animState = 0;
|
||||
@@ -353,7 +355,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
|
||||
}
|
||||
// fallthrough
|
||||
case 2:
|
||||
if (!sub_811BBC8(playerIdx, 0) && ptr->schedAnim == 2)
|
||||
if (!RfuUnionGroupMemberIsInvisible(playerIdx, 0) && ptr->schedAnim == 2)
|
||||
{
|
||||
ptr->state = 0;
|
||||
ptr->animState = 0;
|
||||
@@ -366,7 +368,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (ptr->schedAnim == 2)
|
||||
if (ptr->schedAnim == UNION_ROOM_SPAWN_OUT)
|
||||
{
|
||||
ptr->state = 3;
|
||||
ptr->animState = 0;
|
||||
@@ -383,7 +385,7 @@ static void AnimateUnionObj(u32 playerIdx, struct UnionObj * ptr)
|
||||
}
|
||||
break;
|
||||
}
|
||||
ptr->schedAnim = 0;
|
||||
ptr->schedAnim = UNION_ROOM_SPAWN_NONE;
|
||||
}
|
||||
|
||||
static void Task_AnimateUnionObjs(u8 taskId)
|
||||
@@ -409,7 +411,7 @@ static u8 StartUnionObjAnimTask(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_811BA5C(void)
|
||||
static void DestroyAnimateUnionObjsTask(void)
|
||||
{
|
||||
u8 taskId = FindTaskIdByFunc(Task_AnimateUnionObjs);
|
||||
if (taskId < NUM_TASKS)
|
||||
@@ -418,7 +420,7 @@ static void sub_811BA5C(void)
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811BA78(void)
|
||||
void DeleteUnionObjWorkAndStopTask(void)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < 8; i++)
|
||||
@@ -430,31 +432,31 @@ void sub_811BA78(void)
|
||||
}
|
||||
}
|
||||
UnionObjWork = NULL;
|
||||
sub_811BA5C();
|
||||
DestroyAnimateUnionObjsTask();
|
||||
}
|
||||
|
||||
void sub_811BAAC(u8 * sp8, s32 r9)
|
||||
void CreateGroupMemberObjectsInvisible(u8 * sprite_ids, s32 group)
|
||||
{
|
||||
s32 r7;
|
||||
s32 i;
|
||||
|
||||
for (r7 = 0; r7 < 5; r7++)
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
s32 r5 = 5 * r9 + r7;
|
||||
sp8[r5] = sprite_new(OBJECT_EVENT_GFX_MAN, r5 - 0x38, sUnionPartnerCoords[r9][0] + sFacingDirectionOffsets[r7][0], sUnionPartnerCoords[r9][1] + sFacingDirectionOffsets[r7][1], 3, 1);
|
||||
RfuUnionObjectToggleInvisibility(r5 - 0x38, TRUE);
|
||||
s32 obj_id = 5 * group + i;
|
||||
sprite_ids[obj_id] = sprite_new(OBJECT_EVENT_GFX_MAN, obj_id - 0x38, sUnionPartnerCoords[group][0] + sFacingDirectionOffsets[i][0], sUnionPartnerCoords[group][1] + sFacingDirectionOffsets[i][1], 3, 1);
|
||||
RfuUnionObjectToggleInvisibility(obj_id - 0x38, TRUE);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811BB40(u8 * r5)
|
||||
void DestroyGroupMemberObjects(u8 *spriteIds)
|
||||
{
|
||||
s32 i;
|
||||
for (i = 0; i < 40; i++)
|
||||
{
|
||||
DestroySprite(&gSprites[r5[i]]);
|
||||
DestroySprite(&gSprites[spriteIds[i]]);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811BB68(void)
|
||||
void MakeGroupAssemblyAreasPassable(void)
|
||||
{
|
||||
s32 i, j, x, y;
|
||||
for (i = 0; i < 8; i++)
|
||||
@@ -462,94 +464,94 @@ void sub_811BB68(void)
|
||||
for (j = 0; j < 5; j++)
|
||||
{
|
||||
GetUnionRoomPlayerFacingCoords(i, j, &x, &y);
|
||||
sub_8059024(x, y, 0);
|
||||
MapGridSetMetatileImpassabilityAt(x, y, FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static u8 sub_811BBA0(u32 r1, u32 unused, struct GFtgtGname * r2)
|
||||
static u8 UnionPartnerObjectGetFacing(u32 member, u32 group, struct GFtgtGname * gname)
|
||||
{
|
||||
if (r1 != 0)
|
||||
if (member != 0)
|
||||
{
|
||||
return gUnknown_845711B[r1];
|
||||
return sUnionGroupMemberFacings[member];
|
||||
}
|
||||
else if (r2->unk_0a_0 == 0x45)
|
||||
else if (gname->activity == 0x45)
|
||||
{
|
||||
return 1;
|
||||
return DIR_SOUTH;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 4;
|
||||
return DIR_EAST;
|
||||
}
|
||||
}
|
||||
|
||||
static u32 sub_811BBC8(u32 a0, u32 a1)
|
||||
static u32 RfuUnionGroupMemberIsInvisible(u32 group, u32 member)
|
||||
{
|
||||
return RfuUnionObjectIsInvisible(5 * a0 + a1 - 0x38);
|
||||
return RfuUnionObjectIsInvisible(5 * group + member - 0x38);
|
||||
}
|
||||
|
||||
static void sub_811BBE0(u32 r5, u32 r6, u8 r8, struct GFtgtGname * r9)
|
||||
static void SpawnGroupMember(u32 groupNo, u32 memberNo, u8 direction, struct GFtgtGname * gname)
|
||||
{
|
||||
s32 x, y;
|
||||
s32 r7 = 5 * r5 + r6;
|
||||
if (sub_811BBC8(r5, r6) == 1)
|
||||
s32 objId = 5 * groupNo + memberNo;
|
||||
if (RfuUnionGroupMemberIsInvisible(groupNo, memberNo) == TRUE)
|
||||
{
|
||||
RfuUnionObjectToggleInvisibility(r7 - 0x38, FALSE);
|
||||
RfuUnionObjectStartWarp(r7 - 0x38, 1);
|
||||
RfuUnionObjectToggleInvisibility(objId - 0x38, FALSE);
|
||||
RfuUnionObjectStartWarp(objId - 0x38, UNION_ROOM_SPAWN_IN);
|
||||
}
|
||||
RfuUnionObjectSetFacingDirection(r7 - 0x38, r8);
|
||||
sub_811C008(r6, r5, sub_811BBA0(r6, r5, r9));
|
||||
GetUnionRoomPlayerFacingCoords(r5, r6, &x, &y);
|
||||
sub_8059024(x, y, 1);
|
||||
RfuUnionObjectSetFacingDirection(objId - 0x38, direction);
|
||||
UnionPartnerObjectSetFacing(memberNo, groupNo, UnionPartnerObjectGetFacing(memberNo, groupNo, gname));
|
||||
GetUnionRoomPlayerFacingCoords(groupNo, memberNo, &x, &y);
|
||||
MapGridSetMetatileImpassabilityAt(x, y, TRUE);
|
||||
}
|
||||
|
||||
static void sub_811BC68(u32 a0, u32 a1)
|
||||
static void DespawnGroupMember(u32 group, u32 member)
|
||||
{
|
||||
s32 x, y;
|
||||
RfuUnionObjectStartWarp(5 * a0 + a1 - 0x38, 2);
|
||||
GetUnionRoomPlayerFacingCoords(a0, a1, &x, &y);
|
||||
sub_8059024(x, y, 0);
|
||||
RfuUnionObjectStartWarp(5 * group + member - 0x38, UNION_ROOM_SPAWN_OUT);
|
||||
GetUnionRoomPlayerFacingCoords(group, member, &x, &y);
|
||||
MapGridSetMetatileImpassabilityAt(x, y, FALSE);
|
||||
}
|
||||
|
||||
static void sub_811BCA0(u32 r7, struct GFtgtGname * r8)
|
||||
static void AssembleGroup(u32 group, struct GFtgtGname * gname)
|
||||
{
|
||||
s16 x, y, x2, y2;
|
||||
s32 i;
|
||||
|
||||
PlayerGetDestCoords(&x, &y);
|
||||
player_get_pos_including_state_based_drift(&x2, &y2);
|
||||
if (RfuUnionObjectIsInvisible(5 * r7 - 0x38) == 1)
|
||||
if (RfuUnionObjectIsInvisible(5 * group - 0x38) == TRUE)
|
||||
{
|
||||
if (sub_811B58C(r7, 0, x, y) == TRUE || sub_811B58C(r7, 0, x2, y2) == TRUE)
|
||||
if (IsUnionRoomPlayerFacingTileAt(group, 0, x, y) == TRUE || IsUnionRoomPlayerFacingTileAt(group, 0, x2, y2) == TRUE)
|
||||
{
|
||||
return;
|
||||
}
|
||||
sub_811BBE0(r7, 0, GetUnionRoomPlayerGraphicsId(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8);
|
||||
SpawnGroupMember(group, 0, GetUnionRoomPlayerGraphicsId(gname->playerGender, gname->unk_00.playerTrainerId[0]), gname);
|
||||
}
|
||||
for (i = 1; i < 5; i++)
|
||||
{
|
||||
if (r8->unk_04[i - 1] == 0)
|
||||
if (gname->child_sprite_gender[i - 1] == 0)
|
||||
{
|
||||
sub_811BC68(r7, i);
|
||||
DespawnGroupMember(group, i);
|
||||
}
|
||||
else if (sub_811B58C(r7, i, x, y) == FALSE && sub_811B58C(r7, i, x2, y2) == FALSE)
|
||||
else if (IsUnionRoomPlayerFacingTileAt(group, i, x, y) == FALSE && IsUnionRoomPlayerFacingTileAt(group, i, x2, y2) == FALSE)
|
||||
{
|
||||
sub_811BBE0(r7, i, GetUnionRoomPlayerGraphicsId((r8->unk_04[i - 1] >> 3) & 1, r8->unk_04[i - 1] & 7), r8);
|
||||
SpawnGroupMember(group, i, GetUnionRoomPlayerGraphicsId((gname->child_sprite_gender[i - 1] >> 3) & 1, gname->child_sprite_gender[i - 1] & 7), gname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_811BDA8(u32 r5, struct GFtgtGname * r4)
|
||||
static void SpawnGroupLeaderAndMembers(u32 group, struct GFtgtGname * gname)
|
||||
{
|
||||
u32 i;
|
||||
switch (r4->unk_0a_0)
|
||||
switch (gname->activity)
|
||||
{
|
||||
case 0x40:
|
||||
case 0x54:
|
||||
sub_811B8BC(r5, r4->playerGender, r4->unk_00.playerTrainerId[0]);
|
||||
SpawnGroupLeader(group, gname->playerGender, gname->unk_00.playerTrainerId[0]);
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
sub_811BC68(r5, i);
|
||||
DespawnGroupMember(group, i);
|
||||
}
|
||||
break;
|
||||
case 0x41:
|
||||
@@ -559,70 +561,70 @@ static void sub_811BDA8(u32 r5, struct GFtgtGname * r4)
|
||||
case 0x51:
|
||||
case 0x52:
|
||||
case 0x53:
|
||||
sub_811B90C(r5);
|
||||
sub_811BCA0(r5, r4);
|
||||
DespawnGroupLeader(group);
|
||||
AssembleGroup(group, gname);
|
||||
break;
|
||||
default:
|
||||
AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 979)
|
||||
}
|
||||
}
|
||||
|
||||
static void sub_811BE6C(u32 r5, struct GFtgtGname * unused)
|
||||
static void DespawnGroupLeaderAndMembers(u32 group, struct GFtgtGname * gname)
|
||||
{
|
||||
s32 i;
|
||||
sub_811B90C(r5);
|
||||
DespawnGroupLeader(group);
|
||||
for (i = 0; i < 5; i++)
|
||||
{
|
||||
sub_811BC68(r5, i);
|
||||
DespawnGroupMember(group, i);
|
||||
}
|
||||
}
|
||||
|
||||
static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom *r0)
|
||||
static void UpdateUnionRoomPlayerSprites(struct UnkStruct_URoom * groups)
|
||||
{
|
||||
s32 i;
|
||||
struct UnkStruct_x20 * r4;
|
||||
struct UnkStruct_x20 * x20_p;
|
||||
sUnionObjRefreshTimer = 0;
|
||||
for (i = 0, r4 = r0->field_0->arr; i < 8; i++)
|
||||
for (i = 0, x20_p = groups->field_0->arr; i < 8; i++)
|
||||
{
|
||||
if (r4[i].field_1A_0 == 1)
|
||||
if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN)
|
||||
{
|
||||
sub_811BDA8(i, &r4[i].unk.gname);
|
||||
SpawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname);
|
||||
}
|
||||
else if (r4[i].field_1A_0 == 2)
|
||||
else if (x20_p[i].groupScheduledAnim == UNION_ROOM_SPAWN_OUT)
|
||||
{
|
||||
sub_811BE6C(i, &r4[i].unk.gname);
|
||||
DespawnGroupLeaderAndMembers(i, &x20_p[i].gname_uname.gname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_811BECC(struct UnkStruct_URoom *unused)
|
||||
void ScheduleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p)
|
||||
{
|
||||
sUnionObjRefreshTimer = 300;
|
||||
}
|
||||
|
||||
void sub_811BEDC(struct UnkStruct_URoom *r2)
|
||||
void HandleUnionRoomPlayerRefresh(struct UnkStruct_URoom *uroom_p)
|
||||
{
|
||||
if (++sUnionObjRefreshTimer > 300)
|
||||
{
|
||||
UpdateUnionRoomPlayerSprites(r2);
|
||||
UpdateUnionRoomPlayerSprites(uroom_p);
|
||||
}
|
||||
}
|
||||
|
||||
bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
|
||||
bool32 RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(struct UnkStruct_Main0 *main0_p, s16 *member_p, s16 *group_p, u8 *spriteIds)
|
||||
{
|
||||
s16 x, y;
|
||||
s32 i, j;
|
||||
struct UnkStruct_x20 * r4;
|
||||
struct UnkStruct_x20 * x20_p;
|
||||
if (!is_walking_or_running())
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
|
||||
for (i = 0, r4 = arg0->arr; i < 8; i++)
|
||||
for (i = 0, x20_p = main0_p->arr; i < 8; i++)
|
||||
{
|
||||
for (j = 0; j < 5; j++)
|
||||
{
|
||||
s32 r3 = 5 * i + j;
|
||||
s32 objId = 5 * i + j;
|
||||
if (x != sUnionPartnerCoords[i][0] + sFacingDirectionOffsets[j][0] + 7)
|
||||
{
|
||||
continue;
|
||||
@@ -631,33 +633,33 @@ bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (RfuUnionObjectIsInvisible(r3 - 0x38) != 0)
|
||||
if (RfuUnionObjectIsInvisible(objId - 0x38) != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (RfuUnionObjectIsWarping(r3 - 0x38) != 0)
|
||||
if (RfuUnionObjectIsWarping(objId - 0x38) != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (r4[i].field_1A_0 != 1)
|
||||
if (x20_p[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
sub_811C008(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
|
||||
*arg1 = j;
|
||||
*arg2 = i;
|
||||
UnionPartnerObjectSetFacing(j, i, sOppositeFacingDirection[GetPlayerFacingDirection()]);
|
||||
*member_p = j;
|
||||
*group_p = i;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void sub_811C008(s32 arg0, s32 arg1, u8 arg2)
|
||||
static void UnionPartnerObjectSetFacing(s32 member, s32 group, u8 direction)
|
||||
{
|
||||
TurnObjectEvent(5 * arg1 - 0x38 + arg0, arg2);
|
||||
TurnObjectEvent(5 * group - 0x38 + member, direction);
|
||||
}
|
||||
|
||||
void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2)
|
||||
void UpdateUnionGroupMemberFacing(u32 member, u32 group, struct UnkStruct_Main0 *main0_p)
|
||||
{
|
||||
return sub_811C008(arg0, arg1, sub_811BBA0(arg0, arg1, &arg2->arr[arg1].unk.gname));
|
||||
return UnionPartnerObjectSetFacing(member, group, UnionPartnerObjectGetFacing(member, group, &main0_p->arr[group].gname_uname.gname));
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user