diff options
327 files changed, 14991 insertions, 18920 deletions
@@ -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 diff --git a/asm/battle_bg.s b/asm/battle_bg.s index 96f33cb3c..e21617e70 100644 --- a/asm/battle_bg.s +++ b/asm/battle_bg.s @@ -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 diff --git a/asm/berry_crush.s b/asm/berry_crush.s index 6502fc916..728e87128 100644 --- a/asm/berry_crush.s +++ b/asm/berry_crush.s @@ -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 diff --git a/asm/berry_crush_2.s b/asm/berry_crush_2.s index 7495c8519..e5079a5a9 100644 --- a/asm/berry_crush_2.s +++ b/asm/berry_crush_2.s @@ -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 diff --git a/asm/berry_crush_3.s b/asm/berry_crush_3.s index 9e3334a7f..dfed93396 100644 --- a/asm/berry_crush_3.s +++ b/asm/berry_crush_3.s @@ -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 diff --git a/asm/cable_club.s b/asm/cable_club.s index 27a3d93f4..92f14461a 100644 --- a/asm/cable_club.s +++ b/asm/cable_club.s @@ -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 diff --git a/asm/dodrio_berry_picking.s b/asm/dodrio_berry_picking.s index 3e9c18491..eca27fd8d 100644 --- a/asm/dodrio_berry_picking.s +++ b/asm/dodrio_berry_picking.s @@ -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 diff --git a/asm/dodrio_berry_picking_2.s b/asm/dodrio_berry_picking_2.s index 792dc4b0f..91594c7a8 100644 --- a/asm/dodrio_berry_picking_2.s +++ b/asm/dodrio_berry_picking_2.s @@ -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 diff --git a/asm/easy_chat_2.s b/asm/easy_chat_2.s index c88c5deeb..40b0eeb1f 100644 --- a/asm/easy_chat_2.s +++ b/asm/easy_chat_2.s @@ -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 diff --git a/asm/event_object_80688E4.s b/asm/event_object_80688E4.s deleted file mode 100644 index 93309a80d..000000000 --- a/asm/event_object_80688E4.s +++ /dev/null @@ -1,1503 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start FreezeObjectEvent -FreezeObjectEvent: @ 80688E4 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r1, [r5] - movs r0, 0xA0 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - bne _0806896C - ldrb r0, [r5, 0x1] - movs r4, 0x1 - orrs r0, r4 - strb r0, [r5, 0x1] - ldr r3, _08068968 @ =gSprites - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x2C - ldrb r1, [r0] - lsls r1, 25 - lsrs r1, 31 - lsls r1, 7 - ldrb r2, [r5, 0x2] - movs r0, 0x7F - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x2] - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x2C - ldrb r1, [r0] - lsrs r1, 7 - ands r1, r4 - ldrb r2, [r5, 0x3] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r5, 0x3] - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x2C - ldrb r1, [r0] - movs r2, 0x40 - orrs r1, r2 - strb r1, [r0] - ldrb r1, [r5, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x2C - ldrb r1, [r0] - movs r2, 0x80 - orrs r1, r2 - strb r1, [r0] - movs r0, 0 - b _0806896E - .align 2, 0 -_08068968: .4byte gSprites -_0806896C: - movs r0, 0x1 -_0806896E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end FreezeObjectEvent - - thumb_func_start FreezeObjectEvents -FreezeObjectEvents: @ 8068974 - push {r4,r5,lr} - movs r4, 0 - ldr r5, _080689A8 @ =gObjectEvents -_0806897A: - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - adds r1, r0, r5 - ldrb r0, [r1] - lsls r0, 31 - cmp r0, 0 - beq _08068998 - ldr r0, _080689AC @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - cmp r4, r0 - beq _08068998 - adds r0, r1, 0 - bl FreezeObjectEvent -_08068998: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _0806897A - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080689A8: .4byte gObjectEvents -_080689AC: .4byte gPlayerAvatar - thumb_func_end FreezeObjectEvents - - thumb_func_start FreezeObjectEventsExceptOne -FreezeObjectEventsExceptOne: @ 80689B0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r4, 0 - ldr r6, _080689EC @ =gObjectEvents -_080689BA: - cmp r4, r5 - beq _080689DC - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - adds r1, r0, r6 - ldrb r0, [r1] - lsls r0, 31 - cmp r0, 0 - beq _080689DC - ldr r0, _080689F0 @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - cmp r4, r0 - beq _080689DC - adds r0, r1, 0 - bl FreezeObjectEvent -_080689DC: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _080689BA - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080689EC: .4byte gObjectEvents -_080689F0: .4byte gPlayerAvatar - thumb_func_end FreezeObjectEventsExceptOne - - thumb_func_start UnfreezeObjectEvent -UnfreezeObjectEvent: @ 80689F4 - push {r4,r5,lr} - adds r5, r0, 0 - ldrh r2, [r5] - ldr r1, _08068A54 @ =0x00000101 - adds r0, r1, 0 - ands r0, r2 - cmp r0, r1 - bne _08068A4C - ldrb r1, [r5, 0x1] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r5, 0x1] - ldr r4, _08068A58 @ =gSprites - ldrb r0, [r5, 0x4] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - ldrb r2, [r5, 0x2] - adds r1, 0x2C - lsrs r2, 7 - lsls r2, 6 - ldrb r3, [r1] - movs r0, 0x41 - negs r0, r0 - ands r0, r3 - orrs r0, r2 - strb r0, [r1] - ldrb r0, [r5, 0x4] - lsls r2, r0, 4 - adds r2, r0 - lsls r2, 2 - adds r2, r4 - ldrb r1, [r5, 0x3] - lsls r1, 31 - lsrs r1, 31 - adds r2, 0x2C - lsls r1, 7 - ldrb r3, [r2] - movs r0, 0x7F - ands r0, r3 - orrs r0, r1 - strb r0, [r2] -_08068A4C: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08068A54: .4byte 0x00000101 -_08068A58: .4byte gSprites - thumb_func_end UnfreezeObjectEvent - - thumb_func_start UnfreezeObjectEvents -UnfreezeObjectEvents: @ 8068A5C - push {r4,r5,lr} - movs r4, 0 - ldr r5, _08068A88 @ =gObjectEvents -_08068A62: - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - adds r1, r0, r5 - ldrb r0, [r1] - lsls r0, 31 - cmp r0, 0 - beq _08068A78 - adds r0, r1, 0 - bl UnfreezeObjectEvent -_08068A78: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _08068A62 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08068A88: .4byte gObjectEvents - thumb_func_end UnfreezeObjectEvents - - thumb_func_start little_step -little_step: @ 8068A8C - lsls r1, 24 - ldr r2, _08068AA8 @ =gUnknown_83A64C8 - lsrs r1, 22 - adds r1, r2 - ldrh r2, [r1] - ldrh r3, [r0, 0x20] - adds r2, r3 - strh r2, [r0, 0x20] - ldrh r1, [r1, 0x2] - ldrh r2, [r0, 0x22] - adds r1, r2 - strh r1, [r0, 0x22] - bx lr - .align 2, 0 -_08068AA8: .4byte gUnknown_83A64C8 - thumb_func_end little_step - - thumb_func_start double_little_steps -double_little_steps: @ 8068AAC - lsls r1, 24 - ldr r2, _08068ACC @ =gUnknown_83A64C8 - lsrs r1, 22 - adds r1, r2 - ldrh r2, [r1] - lsls r2, 1 - ldrh r3, [r0, 0x20] - adds r2, r3 - strh r2, [r0, 0x20] - ldrh r1, [r1, 0x2] - lsls r1, 1 - ldrh r2, [r0, 0x22] - adds r1, r2 - strh r1, [r0, 0x22] - bx lr - .align 2, 0 -_08068ACC: .4byte gUnknown_83A64C8 - thumb_func_end double_little_steps - - thumb_func_start triple_little_steps -triple_little_steps: @ 8068AD0 - lsls r1, 24 - ldr r2, _08068AF4 @ =gUnknown_83A64C8 - lsrs r1, 22 - adds r1, r2 - ldrh r2, [r1] - lsls r3, r2, 1 - adds r2, r3 - ldrh r3, [r0, 0x20] - adds r2, r3 - strh r2, [r0, 0x20] - ldrh r1, [r1, 0x2] - lsls r2, r1, 1 - adds r1, r2 - ldrh r2, [r0, 0x22] - adds r1, r2 - strh r1, [r0, 0x22] - bx lr - .align 2, 0 -_08068AF4: .4byte gUnknown_83A64C8 - thumb_func_end triple_little_steps - - thumb_func_start quad_little_steps -quad_little_steps: @ 8068AF8 - lsls r1, 24 - ldr r2, _08068B18 @ =gUnknown_83A64C8 - lsrs r1, 22 - adds r1, r2 - ldrh r2, [r1] - lsls r2, 2 - ldrh r3, [r0, 0x20] - adds r2, r3 - strh r2, [r0, 0x20] - ldrh r1, [r1, 0x2] - lsls r1, 2 - ldrh r2, [r0, 0x22] - adds r1, r2 - strh r1, [r0, 0x22] - bx lr - .align 2, 0 -_08068B18: .4byte gUnknown_83A64C8 - thumb_func_end quad_little_steps - - thumb_func_start oct_little_steps -oct_little_steps: @ 8068B1C - lsls r1, 24 - ldr r2, _08068B3C @ =gUnknown_83A64C8 - lsrs r1, 22 - adds r1, r2 - ldrh r2, [r1] - lsls r2, 3 - ldrh r3, [r0, 0x20] - adds r2, r3 - strh r2, [r0, 0x20] - ldrh r1, [r1, 0x2] - lsls r1, 3 - ldrh r2, [r0, 0x22] - adds r1, r2 - strh r1, [r0, 0x22] - bx lr - .align 2, 0 -_08068B3C: .4byte gUnknown_83A64C8 - thumb_func_end oct_little_steps - - thumb_func_start oamt_npc_ministep_reset -oamt_npc_ministep_reset: @ 8068B40 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - movs r3, 0 - strh r1, [r0, 0x34] - strh r2, [r0, 0x36] - strh r3, [r0, 0x38] - bx lr - thumb_func_end oamt_npc_ministep_reset - - thumb_func_start obj_npc_ministep -obj_npc_ministep: @ 8068B54 - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _08068BAC @ =gUnknown_83A71B0 - movs r0, 0x36 - ldrsh r2, [r4, r0] - lsls r0, r2, 1 - adds r0, r5 - movs r3, 0x38 - ldrsh r1, [r4, r3] - movs r3, 0 - ldrsh r0, [r0, r3] - cmp r1, r0 - bge _08068BB4 - ldr r1, _08068BB0 @ =gUnknown_83A719C - lsls r0, r2, 2 - adds r0, r1 - movs r1, 0x38 - ldrsh r2, [r4, r1] - ldr r0, [r0] - lsls r2, 2 - adds r2, r0 - ldrh r1, [r4, 0x34] - lsls r1, 24 - lsrs r1, 24 - ldr r2, [r2] - adds r0, r4, 0 - bl _call_via_r2 - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - movs r2, 0x36 - ldrsh r1, [r4, r2] - lsls r1, 1 - adds r1, r5 - lsls r0, 16 - asrs r0, 16 - movs r3, 0 - ldrsh r1, [r1, r3] - cmp r0, r1 - blt _08068BB4 - movs r0, 0x1 - b _08068BB6 - .align 2, 0 -_08068BAC: .4byte gUnknown_83A71B0 -_08068BB0: .4byte gUnknown_83A719C -_08068BB4: - movs r0, 0 -_08068BB6: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end obj_npc_ministep - - thumb_func_start sub_8068BBC -sub_8068BBC: @ 8068BBC - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - strh r1, [r0, 0x34] - strh r2, [r0, 0x36] - strh r2, [r0, 0x38] - bx lr - thumb_func_end sub_8068BBC - - thumb_func_start sub_8068BCC -sub_8068BCC: @ 8068BCC - push {r4,lr} - adds r4, r0, 0 - ldrh r1, [r4, 0x36] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08068BEC - ldrh r1, [r4, 0x34] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl little_step - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] -_08068BEC: - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0xF - bgt _08068BFE - movs r0, 0 - b _08068C00 -_08068BFE: - movs r0, 0x1 -_08068C00: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8068BCC - - thumb_func_start sub_8068C08 -sub_8068C08: @ 8068C08 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - strh r1, [r0, 0x34] - strh r2, [r0, 0x36] - strh r2, [r0, 0x38] - bx lr - thumb_func_end sub_8068C08 - - thumb_func_start sub_8068C18 -sub_8068C18: @ 8068C18 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x2 - bgt _08068C3E - ldrh r1, [r4, 0x34] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl little_step - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] - b _08068C42 -_08068C3E: - movs r0, 0 - strh r0, [r4, 0x36] -_08068C42: - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0xF - bgt _08068C4E - movs r0, 0 - b _08068C50 -_08068C4E: - movs r0, 0x1 -_08068C50: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8068C18 - - thumb_func_start sub_8068C58 -sub_8068C58: @ 8068C58 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - strh r1, [r0, 0x34] - strh r2, [r0, 0x36] - strh r2, [r0, 0x38] - bx lr - thumb_func_end sub_8068C58 - - thumb_func_start sub_8068C68 -sub_8068C68: @ 8068C68 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - ble _08068C90 - movs r0, 0 - strh r0, [r4, 0x36] - ldrh r1, [r4, 0x34] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl little_step - ldrh r0, [r4, 0x38] - adds r0, 0x1 - strh r0, [r4, 0x38] -_08068C90: - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0xF - bgt _08068C9C - movs r0, 0 - b _08068C9E -_08068C9C: - movs r0, 0x1 -_08068C9E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8068C68 - - thumb_func_start sub_8068CA4 -sub_8068CA4: @ 8068CA4 - lsls r1, 24 - lsrs r1, 24 - movs r2, 0 - strh r1, [r0, 0x34] - strh r2, [r0, 0x36] - strh r2, [r0, 0x38] - bx lr - thumb_func_end sub_8068CA4 - - thumb_func_start sub_8068CB4 -sub_8068CB4: @ 8068CB4 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x36] - adds r0, 0x1 - strh r0, [r4, 0x36] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068CD8 - ldrh r1, [r4, 0x34] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl little_step - ldrh r0, [r4, 0x38] - adds r0, 0x1 - b _08068CE8 -_08068CD8: - ldrh r1, [r4, 0x34] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl double_little_steps - ldrh r0, [r4, 0x38] - adds r0, 0x2 -_08068CE8: - strh r0, [r4, 0x38] - movs r1, 0x38 - ldrsh r0, [r4, r1] - cmp r0, 0xF - bgt _08068CF6 - movs r0, 0 - b _08068CF8 -_08068CF6: - movs r0, 0x1 -_08068CF8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8068CB4 - - thumb_func_start sub_8068D00 -sub_8068D00: @ 8068D00 - lsls r1, 24 - ldr r2, _08068D18 @ =gUnknown_83A71EC - lsrs r1, 22 - adds r1, r2 - lsls r0, 16 - asrs r0, 16 - ldr r1, [r1] - adds r1, r0 - movs r0, 0 - ldrsb r0, [r1, r0] - bx lr - .align 2, 0 -_08068D18: .4byte gUnknown_83A71EC - thumb_func_end sub_8068D00 - - thumb_func_start sub_8068D1C -sub_8068D1C: @ 8068D1C - push {r4,lr} - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 24 - lsrs r3, 24 - movs r4, 0 - strh r1, [r0, 0x34] - strh r2, [r0, 0x36] - strh r3, [r0, 0x38] - strh r4, [r0, 0x3A] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8068D1C - - thumb_func_start sub_8068D3C -sub_8068D3C: @ 8068D3C - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - ldr r1, _08068DBC @ =gUnknown_83A71F8 - mov r0, sp - movs r2, 0x6 - bl memcpy - add r5, sp, 0x8 - ldr r1, _08068DC0 @ =gUnknown_83A71FE - adds r0, r5, 0 - movs r2, 0x3 - bl memcpy - movs r6, 0 - movs r1, 0x36 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _08068D6E - ldrh r1, [r4, 0x34] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl little_step -_08068D6E: - movs r2, 0x3A - ldrsh r0, [r4, r2] - movs r2, 0x36 - ldrsh r1, [r4, r2] - adds r1, r5, r1 - ldrb r1, [r1] - asrs r0, r1 - ldrh r1, [r4, 0x38] - lsls r1, 24 - lsrs r1, 24 - bl sub_8068D00 - strh r0, [r4, 0x26] - ldrh r1, [r4, 0x3A] - adds r1, 0x1 - strh r1, [r4, 0x3A] - movs r2, 0x36 - ldrsh r0, [r4, r2] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - lsls r0, 16 - asrs r2, r0, 16 - lsls r1, 16 - asrs r1, 16 - asrs r0, 17 - cmp r1, r0 - bne _08068DA8 - movs r6, 0x1 -_08068DA8: - cmp r1, r2 - blt _08068DB2 - movs r0, 0 - strh r0, [r4, 0x26] - movs r6, 0xFF -_08068DB2: - adds r0, r6, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08068DBC: .4byte gUnknown_83A71F8 -_08068DC0: .4byte gUnknown_83A71FE - thumb_func_end sub_8068D3C - - thumb_func_start sub_8068DC4 -sub_8068DC4: @ 8068DC4 - push {r4-r6,lr} - sub sp, 0xC - adds r5, r0, 0 - ldr r1, _08068E50 @ =gUnknown_83A7202 - mov r0, sp - movs r2, 0x6 - bl memcpy - add r4, sp, 0x8 - ldr r1, _08068E54 @ =gUnknown_83A7208 - adds r0, r4, 0 - movs r2, 0x3 - bl memcpy - movs r6, 0 - movs r1, 0x36 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08068E00 - ldrh r1, [r5, 0x3A] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _08068E00 - ldrh r1, [r5, 0x34] - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl little_step -_08068E00: - movs r2, 0x3A - ldrsh r0, [r5, r2] - movs r2, 0x36 - ldrsh r1, [r5, r2] - adds r1, r4, r1 - ldrb r1, [r1] - asrs r0, r1 - ldrh r1, [r5, 0x38] - lsls r1, 24 - lsrs r1, 24 - bl sub_8068D00 - strh r0, [r5, 0x26] - ldrh r1, [r5, 0x3A] - adds r1, 0x1 - strh r1, [r5, 0x3A] - movs r2, 0x36 - ldrsh r0, [r5, r2] - lsls r0, 1 - add r0, sp - ldrh r0, [r0] - lsls r0, 16 - asrs r2, r0, 16 - lsls r1, 16 - asrs r1, 16 - asrs r0, 17 - cmp r1, r0 - bne _08068E3A - movs r6, 0x1 -_08068E3A: - cmp r1, r2 - blt _08068E44 - movs r0, 0 - strh r0, [r5, 0x26] - movs r6, 0xFF -_08068E44: - adds r0, r6, 0 - add sp, 0xC - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08068E50: .4byte gUnknown_83A7202 -_08068E54: .4byte gUnknown_83A7208 - thumb_func_end sub_8068DC4 - - thumb_func_start SetObjectEventStepTimer -SetObjectEventStepTimer: @ 8068E58 - strh r1, [r0, 0x34] - bx lr - thumb_func_end SetObjectEventStepTimer - - thumb_func_start RunObjectEventStepTimer -RunObjectEventStepTimer: @ 8068E5C - push {lr} - ldrh r1, [r0, 0x34] - subs r1, 0x1 - strh r1, [r0, 0x34] - lsls r1, 16 - cmp r1, 0 - beq _08068E6E - movs r0, 0 - b _08068E70 -_08068E6E: - movs r0, 0x1 -_08068E70: - pop {r1} - bx r1 - thumb_func_end RunObjectEventStepTimer - - thumb_func_start obj_anim_image_set_and_seek -obj_anim_image_set_and_seek: @ 8068E74 - push {r4,lr} - lsls r2, 24 - lsrs r2, 24 - adds r3, r0, 0 - adds r3, 0x2A - strb r1, [r3] - adds r4, r0, 0 - adds r4, 0x2C - ldrb r3, [r4] - movs r1, 0x41 - negs r1, r1 - ands r1, r3 - strb r1, [r4] - adds r1, r2, 0 - bl SeekSpriteAnim - pop {r4} - pop {r0} - bx r0 - thumb_func_end obj_anim_image_set_and_seek - - thumb_func_start sub_8068E9C -sub_8068E9C: @ 8068E9C - push {lr} - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - bne _08068EAE - movs r0, 0 - b _08068EB0 -_08068EAE: - movs r0, 0x1 -_08068EB0: - pop {r1} - bx r1 - thumb_func_end sub_8068E9C - - thumb_func_start sub_8068EB4 -sub_8068EB4: @ 8068EB4 - push {r4-r6,lr} - mov r12, r0 - lsls r1, 24 - lsrs r1, 24 - mov r3, r12 - adds r3, 0x3E - movs r0, 0x1 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - movs r1, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08068F1C - mov r0, r12 - ldrh r1, [r0, 0x24] - ldrh r2, [r0, 0x20] - adds r1, r2 - mov r4, r12 - adds r4, 0x28 - movs r0, 0 - ldrsb r0, [r4, r0] - ldr r2, _08068F14 @ =gSpriteCoordOffsetX - adds r0, r1 - ldrh r2, [r2] - adds r0, r2 - lsls r0, 16 - lsrs r6, r0, 16 - mov r0, r12 - ldrh r1, [r0, 0x26] - ldrh r2, [r0, 0x22] - adds r1, r2 - subs r3, 0x15 - movs r0, 0 - ldrsb r0, [r3, r0] - ldr r2, _08068F18 @ =gSpriteCoordOffsetY - adds r0, r1 - ldrh r2, [r2] - adds r0, r2 - lsls r0, 16 - lsrs r5, r0, 16 - adds r2, r3, 0 - b _08068F4A - .align 2, 0 -_08068F14: .4byte gSpriteCoordOffsetX -_08068F18: .4byte gSpriteCoordOffsetY -_08068F1C: - mov r0, r12 - ldrh r1, [r0, 0x24] - ldrh r2, [r0, 0x20] - adds r1, r2 - mov r3, r12 - adds r3, 0x28 - movs r0, 0 - ldrsb r0, [r3, r0] - adds r0, r1 - lsls r0, 16 - lsrs r6, r0, 16 - mov r0, r12 - ldrh r1, [r0, 0x26] - ldrh r2, [r0, 0x22] - adds r1, r2 - mov r2, r12 - adds r2, 0x29 - movs r0, 0 - ldrsb r0, [r2, r0] - adds r0, r1 - lsls r0, 16 - lsrs r5, r0, 16 - adds r4, r3, 0 -_08068F4A: - ldrb r0, [r4] - lsls r0, 24 - asrs r0, 25 - subs r0, r6, r0 - lsls r0, 16 - lsrs r3, r0, 16 - ldrb r0, [r2] - lsls r0, 24 - asrs r0, 25 - subs r0, r5, r0 - lsls r0, 16 - lsrs r2, r0, 16 - lsls r0, r6, 16 - asrs r0, 16 - cmp r0, 0xFF - bgt _08068F76 - lsls r0, r3, 16 - asrs r0, 16 - movs r1, 0x10 - negs r1, r1 - cmp r0, r1 - bge _08068F82 -_08068F76: - mov r4, r12 - adds r4, 0x3E - ldrb r0, [r4] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] -_08068F82: - lsls r0, r5, 16 - asrs r0, 16 - cmp r0, 0xAF - bgt _08068F96 - lsls r0, r2, 16 - asrs r0, 16 - movs r1, 0x10 - negs r1, r1 - cmp r0, r1 - bge _08068FA2 -_08068F96: - mov r0, r12 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_08068FA2: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_8068EB4 - - thumb_func_start sub_8068FA8 -sub_8068FA8: @ 8068FA8 - push {r4,lr} - adds r4, r0, 0 - bl sub_8069248 - ldrh r0, [r4, 0x30] - lsls r0, 24 - lsrs r0, 24 - adds r1, r4, 0 - movs r2, 0x1 - bl SetObjectSubpriorityByZCoord - ldrh r1, [r4, 0x32] - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_8068EB4 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8068FA8 - - thumb_func_start sub_8068FD0 -sub_8068FD0: @ 8068FD0 - push {r4,r5,lr} - movs r5, 0 - movs r4, 0x3F -_08068FD6: - ldr r0, _08069004 @ =gSprites - adds r2, r5, r0 - adds r0, r2, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08068FF6 - ldr r1, [r2, 0x1C] - ldr r0, _08069008 @ =sub_8068FA8 - cmp r1, r0 - bne _08068FF6 - adds r0, r2, 0 - bl DestroySprite -_08068FF6: - adds r5, 0x44 - subs r4, 0x1 - cmp r4, 0 - bge _08068FD6 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08069004: .4byte gSprites -_08069008: .4byte sub_8068FA8 - thumb_func_end sub_8068FD0 - - thumb_func_start sub_806900C -sub_806900C: @ 806900C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r3, 0 - ldr r6, _08069040 @ =gSprites - movs r4, 0 -_08069018: - adds r2, r4, r6 - adds r0, r2, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08069048 - ldr r1, [r2, 0x1C] - ldr r0, _08069044 @ =sub_8068FA8 - cmp r1, r0 - bne _08069048 - ldrh r0, [r2, 0x2E] - lsls r0, 24 - lsrs r0, 24 - cmp r0, r5 - bne _08069048 - adds r0, r3, 0 - b _08069052 - .align 2, 0 -_08069040: .4byte gSprites -_08069044: .4byte sub_8068FA8 -_08069048: - adds r4, 0x44 - adds r3, 0x1 - cmp r3, 0x3F - ble _08069018 - movs r0, 0x40 -_08069052: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_806900C - - thumb_func_start sub_8069058 -sub_8069058: @ 8069058 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - bl sub_806900C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0806908A - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _08069090 @ =gSprites - adds r4, r0 - adds r0, r5, 0 - bl ObjectEventDirectionToImageAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim -_0806908A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08069090: .4byte gSprites - thumb_func_end sub_8069058 - - thumb_func_start sub_8069094 -sub_8069094: @ 8069094 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - bl sub_806900C - adds r1, r0, 0 - cmp r1, 0x40 - beq _0806911E - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080690F8 @ =gSprites - adds r4, r0, r1 - adds r0, r5, 0 - bl GetObjectEventGraphicsInfo - ldrh r3, [r4, 0x4] - lsls r3, 22 - ldr r1, [r0, 0x10] - ldr r2, [r1, 0x4] - ldr r1, [r1] - str r1, [r4] - str r2, [r4, 0x4] - lsrs r3, 22 - ldrh r2, [r4, 0x4] - ldr r1, _080690FC @ =0xfffffc00 - ands r1, r2 - orrs r1, r3 - strh r1, [r4, 0x4] - ldrb r2, [r0, 0xC] - lsls r2, 28 - lsrs r2, 24 - ldrb r3, [r4, 0x5] - movs r1, 0xF - ands r1, r3 - orrs r1, r2 - strb r1, [r4, 0x5] - ldr r1, [r0, 0x1C] - str r1, [r4, 0xC] - ldr r1, [r0, 0x14] - cmp r1, 0 - bne _08069100 - str r1, [r4, 0x18] - adds r0, r4, 0 - adds r0, 0x42 - strb r1, [r0] - b _08069116 - .align 2, 0 -_080690F8: .4byte gSprites -_080690FC: .4byte 0xfffffc00 -_08069100: - adds r0, r4, 0 - bl SetSubspriteTables - adds r2, r4, 0 - adds r2, 0x42 - ldrb r0, [r2] - movs r1, 0x3F - ands r1, r0 - movs r0, 0x80 - orrs r1, r0 - strb r1, [r2] -_08069116: - adds r0, r4, 0 - movs r1, 0 - bl StartSpriteAnim -_0806911E: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8069094 - - thumb_func_start sub_8069124 -sub_8069124: @ 8069124 - push {r4,lr} - adds r4, r1, 0 - lsls r0, 24 - lsrs r0, 24 - bl sub_806900C - lsls r0, 24 - lsrs r2, r0, 24 - adds r3, r2, 0 - cmp r2, 0x40 - beq _08069160 - cmp r4, 0 - beq _08069154 - ldr r0, _08069150 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - movs r0, 0x1 - strh r0, [r1, 0x32] - b _08069160 - .align 2, 0 -_08069150: .4byte gSprites -_08069154: - ldr r1, _08069168 @ =gSprites - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 2 - adds r0, r1 - strh r4, [r0, 0x32] -_08069160: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08069168: .4byte gSprites - thumb_func_end sub_8069124 - - thumb_func_start sub_806916C -sub_806916C: @ 806916C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_806900C - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - bne _08069182 - movs r0, 0 - b _0806919A -_08069182: - movs r3, 0 - ldr r0, _080691A0 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - movs r2, 0x32 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - bne _08069198 - movs r3, 0x1 -_08069198: - adds r0, r3, 0 -_0806919A: - pop {r1} - bx r1 - .align 2, 0 -_080691A0: .4byte gSprites - thumb_func_end sub_806916C - - thumb_func_start sub_80691A4 -sub_80691A4: @ 80691A4 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - bl sub_806900C - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080691CA - ldr r0, _080691D0 @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - movs r0, 0 - strh r4, [r1, 0x34] - strh r0, [r1, 0x36] -_080691CA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080691D0: .4byte gSprites - thumb_func_end sub_80691A4 - - thumb_func_start sub_80691D4 -sub_80691D4: @ 80691D4 - push {lr} - adds r2, r0, 0 - movs r1, 0x36 - ldrsh r0, [r2, r1] - cmp r0, 0 - beq _080691E6 - cmp r0, 0x1 - beq _080691EE - b _0806920C -_080691E6: - strh r0, [r2, 0x26] - ldrh r0, [r2, 0x36] - adds r0, 0x1 - strh r0, [r2, 0x36] -_080691EE: - ldrh r0, [r2, 0x26] - subs r0, 0x8 - movs r3, 0 - strh r0, [r2, 0x26] - lsls r0, 16 - asrs r0, 16 - movs r1, 0xA0 - negs r1, r1 - cmp r0, r1 - bne _0806920C - strh r3, [r2, 0x26] - movs r0, 0x1 - strh r0, [r2, 0x32] - strh r3, [r2, 0x34] - strh r3, [r2, 0x36] -_0806920C: - pop {r0} - bx r0 - thumb_func_end sub_80691D4 - - thumb_func_start sub_8069210 -sub_8069210: @ 8069210 - push {lr} - adds r1, r0, 0 - movs r2, 0x36 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _08069222 - cmp r0, 0x1 - beq _0806922C - b _0806923E -_08069222: - ldr r0, _08069244 @ =0x0000ff60 - strh r0, [r1, 0x26] - ldrh r0, [r1, 0x36] - adds r0, 0x1 - strh r0, [r1, 0x36] -_0806922C: - ldrh r0, [r1, 0x26] - adds r0, 0x8 - strh r0, [r1, 0x26] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - bne _0806923E - strh r0, [r1, 0x34] - strh r0, [r1, 0x36] -_0806923E: - pop {r0} - bx r0 - .align 2, 0 -_08069244: .4byte 0x0000ff60 - thumb_func_end sub_8069210 - - thumb_func_start sub_8069248 -sub_8069248: @ 8069248 - push {lr} - adds r1, r0, 0 - movs r2, 0x34 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - beq _08069264 - cmp r0, 0x1 - bgt _0806925E - cmp r0, 0 - beq _08069284 - b _08069274 -_0806925E: - cmp r0, 0x2 - beq _0806926C - b _08069274 -_08069264: - adds r0, r1, 0 - bl sub_8069210 - b _08069284 -_0806926C: - adds r0, r1, 0 - bl sub_80691D4 - b _08069284 -_08069274: - movs r0, 0 - strh r0, [r1, 0x34] - ldr r0, _08069288 @ =gUnknown_83A720C "C:/WORK/POKeFRLG/src/pm_lgfr_ose/source/evobjmv.c" - ldr r1, _0806928C @ =0x00003413 - ldr r2, _08069290 @ =gUnknown_83A7240 "0" - movs r3, 0x1 - bl AGBAssert -_08069284: - pop {r0} - bx r0 - .align 2, 0 -_08069288: .4byte gUnknown_83A720C -_0806928C: .4byte 0x00003413 -_08069290: .4byte gUnknown_83A7240 - thumb_func_end sub_8069248 - - thumb_func_start sub_8069294 -sub_8069294: @ 8069294 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_806900C - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _080692B8 - ldr r0, _080692BC @ =gSprites - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r0 - movs r2, 0x34 - ldrsh r0, [r1, r2] - cmp r0, 0 - bne _080692C0 -_080692B8: - movs r0, 0 - b _080692C2 - .align 2, 0 -_080692BC: .4byte gSprites -_080692C0: - movs r0, 0x1 -_080692C2: - pop {r1} - bx r1 - thumb_func_end sub_8069294 - - thumb_func_start oe_exec_and_other_stuff -oe_exec_and_other_stuff: @ 80692C8 - push {r4,lr} - adds r4, r0, 0 - adds r0, r1, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _080692EC @ =gFieldEffectArguments - adds r2, r1, 0x4 - adds r3, r1, 0 - adds r3, 0x8 - bl ObjectEventGetLocalIdAndMap - adds r0, r4, 0 - bl FieldEffectStart - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080692EC: .4byte gFieldEffectArguments - thumb_func_end oe_exec_and_other_stuff - - thumb_func_start DoShadowFieldEffect -DoShadowFieldEffect: @ 80692F0 - push {lr} - adds r1, r0, 0 - ldrb r2, [r1, 0x2] - lsls r0, r2, 25 - cmp r0, 0 - blt _08069308 - movs r0, 0x40 - orrs r0, r2 - strb r0, [r1, 0x2] - movs r0, 0x3 - bl oe_exec_and_other_stuff -_08069308: - pop {r0} - bx r0 - thumb_func_end DoShadowFieldEffect - - thumb_func_start DoRippleFieldEffect -DoRippleFieldEffect: @ 806930C - push {r4,lr} - adds r4, r1, 0 - ldrb r0, [r0, 0x5] - bl GetObjectEventGraphicsInfo - ldr r2, _08069344 @ =gFieldEffectArguments - movs r3, 0x20 - ldrsh r1, [r4, r3] - str r1, [r2] - movs r3, 0x22 - ldrsh r1, [r4, r3] - ldrh r0, [r0, 0xA] - lsls r0, 16 - asrs r0, 17 - adds r1, r0 - subs r1, 0x2 - str r1, [r2, 0x4] - movs r0, 0x97 - str r0, [r2, 0x8] - movs r0, 0x3 - str r0, [r2, 0xC] - movs r0, 0x5 - bl FieldEffectStart - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08069344: .4byte gFieldEffectArguments - thumb_func_end DoRippleFieldEffect - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/event_object_movement.s b/asm/event_object_movement.s index 30af8949b..f585a60bc 100644 --- a/asm/event_object_movement.s +++ b/asm/event_object_movement.s @@ -1645,7 +1645,7 @@ sprite_new: @ 805E9F8 adds r0, r5, 0 bl GetObjectEventGraphicsInfo adds r4, r0, 0 - ldr r1, _0805EB38 @ =sub_8068FA8 + ldr r1, _0805EB38 @ =UpdateObjectEventSpriteSubpriorityAndVisibility add r3, sp, 0x1C adds r0, r5, 0 mov r2, sp @@ -1769,7 +1769,7 @@ _0805EB24: pop {r1} bx r1 .align 2, 0 -_0805EB38: .4byte sub_8068FA8 +_0805EB38: .4byte UpdateObjectEventSpriteSubpriorityAndVisibility _0805EB3C: .4byte 0x0000ffff _0805EB40: .4byte gSprites thumb_func_end sprite_new @@ -18285,7 +18285,7 @@ sub_8066108: @ 8066108 push {r4,lr} adds r4, r1, 0 adds r0, r4, 0 - bl sub_8068E9C + bl SpriteAnimEnded lsls r0, 24 cmp r0, 0 bne _0806611C @@ -19637,7 +19637,7 @@ sub_8066A54: @ 8066A54 push {r4,lr} adds r4, r1, 0 adds r0, r4, 0 - bl sub_8068E9C + bl SpriteAnimEnded lsls r0, 24 cmp r0, 0 beq _08066A70 @@ -19707,7 +19707,7 @@ sub_8066AD0: @ 8066AD0 push {r4,lr} adds r4, r1, 0 adds r0, r4, 0 - bl sub_8068E9C + bl SpriteAnimEnded lsls r0, 24 cmp r0, 0 beq _08066AEC diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s index 2797accf4..db64b77db 100644 --- a/asm/field_effect_helpers.s +++ b/asm/field_effect_helpers.s @@ -951,7 +951,7 @@ _080DB4C0: _080DB4CE: adds r0, r5, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility ldrh r1, [r5, 0x2E] lsls r1, 24 lsrs r1, 24 @@ -1294,7 +1294,7 @@ _080DB750: _080DB770: adds r0, r5, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility ldrh r1, [r5, 0x2E] lsls r1, 24 lsrs r1, 24 @@ -1564,7 +1564,7 @@ _080DB94E: lsls r1, 29 lsrs r1, 31 adds r0, r4, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility _080DB98E: add sp, 0x4 pop {r3} @@ -1781,7 +1781,7 @@ sub_80DBB18: @ 80DBB18 _080DBB2E: adds r0, r1, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility pop {r0} bx r0 thumb_func_end sub_80DBB18 @@ -1810,7 +1810,7 @@ sub_80DBB3C: @ 80DBB3C lsls r1, 29 lsrs r1, 31 adds r0, r4, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility movs r1, 0x30 ldrsh r0, [r4, r1] cmp r0, 0x38 @@ -1966,7 +1966,7 @@ _080DBC66: strh r0, [r4, 0x22] adds r0, r4, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility _080DBCA6: add sp, 0x4 pop {r4} @@ -2233,7 +2233,7 @@ _080DBE98: strb r0, [r1] adds r0, r4, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility ldr r1, [r5, 0x10] ldr r0, [r4, 0x34] cmp r1, r0 @@ -2461,7 +2461,7 @@ _080DC03C: strb r0, [r1] adds r0, r4, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility _080DC080: add sp, 0x4 pop {r4,r5} @@ -2889,7 +2889,7 @@ sub_80DC3A8: @ 80DC3A8 push {r4,lr} adds r4, r0, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility adds r0, r4, 0 adds r0, 0x3F ldrb r1, [r0] @@ -3627,7 +3627,7 @@ _080DC8F6: strb r0, [r1] adds r0, r4, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility _080DC926: add sp, 0x4 pop {r4-r6} @@ -3706,7 +3706,7 @@ sub_80DC99C: @ 80DC99C strh r1, [r4, 0x22] adds r0, r4, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility ldrh r1, [r4, 0x3E] ldr r0, _080DC9D8 @ =0x00001004 ands r0, r1 @@ -4163,7 +4163,7 @@ sub_80DCCE0: @ 80DCCE0 _080DCCFE: adds r0, r4, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility ldrh r0, [r4, 0x2E] lsls r0, 24 lsrs r0, 24 @@ -4195,7 +4195,7 @@ sub_80DCD1C: @ 80DCD1C _080DCD3A: adds r0, r2, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility _080DCD42: pop {r0} bx r0 diff --git a/asm/field_screen_effect.s b/asm/field_screen_effect.s deleted file mode 100644 index f0ca0f77e..000000000 --- a/asm/field_screen_effect.s +++ /dev/null @@ -1,306 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_807F3A4 -sub_807F3A4: @ 807F3A4 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r8, r1 - lsls r0, 24 - lsrs r0, 24 - lsls r2, 24 - lsrs r2, 24 - mov r10, r2 - lsls r3, 24 - lsrs r3, 24 - mov r9, r3 - ldr r2, _0807F3DC @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrb r7, [r4, 0xA] - movs r0, 0xC - ldrsh r6, [r4, r0] - cmp r6, 0 - beq _0807F3E0 - cmp r6, 0x1 - beq _0807F430 - b _0807F448 - .align 2, 0 -_0807F3DC: .4byte gTasks -_0807F3E0: - adds r0, r7, 0 - movs r1, 0 - bl FillWindowPixelBuffer - ldr r5, _0807F424 @ =gStringVar4 - adds r0, r5, 0 - mov r1, r8 - bl StringExpandPlaceholders - movs r0, 0x1 - mov r8, r0 - str r0, [sp] - str r6, [sp, 0x4] - ldr r0, _0807F428 @ =gUnknown_83C68EC - str r0, [sp, 0x8] - mov r0, r8 - str r0, [sp, 0xC] - str r5, [sp, 0x10] - adds r0, r7, 0 - movs r1, 0x2 - mov r2, r10 - mov r3, r9 - bl AddTextPrinterParameterized4 - ldr r2, _0807F42C @ =gTextFlags - ldrb r1, [r2] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - mov r0, r8 - strh r0, [r4, 0xC] - b _0807F448 - .align 2, 0 -_0807F424: .4byte gStringVar4 -_0807F428: .4byte gUnknown_83C68EC -_0807F42C: .4byte gTextFlags -_0807F430: - bl RunTextPrinters - adds r0, r7, 0 - bl IsTextPrinterActive - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0807F448 - strh r0, [r4, 0xC] - movs r0, 0x1 - b _0807F44A -_0807F448: - movs r0, 0 -_0807F44A: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_807F3A4 - - thumb_func_start sub_807F45C -sub_807F45C: @ 807F45C - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r1, _0807F484 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - movs r2, 0x8 - ldrsh r0, [r0, r2] - adds r2, r1, 0 - cmp r0, 0x6 - bls _0807F478 - b _0807F5E4 -_0807F478: - lsls r0, 2 - ldr r1, _0807F488 @ =_0807F48C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0807F484: .4byte gTasks -_0807F488: .4byte _0807F48C - .align 2, 0 -_0807F48C: - .4byte _0807F4A8 - .4byte _0807F538 - .4byte _0807F588 - .4byte _0807F5B6 - .4byte _0807F540 - .4byte _0807F588 - .4byte _0807F5D0 -_0807F4A8: - ldr r0, _0807F518 @ =gUnknown_83C68E4 - bl AddWindow - lsls r0, 24 - lsrs r5, r0, 24 - ldr r1, _0807F51C @ =gTasks - lsls r4, r6, 2 - adds r0, r4, r6 - lsls r0, 3 - adds r7, r0, r1 - strh r5, [r7, 0xA] - movs r0, 0xF0 - bl Menu_LoadStdPalAt - adds r0, r5, 0 - movs r1, 0 - bl FillWindowPixelBuffer - adds r0, r5, 0 - bl PutWindowTilemap - adds r0, r5, 0 - movs r1, 0x3 - bl CopyWindowToVram - movs r0, 0x1 - bl GetHealLocationPointer - adds r3, r0, 0 - ldr r0, _0807F520 @ =gSaveBlock1Ptr - ldr r2, [r0] - ldrh r0, [r2, 0x1C] - ldrh r5, [r3] - cmp r0, r5 - bne _0807F524 - movs r1, 0x1E - ldrsb r1, [r2, r1] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _0807F524 - movs r0, 0x20 - ldrsh r1, [r2, r0] - movs r5, 0x2 - ldrsh r0, [r3, r5] - cmp r1, r0 - bne _0807F524 - movs r0, 0x22 - ldrsh r1, [r2, r0] - movs r2, 0x4 - ldrsh r0, [r3, r2] - cmp r1, r0 - bne _0807F524 - movs r0, 0x4 - strh r0, [r7, 0x8] - b _0807F5E4 - .align 2, 0 -_0807F518: .4byte gUnknown_83C68E4 -_0807F51C: .4byte gTasks -_0807F520: .4byte gSaveBlock1Ptr -_0807F524: - ldr r0, _0807F534 @ =gTasks - adds r1, r4, r6 - lsls r1, 3 - adds r1, r0 - movs r0, 0x1 - strh r0, [r1, 0x8] - b _0807F5E4 - .align 2, 0 -_0807F534: .4byte gTasks -_0807F538: - ldr r1, _0807F53C @ =gUnknown_841B554 - b _0807F542 - .align 2, 0 -_0807F53C: .4byte gUnknown_841B554 -_0807F540: - ldr r1, _0807F578 @ =gUnknown_841B5B6 -_0807F542: - adds r0, r6, 0 - movs r2, 0x2 - movs r3, 0x8 - bl sub_807F3A4 - lsls r0, 24 - cmp r0, 0 - beq _0807F5E4 - ldr r0, _0807F57C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _0807F580 @ =gObjectEvents - adds r0, r1 - movs r1, 0x2 - bl ObjectEventTurn - ldr r1, _0807F584 @ =gTasks - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - adds r0, r1 - ldrh r1, [r0, 0x8] - adds r1, 0x1 - strh r1, [r0, 0x8] - b _0807F5E4 - .align 2, 0 -_0807F578: .4byte gUnknown_841B5B6 -_0807F57C: .4byte gPlayerAvatar -_0807F580: .4byte gObjectEvents -_0807F584: .4byte gTasks -_0807F588: - lsls r4, r6, 2 - adds r4, r6 - lsls r4, 3 - adds r4, r2 - ldrb r5, [r4, 0xA] - adds r0, r5, 0 - bl ClearWindowTilemap - adds r0, r5, 0 - movs r1, 0x1 - bl CopyWindowToVram - adds r0, r5, 0 - bl RemoveWindow - bl palette_bg_faded_fill_black - bl sub_807DC00 - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _0807F5E4 -_0807F5B6: - bl sub_807E418 - cmp r0, 0x1 - bne _0807F5E4 - adds r0, r6, 0 - bl DestroyTask - ldr r0, _0807F5CC @ =EventScript_AfterWhiteOutHeal - bl ScriptContext1_SetupScript - b _0807F5E4 - .align 2, 0 -_0807F5CC: .4byte EventScript_AfterWhiteOutHeal -_0807F5D0: - bl sub_807E418 - cmp r0, 0x1 - bne _0807F5E4 - adds r0, r6, 0 - bl DestroyTask - ldr r0, _0807F5EC @ =EventScript_MomHeal - bl ScriptContext1_SetupScript -_0807F5E4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807F5EC: .4byte EventScript_MomHeal - thumb_func_end sub_807F45C - - thumb_func_start sub_807F5F0 -sub_807F5F0: @ 807F5F0 - push {lr} - bl ScriptContext2_Enable - bl palette_bg_faded_fill_black - ldr r0, _0807F618 @ =sub_807F45C - movs r1, 0xA - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0807F61C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - pop {r0} - bx r0 - .align 2, 0 -_0807F618: .4byte sub_807F45C -_0807F61C: .4byte gTasks - thumb_func_end sub_807F5F0 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/librfu_intr.s b/asm/librfu_intr.s deleted file mode 100644 index 2cc761554..000000000 --- a/asm/librfu_intr.s +++ /dev/null @@ -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 diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 7e95af9f4..51f8e7330 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -652,7 +652,7 @@ .4byte \pointer2 @ text .4byte \pointer3 @ text .4byte \pointer4 @ event script - .elseif \type == TRAINER_BATTLE_TUTORIAL + .elseif \type == TRAINER_BATTLE_EARLY_RIVAL .4byte \pointer1 @ text .4byte \pointer2 @ text .endif @@ -699,9 +699,9 @@ trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, \trainer, 0, \lose_text .endm - @ - .macro trainerbattle_tutorial trainer:req, unk:req, intro_text:req, lose_text:req - trainerbattle TRAINER_BATTLE_TUTORIAL, \trainer, \unk, \intro_text, \lose_text + @ Starts a trainer battle with victory text if the player loses. If flags is nonzero, the player will be healed after battle (and its assumed to be the tutorial battle) + .macro trainerbattle_earlyrival trainer:req, flags:req, defeat_text:req, victory_text:req + trainerbattle TRAINER_BATTLE_EARLY_RIVAL, \trainer, \flags, \defeat_text, \victory_text .endm @ Starts a trainer battle using the battle information stored in RAM (usually by trainerbattle, which actually calls this command behind-the-scenes), and blocks script execution until the battle finishes. diff --git a/asm/overworld.s b/asm/overworld.s index 21016a0b9..5b3c01652 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -2247,7 +2247,7 @@ _08055CEC: .4byte gSaveBlock1Ptr _08055CF0: ldr r0, _08055D00 @ =gSaveBlock1Ptr ldr r0, [r0] - ldr r1, _08055D04 @ =gUnknown_83C68E0 + ldr r1, _08055D04 @ =gMaxFlashLevel ldr r1, [r1] _08055CF8: adds r0, 0x30 @@ -2257,7 +2257,7 @@ _08055CFA: bx r0 .align 2, 0 _08055D00: .4byte gSaveBlock1Ptr -_08055D04: .4byte gUnknown_83C68E0 +_08055D04: .4byte gMaxFlashLevel thumb_func_end sub_8055CB8 thumb_func_start Overworld_SetFlashLevel @@ -2266,7 +2266,7 @@ Overworld_SetFlashLevel: @ 8055D08 adds r1, r0, 0 cmp r1, 0 blt _08055D18 - ldr r0, _08055D28 @ =gUnknown_83C68E0 + ldr r0, _08055D28 @ =gMaxFlashLevel ldr r0, [r0] cmp r1, r0 ble _08055D1A @@ -2280,7 +2280,7 @@ _08055D1A: pop {r0} bx r0 .align 2, 0 -_08055D28: .4byte gUnknown_83C68E0 +_08055D28: .4byte gMaxFlashLevel _08055D2C: .4byte gSaveBlock1Ptr thumb_func_end Overworld_SetFlashLevel @@ -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] @@ -7979,7 +7979,7 @@ _08058978: _0805898A: adds r0, r5, 0 movs r1, 0 - bl sub_8068EB4 + bl UpdateObjectEventSpriteVisibility ldrb r0, [r6] lsls r0, 29 cmp r0, 0 diff --git a/asm/pokedex_screen.s b/asm/pokedex_screen.s index 345f3c83c..9dbbabd6f 100644 --- a/asm/pokedex_screen.s +++ b/asm/pokedex_screen.s @@ -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 diff --git a/asm/pokemon_jump.s b/asm/pokemon_jump.s index d94a5c8db..1644bb3d8 100644 --- a/asm/pokemon_jump.s +++ b/asm/pokemon_jump.s @@ -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 diff --git a/asm/pokemon_jump_2.s b/asm/pokemon_jump_2.s index 5e6327c81..ff6757630 100644 --- a/asm/pokemon_jump_2.s +++ b/asm/pokemon_jump_2.s @@ -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 diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s index d6c3f548f..19b838f47 100644 --- a/asm/pokemon_summary_screen.s +++ b/asm/pokemon_summary_screen.s @@ -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: diff --git a/asm/smokescreen.s b/asm/smokescreen.s deleted file mode 100644 index e0d137767..000000000 --- a/asm/smokescreen.s +++ /dev/null @@ -1,225 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start SmokescreenImpact -SmokescreenImpact: @ 804A76C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 16 - lsrs r7, r1, 16 - lsls r2, 24 - lsrs r4, r2, 24 - ldr r5, _0804A8A4 @ =gUnknown_825098C - ldrh r0, [r5, 0x6] - bl GetSpriteTileStartByTag - lsls r0, 16 - ldr r1, _0804A8A8 @ =0xffff0000 - cmp r0, r1 - bne _0804A79E - adds r0, r5, 0 - bl LoadCompressedSpriteSheetUsingHeap - ldr r0, _0804A8AC @ =gUnknown_8250994 - bl LoadCompressedSpritePaletteUsingHeap -_0804A79E: - ldr r0, _0804A8B0 @ =sub_804A8C0 - bl CreateInvisibleSpriteWithCallback - mov r8, r0 - mov r0, r8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r5, r0, 4 - add r5, r8 - lsls r5, 2 - ldr r0, _0804A8B4 @ =gSprites - adds r5, r0 - strh r4, [r5, 0x30] - ldr r0, _0804A8B8 @ =gUnknown_82509F4 - mov r9, r0 - lsls r6, 16 - asrs r0, r6, 16 - mov r10, r0 - ldr r0, _0804A8BC @ =0xfff00000 - adds r6, r0 - asrs r6, 16 - lsls r4, r7, 16 - asrs r7, r4, 16 - adds r4, r0 - asrs r4, 16 - mov r0, r9 - adds r1, r6, 0 - adds r2, r4, 0 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0804A8B4 @ =gSprites - adds r1, r0 - mov r0, r8 - strh r0, [r1, 0x2E] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - adds r0, r1, 0 - bl AnimateSprite - mov r0, r9 - mov r1, r10 - adds r2, r4, 0 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0804A8B4 @ =gSprites - adds r4, r0 - mov r0, r8 - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - adds r0, r4, 0 - movs r1, 0x1 - bl StartSpriteAnim - adds r0, r4, 0 - bl AnimateSprite - mov r0, r9 - adds r1, r6, 0 - adds r2, r7, 0 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0804A8B4 @ =gSprites - adds r4, r0 - mov r0, r8 - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - adds r0, r4, 0 - movs r1, 0x2 - bl StartSpriteAnim - adds r0, r4, 0 - bl AnimateSprite - mov r0, r9 - mov r1, r10 - adds r2, r7, 0 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _0804A8B4 @ =gSprites - adds r4, r0 - mov r0, r8 - strh r0, [r4, 0x2E] - ldrh r0, [r5, 0x2E] - adds r0, 0x1 - strh r0, [r5, 0x2E] - adds r0, r4, 0 - movs r1, 0x3 - bl StartSpriteAnim - adds r0, r4, 0 - bl AnimateSprite - mov r0, r8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0804A8A4: .4byte gUnknown_825098C -_0804A8A8: .4byte 0xffff0000 -_0804A8AC: .4byte gUnknown_8250994 -_0804A8B0: .4byte sub_804A8C0 -_0804A8B4: .4byte gSprites -_0804A8B8: .4byte gUnknown_82509F4 -_0804A8BC: .4byte 0xfff00000 - thumb_func_end SmokescreenImpact - - thumb_func_start sub_804A8C0 -sub_804A8C0: @ 804A8C0 - push {r4,lr} - adds r4, r0, 0 - movs r1, 0x2E - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0804A8F8 - ldr r0, _0804A8EC @ =gUnknown_825098C - ldrh r0, [r0, 0x6] - bl FreeSpriteTilesByTag - ldr r0, _0804A8F0 @ =gUnknown_8250994 - ldrh r0, [r0, 0x4] - bl FreeSpritePaletteByTag - movs r1, 0x30 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0804A8F4 - adds r0, r4, 0 - bl DestroySprite - b _0804A8F8 - .align 2, 0 -_0804A8EC: .4byte gUnknown_825098C -_0804A8F0: .4byte gUnknown_8250994 -_0804A8F4: - ldr r0, _0804A900 @ =SpriteCallbackDummy - str r0, [r4, 0x1C] -_0804A8F8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804A900: .4byte SpriteCallbackDummy - thumb_func_end sub_804A8C0 - - thumb_func_start sub_804A904 -sub_804A904: @ 804A904 - push {lr} - adds r3, r0, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0804A92E - ldr r2, _0804A934 @ =gSprites - movs r0, 0x2E - ldrsh r1, [r3, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrh r1, [r0, 0x2E] - subs r1, 0x1 - strh r1, [r0, 0x2E] - adds r0, r3, 0 - bl DestroySprite -_0804A92E: - pop {r0} - bx r0 - .align 2, 0 -_0804A934: .4byte gSprites - thumb_func_end sub_804A904 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/union_room_chat.s b/asm/union_room_chat.s deleted file mode 100644 index adfd66b5d..000000000 --- a/asm/union_room_chat.s +++ /dev/null @@ -1,5973 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_8128420 -sub_8128420: @ 8128420 - push {r4,lr} - ldr r4, _08128450 @ =gUnknown_203B0E0 - movs r0, 0xDC - lsls r0, 1 - bl Alloc - str r0, [r4] - bl sub_812845C - ldr r1, _08128454 @ =gKeyRepeatStartDelay - movs r0, 0x14 - strh r0, [r1] - bl sub_812B4AC - movs r0, 0 - bl SetVBlankCallback - ldr r0, _08128458 @ =c2_081284E0 - bl SetMainCallback2 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08128450: .4byte gUnknown_203B0E0 -_08128454: .4byte gKeyRepeatStartDelay -_08128458: .4byte c2_081284E0 - thumb_func_end sub_8128420 - - thumb_func_start sub_812845C -sub_812845C: @ 812845C - push {r4-r7,lr} - adds r4, r0, 0 - movs r5, 0 - movs r0, 0 - strh r0, [r4, 0x4] - strh r0, [r4, 0x6] - strb r5, [r4, 0x10] - strb r5, [r4, 0x11] - strb r5, [r4, 0x12] - strb r5, [r4, 0x14] - strb r5, [r4, 0x15] - strb r5, [r4, 0x16] - movs r0, 0xFF - strb r0, [r4, 0x1A] - bl GetLinkPlayerCount - strb r0, [r4, 0xD] - bl GetMultiplayerId - strb r0, [r4, 0x13] - strb r5, [r4, 0x17] - strb r5, [r4, 0x18] - movs r1, 0xC8 - lsls r1, 1 - adds r0, r4, r1 - bl sub_8129560 - ldr r7, _081284B4 @ =gSaveBlock1Ptr - ldr r6, _081284B8 @ =0x00003ad4 - adds r4, 0xB9 - movs r5, 0x9 -_0812849A: - ldr r1, [r7] - adds r1, r6 - adds r0, r4, 0 - bl StringCopy - adds r6, 0x15 - adds r4, 0x15 - subs r5, 0x1 - cmp r5, 0 - bge _0812849A - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081284B4: .4byte gSaveBlock1Ptr -_081284B8: .4byte 0x00003ad4 - thumb_func_end sub_812845C - - thumb_func_start sub_81284BC -sub_81284BC: @ 81284BC - push {r4,lr} - ldr r4, _081284DC @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r0, [r0, 0xE] - bl DestroyTask - ldr r0, [r4] - ldrb r0, [r0, 0xF] - bl DestroyTask - ldr r0, [r4] - bl Free - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081284DC: .4byte gUnknown_203B0E0 - thumb_func_end sub_81284BC - - thumb_func_start c2_081284E0 -c2_081284E0: @ 81284E0 - push {r4-r6,lr} - sub sp, 0x4 - ldr r0, _081284FC @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r6, r0, r1 - ldrb r0, [r6] - cmp r0, 0x1 - beq _08128518 - cmp r0, 0x1 - bgt _08128500 - cmp r0, 0 - beq _08128506 - b _08128598 - .align 2, 0 -_081284FC: .4byte gMain -_08128500: - cmp r0, 0x2 - beq _08128554 - b _08128598 -_08128506: - bl ResetTasks - bl ResetSpriteData - bl FreeAllSpritePalettes - bl sub_8129B14 - b _08128548 -_08128518: - bl sub_8129BFC - bl sub_8129B78 - adds r5, r0, 0 - cmp r5, 0 - bne _08128598 - movs r4, 0x1 - negs r4, r4 - adds r0, r4, 0 - movs r1, 0x10 - movs r2, 0 - bl BlendPalettes - str r5, [sp] - adds r0, r4, 0 - adds r1, r4, 0 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, _08128550 @ =sub_81285B4 - bl SetVBlankCallback -_08128548: - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - b _08128598 - .align 2, 0 -_08128550: .4byte sub_81285B4 -_08128554: - bl UpdatePaletteFade - ldr r0, _081285A0 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08128598 - ldr r0, _081285A4 @ =sub_81285CC - bl SetMainCallback2 - movs r0, 0x11 - movs r1, 0 - bl SetQuestLogEvent - ldr r0, _081285A8 @ =sub_81285E8 - movs r1, 0x8 - bl CreateTask - ldr r4, _081285AC @ =gUnknown_203B0E0 - ldr r1, [r4] - strb r0, [r1, 0xE] - ldr r0, _081285B0 @ =sub_81298F8 - movs r1, 0x7 - bl CreateTask - ldr r1, [r4] - strb r0, [r1, 0xF] - bl LoadWirelessStatusIndicatorSpriteGfx - movs r0, 0xE8 - movs r1, 0x96 - bl CreateWirelessStatusIndicatorSprite -_08128598: - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081285A0: .4byte gPaletteFade -_081285A4: .4byte sub_81285CC -_081285A8: .4byte sub_81285E8 -_081285AC: .4byte gUnknown_203B0E0 -_081285B0: .4byte sub_81298F8 - thumb_func_end c2_081284E0 - - thumb_func_start sub_81285B4 -sub_81285B4: @ 81285B4 - push {lr} - bl TransferPlttBuffer - bl LoadOam - bl ProcessSpriteCopyRequests - bl ScanlineEffect_InitHBlankDmaTransfer - pop {r0} - bx r0 - thumb_func_end sub_81285B4 - - thumb_func_start sub_81285CC -sub_81285CC: @ 81285CC - push {lr} - bl RunTasks - bl sub_8129BFC - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade - pop {r0} - bx r0 - thumb_func_end sub_81285CC - - thumb_func_start sub_81285E8 -sub_81285E8: @ 81285E8 - push {r4,lr} - ldr r4, _08128600 @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r0, [r0, 0x17] - cmp r0, 0x2 - beq _0812860E - cmp r0, 0x2 - bgt _08128604 - cmp r0, 0x1 - beq _0812860A - b _0812861E - .align 2, 0 -_08128600: .4byte gUnknown_203B0E0 -_08128604: - cmp r0, 0x3 - beq _08128612 - b _0812861E -_0812860A: - movs r0, 0x6 - b _08128614 -_0812860E: - movs r0, 0x7 - b _08128614 -_08128612: - movs r0, 0x8 -_08128614: - bl sub_8129218 - ldr r1, [r4] - movs r0, 0 - strb r0, [r1, 0x17] -_0812861E: - ldr r1, _08128638 @ =gUnknown_845A880 - ldr r0, _0812863C @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrh r0, [r0, 0x4] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08128638: .4byte gUnknown_845A880 -_0812863C: .4byte gUnknown_203B0E0 - thumb_func_end sub_81285E8 - - thumb_func_start sub_8128640 -sub_8128640: @ 8128640 - push {r4,lr} - ldr r4, _08128658 @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrh r1, [r0, 0x6] - cmp r1, 0x1 - beq _08128674 - cmp r1, 0x1 - bgt _0812865C - cmp r1, 0 - beq _08128662 - b _081286BC - .align 2, 0 -_08128658: .4byte gUnknown_203B0E0 -_0812865C: - cmp r1, 0x2 - beq _081286AC - b _081286BC -_08128662: - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1 - bl sub_8129568 - ldr r1, [r4] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] -_08128674: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _081286BC - bl sub_80FBA1C - cmp r0, 0 - bne _081286BC - ldr r4, _081286A8 @ =gUnknown_203B0E0 - ldr r1, [r4] - movs r0, 0xC8 - lsls r0, 1 - adds r1, r0 - movs r0, 0 - movs r2, 0x28 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - beq _081286BC - ldr r1, [r4] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _081286BC - .align 2, 0 -_081286A8: .4byte gUnknown_203B0E0 -_081286AC: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _081286BC - movs r0, 0x1 - bl sub_8129218 -_081286BC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8128640 - - thumb_func_start sub_81286C4 -sub_81286C4: @ 81286C4 - push {r4,r5,lr} - ldr r5, _081286D8 @ =gUnknown_203B0E0 - ldr r3, [r5] - ldrh r0, [r3, 0x6] - cmp r0, 0 - beq _081286DC - cmp r0, 0x1 - beq _0812878A - b _081287AC - .align 2, 0 -_081286D8: .4byte gUnknown_203B0E0 -_081286DC: - ldr r1, _081286F8 @ =gMain - ldrh r2, [r1, 0x2E] - movs r0, 0x8 - ands r0, r2 - cmp r0, 0 - beq _081286FC - ldrb r0, [r3, 0x15] - cmp r0, 0 - beq _081287AC - movs r0, 0x4 - bl sub_8129218 - b _081287AC - .align 2, 0 -_081286F8: .4byte gMain -_081286FC: - movs r0, 0x4 - ands r0, r2 - cmp r0, 0 - beq _0812870C - movs r0, 0x2 - bl sub_8129218 - b _081287AC -_0812870C: - ldrh r1, [r1, 0x30] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08128738 - ldrb r0, [r3, 0x15] - cmp r0, 0 - beq _08128730 - bl sub_81293AC - movs r0, 0x8 - movs r1, 0 - bl sub_8129C34 - ldr r1, [r5] - movs r0, 0x1 - strh r0, [r1, 0x6] - b _081287AC -_08128730: - movs r0, 0x3 - bl sub_8129218 - b _081287AC -_08128738: - movs r4, 0x1 - adds r0, r4, 0 - ands r0, r2 - cmp r0, 0 - beq _08128754 - bl sub_81292D8 - movs r0, 0x8 - movs r1, 0 - bl sub_8129C34 - movs r0, 0x2 - movs r1, 0x1 - b _08128780 -_08128754: - movs r0, 0x80 - lsls r0, 1 - ands r0, r2 - cmp r0, 0 - beq _08128774 - ldrb r0, [r3, 0x10] - cmp r0, 0x3 - beq _0812876C - bl sub_81293D8 - movs r0, 0x8 - b _0812877E -_0812876C: - movs r0, 0x5 - bl sub_8129218 - b _081287AC -_08128774: - bl sub_8129228 - cmp r0, 0 - beq _081287AC - movs r0, 0x1 -_0812877E: - movs r1, 0 -_08128780: - bl sub_8129C34 - ldr r0, [r5] - strh r4, [r0, 0x6] - b _081287AC -_0812878A: - movs r0, 0 - bl sub_8129C8C - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x1 - bl sub_8129C8C - lsls r0, 24 - lsrs r1, r0, 24 - cmp r4, 0 - bne _081287AC - cmp r1, 0 - bne _081287AC - ldr r0, [r5] - strh r1, [r0, 0x6] -_081287AC: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_81286C4 - - thumb_func_start sub_81287B4 -sub_81287B4: @ 81287B4 - push {r4-r6,lr} - ldr r0, _081287CC @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrh r0, [r0, 0x6] - cmp r0, 0x4 - bls _081287C2 - b _081288CE -_081287C2: - lsls r0, 2 - ldr r1, _081287D0 @ =_081287D4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081287CC: .4byte gUnknown_203B0E0 -_081287D0: .4byte _081287D4 - .align 2, 0 -_081287D4: - .4byte _081287E8 - .4byte _081287F2 - .4byte _08128810 - .4byte _0812889C - .4byte _081288B0 -_081287E8: - movs r0, 0x3 - movs r1, 0 - bl sub_8129C34 - b _081287FE -_081287F2: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _081288CE -_081287FE: - ldr r0, _0812880C @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _081288CE - .align 2, 0 -_0812880C: .4byte gUnknown_203B0E0 -_08128810: - bl Menu_ProcessInput - lsls r0, 24 - asrs r0, 8 - lsrs r6, r0, 16 - asrs r4, r0, 16 - movs r0, 0x2 - negs r0, r0 - cmp r4, r0 - beq _08128848 - adds r0, 0x1 - cmp r4, r0 - beq _08128868 - movs r0, 0x4 - movs r1, 0 - bl sub_8129C34 - ldr r5, _08128844 @ =gUnknown_203B0E0 - ldr r2, [r5] - ldrb r0, [r2, 0x10] - cmp r0, r4 - beq _08128870 - cmp r4, 0x3 - ble _08128880 - b _08128870 - .align 2, 0 -_08128844: .4byte gUnknown_203B0E0 -_08128848: - ldr r0, _08128864 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _081288CE - movs r0, 0x5 - bl PlaySE - movs r0, 0x1 - bl Menu_MoveCursor - b _081288CE - .align 2, 0 -_08128864: .4byte gMain -_08128868: - movs r0, 0x4 - movs r1, 0 - bl sub_8129C34 -_08128870: - ldr r0, _0812887C @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 - strh r0, [r1, 0x6] - b _081288CE - .align 2, 0 -_0812887C: .4byte gUnknown_203B0E0 -_08128880: - movs r1, 0 - strb r1, [r2, 0x11] - ldr r0, [r5] - strb r1, [r0, 0x12] - movs r0, 0x5 - movs r1, 0x1 - bl sub_8129C34 - ldr r0, [r5] - strb r6, [r0, 0x10] - ldr r1, [r5] - movs r0, 0x4 - strh r0, [r1, 0x6] - b _081288CE -_0812889C: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _081288CE - movs r0, 0x1 - bl sub_8129218 - b _081288CE -_081288B0: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _081288CE - movs r0, 0x1 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _081288CE - movs r0, 0x1 - bl sub_8129218 -_081288CE: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_81287B4 - - thumb_func_start sub_81288D4 -sub_81288D4: @ 81288D4 - push {r4,lr} - ldr r0, _081288EC @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrh r0, [r0, 0x6] - cmp r0, 0xA - bls _081288E2 - b _08128A94 -_081288E2: - lsls r0, 2 - ldr r1, _081288F0 @ =_081288F4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081288EC: .4byte gUnknown_203B0E0 -_081288F0: .4byte _081288F4 - .align 2, 0 -_081288F4: - .4byte _08128920 - .4byte _08128938 - .4byte _08128954 - .4byte _0812899C - .4byte _08128A44 - .4byte _08128A86 - .4byte _08128A94 - .4byte _08128A94 - .4byte _081289F0 - .4byte _081289B0 - .4byte _081289D4 -_08128920: - movs r0, 0x6 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128934 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x1 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128934: .4byte gUnknown_203B0E0 -_08128938: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - beq _08128946 - b _08128A94 -_08128946: - ldr r0, _08128950 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x2 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128950: .4byte gUnknown_203B0E0 -_08128954: - bl sub_812A568 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08128966 - cmp r1, 0 - ble _08128A00 - b _08128A0A -_08128966: - ldr r4, _0812898C @ =gUnknown_203B0E0 - ldr r1, [r4] - ldrb r0, [r1, 0x13] - cmp r0, 0 - bne _08128990 - movs r2, 0xC8 - lsls r2, 1 - adds r0, r1, r2 - bl sub_8129614 - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r1, [r4] - movs r0, 0x9 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_0812898C: .4byte gUnknown_203B0E0 -_08128990: - movs r2, 0xC8 - lsls r2, 1 - adds r0, r1, r2 - bl sub_81295C0 - b _08128A36 -_0812899C: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128A94 - movs r0, 0x1 - bl sub_8129218 - b _08128A94 -_081289B0: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128A94 - movs r0, 0x14 - movs r1, 0 - bl sub_8129C34 - ldr r0, _081289D0 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0xA - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_081289D0: .4byte gUnknown_203B0E0 -_081289D4: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128A94 - ldr r0, _081289EC @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x8 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_081289EC: .4byte gUnknown_203B0E0 -_081289F0: - bl sub_812A568 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08128A24 - cmp r1, 0 - bgt _08128A0A -_08128A00: - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08128A0E - b _08128A94 -_08128A0A: - cmp r1, 0x1 - bne _08128A94 -_08128A0E: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128A20 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128A20: .4byte gUnknown_203B0E0 -_08128A24: - bl sub_80FA4A8 - ldr r4, _08128A40 @ =gUnknown_203B0E0 - ldr r0, [r4] - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1 - bl sub_8129614 -_08128A36: - ldr r1, [r4] - movs r0, 0x4 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128A40: .4byte gUnknown_203B0E0 -_08128A44: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128A94 - bl sub_80FBA1C - cmp r0, 0 - bne _08128A94 - ldr r4, _08128A7C @ =gUnknown_203B0E0 - ldr r1, [r4] - movs r2, 0xC8 - lsls r2, 1 - adds r1, r2 - movs r0, 0 - movs r2, 0x28 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - beq _08128A94 - ldr r1, [r4] - ldrb r0, [r1, 0x13] - cmp r0, 0 - bne _08128A80 - movs r0, 0x6 - strh r0, [r1, 0x6] - b _08128A94 - .align 2, 0 -_08128A7C: .4byte gUnknown_203B0E0 -_08128A80: - movs r0, 0x5 - strh r0, [r1, 0x6] - b _08128A94 -_08128A86: - ldr r0, _08128A9C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128A94 - movs r0, 0x9 - bl sub_8129218 -_08128A94: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08128A9C: .4byte gReceivedRemoteLinkPlayers - thumb_func_end sub_81288D4 - - thumb_func_start sub_8128AA0 -sub_8128AA0: @ 8128AA0 - push {r4,lr} - ldr r1, _08128ABC @ =gUnknown_203B0E0 - ldr r0, [r1] - ldrh r0, [r0, 0x6] - adds r2, r1, 0 - cmp r0, 0x7 - bls _08128AB0 - b _08128BFC -_08128AB0: - lsls r0, 2 - ldr r1, _08128AC0 @ =_08128AC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128ABC: .4byte gUnknown_203B0E0 -_08128AC0: .4byte _08128AC4 - .align 2, 0 -_08128AC4: - .4byte _08128AE4 - .4byte _08128B08 - .4byte _08128B28 - .4byte _08128B4C - .4byte _08128B80 - .4byte _08128BA0 - .4byte _08128BC4 - .4byte _08128BE8 -_08128AE4: - ldr r0, _08128B00 @ =sub_81298F8 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - beq _08128AF2 - b _08128BFC -_08128AF2: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128B04 @ =gUnknown_203B0E0 - ldr r1, [r0] - b _08128BDA - .align 2, 0 -_08128B00: .4byte sub_81298F8 -_08128B04: .4byte gUnknown_203B0E0 -_08128B08: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128BFC - movs r0, 0x12 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128B24 @ =gUnknown_203B0E0 - ldr r1, [r0] - b _08128BDA - .align 2, 0 -_08128B24: .4byte gUnknown_203B0E0 -_08128B28: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128BFC - ldr r4, _08128B48 @ =gUnknown_203B0E0 - ldr r0, [r4] - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1 - bl sub_81295EC - ldr r1, [r4] - b _08128BDA - .align 2, 0 -_08128B48: .4byte gUnknown_203B0E0 -_08128B4C: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128BFC - bl sub_80FBA1C - cmp r0, 0 - bne _08128BFC - ldr r4, _08128B7C @ =gUnknown_203B0E0 - ldr r1, [r4] - movs r0, 0xC8 - lsls r0, 1 - adds r1, r0 - movs r0, 0 - movs r2, 0x28 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - beq _08128BFC - ldr r1, [r4] - b _08128BDA - .align 2, 0 -_08128B7C: .4byte gUnknown_203B0E0 -_08128B80: - bl GetBlockReceivedStatus - movs r1, 0x1 - ands r1, r0 - cmp r1, 0 - beq _08128BFC - bl sub_80FBA1C - cmp r0, 0 - bne _08128BFC - ldr r0, _08128B9C @ =gUnknown_203B0E0 - ldr r1, [r0] - b _08128BDA - .align 2, 0 -_08128B9C: .4byte gUnknown_203B0E0 -_08128BA0: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128BFC - bl sub_80FBA1C - adds r4, r0, 0 - cmp r4, 0 - bne _08128BFC - bl sub_800AAC0 - ldr r0, _08128BC0 @ =gUnknown_203B0E0 - ldr r1, [r0] - strh r4, [r1, 0xA] - b _08128BDA - .align 2, 0 -_08128BC0: .4byte gUnknown_203B0E0 -_08128BC4: - ldr r1, [r2] - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bhi _08128BD0 - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128BD0: - ldr r0, _08128BE4 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128BFC - ldr r1, [r2] -_08128BDA: - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _08128BFC - .align 2, 0 -_08128BE4: .4byte gReceivedRemoteLinkPlayers -_08128BE8: - ldr r1, [r2] - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bls _08128BF8 - movs r0, 0x9 - bl sub_8129218 - b _08128BFC -_08128BF8: - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128BFC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8128AA0 - - thumb_func_start sub_8128C04 -sub_8128C04: @ 8128C04 - push {r4,r5,lr} - ldr r5, _08128C1C @ =gUnknown_203B0E0 - ldr r1, [r5] - ldrh r0, [r1, 0x6] - cmp r0, 0x1 - beq _08128C44 - cmp r0, 0x1 - bgt _08128C20 - cmp r0, 0 - beq _08128C2A - b _08128CA2 - .align 2, 0 -_08128C1C: .4byte gUnknown_203B0E0 -_08128C20: - cmp r0, 0x2 - beq _08128C6E - cmp r0, 0x3 - beq _08128C90 - b _08128CA2 -_08128C2A: - ldr r0, _08128C40 @ =sub_81298F8 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08128CA2 - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - b _08128C80 - .align 2, 0 -_08128C40: .4byte sub_81298F8 -_08128C44: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128CA2 - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128CA2 - bl sub_80FBA1C - adds r4, r0, 0 - cmp r4, 0 - bne _08128CA2 - bl sub_800AAC0 - ldr r1, [r5] - strh r4, [r1, 0xA] - b _08128C82 -_08128C6E: - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bhi _08128C78 - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128C78: - ldr r0, _08128C8C @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128CA2 -_08128C80: - ldr r1, [r5] -_08128C82: - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _08128CA2 - .align 2, 0 -_08128C8C: .4byte gReceivedRemoteLinkPlayers -_08128C90: - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bls _08128C9E - movs r0, 0x9 - bl sub_8129218 - b _08128CA2 -_08128C9E: - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128CA2: - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8128C04 - - thumb_func_start sub_8128CA8 -sub_8128CA8: @ 8128CA8 - push {r4,lr} - ldr r1, _08128CC0 @ =gUnknown_203B0E0 - ldr r0, [r1] - ldrh r0, [r0, 0x6] - adds r2, r1, 0 - cmp r0, 0x4 - bhi _08128D9C - lsls r0, 2 - ldr r1, _08128CC4 @ =_08128CC8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128CC0: .4byte gUnknown_203B0E0 -_08128CC4: .4byte _08128CC8 - .align 2, 0 -_08128CC8: - .4byte _08128CDC - .4byte _08128D08 - .4byte _08128D30 - .4byte _08128D64 - .4byte _08128D88 -_08128CDC: - ldr r0, _08128D00 @ =sub_81298F8 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _08128D9C - ldr r4, _08128D04 @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r0, [r0, 0x13] - cmp r0, 0 - beq _08128CFA - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 -_08128CFA: - ldr r1, [r4] - b _08128D7A - .align 2, 0 -_08128D00: .4byte sub_81298F8 -_08128D04: .4byte gUnknown_203B0E0 -_08128D08: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128D9C - ldr r4, _08128D2C @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r0, [r0, 0x13] - cmp r0, 0 - beq _08128D26 - movs r0, 0x13 - movs r1, 0 - bl sub_8129C34 -_08128D26: - ldr r1, [r4] - b _08128D7A - .align 2, 0 -_08128D2C: .4byte gUnknown_203B0E0 -_08128D30: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08128D9C - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128D9C - bl sub_80FBA1C - adds r4, r0, 0 - cmp r4, 0 - bne _08128D9C - bl sub_800AAC0 - ldr r0, _08128D60 @ =gUnknown_203B0E0 - ldr r1, [r0] - strh r4, [r1, 0xA] - b _08128D7A - .align 2, 0 -_08128D60: .4byte gUnknown_203B0E0 -_08128D64: - ldr r1, [r2] - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bhi _08128D70 - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128D70: - ldr r0, _08128D84 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128D9C - ldr r1, [r2] -_08128D7A: - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _08128D9C - .align 2, 0 -_08128D84: .4byte gReceivedRemoteLinkPlayers -_08128D88: - ldr r1, [r2] - ldrh r0, [r1, 0xA] - cmp r0, 0x95 - bls _08128D98 - movs r0, 0x9 - bl sub_8129218 - b _08128D9C -_08128D98: - adds r0, 0x1 - strh r0, [r1, 0xA] -_08128D9C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8128CA8 - - thumb_func_start sub_8128DA4 -sub_8128DA4: @ 8128DA4 - push {r4,lr} - ldr r1, _08128DBC @ =gUnknown_203B0E0 - ldr r0, [r1] - ldrh r0, [r0, 0x6] - adds r4, r1, 0 - cmp r0, 0x4 - bhi _08128E70 - lsls r0, 2 - ldr r1, _08128DC0 @ =_08128DC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128DBC: .4byte gUnknown_203B0E0 -_08128DC0: .4byte _08128DC4 - .align 2, 0 -_08128DC4: - .4byte _08128DD8 - .4byte _08128E00 - .4byte _08128E34 - .4byte _08128E42 - .4byte _08128E60 -_08128DD8: - ldr r0, _08128DE8 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _08128DEC - movs r0, 0x1 - bl sub_8129218 - b _08128E70 - .align 2, 0 -_08128DE8: .4byte gReceivedRemoteLinkPlayers -_08128DEC: - ldr r0, [r4] - movs r1, 0xC8 - lsls r1, 1 - adds r0, r1 - bl sub_8129590 - ldr r1, [r4] - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] -_08128E00: - bl IsLinkTaskFinished - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08128E70 - bl sub_80FBA1C - cmp r0, 0 - bne _08128E70 - ldr r4, _08128E30 @ =gUnknown_203B0E0 - ldr r1, [r4] - movs r0, 0xC8 - lsls r0, 1 - adds r1, r0 - movs r0, 0 - movs r2, 0x28 - bl SendBlock - lsls r0, 24 - cmp r0, 0 - beq _08128E70 - ldr r1, [r4] - b _08128E52 - .align 2, 0 -_08128E30: .4byte gUnknown_203B0E0 -_08128E34: - bl sub_8129454 - movs r0, 0x8 - movs r1, 0 - bl sub_8129C34 - b _08128E4E -_08128E42: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128E70 -_08128E4E: - ldr r0, _08128E5C @ =gUnknown_203B0E0 - ldr r1, [r0] -_08128E52: - ldrh r0, [r1, 0x6] - adds r0, 0x1 - strh r0, [r1, 0x6] - b _08128E70 - .align 2, 0 -_08128E5C: .4byte gUnknown_203B0E0 -_08128E60: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _08128E70 - movs r0, 0x1 - bl sub_8129218 -_08128E70: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8128DA4 - - thumb_func_start sub_8128E78 -sub_8128E78: @ 8128E78 - push {r4,lr} - ldr r0, _08128E90 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrh r0, [r0, 0x6] - cmp r0, 0x6 - bls _08128E86 - b _08128FA8 -_08128E86: - lsls r0, 2 - ldr r1, _08128E94 @ =_08128E98 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128E90: .4byte gUnknown_203B0E0 -_08128E94: .4byte _08128E98 - .align 2, 0 -_08128E98: - .4byte _08128EB4 - .4byte _08128EE4 - .4byte _08128F38 - .4byte _08128F50 - .4byte _08128F60 - .4byte _08128F74 - .4byte _08128F8C -_08128EB4: - bl sub_8129408 - cmp r0, 0 - beq _08128ED0 - movs r0, 0x9 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128ECC @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x2 - b _08128FA6 - .align 2, 0 -_08128ECC: .4byte gUnknown_203B0E0 -_08128ED0: - movs r0, 0xD - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128EE0 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x5 - b _08128FA6 - .align 2, 0 -_08128EE0: .4byte gUnknown_203B0E0 -_08128EE4: - ldr r0, _08128F04 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08128F0C - bl sub_8129424 - movs r0, 0xB - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128F08 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 - b _08128FA6 - .align 2, 0 -_08128F04: .4byte gMain -_08128F08: .4byte gUnknown_203B0E0 -_08128F0C: - movs r4, 0x2 - adds r0, r4, 0 - ands r0, r1 - cmp r0, 0 - beq _08128F1A - movs r0, 0xA - b _08128F9A -_08128F1A: - bl sub_8129228 - cmp r0, 0 - beq _08128FA8 - movs r0, 0x1 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128F34 @ =gUnknown_203B0E0 - ldr r0, [r0] - strh r4, [r0, 0x6] - b _08128FA8 - .align 2, 0 -_08128F34: .4byte gUnknown_203B0E0 -_08128F38: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128FA8 - ldr r0, _08128F4C @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x1 - b _08128FA6 - .align 2, 0 -_08128F4C: .4byte gUnknown_203B0E0 -_08128F50: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128FA8 - movs r0, 0xA - b _08128F9A -_08128F60: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128FA8 - movs r0, 0x1 - bl sub_8129218 - b _08128FA8 -_08128F74: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08128FA8 - ldr r0, _08128F88 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x6 - b _08128FA6 - .align 2, 0 -_08128F88: .4byte gUnknown_203B0E0 -_08128F8C: - ldr r0, _08128FB0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08128FA8 - movs r0, 0x7 -_08128F9A: - movs r1, 0 - bl sub_8129C34 - ldr r0, _08128FB4 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x4 -_08128FA6: - strh r0, [r1, 0x6] -_08128FA8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08128FB0: .4byte gMain -_08128FB4: .4byte gUnknown_203B0E0 - thumb_func_end sub_8128E78 - - thumb_func_start sub_8128FB8 -sub_8128FB8: @ 8128FB8 - push {r4,lr} - sub sp, 0x4 - ldr r1, _08128FD4 @ =gUnknown_203B0E0 - ldr r0, [r1] - ldrh r0, [r0, 0x6] - adds r4, r1, 0 - cmp r0, 0xD - bls _08128FCA - b _08129206 -_08128FCA: - lsls r0, 2 - ldr r1, _08128FD8 @ =_08128FDC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08128FD4: .4byte gUnknown_203B0E0 -_08128FD8: .4byte _08128FDC - .align 2, 0 -_08128FDC: - .4byte _08129014 - .4byte _0812902E - .4byte _08129054 - .4byte _08129098 - .4byte _081290BC - .4byte _081290D8 - .4byte _0812911C - .4byte _08129144 - .4byte _08129168 - .4byte _08129180 - .4byte _081291A4 - .4byte _081291B2 - .4byte _081291C8 - .4byte _081291E8 -_08129014: - ldr r1, [r4] - ldrb r0, [r1, 0x18] - cmp r0, 0 - bne _0812901E - b _081291C2 -_0812901E: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r1, [r4] - movs r0, 0x1 - strh r0, [r1, 0x6] - b _08129206 -_0812902E: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - beq _0812903C - b _08129206 -_0812903C: - movs r0, 0xE - movs r1, 0 - bl sub_8129C34 - ldr r0, _08129050 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x2 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129050: .4byte gUnknown_203B0E0 -_08129054: - bl sub_812A568 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08129080 - cmp r1, 0 - bgt _0812906E - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08129074 - b _08129206 -_0812906E: - cmp r1, 0x1 - beq _08129074 - b _08129206 -_08129074: - ldr r0, _0812907C @ =gUnknown_203B0E0 - ldr r1, [r0] - b _081291C2 - .align 2, 0 -_0812907C: .4byte gUnknown_203B0E0 -_08129080: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08129094 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129094: .4byte gUnknown_203B0E0 -_08129098: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - beq _081290A6 - b _08129206 -_081290A6: - movs r0, 0xF - movs r1, 0 - bl sub_8129C34 - ldr r0, _081290B8 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x4 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_081290B8: .4byte gUnknown_203B0E0 -_081290BC: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - beq _081290CA - b _08129206 -_081290CA: - ldr r0, _081290D4 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x5 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_081290D4: .4byte gUnknown_203B0E0 -_081290D8: - bl sub_812A568 - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08129104 - cmp r1, 0 - bgt _081290F2 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _081290F8 - b _08129206 -_081290F2: - cmp r1, 0x1 - beq _081290F8 - b _08129206 -_081290F8: - ldr r0, _08129100 @ =gUnknown_203B0E0 - ldr r1, [r0] - b _081291C2 - .align 2, 0 -_08129100: .4byte gUnknown_203B0E0 -_08129104: - movs r0, 0x7 - movs r1, 0 - bl sub_8129C34 - ldr r0, _08129118 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x6 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129118: .4byte gUnknown_203B0E0 -_0812911C: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08129206 - movs r0, 0x10 - movs r1, 0 - bl sub_8129C34 - bl sub_8129470 - ldr r0, _08129140 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x7 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129140: .4byte gUnknown_203B0E0 -_08129144: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08129206 - bl SetContinueGameWarpStatusToDynamicWarp - movs r0, 0 - bl TrySavingData - ldr r0, _08129164 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x8 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_08129164: .4byte gUnknown_203B0E0 -_08129168: - movs r0, 0x11 - movs r1, 0 - bl sub_8129C34 - ldr r0, _0812917C @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x9 - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_0812917C: .4byte gUnknown_203B0E0 -_08129180: - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08129206 - movs r0, 0x30 - bl PlaySE - bl ClearContinueGameWarpStatus2 - ldr r0, _081291A0 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0xA - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_081291A0: .4byte gUnknown_203B0E0 -_081291A4: - ldr r1, [r4] - movs r0, 0 - strb r0, [r1, 0x19] - ldr r1, [r4] - movs r0, 0xB - strh r0, [r1, 0x6] - b _08129206 -_081291B2: - ldr r0, [r4] - ldrb r1, [r0, 0x19] - adds r1, 0x1 - strb r1, [r0, 0x19] - ldr r1, [r4] - ldrb r0, [r1, 0x19] - cmp r0, 0x78 - bls _08129206 -_081291C2: - movs r0, 0xC - strh r0, [r1, 0x6] - b _08129206 -_081291C8: - movs r1, 0x1 - negs r1, r1 - movs r0, 0 - str r0, [sp] - adds r0, r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _081291E4 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0xD - strh r0, [r1, 0x6] - b _08129206 - .align 2, 0 -_081291E4: .4byte gUnknown_203B0E0 -_081291E8: - ldr r0, _08129210 @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _08129206 - bl sub_812B4B8 - bl sub_8129B88 - bl sub_81284BC - ldr r0, _08129214 @ =CB2_ReturnToField - bl SetMainCallback2 -_08129206: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129210: .4byte gPaletteFade -_08129214: .4byte CB2_ReturnToField - thumb_func_end sub_8128FB8 - - thumb_func_start sub_8129218 -sub_8129218: @ 8129218 - ldr r1, _08129224 @ =gUnknown_203B0E0 - ldr r1, [r1] - movs r2, 0 - strh r0, [r1, 0x4] - strh r2, [r1, 0x6] - bx lr - .align 2, 0 -_08129224: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129218 - - thumb_func_start sub_8129228 -sub_8129228: @ 8129228 - push {lr} - ldr r0, _08129258 @ =gMain - ldrh r2, [r0, 0x30] - movs r0, 0x40 - ands r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0 - bne _081292B2 - movs r0, 0x80 - ands r0, r2 - cmp r0, 0 - beq _08129268 - ldr r0, _0812925C @ =gUnknown_203B0E0 - ldr r2, [r0] - ldr r1, _08129260 @ =gUnknown_845A8A8 - ldrb r0, [r2, 0x10] - adds r0, r1 - ldrb r1, [r2, 0x12] - ldrb r0, [r0] - cmp r1, r0 - bcs _08129264 - adds r0, r1, 0x1 - b _081292CC - .align 2, 0 -_08129258: .4byte gMain -_0812925C: .4byte gUnknown_203B0E0 -_08129260: .4byte gUnknown_845A8A8 -_08129264: - strb r3, [r2, 0x12] - b _081292CE -_08129268: - ldr r0, _0812928C @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrb r0, [r1, 0x10] - cmp r0, 0x3 - beq _081292AE - movs r0, 0x20 - ands r0, r2 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0 - beq _08129296 - ldrb r0, [r1, 0x11] - cmp r0, 0 - beq _08129290 - subs r0, 0x1 - strb r0, [r1, 0x11] - b _081292CE - .align 2, 0 -_0812928C: .4byte gUnknown_203B0E0 -_08129290: - movs r0, 0x4 - strb r0, [r1, 0x11] - b _081292CE -_08129296: - movs r0, 0x10 - ands r0, r2 - cmp r0, 0 - beq _081292AE - ldrb r0, [r1, 0x11] - cmp r0, 0x3 - bhi _081292AA - adds r0, 0x1 - strb r0, [r1, 0x11] - b _081292CE -_081292AA: - strb r3, [r1, 0x11] - b _081292CE -_081292AE: - movs r0, 0 - b _081292D0 -_081292B2: - ldr r0, _081292C0 @ =gUnknown_203B0E0 - ldr r2, [r0] - ldrb r0, [r2, 0x12] - cmp r0, 0 - beq _081292C4 - subs r0, 0x1 - b _081292CC - .align 2, 0 -_081292C0: .4byte gUnknown_203B0E0 -_081292C4: - ldr r0, _081292D4 @ =gUnknown_845A8A8 - ldrb r1, [r2, 0x10] - adds r1, r0 - ldrb r0, [r1] -_081292CC: - strb r0, [r2, 0x12] -_081292CE: - movs r0, 0x1 -_081292D0: - pop {r1} - bx r1 - .align 2, 0 -_081292D4: .4byte gUnknown_845A8A8 - thumb_func_end sub_8129228 - - thumb_func_start sub_81292D8 -sub_81292D8: @ 81292D8 - push {r4-r6,lr} - sub sp, 0x18 - ldr r0, _08129318 @ =gUnknown_203B0E0 - ldr r5, [r0] - ldrb r0, [r5, 0x10] - cmp r0, 0x3 - beq _08129320 - ldr r3, _0812931C @ =gUnknown_845A9AC - ldrb r1, [r5, 0x12] - lsls r1, 2 - adds r2, r0, 0 - lsls r0, r2, 2 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - adds r1, r3 - ldr r4, [r1] - ldrb r0, [r5, 0x11] - cmp r0, 0 - beq _08129312 - adds r1, r0, 0 -_08129302: - ldrb r0, [r4] - cmp r0, 0xF9 - bne _0812930A - adds r4, 0x1 -_0812930A: - adds r4, 0x1 - subs r1, 0x1 - cmp r1, 0 - bne _08129302 -_08129312: - movs r5, 0x1 - b _08129346 - .align 2, 0 -_08129318: .4byte gUnknown_203B0E0 -_0812931C: .4byte gUnknown_845A9AC -_08129320: - ldrb r0, [r5, 0x12] - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r0 - adds r1, 0xB9 - adds r1, r5, r1 - mov r0, sp - bl StringCopy - movs r1, 0 - strb r1, [r0] - movs r1, 0xFF - strb r1, [r0, 0x1] - mov r4, sp - mov r0, sp - bl StringLength_Multibyte - adds r5, r0, 0 -_08129346: - ldr r6, _081293A8 @ =gUnknown_203B0E0 - ldr r1, [r6] - ldrb r0, [r1, 0x15] - strb r0, [r1, 0x14] - cmp r4, 0 - beq _0812939E - bl sub_81294C8 - adds r2, r0, 0 - subs r5, 0x1 - movs r0, 0x1 - negs r0, r0 - cmp r5, r0 - beq _0812939A - ldr r0, [r6] - ldrb r0, [r0, 0x15] - cmp r0, 0xE - bhi _0812939A - adds r3, r6, 0 -_0812936C: - ldrb r0, [r4] - cmp r0, 0xF9 - bne _08129378 - strb r0, [r2] - adds r4, 0x1 - adds r2, 0x1 -_08129378: - ldrb r0, [r4] - strb r0, [r2] - adds r4, 0x1 - adds r2, 0x1 - ldr r1, [r3] - ldrb r0, [r1, 0x15] - adds r0, 0x1 - strb r0, [r1, 0x15] - subs r5, 0x1 - movs r0, 0x1 - negs r0, r0 - cmp r5, r0 - beq _0812939A - ldr r0, [r3] - ldrb r0, [r0, 0x15] - cmp r0, 0xE - bls _0812936C -_0812939A: - movs r0, 0xFF - strb r0, [r2] -_0812939E: - add sp, 0x18 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_081293A8: .4byte gUnknown_203B0E0 - thumb_func_end sub_81292D8 - - thumb_func_start sub_81293AC -sub_81293AC: @ 81293AC - push {r4,lr} - ldr r4, _081293D4 @ =gUnknown_203B0E0 - ldr r1, [r4] - ldrb r0, [r1, 0x15] - strb r0, [r1, 0x14] - ldr r0, [r4] - ldrb r0, [r0, 0x15] - cmp r0, 0 - beq _081293CE - bl sub_81294EC - movs r1, 0xFF - strb r1, [r0] - ldr r1, [r4] - ldrb r0, [r1, 0x15] - subs r0, 0x1 - strb r0, [r1, 0x15] -_081293CE: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081293D4: .4byte gUnknown_203B0E0 - thumb_func_end sub_81293AC - - thumb_func_start sub_81293D8 -sub_81293D8: @ 81293D8 - push {lr} - ldr r0, _08129400 @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrb r0, [r1, 0x15] - subs r0, 0x1 - strb r0, [r1, 0x14] - bl sub_81294EC - adds r2, r0, 0 - ldrb r0, [r2] - cmp r0, 0xF9 - beq _081293FC - ldr r1, _08129404 @ =gUnknown_845A8AC - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _081293FC - strb r0, [r2] -_081293FC: - pop {r0} - bx r0 - .align 2, 0 -_08129400: .4byte gUnknown_203B0E0 -_08129404: .4byte gUnknown_845A8AC - thumb_func_end sub_81293D8 - - thumb_func_start sub_8129408 -sub_8129408: @ 8129408 - push {lr} - ldr r0, _08129418 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x15] - cmp r0, 0 - bne _0812941C - movs r0, 0 - b _0812941E - .align 2, 0 -_08129418: .4byte gUnknown_203B0E0 -_0812941C: - movs r0, 0x1 -_0812941E: - pop {r1} - bx r1 - thumb_func_end sub_8129408 - - thumb_func_start sub_8129424 -sub_8129424: @ 8129424 - push {r4,lr} - bl sub_8129758 - adds r1, r0, 0 - ldr r4, _08129450 @ =gUnknown_203B0E0 - ldr r0, [r4] - ldrb r3, [r0, 0x12] - lsls r2, r3, 2 - adds r2, r3 - lsls r2, 2 - adds r2, r3 - adds r2, 0xB9 - adds r0, r2 - bl StringCopy - ldr r1, [r4] - movs r0, 0x1 - strb r0, [r1, 0x18] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129450: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129424 - - thumb_func_start sub_8129454 -sub_8129454: @ 8129454 - ldr r1, _0812946C @ =gUnknown_203B0E0 - ldr r2, [r1] - movs r0, 0xFF - strb r0, [r2, 0x1A] - ldr r2, [r1] - movs r3, 0 - movs r0, 0xF - strb r0, [r2, 0x14] - ldr r0, [r1] - strb r3, [r0, 0x15] - bx lr - .align 2, 0 -_0812946C: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129454 - - thumb_func_start sub_8129470 -sub_8129470: @ 8129470 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _081294A4 @ =gSaveBlock1Ptr - mov r8, r0 - ldr r7, _081294A8 @ =gUnknown_203B0E0 - movs r6, 0xB9 - ldr r5, _081294AC @ =0x00003ad4 - movs r4, 0x9 -_08129482: - mov r1, r8 - ldr r0, [r1] - adds r0, r5 - ldr r1, [r7] - adds r1, r6 - bl StringCopy - adds r6, 0x15 - adds r5, 0x15 - subs r4, 0x1 - cmp r4, 0 - bge _08129482 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081294A4: .4byte gSaveBlock1Ptr -_081294A8: .4byte gUnknown_203B0E0 -_081294AC: .4byte 0x00003ad4 - thumb_func_end sub_8129470 - - thumb_func_start sub_81294B0 -sub_81294B0: @ 81294B0 - ldr r2, _081294C4 @ =gUnknown_203B0E0 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 2 - adds r1, r0 - adds r1, 0xB9 - ldr r0, [r2] - adds r0, r1 - bx lr - .align 2, 0 -_081294C4: .4byte gUnknown_203B0E0 - thumb_func_end sub_81294B0 - - thumb_func_start sub_81294C8 -sub_81294C8: @ 81294C8 - push {lr} - ldr r0, _081294E8 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x1A - ldrb r0, [r0, 0x1A] - cmp r0, 0xFF - beq _081294E0 -_081294D8: - adds r1, 0x1 - ldrb r0, [r1] - cmp r0, 0xFF - bne _081294D8 -_081294E0: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_081294E8: .4byte gUnknown_203B0E0 - thumb_func_end sub_81294C8 - - thumb_func_start sub_81294EC -sub_81294EC: @ 81294EC - push {lr} - ldr r0, _08129518 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r2, r0, 0 - adds r2, 0x1A - adds r1, r2, 0 - ldrb r0, [r0, 0x1A] - cmp r0, 0xFF - beq _08129510 -_081294FE: - adds r2, r1, 0 - ldrb r0, [r2] - cmp r0, 0xF9 - bne _08129508 - adds r1, r2, 0x1 -_08129508: - adds r1, 0x1 - ldrb r0, [r1] - cmp r0, 0xFF - bne _081294FE -_08129510: - adds r0, r2, 0 - pop {r1} - bx r1 - .align 2, 0 -_08129518: .4byte gUnknown_203B0E0 - thumb_func_end sub_81294EC - - thumb_func_start sub_812951C -sub_812951C: @ 812951C - push {r4,lr} - ldr r4, _0812955C @ =gUnknown_203B0E0 - ldr r0, [r4] - adds r0, 0x1A - bl StringLength_Multibyte - adds r2, r0, 0 - ldr r0, [r4] - adds r1, r0, 0 - adds r1, 0x1A - movs r4, 0 - cmp r2, 0xA - bls _08129550 - subs r2, 0xA - movs r3, 0 - cmp r4, r2 - bcs _08129550 -_0812953E: - ldrb r0, [r1] - cmp r0, 0xF9 - bne _08129546 - adds r1, 0x1 -_08129546: - adds r1, 0x1 - adds r4, 0x1 - adds r3, 0x1 - cmp r3, r2 - bcc _0812953E -_08129550: - lsls r0, r4, 16 - lsrs r0, 16 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0812955C: .4byte gUnknown_203B0E0 - thumb_func_end sub_812951C - - thumb_func_start sub_8129560 -sub_8129560: @ 8129560 - movs r1, 0 - strb r1, [r0] - bx lr - thumb_func_end sub_8129560 - - thumb_func_start sub_8129568 -sub_8129568: @ 8129568 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x2 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _08129588 @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - ldr r0, _0812958C @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - strb r0, [r4, 0x9] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129588: .4byte gSaveBlock2Ptr -_0812958C: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129568 - - thumb_func_start sub_8129590 -sub_8129590: @ 8129590 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x1 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _081295B8 @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - adds r4, 0x9 - ldr r0, _081295BC @ =gUnknown_203B0E0 - ldr r1, [r0] - adds r1, 0x1A - adds r0, r4, 0 - bl StringCopy - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081295B8: .4byte gSaveBlock2Ptr -_081295BC: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129590 - - thumb_func_start sub_81295C0 -sub_81295C0: @ 81295C0 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x3 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _081295E4 @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - ldr r0, _081295E8 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - strb r0, [r4, 0x9] - bl sub_80FB9D0 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081295E4: .4byte gSaveBlock2Ptr -_081295E8: .4byte gUnknown_203B0E0 - thumb_func_end sub_81295C0 - - thumb_func_start sub_81295EC -sub_81295EC: @ 81295EC - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x4 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _0812960C @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - ldr r0, _08129610 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - strb r0, [r4, 0x9] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812960C: .4byte gSaveBlock2Ptr -_08129610: .4byte gUnknown_203B0E0 - thumb_func_end sub_81295EC - - thumb_func_start sub_8129614 -sub_8129614: @ 8129614 - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x5 - strb r0, [r4] - adds r0, r4, 0x1 - ldr r1, _08129634 @ =gSaveBlock2Ptr - ldr r1, [r1] - bl StringCopy - ldr r0, _08129638 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - strb r0, [r4, 0x9] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129634: .4byte gSaveBlock2Ptr -_08129638: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129614 - - thumb_func_start sub_812963C -sub_812963C: @ 812963C - push {r4-r6,lr} - adds r6, r0, 0 - adds r5, r1, 0 - ldrb r0, [r5] - adds r1, r0, 0 - adds r4, r5, 0x1 - adds r5, r4, 0 - adds r5, 0x8 - cmp r0, 0x2 - beq _08129664 - cmp r0, 0x2 - bgt _0812965A - cmp r0, 0x1 - beq _08129688 - b _081296EC -_0812965A: - cmp r1, 0x3 - beq _081296BE - cmp r1, 0x5 - beq _081296B2 - b _081296EC -_08129664: - ldr r0, _08129680 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - ldrb r1, [r4, 0x8] - cmp r0, r1 - beq _081296EC - bl DynamicPlaceholderTextUtil_Reset - movs r0, 0 - adds r1, r4, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - ldr r1, _08129684 @ =gUnknown_841B3AA - b _081296D8 - .align 2, 0 -_08129680: .4byte gUnknown_203B0E0 -_08129684: .4byte gUnknown_841B3AA -_08129688: - adds r0, r6, 0 - adds r1, r4, 0 - bl StringCopy - movs r1, 0xFC - strb r1, [r0] - adds r0, 0x1 - movs r1, 0x13 - strb r1, [r0] - adds r0, 0x1 - movs r1, 0x2A - strb r1, [r0] - adds r0, 0x1 - movs r1, 0xF0 - strb r1, [r0] - adds r0, 0x1 - adds r1, r5, 0 - bl StringCopy - movs r0, 0x1 - b _081296EE -_081296B2: - ldr r0, _081296E4 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r0, 0x79 - adds r1, r4, 0 - bl StringCopy -_081296BE: - ldr r0, _081296E4 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x13] - ldrb r5, [r5] - cmp r0, r5 - beq _081296EC - bl DynamicPlaceholderTextUtil_Reset - movs r0, 0 - adds r1, r4, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - ldr r1, _081296E8 @ =gUnknown_841B3BE -_081296D8: - adds r0, r6, 0 - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - movs r0, 0x1 - b _081296EE - .align 2, 0 -_081296E4: .4byte gUnknown_203B0E0 -_081296E8: .4byte gUnknown_841B3BE -_081296EC: - movs r0, 0 -_081296EE: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_812963C - - thumb_func_start sub_81296F4 -sub_81296F4: @ 81296F4 - ldr r0, _081296FC @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x10] - bx lr - .align 2, 0 -_081296FC: .4byte gUnknown_203B0E0 - thumb_func_end sub_81296F4 - - thumb_func_start sub_8129700 -sub_8129700: @ 8129700 - ldr r2, _08129710 @ =gUnknown_203B0E0 - ldr r3, [r2] - ldrb r2, [r3, 0x11] - strb r2, [r0] - ldrb r0, [r3, 0x12] - strb r0, [r1] - bx lr - .align 2, 0 -_08129710: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129700 - - thumb_func_start sub_8129714 -sub_8129714: @ 8129714 - ldr r0, _0812971C @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r0, 0x1A - bx lr - .align 2, 0 -_0812971C: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129714 - - thumb_func_start sub_8129720 -sub_8129720: @ 8129720 - push {lr} - bl sub_8129714 - bl StringLength_Multibyte - pop {r1} - bx r1 - thumb_func_end sub_8129720 - - thumb_func_start sub_8129730 -sub_8129730: @ 8129730 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _08129748 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r3, [r0, 0x15] - ldrb r2, [r0, 0x14] - subs r0, r3, r2 - cmp r0, 0 - bge _0812974C - negs r0, r0 - str r3, [r4] - b _0812974E - .align 2, 0 -_08129748: .4byte gUnknown_203B0E0 -_0812974C: - str r2, [r4] -_0812974E: - str r0, [r1] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8129730 - - thumb_func_start sub_8129758 -sub_8129758: @ 8129758 - push {lr} - bl sub_812951C - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _08129784 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x1A - cmp r2, 0 - beq _0812977E -_0812976E: - ldrb r0, [r1] - cmp r0, 0xF9 - bne _08129776 - adds r1, 0x1 -_08129776: - adds r1, 0x1 - subs r2, 0x1 - cmp r2, 0 - bne _0812976E -_0812977E: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_08129784: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129758 - - thumb_func_start sub_8129788 -sub_8129788: @ 8129788 - push {r4,lr} - bl sub_812951C - lsls r0, 16 - lsrs r4, r0, 16 - ldr r0, _081297C0 @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r1, r0, 0 - adds r1, 0x1A - movs r2, 0 - movs r3, 0 - cmp r2, r4 - bcs _081297B8 -_081297A2: - ldrb r0, [r1] - cmp r0, 0xF9 - bne _081297AA - adds r1, 0x1 -_081297AA: - adds r1, 0x1 - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - adds r3, 0x1 - cmp r3, r4 - bcc _081297A2 -_081297B8: - adds r0, r2, 0 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_081297C0: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129788 - - thumb_func_start sub_81297C4 -sub_81297C4: @ 81297C4 - ldr r0, _081297CC @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r0, 0x39 - bx lr - .align 2, 0 -_081297CC: .4byte gUnknown_203B0E0 - thumb_func_end sub_81297C4 - - thumb_func_start sub_81297D0 -sub_81297D0: @ 81297D0 - ldr r0, _081297D8 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x16] - bx lr - .align 2, 0 -_081297D8: .4byte gUnknown_203B0E0 - thumb_func_end sub_81297D0 - - thumb_func_start sub_81297DC -sub_81297DC: @ 81297DC - ldr r0, _081297E4 @ =gUnknown_203B0E0 - ldr r0, [r0] - ldrb r0, [r0, 0x15] - bx lr - .align 2, 0 -_081297E4: .4byte gUnknown_203B0E0 - thumb_func_end sub_81297DC - - thumb_func_start sub_81297E8 -sub_81297E8: @ 81297E8 - push {lr} - bl sub_81294EC - ldrb r1, [r0] - cmp r1, 0xFF - bhi _08129802 - ldr r0, _08129808 @ =gUnknown_845A8AC - adds r0, r1, r0 - ldrb r0, [r0] - cmp r0, r1 - beq _08129802 - cmp r0, 0 - bne _0812980C -_08129802: - movs r0, 0x3 - b _0812980E - .align 2, 0 -_08129808: .4byte gUnknown_845A8AC -_0812980C: - movs r0, 0 -_0812980E: - pop {r1} - bx r1 - thumb_func_end sub_81297E8 - - thumb_func_start sub_8129814 -sub_8129814: @ 8129814 - ldr r0, _0812981C @ =gUnknown_203B0E0 - ldr r0, [r0] - adds r0, 0x79 - bx lr - .align 2, 0 -_0812981C: .4byte gUnknown_203B0E0 - thumb_func_end sub_8129814 - - thumb_func_start copy_strings_to_sav1 -copy_strings_to_sav1: @ 8129820 - push {r4,lr} - ldr r4, _081298A4 @ =gSaveBlock1Ptr - ldr r0, [r4] - ldr r1, _081298A8 @ =0x00003ad4 - adds r0, r1 - ldr r1, _081298AC @ =gUnknown_841B510 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298B0 @ =0x00003ae9 - adds r0, r1 - ldr r1, _081298B4 @ =gUnknown_841B516 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298B8 @ =0x00003afe - adds r0, r1 - ldr r1, _081298BC @ =gUnknown_841B51E - bl StringCopy - ldr r0, [r4] - ldr r1, _081298C0 @ =0x00003b13 - adds r0, r1 - ldr r1, _081298C4 @ =gUnknown_841B524 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298C8 @ =0x00003b28 - adds r0, r1 - ldr r1, _081298CC @ =gUnknown_841B52B - bl StringCopy - ldr r0, [r4] - ldr r1, _081298D0 @ =0x00003b3d - adds r0, r1 - ldr r1, _081298D4 @ =gUnknown_841B531 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298D8 @ =0x00003b52 - adds r0, r1 - ldr r1, _081298DC @ =gUnknown_841B535 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298E0 @ =0x00003b67 - adds r0, r1 - ldr r1, _081298E4 @ =gUnknown_841B53B - bl StringCopy - ldr r0, [r4] - ldr r1, _081298E8 @ =0x00003b7c - adds r0, r1 - ldr r1, _081298EC @ =gUnknown_841B541 - bl StringCopy - ldr r0, [r4] - ldr r1, _081298F0 @ =0x00003b91 - adds r0, r1 - ldr r1, _081298F4 @ =gUnknown_841B54B - bl StringCopy - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_081298A4: .4byte gSaveBlock1Ptr -_081298A8: .4byte 0x00003ad4 -_081298AC: .4byte gUnknown_841B510 -_081298B0: .4byte 0x00003ae9 -_081298B4: .4byte gUnknown_841B516 -_081298B8: .4byte 0x00003afe -_081298BC: .4byte gUnknown_841B51E -_081298C0: .4byte 0x00003b13 -_081298C4: .4byte gUnknown_841B524 -_081298C8: .4byte 0x00003b28 -_081298CC: .4byte gUnknown_841B52B -_081298D0: .4byte 0x00003b3d -_081298D4: .4byte gUnknown_841B531 -_081298D8: .4byte 0x00003b52 -_081298DC: .4byte gUnknown_841B535 -_081298E0: .4byte 0x00003b67 -_081298E4: .4byte gUnknown_841B53B -_081298E8: .4byte 0x00003b7c -_081298EC: .4byte gUnknown_841B541 -_081298F0: .4byte 0x00003b91 -_081298F4: .4byte gUnknown_841B54B - thumb_func_end copy_strings_to_sav1 - - thumb_func_start sub_81298F8 -sub_81298F8: @ 81298F8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _0812991C @ =gTasks+0x8 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x7 - bls _08129912 - b _08129B08 -_08129912: - lsls r0, 2 - ldr r1, _08129920 @ =_08129924 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0812991C: .4byte gTasks+0x8 -_08129920: .4byte _08129924 - .align 2, 0 -_08129924: - .4byte _08129944 - .4byte _08129952 - .4byte _08129AEC - .4byte _081299A0 - .4byte _08129A8C - .4byte _08129AC4 - .4byte _08129AD8 - .4byte _08129A7C -_08129944: - ldr r0, _08129978 @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0812994E - b _08129AE0 -_0812994E: - movs r0, 0x1 - strh r0, [r4] -_08129952: - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - adds r2, r0, 0 - strh r0, [r4, 0x8] - ldr r3, _0812997C @ =gUnknown_203B0E0 - ldr r0, [r3] - ldrb r1, [r0, 0xD] - movs r5, 0x8 - ldrsh r0, [r4, r5] - cmp r1, r0 - beq _08129980 - movs r0, 0x2 - strh r0, [r4] - ldr r0, [r3] - strb r2, [r0, 0xD] - b _08129B08 - .align 2, 0 -_08129978: .4byte gReceivedRemoteLinkPlayers -_0812997C: .4byte gUnknown_203B0E0 -_08129980: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x6] - cmp r0, 0 - bne _08129998 - bl sub_80FBA1C - cmp r0, 0 - beq _08129998 - b _08129B08 -_08129998: - movs r0, 0 - strh r0, [r4, 0x2] - movs r0, 0x3 - strh r0, [r4] -_081299A0: - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bgt _081299DA - movs r2, 0x6 - ldrsh r0, [r4, r2] - movs r3, 0x2 - ldrsh r1, [r4, r3] - asrs r0, r1 - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - bne _081299DA - movs r2, 0x1 -_081299BC: - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - bgt _081299DA - movs r5, 0x6 - ldrsh r0, [r4, r5] - movs r3, 0x2 - ldrsh r1, [r4, r3] - asrs r0, r1 - ands r0, r2 - cmp r0, 0 - beq _081299BC -_081299DA: - ldrh r1, [r4, 0x2] - movs r5, 0x2 - ldrsh r0, [r4, r5] - cmp r0, 0x5 - bne _081299E6 - b _08129B04 -_081299E6: - strh r1, [r4, 0x4] - lsls r0, r1, 24 - lsrs r0, 24 - bl ResetBlockReceivedFlag - movs r1, 0x2 - ldrsh r0, [r4, r1] - lsls r0, 8 - ldr r1, _08129A0C @ =gBlockRecvBuffer - adds r0, r1 - ldrb r0, [r0] - subs r0, 0x1 - cmp r0, 0x4 - bhi _08129A28 - lsls r0, 2 - ldr r1, _08129A10 @ =_08129A14 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08129A0C: .4byte gBlockRecvBuffer -_08129A10: .4byte _08129A14 - .align 2, 0 -_08129A14: - .4byte _08129A28 - .4byte _08129A2C - .4byte _08129A30 - .4byte _08129A34 - .4byte _08129A38 -_08129A28: - movs r0, 0x3 - b _08129A3A -_08129A2C: - movs r0, 0x3 - b _08129A3A -_08129A30: - movs r0, 0x4 - b _08129A3A -_08129A34: - movs r0, 0x5 - b _08129A3A -_08129A38: - movs r0, 0x6 -_08129A3A: - strh r0, [r4, 0xA] - ldr r5, _08129A68 @ =gUnknown_203B0E0 - ldr r0, [r5] - adds r0, 0x39 - movs r2, 0x2 - ldrsh r1, [r4, r2] - lsls r1, 8 - ldr r2, _08129A6C @ =gBlockRecvBuffer - adds r1, r2 - bl sub_812963C - cmp r0, 0 - beq _08129A70 - ldr r0, [r5] - ldrh r1, [r4, 0x2] - strb r1, [r0, 0x16] - movs r0, 0xC - movs r1, 0x2 - bl sub_8129C34 - movs r0, 0x7 - b _08129A72 - .align 2, 0 -_08129A68: .4byte gUnknown_203B0E0 -_08129A6C: .4byte gBlockRecvBuffer -_08129A70: - ldrh r0, [r4, 0xA] -_08129A72: - strh r0, [r4] - ldrh r0, [r4, 0x2] - adds r0, 0x1 - strh r0, [r4, 0x2] - b _08129B08 -_08129A7C: - movs r0, 0x2 - bl sub_8129C8C - lsls r0, 24 - cmp r0, 0 - bne _08129B08 - ldrh r0, [r4, 0xA] - b _08129B06 -_08129A8C: - ldr r6, _08129AB4 @ =gUnknown_203B0E0 - ldr r0, [r6] - ldrb r0, [r0, 0x13] - cmp r0, 0 - bne _08129AC0 - movs r3, 0x4 - ldrsh r0, [r4, r3] - cmp r0, 0 - beq _08129AC0 - bl GetLinkPlayerCount - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x2 - bne _08129AB8 - bl sub_80FA4A8 - ldr r1, [r6] - movs r0, 0x1 - b _08129ADE - .align 2, 0 -_08129AB4: .4byte gUnknown_203B0E0 -_08129AB8: - movs r5, 0x4 - ldrsh r0, [r4, r5] - bl sub_80FBD6C -_08129AC0: - movs r0, 0x3 - b _08129B06 -_08129AC4: - ldr r0, _08129AD4 @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrb r0, [r1, 0x13] - cmp r0, 0 - beq _08129AE0 - movs r0, 0x2 - b _08129ADE - .align 2, 0 -_08129AD4: .4byte gUnknown_203B0E0 -_08129AD8: - ldr r0, _08129AE8 @ =gUnknown_203B0E0 - ldr r1, [r0] - movs r0, 0x3 -_08129ADE: - strb r0, [r1, 0x17] -_08129AE0: - adds r0, r5, 0 - bl DestroyTask - b _08129B08 - .align 2, 0 -_08129AE8: .4byte gUnknown_203B0E0 -_08129AEC: - bl sub_80FBA1C - cmp r0, 0 - bne _08129B08 - ldr r0, _08129B10 @ =gUnknown_203B0E0 - ldr r1, [r0] - ldrb r0, [r1, 0x13] - cmp r0, 0 - bne _08129B04 - ldrb r0, [r1, 0xD] - bl sub_80FB030 -_08129B04: - movs r0, 0x1 -_08129B06: - strh r0, [r4] -_08129B08: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08129B10: .4byte gUnknown_203B0E0 - thumb_func_end sub_81298F8 - - thumb_func_start sub_8129B14 -sub_8129B14: @ 8129B14 - push {r4,lr} - ldr r4, _08129B60 @ =gUnknown_203B0E4 - ldr r0, _08129B64 @ =0x00002168 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _08129B70 - bl sub_812AE70 - cmp r0, 0 - beq _08129B70 - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _08129B68 @ =gUnknown_845AA84 - movs r0, 0 - movs r2, 0x4 - bl InitBgsFromTemplates - ldr r0, _08129B6C @ =gUnknown_845AA94 - bl InitWindows - bl ResetTempTileDataBuffers - bl sub_812AD50 - ldr r0, [r4] - bl sub_8129BB8 - bl sub_8129BC4 - movs r0, 0 - movs r1, 0 - bl sub_8129C34 - movs r0, 0x1 - b _08129B72 - .align 2, 0 -_08129B60: .4byte gUnknown_203B0E4 -_08129B64: .4byte 0x00002168 -_08129B68: .4byte gUnknown_845AA84 -_08129B6C: .4byte gUnknown_845AA94 -_08129B70: - movs r0, 0 -_08129B72: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129B14 - - thumb_func_start sub_8129B78 -sub_8129B78: @ 8129B78 - push {lr} - movs r0, 0 - bl sub_8129C8C - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_8129B78 - - thumb_func_start sub_8129B88 -sub_8129B88: @ 8129B88 - push {r4,lr} - bl sub_812AEB0 - ldr r4, _08129BB0 @ =gUnknown_203B0E4 - ldr r0, [r4] - cmp r0, 0 - beq _08129B9E - bl Free - movs r0, 0 - str r0, [r4] -_08129B9E: - bl FreeAllWindowBuffers - ldr r1, _08129BB4 @ =gScanlineEffect - movs r0, 0x3 - strb r0, [r1, 0x15] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08129BB0: .4byte gUnknown_203B0E4 -_08129BB4: .4byte gScanlineEffect - thumb_func_end sub_8129B88 - - thumb_func_start sub_8129BB8 -sub_8129BB8: @ 8129BB8 - movs r2, 0 - movs r1, 0xFF - strh r1, [r0, 0x18] - strh r1, [r0, 0x1E] - strh r2, [r0, 0x1A] - bx lr - thumb_func_end sub_8129BB8 - - thumb_func_start sub_8129BC4 -sub_8129BC4: @ 8129BC4 - push {r4,r5,lr} - ldr r1, _08129BF4 @ =gUnknown_203B0E4 - ldr r0, [r1] - cmp r0, 0 - beq _08129BEC - movs r2, 0 - adds r4, r1, 0 - ldr r5, _08129BF8 @ =sub_812A420 - movs r3, 0 -_08129BD6: - ldr r0, [r4] - lsls r1, r2, 3 - adds r0, r1 - str r5, [r0] - strb r3, [r0, 0x4] - ldr r0, [r4] - adds r0, r1 - strb r3, [r0, 0x5] - adds r2, 0x1 - cmp r2, 0x2 - ble _08129BD6 -_08129BEC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08129BF4: .4byte gUnknown_203B0E4 -_08129BF8: .4byte sub_812A420 - thumb_func_end sub_8129BC4 - - thumb_func_start sub_8129BFC -sub_8129BFC: @ 8129BFC - push {r4-r6,lr} - ldr r1, _08129C30 @ =gUnknown_203B0E4 - ldr r0, [r1] - cmp r0, 0 - beq _08129C2A - movs r5, 0 - adds r6, r1, 0 -_08129C0A: - ldr r0, [r6] - lsls r4, r5, 3 - adds r1, r0, r4 - ldrb r0, [r1, 0x4] - cmp r0, 0 - beq _08129C24 - adds r0, r1, 0x5 - ldr r1, [r1] - bl _call_via_r1 - ldr r1, [r6] - adds r1, r4 - strb r0, [r1, 0x4] -_08129C24: - adds r5, 0x1 - cmp r5, 0x2 - ble _08129C0A -_08129C2A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08129C30: .4byte gUnknown_203B0E4 - thumb_func_end sub_8129BFC - - thumb_func_start sub_8129C34 -sub_8129C34: @ 8129C34 - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - lsls r1, 24 - ldr r3, _08129C70 @ =gUnknown_203B0E4 - ldr r0, [r3] - lsrs r1, 21 - adds r0, r1 - ldr r2, _08129C74 @ =sub_812A420 - str r2, [r0] - movs r4, 0 - adds r5, r3, 0 - adds r3, r1, 0 - mov r12, r4 - ldr r1, _08129C78 @ =gUnknown_845AABC - movs r7, 0x1 - adds r2, r1, 0x4 -_08129C56: - ldrh r0, [r1] - cmp r0, r6 - bne _08129C7C - ldr r1, [r5] - adds r1, r3 - ldr r0, [r2] - str r0, [r1] - strb r7, [r1, 0x4] - ldr r0, [r5] - adds r0, r3 - mov r1, r12 - strb r1, [r0, 0x5] - b _08129C86 - .align 2, 0 -_08129C70: .4byte gUnknown_203B0E4 -_08129C74: .4byte sub_812A420 -_08129C78: .4byte gUnknown_845AABC -_08129C7C: - adds r1, 0x8 - adds r2, 0x8 - adds r4, 0x1 - cmp r4, 0x14 - bls _08129C56 -_08129C86: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8129C34 - - thumb_func_start sub_8129C8C -sub_8129C8C: @ 8129C8C - lsls r0, 24 - ldr r1, _08129C9C @ =gUnknown_203B0E4 - ldr r1, [r1] - lsrs r0, 21 - adds r1, r0 - ldrb r0, [r1, 0x4] - bx lr - .align 2, 0 -_08129C9C: .4byte gUnknown_203B0E4 - thumb_func_end sub_8129C8C - - thumb_func_start sub_8129CA0 -sub_8129CA0: @ 8129CA0 - push {r4,lr} - adds r4, r0, 0 - bl FreeTempTileDataBuffersIfPossible - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _08129D36 - ldrb r0, [r4] - cmp r0, 0x6 - bhi _08129D2C - lsls r0, 2 - ldr r1, _08129CC0 @ =_08129CC4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08129CC0: .4byte _08129CC4 - .align 2, 0 -_08129CC4: - .4byte _08129CE0 - .4byte _08129CEA - .4byte _08129CF0 - .4byte _08129CF6 - .4byte _08129CFC - .4byte _08129D02 - .4byte _08129D14 -_08129CE0: - bl sub_812AAD4 - bl sub_812AB8C - b _08129D30 -_08129CEA: - bl sub_812ABD8 - b _08129D30 -_08129CF0: - bl sub_812AC08 - b _08129D30 -_08129CF6: - bl sub_812AC58 - b _08129D30 -_08129CFC: - bl sub_812AC9C - b _08129D30 -_08129D02: - bl sub_812ACC0 - bl sub_812ACEC - bl sub_812AD20 - bl sub_812AD04 - b _08129D30 -_08129D14: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129D30 - bl sub_812AEC8 - bl sub_812B048 - bl sub_812B100 - b _08129D30 -_08129D2C: - movs r0, 0 - b _08129D38 -_08129D30: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08129D36: - movs r0, 0x1 -_08129D38: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129CA0 - - thumb_func_start sub_8129D40 -sub_8129D40: @ 8129D40 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129D50 - cmp r0, 0x1 - beq _08129D5E - b _08129D68 -_08129D50: - bl sub_812AA10 - movs r0, 0x3 - movs r1, 0x3 - bl CopyWindowToVram - b _08129D68 -_08129D5E: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _08129D70 -_08129D68: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r0, 0x1 -_08129D70: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129D40 - - thumb_func_start sub_8129D78 -sub_8129D78: @ 8129D78 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129D88 - cmp r0, 0x1 - beq _08129D96 - b _08129DA0 -_08129D88: - bl sub_812AA64 - movs r0, 0x3 - movs r1, 0x3 - bl CopyWindowToVram - b _08129DA0 -_08129D96: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _08129DA8 -_08129DA0: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r0, 0x1 -_08129DA8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129D78 - - thumb_func_start sub_8129DB0 -sub_8129DB0: @ 8129DB0 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0x1 - beq _08129DE6 - cmp r0, 0x1 - bgt _08129DC4 - cmp r0, 0 - beq _08129DCA - b _08129E0C -_08129DC4: - cmp r0, 0x2 - beq _08129DF2 - b _08129E0C -_08129DCA: - movs r0, 0x1 - bl sub_812AEFC - bl sub_812A980 - cmp r0, 0 - bne _08129E12 - bl sub_812A804 - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - b _08129E0C -_08129DE6: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - beq _08129E0C - b _08129E12 -_08129DF2: - bl sub_812A9C8 - cmp r0, 0 - bne _08129E12 - bl sub_812AF1C - movs r0, 0 - bl sub_812AEFC - bl sub_812B160 - movs r0, 0 - b _08129E14 -_08129E0C: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08129E12: - movs r0, 0x1 -_08129E14: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129DB0 - - thumb_func_start sub_8129E1C -sub_8129E1C: @ 8129E1C - push {lr} - bl sub_812AF1C - movs r0, 0 - pop {r1} - bx r1 - thumb_func_end sub_8129E1C - - thumb_func_start sub_8129E28 -sub_8129E28: @ 8129E28 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129E38 - cmp r0, 0x1 - beq _08129E5C - b _08129E66 -_08129E38: - movs r0, 0 - movs r1, 0 - bl sub_812A578 - movs r0, 0x17 - movs r1, 0xB - movs r2, 0x1 - bl sub_812A424 - ldr r0, _08129E58 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - b _08129E66 - .align 2, 0 -_08129E58: .4byte gUnknown_203B0E4 -_08129E5C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _08129E6E -_08129E66: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - movs r0, 0x1 -_08129E6E: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129E28 - - thumb_func_start sub_8129E74 -sub_8129E74: @ 8129E74 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129E84 - cmp r0, 0x1 - beq _08129E94 - b _08129EAA -_08129E84: - bl sub_812A6F4 - bl sub_812A51C - movs r0, 0 - bl CopyBgTilemapBufferToVram - b _08129EAA -_08129E94: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129EB0 - bl sub_812A728 - bl sub_812A544 - movs r0, 0 - b _08129EB2 -_08129EAA: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08129EB0: - movs r0, 0x1 -_08129EB2: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129E74 - - thumb_func_start sub_8129EB8 -sub_8129EB8: @ 8129EB8 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _08129ECA - cmp r0, 0x1 - beq _08129F02 - b _08129F14 -_08129ECA: - add r1, sp, 0x8 - add r0, sp, 0x4 - bl sub_8129730 - ldr r0, [sp, 0x4] - lsls r0, 16 - lsrs r0, 16 - ldr r1, [sp, 0x8] - lsls r1, 16 - lsrs r1, 16 - movs r2, 0 - bl sub_812A74C - bl sub_8129714 - adds r1, r0, 0 - movs r0, 0x2 - str r0, [sp] - movs r0, 0 - movs r2, 0x3 - movs r3, 0x1 - bl sub_812A778 - movs r0, 0x1 - movs r1, 0x2 - bl CopyWindowToVram - b _08129F14 -_08129F02: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129F1A - bl sub_812B160 - movs r0, 0 - b _08129F1C -_08129F14: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_08129F1A: - movs r0, 0x1 -_08129F1C: - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8129EB8 - - thumb_func_start sub_8129F24 -sub_8129F24: @ 8129F24 - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldrb r0, [r6] - cmp r0, 0x1 - beq _08129F80 - cmp r0, 0x1 - bgt _08129F3A - cmp r0, 0 - beq _08129F44 - b _08129FBA -_08129F3A: - cmp r0, 0x2 - beq _08129FA4 - cmp r0, 0x3 - beq _08129FB6 - b _08129FBA -_08129F44: - bl sub_8129788 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_8129758 - adds r5, r0, 0 - bl StringLength_Multibyte - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - movs r2, 0x66 - bl sub_812A74C - movs r0, 0x5 - str r0, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - movs r3, 0x4 - bl sub_812A778 - movs r0, 0x1 - movs r1, 0x2 - bl CopyWindowToVram - b _08129FBA -_08129F80: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129FC0 - movs r0, 0x1 - movs r1, 0x10 - bl sub_812A578 - ldr r0, _08129FA0 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - b _08129FBA - .align 2, 0 -_08129FA0: .4byte gUnknown_203B0E4 -_08129FA4: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _08129FC0 - movs r0, 0x1 - bl sub_812AF8C - b _08129FBA -_08129FB6: - movs r0, 0 - b _08129FC2 -_08129FBA: - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_08129FC0: - movs r0, 0x1 -_08129FC2: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8129F24 - - thumb_func_start sub_8129FCC -sub_8129FCC: @ 8129FCC - push {r4-r6,lr} - sub sp, 0x4 - adds r6, r0, 0 - ldrb r0, [r6] - cmp r0, 0x1 - beq _0812A028 - cmp r0, 0x1 - bgt _08129FE2 - cmp r0, 0 - beq _08129FEC - b _0812A062 -_08129FE2: - cmp r0, 0x2 - beq _0812A048 - cmp r0, 0x3 - beq _0812A05E - b _0812A062 -_08129FEC: - bl sub_8129788 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - bl sub_8129758 - adds r5, r0, 0 - bl StringLength_Multibyte - adds r1, r0, 0 - lsls r1, 16 - lsrs r1, 16 - adds r0, r4, 0 - movs r2, 0 - bl sub_812A74C - movs r0, 0x2 - str r0, [sp] - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0x3 - movs r3, 0x1 - bl sub_812A778 - movs r0, 0x1 - movs r1, 0x2 - bl CopyWindowToVram - b _0812A062 -_0812A028: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0812A068 - bl sub_812A6F4 - ldr r0, _0812A044 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - b _0812A062 - .align 2, 0 -_0812A044: .4byte gUnknown_203B0E4 -_0812A048: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0812A068 - movs r0, 0 - bl sub_812AF8C - bl sub_812A728 - b _0812A062 -_0812A05E: - movs r0, 0 - b _0812A06A -_0812A062: - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_0812A068: - movs r0, 0x1 -_0812A06A: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_8129FCC - - thumb_func_start sub_812A074 -sub_812A074: @ 812A074 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A084 - cmp r0, 0x1 - beq _0812A098 - b _0812A0A6 -_0812A084: - bl sub_812A804 - movs r0, 0x2 - movs r1, 0x2 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A0A6 -_0812A098: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0812A0A6 - movs r0, 0 - b _0812A0A8 -_0812A0A6: - movs r0, 0x1 -_0812A0A8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A074 - - thumb_func_start sub_812A0B0 -sub_812A0B0: @ 812A0B0 - push {r4-r6,lr} - adds r6, r0, 0 - ldrb r0, [r6] - cmp r0, 0x4 - bhi _0812A182 - lsls r0, 2 - ldr r1, _0812A0C4 @ =_0812A0C8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0812A0C4: .4byte _0812A0C8 - .align 2, 0 -_0812A0C8: - .4byte _0812A0DC - .4byte _0812A108 - .4byte _0812A138 - .4byte _0812A15C - .4byte _0812A126 -_0812A0DC: - ldr r0, _0812A104 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrh r5, [r0, 0x1A] - bl sub_81297C4 - adds r4, r0, 0 - bl sub_81297D0 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_812AA78 - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - b _0812A17C - .align 2, 0 -_0812A104: .4byte gUnknown_203B0E4 -_0812A108: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0 - bne _0812A182 - ldr r0, _0812A12C @ =gUnknown_203B0E4 - ldr r1, [r0] - ldrh r0, [r1, 0x1A] - cmp r0, 0x8 - bhi _0812A130 - adds r0, 0x1 - strh r0, [r1, 0x1A] - movs r0, 0x4 - strb r0, [r6] -_0812A126: - movs r0, 0 - b _0812A184 - .align 2, 0 -_0812A12C: .4byte gUnknown_203B0E4 -_0812A130: - strh r2, [r1, 0x1C] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_0812A138: - movs r0, 0 - movs r1, 0 - movs r2, 0x5 - movs r3, 0x11 - bl ScrollWindow - movs r0, 0 - movs r1, 0x2 - bl CopyWindowToVram - ldr r0, _0812A178 @ =gUnknown_203B0E4 - ldr r1, [r0] - ldrh r0, [r1, 0x1C] - adds r0, 0x1 - strh r0, [r1, 0x1C] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] -_0812A15C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - cmp r0, 0 - bne _0812A182 - ldr r0, _0812A178 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrh r0, [r0, 0x1C] - cmp r0, 0x2 - bhi _0812A17C - ldrb r0, [r6] - subs r0, 0x1 - b _0812A180 - .align 2, 0 -_0812A178: .4byte gUnknown_203B0E4 -_0812A17C: - ldrb r0, [r6] - adds r0, 0x1 -_0812A180: - strb r0, [r6] -_0812A182: - movs r0, 0x1 -_0812A184: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_812A0B0 - - thumb_func_start sub_812A18C -sub_812A18C: @ 812A18C - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A19C - cmp r0, 0x1 - beq _0812A1A8 - b _0812A1AE -_0812A19C: - bl sub_812AFC0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A1AE -_0812A1A8: - bl sub_812AFFC - b _0812A1B0 -_0812A1AE: - movs r0, 0x1 -_0812A1B0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A18C - - thumb_func_start sub_812A1B8 -sub_812A1B8: @ 812A1B8 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A1C8 - cmp r0, 0x1 - beq _0812A1E8 - b _0812A1F2 -_0812A1C8: - movs r0, 0x3 - movs r1, 0x10 - bl sub_812A578 - ldr r0, _0812A1E4 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A1F2 - .align 2, 0 -_0812A1E4: .4byte gUnknown_203B0E4 -_0812A1E8: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A1F4 -_0812A1F2: - movs r0, 0x1 -_0812A1F4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A1B8 - - thumb_func_start sub_812A1FC -sub_812A1FC: @ 812A1FC - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A20C - cmp r0, 0x1 - beq _0812A22C - b _0812A236 -_0812A20C: - movs r0, 0x4 - movs r1, 0 - bl sub_812A578 - ldr r0, _0812A228 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A236 - .align 2, 0 -_0812A228: .4byte gUnknown_203B0E4 -_0812A22C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A238 -_0812A236: - movs r0, 0x1 -_0812A238: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A1FC - - thumb_func_start sub_812A240 -sub_812A240: @ 812A240 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A250 - cmp r0, 0x1 - beq _0812A280 - b _0812A28A -_0812A250: - bl DynamicPlaceholderTextUtil_Reset - bl sub_8129814 - adds r1, r0, 0 - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - movs r0, 0x5 - movs r1, 0 - bl sub_812A578 - ldr r0, _0812A27C @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A28A - .align 2, 0 -_0812A27C: .4byte gUnknown_203B0E4 -_0812A280: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A28C -_0812A28A: - movs r0, 0x1 -_0812A28C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A240 - - thumb_func_start sub_812A294 -sub_812A294: @ 812A294 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A2A4 - cmp r0, 0x1 - beq _0812A2D0 - b _0812A2DA -_0812A2A4: - movs r0, 0x6 - movs r1, 0 - bl sub_812A578 - movs r0, 0x17 - movs r1, 0xA - movs r2, 0x1 - bl sub_812A424 - ldr r0, _0812A2CC @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A2DA - .align 2, 0 -_0812A2CC: .4byte gUnknown_203B0E4 -_0812A2D0: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A2DC -_0812A2DA: - movs r0, 0x1 -_0812A2DC: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A294 - - thumb_func_start sub_812A2E4 -sub_812A2E4: @ 812A2E4 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A2F4 - cmp r0, 0x1 - beq _0812A320 - b _0812A32A -_0812A2F4: - movs r0, 0x7 - movs r1, 0 - bl sub_812A578 - movs r0, 0x17 - movs r1, 0xA - movs r2, 0x1 - bl sub_812A424 - ldr r0, _0812A31C @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A32A - .align 2, 0 -_0812A31C: .4byte gUnknown_203B0E4 -_0812A320: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A32C -_0812A32A: - movs r0, 0x1 -_0812A32C: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A2E4 - - thumb_func_start sub_812A334 -sub_812A334: @ 812A334 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A344 - cmp r0, 0x1 - beq _0812A364 - b _0812A36E -_0812A344: - movs r0, 0x8 - movs r1, 0 - bl sub_812A578 - ldr r0, _0812A360 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A36E - .align 2, 0 -_0812A360: .4byte gUnknown_203B0E4 -_0812A364: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A370 -_0812A36E: - movs r0, 0x1 -_0812A370: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A334 - - thumb_func_start sub_812A378 -sub_812A378: @ 812A378 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A388 - cmp r0, 0x1 - beq _0812A3BC - b _0812A3C6 -_0812A388: - bl DynamicPlaceholderTextUtil_Reset - ldr r0, _0812A3B4 @ =gSaveBlock2Ptr - ldr r1, [r0] - movs r0, 0 - bl DynamicPlaceholderTextUtil_SetPlaceholderPtr - movs r0, 0x9 - movs r1, 0 - bl sub_812A578 - ldr r0, _0812A3B8 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A3C6 - .align 2, 0 -_0812A3B4: .4byte gSaveBlock2Ptr -_0812A3B8: .4byte gUnknown_203B0E4 -_0812A3BC: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A3C8 -_0812A3C6: - movs r0, 0x1 -_0812A3C8: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A378 - - thumb_func_start sub_812A3D0 -sub_812A3D0: @ 812A3D0 - push {r4,lr} - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0 - beq _0812A3E0 - cmp r0, 0x1 - beq _0812A40C - b _0812A416 -_0812A3E0: - movs r0, 0xA - movs r1, 0 - bl sub_812A578 - movs r0, 0x17 - movs r1, 0xA - movs r2, 0x1 - bl sub_812A424 - ldr r0, _0812A408 @ =gUnknown_203B0E4 - ldr r0, [r0] - ldrb r0, [r0, 0x1E] - movs r1, 0x3 - bl CopyWindowToVram - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0812A416 - .align 2, 0 -_0812A408: .4byte gUnknown_203B0E4 -_0812A40C: - bl IsDma3ManagerBusyWithBgCopy - lsls r0, 24 - lsrs r0, 24 - b _0812A418 -_0812A416: - movs r0, 0x1 -_0812A418: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A3D0 - - thumb_func_start sub_812A420 -sub_812A420: @ 812A420 - movs r0, 0 - bx lr - thumb_func_end sub_812A420 - - thumb_func_start sub_812A424 -sub_812A424: @ 812A424 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x14 - lsls r0, 24 - lsls r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldr r4, _0812A4FC @ =0xffffff00 - ldr r2, [sp, 0xC] - ands r2, r4 - lsrs r0, 16 - ldr r3, _0812A500 @ =0xffff00ff - ands r2, r3 - orrs r2, r0 - lsrs r1, 8 - ldr r0, _0812A504 @ =0xff00ffff - ands r2, r0 - orrs r2, r1 - ldr r0, _0812A508 @ =0x00ffffff - ands r2, r0 - movs r0, 0xC0 - lsls r0, 19 - orrs r2, r0 - str r2, [sp, 0xC] - ldr r0, [sp, 0x10] - ands r0, r4 - movs r1, 0x4 - orrs r0, r1 - ands r0, r3 - movs r1, 0xE0 - lsls r1, 4 - orrs r0, r1 - ldr r1, _0812A50C @ =0x0000ffff - ands r0, r1 - movs r1, 0xA4 - lsls r1, 15 - orrs r0, r1 - str r0, [sp, 0x10] - add r0, sp, 0xC - bl AddWindow - adds r1, r0, 0 - ldr r6, _0812A510 @ =gUnknown_203B0E4 - ldr r0, [r6] - movs r7, 0 - strh r1, [r0, 0x18] - lsls r0, r1, 16 - lsrs r0, 16 - cmp r0, 0xFF - beq _0812A4F0 - lsls r0, r1, 24 - lsrs r0, 24 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, [r6] - ldrb r0, [r0, 0x18] - bl PutWindowTilemap - ldr r0, [r6] - ldrb r0, [r0, 0x18] - ldr r2, _0812A514 @ =gText_Yes - movs r5, 0x2 - str r5, [sp] - movs r4, 0xFF - str r4, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x2 - movs r3, 0x8 - bl AddTextPrinterParameterized - ldr r0, [r6] - ldrb r0, [r0, 0x18] - ldr r2, _0812A518 @ =gText_No - movs r1, 0x10 - str r1, [sp] - str r4, [sp, 0x4] - str r7, [sp, 0x8] - movs r1, 0x2 - movs r3, 0x8 - bl AddTextPrinterParameterized - ldr r0, [r6] - ldrb r0, [r0, 0x18] - movs r1, 0x1 - movs r2, 0xD - bl DrawTextBorderOuter - ldr r0, [r6] - ldrb r0, [r0, 0x18] - movs r1, 0xE - str r1, [sp] - str r5, [sp, 0x4] - mov r1, r8 - str r1, [sp, 0x8] - movs r1, 0x2 - movs r2, 0 - movs r3, 0x2 - bl Menu_InitCursor -_0812A4F0: - add sp, 0x14 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812A4FC: .4byte 0xffffff00 -_0812A500: .4byte 0xffff00ff -_0812A504: .4byte 0xff00ffff -_0812A508: .4byte 0x00ffffff -_0812A50C: .4byte 0x0000ffff -_0812A510: .4byte gUnknown_203B0E4 -_0812A514: .4byte gText_Yes -_0812A518: .4byte gText_No - thumb_func_end sub_812A424 - - thumb_func_start sub_812A51C -sub_812A51C: @ 812A51C - push {r4,lr} - ldr r4, _0812A540 @ =gUnknown_203B0E4 - ldr r0, [r4] - ldrh r0, [r0, 0x18] - cmp r0, 0xFF - beq _0812A53A - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldr r0, [r4] - ldrb r0, [r0, 0x18] - bl ClearWindowTilemap -_0812A53A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A540: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A51C - - thumb_func_start sub_812A544 -sub_812A544: @ 812A544 - push {r4,lr} - ldr r4, _0812A564 @ =gUnknown_203B0E4 - ldr r0, [r4] - ldrh r0, [r0, 0x18] - cmp r0, 0xFF - beq _0812A55E - lsls r0, 24 - lsrs r0, 24 - bl RemoveWindow - ldr r1, [r4] - movs r0, 0xFF - strh r0, [r1, 0x18] -_0812A55E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A564: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A544 - - thumb_func_start sub_812A568 -sub_812A568: @ 812A568 - push {lr} - bl Menu_ProcessInput - lsls r0, 24 - asrs r0, 24 - pop {r1} - bx r1 - thumb_func_end sub_812A568 - - thumb_func_start sub_812A578 -sub_812A578: @ 812A578 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x1C - adds r7, r0, 0 - lsls r1, 16 - lsrs r1, 16 - mov r9, r1 - ldr r1, _0812A624 @ =0xffffff00 - ldr r3, [sp, 0x14] - ands r3, r1 - ldr r2, _0812A628 @ =0xffff00ff - ands r3, r2 - movs r0, 0x80 - lsls r0, 4 - orrs r3, r0 - ldr r0, _0812A62C @ =0xff00ffff - ands r3, r0 - movs r0, 0x80 - lsls r0, 13 - orrs r3, r0 - ldr r5, _0812A630 @ =0x00ffffff - ands r3, r5 - movs r0, 0xA8 - lsls r0, 21 - orrs r3, r0 - str r3, [sp, 0x14] - ldr r0, [sp, 0x18] - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - ands r0, r2 - movs r1, 0xE0 - lsls r1, 4 - orrs r0, r1 - ldr r1, _0812A634 @ =0x0000ffff - ands r0, r1 - movs r1, 0xD4 - lsls r1, 15 - orrs r0, r1 - str r0, [sp, 0x18] - ldr r1, _0812A638 @ =gUnknown_845AB64 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 2 - adds r4, r0, r1 - ldrb r0, [r4, 0xA] - cmp r0, 0 - beq _0812A5F8 - lsls r0, r3, 16 - movs r1, 0xF9 - lsls r1, 24 - adds r0, r1 - lsrs r0, 16 - ands r2, r3 - orrs r2, r0 - lsrs r1, r2, 24 - adds r1, 0x7 - lsls r1, 24 - adds r0, r5, 0 - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x14] -_0812A5F8: - add r0, sp, 0x14 - bl AddWindow - ldr r5, _0812A63C @ =gUnknown_203B0E4 - ldr r1, [r5] - strh r0, [r1, 0x1E] - ldrh r0, [r1, 0x1E] - mov r8, r0 - cmp r0, 0xFF - beq _0812A6E2 - ldrb r0, [r4, 0x9] - cmp r0, 0 - beq _0812A640 - adds r0, r1, 0 - adds r0, 0x22 - ldr r1, [r4] - bl DynamicPlaceholderTextUtil_ExpandPlaceholders - ldr r0, [r5] - adds r6, r0, 0 - adds r6, 0x22 - b _0812A642 - .align 2, 0 -_0812A624: .4byte 0xffffff00 -_0812A628: .4byte 0xffff00ff -_0812A62C: .4byte 0xff00ffff -_0812A630: .4byte 0x00ffffff -_0812A634: .4byte 0x0000ffff -_0812A638: .4byte gUnknown_845AB64 -_0812A63C: .4byte gUnknown_203B0E4 -_0812A640: - ldr r6, [r4] -_0812A642: - mov r0, r9 - lsls r1, r0, 8 - movs r0, 0 - movs r2, 0 - bl ChangeBgY - mov r1, r8 - lsls r0, r1, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - adds r0, r5, 0 - bl PutWindowTilemap - ldr r1, _0812A6AC @ =gUnknown_845AB64 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 2 - adds r4, r0, r1 - ldrb r0, [r4, 0x4] - cmp r0, 0x1 - bne _0812A6B0 - adds r0, r5, 0 - movs r1, 0xA - movs r2, 0x2 - bl DrawTextBorderInner - ldrb r3, [r4, 0x5] - adds r3, 0x8 - lsls r3, 24 - lsrs r3, 24 - ldrb r0, [r4, 0x6] - adds r0, 0x8 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - ldrb r0, [r4, 0x7] - str r0, [sp, 0xC] - ldrb r0, [r4, 0x8] - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x2 - adds r2, r6, 0 - bl AddTextPrinterParameterized5 - b _0812A6DA - .align 2, 0 -_0812A6AC: .4byte gUnknown_845AB64 -_0812A6B0: - adds r0, r5, 0 - movs r1, 0xA - movs r2, 0x2 - bl DrawTextBorderOuter - ldrb r3, [r4, 0x5] - ldrb r0, [r4, 0x6] - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - ldrb r0, [r4, 0x7] - str r0, [sp, 0xC] - ldrb r0, [r4, 0x8] - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x2 - adds r2, r6, 0 - bl AddTextPrinterParameterized5 -_0812A6DA: - ldr r0, _0812A6F0 @ =gUnknown_203B0E4 - ldr r0, [r0] - mov r1, r8 - strh r1, [r0, 0x1E] -_0812A6E2: - add sp, 0x1C - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812A6F0: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A578 - - thumb_func_start sub_812A6F4 -sub_812A6F4: @ 812A6F4 - push {r4,lr} - ldr r4, _0812A724 @ =gUnknown_203B0E4 - ldr r0, [r4] - ldrh r0, [r0, 0x1E] - cmp r0, 0xFF - beq _0812A712 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - ldr r0, [r4] - ldrb r0, [r0, 0x1E] - bl ClearWindowTilemap -_0812A712: - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A724: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A6F4 - - thumb_func_start sub_812A728 -sub_812A728: @ 812A728 - push {r4,lr} - ldr r4, _0812A748 @ =gUnknown_203B0E4 - ldr r0, [r4] - ldrh r0, [r0, 0x1E] - cmp r0, 0xFF - beq _0812A742 - lsls r0, 24 - lsrs r0, 24 - bl RemoveWindow - ldr r1, [r4] - movs r0, 0xFF - strh r0, [r1, 0x1E] -_0812A742: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812A748: .4byte gUnknown_203B0E4 - thumb_func_end sub_812A728 - - thumb_func_start sub_812A74C -sub_812A74C: @ 812A74C - push {lr} - sub sp, 0x8 - adds r3, r0, 0 - lsls r2, 24 - lsrs r2, 24 - lsls r3, 19 - lsrs r3, 16 - lsls r1, 19 - lsrs r1, 16 - str r1, [sp] - movs r0, 0xE - str r0, [sp, 0x4] - movs r0, 0x1 - adds r1, r2, 0 - adds r2, r3, 0 - movs r3, 0x1 - bl FillWindowPixelRect - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_812A74C - - thumb_func_start sub_812A778 -sub_812A778: @ 812A778 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x34 - mov r10, r1 - ldr r1, [sp, 0x54] - lsls r0, 16 - lsrs r5, r0, 16 - mov r9, r5 - lsls r2, 24 - lsrs r4, r2, 24 - mov r8, r4 - lsls r3, 24 - lsrs r7, r3, 24 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r4, 0 - beq _0812A7B4 - bl sub_81297DC - adds r1, r0, 0 - subs r1, r5 - lsls r1, 16 - lsrs r1, 16 - adds r0, r5, 0 - adds r2, r4, 0 - bl sub_812A74C -_0812A7B4: - add r0, sp, 0xC - mov r1, r8 - strb r1, [r0] - strb r7, [r0, 0x1] - strb r6, [r0, 0x2] - add r4, sp, 0x10 - movs r0, 0xFC - strb r0, [r4] - movs r0, 0x14 - strb r0, [r4, 0x1] - movs r0, 0x8 - strb r0, [r4, 0x2] - mov r0, sp - adds r0, 0x13 - mov r1, r10 - bl StringCopy - mov r0, r9 - lsls r2, r0, 27 - lsrs r2, 24 - add r1, sp, 0xC - str r1, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x1 - movs r1, 0x2 - movs r3, 0x1 - bl AddTextPrinterParameterized3 - add sp, 0x34 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_812A778 - - thumb_func_start sub_812A804 -sub_812A804: @ 812A804 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4C - movs r0, 0x2 - movs r1, 0xFF - bl FillWindowPixelBuffer - bl sub_81296F4 - lsls r0, 24 - lsrs r2, r0, 24 - add r1, sp, 0xC - movs r0, 0 - strb r0, [r1] - movs r0, 0xE - strb r0, [r1, 0x1] - movs r0, 0xD - strb r0, [r1, 0x2] - cmp r2, 0x3 - beq _0812A8A0 - add r1, sp, 0x10 - movs r0, 0xFC - strb r0, [r1] - movs r0, 0x14 - strb r0, [r1, 0x1] - movs r0, 0x8 - strb r0, [r1, 0x2] - str r0, [sp, 0x40] - str r1, [sp, 0x44] - cmp r2, 0x2 - bne _0812A84C - movs r1, 0x6 - str r1, [sp, 0x40] -_0812A84C: - movs r7, 0 - movs r6, 0 - lsls r0, r2, 2 - ldr r1, _0812A89C @ =gUnknown_845A9AC - adds r0, r2 - lsls r0, 3 - adds r4, r0, r1 - ldr r0, [sp, 0x40] - lsls r5, r0, 24 -_0812A85E: - ldr r1, [r4] - cmp r1, 0 - bne _0812A866 - b _0812A96C -_0812A866: - mov r0, sp - adds r0, 0x13 - bl StringCopy - lsls r3, r6, 24 - lsrs r3, 24 - add r1, sp, 0xC - str r1, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - ldr r0, [sp, 0x44] - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - lsrs r2, r5, 24 - bl AddTextPrinterParameterized3 - adds r4, 0x4 - adds r7, 0x1 - adds r0, r6, 0 - adds r0, 0xC - lsls r0, 16 - lsrs r6, r0, 16 - cmp r7, 0x9 - ble _0812A85E - b _0812A96C - .align 2, 0 -_0812A89C: .4byte gUnknown_845A9AC -_0812A8A0: - movs r1, 0x4 - str r1, [sp, 0x40] - movs r7, 0 - movs r6, 0 -_0812A8A8: - adds r0, r7, 0 - bl sub_81294B0 - adds r5, r0, 0 - movs r0, 0 - adds r1, r5, 0 - movs r2, 0 - bl GetStringWidth - cmp r0, 0x28 - bgt _0812A8E6 - lsls r3, r6, 24 - lsrs r3, 24 - add r4, sp, 0xC - str r4, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - movs r4, 0x80 - lsls r4, 19 - lsrs r2, r4, 24 - bl AddTextPrinterParameterized3 - adds r0, r7, 0x1 - str r0, [sp, 0x48] - adds r6, 0xC - mov r10, r6 - b _0812A960 -_0812A8E6: - adds r0, r5, 0 - bl StringLength_Multibyte - adds r4, r0, 0 - mov r1, sp - adds r1, 0x10 - str r1, [sp, 0x44] - ldr r0, [sp, 0x40] - lsls r0, 24 - mov r8, r0 - lsls r1, r6, 24 - mov r9, r1 - adds r0, r7, 0x1 - str r0, [sp, 0x48] - adds r6, 0xC - mov r10, r6 - ldr r7, [sp, 0x40] - adds r7, 0x23 - ldr r6, [sp, 0x44] -_0812A90C: - subs r4, 0x1 - adds r0, r6, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl StringCopyN_Multibyte - movs r0, 0 - adds r1, r6, 0 - movs r2, 0 - bl GetStringWidth - cmp r0, 0x23 - bgt _0812A90C - mov r1, r8 - lsrs r2, r1, 24 - mov r0, r9 - lsrs r4, r0, 24 - add r1, sp, 0xC - str r1, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - ldr r1, [sp, 0x44] - str r1, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - adds r3, r4, 0 - bl AddTextPrinterParameterized3 - adds r2, r7, 0 - add r0, sp, 0xC - str r0, [sp] - movs r1, 0x1 - negs r1, r1 - str r1, [sp, 0x4] - ldr r0, _0812A97C @ =gUnknown_845ABE8 - str r0, [sp, 0x8] - movs r0, 0x2 - movs r1, 0 - adds r3, r4, 0 - bl AddTextPrinterParameterized3 -_0812A960: - ldr r7, [sp, 0x48] - mov r4, r10 - lsls r0, r4, 16 - lsrs r6, r0, 16 - cmp r7, 0x9 - ble _0812A8A8 -_0812A96C: - add sp, 0x4C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0812A97C: .4byte gUnknown_845ABE8 - thumb_func_end sub_812A804 - - thumb_func_start sub_812A980 -sub_812A980: @ 812A980 - push {r4,lr} - ldr r1, _0812A9A4 @ =gUnknown_203B0E4 - ldr r2, [r1] - ldrh r3, [r2, 0x20] - movs r4, 0x20 - ldrsh r0, [r2, r4] - cmp r0, 0x37 - bgt _0812A9B4 - adds r0, r3, 0 - adds r0, 0xC - strh r0, [r2, 0x20] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x37 - ble _0812A9A8 - movs r0, 0x38 - strh r0, [r2, 0x20] - b _0812A9B4 - .align 2, 0 -_0812A9A4: .4byte gUnknown_203B0E4 -_0812A9A8: - movs r1, 0x20 - ldrsh r0, [r2, r1] - bl sub_812ADA0 - movs r0, 0x1 - b _0812A9C0 -_0812A9B4: - ldr r0, [r1] - movs r4, 0x20 - ldrsh r0, [r0, r4] - bl sub_812ADF8 - movs r0, 0 -_0812A9C0: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A980 - - thumb_func_start sub_812A9C8 -sub_812A9C8: @ 812A9C8 - push {r4,lr} - ldr r1, _0812A9EC @ =gUnknown_203B0E4 - ldr r2, [r1] - ldrh r3, [r2, 0x20] - movs r4, 0x20 - ldrsh r0, [r2, r4] - cmp r0, 0 - ble _0812A9FC - adds r0, r3, 0 - subs r0, 0xC - strh r0, [r2, 0x20] - lsls r0, 16 - cmp r0, 0 - bgt _0812A9F0 - movs r0, 0 - strh r0, [r2, 0x20] - b _0812A9FC - .align 2, 0 -_0812A9EC: .4byte gUnknown_203B0E4 -_0812A9F0: - movs r1, 0x20 - ldrsh r0, [r2, r1] - bl sub_812ADA0 - movs r0, 0x1 - b _0812AA08 -_0812A9FC: - ldr r0, [r1] - movs r4, 0x20 - ldrsh r0, [r0, r4] - bl sub_812ADF8 - movs r0, 0 -_0812AA08: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812A9C8 - - thumb_func_start sub_812AA10 -sub_812AA10: @ 812AA10 - push {lr} - sub sp, 0xC - movs r0, 0x3 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0xD - bl DrawTextBorderOuter - ldr r0, _0812AA60 @ =gUnknown_845ABEC - str r0, [sp] - movs r0, 0x3 - movs r1, 0x2 - movs r2, 0xE - movs r3, 0x5 - bl UnionRoomAndTradeMenuPrintOptions - bl sub_81296F4 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0xE - str r1, [sp] - movs r1, 0x5 - str r1, [sp, 0x4] - str r0, [sp, 0x8] - movs r0, 0x3 - movs r1, 0x2 - movs r2, 0 - movs r3, 0 - bl Menu_InitCursor - movs r0, 0x3 - bl PutWindowTilemap - add sp, 0xC - pop {r0} - bx r0 - .align 2, 0 -_0812AA60: .4byte gUnknown_845ABEC - thumb_func_end sub_812AA10 - - thumb_func_start sub_812AA64 -sub_812AA64: @ 812AA64 - push {lr} - movs r0, 0x3 - movs r1, 0 - bl ClearStdWindowAndFrameToTransparent - movs r0, 0x3 - bl ClearWindowTilemap - pop {r0} - bx r0 - thumb_func_end sub_812AA64 - - thumb_func_start sub_812AA78 -sub_812AA78: @ 812AA78 - push {r4,r5,lr} - sub sp, 0x10 - adds r5, r1, 0 - lsls r0, 16 - lsrs r0, 16 - lsls r2, 24 - add r3, sp, 0xC - movs r1, 0x1 - strb r1, [r3] - lsrs r2, 23 - adds r1, r2, 0x2 - strb r1, [r3, 0x1] - adds r1, r3, 0 - adds r2, 0x3 - strb r2, [r1, 0x2] - lsls r4, r0, 4 - subs r4, r0 - lsls r3, r4, 16 - lsrs r3, 16 - movs r0, 0xA8 - str r0, [sp] - movs r0, 0xF - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x11 - movs r2, 0 - bl FillWindowPixelRect - lsls r4, 24 - lsrs r4, 24 - add r0, sp, 0xC - str r0, [sp] - movs r0, 0x1 - negs r0, r0 - str r0, [sp, 0x4] - str r5, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r2, 0 - adds r3, r4, 0 - bl AddTextPrinterParameterized3 - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_812AA78 - - thumb_func_start sub_812AAD4 -sub_812AAD4: @ 812AAD4 - push {lr} - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x1 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x2 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgX - movs r0, 0x3 - movs r1, 0 - movs r2, 0 - bl ChangeBgY - movs r0, 0 - bl ShowBg - movs r0, 0x1 - bl ShowBg - movs r0, 0x2 - bl ShowBg - movs r0, 0x3 - bl ShowBg - movs r1, 0x82 - lsls r1, 5 - movs r0, 0 - bl SetGpuRegBits - movs r0, 0x50 - movs r1, 0 - bl SetGpuReg - movs r1, 0xE0 - lsls r1, 8 - movs r0, 0 - bl ClearGpuRegBits - movs r1, 0x80 - lsls r1, 6 - movs r0, 0 - bl SetGpuRegBits - ldr r1, _0812AB88 @ =0x000040f0 - movs r0, 0x40 - bl SetGpuReg - movs r0, 0x44 - movs r1, 0x90 - bl SetGpuReg - movs r0, 0x48 - movs r1, 0x3D - bl SetGpuReg - movs r0, 0x4A - movs r1, 0x3F - bl SetGpuReg - pop {r0} - bx r0 - .align 2, 0 -_0812AB88: .4byte 0x000040f0 - thumb_func_end sub_812AAD4 - - thumb_func_start sub_812AB8C -sub_812AB8C: @ 812AB8C - push {r4,lr} - ldr r4, _0812ABC8 @ =gUnknown_203B0E4 - ldr r1, [r4] - movs r0, 0x94 - lsls r0, 1 - adds r1, r0 - movs r0, 0 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _0812ABCC @ =0x00000928 - adds r1, r0 - movs r0, 0x1 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _0812ABD0 @ =0x00001128 - adds r1, r0 - movs r0, 0x3 - bl SetBgTilemapBuffer - ldr r1, [r4] - ldr r0, _0812ABD4 @ =0x00001928 - adds r1, r0 - movs r0, 0x2 - bl SetBgTilemapBuffer - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812ABC8: .4byte gUnknown_203B0E4 -_0812ABCC: .4byte 0x00000928 -_0812ABD0: .4byte 0x00001128 -_0812ABD4: .4byte 0x00001928 - thumb_func_end sub_812AB8C - - thumb_func_start sub_812ABD8 -sub_812ABD8: @ 812ABD8 - push {lr} - sub sp, 0x8 - movs r1, 0xC0 - lsls r1, 19 - movs r0, 0 - movs r2, 0x20 - movs r3, 0x1 - bl RequestDma3Fill - movs r0, 0x20 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_812ABD8 - - thumb_func_start sub_812AC08 -sub_812AC08: @ 812AC08 - push {lr} - sub sp, 0x4 - ldr r0, _0812AC48 @ =gUnknown_8EAA9F0 - movs r1, 0x70 - movs r2, 0x20 - bl LoadPalette - ldr r0, _0812AC4C @ =gUnknown_845AA24 - movs r1, 0xC0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _0812AC50 @ =gUnknown_8EAAA10 - movs r0, 0 - str r0, [sp] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _0812AC54 @ =gUnknown_8EAAA6C - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0812AC48: .4byte gUnknown_8EAA9F0 -_0812AC4C: .4byte gUnknown_845AA24 -_0812AC50: .4byte gUnknown_8EAAA10 -_0812AC54: .4byte gUnknown_8EAAA6C - thumb_func_end sub_812AC08 - - thumb_func_start sub_812AC58 -sub_812AC58: @ 812AC58 - push {lr} - sub sp, 0x4 - ldr r0, _0812AC90 @ =gUnknown_8EA1700 - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r1, _0812AC94 @ =gUnknown_8EA1720 - movs r0, 0 - str r0, [sp] - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl DecompressAndCopyTileDataToVram - ldr r1, _0812AC98 @ =gUnknown_8EA1958 - movs r0, 0x2 - movs r2, 0 - movs r3, 0 - bl CopyToBgTilemapBuffer - movs r0, 0x2 - bl CopyBgTilemapBufferToVram - add sp, 0x4 - pop {r0} - bx r0 - .align 2, 0 -_0812AC90: .4byte gUnknown_8EA1700 -_0812AC94: .4byte gUnknown_8EA1720 -_0812AC98: .4byte gUnknown_8EA1958 - thumb_func_end sub_812AC58 - - thumb_func_start sub_812AC9C -sub_812AC9C: @ 812AC9C - push {lr} - ldr r0, _0812ACB8 @ =gUnknown_845AA44 - movs r1, 0x80 - movs r2, 0x20 - bl LoadPalette - ldr r1, _0812ACBC @ =0x06004020 - movs r0, 0 - movs r2, 0x20 - movs r3, 0x1 - bl RequestDma3Fill - pop {r0} - bx r0 - .align 2, 0 -_0812ACB8: .4byte gUnknown_845AA44 -_0812ACBC: .4byte 0x06004020 - thumb_func_end sub_812AC9C - - thumb_func_start sub_812ACC0 -sub_812ACC0: @ 812ACC0 - push {lr} - ldr r0, _0812ACE8 @ =gUnknown_845AA64 - movs r1, 0xF0 - movs r2, 0x20 - bl LoadPalette - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - pop {r0} - bx r0 - .align 2, 0 -_0812ACE8: .4byte gUnknown_845AA64 - thumb_func_end sub_812ACC0 - - thumb_func_start sub_812ACEC -sub_812ACEC: @ 812ACEC - push {lr} - movs r0, 0x2 - bl PutWindowTilemap - bl sub_812A804 - movs r0, 0x2 - movs r1, 0x3 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_812ACEC - - thumb_func_start sub_812AD04 -sub_812AD04: @ 812AD04 - push {lr} - movs r0, 0x1 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0x1 - bl PutWindowTilemap - movs r0, 0x1 - movs r1, 0x3 - bl CopyWindowToVram - pop {r0} - bx r0 - thumb_func_end sub_812AD04 - - thumb_func_start sub_812AD20 -sub_812AD20: @ 812AD20 - push {lr} - movs r0, 0x3 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x3 - movs r1, 0x1 - movs r2, 0xD0 - bl TextWindow_SetUserSelectedFrame - movs r0, 0x3 - movs r1, 0xA - movs r2, 0x20 - bl TextWindow_SetStdFrame0_WithPal - ldr r0, _0812AD4C @ =gTMCaseMainWindowPalette - movs r1, 0xE0 - movs r2, 0x20 - bl LoadPalette - pop {r0} - bx r0 - .align 2, 0 -_0812AD4C: .4byte gTMCaseMainWindowPalette - thumb_func_end sub_812AD20 - - thumb_func_start sub_812AD50 -sub_812AD50: @ 812AD50 - push {lr} - sub sp, 0x10 - ldr r0, _0812AD8C @ =0xa2600001 - str r0, [sp, 0x4] - ldr r0, _0812AD90 @ =0x04000014 - str r0, [sp] - mov r2, sp - movs r1, 0 - movs r0, 0x1 - strb r0, [r2, 0x8] - mov r0, sp - strb r1, [r0, 0x9] - ldr r0, _0812AD94 @ =gUnknown_203B0E4 - ldr r0, [r0] - strh r1, [r0, 0x20] - str r1, [sp, 0xC] - add r0, sp, 0xC - ldr r1, _0812AD98 @ =gScanlineEffectRegBuffers - ldr r2, _0812AD9C @ =0x010003c0 - bl CpuFastSet - ldr r0, [sp] - ldr r1, [sp, 0x4] - ldr r2, [sp, 0x8] - bl ScanlineEffect_SetParams - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_0812AD8C: .4byte 0xa2600001 -_0812AD90: .4byte 0x04000014 -_0812AD94: .4byte gUnknown_203B0E4 -_0812AD98: .4byte gScanlineEffectRegBuffers -_0812AD9C: .4byte 0x010003c0 - thumb_func_end sub_812AD50 - - thumb_func_start sub_812ADA0 -sub_812ADA0: @ 812ADA0 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 16 - lsrs r0, 16 - mov r1, sp - strh r0, [r1] - ldr r5, _0812ADE8 @ =gScanlineEffect - ldrb r0, [r5, 0x14] - lsls r1, r0, 4 - subs r1, r0 - lsls r1, 7 - ldr r4, _0812ADEC @ =gScanlineEffectRegBuffers - adds r1, r4 - ldr r2, _0812ADF0 @ =0x01000090 - mov r0, sp - bl CpuSet - mov r0, sp - adds r0, 0x2 - movs r1, 0 - strh r1, [r0] - ldrb r2, [r5, 0x14] - lsls r1, r2, 4 - subs r1, r2 - lsls r1, 7 - movs r2, 0x90 - lsls r2, 1 - adds r4, r2 - adds r1, r4 - ldr r2, _0812ADF4 @ =0x01000010 - bl CpuSet - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812ADE8: .4byte gScanlineEffect -_0812ADEC: .4byte gScanlineEffectRegBuffers -_0812ADF0: .4byte 0x01000090 -_0812ADF4: .4byte 0x01000010 - thumb_func_end sub_812ADA0 - - thumb_func_start sub_812ADF8 -sub_812ADF8: @ 812ADF8 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 16 - lsrs r4, 16 - mov r0, sp - strh r4, [r0] - ldr r5, _0812AE64 @ =gScanlineEffectRegBuffers - ldr r0, _0812AE68 @ =0x01000090 - mov r9, r0 - mov r0, sp - adds r1, r5, 0 - mov r2, r9 - bl CpuSet - mov r0, sp - adds r0, 0x2 - movs r6, 0 - strh r6, [r0] - movs r2, 0x90 - lsls r2, 1 - adds r1, r5, r2 - ldr r2, _0812AE6C @ =0x01000010 - mov r8, r2 - bl CpuSet - add r0, sp, 0x4 - strh r4, [r0] - movs r2, 0xF0 - lsls r2, 3 - adds r1, r5, r2 - mov r2, r9 - bl CpuSet - mov r0, sp - adds r0, 0x6 - strh r6, [r0] - movs r1, 0x8A - lsls r1, 4 - adds r5, r1 - adds r1, r5, 0 - mov r2, r8 - bl CpuSet - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0812AE64: .4byte gScanlineEffectRegBuffers -_0812AE68: .4byte 0x01000090 -_0812AE6C: .4byte 0x01000010 - thumb_func_end sub_812ADF8 - - thumb_func_start sub_812AE70 -sub_812AE70: @ 812AE70 - push {r4,r5,lr} - movs r5, 0 - ldr r4, _0812AE9C @ =gUnknown_845AF58 -_0812AE76: - adds r0, r4, 0 - bl LoadCompressedSpriteSheet - adds r4, 0x8 - adds r5, 0x1 - cmp r5, 0x4 - bls _0812AE76 - ldr r0, _0812AEA0 @ =gUnknown_845AF80 - bl LoadSpritePalette - ldr r4, _0812AEA4 @ =gUnknown_203B0E8 - movs r0, 0x18 - bl Alloc - str r0, [r4] - cmp r0, 0 - beq _0812AEA8 - movs r0, 0x1 - b _0812AEAA - .align 2, 0 -_0812AE9C: .4byte gUnknown_845AF58 -_0812AEA0: .4byte gUnknown_845AF80 -_0812AEA4: .4byte gUnknown_203B0E8 -_0812AEA8: - movs r0, 0 -_0812AEAA: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_812AE70 - - thumb_func_start sub_812AEB0 -sub_812AEB0: @ 812AEB0 - push {lr} - ldr r0, _0812AEC4 @ =gUnknown_203B0E8 - ldr r0, [r0] - cmp r0, 0 - beq _0812AEBE - bl Free -_0812AEBE: - pop {r0} - bx r0 - .align 2, 0 -_0812AEC4: .4byte gUnknown_203B0E8 - thumb_func_end sub_812AEB0 - - thumb_func_start sub_812AEC8 -sub_812AEC8: @ 812AEC8 - push {lr} - ldr r0, _0812AEF0 @ =gUnknown_845AFC0 - movs r1, 0xA - movs r2, 0x18 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0812AEF4 @ =gUnknown_203B0E8 - ldr r2, [r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0812AEF8 @ =gSprites - adds r1, r0 - str r1, [r2] - pop {r0} - bx r0 - .align 2, 0 -_0812AEF0: .4byte gUnknown_845AFC0 -_0812AEF4: .4byte gUnknown_203B0E8 -_0812AEF8: .4byte gSprites - thumb_func_end sub_812AEC8 - - thumb_func_start sub_812AEFC -sub_812AEFC: @ 812AEFC - ldr r1, _0812AF18 @ =gUnknown_203B0E8 - ldr r1, [r1] - ldr r2, [r1] - adds r2, 0x3E - movs r1, 0x1 - ands r0, r1 - lsls r0, 2 - ldrb r3, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r3 - orrs r1, r0 - strb r1, [r2] - bx lr - .align 2, 0 -_0812AF18: .4byte gUnknown_203B0E8 - thumb_func_end sub_812AEFC - - thumb_func_start sub_812AF1C -sub_812AF1C: @ 812AF1C - push {r4,r5,lr} - sub sp, 0x4 - bl sub_81296F4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - mov r5, sp - adds r5, 0x1 - mov r0, sp - adds r1, r5, 0 - bl sub_8129700 - cmp r4, 0x3 - beq _0812AF5C - ldr r4, _0812AF58 @ =gUnknown_203B0E8 - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - ldr r1, [r4] - ldr r2, [r1] - mov r0, sp - ldrb r0, [r0] - lsls r0, 3 - adds r0, 0xA - strh r0, [r2, 0x20] - ldr r2, [r1] - b _0812AF72 - .align 2, 0 -_0812AF58: .4byte gUnknown_203B0E8 -_0812AF5C: - ldr r4, _0812AF88 @ =gUnknown_203B0E8 - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0x2 - bl StartSpriteAnim - ldr r2, [r4] - ldr r1, [r2] - movs r0, 0x18 - strh r0, [r1, 0x20] - ldr r2, [r2] -_0812AF72: - ldrb r1, [r5] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, 0x18 - strh r0, [r2, 0x22] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812AF88: .4byte gUnknown_203B0E8 - thumb_func_end sub_812AF1C - - thumb_func_start sub_812AF8C -sub_812AF8C: @ 812AF8C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 2 - ldr r0, _0812AFB8 @ =gUnknown_845AC14 + 2 - adds r4, r0 - movs r0, 0 - bl IndexOfSpritePaletteTag - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 4 - ldr r0, _0812AFBC @ =0x01010000 - adds r1, r0 - lsrs r1, 16 - adds r0, r4, 0 - movs r2, 0x4 - bl LoadPalette - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812AFB8: .4byte gUnknown_845AC14 + 2 -_0812AFBC: .4byte 0x01010000 - thumb_func_end sub_812AF8C - - thumb_func_start sub_812AFC0 -sub_812AFC0: @ 812AFC0 - push {lr} - bl sub_81296F4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0812AFE0 - ldr r0, _0812AFDC @ =gUnknown_203B0E8 - ldr r0, [r0] - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim - b _0812AFEC - .align 2, 0 -_0812AFDC: .4byte gUnknown_203B0E8 -_0812AFE0: - ldr r0, _0812AFF8 @ =gUnknown_203B0E8 - ldr r0, [r0] - ldr r0, [r0] - movs r1, 0x3 - bl StartSpriteAnim -_0812AFEC: - ldr r0, _0812AFF8 @ =gUnknown_203B0E8 - ldr r1, [r0] - movs r0, 0 - strh r0, [r1, 0x14] - pop {r0} - bx r0 - .align 2, 0 -_0812AFF8: .4byte gUnknown_203B0E8 - thumb_func_end sub_812AFC0 - - thumb_func_start sub_812AFFC -sub_812AFFC: @ 812AFFC - push {r4,lr} - ldr r4, _0812B00C @ =gUnknown_203B0E8 - ldr r1, [r4] - ldrh r0, [r1, 0x14] - cmp r0, 0x3 - bls _0812B010 -_0812B008: - movs r0, 0 - b _0812B042 - .align 2, 0 -_0812B00C: .4byte gUnknown_203B0E8 -_0812B010: - adds r0, 0x1 - strh r0, [r1, 0x14] - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3 - bls _0812B040 - bl sub_81296F4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0812B034 - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - b _0812B008 -_0812B034: - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0x2 - bl StartSpriteAnim - b _0812B008 -_0812B040: - movs r0, 0x1 -_0812B042: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_812AFFC - - thumb_func_start sub_812B048 -sub_812B048: @ 812B048 - push {r4,r5,lr} - ldr r0, _0812B08C @ =gUnknown_845AFE0 - movs r1, 0x4C - movs r2, 0x98 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0812B090 @ =gUnknown_203B0E8 - ldr r2, [r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r4, _0812B094 @ =gSprites - adds r1, r4 - str r1, [r2, 0x8] - ldr r0, _0812B098 @ =gUnknown_845AFF8 - movs r1, 0x40 - movs r2, 0x98 - movs r3, 0x1 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - str r1, [r2, 0x4] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B08C: .4byte gUnknown_845AFE0 -_0812B090: .4byte gUnknown_203B0E8 -_0812B094: .4byte gSprites -_0812B098: .4byte gUnknown_845AFF8 - thumb_func_end sub_812B048 - - thumb_func_start sub_812B09C -sub_812B09C: @ 812B09C - push {r4,lr} - adds r4, r0, 0 - bl sub_81297DC - adds r3, r0, 0 - cmp r3, 0xF - bne _0812B0B8 - adds r0, r4, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - b _0812B0CC -_0812B0B8: - adds r2, r4, 0 - adds r2, 0x3E - ldrb r0, [r2] - movs r1, 0x5 - negs r1, r1 - ands r1, r0 - strb r1, [r2] - lsls r0, r3, 3 - adds r0, 0x4C - strh r0, [r4, 0x20] -_0812B0CC: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_812B09C - - thumb_func_start sub_812B0D4 -sub_812B0D4: @ 812B0D4 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x2E] - adds r0, 0x1 - movs r2, 0 - strh r0, [r1, 0x2E] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _0812B0FA - strh r2, [r1, 0x2E] - ldrh r0, [r1, 0x24] - adds r0, 0x1 - strh r0, [r1, 0x24] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - ble _0812B0FA - strh r2, [r1, 0x24] -_0812B0FA: - pop {r0} - bx r0 - thumb_func_end sub_812B0D4 - - thumb_func_start sub_812B100 -sub_812B100: @ 812B100 - push {r4,r5,lr} - ldr r0, _0812B150 @ =gUnknown_845B050 - movs r1, 0x8 - movs r2, 0x98 - movs r3, 0x3 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0812B154 @ =gUnknown_203B0E8 - ldr r2, [r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r4, _0812B158 @ =gSprites - adds r1, r4 - str r1, [r2, 0xC] - ldr r0, _0812B15C @ =gUnknown_845B068 - movs r1, 0x20 - movs r2, 0x98 - movs r3, 0x4 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r2, [r5] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r4 - str r1, [r2, 0x10] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0812B150: .4byte gUnknown_845B050 -_0812B154: .4byte gUnknown_203B0E8 -_0812B158: .4byte gSprites -_0812B15C: .4byte gUnknown_845B068 - thumb_func_end sub_812B100 - - thumb_func_start sub_812B160 -sub_812B160: @ 812B160 - push {r4,lr} - bl sub_81296F4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - bne _0812B198 - bl sub_8129720 - cmp r0, 0 - beq _0812B1A2 - ldr r3, _0812B194 @ =gUnknown_203B0E8 - ldr r0, [r3] - ldr r1, [r0, 0x10] - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r0, [r3] - ldr r0, [r0, 0x10] - movs r1, 0x3 - bl StartSpriteAnim - b _0812B1D6 - .align 2, 0 -_0812B194: .4byte gUnknown_203B0E8 -_0812B198: - bl sub_81297E8 - adds r4, r0, 0 - cmp r4, 0x3 - bne _0812B1B8 -_0812B1A2: - ldr r0, _0812B1B4 @ =gUnknown_203B0E8 - ldr r0, [r0] - ldr r1, [r0, 0x10] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] - b _0812B1D6 - .align 2, 0 -_0812B1B4: .4byte gUnknown_203B0E8 -_0812B1B8: - ldr r3, _0812B1DC @ =gUnknown_203B0E8 - ldr r0, [r3] - ldr r1, [r0, 0x10] - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - ldr r0, [r3] - ldr r0, [r0, 0x10] - lsls r1, r4, 24 - lsrs r1, 24 - bl StartSpriteAnim -_0812B1D6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0812B1DC: .4byte gUnknown_203B0E8 - thumb_func_end sub_812B160 - - .align 2, 0 @ Don't pad with nop. diff --git a/common_syms/AgbRfu_LinkManager.txt b/common_syms/AgbRfu_LinkManager.txt new file mode 100644 index 000000000..7ff8cd53d --- /dev/null +++ b/common_syms/AgbRfu_LinkManager.txt @@ -0,0 +1 @@ +lman diff --git a/common_syms/help_system_812B1E0.txt b/common_syms/help_system_812B1E0.txt index 5e56cc230..cd404504e 100644 --- a/common_syms/help_system_812B1E0.txt +++ b/common_syms/help_system_812B1E0.txt @@ -1,2 +1,2 @@ -gUnknown_3005E9C +sHelpSystemState gSomeVariableBackup diff --git a/common_syms/link.txt b/common_syms/link.txt index 32c25d708..82cf757a1 100644 --- a/common_syms/link.txt +++ b/common_syms/link.txt @@ -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 diff --git a/common_syms/link_rfu.txt b/common_syms/link_rfu.txt deleted file mode 100644 index add61fde8..000000000 --- a/common_syms/link_rfu.txt +++ /dev/null @@ -1 +0,0 @@ -gUnknown_3005E10 diff --git a/common_syms/mevent.txt b/common_syms/mevent.txt index cfaf59d33..af4db66e6 100644 --- a/common_syms/mevent.txt +++ b/common_syms/mevent.txt @@ -1 +1 @@ -gUnknown_3005ED0 +sMEventSendToEReaderManager diff --git a/data/berry_crush.s b/data/berry_crush.s index cc7ae23fd..417347801 100644 --- a/data/berry_crush.s +++ b/data/berry_crush.s @@ -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 diff --git a/data/data_8479668.s b/data/data_8479668.s index 8527b4f09..6d8a22898 100644 --- a/data/data_8479668.s +++ b/data/data_8479668.s @@ -75,64 +75,64 @@ gUnknown_847AA8F:: gUnknown_847AAA8:: .string "{CLEAR 11}…{CLEAR 16}“{CLEAR 16}”{CLEAR 18}‘{CLEAR 18}'{CLEAR 18} $" -gUnknown_847AAC1:: +gText_UnionRoomChatKeyboard_ABCDE:: .string "ABCDE$" -gUnknown_847AAC7:: +gText_UnionRoomChatKeyboard_FGHIJ:: .string "FGHIJ$" -gUnknown_847AACD:: +gText_UnionRoomChatKeyboard_KLMNO:: .string "KLMNO$" -gUnknown_847AAD3:: +gText_UnionRoomChatKeyboard_PQRST:: .string "PQRST$" -gUnknown_847AAD9:: +gText_UnionRoomChatKeyboard_UVWXY:: .string "UVWXY$" -gUnknown_847AADF:: +gText_UnionRoomChatKeyboard_Z:: .string "Z $" -gUnknown_847AAE5:: +gText_UnionRoomChatKeyboard_01234Upper:: .string "01234$" -gUnknown_847AAEB:: +gText_UnionRoomChatKeyboard_56789Upper:: .string "56789$" -gUnknown_847AAF1:: +gText_UnionRoomChatKeyboard_PunctuationUpper:: .string ".,!? $" -gUnknown_847AAF7:: +gText_UnionRoomChatKeyboard_SymbolsUpper:: .string "-/&… $" -gUnknown_847AAFD:: +gText_UnionRoomChatKeyboard_abcde:: .string "abcde$" -gUnknown_847AB03:: +gText_UnionRoomChatKeyboard_fghij:: .string "fghij$" -gUnknown_847AB09:: +gText_UnionRoomChatKeyboard_klmno:: .string "klmno$" -gUnknown_847AB0F:: +gText_UnionRoomChatKeyboard_pqrst:: .string "pqrst$" -gUnknown_847AB15:: +gText_UnionRoomChatKeyboard_uvwxy:: .string "uvwxy$" -gUnknown_847AB1B:: +gText_UnionRoomChatKeyboard_z:: .string "z $" -gUnknown_847AB21:: +gText_UnionRoomChatKeyboard_01234Lower:: .string "01234$" -gUnknown_847AB27:: +gText_UnionRoomChatKeyboard_56789Lower:: .string "56789$" -gUnknown_847AB2D:: +gText_UnionRoomChatKeyboard_PunctuationLower:: .string ".,!? $" -gUnknown_847AB33:: +gText_UnionRoomChatKeyboard_SymbolsLower:: .string "-/&… $" .string "$" @@ -144,82 +144,40 @@ gUnknown_847AB33:: .string "$" .string "$" -gUnknown_847AB41:: +gText_UnionRoomChatKeyboard_Emoji1:: .string "{EXTRA 245}{EXTRA 246}{EXTRA 247}{EXTRA 248}{EXTRA 254}$" -gUnknown_847AB4C:: +gText_UnionRoomChatKeyboard_Emoji2:: .string "{EXTRA 249}{EXTRA 250}{EXTRA 252}{EXTRA 251}{EXTRA 253}$" -gUnknown_847AB57:: +gText_UnionRoomChatKeyboard_Emoji3:: .string "{EXTRA 236}{EXTRA 237}{EXTRA 238}{EXTRA 235}{EXTRA 234}$" -gUnknown_847AB62:: +gText_UnionRoomChatKeyboard_Emoji4:: .string "♂♀{EXTRA 212}{EXTRA 213}{EXTRA 211}$" -gUnknown_847AB6B:: +gText_UnionRoomChatKeyboard_Emoji5:: .string "{EXTRA 216}{EXTRA 217}{EXTRA 242}{EXTRA 243}{EXTRA 244}$" -gUnknown_847AB76:: +gText_UnionRoomChatKeyboard_Emoji6:: .string "{EXTRA 218}{EXTRA 241}{EXTRA 224}{EXTRA 226}{EXTRA 227}$" -gUnknown_847AB81:: +gText_UnionRoomChatKeyboard_Emoji7:: .string "{EXTRA 240}{EXTRA 239}{EXTRA 225}{EXTRA 214}{EXTRA 215}$" -gUnknown_847AB8C:: +gText_UnionRoomChatKeyboard_Emoji8:: .string "{EXTRA 228}{EXTRA 229}{EXTRA 230}{EXTRA 231}{EXTRA 232}$" -gUnknown_847AB97:: +gText_UnionRoomChatKeyboard_Emoji9:: .string "{EXTRA 233}{EXTRA 220}{EXTRA 221}{EXTRA 222}{EXTRA 209}$" -gUnknown_847ABA2:: +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 diff --git a/data/event_object_80688E4.s b/data/event_object_80688E4.s deleted file mode 100644 index 8d1917825..000000000 --- a/data/event_object_80688E4.s +++ /dev/null @@ -1,97 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_83A710C:: - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - .4byte little_step - -gUnknown_83A714C:: - .4byte double_little_steps - .4byte double_little_steps - .4byte double_little_steps - .4byte double_little_steps - .4byte double_little_steps - .4byte double_little_steps - .4byte double_little_steps - .4byte double_little_steps - -gUnknown_83A716C:: - .4byte double_little_steps - .4byte triple_little_steps - .4byte triple_little_steps - .4byte double_little_steps - .4byte triple_little_steps - .4byte triple_little_steps - -gUnknown_83A7184:: - .4byte quad_little_steps - .4byte quad_little_steps - .4byte quad_little_steps - .4byte quad_little_steps - -gUnknown_83A7194:: - .4byte oct_little_steps - .4byte oct_little_steps - -gUnknown_83A719C:: @ 83A719C - .4byte gUnknown_83A710C - .4byte gUnknown_83A714C - .4byte gUnknown_83A716C - .4byte gUnknown_83A7184 - .4byte gUnknown_83A7194 - -gUnknown_83A71B0:: @ 83A71B0 - .2byte 0x0010, 0x0008, 0x0006, 0x0004, 0x0002 - -gUnknown_83A71BA:: - .byte 0xfc, 0xfa, 0xf8, 0xf6, 0xf5, 0xf4, 0xf4, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xfa, 0xfc, 0x00, 0x00 - -gUnknown_83A71CA:: - .byte 0x00, 0xfe, 0xfd, 0xfc, 0xfb, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb, 0xfc, 0xfd, 0xfe, 0x00, 0x00, 0x00 - -gUnknown_83A71DA:: - .byte 0xfe, 0xfc, 0xfa, 0xf8, 0xf7, 0xf6, 0xf6, 0xf6, 0xf7, 0xf8, 0xfa, 0xfb, 0xfd, 0xfe, 0x00, 0x00 - - .align 2 -gUnknown_83A71EC:: @ 83A71EC - .4byte gUnknown_83A71BA - .4byte gUnknown_83A71CA - .4byte gUnknown_83A71DA - - .align 1 -gUnknown_83A71F8:: @ 83A71F8 - .2byte 0x10, 0x10, 0x20 - -gUnknown_83A71FE:: @ 83A71FE - .byte 0, 0, 1 - - .align 1 -gUnknown_83A7202:: @ 83A7202 - .2byte 0x20, 0x20, 0x40 - -gUnknown_83A7208:: @ 83A7208 - .byte 1, 1, 2 - - .align 2 -gUnknown_83A720C:: @ 83A720C - abspath "evobjmv.c" - - .align 2 -gUnknown_83A7240:: @ 83A7240 - .asciz "0" diff --git a/data/event_scripts.s b/data/event_scripts.s index 00ff72dd8..105436342 100644 --- a/data/event_scripts.s +++ b/data/event_scripts.s @@ -31,6 +31,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 @@ -638,6 +639,8 @@ gStdScriptsEnd:: .include "data/maps/Route18/text.inc" .include "data/maps/Route19/text.inc" .include "data/maps/Route20/text.inc" + .include "data/maps/Route21_North/text.inc" + .include "data/maps/Route21_South/text.inc" .include "data/maps/Route22/text.inc" .include "data/maps/Route23/text.inc" .include "data/maps/Route24/text.inc" @@ -690,6 +693,7 @@ gStdScriptsEnd:: .include "data/maps/VermilionCity_House1/text.inc" .include "data/maps/VermilionCity_PokemonCenter_1F/text.inc" .include "data/maps/VermilionCity_PokemonFanClub/text.inc" + .include "data/maps/VermilionCity_House2/text.inc" .include "data/maps/VermilionCity_Mart/text.inc" .include "data/maps/VermilionCity_Gym/text.inc" .include "data/maps/VermilionCity_House3/text.inc" @@ -941,23 +945,7 @@ Text_DugUpItemFromGround:: @ 81A5700 .string "from deep in the ground.$" .include "data/text/route23.inc" - -Text_1A58A7:: @ 81A58A7 - .string "Let's see…\n" - .string "Uh-oh! You have caught only\l" - .string "{STR_VAR_3} kinds of POKéMON!\p" - .string "You need {STR_VAR_1} kinds\n" - .string "if you want the {STR_VAR_2}.$" - -Text_1A5909:: @ 81A5909 - .string "…Oh. I see.\p" - .string "When you get {STR_VAR_1} kinds of POKéMON,\n" - .string "come back for the {STR_VAR_2}.$" - -Text_1A594D:: @ 81A594D - .string "Oh! I see you don't have any\n" - .string "room for the {STR_VAR_2}.$" - + .include "data/text/aide.inc" .include "data/text/ingame_trade.inc" Text_CardKeyOpenedDoor:: @ 81A5B88 @@ -1077,13 +1065,7 @@ Text_FoundTMHMContainsMove:: @ 81A63E8 .string "{PLAYER} found a {STR_VAR_2}!\n" .string "It contains {STR_VAR_1}.$" -Text_1A6407:: @ 81A6407 - .string "おつかれさん!\n" - .string "どこに いきたいんだ?$" - -Text_1A641B:: @ 81A641B - .string "All right!\n" - .string "All aboard SEAGALLOP HI-SPEED {STR_VAR_1}!$" + .include "data/text/seagallop.inc" @ Call for legendary bird trio Text_Gyaoo:: @ 81A6448 @@ -1189,10 +1171,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 @@ -1352,8 +1333,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 @@ -1431,20 +1412,7 @@ EventScript_GetElevatorFloor:: @ 81A7AB9 special Special_GetElevatorFloor return -EventScript_1A7ABD:: @ 81A7ABD - msgbox Text_1A58A7 - release - end - -EventScript_1A7AC7:: @ 81A7AC7 - msgbox Text_1A594D - release - end - -EventScript_1A7AD1:: @ 81A7AD1 - msgbox Text_1A5909 - release - end + .include "data/scripts/aide.inc" gUnknown_81A7ADB:: @ 81A7ADB special sub_80CADC4 @@ -1526,21 +1494,21 @@ Common_EventScript_DirectCornerAttendant:: @ 81A8D02 call CableClub_EventScript_DirectCornerAttendant end -VermilionCity_PokemonCenter_1F_EventScript_1A8D08:: @ 81A8D08 +VermilionCity_PokemonCenter_1F_EventScript_VSSeekerWoman:: @ 81A8D08 lock faceplayer - goto_if_set FLAG_GOT_VS_SEEKER, EventScript_1A8D3F - msgbox Text_194234 + goto_if_set FLAG_GOT_VS_SEEKER, VermilionCity_PokemonCenter_1F_EventScript_ExplainVSSeeker + msgbox VermilionCity_PokemonCenter_1F_Text_UrgeToBattleSomeoneAgain setflag FLAG_GOT_VS_SEEKER giveitem ITEM_VS_SEEKER compare VAR_RESULT, FALSE goto_if_eq EventScript_BagIsFull - msgbox Text_19430F + msgbox VermilionCity_PokemonCenter_1F_Text_UseDeviceForRematches release end -EventScript_1A8D3F:: @ 81A8D3F - msgbox Text_194381 +VermilionCity_PokemonCenter_1F_EventScript_ExplainVSSeeker:: @ 81A8D3F + msgbox VermilionCity_PokemonCenter_1F_Text_ExplainVSSeeker release end diff --git a/data/field_screen_effect.s b/data/field_screen_effect.s deleted file mode 100644 index 92078287d..000000000 --- a/data/field_screen_effect.s +++ /dev/null @@ -1,15 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnknown_83C68E0:: @ 83C68E0 - .4byte 4 - -gUnknown_83C68E4:: @ 83C68E4 - .byte 0, 0, 5, 30, 11, 15 - .2byte 0x001 - -gUnknown_83C68EC:: @ 83C68EC - .byte 0, 1, 2 diff --git a/data/graphics.s b/data/graphics.s index 809385e49..247a5d230 100644 --- a/data/graphics.s +++ b/data/graphics.s @@ -16374,16 +16374,16 @@ gFameCheckerBg3Tilemap:: @ 8EA0700 gFameCheckerBg2Tilemap:: @ 8EA0F00 .incbin "data/graphics/fame_checker_tilemap2.bin" -gUnknown_8EA1700:: @ 8EA1700 +gLinkMiscMenu_Pal:: @ 8EA1700 .incbin "graphics/interface/union_room_chat.gbapal" -gUnknown_8EA1720:: @ 8EA1720 +gLinkMiscMenu_Gfx:: @ 8EA1720 .incbin "graphics/interface/union_room_chat.4bpp.lz" -gUnknown_8EA1958:: @ 8EA1958 +gLinkMiscMenu_Tilemap:: @ 8EA1958 .incbin "graphics/interface/union_room_chat.bin.lz" -gUnknown_8EA1A50:: @ 8EA1A50 +gUnionRoomChatIcons:: @ 8EA1A50 .incbin "graphics/interface/union_room_chat_icons.4bpp.lz" .align 2 @@ -16508,13 +16508,13 @@ gTilesetPalettes_8EA9D88:: @ 8EA9D88 gTilesetTiles_8EA9F88:: @ 8EA9F88 .incbin "data/tilesets/secondary/82D4E6C/tiles.4bpp.lz" -gUnknown_8EAA9F0:: @ 8EAA9F0 +gUnionRoomChatPanelBgPal_7:: @ 8EAA9F0 .incbin "graphics/interface/union_room_chat_panel.gbapal" -gUnknown_8EAAA10:: @ 8EAAA10 +gUnionRoomChatPanelBgTiles:: @ 8EAAA10 .incbin "graphics/interface/union_room_chat_panel.4bpp.lz" -gUnknown_8EAAA6C:: @ 8EAAA6C +gUnionRoomChatPanelBgMap:: @ 8EAAA6C .incbin "graphics/interface/union_room_chat_panel.bin.lz" gCreditsMonBackdropPals:: @ 8EAAB18 diff --git a/data/maps/CinnabarIsland/scripts.inc b/data/maps/CinnabarIsland/scripts.inc index 5780a2bf6..e0260dac5 100644 --- a/data/maps/CinnabarIsland/scripts.inc +++ b/data/maps/CinnabarIsland/scripts.inc @@ -213,7 +213,7 @@ CinnabarIsland_EventScript_SailToOneIsland:: @ 81670E6 setvar VAR_MAP_SCENE_ONE_ISLAND_HARBOR, 1 setvar VAR_0x8004, SEAGALLOP_CINNABAR_ISLAND setvar VAR_0x8006, SEAGALLOP_ONE_ISLAND - goto EventScript_1A90DA + goto EventScript_SetSail end CinnabarIsland_EventScript_ApproachShore:: @ 8167142 diff --git a/data/maps/FiveIsland_Harbor/scripts.inc b/data/maps/FiveIsland_Harbor/scripts.inc index 71f305d0b..47ee3487f 100644 --- a/data/maps/FiveIsland_Harbor/scripts.inc +++ b/data/maps/FiveIsland_Harbor/scripts.inc @@ -7,5 +7,5 @@ FiveIsland_Harbor_EventScript_171D43:: @ 8171D43 message Text_WhereDoYouWantToSail waitmessage setvar VAR_0x8004, SEAGALLOP_FIVE_ISLAND - goto EventScript_1A900F + goto EventScript_ChooseDestFromIsland end diff --git a/data/maps/FourIsland_Harbor/scripts.inc b/data/maps/FourIsland_Harbor/scripts.inc index 39d98de68..d8933d783 100644 --- a/data/maps/FourIsland_Harbor/scripts.inc +++ b/data/maps/FourIsland_Harbor/scripts.inc @@ -7,5 +7,5 @@ FourIsland_Harbor_EventScript_171C99:: @ 8171C99 message Text_WhereDoYouWantToSail waitmessage setvar VAR_0x8004, SEAGALLOP_FOUR_ISLAND - goto EventScript_1A900F + goto EventScript_ChooseDestFromIsland end diff --git a/data/maps/LavenderTown_Mart/text.inc b/data/maps/LavenderTown_Mart/text.inc index a5b0a4968..cdf25450e 100644 --- a/data/maps/LavenderTown_Mart/text.inc +++ b/data/maps/LavenderTown_Mart/text.inc @@ -18,3 +18,8 @@ LavenderTown_Mart_Text_TrainerDuosCanChallengeYou:: @ 8193DF1 .string "If that happens, you have to send\n" .string "out two POKéMON to battle, too.$" +LavenderTown_Mart_Text_SoldNuggetFromMountainsFor5000:: @ 8193E82 + .string "この あいだ やまおくで\n" + .string "きんのたまを ひろい ましてね!\p" + .string "つかえない しなもの ですが\n" + .string "うったら なんと 5000¥でした$" diff --git a/data/maps/OneIsland_Harbor/scripts.inc b/data/maps/OneIsland_Harbor/scripts.inc index 754c6f7c6..bbbe36fb9 100644 --- a/data/maps/OneIsland_Harbor/scripts.inc +++ b/data/maps/OneIsland_Harbor/scripts.inc @@ -38,5 +38,5 @@ OneIsland_Harbor_EventScript_1713BD:: @ 81713BD message Text_WhereDoYouWantToSail waitmessage setvar VAR_0x8004, SEAGALLOP_ONE_ISLAND - goto EventScript_1A8EC5 + goto EventScript_ChooseDestFromOneIsland end diff --git a/data/maps/OneIsland_PokemonCenter_1F/scripts.inc b/data/maps/OneIsland_PokemonCenter_1F/scripts.inc index 4f1a059ad..05f00c76b 100644 --- a/data/maps/OneIsland_PokemonCenter_1F/scripts.inc +++ b/data/maps/OneIsland_PokemonCenter_1F/scripts.inc @@ -503,7 +503,7 @@ EventScript_1711DA:: @ 81711DA setvar VAR_MAP_SCENE_CINNABAR_ISLAND, 3 setvar VAR_0x8004, SEAGALLOP_ONE_ISLAND setvar VAR_0x8006, SEAGALLOP_CINNABAR_ISLAND - goto EventScript_1A90DA + goto EventScript_SetSail end EventScript_1712E4:: @ 81712E4 diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc index d28125f72..0e466abd3 100644 --- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc +++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc @@ -346,7 +346,7 @@ EventScript_16939C:: @ 816939C end EventScript_1693AC:: @ 81693AC - trainerbattle_tutorial TRAINER_RIVAL_OAKS_LAB_SQUIRTLE, 3, Text_18DDEA, Text_18DE1A + trainerbattle_earlyrival TRAINER_RIVAL_OAKS_LAB_SQUIRTLE, RIVAL_BATTLE_TUTORIAL, Text_18DDEA, Text_RivalVictory goto EventScript_1694C2 end @@ -402,7 +402,7 @@ EventScript_169414:: @ 8169414 end EventScript_169424:: @ 8169424 - trainerbattle_tutorial TRAINER_RIVAL_OAKS_LAB_CHARMANDER, 3, Text_18DDEA, Text_18DE1A + trainerbattle_earlyrival TRAINER_RIVAL_OAKS_LAB_CHARMANDER, RIVAL_BATTLE_TUTORIAL, Text_18DDEA, Text_RivalVictory goto EventScript_1694C2 end @@ -461,7 +461,7 @@ EventScript_16948F:: @ 816948F end EventScript_16949F:: @ 816949F - trainerbattle_tutorial TRAINER_RIVAL_OAKS_LAB_BULBASAUR, 3, Text_18DDEA, Text_18DE1A + trainerbattle_earlyrival TRAINER_RIVAL_OAKS_LAB_BULBASAUR, RIVAL_BATTLE_TUTORIAL, Text_18DDEA, Text_RivalVictory goto EventScript_1694C2 end diff --git a/data/maps/PalletTown_ProfessorOaksLab/text.inc b/data/maps/PalletTown_ProfessorOaksLab/text.inc index 3d0c7ba57..e437d4b39 100644 --- a/data/maps/PalletTown_ProfessorOaksLab/text.inc +++ b/data/maps/PalletTown_ProfessorOaksLab/text.inc @@ -36,7 +36,8 @@ Text_18DDEA:: @ 818DDEA .string "Unbelievable!\l" .string "I picked the wrong POKéMON!$" -Text_18DE1A:: @ 818DE1A +@ Also used for early Route 22 battle +Text_RivalVictory:: @ 818DE1A .string "{RIVAL}: Yeah!\n" .string "Am I great or what?$" diff --git a/data/maps/Route1/map.json b/data/maps/Route1/map.json index 8d636de9a..1a2426066 100644 --- a/data/maps/Route1/map.json +++ b/data/maps/Route1/map.json @@ -34,7 +34,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route1_EventScript_167EFE", + "script": "Route1_EventScript_MartClerk", "flag": "0" }, { @@ -47,7 +47,7 @@ "movement_range_y": 3, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route1_EventScript_167F52", + "script": "Route1_EventScript_Boy", "flag": "0" } ], @@ -59,7 +59,7 @@ "x": 9, "y": 31, "elevation": 0, - "script": "Route1_EventScript_167F5B" + "script": "Route1_EventScript_RouteSign" } ] } diff --git a/data/maps/Route1/scripts.inc b/data/maps/Route1/scripts.inc index 8d5617e3f..36a42f65e 100644 --- a/data/maps/Route1/scripts.inc +++ b/data/maps/Route1/scripts.inc @@ -1,11 +1,11 @@ Route1_MapScripts:: @ 8167EFD .byte 0 -Route1_EventScript_167EFE:: @ 8167EFE +Route1_EventScript_MartClerk:: @ 8167EFE lock faceplayer - goto_if_set FLAG_GOT_POTION_ON_ROUTE_1, EventScript_167F48 - msgbox gUnknown_818329D + goto_if_set FLAG_GOT_POTION_ON_ROUTE_1, Route1_EventScript_AlreadyGotPotion + msgbox Route1_Text_WorkAtPokeMartTakeSample textcolor 3 checkitemspace ITEM_POTION, 1 compare VAR_RESULT, FALSE @@ -16,21 +16,21 @@ Route1_EventScript_167EFE:: @ 8167EFE waitmessage waitfanfare additem ITEM_POTION - msgbox gUnknown_8183387 + msgbox Route1_Text_PutPotionAway call EventScript_1A6675 setflag FLAG_GOT_POTION_ON_ROUTE_1 release end -EventScript_167F48:: @ 8167F48 - msgbox gUnknown_8183347 +Route1_EventScript_AlreadyGotPotion:: @ 8167F48 + msgbox Route1_Text_ComeSeeUsIfYouNeedPokeBalls release end -Route1_EventScript_167F52:: @ 8167F52 - msgbox gUnknown_81833B9, MSGBOX_NPC +Route1_EventScript_Boy:: @ 8167F52 + msgbox Route1_Text_CanJumpFromLedges, MSGBOX_NPC end -Route1_EventScript_167F5B:: @ 8167F5B - msgbox gUnknown_818343A, MSGBOX_SIGN +Route1_EventScript_RouteSign:: @ 8167F5B + msgbox Route1_Text_RouteSign, MSGBOX_SIGN end diff --git a/data/maps/Route1/text.inc b/data/maps/Route1/text.inc index 7b4150b03..57ebecb86 100644 --- a/data/maps/Route1/text.inc +++ b/data/maps/Route1/text.inc @@ -1,4 +1,4 @@ -gUnknown_818329D:: @ 818329D +Route1_Text_WorkAtPokeMartTakeSample:: @ 818329D .string "Hi!\n" .string "I work at a POKéMON MART.\p" .string "It's part of a convenient chain\n" @@ -7,22 +7,22 @@ gUnknown_818329D:: @ 818329D .string "I know, I'll give you a sample.\n" .string "Here you go!$" -gUnknown_8183347:: @ 8183347 +Route1_Text_ComeSeeUsIfYouNeedPokeBalls:: @ 8183347 .string "Please come see us if you need\n" .string "POKé BALLS for catching POKéMON.$" -gUnknown_8183387:: @ 8183387 +Route1_Text_PutPotionAway:: @ 8183387 .string "{PLAYER} put the POTION away in\n" .string "the BAG's ITEMS POCKET.$" -gUnknown_81833B9:: @ 81833B9 +Route1_Text_CanJumpFromLedges:: @ 81833B9 .string "See those ledges along the road?\p" .string "It's a bit scary, but you can jump\n" .string "from them.\p" .string "You can get back to PALLET TOWN\n" .string "quicker that way.$" -gUnknown_818343A:: @ 818343A +Route1_Text_RouteSign:: @ 818343A .string "ROUTE 1\n" .string "PALLET TOWN - VIRIDIAN CITY$" diff --git a/data/maps/Route10_PokemonCenter_1F/scripts.inc b/data/maps/Route10_PokemonCenter_1F/scripts.inc index f81563b0c..56e0b448e 100644 --- a/data/maps/Route10_PokemonCenter_1F/scripts.inc +++ b/data/maps/Route10_PokemonCenter_1F/scripts.inc @@ -34,17 +34,17 @@ Route10_PokemonCenter_1F_EventScript_16FC65:: @ 816FC65 goto_if_set FLAG_GOT_EVERSTONE_FROM_OAKS_AIDE, EventScript_16FCE7 msgbox gUnknown_819E5FB, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_1A7AD1 + goto_if_eq Aide_EventScript_DeclineCheckMons setvar VAR_0x8004, 0 specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 call EventScript_16FCF1 compare VAR_0x8006, 20 - goto_if_lt EventScript_1A7ABD + goto_if_lt Aide_EventScript_HaventCaughtEnough msgbox gUnknown_819E733 checkitemspace ITEM_EVERSTONE, 1 compare VAR_RESULT, FALSE - goto_if_eq EventScript_1A7AC7 + goto_if_eq Aide_EventScript_NoRoomForItem giveitem_msg gUnknown_819E786, ITEM_EVERSTONE setflag FLAG_GOT_EVERSTONE_FROM_OAKS_AIDE msgbox gUnknown_819E7AF diff --git a/data/maps/Route11_EastEntrance_2F/scripts.inc b/data/maps/Route11_EastEntrance_2F/scripts.inc index 68b520e47..91a6d20bd 100644 --- a/data/maps/Route11_EastEntrance_2F/scripts.inc +++ b/data/maps/Route11_EastEntrance_2F/scripts.inc @@ -61,17 +61,17 @@ Route11_EastEntrance_2F_EventScript_16FDD8:: @ 816FDD8 goto_if_set FLAG_GOT_ITEMFINDER, EventScript_16FE5A msgbox gUnknown_819E9E5, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_1A7AD1 + goto_if_eq Aide_EventScript_DeclineCheckMons setvar VAR_0x8004, 0 specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 call EventScript_16FE64 compare VAR_0x8006, 30 - goto_if_lt EventScript_1A7ABD + goto_if_lt Aide_EventScript_HaventCaughtEnough msgbox gUnknown_819EAE4 checkitemspace ITEM_ITEMFINDER, 1 compare VAR_RESULT, FALSE - goto_if_eq EventScript_1A7AC7 + goto_if_eq Aide_EventScript_NoRoomForItem giveitem_msg gUnknown_819EB37, ITEM_ITEMFINDER setflag FLAG_GOT_ITEMFINDER msgbox gUnknown_819EB59 diff --git a/data/maps/Route15_WestEntrance_2F/scripts.inc b/data/maps/Route15_WestEntrance_2F/scripts.inc index c4cc4b6fd..088a65876 100644 --- a/data/maps/Route15_WestEntrance_2F/scripts.inc +++ b/data/maps/Route15_WestEntrance_2F/scripts.inc @@ -24,17 +24,17 @@ Route15_WestEntrance_2F_EventScript_1700B9:: @ 81700B9 goto_if_set FLAG_GOT_EXP_SHARE_FROM_OAKS_AIDE, EventScript_17013B msgbox gUnknown_819F5AB, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_1A7AD1 + goto_if_eq Aide_EventScript_DeclineCheckMons setvar VAR_0x8004, 0 specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 call EventScript_170145 compare VAR_0x8006, 50 - goto_if_lt EventScript_1A7ABD + goto_if_lt Aide_EventScript_HaventCaughtEnough msgbox gUnknown_819F6AA checkitemspace ITEM_EXP_SHARE, 1 compare VAR_RESULT, FALSE - goto_if_eq EventScript_1A7AC7 + goto_if_eq Aide_EventScript_NoRoomForItem giveitem_msg gUnknown_819F6FD, ITEM_EXP_SHARE setflag FLAG_GOT_EXP_SHARE_FROM_OAKS_AIDE msgbox gUnknown_819F71F diff --git a/data/maps/Route16_NorthEntrance_2F/scripts.inc b/data/maps/Route16_NorthEntrance_2F/scripts.inc index 2dfd8f1b0..7ccba34c8 100644 --- a/data/maps/Route16_NorthEntrance_2F/scripts.inc +++ b/data/maps/Route16_NorthEntrance_2F/scripts.inc @@ -24,17 +24,17 @@ Route16_NorthEntrance_2F_EventScript_1702E3:: @ 81702E3 goto_if_set FLAG_GOT_AMULET_COIN_FROM_OAKS_AIDE, EventScript_170365 msgbox gUnknown_819FB0E, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_1A7AD1 + goto_if_eq Aide_EventScript_DeclineCheckMons setvar VAR_0x8004, 0 specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 call EventScript_17036F compare VAR_0x8006, 40 - goto_if_lt EventScript_1A7ABD + goto_if_lt Aide_EventScript_HaventCaughtEnough msgbox gUnknown_819FC15 checkitemspace ITEM_AMULET_COIN, 1 compare VAR_RESULT, FALSE - goto_if_eq EventScript_1A7AC7 + goto_if_eq Aide_EventScript_NoRoomForItem giveitem_msg gUnknown_819FC68, ITEM_AMULET_COIN setflag FLAG_GOT_AMULET_COIN_FROM_OAKS_AIDE msgbox gUnknown_819FC93 diff --git a/data/maps/Route2/map.json b/data/maps/Route2/map.json index ac504faae..86be51055 100644 --- a/data/maps/Route2/map.json +++ b/data/maps/Route2/map.json @@ -195,14 +195,14 @@ "x": 14, "y": 12, "elevation": 0, - "script": "Route2_EventScript_167F6E" + "script": "Route2_EventScript_DiglettsCaveSign" }, { "type": "bg_event_type_0", "x": 7, "y": 73, "elevation": 0, - "script": "Route2_EventScript_167F65" + "script": "Route2_EventScript_RouteSign" } ] } diff --git a/data/maps/Route2/scripts.inc b/data/maps/Route2/scripts.inc index 75a3dd87b..2ecb31d72 100644 --- a/data/maps/Route2/scripts.inc +++ b/data/maps/Route2/scripts.inc @@ -1,10 +1,10 @@ Route2_MapScripts:: @ 8167F64 .byte 0 -Route2_EventScript_167F65:: @ 8167F65 - msgbox gUnknown_818345E, MSGBOX_SIGN +Route2_EventScript_RouteSign:: @ 8167F65 + msgbox Route2_Text_RouteSign, MSGBOX_SIGN end -Route2_EventScript_167F6E:: @ 8167F6E - msgbox gUnknown_8183482, MSGBOX_SIGN +Route2_EventScript_DiglettsCaveSign:: @ 8167F6E + msgbox Route2_Text_DiglettsCave, MSGBOX_SIGN end diff --git a/data/maps/Route2/text.inc b/data/maps/Route2/text.inc index 4197b7071..1ca497d6b 100644 --- a/data/maps/Route2/text.inc +++ b/data/maps/Route2/text.inc @@ -1,7 +1,7 @@ -gUnknown_818345E:: @ 818345E +Route2_Text_RouteSign:: @ 818345E .string "ROUTE 2\n" .string "VIRIDIAN CITY - PEWTER CITY$" -gUnknown_8183482:: @ 8183482 +Route2_Text_DiglettsCave:: @ 8183482 .string "DIGLETT'S CAVE$" diff --git a/data/maps/Route21_North/text.inc b/data/maps/Route21_North/text.inc new file mode 100644 index 000000000..e8fc3223a --- /dev/null +++ b/data/maps/Route21_North/text.inc @@ -0,0 +1,48 @@ +Text_1882E1:: @ 81882E1 + .string "Strong TRAINERS and WATER POKéMON\n" + .string "are common sights in these parts.\p" + .string "They say that MISTY of the\n" + .string "CERULEAN GYM trains here.$" + +Text_18835A:: @ 818835A + .string "You want to know if the fish are\n" + .string "biting?$" + +Text_188383:: @ 8188383 + .string "Dang!$" + +Text_188389:: @ 8188389 + .string "I can't catch anything good.\n" + .string "Not one good POKéMON to be had!$" + +Text_1883C6:: @ 81883C6 + .string "I got a big haul!\n" + .string "Wanna go for it?$" + +Text_1883E9:: @ 81883E9 + .string "Heheh, MAGIKARP just don't make\n" + .string "the grade, do they?$" + +Text_18841D:: @ 818841D + .string "I seem to only catch MAGIKARP!$" + +Text_18843C:: @ 818843C + .string "The sea cleanses my body and soul!$" + +Text_18845F:: @ 818845F + .string "Ayah!$" + +Text_188465:: @ 8188465 + .string "The sea is great and all, but I\n" + .string "like the mountains, too.$" + +Text_18849E:: @ 818849E + .string "おれだって たまには\n" + .string "およぎに くるぜ!$" + +Text_1884B3:: @ 81884B3 + .string "ぐわわ!$" + +Text_1884B8:: @ 81884B8 + .string "うきやすそう だと?\n" + .string "うるせー おおきな おせわだッ!$" diff --git a/data/maps/Route21_South/text.inc b/data/maps/Route21_South/text.inc new file mode 100644 index 000000000..8700006ef --- /dev/null +++ b/data/maps/Route21_South/text.inc @@ -0,0 +1,87 @@ +Text_1884D4:: @ 81884D4 + .string "I caught my POKéMON at sea.$" + +Text_1884F0:: @ 81884F0 + .string "Diver!!\n" + .string "Down!!$" + +Text_1884FF:: @ 81884FF + .string "Where'd you catch your POKéMON?$" + +Text_18851F:: @ 818851F + .string "Right now, I'm in a triathlon meet.$" + +Text_188543:: @ 8188543 + .string "Pant…\n" + .string "Pant… Pant…$" + +Text_188555:: @ 8188555 + .string "I'm beat! But, I still have the\n" + .string "bike race and marathon left!$" + +Text_188592:: @ 8188592 + .string "Ahh!\n" + .string "Feel the sun and the wind!$" + +Text_1885B2:: @ 81885B2 + .string "Yow!\n" + .string "I lost!$" + +Text_1885BF:: @ 81885BF + .string "I'm sunburnt to a crisp!$" + +Text_1885D8:: @ 81885D8 + .string "Hey, don't scare away the fish!$" + +Text_1885F8:: @ 81885F8 + .string "Sorry! I'm just so frustrated from\n" + .string "not catching anything.$" + +Text_188632:: @ 8188632 + .string "Sheesh, I haven't caught a thing.\n" + .string "Could this place actually be a\l" + .string "giant pool or something?$" + +Text_18868C:: @ 818868C + .string "Keep me company till I get a hit.$" + +Text_1886AE:: @ 81886AE + .string "That burned some time.$" + +Text_1886C5:: @ 81886C5 + .string "Oh wait!\n" + .string "I got a bite! Yeah!$" + +Text_1886E2:: @ 81886E2 + .string "LIL: Huh? A battle?\n" + .string "IAN, can't you do it alone?$" + +Text_188712:: @ 8188712 + .string "LIL: Oh, see?\n" + .string "We lost. Happy now?$" + +Text_188734:: @ 8188734 + .string "LIL: I'm tired.\n" + .string "Can't we go home already?$" + +Text_18875E:: @ 818875E + .string "LIL: Huh? A battle?\n" + .string "I can't be bothered to do it alone.\l" + .string "Bring two POKéMON, won't you?$" + +Text_1887B4:: @ 81887B4 + .string "IAN: My sis doesn't get enough\n" + .string "exercise, so I made her come.$" + +Text_1887F1:: @ 81887F1 + .string "IAN: Awww, Sis!\n" + .string "Get it together!$" + +Text_188812:: @ 8188812 + .string "IAN: Come on, Sis!\p" + .string "You're not going to lose weight\n" + .string "like this!$" + +Text_188850:: @ 8188850 + .string "IAN: We want a two-on-two battle.\n" + .string "So can you bring two POKéMON?$" diff --git a/data/maps/Route22/map.json b/data/maps/Route22/map.json index c6f903acc..e8695121f 100644 --- a/data/maps/Route22/map.json +++ b/data/maps/Route22/map.json @@ -62,7 +62,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_ROUTE22", "var_value": 1, - "script": "Route22_EventScript_16828C" + "script": "Route22_EventScript_EarlyRivalTriggerTop" }, { "type": "trigger", @@ -71,7 +71,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_ROUTE22", "var_value": 1, - "script": "Route22_EventScript_168298" + "script": "Route22_EventScript_EarlyRivalTriggerMid" }, { "type": "trigger", @@ -80,7 +80,7 @@ "elevation": 0, "var": "VAR_MAP_SCENE_ROUTE22", "var_value": 1, - "script": "Route22_EventScript_1682AB" + "script": "Route22_EventScript_EarlyRivalTriggerBottom" }, { "type": "trigger", @@ -89,7 +89,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_ROUTE22", "var_value": 3, - "script": "Route22_EventScript_1683ED" + "script": "Route22_EventScript_LateRivalTriggerTop" }, { "type": "trigger", @@ -98,7 +98,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_ROUTE22", "var_value": 3, - "script": "Route22_EventScript_1683F9" + "script": "Route22_EventScript_LateRivalTriggerMid" }, { "type": "trigger", @@ -107,7 +107,7 @@ "elevation": 0, "var": "VAR_MAP_SCENE_ROUTE22", "var_value": 3, - "script": "Route22_EventScript_16840C" + "script": "Route22_EventScript_LateRivalTriggerBottom" } ], "bg_events": [ @@ -116,7 +116,7 @@ "x": 7, "y": 12, "elevation": 0, - "script": "Route22_EventScript_1684E2" + "script": "Route22_EventScript_LeagueGateSign" } ] } diff --git a/data/maps/Route22/scripts.inc b/data/maps/Route22/scripts.inc index 8036883f3..dbc10e129 100644 --- a/data/maps/Route22/scripts.inc +++ b/data/maps/Route22/scripts.inc @@ -1,100 +1,94 @@ Route22_MapScripts:: @ 816828B .byte 0 -Route22_EventScript_16828C:: @ 816828C +Route22_EventScript_EarlyRivalTriggerTop:: @ 816828C lockall setvar VAR_TEMP_1, 0 - goto EventScript_1682BE - -EventScript_168297:: @ 8168297 + goto Route22_EventScript_EarlyRival end -Route22_EventScript_168298:: @ 8168298 +Route22_EventScript_EarlyRivalTriggerMid:: @ 8168298 lockall setvar VAR_TEMP_1, 1 setobjectxyperm 1, 25, 5 - goto EventScript_1682BE - -EventScript_1682AA:: @ 81682AA + goto Route22_EventScript_EarlyRival end -Route22_EventScript_1682AB:: @ 81682AB +Route22_EventScript_EarlyRivalTriggerBottom:: @ 81682AB lockall setvar VAR_TEMP_1, 2 setobjectxyperm 1, 25, 5 - goto EventScript_1682BE - -EventScript_1682BD:: @ 81682BD + goto Route22_EventScript_EarlyRival end -EventScript_1682BE:: @ 81682BE +Route22_EventScript_EarlyRival:: @ 81682BE textcolor 0 playbgm MUS_RIVAL1, 0 addobject 1 compare VAR_TEMP_1, 0 - call_if_eq EventScript_168350 + call_if_eq Route22_EventScript_EarlyRivalApproach compare VAR_TEMP_1, 1 - call_if_eq EventScript_168350 + call_if_eq Route22_EventScript_EarlyRivalApproach compare VAR_TEMP_1, 2 - call_if_eq EventScript_16835B + call_if_eq Route22_EventScript_EarlyRivalApproachBottom delay 6 - msgbox gUnknown_8188890 + msgbox Route22_Text_EarlyRivalIntro compare VAR_STARTER_MON, 2 - call_if_eq EventScript_16836D + call_if_eq Route22_EventScript_EarlyRivalSquirtle compare VAR_STARTER_MON, 1 - call_if_eq EventScript_16837C + call_if_eq Route22_EventScript_EarlyRivalBulbasaur compare VAR_STARTER_MON, 0 - call_if_eq EventScript_16838B - msgbox gUnknown_8188974 + call_if_eq Route22_EventScript_EarlyRivalCharmander + msgbox Route22_Text_EarlyRivalPostBattle closemessage delay 10 playbgm MUS_RIVAL2, 0 compare VAR_TEMP_1, 0 - call_if_eq EventScript_16839A + call_if_eq Route22_EventScript_EarlyRivalExit compare VAR_TEMP_1, 1 - call_if_eq EventScript_16839A + call_if_eq Route22_EventScript_EarlyRivalExit compare VAR_TEMP_1, 2 - call_if_eq EventScript_1683A5 + call_if_eq Route22_EventScript_EarlyRivalExitBottom fadedefaultbgm removeobject 1 setvar VAR_MAP_SCENE_ROUTE22, 2 releaseall end -EventScript_168350:: @ 8168350 - applymovement 1, Movement_1683D1 +Route22_EventScript_EarlyRivalApproach:: @ 8168350 + applymovement 1, Route22_Movement_RivalApproach waitmovement 0 return -EventScript_16835B:: @ 816835B - applymovement 1, Movement_1683D9 - applymovement OBJ_EVENT_ID_PLAYER, Movement_1683E3 +Route22_EventScript_EarlyRivalApproachBottom:: @ 816835B + applymovement 1, Route22_Movement_RivalApproachBottom + applymovement OBJ_EVENT_ID_PLAYER, Route22_Movement_PlayerFaceRival waitmovement 0 return -EventScript_16836D:: @ 816836D - trainerbattle_tutorial TRAINER_RIVAL_ROUTE22_EARLY_SQUIRTLE, 0, Text_188959, Text_18DE1A +Route22_EventScript_EarlyRivalSquirtle:: @ 816836D + trainerbattle_earlyrival TRAINER_RIVAL_ROUTE22_EARLY_SQUIRTLE, 0, Route22_Text_EarlyRivalDefeat, Text_RivalVictory return -EventScript_16837C:: @ 816837C - trainerbattle_tutorial TRAINER_RIVAL_ROUTE22_EARLY_BULBASAUR, 0, Text_188959, Text_18DE1A +Route22_EventScript_EarlyRivalBulbasaur:: @ 816837C + trainerbattle_earlyrival TRAINER_RIVAL_ROUTE22_EARLY_BULBASAUR, 0, Route22_Text_EarlyRivalDefeat, Text_RivalVictory return -EventScript_16838B:: @ 816838B - trainerbattle_tutorial TRAINER_RIVAL_ROUTE22_EARLY_CHARMANDER, 0, Text_188959, Text_18DE1A +Route22_EventScript_EarlyRivalCharmander:: @ 816838B + trainerbattle_earlyrival TRAINER_RIVAL_ROUTE22_EARLY_CHARMANDER, 0, Route22_Text_EarlyRivalDefeat, Text_RivalVictory return -EventScript_16839A:: @ 816839A - applymovement 1, Movement_1683B8 +Route22_EventScript_EarlyRivalExit:: @ 816839A + applymovement 1, Route22_Movement_EarlyRivalExit waitmovement 0 return -EventScript_1683A5:: @ 81683A5 - applymovement 1, Movement_1683C5 +Route22_EventScript_EarlyRivalExitBottom:: @ 81683A5 + applymovement 1, Route22_Movement_EarlyRivalExitBottom waitmovement 0 return -Movement_1683B0:: @ 8 +Route22_Movement_UnusedRivalExit:: @ 8 walk_right walk_right walk_right @@ -104,7 +98,7 @@ Movement_1683B0:: @ 8 walk_right step_end -Movement_1683B8:: @ 81683B8 +Route22_Movement_EarlyRivalExit:: @ 81683B8 walk_down walk_right walk_right @@ -119,7 +113,7 @@ Movement_1683B8:: @ 81683B8 walk_down step_end -Movement_1683C5:: @ 81683C5 +Route22_Movement_EarlyRivalExitBottom:: @ 81683C5 walk_right walk_right walk_right @@ -133,7 +127,7 @@ Movement_1683C5:: @ 81683C5 walk_down step_end -Movement_1683D1:: @ 81683D1 +Route22_Movement_RivalApproach:: @ 81683D1 walk_right walk_right walk_right @@ -143,7 +137,7 @@ Movement_1683D1:: @ 81683D1 walk_right step_end -Movement_1683D9:: @ 81683D9 +Route22_Movement_RivalApproachBottom:: @ 81683D9 walk_right walk_right walk_right @@ -155,7 +149,7 @@ Movement_1683D9:: @ 81683D9 walk_in_place_fastest_down step_end -Movement_1683E3:: @ 81683E3 +Route22_Movement_PlayerFaceRival:: @ 81683E3 delay_16 delay_16 delay_16 @@ -167,55 +161,49 @@ Movement_1683E3:: @ 81683E3 walk_in_place_fastest_up step_end -Route22_EventScript_1683ED:: @ 81683ED +Route22_EventScript_LateRivalTriggerTop:: @ 81683ED lockall setvar VAR_TEMP_1, 0 - goto EventScript_16841F - -EventScript_1683F8:: @ 81683F8 + goto Route22_EventScript_LateRival end -Route22_EventScript_1683F9:: @ 81683F9 +Route22_EventScript_LateRivalTriggerMid:: @ 81683F9 lockall setvar VAR_TEMP_1, 1 setobjectxyperm 1, 25, 5 - goto EventScript_16841F - -EventScript_16840B:: @ 816840B + goto Route22_EventScript_LateRival end -Route22_EventScript_16840C:: @ 816840C +Route22_EventScript_LateRivalTriggerBottom:: @ 816840C lockall setvar VAR_TEMP_1, 2 setobjectxyperm 1, 25, 5 - goto EventScript_16841F - -EventScript_16841E:: @ 816841E + goto Route22_EventScript_LateRival end -EventScript_16841F:: @ 816841F +Route22_EventScript_LateRival:: @ 816841F textcolor 0 playbgm MUS_RIVAL1, 0 addobject 1 compare VAR_TEMP_1, 0 - call_if_eq EventScript_16849C + call_if_eq Route22_EventScript_LateRivalApproach compare VAR_TEMP_1, 1 - call_if_eq EventScript_16849C + call_if_eq Route22_EventScript_LateRivalApproach compare VAR_TEMP_1, 2 - call_if_eq EventScript_1684A7 - msgbox gUnknown_8188A3C + call_if_eq Route22_EventScript_LateRivalApproachBottom + msgbox Route22_Text_LateRivalIntro setvar VAR_LAST_TALKED, 1 compare VAR_STARTER_MON, 2 - call_if_eq EventScript_1684B9 + call_if_eq Route22_EventScript_LateRivalSquirtle compare VAR_STARTER_MON, 1 - call_if_eq EventScript_1684C4 + call_if_eq Route22_EventScript_LateRivalBulbasaur compare VAR_STARTER_MON, 0 - call_if_eq EventScript_1684CF - msgbox gUnknown_8188B29 + call_if_eq Route22_EventScript_LateRivalCharmander + msgbox Route22_Text_LateRivalPostBattle closemessage delay 10 playbgm MUS_RIVAL2, 0 - applymovement 1, Movement_1684DA + applymovement 1, Route22_Movement_LateRivalExit waitmovement 0 fadedefaultbgm removeobject 1 @@ -223,30 +211,30 @@ EventScript_16841F:: @ 816841F releaseall end -EventScript_16849C:: @ 816849C - applymovement 1, Movement_1683D1 +Route22_EventScript_LateRivalApproach:: @ 816849C + applymovement 1, Route22_Movement_RivalApproach waitmovement 0 return -EventScript_1684A7:: @ 81684A7 - applymovement 1, Movement_1683D9 - applymovement OBJ_EVENT_ID_PLAYER, Movement_1683E3 +Route22_EventScript_LateRivalApproachBottom:: @ 81684A7 + applymovement 1, Route22_Movement_RivalApproachBottom + applymovement OBJ_EVENT_ID_PLAYER, Route22_Movement_PlayerFaceRival waitmovement 0 return -EventScript_1684B9:: @ 81684B9 - trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_SQUIRTLE, Text_188B08 +Route22_EventScript_LateRivalSquirtle:: @ 81684B9 + trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_SQUIRTLE, Route22_Text_LateRivalDefeat return -EventScript_1684C4:: @ 81684C4 - trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_BULBASAUR, Text_188B08 +Route22_EventScript_LateRivalBulbasaur:: @ 81684C4 + trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_BULBASAUR, Route22_Text_LateRivalDefeat return -EventScript_1684CF:: @ 81684CF - trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_CHARMANDER, Text_188B08 +Route22_EventScript_LateRivalCharmander:: @ 81684CF + trainerbattle_no_intro TRAINER_RIVAL_ROUTE22_LATE_CHARMANDER, Route22_Text_LateRivalDefeat return -Movement_1684DA:: @ 81684DA +Route22_Movement_LateRivalExit:: @ 81684DA walk_left walk_left walk_left @@ -256,6 +244,6 @@ Movement_1684DA:: @ 81684DA walk_left step_end -Route22_EventScript_1684E2:: @ 81684E2 - msgbox gUnknown_8188BFF, MSGBOX_SIGN +Route22_EventScript_LeagueGateSign:: @ 81684E2 + msgbox Route22_Text_LeagueGateSign, MSGBOX_SIGN end diff --git a/data/maps/Route22/text.inc b/data/maps/Route22/text.inc index 7bfe6931b..72b4ca28b 100644 --- a/data/maps/Route22/text.inc +++ b/data/maps/Route22/text.inc @@ -1,201 +1,66 @@ -Text_1882E1:: @ 81882E1 - .string "Strong TRAINERS and WATER POKéMON\n" - .string "are common sights in these parts.\p" - .string "They say that MISTY of the\n" - .string "CERULEAN GYM trains here.$" - -Text_18835A:: @ 818835A - .string "You want to know if the fish are\n" - .string "biting?$" - -Text_188383:: @ 8188383 - .string "Dang!$" - -Text_188389:: @ 8188389 - .string "I can't catch anything good.\n" - .string "Not one good POKéMON to be had!$" - -Text_1883C6:: @ 81883C6 - .string "I got a big haul!\n" - .string "Wanna go for it?$" - -Text_1883E9:: @ 81883E9 - .string "Heheh, MAGIKARP just don't make\n" - .string "the grade, do they?$" - -Text_18841D:: @ 818841D - .string "I seem to only catch MAGIKARP!$" - -Text_18843C:: @ 818843C - .string "The sea cleanses my body and soul!$" - -Text_18845F:: @ 818845F - .string "Ayah!$" - -Text_188465:: @ 8188465 - .string "The sea is great and all, but I\n" - .string "like the mountains, too.$" - -Text_18849E:: @ 818849E - .string "おれだって たまには\n" - .string "およぎに くるぜ!$" - -Text_1884B3:: @ 81884B3 - .string "ぐわわ!$" - -Text_1884B8:: @ 81884B8 - .string "うきやすそう だと?\n" - .string "うるせー おおきな おせわだッ!$" - -Text_1884D4:: @ 81884D4 - .string "I caught my POKéMON at sea.$" - -Text_1884F0:: @ 81884F0 - .string "Diver!!\n" - .string "Down!!$" - -Text_1884FF:: @ 81884FF - .string "Where'd you catch your POKéMON?$" - -Text_18851F:: @ 818851F - .string "Right now, I'm in a triathlon meet.$" - -Text_188543:: @ 8188543 - .string "Pant…\n" - .string "Pant… Pant…$" - -Text_188555:: @ 8188555 - .string "I'm beat! But, I still have the\n" - .string "bike race and marathon left!$" - -Text_188592:: @ 8188592 - .string "Ahh!\n" - .string "Feel the sun and the wind!$" - -Text_1885B2:: @ 81885B2 - .string "Yow!\n" - .string "I lost!$" - -Text_1885BF:: @ 81885BF - .string "I'm sunburnt to a crisp!$" - -Text_1885D8:: @ 81885D8 - .string "Hey, don't scare away the fish!$" - -Text_1885F8:: @ 81885F8 - .string "Sorry! I'm just so frustrated from\n" - .string "not catching anything.$" - -Text_188632:: @ 8188632 - .string "Sheesh, I haven't caught a thing.\n" - .string "Could this place actually be a\l" - .string "giant pool or something?$" - -Text_18868C:: @ 818868C - .string "Keep me company till I get a hit.$" - -Text_1886AE:: @ 81886AE - .string "That burned some time.$" - -Text_1886C5:: @ 81886C5 - .string "Oh wait!\n" - .string "I got a bite! Yeah!$" - -Text_1886E2:: @ 81886E2 - .string "LIL: Huh? A battle?\n" - .string "IAN, can't you do it alone?$" - -Text_188712:: @ 8188712 - .string "LIL: Oh, see?\n" - .string "We lost. Happy now?$" - -Text_188734:: @ 8188734 - .string "LIL: I'm tired.\n" - .string "Can't we go home already?$" - -Text_18875E:: @ 818875E - .string "LIL: Huh? A battle?\n" - .string "I can't be bothered to do it alone.\l" - .string "Bring two POKéMON, won't you?$" - -Text_1887B4:: @ 81887B4 - .string "IAN: My sis doesn't get enough\n" - .string "exercise, so I made her come.$" - -Text_1887F1:: @ 81887F1 - .string "IAN: Awww, Sis!\n" - .string "Get it together!$" - -Text_188812:: @ 8188812 - .string "IAN: Come on, Sis!\p" - .string "You're not going to lose weight\n" - .string "like this!$" - -Text_188850:: @ 8188850 - .string "IAN: We want a two-on-two battle.\n" - .string "So can you bring two POKéMON?$" - -gUnknown_8188890:: @ 8188890 - .string "{RIVAL}: Hey! {PLAYER}!\p" - .string "You're off to the POKéMON LEAGUE?\n" - .string "Forget about it!\p" - .string "You probably don't have any\n" - .string "BADGES, do you?\p" - .string "The guard won't let you through\n" - .string "without them.\p" - .string "By the way, did your POKéMON get\n" - .string "any stronger?$" - -Text_188959:: @ 8188959 - .string "Awww!\n" - .string "You just lucked out!$" - -gUnknown_8188974:: @ 8188974 - .string "I heard the POKéMON LEAGUE is\n" - .string "crawling with tough TRAINERS.\p" - .string "I have to figure out how to get\n" - .string "past them.\p" - .string "You should quit dawdling and get a\n" - .string "move on!$" - -Text_188A07:: @ 8188A07 - .string "{RIVAL}“なんだ?\n" - .string "ポケモン 2ひきも\l" - .string "もってるの なぜか だって?\p" - .string "おまえも\n" - .string "つかまえれば いい じゃん!$" - -gUnknown_8188A3C:: @ 8188A3C - .string "{RIVAL}: What? {PLAYER}!\n" - .string "What a surprise to see you here!\p" - .string "So you're going to the POKéMON\n" - .string "LEAGUE?\p" - .string "You collected all the BADGES, too?\n" - .string "That's cool!\p" - .string "Then I'll whip you, {PLAYER}, as a\n" - .string "warm-up for the POKéMON LEAGUE!\p" - .string "Come on!$" - -Text_188B08:: @ 8188B08 - .string "What!?\p" - .string "I was just careless, you!$" - -gUnknown_8188B29:: @ 8188B29 - .string "That loosened me up.\n" - .string "I'm ready for the POKéMON LEAGUE!\p" - .string "{PLAYER}, you need more practice.\p" - .string "But hey, you know that!\n" - .string "I'm out of here. Smell ya!$" - -Text_188BAF:: @ 8188BAF - .string "{RIVAL}“ひゃははッ {PLAYER}ー!\n" - .string "それで がんばってるのかよ!\l" - .string "おれの さいのうに くらべりゃ\l" - .string "{PLAYER}は まだまだ だな!\p" - .string "もっと れんしゅう こいよ!\n" - .string "あははーッ!$" - -gUnknown_8188BFF:: @ 8188BFF - .string "POKéMON LEAGUE\n" - .string "Front Gate$" +Route22_Text_EarlyRivalIntro:: @ 8188890 + .string "{RIVAL}: Hey! {PLAYER}!\p" + .string "You're off to the POKéMON LEAGUE?\n" + .string "Forget about it!\p" + .string "You probably don't have any\n" + .string "BADGES, do you?\p" + .string "The guard won't let you through\n" + .string "without them.\p" + .string "By the way, did your POKéMON get\n" + .string "any stronger?$" + +Route22_Text_EarlyRivalDefeat:: @ 8188959 + .string "Awww!\n" + .string "You just lucked out!$" + +Route22_Text_EarlyRivalPostBattle:: @ 8188974 + .string "I heard the POKéMON LEAGUE is\n" + .string "crawling with tough TRAINERS.\p" + .string "I have to figure out how to get\n" + .string "past them.\p" + .string "You should quit dawdling and get a\n" + .string "move on!$" + +@ Translated in RB as "{RIVAL}: What? Why do I have 2 POKéMON? You should catch some more too!" +Route22_Text_RivalShouldCatchSomeMons:: @ 8188A07 + .string "{RIVAL}“なんだ?\n" + .string "ポケモン 2ひきも\l" + .string "もってるの なぜか だって?\p" + .string "おまえも\n" + .string "つかまえれば いい じゃん!$" + +Route22_Text_LateRivalIntro:: @ 8188A3C + .string "{RIVAL}: What? {PLAYER}!\n" + .string "What a surprise to see you here!\p" + .string "So you're going to the POKéMON\n" + .string "LEAGUE?\p" + .string "You collected all the BADGES, too?\n" + .string "That's cool!\p" + .string "Then I'll whip you, {PLAYER}, as a\n" + .string "warm-up for the POKéMON LEAGUE!\p" + .string "Come on!$" + +Route22_Text_LateRivalDefeat:: @ 8188B08 + .string "What!?\p" + .string "I was just careless, you!$" + +Route22_Text_LateRivalPostBattle:: @ 8188B29 + .string "That loosened me up.\n" + .string "I'm ready for the POKéMON LEAGUE!\p" + .string "{PLAYER}, you need more practice.\p" + .string "But hey, you know that!\n" + .string "I'm out of here. Smell ya!$" + +@ Translated in RB as "{RIVAL}: Hahaha! {PLAYER}! That's your best? You're nowhere near as good as me, pal! Go train some more! You loser!" +Route22_Text_LateRivalVictory:: @ 8188BAF + .string "{RIVAL}“ひゃははッ {PLAYER}ー!\n" + .string "それで がんばってるのかよ!\l" + .string "おれの さいのうに くらべりゃ\l" + .string "{PLAYER}は まだまだ だな!\p" + .string "もっと れんしゅう こいよ!\n" + .string "あははーッ!$" + +Route22_Text_LeagueGateSign:: @ 8188BFF + .string "POKéMON LEAGUE\n" + .string "Front Gate$" diff --git a/data/maps/Route2_EastBuilding/map.json b/data/maps/Route2_EastBuilding/map.json index 2367b0b91..e966962c6 100644 --- a/data/maps/Route2_EastBuilding/map.json +++ b/data/maps/Route2_EastBuilding/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route2_EastBuilding_EventScript_16F67F", + "script": "Route2_EastBuilding_EventScript_Aide", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route2_EastBuilding_EventScript_16F714", + "script": "Route2_EastBuilding_EventScript_Rocker", "flag": "0" } ], diff --git a/data/maps/Route2_EastBuilding/scripts.inc b/data/maps/Route2_EastBuilding/scripts.inc index cba95dc0b..a94d72fd7 100644 --- a/data/maps/Route2_EastBuilding/scripts.inc +++ b/data/maps/Route2_EastBuilding/scripts.inc @@ -1,40 +1,42 @@ +.equ REQUIRED_SEEN_MONS, 10 + Route2_EastBuilding_MapScripts:: @ 816F67E .byte 0 -Route2_EastBuilding_EventScript_16F67F:: @ 816F67F +Route2_EastBuilding_EventScript_Aide:: @ 816F67F lock faceplayer - call EventScript_16F70B - goto_if_set FLAG_GOT_HM05, EventScript_16F701 - msgbox gUnknown_819D64F, MSGBOX_YESNO + call Route2_EastBuilding_EventScript_GetAideRequestInfo + goto_if_set FLAG_GOT_HM05, Route2_EastBuilding_EventScript_AlreadyGotHM05 + msgbox Route2_EastBuilding_Text_GiveHM05IfSeen10Mons, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_1A7AD1 + goto_if_eq Aide_EventScript_DeclineCheckMons setvar VAR_0x8004, 0 specialvar VAR_RESULT, Special_GetPokedexCount getnumberstring 2, VAR_0x8006 - call EventScript_16F70B - compare VAR_0x8006, 10 - goto_if_lt EventScript_1A7ABD - msgbox gUnknown_819D74E + call Route2_EastBuilding_EventScript_GetAideRequestInfo + compare VAR_0x8006, REQUIRED_SEEN_MONS + goto_if_lt Aide_EventScript_HaventCaughtEnough + msgbox Route2_EastBuilding_Text_GreatHereYouGo checkitemspace ITEM_HM05, 1 compare VAR_RESULT, FALSE - goto_if_eq EventScript_1A7AC7 - giveitem_msg gUnknown_819D7A1, ITEM_HM05 + goto_if_eq Aide_EventScript_NoRoomForItem + giveitem_msg Route2_EastBuilding_Text_ReceivedHM05FromAide, ITEM_HM05 setflag FLAG_GOT_HM05 - msgbox gUnknown_819D7C1 + msgbox Route2_EastBuilding_Text_ExplainHM05 release end -EventScript_16F701:: @ 816F701 - msgbox gUnknown_819D7C1 +Route2_EastBuilding_EventScript_AlreadyGotHM05:: @ 816F701 + msgbox Route2_EastBuilding_Text_ExplainHM05 release end -EventScript_16F70B:: @ 816F70B - getnumberstring 0, 10 +Route2_EastBuilding_EventScript_GetAideRequestInfo:: @ 816F70B + getnumberstring 0, REQUIRED_SEEN_MONS getitemname 1, ITEM_HM05 return -Route2_EastBuilding_EventScript_16F714:: @ 816F714 - msgbox gUnknown_819D81E, MSGBOX_NPC +Route2_EastBuilding_EventScript_Rocker:: @ 816F714 + msgbox Route2_EastBuilding_Text_CanGetThroughRockTunnel, MSGBOX_NPC end diff --git a/data/maps/Route2_EastBuilding/text.inc b/data/maps/Route2_EastBuilding/text.inc index 228cf3c4d..1de4b8fc7 100644 --- a/data/maps/Route2_EastBuilding/text.inc +++ b/data/maps/Route2_EastBuilding/text.inc @@ -1,4 +1,4 @@ -gUnknown_819D64F:: @ 819D64F +Route2_EastBuilding_Text_GiveHM05IfSeen10Mons:: @ 819D64F .string "Hi! Remember me?\n" .string "I'm one of PROF. OAK's AIDES.\p" .string "If your POKéDEX has complete data\n" @@ -10,23 +10,23 @@ gUnknown_819D64F:: @ 819D64F .string "Have you gathered data on at least\n" .string "ten kinds of POKéMON?$" -gUnknown_819D74E:: @ 819D74E +Route2_EastBuilding_Text_GreatHereYouGo:: @ 819D74E .string "Great! You have caught or owned\n" .string "{STR_VAR_3} kinds of POKéMON!\p" .string "Congratulations!\n" .string "Here you go!$" -gUnknown_819D7A1:: @ 819D7A1 +Route2_EastBuilding_Text_ReceivedHM05FromAide:: @ 819D7A1 .string "{PLAYER} received HM05\n" .string "from the AIDE.$" -gUnknown_819D7C1:: @ 819D7C1 +Route2_EastBuilding_Text_ExplainHM05:: @ 819D7C1 .string "HM05 contains the hidden move\n" .string "FLASH.\p" .string "FLASH lights up even the darkest\n" .string "of caves and dungeons.$" -gUnknown_819D81E:: @ 819D81E +Route2_EastBuilding_Text_CanGetThroughRockTunnel:: @ 819D81E .string "Once a POKéMON learns FLASH, you\n" .string "can get through ROCK TUNNEL.$" diff --git a/data/maps/Route2_House/map.json b/data/maps/Route2_House/map.json index 4c4b7e790..8f9785c33 100644 --- a/data/maps/Route2_House/map.json +++ b/data/maps/Route2_House/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route2_House_EventScript_16F5F9", + "script": "Route2_House_EventScript_Scientist", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route2_House_EventScript_16F602", + "script": "Route2_House_EventScript_Reyley", "flag": "0" } ], diff --git a/data/maps/Route2_House/scripts.inc b/data/maps/Route2_House/scripts.inc index 2cdc2d8ec..6c442958c 100644 --- a/data/maps/Route2_House/scripts.inc +++ b/data/maps/Route2_House/scripts.inc @@ -1,43 +1,43 @@ Route2_House_MapScripts:: @ 816F5F8 .byte 0 -Route2_House_EventScript_16F5F9:: @ 816F5F9 - msgbox gUnknown_819D5E7, MSGBOX_NPC +Route2_House_EventScript_Scientist:: @ 816F5F9 + msgbox Route2_House_Text_FaintedMonsCanUseFieldMoves, MSGBOX_NPC end -Route2_House_EventScript_16F602:: @ 816F602 +Route2_House_EventScript_Reyley:: @ 816F602 lock faceplayer setvar VAR_0x8008, INGAME_TRADE_MR_MIME call EventScript_GetInGameTradeSpeciesInfo - goto_if_set FLAG_DID_MIMIEN_TRADE, EventScript_16F674 + goto_if_set FLAG_DID_MIMIEN_TRADE, Route2_House_EventScript_AlreadyTraded msgbox Trade_Text_LookingForMonWannaTradeForMon, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_16F65C + goto_if_eq Route2_House_EventScript_DeclineTrade call EventScript_ChooseMonForInGameTrade compare VAR_0x8004, PARTY_SIZE - goto_if_ge EventScript_16F65C + goto_if_ge Route2_House_EventScript_DeclineTrade call EventScript_GetInGameTradeSpecies compare VAR_RESULT, VAR_0x8009 - goto_if_ne EventScript_16F666 + goto_if_ne Route2_House_EventScript_NotRequestedMon call EventScript_DoInGameTrade msgbox Trade_Text_HeyThanks setflag FLAG_DID_MIMIEN_TRADE release end -EventScript_16F65C:: @ 816F65C +Route2_House_EventScript_DeclineTrade:: @ 816F65C msgbox Trade_Text_AwwOhWell release end -EventScript_16F666:: @ 816F666 +Route2_House_EventScript_NotRequestedMon:: @ 816F666 getspeciesname 0, VAR_0x8009 msgbox Trade_Text_WhatThatsNoMon release end -EventScript_16F674:: @ 816F674 +Route2_House_EventScript_AlreadyTraded:: @ 816F674 msgbox Trade_Text_IsntMyOldMonGreat release end diff --git a/data/maps/Route2_House/text.inc b/data/maps/Route2_House/text.inc index 5fde449d3..76267c113 100644 --- a/data/maps/Route2_House/text.inc +++ b/data/maps/Route2_House/text.inc @@ -1,4 +1,4 @@ -gUnknown_819D5E7:: @ 819D5E7 +Route2_House_Text_FaintedMonsCanUseFieldMoves:: @ 819D5E7 .string "A fainted POKéMON just has no\n" .string "energy left to battle.\p" .string "It can still use moves like CUT\n" diff --git a/data/maps/Route2_ViridianForest_NorthEntrance/map.json b/data/maps/Route2_ViridianForest_NorthEntrance/map.json index 1d73befbd..7f4225d23 100644 --- a/data/maps/Route2_ViridianForest_NorthEntrance/map.json +++ b/data/maps/Route2_ViridianForest_NorthEntrance/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route2_ViridianForest_NorthEntrance_EventScript_16F71E", + "script": "Route2_ViridianForest_NorthEntrance_EventScript_Youngster", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route2_ViridianForest_NorthEntrance_EventScript_16F727", + "script": "Route2_ViridianForest_NorthEntrance_EventScript_OldMan", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route2_ViridianForest_NorthEntrance_EventScript_16F730", + "script": "Route2_ViridianForest_NorthEntrance_EventScript_CooltrainerF", "flag": "0" } ], diff --git a/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc b/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc index 29e6bd757..756cf31d9 100644 --- a/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc +++ b/data/maps/Route2_ViridianForest_NorthEntrance/scripts.inc @@ -1,14 +1,14 @@ Route2_ViridianForest_NorthEntrance_MapScripts:: @ 816F71D .byte 0 -Route2_ViridianForest_NorthEntrance_EventScript_16F71E:: @ 816F71E - msgbox gUnknown_819D85C, MSGBOX_NPC +Route2_ViridianForest_NorthEntrance_EventScript_Youngster:: @ 816F71E + msgbox Route2_ViridianForest_NorthEntrance_Text_ManyMonsOnlyInForests, MSGBOX_NPC end -Route2_ViridianForest_NorthEntrance_EventScript_16F727:: @ 816F727 - msgbox gUnknown_819D8D0, MSGBOX_NPC +Route2_ViridianForest_NorthEntrance_EventScript_OldMan:: @ 816F727 + msgbox Route2_ViridianForest_NorthEntrance_Text_CanCutSkinnyTrees, MSGBOX_NPC end -Route2_ViridianForest_NorthEntrance_EventScript_16F730:: @ 816F730 - msgbox gUnknown_819D93B, MSGBOX_NPC +Route2_ViridianForest_NorthEntrance_EventScript_CooltrainerF:: @ 816F730 + msgbox Route2_ViridianForest_NorthEntrance_Text_CanCancelEvolution, MSGBOX_NPC end diff --git a/data/maps/Route2_ViridianForest_NorthEntrance/text.inc b/data/maps/Route2_ViridianForest_NorthEntrance/text.inc index 630d39fc9..9fec461a8 100644 --- a/data/maps/Route2_ViridianForest_NorthEntrance/text.inc +++ b/data/maps/Route2_ViridianForest_NorthEntrance/text.inc @@ -1,16 +1,16 @@ -gUnknown_819D85C:: @ 819D85C +Route2_ViridianForest_NorthEntrance_Text_ManyMonsOnlyInForests:: @ 819D85C .string "Many POKéMON live only in forests \n" .string "and caves.\p" .string "You need to be persistent and look\n" .string "everywhere to get different kinds.$" -gUnknown_819D8D0:: @ 819D8D0 +Route2_ViridianForest_NorthEntrance_Text_CanCutSkinnyTrees:: @ 819D8D0 .string "Have you noticed the skinny trees\n" .string "on the roadside?\p" .string "They can be cut down by a special\n" .string "POKéMON move, I hear.$" -gUnknown_819D93B:: @ 819D93B +Route2_ViridianForest_NorthEntrance_Text_CanCancelEvolution:: @ 819D93B .string "Do you know the evolution-cancel\n" .string "technique?\p" .string "When a POKéMON is evolving, you\n" diff --git a/data/maps/Route2_ViridianForest_SouthEntrance/map.json b/data/maps/Route2_ViridianForest_SouthEntrance/map.json index 8d85f8f46..4e0ad0164 100644 --- a/data/maps/Route2_ViridianForest_SouthEntrance/map.json +++ b/data/maps/Route2_ViridianForest_SouthEntrance/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route2_ViridianForest_SouthEntrance_EventScript_16F5E6", + "script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman1", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "Route2_ViridianForest_SouthEntrance_EventScript_16F5EF", + "script": "Route2_ViridianForest_SouthEntrance_EventScript_Woman2", "flag": "0" } ], diff --git a/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc b/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc index aea8bfaa4..2a60a3772 100644 --- a/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc +++ b/data/maps/Route2_ViridianForest_SouthEntrance/scripts.inc @@ -1,10 +1,10 @@ Route2_ViridianForest_SouthEntrance_MapScripts:: @ 816F5E5 .byte 0 -Route2_ViridianForest_SouthEntrance_EventScript_16F5E6:: @ 816F5E6 - msgbox gUnknown_819D52C, MSGBOX_NPC +Route2_ViridianForest_SouthEntrance_EventScript_Woman1:: @ 816F5E6 + msgbox Route2_ViridianForest_SouthEntrance_Text_ForestIsMaze, MSGBOX_NPC end -Route2_ViridianForest_SouthEntrance_EventScript_16F5EF:: @ 816F5EF - msgbox gUnknown_819D58B, MSGBOX_NPC +Route2_ViridianForest_SouthEntrance_EventScript_Woman2:: @ 816F5EF + msgbox Route2_ViridianForest_SouthEntrance_Text_RattataHasWickedBite, MSGBOX_NPC end diff --git a/data/maps/Route2_ViridianForest_SouthEntrance/text.inc b/data/maps/Route2_ViridianForest_SouthEntrance/text.inc index c92538340..20e25429f 100644 --- a/data/maps/Route2_ViridianForest_SouthEntrance/text.inc +++ b/data/maps/Route2_ViridianForest_SouthEntrance/text.inc @@ -1,9 +1,9 @@ -gUnknown_819D52C:: @ 819D52C +Route2_ViridianForest_SouthEntrance_Text_ForestIsMaze:: @ 819D52C .string "Are you going to VIRIDIAN FOREST?\n" .string "It's a natural maze in there.\l" .string "Be careful you don't get lost.$" -gUnknown_819D58B:: @ 819D58B +Route2_ViridianForest_SouthEntrance_Text_RattataHasWickedBite:: @ 819D58B .string "RATTATA may be small, but don't\n" .string "underestimate its wicked bite.\p" .string "Have you caught one already?$" diff --git a/data/maps/SSAnne_1F_Corridor/map.json b/data/maps/SSAnne_1F_Corridor/map.json index bf4c1e004..eab4e822a 100644 --- a/data/maps/SSAnne_1F_Corridor/map.json +++ b/data/maps/SSAnne_1F_Corridor/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_1F_Corridor_EventScript_1608D5", + "script": "SSAnne_1F_Corridor_EventScript_Sailor", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_1F_Corridor_EventScript_1608CC", + "script": "SSAnne_1F_Corridor_EventScript_WorkerM", "flag": "0" } ], diff --git a/data/maps/SSAnne_1F_Corridor/scripts.inc b/data/maps/SSAnne_1F_Corridor/scripts.inc index 21967cf04..bc116f99b 100644 --- a/data/maps/SSAnne_1F_Corridor/scripts.inc +++ b/data/maps/SSAnne_1F_Corridor/scripts.inc @@ -1,10 +1,10 @@ SSAnne_1F_Corridor_MapScripts:: @ 81608CB .byte 0 -SSAnne_1F_Corridor_EventScript_1608CC:: @ 81608CC - msgbox gUnknown_8172EE7, MSGBOX_NPC +SSAnne_1F_Corridor_EventScript_WorkerM:: @ 81608CC + msgbox SSAnne_1F_Corridor_Text_LeStrongSilentType, MSGBOX_NPC end -SSAnne_1F_Corridor_EventScript_1608D5:: @ 81608D5 - msgbox gUnknown_8172F60, MSGBOX_NPC +SSAnne_1F_Corridor_EventScript_Sailor:: @ 81608D5 + msgbox SSAnne_1F_Corridor_Text_PassengersAreRestless, MSGBOX_NPC end diff --git a/data/maps/SSAnne_1F_Corridor/text.inc b/data/maps/SSAnne_1F_Corridor/text.inc index dff534c9a..f720e2ed9 100644 --- a/data/maps/SSAnne_1F_Corridor/text.inc +++ b/data/maps/SSAnne_1F_Corridor/text.inc @@ -1,4 +1,4 @@ -gUnknown_8172EE7:: @ 8172EE7 +SSAnne_1F_Corridor_Text_LeStrongSilentType:: @ 8172EE7 .string "Bonjour!\n" .string "I am le waiter on this ship!\p" .string "I will be happy to serve you\n" @@ -6,7 +6,7 @@ gUnknown_8172EE7:: @ 8172EE7 .string "… … …\n" .string "Ah! Le strong silent type!$" -gUnknown_8172F60:: @ 8172F60 +SSAnne_1F_Corridor_Text_PassengersAreRestless:: @ 8172F60 .string "The passengers are restless from\n" .string "this long voyage.\p" .string "You might be challenged by the\n" diff --git a/data/maps/SSAnne_1F_Room1/map.json b/data/maps/SSAnne_1F_Room1/map.json index e8547d2e3..42c95079b 100644 --- a/data/maps/SSAnne_1F_Room1/map.json +++ b/data/maps/SSAnne_1F_Room1/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_1F_Room1_EventScript_160BDC", + "script": "SSAnne_1F_Room1_EventScript_Gentleman", "flag": "0" } ], diff --git a/data/maps/SSAnne_1F_Room1/scripts.inc b/data/maps/SSAnne_1F_Room1/scripts.inc index 5f610c830..8cbf9edb7 100644 --- a/data/maps/SSAnne_1F_Room1/scripts.inc +++ b/data/maps/SSAnne_1F_Room1/scripts.inc @@ -1,6 +1,6 @@ SSAnne_1F_Room1_MapScripts:: @ 8160BDB .byte 0 -SSAnne_1F_Room1_EventScript_160BDC:: @ 8160BDC - msgbox gUnknown_817393B, MSGBOX_NPC +SSAnne_1F_Room1_EventScript_Gentleman:: @ 8160BDC + msgbox SSAnne_1F_Room1_Text_ImAGlobalPoliceAgent, MSGBOX_NPC end diff --git a/data/maps/SSAnne_1F_Room1/text.inc b/data/maps/SSAnne_1F_Room1/text.inc index 252ab2283..1466bcfe8 100644 --- a/data/maps/SSAnne_1F_Room1/text.inc +++ b/data/maps/SSAnne_1F_Room1/text.inc @@ -1,4 +1,4 @@ -gUnknown_817393B:: @ 817393B +SSAnne_1F_Room1_Text_ImAGlobalPoliceAgent:: @ 817393B .string "Ssh…!\n" .string "I'm a GLOBAL POLICE agent.\p" .string "I'm on the trail of TEAM ROCKET.\n" diff --git a/data/maps/SSAnne_1F_Room2/map.json b/data/maps/SSAnne_1F_Room2/map.json index db08152f0..8a779f450 100644 --- a/data/maps/SSAnne_1F_Room2/map.json +++ b/data/maps/SSAnne_1F_Room2/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 2, - "script": "SSAnne_1F_Room2_EventScript_160BEF", + "script": "SSAnne_1F_Room2_EventScript_Ann", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "SSAnne_1F_Room2_EventScript_160C06", + "script": "SSAnne_1F_Room2_EventScript_Tyler", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 1, - "script": "SSAnne_1F_Room2_EventScript_160BE6", + "script": "SSAnne_1F_Room2_EventScript_Woman", "flag": "0" }, { diff --git a/data/maps/SSAnne_1F_Room2/scripts.inc b/data/maps/SSAnne_1F_Room2/scripts.inc index 3a80d3cfe..10154e734 100644 --- a/data/maps/SSAnne_1F_Room2/scripts.inc +++ b/data/maps/SSAnne_1F_Room2/scripts.inc @@ -1,16 +1,16 @@ SSAnne_1F_Room2_MapScripts:: @ 8160BE5 .byte 0 -SSAnne_1F_Room2_EventScript_160BE6:: @ 8160BE6 - msgbox gUnknown_8173AC5, MSGBOX_NPC +SSAnne_1F_Room2_EventScript_Woman:: @ 8160BE6 + msgbox SSAnne_1F_Room2_Text_CruisingAroundWorld, MSGBOX_NPC end -SSAnne_1F_Room2_EventScript_160BEF:: @ 8160BEF - trainerbattle_single TRAINER_LASS_ANN, Text_173A1A, Text_173A4F - msgbox gUnknown_8173A7A, MSGBOX_AUTOCLOSE +SSAnne_1F_Room2_EventScript_Ann:: @ 8160BEF + trainerbattle_single TRAINER_LASS_ANN, SSAnne_1F_Room2_Text_AnnIntro, SSAnne_1F_Room2_Text_AnnDefeat + msgbox SSAnne_1F_Room2_Text_AnnPostBattle, MSGBOX_AUTOCLOSE end -SSAnne_1F_Room2_EventScript_160C06:: @ 8160C06 - trainerbattle_single TRAINER_YOUNGSTER_TYLER, Text_173999, Text_1739B1 - msgbox gUnknown_81739C5, MSGBOX_AUTOCLOSE +SSAnne_1F_Room2_EventScript_Tyler:: @ 8160C06 + trainerbattle_single TRAINER_YOUNGSTER_TYLER, SSAnne_1F_Room2_Text_TylerIntro, SSAnne_1F_Room2_Text_TylerDefeat + msgbox SSAnne_1F_Room2_Text_TylerPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_1F_Room2/text.inc b/data/maps/SSAnne_1F_Room2/text.inc index 92dc9a93c..55daa017f 100644 --- a/data/maps/SSAnne_1F_Room2/text.inc +++ b/data/maps/SSAnne_1F_Room2/text.inc @@ -1,31 +1,31 @@ -Text_173999:: @ 8173999 +SSAnne_1F_Room2_Text_TylerIntro:: @ 8173999 .string "I love POKéMON!\n" .string "Do you?$" -Text_1739B1:: @ 81739B1 +SSAnne_1F_Room2_Text_TylerDefeat:: @ 81739B1 .string "Wow! \n" .string "You're great!$" -gUnknown_81739C5:: @ 81739C5 +SSAnne_1F_Room2_Text_TylerPostBattle:: @ 81739C5 .string "Listen, listen!\n" .string "Let me be your friend, okay?\p" .string "Then we can trade POKéMON and\n" .string "do stuff.$" -Text_173A1A:: @ 8173A1A +SSAnne_1F_Room2_Text_AnnIntro:: @ 8173A1A .string "I collected these POKéMON\n" .string "from all around the world!$" -Text_173A4F:: @ 8173A4F +SSAnne_1F_Room2_Text_AnnDefeat:: @ 8173A4F .string "Oh, no!\n" .string "I went around the world for these!$" -gUnknown_8173A7A:: @ 8173A7A +SSAnne_1F_Room2_Text_AnnPostBattle:: @ 8173A7A .string "You hurt my poor POKéMON!\p" .string "I demand that you heal them at a\n" .string "POKéMON CENTER!$" -gUnknown_8173AC5:: @ 8173AC5 +SSAnne_1F_Room2_Text_CruisingAroundWorld:: @ 8173AC5 .string "We are cruising around the world,\n" .string "my children and I.$" diff --git a/data/maps/SSAnne_1F_Room3/map.json b/data/maps/SSAnne_1F_Room3/map.json index 71febbbf9..d610ee30a 100644 --- a/data/maps/SSAnne_1F_Room3/map.json +++ b/data/maps/SSAnne_1F_Room3/map.json @@ -23,7 +23,7 @@ "movement_range_y": 3, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_1F_Room3_EventScript_160C1E", + "script": "SSAnne_1F_Room3_EventScript_LittleGirl", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_1F_Room3_EventScript_160C30", + "script": "SSAnne_1F_Room3_EventScript_Wigglytuff", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_1F_Room3_EventScript_160C27", + "script": "SSAnne_1F_Room3_EventScript_BaldingMan", "flag": "0" } ], diff --git a/data/maps/SSAnne_1F_Room3/scripts.inc b/data/maps/SSAnne_1F_Room3/scripts.inc index 7b9651040..446106c4e 100644 --- a/data/maps/SSAnne_1F_Room3/scripts.inc +++ b/data/maps/SSAnne_1F_Room3/scripts.inc @@ -1,20 +1,20 @@ SSAnne_1F_Room3_MapScripts:: @ 8160C1D .byte 0 -SSAnne_1F_Room3_EventScript_160C1E:: @ 8160C1E - msgbox gUnknown_8173B21, MSGBOX_NPC +SSAnne_1F_Room3_EventScript_LittleGirl:: @ 8160C1E + msgbox SSAnne_1F_Room3_Text_AlwaysTravelWithWigglytuff, MSGBOX_NPC end -SSAnne_1F_Room3_EventScript_160C27:: @ 8160C27 - msgbox gUnknown_8173AFA, MSGBOX_NPC +SSAnne_1F_Room3_EventScript_BaldingMan:: @ 8160C27 + msgbox SSAnne_1F_Room3_Text_CruiseIsElegantAndCozy, MSGBOX_NPC end -SSAnne_1F_Room3_EventScript_160C30:: @ 8160C30 +SSAnne_1F_Room3_EventScript_Wigglytuff:: @ 8160C30 lock faceplayer waitse playmoncry SPECIES_WIGGLYTUFF, 0 - msgbox gUnknown_8173B61 + msgbox SSAnne_1F_Room3_Text_Wigglytuff waitmoncry release end diff --git a/data/maps/SSAnne_1F_Room3/text.inc b/data/maps/SSAnne_1F_Room3/text.inc index 32709c631..d79d495e9 100644 --- a/data/maps/SSAnne_1F_Room3/text.inc +++ b/data/maps/SSAnne_1F_Room3/text.inc @@ -1,11 +1,11 @@ -gUnknown_8173AFA:: @ 8173AFA +SSAnne_1F_Room3_Text_CruiseIsElegantAndCozy:: @ 8173AFA .string "A world cruise is so elegant yet\n" .string "cozy!$" -gUnknown_8173B21:: @ 8173B21 +SSAnne_1F_Room3_Text_AlwaysTravelWithWigglytuff:: @ 8173B21 .string "I always travel with WIGGLYTUFF.\n" .string "I never leave home without it.$" -gUnknown_8173B61:: @ 8173B61 +SSAnne_1F_Room3_Text_Wigglytuff:: @ 8173B61 .string "WIGGLYTUFF: Puup pupuu!$" diff --git a/data/maps/SSAnne_1F_Room4/map.json b/data/maps/SSAnne_1F_Room4/map.json index a97e88fcc..262a1a089 100644 --- a/data/maps/SSAnne_1F_Room4/map.json +++ b/data/maps/SSAnne_1F_Room4/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_1F_Room4_EventScript_160C44", + "script": "SSAnne_1F_Room4_EventScript_Woman", "flag": "0" } ], diff --git a/data/maps/SSAnne_1F_Room4/scripts.inc b/data/maps/SSAnne_1F_Room4/scripts.inc index 9e6f3fdc2..7a4dfde80 100644 --- a/data/maps/SSAnne_1F_Room4/scripts.inc +++ b/data/maps/SSAnne_1F_Room4/scripts.inc @@ -1,17 +1,17 @@ SSAnne_1F_Room4_MapScripts:: @ 8160C43 .byte 0 -SSAnne_1F_Room4_EventScript_160C44:: @ 8160C44 +SSAnne_1F_Room4_EventScript_Woman:: @ 8160C44 lock faceplayer checkplayergender compare VAR_RESULT, MALE - goto_if_eq EventScript_160C5C - msgbox gUnknown_8173BA4 + goto_if_eq SSAnne_1F_Room4_EventScript_WomanPlayerMale + msgbox SSAnne_1F_Room4_Text_WaitressCherryPiePlease release end -EventScript_160C5C:: @ 8160C5C - msgbox gUnknown_8173B79 +SSAnne_1F_Room4_EventScript_WomanPlayerMale:: @ 8160C5C + msgbox SSAnne_1F_Room4_Text_WaiterCherryPiePlease release end diff --git a/data/maps/SSAnne_1F_Room4/text.inc b/data/maps/SSAnne_1F_Room4/text.inc index 8b3f4c775..e0eb0bcce 100644 --- a/data/maps/SSAnne_1F_Room4/text.inc +++ b/data/maps/SSAnne_1F_Room4/text.inc @@ -1,8 +1,8 @@ -gUnknown_8173B79:: @ 8173B79 +SSAnne_1F_Room4_Text_WaiterCherryPiePlease:: @ 8173B79 .string "Waiter, I would like a cherry pie,\n" .string "please!$" -gUnknown_8173BA4:: @ 8173BA4 +SSAnne_1F_Room4_Text_WaitressCherryPiePlease:: @ 8173BA4 .string "Waitress, I would like a cherry\n" .string "pie, please!$" diff --git a/data/maps/SSAnne_1F_Room5/map.json b/data/maps/SSAnne_1F_Room5/map.json index 7d3c24e5b..6cdd3d088 100644 --- a/data/maps/SSAnne_1F_Room5/map.json +++ b/data/maps/SSAnne_1F_Room5/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 4, - "script": "SSAnne_1F_Room5_EventScript_160C67", + "script": "SSAnne_1F_Room5_EventScript_Arthur", "flag": "0" } ], diff --git a/data/maps/SSAnne_1F_Room5/scripts.inc b/data/maps/SSAnne_1F_Room5/scripts.inc index 028442449..e91e35bf6 100644 --- a/data/maps/SSAnne_1F_Room5/scripts.inc +++ b/data/maps/SSAnne_1F_Room5/scripts.inc @@ -1,7 +1,7 @@ SSAnne_1F_Room5_MapScripts:: @ 8160C66 .byte 0 -SSAnne_1F_Room5_EventScript_160C67:: @ 8160C67 - trainerbattle_single TRAINER_GENTLEMAN_ARTHUR, Text_173BD1, Text_173BFA - msgbox gUnknown_8173C30, MSGBOX_AUTOCLOSE +SSAnne_1F_Room5_EventScript_Arthur:: @ 8160C67 + trainerbattle_single TRAINER_GENTLEMAN_ARTHUR, SSAnne_1F_Room5_Text_ArthurIntro, SSAnne_1F_Room5_Text_ArthurDefeat + msgbox SSAnne_1F_Room5_Text_ArthurPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_1F_Room5/text.inc b/data/maps/SSAnne_1F_Room5/text.inc index 09d582707..dd2f80262 100644 --- a/data/maps/SSAnne_1F_Room5/text.inc +++ b/data/maps/SSAnne_1F_Room5/text.inc @@ -1,12 +1,12 @@ -Text_173BD1:: @ 8173BD1 +SSAnne_1F_Room5_Text_ArthurIntro:: @ 8173BD1 .string "You insolent pup!\n" .string "How dare you barge in!$" -Text_173BFA:: @ 8173BFA +SSAnne_1F_Room5_Text_ArthurDefeat:: @ 8173BFA .string "Humph! You rude child!\n" .string "You have no sense of courtesy!$" -gUnknown_8173C30:: @ 8173C30 +SSAnne_1F_Room5_Text_ArthurPostBattle:: @ 8173C30 .string "I wish to be left alone!\n" .string "Get out!$" diff --git a/data/maps/SSAnne_1F_Room6/map.json b/data/maps/SSAnne_1F_Room6/map.json index 881554a8d..b9b25ff45 100644 --- a/data/maps/SSAnne_1F_Room6/map.json +++ b/data/maps/SSAnne_1F_Room6/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_1F_Room6_EventScript_160DF3", + "script": "SSAnne_1F_Room6_EventScript_Woman", "flag": "0" } ], diff --git a/data/maps/SSAnne_1F_Room6/scripts.inc b/data/maps/SSAnne_1F_Room6/scripts.inc index 42c69fb3b..dec1181bf 100644 --- a/data/maps/SSAnne_1F_Room6/scripts.inc +++ b/data/maps/SSAnne_1F_Room6/scripts.inc @@ -1,27 +1,27 @@ SSAnne_1F_Room6_MapScripts:: @ 8160DF2 .byte 0 -SSAnne_1F_Room6_EventScript_160DF3:: @ 8160DF3 +SSAnne_1F_Room6_EventScript_Woman:: @ 8160DF3 lock faceplayer - msgbox gUnknown_817445B, MSGBOX_YESNO + msgbox SSAnne_1F_Room6_Text_TakeAShortRest, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_160E18 + goto_if_eq SSAnne_1F_Room6_EventScript_DeclineHeal closemessage call EventScript_OutOfCenterPartyHeal - msgbox gUnknown_8174490 + msgbox SSAnne_1F_Room6_Text_GladEveryoneIsRefreshed release end -EventScript_160E18:: @ 8160E18 +SSAnne_1F_Room6_EventScript_DeclineHeal:: @ 8160E18 checkplayergender compare VAR_RESULT, MALE - goto_if_eq EventScript_160E2E - msgbox gUnknown_8174515 + goto_if_eq SSAnne_1F_Room6_EventScript_DeclineHealMale + msgbox SSAnne_1F_Room6_Text_SorryYouLookLikeMySister release end -EventScript_160E2E:: @ 8160E2E - msgbox gUnknown_81744D0 +SSAnne_1F_Room6_EventScript_DeclineHealMale:: @ 8160E2E + msgbox SSAnne_1F_Room6_Text_SorryYouLookLikeMyBrother release end diff --git a/data/maps/SSAnne_1F_Room6/text.inc b/data/maps/SSAnne_1F_Room6/text.inc index 442992f02..6d4d98ff5 100644 --- a/data/maps/SSAnne_1F_Room6/text.inc +++ b/data/maps/SSAnne_1F_Room6/text.inc @@ -1,16 +1,16 @@ -gUnknown_817445B:: @ 817445B +SSAnne_1F_Room6_Text_TakeAShortRest:: @ 817445B .string "You look tired. Would you like to\n" .string "take a short rest?$" -gUnknown_8174490:: @ 8174490 +SSAnne_1F_Room6_Text_GladEveryoneIsRefreshed:: @ 8174490 .string "I'm glad to see that everyone is\n" .string "looking refreshed and chipper.$" -gUnknown_81744D0:: @ 81744D0 +SSAnne_1F_Room6_Text_SorryYouLookLikeMyBrother:: @ 81744D0 .string "Oh, I'm sorry for fussing over you.\n" .string "You look like my little brother…$" -gUnknown_8174515:: @ 8174515 +SSAnne_1F_Room6_Text_SorryYouLookLikeMySister:: @ 8174515 .string "Oh, I'm sorry for fussing over you.\n" .string "You look like my little sister…$" diff --git a/data/maps/SSAnne_1F_Room7/map.json b/data/maps/SSAnne_1F_Room7/map.json index 887022650..98496a947 100644 --- a/data/maps/SSAnne_1F_Room7/map.json +++ b/data/maps/SSAnne_1F_Room7/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "SSAnne_1F_Room7_EventScript_160C7F", + "script": "SSAnne_1F_Room7_EventScript_Thomas", "flag": "0" } ], diff --git a/data/maps/SSAnne_1F_Room7/scripts.inc b/data/maps/SSAnne_1F_Room7/scripts.inc index 5901ee65b..60e26dc73 100644 --- a/data/maps/SSAnne_1F_Room7/scripts.inc +++ b/data/maps/SSAnne_1F_Room7/scripts.inc @@ -1,7 +1,7 @@ SSAnne_1F_Room7_MapScripts:: @ 8160C7E .byte 0 -SSAnne_1F_Room7_EventScript_160C7F:: @ 8160C7F - trainerbattle_single TRAINER_GENTLEMAN_THOMAS, Text_173C52, Text_173CB4 - msgbox gUnknown_8173CC4, MSGBOX_AUTOCLOSE +SSAnne_1F_Room7_EventScript_Thomas:: @ 8160C7F + trainerbattle_single TRAINER_GENTLEMAN_THOMAS, SSAnne_1F_Room7_Text_ThomasIntro, SSAnne_1F_Room7_Text_ThomasDefeat + msgbox SSAnne_1F_Room7_Text_ThomasPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_1F_Room7/text.inc b/data/maps/SSAnne_1F_Room7/text.inc index d4fed83fb..3a8ce2f28 100644 --- a/data/maps/SSAnne_1F_Room7/text.inc +++ b/data/maps/SSAnne_1F_Room7/text.inc @@ -1,11 +1,11 @@ -Text_173C52:: @ 8173C52 +SSAnne_1F_Room7_Text_ThomasIntro:: @ 8173C52 .string "I am but a solitary traveler…\p" .string "My sole companions and friends are\n" .string "POKéMON I caught on my journeys…$" -Text_173CB4:: @ 8173CB4 +SSAnne_1F_Room7_Text_ThomasDefeat:: @ 8173CB4 .string "My, my friends…$" -gUnknown_8173CC4:: @ 8173CC4 +SSAnne_1F_Room7_Text_ThomasPostBattle:: @ 8173CC4 .string "You should be nice to friends!$" diff --git a/data/maps/SSAnne_2F_Corridor/map.json b/data/maps/SSAnne_2F_Corridor/map.json index 850b63fc4..e3b506027 100644 --- a/data/maps/SSAnne_2F_Corridor/map.json +++ b/data/maps/SSAnne_2F_Corridor/map.json @@ -36,7 +36,7 @@ "movement_range_y": 2, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_2F_Corridor_EventScript_160A54", + "script": "SSAnne_2F_Corridor_EventScript_Sailor", "flag": "0" } ], @@ -113,7 +113,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_S_S_ANNE_2F_CORRIDOR", "var_value": 0, - "script": "SSAnne_2F_Corridor_EventScript_1608DF" + "script": "SSAnne_2F_Corridor_EventScript_RivalTriggerLeft" }, { "type": "trigger", @@ -122,7 +122,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_S_S_ANNE_2F_CORRIDOR", "var_value": 0, - "script": "SSAnne_2F_Corridor_EventScript_1608EB" + "script": "SSAnne_2F_Corridor_EventScript_RivalTriggerMid" }, { "type": "trigger", @@ -131,7 +131,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_S_S_ANNE_2F_CORRIDOR", "var_value": 0, - "script": "SSAnne_2F_Corridor_EventScript_1608F7" + "script": "SSAnne_2F_Corridor_EventScript_RivalTriggerRight" } ], "bg_events": [] diff --git a/data/maps/SSAnne_2F_Corridor/scripts.inc b/data/maps/SSAnne_2F_Corridor/scripts.inc index 02b06920a..ed0ddd056 100644 --- a/data/maps/SSAnne_2F_Corridor/scripts.inc +++ b/data/maps/SSAnne_2F_Corridor/scripts.inc @@ -1,31 +1,25 @@ SSAnne_2F_Corridor_MapScripts:: @ 81608DE .byte 0 -SSAnne_2F_Corridor_EventScript_1608DF:: @ 81608DF +SSAnne_2F_Corridor_EventScript_RivalTriggerLeft:: @ 81608DF lockall setvar VAR_TEMP_1, 0 - goto EventScript_160903 - -EventScript_1608EA:: @ 81608EA + goto SSAnne_2F_Corridor_EventScript_RivalTrigger end -SSAnne_2F_Corridor_EventScript_1608EB:: @ 81608EB +SSAnne_2F_Corridor_EventScript_RivalTriggerMid:: @ 81608EB lockall setvar VAR_TEMP_1, 1 - goto EventScript_160903 - -EventScript_1608F6:: @ 81608F6 + goto SSAnne_2F_Corridor_EventScript_RivalTrigger end -SSAnne_2F_Corridor_EventScript_1608F7:: @ 81608F7 +SSAnne_2F_Corridor_EventScript_RivalTriggerRight:: @ 81608F7 lockall setvar VAR_TEMP_1, 2 - goto EventScript_160903 - -EventScript_160902:: @ 8160902 + goto SSAnne_2F_Corridor_EventScript_RivalTrigger end -EventScript_160903:: @ 8160903 +SSAnne_2F_Corridor_EventScript_RivalTrigger:: @ 8160903 textcolor 0 playse SE_KAIDAN delay 5 @@ -36,80 +30,80 @@ EventScript_160903:: @ 8160903 waitmovement 0 delay 20 compare VAR_TEMP_1, 0 - call_if_eq EventScript_1609AD + call_if_eq SSAnne_2F_Corridor_EventScript_RivalApproachLeft compare VAR_TEMP_1, 1 - call_if_eq EventScript_1609B8 + call_if_eq SSAnne_2F_Corridor_EventScript_RivalApproachMid compare VAR_TEMP_1, 2 - call_if_eq EventScript_1609CA - msgbox gUnknown_8173035 + call_if_eq SSAnne_2F_Corridor_EventScript_RivalApproachRight + msgbox SSAnne_2F_Corridor_Text_RivalIntro setvar VAR_LAST_TALKED, 1 compare VAR_STARTER_MON, 2 - call_if_eq EventScript_1609DC + call_if_eq SSAnne_2F_Corridor_EventScript_RivalSquirtle compare VAR_STARTER_MON, 1 - call_if_eq EventScript_1609E7 + call_if_eq SSAnne_2F_Corridor_EventScript_RivalBulbasaur compare VAR_STARTER_MON, 0 - call_if_eq EventScript_1609F2 - msgbox gUnknown_8173164 + call_if_eq SSAnne_2F_Corridor_EventScript_RivalCharmander + msgbox SSAnne_2F_Corridor_Text_RivalPostBattle closemessage delay 10 playbgm MUS_RIVAL2, 0 compare VAR_TEMP_1, 0 - call_if_eq EventScript_1609FD + call_if_eq SSAnne_2F_Corridor_EventScript_RivalExitLeft compare VAR_TEMP_1, 1 - call_if_eq EventScript_160A08 + call_if_eq SSAnne_2F_Corridor_EventScript_RivalExitMid compare VAR_TEMP_1, 2 - call_if_eq EventScript_160A13 + call_if_eq SSAnne_2F_Corridor_EventScript_RivalExitRight fadedefaultbgm removeobject 1 setvar VAR_MAP_SCENE_S_S_ANNE_2F_CORRIDOR, 1 releaseall end -EventScript_1609AD:: @ 81609AD - applymovement 1, Movement_160A2A +SSAnne_2F_Corridor_EventScript_RivalApproachLeft:: @ 81609AD + applymovement 1, SSAnne_2F_Corridor_Movement_RivalApproachLeft waitmovement 0 return -EventScript_1609B8:: @ 81609B8 - applymovement 1, Movement_160A2E - applymovement OBJ_EVENT_ID_PLAYER, Movement_160A24 +SSAnne_2F_Corridor_EventScript_RivalApproachMid:: @ 81609B8 + applymovement 1, SSAnne_2F_Corridor_Movement_RivalApproachMid + applymovement OBJ_EVENT_ID_PLAYER, SSAnne_2F_Corridor_Movement_PlayerFaceRivalMid waitmovement 0 return -EventScript_1609CA:: @ 81609CA - applymovement OBJ_EVENT_ID_PLAYER, Movement_160A1E - applymovement 1, Movement_160A34 +SSAnne_2F_Corridor_EventScript_RivalApproachRight:: @ 81609CA + applymovement OBJ_EVENT_ID_PLAYER, SSAnne_2F_Corridor_Movement_PlayerFaceRivalRight + applymovement 1, SSAnne_2F_Corridor_Movement_RivalApproachRight waitmovement 0 return -EventScript_1609DC:: @ 81609DC - trainerbattle_no_intro TRAINER_RIVAL_SS_ANNE_SQUIRTLE, Text_173110 +SSAnne_2F_Corridor_EventScript_RivalSquirtle:: @ 81609DC + trainerbattle_no_intro TRAINER_RIVAL_SS_ANNE_SQUIRTLE, SSAnne_2F_Corridor_Text_RivalDefeat return -EventScript_1609E7:: @ 81609E7 - trainerbattle_no_intro TRAINER_RIVAL_SS_ANNE_BULBASAUR, Text_173110 +SSAnne_2F_Corridor_EventScript_RivalBulbasaur:: @ 81609E7 + trainerbattle_no_intro TRAINER_RIVAL_SS_ANNE_BULBASAUR, SSAnne_2F_Corridor_Text_RivalDefeat return -EventScript_1609F2:: @ 81609F2 - trainerbattle_no_intro TRAINER_RIVAL_SS_ANNE_CHARMANDER, Text_173110 +SSAnne_2F_Corridor_EventScript_RivalCharmander:: @ 81609F2 + trainerbattle_no_intro TRAINER_RIVAL_SS_ANNE_CHARMANDER, SSAnne_2F_Corridor_Text_RivalDefeat return -EventScript_1609FD:: @ 81609FD - applymovement 1, Movement_160A3B +SSAnne_2F_Corridor_EventScript_RivalExitLeft:: @ 81609FD + applymovement 1, SSAnne_2F_Corridor_Movement_RivalExitLeft waitmovement 0 return -EventScript_160A08:: @ 8160A08 - applymovement 1, Movement_160A44 +SSAnne_2F_Corridor_EventScript_RivalExitMid:: @ 8160A08 + applymovement 1, SSAnne_2F_Corridor_Movement_RivalExitMid waitmovement 0 return -EventScript_160A13:: @ 8160A13 - applymovement 1, Movement_160A4C +SSAnne_2F_Corridor_EventScript_RivalExitRight:: @ 8160A13 + applymovement 1, SSAnne_2F_Corridor_Movement_RivalExitRight waitmovement 0 return -Movement_160A1E:: @ 8160A1E +SSAnne_2F_Corridor_Movement_PlayerFaceRivalRight:: @ 8160A1E delay_16 delay_16 delay_16 @@ -117,7 +111,7 @@ Movement_160A1E:: @ 8160A1E walk_in_place_fastest_left step_end -Movement_160A24:: @ 8160A24 +SSAnne_2F_Corridor_Movement_PlayerFaceRivalMid:: @ 8160A24 delay_16 delay_16 delay_16 @@ -125,13 +119,13 @@ Movement_160A24:: @ 8160A24 walk_in_place_fastest_left step_end -Movement_160A2A:: @ 8160A2A +SSAnne_2F_Corridor_Movement_RivalApproachLeft:: @ 8160A2A walk_down walk_down walk_down step_end -Movement_160A2E:: @ 8160A2E +SSAnne_2F_Corridor_Movement_RivalApproachMid:: @ 8160A2E walk_down walk_down walk_down @@ -139,7 +133,7 @@ Movement_160A2E:: @ 8160A2E walk_in_place_fastest_right step_end -Movement_160A34:: @ 8160A34 +SSAnne_2F_Corridor_Movement_RivalApproachRight:: @ 8160A34 walk_down walk_down walk_down @@ -148,7 +142,7 @@ Movement_160A34:: @ 8160A34 delay_4 step_end -Movement_160A3B:: @ 8160A3B +SSAnne_2F_Corridor_Movement_RivalExitLeft:: @ 8160A3B walk_right walk_down walk_down @@ -159,7 +153,7 @@ Movement_160A3B:: @ 8160A3B walk_down step_end -Movement_160A44:: @ 8160A44 +SSAnne_2F_Corridor_Movement_RivalExitMid:: @ 8160A44 walk_down walk_down walk_down @@ -169,7 +163,7 @@ Movement_160A44:: @ 8160A44 walk_down step_end -Movement_160A4C:: @ 8160A4C +SSAnne_2F_Corridor_Movement_RivalExitRight:: @ 8160A4C walk_down walk_down walk_down @@ -179,6 +173,6 @@ Movement_160A4C:: @ 8160A4C walk_down step_end -SSAnne_2F_Corridor_EventScript_160A54:: @ 8160A54 - msgbox gUnknown_8172FC3, MSGBOX_NPC +SSAnne_2F_Corridor_EventScript_Sailor:: @ 8160A54 + msgbox SSAnne_2F_Corridor_Text_ThisShipIsLuxuryLiner, MSGBOX_NPC end diff --git a/data/maps/SSAnne_2F_Corridor/text.inc b/data/maps/SSAnne_2F_Corridor/text.inc index fde6846f2..2f830479d 100644 --- a/data/maps/SSAnne_2F_Corridor/text.inc +++ b/data/maps/SSAnne_2F_Corridor/text.inc @@ -1,10 +1,10 @@ -gUnknown_8172FC3:: @ 8172FC3 +SSAnne_2F_Corridor_Text_ThisShipIsLuxuryLiner:: @ 8172FC3 .string "This ship, she is a luxury liner for\n" .string "TRAINERS of the world!\p" .string "At every port, we hold parties with\n" .string "invited TRAINERS.$" -gUnknown_8173035:: @ 8173035 +SSAnne_2F_Corridor_Text_RivalIntro:: @ 8173035 .string "{RIVAL}: Bonjour!\n" .string "{PLAYER}!\p" .string "Imagine seeing you here!\n" @@ -15,18 +15,18 @@ gUnknown_8173035:: @ 8173035 .string "Crawl around in grassy areas, and\n" .string "look hard for them.$" -Text_173110:: @ 8173110 +SSAnne_2F_Corridor_Text_RivalDefeat:: @ 8173110 .string "Humph!\p" .string "At least you're raising your\n" .string "POKéMON!$" -Text_17313D:: @ 817313D +SSAnne_2F_Corridor_Text_RivalVictory:: @ 817313D .string "{PLAYER}‥!\n" .string "ふなよい してるのか!\p" .string "もっと からだ\n" .string "きたえた ほうが いいぜ!$" -gUnknown_8173164:: @ 8173164 +SSAnne_2F_Corridor_Text_RivalPostBattle:: @ 8173164 .string "{RIVAL}: I heard there was a CUT\n" .string "master on board.\p" .string "But he was just a seasick old man!\p" diff --git a/data/maps/SSAnne_2F_Room1/map.json b/data/maps/SSAnne_2F_Room1/map.json index eacfe5c91..20e221a85 100644 --- a/data/maps/SSAnne_2F_Room1/map.json +++ b/data/maps/SSAnne_2F_Room1/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_2F_Room1_EventScript_160C97", + "script": "SSAnne_2F_Room1_EventScript_Gentleman", "flag": "0" } ], diff --git a/data/maps/SSAnne_2F_Room1/scripts.inc b/data/maps/SSAnne_2F_Room1/scripts.inc index 9748777c7..a31c914c1 100644 --- a/data/maps/SSAnne_2F_Room1/scripts.inc +++ b/data/maps/SSAnne_2F_Room1/scripts.inc @@ -1,10 +1,10 @@ SSAnne_2F_Room1_MapScripts:: @ 8160C96 .byte 0 -SSAnne_2F_Room1_EventScript_160C97:: @ 8160C97 +SSAnne_2F_Room1_EventScript_Gentleman:: @ 8160C97 lock faceplayer - message Text_173CE3 + message SSAnne_2F_Room1_Text_SleepingMonLookedLikeThis waitmessage setvar VAR_0x8004, SPECIES_SNORLAX special Special_SetSeenMon diff --git a/data/maps/SSAnne_2F_Room1/text.inc b/data/maps/SSAnne_2F_Room1/text.inc index 5a18af424..c75f4adb7 100644 --- a/data/maps/SSAnne_2F_Room1/text.inc +++ b/data/maps/SSAnne_2F_Room1/text.inc @@ -1,4 +1,4 @@ -Text_173CE3:: @ 8173CE3 +SSAnne_2F_Room1_Text_SleepingMonLookedLikeThis:: @ 8173CE3 .string "I've journeyed far and wide, but in\n" .string "all my travels I've never seen\l" .string "any POKéMON sleep like this one!\p" diff --git a/data/maps/SSAnne_2F_Room2/map.json b/data/maps/SSAnne_2F_Room2/map.json index e01f65eb5..df5cf4bc8 100644 --- a/data/maps/SSAnne_2F_Room2/map.json +++ b/data/maps/SSAnne_2F_Room2/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "SSAnne_2F_Room2_EventScript_160CB1", + "script": "SSAnne_2F_Room2_EventScript_Dale", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 2, - "script": "SSAnne_2F_Room2_EventScript_160CC8", + "script": "SSAnne_2F_Room2_EventScript_Brooks", "flag": "0" }, { diff --git a/data/maps/SSAnne_2F_Room2/scripts.inc b/data/maps/SSAnne_2F_Room2/scripts.inc index 6568baa0e..3968c2726 100644 --- a/data/maps/SSAnne_2F_Room2/scripts.inc +++ b/data/maps/SSAnne_2F_Room2/scripts.inc @@ -1,12 +1,12 @@ SSAnne_2F_Room2_MapScripts:: @ 8160CB0 .byte 0 -SSAnne_2F_Room2_EventScript_160CB1:: @ 8160CB1 - trainerbattle_single TRAINER_FISHERMAN_DALE, Text_173DDB, Text_173DF7 - msgbox gUnknown_8173E04, MSGBOX_AUTOCLOSE +SSAnne_2F_Room2_EventScript_Dale:: @ 8160CB1 + trainerbattle_single TRAINER_FISHERMAN_DALE, SSAnne_2F_Room2_Text_DaleIntro, SSAnne_2F_Room2_Text_DaleDefeat + msgbox SSAnne_2F_Room2_Text_DalePostBattle, MSGBOX_AUTOCLOSE end -SSAnne_2F_Room2_EventScript_160CC8:: @ 8160CC8 - trainerbattle_single TRAINER_GENTLEMAN_BROOKS, Text_173D63, Text_173D92 - msgbox gUnknown_8173DB6, MSGBOX_AUTOCLOSE +SSAnne_2F_Room2_EventScript_Brooks:: @ 8160CC8 + trainerbattle_single TRAINER_GENTLEMAN_BROOKS, SSAnne_2F_Room2_Text_BrooksIntro, SSAnne_2F_Room2_Text_BrooksDefeat + msgbox SSAnne_2F_Room2_Text_BrooksPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_2F_Room2/text.inc b/data/maps/SSAnne_2F_Room2/text.inc index a931a8e47..e7fb8ea8a 100644 --- a/data/maps/SSAnne_2F_Room2/text.inc +++ b/data/maps/SSAnne_2F_Room2/text.inc @@ -1,22 +1,22 @@ -Text_173D63:: @ 8173D63 +SSAnne_2F_Room2_Text_BrooksIntro:: @ 8173D63 .string "Competing against the young keeps\n" .string "me youthful.$" -Text_173D92:: @ 8173D92 +SSAnne_2F_Room2_Text_BrooksDefeat:: @ 8173D92 .string "Good match!\n" .string "Ah, I feel young again!$" -gUnknown_8173DB6:: @ 8173DB6 +SSAnne_2F_Room2_Text_BrooksPostBattle:: @ 8173DB6 .string "Fifteen years ago, I would\n" .string "have won!$" -Text_173DDB:: @ 8173DDB +SSAnne_2F_Room2_Text_DaleIntro:: @ 8173DDB .string "Check out what I fished up!$" -Text_173DF7:: @ 8173DF7 +SSAnne_2F_Room2_Text_DaleDefeat:: @ 8173DF7 .string "I'm all out!$" -gUnknown_8173E04:: @ 8173E04 +SSAnne_2F_Room2_Text_DalePostBattle:: @ 8173E04 .string "Party?\p" .string "The cruise ship's party should be\n" .string "over by now.$" diff --git a/data/maps/SSAnne_2F_Room3/map.json b/data/maps/SSAnne_2F_Room3/map.json index 7cc2af8e7..8dbb1e408 100644 --- a/data/maps/SSAnne_2F_Room3/map.json +++ b/data/maps/SSAnne_2F_Room3/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_2F_Room3_EventScript_160CE0", + "script": "SSAnne_2F_Room3_EventScript_Gentleman", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_2F_Room3_EventScript_160CE9", + "script": "SSAnne_2F_Room3_EventScript_OldMan", "flag": "0" } ], diff --git a/data/maps/SSAnne_2F_Room3/scripts.inc b/data/maps/SSAnne_2F_Room3/scripts.inc index 33924805b..8de8f47f3 100644 --- a/data/maps/SSAnne_2F_Room3/scripts.inc +++ b/data/maps/SSAnne_2F_Room3/scripts.inc @@ -1,10 +1,10 @@ SSAnne_2F_Room3_MapScripts:: @ 8160CDF .byte 0 -SSAnne_2F_Room3_EventScript_160CE0:: @ 8160CE0 - msgbox gUnknown_8173E3A, MSGBOX_NPC +SSAnne_2F_Room3_EventScript_Gentleman:: @ 8160CE0 + msgbox SSAnne_2F_Room3_Text_SeenMonsFerryPeople, MSGBOX_NPC end -SSAnne_2F_Room3_EventScript_160CE9:: @ 8160CE9 - msgbox gUnknown_8173E7B, MSGBOX_NPC +SSAnne_2F_Room3_EventScript_OldMan:: @ 8160CE9 + msgbox SSAnne_2F_Room3_Text_SomeTreesCanBeCutDown, MSGBOX_NPC end diff --git a/data/maps/SSAnne_2F_Room3/text.inc b/data/maps/SSAnne_2F_Room3/text.inc index c87c96ae0..680267ced 100644 --- a/data/maps/SSAnne_2F_Room3/text.inc +++ b/data/maps/SSAnne_2F_Room3/text.inc @@ -1,8 +1,8 @@ -gUnknown_8173E3A:: @ 8173E3A +SSAnne_2F_Room3_Text_SeenMonsFerryPeople:: @ 8173E3A .string "Ah, yes, I have seen some POKéMON\n" .string "ferry people across the water!$" -gUnknown_8173E7B:: @ 8173E7B +SSAnne_2F_Room3_Text_SomeTreesCanBeCutDown:: @ 8173E7B .string "Small trees can be chopped down\n" .string "using the move CUT.\p" .string "But remember this!\n" diff --git a/data/maps/SSAnne_2F_Room4/map.json b/data/maps/SSAnne_2F_Room4/map.json index 9b15b4707..dca8226dd 100644 --- a/data/maps/SSAnne_2F_Room4/map.json +++ b/data/maps/SSAnne_2F_Room4/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "SSAnne_2F_Room4_EventScript_160CF3", + "script": "SSAnne_2F_Room4_EventScript_Lamar", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "SSAnne_2F_Room4_EventScript_160D0A", + "script": "SSAnne_2F_Room4_EventScript_Dawn", "flag": "0" }, { diff --git a/data/maps/SSAnne_2F_Room4/scripts.inc b/data/maps/SSAnne_2F_Room4/scripts.inc index 85ecb21bf..13694bcfb 100644 --- a/data/maps/SSAnne_2F_Room4/scripts.inc +++ b/data/maps/SSAnne_2F_Room4/scripts.inc @@ -1,12 +1,12 @@ SSAnne_2F_Room4_MapScripts:: @ 8160CF2 .byte 0 -SSAnne_2F_Room4_EventScript_160CF3:: @ 8160CF3 - trainerbattle_single TRAINER_GENTLEMAN_LAMAR, Text_173F07, Text_173F42 - msgbox gUnknown_8173F55, MSGBOX_AUTOCLOSE +SSAnne_2F_Room4_EventScript_Lamar:: @ 8160CF3 + trainerbattle_single TRAINER_GENTLEMAN_LAMAR, SSAnne_2F_Room4_Text_LamarIntro, SSAnne_2F_Room4_Text_LamarDefeat + msgbox SSAnne_2F_Room4_Text_LamarPostBattle, MSGBOX_AUTOCLOSE end -SSAnne_2F_Room4_EventScript_160D0A:: @ 8160D0A - trainerbattle_single TRAINER_LASS_DAWN, Text_173F83, Text_173FAB - msgbox gUnknown_8173FB9, MSGBOX_AUTOCLOSE +SSAnne_2F_Room4_EventScript_Dawn:: @ 8160D0A + trainerbattle_single TRAINER_LASS_DAWN, SSAnne_2F_Room4_Text_DawnIntro, SSAnne_2F_Room4_Text_DawnDefeat + msgbox SSAnne_2F_Room4_Text_DawnPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_2F_Room4/text.inc b/data/maps/SSAnne_2F_Room4/text.inc index 69e7a7b0d..9eb19a2b4 100644 --- a/data/maps/SSAnne_2F_Room4/text.inc +++ b/data/maps/SSAnne_2F_Room4/text.inc @@ -1,22 +1,22 @@ -Text_173F07:: @ 8173F07 +SSAnne_2F_Room4_Text_LamarIntro:: @ 8173F07 .string "Which do you find more worthy,\n" .string "a strong or a rare POKéMON?$" -Text_173F42:: @ 8173F42 +SSAnne_2F_Room4_Text_LamarDefeat:: @ 8173F42 .string "I must salute you!$" -gUnknown_8173F55:: @ 8173F55 +SSAnne_2F_Room4_Text_LamarPostBattle:: @ 8173F55 .string "Personally, I prefer strong and\n" .string "rare POKéMON.$" -Text_173F83:: @ 8173F83 +SSAnne_2F_Room4_Text_DawnIntro:: @ 8173F83 .string "I don't believe I saw you at the\n" .string "party?$" -Text_173FAB:: @ 8173FAB +SSAnne_2F_Room4_Text_DawnDefeat:: @ 8173FAB .string "Take it easy!$" -gUnknown_8173FB9:: @ 8173FB9 +SSAnne_2F_Room4_Text_DawnPostBattle:: @ 8173FB9 .string "Oh, I adore your strong POKéMON!\n" .string "Oh, how I envy you for them!$" diff --git a/data/maps/SSAnne_2F_Room5/map.json b/data/maps/SSAnne_2F_Room5/map.json index 87a4b8adc..0821d13bd 100644 --- a/data/maps/SSAnne_2F_Room5/map.json +++ b/data/maps/SSAnne_2F_Room5/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_2F_Room5_EventScript_160D22", + "script": "SSAnne_2F_Room5_EventScript_Gentleman", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_2F_Room5_EventScript_160D2B", + "script": "SSAnne_2F_Room5_EventScript_LittleBoy", "flag": "0" } ], diff --git a/data/maps/SSAnne_2F_Room5/scripts.inc b/data/maps/SSAnne_2F_Room5/scripts.inc index 9635b4bf7..2a02c6d91 100644 --- a/data/maps/SSAnne_2F_Room5/scripts.inc +++ b/data/maps/SSAnne_2F_Room5/scripts.inc @@ -1,10 +1,10 @@ SSAnne_2F_Room5_MapScripts:: @ 8160D21 .byte 0 -SSAnne_2F_Room5_EventScript_160D22:: @ 8160D22 - msgbox gUnknown_8173FF7, MSGBOX_NPC +SSAnne_2F_Room5_EventScript_Gentleman:: @ 8160D22 + msgbox SSAnne_2F_Room5_Text_HaveYouGoneToSafariZone, MSGBOX_NPC end -SSAnne_2F_Room5_EventScript_160D2B:: @ 8160D2B - msgbox gUnknown_817404F, MSGBOX_NPC +SSAnne_2F_Room5_EventScript_LittleBoy:: @ 8160D2B + msgbox SSAnne_2F_Room5_Text_WeThinkSafariZoneIsAwesome, MSGBOX_NPC end diff --git a/data/maps/SSAnne_2F_Room5/text.inc b/data/maps/SSAnne_2F_Room5/text.inc index 75d44d3a5..7aa3e2ade 100644 --- a/data/maps/SSAnne_2F_Room5/text.inc +++ b/data/maps/SSAnne_2F_Room5/text.inc @@ -1,10 +1,10 @@ -gUnknown_8173FF7:: @ 8173FF7 +SSAnne_2F_Room5_Text_HaveYouGoneToSafariZone:: @ 8173FF7 .string "Have you gone to the SAFARI ZONE\n" .string "in FUCHSIA CITY?\p" .string "There are many kinds of rare\n" .string "POKéMON.$" -gUnknown_817404F:: @ 817404F +SSAnne_2F_Room5_Text_WeThinkSafariZoneIsAwesome:: @ 817404F .string "Me and my daddy think the SAFARI\n" .string "ZONE is awesome!\l" .string "I wish we could go there again.$" diff --git a/data/maps/SSAnne_2F_Room6/map.json b/data/maps/SSAnne_2F_Room6/map.json index 8e79519a0..56b6e6201 100644 --- a/data/maps/SSAnne_2F_Room6/map.json +++ b/data/maps/SSAnne_2F_Room6/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_2F_Room6_EventScript_160D3E", + "script": "SSAnne_2F_Room6_EventScript_Woman2", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_2F_Room6_EventScript_160D35", + "script": "SSAnne_2F_Room6_EventScript_Woman1", "flag": "0" } ], diff --git a/data/maps/SSAnne_2F_Room6/scripts.inc b/data/maps/SSAnne_2F_Room6/scripts.inc index e92a5501e..458e7c35b 100644 --- a/data/maps/SSAnne_2F_Room6/scripts.inc +++ b/data/maps/SSAnne_2F_Room6/scripts.inc @@ -1,10 +1,10 @@ SSAnne_2F_Room6_MapScripts:: @ 8160D34 .byte 0 -SSAnne_2F_Room6_EventScript_160D35:: @ 8160D35 - msgbox gUnknown_81740A1, MSGBOX_NPC +SSAnne_2F_Room6_EventScript_Woman1:: @ 8160D35 + msgbox SSAnne_2F_Room6_Text_CaptainIsAwfullySick, MSGBOX_NPC end -SSAnne_2F_Room6_EventScript_160D3E:: @ 8160D3E - msgbox gUnknown_81740D6, MSGBOX_NPC +SSAnne_2F_Room6_EventScript_Woman2:: @ 8160D3E + msgbox SSAnne_2F_Room6_Text_ManyPeopleGetSeasick, MSGBOX_NPC end diff --git a/data/maps/SSAnne_2F_Room6/text.inc b/data/maps/SSAnne_2F_Room6/text.inc index 6f5b0abff..9820c1870 100644 --- a/data/maps/SSAnne_2F_Room6/text.inc +++ b/data/maps/SSAnne_2F_Room6/text.inc @@ -1,7 +1,7 @@ -gUnknown_81740A1:: @ 81740A1 +SSAnne_2F_Room6_Text_CaptainIsAwfullySick:: @ 81740A1 .string "The CAPTAIN said he's awfully sick.\n" .string "He was all pale.$" -gUnknown_81740D6:: @ 81740D6 +SSAnne_2F_Room6_Text_ManyPeopleGetSeasick:: @ 81740D6 .string "I hear many people get seasick.$" diff --git a/data/maps/SSAnne_3F_Corridor/map.json b/data/maps/SSAnne_3F_Corridor/map.json index 78aa22911..7c11905f1 100644 --- a/data/maps/SSAnne_3F_Corridor/map.json +++ b/data/maps/SSAnne_3F_Corridor/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_3F_Corridor_EventScript_160A5E", + "script": "SSAnne_3F_Corridor_EventScript_Sailor", "flag": "0" } ], diff --git a/data/maps/SSAnne_3F_Corridor/scripts.inc b/data/maps/SSAnne_3F_Corridor/scripts.inc index 5e67f5532..549fe8f84 100644 --- a/data/maps/SSAnne_3F_Corridor/scripts.inc +++ b/data/maps/SSAnne_3F_Corridor/scripts.inc @@ -1,6 +1,6 @@ SSAnne_3F_Corridor_MapScripts:: @ 8160A5D .byte 0 -SSAnne_3F_Corridor_EventScript_160A5E:: @ 8160A5E - msgbox gUnknown_817320C, MSGBOX_NPC +SSAnne_3F_Corridor_EventScript_Sailor:: @ 8160A5E + msgbox SSAnne_3F_Corridor_Text_CaptainTeachesCutToMons, MSGBOX_NPC end diff --git a/data/maps/SSAnne_3F_Corridor/text.inc b/data/maps/SSAnne_3F_Corridor/text.inc index 7d4a71bb4..a76f43a11 100644 --- a/data/maps/SSAnne_3F_Corridor/text.inc +++ b/data/maps/SSAnne_3F_Corridor/text.inc @@ -1,4 +1,4 @@ -gUnknown_817320C:: @ 817320C +SSAnne_3F_Corridor_Text_CaptainTeachesCutToMons:: @ 817320C .string "Our CAPTAIN is a sword master.\n" .string "He's awesome at using CUT.\p" .string "They say he even teaches CUT\n" diff --git a/data/maps/SSAnne_B1F_Room1/map.json b/data/maps/SSAnne_B1F_Room1/map.json index a5fa829d4..4608e6c9a 100644 --- a/data/maps/SSAnne_B1F_Room1/map.json +++ b/data/maps/SSAnne_B1F_Room1/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 2, - "script": "SSAnne_B1F_Room1_EventScript_160D48", + "script": "SSAnne_B1F_Room1_EventScript_Barny", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 2, - "script": "SSAnne_B1F_Room1_EventScript_160D5F", + "script": "SSAnne_B1F_Room1_EventScript_Phillip", "flag": "0" } ], diff --git a/data/maps/SSAnne_B1F_Room1/scripts.inc b/data/maps/SSAnne_B1F_Room1/scripts.inc index 44cb7d2d1..eb35be89e 100644 --- a/data/maps/SSAnne_B1F_Room1/scripts.inc +++ b/data/maps/SSAnne_B1F_Room1/scripts.inc @@ -1,12 +1,12 @@ SSAnne_B1F_Room1_MapScripts:: @ 8160D47 .byte 0 -SSAnne_B1F_Room1_EventScript_160D48:: @ 8160D48 - trainerbattle_single TRAINER_FISHERMAN_BARNY, Text_174177, Text_1741EF - msgbox gUnknown_817420E, MSGBOX_AUTOCLOSE +SSAnne_B1F_Room1_EventScript_Barny:: @ 8160D48 + trainerbattle_single TRAINER_FISHERMAN_BARNY, SSAnne_B1F_Room1_Text_BarnyIntro, SSAnne_B1F_Room1_Text_BarnyDefeat + msgbox SSAnne_B1F_Room1_Text_BarnyPostBattle, MSGBOX_AUTOCLOSE end -SSAnne_B1F_Room1_EventScript_160D5F:: @ 8160D5F - trainerbattle_single TRAINER_SAILOR_PHILLIP, Text_1740F6, Text_174123 - msgbox gUnknown_817413A, MSGBOX_AUTOCLOSE +SSAnne_B1F_Room1_EventScript_Phillip:: @ 8160D5F + trainerbattle_single TRAINER_SAILOR_PHILLIP, SSAnne_B1F_Room1_Text_PhillipIntro, SSAnne_B1F_Room1_Text_PhillipDefeat + msgbox SSAnne_B1F_Room1_Text_PhillipPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_B1F_Room1/text.inc b/data/maps/SSAnne_B1F_Room1/text.inc index 2802e4a84..bdd4b753c 100644 --- a/data/maps/SSAnne_B1F_Room1/text.inc +++ b/data/maps/SSAnne_B1F_Room1/text.inc @@ -1,26 +1,26 @@ -Text_1740F6:: @ 81740F6 +SSAnne_B1F_Room1_Text_PhillipIntro:: @ 81740F6 .string "Matey, you're walking the plank if\n" .string "you lose!$" -Text_174123:: @ 8174123 +SSAnne_B1F_Room1_Text_PhillipDefeat:: @ 8174123 .string "Argh!\n" .string "Beaten by a kid!$" -gUnknown_817413A:: @ 817413A +SSAnne_B1F_Room1_Text_PhillipPostBattle:: @ 817413A .string "When we're out at sea, jellyfish\n" .string "POKéMON sometimes drift by.$" -Text_174177:: @ 8174177 +SSAnne_B1F_Room1_Text_BarnyIntro:: @ 8174177 .string "Hello, stranger!\p" .string "I can't tell if you're from the seas\n" .string "or mountains, but stop and chat.\p" .string "All my POKéMON are from the sea.$" -Text_1741EF:: @ 81741EF +SSAnne_B1F_Room1_Text_BarnyDefeat:: @ 81741EF .string "Darn!\n" .string "I let that one get away!$" -gUnknown_817420E:: @ 817420E +SSAnne_B1F_Room1_Text_BarnyPostBattle:: @ 817420E .string "I was going to make you my\n" .string "assistant, too!$" diff --git a/data/maps/SSAnne_B1F_Room2/map.json b/data/maps/SSAnne_B1F_Room2/map.json index 462ce7098..31c7d6eb7 100644 --- a/data/maps/SSAnne_B1F_Room2/map.json +++ b/data/maps/SSAnne_B1F_Room2/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 1, - "script": "SSAnne_B1F_Room2_EventScript_160D77", + "script": "SSAnne_B1F_Room2_EventScript_Huey", "flag": "0" }, { diff --git a/data/maps/SSAnne_B1F_Room2/scripts.inc b/data/maps/SSAnne_B1F_Room2/scripts.inc index db9f37fe3..011950863 100644 --- a/data/maps/SSAnne_B1F_Room2/scripts.inc +++ b/data/maps/SSAnne_B1F_Room2/scripts.inc @@ -1,7 +1,7 @@ SSAnne_B1F_Room2_MapScripts:: @ 8160D76 .byte 0 -SSAnne_B1F_Room2_EventScript_160D77:: @ 8160D77 - trainerbattle_single TRAINER_SAILOR_HUEY, Text_174239, Text_17425C - msgbox gUnknown_8174272, MSGBOX_AUTOCLOSE +SSAnne_B1F_Room2_EventScript_Huey:: @ 8160D77 + trainerbattle_single TRAINER_SAILOR_HUEY, SSAnne_B1F_Room2_Text_HueyIntro, SSAnne_B1F_Room2_Text_HueyDefeat + msgbox SSAnne_B1F_Room2_Text_HueyPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_B1F_Room2/text.inc b/data/maps/SSAnne_B1F_Room2/text.inc index df94d6351..852bf55b1 100644 --- a/data/maps/SSAnne_B1F_Room2/text.inc +++ b/data/maps/SSAnne_B1F_Room2/text.inc @@ -1,10 +1,10 @@ -Text_174239:: @ 8174239 +SSAnne_B1F_Room2_Text_HueyIntro:: @ 8174239 .string "Even us sailors have POKéMON, too!$" -Text_17425C:: @ 817425C +SSAnne_B1F_Room2_Text_HueyDefeat:: @ 817425C .string "Okay, you're not bad.$" -gUnknown_8174272:: @ 8174272 +SSAnne_B1F_Room2_Text_HueyPostBattle:: @ 8174272 .string "We caught all our POKéMON while\n" .string "we were out at sea.$" diff --git a/data/maps/SSAnne_B1F_Room3/map.json b/data/maps/SSAnne_B1F_Room3/map.json index 78786691b..70237229c 100644 --- a/data/maps/SSAnne_B1F_Room3/map.json +++ b/data/maps/SSAnne_B1F_Room3/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "SSAnne_B1F_Room3_EventScript_160D8F", + "script": "SSAnne_B1F_Room3_EventScript_Dylan", "flag": "0" }, { diff --git a/data/maps/SSAnne_B1F_Room3/scripts.inc b/data/maps/SSAnne_B1F_Room3/scripts.inc index df90031ac..9d0ffc95e 100644 --- a/data/maps/SSAnne_B1F_Room3/scripts.inc +++ b/data/maps/SSAnne_B1F_Room3/scripts.inc @@ -1,7 +1,7 @@ SSAnne_B1F_Room3_MapScripts:: @ 8160D8E .byte 0 -SSAnne_B1F_Room3_EventScript_160D8F:: @ 8160D8F - trainerbattle_single TRAINER_SAILOR_DYLAN, Text_1742A6, Text_1742C3 - msgbox gUnknown_81742D2, MSGBOX_AUTOCLOSE +SSAnne_B1F_Room3_EventScript_Dylan:: @ 8160D8F + trainerbattle_single TRAINER_SAILOR_DYLAN, SSAnne_B1F_Room3_Text_DylanIntro, SSAnne_B1F_Room3_Text_DylanDefeat + msgbox SSAnne_B1F_Room3_Text_DylanPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_B1F_Room3/text.inc b/data/maps/SSAnne_B1F_Room3/text.inc index f74b96052..cec2b5ec6 100644 --- a/data/maps/SSAnne_B1F_Room3/text.inc +++ b/data/maps/SSAnne_B1F_Room3/text.inc @@ -1,11 +1,11 @@ -Text_1742A6:: @ 81742A6 +SSAnne_B1F_Room3_Text_DylanIntro:: @ 81742A6 .string "I like feisty kids like you!$" -Text_1742C3:: @ 81742C3 +SSAnne_B1F_Room3_Text_DylanDefeat:: @ 81742C3 .string "Argh!\n" .string "Lost it!$" -gUnknown_81742D2:: @ 81742D2 +SSAnne_B1F_Room3_Text_DylanPostBattle:: @ 81742D2 .string "Sea POKéMON live in deep water.\n" .string "You'll need a ROD to fish them up!$" diff --git a/data/maps/SSAnne_B1F_Room4/map.json b/data/maps/SSAnne_B1F_Room4/map.json index ff6030afb..8222e4dbc 100644 --- a/data/maps/SSAnne_B1F_Room4/map.json +++ b/data/maps/SSAnne_B1F_Room4/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "SSAnne_B1F_Room4_EventScript_160DBE", + "script": "SSAnne_B1F_Room4_EventScript_Duncan", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 1, - "script": "SSAnne_B1F_Room4_EventScript_160DA7", + "script": "SSAnne_B1F_Room4_EventScript_Leonard", "flag": "0" } ], diff --git a/data/maps/SSAnne_B1F_Room4/scripts.inc b/data/maps/SSAnne_B1F_Room4/scripts.inc index c84b55b07..66b928b4c 100644 --- a/data/maps/SSAnne_B1F_Room4/scripts.inc +++ b/data/maps/SSAnne_B1F_Room4/scripts.inc @@ -1,12 +1,12 @@ SSAnne_B1F_Room4_MapScripts:: @ 8160DA6 .byte 0 -SSAnne_B1F_Room4_EventScript_160DA7:: @ 8160DA7 - trainerbattle_single TRAINER_SAILOR_LEONARD, Text_174315, Text_174348 - msgbox gUnknown_8174362, MSGBOX_AUTOCLOSE +SSAnne_B1F_Room4_EventScript_Leonard:: @ 8160DA7 + trainerbattle_single TRAINER_SAILOR_LEONARD, SSAnne_B1F_Room4_Text_LeonardIntro, SSAnne_B1F_Room4_Text_LeonardDefeat + msgbox SSAnne_B1F_Room4_Text_LeonardPostBattle, MSGBOX_AUTOCLOSE end -SSAnne_B1F_Room4_EventScript_160DBE:: @ 8160DBE - trainerbattle_single TRAINER_SAILOR_DUNCAN, Text_174385, Text_1743B3 - msgbox gUnknown_81743C8, MSGBOX_AUTOCLOSE +SSAnne_B1F_Room4_EventScript_Duncan:: @ 8160DBE + trainerbattle_single TRAINER_SAILOR_DUNCAN, SSAnne_B1F_Room4_Text_DuncanIntro, SSAnne_B1F_Room4_Text_DuncanDefeat + msgbox SSAnne_B1F_Room4_Text_DuncanPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_B1F_Room4/text.inc b/data/maps/SSAnne_B1F_Room4/text.inc index d2f19f49f..fa6d7eb2e 100644 --- a/data/maps/SSAnne_B1F_Room4/text.inc +++ b/data/maps/SSAnne_B1F_Room4/text.inc @@ -1,23 +1,23 @@ -Text_174315:: @ 8174315 +SSAnne_B1F_Room4_Text_LeonardIntro:: @ 8174315 .string "You know what they say about\n" .string "sailors and battling!$" -Text_174348:: @ 8174348 +SSAnne_B1F_Room4_Text_LeonardDefeat:: @ 8174348 .string "Right!\n" .string "Good battle, mate!$" -gUnknown_8174362:: @ 8174362 +SSAnne_B1F_Room4_Text_LeonardPostBattle:: @ 8174362 .string "Hahaha!\n" .string "Want to be a sailor, mate?$" -Text_174385:: @ 8174385 +SSAnne_B1F_Room4_Text_DuncanIntro:: @ 8174385 .string "Come on, then!\n" .string "My sailor's pride is at stake!$" -Text_1743B3:: @ 81743B3 +SSAnne_B1F_Room4_Text_DuncanDefeat:: @ 81743B3 .string "Your spirit sank me!$" -gUnknown_81743C8:: @ 81743C8 +SSAnne_B1F_Room4_Text_DuncanPostBattle:: @ 81743C8 .string "Did you see the FISHING GURU in\n" .string "VERMILION CITY?$" diff --git a/data/maps/SSAnne_B1F_Room5/map.json b/data/maps/SSAnne_B1F_Room5/map.json index 8896c897f..5ed5383ea 100644 --- a/data/maps/SSAnne_B1F_Room5/map.json +++ b/data/maps/SSAnne_B1F_Room5/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_B1F_Room5_EventScript_160DD6", + "script": "SSAnne_B1F_Room5_EventScript_Boy", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_B1F_Room5_EventScript_160DDF", + "script": "SSAnne_B1F_Room5_EventScript_Machoke", "flag": "0" }, { diff --git a/data/maps/SSAnne_B1F_Room5/scripts.inc b/data/maps/SSAnne_B1F_Room5/scripts.inc index 37d26661b..320f233fd 100644 --- a/data/maps/SSAnne_B1F_Room5/scripts.inc +++ b/data/maps/SSAnne_B1F_Room5/scripts.inc @@ -1,16 +1,16 @@ SSAnne_B1F_Room5_MapScripts:: @ 8160DD5 .byte 0 -SSAnne_B1F_Room5_EventScript_160DD6:: @ 8160DD6 - msgbox gUnknown_81743F8, MSGBOX_NPC +SSAnne_B1F_Room5_EventScript_Boy:: @ 8160DD6 + msgbox SSAnne_B1F_Room5_Text_MachokeHasStrengthToMoveRocks, MSGBOX_NPC end -SSAnne_B1F_Room5_EventScript_160DDF:: @ 8160DDF +SSAnne_B1F_Room5_EventScript_Machoke:: @ 8160DDF lock faceplayer waitse playmoncry SPECIES_MACHOKE, 0 - msgbox gUnknown_8174444 + msgbox SSAnne_B1F_Room5_Text_Machoke waitmoncry release end diff --git a/data/maps/SSAnne_B1F_Room5/text.inc b/data/maps/SSAnne_B1F_Room5/text.inc index ac30dbe95..3126f97e3 100644 --- a/data/maps/SSAnne_B1F_Room5/text.inc +++ b/data/maps/SSAnne_B1F_Room5/text.inc @@ -1,8 +1,8 @@ -gUnknown_81743F8:: @ 81743F8 +SSAnne_B1F_Room5_Text_MachokeHasStrengthToMoveRocks:: @ 81743F8 .string "My buddy MACHOKE is super strong!\p" .string "He has enough STRENGTH to move\n" .string "big rocks!$" -gUnknown_8174444:: @ 8174444 +SSAnne_B1F_Room5_Text_Machoke:: @ 8174444 .string "MACHOKE: Gwoh! Goggoh!$" diff --git a/data/maps/SSAnne_CaptainsOffice/map.json b/data/maps/SSAnne_CaptainsOffice/map.json index 8ec955624..0f79b1014 100644 --- a/data/maps/SSAnne_CaptainsOffice/map.json +++ b/data/maps/SSAnne_CaptainsOffice/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_CaptainsOffice_EventScript_160B3A", + "script": "SSAnne_CaptainsOffice_EventScript_Captain", "flag": "0" } ], @@ -43,21 +43,21 @@ "x": 2, "y": 4, "elevation": 0, - "script": "SSAnne_CaptainsOffice_EventScript_160BD2" + "script": "SSAnne_CaptainsOffice_EventScript_Book" }, { "type": "bg_event_type_0", "x": 5, "y": 3, "elevation": 0, - "script": "SSAnne_CaptainsOffice_EventScript_160BC9" + "script": "SSAnne_CaptainsOffice_EventScript_TrashCan" }, { "type": "bg_event_type_0", "x": 2, "y": 3, "elevation": 0, - "script": "SSAnne_CaptainsOffice_EventScript_160BD2" + "script": "SSAnne_CaptainsOffice_EventScript_Book" } ] } diff --git a/data/maps/SSAnne_CaptainsOffice/scripts.inc b/data/maps/SSAnne_CaptainsOffice/scripts.inc index 7171cae6d..d5d976e21 100644 --- a/data/maps/SSAnne_CaptainsOffice/scripts.inc +++ b/data/maps/SSAnne_CaptainsOffice/scripts.inc @@ -1,12 +1,12 @@ SSAnne_CaptainsOffice_MapScripts:: @ 8160B39 .byte 0 -SSAnne_CaptainsOffice_EventScript_160B3A:: @ 8160B3A +SSAnne_CaptainsOffice_EventScript_Captain:: @ 8160B3A lock - goto_if_set FLAG_GOT_HM01, EventScript_160BB5 - msgbox gUnknown_8173646 + goto_if_set FLAG_GOT_HM01, SSAnne_CaptainsOffice_EventScript_AlreadyGotCut + msgbox SSAnne_CaptainsOffice_Text_CaptainIFeelSeasick textcolor 3 - message Text_173676 + message SSAnne_CaptainsOffice_Text_RubbedCaptainsBack waitmessage playfanfare MUS_ME_ASA waitfanfare @@ -14,33 +14,34 @@ SSAnne_CaptainsOffice_EventScript_160B3A:: @ 8160B3A delay 50 applymovement 1, Movement_FacePlayer waitmovement 0 - msgbox gUnknown_81736A6 - giveitem_msg gUnknown_81737AF, ITEM_HM01, 1, MUS_FAN5 - msgbox gUnknown_81737D2 + msgbox SSAnne_CaptainsOffice_Text_ThankYouHaveHMForCut + giveitem_msg SSAnne_CaptainsOffice_Text_ObtainedHM01FromCaptain, ITEM_HM01, 1, MUS_FAN5 + msgbox SSAnne_CaptainsOffice_Text_ExplainCut setflag FLAG_GOT_HM01 setvar VAR_MAP_SCENE_VERMILION_CITY, 1 release end -EventScript_160BA0:: @ 8160BA0 - msgbox gUnknown_81738C3 +@ Unused +SSAnne_CaptainsOffice_EventScript_NoRoomForCut:: @ 8160BA0 + msgbox SSAnne_CaptainsOffice_Text_YouHaveNoRoomForThis closemessage applymovement 1, Movement_FaceOriginalDirection waitmovement 0 release end -EventScript_160BB5:: @ 8160BB5 +SSAnne_CaptainsOffice_EventScript_AlreadyGotCut:: @ 8160BB5 applymovement 1, Movement_FacePlayer waitmovement 0 - msgbox gUnknown_8173831 + msgbox SSAnne_CaptainsOffice_Text_SSAnneWillSetSailSoon release end -SSAnne_CaptainsOffice_EventScript_160BC9:: @ 8160BC9 - msgbox gUnknown_81738E6, MSGBOX_SIGN +SSAnne_CaptainsOffice_EventScript_TrashCan:: @ 8160BC9 + msgbox SSAnne_CaptainsOffice_Text_YuckShouldntHaveLooked, MSGBOX_SIGN end -SSAnne_CaptainsOffice_EventScript_160BD2:: @ 8160BD2 - msgbox gUnknown_8173903, MSGBOX_SIGN +SSAnne_CaptainsOffice_EventScript_Book:: @ 8160BD2 + msgbox SSAnne_CaptainsOffice_Text_HowToConquerSeasickness, MSGBOX_SIGN end diff --git a/data/maps/SSAnne_CaptainsOffice/text.inc b/data/maps/SSAnne_CaptainsOffice/text.inc index eab68b9bd..f4860b998 100644 --- a/data/maps/SSAnne_CaptainsOffice/text.inc +++ b/data/maps/SSAnne_CaptainsOffice/text.inc @@ -1,15 +1,15 @@ -gUnknown_8173646:: @ 8173646 +SSAnne_CaptainsOffice_Text_CaptainIFeelSeasick:: @ 8173646 .string "CAPTAIN: Ooargh…\n" .string "I feel hideous…\l" .string "Urrp! Seasick…$" -Text_173676:: @ 8173676 +SSAnne_CaptainsOffice_Text_RubbedCaptainsBack:: @ 8173676 .string "{PLAYER} rubbed the CAPTAIN's\n" .string "back!\p" .string "Rub-rub…\n" .string "Rub-rub…$" -gUnknown_81736A6:: @ 81736A6 +SSAnne_CaptainsOffice_Text_ThankYouHaveHMForCut:: @ 81736A6 .string "CAPTAIN: Whew! Thank you!\n" .string "I'm feeling much better now.\p" .string "You want to see my hidden CUT\n" @@ -21,17 +21,17 @@ gUnknown_81736A6:: @ 81736A6 .string "Teach CUT to your POKéMON, and\n" .string "you can see it CUT anytime!$" -gUnknown_81737AF:: @ 81737AF +SSAnne_CaptainsOffice_Text_ObtainedHM01FromCaptain:: @ 81737AF .string "{PLAYER} obtained HM01\n" .string "from the CAPTAIN!$" -gUnknown_81737D2:: @ 81737D2 +SSAnne_CaptainsOffice_Text_ExplainCut:: @ 81737D2 .string "Using CUT, you can chop down\n" .string "small trees.\p" .string "Why not try it with the trees\n" .string "around VERMILION CITY?$" -gUnknown_8173831:: @ 8173831 +SSAnne_CaptainsOffice_Text_SSAnneWillSetSailSoon:: @ 8173831 .string "CAPTAIN: …Whew!\p" .string "Now that I'm not sick anymore,\n" .string "I guess it's time.\p" @@ -39,15 +39,15 @@ gUnknown_8173831:: @ 8173831 .string "Farewell, until our return to\n" .string "VERMILION CITY!$" -gUnknown_81738C3:: @ 81738C3 +SSAnne_CaptainsOffice_Text_YouHaveNoRoomForThis:: @ 81738C3 .string "Oh, no!\n" .string "You have no room for this!$" -gUnknown_81738E6:: @ 81738E6 +SSAnne_CaptainsOffice_Text_YuckShouldntHaveLooked:: @ 81738E6 .string "Yuck!\n" .string "Shouldn't have looked!$" -gUnknown_8173903:: @ 8173903 +SSAnne_CaptainsOffice_Text_HowToConquerSeasickness:: @ 8173903 .string "How to Conquer Seasickness…\n" .string "The CAPTAIN's reading this!$" diff --git a/data/maps/SSAnne_Deck/map.json b/data/maps/SSAnne_Deck/map.json index 43fcf5c4d..617a770b3 100644 --- a/data/maps/SSAnne_Deck/map.json +++ b/data/maps/SSAnne_Deck/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 2, - "script": "SSAnne_Deck_EventScript_160A9B", + "script": "SSAnne_Deck_EventScript_Trevor", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Deck_EventScript_160A72", + "script": "SSAnne_Deck_EventScript_BaldingMan", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Deck_EventScript_160A7B", + "script": "SSAnne_Deck_EventScript_Sailor", "flag": "0" }, { @@ -62,7 +62,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 1, - "script": "SSAnne_Deck_EventScript_160A84", + "script": "SSAnne_Deck_EventScript_Edmond", "flag": "0" }, { @@ -75,7 +75,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Deck_EventScript_160A69", + "script": "SSAnne_Deck_EventScript_Youngster", "flag": "0" } ], diff --git a/data/maps/SSAnne_Deck/scripts.inc b/data/maps/SSAnne_Deck/scripts.inc index d61b65d87..feee8040c 100644 --- a/data/maps/SSAnne_Deck/scripts.inc +++ b/data/maps/SSAnne_Deck/scripts.inc @@ -1,24 +1,24 @@ SSAnne_Deck_MapScripts:: @ 8160A68 .byte 0 -SSAnne_Deck_EventScript_160A69:: @ 8160A69 - msgbox gUnknown_817326F, MSGBOX_NPC +SSAnne_Deck_EventScript_Youngster:: @ 8160A69 + msgbox SSAnne_Deck_Text_ShipDepartingSoon, MSGBOX_NPC end -SSAnne_Deck_EventScript_160A72:: @ 8160A72 - msgbox gUnknown_81732C6, MSGBOX_NPC +SSAnne_Deck_EventScript_BaldingMan:: @ 8160A72 + msgbox SSAnne_Deck_Text_FeelSeasick, MSGBOX_NPC end -SSAnne_Deck_EventScript_160A7B:: @ 8160A7B - msgbox gUnknown_81732A2, MSGBOX_NPC +SSAnne_Deck_EventScript_Sailor:: @ 8160A7B + msgbox SSAnne_Deck_Text_ScrubbingDecksHardWork, MSGBOX_NPC end -SSAnne_Deck_EventScript_160A84:: @ 8160A84 - trainerbattle_single TRAINER_SAILOR_EDMOND, Text_173308, Text_17332B - msgbox gUnknown_817333E, MSGBOX_AUTOCLOSE +SSAnne_Deck_EventScript_Edmond:: @ 8160A84 + trainerbattle_single TRAINER_SAILOR_EDMOND, SSAnne_Deck_Text_EdmondIntro, SSAnne_Deck_Text_EdmondDefeat + msgbox SSAnne_Deck_Text_EdmondPostBattle, MSGBOX_AUTOCLOSE end -SSAnne_Deck_EventScript_160A9B:: @ 8160A9B - trainerbattle_single TRAINER_SAILOR_TREVOR, Text_173382, Text_1733A0 - msgbox gUnknown_81733B5, MSGBOX_AUTOCLOSE +SSAnne_Deck_EventScript_Trevor:: @ 8160A9B + trainerbattle_single TRAINER_SAILOR_TREVOR, SSAnne_Deck_Text_TrevorIntro, SSAnne_Deck_Text_TrevorDefeat + msgbox SSAnne_Deck_Text_TrevorPostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/SSAnne_Deck/text.inc b/data/maps/SSAnne_Deck/text.inc index 08be9fc7d..73c4f42e5 100644 --- a/data/maps/SSAnne_Deck/text.inc +++ b/data/maps/SSAnne_Deck/text.inc @@ -1,35 +1,35 @@ -gUnknown_817326F:: @ 817326F +SSAnne_Deck_Text_ShipDepartingSoon:: @ 817326F .string "The party's over.\n" .string "The ship will be departing soon.$" -gUnknown_81732A2:: @ 81732A2 +SSAnne_Deck_Text_ScrubbingDecksHardWork:: @ 81732A2 .string "Whew!\n" .string "Scrubbing decks is hard work!$" -gUnknown_81732C6:: @ 81732C6 +SSAnne_Deck_Text_FeelSeasick:: @ 81732C6 .string "Urf… I feel ill…\p" .string "I got seasick, so I stepped out to\n" .string "get some air…$" -Text_173308:: @ 8173308 +SSAnne_Deck_Text_EdmondIntro:: @ 8173308 .string "Hey, matey!\p" .string "Let's do a little jig!$" -Text_17332B:: @ 817332B +SSAnne_Deck_Text_EdmondDefeat:: @ 817332B .string "You're impressive!$" -gUnknown_817333E:: @ 817333E +SSAnne_Deck_Text_EdmondPostBattle:: @ 817333E .string "How many kinds of POKéMON do you\n" .string "think there are in this big world?$" -Text_173382:: @ 8173382 +SSAnne_Deck_Text_TrevorIntro:: @ 8173382 .string "Ahoy, there!\n" .string "Are you seasick?$" -Text_1733A0:: @ 81733A0 +SSAnne_Deck_Text_TrevorDefeat:: @ 81733A0 .string "I was just careless!$" -gUnknown_81733B5:: @ 81733B5 +SSAnne_Deck_Text_TrevorPostBattle:: @ 81733B5 .string "My pa said there are 100 kinds of\n" .string "POKéMON. I think there are more.$" diff --git a/data/maps/SSAnne_Exterior/scripts.inc b/data/maps/SSAnne_Exterior/scripts.inc index a8ad24173..416c98cd6 100644 --- a/data/maps/SSAnne_Exterior/scripts.inc +++ b/data/maps/SSAnne_Exterior/scripts.inc @@ -8,22 +8,22 @@ SSAnne_Exterior_OnTransition:: @ 816084B end SSAnne_Exterior_OnFrame:: @ 816084F - map_script_2 VAR_MAP_SCENE_VERMILION_CITY, 1, SSAnne_Exterior_160859 + map_script_2 VAR_MAP_SCENE_VERMILION_CITY, 1, SSAnne_Exterior_ExitSSAnne .2byte 0 -SSAnne_Exterior_160859:: @ 8160859 +SSAnne_Exterior_ExitSSAnne:: @ 8160859 lockall getplayerxy VAR_0x8004, VAR_0x8005 compare VAR_0x8005, 6 - call_if_le EventScript_1608A1 + call_if_le SSAnne_Exterior_WalkDown compare VAR_0x8005, 7 - call_if_ge EventScript_1608AC + call_if_ge SSAnne_Exterior_WalkInPlaceDown fadenewbgm MUS_NAMINORI delay 50 special Special_SSAnneDepartureCutscene waitstate removeobject 1 - applymovement OBJ_EVENT_ID_PLAYER, Movement_1608B7 + applymovement OBJ_EVENT_ID_PLAYER, SSAnne_Exterior_Movement_Exit waitmovement 0 setvar VAR_MAP_SCENE_VERMILION_CITY, 2 setvar VAR_VERMILION_CITY_TICKET_CHECK_TRIGGER, 0 @@ -32,17 +32,17 @@ SSAnne_Exterior_160859:: @ 8160859 releaseall end -EventScript_1608A1:: @ 81608A1 - applymovement OBJ_EVENT_ID_PLAYER, Movement_1608C1 +SSAnne_Exterior_WalkDown:: @ 81608A1 + applymovement OBJ_EVENT_ID_PLAYER, SSAnne_Exterior_Movement_WalkDown waitmovement 0 return -EventScript_1608AC:: @ 81608AC +SSAnne_Exterior_WalkInPlaceDown:: @ 81608AC applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkInPlaceFastestDown waitmovement 0 return -Movement_1608B7:: @ 81608B7 +SSAnne_Exterior_Movement_Exit:: @ 81608B7 walk_up walk_up walk_up @@ -54,7 +54,7 @@ Movement_1608B7:: @ 81608B7 walk_up step_end -Movement_1608C1:: @ 81608C1 +SSAnne_Exterior_Movement_WalkDown:: @ 81608C1 walk_down walk_down walk_down diff --git a/data/maps/SSAnne_Kitchen/map.json b/data/maps/SSAnne_Kitchen/map.json index 25cc15fad..579f9e9b0 100644 --- a/data/maps/SSAnne_Kitchen/map.json +++ b/data/maps/SSAnne_Kitchen/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Kitchen_EventScript_160AB3", + "script": "SSAnne_Kitchen_EventScript_Chef1", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 2, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Kitchen_EventScript_160ABC", + "script": "SSAnne_Kitchen_EventScript_Chef2", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Kitchen_EventScript_160AC5", + "script": "SSAnne_Kitchen_EventScript_Chef3", "flag": "0" }, { @@ -62,7 +62,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Kitchen_EventScript_160ACE", + "script": "SSAnne_Kitchen_EventScript_Chef4", "flag": "0" }, { @@ -75,7 +75,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Kitchen_EventScript_160B1E", + "script": "SSAnne_Kitchen_EventScript_Chef5", "flag": "0" }, { @@ -88,7 +88,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Kitchen_EventScript_160B27", + "script": "SSAnne_Kitchen_EventScript_Chef6", "flag": "0" }, { @@ -101,7 +101,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "SSAnne_Kitchen_EventScript_160B30", + "script": "SSAnne_Kitchen_EventScript_Chef7", "flag": "0" }, { diff --git a/data/maps/SSAnne_Kitchen/scripts.inc b/data/maps/SSAnne_Kitchen/scripts.inc index 565efd607..2f3d0ee06 100644 --- a/data/maps/SSAnne_Kitchen/scripts.inc +++ b/data/maps/SSAnne_Kitchen/scripts.inc @@ -1,53 +1,53 @@ SSAnne_Kitchen_MapScripts:: @ 8160AB2 .byte 0 -SSAnne_Kitchen_EventScript_160AB3:: @ 8160AB3 - msgbox gUnknown_81733F8, MSGBOX_NPC +SSAnne_Kitchen_EventScript_Chef1:: @ 8160AB3 + msgbox SSAnne_Kitchen_Text_BusyOutOfTheWay, MSGBOX_NPC end -SSAnne_Kitchen_EventScript_160ABC:: @ 8160ABC - msgbox gUnknown_8173429, MSGBOX_NPC +SSAnne_Kitchen_EventScript_Chef2:: @ 8160ABC + msgbox SSAnne_Kitchen_Text_SawOddBerryInTrash, MSGBOX_NPC end -SSAnne_Kitchen_EventScript_160AC5:: @ 8160AC5 - msgbox gUnknown_8173462, MSGBOX_NPC +SSAnne_Kitchen_EventScript_Chef3:: @ 8160AC5 + msgbox SSAnne_Kitchen_Text_SoBusyImDizzy, MSGBOX_NPC end -SSAnne_Kitchen_EventScript_160ACE:: @ 8160ACE +SSAnne_Kitchen_EventScript_Chef4:: @ 8160ACE lock faceplayer - msgbox gUnknown_8173570 + msgbox SSAnne_Kitchen_Text_IAmLeChefMainCourseIs random 3 copyvar VAR_0x8008, VAR_RESULT compare VAR_0x8008, 0 - call_if_eq EventScript_160B03 + call_if_eq SSAnne_Kitchen_EventScript_SalmonDuSalad compare VAR_0x8008, 1 - call_if_eq EventScript_160B0C + call_if_eq SSAnne_Kitchen_EventScript_EelsAuBarbecue compare VAR_0x8008, 2 - call_if_eq EventScript_160B15 + call_if_eq SSAnne_Kitchen_EventScript_PrimeBeefsteak release end -EventScript_160B03:: @ 8160B03 - msgbox gUnknown_817359F +SSAnne_Kitchen_EventScript_SalmonDuSalad:: @ 8160B03 + msgbox SSAnne_Kitchen_Text_SalmonDuSalad return -EventScript_160B0C:: @ 8160B0C - msgbox gUnknown_81735DF +SSAnne_Kitchen_EventScript_EelsAuBarbecue:: @ 8160B0C + msgbox SSAnne_Kitchen_Text_EelsAuBarbecue return -EventScript_160B15:: @ 8160B15 - msgbox gUnknown_8173611 +SSAnne_Kitchen_EventScript_PrimeBeefsteak:: @ 8160B15 + msgbox SSAnne_Kitchen_Text_PrimeBeefsteak return -SSAnne_Kitchen_EventScript_160B1E:: @ 8160B1E - msgbox gUnknown_81734A0, MSGBOX_NPC +SSAnne_Kitchen_EventScript_Chef5:: @ 8160B1E + msgbox SSAnne_Kitchen_Text_PeelSpudsEveryDay, MSGBOX_NPC end -SSAnne_Kitchen_EventScript_160B27:: @ 8160B27 - msgbox gUnknown_81734D3, MSGBOX_NPC +SSAnne_Kitchen_EventScript_Chef6:: @ 8160B27 + msgbox SSAnne_Kitchen_Text_HearAboutSnorlaxItsAGlutton, MSGBOX_NPC end -SSAnne_Kitchen_EventScript_160B30:: @ 8160B30 - msgbox gUnknown_817353E, MSGBOX_NPC +SSAnne_Kitchen_EventScript_Chef7:: @ 8160B30 + msgbox SSAnne_Kitchen_Text_OnlyGetToPeelOnions, MSGBOX_NPC end diff --git a/data/maps/SSAnne_Kitchen/text.inc b/data/maps/SSAnne_Kitchen/text.inc index edd115076..24146ac8a 100644 --- a/data/maps/SSAnne_Kitchen/text.inc +++ b/data/maps/SSAnne_Kitchen/text.inc @@ -1,47 +1,47 @@ -gUnknown_81733F8:: @ 81733F8 +SSAnne_Kitchen_Text_BusyOutOfTheWay:: @ 81733F8 .string "You, mon petit!\n" .string "We're busy here!\l" .string "Out of the way!$" -gUnknown_8173429:: @ 8173429 +SSAnne_Kitchen_Text_SawOddBerryInTrash:: @ 8173429 .string "I saw an odd BERRY in the trash.\n" .string "I wonder what that was?$" -gUnknown_8173462:: @ 8173462 +SSAnne_Kitchen_Text_SoBusyImDizzy:: @ 8173462 .string "I'm so busy I'm getting dizzy!\n" .string "You have to give me room here!$" -gUnknown_81734A0:: @ 81734A0 +SSAnne_Kitchen_Text_PeelSpudsEveryDay:: @ 81734A0 .string "Hum-de-hum-de-ho…\p" .string "I peel spuds every day!\n" .string "Hum-hum…$" -gUnknown_81734D3:: @ 81734D3 +SSAnne_Kitchen_Text_HearAboutSnorlaxItsAGlutton:: @ 81734D3 .string "Did you hear about SNORLAX?\n" .string "It's a glutton.\p" .string "No other POKéMON eats and sleeps\n" .string "the way SNORLAX can and does!$" -gUnknown_817353E:: @ 817353E +SSAnne_Kitchen_Text_OnlyGetToPeelOnions:: @ 817353E .string "Snivel… Sniff…\p" .string "I only get to peel onions…\n" .string "Snivel…$" -gUnknown_8173570:: @ 8173570 +SSAnne_Kitchen_Text_IAmLeChefMainCourseIs:: @ 8173570 .string "Er-hem!\n" .string "Indeed I am le CHEF!\p" .string "Le main course is$" -gUnknown_817359F:: @ 817359F +SSAnne_Kitchen_Text_SalmonDuSalad:: @ 817359F .string "Salmon du Salad!\p" .string "Les guests may gripe it's fish\n" .string "again, however!$" -gUnknown_81735DF:: @ 81735DF +SSAnne_Kitchen_Text_EelsAuBarbecue:: @ 81735DF .string "Eels au Barbecue!\p" .string "Les guests will mutiny, I fear.$" -gUnknown_8173611:: @ 8173611 +SSAnne_Kitchen_Text_PrimeBeefsteak:: @ 8173611 .string "Prime Beefsteak!\p" .string "But, have I enough fillets du\n" .string "beef?$" diff --git a/data/maps/SevenIsland_Harbor/scripts.inc b/data/maps/SevenIsland_Harbor/scripts.inc index dfa2da755..f042ca668 100644 --- a/data/maps/SevenIsland_Harbor/scripts.inc +++ b/data/maps/SevenIsland_Harbor/scripts.inc @@ -7,5 +7,5 @@ SevenIsland_Harbor_EventScript_170BE5:: @ 8170BE5 message Text_WhereDoYouWantToSail waitmessage setvar VAR_0x8004, SEAGALLOP_SEVEN_ISLAND - goto EventScript_1A900F + goto EventScript_ChooseDestFromIsland end diff --git a/data/maps/SixIsland_Harbor/scripts.inc b/data/maps/SixIsland_Harbor/scripts.inc index 8db4500ca..11ed9c7b8 100644 --- a/data/maps/SixIsland_Harbor/scripts.inc +++ b/data/maps/SixIsland_Harbor/scripts.inc @@ -7,5 +7,5 @@ SixIsland_Harbor_EventScript_171E48:: @ 8171E48 message Text_WhereDoYouWantToSail waitmessage setvar VAR_0x8004, SEAGALLOP_SIX_ISLAND - goto EventScript_1A900F + goto EventScript_ChooseDestFromIsland end diff --git a/data/maps/ThreeIsland_Harbor/scripts.inc b/data/maps/ThreeIsland_Harbor/scripts.inc index 0edd8cac9..6705741cb 100644 --- a/data/maps/ThreeIsland_Harbor/scripts.inc +++ b/data/maps/ThreeIsland_Harbor/scripts.inc @@ -7,5 +7,5 @@ ThreeIsland_Harbor_EventScript_171EAA:: @ 8171EAA message Text_WhereDoYouWantToSail waitmessage setvar VAR_0x8004, SEAGALLOP_THREE_ISLAND - goto EventScript_1A900F + goto EventScript_ChooseDestFromIsland end diff --git a/data/maps/TwoIsland_Harbor/scripts.inc b/data/maps/TwoIsland_Harbor/scripts.inc index ff1bb82bf..8c2eab36d 100644 --- a/data/maps/TwoIsland_Harbor/scripts.inc +++ b/data/maps/TwoIsland_Harbor/scripts.inc @@ -7,5 +7,5 @@ TwoIsland_Harbor_EventScript_171806:: @ 8171806 message Text_WhereDoYouWantToSail waitmessage setvar VAR_0x8004, SEAGALLOP_TWO_ISLAND - goto EventScript_1A8F54 + goto EventScript_ChooseDestFromTwoIsland end diff --git a/data/maps/VermilionCity/map.json b/data/maps/VermilionCity/map.json index e4286aa87..0a5fe287a 100644 --- a/data/maps/VermilionCity/map.json +++ b/data/maps/VermilionCity/map.json @@ -34,7 +34,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_EventScript_166917", + "script": "VermilionCity_EventScript_Woman", "flag": "0" }, { @@ -47,7 +47,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_EventScript_166920", + "script": "VermilionCity_EventScript_OldMan1", "flag": "0" }, { @@ -60,7 +60,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_EventScript_166C2F", + "script": "VermilionCity_EventScript_OldMan2", "flag": "0" }, { @@ -73,7 +73,7 @@ "movement_range_y": 2, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_EventScript_166C38", + "script": "VermilionCity_EventScript_Machop", "flag": "0" }, { @@ -86,7 +86,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_EventScript_166C17", + "script": "VermilionCity_EventScript_Sailor", "flag": "0" }, { @@ -99,7 +99,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_EventScript_166941", + "script": "VermilionCity_EventScript_FerrySailor", "flag": "0" }, { @@ -125,7 +125,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_EventScript_166C20", + "script": "VermilionCity_EventScript_OaksAide", "flag": "FLAG_HIDE_VERMILION_CITY_OAKS_AIDE" } ], @@ -209,7 +209,7 @@ "elevation": 0, "var": "VAR_VERMILION_CITY_TICKET_CHECK_TRIGGER", "var_value": 0, - "script": "VermilionCity_EventScript_166B8A" + "script": "VermilionCity_EventScript_CheckTicketLeft" }, { "type": "trigger", @@ -218,7 +218,7 @@ "elevation": 0, "var": "VAR_VERMILION_CITY_TICKET_CHECK_TRIGGER", "var_value": 0, - "script": "VermilionCity_EventScript_166B91" + "script": "VermilionCity_EventScript_CheckTicketRight" }, { "type": "trigger", @@ -227,7 +227,7 @@ "elevation": 0, "var": "VAR_TEMP_1", "var_value": 0, - "script": "VermilionCity_EventScript_166B98" + "script": "VermilionCity_EventScript_ExitedTicketCheck" }, { "type": "trigger", @@ -236,7 +236,7 @@ "elevation": 0, "var": "VAR_TEMP_1", "var_value": 0, - "script": "VermilionCity_EventScript_166B98" + "script": "VermilionCity_EventScript_ExitedTicketCheck" } ], "bg_events": [ @@ -245,35 +245,35 @@ "x": 33, "y": 6, "elevation": 0, - "script": "VermilionCity_EventScript_166C53" + "script": "VermilionCity_EventScript_CitySign" }, { "type": "bg_event_type_0", "x": 10, "y": 17, "elevation": 3, - "script": "VermilionCity_EventScript_166C65" + "script": "VermilionCity_EventScript_PokemonFanClubSign" }, { "type": "bg_event_type_0", "x": 10, "y": 24, "elevation": 0, - "script": "VermilionCity_EventScript_166C6E" + "script": "VermilionCity_EventScript_GymSign" }, { "type": "bg_event_type_0", "x": 34, "y": 18, "elevation": 0, - "script": "VermilionCity_EventScript_166C86" + "script": "VermilionCity_EventScript_HarborSign" }, { "type": "bg_event_type_0", "x": 45, "y": 17, "elevation": 3, - "script": "VermilionCity_EventScript_166C5C" + "script": "VermilionCity_EventScript_SnorlaxNotice" }, { "type": "hidden_item", diff --git a/data/maps/VermilionCity/scripts.inc b/data/maps/VermilionCity/scripts.inc index ad6a36007..0442f3d02 100644 --- a/data/maps/VermilionCity/scripts.inc +++ b/data/maps/VermilionCity/scripts.inc @@ -1,62 +1,64 @@ +.equ LOCALID_FERRY_SAILOR, 6 + VermilionCity_MapScripts:: @ 81668DC map_script MAP_SCRIPT_ON_TRANSITION, VermilionCity_OnTransition map_script MAP_SCRIPT_ON_FRAME_TABLE, VermilionCity_OnFrame .byte 0 VermilionCity_OnFrame:: @ 81668E7 - map_script_2 VAR_MAP_SCENE_VERMILION_CITY, 2, EventScript_1668F1 + map_script_2 VAR_MAP_SCENE_VERMILION_CITY, 2, VermilionCity_EventScript_ExitSSAnne .2byte 0 -EventScript_1668F1:: @ 81668F1 +VermilionCity_EventScript_ExitSSAnne:: @ 81668F1 lockall - applymovement OBJ_EVENT_ID_PLAYER, Movement_166903 + applymovement OBJ_EVENT_ID_PLAYER, VermilionCity_Movement_ExitSSAnne waitmovement 0 setvar VAR_MAP_SCENE_VERMILION_CITY, 3 releaseall end -Movement_166903:: @ 8166903 +VermilionCity_Movement_ExitSSAnne:: @ 8166903 walk_up walk_up step_end VermilionCity_OnTransition:: @ 8166906 setworldmapflag FLAG_WORLD_MAP_VERMILION_CITY - call_if_set FLAG_TALKED_TO_OAKS_AIDE_IN_VERMILION, EventScript_166913 + call_if_set FLAG_TALKED_TO_OAKS_AIDE_IN_VERMILION, VermilionCity_EventScript_HideOaksAide end -EventScript_166913:: @ 8166913 +VermilionCity_EventScript_HideOaksAide:: @ 8166913 setflag FLAG_HIDE_VERMILION_CITY_OAKS_AIDE return -VermilionCity_EventScript_166917:: @ 8166917 - msgbox gUnknown_817F723, MSGBOX_NPC +VermilionCity_EventScript_Woman:: @ 8166917 + msgbox VermilionCity_Text_GrimerMultipliesInSludge, MSGBOX_NPC end -VermilionCity_EventScript_166920:: @ 8166920 +VermilionCity_EventScript_OldMan1:: @ 8166920 lock faceplayer compare VAR_MAP_SCENE_VERMILION_CITY, 3 - goto_if_eq EventScript_166937 - msgbox gUnknown_817F776 + goto_if_eq VermilionCity_EventScript_OldMan1SSAnneLeft + msgbox VermilionCity_Text_DidYouSeeSSAnneInHarbor release end -EventScript_166937:: @ 8166937 - msgbox gUnknown_817F7A6 +VermilionCity_EventScript_OldMan1SSAnneLeft:: @ 8166937 + msgbox VermilionCity_Text_SSAnneHasDepartedForYear release end -VermilionCity_EventScript_166941:: @ 8166941 +VermilionCity_EventScript_FerrySailor:: @ 8166941 lock faceplayer compare VAR_MAP_SCENE_VERMILION_CITY, 3 - goto_if_eq EventScript_166996 - msgbox gUnknown_817FA22 + goto_if_eq VermilionCity_EventScript_CheckSeagallopPresent + msgbox VermilionCity_Text_WelcomeToTheSSAnne release end -EventScript_166958:: @ 8166958 +VermilionCity_EventScript_CheckHasMysticTicket:: @ 8166958 goto_if_unset FLAG_SYS_GOT_MYSTIC_TICKET, EventScript_SetResultFalse checkitem ITEM_MYSTIC_TICKET, 1 compare VAR_RESULT, FALSE @@ -64,7 +66,7 @@ EventScript_166958:: @ 8166958 goto EventScript_SetResultTrue end -EventScript_166977:: @ 8166977 +VermilionCity_EventScript_CheckHasAuroraTicket:: @ 8166977 goto_if_unset FLAG_SYS_GOT_AURORA_TICKET, EventScript_SetResultFalse checkitem ITEM_AURORA_TICKET, 1 compare VAR_RESULT, FALSE @@ -72,206 +74,207 @@ EventScript_166977:: @ 8166977 goto EventScript_SetResultTrue end -EventScript_166996:: @ 8166996 +VermilionCity_EventScript_CheckSeagallopPresent:: @ 8166996 setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY compare VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5 - goto_if_ge EventScript_1669BB + goto_if_ge VermilionCity_EventScript_ChooseSeagallopDestRainbowPass compare VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 1 - goto_if_ge EventScript_166B3B - msgbox gUnknown_817FB10 + goto_if_ge VermilionCity_EventScript_ChooseSeagallopDestTriPass + msgbox VermilionCity_Text_TheShipSetSail release end -EventScript_1669BB:: @ 81669BB +VermilionCity_EventScript_ChooseSeagallopDestRainbowPass:: @ 81669BB goto_if_questlog EventScript_ReleaseEnd special sub_8112364 - call EventScript_166958 - compare VAR_RESULT, 1 - goto_if_eq EventScript_1669FD - call EventScript_166977 - compare VAR_RESULT, 1 - goto_if_eq EventScript_166A5F + call VermilionCity_EventScript_CheckHasMysticTicket + compare VAR_RESULT, TRUE + goto_if_eq VermilionCity_EventScript_HasMysticTicket + call VermilionCity_EventScript_CheckHasAuroraTicket + compare VAR_RESULT, TRUE + goto_if_eq VermilionCity_EventScript_HasAuroraTicket setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY - message Text_17FBB8 + message VermilionCity_Text_BoardSeagallopRainbowPass waitmessage - goto EventScript_1A911E + goto EventScript_SeviiDestinationsPage1 end -EventScript_1669FD:: @ 81669FD - call EventScript_166977 - compare VAR_RESULT, 1 - goto_if_eq EventScript_166AB1 - call_if_unset FLAG_SHOWED_MYSTICTICKET_TO_CAPTAIN, EventScript_166A53 - message Text_17FCC1 +VermilionCity_EventScript_HasMysticTicket:: @ 81669FD + call VermilionCity_EventScript_CheckHasAuroraTicket + compare VAR_RESULT, TRUE + goto_if_eq VermilionCity_EventScript_HasMysticAndAuroraTickets + call_if_unset FLAG_SHOWED_MYSTICTICKET_TO_CAPTAIN, VermilionCity_EventScript_ShowMysticTicket + message VermilionCity_Text_BoardSeagallopFerry waitmessage multichoice 17, 6, MULTICHOICE_SEVII_NAVEL, FALSE switch VAR_RESULT - case 0, EventScript_1A911E - case 1, EventScript_166B0B + case 0, EventScript_SeviiDestinationsPage1 + case 1, EventScript_SailToNavelRock case 2, EventScript_CancelSail case 127, EventScript_CancelSail end -EventScript_166A53:: @ 8166A53 +VermilionCity_EventScript_ShowMysticTicket:: @ 8166A53 setflag FLAG_SHOWED_MYSTICTICKET_TO_CAPTAIN - msgbox gUnknown_817FC00 + msgbox VermilionCity_Text_OhMysticTicketTakeYouToNavelRock return -EventScript_166A5F:: @ 8166A5F - call_if_unset FLAG_SHOWED_AURORATICKET_TO_CAPTAIN, EventScript_166AA5 - message Text_17FCC1 +VermilionCity_EventScript_HasAuroraTicket:: @ 8166A5F + call_if_unset FLAG_SHOWED_AURORATICKET_TO_CAPTAIN, VermilionCity_EventScript_ShowAuroraTicket + message VermilionCity_Text_BoardSeagallopFerry waitmessage multichoice 13, 6, MULTICHOICE_SEVII_BIRTH, FALSE switch VAR_RESULT - case 0, EventScript_1A911E - case 1, EventScript_166B23 + case 0, EventScript_SeviiDestinationsPage1 + case 1, EventScript_SailToBirthIsland case 2, EventScript_CancelSail case 127, EventScript_CancelSail end -EventScript_166AA5:: @ 8166AA5 +VermilionCity_EventScript_ShowAuroraTicket:: @ 8166AA5 setflag FLAG_SHOWED_AURORATICKET_TO_CAPTAIN - msgbox gUnknown_817FC5F + msgbox VermilionCity_Text_OhAuroraTicketTakeYouToBirthIsland return -EventScript_166AB1:: @ 8166AB1 - call_if_unset FLAG_SHOWED_MYSTICTICKET_TO_CAPTAIN, EventScript_166A53 - call_if_unset FLAG_SHOWED_AURORATICKET_TO_CAPTAIN, EventScript_166AA5 - message Text_17FCC1 +VermilionCity_EventScript_HasMysticAndAuroraTickets:: @ 8166AB1 + call_if_unset FLAG_SHOWED_MYSTICTICKET_TO_CAPTAIN, VermilionCity_EventScript_ShowMysticTicket + call_if_unset FLAG_SHOWED_AURORATICKET_TO_CAPTAIN, VermilionCity_EventScript_ShowAuroraTicket + message VermilionCity_Text_BoardSeagallopFerry waitmessage multichoice 13, 5, MULTICHOICE_SEVII_NAVEL_BIRTH, FALSE switch VAR_RESULT - case 0, EventScript_1A911E - case 1, EventScript_166B0B - case 2, EventScript_166B23 + case 0, EventScript_SeviiDestinationsPage1 + case 1, EventScript_SailToNavelRock + case 2, EventScript_SailToBirthIsland case 3, EventScript_CancelSail case 127, EventScript_CancelSail end -EventScript_166B0B:: @ 8166B0B - msgbox gUnknown_817FCEC +EventScript_SailToNavelRock:: @ 8166B0B + msgbox VermilionCity_Text_Seagallop10Departing setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY setvar VAR_0x8006, SEAGALLOP_NAVEL_ROCK - goto EventScript_1A90DA + goto EventScript_SetSail end -EventScript_166B23:: @ 8166B23 - msgbox gUnknown_817FD5F +EventScript_SailToBirthIsland:: @ 8166B23 + msgbox VermilionCity_Text_Seagallop12Departing setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY setvar VAR_0x8006, SEAGALLOP_BIRTH_ISLAND - goto EventScript_1A90DA + goto EventScript_SetSail end -EventScript_166B3B:: @ 8166B3B - message Text_17FB23 +VermilionCity_EventScript_ChooseSeagallopDestTriPass:: @ 8166B3B + message VermilionCity_Text_BoardSeagallopTriPass waitmessage setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY multichoice 19, 5, MULTICHOICE_SEAGALLOP_123, FALSE switch VAR_RESULT - case 0, EventScript_1A8FEE - case 1, EventScript_1A8FF9 - case 2, EventScript_1A9004 + case 0, EventScript_SailToOneIsland2 + case 1, EventScript_SailToTwoIsland2 + case 2, EventScript_SailToThreeIsland2 case 3, EventScript_CancelSail case 127, EventScript_CancelSail end -EventScript_166B88:: @ 8166B88 +@ Unreachable +Vermilion_EventScript_Unused:: @ 8166B88 release end -VermilionCity_EventScript_166B8A:: @ 8166B8A +VermilionCity_EventScript_CheckTicketLeft:: @ 8166B8A lockall - goto EventScript_166BA0 + goto VermilionCity_EventScript_CheckTicket end -VermilionCity_EventScript_166B91:: @ 8166B91 +VermilionCity_EventScript_CheckTicketRight:: @ 8166B91 lockall - goto EventScript_166BA0 + goto VermilionCity_EventScript_CheckTicket end -VermilionCity_EventScript_166B98:: @ 8166B98 +VermilionCity_EventScript_ExitedTicketCheck:: @ 8166B98 lockall setvar VAR_VERMILION_CITY_TICKET_CHECK_TRIGGER, 0 releaseall end -EventScript_166BA0:: @ 8166BA0 +VermilionCity_EventScript_CheckTicket:: @ 8166BA0 textcolor 0 - applymovement 6, Movement_WalkInPlaceFastestLeft + applymovement LOCALID_FERRY_SAILOR, Movement_WalkInPlaceFastestLeft applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkInPlaceFastestRight waitmovement 0 compare VAR_MAP_SCENE_VERMILION_CITY, 3 - goto_if_eq EventScript_166BED - msgbox gUnknown_817FA3C - goto_if_unset FLAG_GOT_SS_TICKET, EventScript_166BDE - msgbox gUnknown_817FA77 + goto_if_eq VermilionCity_EventScript_CheckSeagallopPresentTrigger + msgbox VermilionCity_Text_DoYouHaveATicket + goto_if_unset FLAG_GOT_SS_TICKET, VermilionCity_EventScript_DontHaveSSTicket + msgbox VermilionCity_Text_FlashedSSTicket setvar VAR_VERMILION_CITY_TICKET_CHECK_TRIGGER, 1 releaseall end -EventScript_166BDE:: @ 8166BDE - msgbox gUnknown_817FABA +VermilionCity_EventScript_DontHaveSSTicket:: @ 8166BDE + msgbox VermilionCity_Text_DontHaveNeededSSTicket closemessage - goto EventScript_1A9108 + goto VermilionCity_EventScript_WalkUpPier end -EventScript_166BED:: @ 8166BED +VermilionCity_EventScript_CheckSeagallopPresentTrigger:: @ 8166BED setvar VAR_0x8004, SEAGALLOP_VERMILION_CITY compare VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5 - goto_if_ge EventScript_1669BB + goto_if_ge VermilionCity_EventScript_ChooseSeagallopDestRainbowPass compare VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 1 - goto_if_ge EventScript_166B3B - msgbox gUnknown_817FB10 + goto_if_ge VermilionCity_EventScript_ChooseSeagallopDestTriPass + msgbox VermilionCity_Text_TheShipSetSail closemessage - goto EventScript_1A9108 + goto VermilionCity_EventScript_WalkUpPier end -VermilionCity_EventScript_166C17:: @ 8166C17 - msgbox gUnknown_817F8AC, MSGBOX_NPC +VermilionCity_EventScript_Sailor:: @ 8166C17 + msgbox VermilionCity_Text_SSAnneVisitsOnceAYear, MSGBOX_NPC end -VermilionCity_EventScript_166C20:: @ 8166C20 +VermilionCity_EventScript_OaksAide:: @ 8166C20 lock faceplayer setflag FLAG_TALKED_TO_OAKS_AIDE_IN_VERMILION - msgbox gUnknown_817FDD2 + msgbox VermilionCity_Text_Route2AideHasPackageForYou release end -VermilionCity_EventScript_166C2F:: @ 8166C2F - msgbox gUnknown_817F7FD, MSGBOX_NPC +VermilionCity_EventScript_OldMan2:: @ 8166C2F + msgbox VermilionCity_Text_BuildingOnThisLand, MSGBOX_NPC end -VermilionCity_EventScript_166C38:: @ 8166C38 +VermilionCity_EventScript_Machop:: @ 8166C38 lock faceplayer waitse playmoncry SPECIES_MACHOP, 0 - msgbox gUnknown_817F871 + msgbox VermilionCity_Text_Machop waitmoncry - msgbox gUnknown_817F888 + msgbox VermilionCity_Text_MachopStompingLandFlat release end -VermilionCity_EventScript_166C53:: @ 8166C53 - msgbox gUnknown_817F8FB, MSGBOX_SIGN +VermilionCity_EventScript_CitySign:: @ 8166C53 + msgbox VermilionCity_Text_CitySign, MSGBOX_SIGN end -VermilionCity_EventScript_166C5C:: @ 8166C5C - msgbox gUnknown_817F928, MSGBOX_SIGN +VermilionCity_EventScript_SnorlaxNotice:: @ 8166C5C + msgbox VermilionCity_Text_SnorlaxBlockingRoute12, MSGBOX_SIGN end -VermilionCity_EventScript_166C65:: @ 8166C65 - msgbox gUnknown_817F9A1, MSGBOX_SIGN +VermilionCity_EventScript_PokemonFanClubSign:: @ 8166C65 + msgbox VermilionCity_Text_PokemonFanClubSign, MSGBOX_SIGN end -VermilionCity_EventScript_166C6E:: @ 8166C6E +VermilionCity_EventScript_GymSign:: @ 8166C6E lockall famechecker FAMECHECKER_LTSURGE, 0 - msgbox gUnknown_817F9CC + msgbox VermilionCity_Text_GymSign releaseall end -VermilionCity_EventScript_166C86:: @ 8166C86 - msgbox gUnknown_817FA11, MSGBOX_SIGN +VermilionCity_EventScript_HarborSign:: @ 8166C86 + msgbox VermilionCity_Text_VermilionHarbor, MSGBOX_SIGN end diff --git a/data/maps/VermilionCity/text.inc b/data/maps/VermilionCity/text.inc index bce18d9fb..bb784b83a 100644 --- a/data/maps/VermilionCity/text.inc +++ b/data/maps/VermilionCity/text.inc @@ -1,39 +1,39 @@ -gUnknown_817F723:: @ 817F723 +VermilionCity_Text_GrimerMultipliesInSludge:: @ 817F723 .string "We're careful about pollution here.\p" .string "We've heard GRIMER multiplies in\n" .string "toxic sludge.$" -gUnknown_817F776:: @ 817F776 +VermilionCity_Text_DidYouSeeSSAnneInHarbor:: @ 817F776 .string "Did you see the S.S. ANNE moored\n" .string "in the harbor?$" -gUnknown_817F7A6:: @ 817F7A6 +VermilionCity_Text_SSAnneHasDepartedForYear:: @ 817F7A6 .string "So, the S.S. ANNE has departed?\p" .string "She'll be back in VERMILION about\n" .string "this time next year.$" -gUnknown_817F7FD:: @ 817F7FD +VermilionCity_Text_BuildingOnThisLand:: @ 817F7FD .string "I'm putting up a building on this\n" .string "plot of land. I own it all.\p" .string "My POKéMON is tamping the land\n" .string "to lay the foundation.$" -gUnknown_817F871:: @ 817F871 +VermilionCity_Text_Machop:: @ 817F871 .string "MACHOP: Guoh! Gogogoh!$" -gUnknown_817F888:: @ 817F888 +VermilionCity_Text_MachopStompingLandFlat:: @ 817F888 .string "A MACHOP is stomping the land flat.$" -gUnknown_817F8AC:: @ 817F8AC +VermilionCity_Text_SSAnneVisitsOnceAYear:: @ 817F8AC .string "The S.S. ANNE is a famous luxury\n" .string "cruise ship.\p" .string "It visits VERMILION once a year.$" -gUnknown_817F8FB:: @ 817F8FB +VermilionCity_Text_CitySign:: @ 817F8FB .string "VERMILION CITY\n" .string "The Port of Exquisite Sunsets$" -gUnknown_817F928:: @ 817F928 +VermilionCity_Text_SnorlaxBlockingRoute12:: @ 817F928 .string "NOTICE!\p" .string "ROUTE 12 may be blocked off by a\n" .string "sleeping POKéMON.\p" @@ -41,83 +41,83 @@ gUnknown_817F928:: @ 817F928 .string "LAVENDER TOWN.\p" .string "VERMILION POLICE$" -gUnknown_817F9A1:: @ 817F9A1 +VermilionCity_Text_PokemonFanClubSign:: @ 817F9A1 .string "POKéMON FAN CLUB\n" .string "All POKéMON fans welcome!$" -gUnknown_817F9CC:: @ 817F9CC +VermilionCity_Text_GymSign:: @ 817F9CC .string "VERMILION CITY POKéMON GYM\n" .string "LEADER: LT. SURGE\l" .string "The Lightning American!$" -gUnknown_817FA11:: @ 817FA11 +VermilionCity_Text_VermilionHarbor:: @ 817FA11 .string "VERMILION HARBOR$" -gUnknown_817FA22:: @ 817FA22 +VermilionCity_Text_WelcomeToTheSSAnne:: @ 817FA22 .string "Welcome to the S.S. ANNE!$" -gUnknown_817FA3C:: @ 817FA3C +VermilionCity_Text_DoYouHaveATicket:: @ 817FA3C .string "Welcome to the S.S. ANNE!\p" .string "Excuse me, do you have a ticket?$" -gUnknown_817FA77:: @ 817FA77 +VermilionCity_Text_FlashedSSTicket:: @ 817FA77 .string "{SIZE}Á{PLAYER} flashed the S.S. TICKET!\p" .string "{SIZE}ÇGreat!\n" .string "Welcome to the S.S. ANNE!$" -gUnknown_817FABA:: @ 817FABA +VermilionCity_Text_DontHaveNeededSSTicket:: @ 817FABA .string "{SIZE}Á{PLAYER} doesn't have the needed\n" .string "S.S. TICKET.\p" .string "{SIZE}ÇSorry!\p" .string "You need a ticket to get aboard.$" -gUnknown_817FB10:: @ 817FB10 +VermilionCity_Text_TheShipSetSail:: @ 817FB10 .string "The ship set sail.$" -Text_17FB23:: @ 817FB23 +VermilionCity_Text_BoardSeagallopTriPass:: @ 817FB23 .string "Ah, you have a TRI-PASS.\p" .string "Would you like to board\n" .string "a SEAGALLOP ferry?$" -Text_17FB67:: @ 817FB67 +VermilionCity_Text_Seagallop7Departing:: @ 817FB67 .string "Okay, everything's in order.\p" .string "SEAGALLOP HI-SPEED 7 will be\n" .string "departing immediately.$" -Text_17FBB8:: @ 817FBB8 +VermilionCity_Text_BoardSeagallopRainbowPass:: @ 817FBB8 .string "Ah, you have a RAINBOW PASS.\p" .string "Would you like to board\n" .string "a SEAGALLOP ferry?$" -gUnknown_817FC00:: @ 817FC00 +VermilionCity_Text_OhMysticTicketTakeYouToNavelRock:: @ 817FC00 .string "Oh! That's a MYSTICTICKET!\n" .string "Now that is rare.\p" .string "We'll be happy to take you to\n" .string "NAVEL ROCK anytime.$" -gUnknown_817FC5F:: @ 817FC5F +VermilionCity_Text_OhAuroraTicketTakeYouToBirthIsland:: @ 817FC5F .string "Oh! That's an AURORATICKET!\n" .string "Now that is rare.\p" .string "We'll be happy to take you to\n" .string "BIRTH ISLAND anytime.$" -Text_17FCC1:: @ 817FCC1 +VermilionCity_Text_BoardSeagallopFerry:: @ 817FCC1 .string "Would you like to board\n" .string "a SEAGALLOP ferry?$" -gUnknown_817FCEC:: @ 817FCEC +VermilionCity_Text_Seagallop10Departing:: @ 817FCEC .string "Okay, everything's in order for you\n" .string "to board a special ferry.\p" .string "SEAGALLOP HI-SPEED 10 will be\n" .string "departing immediately.$" -gUnknown_817FD5F:: @ 817FD5F +VermilionCity_Text_Seagallop12Departing:: @ 817FD5F .string "Okay, everything's in order for you\n" .string "to board a special ferry.\p" .string "SEAGALLOP HI-SPEED 12 will be\n" .string "departing immediately.$" -gUnknown_817FDD2:: @ 817FDD2 +VermilionCity_Text_Route2AideHasPackageForYou:: @ 817FDD2 .string "Oh, hello, {PLAYER}!\n" .string "How are you doing?\p" .string "It's me, one of PROF. OAK's AIDES.\p" diff --git a/data/maps/VermilionCity_Gym/map.json b/data/maps/VermilionCity_Gym/map.json index 8ed2603da..628d88070 100644 --- a/data/maps/VermilionCity_Gym/map.json +++ b/data/maps/VermilionCity_Gym/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_Gym_EventScript_16B94A", + "script": "VermilionCity_Gym_EventScript_LtSurge", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "VermilionCity_Gym_EventScript_16BA1E", + "script": "VermilionCity_Gym_EventScript_Baily", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "VermilionCity_Gym_EventScript_16B9FA", + "script": "VermilionCity_Gym_EventScript_Dwayne", "flag": "0" }, { @@ -62,7 +62,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_Gym_EventScript_16BA6C", + "script": "VermilionCity_Gym_EventScript_GymGuy", "flag": "0" }, { @@ -75,7 +75,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "VermilionCity_Gym_EventScript_16BA35", + "script": "VermilionCity_Gym_EventScript_Tucker", "flag": "0" } ], @@ -109,119 +109,119 @@ "x": 3, "y": 17, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16BA8B" + "script": "VermilionCity_Gym_EventScript_GymStatue" }, { "type": "bg_event_type_0", "x": 7, "y": 17, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16BA8B" + "script": "VermilionCity_Gym_EventScript_GymStatue" }, { "type": "bg_event_type_0", "x": 1, "y": 10, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B78F" + "script": "VermilionCity_Gym_EventScript_TrashCan1" }, { "type": "bg_event_type_0", "x": 3, "y": 10, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B79B" + "script": "VermilionCity_Gym_EventScript_TrashCan2" }, { "type": "bg_event_type_0", "x": 5, "y": 10, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B7A7" + "script": "VermilionCity_Gym_EventScript_TrashCan3" }, { "type": "bg_event_type_0", "x": 7, "y": 10, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B7B3" + "script": "VermilionCity_Gym_EventScript_TrashCan4" }, { "type": "bg_event_type_0", "x": 9, "y": 10, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B7BF" + "script": "VermilionCity_Gym_EventScript_TrashCan5" }, { "type": "bg_event_type_0", "x": 1, "y": 12, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B7CB" + "script": "VermilionCity_Gym_EventScript_TrashCan6" }, { "type": "bg_event_type_0", "x": 3, "y": 12, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B7D7" + "script": "VermilionCity_Gym_EventScript_TrashCan7" }, { "type": "bg_event_type_0", "x": 5, "y": 12, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B7E3" + "script": "VermilionCity_Gym_EventScript_TrashCan8" }, { "type": "bg_event_type_0", "x": 7, "y": 12, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B7EF" + "script": "VermilionCity_Gym_EventScript_TrashCan9" }, { "type": "bg_event_type_0", "x": 9, "y": 12, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B7FB" + "script": "VermilionCity_Gym_EventScript_TrashCan10" }, { "type": "bg_event_type_0", "x": 1, "y": 14, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B807" + "script": "VermilionCity_Gym_EventScript_TrashCan11" }, { "type": "bg_event_type_0", "x": 3, "y": 14, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B813" + "script": "VermilionCity_Gym_EventScript_TrashCan12" }, { "type": "bg_event_type_0", "x": 5, "y": 14, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B81F" + "script": "VermilionCity_Gym_EventScript_TrashCan13" }, { "type": "bg_event_type_0", "x": 7, "y": 14, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B82B" + "script": "VermilionCity_Gym_EventScript_TrashCan14" }, { "type": "bg_event_type_0", "x": 9, "y": 14, "elevation": 0, - "script": "VermilionCity_Gym_EventScript_16B837" + "script": "VermilionCity_Gym_EventScript_TrashCan15" } ] } diff --git a/data/maps/VermilionCity_Gym/scripts.inc b/data/maps/VermilionCity_Gym/scripts.inc index 0d95d76f8..5d3760df9 100644 --- a/data/maps/VermilionCity_Gym/scripts.inc +++ b/data/maps/VermilionCity_Gym/scripts.inc @@ -1,180 +1,185 @@ +.equ FOUND_FIRST_SWITCH, FLAG_TEMP_1 +.equ SWITCH1_ID, VAR_0x8004 +.equ SWITCH2_ID, VAR_0x8005 +.equ TRASH_CAN_ID, VAR_0x8008 + VermilionCity_Gym_MapScripts:: @ 816B69E map_script MAP_SCRIPT_ON_LOAD, VermilionCity_Gym_OnLoad map_script MAP_SCRIPT_ON_TRANSITION, VermilionCity_Gym_OnTransition .byte 0 VermilionCity_Gym_OnLoad:: @ 816B6A9 - call_if_set FLAG_TEMP_1, EventScript_16B6BC - call_if_set FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, EventScript_16B717 - end - -EventScript_16B6BC:: @ 816B6BC - setmetatile 3, 6, 699, 1 - setmetatile 4, 6, 700, 1 - setmetatile 5, 6, 701, 1 - setmetatile 6, 6, 702, 1 - setmetatile 7, 6, 703, 1 - setmetatile 3, 7, 707, 1 - setmetatile 4, 7, 708, 1 - setmetatile 5, 7, 709, 1 - setmetatile 6, 7, 710, 1 - setmetatile 7, 7, 711, 1 + call_if_set FOUND_FIRST_SWITCH, VermilionCity_Gym_EventScript_SetOneBeamOff + call_if_set FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, VermilionCity_Gym_EventScript_SetBeamsOff + end + +VermilionCity_Gym_EventScript_SetOneBeamOff:: @ 816B6BC + setmetatile 3, 6, METATILE_VermilionGym_Beam_Node_TopLeft_HalfOn, 1 + setmetatile 4, 6, METATILE_VermilionGym_Beam_Node_TopLeft_Edge_HalfOn, 1 + setmetatile 5, 6, METATILE_VermilionGym_Beam_MidTop_HalfOn, 1 + setmetatile 6, 6, METATILE_VermilionGym_Beam_Node_TopRight_Edge_HalfOn, 1 + setmetatile 7, 6, METATILE_VermilionGym_Beam_Node_TopRight_HalfOn, 1 + setmetatile 3, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_HalfOn, 1 + setmetatile 4, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_Edge_HalfOn, 1 + setmetatile 5, 7, METATILE_VermilionGym_Beam_MidBottom_HalfOn, 1 + setmetatile 6, 7, METATILE_VermilionGym_Beam_Node_BottomRight_Edge_HalfOn, 1 + setmetatile 7, 7, METATILE_VermilionGym_Beam_Node_BottomRight_HalfOn, 1 return -EventScript_16B717:: @ 816B717 - setmetatile 3, 6, 659, 1 - setmetatile 4, 6, 660, 0 - setmetatile 5, 6, 641, 0 - setmetatile 6, 6, 661, 0 - setmetatile 7, 6, 662, 1 - setmetatile 3, 7, 667, 1 - setmetatile 4, 7, 668, 0 - setmetatile 5, 7, 641, 0 - setmetatile 6, 7, 669, 0 - setmetatile 7, 7, 670, 1 +VermilionCity_Gym_EventScript_SetBeamsOff:: @ 816B717 + setmetatile 3, 6, METATILE_VermilionGym_Beam_Node_TopLeft_Off, 1 + setmetatile 4, 6, METATILE_VermilionGym_Beam_Node_TopLeft_Edge_Off, 0 + setmetatile 5, 6, METATILE_VermilionGym_Floor, 0 + setmetatile 6, 6, METATILE_VermilionGym_Beam_Node_TopRight_Edge_Off, 0 + setmetatile 7, 6, METATILE_VermilionGym_Beam_Node_TopRight_Off, 1 + setmetatile 3, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_Off, 1 + setmetatile 4, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_Edge_Off, 0 + setmetatile 5, 7, METATILE_VermilionGym_Floor, 0 + setmetatile 6, 7, METATILE_VermilionGym_Beam_Node_BottomRight_Edge_Off, 0 + setmetatile 7, 7, METATILE_VermilionGym_Beam_Node_BottomRight_Off, 1 return VermilionCity_Gym_OnTransition:: @ 816B772 - call EventScript_16B778 + call VermilionCity_Gym_EventScript_InitTrashCans end -EventScript_16B778:: @ 816B778 +VermilionCity_Gym_EventScript_InitTrashCans:: @ 816B778 goto_if_set FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, EventScript_Return special Special_SetVermilionTrashCans - copyvar VAR_TEMP_0, VAR_0x8004 - copyvar VAR_TEMP_1, VAR_0x8005 + copyvar VAR_TEMP_0, SWITCH1_ID + copyvar VAR_TEMP_1, SWITCH2_ID return -VermilionCity_Gym_EventScript_16B78F:: @ 816B78F +VermilionCity_Gym_EventScript_TrashCan1:: @ 816B78F lockall - setvar VAR_0x8008, 1 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 1 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B79B:: @ 816B79B +VermilionCity_Gym_EventScript_TrashCan2:: @ 816B79B lockall - setvar VAR_0x8008, 2 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 2 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B7A7:: @ 816B7A7 +VermilionCity_Gym_EventScript_TrashCan3:: @ 816B7A7 lockall - setvar VAR_0x8008, 3 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 3 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B7B3:: @ 816B7B3 +VermilionCity_Gym_EventScript_TrashCan4:: @ 816B7B3 lockall - setvar VAR_0x8008, 4 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 4 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B7BF:: @ 816B7BF +VermilionCity_Gym_EventScript_TrashCan5:: @ 816B7BF lockall - setvar VAR_0x8008, 5 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 5 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B7CB:: @ 816B7CB +VermilionCity_Gym_EventScript_TrashCan6:: @ 816B7CB lockall - setvar VAR_0x8008, 6 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 6 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B7D7:: @ 816B7D7 +VermilionCity_Gym_EventScript_TrashCan7:: @ 816B7D7 lockall - setvar VAR_0x8008, 7 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 7 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B7E3:: @ 816B7E3 +VermilionCity_Gym_EventScript_TrashCan8:: @ 816B7E3 lockall - setvar VAR_0x8008, 8 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 8 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B7EF:: @ 816B7EF +VermilionCity_Gym_EventScript_TrashCan9:: @ 816B7EF lockall - setvar VAR_0x8008, 9 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 9 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B7FB:: @ 816B7FB +VermilionCity_Gym_EventScript_TrashCan10:: @ 816B7FB lockall - setvar VAR_0x8008, 10 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 10 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B807:: @ 816B807 +VermilionCity_Gym_EventScript_TrashCan11:: @ 816B807 lockall - setvar VAR_0x8008, 11 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 11 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B813:: @ 816B813 +VermilionCity_Gym_EventScript_TrashCan12:: @ 816B813 lockall - setvar VAR_0x8008, 12 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 12 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B81F:: @ 816B81F +VermilionCity_Gym_EventScript_TrashCan13:: @ 816B81F lockall - setvar VAR_0x8008, 13 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 13 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B82B:: @ 816B82B +VermilionCity_Gym_EventScript_TrashCan14:: @ 816B82B lockall - setvar VAR_0x8008, 14 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 14 + goto VermilionCity_Gym_EventScript_TrashCan end -VermilionCity_Gym_EventScript_16B837:: @ 816B837 +VermilionCity_Gym_EventScript_TrashCan15:: @ 816B837 lockall - setvar VAR_0x8008, 15 - goto EventScript_16B843 + setvar TRASH_CAN_ID, 15 + goto VermilionCity_Gym_EventScript_TrashCan end -EventScript_16B843:: @ 816B843 +VermilionCity_Gym_EventScript_TrashCan:: @ 816B843 goto_if_questlog EventScript_ReleaseEnd special sub_8112364 - copyvar VAR_0x8004, VAR_TEMP_0 - copyvar VAR_0x8005, VAR_TEMP_1 - goto_if_set FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, EventScript_16B8E5 - goto_if_set FLAG_TEMP_1, EventScript_16B89E - compare VAR_0x8004, VAR_0x8008 - goto_if_eq EventScript_16B885 - msgbox gUnknown_8195289 + copyvar SWITCH1_ID, VAR_TEMP_0 + copyvar SWITCH2_ID, VAR_TEMP_1 + goto_if_set FLAG_FOUND_BOTH_VERMILION_GYM_SWITCHES, VermilionCity_Gym_EventScript_LocksAlreadyOpen + goto_if_set FOUND_FIRST_SWITCH, VermilionCity_Gym_EventScript_TrySwitchTwo + compare SWITCH1_ID, TRASH_CAN_ID + goto_if_eq VermilionCity_Gym_EventScript_FoundSwitchOne + msgbox VermilionCity_Gym_Text_NopeOnlyTrashHere releaseall end -EventScript_16B885:: @ 816B885 - msgbox gUnknown_81952A8 +VermilionCity_Gym_EventScript_FoundSwitchOne:: @ 816B885 + msgbox VermilionCity_Gym_Text_SwitchUnderTrashFirstLockOpened playse SE_PIN waitse - call EventScript_16B6BC + call VermilionCity_Gym_EventScript_SetOneBeamOff special DrawWholeMapView - setflag FLAG_TEMP_1 + setflag FOUND_FIRST_SWITCH releaseall end -EventScript_16B89E:: @ 816B89E - compare VAR_0x8005, VAR_0x8008 - goto_if_eq EventScript_16B8CB - msgbox gUnknown_819536C - clearflag FLAG_TEMP_1 +VermilionCity_Gym_EventScript_TrySwitchTwo:: @ 816B89E + compare SWITCH2_ID, TRASH_CAN_ID + goto_if_eq VermilionCity_Gym_EventScript_FoundSwitchTwo + msgbox VermilionCity_Gym_Text_OnlyTrashLocksWereReset + clearflag FOUND_FIRST_SWITCH special Special_SetVermilionTrashCans - copyvar VAR_TEMP_0, VAR_0x8004 - copyvar VAR_TEMP_1, VAR_0x8005 - call EventScript_16B8EF + copyvar VAR_TEMP_0, SWITCH1_ID + copyvar VAR_TEMP_1, SWITCH2_ID + call VermilionCity_Gym_EventScript_SetBeamsOn special DrawWholeMapView releaseall end -EventScript_16B8CB:: @ 816B8CB - msgbox gUnknown_8195330 +VermilionCity_Gym_EventScript_FoundSwitchTwo:: @ 816B8CB + msgbox VermilionCity_Gym_Text_SecondLockOpened closemessage - call EventScript_16B717 + call VermilionCity_Gym_EventScript_SetBeamsOff special DrawWholeMapView playse SE_KI_GASYAN waitse @@ -182,105 +187,105 @@ EventScript_16B8CB:: @ 816B8CB releaseall end -EventScript_16B8E5:: @ 816B8E5 - msgbox gUnknown_8195289 +VermilionCity_Gym_EventScript_LocksAlreadyOpen:: @ 816B8E5 + msgbox VermilionCity_Gym_Text_NopeOnlyTrashHere releaseall end -EventScript_16B8EF:: @ 816B8EF - setmetatile 3, 6, 681, 1 - setmetatile 4, 6, 682, 1 - setmetatile 5, 6, 645, 1 - setmetatile 6, 6, 683, 1 - setmetatile 7, 6, 684, 1 - setmetatile 3, 7, 689, 1 - setmetatile 4, 7, 690, 1 - setmetatile 5, 7, 653, 1 - setmetatile 6, 7, 691, 1 - setmetatile 7, 7, 692, 1 +VermilionCity_Gym_EventScript_SetBeamsOn:: @ 816B8EF + setmetatile 3, 6, METATILE_VermilionGym_Beam_Node_TopLeft_On, 1 + setmetatile 4, 6, METATILE_VermilionGym_Beam_Node_TopLeft_Edge_On, 1 + setmetatile 5, 6, METATILE_VermilionGym_Beam_MidTop, 1 + setmetatile 6, 6, METATILE_VermilionGym_Beam_Node_TopRight_Edge_On, 1 + setmetatile 7, 6, METATILE_VermilionGym_Beam_Node_TopRight_On, 1 + setmetatile 3, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_On, 1 + setmetatile 4, 7, METATILE_VermilionGym_Beam_Node_BottomLeft_Edge_On, 1 + setmetatile 5, 7, METATILE_VermilionGym_Beam_MidBottom, 1 + setmetatile 6, 7, METATILE_VermilionGym_Beam_Node_BottomRight_Edge_On, 1 + setmetatile 7, 7, METATILE_VermilionGym_Beam_Node_BottomRight_On, 1 return -VermilionCity_Gym_EventScript_16B94A:: @ 816B94A +VermilionCity_Gym_EventScript_LtSurge:: @ 816B94A famechecker FAMECHECKER_LTSURGE, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 - trainerbattle_single TRAINER_LEADER_LT_SURGE, Text_194BA4, Text_194E03, EventScript_16B97C, NO_MUSIC - goto_if_unset FLAG_GOT_TM34_FROM_SURGE, EventScript_16B9AF - msgbox gUnknown_8194C8E + trainerbattle_single TRAINER_LEADER_LT_SURGE, VermilionCity_Gym_Text_LtSurgeIntro, VermilionCity_Gym_Text_LtSurgeDefeat, VermilionCity_Gym_EventScript_DefeatedLtSurge, NO_MUSIC + goto_if_unset FLAG_GOT_TM34_FROM_SURGE, VermilionCity_Gym_EventScript_GiveTM43 + msgbox VermilionCity_Gym_Text_LtSurgePostBattle release end -EventScript_16B97C:: @ 816B97C +VermilionCity_Gym_EventScript_DefeatedLtSurge:: @ 816B97C famechecker FAMECHECKER_LTSURGE, 1 - call_if_unset FLAG_GOT_HM05, EventScript_16B9AB + call_if_unset FLAG_GOT_HM05, VermilionCity_Gym_EventScript_ShowOaksAide clearflag FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL setflag FLAG_DEFEATED_LT_SURGE setflag FLAG_BADGE03_GET set_gym_trainers 3 - goto EventScript_16B9AF + goto VermilionCity_Gym_EventScript_GiveTM43 end -EventScript_16B9AB:: @ 816B9AB +VermilionCity_Gym_EventScript_ShowOaksAide:: @ 816B9AB clearflag FLAG_HIDE_VERMILION_CITY_OAKS_AIDE return -EventScript_16B9AF:: @ 816B9AF - msgbox gUnknown_8194CFA +VermilionCity_Gym_EventScript_GiveTM43:: @ 816B9AF + msgbox VermilionCity_Gym_Text_ExplainThunderBadgeTakeThis checkitemspace ITEM_TM34, 1 compare VAR_RESULT, FALSE - goto_if_eq EventScript_16B9F0 - giveitem_msg gUnknown_8194D87, ITEM_TM34 + goto_if_eq VermilionCity_Gym_EventScript_NoRoomForTM43 + giveitem_msg VermilionCity_Gym_Text_ReceivedTM43FromLtSurge, ITEM_TM34 setflag FLAG_GOT_TM34_FROM_SURGE - msgbox gUnknown_8194DA8 + msgbox VermilionCity_Gym_Text_ExplainTM34 release end -EventScript_16B9F0:: @ 816B9F0 - msgbox gUnknown_8194DE3 +VermilionCity_Gym_EventScript_NoRoomForTM43:: @ 816B9F0 + msgbox VermilionCity_Gym_Text_MakeRoomInYourBag release end -VermilionCity_Gym_EventScript_16B9FA:: @ 816B9FA - trainerbattle_single TRAINER_SAILOR_DWAYNE, Text_194FBD, Text_194FF1 +VermilionCity_Gym_EventScript_Dwayne:: @ 816B9FA + trainerbattle_single TRAINER_SAILOR_DWAYNE, VermilionCity_Gym_Text_DwayneIntro, VermilionCity_Gym_Text_DwayneDefeat famechecker FAMECHECKER_LTSURGE, 4 - msgbox gUnknown_8195004, MSGBOX_AUTOCLOSE + msgbox VermilionCity_Gym_Text_DwaynePostBattle, MSGBOX_AUTOCLOSE end -VermilionCity_Gym_EventScript_16BA1E:: @ 816BA1E - trainerbattle_single TRAINER_ENGINEER_BAILY, Text_194F1F, Text_194F6F - msgbox gUnknown_8194F76, MSGBOX_AUTOCLOSE +VermilionCity_Gym_EventScript_Baily:: @ 816BA1E + trainerbattle_single TRAINER_ENGINEER_BAILY, VermilionCity_Gym_Text_BailyIntro, VermilionCity_Gym_Text_BailyDefeat + msgbox VermilionCity_Gym_Text_BailyPostBattle, MSGBOX_AUTOCLOSE end -VermilionCity_Gym_EventScript_16BA35:: @ 816BA35 - trainerbattle_single TRAINER_GENTLEMAN_TUCKER, Text_194E57, Text_194EA5, EventScript_16BA5D +VermilionCity_Gym_EventScript_Tucker:: @ 816BA35 + trainerbattle_single TRAINER_GENTLEMAN_TUCKER, VermilionCity_Gym_Text_TuckerIntro, VermilionCity_Gym_Text_TuckerDefeat, VermilionCity_Gym_EventScript_DefeatedTucker famechecker FAMECHECKER_LTSURGE, 3 - msgbox gUnknown_8194EBD, MSGBOX_AUTOCLOSE + msgbox VermilionCity_Gym_Text_TuckerPostBattle, MSGBOX_AUTOCLOSE end -EventScript_16BA5D:: @ 816BA5D +VermilionCity_Gym_EventScript_DefeatedTucker:: @ 816BA5D famechecker FAMECHECKER_LTSURGE, 2 release end -VermilionCity_Gym_EventScript_16BA6C:: @ 816BA6C +VermilionCity_Gym_EventScript_GymGuy:: @ 816BA6C lock faceplayer - goto_if_set FLAG_DEFEATED_LT_SURGE, EventScript_16BA81 - msgbox gUnknown_81950B4 + goto_if_set FLAG_DEFEATED_LT_SURGE, VermilionCity_Gym_EventScript_GymGuyPostVictory + msgbox VermilionCity_Gym_Text_GymGuyAdvice release end -EventScript_16BA81:: @ 816BA81 - msgbox gUnknown_81951EC +VermilionCity_Gym_EventScript_GymGuyPostVictory:: @ 816BA81 + msgbox VermilionCity_Gym_Text_GymGuyPostVictory release end -VermilionCity_Gym_EventScript_16BA8B:: @ 816BA8B +VermilionCity_Gym_EventScript_GymStatue:: @ 816BA8B lockall - goto_if_set FLAG_BADGE03_GET, EventScript_16BA9F - msgbox gUnknown_819520B + goto_if_set FLAG_BADGE03_GET, VermilionCity_Gym_EventScript_GymStatuePostVictory + msgbox VermilionCity_Gym_Text_GymStatue releaseall end -EventScript_16BA9F:: @ 816BA9F - msgbox gUnknown_8195248 +VermilionCity_Gym_EventScript_GymStatuePostVictory:: @ 816BA9F + msgbox VermilionCity_Gym_Text_GymStatuePlayerWon releaseall end diff --git a/data/maps/VermilionCity_Gym/text.inc b/data/maps/VermilionCity_Gym/text.inc index b0cff583a..e364f8d10 100644 --- a/data/maps/VermilionCity_Gym/text.inc +++ b/data/maps/VermilionCity_Gym/text.inc @@ -1,4 +1,4 @@ -Text_194BA4:: @ 8194BA4 +VermilionCity_Gym_Text_LtSurgeIntro:: @ 8194BA4 .string "Hey, kid! What do you think you're\n" .string "doing here?\p" .string "You won't live long in combat!\n" @@ -9,13 +9,13 @@ Text_194BA4:: @ 8194BA4 .string "paralysis!\p" .string "The same as I'll do to you!{PLAY_BGM}{MUS_EXEYE}$" -gUnknown_8194C8E:: @ 8194C8E +VermilionCity_Gym_Text_LtSurgePostBattle:: @ 8194C8E .string "A little word of advice, kid!\p" .string "Electricity is sure powerful!\p" .string "But, it's useless against GROUND-\n" .string "type POKéMON!$" -gUnknown_8194CFA:: @ 8194CFA +VermilionCity_Gym_Text_ExplainThunderBadgeTakeThis:: @ 8194CFA .string "The THUNDERBADGE cranks up your\n" .string "POKéMON's SPEED!\p" .string "It also lets your POKéMON FLY\n" @@ -23,58 +23,58 @@ gUnknown_8194CFA:: @ 8194CFA .string "You're special, kid!\n" .string "Take this!$" -gUnknown_8194D87:: @ 8194D87 +VermilionCity_Gym_Text_ReceivedTM43FromLtSurge:: @ 8194D87 .string "{PLAYER} received TM34\n" .string "from LT. SURGE.$" -gUnknown_8194DA8:: @ 8194DA8 +VermilionCity_Gym_Text_ExplainTM34:: @ 8194DA8 .string "TM34 contains SHOCK WAVE!\p" .string "Teach it to an ELECTRIC POKéMON!$" -gUnknown_8194DE3:: @ 8194DE3 +VermilionCity_Gym_Text_MakeRoomInYourBag:: @ 8194DE3 .string "Yo, kid, make room in your BAG!$" -Text_194E03:: @ 8194E03 +VermilionCity_Gym_Text_LtSurgeDefeat:: @ 8194E03 .string "Now that's a shocker!\p" .string "You're the real deal, kid!\p" .string "Fine, then, take the THUNDERBADGE!$" -Text_194E57:: @ 8194E57 +VermilionCity_Gym_Text_TuckerIntro:: @ 8194E57 .string "When I was in the Army, LT. SURGE\n" .string "was my strict CO.\p" .string "He was a hard taskmaster.$" -Text_194EA5:: @ 8194EA5 +VermilionCity_Gym_Text_TuckerDefeat:: @ 8194EA5 .string "Stop!\n" .string "You're very good!$" -gUnknown_8194EBD:: @ 8194EBD +VermilionCity_Gym_Text_TuckerPostBattle:: @ 8194EBD .string "It's not easy opening that door.\p" .string "LT. SURGE was always famous for\n" .string "his cautious nature in the Army.$" -Text_194F1F:: @ 8194F1F +VermilionCity_Gym_Text_BailyIntro:: @ 8194F1F .string "I'm a lightweight, but I'm good\n" .string "with electricity!\p" .string "That's why I joined this GYM.$" -Text_194F6F:: @ 8194F6F +VermilionCity_Gym_Text_BailyDefeat:: @ 8194F6F .string "Fried!$" -gUnknown_8194F76:: @ 8194F76 +VermilionCity_Gym_Text_BailyPostBattle:: @ 8194F76 .string "Okay, I'll talk!\p" .string "LT. SURGE said he hid door\n" .string "switches inside something.$" -Text_194FBD:: @ 8194FBD +VermilionCity_Gym_Text_DwayneIntro:: @ 8194FBD .string "This is no place for kids!\n" .string "Not even if you're good!$" -Text_194FF1:: @ 8194FF1 +VermilionCity_Gym_Text_DwayneDefeat:: @ 8194FF1 .string "Wow!\n" .string "Surprised me!$" -gUnknown_8195004:: @ 8195004 +VermilionCity_Gym_Text_DwaynePostBattle:: @ 8195004 .string "LT. SURGE installed the traps in\n" .string "the GYM himself.\p" .string "He set up double locks everywhere.\n" @@ -82,7 +82,7 @@ gUnknown_8195004:: @ 8195004 .string "When you open the first lock, the\n" .string "second lock is right next to it.$" -gUnknown_81950B4:: @ 81950B4 +VermilionCity_Gym_Text_GymGuyAdvice:: @ 81950B4 .string "Yo!\n" .string "Champ in the making!\p" .string "LT. SURGE has a nickname.\p" @@ -97,42 +97,42 @@ gUnknown_81950B4:: @ 81950B4 .string "He's locked himself in, so it won't\n" .string "be easy getting to him.$" -gUnknown_81951EC:: @ 81951EC +VermilionCity_Gym_Text_GymGuyPostVictory:: @ 81951EC .string "Whew!\n" .string "That match was electric!$" -gUnknown_819520B:: @ 819520B +VermilionCity_Gym_Text_GymStatue:: @ 819520B .string "VERMILION POKéMON GYM\n" .string "LEADER: LT. SURGE\p" .string "WINNING TRAINERS:\n" .string "{RIVAL}$" -gUnknown_8195248:: @ 8195248 +VermilionCity_Gym_Text_GymStatuePlayerWon:: @ 8195248 .string "VERMILION POKéMON GYM\n" .string "LEADER: LT. SURGE\p" .string "WINNING TRAINERS:\n" .string "{RIVAL}, {PLAYER}$" -gUnknown_8195289:: @ 8195289 +VermilionCity_Gym_Text_NopeOnlyTrashHere:: @ 8195289 .string "Nope!\n" .string "There's only trash here.$" -gUnknown_81952A8:: @ 81952A8 +VermilionCity_Gym_Text_SwitchUnderTrashFirstLockOpened:: @ 81952A8 .string "Hey! There's a switch under the\n" .string "trash! Turn it on!\p" .string "The first electric lock opened!$" -Text_1952FB:: @ 81952FB +VermilionCity_Gym_Text_AnotherSwitchInTrash:: @ 81952FB .string "ガサゴソ‥!\n" .string "おっと! ゴミばこの そこに\l" .string "また スイッチが あった!\l" .string "おして みよう! ‥ ポチッとな$" -gUnknown_8195330:: @ 8195330 +VermilionCity_Gym_Text_SecondLockOpened:: @ 8195330 .string "The second electric lock opened!\n" .string "The motorized door opened!$" -gUnknown_819536C:: @ 819536C +VermilionCity_Gym_Text_OnlyTrashLocksWereReset:: @ 819536C .string "Nope!\n" .string "There's only trash here.\p" .string "Hey!\n" diff --git a/data/maps/VermilionCity_House1/map.json b/data/maps/VermilionCity_House1/map.json index 7eec8c8e8..008e98610 100644 --- a/data/maps/VermilionCity_House1/map.json +++ b/data/maps/VermilionCity_House1/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_House1_EventScript_16B3A7", + "script": "VermilionCity_House1_EventScript_FishingGuru", "flag": "0" } ], diff --git a/data/maps/VermilionCity_House1/scripts.inc b/data/maps/VermilionCity_House1/scripts.inc index 3fb54afee..8ab0b17f2 100644 --- a/data/maps/VermilionCity_House1/scripts.inc +++ b/data/maps/VermilionCity_House1/scripts.inc @@ -1,35 +1,35 @@ VermilionCity_House1_MapScripts:: @ 816B3A6 .byte 0 -VermilionCity_House1_EventScript_16B3A7:: @ 816B3A7 +VermilionCity_House1_EventScript_FishingGuru:: @ 816B3A7 lock faceplayer - goto_if_set FLAG_GOT_OLD_ROD, EventScript_16B3CF - msgbox gUnknown_8193EC1, MSGBOX_YESNO + goto_if_set FLAG_GOT_OLD_ROD, VermilionCity_House1_EventScript_AlreadyGotOldRod + msgbox VermilionCity_House1_Text_ImFishingGuruDoYouLikeToFish, MSGBOX_YESNO compare VAR_RESULT, YES - goto_if_eq EventScript_16B3D9 - msgbox gUnknown_8194028 + goto_if_eq VermilionCity_House1_EventScript_GiveOldRod + msgbox VermilionCity_House1_Text_OhThatsSoDisappointing release end -EventScript_16B3CF:: @ 816B3CF - msgbox gUnknown_8194045 +VermilionCity_House1_EventScript_AlreadyGotOldRod:: @ 816B3CF + msgbox VermilionCity_House1_Text_HowAreTheFishBiting release end -EventScript_16B3D9:: @ 816B3D9 +VermilionCity_House1_EventScript_GiveOldRod:: @ 816B3D9 checkitemspace ITEM_OLD_ROD, 1 compare VAR_RESULT, FALSE - goto_if_eq EventScript_16B41A + goto_if_eq VermilionCity_House1_EventScript_NoRoomForOldRod additem ITEM_OLD_ROD - msgbox gUnknown_8193F2A - msgreceiveditem gUnknown_8193F81, ITEM_OLD_ROD + msgbox VermilionCity_House1_Text_TakeThisAndFish + msgreceiveditem VermilionCity_House1_Text_ReceivedOldRodFromFishingGuru, ITEM_OLD_ROD setflag FLAG_GOT_OLD_ROD - msgbox gUnknown_8193FAF + msgbox VermilionCity_House1_Text_FishingIsAWayOfLife release end -EventScript_16B41A:: @ 816B41A - msgbox gUnknown_819406F +VermilionCity_House1_EventScript_NoRoomForOldRod:: @ 816B41A + msgbox VermilionCity_House1_Text_NoRoomForNiceGift release end diff --git a/data/maps/VermilionCity_House1/text.inc b/data/maps/VermilionCity_House1/text.inc index 66ea21646..55c2c700c 100644 --- a/data/maps/VermilionCity_House1/text.inc +++ b/data/maps/VermilionCity_House1/text.inc @@ -1,39 +1,33 @@ -Text_193E82:: @ 8193E82 - .string "この あいだ やまおくで\n" - .string "きんのたまを ひろい ましてね!\p" - .string "つかえない しなもの ですが\n" - .string "うったら なんと 5000¥でした$" - -gUnknown_8193EC1:: @ 8193EC1 +VermilionCity_House1_Text_ImFishingGuruDoYouLikeToFish:: @ 8193EC1 .string "I'm the FISHING GURU!\p" .string "I simply looove fishing!\n" .string "I can't bear to go without.\p" .string "Tell me, do you like to fish?$" -gUnknown_8193F2A:: @ 8193F2A +VermilionCity_House1_Text_TakeThisAndFish:: @ 8193F2A .string "Grand! I like your style.\n" .string "I think we can be friends.\p" .string "Take this and fish, young friend!$" -gUnknown_8193F81:: @ 8193F81 +VermilionCity_House1_Text_ReceivedOldRodFromFishingGuru:: @ 8193F81 .string "{PLAYER} received an OLD ROD from\n" .string "the FISHING GURU.$" -gUnknown_8193FAF:: @ 8193FAF +VermilionCity_House1_Text_FishingIsAWayOfLife:: @ 8193FAF .string "Fishing is a way of life!\n" .string "It is like the finest poetry.\p" .string "From the seas to rivers, go out\n" .string "and land the big one, my friend.$" -gUnknown_8194028:: @ 8194028 +VermilionCity_House1_Text_OhThatsSoDisappointing:: @ 8194028 .string "Oh…\n" .string "That's so disappointing…$" -gUnknown_8194045:: @ 8194045 +VermilionCity_House1_Text_HowAreTheFishBiting:: @ 8194045 .string "Hello there, {PLAYER}!\p" .string "How are the fish biting?$" -gUnknown_819406F:: @ 819406F +VermilionCity_House1_Text_NoRoomForNiceGift:: @ 819406F .string "Oh, no!\p" .string "I had a nice gift for you, but you\n" .string "have no room for it!$" diff --git a/data/maps/VermilionCity_House2/map.json b/data/maps/VermilionCity_House2/map.json index a503a2aa6..3c40bf806 100644 --- a/data/maps/VermilionCity_House2/map.json +++ b/data/maps/VermilionCity_House2/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_House2_EventScript_16B5D7", + "script": "VermilionCity_House2_EventScript_Elyssa", "flag": "0" } ], diff --git a/data/maps/VermilionCity_House2/scripts.inc b/data/maps/VermilionCity_House2/scripts.inc index 82cc901ba..8dbdd4888 100644 --- a/data/maps/VermilionCity_House2/scripts.inc +++ b/data/maps/VermilionCity_House2/scripts.inc @@ -1,39 +1,39 @@ VermilionCity_House2_MapScripts:: @ 816B5D6 .byte 0 -VermilionCity_House2_EventScript_16B5D7:: @ 816B5D7 +VermilionCity_House2_EventScript_Elyssa:: @ 816B5D7 lock faceplayer setvar VAR_0x8008, INGAME_TRADE_FARFETCHD call EventScript_GetInGameTradeSpeciesInfo - goto_if_set FLAG_DID_CH_DING_TRADE, EventScript_16B649 - msgbox gUnknown_81949CB, MSGBOX_YESNO + goto_if_set FLAG_DID_CH_DING_TRADE, VermilionCity_House2_EventScript_AlreadyTraded + msgbox VermilionCity_House2_Text_DoYouHaveMonWantToTradeForMyMon, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_16B631 + goto_if_eq VermilionCity_House2_EventScript_DeclineTrade call EventScript_ChooseMonForInGameTrade compare VAR_0x8004, PARTY_SIZE - goto_if_ge EventScript_16B631 + goto_if_ge VermilionCity_House2_EventScript_DeclineTrade call EventScript_GetInGameTradeSpecies compare VAR_RESULT, VAR_0x8009 - goto_if_ne EventScript_16B63B + goto_if_ne VermilionCity_House2_EventScript_NotRequestedMon call EventScript_DoInGameTrade - msgbox gUnknown_8194A44 + msgbox VermilionCity_House2_Text_ThankYou setflag FLAG_DID_CH_DING_TRADE release end -EventScript_16B631:: @ 816B631 - msgbox gUnknown_81949FD +VermilionCity_House2_EventScript_DeclineTrade:: @ 816B631 + msgbox VermilionCity_House2_Text_ThatsTooBad release end -EventScript_16B63B:: @ 816B63B +VermilionCity_House2_EventScript_NotRequestedMon:: @ 816B63B getspeciesname 0, VAR_0x8009 - msgbox gUnknown_8194A0D + msgbox VermilionCity_House2_Text_ThisIsNoMon release end -EventScript_16B649:: @ 816B649 - msgbox gUnknown_8194A4F +VermilionCity_House2_EventScript_AlreadyTraded:: @ 816B649 + msgbox VermilionCity_House2_Text_HowIsMyOldMon release end diff --git a/data/maps/VermilionCity_House2/text.inc b/data/maps/VermilionCity_House2/text.inc new file mode 100644 index 000000000..2908cb450 --- /dev/null +++ b/data/maps/VermilionCity_House2/text.inc @@ -0,0 +1,20 @@ +VermilionCity_House2_Text_DoYouHaveMonWantToTradeForMyMon:: @ 81949CB + .string "Hi!\n" + .string "Do you have a {STR_VAR_1}?\p" + .string "Want to trade it for my\n" + .string "{STR_VAR_2}?$" + +VermilionCity_House2_Text_ThatsTooBad:: @ 81949FD + .string "That's too bad.$" + +VermilionCity_House2_Text_ThisIsNoMon:: @ 8194A0D + .string "…This is no {STR_VAR_1}.\p" + .string "If you get one, please trade it\n" + .string "to me!$" + +VermilionCity_House2_Text_ThankYou:: @ 8194A44 + .string "Thank you!$" + +VermilionCity_House2_Text_HowIsMyOldMon:: @ 8194A4F + .string "How is my old {STR_VAR_2}?\p" + .string "My {STR_VAR_1} is doing great!$" diff --git a/data/maps/VermilionCity_Mart/map.json b/data/maps/VermilionCity_Mart/map.json index e2aaee125..3ef4658f1 100644 --- a/data/maps/VermilionCity_Mart/map.json +++ b/data/maps/VermilionCity_Mart/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_Mart_EventScript_16B666", + "script": "VermilionCity_Mart_EventScript_Clerk", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_Mart_EventScript_16B654", + "script": "VermilionCity_Mart_EventScript_CooltrainerF", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 2, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_Mart_EventScript_16B65D", + "script": "VermilionCity_Mart_EventScript_BaldingMan", "flag": "0" } ], diff --git a/data/maps/VermilionCity_Mart/scripts.inc b/data/maps/VermilionCity_Mart/scripts.inc index 3af796ada..3ce0d842a 100644 --- a/data/maps/VermilionCity_Mart/scripts.inc +++ b/data/maps/VermilionCity_Mart/scripts.inc @@ -1,27 +1,27 @@ VermilionCity_Mart_MapScripts:: @ 816B653 .byte 0 -VermilionCity_Mart_EventScript_16B654:: @ 816B654 - msgbox gUnknown_8194B65, MSGBOX_NPC +VermilionCity_Mart_EventScript_CooltrainerF:: @ 816B654 + msgbox VermilionCity_Mart_Text_MonsGoodOrBadDependingOnTrainer, MSGBOX_NPC end -VermilionCity_Mart_EventScript_16B65D:: @ 816B65D - msgbox gUnknown_8194A77, MSGBOX_NPC +VermilionCity_Mart_EventScript_BaldingMan:: @ 816B65D + msgbox VermilionCity_Mart_Text_TeamRocketAreWickedPeople, MSGBOX_NPC end -VermilionCity_Mart_EventScript_16B666:: @ 816B666 +VermilionCity_Mart_EventScript_Clerk:: @ 816B666 goto_if_questlog EventScript_ReleaseEnd lock faceplayer message Text_MayIHelpYou waitmessage - pokemart Items_16B68C + pokemart VermilionCity_Mart_Items msgbox Text_PleaseComeAgain release end .align 2 -Items_16B68C:: @ 816B68C +VermilionCity_Mart_Items:: @ 816B68C .2byte ITEM_POKE_BALL .2byte ITEM_SUPER_POTION .2byte ITEM_ANTIDOTE diff --git a/data/maps/VermilionCity_Mart/text.inc b/data/maps/VermilionCity_Mart/text.inc index 2d85d941f..b8685b62a 100644 --- a/data/maps/VermilionCity_Mart/text.inc +++ b/data/maps/VermilionCity_Mart/text.inc @@ -1,4 +1,4 @@ -gUnknown_8194A77:: @ 8194A77 +VermilionCity_Mart_Text_TeamRocketAreWickedPeople:: @ 8194A77 .string "There are wicked people who will\n" .string "use POKéMON for criminal acts.\p" .string "TEAM ROCKET traffics in rare\n" @@ -8,7 +8,7 @@ gUnknown_8194A77:: @ 8194A77 .string "That's the sort of horrid people\n" .string "they are, TEAM ROCKET.$" -gUnknown_8194B65:: @ 8194B65 +VermilionCity_Mart_Text_MonsGoodOrBadDependingOnTrainer:: @ 8194B65 .string "I think POKéMON can be good or\n" .string "bad. It depends on the TRAINER.$" diff --git a/data/maps/VermilionCity_PokemonCenter_1F/map.json b/data/maps/VermilionCity_PokemonCenter_1F/map.json index 70b50d7fe..b9837fca2 100644 --- a/data/maps/VermilionCity_PokemonCenter_1F/map.json +++ b/data/maps/VermilionCity_PokemonCenter_1F/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonCenter_1F_EventScript_16B433", + "script": "VermilionCity_PokemonCenter_1F_EventScript_Nurse", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonCenter_1F_EventScript_16B43C", + "script": "VermilionCity_PokemonCenter_1F_EventScript_Man", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonCenter_1F_EventScript_16B445", + "script": "VermilionCity_PokemonCenter_1F_EventScript_Hiker", "flag": "0" }, { @@ -62,7 +62,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonCenter_1F_EventScript_16B44E", + "script": "VermilionCity_PokemonCenter_1F_EventScript_Youngster", "flag": "0" }, { @@ -75,7 +75,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonCenter_1F_EventScript_1A8D08", + "script": "VermilionCity_PokemonCenter_1F_EventScript_VSSeekerWoman", "flag": "0" }, { @@ -88,7 +88,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonCenter_1F_EventScript_1ACE83", + "script": "VermilionCity_PokemonCenter_1F_EventScript_PokemonJournalLtSurge", "flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL" }, { @@ -101,7 +101,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonCenter_1F_EventScript_1ACE83", + "script": "VermilionCity_PokemonCenter_1F_EventScript_PokemonJournalLtSurge", "flag": "FLAG_HIDE_FAME_CHECKER_LT_SURGE_JOURNAL" } ], diff --git a/data/maps/VermilionCity_PokemonCenter_1F/scripts.inc b/data/maps/VermilionCity_PokemonCenter_1F/scripts.inc index ad7e02455..5f4338101 100644 --- a/data/maps/VermilionCity_PokemonCenter_1F/scripts.inc +++ b/data/maps/VermilionCity_PokemonCenter_1F/scripts.inc @@ -7,21 +7,21 @@ VermilionCity_PokemonCenter_1F_OnTransition:: @ 816B42F setrespawn SPAWN_VERMILION_CITY end -VermilionCity_PokemonCenter_1F_EventScript_16B433:: @ 816B433 +VermilionCity_PokemonCenter_1F_EventScript_Nurse:: @ 816B433 lock faceplayer call EventScript_PkmnCenterNurse release end -VermilionCity_PokemonCenter_1F_EventScript_16B43C:: @ 816B43C - msgbox gUnknown_8194145, MSGBOX_NPC +VermilionCity_PokemonCenter_1F_EventScript_Man:: @ 816B43C + msgbox VermilionCity_PokemonCenter_1F_Text_PoisonedMonFaintedWhileWalking, MSGBOX_NPC end -VermilionCity_PokemonCenter_1F_EventScript_16B445:: @ 816B445 - msgbox gUnknown_81940AF, MSGBOX_NPC +VermilionCity_PokemonCenter_1F_EventScript_Hiker:: @ 816B445 + msgbox VermilionCity_PokemonCenter_1F_Text_TrainerMonsStrongerThanWild, MSGBOX_NPC end -VermilionCity_PokemonCenter_1F_EventScript_16B44E:: @ 816B44E - msgbox gUnknown_8194180, MSGBOX_NPC +VermilionCity_PokemonCenter_1F_EventScript_Youngster:: @ 816B44E + msgbox VermilionCity_PokemonCenter_1F_Text_AllMonWeakToSpecificTypes, MSGBOX_NPC end diff --git a/data/maps/VermilionCity_PokemonCenter_1F/text.inc b/data/maps/VermilionCity_PokemonCenter_1F/text.inc index 811f01edf..cd3780286 100644 --- a/data/maps/VermilionCity_PokemonCenter_1F/text.inc +++ b/data/maps/VermilionCity_PokemonCenter_1F/text.inc @@ -1,15 +1,15 @@ -gUnknown_81940AF:: @ 81940AF +VermilionCity_PokemonCenter_1F_Text_TrainerMonsStrongerThanWild:: @ 81940AF .string "Even if they are the same level,\n" .string "POKéMON can have very different\l" .string "stats and abilities.\p" .string "A POKéMON raised by a TRAINER is\n" .string "stronger than one in the wild.$" -gUnknown_8194145:: @ 8194145 +VermilionCity_PokemonCenter_1F_Text_PoisonedMonFaintedWhileWalking:: @ 8194145 .string "My POKéMON was poisoned!\n" .string "It fainted while we were walking!$" -gUnknown_8194180:: @ 8194180 +VermilionCity_PokemonCenter_1F_Text_AllMonWeakToSpecificTypes:: @ 8194180 .string "It is true that a higher-level\n" .string "POKéMON will be more powerful…\p" .string "But, all POKéMON will have weak\n" @@ -17,3 +17,28 @@ gUnknown_8194180:: @ 8194180 .string "So, there appears to be no\n" .string "universally strong POKéMON.$" +VermilionCity_PokemonCenter_1F_Text_UrgeToBattleSomeoneAgain:: @ 8194234 + .string "The urge to battle with someone\n" + .string "you've tangled with before…\p" + .string "Have you ever had that urge?\n" + .string "I'm sure you have.\p" + .string "I wanted to battle certain people\n" + .string "again over and over, too.\p" + .string "So, I've been giving these away.\n" + .string "Please, take one!$" + +VermilionCity_PokemonCenter_1F_Text_UseDeviceForRematches:: @ 819430F + .string "Use that device and you'll find\n" + .string "TRAINERS looking for a rematch.\p" + .string "You have to charge its battery to\n" + .string "use it, though.$" + +VermilionCity_PokemonCenter_1F_Text_ExplainVSSeeker:: @ 8194381 + .string "How do you use the VS SEEKER?\n" + .string "There's nothing to it.\p" + .string "Use it like beep-beep-beep, and\n" + .string "TRAINERS around you will notice.\p" + .string "If any TRAINER wants a rematch,\n" + .string "it will let you know immediately.\p" + .string "Charge its battery and use it\n" + .string "while you're on a road.$" diff --git a/data/maps/VermilionCity_PokemonFanClub/map.json b/data/maps/VermilionCity_PokemonFanClub/map.json index c9f0c45ed..c669797e7 100644 --- a/data/maps/VermilionCity_PokemonFanClub/map.json +++ b/data/maps/VermilionCity_PokemonFanClub/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonFanClub_EventScript_16B47F", + "script": "VermilionCity_PokemonFanClub_EventScript_Chairman", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonFanClub_EventScript_16B4FC", + "script": "VermilionCity_PokemonFanClub_EventScript_WorkerF", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonFanClub_EventScript_16B59E", + "script": "VermilionCity_PokemonFanClub_EventScript_Pikachu", "flag": "0" }, { @@ -62,7 +62,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonFanClub_EventScript_16B5B1", + "script": "VermilionCity_PokemonFanClub_EventScript_Seel", "flag": "0" }, { @@ -75,7 +75,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonFanClub_EventScript_16B528", + "script": "VermilionCity_PokemonFanClub_EventScript_Woman", "flag": "0" }, { @@ -88,7 +88,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "VermilionCity_PokemonFanClub_EventScript_16B563", + "script": "VermilionCity_PokemonFanClub_EventScript_FatMan", "flag": "0" } ], @@ -122,14 +122,14 @@ "x": 2, "y": 1, "elevation": 0, - "script": "VermilionCity_PokemonFanClub_EventScript_16B5C4" + "script": "VermilionCity_PokemonFanClub_EventScript_RulesSign1" }, { "type": "bg_event_type_0", "x": 9, "y": 1, "elevation": 0, - "script": "VermilionCity_PokemonFanClub_EventScript_16B5CD" + "script": "VermilionCity_PokemonFanClub_EventScript_RulesSign2" } ] } diff --git a/data/maps/VermilionCity_PokemonFanClub/scripts.inc b/data/maps/VermilionCity_PokemonFanClub/scripts.inc index 23b24b9a2..09f8d1d8b 100644 --- a/data/maps/VermilionCity_PokemonFanClub/scripts.inc +++ b/data/maps/VermilionCity_PokemonFanClub/scripts.inc @@ -1,118 +1,121 @@ +.equ SPOKE_TO_WOMAN_LAST, FLAG_TEMP_2 +.equ SPOKE_TO_FAT_MAN_LAST, FLAG_TEMP_3 + VermilionCity_PokemonFanClub_MapScripts:: @ 816B47E .byte 0 -VermilionCity_PokemonFanClub_EventScript_16B47F:: @ 816B47F +VermilionCity_PokemonFanClub_EventScript_Chairman:: @ 816B47F lock faceplayer - goto_if_set FLAG_GOT_BIKE_VOUCHER, EventScript_16B4A7 - msgbox gUnknown_819457E, MSGBOX_YESNO + goto_if_set FLAG_GOT_BIKE_VOUCHER, VermilionCity_PokemonFanClub_EventScript_AlreadyHeardStory + msgbox VermilionCity_PokemonFanClub_Text_DidYouComeToHearAboutMyMons, MSGBOX_YESNO compare VAR_RESULT, YES - goto_if_eq EventScript_16B4B1 - msgbox gUnknown_8194860 + goto_if_eq VermilionCity_PokemonFanClub_EventScript_ChairmanStory + msgbox VermilionCity_PokemonFanClub_Text_ComeBackToHearStory release end -EventScript_16B4A7:: @ 816B4A7 - msgbox gUnknown_819488E +VermilionCity_PokemonFanClub_EventScript_AlreadyHeardStory:: @ 816B4A7 + msgbox VermilionCity_PokemonFanClub_Text_DidntComeToSeeAboutMonsAgain release end -EventScript_16B4B1:: @ 816B4B1 - msgbox gUnknown_8194628 +VermilionCity_PokemonFanClub_EventScript_ChairmanStory:: @ 816B4B1 + msgbox VermilionCity_PokemonFanClub_Text_ChairmansStory checkitemspace ITEM_BIKE_VOUCHER, 1 compare VAR_RESULT, FALSE - goto_if_eq EventScript_16B4F2 + goto_if_eq VermilionCity_PokemonFanClub_EventScript_NoRoomForBikeVoucher setflag FLAG_GOT_BIKE_VOUCHER - giveitem_msg gUnknown_819474E, ITEM_BIKE_VOUCHER, 1, MUS_FAN5 - msgbox gUnknown_819477C + giveitem_msg VermilionCity_PokemonFanClub_Text_ReceivedBikeVoucherFromChairman, ITEM_BIKE_VOUCHER, 1, MUS_FAN5 + msgbox VermilionCity_PokemonFanClub_Text_ExplainBikeVoucher release end -EventScript_16B4F2:: @ 816B4F2 - msgbox gUnknown_81948D2 +VermilionCity_PokemonFanClub_EventScript_NoRoomForBikeVoucher:: @ 816B4F2 + msgbox VermilionCity_PokemonFanClub_Text_MakeRoomForThis release end -VermilionCity_PokemonFanClub_EventScript_16B4FC:: @ 816B4FC +VermilionCity_PokemonFanClub_EventScript_WorkerF:: @ 816B4FC lock faceplayer - goto_if_set FLAG_SYS_GAME_CLEAR, EventScript_16B511 - msgbox gUnknown_81948E6 + goto_if_set FLAG_SYS_GAME_CLEAR, VermilionCity_PokemonFanClub_EventScript_WorkerFGameClear + msgbox VermilionCity_PokemonFanClub_Text_ChairmanVeryVocalAboutPokemon release end -EventScript_16B511:: @ 816B511 +VermilionCity_PokemonFanClub_EventScript_WorkerFGameClear:: @ 816B511 famechecker FAMECHECKER_DAISY, 1 - msgbox gUnknown_8194960 + msgbox VermilionCity_PokemonFanClub_Text_ChairmanReallyAdoresHisMons release end -VermilionCity_PokemonFanClub_EventScript_16B528:: @ 816B528 +VermilionCity_PokemonFanClub_EventScript_Woman:: @ 816B528 lock faceplayer - goto_if_set FLAG_TEMP_3, EventScript_16B54B - msgbox gUnknown_81944CC + goto_if_set SPOKE_TO_FAT_MAN_LAST, VermilionCity_PokemonFanClub_EventScript_WomanSpokeToFatMan + msgbox VermilionCity_PokemonFanClub_Text_AdoreMySeel closemessage applymovement 5, Movement_FaceOriginalDirection waitmovement 0 - setflag FLAG_TEMP_2 + setflag SPOKE_TO_WOMAN_LAST release end -EventScript_16B54B:: @ 816B54B - msgbox gUnknown_8194518 +VermilionCity_PokemonFanClub_EventScript_WomanSpokeToFatMan:: @ 816B54B + msgbox VermilionCity_PokemonFanClub_Text_SeelFarMoreAttractive closemessage applymovement 5, Movement_FaceOriginalDirection waitmovement 0 - clearflag FLAG_TEMP_3 + clearflag SPOKE_TO_FAT_MAN_LAST release end -VermilionCity_PokemonFanClub_EventScript_16B563:: @ 816B563 +VermilionCity_PokemonFanClub_EventScript_FatMan:: @ 816B563 lock faceplayer - goto_if_set FLAG_TEMP_2, EventScript_16B586 - msgbox gUnknown_819446F + goto_if_set SPOKE_TO_WOMAN_LAST, VermilionCity_PokemonFanClub_EventScript_FatManSpokeToWoman + msgbox VermilionCity_PokemonFanClub_Text_AdmirePikachusTail closemessage applymovement 6, Movement_FaceOriginalDirection waitmovement 0 - setflag FLAG_TEMP_3 + setflag SPOKE_TO_FAT_MAN_LAST release end -EventScript_16B586:: @ 816B586 - msgbox gUnknown_819449C +VermilionCity_PokemonFanClub_EventScript_FatManSpokeToWoman:: @ 816B586 + msgbox VermilionCity_PokemonFanClub_Text_PikachuTwiceAsCute closemessage applymovement 6, Movement_FaceOriginalDirection waitmovement 0 - clearflag FLAG_TEMP_2 + clearflag SPOKE_TO_WOMAN_LAST release end -VermilionCity_PokemonFanClub_EventScript_16B59E:: @ 816B59E +VermilionCity_PokemonFanClub_EventScript_Pikachu:: @ 816B59E lock faceplayer waitse playmoncry SPECIES_PIKACHU, 0 - msgbox gUnknown_819455A + msgbox VermilionCity_PokemonFanClub_Text_Pikachu waitmoncry release end -VermilionCity_PokemonFanClub_EventScript_16B5B1:: @ 816B5B1 +VermilionCity_PokemonFanClub_EventScript_Seel:: @ 816B5B1 lock faceplayer waitse playmoncry SPECIES_SEEL, 0 - msgbox gUnknown_8194571 + msgbox VermilionCity_PokemonFanClub_Text_Seel waitmoncry release end -VermilionCity_PokemonFanClub_EventScript_16B5C4:: @ 816B5C4 - msgbox gUnknown_8194910, MSGBOX_SIGN +VermilionCity_PokemonFanClub_EventScript_RulesSign1:: @ 816B5C4 + msgbox VermilionCity_PokemonFanClub_Text_ListenPolitelyToOtherTrainers, MSGBOX_SIGN end -VermilionCity_PokemonFanClub_EventScript_16B5CD:: @ 816B5CD - msgbox gUnknown_819493D, MSGBOX_SIGN +VermilionCity_PokemonFanClub_EventScript_RulesSign2:: @ 816B5CD + msgbox VermilionCity_PokemonFanClub_Text_SomeoneBragsBragBack, MSGBOX_SIGN end diff --git a/data/maps/VermilionCity_PokemonFanClub/text.inc b/data/maps/VermilionCity_PokemonFanClub/text.inc index 1264be24d..7e28fd548 100644 --- a/data/maps/VermilionCity_PokemonFanClub/text.inc +++ b/data/maps/VermilionCity_PokemonFanClub/text.inc @@ -1,56 +1,30 @@ -Text_194234:: @ 8194234 - .string "The urge to battle with someone\n" - .string "you've tangled with before…\p" - .string "Have you ever had that urge?\n" - .string "I'm sure you have.\p" - .string "I wanted to battle certain people\n" - .string "again over and over, too.\p" - .string "So, I've been giving these away.\n" - .string "Please, take one!$" - -Text_19430F:: @ 819430F - .string "Use that device and you'll find\n" - .string "TRAINERS looking for a rematch.\p" - .string "You have to charge its battery to\n" - .string "use it, though.$" - -Text_194381:: @ 8194381 - .string "How do you use the VS SEEKER?\n" - .string "There's nothing to it.\p" - .string "Use it like beep-beep-beep, and\n" - .string "TRAINERS around you will notice.\p" - .string "If any TRAINER wants a rematch,\n" - .string "it will let you know immediately.\p" - .string "Charge its battery and use it\n" - .string "while you're on a road.$" - -gUnknown_819446F:: @ 819446F +VermilionCity_PokemonFanClub_Text_AdmirePikachusTail:: @ 819446F .string "Won't you admire my PIKACHU's\n" .string "adorable tail?$" -gUnknown_819449C:: @ 819449C +VermilionCity_PokemonFanClub_Text_PikachuTwiceAsCute:: @ 819449C .string "Humph!\p" .string "My PIKACHU is twice as cute as\n" .string "that one!$" -gUnknown_81944CC:: @ 81944CC +VermilionCity_PokemonFanClub_Text_AdoreMySeel:: @ 81944CC .string "I just adore my SEEL!\n" .string "It's so lovable!\p" .string "It squeals, “Kyuuuh,” when I\n" .string "hug it!$" -gUnknown_8194518:: @ 8194518 +VermilionCity_PokemonFanClub_Text_SeelFarMoreAttractive:: @ 8194518 .string "Oh, dear!\p" .string "My SEEL is far more attractive.\n" .string "By double, I would say.$" -gUnknown_819455A:: @ 819455A +VermilionCity_PokemonFanClub_Text_Pikachu:: @ 819455A .string "PIKACHU: Chu! Pikachu!$" -gUnknown_8194571:: @ 8194571 +VermilionCity_PokemonFanClub_Text_Seel:: @ 8194571 .string "SEEL: Kyuoo!$" -gUnknown_819457E:: @ 819457E +VermilionCity_PokemonFanClub_Text_DidYouComeToHearAboutMyMons:: @ 819457E .string "I chair the POKéMON Fan Club!\p" .string "I raise more than a hundred\n" .string "POKéMON!\p" @@ -60,7 +34,7 @@ gUnknown_819457E:: @ 819457E .string "Did you come visit to hear about\n" .string "my POKéMON?$" -gUnknown_8194628:: @ 8194628 +VermilionCity_PokemonFanClub_Text_ChairmansStory:: @ 8194628 .string "Good!\n" .string "Then listen up!\p" .string "My favorite RAPIDASH…\p" @@ -76,11 +50,11 @@ gUnknown_8194628:: @ 8194628 .string "Thanks for hearing me out!\n" .string "I want you to have this!$" -gUnknown_819474E:: @ 819474E +VermilionCity_PokemonFanClub_Text_ReceivedBikeVoucherFromChairman:: @ 819474E .string "{PLAYER} received a BIKE VOUCHER\n" .string "from the CHAIRMAN.$" -gUnknown_819477C:: @ 819477C +VermilionCity_PokemonFanClub_Text_ExplainBikeVoucher:: @ 819477C .string "Take that BIKE VOUCHER to the\n" .string "BIKE SHOP in CERULEAN CITY.\p" .string "Exchange that for a BICYCLE\n" @@ -90,55 +64,33 @@ gUnknown_819477C:: @ 819477C .string "So, I have no need for a BICYCLE.\p" .string "I hope you like cycling!$" -gUnknown_8194860:: @ 8194860 +VermilionCity_PokemonFanClub_Text_ComeBackToHearStory:: @ 8194860 .string "Oh. Come back when you want to\n" .string "hear my story!$" -gUnknown_819488E:: @ 819488E +VermilionCity_PokemonFanClub_Text_DidntComeToSeeAboutMonsAgain:: @ 819488E .string "Hello, {PLAYER}!\p" .string "Did you come see me about my\n" .string "POKéMON again?\p" .string "No?\n" .string "Too bad!$" -gUnknown_81948D2:: @ 81948D2 +VermilionCity_PokemonFanClub_Text_MakeRoomForThis:: @ 81948D2 .string "Make room for this!$" -gUnknown_81948E6:: @ 81948E6 +VermilionCity_PokemonFanClub_Text_ChairmanVeryVocalAboutPokemon:: @ 81948E6 .string "Our CHAIRMAN is very vocal about\n" .string "POKéMON.$" -gUnknown_8194910:: @ 8194910 +VermilionCity_PokemonFanClub_Text_ListenPolitelyToOtherTrainers:: @ 8194910 .string "Let's all listen politely to other\n" .string "TRAINERS!$" -gUnknown_819493D:: @ 819493D +VermilionCity_PokemonFanClub_Text_SomeoneBragsBragBack:: @ 819493D .string "If someone brags, brag right back!$" -gUnknown_8194960:: @ 8194960 +VermilionCity_PokemonFanClub_Text_ChairmanReallyAdoresHisMons:: @ 8194960 .string "Our CHAIRMAN really does adore his\n" .string "POKéMON.\p" .string "But the person who is most liked by\n" .string "POKéMON is DAISY, I think.$" - -gUnknown_81949CB:: @ 81949CB - .string "Hi!\n" - .string "Do you have a {STR_VAR_1}?\p" - .string "Want to trade it for my\n" - .string "{STR_VAR_2}?$" - -gUnknown_81949FD:: @ 81949FD - .string "That's too bad.$" - -gUnknown_8194A0D:: @ 8194A0D - .string "…This is no {STR_VAR_1}.\p" - .string "If you get one, please trade it\n" - .string "to me!$" - -gUnknown_8194A44:: @ 8194A44 - .string "Thank you!$" - -gUnknown_8194A4F:: @ 8194A4F - .string "How is my old {STR_VAR_2}?\p" - .string "My {STR_VAR_1} is doing great!$" - diff --git a/data/maps/ViridianCity/map.json b/data/maps/ViridianCity/map.json index ca30e0c6e..a83f47f5a 100644 --- a/data/maps/ViridianCity/map.json +++ b/data/maps/ViridianCity/map.json @@ -65,7 +65,7 @@ "movement_range_y": 0, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_EventScript_1659CA", + "script": "ViridianCity_EventScript_OldMan", "flag": "0" }, { @@ -78,7 +78,7 @@ "movement_range_y": 3, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_EventScript_1659F6", + "script": "ViridianCity_EventScript_TutorialOldMan", "flag": "0" }, { @@ -91,7 +91,7 @@ "movement_range_y": 3, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_EventScript_165AC4", + "script": "ViridianCity_EventScript_Woman", "flag": "0" }, { @@ -104,7 +104,7 @@ "movement_range_y": 2, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_EventScript_165A8F", + "script": "ViridianCity_EventScript_Youngster", "flag": "0" }, { @@ -117,7 +117,7 @@ "movement_range_y": 2, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_EventScript_1659C1", + "script": "ViridianCity_EventScript_Boy", "flag": "0" }, { @@ -192,7 +192,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN", "var_value": 0, - "script": "ViridianCity_EventScript_165AF6" + "script": "ViridianCity_EventScript_RoadBlocked" }, { "type": "trigger", @@ -201,7 +201,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR", "var_value": 0, - "script": "ViridianCity_EventScript_16596D" + "script": "ViridianCity_EventScript_GymDoorLocked" }, { "type": "trigger", @@ -210,7 +210,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN", "var_value": 1, - "script": "ViridianCity_EventScript_165B10" + "script": "ViridianCity_EventScript_TutorialTriggerLeft" }, { "type": "trigger", @@ -219,7 +219,7 @@ "elevation": 3, "var": "VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN", "var_value": 1, - "script": "ViridianCity_EventScript_165B2E" + "script": "ViridianCity_EventScript_TutorialTriggerRight" } ], "bg_events": [ @@ -228,35 +228,35 @@ "x": 23, "y": 1, "elevation": 3, - "script": "ViridianCity_EventScript_16599D" + "script": "ViridianCity_EventScript_TrainerTips1" }, { "type": "bg_event_type_0", "x": 32, "y": 10, "elevation": 0, - "script": "ViridianCity_EventScript_1659AF" + "script": "ViridianCity_EventScript_GymSign" }, { "type": "bg_event_type_0", "x": 20, "y": 31, "elevation": 0, - "script": "ViridianCity_EventScript_1659A6" + "script": "ViridianCity_EventScript_TrainerTips2" }, { "type": "bg_event_type_0", "x": 20, "y": 16, "elevation": 0, - "script": "ViridianCity_EventScript_165994" + "script": "ViridianCity_EventScript_CitySign" }, { "type": "bg_event_type_0", "x": 36, "y": 10, "elevation": 0, - "script": "ViridianCity_EventScript_1659B8" + "script": "ViridianCity_EventScript_GymDoor" } ] } diff --git a/data/maps/ViridianCity/scripts.inc b/data/maps/ViridianCity/scripts.inc index c317a92eb..4fb140b24 100644 --- a/data/maps/ViridianCity/scripts.inc +++ b/data/maps/ViridianCity/scripts.inc @@ -1,3 +1,5 @@ +.equ LOCALID_TUTORIAL_MAN, 4 + ViridianCity_MapScripts:: @ 81658D3 map_script MAP_SCRIPT_ON_TRANSITION, ViridianCity_OnTransition .byte 0 @@ -5,32 +7,32 @@ ViridianCity_MapScripts:: @ 81658D3 ViridianCity_OnTransition:: @ 81658D9 setworldmapflag FLAG_WORLD_MAP_VIRIDIAN_CITY compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 0 - call_if_eq EventScript_165920 + call_if_eq ViridianCity_EventScript_SetOldManBlockingRoad compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 1 - call_if_eq EventScript_16590F + call_if_eq ViridianCity_EventScript_SetOldManStandingByRoad compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 2 - call_if_ge EventScript_165909 + call_if_ge ViridianCity_EventScript_SetOldManNormal compare VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR, 0 - call_if_eq EventScript_165931 + call_if_eq ViridianCity_EventScript_TryUnlockGym end -EventScript_165909:: @ 8165909 +ViridianCity_EventScript_SetOldManNormal:: @ 8165909 setvar VAR_OBJ_GFX_ID_0, OBJECT_EVENT_GFX_OLD_MAN_1 return -EventScript_16590F:: @ 816590F +ViridianCity_EventScript_SetOldManStandingByRoad:: @ 816590F setvar VAR_OBJ_GFX_ID_0, OBJECT_EVENT_GFX_OLD_MAN_1 - setobjectxyperm 4, 21, 8 - setobjectmovementtype 4, 1 + setobjectxyperm LOCALID_TUTORIAL_MAN, 21, 8 + setobjectmovementtype LOCALID_TUTORIAL_MAN, MOVEMENT_TYPE_LOOK_AROUND return -EventScript_165920:: @ 8165920 - setvar VAR_OBJ_GFX_ID_0, OBJECT_EVENT_GFX_VIRIDIAN_DRUNK - setobjectxyperm 4, 21, 11 - setobjectmovementtype 4, 8 +ViridianCity_EventScript_SetOldManBlockingRoad:: @ 8165920 + setvar VAR_OBJ_GFX_ID_0, OBJECT_EVENT_GFX_OLD_MAN_LYING_DOWN + setobjectxyperm LOCALID_TUTORIAL_MAN, 21, 11 + setobjectmovementtype LOCALID_TUTORIAL_MAN, MOVEMENT_TYPE_FACE_DOWN return -EventScript_165931:: @ 8165931 +ViridianCity_EventScript_TryUnlockGym:: @ 8165931 goto_if_unset FLAG_BADGE02_GET, EventScript_Return goto_if_unset FLAG_BADGE03_GET, EventScript_Return goto_if_unset FLAG_BADGE04_GET, EventScript_Return @@ -40,106 +42,109 @@ EventScript_165931:: @ 8165931 setvar VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR, 1 return -ViridianCity_EventScript_16596D:: @ 816596D +ViridianCity_EventScript_GymDoorLocked:: @ 816596D lockall textcolor 3 applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkInPlaceFastestUp waitmovement 0 delay 20 - msgbox gUnknown_817E2F5 + msgbox ViridianCity_Text_GymDoorsAreLocked closemessage - applymovement OBJ_EVENT_ID_PLAYER, Movement_165992 + applymovement OBJ_EVENT_ID_PLAYER, ViridianCity_Movement_JumpDownLedge waitmovement 0 releaseall end -Movement_165992:: @ 8165992 +ViridianCity_Movement_JumpDownLedge:: @ 8165992 jump_2_down step_end -ViridianCity_EventScript_165994:: @ 8165994 - msgbox gUnknown_817E1BB, MSGBOX_SIGN +ViridianCity_EventScript_CitySign:: @ 8165994 + msgbox ViridianCity_Text_CitySign, MSGBOX_SIGN end -ViridianCity_EventScript_16599D:: @ 816599D - msgbox gUnknown_817E1E7, MSGBOX_SIGN +ViridianCity_EventScript_TrainerTips1:: @ 816599D + msgbox ViridianCity_Text_CatchMonsForEasierBattles, MSGBOX_SIGN end -ViridianCity_EventScript_1659A6:: @ 81659A6 - msgbox gUnknown_817E24D, MSGBOX_SIGN +ViridianCity_EventScript_TrainerTips2:: @ 81659A6 + msgbox ViridianCity_Text_MovesLimitedByPP, MSGBOX_SIGN end -ViridianCity_EventScript_1659AF:: @ 81659AF - msgbox gUnknown_817E2DB, MSGBOX_SIGN +ViridianCity_EventScript_GymSign:: @ 81659AF + msgbox ViridianCity_Text_GymSign, MSGBOX_SIGN end -ViridianCity_EventScript_1659B8:: @ 81659B8 - msgbox gUnknown_817E2F5, MSGBOX_SIGN +ViridianCity_EventScript_GymDoor:: @ 81659B8 + msgbox ViridianCity_Text_GymDoorsAreLocked, MSGBOX_SIGN end -ViridianCity_EventScript_1659C1:: @ 81659C1 - msgbox gUnknown_817DABB, MSGBOX_NPC +ViridianCity_EventScript_Boy:: @ 81659C1 + msgbox ViridianCity_Text_CanCarryMonsAnywhere, MSGBOX_NPC end -ViridianCity_EventScript_1659CA:: @ 81659CA +@ Other old man, not the tutorial old man +ViridianCity_EventScript_OldMan:: @ 81659CA lock faceplayer compare VAR_MAP_SCENE_VIRIDIAN_CITY_GYM_DOOR, 1 - goto_if_eq EventScript_1659EC - msgbox gUnknown_817DB39 + goto_if_eq ViridianCity_EventScript_OldManGymLeaderReturned + msgbox ViridianCity_Text_GymClosedWonderWhoLeaderIs closemessage applymovement 3, Movement_FaceOriginalDirection waitmovement 0 release end -EventScript_1659EC:: @ 81659EC - msgbox gUnknown_817DB78 +ViridianCity_EventScript_OldManGymLeaderReturned:: @ 81659EC + msgbox ViridianCity_Text_ViridiansGymLeaderReturned release end -ViridianCity_EventScript_1659F6:: @ 81659F6 +ViridianCity_EventScript_TutorialOldMan:: @ 81659F6 lock faceplayer - goto_if_set FLAG_BADGE01_GET, EventScript_165A23 + goto_if_set FLAG_BADGE01_GET, ViridianCity_EventScript_AskIfTeachyTVHelpful compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 2 - goto_if_ge EventScript_165A4A + goto_if_ge ViridianCity_EventScript_TutorialCompleted compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 1 - goto_if_eq EventScript_165A54 + goto_if_eq ViridianCity_EventScript_TutorialStart compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 0 - goto_if_eq EventScript_165A84 + goto_if_eq ViridianCity_EventScript_TutorialNotReady end -EventScript_165A23:: @ 8165A23 - msgbox gUnknown_817E046, MSGBOX_YESNO +ViridianCity_EventScript_AskIfTeachyTVHelpful:: @ 8165A23 + msgbox ViridianCity_Text_HowsTeachyTVHelping, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_165A40 - msgbox gUnknown_817E0EA + goto_if_eq ViridianCity_EventScript_TeachyTVNotHelpful + msgbox ViridianCity_Text_MyGrandsonOnTheShow release end -EventScript_165A40:: @ 8165A40 - msgbox gUnknown_817E14E +ViridianCity_EventScript_TeachyTVNotHelpful:: @ 8165A40 + msgbox ViridianCity_Text_TooBusyForTeachyTV release end -EventScript_165A4A:: @ 8165A4A - msgbox gUnknown_817DF61 +ViridianCity_EventScript_TutorialCompleted:: @ 8165A4A + msgbox ViridianCity_Text_WeakenMonsFirstToCatch release end -EventScript_165A54:: @ 8165A54 - call EventScript_165B4C +ViridianCity_EventScript_TutorialStart:: @ 8165A54 + call ViridianCity_EventScript_DoTutorialBattle release end -EventScript_165A5B:: @ 8165A5B - msgbox gUnknown_817DEEB +@ Unused +ViridianCity_EventScript_WatchToLearnBasics:: @ 8165A5B + msgbox ViridianCity_Text_WatchThatToLearnBasics release end -EventScript_165A65:: @ 8165A65 - msgbox gUnknown_817DE9B +@ Unused. Starts battle after the post battle text, which is odd. +ViridianCity_EventScript_TutorialUnused:: @ 8165A65 + msgbox ViridianCity_Text_ThatWasEducationalTakeThis goto_if_questlog EventScript_ReleaseEnd special sub_8112364 special ScrSpecial_StartOldManTutorialBattle @@ -147,43 +152,43 @@ EventScript_165A65:: @ 8165A65 release end -EventScript_165A84:: @ 8165A84 - msgbox gUnknown_817DD03 +ViridianCity_EventScript_TutorialNotReady:: @ 8165A84 + msgbox ViridianCity_Text_ThisIsPrivateProperty closemessage release end -ViridianCity_EventScript_165A8F:: @ 8165A8F +ViridianCity_EventScript_Youngster:: @ 8165A8F lock faceplayer - msgbox gUnknown_817DB98, MSGBOX_YESNO + msgbox ViridianCity_Text_WantToKnowAboutCaterpillarMons, MSGBOX_YESNO compare VAR_RESULT, YES - goto_if_eq EventScript_165AB0 + goto_if_eq ViridianCity_EventScript_YoungsterExplainCaterpillars compare VAR_RESULT, NO - goto_if_eq EventScript_165ABA + goto_if_eq ViridianCity_EventScript_YoungsterDeclineExplanation end -EventScript_165AB0:: @ 8165AB0 - msgbox gUnknown_817DBE4 +ViridianCity_EventScript_YoungsterExplainCaterpillars:: @ 8165AB0 + msgbox ViridianCity_Text_ExplainCaterpieWeedle release end -EventScript_165ABA:: @ 8165ABA - msgbox gUnknown_817DBD5 +ViridianCity_EventScript_YoungsterDeclineExplanation:: @ 8165ABA + msgbox ViridianCity_Text_OhOkayThen release end -ViridianCity_EventScript_165AC4:: @ 8165AC4 +ViridianCity_EventScript_Woman:: @ 8165AC4 lock faceplayer compare VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 0 - goto_if_eq EventScript_165ADB - msgbox gUnknown_817DC99 + goto_if_eq ViridianCity_EventScript_WomanRoadBlocked + msgbox ViridianCity_Text_GoShoppingInPewterOccasionally release end -EventScript_165ADB:: @ 8165ADB - msgbox gUnknown_817DC4E +ViridianCity_EventScript_WomanRoadBlocked:: @ 8165ADB + msgbox ViridianCity_Text_GrandpaHasntHadCoffeeYet closemessage applymovement 5, Movement_FaceOriginalDirection waitmovement 0 @@ -194,44 +199,44 @@ ViridianCity_EventScript_DreamEaterTutor:: @ 8165AF0 goto EventScript_DreamEaterTutor end -ViridianCity_EventScript_165AF6:: @ 8165AF6 +ViridianCity_EventScript_RoadBlocked:: @ 8165AF6 lockall textcolor 0 - msgbox gUnknown_817DD03 + msgbox ViridianCity_Text_ThisIsPrivateProperty closemessage - applymovement OBJ_EVENT_ID_PLAYER, Movement_165B0E + applymovement OBJ_EVENT_ID_PLAYER, ViridianCity_Movement_WalkDown waitmovement 0 releaseall end -Movement_165B0E:: @ 8165B0E +ViridianCity_Movement_WalkDown:: @ 8165B0E walk_down step_end -ViridianCity_EventScript_165B10:: @ 8165B10 +ViridianCity_EventScript_TutorialTriggerLeft:: @ 8165B10 lockall textcolor 0 - applymovement 4, Movement_WalkInPlaceFastestLeft + applymovement LOCALID_TUTORIAL_MAN, Movement_WalkInPlaceFastestLeft waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkInPlaceFastestRight waitmovement 0 - call EventScript_165B4C + call ViridianCity_EventScript_DoTutorialBattle release end -ViridianCity_EventScript_165B2E:: @ 8165B2E +ViridianCity_EventScript_TutorialTriggerRight:: @ 8165B2E lockall textcolor 0 - applymovement 4, Movement_WalkInPlaceFastestRight + applymovement LOCALID_TUTORIAL_MAN, Movement_WalkInPlaceFastestRight waitmovement 0 applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkInPlaceFastestLeft waitmovement 0 - call EventScript_165B4C + call ViridianCity_EventScript_DoTutorialBattle release end -EventScript_165B4C:: @ 8165B4C - msgbox gUnknown_817DD4E +ViridianCity_EventScript_DoTutorialBattle:: @ 8165B4C + msgbox ViridianCity_Text_ShowYouHowToCatchMons closemessage goto_if_questlog EventScript_ReleaseEnd special sub_8112364 @@ -239,8 +244,8 @@ EventScript_165B4C:: @ 8165B4C waitstate lock faceplayer - msgbox gUnknown_817DE9B + msgbox ViridianCity_Text_ThatWasEducationalTakeThis setvar VAR_MAP_SCENE_VIRIDIAN_CITY_OLD_MAN, 2 giveitem ITEM_TEACHY_TV - msgbox gUnknown_817DEEB + msgbox ViridianCity_Text_WatchThatToLearnBasics return diff --git a/data/maps/ViridianCity/text.inc b/data/maps/ViridianCity/text.inc index 37b1d3c55..d029c942d 100644 --- a/data/maps/ViridianCity/text.inc +++ b/data/maps/ViridianCity/text.inc @@ -1,47 +1,47 @@ -gUnknown_817DABB:: @ 817DABB +ViridianCity_Text_CanCarryMonsAnywhere:: @ 817DABB .string "Those POKé BALLS at your waist!\n" .string "You have POKéMON, don't you?\p" .string "It's great that you can carry and\n" .string "use POKéMON anytime, anywhere.$" -gUnknown_817DB39:: @ 817DB39 +ViridianCity_Text_GymClosedWonderWhoLeaderIs:: @ 817DB39 .string "This POKéMON GYM is always closed.\p" .string "I wonder who the LEADER is?$" -gUnknown_817DB78:: @ 817DB78 +ViridianCity_Text_ViridiansGymLeaderReturned:: @ 817DB78 .string "VIRIDIAN GYM's LEADER returned!$" -gUnknown_817DB98:: @ 817DB98 +ViridianCity_Text_WantToKnowAboutCaterpillarMons:: @ 817DB98 .string "You want to know about the two\n" .string "kinds of caterpillar POKéMON?$" -gUnknown_817DBD5:: @ 817DBD5 +ViridianCity_Text_OhOkayThen:: @ 817DBD5 .string "Oh, okay then!$" -gUnknown_817DBE4:: @ 817DBE4 +ViridianCity_Text_ExplainCaterpieWeedle:: @ 817DBE4 .string "CATERPIE has no poison,\n" .string "but WEEDLE does.\p" .string "Watch that your POKéMON aren't\n" .string "stabbed by WEEDLE's POISON STING.$" -gUnknown_817DC4E:: @ 817DC4E +ViridianCity_Text_GrandpaHasntHadCoffeeYet:: @ 817DC4E .string "Oh, Grandpa!\n" .string "Don't be so mean!\p" .string "I'm so sorry.\n" .string "He hasn't had his coffee yet.$" -gUnknown_817DC99:: @ 817DC99 +ViridianCity_Text_GoShoppingInPewterOccasionally:: @ 817DC99 .string "I go shopping in PEWTER CITY\n" .string "occasionally.\p" .string "I have to take the winding trail in\n" .string "VIRIDIAN FOREST when I go.$" -gUnknown_817DD03:: @ 817DD03 +ViridianCity_Text_ThisIsPrivateProperty:: @ 817DD03 .string "I absolutely forbid you from\n" .string "going through here!\p" .string "This is private property!$" -gUnknown_817DD4E:: @ 817DD4E +ViridianCity_Text_ShowYouHowToCatchMons:: @ 817DD4E .string "Well, now, I've had my coffee, and\n" .string "that's what I need to get going!\p" .string "Hm?\n" @@ -58,18 +58,18 @@ gUnknown_817DD4E:: @ 817DD4E .string "I suppose I had better show you\n" .string "then!$" -gUnknown_817DE9B:: @ 817DE9B +ViridianCity_Text_ThatWasEducationalTakeThis:: @ 817DE9B .string "There! Now tell me, that was\n" .string "educational, was it not?\p" .string "And here, take this, too.$" -gUnknown_817DEEB:: @ 817DEEB +ViridianCity_Text_WatchThatToLearnBasics:: @ 817DEEB .string "If there's something you don't\n" .string "understand, watch that.\p" .string "It will teach you about the basics\n" .string "of being a POKéMON TRAINER.$" -gUnknown_817DF61:: @ 817DF61 +ViridianCity_Text_WeakenMonsFirstToCatch:: @ 817DF61 .string "Well, now, I've had my coffee, and\n" .string "that's what I need to get going!\p" .string "But I made it too strong.\n" @@ -79,7 +79,7 @@ gUnknown_817DF61:: @ 817DF61 .string "At first, focus on weakening the\n" .string "POKéMON before trying to catch it.$" -gUnknown_817E046:: @ 817E046 +ViridianCity_Text_HowsTeachyTVHelping:: @ 817E046 .string "Well, now, I've had my coffee, and\n" .string "that's what I need to get going!\p" .string "But I made it too strong.\n" @@ -87,39 +87,39 @@ gUnknown_817E046:: @ 817E046 .string "Incidentally, is my old TEACHY TV\n" .string "helping you?$" -gUnknown_817E0EA:: @ 817E0EA +ViridianCity_Text_MyGrandsonOnTheShow:: @ 817E0EA .string "Wahaha!\n" .string "It's my grandson on the show!\p" .string "Since he's the one doing the\n" .string "teaching, you're bound to learn.$" -gUnknown_817E14E:: @ 817E14E +ViridianCity_Text_TooBusyForTeachyTV:: @ 817E14E .string "Hm… You're too busy to not even\n" .string "have the time for TEACHY TV…\p" .string "Time is money, and neither should\n" .string "be ill spent…$" -gUnknown_817E1BB:: @ 817E1BB +ViridianCity_Text_CitySign:: @ 817E1BB .string "VIRIDIAN CITY \n" .string "The Eternally Green Paradise$" -gUnknown_817E1E7:: @ 817E1E7 +ViridianCity_Text_CatchMonsForEasierBattles:: @ 817E1E7 .string "TRAINER TIPS\p" .string "Catch POKéMON and expand your\n" .string "collection.\p" .string "The more you have, the easier it\n" .string "is to battle.$" -gUnknown_817E24D:: @ 817E24D +ViridianCity_Text_MovesLimitedByPP:: @ 817E24D .string "TRAINER TIPS\p" .string "The battle moves of POKéMON are\n" .string "limited by their POWER POINTS, PP.\p" .string "To replenish PP, rest your tired\n" .string "POKéMON at a POKéMON CENTER.$" -gUnknown_817E2DB:: @ 817E2DB +ViridianCity_Text_GymSign:: @ 817E2DB .string "VIRIDIAN CITY POKéMON GYM$" -gUnknown_817E2F5:: @ 817E2F5 +ViridianCity_Text_GymDoorsAreLocked:: @ 817E2F5 .string "VIRIDIAN GYM's doors are locked…$" diff --git a/data/maps/ViridianCity_Gym/map.json b/data/maps/ViridianCity_Gym/map.json index 0297a31b1..b4c9a93e4 100644 --- a/data/maps/ViridianCity_Gym/map.json +++ b/data/maps/ViridianCity_Gym/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "ViridianCity_Gym_EventScript_169FD6", + "script": "ViridianCity_Gym_EventScript_Takashi", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "ViridianCity_Gym_EventScript_16A004", + "script": "ViridianCity_Gym_EventScript_Yuji", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "ViridianCity_Gym_EventScript_169FA8", + "script": "ViridianCity_Gym_EventScript_Atsushi", "flag": "0" }, { @@ -62,7 +62,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "ViridianCity_Gym_EventScript_169F7A", + "script": "ViridianCity_Gym_EventScript_Jason", "flag": "0" }, { @@ -75,7 +75,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 2, - "script": "ViridianCity_Gym_EventScript_169F91", + "script": "ViridianCity_Gym_EventScript_Cole", "flag": "0" }, { @@ -88,7 +88,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 2, - "script": "ViridianCity_Gym_EventScript_169FBF", + "script": "ViridianCity_Gym_EventScript_Kiyo", "flag": "0" }, { @@ -101,7 +101,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "ViridianCity_Gym_EventScript_169FED", + "script": "ViridianCity_Gym_EventScript_Samuel", "flag": "0" }, { @@ -114,7 +114,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_Gym_EventScript_169ECA", + "script": "ViridianCity_Gym_EventScript_Giovanni", "flag": "FLAG_HIDE_VIRIDIAN_GIOVANNI" }, { @@ -127,7 +127,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 3, - "script": "ViridianCity_Gym_EventScript_16A01B", + "script": "ViridianCity_Gym_EventScript_Warren", "flag": "0" }, { @@ -140,7 +140,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_Gym_EventScript_16A032", + "script": "ViridianCity_Gym_EventScript_GymGuy", "flag": "0" } ], @@ -174,14 +174,14 @@ "x": 15, "y": 20, "elevation": 0, - "script": "ViridianCity_Gym_EventScript_16A05E" + "script": "ViridianCity_Gym_EventScript_GymStatue" }, { "type": "bg_event_type_0", "x": 19, "y": 20, "elevation": 0, - "script": "ViridianCity_Gym_EventScript_16A05E" + "script": "ViridianCity_Gym_EventScript_GymStatue" }, { "type": "hidden_item", diff --git a/data/maps/ViridianCity_Gym/scripts.inc b/data/maps/ViridianCity_Gym/scripts.inc index 0579e9e32..c14dceddf 100644 --- a/data/maps/ViridianCity_Gym/scripts.inc +++ b/data/maps/ViridianCity_Gym/scripts.inc @@ -1,11 +1,11 @@ ViridianCity_Gym_MapScripts:: @ 8169EC9 .byte 0 -ViridianCity_Gym_EventScript_169ECA:: @ 8169ECA +ViridianCity_Gym_EventScript_Giovanni:: @ 8169ECA famechecker FAMECHECKER_GIOVANNI, FCPICKSTATE_COLORED, UpdatePickStateFromSpecialVar8005 - trainerbattle_single TRAINER_LEADER_GIOVANNI, Text_18F352, Text_18F43F, EventScript_169F04, NO_MUSIC - goto_if_unset FLAG_GOT_TM26_FROM_GIOVANNI, EventScript_169F2F - msgbox gUnknown_818F4A2 + trainerbattle_single TRAINER_LEADER_GIOVANNI, ViridianCity_Gym_Text_GiovanniIntro, ViridianCity_Gym_Text_GiovanniDefeat, ViridianCity_Gym_EventScript_DefeatedGiovanni, NO_MUSIC + goto_if_unset FLAG_GOT_TM26_FROM_GIOVANNI, ViridianCity_Gym_EventScript_GiveTM26 + msgbox ViridianCity_Gym_Text_GiovanniPostBattle closemessage fadescreen FADE_TO_BLACK removeobject 8 @@ -13,94 +13,94 @@ ViridianCity_Gym_EventScript_169ECA:: @ 8169ECA release end -EventScript_169F04:: @ 8169F04 +ViridianCity_Gym_EventScript_DefeatedGiovanni:: @ 8169F04 famechecker FAMECHECKER_GIOVANNI, 3 setflag FLAG_HIDE_MISC_KANTO_ROCKETS setflag FLAG_DEFEATED_LEADER_GIOVANNI setflag FLAG_BADGE08_GET setvar VAR_MAP_SCENE_ROUTE22, 3 set_gym_trainers 8 - goto EventScript_169F2F + goto ViridianCity_Gym_EventScript_GiveTM26 end -EventScript_169F2F:: @ 8169F2F - msgbox gUnknown_818F586 +ViridianCity_Gym_EventScript_GiveTM26:: @ 8169F2F + msgbox ViridianCity_Gym_Text_ExplainEarthBadgeTakeThis checkitemspace ITEM_TM26, 1 compare VAR_RESULT, FALSE - goto_if_eq EventScript_169F70 - giveitem_msg gUnknown_818F675, ITEM_TM26 + goto_if_eq ViridianCity_Gym_EventScript_NoRoomForTM26 + giveitem_msg ViridianCity_Gym_Text_ReceivedTM26FromGiovanni, ITEM_TM26 setflag FLAG_GOT_TM26_FROM_GIOVANNI - msgbox gUnknown_818F695 + msgbox ViridianCity_Gym_Text_ExplainTM26 release end -EventScript_169F70:: @ 8169F70 - msgbox gUnknown_818F71B +ViridianCity_Gym_EventScript_NoRoomForTM26:: @ 8169F70 + msgbox ViridianCity_Gym_Text_YouDoNotHaveSpace release end -ViridianCity_Gym_EventScript_169F7A:: @ 8169F7A - trainerbattle_single TRAINER_TAMER_JASON, Text_18F7F3, Text_18F824 - msgbox gUnknown_818F840, MSGBOX_AUTOCLOSE +ViridianCity_Gym_EventScript_Jason:: @ 8169F7A + trainerbattle_single TRAINER_TAMER_JASON, ViridianCity_Gym_Text_JasonIntro, ViridianCity_Gym_Text_JasonDefeat + msgbox ViridianCity_Gym_Text_JasonPostBattle, MSGBOX_AUTOCLOSE end -ViridianCity_Gym_EventScript_169F91:: @ 8169F91 - trainerbattle_single TRAINER_TAMER_COLE, Text_18F98A, Text_18F9BB - msgbox gUnknown_818F9CC, MSGBOX_AUTOCLOSE +ViridianCity_Gym_EventScript_Cole:: @ 8169F91 + trainerbattle_single TRAINER_TAMER_COLE, ViridianCity_Gym_Text_ColeIntro, ViridianCity_Gym_Text_ColeDefeat + msgbox ViridianCity_Gym_Text_ColePostBattle, MSGBOX_AUTOCLOSE end -ViridianCity_Gym_EventScript_169FA8:: @ 8169FA8 - trainerbattle_single TRAINER_BLACK_BELT_ATSUSHI, Text_18F7AD, Text_18F7D6 - msgbox gUnknown_818F7DD, MSGBOX_AUTOCLOSE +ViridianCity_Gym_EventScript_Atsushi:: @ 8169FA8 + trainerbattle_single TRAINER_BLACK_BELT_ATSUSHI, ViridianCity_Gym_Text_AtsushiIntro, ViridianCity_Gym_Text_AtsushiDefeat + msgbox ViridianCity_Gym_Text_AtsushiPostBattle, MSGBOX_AUTOCLOSE end -ViridianCity_Gym_EventScript_169FBF:: @ 8169FBF - trainerbattle_single TRAINER_BLACK_BELT_KIYO, Text_18F86C, Text_18F899 - msgbox gUnknown_818F8A0, MSGBOX_AUTOCLOSE +ViridianCity_Gym_EventScript_Kiyo:: @ 8169FBF + trainerbattle_single TRAINER_BLACK_BELT_KIYO, ViridianCity_Gym_Text_KiyoIntro, ViridianCity_Gym_Text_KiyoDefeat + msgbox ViridianCity_Gym_Text_KiyoPostBattle, MSGBOX_AUTOCLOSE end -ViridianCity_Gym_EventScript_169FD6:: @ 8169FD6 - trainerbattle_single TRAINER_BLACK_BELT_TAKASHI, Text_18F92C, Text_18F95A - msgbox gUnknown_818F960, MSGBOX_AUTOCLOSE +ViridianCity_Gym_EventScript_Takashi:: @ 8169FD6 + trainerbattle_single TRAINER_BLACK_BELT_TAKASHI, ViridianCity_Gym_Text_TakashiIntro, ViridianCity_Gym_Text_TakashiDefeat + msgbox ViridianCity_Gym_Text_TakashiPostBattle, MSGBOX_AUTOCLOSE end -ViridianCity_Gym_EventScript_169FED:: @ 8169FED - trainerbattle_single TRAINER_COOLTRAINER_SAMUEL, Text_18F9E7, Text_18FA2D - msgbox gUnknown_818FA3B, MSGBOX_AUTOCLOSE +ViridianCity_Gym_EventScript_Samuel:: @ 8169FED + trainerbattle_single TRAINER_COOLTRAINER_SAMUEL, ViridianCity_Gym_Text_SamuelIntro, ViridianCity_Gym_Text_SamuelDefeat + msgbox ViridianCity_Gym_Text_SamuelPostBattle, MSGBOX_AUTOCLOSE end -ViridianCity_Gym_EventScript_16A004:: @ 816A004 - trainerbattle_single TRAINER_COOLTRAINER_YUJI, Text_18F73B, Text_18F769 - msgbox gUnknown_818F77B, MSGBOX_AUTOCLOSE +ViridianCity_Gym_EventScript_Yuji:: @ 816A004 + trainerbattle_single TRAINER_COOLTRAINER_YUJI, ViridianCity_Gym_Text_YujiIntro, ViridianCity_Gym_Text_YujiDefeat + msgbox ViridianCity_Gym_Text_YujiPostBattle, MSGBOX_AUTOCLOSE end -ViridianCity_Gym_EventScript_16A01B:: @ 816A01B - trainerbattle_single TRAINER_COOLTRAINER_WARREN, Text_18F8CB, Text_18F8EE - msgbox gUnknown_818F8FE, MSGBOX_AUTOCLOSE +ViridianCity_Gym_EventScript_Warren:: @ 816A01B + trainerbattle_single TRAINER_COOLTRAINER_WARREN, ViridianCity_Gym_Text_WarrenIntro, ViridianCity_Gym_Text_WarrenDefeat + msgbox ViridianCity_Gym_Text_WarrenPostBattle, MSGBOX_AUTOCLOSE end -ViridianCity_Gym_EventScript_16A032:: @ 816A032 +ViridianCity_Gym_EventScript_GymGuy:: @ 816A032 lock faceplayer - goto_if_set FLAG_DEFEATED_LEADER_GIOVANNI, EventScript_16A047 - msgbox gUnknown_818FA81 + goto_if_set FLAG_DEFEATED_LEADER_GIOVANNI, ViridianCity_Gym_EventScript_GymGuyPostVictory + msgbox ViridianCity_Gym_Text_GymGuyAdvice release end -EventScript_16A047:: @ 816A047 +ViridianCity_Gym_EventScript_GymGuyPostVictory:: @ 816A047 famechecker FAMECHECKER_GIOVANNI, 4 - msgbox gUnknown_818FB56 + msgbox ViridianCity_Gym_Text_GymGuyPostVictory release end -ViridianCity_Gym_EventScript_16A05E:: @ 816A05E +ViridianCity_Gym_EventScript_GymStatue:: @ 816A05E lockall - goto_if_set FLAG_BADGE08_GET, EventScript_16A072 - msgbox gUnknown_818FB8D + goto_if_set FLAG_BADGE08_GET, ViridianCity_Gym_EventScript_GymStatuePostVictory + msgbox ViridianCity_Gym_Text_GymStatue releaseall end -EventScript_16A072:: @ 816A072 - msgbox gUnknown_818FBC1 +ViridianCity_Gym_EventScript_GymStatuePostVictory:: @ 816A072 + msgbox ViridianCity_Gym_Text_GymStatuePlayerWon releaseall end diff --git a/data/maps/ViridianCity_Gym/text.inc b/data/maps/ViridianCity_Gym/text.inc index 7372bd6d3..38561c011 100644 --- a/data/maps/ViridianCity_Gym/text.inc +++ b/data/maps/ViridianCity_Gym/text.inc @@ -1,4 +1,4 @@ -Text_18F352:: @ 818F352 +ViridianCity_Gym_Text_GiovanniIntro:: @ 818F352 .string "Fwahahaha!\n" .string "Welcome to my hideout!\p" .string "It shall be so until I can restore\n" @@ -9,14 +9,14 @@ Text_18F352:: @ 818F352 .string "Once more, you shall face\n" .string "GIOVANNI, the greatest TRAINER!{PLAY_BGM}{MUS_ROCKET}$" -Text_18F43F:: @ 818F43F +ViridianCity_Gym_Text_GiovanniDefeat:: @ 818F43F .string "Ha!\n" .string "That was a truly intense fight.\l" .string "You have won!\p" .string "As proof, here is the EARTHBADGE!\n" .string "{PAUSE_MUSIC}{PLAY_BGM}{MUS_ME_BACHI}{PAUSE 0xFE}{PAUSE 0x56}{RESUME_MUSIC}$" -gUnknown_818F4A2:: @ 818F4A2 +ViridianCity_Gym_Text_GiovanniPostBattle:: @ 818F4A2 .string "Having lost in this fashion, \n" .string "I can't face my followers.\l" .string "I have betrayed their trust.\p" @@ -27,7 +27,7 @@ gUnknown_818F4A2:: @ 818F4A2 .string "Let us meet again someday!\n" .string "Farewell!$" -gUnknown_818F586:: @ 818F586 +ViridianCity_Gym_Text_ExplainEarthBadgeTakeThis:: @ 818F586 .string "The EARTHBADGE makes POKéMON of\n" .string "any level obey without question.\p" .string "It is evidence of your mastery as\n" @@ -38,111 +38,111 @@ gUnknown_818F586:: @ 818F586 .string "Consider it a gift for your POKéMON\n" .string "LEAGUE challenge.$" -gUnknown_818F675:: @ 818F675 +ViridianCity_Gym_Text_ReceivedTM26FromGiovanni:: @ 818F675 .string "{PLAYER} received TM26\n" .string "from GIOVANNI.$" -gUnknown_818F695:: @ 818F695 +ViridianCity_Gym_Text_ExplainTM26:: @ 818F695 .string "TM26 contains EARTHQUAKE.\p" .string "It is a powerful attack that causes\n" .string "a massive tremor.\p" .string "I made it when I ran the GYM here,\n" .string "far too long ago… $" -gUnknown_818F71B:: @ 818F71B +ViridianCity_Gym_Text_YouDoNotHaveSpace:: @ 818F71B .string "You do not have space for this!$" -Text_18F73B:: @ 818F73B +ViridianCity_Gym_Text_YujiIntro:: @ 818F73B .string "Heh!\n" .string "You must be running out of steam\l" .string "by now!$" -Text_18F769:: @ 818F769 +ViridianCity_Gym_Text_YujiDefeat:: @ 818F769 .string "I ran out of gas!$" -gUnknown_818F77B:: @ 818F77B +ViridianCity_Gym_Text_YujiPostBattle:: @ 818F77B .string "You'll need power to keep up with\n" .string "our GYM LEADER.$" -Text_18F7AD:: @ 818F7AD +ViridianCity_Gym_Text_AtsushiIntro:: @ 818F7AD .string "Rrrroar!\n" .string "I'm working myself into a rage!$" -Text_18F7D6:: @ 818F7D6 +ViridianCity_Gym_Text_AtsushiDefeat:: @ 818F7D6 .string "Wargh!$" -gUnknown_818F7DD:: @ 818F7DD +ViridianCity_Gym_Text_AtsushiPostBattle:: @ 818F7DD .string "I'm still not worthy!$" -Text_18F7F3:: @ 818F7F3 +ViridianCity_Gym_Text_JasonIntro:: @ 818F7F3 .string "POKéMON and I, we make wonderful\n" .string "music together!$" -Text_18F824:: @ 818F824 +ViridianCity_Gym_Text_JasonDefeat:: @ 818F824 .string "You are in perfect harmony!$" -gUnknown_818F840:: @ 818F840 +ViridianCity_Gym_Text_JasonPostBattle:: @ 818F840 .string "Do you know the identity of our\n" .string "GYM LEADER?$" -Text_18F86C:: @ 818F86C +ViridianCity_Gym_Text_KiyoIntro:: @ 818F86C .string "Karate is the ultimate form of\n" .string "martial arts!$" -Text_18F899:: @ 818F899 +ViridianCity_Gym_Text_KiyoDefeat:: @ 818F899 .string "Aiyah!$" -gUnknown_818F8A0:: @ 818F8A0 +ViridianCity_Gym_Text_KiyoPostBattle:: @ 818F8A0 .string "If my POKéMON were as good at\n" .string "karate as I…$" -Text_18F8CB:: @ 818F8CB +ViridianCity_Gym_Text_WarrenIntro:: @ 818F8CB .string "The truly talented win with style.$" -Text_18F8EE:: @ 818F8EE +ViridianCity_Gym_Text_WarrenDefeat:: @ 818F8EE .string "I lost my grip!$" -gUnknown_818F8FE:: @ 818F8FE +ViridianCity_Gym_Text_WarrenPostBattle:: @ 818F8FE .string "The LEADER will scold me for\n" .string "losing this way…$" -Text_18F92C:: @ 818F92C +ViridianCity_Gym_Text_TakashiIntro:: @ 818F92C .string "I'm the KARATE KING!\n" .string "Your fate rests with me!$" -Text_18F95A:: @ 818F95A +ViridianCity_Gym_Text_TakashiDefeat:: @ 818F95A .string "Ayah!$" -gUnknown_818F960:: @ 818F960 +ViridianCity_Gym_Text_TakashiPostBattle:: @ 818F960 .string "The POKéMON LEAGUE?\n" .string "You? Don't get cocky!$" -Text_18F98A:: @ 818F98A +ViridianCity_Gym_Text_ColeIntro:: @ 818F98A .string "Your POKéMON will cower at the\n" .string "crack of my whip!$" -Text_18F9BB:: @ 818F9BB +ViridianCity_Gym_Text_ColeDefeat:: @ 818F9BB .string "Yowch!\n" .string "Whiplash!$" -gUnknown_818F9CC:: @ 818F9CC +ViridianCity_Gym_Text_ColePostBattle:: @ 818F9CC .string "Wait!\n" .string "I was just careless!$" -Text_18F9E7:: @ 818F9E7 +ViridianCity_Gym_Text_SamuelIntro:: @ 818F9E7 .string "VIRIDIAN GYM was closed for a\n" .string "long time.\p" .string "But now, our LEADER is back!$" -Text_18FA2D:: @ 818FA2D +ViridianCity_Gym_Text_SamuelDefeat:: @ 818FA2D .string "I was beaten?$" -gUnknown_818FA3B:: @ 818FA3B +ViridianCity_Gym_Text_SamuelPostBattle:: @ 818FA3B .string "You can go on to the POKéMON\n" .string "LEAGUE only by defeating our GYM\l" .string "LEADER!$" -gUnknown_818FA81:: @ 818FA81 +ViridianCity_Gym_Text_GymGuyAdvice:: @ 818FA81 .string "Yo!\n" .string "Champ in the making!\p" .string "Even I don't know the VIRIDIAN\n" @@ -153,17 +153,17 @@ gUnknown_818FA81:: @ 818FA81 .string "Also, I heard that the TRAINERS\n" .string "here like GROUND-type POKéMON.$" -gUnknown_818FB56:: @ 818FB56 +ViridianCity_Gym_Text_GymGuyPostVictory:: @ 818FB56 .string "Blow me away! GIOVANNI was the\n" .string "GYM LEADER of VIRIDIAN?$" -gUnknown_818FB8D:: @ 818FB8D +ViridianCity_Gym_Text_GymStatue:: @ 818FB8D .string "VIRIDIAN POKéMON GYM\n" .string "LEADER: ?\p" .string "WINNING TRAINERS:\n" .string "{RIVAL}$" -gUnknown_818FBC1:: @ 818FBC1 +ViridianCity_Gym_Text_GymStatuePlayerWon:: @ 818FBC1 .string "VIRIDIAN POKéMON GYM\n" .string "LEADER: GIOVANNI\p" .string "WINNING TRAINERS:\n" diff --git a/data/maps/ViridianCity_House1/map.json b/data/maps/ViridianCity_House1/map.json index 1a960169e..167069bc6 100644 --- a/data/maps/ViridianCity_House1/map.json +++ b/data/maps/ViridianCity_House1/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_House1_EventScript_169E9B", + "script": "ViridianCity_House1_EventScript_BaldingMan", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 2, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_House1_EventScript_169EA4", + "script": "ViridianCity_House1_EventScript_LittleGirl", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_House1_EventScript_169EAD", + "script": "ViridianCity_House1_EventScript_Speary", "flag": "0" } ], @@ -83,7 +83,7 @@ "x": 7, "y": 1, "elevation": 0, - "script": "ViridianCity_House1_EventScript_169EC0" + "script": "ViridianCity_House1_EventScript_NicknameSign" } ] } diff --git a/data/maps/ViridianCity_House1/scripts.inc b/data/maps/ViridianCity_House1/scripts.inc index 446035efe..0af4621cf 100644 --- a/data/maps/ViridianCity_House1/scripts.inc +++ b/data/maps/ViridianCity_House1/scripts.inc @@ -1,24 +1,24 @@ ViridianCity_House1_MapScripts:: @ 8169E9A .byte 0 -ViridianCity_House1_EventScript_169E9B:: @ 8169E9B - msgbox gUnknown_818F292, MSGBOX_NPC +ViridianCity_House1_EventScript_BaldingMan:: @ 8169E9B + msgbox ViridianCity_House1_Text_NicknamingIsFun, MSGBOX_NPC end -ViridianCity_House1_EventScript_169EA4:: @ 8169EA4 - msgbox gUnknown_818F30F, MSGBOX_NPC +ViridianCity_House1_EventScript_LittleGirl:: @ 8169EA4 + msgbox ViridianCity_House1_Text_MyDaddyLovesMonsToo, MSGBOX_NPC end -ViridianCity_House1_EventScript_169EAD:: @ 8169EAD +ViridianCity_House1_EventScript_Speary:: @ 8169EAD lock faceplayer waitse playmoncry SPECIES_SPEAROW, 0 - msgbox gUnknown_818F32C + msgbox ViridianCity_House1_Text_Speary waitmoncry release end -ViridianCity_House1_EventScript_169EC0:: @ 8169EC0 - msgbox gUnknown_818F33D, MSGBOX_SIGN +ViridianCity_House1_EventScript_NicknameSign:: @ 8169EC0 + msgbox ViridianCity_House1_Text_SpearowNameSpeary, MSGBOX_SIGN end diff --git a/data/maps/ViridianCity_House1/text.inc b/data/maps/ViridianCity_House1/text.inc index c1ec37238..15b066efa 100644 --- a/data/maps/ViridianCity_House1/text.inc +++ b/data/maps/ViridianCity_House1/text.inc @@ -1,16 +1,16 @@ -gUnknown_818F292:: @ 818F292 +ViridianCity_House1_Text_NicknamingIsFun:: @ 818F292 .string "Coming up with nicknames is fun,\n" .string "but it's not so easy to do.\p" .string "Clever names are nice, but simple\n" .string "names are easier to remember.$" -gUnknown_818F30F:: @ 818F30F +ViridianCity_House1_Text_MyDaddyLovesMonsToo:: @ 818F30F .string "My daddy loves POKéMON, too.$" -gUnknown_818F32C:: @ 818F32C +ViridianCity_House1_Text_Speary:: @ 818F32C .string "SPEARY: Tetweet!$" -gUnknown_818F33D:: @ 818F33D +ViridianCity_House1_Text_SpearowNameSpeary:: @ 818F33D .string "SPEAROW\n" .string "Name: SPEARY$" diff --git a/data/maps/ViridianCity_House2/map.json b/data/maps/ViridianCity_House2/map.json index 5190a5d28..dc80606ec 100644 --- a/data/maps/ViridianCity_House2/map.json +++ b/data/maps/ViridianCity_House2/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_House2_EventScript_16A094", + "script": "ViridianCity_House2_EventScript_Woman", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_House2_EventScript_16A07D", + "script": "ViridianCity_House2_EventScript_Lass", "flag": "0" } ], @@ -70,35 +70,35 @@ "x": 4, "y": 4, "elevation": 0, - "script": "ViridianCity_House2_EventScript_16A0AB" + "script": "ViridianCity_House2_EventScript_Notebook" }, { "type": "bg_event_type_0", "x": 5, "y": 1, "elevation": 0, - "script": "ViridianCity_House2_EventScript_16A11D" + "script": "ViridianCity_House2_EventScript_Blackboard" }, { "type": "bg_event_type_0", "x": 4, "y": 1, "elevation": 0, - "script": "ViridianCity_House2_EventScript_16A11D" + "script": "ViridianCity_House2_EventScript_Blackboard" }, { "type": "bg_event_type_1", "x": 9, "y": 2, "elevation": 0, - "script": "ViridianCity_House2_EventScript_1ACD65" + "script": "ViridianCity_House2_EventScript_PokemonJournal" }, { "type": "bg_event_type_1", "x": 8, "y": 2, "elevation": 0, - "script": "ViridianCity_House2_EventScript_1ACD65" + "script": "ViridianCity_House2_EventScript_PokemonJournal" } ] } diff --git a/data/maps/ViridianCity_House2/scripts.inc b/data/maps/ViridianCity_House2/scripts.inc index 6a0845622..0c08b447d 100644 --- a/data/maps/ViridianCity_House2/scripts.inc +++ b/data/maps/ViridianCity_House2/scripts.inc @@ -1,97 +1,97 @@ ViridianCity_House2_MapScripts:: @ 816A07C .byte 0 -ViridianCity_House2_EventScript_16A07D:: @ 816A07D +ViridianCity_House2_EventScript_Lass:: @ 816A07D lock faceplayer - msgbox gUnknown_818FC00 + msgbox ViridianCity_House2_Text_TryingToMemorizeNotes closemessage applymovement 2, Movement_WalkInPlaceFastestUp waitmovement 0 release end -ViridianCity_House2_EventScript_16A094:: @ 816A094 +ViridianCity_House2_EventScript_Woman:: @ 816A094 lock faceplayer - msgbox gUnknown_818FC2B + msgbox ViridianCity_House2_Text_ReadBlackboardCarefully closemessage applymovement 1, Movement_FaceOriginalDirection waitmovement 0 release end -ViridianCity_House2_EventScript_16A0AB:: @ 816A0AB +ViridianCity_House2_EventScript_Notebook:: @ 816A0AB lockall - msgbox gUnknown_818FC65 - msgbox gUnknown_818FF19, MSGBOX_YESNO + msgbox ViridianCity_House2_Text_NotebookFirstPage + msgbox ViridianCity_House2_Text_TurnThePage, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_16A11B - msgbox gUnknown_818FD23 - msgbox gUnknown_818FF19, MSGBOX_YESNO + goto_if_eq ViridianCity_House2_EventScript_StopReadingNotebook + msgbox ViridianCity_House2_Text_NotebookSecondPage + msgbox ViridianCity_House2_Text_TurnThePage, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_16A11B - msgbox gUnknown_818FDA8 - msgbox gUnknown_818FF19, MSGBOX_YESNO + goto_if_eq ViridianCity_House2_EventScript_StopReadingNotebook + msgbox ViridianCity_House2_Text_NotebookThirdPage + msgbox ViridianCity_House2_Text_TurnThePage, MSGBOX_YESNO compare VAR_RESULT, NO - goto_if_eq EventScript_16A11B - msgbox gUnknown_818FE5C + goto_if_eq ViridianCity_House2_EventScript_StopReadingNotebook + msgbox ViridianCity_House2_Text_NotebookFourthPage applymovement 2, Movement_WalkInPlaceFastestUp waitmovement 0 textcolor 1 - msgbox gUnknown_818FF28 + msgbox ViridianCity_House2_Text_HeyDontLookAtMyNotes releaseall end -EventScript_16A11B:: @ 816A11B +ViridianCity_House2_EventScript_StopReadingNotebook:: @ 816A11B releaseall end -ViridianCity_House2_EventScript_16A11D:: @ 816A11D +ViridianCity_House2_EventScript_Blackboard:: @ 816A11D lockall - msgbox gUnknown_818FF4B - goto EventScript_16A12C + msgbox ViridianCity_House2_Text_BlackboardListsStatusProblems + goto ViridianCity_House2_EventScript_ChooseBlackboardTopic end -EventScript_16A12C:: @ 816A12C - message Text_18FF88 +ViridianCity_House2_EventScript_ChooseBlackboardTopic:: @ 816A12C + message ViridianCity_House2_Text_ReadWhichTopic waitmessage multichoicegrid 7, 1, MULTICHOICE_TRAINER_SCHOOL_WHITEBOARD, 3, FALSE switch VAR_RESULT - case 0, EventScript_16A18B - case 1, EventScript_16A1A7 - case 2, EventScript_16A1C3 - case 3, EventScript_16A199 - case 4, EventScript_16A1B5 - case 5, EventScript_16A1D1 - case 127, EventScript_16A1D1 + case 0, ViridianCity_House2_EventScript_ReadSleep + case 1, ViridianCity_House2_EventScript_ReadPoison + case 2, ViridianCity_House2_EventScript_ReadParalysis + case 3, ViridianCity_House2_EventScript_ReadBurn + case 4, ViridianCity_House2_EventScript_ReadFreeze + case 5, ViridianCity_House2_EventScript_ExitBlackboard + case 127, ViridianCity_House2_EventScript_ExitBlackboard end -EventScript_16A18B:: @ 816A18B - msgbox gUnknown_818FFA9 - goto EventScript_16A12C +ViridianCity_House2_EventScript_ReadSleep:: @ 816A18B + msgbox ViridianCity_House2_Text_ExplainSleep + goto ViridianCity_House2_EventScript_ChooseBlackboardTopic end -EventScript_16A199:: @ 816A199 - msgbox gUnknown_8190025 - goto EventScript_16A12C +ViridianCity_House2_EventScript_ReadBurn:: @ 816A199 + msgbox ViridianCity_House2_Text_ExplainBurn + goto ViridianCity_House2_EventScript_ChooseBlackboardTopic end -EventScript_16A1A7:: @ 816A1A7 - msgbox gUnknown_819009F - goto EventScript_16A12C +ViridianCity_House2_EventScript_ReadPoison:: @ 816A1A7 + msgbox ViridianCity_House2_Text_ExplainPoison + goto ViridianCity_House2_EventScript_ChooseBlackboardTopic end -EventScript_16A1B5:: @ 816A1B5 - msgbox gUnknown_819010F - goto EventScript_16A12C +ViridianCity_House2_EventScript_ReadFreeze:: @ 816A1B5 + msgbox ViridianCity_House2_Text_ExplainFreeze + goto ViridianCity_House2_EventScript_ChooseBlackboardTopic end -EventScript_16A1C3:: @ 816A1C3 - msgbox gUnknown_8190199 - goto EventScript_16A12C +ViridianCity_House2_EventScript_ReadParalysis:: @ 816A1C3 + msgbox ViridianCity_House2_Text_ExplainParalysis + goto ViridianCity_House2_EventScript_ChooseBlackboardTopic end -EventScript_16A1D1:: @ 816A1D1 +ViridianCity_House2_EventScript_ExitBlackboard:: @ 816A1D1 releaseall end diff --git a/data/maps/ViridianCity_House2/text.inc b/data/maps/ViridianCity_House2/text.inc index a575c0f34..176bb713a 100644 --- a/data/maps/ViridianCity_House2/text.inc +++ b/data/maps/ViridianCity_House2/text.inc @@ -1,13 +1,13 @@ -gUnknown_818FC00:: @ 818FC00 +ViridianCity_House2_Text_TryingToMemorizeNotes:: @ 818FC00 .string "Whew! I'm trying to memorize all my\n" .string "notes.$" -gUnknown_818FC2B:: @ 818FC2B +ViridianCity_House2_Text_ReadBlackboardCarefully:: @ 818FC2B .string "Okay!\p" .string "Be sure to read what's on the\n" .string "blackboard carefully!$" -gUnknown_818FC65:: @ 818FC65 +ViridianCity_House2_Text_NotebookFirstPage:: @ 818FC65 .string "Let's check out the notebook.\p" .string "First page…\p" .string "POKé BALLS are used to catch\n" @@ -17,14 +17,14 @@ gUnknown_818FC65:: @ 818FC65 .string "People who raise and battle\n" .string "with POKéMON are called TRAINERS.$" -gUnknown_818FD23:: @ 818FD23 +ViridianCity_House2_Text_NotebookSecondPage:: @ 818FD23 .string "Second page…\p" .string "A healthy POKéMON may be hard to\n" .string "catch, so weaken it first.\p" .string "Poison, burn, or cause another\n" .string "status problem to weaken it.$" -gUnknown_818FDA8:: @ 818FDA8 +ViridianCity_House2_Text_NotebookThirdPage:: @ 818FDA8 .string "Third page…\p" .string "POKéMON TRAINERS seek others to\n" .string "engage in POKéMON battles.\p" @@ -33,7 +33,7 @@ gUnknown_818FDA8:: @ 818FDA8 .string "Battles are constantly waged at\n" .string "POKéMON GYMS everywhere.$" -gUnknown_818FE5C:: @ 818FE5C +ViridianCity_House2_Text_NotebookFourthPage:: @ 818FE5C .string "Fourth page…\p" .string "The ultimate goal for all POKéMON\n" .string "TRAINERS is simple.\p" @@ -43,21 +43,21 @@ gUnknown_818FE5C:: @ 818FE5C .string "The ELITE FOUR of the POKéMON\n" .string "LEAGUE!$" -gUnknown_818FF19:: @ 818FF19 +ViridianCity_House2_Text_TurnThePage:: @ 818FF19 .string "Turn the page?$" -gUnknown_818FF28:: @ 818FF28 +ViridianCity_House2_Text_HeyDontLookAtMyNotes:: @ 818FF28 .string "GIRL: Hey!\n" .string "Don't look at my notes!$" -gUnknown_818FF4B:: @ 818FF4B +ViridianCity_House2_Text_BlackboardListsStatusProblems:: @ 818FF4B .string "The blackboard lists POKéMON\n" .string "STATUS problems during battles.$" -Text_18FF88:: @ 818FF88 +ViridianCity_House2_Text_ReadWhichTopic:: @ 818FF88 .string "Which topic do you want to read?$" -gUnknown_818FFA9:: @ 818FFA9 +ViridianCity_House2_Text_ExplainSleep:: @ 818FFA9 .string "A POKéMON can't attack if it's\n" .string "asleep.\p" .string "POKéMON will stay asleep even\n" @@ -65,19 +65,19 @@ gUnknown_818FFA9:: @ 818FFA9 .string "Use AWAKENING to awaken one\n" .string "from sleep.$" -gUnknown_8190025:: @ 8190025 +ViridianCity_House2_Text_ExplainBurn:: @ 8190025 .string "A burn reduces ATTACK power.\n" .string "It also causes ongoing HP loss.\p" .string "A burn remains after a battle.\n" .string "Use BURN HEAL to cure a burn.$" -gUnknown_819009F:: @ 819009F +ViridianCity_House2_Text_ExplainPoison:: @ 819009F .string "When poisoned, a POKéMON's health\n" .string "steadily drops.\p" .string "Poison lingers after battles.\n" .string "Use an ANTIDOTE to cure poison!$" -gUnknown_819010F:: @ 819010F +ViridianCity_House2_Text_ExplainFreeze:: @ 819010F .string "A frozen POKéMON becomes\n" .string "helplessly immobile.\p" .string "It stays frozen even after the\n" @@ -85,7 +85,7 @@ gUnknown_819010F:: @ 819010F .string "Use ICE HEAL to thaw out the\n" .string "suffering POKéMON.$" -gUnknown_8190199:: @ 8190199 +ViridianCity_House2_Text_ExplainParalysis:: @ 8190199 .string "Paralysis reduces SPEED and may\n" .string "prevent the POKéMON from moving.\p" .string "Paralysis remains after battles.\n" diff --git a/data/maps/ViridianCity_Mart/map.json b/data/maps/ViridianCity_Mart/map.json index 09f58a9d5..5a4ae7bc0 100644 --- a/data/maps/ViridianCity_Mart/map.json +++ b/data/maps/ViridianCity_Mart/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_Mart_EventScript_16A268", + "script": "ViridianCity_Mart_EventScript_Clerk", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_Mart_EventScript_16A2B7", + "script": "ViridianCity_Mart_EventScript_Youngster", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_Mart_EventScript_16A2AE", + "script": "ViridianCity_Mart_EventScript_Woman", "flag": "0" } ], diff --git a/data/maps/ViridianCity_Mart/scripts.inc b/data/maps/ViridianCity_Mart/scripts.inc index 1f66937cf..5ad0d9a2f 100644 --- a/data/maps/ViridianCity_Mart/scripts.inc +++ b/data/maps/ViridianCity_Mart/scripts.inc @@ -4,36 +4,36 @@ ViridianCity_Mart_MapScripts:: @ 816A1D3 .byte 0 ViridianCity_Mart_OnLoad:: @ 816A1DE - goto_if_unset FLAG_SYS_POKEDEX_GET, EventScript_16A1E8 + goto_if_unset FLAG_SYS_POKEDEX_GET, ViridianCity_Mart_EventScript_HideQuestionnaire end -EventScript_16A1E8:: @ 816A1E8 - setmetatile 1, 3, 703, 1 - setmetatile 1, 4, 704, 1 +ViridianCity_Mart_EventScript_HideQuestionnaire:: @ 816A1E8 + setmetatile 1, 3, METATILE_Shop_CounterMid_Top, 1 + setmetatile 1, 4, METATILE_Shop_CounterMid_Bottom, 1 end ViridianCity_Mart_OnFrame:: @ 816A1FB - map_script_2 VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 0, EventScript_16A205 + map_script_2 VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 0, ViridianCity_Mart_EventScript_ParcelScene .2byte 0 -EventScript_16A205:: @ 816A205 +ViridianCity_Mart_EventScript_ParcelScene:: @ 816A205 lockall textcolor 0 applymovement 1, Movement_WalkInPlaceFastestDown waitmovement 0 - msgbox gUnknown_819021A + msgbox ViridianCity_Mart_Text_YouCameFromPallet closemessage - applymovement 1, Movement_16A262 - applymovement OBJ_EVENT_ID_PLAYER, Movement_16A25C + applymovement 1, ViridianCity_Mart_Movement_FacePlayer + applymovement OBJ_EVENT_ID_PLAYER, ViridianCity_Mart_Movement_ApproachCounter waitmovement 0 - msgbox gUnknown_819023A + msgbox ViridianCity_Mart_Text_TakeThisToProfOak setvar VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 1 - giveitem_msg gUnknown_8190289, ITEM_OAKS_PARCEL, 1, MUS_FAN5 + giveitem_msg ViridianCity_Mart_Text_ReceivedOaksParcelFromClerk, ITEM_OAKS_PARCEL, 1, MUS_FAN5 setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 5 releaseall end -Movement_16A25C:: @ 816A25C +ViridianCity_Mart_Movement_ApproachCounter:: @ 816A25C walk_up walk_up walk_up @@ -41,7 +41,7 @@ Movement_16A25C:: @ 816A25C walk_in_place_fastest_left step_end -Movement_16A262:: @ 816A262 +ViridianCity_Mart_Movement_FacePlayer:: @ 816A262 delay_16 delay_16 delay_16 @@ -49,21 +49,21 @@ Movement_16A262:: @ 816A262 walk_in_place_fastest_right step_end -ViridianCity_Mart_EventScript_16A268:: @ 816A268 +ViridianCity_Mart_EventScript_Clerk:: @ 816A268 lock faceplayer compare VAR_MAP_SCENE_VIRIDIAN_CITY_MART, 1 - goto_if_eq EventScript_16A2A4 + goto_if_eq ViridianCity_Mart_EventScript_SayHiToOak goto_if_questlog EventScript_ReleaseEnd message Text_MayIHelpYou waitmessage - pokemart Items_16A298 + pokemart ViridianCity_Mart_Items msgbox Text_PleaseComeAgain release end .align 2 -Items_16A298:: @ 816A298 +ViridianCity_Mart_Items:: @ 816A298 .2byte ITEM_POKE_BALL .2byte ITEM_POTION .2byte ITEM_ANTIDOTE @@ -72,15 +72,15 @@ Items_16A298:: @ 816A298 release end -EventScript_16A2A4:: @ 816A2A4 - msgbox Text_1902BF +ViridianCity_Mart_EventScript_SayHiToOak:: @ 816A2A4 + msgbox ViridianCity_Mart_Text_SayHiToOakForMe release end -ViridianCity_Mart_EventScript_16A2AE:: @ 816A2AE - msgbox gUnknown_81902F5, MSGBOX_NPC +ViridianCity_Mart_EventScript_Woman:: @ 816A2AE + msgbox ViridianCity_Mart_Text_ShopDoesGoodBusinessInAntidotes, MSGBOX_NPC end -ViridianCity_Mart_EventScript_16A2B7:: @ 816A2B7 - msgbox gUnknown_819032C, MSGBOX_NPC +ViridianCity_Mart_EventScript_Youngster:: @ 816A2B7 + msgbox ViridianCity_Mart_Text_GotToBuySomePotions, MSGBOX_NPC end diff --git a/data/maps/ViridianCity_Mart/text.inc b/data/maps/ViridianCity_Mart/text.inc index a610e83cd..c54f4220a 100644 --- a/data/maps/ViridianCity_Mart/text.inc +++ b/data/maps/ViridianCity_Mart/text.inc @@ -1,25 +1,25 @@ -gUnknown_819021A:: @ 819021A +ViridianCity_Mart_Text_YouCameFromPallet:: @ 819021A .string "Hey!\n" .string "You came from PALLET TOWN?$" -gUnknown_819023A:: @ 819023A +ViridianCity_Mart_Text_TakeThisToProfOak:: @ 819023A .string "You know PROF. OAK, right?\p" .string "His order came in.\n" .string "Can I get you to take it to him?$" -gUnknown_8190289:: @ 8190289 +ViridianCity_Mart_Text_ReceivedOaksParcelFromClerk:: @ 8190289 .string "{PLAYER} received OAK'S PARCEL\n" .string "from the POKéMON MART clerk.$" -Text_1902BF:: @ 81902BF +ViridianCity_Mart_Text_SayHiToOakForMe:: @ 81902BF .string "Okay, thanks! Please say hi to\n" .string "PROF. OAK for me, too.$" -gUnknown_81902F5:: @ 81902F5 +ViridianCity_Mart_Text_ShopDoesGoodBusinessInAntidotes:: @ 81902F5 .string "This shop does good business in\n" .string "ANTIDOTES, I've heard.$" -gUnknown_819032C:: @ 819032C +ViridianCity_Mart_Text_GotToBuySomePotions:: @ 819032C .string "I've got to buy some POTIONS.\p" .string "You never know when your POKéMON\n" .string "will need quick healing.$" diff --git a/data/maps/ViridianCity_PokemonCenter_1F/map.json b/data/maps/ViridianCity_PokemonCenter_1F/map.json index 3e5822608..c531d4b59 100644 --- a/data/maps/ViridianCity_PokemonCenter_1F/map.json +++ b/data/maps/ViridianCity_PokemonCenter_1F/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_PokemonCenter_1F_EventScript_16A2CF", + "script": "ViridianCity_PokemonCenter_1F_EventScript_Nurse", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_PokemonCenter_1F_EventScript_16A2E1", + "script": "ViridianCity_PokemonCenter_1F_EventScript_Gentleman", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_PokemonCenter_1F_EventScript_16A2D8", + "script": "ViridianCity_PokemonCenter_1F_EventScript_Boy", "flag": "0" }, { @@ -62,7 +62,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianCity_PokemonCenter_1F_EventScript_16A2EA", + "script": "ViridianCity_PokemonCenter_1F_EventScript_Youngster", "flag": "0" } ], diff --git a/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc b/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc index 43e74ef4c..ca02e1113 100644 --- a/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc +++ b/data/maps/ViridianCity_PokemonCenter_1F/scripts.inc @@ -7,21 +7,21 @@ ViridianCity_PokemonCenter_1F_OnTransition:: @ 816A2CB setrespawn SPAWN_VIRIDIAN_CITY end -ViridianCity_PokemonCenter_1F_EventScript_16A2CF:: @ 816A2CF +ViridianCity_PokemonCenter_1F_EventScript_Nurse:: @ 816A2CF lock faceplayer call EventScript_PkmnCenterNurse release end -ViridianCity_PokemonCenter_1F_EventScript_16A2D8:: @ 816A2D8 - msgbox gUnknown_81903E5, MSGBOX_NPC +ViridianCity_PokemonCenter_1F_EventScript_Boy:: @ 816A2D8 + msgbox ViridianCity_PokemonCenter_1F_Text_PokeCenterInEveryTown, MSGBOX_NPC end -ViridianCity_PokemonCenter_1F_EventScript_16A2E1:: @ 816A2E1 - msgbox gUnknown_8190384, MSGBOX_NPC +ViridianCity_PokemonCenter_1F_EventScript_Gentleman:: @ 816A2E1 + msgbox ViridianCity_PokemonCenter_1F_Text_FeelFreeToUsePC, MSGBOX_NPC end -ViridianCity_PokemonCenter_1F_EventScript_16A2EA:: @ 816A2EA - msgbox gUnknown_8190450, MSGBOX_NPC +ViridianCity_PokemonCenter_1F_EventScript_Youngster:: @ 816A2EA + msgbox ViridianCity_PokemonCenter_1F_Text_PokeCentersHealMons, MSGBOX_NPC end diff --git a/data/maps/ViridianCity_PokemonCenter_1F/text.inc b/data/maps/ViridianCity_PokemonCenter_1F/text.inc index 18b535a45..f0e636704 100644 --- a/data/maps/ViridianCity_PokemonCenter_1F/text.inc +++ b/data/maps/ViridianCity_PokemonCenter_1F/text.inc @@ -1,16 +1,16 @@ -gUnknown_8190384:: @ 8190384 +ViridianCity_PokemonCenter_1F_Text_FeelFreeToUsePC:: @ 8190384 .string "Please feel free to use that PC in\n" .string "the corner.\p" .string "The receptionist told me so.\n" .string "It's so kind of her!$" -gUnknown_81903E5:: @ 81903E5 +ViridianCity_PokemonCenter_1F_Text_PokeCenterInEveryTown:: @ 81903E5 .string "There's a POKéMON CENTER in every\n" .string "town ahead.\p" .string "They charge no money, so don't\n" .string "be shy about healing POKéMON.$" -gUnknown_8190450:: @ 8190450 +ViridianCity_PokemonCenter_1F_Text_PokeCentersHealMons:: @ 8190450 .string "POKéMON CENTERS heal your tired,\n" .string "hurt, or fainted POKéMON.\p" .string "They make all POKéMON completely\n" diff --git a/data/maps/ViridianForest/map.json b/data/maps/ViridianForest/map.json index 90f689a9f..463bc53f5 100644 --- a/data/maps/ViridianForest/map.json +++ b/data/maps/ViridianForest/map.json @@ -23,7 +23,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianForest_EventScript_160529", + "script": "ViridianForest_EventScript_Youngster", "flag": "0" }, { @@ -36,7 +36,7 @@ "movement_range_y": 1, "trainer_type": 0, "trainer_sight_or_berry_tree_id": 0, - "script": "ViridianForest_EventScript_160532", + "script": "ViridianForest_EventScript_Boy", "flag": "0" }, { @@ -49,7 +49,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 5, - "script": "ViridianForest_EventScript_160571", + "script": "ViridianForest_EventScript_Rick", "flag": "0" }, { @@ -62,7 +62,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 4, - "script": "ViridianForest_EventScript_160588", + "script": "ViridianForest_EventScript_Doug", "flag": "0" }, { @@ -75,7 +75,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 4, - "script": "ViridianForest_EventScript_16059F", + "script": "ViridianForest_EventScript_Sammy", "flag": "0" }, { @@ -127,7 +127,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 1, - "script": "ViridianForest_EventScript_1605B6", + "script": "ViridianForest_EventScript_Anthony", "flag": "0" }, { @@ -140,7 +140,7 @@ "movement_range_y": 1, "trainer_type": 1, "trainer_sight_or_berry_tree_id": 1, - "script": "ViridianForest_EventScript_1605CD", + "script": "ViridianForest_EventScript_Charlie", "flag": "0" }, { @@ -208,42 +208,42 @@ "x": 39, "y": 59, "elevation": 3, - "script": "ViridianForest_EventScript_16053B" + "script": "ViridianForest_EventScript_TrainerTips1" }, { "type": "bg_event_type_0", "x": 43, "y": 26, "elevation": 0, - "script": "ViridianForest_EventScript_16054D" + "script": "ViridianForest_EventScript_TrainerTips3" }, { "type": "bg_event_type_0", "x": 9, "y": 29, "elevation": 0, - "script": "ViridianForest_EventScript_160556" + "script": "ViridianForest_EventScript_TrainerTips4" }, { "type": "bg_event_type_0", "x": 6, "y": 12, "elevation": 0, - "script": "ViridianForest_EventScript_160568" + "script": "ViridianForest_EventScript_ExitSign" }, { "type": "bg_event_type_0", "x": 28, "y": 44, "elevation": 0, - "script": "ViridianForest_EventScript_160544" + "script": "ViridianForest_EventScript_TrainerTips2" }, { "type": "bg_event_type_0", "x": 31, "y": 60, "elevation": 0, - "script": "ViridianForest_EventScript_16055F" + "script": "ViridianForest_EventScript_TrainerTips5" }, { "type": "hidden_item", diff --git a/data/maps/ViridianForest/scripts.inc b/data/maps/ViridianForest/scripts.inc index 6fb97d075..a54fa1377 100644 --- a/data/maps/ViridianForest/scripts.inc +++ b/data/maps/ViridianForest/scripts.inc @@ -6,59 +6,59 @@ ViridianForest_OnTransition:: @ 8160525 setworldmapflag FLAG_WORLD_MAP_VIRIDIAN_FOREST end -ViridianForest_EventScript_160529:: @ 8160529 - msgbox gUnknown_8172255, MSGBOX_NPC +ViridianForest_EventScript_Youngster:: @ 8160529 + msgbox ViridianForest_Text_FriendsItchingToBattle, MSGBOX_NPC end -ViridianForest_EventScript_160532:: @ 8160532 - msgbox gUnknown_8172559, MSGBOX_NPC +ViridianForest_EventScript_Boy:: @ 8160532 + msgbox ViridianForest_Text_RanOutOfPokeBalls, MSGBOX_NPC end -ViridianForest_EventScript_16053B:: @ 816053B - msgbox gUnknown_81725C7, MSGBOX_SIGN +ViridianForest_EventScript_TrainerTips1:: @ 816053B + msgbox ViridianForest_Text_AvoidGrassyAreasWhenWeak, MSGBOX_SIGN end -ViridianForest_EventScript_160544:: @ 8160544 - msgbox gUnknown_8172629, MSGBOX_SIGN +ViridianForest_EventScript_TrainerTips2:: @ 8160544 + msgbox ViridianForest_Text_UseAntidoteForPoison, MSGBOX_SIGN end -ViridianForest_EventScript_16054D:: @ 816054D - msgbox gUnknown_817265C, MSGBOX_SIGN +ViridianForest_EventScript_TrainerTips3:: @ 816054D + msgbox ViridianForest_Text_ContactOakViaPCToRatePokedex, MSGBOX_SIGN end -ViridianForest_EventScript_160556:: @ 8160556 - msgbox gUnknown_81726A3, MSGBOX_SIGN +ViridianForest_EventScript_TrainerTips4:: @ 8160556 + msgbox ViridianForest_Text_CantCatchOwnedMons, MSGBOX_SIGN end -ViridianForest_EventScript_16055F:: @ 816055F - msgbox gUnknown_817271D, MSGBOX_SIGN +ViridianForest_EventScript_TrainerTips5:: @ 816055F + msgbox ViridianForest_Text_WeakenMonsBeforeCapture, MSGBOX_SIGN end -ViridianForest_EventScript_160568:: @ 8160568 - msgbox gUnknown_8172773, MSGBOX_SIGN +ViridianForest_EventScript_ExitSign:: @ 8160568 + msgbox ViridianForest_Text_LeavingViridianForest, MSGBOX_SIGN end -ViridianForest_EventScript_160571:: @ 8160571 - trainerbattle_single TRAINER_BUG_CATCHER_RICK, Text_1722C7, Text_1722F9 - msgbox gUnknown_8172315, MSGBOX_AUTOCLOSE +ViridianForest_EventScript_Rick:: @ 8160571 + trainerbattle_single TRAINER_BUG_CATCHER_RICK, ViridianForest_Text_RickIntro, ViridianForest_Text_RickDefeat + msgbox ViridianForest_Text_RickPostBattle, MSGBOX_AUTOCLOSE end -ViridianForest_EventScript_160588:: @ 8160588 - trainerbattle_single TRAINER_BUG_CATCHER_DOUG, Text_17234A, Text_17237D - msgbox gUnknown_8172398, MSGBOX_AUTOCLOSE +ViridianForest_EventScript_Doug:: @ 8160588 + trainerbattle_single TRAINER_BUG_CATCHER_DOUG, ViridianForest_Text_DougIntro, ViridianForest_Text_DougDefeat + msgbox ViridianForest_Text_DougPostBattle, MSGBOX_AUTOCLOSE end -ViridianForest_EventScript_16059F:: @ 816059F - trainerbattle_single TRAINER_BUG_CATCHER_SAMMY, Text_1723D4, Text_172402 - msgbox gUnknown_817241F, MSGBOX_AUTOCLOSE +ViridianForest_EventScript_Sammy:: @ 816059F + trainerbattle_single TRAINER_BUG_CATCHER_SAMMY, ViridianForest_Text_SammyIntro, ViridianForest_Text_SammyDefeat + msgbox ViridianForest_Text_SammyPostBattle, MSGBOX_AUTOCLOSE end -ViridianForest_EventScript_1605B6:: @ 81605B6 - trainerbattle_single TRAINER_BUG_CATCHER_ANTHONY, Text_172482, Text_1724BF - msgbox gUnknown_81724DC, MSGBOX_AUTOCLOSE +ViridianForest_EventScript_Anthony:: @ 81605B6 + trainerbattle_single TRAINER_BUG_CATCHER_ANTHONY, ViridianForest_Text_AnthonyIntro, ViridianForest_Text_AnthonyDefeat + msgbox ViridianForest_Text_AnthonyPostBattle, MSGBOX_AUTOCLOSE end -ViridianForest_EventScript_1605CD:: @ 81605CD - trainerbattle_single TRAINER_BUG_CATCHER_CHARLIE, Text_1724F9, Text_17251B - msgbox gUnknown_8172527, MSGBOX_AUTOCLOSE +ViridianForest_EventScript_Charlie:: @ 81605CD + trainerbattle_single TRAINER_BUG_CATCHER_CHARLIE, ViridianForest_Text_CharlieIntro, ViridianForest_Text_CharlieDefeat + msgbox ViridianForest_Text_CharliePostBattle, MSGBOX_AUTOCLOSE end diff --git a/data/maps/ViridianForest/text.inc b/data/maps/ViridianForest/text.inc index e3dc737a2..226d9f905 100644 --- a/data/maps/ViridianForest/text.inc +++ b/data/maps/ViridianForest/text.inc @@ -1,105 +1,105 @@ -gUnknown_8172255:: @ 8172255 +ViridianForest_Text_FriendsItchingToBattle:: @ 8172255 .string "I came here with some friends to\n" .string "catch us some BUG POKéMON!\p" .string "They're all itching to get into\n" .string "some POKéMON battles!$" -Text_1722C7:: @ 81722C7 +ViridianForest_Text_RickIntro:: @ 81722C7 .string "Hey! You have POKéMON!\n" .string "Come on!\l" .string "Let's battle 'em!$" -Text_1722F9:: @ 81722F9 +ViridianForest_Text_RickDefeat:: @ 81722F9 .string "No!\nCATERPIE can't hack it!$" -gUnknown_8172315:: @ 8172315 +ViridianForest_Text_RickPostBattle:: @ 8172315 .string "Ssh! You'll scare the bugs away.\n" .string "Another time, okay?$" -Text_17234A:: @ 817234A +ViridianForest_Text_DougIntro:: @ 817234A .string "Yo!\n" .string "You can't jam out if you're a\l" .string "POKéMON TRAINER!$" -Text_17237D:: @ 817237D +ViridianForest_Text_DougDefeat:: @ 817237D .string "Huh?\n" .string "I ran out of POKéMON!$" -gUnknown_8172398:: @ 8172398 +ViridianForest_Text_DougPostBattle:: @ 8172398 .string "That totally stinks! I'm going to\n" .string "catch some stronger ones!$" -Text_1723D4:: @ 81723D4 +ViridianForest_Text_SammyIntro:: @ 81723D4 .string "Hey, wait up!\n" .string "What's the hurry? Why the rush?$" -Text_172402:: @ 8172402 +ViridianForest_Text_SammyDefeat:: @ 8172402 .string "I give!\n" .string "You're good at this!$" -gUnknown_817241F:: @ 817241F +ViridianForest_Text_SammyPostBattle:: @ 817241F .string "Sometimes, you can find stuff on\n" .string "the ground.\p" .string "I'm looking for the stuff I\n" .string "dropped. Can you help me?$" -Text_172482:: @ 8172482 +ViridianForest_Text_AnthonyIntro:: @ 8172482 .string "I might be little, but I won't like\n" .string "it if you go easy on me!$" -Text_1724BF:: @ 81724BF +ViridianForest_Text_AnthonyDefeat:: @ 81724BF .string "Oh, boo.\n" .string "Nothing went right.$" -gUnknown_81724DC:: @ 81724DC +ViridianForest_Text_AnthonyPostBattle:: @ 81724DC .string "I lost some of my allowance…$" -Text_1724F9:: @ 81724F9 +ViridianForest_Text_CharlieIntro:: @ 81724F9 .string "Did you know that POKéMON evolve?$" -Text_17251B:: @ 817251B +ViridianForest_Text_CharlieDefeat:: @ 817251B .string "Oh!\n" .string "I lost!$" -gUnknown_8172527:: @ 8172527 +ViridianForest_Text_CharliePostBattle:: @ 8172527 .string "BUG POKéMON evolve quickly.\n" .string "They're a lot of fun!$" -gUnknown_8172559:: @ 8172559 +ViridianForest_Text_RanOutOfPokeBalls:: @ 8172559 .string "I was throwing POKé BALLS to\n" .string "catch POKéMON, and I ran out.\p" .string "That's why you can never have too\n" .string "many POKé BALLS.$" -gUnknown_81725C7:: @ 81725C7 +ViridianForest_Text_AvoidGrassyAreasWhenWeak:: @ 81725C7 .string "TRAINER TIPS\p" .string "If your POKéMON are weak and you\n" .string "want to avoid battles, stay away\l" .string "from grassy areas!$" -gUnknown_8172629:: @ 8172629 +ViridianForest_Text_UseAntidoteForPoison:: @ 8172629 .string "For poison, use ANTIDOTE!\n" .string "Get it at POKéMON MARTS!$" -gUnknown_817265C:: @ 817265C +ViridianForest_Text_ContactOakViaPCToRatePokedex:: @ 817265C .string "TRAINER TIPS\p" .string "Contact PROF. OAK via a PC to\n" .string "get your POKéDEX evaluated!$" -gUnknown_81726A3:: @ 81726A3 +ViridianForest_Text_CantCatchOwnedMons:: @ 81726A3 .string "TRAINER TIPS\p" .string "You can't catch a POKéMON that\n" .string "belongs to someone else.\p" .string "Throw POKé BALLS only at wild\n" .string "POKéMON to catch them!$" -gUnknown_817271D:: @ 817271D +ViridianForest_Text_WeakenMonsBeforeCapture:: @ 817271D .string "TRAINER TIPS\p" .string "Weaken POKéMON before attempting\n" .string "capture!\p" .string "When healthy, they may escape!$" -gUnknown_8172773:: @ 8172773 +ViridianForest_Text_LeavingViridianForest:: @ 8172773 .string "LEAVING VIRIDIAN FOREST\n" .string "PEWTER CITY AHEAD$" diff --git a/data/scripts/aide.inc b/data/scripts/aide.inc new file mode 100644 index 000000000..3201de769 --- /dev/null +++ b/data/scripts/aide.inc @@ -0,0 +1,14 @@ +Aide_EventScript_HaventCaughtEnough:: @ 81A7ABD + msgbox Aide_Text_HaventCaughtEnoughMonsForItem + release + end + +Aide_EventScript_NoRoomForItem:: @ 81A7AC7 + msgbox Aide_Text_DontHaveAnyRoomForItem + release + end + +Aide_EventScript_DeclineCheckMons:: @ 81A7AD1 + msgbox Aide_Text_GetEnoughMonsComeBackForItem + release + end diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc index c75ebdcfd..c174eaf41 100644 --- a/data/scripts/cable_club.inc +++ b/data/scripts/cable_club.inc @@ -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 diff --git a/data/scripts/fame_checker.inc b/data/scripts/fame_checker.inc index 8bf111541..36383bfb8 100644 --- a/data/scripts/fame_checker.inc +++ b/data/scripts/fame_checker.inc @@ -1,10 +1,10 @@ -ViridianCity_House2_EventScript_1ACD65:: @ 81ACD65 +ViridianCity_House2_EventScript_PokemonJournal:: @ 81ACD65 lock faceplayer famechecker FAMECHECKER_OAK, 3 famechecker FAMECHECKER_DAISY, 3 textcolor 3 - msgbox gUnknown_81B1AB9 + msgbox PokemonJournal_Text_SpecialFeatureProfOak release end @@ -14,7 +14,7 @@ EventScript_1ACD8D:: @ 81ACD8D famechecker FAMECHECKER_DAISY, 1 famechecker FAMECHECKER_OAK, 4 textcolor 3 - msgbox gUnknown_81B1AB9 + msgbox PokemonJournal_Text_SpecialFeatureProfOak release end @@ -23,7 +23,7 @@ EventScript_1ACDB5:: @ 81ACDB5 faceplayer famechecker FAMECHECKER_DAISY, 4 textcolor 3 - msgbox gUnknown_81B1AB9 + msgbox PokemonJournal_Text_SpecialFeatureProfOak release end @@ -84,11 +84,11 @@ CeruleanCity_PokemonCenter_1F_EventScript_PokemonJournalMisty:: @ 81ACE68 release end -VermilionCity_PokemonCenter_1F_EventScript_1ACE83:: @ 81ACE83 +VermilionCity_PokemonCenter_1F_EventScript_PokemonJournalLtSurge:: @ 81ACE83 lockall famechecker FAMECHECKER_LTSURGE, 5 textcolor 3 - msgbox gUnknown_81B1558 + msgbox PokemonJournal_Text_SpecialFeatureLtSurge releaseall end diff --git a/data/scripts/mystery_event_club.inc b/data/scripts/mystery_event_club.inc index d47a2d06c..bfc9fbbbd 100644 --- a/data/scripts/mystery_event_club.inc +++ b/data/scripts/mystery_event_club.inc @@ -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 diff --git a/data/scripts/seagallop.inc b/data/scripts/seagallop.inc index 77ed21b7a..c5489d7ee 100644 --- a/data/scripts/seagallop.inc +++ b/data/scripts/seagallop.inc @@ -1,205 +1,206 @@ -EventScript_1A8EC5:: @ 81A8EC5 +@ Separate selection menus for before the Rainbow Pass is obtained +EventScript_ChooseDestFromOneIsland:: @ 81A8EC5 compare VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5 - goto_if_ge EventScript_1A911E + goto_if_ge EventScript_SeviiDestinationsPage1 compare VAR_MAP_SCENE_CINNABAR_ISLAND, 4 - goto_if_ge EventScript_1A8F12 + goto_if_ge EventScript_ChooseDestFromOneIslandVermilionAllowed multichoice 19, 6, MULTICHOICE_ISLAND_23, FALSE switch VAR_RESULT - case 0, EventScript_1A8FF9 - case 1, EventScript_1A9004 + case 0, EventScript_SailToTwoIsland2 + case 1, EventScript_SailToThreeIsland2 case 2, EventScript_CancelSail case SCR_MENU_CANCEL, EventScript_CancelSail end -EventScript_1A8F12:: @ 81A8F12 +EventScript_ChooseDestFromOneIslandVermilionAllowed:: @ 81A8F12 multichoice 19, 5, MULTICHOICE_SEAGALLOP_V23, FALSE switch VAR_RESULT - case 0, EventScript_1A8FE3 - case 1, EventScript_1A8FF9 - case 2, EventScript_1A9004 + case 0, EventScript_SailToVermilion2 + case 1, EventScript_SailToTwoIsland2 + case 2, EventScript_SailToThreeIsland2 case 3, EventScript_CancelSail case SCR_MENU_CANCEL, EventScript_CancelSail end -EventScript_1A8F54:: @ 81A8F54 +EventScript_ChooseDestFromTwoIsland:: @ 81A8F54 compare VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5 - goto_if_ge EventScript_1A911E + goto_if_ge EventScript_SeviiDestinationsPage1 compare VAR_MAP_SCENE_CINNABAR_ISLAND, 4 - goto_if_ge EventScript_1A8FA1 + goto_if_ge EventScript_ChooseDestFromTwoIslandVermilionAllowed multichoice 19, 6, MULTICHOICE_ISLAND_13, FALSE switch VAR_RESULT - case 0, EventScript_1A8FEE - case 1, EventScript_1A9004 + case 0, EventScript_SailToOneIsland2 + case 1, EventScript_SailToThreeIsland2 case 2, EventScript_CancelSail case SCR_MENU_CANCEL, EventScript_CancelSail end -EventScript_1A8FA1:: @ 81A8FA1 +EventScript_ChooseDestFromTwoIslandVermilionAllowed:: @ 81A8FA1 multichoice 19, 5, MULTICHOICE_SEAGALLOP_V13, FALSE switch VAR_RESULT - case 0, EventScript_1A8FE3 - case 1, EventScript_1A8FEE - case 2, EventScript_1A9004 + case 0, EventScript_SailToVermilion2 + case 1, EventScript_SailToOneIsland2 + case 2, EventScript_SailToThreeIsland2 case 3, EventScript_CancelSail case SCR_MENU_CANCEL, EventScript_CancelSail end -EventScript_1A8FE3:: @ 81A8FE3 +EventScript_SailToVermilion2:: @ 81A8FE3 setvar VAR_0x8006, SEAGALLOP_VERMILION_CITY - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A8FEE:: @ 81A8FEE +EventScript_SailToOneIsland2:: @ 81A8FEE setvar VAR_0x8006, SEAGALLOP_ONE_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A8FF9:: @ 81A8FF9 +EventScript_SailToTwoIsland2:: @ 81A8FF9 setvar VAR_0x8006, SEAGALLOP_TWO_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A9004:: @ 81A9004 +EventScript_SailToThreeIsland2:: @ 81A9004 setvar VAR_0x8006, SEAGALLOP_THREE_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A900F:: @ 81A900F +EventScript_ChooseDestFromIsland:: @ 81A900F compare VAR_MAP_SCENE_ONE_ISLAND_POKEMON_CENTER_1F, 5 - goto_if_ge EventScript_1A911E + goto_if_ge EventScript_SeviiDestinationsPage1 compare VAR_MAP_SCENE_CINNABAR_ISLAND, 4 - goto_if_ge EventScript_1A905C + goto_if_ge EventScript_ChooseDestFromIslandVermilionAllowed multichoice 19, 6, MULTICHOICE_ISLAND_12, FALSE switch VAR_RESULT - case 0, EventScript_1A8FEE - case 1, EventScript_1A8FF9 + case 0, EventScript_SailToOneIsland2 + case 1, EventScript_SailToTwoIsland2 case 2, EventScript_CancelSail case SCR_MENU_CANCEL, EventScript_CancelSail end -EventScript_1A905C:: @ 81A905C +EventScript_ChooseDestFromIslandVermilionAllowed:: @ 81A905C multichoice 19, 5, MULTICHOICE_SEAGALLOP_V12, FALSE switch VAR_RESULT - case 0, EventScript_1A8FE3 - case 1, EventScript_1A8FEE - case 2, EventScript_1A8FF9 + case 0, EventScript_SailToVermilion2 + case 1, EventScript_SailToOneIsland2 + case 2, EventScript_SailToTwoIsland2 case 3, EventScript_CancelSail case SCR_MENU_CANCEL, EventScript_CancelSail end -EventScript_1A909E:: @ 81A909E - specialvar VAR_RESULT, sub_8147500 +EventScript_SailToDest:: @ 81A909E + specialvar VAR_RESULT, GetSeagallopNumber getnumberstring 0, VAR_RESULT compare VAR_0x8004, SEAGALLOP_VERMILION_CITY - goto_if_eq EventScript_1A90BE + goto_if_eq EventScript_DepartingVermilion compare VAR_0x8004, SEAGALLOP_VERMILION_CITY - goto_if_ne EventScript_1A90CC + goto_if_ne EventScript_DepartingNotVermilion end -EventScript_1A90BE:: @ 81A90BE - msgbox Text_17FB67 - goto EventScript_1A90DA +EventScript_DepartingVermilion:: @ 81A90BE + msgbox VermilionCity_Text_Seagallop7Departing + goto EventScript_SetSail end -EventScript_1A90CC:: @ 81A90CC - msgbox Text_1A641B - goto EventScript_1A90DA +EventScript_DepartingNotVermilion:: @ 81A90CC + msgbox Text_AllAboardSeagallopNum + goto EventScript_SetSail end -EventScript_1A90DA:: @ 81A90DA +EventScript_SetSail:: @ 81A90DA closemessage delay 20 goto_if_questlog EventScript_ReleaseEnd special sub_8112364 fadescreen FADE_TO_BLACK - special ScrSpecial_SeagallopFerry + special DoSeagallopFerryScene waitstate end EventScript_CancelSail:: @ 81A90F6 - specialvar VAR_RESULT, sub_8147594 - compare VAR_RESULT, 1 - goto_if_eq EventScript_1A9108 + specialvar VAR_RESULT, IsPlayerLeftOfVermilionSailor + compare VAR_RESULT, TRUE + goto_if_eq VermilionCity_EventScript_WalkUpPier release end -EventScript_1A9108:: @ 81A9108 +VermilionCity_EventScript_WalkUpPier:: @ 81A9108 closemessage - applymovement 6, Movement_FaceOriginalDirection - applymovement OBJ_EVENT_ID_PLAYER, Movement_1A911C + applymovement LOCALID_FERRY_SAILOR, Movement_FaceOriginalDirection + applymovement OBJ_EVENT_ID_PLAYER, VermilionCity_Movement_WalkUp waitmovement 0 releaseall end -Movement_1A911C:: @ 81A911C +VermilionCity_Movement_WalkUp:: @ 81A911C walk_up step_end -EventScript_1A911E:: @ 81A911E +EventScript_SeviiDestinationsPage1:: @ 81A911E setvar VAR_0x8005, 0 special Special_DrawSeagallopDestinationMenu waitstate specialvar VAR_0x8006, Special_GetSelectedSeagallopDestination switch VAR_0x8006 case SEAGALLOP_VERMILION_CITY, EventScript_SailToVermilionCity - case SEAGALLOP_ONE_ISLAND, EventScript_1A91E0 - case SEAGALLOP_TWO_ISLAND, EventScript_1A91EB - case SEAGALLOP_THREE_ISLAND, EventScript_1A91F6 - case SEAGALLOP_FOUR_ISLAND, EventScript_1A9201 - case SEAGALLOP_MORE, EventScript_1A917F + case SEAGALLOP_ONE_ISLAND, EventScript_SailToOneIsland + case SEAGALLOP_TWO_ISLAND, EventScript_SailToTwoIsland + case SEAGALLOP_THREE_ISLAND, EventScript_SailToThreeIsland + case SEAGALLOP_FOUR_ISLAND, EventScript_SailToFourIsland + case SEAGALLOP_MORE, EventScript_SeviiDestinationsPage2 case SCR_MENU_CANCEL, EventScript_CancelSail end -EventScript_1A917F:: @ 81A917F +EventScript_SeviiDestinationsPage2:: @ 81A917F setvar VAR_0x8005, 1 special Special_DrawSeagallopDestinationMenu waitstate specialvar VAR_0x8006, Special_GetSelectedSeagallopDestination switch VAR_0x8006 - case SEAGALLOP_FOUR_ISLAND, EventScript_1A9201 - case SEAGALLOP_FIVE_ISLAND, EventScript_1A920C - case SEAGALLOP_SIX_ISLAND, EventScript_1A9217 - case SEAGALLOP_SEVEN_ISLAND, EventScript_1A9222 - case SEAGALLOP_MORE, EventScript_1A911E + case SEAGALLOP_FOUR_ISLAND, EventScript_SailToFourIsland + case SEAGALLOP_FIVE_ISLAND, EventScript_SailToFiveIsland + case SEAGALLOP_SIX_ISLAND, EventScript_SailToSixIsland + case SEAGALLOP_SEVEN_ISLAND, EventScript_SailToSevenIsland + case SEAGALLOP_MORE, EventScript_SeviiDestinationsPage1 case SCR_MENU_CANCEL, EventScript_CancelSail end EventScript_SailToVermilionCity:: @ 81A91D5 setvar VAR_0x8006, SEAGALLOP_VERMILION_CITY - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A91E0:: @ 81A91E0 +EventScript_SailToOneIsland:: @ 81A91E0 setvar VAR_0x8006, SEAGALLOP_ONE_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A91EB:: @ 81A91EB +EventScript_SailToTwoIsland:: @ 81A91EB setvar VAR_0x8006, SEAGALLOP_TWO_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A91F6:: @ 81A91F6 +EventScript_SailToThreeIsland:: @ 81A91F6 setvar VAR_0x8006, SEAGALLOP_THREE_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A9201:: @ 81A9201 +EventScript_SailToFourIsland:: @ 81A9201 setvar VAR_0x8006, SEAGALLOP_FOUR_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A920C:: @ 81A920C +EventScript_SailToFiveIsland:: @ 81A920C setvar VAR_0x8006, SEAGALLOP_FIVE_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A9217:: @ 81A9217 +EventScript_SailToSixIsland:: @ 81A9217 setvar VAR_0x8006, SEAGALLOP_SIX_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end -EventScript_1A9222:: @ 81A9222 +EventScript_SailToSevenIsland:: @ 81A9222 setvar VAR_0x8006, SEAGALLOP_SEVEN_ISLAND - goto EventScript_1A909E + goto EventScript_SailToDest end diff --git a/data/smokescreen.s b/data/smokescreen.s index 19dceec00..49b13847b 100644 --- a/data/smokescreen.s +++ b/data/smokescreen.s @@ -3,10 +3,10 @@ .section .rodata .align 2 -gUnknown_825098C:: @ 825098C +gSmokescreenImpactSpriteSheet:: @ 825098C obj_tiles gFile_graphics_battle_anims_sprites_smokescreen_impact_sheet, 0x0180, 55019 -gUnknown_8250994:: @ 8250994 +gSmokescreenImpactSpritePalette:: @ 8250994 obj_pal gFile_graphics_battle_anims_sprites_smokescreen_impact_palette, 55019 gOamData_835099C:: @@ -42,8 +42,8 @@ gSpriteAnimTable_82509E4:: .4byte gAnimCmd_82509C4 .4byte gAnimCmd_82509D4 -gUnknown_82509F4:: @ 82509F4 - spr_template 55019, 55019, gOamData_835099C, gSpriteAnimTable_82509E4, NULL, gDummySpriteAffineAnimTable, sub_804A904 +gSmokescreenImpactSpriteTemplate:: @ 82509F4 + spr_template 55019, 55019, gOamData_835099C, gSpriteAnimTable_82509E4, NULL, gDummySpriteAffineAnimTable, SpriteCB_DestroySprite gSpriteSheet_EnemyShadow:: @ 8250A0C obj_tiles gFile_graphics_battle_interface_enemy_mon_shadow_sheet, 0x0080, 55129 diff --git a/data/specials.inc b/data/specials.inc index 1e156be66..4ed38160d 100644 --- a/data/specials.inc +++ b/data/specials.inc @@ -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 @@ -387,7 +387,7 @@ gSpecials:: @ 815FD60 def_special IsThereMonInRoute5Daycare def_special GetNumLevelsGainedForRoute5DaycareMon def_special TakePokemonFromRoute5Daycare - def_special ScrSpecial_SeagallopFerry + def_special DoSeagallopFerryScene def_special Special_PlayerPartyContainsSpecies def_special Special_SetSomeVariable def_special HelpSystem_BackupSomeVariable @@ -433,11 +433,11 @@ gSpecials:: @ 815FD60 def_special ShowDodrioBerryPickingRecords def_special Special_DrawSeagallopDestinationMenu def_special Special_GetSelectedSeagallopDestination - def_special sub_8147500 + def_special GetSeagallopNumber def_special GetPlayerFacingDirection def_special DoDeoxysRockInteraction def_special Special_SetDeoxysTriangleObjectPal - def_special sub_8147594 + def_special IsPlayerLeftOfVermilionSailor def_special Special_BadEggInParty def_special ReadTrainerTowerAndValidate def_special HasAllMons diff --git a/data/strings.s b/data/strings.s index e77730429..f595170ff 100644 --- a/data/strings.s +++ b/data/strings.s @@ -3093,40 +3093,40 @@ gUnknown_841B32E:: @ 841B32E .string "{DYNAMIC 0x00} learned\n" .string "{DYNAMIC 0x01}!$" -gUnknown_841B33D:: @ 0x841B33D +gText_Upper:: @ 0x841B33D .string "UPPER$" -gUnknown_841B343:: @ 0x841B343 +gText_Lower:: @ 0x841B343 .string "lower$" -gUnknown_841B349:: @ 0x841B349 +gText_Others:: @ 0x841B349 .string "OTHERS$" -gUnknown_841B350:: @ 0x841B350 +gText_Symbols:: @ 0x841B350 .string "SYMBOLS$" -gUnknown_841B358:: @ 0x841B358 +gText_Register2:: @ 0x841B358 .string "REGISTER$" -gUnknown_841B361:: @ 0x841B361 +gText_Exit:: @ 0x841B361 .string "EXIT$" -gUnknown_841B366:: @ 0x841B366 +gText_QuitChatting:: @ 0x841B366 .string "Quit chatting?$" -gUnknown_841B375:: @ 0x841B375 +gText_RegisterTextWhere:: @ 0x841B375 .string "Register text where?$" -gUnknown_841B38A:: @ 0x841B38A +gText_RegisterTextHere:: @ 0x841B38A .string "Register text here?$" -gUnknown_841B39E:: @ 0x841B39E +gText_InputText:: @ 0x841B39E .string "Input text.$" -gUnknown_841B3AA:: @ 841B3AA +gText_F700JoinedChat:: @ 841B3AA .string "{DYNAMIC 0x00} joined the chat!$" -gUnknown_841B3BE:: @ 841B3BE +gText_F700LeftChat:: @ 841B3BE .string "{DYNAMIC 0x00} left the chat.$" gUnknown_841B3D0:: @ 0x841B3D0 @@ -3135,60 +3135,60 @@ gUnknown_841B3D0:: @ 0x841B3D0 gUnknown_841B3DA:: @ 0x841B3DA .string "{DYNAMIC 0x00}の{DYNAMIC 0x01}ひきめは いません$" -gUnknown_841B3E9:: @ 0x841B3E9 +gText_ExitingTheChat:: @ 0x841B3E9 .string "Exiting the chat‥$" -gUnknown_841B3FB:: @ 0x841B3FB +gText_LeaderHasLeftEndingChat:: @ 0x841B3FB .string "The LEADER, {DYNAMIC 0x00}, has\n" .string "left, ending the chat.$" -gUnknown_841B426:: @ 0x841B426 +gText_RegisteredTextChanged_OKtoSave:: @ 0x841B426 .string "The registered text has been changed.\n" .string "Is it okay to save the game?$" -gUnknown_841B469:: @ 0x841B469 +gText_RegisteredTextChanged_AlreadySavedFile:: @ 0x841B469 .string "There is already a saved file.\n" .string "Is it okay to overwrite it?$" -gUnknown_841B4A4:: @ 0x841B4A4 +gText_RegisteredTextChanged_SavingDontTurnOff:: @ 0x841B4A4 .string "SAVING‥\n" .string "DON'T TURN OFF THE POWER.$" -gUnknown_841B4C6:: @ 0x841B4C6 +gText_RegisteredTextChanged_SavedTheGame:: @ 0x841B4C6 .string "{DYNAMIC 0x00} saved the game.$" -gUnknown_841B4D9:: @ 0x841B4D9 +gText_IfLeaderLeavesChatWillEnd:: @ 0x841B4D9 .string "If the LEADER leaves, the chat\n" .string "will end. Is that okay?$" -gUnknown_841B510:: @ 841B510 +gText_Hello:: @ 841B510 .string "HELLO$" -gUnknown_841B516:: @ 841B516 +gText_Pokemon2:: @ 841B516 .string "POKéMON$" -gUnknown_841B51E:: @ 841B51E +gText_Trade:: @ 841B51E .string "TRADE$" -gUnknown_841B524:: @ 841B524 +gText_Battle:: @ 841B524 .string "BATTLE$" -gUnknown_841B52B:: @ 841B52B +gText_Lets:: @ 841B52B .string "LET'S$" -gUnknown_841B531:: @ 841B531 +gText_Ok:: @ 841B531 .string "OK!$" -gUnknown_841B535:: @ 841B535 +gText_Sorry:: @ 841B535 .string "SORRY$" -gUnknown_841B53B:: @ 841B53B +gText_YaySmileEmoji:: @ 841B53B .string "YAY{EXTRA 0xF9}$" -gUnknown_841B541:: @ 841B541 +gText_ThankYou:: @ 841B541 .string "THANK YOU$" -gUnknown_841B54B:: @ 841B54B +gText_ByeBye:: @ 841B54B .string "BYE-BYE!$" gUnknown_841B554:: @ 841B554 @@ -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 diff --git a/data/text/aide.inc b/data/text/aide.inc new file mode 100644 index 000000000..70bf4aa70 --- /dev/null +++ b/data/text/aide.inc @@ -0,0 +1,15 @@ +Aide_Text_HaventCaughtEnoughMonsForItem:: @ 81A58A7 + .string "Let's see…\n" + .string "Uh-oh! You have caught only\l" + .string "{STR_VAR_3} kinds of POKéMON!\p" + .string "You need {STR_VAR_1} kinds\n" + .string "if you want the {STR_VAR_2}.$" + +Aide_Text_GetEnoughMonsComeBackForItem:: @ 81A5909 + .string "…Oh. I see.\p" + .string "When you get {STR_VAR_1} kinds of POKéMON,\n" + .string "come back for the {STR_VAR_2}.$" + +Aide_Text_DontHaveAnyRoomForItem:: @ 81A594D + .string "Oh! I see you don't have any\n" + .string "room for the {STR_VAR_2}.$" diff --git a/data/text/fame_checker.inc b/data/text/fame_checker.inc index ded2719f6..0705caffe 100644 --- a/data/text/fame_checker.inc +++ b/data/text/fame_checker.inc @@ -1387,7 +1387,7 @@ PokemonJournal_Text_SpecialFeatureMisty:: @ 81B14E8 .string "MISTY is said to worship LORELEI\n" .string "of the ELITE FOUR.$" -gUnknown_81B1558:: @ 81B1558 +PokemonJournal_Text_SpecialFeatureLtSurge:: @ 81B1558 .string "POKéMON JOURNAL\p" .string "Special Feature: VERMILION GYM\n" .string "LEADER LT. SURGE!\p" @@ -1461,7 +1461,7 @@ gUnknown_81B1A31:: @ 81B1A31 .string "be the elder of a famous clan of\l" .string "dragon masters.$" -gUnknown_81B1AB9:: @ 81B1AB9 +PokemonJournal_Text_SpecialFeatureProfOak:: @ 81B1AB9 .string "POKéMON JOURNAL\p" .string "Special Feature: PROF. OAK,\n" .string "the POKéMON Researcher!\p" diff --git a/data/text/seagallop.inc b/data/text/seagallop.inc new file mode 100644 index 000000000..3d4d0d958 --- /dev/null +++ b/data/text/seagallop.inc @@ -0,0 +1,7 @@ +Text_WhereDoYouWantToGo:: @ 81A6407 + .string "おつかれさん!\n" + .string "どこに いきたいんだ?$" + +Text_AllAboardSeagallopNum:: @ 81A641B + .string "All right!\n" + .string "All aboard SEAGALLOP HI-SPEED {STR_VAR_1}!$" diff --git a/data/trainer_tower/trainers.inc b/data/trainer_tower/trainers.inc index 5f9b0f49b..645a8a27e 100644 --- a/data/trainer_tower/trainers.inc +++ b/data/trainer_tower/trainers.inc @@ -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 diff --git a/data/union_room_chat.s b/data/union_room_chat.s deleted file mode 100644 index b61c5f44d..000000000 --- a/data/union_room_chat.s +++ /dev/null @@ -1,358 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - -gUnknown_845A880:: @ 845A880 - .4byte sub_8128640 - .4byte sub_81286C4 - .4byte sub_81287B4 - .4byte sub_81288D4 - .4byte sub_8128DA4 - .4byte sub_8128E78 - .4byte sub_8128AA0 - .4byte sub_8128C04 - .4byte sub_8128CA8 - .4byte sub_8128FB8 - -gUnknown_845A8A8:: @ 845A8A8 - .byte 0x09, 0x09, 0x09, 0x09 - -gUnknown_845A8AC:: @ 845A8AC - .byte 0x00, 0x16, 0x17, 0x68, 0x19, 0x1a, 0x1b, 0x1c - .byte 0x1d, 0x1e, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24 - .byte 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02 - .byte 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00 - .byte 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12 - .byte 0x13, 0x14, 0x2a, 0x2b, 0x2c, 0x2d, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00 - .byte 0x00, 0x00, 0x6f, 0x5b, 0x5c, 0x5d, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - .byte 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7 - .byte 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf - .byte 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7 - .byte 0xb8, 0xb9, 0xba, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9 - .byte 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1 - .byte 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9 - .byte 0xea, 0xeb, 0xec, 0xed, 0xee, 0xbb, 0xbc, 0xbd - .byte 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5 - .byte 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd - .byte 0xce, 0xcf, 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xef - .byte 0xf0, 0xf4, 0xf5, 0xf6, 0xf1, 0xf2, 0xf3, 0x00 - .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 - -gUnknown_845A9AC:: @ 845A9AC - .4byte gUnknown_847AAC1 - .4byte gUnknown_847AAC7 - .4byte gUnknown_847AACD - .4byte gUnknown_847AAD3 - .4byte gUnknown_847AAD9 - .4byte gUnknown_847AADF - .4byte gUnknown_847AAE5 - .4byte gUnknown_847AAEB - .4byte gUnknown_847AAF1 - .4byte gUnknown_847AAF7 - .4byte gUnknown_847AAFD - .4byte gUnknown_847AB03 - .4byte gUnknown_847AB09 - .4byte gUnknown_847AB0F - .4byte gUnknown_847AB15 - .4byte gUnknown_847AB1B - .4byte gUnknown_847AB21 - .4byte gUnknown_847AB27 - .4byte gUnknown_847AB2D - .4byte gUnknown_847AB33 - .4byte gUnknown_847AB41 - .4byte gUnknown_847AB4C - .4byte gUnknown_847AB57 - .4byte gUnknown_847AB62 - .4byte gUnknown_847AB6B - .4byte gUnknown_847AB76 - .4byte gUnknown_847AB81 - .4byte gUnknown_847AB8C - .4byte gUnknown_847AB97 - .4byte gUnknown_847ABA2 - -gUnknown_845AA24:: @ 845AA24 - .incbin "graphics/union_room_chat/unk_845AA24.gbapal" - -gUnknown_845AA44:: @ 845AA44 - .incbin "graphics/union_room_chat/unk_845AA44.gbapal" - -gUnknown_845AA64:: @ 845AA64 - .incbin "graphics/union_room_chat/unk_845AA64.gbapal" - -gUnknown_845AA84:: @ 845AA84 - .4byte 0x00000070 - @ { - @ .bg = 0, - @ .charBaseIndex = 0, - @ .mapBaseIndex = 7, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 0, - @ .baseTile = 0x0000 - @ } - .4byte 0x000011fd - @ { - @ .bg = 1, - @ .charBaseIndex = 3, - @ .mapBaseIndex = 31, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 1, - @ .baseTile = 0x0000 - @ } - .4byte 0x0000217a - @ { - @ .bg = 2, - @ .charBaseIndex = 2, - @ .mapBaseIndex = 23, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 2, - @ .baseTile = 0x0000 - @ } - .4byte 0x000070f7 - @ { - @ .bg = 3, - @ .charBaseIndex = 1, - @ .mapBaseIndex = 15, - @ .screenSize = 0, - @ .paletteMode = 0, - @ .priority = 3, - @ .baseTile = 0x0001 - @ } - -gUnknown_845AA94:: @ 845AA94 - .byte 3, 8, 1, 21, 19, 15 - .2byte 0x0001 - .byte 1, 9, 18, 15, 2, 12 - .2byte 0x007a - .byte 1, 0, 2, 6, 15, 7 - .2byte 0x0020 - .byte 0, 1, 2, 7, 9, 14 - .2byte 0x0013 - .byte 255, 0, 0, 0, 0, 0 - .2byte 0x0000 - -gUnknown_845AABC:: @ 845AABC - .2byte 0x00 - .align 2 - .4byte sub_8129CA0 - .2byte 0x03 - .align 2 - .4byte sub_8129D40 - .2byte 0x04 - .align 2 - .4byte sub_8129D78 - .2byte 0x05 - .align 2 - .4byte sub_8129DB0 - .2byte 0x01 - .align 2 - .4byte sub_8129E1C - .2byte 0x06 - .align 2 - .4byte sub_8129E28 - .2byte 0x07 - .align 2 - .4byte sub_8129E74 - .2byte 0x08 - .align 2 - .4byte sub_8129EB8 - .2byte 0x09 - .align 2 - .4byte sub_8129F24 - .2byte 0x0a - .align 2 - .4byte sub_8129FCC - .2byte 0x0b - .align 2 - .4byte sub_812A074 - .2byte 0x0c - .align 2 - .4byte sub_812A0B0 - .2byte 0x02 - .align 2 - .4byte sub_812A18C - .2byte 0x0d - .align 2 - .4byte sub_812A1B8 - .2byte 0x12 - .align 2 - .4byte sub_812A1FC - .2byte 0x13 - .align 2 - .4byte sub_812A240 - .2byte 0x0e - .align 2 - .4byte sub_812A294 - .2byte 0x0f - .align 2 - .4byte sub_812A2E4 - .2byte 0x10 - .align 2 - .4byte sub_812A334 - .2byte 0x11 - .align 2 - .4byte sub_812A378 - .2byte 0x14 - .align 2 - .4byte sub_812A3D0 - -gUnknown_845AB64:: @ 845AB64 - .4byte gUnknown_841B366 - .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B375 - .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B38A - .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B39E - .byte 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B3E9 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00 - .align 2 - .4byte gUnknown_841B3FB - .byte 0x02, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00 - .align 2 - .4byte gUnknown_841B426 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01 - .align 2 - .4byte gUnknown_841B469 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01 - .align 2 - .4byte gUnknown_841B4A4 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01 - .align 2 - .4byte gUnknown_841B4C6 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x01, 0x01 - .align 2 - .4byte gUnknown_841B4D9 - .byte 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x01 - .align 2 - -gUnknown_845ABE8:: @ 845ABE8 - .string "…$" - - .align 2 -gUnknown_845ABEC:: @ 845ABEC - .4byte gUnknown_841B33D, 0 - .4byte gUnknown_841B343, 0 - .4byte gUnknown_841B350, 0 - .4byte gUnknown_841B358, 0 - .4byte gUnknown_841B361, 0 - -gUnknown_845AC14:: @ 845AC14 - .incbin "graphics/union_room_chat/unk_845AC14.gbapal" - -gUnknown_845AC34:: - .incbin "graphics/union_room_chat/unk_845AC34.4bpp.lz" - -gUnknown_845AEB8:: - .incbin "graphics/union_room_chat/unk_845AEB8.4bpp.lz" - -gUnknown_845AED8:: - .incbin "graphics/union_room_chat/unk_845AED8.4bpp.lz" - -gUnknown_845AF04:: - .incbin "graphics/union_room_chat/unk_845AF04.4bpp.lz" - -gUnknown_845AF58:: @ 845AF58 - obj_tiles gUnknown_845AC34, 0x1000, 0 - obj_tiles gUnknown_845AED8, 0x0040, 1 - obj_tiles gUnknown_845AEB8, 0x0040, 2 - obj_tiles gUnknown_845AF04, 0x0080, 3 - obj_tiles gUnknown_8EA1A50, 0x0400, 4 - -gUnknown_845AF80:: @ 845AF80 - obj_pal gUnknown_845AC14, 0 - -gOamData_845AF88:: - .4byte 0xc0004000, 0x00000400 - -gAnimCmd_845AF90:: - obj_image_anim_frame 0x0000, 30 - obj_image_anim_end - -gAnimCmd_845AF98:: - obj_image_anim_frame 0x0020, 30 - obj_image_anim_end - -gAnimCmd_845AFA0:: - obj_image_anim_frame 0x0040, 30 - obj_image_anim_end - -gAnimCmd_845AFA8:: - obj_image_anim_frame 0x0060, 30 - obj_image_anim_end - -gSpriteAnimTable_845AFB0:: - .4byte gAnimCmd_845AF90 - .4byte gAnimCmd_845AF98 - .4byte gAnimCmd_845AFA0 - .4byte gAnimCmd_845AFA8 - -gUnknown_845AFC0:: @ 845AFC0 - spr_template 0, 0, gOamData_845AF88, gSpriteAnimTable_845AFB0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gOamData_845AFD8:: - .4byte 0x00008000, 0x00000800 - -gUnknown_845AFE0:: @ 845AFE0 - spr_template 2, 0, gOamData_845AFD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_812B09C - -gUnknown_845AFF8:: @ 845AFF8 - spr_template 1, 0, gOamData_845AFD8, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_812B0D4 - -gOamData_845B010:: - .4byte 0x40000000, 0x00000800 - -gOamData_845B018:: - .4byte 0x80004000, 0x00000800 - -gAnimCmd_845B020:: - obj_image_anim_frame 0x0000, 2 - obj_image_anim_end - -gAnimCmd_845B028:: - obj_image_anim_frame 0x0008, 2 - obj_image_anim_end - -gAnimCmd_845B030:: - obj_image_anim_frame 0x0010, 2 - obj_image_anim_end - -gAnimCmd_845B038:: - obj_image_anim_frame 0x0018, 2 - obj_image_anim_end - -gSpriteAnimTable_845B040:: - .4byte gAnimCmd_845B020 - .4byte gAnimCmd_845B028 - .4byte gAnimCmd_845B030 - .4byte gAnimCmd_845B038 - -gUnknown_845B050:: @ 845B050 - spr_template 3, 0, gOamData_845B010, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - -gUnknown_845B068:: @ 845B068 - spr_template 4, 0, gOamData_845B018, gSpriteAnimTable_845B040, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy diff --git a/include/AgbRfu_LinkManager.h b/include/AgbRfu_LinkManager.h new file mode 100644 index 000000000..0970a4233 --- /dev/null +++ b/include/AgbRfu_LinkManager.h @@ -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 diff --git a/include/battle_setup.h b/include/battle_setup.h index 4dc2f10f0..2aecbb0a4 100644 --- a/include/battle_setup.h +++ b/include/battle_setup.h @@ -19,7 +19,7 @@ void ConfigureAndSetUpOneTrainerBattle(u8 trainerEventObjId, const u8 *trainerSc bool32 GetTrainerFlagFromScriptPointer(const u8 *data); void SetUpTrainerMovement(void); u8 ScrSpecial_GetTrainerBattleMode(void); -u16 sub_80803D8(void); +u16 GetRivalBattleFlags(void); u16 ScrSpecial_HasTrainerBeenFought(void); void SetBattledTrainerFlag(void); bool8 HasTrainerBeenFought(u16 trainerId); diff --git a/include/berry_crush.h b/include/berry_crush.h index 2583aba61..e8e9c216f 100644 --- a/include/berry_crush.h +++ b/include/berry_crush.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 diff --git a/include/constants/battle.h b/include/constants/battle.h index c9a563a4e..a80038f2c 100644 --- a/include/constants/battle.h +++ b/include/constants/battle.h @@ -81,6 +81,9 @@ #define IS_BATTLE_TYPE_GHOST_WITHOUT_SCOPE(flags) ((flags) & BATTLE_TYPE_GHOST && !((flags) & BATTLE_TYPE_GHOST_UNVEILED)) #define IS_BATTLE_TYPE_GHOST_WITH_SCOPE(flags) ((flags) & BATTLE_TYPE_GHOST && (flags) & BATTLE_TYPE_GHOST_UNVEILED) +#define RIVAL_BATTLE_HEAL_AFTER 1 +#define RIVAL_BATTLE_TUTORIAL 3 + // Battle Outcome defines #define B_OUTCOME_WON 0x1 #define B_OUTCOME_LOST 0x2 diff --git a/include/constants/battle_setup.h b/include/constants/battle_setup.h index 8f700dc04..1e804fd18 100644 --- a/include/constants/battle_setup.h +++ b/include/constants/battle_setup.h @@ -10,6 +10,6 @@ #define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE 6 #define TRAINER_BATTLE_REMATCH_DOUBLE 7 #define TRAINER_BATTLE_CONTINUE_SCRIPT_DOUBLE_NO_MUSIC 8 -#define TRAINER_BATTLE_TUTORIAL 9 +#define TRAINER_BATTLE_EARLY_RIVAL 9 #endif // GUARD_CONSTANTS_BATTLE_SETUP_H diff --git a/include/constants/easy_chat.h b/include/constants/easy_chat.h index 4ef90ed60..7261365c2 100644 --- a/include/constants/easy_chat.h +++ b/include/constants/easy_chat.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 diff --git a/include/constants/global.h b/include/constants/global.h index 1ecaf0201..ae9a0da3b 100644 --- a/include/constants/global.h +++ b/include/constants/global.h @@ -40,6 +40,10 @@ #define FEMALE 1 #define GENDER_COUNT 2 +#define BARD_SONG_LENGTH 6 +#define NUM_STORYTELLER_TALES 4 +#define NUM_TRADER_ITEMS 4 + #define OPTIONS_BUTTON_MODE_HELP 0 #define OPTIONS_BUTTON_MODE_LR 1 #define OPTIONS_BUTTON_MODE_L_EQUALS_A 2 @@ -64,6 +68,7 @@ #define MAX_MON_MOVES 4 +#define TRAINER_ID_LENGTH 4 #define PARTY_SIZE 6 #define MULTI_PARTY_SIZE (PARTY_SIZE / 2) diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index ac2cb6469..207ed2a88 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -4,6 +4,41 @@ // General #define METATILE_General_CalmWater 0x12B +// PokeMart +#define METATILE_Shop_CounterMid_Top 0x2BF +#define METATILE_Shop_CounterMid_Bottom 0x2C0 + +// Vermilion Gym +#define METATILE_VermilionGym_Floor 0x281 +#define METATILE_VermilionGym_Beam_MidTop 0x285 +#define METATILE_VermilionGym_Beam_MidBottom 0x28D +#define METATILE_VermilionGym_Beam_Node_TopLeft_Off 0x293 +#define METATILE_VermilionGym_Beam_Node_TopLeft_Edge_Off 0x294 +#define METATILE_VermilionGym_Beam_Node_TopRight_Edge_Off 0x295 +#define METATILE_VermilionGym_Beam_Node_TopRight_Off 0x296 +#define METATILE_VermilionGym_Beam_Node_BottomLeft_Off 0x29B +#define METATILE_VermilionGym_Beam_Node_BottomLeft_Edge_Off 0x29C +#define METATILE_VermilionGym_Beam_Node_BottomRight_Edge_Off 0x29D +#define METATILE_VermilionGym_Beam_Node_BottomRight_Off 0x29E +#define METATILE_VermilionGym_Beam_Node_TopLeft_On 0x2A9 +#define METATILE_VermilionGym_Beam_Node_TopLeft_Edge_On 0x2AA +#define METATILE_VermilionGym_Beam_Node_TopRight_Edge_On 0x2AB +#define METATILE_VermilionGym_Beam_Node_TopRight_On 0x2AC +#define METATILE_VermilionGym_Beam_Node_BottomLeft_On 0x2B1 +#define METATILE_VermilionGym_Beam_Node_BottomLeft_Edge_On 0x2B2 +#define METATILE_VermilionGym_Beam_Node_BottomRight_Edge_On 0x2B3 +#define METATILE_VermilionGym_Beam_Node_BottomRight_On 0x2B4 +#define METATILE_VermilionGym_Beam_Node_TopLeft_HalfOn 0x2BB +#define METATILE_VermilionGym_Beam_Node_TopLeft_Edge_HalfOn 0x2BC +#define METATILE_VermilionGym_Beam_MidTop_HalfOn 0x2BD +#define METATILE_VermilionGym_Beam_Node_TopRight_Edge_HalfOn 0x2BE +#define METATILE_VermilionGym_Beam_Node_TopRight_HalfOn 0x2BF +#define METATILE_VermilionGym_Beam_Node_BottomLeft_HalfOn 0x2C3 +#define METATILE_VermilionGym_Beam_Node_BottomLeft_Edge_HalfOn 0x2C4 +#define METATILE_VermilionGym_Beam_MidBottom_HalfOn 0x2C5 +#define METATILE_VermilionGym_Beam_Node_BottomRight_Edge_HalfOn 0x2C6 +#define METATILE_VermilionGym_Beam_Node_BottomRight_HalfOn 0x2C7 + // Pokemon Mansion #define METATILE_PokemonMansion_Floor 0x284 #define METATILE_PokemonMansion_Floor_ShadeFull 0x285 diff --git a/include/constants/object_events.h b/include/constants/object_events.h index 60783a793..d6f33b33c 100644 --- a/include/constants/object_events.h +++ b/include/constants/object_events.h @@ -35,7 +35,7 @@ #define OBJECT_EVENT_GFX_WOMAN_3 31 #define OBJECT_EVENT_GFX_OLD_MAN_1 32 #define OBJECT_EVENT_GFX_OLD_MAN_2 33 -#define OBJECT_EVENT_GFX_VIRIDIAN_DRUNK 34 +#define OBJECT_EVENT_GFX_OLD_MAN_LYING_DOWN 34 #define OBJECT_EVENT_GFX_OLD_WOMAN 35 #define OBJECT_EVENT_GFX_TUBER_M_1 36 #define OBJECT_EVENT_GFX_TUBER_F 37 diff --git a/include/constants/union_room.h b/include/constants/union_room.h index 021424773..b23860645 100644 --- a/include/constants/union_room.h +++ b/include/constants/union_room.h @@ -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 diff --git a/include/data_8479668.h b/include/data_8479668.h new file mode 100644 index 000000000..1a1f44267 --- /dev/null +++ b/include/data_8479668.h @@ -0,0 +1,35 @@ +#ifndef GUARD_DATA_8479668_H +#define GUARD_DATA_8479668_H + +extern const u8 gText_UnionRoomChatKeyboard_ABCDE[]; +extern const u8 gText_UnionRoomChatKeyboard_FGHIJ[]; +extern const u8 gText_UnionRoomChatKeyboard_KLMNO[]; +extern const u8 gText_UnionRoomChatKeyboard_PQRST[]; +extern const u8 gText_UnionRoomChatKeyboard_UVWXY[]; +extern const u8 gText_UnionRoomChatKeyboard_Z[]; +extern const u8 gText_UnionRoomChatKeyboard_01234Upper[]; +extern const u8 gText_UnionRoomChatKeyboard_56789Upper[]; +extern const u8 gText_UnionRoomChatKeyboard_PunctuationUpper[]; +extern const u8 gText_UnionRoomChatKeyboard_SymbolsUpper[]; +extern const u8 gText_UnionRoomChatKeyboard_abcde[]; +extern const u8 gText_UnionRoomChatKeyboard_fghij[]; +extern const u8 gText_UnionRoomChatKeyboard_klmno[]; +extern const u8 gText_UnionRoomChatKeyboard_pqrst[]; +extern const u8 gText_UnionRoomChatKeyboard_uvwxy[]; +extern const u8 gText_UnionRoomChatKeyboard_z[]; +extern const u8 gText_UnionRoomChatKeyboard_01234Lower[]; +extern const u8 gText_UnionRoomChatKeyboard_56789Lower[]; +extern const u8 gText_UnionRoomChatKeyboard_PunctuationLower[]; +extern const u8 gText_UnionRoomChatKeyboard_SymbolsLower[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji1[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji2[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji3[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji4[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji5[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji6[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji7[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji8[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji9[]; +extern const u8 gText_UnionRoomChatKeyboard_Emoji10[]; + +#endif //GUARD_DATA_8479668_H diff --git a/include/digit_obj_util.h b/include/digit_obj_util.h new file mode 100644 index 000000000..b2ecd42bc --- /dev/null +++ b/include/digit_obj_util.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 diff --git a/include/dodrio_berry_picking.h b/include/dodrio_berry_picking.h index 59736ba7a..47cece996 100644 --- a/include/dodrio_berry_picking.h +++ b/include/dodrio_berry_picking.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 diff --git a/include/ereader_helpers.h b/include/ereader_helpers.h new file mode 100644 index 000000000..dab97470a --- /dev/null +++ b/include/ereader_helpers.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 diff --git a/include/event_data.h b/include/event_data.h index 7987720f1..e635cbc6d 100644 --- a/include/event_data.h +++ b/include/event_data.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); diff --git a/include/event_object_80688E4.h b/include/event_object_80688E4.h index 36040e0a5..241d48c3a 100644 --- a/include/event_object_80688E4.h +++ b/include/event_object_80688E4.h @@ -4,12 +4,12 @@ #include "global.h" void FreezeObjectEvents(void); -void FreezeObjectEvent(struct ObjectEvent *); +bool8 FreezeObjectEvent(struct ObjectEvent *); void FreezeObjectEventsExceptOne(u8 objEventId); -void sub_8069124(u8 a0, bool8 a1); -u32 sub_806916C(u8 a0); -void sub_80691A4(u8 a0, u8 a1); -void sub_8069094(u8 a0, u8 a1); -bool32 sub_8069294(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 diff --git a/include/event_object_lock.h b/include/event_object_lock.h index 5c65585b5..1a0f452fc 100644 --- a/include/event_object_lock.h +++ b/include/event_object_lock.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 diff --git a/include/event_object_movement.h b/include/event_object_movement.h index f2e7bd325..650f137d9 100644 --- a/include/event_object_movement.h +++ b/include/event_object_movement.h @@ -97,7 +97,7 @@ u8 sub_8063F84(u8 direction); u8 GetTrainerFacingDirectionMovementType(u8 direction); void CameraObjectSetFollowedObjectId(u8 spriteId); void UnfreezeObjectEvents(void); -void sub_8069058(u8, u8); +void TurnObjectEvent(u8, u8); // Exported data declarations @@ -105,5 +105,6 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; extern const struct SpritePalette gUnknown_83A5348; extern const struct SpriteTemplate * const gFieldEffectObjectTemplatePointers[]; extern const struct OamData gObjectEventBaseOam_32x32; +extern const struct UCoords16 gUnknown_83A64C8[]; #endif // GUARD_EVENT_OBJECT_MOVEMENT_H diff --git a/include/event_scripts.h b/include/event_scripts.h index b8da8f3e0..f026cb57a 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1170,6 +1170,10 @@ extern const u8 EventScript_ResetAllMapFlags[]; // player_pc extern const u8 EventScript_PalletTown_PlayersHouse_2F_ShutDownPC[]; +// field_screen_effect +extern const u8 EventScript_MomHeal[]; +extern const u8 EventScript_AfterWhiteOutHeal[]; + // start_menu extern const u8 gText_WouldYouLikeToSaveTheGame[]; extern const u8 gText_AlreadySaveFile_WouldLikeToOverwrite[]; diff --git a/include/field_effect.h b/include/field_effect.h index c2d14d43c..3e30fa897 100644 --- a/include/field_effect.h +++ b/include/field_effect.h @@ -8,7 +8,7 @@ extern u32 gFieldEffectArguments[8]; extern void (*gPostMenuFieldCallback)(void); extern bool8 (*gFieldCallback2)(void); -u8 FieldEffectStart(u8); +u32 FieldEffectStart(u8); bool8 FieldEffectActiveListContains(u8 id); void sub_80B69DC(void); void CreateTeleportFieldEffectTask(void); diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index d27d0e54a..6683f5e2e 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -20,5 +20,6 @@ void FadeTransition_FadeInOnReturnToStartMenu(void); void sub_807DCE4(void); bool32 sub_807E418(void); +void palette_bg_faded_fill_black(void); #endif // GUARD_FIELD_FADETRANSITION_H diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index e48745a7b..ca7625782 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -10,5 +10,6 @@ void sub_807E3EC(void); void DoOutwardBarnDoorWipe(void); void Task_BarnDoorWipe(u8 taskId); void sub_807DC00(void); +void sub_807F5F0(void); #endif // GUARD_FIELD_SCREEN_EFFECT_H diff --git a/include/fieldmap.h b/include/fieldmap.h index 91a45d8c5..406ec2959 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -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 diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 01cd992ec..e0053fe88 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -168,62 +168,58 @@ struct MapHeader struct ObjectEvent { - /*0x00*/ u32 active:1; - u32 mapobj_bit_1:1; - u32 mapobj_bit_2:1; - u32 mapobj_bit_3:1; - u32 mapobj_bit_4:1; - u32 mapobj_bit_5:1; - u32 mapobj_bit_6:1; - u32 mapobj_bit_7:1; - /*0x01*/ u32 mapobj_bit_8:1; - u32 mapobj_bit_9:1; - u32 mapobj_bit_10:1; - u32 mapobj_bit_11:1; - u32 mapobj_bit_12:1; - u32 mapobj_bit_13:1; - u32 mapobj_bit_14:1; - u32 mapobj_bit_15:1; - /*0x02*/ u32 mapobj_bit_16:1; - u32 mapobj_bit_17:1; - u32 mapobj_bit_18:1; - u32 mapobj_bit_19:1; - u32 mapobj_bit_20:1; - u32 mapobj_bit_21:1; - u32 mapobj_bit_22:1; - u32 mapobj_bit_23:1; - /*0x03*/ u32 mapobj_bit_24:1; - u32 mapobj_bit_25:1; - u32 mapobj_bit_26:1; - u32 mapobj_bit_27:1; - u32 mapobj_bit_28:1; - u32 mapobj_bit_29:1; - u32 mapobj_bit_30:1; - u32 mapobj_bit_31:1; - /*0x04*/ u8 spriteId; - /*0x05*/ u8 graphicsId; - /*0x06*/ u8 animPattern; - /*0x07*/ u8 trainerType; - /*0x08*/ u8 localId; - /*0x09*/ u8 mapNum; - /*0x0A*/ u8 mapGroup; - /*0x0B*/ u8 mapobj_unk_0B_0:4; - u8 elevation:4; - /*0x0C*/ struct Coords16 coords1; - /*0x10*/ struct Coords16 coords2; - /*0x14*/ struct Coords16 coords3; - /*0x18*/ u8 facingDirection:4; //current direction? - /*0x18*/ u8 placeholder18:4; - /*0x19*/ union ObjectEventRange range; - /*0x1A*/ u8 mapobj_unk_1A; - /*0x1B*/ u8 mapobj_unk_1B; - /*0x1C*/ u8 mapobj_unk_1C; - /*0x1D*/ u8 trainerRange_berryTreeId; - /*0x1E*/ u8 mapobj_unk_1E; - /*0x1F*/ u8 mapobj_unk_1F; - /*0x20*/ u8 mapobj_unk_20; - /*0x21*/ u8 mapobj_unk_21; - /*0x22*/ u8 animId; + /*0x00*/ /* 0*/ u32 active:1; + /* 1*/ u32 singleMovementActive:1; + /* 2*/ u32 triggerGroundEffectsOnMove:1; + /* 3*/ u32 triggerGroundEffectsOnStop:1; + /* 4*/ u32 disableCoveringGroundEffects:1; + /* 5*/ u32 landingJump:1; + /* 6*/ u32 heldMovementActive:1; + /* 7*/ u32 heldMovementFinished:1; + /*0x01*/ /* 8*/ u32 frozen:1; + /* 9*/ u32 facingDirectionLocked:1; + /*10*/ u32 disableAnim:1; + /*11*/ u32 enableAnim:1; + /*12*/ u32 inanimate:1; + /*13*/ u32 invisible:1; + /*14*/ u32 offScreen:1; + /*15*/ u32 trackedByCamera:1; + /*0x02*/ /*16*/ u32 isPlayer:1; + /*17*/ u32 hasReflection:1; + /*18*/ u32 inShortGrass:1; + /*19*/ u32 inShallowFlowingWater:1; + /*20*/ u32 inSandPile:1; + /*21*/ u32 inHotSprings:1; + /*22*/ u32 hasShadow:1; + /*23*/ u32 spriteAnimPausedBackup:1; + /*0x03*/ /*24*/ u32 spriteAffineAnimPausedBackup:1; + /*25*/ u32 disableJumpLandingGroundEffect:1; + /*26*/ u32 fixedPriority:1; + /*27*/ u32 hideReflection:1; + /*0x04*/ u8 spriteId; + /*0x05*/ u8 graphicsId; + /*0x06*/ u8 animPattern; + /*0x07*/ u8 trainerType; + /*0x08*/ u8 localId; + /*0x09*/ u8 mapNum; + /*0x0A*/ u8 mapGroup; + /*0x0B*/ u8 mapobj_unk_0B_0:4; + u8 elevation:4; + /*0x0C*/ struct Coords16 coords1; + /*0x10*/ struct Coords16 coords2; + /*0x14*/ struct Coords16 coords3; + /*0x18*/ u8 facingDirection:4; //current direction? + /*0x18*/ u8 placeholder18:4; + /*0x19*/ union ObjectEventRange range; + /*0x1A*/ u8 mapobj_unk_1A; + /*0x1B*/ u8 mapobj_unk_1B; + /*0x1C*/ u8 mapobj_unk_1C; + /*0x1D*/ u8 trainerRange_berryTreeId; + /*0x1E*/ u8 mapobj_unk_1E; + /*0x1F*/ u8 mapobj_unk_1F; + /*0x20*/ u8 mapobj_unk_20; + /*0x21*/ u8 mapobj_unk_21; + /*0x22*/ u8 animId; /*size = 0x24*/ }; diff --git a/include/global.h b/include/global.h index 14028808f..54d8fdec3 100644 --- a/include/global.h +++ b/include/global.h @@ -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[]; @@ -175,13 +175,13 @@ struct BerryCrush u32 unk; }; -#define PLAYER_NAME_LENGTH 8 +#define PLAYER_NAME_LENGTH 7 #define LINK_B_RECORDS_COUNT 5 struct LinkBattleRecord { - u8 name[PLAYER_NAME_LENGTH]; + u8 name[PLAYER_NAME_LENGTH + 1]; u16 trainerId; u16 wins; u16 losses; @@ -254,7 +254,7 @@ struct BattleTowerData // Leftover from R/S struct SaveBlock2 { - /*0x000*/ u8 playerName[PLAYER_NAME_LENGTH]; + /*0x000*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x008*/ u8 playerGender; // MALE, FEMALE /*0x009*/ u8 specialSaveWarpFlags; /*0x00A*/ u8 playerTrainerId[4]; @@ -305,7 +305,7 @@ struct SecretBaseRecord /*0x1A9D*/ u8 gender:1; /*0x1A9D*/ u8 sbr_field_1_5:1; /*0x1A9D*/ u8 sbr_field_1_6:2; - /*0x1A9E*/ u8 trainerName[7]; // TODO: Change PLAYER_NAME_LENGTH to 7 + /*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH]; /*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class /*0x1AA9*/ u8 language; /*0x1AAA*/ u16 sbr_field_e; @@ -391,41 +391,68 @@ struct MailStruct /*0x20*/ u16 itemId; }; -struct UnkMauvilleOldManStruct +struct MauvilleManCommon { - u8 unk_2D94; - u8 unk_2D95; - /*0x2D96*/ u16 mauvilleOldMan_ecArray[6]; - /*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6]; - /*0x2DAE*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; - /*0x2DB6*/ u8 filler_2DB6[0x3]; - /*0x2DB9*/ u8 playerTrainerId[4]; - u8 unk_2DBD; + u8 id; +}; + +struct MauvilleManBard +{ + /*0x00*/ u8 id; + /*0x02*/ u16 songLyrics[BARD_SONG_LENGTH]; + /*0x0E*/ u16 temporaryLyrics[BARD_SONG_LENGTH]; + /*0x1A*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; + /*0x22*/ u8 filler_2DB6[0x3]; + /*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH]; + /*0x29*/ bool8 hasChangedSong; + /*0x2A*/ u8 language; }; /*size = 0x2C*/ -struct UnkMauvilleOldManStruct2 +struct MauvilleManStoryteller +{ + u8 id; + bool8 alreadyRecorded; + u8 filler2[2]; + u8 gameStatIDs[NUM_STORYTELLER_TALES]; + u8 trainerNames[NUM_STORYTELLER_TALES][PLAYER_NAME_LENGTH]; + u8 statValues[NUM_STORYTELLER_TALES][4]; + u8 language[NUM_STORYTELLER_TALES]; +}; + +struct MauvilleManGiddy { - u8 filler0; - u8 unk1; - u8 unk2; - u16 mauvilleOldMan_ecArray[10]; - u8 mauvilleOldMan_ecArray2[12]; - u8 fillerF[0x2]; + /*0x00*/ u8 id; + /*0x01*/ u8 taleCounter; + /*0x02*/ u8 questionNum; + /*0x04*/ u16 randomWords[10]; + /*0x18*/ u8 questionList[8]; + /*0x20*/ u8 language; }; /*size = 0x2C*/ +struct MauvilleManHipster +{ + u8 id; + bool8 alreadySpoken; + u8 language; +}; + struct MauvilleOldManTrader { - u8 unk0; - u8 unk1[4]; - u8 unk5[4][11]; - u8 unk31; + u8 id; + u8 decorIds[NUM_TRADER_ITEMS]; + u8 playerNames[NUM_TRADER_ITEMS][11]; + u8 alreadyTraded; + u8 language[NUM_TRADER_ITEMS]; }; typedef union OldMan { - struct UnkMauvilleOldManStruct oldMan1; - struct UnkMauvilleOldManStruct2 oldMan2; + struct MauvilleManCommon common; + struct MauvilleManBard bard; + struct MauvilleManGiddy giddy; + struct MauvilleManHipster hipster; struct MauvilleOldManTrader trader; + struct MauvilleManStoryteller storyteller; u8 filler[0x40]; } OldMan; @@ -557,22 +584,22 @@ union QuestLogMovement struct QuestLogObjectEvent { /*0x00*/ u8 active:1; - /*0x00*/ u8 mapobj_bit_3:1; - /*0x00*/ u8 mapobj_bit_4:1; - /*0x00*/ u8 mapobj_bit_5:1; - /*0x00*/ u8 mapobj_bit_8:1; - /*0x00*/ u8 mapobj_bit_9:1; - /*0x00*/ u8 mapobj_bit_10:1; - /*0x00*/ u8 mapobj_bit_11:1; - /*0x01*/ u8 mapobj_bit_12:1; - /*0x01*/ u8 mapobj_bit_13:1; - /*0x01*/ u8 mapobj_bit_14:1; - /*0x01*/ u8 mapobj_bit_15:1; - /*0x01*/ u8 mapobj_bit_16:1; - /*0x01*/ u8 mapobj_bit_23:1; - /*0x01*/ u8 mapobj_bit_24:1; - /*0x01*/ u8 mapobj_bit_25:1; - /*0x02*/ u8 mapobj_bit_26:1; + /*0x00*/ u8 triggerGroundEffectsOnStop:1; + /*0x00*/ u8 disableCoveringGroundEffects:1; + /*0x00*/ u8 landingJump:1; + /*0x00*/ u8 frozen:1; + /*0x00*/ u8 facingDirectionLocked:1; + /*0x00*/ u8 disableAnim:1; + /*0x00*/ u8 enableAnim:1; + /*0x01*/ u8 inanimate:1; + /*0x01*/ u8 invisible:1; + /*0x01*/ u8 offScreen:1; + /*0x01*/ u8 trackedByCamera:1; + /*0x01*/ u8 isPlayer:1; + /*0x01*/ u8 spriteAnimPausedBackup:1; + /*0x01*/ u8 spriteAffineAnimPausedBackup:1; + /*0x01*/ u8 disableJumpLandingGroundEffect:1; + /*0x02*/ u8 fixedPriority:1; /*0x02*/ u8 mapobj_unk_18:4; /*0x02*/ u8 unused_02_5:3; /*0x03*/ u8 mapobj_unk_0B_0:4; @@ -624,8 +651,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]; @@ -639,13 +666,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]; @@ -661,11 +688,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 @@ -707,9 +735,11 @@ struct TrainerRematchState struct TrainerNameRecord { u32 trainerId; - u8 trainerName[PLAYER_NAME_LENGTH]; + u8 trainerName[PLAYER_NAME_LENGTH + 1]; }; +#define UNION_ROOM_KB_ROW_COUNT 10 + struct SaveBlock1 { /*0x0000*/ struct Coords16 pos; @@ -762,9 +792,10 @@ struct SaveBlock1 /*0x361C*/ struct RamScript ramScript; /*0x3A08*/ u8 filler3A08[16]; /*0x3A18*/ u8 seen2[DEX_FLAGS_NO]; - /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH]; + /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH + 1]; /*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS]; - /*0x3A94*/ u8 filler3A94[0x114]; + /*0x3A94*/ u8 filler3A94[0x40]; + /*0x3AD4*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21]; /*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20]; /*0x3C98*/ struct DaycareMon route5DayCareMon; /*0x3D24*/ u8 filler3D24[0x10]; diff --git a/include/graphics.h b/include/graphics.h index e87acb556..467a1d461 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4864,4 +4864,15 @@ extern const u32 gUnknown_8E83444[]; extern const u32 gBagBgPalette[]; extern const u32 gBagBgPalette_FemaleOverride[]; +// union_room_chat_display +extern const u16 gUnionRoomChatPanelBgPal_7[]; +extern const u32 gUnionRoomChatPanelBgTiles[]; +extern const u32 gUnionRoomChatPanelBgMap[]; +extern const u16 gLinkMiscMenu_Pal[]; +extern const u32 gLinkMiscMenu_Gfx[]; +extern const u32 gLinkMiscMenu_Tilemap[]; + +// union_room_chat_objects +extern const u32 gUnionRoomChatIcons[]; + #endif //GUARD_GRAPHICS_H diff --git a/include/heal_location.h b/include/heal_location.h index 0143b8158..aaa2178c6 100644 --- a/include/heal_location.h +++ b/include/heal_location.h @@ -14,8 +14,8 @@ struct HealLocation { s8 group; s8 map; - u16 x; - u16 y; + s16 x; + s16 y; }; // Exported RAM declarations diff --git a/include/help_system.h b/include/help_system.h index 273b5e119..c5ae5e5fa 100644 --- a/include/help_system.h +++ b/include/help_system.h @@ -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,5 +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 HelpSystem_DisableToggleWithRButton(void); #endif //GUARD_HELP_SYSTEM_H diff --git a/include/librfu.h b/include/librfu.h index 97fd8044e..50dd1c3db 100644 --- a/include/librfu.h +++ b/include/librfu.h @@ -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); diff --git a/include/link.h b/include/link.h index 770a60f44..e36ac8078 100644 --- a/include/link.h +++ b/include/link.h @@ -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 diff --git a/include/link_rfu.h b/include/link_rfu.h index 790429870..86d55047d 100644 --- a/include/link_rfu.h +++ b/include/link_rfu.h @@ -3,169 +3,78 @@ #include "global.h" #include "librfu.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]; -}; - -struct __attribute__((packed, aligned(2))) GFtgtGname -{ - 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 +#include "AgbRfu_LinkManager.h" + +#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 RfuBlockSend { - 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; - /* 0x9a0 */ u8 unk_ce8; + /* 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,69 @@ 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); - -void sub_80FC478(struct UnkRfuStruct_2_Sub_124 *ptr); -void sub_80FC4D4(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); +bool32 RfuIsErrorStatus1or2(void); + +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 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); +void sub_80FB030(u32 a0); #include "mevent_server.h" extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[]; diff --git a/include/main.h b/include/main.h index c962cf7bd..f89ffbd63 100644 --- a/include/main.h +++ b/include/main.h @@ -73,5 +73,6 @@ extern const char RomHeaderGameCode[4]; extern const char RomHeaderSoftwareVersion; extern u8 gLinkTransferringData; +extern u16 gKeyRepeatStartDelay; #endif // GUARD_MAIN_H diff --git a/include/menu.h b/include/menu.h index b6d757f85..49dd43e26 100644 --- a/include/menu.h +++ b/include/menu.h @@ -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 diff --git a/include/mevent.h b/include/mevent.h index 85782f20a..4f3e365f7 100644 --- a/include/mevent.h +++ b/include/mevent.h @@ -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 diff --git a/include/mevent_server.h b/include/mevent_server.h index 1e9ef7bef..a7c7a3f23 100644 --- a/include/mevent_server.h +++ b/include/mevent_server.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} diff --git a/include/overworld.h b/include/overworld.h index a7031e56d..8242615c7 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -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); diff --git a/include/pokemon_jump.h b/include/pokemon_jump.h index 0e9094752..fa4105a0e 100644 --- a/include/pokemon_jump.h +++ b/include/pokemon_jump.h @@ -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 diff --git a/include/rfu_union_tool.h b/include/rfu_union_tool.h index b8b5cd664..7fc7fd4cb 100644 --- a/include/rfu_union_tool.h +++ b/include/rfu_union_tool.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 diff --git a/include/script.h b/include/script.h index db52fa412..2fb732396 100644 --- a/include/script.h +++ b/include/script.h @@ -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); diff --git a/include/sprite.h b/include/sprite.h index 7432306a4..acf8f719c 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -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 diff --git a/include/strings.h b/include/strings.h index a57493a9b..d468af4f3 100644 --- a/include/strings.h +++ b/include/strings.h @@ -40,7 +40,6 @@ extern const u8 gText_Second[]; extern const u8 gText_Third[]; extern const u8 gText_NoDecorations[]; extern const u8 gText_NoDecorationsInUse[]; -extern const u8 gText_Exit[]; extern const u8 gText_Cancel[]; extern const u8 gText_Color161Shadow161[]; extern const u8 gText_GoBackPrevMenu[]; @@ -288,7 +287,6 @@ extern const u8 gText_ThreePkmnAreNeeded[]; extern const u8 gText_TwoPokemonAreNeeded[]; extern const u8 gText_PokemonCantBeSame[]; extern const u8 gText_NoIdenticalHoldItems[]; -extern const u8 gString_Dummy[]; extern const u8 gText_DoWhatWithPokemon[]; extern const u8 gText_RestoreWhichMove[]; extern const u8 gText_BoostPp[]; @@ -327,13 +325,9 @@ extern const u8 gText_SendOut[]; extern const u8 gText_Enter[]; extern const u8 gText_NoEntry[]; extern const u8 gText_Store[]; -extern const u8 gText_Register[]; extern const u8 gText_Trade4[]; extern const u8 gText_NotPkmnOtherTrainerWants[]; extern const u8 gText_ThatIsntAnEgg[]; -extern const u8 gText_PkmnCantBeTradedNow[]; -extern const u8 gText_OtherTrainersPkmnCantBeTraded[]; -extern const u8 gText_EggCantBeTradedNow[]; extern const u8 gText_OtherTrainerCantAcceptPkmn[]; extern const u8 gText_CantTradeWithTrainer[]; extern const u8 gUnknown_84176CF[]; @@ -346,7 +340,6 @@ extern const u8 gText_PkmnCantParticipate[]; extern const u8 gText_CancelParticipation[]; extern const u8 gUnknown_8417494[]; extern const u8 gMenuText_Confirm[]; -extern const u8 gText_Lv[]; extern const u8 gText_MaleSymbol[]; extern const u8 gText_FemaleSymbol[]; extern const u8 gText_Slash[]; @@ -984,6 +977,16 @@ extern const u8 gUnknown_8415F6C[]; extern const u8 gUnknown_8415FFF[]; extern const u8 gUnknown_8416002[]; +// daycare +extern const u8 gText_Lv[]; +extern const u8 gDaycareText_GetAlongVeryWell[]; +extern const u8 gDaycareText_GetAlong[]; +extern const u8 gDaycareText_DontLikeOther[]; +extern const u8 gDaycareText_PlayOther[]; +extern const u8 gExpandedPlaceholder_Empty[]; +extern const u8 gText_HatchedFromEgg[]; +extern const u8 gText_NickHatchPrompt[]; + // trainer card extern const u8 gText_WaitingTrainerFinishReading[]; extern const u8 gText_TrainerCardName[]; @@ -1033,6 +1036,10 @@ extern const u8 gText_RegionMap_AreaDesc_AlteringCave[]; extern const u8 gText_RegionMap_AreaDesc_PatternBush[]; extern const u8 gText_RegionMap_AreaDesc_DottedHole[]; +// field_screen_effect +extern const u8 gUnknown_841B554[]; +extern const u8 gUnknown_841B5B6[]; + // save_failed_screen extern const u8 gText_SaveFailedScreen_CheckingBackupMemory[]; extern const u8 gText_SaveFailedScreen_BackupMemoryDamaged[]; @@ -1061,4 +1068,62 @@ extern const u8 gText_CommStandbyAwaitingOtherPlayer[]; extern const u8 gText_RefusedBattle[]; extern const u8 gText_BattleWasRefused[]; +// union_room_chat +extern const u8 gText_F700JoinedChat[]; +extern const u8 gText_F700LeftChat[]; +extern const u8 gText_Hello[]; +extern const u8 gText_Pokemon2[]; +extern const u8 gText_Trade[]; +extern const u8 gText_Battle[]; +extern const u8 gText_Lets[]; +extern const u8 gText_Ok[]; +extern const u8 gText_Sorry[]; +extern const u8 gText_YaySmileEmoji[]; +extern const u8 gText_ThankYou[]; +extern const u8 gText_ByeBye[]; + +// union_room_chat_display +extern const u8 gText_QuitChatting[]; +extern const u8 gText_RegisterTextWhere[]; +extern const u8 gText_RegisterTextHere[]; +extern const u8 gText_InputText[]; +extern const u8 gText_ExitingTheChat[]; +extern const u8 gText_LeaderHasLeftEndingChat[]; +extern const u8 gText_RegisteredTextChanged_OKtoSave[]; +extern const u8 gText_RegisteredTextChanged_AlreadySavedFile[]; +extern const u8 gText_RegisteredTextChanged_SavingDontTurnOff[]; +extern const u8 gText_RegisteredTextChanged_SavedTheGame[]; +extern const u8 gText_IfLeaderLeavesChatWillEnd[]; +extern const u8 gText_Upper[]; +extern const u8 gText_Lower[]; +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 diff --git a/include/text.h b/include/text.h index cd059e0e5..ff8b033e9 100644 --- a/include/text.h +++ b/include/text.h @@ -5,10 +5,24 @@ #define CHAR_SPACE 0x00 #define CHAR_0 0xA1 +#define CHAR_1 0xA2 +#define CHAR_2 0xA3 +#define CHAR_3 0xA4 +#define CHAR_4 0xA5 +#define CHAR_5 0xA6 +#define CHAR_6 0xA7 +#define CHAR_7 0xA8 +#define CHAR_8 0xA9 +#define CHAR_9 0xAA +#define CHAR_EXCL_MARK 0xAB #define CHAR_QUESTION_MARK 0xAC #define CHAR_PERIOD 0xAD #define CHAR_HYPHEN 0xAE #define CHAR_ELLIPSIS 0xB0 +#define CHAR_DBL_QUOT_LEFT 0xB1 +#define CHAR_DBL_QUOT_RIGHT 0xB2 +#define CHAR_SGL_QUOT_LEFT 0xB3 +#define CHAR_SGL_QUOT_RIGHT 0xB4 #define CHAR_MALE 0xB5 #define CHAR_FEMALE 0xB6 #define CHAR_CURRENCY 0xB7 diff --git a/include/text_window.h b/include/text_window.h index 8e8466145..3796629b4 100644 --- a/include/text_window.h +++ b/include/text_window.h @@ -26,6 +26,7 @@ void TextWindow_SetUserSelectedFrame(u8 windowId, u16 tileStart, u8 palette); void LoadUserWindowBorderGfx(u8 windowId, u16 tileStart, u8 palette); void sub_814FDA0(u8 windowId, u16 tileStart, u8 palette); void DrawTextBorderOuter(u8 windowId, u16 tileStart, u8 palette); +void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum); void TextWindow_LoadTilesStdFrame1(u8 windowId, u16 destOffset); void sub_814FE6C(u8 windowId, u16 destOffset, u8 palIdx); void sub_814FEEC(u8 windowId, u16 destOffset, u8 palIdx); diff --git a/include/trade.h b/include/trade.h index d5106b172..f8e285e40 100644 --- a/include/trade.h +++ b/include/trade.h @@ -8,6 +8,10 @@ extern struct MailStruct gLinkPartnerMail[6]; extern u8 gSelectedTradeMonPositions[2]; +extern const u8 gText_MaleSymbol4[]; +extern const u8 gText_FemaleSymbol4[]; +extern const u8 gText_GenderlessSymbol[]; + extern const u16 gUnknown_826601C[]; void CB2_ReturnFromLinkTrade(void); s32 sub_804FB34(void); diff --git a/include/trainer_card.h b/include/trainer_card.h index 06844dc2e..ed3e803d5 100644 --- a/include/trainer_card.h +++ b/include/trainer_card.h @@ -24,7 +24,7 @@ struct TrainerCard /*0x20*/ u16 pokemonTrades; /*0x24*/ u32 money; /*0x28*/ u16 var_28[4]; - /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH]; + /*0x30*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x38*/ u8 version; /*0x3A*/ u16 var_3A; /*0x3C*/ u32 berryCrushPoints; diff --git a/include/union_room.h b/include/union_room.h index 3cb8eb84a..e24bcd480 100644 --- a/include/union_room.h +++ b/include/union_room.h @@ -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]; + 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 diff --git a/include/union_room_battle.h b/include/union_room_battle.h new file mode 100644 index 000000000..ffccf197f --- /dev/null +++ b/include/union_room_battle.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 diff --git a/include/union_room_chat.h b/include/union_room_chat.h index 66daac376..3ce78b210 100644 --- a/include/union_room_chat.h +++ b/include/union_room_chat.h @@ -1,8 +1,30 @@ #ifndef GUARD_UNION_ROOM_CHAT_H #define GUARD_UNION_ROOM_CHAT_H -void sub_801DD98(void); -void sub_8128420(void); -void copy_strings_to_sav1(void); +enum +{ + UNION_ROOM_KB_PAGE_UPPER, + UNION_ROOM_KB_PAGE_LOWER, + UNION_ROOM_KB_PAGE_EMOJI, + UNION_ROOM_KB_PAGE_COUNT +}; + +extern const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT]; + +void EnterUnionRoomChat(void); +u8 *UnionRoomChat_GetWorkRegisteredText(int arg0); +void UnionRoomChat_GetCursorColAndRow(u8 *colp, u8 *rowp); +u8 *UnionRoomChat_GetMessageEntryBuffer(void); +int UnionRoomChat_LenMessageEntryBuffer(void); +void UnionRoomChat_GetBufferSelectionRegion(u32 *startp, u32 *diffp); +u8 *UnionRoomChat_GetEndOfMessageEntryBuffer(void); +u16 UnionRoomChat_GetNumCharsInMessageEntryBuffer(void); +u8 *UnionRoomChat_GetLastReceivedMessage(void); +u16 UnionRoomChat_GetReceivedPlayerIndex(void); +int UnionRoomChat_GetMessageEntryCursorPosition(void); +int UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(void); +u8 *UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(void); +void UnionRoomChat_InitializeRegisteredTexts(void); +u8 GetCurrentKeyboardPage(void); #endif // GUARD_UNION_ROOM_CHAT_H diff --git a/include/union_room_chat_display.h b/include/union_room_chat_display.h new file mode 100644 index 000000000..f880eeecb --- /dev/null +++ b/include/union_room_chat_display.h @@ -0,0 +1,34 @@ +#ifndef GUARD_UNION_ROOM_CHAT_DISPLAY_H +#define GUARD_UNION_ROOM_CHAT_DISPLAY_H + +#define CHATDISPLAYROUTINE_LOADGFX 0 +#define CHATDISPLAYROUTINE_MOVEKBCURSOR 1 +#define CHATDISPLAYROUTINE_CURSORBLINK 2 +#define CHATDISPLAYROUTINE_SHOWKBSWAPMENU 3 +#define CHATDISPLAYROUTINE_HIDEKBSWAPMENU 4 +#define CHATDISPLAYROUTINE_SWITCHPAGES 5 +#define CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG 6 +#define CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO 7 +#define CHATDISPLAYROUTINE_PRINTMSG 8 +#define CHATDISPLAYROUTINE_PRINTREGISTERWHERE 9 +#define CHATDISPLAYROUTINE_CANCELREGISTER 10 +#define CHATDISPLAYROUTINE_RETURNTOKB 11 +#define CHATDISPLAYROUTINE_SCROLLCHAT 12 +#define CHATDISPLAYROUTINE_PRINTINPUTTEXT 13 +#define CHATDISPLAYROUTINE_ASKSAVE 14 +#define CHATDISPLAYROUTINE_ASKOVERWRITESAVE 15 +#define CHATDISPLAYROUTINE_PRINTSAVING 16 +#define CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME 17 +#define CHATDISPLAYROUTINE_PRINTEXITINGCHAT 18 +#define CHATDISPLAYROUTINE_PRINTLEADERLEFT 19 +#define CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG 20 + +bool8 UnionRoomChat_TryAllocGraphicsWork(void); +bool32 UnionRoomChat_RunDisplaySubtask0(void); +void UnionRoomChat_FreeGraphicsWork(void); +void UnionRoomChat_RunDisplaySubtasks(void); +void UnionRoomChat_StartDisplaySubtask(u16 a0, u8 a1); +u8 RunDisplaySubtask(u8 a0); +s8 UnionRoomChat_ProcessInput(void); + +#endif //GUARD_UNION_ROOM_CHAT_DISPLAY_H diff --git a/include/union_room_chat_objects.h b/include/union_room_chat_objects.h new file mode 100644 index 000000000..879f9f86b --- /dev/null +++ b/include/union_room_chat_objects.h @@ -0,0 +1,16 @@ +#ifndef GUARD_UNION_ROOM_CHAT_OBJECTS_H +#define GUARD_UNION_ROOM_CHAT_OBJECTS_H + +bool32 UnionRoomChat_TryAllocSpriteWork(void); +void UnionRoomChat_FreeSpriteWork(void); +void UnionRoomChat_CreateSelectorCursorObj(void); +void UnionRoomChat_ToggleSelectorCursorObjVisibility(bool32 invisible); +void UnionRoomChat_MoveSelectorCursorObj(void); +void UnionRoomChat_UpdateObjPalCycle(u32 idx); +void UnionRoomChat_SetSelectorCursorClosedImage(void); +bool32 UnionRoomChat_AnimateSelectorCursorReopen(void); +void UnionRoomChat_SpawnTextEntryPointerSprites(void); +void CreatePageSwitchUISprites(void); +void UpdateVisibleUnionRoomChatIcon(void); + +#endif //GUARD_UNION_ROOM_CHAT_OBJECTS_H diff --git a/include/union_room_message.h b/include/union_room_message.h index b7de673ba..db24aca15 100644 --- a/include/union_room_message.h +++ b/include/union_room_message.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[]; diff --git a/include/unk_810c3a4.h b/include/unk_810c3a4.h deleted file mode 100644 index 11a91b5ef..000000000 --- a/include/unk_810c3a4.h +++ /dev/null @@ -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 diff --git a/include/unk_815C980.h b/include/unk_815C980.h deleted file mode 100644 index a3249a8e2..000000000 --- a/include/unk_815C980.h +++ /dev/null @@ -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 diff --git a/include/unk_815c27c.h b/include/unk_815c27c.h deleted file mode 100644 index 02c886895..000000000 --- a/include/unk_815c27c.h +++ /dev/null @@ -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 diff --git a/include/vs_seeker.h b/include/vs_seeker.h index fdd6839df..2d88417fa 100644 --- a/include/vs_seeker.h +++ b/include/vs_seeker.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); diff --git a/ld_script.txt b/ld_script.txt index f0792ad9d..341c816e3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -80,7 +80,7 @@ SECTIONS { src/blend_palette.o(.text); src/daycare.o(.text); src/battle_interface.o(.text); - asm/smokescreen.o(.text); + src/smokescreen.o(.text); src/pokeball.o(.text); src/load_save.o(.text); src/trade.o(.text); @@ -95,7 +95,7 @@ SECTIONS { asm/field_player_avatar.o(.text); asm/event_object_movement.o(.text); asm/field_ground_effect.o(.text); - asm/event_object_80688E4.o(.text); + src/event_object_80688E4.o(.text); asm/field_message_box.o(.text); src/event_object_lock.o(.text); src/text_window_graphics.o(.text); @@ -120,7 +120,6 @@ SECTIONS { asm/field_weather_effects.o(.text); src/field_fadetransition.o(.text); src/field_screen_effect.o(.text); - asm/field_screen_effect.o(.text); src/battle_setup.o(.text); asm/cable_club.o(.text); asm/trainer_see.o(.text); @@ -227,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); @@ -246,7 +245,9 @@ SECTIONS { src/union_room_battle.o(.text); asm/pokemon_special_anim.o(.text); src/party_menu.o(.text); - asm/union_room_chat.o(.text); + src/union_room_chat.o(.text); + src/union_room_chat_display.o(.text); + src/union_room_chat_objects.o(.text); src/help_system_812B1E0.o(.text); src/quest_log_battle.o(.text); src/fame_checker.o(.text); @@ -269,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); @@ -288,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 @@ -321,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); @@ -421,7 +423,7 @@ SECTIONS { data/field_player_avatar.o(.rodata); data/event_object_movement.o(.rodata); data/field_ground_effect.o(.rodata); - data/event_object_80688E4.o(.rodata); + src/event_object_80688E4.o(.rodata); src/scrcmd.o(.rodata); src/coord_event_weather.o(.rodata); src/field_tasks.o(.rodata); @@ -436,7 +438,6 @@ SECTIONS { src/title_screen.o(.rodata); data/field_weather.o(.rodata); src/field_screen_effect.o(.rodata); - data/field_screen_effect.o(.rodata); src/battle_setup.o(.rodata); data/cable_club.o(.rodata); data/trainer_see.o(.rodata); @@ -534,7 +535,9 @@ SECTIONS { src/union_room_message.o(.rodata); data/pokemon_special_anim.o(.rodata); src/party_menu.o(.rodata); - data/union_room_chat.o(.rodata); + src/union_room_chat.o(.rodata); + src/union_room_chat_display.o(.rodata); + src/union_room_chat_objects.o(.rodata); src/help_system_812B1E0.o(.rodata); src/fame_checker.o(.rodata); src/menu2.o(.rodata); @@ -556,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); @@ -571,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); diff --git a/src/AgbRfu_LinkManager.c b/src/AgbRfu_LinkManager.c new file mode 100644 index 000000000..e4127ee09 --- /dev/null +++ b/src/AgbRfu_LinkManager.c @@ -0,0 +1,1398 @@ +#include "global.h" +#include "librfu.h" +#include "link_rfu.h" + +#define RN_ACCEPT 0x01 +#define RN_NAME_TIMER_CLEAR 0x02 +#define RN_DISCONNECT 0x04 + +#define LINK_RECOVERY_OFF 0x00 +#define LINK_RECOVERY_START 0x01 +#define LINK_RECOVERY_EXE 0x02 +#define LINK_RECOVERY_IMPOSSIBLE 0x04 + +#define FSP_ON 0x01 +#define FSP_START 0x02 + +LINK_MANAGER lman; + +static void rfu_LMAN_clearVariables(void); +static void rfu_LMAN_settingPCSWITCH(u32 rand); +static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult); +static void rfu_LMAN_MSC_callback(u16 reqCommandId); +static void rfu_LMAN_PARENT_checkRecvChildName(void); +static void rfu_LMAN_CHILD_checkSendChildName(void); +static void rfu_LMAN_CHILD_checkSendChildName2(void); +static void rfu_LMAN_CHILD_linkRecoveryProcess(void); +static u8 rfu_LMAN_CHILD_checkEnableParentCandidate(void); +static void rfu_LMAN_occureCallback(u8 msg, u8 param_count); +static void rfu_LMAN_disconnect(u8 bmDisconnectSlot); +static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot); +static void rfu_LMAN_checkNICommunicateStatus(void); +static void rfu_LMAN_managerChangeAgbClockMaster(void); + +u32 rfu_LMAN_REQBN_softReset_and_checkID(void) +{ + u32 id = rfu_REQBN_softReset_and_checkID(); + if (id == RFU_ID) + lman.RFU_powerOn_flag = 1; + if (lman.state != LMAN_FORCED_STOP_AND_RFU_RESET && lman.state != LMAN_STATE_SOFT_RESET_AND_CHECK_ID) + { + lman.state = lman.next_state = LMAN_STATE_READY; + } + lman.pcswitch_flag = 0; + lman.reserveDisconnectSlot_flag = 0; + lman.acceptCount = 0; + lman.acceptSlot_flag = 0; + lman.parent_child = MODE_NEUTRAL; + rfu_LMAN_managerChangeAgbClockMaster(); + return id; +} + +void rfu_LMAN_REQ_sendData(u8 clockChangeFlag) +{ + if (gRfuLinkStatus->parentChild == MODE_CHILD) + { + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON) + clockChangeFlag = TRUE; + else + clockChangeFlag = FALSE; + } + else + lman.parentAck_flag = 0; + rfu_REQ_sendData(clockChangeFlag); +} + +u8 rfu_LMAN_initializeManager(void (*LMAN_callback_p)(u8, u8), void (*MSC_callback_p)(u16)) +{ + if (LMAN_callback_p == NULL) + { + return LMAN_ERROR_ILLEGAL_PARAMETER; + } + CpuFill16(0, &lman, sizeof(struct linkManagerTag)); + lman.parent_child = MODE_NEUTRAL; + lman.LMAN_callback = LMAN_callback_p; + lman.MSC_callback = MSC_callback_p; + rfu_setMSCCallback(rfu_LMAN_MSC_callback); + rfu_setREQCallback(rfu_LMAN_REQ_callback); + return 0; +} + +static void rfu_LMAN_endManager(void) +{ + CpuFill16(0, &lman, sizeof(struct linkManagerTag) - 8); + lman.parent_child = MODE_NEUTRAL; +} + +void rfu_LMAN_initializeRFU(INIT_PARAM *init_parameters) +{ + rfu_LMAN_clearVariables(); + lman.state = LMAN_STATE_SOFT_RESET_AND_CHECK_ID; + lman.next_state = LMAN_STATE_RESET; + lman.init_param = init_parameters; + lman.linkRecovery_enable = init_parameters->linkRecovery_enable; + lman.linkRecoveryTimer.count_max = init_parameters->linkRecovery_period; + lman.NI_failCounter_limit = init_parameters->NI_failCounter_limit; + if (init_parameters->fastSearchParent_flag) + { + lman.fastSearchParent_flag = FSP_ON; + } +} + +static void rfu_LMAN_clearVariables(void) +{ + u8 i; + + lman.state = lman.next_state = LMAN_STATE_READY; + lman.parent_child = MODE_NEUTRAL; + lman.pcswitch_flag = 0; + lman.child_slot = 0; + lman.connectSlot_flag_old = 0; + lman.nameAcceptTimer.active = 0; + lman.linkRecoveryTimer.active = 0; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + lman.nameAcceptTimer.count[i] = 0; + lman.linkRecoveryTimer.count[i] = 0; + } +} + +void rfu_LMAN_powerDownRFU(void) +{ + lman.state = LMAN_STATE_STOP_MODE; +} + +u8 rfu_LMAN_establishConnection(u8 parent_child, u16 connect_period, u16 name_accept_period, u16 *acceptable_serialNo_list) +{ + u8 i; + u16 *serial_list; + + if (lman.state != LMAN_STATE_READY && (lman.state != LMAN_STATE_WAIT_RECV_CHILD_NAME || parent_child != MODE_PARENT)) + { + lman.param[0] = 1; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_MANAGER_BUSY; + } + if (rfu_getMasterSlave() == AGB_CLK_SLAVE) + { + lman.param[0] = 2; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_AGB_CLK_SLAVE; + } + for (i = 0, serial_list = acceptable_serialNo_list; i < 16; i++) + { + if (*serial_list++ == 0xFFFF) + { + break; + } + } + if (i == 16) + { + lman.param[0] = 4; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_ILLEGAL_PARAMETER; + } + if (parent_child > MODE_PARENT) + { + lman.pcswitch_flag = PCSWITCH_1ST_SC_START; + parent_child = MODE_PARENT; + connect_period = 0; + } + else + { + lman.pcswitch_flag = 0; + } + if (parent_child != MODE_CHILD) + { + lman.state = LMAN_STATE_START_SEARCH_CHILD; + } + else + { + lman.state = LMAN_STATE_START_SEARCH_PARENT; + if (lman.fastSearchParent_flag) + { + lman.fastSearchParent_flag = FSP_START; + } + } + lman.parent_child = parent_child; + lman.connect_period = connect_period; + lman.nameAcceptTimer.count_max = name_accept_period; + lman.acceptable_serialNo_list = acceptable_serialNo_list; + return 0; +} + +u8 rfu_LMAN_CHILD_connectParent(u16 parentId, u16 connect_period) +{ + u8 i; + + if (lman.state != LMAN_STATE_READY && (lman.state < 9 || lman.state > 11)) + { + lman.param[0] = 1; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_MANAGER_BUSY; + } + if (rfu_getMasterSlave() == AGB_CLK_SLAVE) + { + lman.param[0] = 2; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_AGB_CLK_SLAVE; + } + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) + { + if (gRfuLinkStatus->partner[i].id == parentId) + { + break; + } + } + if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount) + { + lman.param[0] = 3; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_PID_NOT_FOUND; + } + if (lman.state == LMAN_STATE_READY || lman.state == LMAN_STATE_START_SEARCH_PARENT) + { + lman.state = LMAN_STATE_START_CONNECT_PARENT; + lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT; + } + else + { + lman.state = LMAN_STATE_END_SEARCH_PARENT; + lman.next_state = LMAN_STATE_START_CONNECT_PARENT; + } + lman.work = parentId; + lman.connect_period = connect_period; + if (lman.pcswitch_flag != 0) + { + lman.pcswitch_flag = PCSWITCH_CP; + } + return 0; +} + +static void rfu_LMAN_PARENT_stopWaitLinkRecoveryAndDisconnect(u8 bm_targetSlot) +{ + u8 i; + + if ((bm_targetSlot & lman.linkRecoveryTimer.active) == 0) + return; + lman.linkRecoveryTimer.active &= ~bm_targetSlot; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if ((bm_targetSlot >> i) & 1) + { + lman.linkRecoveryTimer.count[i] = 0; + } + } + i = gRfuLinkStatus->linkLossSlotFlag & bm_targetSlot; + if (i) + { + rfu_LMAN_disconnect(i); + } + lman.param[0] = i; + rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, i); +} + +void rfu_LMAN_stopManager(u8 forced_stop_and_RFU_reset_flag) +{ + u8 msg = 0; + lman.pcswitch_flag = 0; + if (forced_stop_and_RFU_reset_flag) + { + rfu_LMAN_clearVariables(); + lman.state = LMAN_FORCED_STOP_AND_RFU_RESET; + return; + } + switch (lman.state) + { + case LMAN_STATE_START_SEARCH_CHILD: + lman.state = LMAN_STATE_WAIT_RECV_CHILD_NAME; + lman.next_state = LMAN_STATE_READY; + msg = LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED; + break; + case LMAN_STATE_POLL_SEARCH_CHILD: + lman.state = LMAN_STATE_END_SEARCH_CHILD; + lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME; + break; + case LMAN_STATE_END_SEARCH_CHILD: + lman.state = LMAN_STATE_END_SEARCH_CHILD; + lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME; + break; + case LMAN_STATE_WAIT_RECV_CHILD_NAME: + break; + case LMAN_STATE_START_SEARCH_PARENT: + lman.state = lman.next_state = LMAN_STATE_READY; + msg = LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED; + break; + case LMAN_STATE_POLL_SEARCH_PARENT: + lman.state = LMAN_STATE_END_SEARCH_PARENT; + lman.next_state = LMAN_STATE_READY; + break; + case LMAN_STATE_END_SEARCH_PARENT: + lman.state = LMAN_STATE_END_SEARCH_PARENT; + lman.next_state = LMAN_STATE_READY; + break; + case LMAN_STATE_START_CONNECT_PARENT: + lman.state = lman.next_state = LMAN_STATE_READY; + msg = LMAN_MSG_CONNECT_PARENT_FAILED; + break; + case LMAN_STATE_POLL_CONNECT_PARENT: + lman.state = LMAN_STATE_END_CONNECT_PARENT; + break; + case LMAN_STATE_END_CONNECT_PARENT: + lman.state = LMAN_STATE_END_CONNECT_PARENT; + break; + case LMAN_STATE_SEND_CHILD_NAME: + break; + case LMAN_STATE_START_LINK_RECOVERY: + lman.state = lman.state_bak[0]; + lman.next_state = lman.state_bak[1]; + rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag); + lman.param[0] = gRfuLinkStatus->linkLossSlotFlag; + rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1); + return; + case LMAN_STATE_POLL_LINK_RECOVERY: + lman.state = LMAN_STATE_END_LINK_RECOVERY; + break; + case LMAN_STATE_END_LINK_RECOVERY: + lman.state = LMAN_STATE_END_LINK_RECOVERY; + break; + default: + lman.state = lman.next_state = LMAN_STATE_READY; + msg = LMAN_MSG_MANAGER_STOPPED; + break; + } + if (lman.state == LMAN_STATE_READY) + { + rfu_LMAN_occureCallback(msg, 0); + } +} + +static bool8 rfu_LMAN_linkWatcher(u16 REQ_commandID) +{ + u8 i; + u8 bm_linkLossSlot; + u8 reason; + u8 bm_linkRecoverySlot; + u8 bm_disconnectSlot; + + bool8 disconnect_occure_flag = FALSE; + rfu_REQBN_watchLink(REQ_commandID, &bm_linkLossSlot, &reason, &bm_linkRecoverySlot); + if (bm_linkLossSlot) + { + lman.param[0] = bm_linkLossSlot; + lman.param[1] = reason; + if (lman.linkRecovery_enable) + { + lman.linkRecovery_start_flag = LINK_RECOVERY_START; + if (lman.parent_child == MODE_CHILD && reason == REASON_DISCONNECTED) + { + lman.linkRecovery_start_flag = LINK_RECOVERY_IMPOSSIBLE; + } + if (lman.linkRecovery_start_flag == LINK_RECOVERY_START) + { + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if ((bm_linkLossSlot >> i) & 1) + { + lman.linkRecoveryTimer.active |= (1 << i); + lman.linkRecoveryTimer.count[i] = lman.linkRecoveryTimer.count_max; + } + } + rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY, 1); + } + else + { + lman.linkRecovery_start_flag = 0; + rfu_LMAN_disconnect(bm_linkLossSlot); + disconnect_occure_flag = TRUE; + rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1); + } + } + else + { + rfu_LMAN_disconnect(bm_linkLossSlot); + disconnect_occure_flag = TRUE; + rfu_LMAN_occureCallback(LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED, 2); + } + rfu_LMAN_managerChangeAgbClockMaster(); + } + if (gRfuLinkStatus->parentChild == MODE_PARENT) + { + if (bm_linkRecoverySlot) + { + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if ((lman.linkRecoveryTimer.active >> i) & 1 && (bm_linkRecoverySlot >> i) & 1) + { + lman.linkRecoveryTimer.count[i] = 0; + } + } + lman.linkRecoveryTimer.active &= ~bm_linkRecoverySlot; + lman.param[0] = bm_linkRecoverySlot; + rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_SUCCESSED, 1); + } + if (lman.linkRecoveryTimer.active) + { + bm_disconnectSlot = 0; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if ((lman.linkRecoveryTimer.active >> i) & 1 && lman.linkRecoveryTimer.count[i] && --lman.linkRecoveryTimer.count[i] == 0) + { + lman.linkRecoveryTimer.active &= ~(1 << i); + bm_disconnectSlot |= (1 << i); + } + } + if (bm_disconnectSlot) + { + rfu_LMAN_disconnect(bm_disconnectSlot); + disconnect_occure_flag = TRUE; + lman.param[0] = bm_disconnectSlot; + rfu_LMAN_occureCallback(LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED, 1); + } + } + if (!lman.linkRecoveryTimer.active) + { + lman.linkRecovery_start_flag = 0; + } + } + return disconnect_occure_flag; +} + +void rfu_LMAN_syncVBlank(void) +{ + if (rfu_syncVBlank()) + { + rfu_LMAN_occureCallback(LMAN_MSG_WATCH_DOG_TIMER_ERROR, 0); + rfu_LMAN_managerChangeAgbClockMaster(); + } +} + +void rfu_LMAN_manager_entity(u32 rand) +{ + u8 msg; + + if (lman.LMAN_callback == NULL && lman.state != LMAN_STATE_READY) + { + lman.state = LMAN_STATE_READY; + return; + } + if (lman.pcswitch_flag) + { + rfu_LMAN_settingPCSWITCH(rand); + } + while (1) + { + if (lman.state != LMAN_STATE_READY) + { + rfu_waitREQComplete(); + lman.active = 1; + switch (lman.state) + { + case LMAN_FORCED_STOP_AND_RFU_RESET: + if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID) + { + msg=LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET; + } + else + { + msg=LMAN_MSG_RFU_FATAL_ERROR; + } + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_occureCallback(msg, 0); + break; + case LMAN_STATE_SOFT_RESET_AND_CHECK_ID: + if (rfu_LMAN_REQBN_softReset_and_checkID() == RFU_ID) + { + lman.state = lman.next_state; + lman.next_state = LMAN_STATE_CONFIG_SYSTEM; + } + else + { + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_occureCallback(LMAN_MSG_RFU_FATAL_ERROR, 0); + } + break; + case LMAN_STATE_RESET: + rfu_REQ_reset(); + break; + case LMAN_STATE_CONFIG_SYSTEM: + rfu_REQ_configSystem(lman.init_param->availSlot_flag, lman.init_param->maxMFrame, lman.init_param->MC_TimerCount); + break; + case LMAN_STATE_CONFIG_GAME_DATA: + rfu_REQ_configGameData(lman.init_param->mboot_flag, lman.init_param->serialNo, (const u8 *)lman.init_param->gameName, lman.init_param->userName); + break; + case LMAN_STATE_START_SEARCH_CHILD: + rfu_REQ_startSearchChild(); + break; + case LMAN_STATE_POLL_SEARCH_CHILD: + rfu_REQ_pollSearchChild(); + break; + case LMAN_STATE_END_SEARCH_CHILD: + rfu_REQ_endSearchChild(); + break; + case LMAN_STATE_WAIT_RECV_CHILD_NAME: + break; + case LMAN_STATE_START_SEARCH_PARENT: + rfu_REQ_startSearchParent(); + break; + case LMAN_STATE_POLL_SEARCH_PARENT: + rfu_REQ_pollSearchParent(); + break; + case LMAN_STATE_END_SEARCH_PARENT: + rfu_REQ_endSearchParent(); + break; + case LMAN_STATE_START_CONNECT_PARENT: + rfu_REQ_startConnectParent(lman.work); + break; + case LMAN_STATE_POLL_CONNECT_PARENT: + rfu_REQ_pollConnectParent(); + break; + case LMAN_STATE_END_CONNECT_PARENT: + rfu_REQ_endConnectParent(); + break; + case LMAN_STATE_SEND_CHILD_NAME: + break; + case LMAN_STATE_START_LINK_RECOVERY: + rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag); + break; + case LMAN_STATE_POLL_LINK_RECOVERY: + rfu_REQ_CHILD_pollConnectRecovery(); + break; + case LMAN_STATE_END_LINK_RECOVERY: + rfu_REQ_CHILD_endConnectRecovery(); + break; + case LMAN_STATE_MS_CHANGE: + rfu_REQ_changeMasterSlave(); + break; + case LMAN_STATE_WAIT_CLOCK_MASTER: + break; + case LMAN_STATE_STOP_MODE: + rfu_REQ_stopMode(); + break; + case LMAN_STATE_BACK_STATE: + break; + default: + break; + } + rfu_waitREQComplete(); + lman.active = 0; + } + if (lman.state == LMAN_STATE_END_LINK_RECOVERY || lman.state == LMAN_STATE_MS_CHANGE) + ; + else + break; + } + if (gRfuLinkStatus->parentChild == MODE_PARENT) + { + if (rfu_LMAN_linkWatcher(0)) + return; + } + rfu_LMAN_PARENT_checkRecvChildName(); + rfu_LMAN_CHILD_checkSendChildName(); + rfu_LMAN_CHILD_linkRecoveryProcess(); + rfu_LMAN_checkNICommunicateStatus(); +} + +static void rfu_LMAN_settingPCSWITCH(u32 rand) +{ + if (lman.pcswitch_flag == PCSWITCH_3RD_SC_START) + { + lman.parent_child = MODE_PARENT; + lman.state = LMAN_STATE_START_SEARCH_CHILD; + lman.connect_period = lman.pcswitch_period_bak; + if (lman.connect_period) + { + lman.pcswitch_flag = PCSWITCH_3RD_SC; + } + else + { + lman.pcswitch_flag = PCSWITCH_1ST_SC_START; + } + } + if (lman.pcswitch_flag == PCSWITCH_1ST_SC_START) + { + lman.parent_child = MODE_PARENT; + lman.state = LMAN_STATE_START_SEARCH_CHILD; + lman.connect_period = rand % 140; + lman.pcswitch_period_bak = 140 - lman.connect_period; + if (lman.connect_period) + { + lman.pcswitch_flag = PCSWITCH_1ST_SC; + } + else + { + lman.pcswitch_flag = PCSWITCH_2ND_SP_START; + } + } + if (lman.pcswitch_flag == PCSWITCH_2ND_SP_START) + { + lman.parent_child = MODE_CHILD; + lman.connect_period = PCSWITCH_SP_PERIOD; + lman.pcswitch_flag = PCSWITCH_2ND_SP; + lman.state = LMAN_STATE_START_SEARCH_PARENT; + } +} + +static void rfu_LMAN_REQ_callback(u16 reqCommandId, u16 reqResult) +{ + u8 status; + u8 *stwiRecvBuffer; + u8 i; + + if (lman.active != 0) + { + lman.active = 0; + switch (reqCommandId) + { + case ID_RESET_REQ: + if (reqResult == 0) + { + lman.state = lman.next_state; + lman.next_state = LMAN_STATE_CONFIG_GAME_DATA; + } + break; + case ID_SYSTEM_CONFIG_REQ: + if (reqResult == 0) + { + lman.state = lman.next_state; + lman.next_state = LMAN_STATE_READY; + } + break; + case ID_GAME_CONFIG_REQ: + if (reqResult == 0) + { + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_occureCallback(LMAN_MSG_INITIALIZE_COMPLETED, 0); + } + break; + case ID_SC_START_REQ: + if (reqResult == 0) + { + lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_CHILD; + } + break; + case ID_SC_POLL_REQ: + if (lman.connect_period && --lman.connect_period == 0) + { + lman.state = LMAN_STATE_END_SEARCH_CHILD; + lman.next_state = LMAN_STATE_WAIT_RECV_CHILD_NAME; + } + break; + case ID_SC_END_REQ: + if (reqResult == 0) + { + lman.state = lman.next_state; + lman.next_state = LMAN_STATE_READY; + if (lman.pcswitch_flag == 0) + { + rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED, 0); + } + } + break; + case ID_SP_START_REQ: + if (reqResult == 0) + { + if (lman.fastSearchParent_flag == FSP_ON) + { + if (lman.connect_period > 1) + { + lman.connect_period--; + } + } + lman.state = lman.next_state = LMAN_STATE_POLL_SEARCH_PARENT; + } + break; + case ID_SP_POLL_REQ: + if (reqResult == 0) + { + status = rfu_LMAN_CHILD_checkEnableParentCandidate(); + lman.param[0] = status; + if (status) + { + rfu_LMAN_occureCallback(LMAN_MSG_PARENT_FOUND, 1); + } + if (lman.fastSearchParent_flag && lman.connect_period != 1 && gRfuLinkStatus->findParentCount == RFU_CHILD_MAX) + { + rfu_REQ_endSearchParent(); + rfu_waitREQComplete(); + lman.state = LMAN_STATE_START_SEARCH_PARENT; + lman.fastSearchParent_flag = FSP_ON; + } + } + if (lman.connect_period && --lman.connect_period == 0) + { + lman.state = LMAN_STATE_END_SEARCH_PARENT; + lman.next_state = LMAN_STATE_READY; + } + break; + case ID_SP_END_REQ: + if (reqResult == 0) + { + lman.state = lman.next_state; + if (lman.pcswitch_flag == 0) + { + if (lman.state == LMAN_STATE_READY) + { + rfu_LMAN_occureCallback(LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED, 0); + } + } + else if (lman.pcswitch_flag != PCSWITCH_CP) + { + lman.state = LMAN_STATE_START_SEARCH_CHILD; + lman.pcswitch_flag = PCSWITCH_3RD_SC_START; + } + } + break; + case ID_CP_START_REQ: + if (reqResult == 0) + { + lman.state = lman.next_state = LMAN_STATE_POLL_CONNECT_PARENT; + } + break; + case ID_CP_POLL_REQ: + if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot) && !status) + { + lman.state = LMAN_STATE_END_CONNECT_PARENT; + } + if (lman.connect_period && --lman.connect_period == 0) + { + lman.state = LMAN_STATE_END_CONNECT_PARENT; + } + break; + case ID_CP_END_REQ: + if (reqResult == 0 && !rfu_getConnectParentStatus(&status, &lman.child_slot)) + { + if (!status) + { + lman.state = LMAN_STATE_MS_CHANGE; + lman.next_state = LMAN_STATE_SEND_CHILD_NAME; + lman.work = 0x22; + lman.param[0] = lman.child_slot; + } + else + { + lman.state = lman.next_state = LMAN_STATE_READY; + lman.work = 0x23; + lman.param[0] = status; + if (lman.pcswitch_flag) + { + lman.pcswitch_flag = PCSWITCH_2ND_SP_START; + lman.state = LMAN_STATE_START_SEARCH_PARENT; + } + } + rfu_LMAN_occureCallback(lman.work, 0x01); + lman.work = 0; + } + break; + case ID_CPR_START_REQ: + if (reqResult == 0) + { + lman.param[0] = gRfuLinkStatus->linkLossSlotFlag; + lman.state = lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY; + for (lman.child_slot = 0; lman.child_slot < RFU_CHILD_MAX; lman.child_slot++) + { + if ((gRfuLinkStatus->linkLossSlotFlag >> lman.child_slot) & 1) + { + break; + } + } + } + break; + case ID_CPR_POLL_REQ: + if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status) && status < 2) + { + lman.state = LMAN_STATE_END_LINK_RECOVERY; + } + if (lman.linkRecoveryTimer.count[lman.child_slot] && --lman.linkRecoveryTimer.count[lman.child_slot] == 0) + { + lman.state = LMAN_STATE_END_LINK_RECOVERY; + } + break; + case ID_CPR_END_REQ: + if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&status)) + { + if (!status) + { + lman.state = LMAN_STATE_MS_CHANGE; + lman.next_state = LMAN_STATE_BACK_STATE; + lman.work = 0x32; + } + else + { + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_disconnect(gRfuLinkStatus->linkLossSlotFlag); + lman.work = 0x33; + } + lman.linkRecoveryTimer.count[lman.child_slot] = 0; + lman.linkRecoveryTimer.active = 0; + lman.linkRecovery_start_flag = 0; + rfu_LMAN_occureCallback(lman.work, 0x01); + lman.work = 0; + } + break; + case ID_MS_CHANGE_REQ: + if (reqResult == 0) + { + if (lman.next_state == LMAN_STATE_BACK_STATE) + { + lman.state = lman.state_bak[0]; + lman.next_state = lman.state_bak[1]; + lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON; + rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0); + } + else if (lman.next_state == LMAN_STATE_SEND_CHILD_NAME) + { + lman.state = lman.next_state; + lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_ON; + rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_SLAVE, 0); + lman.nameAcceptTimer.active |= 1 << lman.child_slot; + lman.nameAcceptTimer.count[lman.child_slot] = lman.nameAcceptTimer.count_max; + rfu_clearSlot(TYPE_NI_SEND, lman.child_slot); + status = rfu_NI_CHILD_setSendGameName(lman.child_slot, 0x0e); + if (status) + { + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_managerChangeAgbClockMaster(); + rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); + lman.param[0] = status; + rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1); + } + } + } + break; + case ID_STOP_MODE_REQ: + if (reqResult == 0) + { + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_occureCallback(LMAN_MSG_RFU_POWER_DOWN, 0); + } + break; + } + lman.active = 1; + } + else if (reqResult == 3 && lman.msc_exe_flag && (reqCommandId == ID_DATA_TX_REQ || reqCommandId == ID_DATA_RX_REQ || reqCommandId == ID_MS_CHANGE_REQ)) + { + rfu_REQ_RFUStatus(); + rfu_waitREQComplete(); + rfu_getRFUStatus(&status); + if (status == 0 && gRfuLinkStatus->parentChild == MODE_CHILD) + { + stwiRecvBuffer = rfu_getSTWIRecvBuffer() + 4; + *stwiRecvBuffer++ = gRfuLinkStatus->connSlotFlag; + *stwiRecvBuffer = REASON_LINK_LOSS; + rfu_LMAN_linkWatcher(ID_DISCONNECTED_AND_CHANGE_REQ); + reqResult = 0; + } + } + switch (reqCommandId) + { + case ID_DISCONNECT_REQ: + if (reqResult == 0) + { + lman.param[0] = *(rfu_getSTWIRecvBuffer() + 8); + rfu_LMAN_reflectCommunicationStatus(lman.param[0]); + if (lman.linkRecoveryTimer.active) + { + lman.linkRecoveryTimer.active &= ~lman.param[0]; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if ((lman.param[0] >> i) & 1) + { + lman.linkRecoveryTimer.count[i] = 0; + } + } + if (lman.parent_child == MODE_CHILD) + { + lman.state = lman.next_state = LMAN_STATE_READY; + } + } + status = lman.acceptSlot_flag & lman.param[0]; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if ((status >> i) & 1 && lman.acceptCount) + { + lman.acceptCount--; + } + } + lman.acceptSlot_flag &= ~lman.param[0]; + if (lman.pcswitch_flag) + { + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) + { + if (lman.pcswitch_flag == PCSWITCH_SC_LOCK) + { + lman.connect_period = lman.pcswitch_period_bak; + lman.pcswitch_flag = PCSWITCH_3RD_SC; + lman.state = LMAN_STATE_POLL_SEARCH_CHILD; + } + else if (lman.state != LMAN_STATE_POLL_SEARCH_CHILD && lman.state != LMAN_STATE_END_SEARCH_CHILD) + { + lman.pcswitch_flag = PCSWITCH_1ST_SC_START; + lman.state = LMAN_STATE_START_SEARCH_CHILD; + } + } + } + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) + { + if (lman.state == LMAN_STATE_READY) + { + lman.parent_child = MODE_NEUTRAL; + } + } + if (lman.active == 0) + { + rfu_LMAN_occureCallback(LMAN_MSG_LINK_DISCONNECTED_BY_USER, 1); + } + } + break; + case ID_DATA_RX_REQ: + rfu_LMAN_CHILD_checkSendChildName2(); + if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) + { + rfu_LMAN_occureCallback(LMAN_MSG_RECV_DATA_REQ_COMPLETED, 0); + } + break; + case ID_RESET_REQ: + case ID_STOP_MODE_REQ: + if (reqResult == 0) + { + lman.reserveDisconnectSlot_flag = 0; + lman.acceptCount = 0; + lman.acceptSlot_flag = 0;; + lman.parent_child = MODE_NEUTRAL; + rfu_LMAN_managerChangeAgbClockMaster(); + if (reqCommandId == ID_STOP_MODE_REQ) + { + rfu_LMAN_endManager(); + } + } + break; + } + if (reqResult != 0) + { + if (reqCommandId == ID_SP_START_REQ && reqResult != 0 && lman.pcswitch_flag == PCSWITCH_2ND_SP) + { + gRfuLinkStatus->parentChild = MODE_PARENT; + gRfuLinkStatus->connSlotFlag = 0xF; + rfu_LMAN_disconnect(15); + rfu_waitREQComplete(); + return; + } + else + { + lman.param[0] = reqCommandId; + lman.param[1] = reqResult; + if (lman.active) + { + lman.state = lman.next_state = LMAN_STATE_READY; + } + rfu_LMAN_occureCallback(LMAN_MSG_REQ_API_ERROR, 2); + rfu_LMAN_managerChangeAgbClockMaster(); + } + } + if (reqCommandId == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ) + { + rfu_LMAN_occureCallback(LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA, 0); + rfu_LMAN_managerChangeAgbClockMaster(); + } +} + +static void rfu_LMAN_MSC_callback(u16 reqCommandId) +{ + u8 active_bak; + u8 thisAck_flag; + + active_bak = lman.active; + lman.active = 0; + lman.msc_exe_flag = 1; + if (gRfuLinkStatus->parentChild == MODE_CHILD) + { + rfu_LMAN_linkWatcher(reqCommandId); + if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_ON) + { + rfu_LMAN_managerChangeAgbClockMaster(); + lman.msc_exe_flag = 0; + lman.active = active_bak; + return; + } + } + else + { + if (!rfu_UNI_PARENT_getDRAC_ACK(&thisAck_flag)) + { + lman.parentAck_flag |= thisAck_flag; + } + } + if (lman.MSC_callback != NULL) + { + lman.MSC_callback(reqCommandId); + rfu_waitREQComplete(); + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF_REQ) + { + rfu_LMAN_managerChangeAgbClockMaster(); + } + } + lman.msc_exe_flag = 0; + lman.active = active_bak; +} + +static void rfu_LMAN_PARENT_checkRecvChildName(void) +{ + u8 newSlot; + u8 newAcceptSlot; + u8 i; + u8 flags; + u8 tgtSlot; + const u16 *ptr; + + if (lman.state == LMAN_STATE_START_SEARCH_CHILD || lman.state == LMAN_STATE_POLL_SEARCH_CHILD || lman.state == LMAN_STATE_END_SEARCH_CHILD || lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME) + { + newSlot = ((gRfuLinkStatus->connSlotFlag ^ lman.connectSlot_flag_old) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; + lman.connectSlot_flag_old = gRfuLinkStatus->connSlotFlag; + if (newSlot) + { + lman.param[0] = newSlot; + rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_DETECTED, 1); + } + newAcceptSlot = 0x00; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + tgtSlot = 1 << i; + flags = 0x00; + if (newSlot & tgtSlot) + { + lman.nameAcceptTimer.count[i] = lman.nameAcceptTimer.count_max; + lman.nameAcceptTimer.active |= tgtSlot; + } + else if (lman.nameAcceptTimer.active & tgtSlot) + { + if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS) + { + if (gRfuSlotStatusNI[i]->recv.dataType == 1) + { + flags = RN_NAME_TIMER_CLEAR; + for (ptr = lman.acceptable_serialNo_list; *ptr != 0xFFFF; ptr++) + { + if (gRfuLinkStatus->partner[i].serialNo == *ptr) + { + lman.acceptSlot_flag |= tgtSlot; + lman.acceptCount++; + newAcceptSlot |= tgtSlot; + flags |= RN_ACCEPT; + break; + } + } + if (!(flags & RN_ACCEPT)) + { + flags |= RN_DISCONNECT; + } + } + } + else if (--lman.nameAcceptTimer.count[i] == 0) + { + flags = RN_NAME_TIMER_CLEAR | RN_DISCONNECT; + } + if (flags & RN_NAME_TIMER_CLEAR) + { + lman.nameAcceptTimer.active &= ~tgtSlot; + lman.nameAcceptTimer.count[i] = 0; + rfu_clearSlot(TYPE_NI_RECV, i); + } + if (flags & RN_DISCONNECT) + { + lman.reserveDisconnectSlot_flag |= tgtSlot; + } + } + } + if (newAcceptSlot) + { + lman.param[0] = newAcceptSlot; + rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED, 1); + } + if (lman.reserveDisconnectSlot_flag) + { + flags = 1; + if (gRfuLinkStatus->sendSlotUNIFlag) + { + if (((lman.parentAck_flag & lman.acceptSlot_flag) != lman.acceptSlot_flag)) + { + flags = 0; + } + } + if (flags) + { + rfu_LMAN_disconnect(lman.reserveDisconnectSlot_flag); + lman.param[0] = lman.reserveDisconnectSlot_flag; + lman.reserveDisconnectSlot_flag = 0; + rfu_LMAN_occureCallback(LMAN_MSG_NEW_CHILD_CONNECT_REJECTED, 1); + } + } + if (lman.nameAcceptTimer.active == 0 && lman.state == LMAN_STATE_WAIT_RECV_CHILD_NAME) + { + if (lman.pcswitch_flag == 0) + { + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_occureCallback(LMAN_MSG_END_WAIT_CHILD_NAME, 0); + } + else + { + if (lman.pcswitch_flag == PCSWITCH_1ST_SC) + { + lman.pcswitch_flag = PCSWITCH_2ND_SP_START; + lman.state = LMAN_STATE_START_SEARCH_PARENT; + } + else + { + lman.pcswitch_flag = PCSWITCH_1ST_SC_START; + lman.state = LMAN_STATE_START_SEARCH_CHILD; + } + if (lman.acceptSlot_flag) + { + lman.connect_period = 0; + lman.pcswitch_flag = PCSWITCH_SC_LOCK; + lman.state = LMAN_STATE_START_SEARCH_CHILD; + } + } + } + } +} + +static void rfu_LMAN_CHILD_checkSendChildName(void) +{ + u16 imeBak = REG_IME; + REG_IME = 0; + if (lman.state == LMAN_STATE_SEND_CHILD_NAME) + { + if (--lman.nameAcceptTimer.count[lman.child_slot] == 0 || gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_FAILED) + { + rfu_LMAN_requestChangeAgbClockMaster(); + lman.state = LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER; + rfu_clearSlot(TYPE_NI_SEND, lman.child_slot); + lman.nameAcceptTimer.active &= ~(1 << lman.child_slot); + lman.nameAcceptTimer.count[lman.child_slot] = 0; + } + } + REG_IME = imeBak; + if (lman.state == LMAN_STATE_WAIT_CHANGE_CLOCK_MASTER) + { + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON) + { + rfu_LMAN_requestChangeAgbClockMaster(); + } + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF) + { + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_LMAN_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); + lman.param[0] = 0; + rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED, 1); + } + } +} + +static void rfu_LMAN_CHILD_checkSendChildName2(void) +{ + if (lman.state == LMAN_STATE_SEND_CHILD_NAME && gRfuSlotStatusNI[lman.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS) + { + lman.state = lman.next_state = LMAN_STATE_READY; + rfu_clearSlot(TYPE_NI_SEND, lman.child_slot); + lman.nameAcceptTimer.active &= ~(1 << lman.child_slot); + lman.nameAcceptTimer.count[lman.child_slot] = 0; + rfu_LMAN_occureCallback(LMAN_MSG_CHILD_NAME_SEND_COMPLETED, 0); + } +} + +static void rfu_LMAN_CHILD_linkRecoveryProcess(void) +{ + if (lman.parent_child == MODE_CHILD && lman.linkRecovery_start_flag == LINK_RECOVERY_START) + { + lman.state_bak[0] = lman.state; + lman.state_bak[1] = lman.next_state; + lman.state = LMAN_STATE_START_LINK_RECOVERY; + lman.next_state = LMAN_STATE_POLL_LINK_RECOVERY; + lman.linkRecovery_start_flag = LINK_RECOVERY_EXE; + } +} + +static u8 rfu_LMAN_CHILD_checkEnableParentCandidate(void) +{ + u8 i; + u16 *serialNo; + u8 flags = 0x00; + + for (i = 0; i < gRfuLinkStatus->findParentCount; i++) + { + for (serialNo = lman.acceptable_serialNo_list; *serialNo != 0xFFFF; serialNo++) + { + if (gRfuLinkStatus->partner[i].serialNo == *serialNo) + { + flags |= (1 << i); + } + } + } + return flags; +} + +static void rfu_LMAN_occureCallback(u8 msg, u8 param_count) +{ + if (lman.LMAN_callback != NULL) + { + lman.LMAN_callback(msg, param_count); + } + lman.param[0] = lman.param[1] = 0; +} + +static void rfu_LMAN_disconnect(u8 bm_disconnectedSlot) +{ + u8 active_bak = lman.active; + lman.active = 1; + rfu_REQ_disconnect(bm_disconnectedSlot); + rfu_waitREQComplete(); + lman.active = active_bak; +} + +static void rfu_LMAN_reflectCommunicationStatus(u8 bm_disconnectedSlot) +{ + u8 i; + + if (gRfuLinkStatus->sendSlotNIFlag) + { + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->send.bmSlot & bm_disconnectedSlot) + { + rfu_changeSendTarget(TYPE_NI, i, gRfuSlotStatusNI[i]->send.bmSlot & ~bm_disconnectedSlot); + } + } + } + if (gRfuLinkStatus->recvSlotNIFlag) + { + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.bmSlot & bm_disconnectedSlot) + { + rfu_NI_stopReceivingData(i); + } + } + } + if (gRfuLinkStatus->sendSlotUNIFlag) + { + gRfuLinkStatus->sendSlotUNIFlag &= ~bm_disconnectedSlot; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI && bm_disconnectedSlot & gRfuSlotStatusUNI[i]->send.bmSlot) + { + gRfuSlotStatusUNI[i]->send.bmSlot &= ~bm_disconnectedSlot; + } + } + } +} + +static void rfu_LMAN_checkNICommunicateStatus(void) +{ + u8 i; + u8 j; + u8 flags; + + if (lman.NI_failCounter_limit) + { + if (gRfuLinkStatus->sendSlotNIFlag) + { + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG) + { + flags = 0; + for (j = 0; j < RFU_CHILD_MAX; j++) + { + if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > lman.NI_failCounter_limit) + { + flags |= (1 << j); + } + if (flags) + { + rfu_changeSendTarget(TYPE_NI, i, flags ^ gRfuSlotStatusNI[i]->send.bmSlot); + } + } + } + } + } + if (gRfuLinkStatus->recvSlotNIFlag) + { + for (i = 0; i < RFU_CHILD_MAX; i++) + { + if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.failCounter > lman.NI_failCounter_limit) + { + rfu_NI_stopReceivingData(i); + } + } + } + } +} + +void rfu_LMAN_setMSCCallback(void (*MSC_callback_p)(u16)) +{ + lman.MSC_callback = MSC_callback_p; + rfu_setMSCCallback(rfu_LMAN_MSC_callback); +} + +static void rfu_LMAN_setLMANCallback(void (*func)(u8, u8)) +{ + lman.LMAN_callback = func; +} + +u8 rfu_LMAN_setLinkRecovery(u8 enable_flag, u16 recovery_period) +{ + u16 imeBak; + if (lman.linkRecovery_enable && enable_flag == 0 && lman.linkRecoveryTimer.active) + { + return LMAN_ERROR_NOW_LINK_RECOVERY; + } + imeBak = REG_IME; + REG_IME = 0; + lman.linkRecovery_enable = enable_flag; + lman.linkRecoveryTimer.count_max = recovery_period; + REG_IME = imeBak; + return 0; +} + +static u8 rfu_LMAN_setNIFailCounterLimit(u16 NI_failCounter_limit) +{ + if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) + { + lman.param[0] = 6; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_NOW_COMMUNICATION; + } + lman.NI_failCounter_limit = NI_failCounter_limit; + return 0; +} + +static u8 rfu_LMAN_setFastSearchParent(u8 enable_flag) +{ + if (lman.state == LMAN_STATE_START_SEARCH_PARENT || lman.state == LMAN_STATE_POLL_SEARCH_PARENT || lman.state == LMAN_STATE_END_SEARCH_PARENT) + { + lman.param[0] = 7; + rfu_LMAN_occureCallback(LMAN_MSG_LMAN_API_ERROR_RETURN, 1); + return LMAN_ERROR_NOW_SEARCH_PARENT; + } + if (enable_flag) + { + lman.fastSearchParent_flag = FSP_ON; + } + else + { + lman.fastSearchParent_flag = 0; + } + return 0; +} + +static void rfu_LMAN_managerChangeAgbClockMaster(void) +{ + if (lman.childClockSlave_flag != RFU_CHILD_CLOCK_SLAVE_OFF) + { + lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF; + rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0); + } +} + +void rfu_LMAN_requestChangeAgbClockMaster(void) +{ + if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_OFF) + { + rfu_LMAN_occureCallback(LMAN_MSG_CHANGE_AGB_CLOCK_MASTER, 0); + } + else if (lman.childClockSlave_flag == RFU_CHILD_CLOCK_SLAVE_ON) + { + lman.childClockSlave_flag = RFU_CHILD_CLOCK_SLAVE_OFF_REQ; + } +} + +void rfu_LMAN_forceChangeSP(void) +{ + if (lman.pcswitch_flag) + { + switch (lman.state) + { + case LMAN_STATE_START_SEARCH_CHILD: + lman.pcswitch_flag = PCSWITCH_2ND_SP_START; + lman.state = LMAN_STATE_START_SEARCH_PARENT; + break; + case LMAN_STATE_POLL_SEARCH_CHILD: + lman.pcswitch_flag = PCSWITCH_1ST_SC; + lman.connect_period = 1; + break; + case LMAN_STATE_END_SEARCH_CHILD: + case LMAN_STATE_WAIT_RECV_CHILD_NAME: + lman.pcswitch_flag = PCSWITCH_1ST_SC; + break; + case LMAN_STATE_START_SEARCH_PARENT: + case LMAN_STATE_POLL_SEARCH_PARENT: + lman.connect_period = PCSWITCH_SP_PERIOD; + break; + case LMAN_STATE_END_SEARCH_PARENT: + lman.connect_period = PCSWITCH_SP_PERIOD; + lman.state = LMAN_STATE_POLL_SEARCH_PARENT; + break; + } + } +} diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index cb9e04a50..7b0a8aa47 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -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 diff --git a/src/battle_controllers.c b/src/battle_controllers.c index ca2ef0b22..834b9e6b6 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -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]) diff --git a/src/battle_main.c b/src/battle_main.c index 17fbb58b4..faad8bafb 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -50,6 +50,7 @@ #include "cable_club.h" #include "constants/abilities.h" #include "constants/battle_move_effects.h" +#include "constants/battle_setup.h" #include "constants/hold_effects.h" #include "constants/items.h" #include "constants/moves.h" @@ -1151,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: @@ -3716,12 +3717,12 @@ static void HandleEndTurn_BattleLost(void) } else { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && ScrSpecial_GetTrainerBattleMode() == 9) + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && ScrSpecial_GetTrainerBattleMode() == TRAINER_BATTLE_EARLY_RIVAL) { - if (sub_80803D8() & 1) - gBattleCommunication[MULTISTRING_CHOOSER] = 1; + if (GetRivalBattleFlags() & RIVAL_BATTLE_HEAL_AFTER) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; // Dont do white out text else - gBattleCommunication[MULTISTRING_CHOOSER] = 2; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; // Do white out text gBattlerAttacker = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); } else diff --git a/src/battle_setup.c b/src/battle_setup.c index 102a1b969..ae6aaf8be 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -78,7 +78,7 @@ static EWRAM_DATA u8 *sTrainerVictorySpeech = NULL; static EWRAM_DATA u8 *sTrainerCannotBattleSpeech = NULL; static EWRAM_DATA u8 *sTrainerBattleEndScript = NULL; static EWRAM_DATA u8 *sTrainerABattleScriptRetAddr = NULL; -static EWRAM_DATA u16 gUnknown_20386CC = 0; +static EWRAM_DATA u16 sRivalBattleFlags = 0; static const u8 sBattleTransitionTable_Wild[][2] = { @@ -148,11 +148,11 @@ static const struct TrainerBattleParameter sOrdinaryNoIntroBattleParams[] = {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR}, }; -static const struct TrainerBattleParameter sTutorialBattleParams[] = +static const struct TrainerBattleParameter sEarlyRivalBattleParams[] = { {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT}, {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT}, - {&gUnknown_20386CC, TRAINER_PARAM_LOAD_VAL_16BIT}, + {&sRivalBattleFlags, TRAINER_PARAM_LOAD_VAL_16BIT}, {&sTrainerAIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT}, {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, {&sTrainerVictorySpeech, TRAINER_PARAM_LOAD_VAL_32BIT}, @@ -706,7 +706,7 @@ static void InitTrainerBattleVariables(void) sTrainerCannotBattleSpeech = NULL; sTrainerBattleEndScript = NULL; sTrainerABattleScriptRetAddr = NULL; - gUnknown_20386CC = 0; + sRivalBattleFlags = 0; } static inline void SetU8(void *ptr, u8 value) @@ -808,8 +808,8 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data) SetMapVarsToTrainer(); gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A); return EventScript_TryDoRematchBattle; - case TRAINER_BATTLE_TUTORIAL: - TrainerBattleLoadArgs(sTutorialBattleParams, data); + case TRAINER_BATTLE_EARLY_RIVAL: + TrainerBattleLoadArgs(sEarlyRivalBattleParams, data); return EventScript_DoTrainerBattle; default: TrainerBattleLoadArgs(sOrdinaryBattleParams, data); @@ -846,9 +846,9 @@ u8 ScrSpecial_GetTrainerBattleMode(void) return sTrainerBattleMode; } -u16 sub_80803D8(void) +u16 GetRivalBattleFlags(void) { - return gUnknown_20386CC; + return sRivalBattleFlags; } u16 ScrSpecial_HasTrainerBeenFought(void) @@ -885,8 +885,7 @@ void ClearTrainerFlag(u16 trainerId) void BattleSetup_StartTrainerBattle(void) { gBattleTypeFlags = BATTLE_TYPE_TRAINER; - if (ScrSpecial_GetTrainerBattleMode() == TRAINER_BATTLE_TUTORIAL - && sub_80803D8() & 3) + if (ScrSpecial_GetTrainerBattleMode() == TRAINER_BATTLE_EARLY_RIVAL && GetRivalBattleFlags() & RIVAL_BATTLE_TUTORIAL) gBattleTypeFlags |= BATTLE_TYPE_FIRST_BATTLE; gMain.savedCallback = CB2_EndTrainerBattle; DoTrainerBattle(); @@ -895,12 +894,12 @@ void BattleSetup_StartTrainerBattle(void) static void CB2_EndTrainerBattle(void) { - if (sTrainerBattleMode == TRAINER_BATTLE_TUTORIAL) + if (sTrainerBattleMode == TRAINER_BATTLE_EARLY_RIVAL) { if (IsPlayerDefeated(gBattleOutcome) == TRUE) { - gSpecialVar_Result = 1; - if (gUnknown_20386CC & 1) + gSpecialVar_Result = TRUE; + if (sRivalBattleFlags & RIVAL_BATTLE_HEAL_AFTER) { HealPlayerParty(); } @@ -915,7 +914,7 @@ static void CB2_EndTrainerBattle(void) } else { - gSpecialVar_Result = 0; + gSpecialVar_Result = FALSE; SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); SetBattledTrainerFlag(); sub_81139BC(); diff --git a/src/daycare.c b/src/daycare.c index a377e97f5..277a382c7 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -1,44 +1,34 @@ #include "global.h" -#include "pokemon.h" +#include "gflib.h" #include "battle.h" #include "daycare.h" -#include "string_util.h" #include "constants/species.h" #include "constants/items.h" #include "mail_data.h" #include "pokemon_storage_system.h" #include "event_data.h" #include "random.h" -#include "main.h" #include "constants/moves.h" -#include "text.h" #include "menu.h" #include "new_menu_helpers.h" #include "script.h" #include "strings.h" -#include "task.h" -#include "window.h" #include "party_menu.h" #include "list_menu.h" #include "overworld.h" #include "pokedex.h" #include "decompress.h" -#include "palette.h" -#include "sound.h" #include "constants/songs.h" #include "text_window.h" #include "trig.h" -#include "malloc.h" -#include "gpu_regs.h" -#include "bg.h" #include "m4a.h" #include "graphics.h" #include "scanline_effect.h" #include "naming_screen.h" #include "help_system.h" #include "field_fadetransition.h" +#include "trade.h" #include "constants/daycare.h" -#include "constants/pokemon.h" #include "constants/region_map.h" // Combination of RSE's Day-Care (re-used on Four Island), FRLG's Day-Care, and egg_hatch.c @@ -60,20 +50,6 @@ struct EggHatchData u8 textColor[3]; }; -extern const u8 gText_MaleSymbol4[]; -extern const u8 gText_FemaleSymbol4[]; -extern const u8 gText_GenderlessSymbol[]; -extern const u8 gText_Lv[]; -extern const u8 gDaycareText_GetAlongVeryWell[]; -extern const u8 gDaycareText_GetAlong[]; -extern const u8 gDaycareText_DontLikeOther[]; -extern const u8 gDaycareText_PlayOther[]; -extern const u8 gExpandedPlaceholder_Empty[]; - -extern const u32 gUnknown_826601C[]; // tilemap gameboy circle -extern const u8 gText_HatchedFromEgg[]; -extern const u8 gText_NickHatchPrompt[]; - // this file's functions static void ClearDaycareMonMail(struct DayCareMail *mail); static void SetInitialEggData(struct Pokemon *mon, u16 species, struct DayCare *daycare); @@ -638,7 +614,7 @@ static void ClearDaycareMonMail(struct DayCareMail *mail) { s32 i; - for (i = 0; i < PLAYER_NAME_LENGTH/* + 1*/; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) mail->OT_name[i] = 0; for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++) mail->monName[i] = 0; diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c new file mode 100644 index 000000000..af2618615 --- /dev/null +++ b/src/digit_obj_util.c @@ -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]; +} diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index fc6aa14c6..4260c6f2f 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -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) diff --git a/src/dynamic_placeholder_text_util.c b/src/dynamic_placeholder_text_util.c index 6909fea30..a2622bf02 100644 --- a/src/dynamic_placeholder_text_util.c +++ b/src/dynamic_placeholder_text_util.c @@ -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; diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index cce6cefca..df1b1c279 100644 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -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; } diff --git a/src/event_data.c b/src/event_data.c index 010a4414c..74d1cf608 100644 --- a/src/event_data.c +++ b/src/event_data.c @@ -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); diff --git a/src/event_object_80688E4.c b/src/event_object_80688E4.c new file mode 100644 index 000000000..2d79c4f7b --- /dev/null +++ b/src/event_object_80688E4.c @@ -0,0 +1,653 @@ +#include "global.h" +#include "event_object_80688E4.h" +#include "event_object_movement.h" +#include "field_effect.h" +#include "field_ground_effect.h" + +// This is part of evobjmv.c (see assert statement in DoObjectUnionRoomWarpYDisplacement). + +static void DoObjectUnionRoomWarpYDisplacement(struct Sprite * sprite); + +bool8 FreezeObjectEvent(struct ObjectEvent * objectEvent) +{ + if (objectEvent->heldMovementActive || objectEvent->frozen) + return TRUE; + objectEvent->frozen = TRUE; + objectEvent->spriteAnimPausedBackup = gSprites[objectEvent->spriteId].animPaused; + objectEvent->spriteAffineAnimPausedBackup = gSprites[objectEvent->spriteId].affineAnimPaused; + gSprites[objectEvent->spriteId].animPaused = TRUE; + gSprites[objectEvent->spriteId].affineAnimPaused = TRUE; + return FALSE; +} + +void FreezeObjectEvents(void) +{ + u8 i; + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + { + if (gObjectEvents[i].active && i != gPlayerAvatar.objectEventId) + FreezeObjectEvent(&gObjectEvents[i]); + } +} + +void FreezeObjectEventsExceptOne(u8 noFreeze) +{ + u8 i; + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + { + if (i != noFreeze && gObjectEvents[i].active && i != gPlayerAvatar.objectEventId) + FreezeObjectEvent(&gObjectEvents[i]); + } +} + +void UnfreezeObjectEvent(struct ObjectEvent * objectEvent) +{ + if (objectEvent->active && objectEvent->frozen) + { + objectEvent->frozen = FALSE; + gSprites[objectEvent->spriteId].animPaused = objectEvent->spriteAnimPausedBackup; + gSprites[objectEvent->spriteId].affineAnimPaused = objectEvent->spriteAffineAnimPausedBackup; + } +} + +void UnfreezeObjectEvents(void) +{ + u8 i; + for (i = 0; i < OBJECT_EVENTS_COUNT; i++) + { + if (gObjectEvents[i].active) + UnfreezeObjectEvent(&gObjectEvents[i]); + } +} + +#define tObjectEventId data[0] +#define tZCoord data[1] +#define tInvisible data[2] + +#define tDirection data[3] +#define tSpeed data[4] +#define tStepNo data[5] + +static void little_step(struct Sprite * sprite, u8 direction) +{ + sprite->pos1.x += gUnknown_83A64C8[direction].x; + sprite->pos1.y += gUnknown_83A64C8[direction].y; +} + +static void double_little_steps(struct Sprite * sprite, u8 direction) +{ + sprite->pos1.x += 2 * gUnknown_83A64C8[direction].x; + sprite->pos1.y += 2 * gUnknown_83A64C8[direction].y; +} + +static void triple_little_steps(struct Sprite * sprite, u8 direction) +{ + sprite->pos1.x += 2 * gUnknown_83A64C8[direction].x + gUnknown_83A64C8[direction].x; + sprite->pos1.y += 2 * gUnknown_83A64C8[direction].y + gUnknown_83A64C8[direction].y; +} + +static void quad_little_steps(struct Sprite * sprite, u8 direction) +{ + sprite->pos1.x += 4 * gUnknown_83A64C8[direction].x; + sprite->pos1.y += 4 * gUnknown_83A64C8[direction].y; +} + +static void oct_little_steps(struct Sprite * sprite, u8 direction) +{ + sprite->pos1.x += 8 * gUnknown_83A64C8[direction].x; + sprite->pos1.y += 8 * gUnknown_83A64C8[direction].y; +} + +void oamt_npc_ministep_reset(struct Sprite * sprite, u8 direction, u8 speed) +{ + sprite->tDirection = direction; + sprite->tSpeed = speed; + sprite->tStepNo = 0; +} + +typedef void (*SpriteStepFunc)(struct Sprite *sprite, u8 direction); + +static const SpriteStepFunc sSpeed0[] = { + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step, + little_step +}; + +static const SpriteStepFunc sSpeed1[] = { + double_little_steps, + double_little_steps, + double_little_steps, + double_little_steps, + double_little_steps, + double_little_steps, + double_little_steps, + double_little_steps +}; + +static const SpriteStepFunc sSpeed2[] = { + double_little_steps, + triple_little_steps, + triple_little_steps, + double_little_steps, + triple_little_steps, + triple_little_steps +}; + +static const SpriteStepFunc sSpeed3[] = { + quad_little_steps, + quad_little_steps, + quad_little_steps, + quad_little_steps +}; + +static const SpriteStepFunc sSpeed4[] = { + oct_little_steps, + oct_little_steps +}; + +static const SpriteStepFunc *const sSpriteStepFuncsBySpeed[] = { + sSpeed0, + sSpeed1, + sSpeed2, + sSpeed3, + sSpeed4 +}; + +static const s16 sSpriteStepCountsBySpeed[] = { + NELEMS(sSpeed0), + NELEMS(sSpeed1), + NELEMS(sSpeed2), + NELEMS(sSpeed3), + NELEMS(sSpeed4) +}; + +bool8 obj_npc_ministep(struct Sprite *sprite) +{ + if (sprite->tStepNo >= sSpriteStepCountsBySpeed[sprite->tSpeed]) + return FALSE; + + sSpriteStepFuncsBySpeed[sprite->tSpeed][sprite->tStepNo](sprite, sprite->tDirection); + + sprite->tStepNo++; + + if (sprite->tStepNo < sSpriteStepCountsBySpeed[sprite->tSpeed]) + return FALSE; + + return TRUE; +} + +#undef tStepNo +#undef tSpeed +#undef tDirection + +#define tDirection data[3] +#define tDelay data[4] +#define tStepNo data[5] + +void sub_8068BBC(struct Sprite *sprite, u8 direction) +{ + sprite->tDirection = direction; + sprite->tDelay = 0; + sprite->tStepNo = 0; +} + +bool8 sub_8068BCC(struct Sprite *sprite) +{ + if (!(sprite->tDelay & 1)) + { + little_step(sprite, sprite->tDirection); + sprite->tStepNo++; + } + + sprite->tDelay++; + + if (sprite->tStepNo > 15) + return TRUE; + else + return FALSE; +} + +void sub_8068C08(struct Sprite *sprite, u8 direction) +{ + sprite->tDirection = direction; + sprite->tDelay = 0; + sprite->tStepNo = 0; +} + +bool8 sub_8068C18(struct Sprite *sprite) +{ + if (++sprite->tDelay < 3) + { + little_step(sprite, sprite->tDirection); + sprite->tStepNo++; + } + else + sprite->tDelay = 0; + + if (sprite->tStepNo > 15) + return TRUE; + else + return FALSE; +} + +void sub_8068C58(struct Sprite *sprite, u8 direction) +{ + sprite->tDirection = direction; + sprite->tDelay = 0; + sprite->tStepNo = 0; +} + +bool8 sub_8068C68(struct Sprite *sprite) +{ + if (++sprite->tDelay > 9) + { + sprite->tDelay = 0; + little_step(sprite, sprite->tDirection); + sprite->tStepNo++; + } + + if (sprite->tStepNo > 15) + return TRUE; + else + return FALSE; +} + +void sub_8068CA4(struct Sprite *sprite, u8 direction) +{ + sprite->tDirection = direction; + sprite->tDelay = 0; + sprite->tStepNo = 0; +} + +bool8 sub_8068CB4(struct Sprite *sprite) +{ + if ((++sprite->tDelay) & 1) + { + little_step(sprite, sprite->tDirection); + sprite->tStepNo++; + } + else + { + double_little_steps(sprite, sprite->tDirection); + sprite->tStepNo += 2; + } + + if (sprite->tStepNo > 15) + return TRUE; + else + return FALSE; +} + +#undef tStepNo +#undef tDelay +#undef tDirection + +#define tDirection data[3] +#define tJumpSpeed data[4] +#define tJumpHeight data[5] +#define tStepNo data[6] + +static const s8 sJumpHeight12[] = { + -4, -6, -8, -10, -11, -12, -12, -12, -11, -10, -9, -8, -6, -4, 0, 0 +}; + +static const s8 sJumpHeight6[] = { + 0, -2, -3, -4, -5, -6, -6, -6, -5, -5, -4, -3, -2, 0, 0, 0 +}; + +static const s8 sJumpHeight10[] = { + -2, -4, -6, -8, -9, -10, -10, -10, -9, -8, -6, -5, -3, -2, 0, 0 +}; + +static const s8 *const sYDisplacementPtrs[] = { + sJumpHeight12, + sJumpHeight6, + sJumpHeight10 +}; + +static s16 GetJumpYDisplacement(s16 stepno, u8 jumpno) +{ + return sYDisplacementPtrs[jumpno][stepno]; +} + +void sub_8068D1C(struct Sprite *sprite, u8 direction, u8 speed, u8 height) +{ + sprite->tDirection = direction; + sprite->tJumpSpeed = speed; + sprite->tJumpHeight = height; + sprite->tStepNo = 0; +} + +u8 sub_8068D3C(struct Sprite *sprite) +{ + s16 duration[3] = {0x10, 0x10, 0x20}; + u8 shifts[3] = {0, 0, 1}; + u8 jumpPhase = 0; + + if (sprite->tJumpSpeed != 0) + little_step(sprite, sprite->tDirection); + + sprite->pos2.y = GetJumpYDisplacement(sprite->tStepNo >> shifts[sprite->tJumpSpeed], sprite->tJumpHeight); + + sprite->tStepNo++; + + if (sprite->tStepNo == (duration[sprite->tJumpSpeed] >> 1)) + jumpPhase = 1; + + if (sprite->tStepNo >= duration[sprite->tJumpSpeed]) + { + sprite->pos2.y = 0; + jumpPhase = -1; + } + + return jumpPhase; +} + +u8 sub_8068DC4(struct Sprite *sprite) +{ + s16 duration[3] = {0x20, 0x20, 0x40}; + u8 shifts[3] = {1, 1, 2}; + u8 jumpPhase = 0; + + if (sprite->tJumpSpeed != 0 && !(sprite->tStepNo & 1)) + little_step(sprite, sprite->tDirection); + + sprite->pos2.y = GetJumpYDisplacement(sprite->tStepNo >> shifts[sprite->tJumpSpeed], sprite->tJumpHeight); + + sprite->tStepNo++; + + if (sprite->tStepNo == (duration[sprite->tJumpSpeed] >> 1)) + jumpPhase = 1; + + if (sprite->tStepNo >= duration[sprite->tJumpSpeed]) + { + sprite->pos2.y = 0; + jumpPhase = -1; + } + + return jumpPhase; +} + +#undef tStepNo +#undef tJumpHeight +#undef tJumpSpeed +#undef tDirection + +#define tDelay data[3] + +void SetObjectEventStepTimer(struct Sprite *sprite, s16 delay) +{ + sprite->tDelay = delay; +} + +bool8 RunObjectEventStepTimer(struct Sprite *sprite) +{ + sprite->tDelay--; + + if (sprite->tDelay == 0) + return TRUE; + else + return FALSE; +} + +#undef tDelay + +void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 animNum, u8 animCmdIndex) +{ + sprite->animNum = animNum; + sprite->animPaused = FALSE; + SeekSpriteAnim(sprite, animCmdIndex); +} + +bool8 SpriteAnimEnded(struct Sprite *sprite) +{ + if (sprite->animEnded) + return TRUE; + else + return FALSE; +} + +void UpdateObjectEventSpriteVisibility(struct Sprite *sprite, bool8 invisible) +{ + u16 x, y; + s16 x2, y2; + + sprite->invisible = invisible; + + if (sprite->coordOffsetEnabled) + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY; + } + else + { + x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX; + y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY; + } + + x2 = x - (sprite->centerToCornerVecX >> 1); + y2 = y - (sprite->centerToCornerVecY >> 1); + + if ((s16)x > 255 || x2 < -16) + sprite->invisible = TRUE; + if ((s16)y > 175 || y2 < -16) + sprite->invisible = TRUE; +} + +void UpdateObjectEventSpriteSubpriorityAndVisibility(struct Sprite *sprite) +{ + DoObjectUnionRoomWarpYDisplacement(sprite); + SetObjectSubpriorityByZCoord(sprite->tZCoord, sprite, 1); + UpdateObjectEventSpriteVisibility(sprite, sprite->tInvisible); +} + +void sub_8068FD0(void) +{ + s32 i; + for (i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + if (sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility) + { + DestroySprite(sprite); + } + } +} + +#define tUnionRoomWarpAnimNo data[3] +#define tUnionRoomWarpAnimState data[4] + +static int GetObjectEventSpriteId(u8 objectEventId) +{ + int i; + for (i = 0; i < MAX_SPRITES; i++) + { + struct Sprite *sprite = &gSprites[i]; + if (sprite->inUse && sprite->callback == UpdateObjectEventSpriteSubpriorityAndVisibility && (u8)sprite->tObjectEventId == objectEventId) + { + return i; + } + } + return MAX_SPRITES; +} + +void TurnObjectEvent(u8 objectEventId, u8 direction) +{ + u8 animNum; + u8 spriteId = GetObjectEventSpriteId(objectEventId); + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + StartSpriteAnim(sprite, ObjectEventDirectionToImageAnimId(direction)); + } +} + +void RfuUnionObjectSetFacingDirection(u8 objectEventId, u8 direction) +{ + u8 animNum; + int spriteId = GetObjectEventSpriteId(objectEventId); + u16 baseBlock; + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = &gSprites[spriteId]; + const struct ObjectEventGraphicsInfo * info = GetObjectEventGraphicsInfo(direction); + baseBlock = sprite->oam.tileNum; + sprite->oam = *info->oam; + sprite->oam.tileNum = baseBlock; + sprite->oam.paletteNum = info->paletteSlot; + sprite->images = info->images; + if (info->subspriteTables == NULL) + { + sprite->subspriteTables = NULL; + sprite->subspriteTableNum = 0; + sprite->subspriteMode = SUBSPRITES_OFF; + } + else + { + SetSubspriteTables(sprite, info->subspriteTables); + sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY; + } + StartSpriteAnim(sprite, 0); + } +} + +void RfuUnionObjectToggleInvisibility(u8 objectEventId, bool32 invisible) +{ + u8 spriteId = GetObjectEventSpriteId(objectEventId); + if (spriteId != MAX_SPRITES) + { + if (invisible) + gSprites[spriteId].tInvisible = TRUE; + else + gSprites[spriteId].tInvisible = FALSE; + } +} + +bool32 RfuUnionObjectIsInvisible(u8 objectEventId) +{ + u8 spriteId = GetObjectEventSpriteId(objectEventId); + if (spriteId == MAX_SPRITES) + return FALSE; + return gSprites[spriteId].tInvisible == TRUE; +} + +void RfuUnionObjectStartWarp(u8 objectEventId, u8 animNo) +{ + u8 spriteId = GetObjectEventSpriteId(objectEventId); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].tUnionRoomWarpAnimNo = animNo; + gSprites[spriteId].tUnionRoomWarpAnimState = 0; + } +} + +static void DoObjectUnionRoomWarpYDisplacementUpwards(struct Sprite * sprite) +{ + switch (sprite->tUnionRoomWarpAnimState) + { + case 0: + sprite->pos2.y = 0; + sprite->tUnionRoomWarpAnimState++; + // fallthrough + case 1: + if ((sprite->pos2.y -= 8) == -160) + { + sprite->pos2.y = 0; + sprite->tInvisible = 1; + sprite->tUnionRoomWarpAnimNo = 0; + sprite->tUnionRoomWarpAnimState = 0; + } + break; + } +} + +static void DoObjectUnionRoomWarpYDisplacementDownwards(struct Sprite * sprite) +{ + switch (sprite->tUnionRoomWarpAnimState) + { + case 0: + sprite->pos2.y = -160; + sprite->tUnionRoomWarpAnimState++; + // fallthrough + case 1: + if ((sprite->pos2.y += 8) == 0) + { + sprite->tUnionRoomWarpAnimNo = 0; + sprite->tUnionRoomWarpAnimState = 0; + } + break; + } +} + +static void DoObjectUnionRoomWarpYDisplacement(struct Sprite * sprite) +{ + switch (sprite->tUnionRoomWarpAnimNo) + { + case 0: + break; + case 1: + DoObjectUnionRoomWarpYDisplacementDownwards(sprite); + break; + case 2: + DoObjectUnionRoomWarpYDisplacementUpwards(sprite); + break; + default: + sprite->tUnionRoomWarpAnimNo = 0; + AGB_ASSERT_EX(0, ABSPATH("evobjmv.c"), 13331); + } +} + +bool32 RfuUnionObjectIsWarping(u8 objectEventId) +{ + u8 spriteId = GetObjectEventSpriteId(objectEventId); + if (spriteId == MAX_SPRITES) + return FALSE; + if (gSprites[spriteId].tUnionRoomWarpAnimNo) + return TRUE; + else + return FALSE; +} + +#undef tUnionRoomWarpAnimState +#undef tUnionRoomWarpAnimNo +#undef tInvisible +#undef tZCoord +#undef tObjectEventId + +u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct ObjectEvent * objectEvent) +{ + ObjectEventGetLocalIdAndMap(objectEvent, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); + return FieldEffectStart(fieldEffectId); +} + +void DoShadowFieldEffect(struct ObjectEvent *objectEvent) +{ + if (!objectEvent->hasShadow) + { + objectEvent->hasShadow = TRUE; + oe_exec_and_other_stuff(FLDEFF_SHADOW, objectEvent); + } +} + +void DoRippleFieldEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite) +{ + const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId); + gFieldEffectArguments[0] = sprite->pos1.x; + gFieldEffectArguments[1] = sprite->pos1.y + (graphicsInfo->height >> 1) - 2; + gFieldEffectArguments[2] = 151; + gFieldEffectArguments[3] = 3; + FieldEffectStart(FLDEFF_RIPPLE); +} diff --git a/src/event_object_lock.c b/src/event_object_lock.c index e91642aa2..304b71c28 100644 --- a/src/event_object_lock.c +++ b/src/event_object_lock.c @@ -51,7 +51,7 @@ void sub_80695CC(u8 taskId) task->data[0] = 1; } - if (task->data[1] == 0 && !gObjectEvents[gSelectedObjectEvent].mapobj_bit_1) + if (task->data[1] == 0 && !gObjectEvents[gSelectedObjectEvent].singleMovementActive) { FreezeObjectEvent(&gObjectEvents[gSelectedObjectEvent]); task->data[1] = 1; @@ -78,7 +78,7 @@ void LockSelectedObjectEvent(void) FreezeObjectEventsExceptOne(gSelectedObjectEvent); taskId = CreateTask(sub_80695CC, 80); - if (!gObjectEvents[gSelectedObjectEvent].mapobj_bit_1) + if (!gObjectEvents[gSelectedObjectEvent].singleMovementActive) { FreezeObjectEvent(&gObjectEvents[gSelectedObjectEvent]); gTasks[taskId].data[1] = 1; @@ -93,7 +93,7 @@ void sub_80696C0(void) UnfreezeObjectEvents(); } -void sub_80696F0(void) +void UnionRoom_UnlockPlayerAndChatPartner(void) { u8 objectEventId; if (gObjectEvents[gSelectedObjectEvent].active) diff --git a/src/fame_checker.c b/src/fame_checker.c index b8f2c0055..6f60b4a44 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -33,7 +33,7 @@ #define SPRITETAG_QUESTION_MARK 1001 #define SPRITETAG_SPINNING_POKEBALL 1002 #define SPRITETAG_SCROLL_INDICATORS 1004 -#define SPRITETAG_DAISY 1006 +#define SPRITETAG_DAISY 1006 // TODO: Investigate, seems to be used for other NPCs (e.g. Fan Club Chairman) #define SPRITETAG_FUJI 1007 #define SPRITETAG_OAK 1008 #define SPRITETAG_BILL 1009 diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 0af5f462c..2e1dcd919 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -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; @@ -850,7 +850,7 @@ static void sub_807EAC4(s16 a0, s16 a1, s16 *a2, s16 *a3, s16 *a4) (*a4)++; playerSpr->pos2.x = *a2 >> 5; playerSpr->pos2.y = *a3 >> 5; - if (playerObj->mapobj_bit_7) + if (playerObj->heldMovementFinished) { ObjectEventForceSetSpecialAnim(playerObj, GetStepInPlaceDelay16AnimId(GetPlayerFacingDirection())); } diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index a552c47a2..0a3224cfa 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -5,11 +5,34 @@ #include "scanline_effect.h" #include "script.h" #include "task.h" +#include "window.h" +#include "strings.h" +#include "string_util.h" +#include "menu.h" +#include "heal_location.h" +#include "new_menu_helpers.h" +#include "event_object_movement.h" +#include "field_fadetransition.h" +#include "event_scripts.h" static const u16 sFlashLevelPixelRadii[] = { - 0x00c8, 0x0048, 0x0038, 0x0028, 0x0018, 0x0000 + 0x00c8, 0x0048, 0x0038, 0x0028, 0x0018 }; +const s32 gMaxFlashLevel = NELEMS(sFlashLevelPixelRadii) - 1; + +static const struct WindowTemplate gUnknown_83C68E4 = { + .bg = 0, + .tilemapLeft = 0, + .tilemapTop = 5, + .width = 30, + .height = 11, + .paletteNum = 15, + .baseBlock = 1, +}; + +static const u8 gUnknown_83C68EC[] = { TEXT_COLOR_TRANSPARENT, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY }; + static void Task_EnableScriptAfterMusicFade(u8 taskId); static void Task_BarnDoorWipeChild(u8 taskId); @@ -336,3 +359,103 @@ static void Task_BarnDoorWipeChild(u8 taskId) #undef DIR_WIPE_IN #undef DIR_WIPE_OUT #undef tChildOffset + +static bool8 sub_807F3A4(u8 taskId, const u8 *text, u8 x, u8 y) +{ + u8 windowId = gTasks[taskId].data[1]; + + switch (gTasks[taskId].data[2]) + { + case 0: + FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); + StringExpandPlaceholders(gStringVar4, text); + AddTextPrinterParameterized4(windowId, 2, x, y, 1, 0, gUnknown_83C68EC, 1, gStringVar4); + gTextFlags.canABSpeedUpPrint = FALSE; + gTasks[taskId].data[2] = 1; + break; + case 1: + RunTextPrinters(); + if (!IsTextPrinterActive(windowId)) + { + gTasks[taskId].data[2] = 0; + return TRUE; + } + break; + } + return FALSE; +} + +static void sub_807F45C(u8 taskId) +{ + u8 windowId; + const struct HealLocation *loc; + + switch (gTasks[taskId].data[0]) + { + case 0: + windowId = AddWindow(&gUnknown_83C68E4); + gTasks[taskId].data[1] = windowId; + Menu_LoadStdPalAt(0xF0); + FillWindowPixelBuffer(windowId, PIXEL_FILL(0)); + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); + loc = GetHealLocationPointer(1); + if (gSaveBlock1Ptr->lastHealLocation.mapGroup == loc->group + && gSaveBlock1Ptr->lastHealLocation.mapNum == loc->map + && gSaveBlock1Ptr->lastHealLocation.warpId == -1 + && gSaveBlock1Ptr->lastHealLocation.x == loc->x + && gSaveBlock1Ptr->lastHealLocation.y == loc->y) + gTasks[taskId].data[0] = 4; + else + gTasks[taskId].data[0] = 1; + break; + case 1: + if (sub_807F3A4(taskId, gUnknown_841B554, 2, 8)) + { + ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2); + ++gTasks[taskId].data[0]; + } + break; + case 4: + if (sub_807F3A4(taskId, gUnknown_841B5B6, 2, 8)) + { + ObjectEventTurn(&gObjectEvents[gPlayerAvatar.objectEventId], 2); + ++gTasks[taskId].data[0]; + } + break; + case 2: + case 5: + windowId = gTasks[taskId].data[1]; + ClearWindowTilemap(windowId); + CopyWindowToVram(windowId, 1); + RemoveWindow(windowId); + palette_bg_faded_fill_black(); + sub_807DC00(); + ++gTasks[taskId].data[0]; + break; + case 3: + if (sub_807E418() == TRUE) + { + DestroyTask(taskId); + ScriptContext1_SetupScript(EventScript_AfterWhiteOutHeal); + } + break; + case 6: + if (sub_807E418() == TRUE) + { + DestroyTask(taskId); + ScriptContext1_SetupScript(EventScript_MomHeal); + } + break; + } +} + +void sub_807F5F0(void) +{ + u8 taskId; + + ScriptContext2_Enable(); + palette_bg_faded_fill_black(); + taskId = CreateTask(sub_807F45C, 10); + gTasks[taskId].data[0] = 0; +} diff --git a/src/field_specials.c b/src/field_specials.c index 95760f42d..a1de82c0f 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -316,7 +316,7 @@ void Special_AnimatePcTurnOff() void SpawnCameraObject(void) { u8 objectEventId = SpawnSpecialObjectEventParameterized(OBJECT_EVENT_GFX_YOUNGSTER, 8, 127, gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7, 3); - gObjectEvents[objectEventId].mapobj_bit_13 = TRUE; + gObjectEvents[objectEventId].invisible = TRUE; CameraObjectSetFollowedObjectId(gObjectEvents[objectEventId].spriteId); } @@ -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; diff --git a/src/fieldmap.c b/src/fieldmap.c index db3a18e04..90682da10 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -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) diff --git a/src/help_system.c b/src/help_system.c index 4a4d927c5..bb3135260 100644 --- a/src/help_system.c +++ b/src/help_system.c @@ -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); diff --git a/src/help_system_812B1E0.c b/src/help_system_812B1E0.c index df892152a..5b634a273 100644 --- a/src/help_system_812B1E0.c +++ b/src/help_system_812B1E0.c @@ -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 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 const u8 *const gUnknown_845B080[] = { +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 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 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); } diff --git a/src/intro.c b/src/intro.c index cee1c8fec..837d4f905 100644 --- a/src/intro.c +++ b/src/intro.c @@ -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]); } } diff --git a/src/learn_move.c b/src/learn_move.c index e22922528..8a2f5781b 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -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); diff --git a/src/librfu_intr.c b/src/librfu_intr.c new file mode 100644 index 000000000..23962a937 --- /dev/null +++ b/src/librfu_intr.c @@ -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"); +} diff --git a/src/librfu_rfu.c b/src/librfu_rfu.c index dccd342f2..420fb7c9a 100644 --- a/src/librfu_rfu.c +++ b/src/librfu_rfu.c @@ -2,54 +2,54 @@ struct LLSFStruct { - u8 unk00; - u8 unk01; - u8 unk02; - u8 unk03; - u8 unk04; - u8 unk05; - u8 unk06; - u8 unk07; - u8 unk08; - u8 unk09; - u8 unk0A; - u8 unk0B; - u8 unk0C; - u16 unk0E; + u8 frameSize; + u8 recvFirstShift; + u8 connSlotFlagShift; + u8 slotStateShift; + u8 ackShift; + u8 phaseShit; + u8 nShift; + u8 recvFirstMask; + u8 connSlotFlagMask; + u8 slotStateMask; + u8 ackMask; + u8 phaseMask; + u8 nMask; + u16 framesMask; }; struct RfuLocalStruct { - u8 unk00; - u8 unk01; - u8 unk02; - u8 unk03; - u8 unk04; - u8 unk05; - u16 unk06; + u8 recvFirst; + u8 connSlotFlag; + u8 slotState; + u8 ack; + u8 phase; + u8 n; + u16 frame; }; -static void rfu_CB_defaultCallback(u8, u16); -static void rfu_CB_reset(u8, u16); -static void rfu_CB_configGameData(u8, u16); -static void rfu_CB_stopMode(u8, u16); -static void rfu_CB_startSearchChild(u8, u16); -static void rfu_CB_pollAndEndSearchChild(u8, u16); -static void rfu_CB_startSearchParent(u8, u16); -static void rfu_CB_pollSearchParent(u8, u16); -static void rfu_CB_pollConnectParent(u8, u16); -static void rfu_CB_pollConnectParent(u8, u16); -static void rfu_CB_disconnect(u8, u16); -static void rfu_CB_CHILD_pollConnectRecovery(u8, u16); -static void rfu_CB_sendData(UNUSED u8, u16); -static void rfu_CB_sendData2(UNUSED u8, u16); -static void rfu_CB_sendData3(u8, u16); -static void rfu_CB_recvData(u8, u16); -static void rfu_enableREQCallback(bool8); +static void rfu_CB_defaultCallback(u8 reqCommand, u16 reqResult); +static void rfu_CB_reset(u8 reqCommand, u16 reqResult); +static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult); +static void rfu_CB_stopMode(u8 reqCommand, u16 reqResult); +static void rfu_CB_startSearchChild(u8 reqCommand, u16 reqResult); +static void rfu_CB_pollAndEndSearchChild(u8 reqCommand, u16 reqResult); +static void rfu_CB_startSearchParent(u8 reqCommand, u16 reqResult); +static void rfu_CB_pollSearchParent(u8 reqCommand, u16 reqResult); +static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult); +static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult); +static void rfu_CB_disconnect(u8 reqCommand, u16 reqResult); +static void rfu_CB_CHILD_pollConnectRecovery(u8 reqCommand, u16 reqResult); +static void rfu_CB_sendData(UNUSED u8 reqCommand, u16 reqResult); +static void rfu_CB_sendData2(UNUSED u8 reqCommand, u16 reqResult); +static void rfu_CB_sendData3(u8 reqCommand, u16 reqResult); +static void rfu_CB_recvData(u8 reqCommand, u16 reqResult); +static void rfu_enableREQCallback(bool8 enable); static void rfu_STC_clearAPIVariables(void); static void rfu_STC_readChildList(void); static void rfu_STC_readParentCandidateList(void); -static void rfu_STC_REQ_callback(u8, u16); +static void rfu_STC_REQ_callback(u8 reqCommand, u16 reqResult); static void rfu_STC_removeLinkData(u8, u8); static void rfu_STC_fastCopy(const u8 **, u8 **, s32); static void rfu_STC_clearLinkStatus(u8); @@ -74,13 +74,38 @@ struct RfuStatic *gRfuStatic; struct RfuFixed *gRfuFixed; static const struct LLSFStruct llsf_struct[2] = { - { - 2, 14, 0, 10, 9, 5, 7, 2, - 0, 15, 1, 3, 3, 0x1f - }, { - 3, 22, 18, 14, 13, 9, 11, 3, - 15, 15, 1, 3, 3, 0x7f - } + [MODE_CHILD] = { + .frameSize = 2, + .recvFirstShift = 14, + .connSlotFlagShift = 0, + .slotStateShift = 10, + .ackShift = 9, + .phaseShit = 5, + .nShift = 7, + .recvFirstMask = 2, + .connSlotFlagMask = 0, + .slotStateMask = 15, + .ackMask = 1, + .phaseMask = 3, + .nMask = 3, + .framesMask = 0x1f + }, + [MODE_PARENT] = { + .frameSize = 3, + .recvFirstShift = 22, + .connSlotFlagShift = 18, + .slotStateShift = 14, + .ackShift = 13, + .phaseShit = 9, + .nShift = 11, + .recvFirstMask = 3, + .connSlotFlagMask = 15, + .slotStateMask = 15, + .ackMask = 1, + .phaseMask = 3, + .nMask = 3, + .framesMask = 0x7f + } }; #ifdef EMERALD @@ -91,46 +116,54 @@ static const char lib_ver[] = "RFU_V1024"; static const char str_checkMbootLL[] = "RFU-MBOOT"; -u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam) +#define COPY(src, dst, size) do { \ + const u16 *_src = (const u16 *)(src); \ + u16 *_dst = (u16 *)(dst); \ + u16 _size = (size); \ + while (_size-- != 0) \ + *_dst++ = *_src++; \ +} while (0) + +u16 rfu_initializeAPI(u32 *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam) { u16 i; u16 *dst; const u16 *src; - u16 r3; + u16 buffByteSizeMax; - // is in EWRAM? - if (((u32)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam) + // is in EWRAM? + if (((uintptr_t)APIBuffer & 0xF000000) == 0x2000000 && copyInterruptToRam) return ERR_RFU_API_BUFF_ADR; - // is not 4-byte aligned? + // is not 4-byte aligned? if ((u32)APIBuffer & 3) return ERR_RFU_API_BUFF_ADR; if (copyInterruptToRam) { // An assert/debug print may have existed before, ie // printf("%s %u < %u", "somefile.c:12345", buffByteSize, num) - // to push this into r3? - r3 = sizeof(struct RfuAPIBuffer); - if (buffByteSize < r3) + // to push this into buffByteSizeMax? + buffByteSizeMax = RFU_API_BUFF_SIZE_RAM; + if (buffByteSize < buffByteSizeMax) return ERR_RFU_API_BUFF_SIZE; } if (!copyInterruptToRam) { - r3 = 0x504; // same issue as above - if (buffByteSize < r3) + buffByteSizeMax = RFU_API_BUFF_SIZE_ROM; // same issue as above + if (buffByteSize < buffByteSizeMax) return ERR_RFU_API_BUFF_SIZE; } - gRfuLinkStatus = &APIBuffer->linkStatus; - gRfuStatic = &APIBuffer->static_; - gRfuFixed = &APIBuffer->fixed; - gRfuSlotStatusNI[0] = &APIBuffer->NI[0]; - gRfuSlotStatusUNI[0] = &APIBuffer->UNI[0]; + gRfuLinkStatus = (void *)APIBuffer + 0; + gRfuStatic = (void *)APIBuffer + 0xb4; // + sizeof(*gRfuLinkStatus) + gRfuFixed = (void *)APIBuffer + 0xdc; // + sizeof(*gRfuStatic) + gRfuSlotStatusNI[0] = (void *)APIBuffer + 0x1bc; // + sizeof(*gRfuFixed) + gRfuSlotStatusUNI[0] = (void *)APIBuffer + 0x37c; // + sizeof(*gRfuSlotStatusNI[0]) for (i = 1; i < RFU_CHILD_MAX; ++i) { gRfuSlotStatusNI[i] = &gRfuSlotStatusNI[i - 1][1]; gRfuSlotStatusUNI[i] = &gRfuSlotStatusUNI[i - 1][1]; } - // TODO: Is it possible to fix the following 2 statements? - // It's equivalent to: + // TODO: Is it possible to fix the following 2 statements? + // It's equivalent to: // gRfuFixed->STWIBuffer = &APIBuffer->intr; // STWI_init_all(&APIBuffer->intr, sioIntrTable_p, copyInterruptToRam); gRfuFixed->STWIBuffer = (struct RfuIntrStruct *)&gRfuSlotStatusUNI[3][1]; @@ -143,11 +176,21 @@ u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc gRfuSlotStatusUNI[i]->recvBuffer = NULL; gRfuSlotStatusUNI[i]->recvBufferSize = 0; } - src = (const u16 *)((u32)&rfu_STC_fastCopy & ~1); - dst = gRfuFixed->fastCopyBuffer; // rfu_REQ_changeMasterSlave is the function next to rfu_STC_fastCopy - for (r3 = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16), --r3; r3 != 0xFFFF; --r3) +#if LIBRFU_VERSION < 1028 + src = (const u16 *)((uintptr_t)&rfu_STC_fastCopy & ~1); + dst = gRfuFixed->fastCopyBuffer; + buffByteSizeMax = ((void *)rfu_REQ_changeMasterSlave - (void *)rfu_STC_fastCopy) / sizeof(u16); + while (buffByteSizeMax-- != 0) *dst++ = *src++; +#else + // register swap dst <--> buffByteSizeMax + COPY( + (const u16 *)((uintptr_t)&rfu_STC_fastCopy & ~1), + gRfuFixed->fastCopyBuffer, + 0x60 / sizeof(u16) + ); +#endif gRfuFixed->fastCopyPtr = (void *)gRfuFixed->fastCopyBuffer + 1; return 0; } @@ -155,19 +198,19 @@ u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc static void rfu_STC_clearAPIVariables(void) { u16 IMEBackup = REG_IME; - u8 i, r4; + u8 i, flags; REG_IME = 0; - r4 = gRfuStatic->flags; + flags = gRfuStatic->flags; CpuFill16(0, gRfuStatic, sizeof(struct RfuStatic)); - gRfuStatic->flags = r4 & 8; + gRfuStatic->flags = flags & 8; CpuFill16(0, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); gRfuLinkStatus->watchInterval = 4; gRfuStatic->nowWatchInterval = 0; gRfuLinkStatus->parentChild = MODE_NEUTRAL; rfu_clearAllSlot(); gRfuStatic->SCStartFlag = 0; - for (i = 0; i < NELEMS(gRfuStatic->cidBak); ++i) + for (i = 0; i < RFU_CHILD_MAX; ++i) gRfuStatic->cidBak[i] = 0; REG_IME = IMEBackup; } @@ -180,20 +223,20 @@ void rfu_REQ_PARENT_resumeRetransmitAndChange(void) u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag) { - struct RfuIntrStruct *buf; + u8 *buf; *ackFlag = 0; if (gRfuLinkStatus->parentChild != MODE_PARENT) return ERR_MODE_NOT_PARENT; buf = rfu_getSTWIRecvBuffer(); - switch (buf->rxPacketAlloc.rfuPacket8.data[0]) + switch (*buf) { case 40: case 54: - if (buf->rxPacketAlloc.rfuPacket8.data[1] == 0) + if (buf[1] == 0) *ackFlag = gRfuLinkStatus->connSlotFlag; else - *ackFlag = buf->rxPacketAlloc.rfuPacket8.data[4]; + *ackFlag = buf[4]; return 0; default: return ERR_REQ_CMD_ID; @@ -205,9 +248,9 @@ void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p) STWI_init_timer(timerIntrTable_p, timerNo); } -struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void) +u8 *rfu_getSTWIRecvBuffer(void) { - return gRfuFixed->STWIBuffer; + return (u8 *)gRfuFixed->STWIBuffer; } void rfu_setMSCCallback(void (*callback)(u16 reqCommandId)) @@ -229,26 +272,26 @@ static void rfu_enableREQCallback(bool8 enable) gRfuStatic->flags &= 0xF7; } -static void rfu_STC_REQ_callback(u8 r5, u16 reqResult) +static void rfu_STC_REQ_callback(u8 reqCommand, u16 reqResult) { STWI_set_Callback_M(rfu_CB_defaultCallback); gRfuStatic->reqResult = reqResult; if (gRfuStatic->flags & 8) - gRfuFixed->reqCallback(r5, reqResult); + gRfuFixed->reqCallback(reqCommand, reqResult); } -static void rfu_CB_defaultCallback(u8 r0, u16 reqResult) +static void rfu_CB_defaultCallback(u8 reqCommand, u16 reqResult) { - s32 r5; + s32 bmSlotFlags; u8 i; - if (r0 == 0xFF) + if (reqCommand == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ) { if (gRfuStatic->flags & 8) - gRfuFixed->reqCallback(r0, reqResult); - r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + gRfuFixed->reqCallback(reqCommand, reqResult); + bmSlotFlags = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; for (i = 0; i < RFU_CHILD_MAX; ++i) - if ((r5 >> i) & 1) + if ((bmSlotFlags >> i) & 1) rfu_STC_removeLinkData(i, 1); gRfuLinkStatus->parentChild = MODE_NEUTRAL; } @@ -277,25 +320,39 @@ u16 rfu_getRFUStatus(u8 *rfuState) return 0; } +/* + * RFU Multiboot images are loaded into IWRAM + * struct RfuMbootLL + * { + * struct RfuLinkStatus status; + * u8 filler_B4[0x3C]; + * char name[10]; + * u16 checksum; + * } + * Returns 1 if the packet to inherit is malformed. + */ u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void) { const char *s1 = str_checkMbootLL; char *s2 = (char *)0x30000F0; u16 checksum; - u16 *r2; + u16 *mb_buff_iwram_p; u8 i; + // if (strcmp(s1, s2) != 0) return 1; while (*s1 != '\0') if (*s1++ != *s2++) return 1; - r2 = (u16 *)0x3000000; + mb_buff_iwram_p = (u16 *)0x3000000; + + // The size of struct RfuLinkStatus is 180 checksum = 0; - for (i = 0; i < 90; ++i) - checksum += *r2++; + for (i = 0; i < 180/2; ++i) + checksum += *mb_buff_iwram_p++; if (checksum != *(u16 *)0x30000FA) return 1; CpuCopy16((u16 *)0x3000000, gRfuLinkStatus, sizeof(struct RfuLinkStatus)); - gRfuStatic->flags |= 0x80; + gRfuStatic->flags |= 0x80; // mboot return 0; } @@ -305,14 +362,14 @@ void rfu_REQ_stopMode(void) if (REG_IME == 0) { - rfu_STC_REQ_callback(61, 6); + rfu_STC_REQ_callback(ID_STOP_MODE_REQ, 6); gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE; } else { AgbRFU_SoftReset(); rfu_STC_clearAPIVariables(); - if (AgbRFU_checkID(8) == 0x8001) + if (AgbRFU_checkID(8) == RFU_ID) { timerReg = ®_TMCNT(gSTWIStatus->timerSelect); *timerReg = 0; @@ -326,29 +383,29 @@ void rfu_REQ_stopMode(void) else { REG_SIOCNT = SIO_MULTI_MODE; - rfu_STC_REQ_callback(61, 0); + rfu_STC_REQ_callback(ID_STOP_MODE_REQ, 0); } } } -static void rfu_CB_stopMode(u8 a1, u16 reqResult) +static void rfu_CB_stopMode(u8 reqCommand, u16 reqResult) { if (reqResult == 0) REG_SIOCNT = SIO_MULTI_MODE; - rfu_STC_REQ_callback(a1, reqResult); + rfu_STC_REQ_callback(reqCommand, reqResult); } u32 rfu_REQBN_softReset_and_checkID(void) { - u32 r2; + u32 id; if (REG_IME == 0) return ERR_ID_CHECK_IME_DISABLE; AgbRFU_SoftReset(); rfu_STC_clearAPIVariables(); - if ((r2 = AgbRFU_checkID(30)) == 0) + if ((id = AgbRFU_checkID(30)) == 0) REG_SIOCNT = SIO_MULTI_MODE; - return r2; + return id; } void rfu_REQ_reset(void) @@ -357,11 +414,11 @@ void rfu_REQ_reset(void) STWI_send_ResetREQ(); } -static void rfu_CB_reset(u8 a1, u16 reqResult) +static void rfu_CB_reset(u8 reqCommand, u16 reqResult) { if (reqResult == 0) rfu_STC_clearAPIVariables(); - rfu_STC_REQ_callback(a1, reqResult); + rfu_STC_REQ_callback(reqCommand, reqResult); } void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer) @@ -370,59 +427,59 @@ void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer) STWI_send_SystemConfigREQ((availSlotFlag & AVAIL_SLOT1) | 0x3C, maxMFrame, mcTimer); if (mcTimer == 0) { - gRfuStatic->unk_1a = 1; + gRfuStatic->linkEmergencyLimit = 1; } else { u16 IMEBackup = REG_IME; REG_IME = 0; - gRfuStatic->unk_1a = Div(600, mcTimer); + gRfuStatic->linkEmergencyLimit = Div(600, mcTimer); REG_IME = IMEBackup; } } void rfu_REQ_configGameData(u8 mbootFlag, u16 serialNo, const u8 *gname, const u8 *uname) { - u8 sp[16]; + u8 packet[16]; u8 i; - u8 r3; + u8 check_sum; const u8 *gnameBackup = gname; const u8 *unameBackup; - sp[0] = serialNo; - sp[1] = serialNo >> 8; + packet[0] = serialNo; + packet[1] = serialNo >> 8; if (mbootFlag != 0) - sp[1] = (serialNo >> 8) | 0x80; + packet[1] = (serialNo >> 8) | 0x80; for (i = 2; i < 15; ++i) - sp[i] = *gname++; - r3 = 0; + packet[i] = *gname++; + check_sum = 0; unameBackup = uname; for (i = 0; i < 8; ++i) { - r3 += *unameBackup++; - r3 += *gnameBackup++; + check_sum += *unameBackup++; + check_sum += *gnameBackup++; } - sp[15] = ~r3; + packet[15] = ~check_sum; if (mbootFlag != 0) - sp[14] = 0; + packet[14] = 0; STWI_set_Callback_M(rfu_CB_configGameData); - STWI_send_GameConfigREQ(sp, uname); + STWI_send_GameConfigREQ(packet, uname); } -static void rfu_CB_configGameData(u8 ip, u16 r7) +static void rfu_CB_configGameData(u8 reqCommand, u16 reqResult) { - s32 r2, r3; - u8 *r4; + s32 serialNo; + u8 *gname_uname_p; u8 i; - u8 *r1; + u8 *packet_p; - if (r7 == 0) + if (reqResult == 0) { - r1 = gSTWIStatus->txPacket->rfuPacket8.data; - r2 = gRfuLinkStatus->my.serialNo = r1[4]; - gRfuLinkStatus->my.serialNo = (r1[5] << 8) | r2; - r4 = &r1[6]; + packet_p = gSTWIStatus->txPacket->rfuPacket8.data; + serialNo = gRfuLinkStatus->my.serialNo = packet_p[4]; + gRfuLinkStatus->my.serialNo = (packet_p[5] << 8) | serialNo; + gname_uname_p = &packet_p[6]; if (gRfuLinkStatus->my.serialNo & 0x8000) { gRfuLinkStatus->my.serialNo = gRfuLinkStatus->my.serialNo ^ 0x8000; @@ -433,47 +490,54 @@ static void rfu_CB_configGameData(u8 ip, u16 r7) gRfuLinkStatus->my.mbootFlag = 0; } for (i = 0; i < RFU_GAME_NAME_LENGTH; ++i) - gRfuLinkStatus->my.gname[i] = *r4++; - ++r4; + gRfuLinkStatus->my.gname[i] = *gname_uname_p++; + ++gname_uname_p; for (i = 0; i < RFU_USER_NAME_LENGTH; ++i) - gRfuLinkStatus->my.uname[i] = *r4++; + gRfuLinkStatus->my.uname[i] = *gname_uname_p++; } - rfu_STC_REQ_callback(ip, r7); + rfu_STC_REQ_callback(reqCommand, reqResult); } void rfu_REQ_startSearchChild(void) { - u16 r1; - + u16 result; +#if LIBRFU_VERSION >= 1028 + u16 i; + for (i = 0; i < RFU_CHILD_MAX; i++) + { + gRfuStatic->lsFixedCount[i] = 0; + } +#endif + STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_send_SystemStatusREQ(); - r1 = STWI_poll_CommandEnd(); - if (r1 == 0) + result = STWI_poll_CommandEnd(); + if (result == 0) { if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) - rfu_STC_clearLinkStatus(1); + rfu_STC_clearLinkStatus(MODE_PARENT); } else { - rfu_STC_REQ_callback(25, r1); + rfu_STC_REQ_callback(ID_SC_START_REQ, result); } STWI_set_Callback_M(rfu_CB_startSearchChild); STWI_send_SC_StartREQ(); } -static void rfu_CB_startSearchChild(u8 r3, u16 reqResult) +static void rfu_CB_startSearchChild(u8 reqCommand, u16 reqResult) { if (reqResult == 0) gRfuStatic->SCStartFlag = 1; - rfu_STC_REQ_callback(r3, reqResult); + rfu_STC_REQ_callback(reqCommand, reqResult); } -static void rfu_STC_clearLinkStatus(u8 r4) +static void rfu_STC_clearLinkStatus(u8 parentChild) { u8 i; - + rfu_clearAllSlot(); - if (r4 != 0) + if (parentChild != MODE_CHILD) { CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); gRfuLinkStatus->findParentCount = 0; @@ -498,11 +562,11 @@ void rfu_REQ_endSearchChild(void) STWI_send_SC_EndREQ(); } -static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) +static void rfu_CB_pollAndEndSearchChild(u8 reqCommand, u16 reqResult) { if (reqResult == 0) rfu_STC_readChildList(); - if (r4 == 26) + if (reqCommand == ID_SC_POLL_REQ) { if (gRfuLinkStatus->my.id == 0) { @@ -512,60 +576,65 @@ static void rfu_CB_pollAndEndSearchChild(u8 r4, u16 reqResult) gRfuLinkStatus->my.id = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; } } - else if (r4 == 27) + else if (reqCommand == ID_SC_END_REQ) { if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) gRfuLinkStatus->my.id = 0; gRfuStatic->SCStartFlag = 0; } - rfu_STC_REQ_callback(r4, reqResult); + rfu_STC_REQ_callback(reqCommand, reqResult); } static void rfu_STC_readChildList(void) { - u32 r5; - u8 r8 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]; - u8 *r4; + u32 stwiParam; + u8 numSlots = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]; + u8 *data_p; u8 i; - u8 sp[4]; - u8 r2; + u8 true_slots[RFU_CHILD_MAX]; + u8 bm_slot_id; + +#if LIBRFU_VERSION >= 1028 +//#if 1 + // TODO: decompile this +#endif - if (r8 != 0) + if (numSlots != 0) { - r5 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + stwiParam = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_send_LinkStatusREQ(); if (STWI_poll_CommandEnd() == 0) { - r4 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; - for (i = 0; i < NELEMS(sp); ++i) - sp[i] = *r4++; + data_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + for (i = 0; i < RFU_CHILD_MAX; ++i) + true_slots[i] = *data_p++; } - gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = r5; + gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = stwiParam; } - for (r4 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; - r8 != 0; - r4 += 4) + for (data_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + numSlots != 0; + data_p += 4) { - r2 = r4[2]; - if (r2 < RFU_CHILD_MAX && !((gRfuLinkStatus->connSlotFlag >> r2) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> r2) & 1)) + bm_slot_id = data_p[2]; + if (bm_slot_id < RFU_CHILD_MAX && !((gRfuLinkStatus->connSlotFlag >> bm_slot_id) & 1) && !((gRfuLinkStatus->linkLossSlotFlag >> bm_slot_id) & 1)) { - if (sp[r2] != 0) - ++gRfuStatic->lsFixedCount[r2]; - if (gRfuStatic->lsFixedCount[r2] >= 4) + if (true_slots[bm_slot_id] != 0) + ++gRfuStatic->lsFixedCount[bm_slot_id]; + if (gRfuStatic->lsFixedCount[bm_slot_id] >= 4) { - gRfuStatic->lsFixedCount[r2] = 0; - gRfuLinkStatus->strength[r2] = 0xFF; - gRfuLinkStatus->connSlotFlag |= 1 << r2; + gRfuStatic->lsFixedCount[bm_slot_id] = 0; + gRfuLinkStatus->strength[bm_slot_id] = 255; + gRfuLinkStatus->connSlotFlag |= 1 << bm_slot_id; ++gRfuLinkStatus->connCount; - gRfuLinkStatus->partner[r2].id = *(u16 *)r4; - gRfuLinkStatus->partner[r2].slot = r2; + gRfuLinkStatus->partner[bm_slot_id].id = *(u16 *)data_p; + gRfuLinkStatus->partner[bm_slot_id].slot = bm_slot_id; gRfuLinkStatus->parentChild = MODE_PARENT; gRfuStatic->flags &= 0x7F; - gRfuStatic->cidBak[r2] = gRfuLinkStatus->partner[r2].id; + gRfuStatic->cidBak[bm_slot_id] = gRfuLinkStatus->partner[bm_slot_id].id; } } - --r8; + --numSlots; } } @@ -575,11 +644,11 @@ void rfu_REQ_startSearchParent(void) STWI_send_SP_StartREQ(); } -static void rfu_CB_startSearchParent(u8 r5, u16 reqResult) +static void rfu_CB_startSearchParent(u8 reqCommand, u16 reqResult) { if (reqResult == 0) - rfu_STC_clearLinkStatus(0); - rfu_STC_REQ_callback(r5, reqResult); + rfu_STC_clearLinkStatus(MODE_CHILD); + rfu_STC_REQ_callback(reqCommand, reqResult); } void rfu_REQ_pollSearchParent(void) @@ -588,11 +657,11 @@ void rfu_REQ_pollSearchParent(void) STWI_send_SP_PollingREQ(); } -static void rfu_CB_pollSearchParent(u8 r5, u16 reqResult) +static void rfu_CB_pollSearchParent(u8 reqCommand, u16 reqResult) { if (reqResult == 0) rfu_STC_readParentCandidateList(); - rfu_STC_REQ_callback(r5, reqResult); + rfu_STC_REQ_callback(reqCommand, reqResult); } void rfu_REQ_endSearchParent(void) @@ -603,47 +672,47 @@ void rfu_REQ_endSearchParent(void) static void rfu_STC_readParentCandidateList(void) { - u8 r7, r6, r5, r4, r3; - u8 *r1, *r2; - struct RfuTgtData *r4_; + u8 numSlots, i, check_sum, my_check_sum, j; + u8 *uname_p, *packet_p; + struct RfuTgtData *target; CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); - r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0]; - r7 = r2[1]; - r2 += 4; + packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0]; + numSlots = packet_p[1]; + packet_p += 4; gRfuLinkStatus->findParentCount = 0; - for (r6 = 0; r6 < 4 && r7 != 0; ++r6) - { - r7 -= 7; - r1 = r2 + 6; - r2 += 19; - r5 = ~*r2; - ++r2; - r4 = 0; - for (r3 = 0; r3 < 8; ++r3) + for (i = 0; i < RFU_CHILD_MAX && numSlots != 0; ++i) + { + numSlots -= 7; + uname_p = packet_p + 6; + packet_p += 19; + check_sum = ~*packet_p; + ++packet_p; + my_check_sum = 0; + for (j = 0; j < 8; ++j) { - r4 += *r2++; - r4 += *r1++; + my_check_sum += *packet_p++; + my_check_sum += *uname_p++; } - if (r4 == r5) + if (my_check_sum == check_sum) { - r2 -= 28; - r4_ = &gRfuLinkStatus->partner[gRfuLinkStatus->findParentCount]; - r4_->id = *(u16 *)r2; - r2 += 2; - r4_->slot = *r2; - r2 += 2; - r4_->serialNo = *(u16 *)r2 & 0x7FFF; - if (*(u16 *)r2 & 0x8000) - r4_->mbootFlag = 1; + packet_p -= 28; + target = &gRfuLinkStatus->partner[gRfuLinkStatus->findParentCount]; + target->id = *(u16 *)packet_p; + packet_p += 2; + target->slot = *packet_p; + packet_p += 2; + target->serialNo = *(u16 *)packet_p & 0x7FFF; + if (*(u16 *)packet_p & 0x8000) + target->mbootFlag = 1; else - r4_->mbootFlag = 0; - r2 += 2; - for (r3 = 0; r3 < RFU_GAME_NAME_LENGTH; ++r3) - r4_->gname[r3] = *r2++; - ++r2; - for (r3 = 0; r3 < RFU_USER_NAME_LENGTH; ++r3) - r4_->uname[r3] = *r2++; + target->mbootFlag = 0; + packet_p += 2; + for (j = 0; j < RFU_GAME_NAME_LENGTH; ++j) + target->gname[j] = *packet_p++; + ++packet_p; + for (j = 0; j < RFU_USER_NAME_LENGTH; ++j) + target->uname[j] = *packet_p++; ++gRfuLinkStatus->findParentCount; } } @@ -651,13 +720,13 @@ static void rfu_STC_readParentCandidateList(void) void rfu_REQ_startConnectParent(u16 pid) { - u16 r3 = 0; + u16 result = 0; u8 i; for (i = 0; i < RFU_CHILD_MAX && gRfuLinkStatus->partner[i].id != pid; ++i) ; - if (i == 4) - r3 = 256; - if (r3 == 0) + if (i == RFU_CHILD_MAX) + result = ERR_PID_NOT_FOUND; + if (result == 0) { gRfuStatic->tryPid = pid; STWI_set_Callback_M(rfu_STC_REQ_callback); @@ -665,7 +734,7 @@ void rfu_REQ_startConnectParent(u16 pid) } else { - rfu_STC_REQ_callback(31, r3); + rfu_STC_REQ_callback(ID_CP_START_REQ, result); } } @@ -675,70 +744,69 @@ void rfu_REQ_pollConnectParent(void) STWI_send_CP_PollingREQ(); } -static void rfu_CB_pollConnectParent(u8 sp24, u16 sp28) +static void rfu_CB_pollConnectParent(u8 reqCommand, u16 reqResult) { u16 id; u8 slot; - u8 r2, r5; - struct RfuTgtData *r9; - struct RfuTgtData sp; + u8 bm_slot_flag, i; + struct RfuTgtData *target_p; + struct RfuTgtData target_local; - if (sp28 == 0) + if (reqResult == 0) { id = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; slot = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[6]; if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) { - r2 = 1 << slot; - if (!(r2 & gRfuLinkStatus->connSlotFlag)) + bm_slot_flag = 1 << slot; + if (!(bm_slot_flag & gRfuLinkStatus->connSlotFlag)) { - gRfuLinkStatus->connSlotFlag |= r2; - gRfuLinkStatus->linkLossSlotFlag &= ~r2; + gRfuLinkStatus->connSlotFlag |= bm_slot_flag; + gRfuLinkStatus->linkLossSlotFlag &= ~bm_slot_flag; gRfuLinkStatus->my.id = id; ++gRfuLinkStatus->connCount; gRfuLinkStatus->parentChild = MODE_CHILD; gRfuStatic->flags |= 0x80; - for (r5 = 0; r5 < RFU_CHILD_MAX; ++r5) + for (i = 0; i < RFU_CHILD_MAX; ++i) { - if (gRfuLinkStatus->partner[r5].id == gRfuStatic->tryPid) + if (gRfuLinkStatus->partner[i].id == gRfuStatic->tryPid) { if (gRfuLinkStatus->findParentCount != 0) { - r9 = &sp; - CpuCopy16(&gRfuLinkStatus->partner[r5], &sp, sizeof(struct RfuTgtData)); + target_p = &target_local; + CpuCopy16(&gRfuLinkStatus->partner[i], &target_local, sizeof(struct RfuTgtData)); CpuFill16(0, gRfuLinkStatus->partner, sizeof(gRfuLinkStatus->partner)); gRfuLinkStatus->findParentCount = 0; } else { - r9 = &gRfuLinkStatus->partner[r5]; + target_p = &gRfuLinkStatus->partner[i]; } break; } } - if (r5 < RFU_CHILD_MAX) + if (i < RFU_CHILD_MAX) { - CpuCopy16(r9, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData)); + CpuCopy16(target_p, &gRfuLinkStatus->partner[slot], sizeof(struct RfuTgtData)); gRfuLinkStatus->partner[slot].slot = slot; } } } } - rfu_STC_REQ_callback(sp24, sp28); + rfu_STC_REQ_callback(reqCommand, reqResult); } u16 rfu_getConnectParentStatus(u8 *status, u8 *connectSlotNo) { - u8 r0, *r2; + u8 *packet_p; *status = 0xFF; - r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; - r0 = r2[0] + 96; - if (r0 <= 1) + packet_p = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; + if (packet_p[0] == 0xa0 || packet_p[0] == 0xa1) { - r2 += 6; - *connectSlotNo = r2[0]; - *status = r2[1]; + packet_p += 6; + *connectSlotNo = packet_p[0]; + *status = packet_p[1]; return 0; } return ERR_REQ_CMD_ID; @@ -754,28 +822,28 @@ void rfu_REQ_endConnectParent(void) u16 rfu_syncVBlank(void) { - u8 r3, r4; - s32 r5; + u8 masterSlave, i; + s32 bmSlotFlag; rfu_NI_checkCommFailCounter(); if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) return 0; if (gRfuStatic->nowWatchInterval != 0) --gRfuStatic->nowWatchInterval; - r3 = rfu_getMasterSlave(); + masterSlave = rfu_getMasterSlave(); if (!(gRfuStatic->flags & 2)) { - if (r3 == 0) + if (masterSlave == AGB_CLK_SLAVE) { gRfuStatic->flags |= 4; gRfuStatic->watchdogTimer = 360; } } - else if (r3 != 0) + else if (masterSlave != AGB_CLK_SLAVE) { gRfuStatic->flags &= 0xFB; } - if (r3 != 0) + if (masterSlave != AGB_CLK_SLAVE) gRfuStatic->flags &= 0xFD; else gRfuStatic->flags |= 2; @@ -784,10 +852,10 @@ u16 rfu_syncVBlank(void) if (gRfuStatic->watchdogTimer == 0) { gRfuStatic->flags &= 0xFB; - r5 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; - for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) - if ((r5 >> r4) & 1) - rfu_STC_removeLinkData(r4, 1); + bmSlotFlag = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + for (i = 0; i < RFU_CHILD_MAX; ++i) + if ((bmSlotFlag >> i) & 1) + rfu_STC_removeLinkData(i, 1); gRfuLinkStatus->parentChild = MODE_NEUTRAL; return 1; } @@ -797,13 +865,13 @@ u16 rfu_syncVBlank(void) u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason, u8 *parentBmLinkRecoverySlot) { - u8 sp08 = 0; - u8 sp0C = 0; + u8 reasonMaybe = 0; + u8 reqResult = 0; u8 i; - s32 sp10, sp14; - u8 *r2; - u8 r9, r6, r3, connSlotFlag, r0; - + s32 stwiCommand, stwiParam; + u8 *packet_p; + u8 to_req_disconnect, newLinkLossFlag, num_packets, connSlotFlag, to_disconnect; + *bmLinkLossSlot = 0; *linkLossReason = REASON_DISCONNECTED; *parentBmLinkRecoverySlot = 0; @@ -814,25 +882,25 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason if (gRfuStatic->nowWatchInterval == 0) { gRfuStatic->nowWatchInterval = gRfuLinkStatus->watchInterval; - sp08 = 1; + reasonMaybe = 1; } - if ((u8)reqCommandId == 41) + if ((u8)reqCommandId == ID_DISCONNECTED_AND_CHANGE_REQ) { - u8 *r1 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; - - *bmLinkLossSlot = r1[4]; - *linkLossReason = r1[5]; + u8 *packet_p_2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; + + *bmLinkLossSlot = packet_p_2[4]; + *linkLossReason = packet_p_2[5]; if (*linkLossReason == REASON_LINK_LOSS) *bmLinkLossSlot = gRfuLinkStatus->connSlotFlag; - sp08 = 2; + reasonMaybe = 2; } else { - if (reqCommandId == 310) + if (reqCommandId == 0x0136) { - r6 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5]; - r6 ^= gRfuLinkStatus->connSlotFlag; - *bmLinkLossSlot = r6 & gRfuLinkStatus->connSlotFlag; + newLinkLossFlag = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[5]; + newLinkLossFlag ^= gRfuLinkStatus->connSlotFlag; + *bmLinkLossSlot = newLinkLossFlag & gRfuLinkStatus->connSlotFlag; *linkLossReason = REASON_LINK_LOSS; for (i = 0; i < RFU_CHILD_MAX; ++i) { @@ -843,33 +911,33 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason } } } - if (sp08 == 0) + if (reasonMaybe == 0) return 0; } - sp10 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command; - sp14 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; + stwiCommand = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command; + stwiParam = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0]; STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_send_LinkStatusREQ(); - sp0C = STWI_poll_CommandEnd(); - if (sp0C == 0) + reqResult = STWI_poll_CommandEnd(); + if (reqResult == 0) { - r2 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; + packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; for (i = 0; i < RFU_CHILD_MAX; ++i) - gRfuLinkStatus->strength[i] = *r2++; - r9 = 0; + gRfuLinkStatus->strength[i] = *packet_p++; + to_req_disconnect = 0; i = 0; } else { - rfu_STC_REQ_callback(17, sp0C); - return sp0C; + rfu_STC_REQ_callback(ID_LINK_STATUS_REQ, reqResult); + return reqResult; } for (; i < RFU_CHILD_MAX; ++i) { - r6 = 1 << i; - if (sp0C == 0) + newLinkLossFlag = 1 << i; + if (reqResult == 0) { - if (sp08 == 1 && (gRfuLinkStatus->connSlotFlag & r6)) + if (reasonMaybe == 1 && (gRfuLinkStatus->connSlotFlag & newLinkLossFlag)) { if (gRfuLinkStatus->strength[i] == 0) { @@ -878,8 +946,8 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason ++gRfuStatic->linkEmergencyFlag[i]; if (gRfuStatic->linkEmergencyFlag[i] > 3) { - *bmLinkLossSlot |= r6; - *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? + *bmLinkLossSlot |= newLinkLossFlag; + *linkLossReason = REASON_LINK_LOSS; } } else @@ -889,18 +957,18 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason { if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) { - *bmLinkLossSlot |= r6; - *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? + *bmLinkLossSlot |= newLinkLossFlag; + *linkLossReason = REASON_LINK_LOSS; } else { - if (++gRfuStatic->linkEmergencyFlag[i] > gRfuStatic->unk_1a) + if (++gRfuStatic->linkEmergencyFlag[i] > gRfuStatic->linkEmergencyLimit) { gRfuStatic->linkEmergencyFlag[i] = 0; STWI_send_DisconnectREQ(gRfuLinkStatus->connSlotFlag); STWI_poll_CommandEnd(); - *bmLinkLossSlot |= r6; - *linkLossReason = sp08; // why not directly use REASON_LINK_LOSS? + *bmLinkLossSlot |= newLinkLossFlag; + *linkLossReason = REASON_LINK_LOSS; } } } @@ -908,18 +976,18 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason } else { - gRfuStatic->linkEmergencyFlag[i] = sp0C; // why not directly use 0? + gRfuStatic->linkEmergencyFlag[i] = 0; } } if (gRfuLinkStatus->parentChild == MODE_PARENT && gRfuLinkStatus->strength[i] != 0) { - if (r6 & gRfuLinkStatus->linkLossSlotFlag) + if (newLinkLossFlag & gRfuLinkStatus->linkLossSlotFlag) { if (gRfuLinkStatus->strength[i] > 10) { - *parentBmLinkRecoverySlot |= r6; - gRfuLinkStatus->connSlotFlag |= r6; - gRfuLinkStatus->linkLossSlotFlag &= ~r6; + *parentBmLinkRecoverySlot |= newLinkLossFlag; + gRfuLinkStatus->connSlotFlag |= newLinkLossFlag; + gRfuLinkStatus->linkLossSlotFlag &= ~newLinkLossFlag; ++gRfuLinkStatus->connCount; gRfuStatic->linkEmergencyFlag[i] = 0; } @@ -930,19 +998,19 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason } else { - if (!((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & r6)) + if (!((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & newLinkLossFlag)) { STWI_send_SlotStatusREQ(); STWI_poll_CommandEnd(); - r2 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; - r3 = r2[1] - 1; - for (r2 += 8; r3 != 0; r2 += 4, --r3) + packet_p = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data; + num_packets = packet_p[1] - 1; + for (packet_p += 8; num_packets != 0; packet_p += 4, --num_packets) { - u16 r4 = *(u16 *)r2; + u16 cid = *(u16 *)packet_p; - if (r2[2] == i && r4 == gRfuStatic->cidBak[i]) + if (packet_p[2] == i && cid == gRfuStatic->cidBak[i]) { - r9 |= 1 << i; + to_req_disconnect |= 1 << i; break; } } @@ -951,46 +1019,46 @@ u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason } } connSlotFlag = gRfuLinkStatus->connSlotFlag; - r0 = *bmLinkLossSlot; - r0 &= connSlotFlag; - if (r6 & r0) + to_disconnect = *bmLinkLossSlot; + to_disconnect &= connSlotFlag; + if (newLinkLossFlag & to_disconnect) rfu_STC_removeLinkData(i, 0); } - if (r9 != 0) + if (to_req_disconnect != 0) { - STWI_send_DisconnectREQ(r9); + STWI_send_DisconnectREQ(to_req_disconnect); STWI_poll_CommandEnd(); } // equivalent to: - // gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command = sp10; - *(u32 *)gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data = sp10; - gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = sp14; + // gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.command = stwiCommand; + *(u32 *)gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data = stwiCommand; + gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] = stwiParam; return 0; } -static void rfu_STC_removeLinkData(u8 r7, u8 r12) +static void rfu_STC_removeLinkData(u8 bmConnectedPartnerId, u8 bmDisconnect) { - u8 r5 = 1 << r7; - s32 r6; + u8 bmLinkLossFlag = 1 << bmConnectedPartnerId; + s32 bmLinkRetainedFlag; - if ((gRfuLinkStatus->connSlotFlag & r5) && gRfuLinkStatus->connCount != 0) + if ((gRfuLinkStatus->connSlotFlag & bmLinkLossFlag) && gRfuLinkStatus->connCount != 0) --gRfuLinkStatus->connCount; - gRfuLinkStatus->connSlotFlag &= r6 = ~r5; - gRfuLinkStatus->linkLossSlotFlag |= r5; - if ((*(u32 *)gRfuLinkStatus & 0xFF00FF) == 0) + gRfuLinkStatus->connSlotFlag &= bmLinkRetainedFlag = ~bmLinkLossFlag; + gRfuLinkStatus->linkLossSlotFlag |= bmLinkLossFlag; + if (gRfuLinkStatus->parentChild == MODE_CHILD && gRfuLinkStatus->connSlotFlag == 0) gRfuLinkStatus->parentChild = MODE_NEUTRAL; - if (r12 != 0) + if (bmDisconnect) { - CpuFill16(0, &gRfuLinkStatus->partner[r7], sizeof(struct RfuTgtData)); - gRfuLinkStatus->linkLossSlotFlag &= r6; - gRfuLinkStatus->getNameFlag &= r6; - gRfuLinkStatus->strength[r7] = 0; + CpuFill16(0, &gRfuLinkStatus->partner[bmConnectedPartnerId], sizeof(struct RfuTgtData)); + gRfuLinkStatus->linkLossSlotFlag &= bmLinkRetainedFlag; + gRfuLinkStatus->getNameFlag &= bmLinkRetainedFlag; + gRfuLinkStatus->strength[bmConnectedPartnerId] = 0; } } void rfu_REQ_disconnect(u8 bmDisconnectSlot) { - u16 r1; + u16 result; if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmDisconnectSlot) { @@ -1003,9 +1071,9 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot) else if (gRfuStatic->SCStartFlag && (STWI_set_Callback_M(rfu_CB_defaultCallback), STWI_send_SC_EndREQ(), - (r1 = STWI_poll_CommandEnd()) != 0)) + (result = STWI_poll_CommandEnd()) != 0)) { - rfu_STC_REQ_callback(27, r1); + rfu_STC_REQ_callback(ID_SC_END_REQ, result); } else { @@ -1015,38 +1083,38 @@ void rfu_REQ_disconnect(u8 bmDisconnectSlot) } } -static void rfu_CB_disconnect(u8 r6, u16 r5) +static void rfu_CB_disconnect(u8 reqCommand, u16 reqResult) { - u8 r4, r0; + u8 i, bm_slot_flag; - if (r5 == 3 && gRfuLinkStatus->parentChild == MODE_CHILD) + if (reqResult == 3 && gRfuLinkStatus->parentChild == MODE_CHILD) { STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_send_SystemStatusREQ(); if (STWI_poll_CommandEnd() == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[7] == 0) - r5 = 0; + reqResult = 0; } gRfuStatic->recoveryBmSlot &= gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8] = gRfuStatic->recoveryBmSlot; - if (r5 == 0) + if (reqResult == 0) { - for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) + for (i = 0; i < RFU_CHILD_MAX; ++i) { - r0 = 1 << r4; - if (r0 & gRfuStatic->recoveryBmSlot) - rfu_STC_removeLinkData(r4, 1); + bm_slot_flag = 1 << i; + if (bm_slot_flag & gRfuStatic->recoveryBmSlot) + rfu_STC_removeLinkData(i, 1); } } if ((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) == 0) gRfuLinkStatus->parentChild = MODE_NEUTRAL; - rfu_STC_REQ_callback(r6, r5); + rfu_STC_REQ_callback(reqCommand, reqResult); if (gRfuStatic->SCStartFlag) { STWI_set_Callback_M(rfu_CB_defaultCallback); STWI_send_SC_StartREQ(); - r5 = STWI_poll_CommandEnd(); - if (r5 != 0) - rfu_STC_REQ_callback(25, r5); + reqResult = STWI_poll_CommandEnd(); + if (reqResult != 0) + rfu_STC_REQ_callback(ID_SC_START_REQ, reqResult); } } @@ -1068,38 +1136,35 @@ void rfu_REQ_CHILD_pollConnectRecovery(void) STWI_send_CPR_PollingREQ(); } -static void rfu_CB_CHILD_pollConnectRecovery(u8 r8, u16 r7) +static void rfu_CB_CHILD_pollConnectRecovery(u8 reqCommand, u16 reqResult) { - u8 r3, r4; - struct RfuLinkStatus *r2; + u8 bm_slot_flag, i; + struct RfuLinkStatus *rfuLinkStatus; - if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot) + if (reqResult == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] == 0 && gRfuStatic->recoveryBmSlot) { gRfuLinkStatus->parentChild = MODE_CHILD; - for (r4 = 0; r4 < NELEMS(gRfuStatic->linkEmergencyFlag); ++r4) + for (i = 0; i < RFU_CHILD_MAX; ++i) { - r3 = 1 << r4; - r2 = gRfuLinkStatus; // ??? - if (gRfuStatic->recoveryBmSlot & r3 & r2->linkLossSlotFlag) + bm_slot_flag = 1 << i; + rfuLinkStatus = gRfuLinkStatus; // ??? + if (gRfuStatic->recoveryBmSlot & bm_slot_flag & rfuLinkStatus->linkLossSlotFlag) { - gRfuLinkStatus->connSlotFlag |= r3; - gRfuLinkStatus->linkLossSlotFlag &= ~r3; + gRfuLinkStatus->connSlotFlag |= bm_slot_flag; + gRfuLinkStatus->linkLossSlotFlag &= ~bm_slot_flag; ++gRfuLinkStatus->connCount; - gRfuStatic->linkEmergencyFlag[r4] = 0; + gRfuStatic->linkEmergencyFlag[i] = 0; } } gRfuStatic->recoveryBmSlot = 0; } - rfu_STC_REQ_callback(r8, r7); + rfu_STC_REQ_callback(reqCommand, reqResult); } u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status) { - u8 r0; - *status = 0xFF; - r0 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] + 77; - if (r0 <= 1) + if (gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] == 0xB3 || gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[0] == 0xB4) { *status = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4]; return 0; @@ -1127,14 +1192,14 @@ static void rfu_STC_fastCopy(const u8 **src_p, u8 **dst_p, s32 size) void rfu_REQ_changeMasterSlave(void) { - if (STWI_read_status(1) == 1) + if (STWI_read_status(1) == AGB_CLK_MASTER) { STWI_set_Callback_M(rfu_STC_REQ_callback); STWI_send_MS_ChangeREQ(); } else { - rfu_STC_REQ_callback(39, 0); + rfu_STC_REQ_callback(ID_MS_CHANGE_REQ, 0); } } @@ -1144,11 +1209,11 @@ bool8 rfu_getMasterSlave(void) if (masterSlave == AGB_CLK_MASTER) { - if (gSTWIStatus->unk_2c) + if (gSTWIStatus->sending) { - if (gSTWIStatus->reqActiveCommand == 39 - || gSTWIStatus->reqActiveCommand == 37 - || gSTWIStatus->reqActiveCommand == 55) + if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ + || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ + || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ) masterSlave = AGB_CLK_SLAVE; } } @@ -1159,7 +1224,7 @@ void rfu_clearAllSlot(void) { u16 i; u16 IMEBackup = REG_IME; - + REG_IME = 0; for (i = 0; i < RFU_CHILD_MAX; ++i) { @@ -1175,87 +1240,87 @@ void rfu_clearAllSlot(void) REG_IME = IMEBackup; } -static void rfu_STC_releaseFrame(u8 r5, u8 r3, struct NIComm *r4) +static void rfu_STC_releaseFrame(u8 bm_slot_id, u8 send_recv, struct NIComm *NI_comm) { if (!(gRfuStatic->flags & 0x80)) { - if (r3 == 0) - gRfuLinkStatus->remainLLFrameSizeParent += r4->payloadSize; + if (send_recv == 0) + gRfuLinkStatus->remainLLFrameSizeParent += NI_comm->payloadSize; gRfuLinkStatus->remainLLFrameSizeParent += 3; } else { - if (r3 == 0) - gRfuLinkStatus->remainLLFrameSizeChild[r5] += r4->payloadSize; - gRfuLinkStatus->remainLLFrameSizeChild[r5] += 2; + if (send_recv == 0) + gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id] += NI_comm->payloadSize; + gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id] += 2; } } u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex) { - u16 r10, r3, r1; - struct NIComm *r4; + u16 imeBak, send_recv, i; + struct NIComm *NI_comm; if (slotStatusIndex >= RFU_CHILD_MAX) return ERR_SLOT_NO; if (!(connTypeFlag & (TYPE_UNI_SEND | TYPE_UNI_RECV | TYPE_NI_SEND | TYPE_NI_RECV))) return ERR_COMM_TYPE; - r10 = REG_IME; + imeBak = REG_IME; REG_IME = 0; if (connTypeFlag & (TYPE_NI_SEND | TYPE_NI_RECV)) { - for (r3 = 0; r3 < 2; ++r3) + for (send_recv = 0; send_recv < 2; ++send_recv) { - r4 = NULL; - if (r3 == 0) + NI_comm = NULL; + if (send_recv == 0) { if (connTypeFlag & TYPE_NI_SEND) { - r4 = &gRfuSlotStatusNI[slotStatusIndex]->send; - gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlotOrg; + NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->send; + gRfuLinkStatus->sendSlotNIFlag &= ~NI_comm->bmSlotOrg; } } else { if (connTypeFlag & TYPE_NI_RECV) { - r4 = &gRfuSlotStatusNI[slotStatusIndex]->recv; + NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->recv; gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex); } } - if (r4 != NULL) + if (NI_comm != NULL) { - if (r4->state & SLOT_BUSY_FLAG) + if (NI_comm->state & SLOT_BUSY_FLAG) { - rfu_STC_releaseFrame(slotStatusIndex, r3, r4); - for (r1 = 0; r1 < RFU_CHILD_MAX; ++r1) - if ((r4->bmSlotOrg >> r1) & 1) - r4->failCounter = 0; + rfu_STC_releaseFrame(slotStatusIndex, send_recv, NI_comm); + for (i = 0; i < RFU_CHILD_MAX; ++i) + if ((NI_comm->bmSlotOrg >> i) & 1) + NI_comm->failCounter = 0; } - CpuFill16(0, r4, sizeof(struct NIComm)); + CpuFill16(0, NI_comm, sizeof(struct NIComm)); } } } if (connTypeFlag & TYPE_UNI_SEND) { - struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[slotStatusIndex]; + struct RfuSlotStatusUNI *slotStatusUNI = gRfuSlotStatusUNI[slotStatusIndex]; - if (r3->send.state & SLOT_BUSY_FLAG) + if (slotStatusUNI->send.state & SLOT_BUSY_FLAG) { if (!(gRfuStatic->flags & 0x80)) - gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)r3->send.payloadSize; + gRfuLinkStatus->remainLLFrameSizeParent += 3 + (u8)slotStatusUNI->send.payloadSize; else - gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] += 2 + (u8)r3->send.payloadSize; - gRfuLinkStatus->sendSlotUNIFlag &= ~r3->send.bmSlot; + gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] += 2 + (u8)slotStatusUNI->send.payloadSize; + gRfuLinkStatus->sendSlotUNIFlag &= ~slotStatusUNI->send.bmSlot; } - CpuFill16(0, &r3->send, sizeof(struct UNISend)); + CpuFill16(0, &slotStatusUNI->send, sizeof(struct UNISend)); } if (connTypeFlag & TYPE_UNI_RECV) { CpuFill16(0, &gRfuSlotStatusUNI[slotStatusIndex]->recv, sizeof(struct UNIRecv)); } - REG_IME = r10; + REG_IME = imeBak; return 0; } @@ -1301,16 +1366,16 @@ u16 rfu_NI_CHILD_setSendGameName(u8 slotNo, u8 subFrameSize) return rfu_STC_setSendData_org(64, 1 << slotNo, subFrameSize, &gRfuLinkStatus->my.serialNo, 26); } -static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const void *src, u32 sp28) +static u16 rfu_STC_setSendData_org(u8 ni_or_uni, u8 bmSendSlot, u8 subFrameSize, const void *src, u32 dataSize) { - u8 r2, r0; - u8 r4; - u8 *r9; - u8 r5; + u8 bm_slot_id, sendSlotFlag; + u8 frameSize; + u8 *llFrameSize_p; + u8 sending; u8 i; - u16 sp04; - struct RfuSlotStatusUNI *r1; - struct RfuSlotStatusNI *r12; + u16 imeBak; + struct RfuSlotStatusUNI *slotStatus_UNI; + struct RfuSlotStatusNI *slotStatus_NI; if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) return ERR_MODE_NOT_CONNECTED; @@ -1318,108 +1383,108 @@ static u16 rfu_STC_setSendData_org(u8 r6, u8 bmSendSlot, u8 subFrameSize, const return ERR_SLOT_NO; if (((gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag) & bmSendSlot) != bmSendSlot) return ERR_SLOT_NOT_CONNECTED; - if (r6 & 0x10) - r0 = gRfuLinkStatus->sendSlotUNIFlag; + if (ni_or_uni & 0x10) + sendSlotFlag = gRfuLinkStatus->sendSlotUNIFlag; else - r0 = gRfuLinkStatus->sendSlotNIFlag; - if (r0 & bmSendSlot) + sendSlotFlag = gRfuLinkStatus->sendSlotNIFlag; + if (sendSlotFlag & bmSendSlot) return ERR_SLOT_BUSY; - for (r2 = 0; r2 < RFU_CHILD_MAX && !((bmSendSlot >> r2) & 1); ++r2) + for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX && !((bmSendSlot >> bm_slot_id) & 1); ++bm_slot_id) ; if (gRfuLinkStatus->parentChild == MODE_PARENT) - r9 = &gRfuLinkStatus->remainLLFrameSizeParent; + llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeParent; else if (gRfuLinkStatus->parentChild == MODE_CHILD) - r9 = &gRfuLinkStatus->remainLLFrameSizeChild[r2]; - r4 = llsf_struct[gRfuLinkStatus->parentChild].unk00; - if (subFrameSize > *r9 || subFrameSize <= r4) + llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id]; + frameSize = llsf_struct[gRfuLinkStatus->parentChild].frameSize; + if (subFrameSize > *llFrameSize_p || subFrameSize <= frameSize) return ERR_SUBFRAME_SIZE; - sp04 = REG_IME; + imeBak = REG_IME; REG_IME = 0; - r5 = r6 & 0x20; - if (r5 || r6 == 0x40) - { - u8 *r1; // a hack to swap instructions - - r12 = gRfuSlotStatusNI[r2]; - r1 = NULL; - r12->send.errorCode = 0; - *r12->send.now_p = r1 = &r12->send.dataType; - r12->send.remainSize = 7; - r12->send.bmSlotOrg = bmSendSlot; - r12->send.bmSlot = bmSendSlot; - r12->send.payloadSize = subFrameSize - r4; - if (r5 != 0) - *r1 = 0; + sending = ni_or_uni & 0x20; + if (sending || ni_or_uni == 0x40) + { + u8 *dataType_p; // a hack to swap instructions + + slotStatus_NI = gRfuSlotStatusNI[bm_slot_id]; + slotStatus_UNI = NULL; + slotStatus_NI->send.errorCode = 0; + *slotStatus_NI->send.now_p = dataType_p = &slotStatus_NI->send.dataType; + slotStatus_NI->send.remainSize = 7; + slotStatus_NI->send.bmSlotOrg = bmSendSlot; + slotStatus_NI->send.bmSlot = bmSendSlot; + slotStatus_NI->send.payloadSize = subFrameSize - frameSize; + if (sending != 0) + *dataType_p = 0; else - *r1 = 1; - r12->send.dataSize = sp28; - r12->send.src = src; - r12->send.ack = 0; - r12->send.phase = 0; - #ifndef NONMATCHING // to fix r2, r3, r4, r5 register roulette + *dataType_p = 1; + slotStatus_NI->send.dataSize = dataSize; + slotStatus_NI->send.src = src; + slotStatus_NI->send.ack = 0; + slotStatus_NI->send.phase = 0; + #ifndef NONMATCHING // to fix bm_slot_id, r3, frameSize, sending register roulette asm("":::"r2"); #endif for (i = 0; i < WINDOW_COUNT; ++i) { - r12->send.recvAckFlag[i] = 0; - r12->send.n[i] = 1; + slotStatus_NI->send.recvAckFlag[i] = 0; + slotStatus_NI->send.n[i] = 1; } - for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2) - if ((bmSendSlot >> r2) & 1) - gRfuSlotStatusNI[r2]->send.failCounter = 0; + for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id) + if ((bmSendSlot >> bm_slot_id) & 1) + gRfuSlotStatusNI[bm_slot_id]->send.failCounter = 0; gRfuLinkStatus->sendSlotNIFlag |= bmSendSlot; - *r9 -= subFrameSize; - r12->send.state = SLOT_STATE_SEND_START; + *llFrameSize_p -= subFrameSize; + slotStatus_NI->send.state = SLOT_STATE_SEND_START; } - else if (r6 & 0x10) + else if (ni_or_uni & 0x10) { - r1 = gRfuSlotStatusUNI[r2]; - r1->send.bmSlot = bmSendSlot; - r1->send.src = src; - r1->send.payloadSize = subFrameSize - r4; - *r9 -= subFrameSize; - r1->send.state = SLOT_STATE_SEND_UNI; + slotStatus_UNI = gRfuSlotStatusUNI[bm_slot_id]; + slotStatus_UNI->send.bmSlot = bmSendSlot; + slotStatus_UNI->send.src = src; + slotStatus_UNI->send.payloadSize = subFrameSize - frameSize; + *llFrameSize_p -= subFrameSize; + slotStatus_UNI->send.state = SLOT_STATE_SEND_UNI; gRfuLinkStatus->sendSlotUNIFlag |= bmSendSlot; } - REG_IME = sp04; + REG_IME = imeBak; return 0; } u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot) { - struct RfuSlotStatusNI *r5; - u16 r8; - u8 r2; + struct RfuSlotStatusNI *slotStatusNI; + u16 imeBak; + u8 i; if (slotStatusIndex >= RFU_CHILD_MAX) return ERR_SLOT_NO; if (connType == 0x20) { - r5 = gRfuSlotStatusNI[slotStatusIndex]; - if ((r5->send.state & SLOT_BUSY_FLAG) - && (r5->send.state & SLOT_SEND_FLAG)) + slotStatusNI = gRfuSlotStatusNI[slotStatusIndex]; + if ((slotStatusNI->send.state & SLOT_BUSY_FLAG) + && (slotStatusNI->send.state & SLOT_SEND_FLAG)) { - connType = bmNewTgtSlot ^ r5->send.bmSlot; - + connType = bmNewTgtSlot ^ slotStatusNI->send.bmSlot; + if (!(connType & bmNewTgtSlot)) { if (connType) { - r8 = REG_IME; + imeBak = REG_IME; REG_IME = 0; - for (r2 = 0; r2 < RFU_CHILD_MAX; ++r2) + for (i = 0; i < RFU_CHILD_MAX; ++i) { - if ((connType >> r2) & 1) - gRfuSlotStatusNI[r2]->send.failCounter = 0; + if ((connType >> i) & 1) + gRfuSlotStatusNI[i]->send.failCounter = 0; } gRfuLinkStatus->sendSlotNIFlag &= ~connType; - r5->send.bmSlot = bmNewTgtSlot; - if (r5->send.bmSlot == 0) + slotStatusNI->send.bmSlot = bmNewTgtSlot; + if (slotStatusNI->send.bmSlot == 0) { - rfu_STC_releaseFrame(slotStatusIndex, 0, &r5->send); - r5->send.state = SLOT_STATE_SEND_FAILED; + rfu_STC_releaseFrame(slotStatusIndex, 0, &slotStatusNI->send); + slotStatusNI->send.state = SLOT_STATE_SEND_FAILED; } - REG_IME = r8; + REG_IME = imeBak; } } else @@ -1436,21 +1501,21 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot) { if (connType == 16) { - s32 r3; + s32 bmSlot; if (gRfuSlotStatusUNI[slotStatusIndex]->send.state != SLOT_STATE_SEND_UNI) return ERR_SLOT_NOT_SENDING; - for (r3 = 0, r2 = 0; r2 < RFU_CHILD_MAX; ++r2) - if (r2 != slotStatusIndex) - r3 |= gRfuSlotStatusUNI[r2]->send.bmSlot; - if (bmNewTgtSlot & r3) + for (bmSlot = 0, i = 0; i < RFU_CHILD_MAX; ++i) + if (i != slotStatusIndex) + bmSlot |= gRfuSlotStatusUNI[i]->send.bmSlot; + if (bmNewTgtSlot & bmSlot) return ERR_SLOT_TARGET; - r8 = REG_IME; + imeBak = REG_IME; REG_IME = 0; gRfuLinkStatus->sendSlotUNIFlag &= ~gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot; gRfuLinkStatus->sendSlotUNIFlag |= bmNewTgtSlot; gRfuSlotStatusUNI[slotStatusIndex]->send.bmSlot = bmNewTgtSlot; - REG_IME = r8; + REG_IME = imeBak; } else { @@ -1462,14 +1527,14 @@ u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot) u16 rfu_NI_stopReceivingData(u8 slotStatusIndex) { - struct NIComm *r5; - u16 r4, r1; + struct NIComm *NI_comm; + u16 imeBak; if (slotStatusIndex >= RFU_CHILD_MAX) return ERR_SLOT_NO; - r5 = &gRfuSlotStatusNI[slotStatusIndex]->recv; - r4 = REG_IME; - ++r4; --r4; // fix r4, r5 register swap + NI_comm = &gRfuSlotStatusNI[slotStatusIndex]->recv; + imeBak = REG_IME; + ++imeBak; --imeBak; // fix imeBak, NI_comm register swap REG_IME = 0; if (gRfuSlotStatusNI[slotStatusIndex]->recv.state & SLOT_BUSY_FLAG) { @@ -1478,43 +1543,43 @@ u16 rfu_NI_stopReceivingData(u8 slotStatusIndex) else gRfuSlotStatusNI[slotStatusIndex]->recv.state = SLOT_STATE_RECV_FAILED; gRfuLinkStatus->recvSlotNIFlag &= ~(1 << slotStatusIndex); - rfu_STC_releaseFrame(slotStatusIndex, 1, r5); + rfu_STC_releaseFrame(slotStatusIndex, 1, NI_comm); } - REG_IME = r4; + REG_IME = imeBak; return 0; } u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size) { - struct UNISend *r4; - u8 *r6; - u16 r1; - u8 r3_; + struct UNISend *UNI_send; + u8 *frame_p; + u16 imeBak; + u8 frameEnd; if (slotStatusIndex >= RFU_CHILD_MAX) return ERR_SLOT_NO; - r4 = &gRfuSlotStatusUNI[slotStatusIndex]->send; - if (r4->state != SLOT_STATE_SEND_UNI) + UNI_send = &gRfuSlotStatusUNI[slotStatusIndex]->send; + if (UNI_send->state != SLOT_STATE_SEND_UNI) return ERR_SLOT_NOT_SENDING; if (gRfuLinkStatus->parentChild == MODE_PARENT) { - r6 = &gRfuLinkStatus->remainLLFrameSizeParent; - r3_ = gRfuLinkStatus->remainLLFrameSizeParent + (u8)r4->payloadSize; + frame_p = &gRfuLinkStatus->remainLLFrameSizeParent; + frameEnd = gRfuLinkStatus->remainLLFrameSizeParent + (u8)UNI_send->payloadSize; } else { - r6 = &gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex]; - r3_ = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)r4->payloadSize; + frame_p = &gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex]; + frameEnd = gRfuLinkStatus->remainLLFrameSizeChild[slotStatusIndex] + (u8)UNI_send->payloadSize; } - if (r3_ < size) + if (frameEnd < size) return ERR_SUBFRAME_SIZE; - r1 = REG_IME; + imeBak = REG_IME; REG_IME = 0; - r4->src = src; - *r6 = r3_ - size; - r4->payloadSize = size; - r4->dataReadyFlag = 1; - REG_IME = r1; + UNI_send->src = src; + *frame_p = frameEnd - size; + UNI_send->payloadSize = size; + UNI_send->dataReadyFlag = 1; + REG_IME = imeBak; return 0; } @@ -1593,184 +1658,184 @@ void rfu_REQ_sendData(bool8 clockChangeFlag) } } -static void rfu_CB_sendData(UNUSED u8 r0, u16 r7) +static void rfu_CB_sendData(UNUSED u8 reqCommand, u16 reqResult) { - u8 r6; - struct NIComm *r4; + u8 i; + struct NIComm *NI_comm; - if (r7 == 0) + if (reqResult == 0) { - for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) + for (i = 0; i < RFU_CHILD_MAX; ++i) { - if (gRfuSlotStatusUNI[r6]->send.dataReadyFlag) - gRfuSlotStatusUNI[r6]->send.dataReadyFlag = 0; - r4 = &gRfuSlotStatusNI[r6]->send; - if (r4->state == SLOT_STATE_SEND_NULL) + if (gRfuSlotStatusUNI[i]->send.dataReadyFlag) + gRfuSlotStatusUNI[i]->send.dataReadyFlag = 0; + NI_comm = &gRfuSlotStatusNI[i]->send; + if (NI_comm->state == SLOT_STATE_SEND_NULL) { - rfu_STC_releaseFrame(r6, 0, r4); - gRfuLinkStatus->sendSlotNIFlag &= ~r4->bmSlot; - if (r4->dataType == 1) - gRfuLinkStatus->getNameFlag |= 1 << r6; - r4->state = SLOT_STATE_SEND_SUCCESS; + rfu_STC_releaseFrame(i, 0, NI_comm); + gRfuLinkStatus->sendSlotNIFlag &= ~NI_comm->bmSlot; + if (NI_comm->dataType == 1) + gRfuLinkStatus->getNameFlag |= 1 << i; + NI_comm->state = SLOT_STATE_SEND_SUCCESS; } } } gRfuLinkStatus->LLFReadyFlag = 0; - rfu_STC_REQ_callback(36, r7); + rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult); } -static void rfu_CB_sendData2(UNUSED u8 r0, u16 r1) +static void rfu_CB_sendData2(UNUSED u8 reqCommand, u16 reqResult) { - rfu_STC_REQ_callback(36, r1); + rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult); } -static void rfu_CB_sendData3(u8 r0, u16 r1) +static void rfu_CB_sendData3(u8 reqCommand, u16 reqResult) { - if (r1 != 0) - rfu_STC_REQ_callback(36, r1); - else if (r0 == 0xFF) - rfu_STC_REQ_callback(0xFF, 0); + if (reqResult != 0) + rfu_STC_REQ_callback(ID_DATA_TX_REQ, reqResult); + else if (reqCommand == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ) + rfu_STC_REQ_callback(ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ, 0); } static void rfu_constructSendLLFrame(void) { - u32 r8, r5; - u8 r6; - u8 *sp00; - struct RfuSlotStatusNI *r2; + u32 pakcketSize, currSize; + u8 i; + u8 *llf_p; + struct RfuSlotStatusNI *slotStatusNI; if (gRfuLinkStatus->parentChild != MODE_NEUTRAL && gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag | gRfuLinkStatus->sendSlotUNIFlag) { gRfuLinkStatus->LLFReadyFlag = 0; - r8 = 0; - sp00 = (u8 *)&gRfuFixed->LLFBuffer[1]; - for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) + pakcketSize = 0; + llf_p = (u8 *)&gRfuFixed->LLFBuffer[1]; + for (i = 0; i < RFU_CHILD_MAX; ++i) { - r5 = 0; - if (gRfuSlotStatusNI[r6]->send.state & SLOT_BUSY_FLAG) - r5 = rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->send); - if (gRfuSlotStatusNI[r6]->recv.state & SLOT_BUSY_FLAG) - r5 += rfu_STC_NI_constructLLSF(r6, &sp00, &gRfuSlotStatusNI[r6]->recv); - if (gRfuSlotStatusUNI[r6]->send.state == SLOT_STATE_SEND_UNI) - r5 += rfu_STC_UNI_constructLLSF(r6, &sp00); - if (r5 != 0) + currSize = 0; + if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG) + currSize = rfu_STC_NI_constructLLSF(i, &llf_p, &gRfuSlotStatusNI[i]->send); + if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG) + currSize += rfu_STC_NI_constructLLSF(i, &llf_p, &gRfuSlotStatusNI[i]->recv); + if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI) + currSize += rfu_STC_UNI_constructLLSF(i, &llf_p); + if (currSize != 0) { if (gRfuLinkStatus->parentChild == MODE_PARENT) - r8 += r5; + pakcketSize += currSize; else - r8 |= r5 << (5 * r6 + 8); + pakcketSize |= currSize << (5 * i + 8); } } - if (r8 != 0) + if (pakcketSize != 0) { - while ((u32)sp00 & 3) - *sp00++ = 0; - gRfuFixed->LLFBuffer[0] = r8; + while ((u32)llf_p & 3) + *llf_p++ = 0; + gRfuFixed->LLFBuffer[0] = pakcketSize; if (gRfuLinkStatus->parentChild == MODE_CHILD) { - u8 *r0 = sp00 - offsetof(struct RfuFixed, LLFBuffer[1]); - - // Does the volatile qualifier make sense? - // It's the same as: + u8 *maxSize = llf_p - offsetof(struct RfuFixed, LLFBuffer[1]); + + // Does the volatile qualifier make sense? + // It's the same as: // asm("":::"memory"); - r8 = r0 - *(u8 *volatile *)&gRfuFixed; + pakcketSize = maxSize - *(u8 *volatile *)&gRfuFixed; } } - gRfuStatic->totalPacketSize = r8; + gRfuStatic->totalPacketSize = pakcketSize; } } -static u16 rfu_STC_NI_constructLLSF(u8 r10, u8 **r12, struct NIComm *r4) +static u16 rfu_STC_NI_constructLLSF(u8 bm_slot_id, u8 **dest_pp, struct NIComm *NI_comm) { - u16 r5; - u32 sp00; + u16 size; + u32 frame; u8 i; - u8 *r2; - const struct LLSFStruct *r8 = &llsf_struct[gRfuLinkStatus->parentChild]; + u8 *frame8_p; + const struct LLSFStruct *llsf = &llsf_struct[gRfuLinkStatus->parentChild]; - if (r4->state == SLOT_STATE_SENDING) + if (NI_comm->state == SLOT_STATE_SENDING) { - while (r4->now_p[r4->phase] >= (const u8 *)r4->src + r4->dataSize) + while (NI_comm->now_p[NI_comm->phase] >= (const u8 *)NI_comm->src + NI_comm->dataSize) { - ++r4->phase; - if (r4->phase == 4) - r4->phase = 0; + ++NI_comm->phase; + if (NI_comm->phase == 4) + NI_comm->phase = 0; } } - if (r4->state & SLOT_RECV_FLAG) + if (NI_comm->state & SLOT_RECV_FLAG) { - r5 = 0; + size = 0; } - else if (r4->state == SLOT_STATE_SENDING) + else if (NI_comm->state == SLOT_STATE_SENDING) { - if (r4->now_p[r4->phase] + r4->payloadSize > (const u8 *)r4->src + r4->dataSize) - r5 = (const u8 *)r4->src + r4->dataSize - r4->now_p[r4->phase]; + if (NI_comm->now_p[NI_comm->phase] + NI_comm->payloadSize > (const u8 *)NI_comm->src + NI_comm->dataSize) + size = (const u8 *)NI_comm->src + NI_comm->dataSize - NI_comm->now_p[NI_comm->phase]; else - r5 = r4->payloadSize; + size = NI_comm->payloadSize; } else { - if ((u32)r4->remainSize >= r4->payloadSize) - r5 = r4->payloadSize; + if ((u32)NI_comm->remainSize >= NI_comm->payloadSize) + size = NI_comm->payloadSize; else - r5 = r4->remainSize; + size = NI_comm->remainSize; } - sp00 = (r4->state & 0xF) << r8->unk03 - | r4->ack << r8->unk04 - | r4->phase << r8->unk05 - | r4->n[r4->phase] << r8->unk06 - | r5; + frame = (NI_comm->state & 0xF) << llsf->slotStateShift + | NI_comm->ack << llsf->ackShift + | NI_comm->phase << llsf->phaseShit + | NI_comm->n[NI_comm->phase] << llsf->nShift + | size; if (gRfuLinkStatus->parentChild == MODE_PARENT) - sp00 |= r4->bmSlot << 18; - r2 = (u8 *)&sp00; - for (i = 0; i < r8->unk00; ++i) - *(*r12)++ = *r2++; - if (r5 != 0) + frame |= NI_comm->bmSlot << 18; + frame8_p = (u8 *)&frame; + for (i = 0; i < llsf->frameSize; ++i) + *(*dest_pp)++ = *frame8_p++; + if (size != 0) { - const u8 *sp04 = r4->now_p[r4->phase]; + const u8 *src = NI_comm->now_p[NI_comm->phase]; - gRfuFixed->fastCopyPtr(&sp04, r12, r5); + gRfuFixed->fastCopyPtr(&src, dest_pp, size); } - if (r4->state == SLOT_STATE_SENDING) + if (NI_comm->state == SLOT_STATE_SENDING) { - ++r4->phase; - if (r4->phase == 4) - r4->phase = 0; + ++NI_comm->phase; + if (NI_comm->phase == 4) + NI_comm->phase = 0; } if (gRfuLinkStatus->parentChild == MODE_PARENT) gRfuLinkStatus->LLFReadyFlag = 1; else - gRfuLinkStatus->LLFReadyFlag |= 1 << r10; - return r5 + r8->unk00; + gRfuLinkStatus->LLFReadyFlag |= 1 << bm_slot_id; + return size + llsf->frameSize; } -static u16 rfu_STC_UNI_constructLLSF(u8 r8, u8 **r6) +static u16 rfu_STC_UNI_constructLLSF(u8 bm_slot_id, u8 **dest_p) { - const struct LLSFStruct *r5; - const u8 *sp04; - u32 sp00; - u8 *r2; + const struct LLSFStruct *llsf; + const u8 *src_p; + u32 frame; + u8 *frame8_p; u8 i; - struct UNISend *r4 = &gRfuSlotStatusUNI[r8]->send; + struct UNISend *UNI_send = &gRfuSlotStatusUNI[bm_slot_id]->send; - if (!r4->dataReadyFlag || !r4->bmSlot) + if (!UNI_send->dataReadyFlag || !UNI_send->bmSlot) return 0; - r5 = &llsf_struct[gRfuLinkStatus->parentChild]; - sp00 = (r4->state & 0xF) << r5->unk03 - | r4->payloadSize; + llsf = &llsf_struct[gRfuLinkStatus->parentChild]; + frame = (UNI_send->state & 0xF) << llsf->slotStateShift + | UNI_send->payloadSize; if (gRfuLinkStatus->parentChild == MODE_PARENT) - sp00 |= r4->bmSlot << 18; - r2 = (u8 *)&sp00; - for (i = 0; i < r5->unk00; ++i) - *(*r6)++ = *r2++; - sp04 = r4->src; - gRfuFixed->fastCopyPtr(&sp04, r6, r4->payloadSize); + frame |= UNI_send->bmSlot << 18; + frame8_p = (u8 *)&frame; + for (i = 0; i < llsf->frameSize; ++i) + *(*dest_p)++ = *frame8_p++; + src_p = UNI_send->src; + gRfuFixed->fastCopyPtr(&src_p, dest_p, UNI_send->payloadSize); if (gRfuLinkStatus->parentChild == MODE_PARENT) gRfuLinkStatus->LLFReadyFlag = 16; else - gRfuLinkStatus->LLFReadyFlag |= 16 << r8; - return r5->unk00 + r4->payloadSize; + gRfuLinkStatus->LLFReadyFlag |= 16 << bm_slot_id; + return llsf->frameSize + UNI_send->payloadSize; } void rfu_REQ_recvData(void) @@ -1784,434 +1849,433 @@ void rfu_REQ_recvData(void) } } -static void rfu_CB_recvData(u8 r9, u16 r7) +static void rfu_CB_recvData(u8 reqCommand, u16 reqResult) { - u8 r6; - struct RfuSlotStatusNI *r4; - struct NIComm *r5; + u8 i; + struct RfuSlotStatusNI *slotStatusNI; + struct NIComm *NI_comm; - if (r7 == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]) + if (reqResult == 0 && gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[1]) { gRfuStatic->NIEndRecvFlag = 0; if (gRfuLinkStatus->parentChild == MODE_PARENT) rfu_STC_PARENT_analyzeRecvPacket(); else rfu_STC_CHILD_analyzeRecvPacket(); - for (r6 = 0; r6 < RFU_CHILD_MAX; ++r6) + for (i = 0; i < RFU_CHILD_MAX; ++i) { - r4 = gRfuSlotStatusNI[r6]; - if (r4->recv.state == SLOT_STATE_RECV_LAST && !((gRfuStatic->NIEndRecvFlag >> r6) & 1)) + slotStatusNI = gRfuSlotStatusNI[i]; + if (slotStatusNI->recv.state == SLOT_STATE_RECV_LAST && !((gRfuStatic->NIEndRecvFlag >> i) & 1)) { - r5 = &r4->recv; - if (r5->dataType == 1) - gRfuLinkStatus->getNameFlag |= 1 << r6; - rfu_STC_releaseFrame(r6, 1, r5); - gRfuLinkStatus->recvSlotNIFlag &= ~r5->bmSlot; - r4->recv.state = SLOT_STATE_RECV_SUCCESS; + NI_comm = &slotStatusNI->recv; + if (NI_comm->dataType == 1) + gRfuLinkStatus->getNameFlag |= 1 << i; + rfu_STC_releaseFrame(i, 1, NI_comm); + gRfuLinkStatus->recvSlotNIFlag &= ~NI_comm->bmSlot; + slotStatusNI->recv.state = SLOT_STATE_RECV_SUCCESS; } } if (gRfuStatic->recvErrorFlag) - r7 = gRfuStatic->recvErrorFlag | ERR_DATA_RECV; + reqResult = gRfuStatic->recvErrorFlag | ERR_DATA_RECV; } - rfu_STC_REQ_callback(r9, r7); + rfu_STC_REQ_callback(reqCommand, reqResult); } static void rfu_STC_PARENT_analyzeRecvPacket(void) { - u32 r3; - u8 r5; - u8 sp[4]; - u8 *r6; + u32 frames32; + u8 bm_slot_id; + u8 frame_counts[RFU_CHILD_MAX]; + u8 *packet_p; - r3 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8; - for (r5 = 0; r5 < NELEMS(sp); ++r5) + frames32 = gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket32.data[0] >> 8; + for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id) { - sp[r5] = r3 & 0x1F; - r3 >>= 5; - if (sp[r5] == 0) - gRfuStatic->NIEndRecvFlag |= 1 << r5; + frame_counts[bm_slot_id] = frames32 & 0x1F; + frames32 >>= 5; + if (frame_counts[bm_slot_id] == 0) + gRfuStatic->NIEndRecvFlag |= 1 << bm_slot_id; } - r6 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8]; - for (r5 = 0; r5 < NELEMS(sp); ++r5) + packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8]; + for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id) { - if (sp[r5]) + if (frame_counts[bm_slot_id]) { - u8 *r4 = &sp[r5]; + u8 *frames_p = &frame_counts[bm_slot_id]; do { - u8 r0 = rfu_STC_analyzeLLSF(r5, r6, *r4); + u8 analyzed_frames = rfu_STC_analyzeLLSF(bm_slot_id, packet_p, *frames_p); - r6 += r0; - *r4 -= r0; - } while (!(*r4 & 0x80) && (*r4)); + packet_p += analyzed_frames; + *frames_p -= analyzed_frames; + } while (!(*frames_p & 0x80) && (*frames_p)); } } } static void rfu_STC_CHILD_analyzeRecvPacket(void) { - u16 r4; - u8 *r5; - u16 r0; + u16 frames_remaining; + u8 *packet_p; + u16 analyzed_frames; - r4 = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] & 0x7F; - r5 = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8]; - if (r4 == 0) + frames_remaining = *(u16 *)&gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[4] & 0x7F; + packet_p = &gRfuFixed->STWIBuffer->rxPacketAlloc.rfuPacket8.data[8]; + if (frames_remaining == 0) gRfuStatic->NIEndRecvFlag = 15; do { - if (r4 == 0) + if (frames_remaining == 0) break; - r0 = rfu_STC_analyzeLLSF(0, r5, r4); - r5 += r0; - r4 -= r0; - } while (!(r4 & 0x8000)); -} - -static u16 rfu_STC_analyzeLLSF(u8 r12, const u8 *r7, u16 r3) -{ - struct RfuLocalStruct sp00; - const struct LLSFStruct *r6; - u32 r5; - u8 r4; - u32 r0; - u16 r10; - - r6 = &llsf_struct[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)]; - if (r3 < r6->unk00) - return r3; - r5 = 0; - for (r4 = 0; r4 < r6->unk00; ++r4) - r5 |= *r7++ << 8 * r4; - sp00.unk00 = (r5 >> r6->unk01) & r6->unk07; - sp00.unk01 = (r5 >> r6->unk02) & r6->unk08; - sp00.unk02 = (r5 >> r6->unk03) & r6->unk09; - sp00.unk03 = (r5 >> r6->unk04) & r6->unk0A; - sp00.unk04 = (r5 >> r6->unk05) & r6->unk0B; - sp00.unk05 = (r5 >> r6->unk06) & r6->unk0C; - sp00.unk06 = (r5 & r6->unk0E) & r5; - r10 = sp00.unk06 + r6->unk00; - if (sp00.unk00 == 0) + analyzed_frames = rfu_STC_analyzeLLSF(0, packet_p, frames_remaining); + packet_p += analyzed_frames; + frames_remaining -= analyzed_frames; + } while (!(frames_remaining & 0x8000)); +} + +static u16 rfu_STC_analyzeLLSF(u8 slot_id, const u8 *src, u16 last_frame) +{ + struct RfuLocalStruct llsf_NI; + const struct LLSFStruct *llsf_p; + u32 frames; + u8 i; + u16 retVal; + + llsf_p = &llsf_struct[~gRfuLinkStatus->parentChild & (MODE_NEUTRAL & MODE_PARENT)]; + if (last_frame < llsf_p->frameSize) + return last_frame; + frames = 0; + for (i = 0; i < llsf_p->frameSize; ++i) + frames |= *src++ << 8 * i; + llsf_NI.recvFirst = (frames >> llsf_p->recvFirstShift) & llsf_p->recvFirstMask; + llsf_NI.connSlotFlag = (frames >> llsf_p->connSlotFlagShift) & llsf_p->connSlotFlagMask; + llsf_NI.slotState = (frames >> llsf_p->slotStateShift) & llsf_p->slotStateMask; + llsf_NI.ack = (frames >> llsf_p->ackShift) & llsf_p->ackMask; + llsf_NI.phase = (frames >> llsf_p->phaseShit) & llsf_p->phaseMask; + llsf_NI.n = (frames >> llsf_p->nShift) & llsf_p->nMask; + llsf_NI.frame = (frames & llsf_p->framesMask) & frames; + retVal = llsf_NI.frame + llsf_p->frameSize; + if (llsf_NI.recvFirst == 0) { if (gRfuLinkStatus->parentChild == MODE_PARENT) { - if ((gRfuLinkStatus->connSlotFlag >> r12) & 1) + if ((gRfuLinkStatus->connSlotFlag >> slot_id) & 1) { - if (sp00.unk02 == 4) + if (llsf_NI.slotState == LCOM_UNI) { - rfu_STC_UNI_receive(r12, &sp00, r7); + rfu_STC_UNI_receive(slot_id, &llsf_NI, src); } - else if (sp00.unk03 == 0) + else if (llsf_NI.ack == 0) { - rfu_STC_NI_receive_Receiver(r12, &sp00, r7); + rfu_STC_NI_receive_Receiver(slot_id, &llsf_NI, src); } else { - for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) - if (((gRfuSlotStatusNI[r4]->send.bmSlot >> r12) & 1) - && ((gRfuLinkStatus->sendSlotNIFlag >> r12) & 1)) + for (i = 0; i < RFU_CHILD_MAX; ++i) + if (((gRfuSlotStatusNI[i]->send.bmSlot >> slot_id) & 1) + && ((gRfuLinkStatus->sendSlotNIFlag >> slot_id) & 1)) break; - if (r4 <= 3) - rfu_STC_NI_receive_Sender(r4, r12, &sp00, r7); + if (i < RFU_CHILD_MAX) + rfu_STC_NI_receive_Sender(i, slot_id, &llsf_NI, src); } } } else { - s32 r5 = gRfuLinkStatus->connSlotFlag & sp00.unk01; + s32 conSlots = gRfuLinkStatus->connSlotFlag & llsf_NI.connSlotFlag; - if (r5) + if (conSlots) { - for (r4 = 0; r4 < RFU_CHILD_MAX; ++r4) + for (i = 0; i < RFU_CHILD_MAX; ++i) { - if ((r5 >> r4) & 1) + if ((conSlots >> i) & 1) { - if (sp00.unk02 == 4) - rfu_STC_UNI_receive(r4, &sp00, r7); - else if (sp00.unk03 == 0) - rfu_STC_NI_receive_Receiver(r4, &sp00, r7); - else if ((gRfuLinkStatus->sendSlotNIFlag >> r4) & 1) - rfu_STC_NI_receive_Sender(r4, r4, &sp00, r7); + if (llsf_NI.slotState == LCOM_UNI) + rfu_STC_UNI_receive(i, &llsf_NI, src); + else if (llsf_NI.ack == 0) + rfu_STC_NI_receive_Receiver(i, &llsf_NI, src); + else if ((gRfuLinkStatus->sendSlotNIFlag >> i) & 1) + rfu_STC_NI_receive_Sender(i, i, &llsf_NI, src); } } } } } - return r10; + return retVal; } -static void rfu_STC_UNI_receive(u8 r7, const struct RfuLocalStruct *r6, const u8 *sp00) +static void rfu_STC_UNI_receive(u8 bm_slot_id, const struct RfuLocalStruct *llsf_NI, const u8 *src) { - u8 *sp04; - u32 r2; - struct RfuSlotStatusUNI *r3 = gRfuSlotStatusUNI[r7]; - struct UNIRecv *r5 = &r3->recv; + u8 *dest; + u32 size; + struct RfuSlotStatusUNI *slotStatusUNI = gRfuSlotStatusUNI[bm_slot_id]; + struct UNIRecv *UNI_recv = &slotStatusUNI->recv; - r5->errorCode = 0; - if (gRfuSlotStatusUNI[r7]->recvBufferSize < r6->unk06) + UNI_recv->errorCode = 0; + if (gRfuSlotStatusUNI[bm_slot_id]->recvBufferSize < llsf_NI->frame) { - r3->recv.state = SLOT_STATE_RECV_IGNORE; - r5->errorCode = ERR_RECV_BUFF_OVER; + slotStatusUNI->recv.state = SLOT_STATE_RECV_IGNORE; + UNI_recv->errorCode = ERR_RECV_BUFF_OVER; } else - { - if (r5->dataBlockFlag) + { + if (UNI_recv->dataBlockFlag) { - if (r5->newDataFlag) + if (UNI_recv->newDataFlag) { - r5->errorCode = ERR_RECV_UNK; - goto _081E2F0E; + UNI_recv->errorCode = ERR_RECV_UNK; + goto force_tail_merge; } } else { - if (r5->newDataFlag) - r5->errorCode = ERR_RECV_DATA_OVERWRITED; + if (UNI_recv->newDataFlag) + UNI_recv->errorCode = ERR_RECV_DATA_OVERWRITED; } - r5->state = SLOT_STATE_RECEIVING; - r2 = r5->dataSize = r6->unk06; - sp04 = gRfuSlotStatusUNI[r7]->recvBuffer; - gRfuFixed->fastCopyPtr(&sp00, &sp04, r2); - r5->newDataFlag = 1; - r5->state = 0; + UNI_recv->state = SLOT_STATE_RECEIVING; + size = UNI_recv->dataSize = llsf_NI->frame; + dest = gRfuSlotStatusUNI[bm_slot_id]->recvBuffer; + gRfuFixed->fastCopyPtr(&src, &dest, size); + UNI_recv->newDataFlag = 1; + UNI_recv->state = 0; } -_081E2F0E: - if (r5->errorCode) - gRfuStatic->recvErrorFlag |= 16 << r7; +force_tail_merge: + if (UNI_recv->errorCode) + gRfuStatic->recvErrorFlag |= 16 << bm_slot_id; } -static void rfu_STC_NI_receive_Sender(u8 r0, u8 r10, const struct RfuLocalStruct *r6, const u8 *r3) +static void rfu_STC_NI_receive_Sender(u8 NI_slot, u8 bm_flag, const struct RfuLocalStruct *llsf_NI, const u8 *data_p) { - struct NIComm *r12 = &gRfuSlotStatusNI[r0]->send; - u16 r9 = r12->state; - u8 sp00 = r12->n[r6->unk04]; - u8 *r8; - u8 r4; - u16 r2; + struct NIComm *NI_comm = &gRfuSlotStatusNI[NI_slot]->send; + u16 state = NI_comm->state; + u8 n = NI_comm->n[llsf_NI->phase]; + u8 i; + u16 imeBak; - if ((r6->unk02 == 2 && r9 == SLOT_STATE_SENDING) - || (r6->unk02 == 1 && r9 == SLOT_STATE_SEND_START) - || (r6->unk02 == 3 && r9 == SLOT_STATE_SEND_LAST)) + if ((llsf_NI->slotState == LCOM_NI && state == SLOT_STATE_SENDING) + || (llsf_NI->slotState == LCOM_NI_START && state == SLOT_STATE_SEND_START) + || (llsf_NI->slotState == LCOM_NI_END && state == SLOT_STATE_SEND_LAST)) { - if (r12->n[r6->unk04] == r6->unk05) - r12->recvAckFlag[r6->unk04] |= 1 << r10; + if (NI_comm->n[llsf_NI->phase] == llsf_NI->n) + NI_comm->recvAckFlag[llsf_NI->phase] |= 1 << bm_flag; } - if ((r12->recvAckFlag[r6->unk04] & r12->bmSlot) == r12->bmSlot) + if ((NI_comm->recvAckFlag[llsf_NI->phase] & NI_comm->bmSlot) == NI_comm->bmSlot) { - r12->n[r6->unk04] = (r12->n[r6->unk04] + 1) & 3; - r12->recvAckFlag[r6->unk04] = 0; - if ((u16)(r12->state + ~SLOT_STATE_SEND_NULL) <= 1) + NI_comm->n[llsf_NI->phase] = (NI_comm->n[llsf_NI->phase] + 1) & 3; + NI_comm->recvAckFlag[llsf_NI->phase] = 0; + if ((u16)(NI_comm->state + ~SLOT_STATE_SEND_NULL) <= 1) { - if (r12->state == SLOT_STATE_SEND_START) - r12->now_p[r6->unk04] += r12->payloadSize; + if (NI_comm->state == SLOT_STATE_SEND_START) + NI_comm->now_p[llsf_NI->phase] += NI_comm->payloadSize; else - r12->now_p[r6->unk04] += r12->payloadSize << 2; - r12->remainSize -= r12->payloadSize; - if (r12->remainSize != 0) - if (r12->remainSize >= 0) + NI_comm->now_p[llsf_NI->phase] += NI_comm->payloadSize << 2; + NI_comm->remainSize -= NI_comm->payloadSize; + if (NI_comm->remainSize != 0) + if (NI_comm->remainSize >= 0) goto _081E30AE; - // Above is a hack to avoid optimization over comparison. - // rfu_STC_NI_constructLLSF uses this field as u32. - // It's equivalent to the following condition: - // if (r12->remainSize == 0 || r12->remainSize < 0) - { - r12->phase = 0; - if (r12->state == SLOT_STATE_SEND_START) + // Above is a hack to avoid optimization over comparison. + // rfu_STC_NI_constructLLSF uses this field as u32. + // It's equivalent to the following condition: + // if (NI_comm->remainSize == 0 || NI_comm->remainSize < 0) { - for (r4 = 0; r4 < WINDOW_COUNT; ++r4) + NI_comm->phase = 0; + if (NI_comm->state == SLOT_STATE_SEND_START) + { + for (i = 0; i < WINDOW_COUNT; ++i) + { + NI_comm->n[i] = 1; + NI_comm->now_p[i] = NI_comm->src + NI_comm->payloadSize * i; + } + NI_comm->remainSize = NI_comm->dataSize; + NI_comm->state = SLOT_STATE_SENDING; + } + else { - r12->n[r4] = 1; - r12->now_p[r4] = r12->src + r12->payloadSize * r4; + NI_comm->n[0] = 0; + NI_comm->remainSize = 0; + NI_comm->state = SLOT_STATE_SEND_LAST; } - r12->remainSize = r12->dataSize; - r12->state = SLOT_STATE_SENDING; } - else - { - r12->n[0] = 0; - r12->remainSize = 0; - r12->state = SLOT_STATE_SEND_LAST; - } - } _081E30AE: + ; } - else if (r12->state == SLOT_STATE_SEND_LAST) + else if (NI_comm->state == SLOT_STATE_SEND_LAST) { - r12->state = SLOT_STATE_SEND_NULL; + NI_comm->state = SLOT_STATE_SEND_NULL; } } - if (r12->state != r9 - || r12->n[r6->unk04] != sp00 - || (r12->recvAckFlag[r6->unk04] >> r10) & 1) + if (NI_comm->state != state + || NI_comm->n[llsf_NI->phase] != n + || (NI_comm->recvAckFlag[llsf_NI->phase] >> bm_flag) & 1) { - r2 = REG_IME; + imeBak = REG_IME; REG_IME = 0; - gRfuStatic->recvRenewalFlag |= 16 << r10; - gRfuSlotStatusNI[r10]->send.failCounter = 0; - REG_IME = r2; + gRfuStatic->recvRenewalFlag |= 16 << bm_flag; + gRfuSlotStatusNI[bm_flag]->send.failCounter = 0; + REG_IME = imeBak; } } -static void rfu_STC_NI_receive_Receiver(u8 r8, const struct RfuLocalStruct *r6, const u8 *sp00) +static void rfu_STC_NI_receive_Receiver(u8 bm_slot_id, const struct RfuLocalStruct *llsf_NI, const u8 *data_p) { - u16 r2; - u32 r7 = 0; - struct RfuSlotStatusNI *r4 = gRfuSlotStatusNI[r8]; - struct NIComm *r5 = &r4->recv; - u16 r9 = r4->recv.state; - u8 r10 = r4->recv.n[r6->unk04]; + u16 imeBak; + u32 state_check = 0; + struct RfuSlotStatusNI *slotStatus_NI = gRfuSlotStatusNI[bm_slot_id]; + struct NIComm *recvSlot = &slotStatus_NI->recv; + u16 state = slotStatus_NI->recv.state; + u8 n = slotStatus_NI->recv.n[llsf_NI->phase]; - if (r6->unk02 == 3) + if (llsf_NI->slotState == LCOM_NI_END) { - gRfuStatic->NIEndRecvFlag |= 1 << r8; - if (r4->recv.state == SLOT_STATE_RECEIVING) + gRfuStatic->NIEndRecvFlag |= 1 << bm_slot_id; + if (slotStatus_NI->recv.state == SLOT_STATE_RECEIVING) { - r4->recv.phase = 0; - r4->recv.n[0] = 0; - r4->recv.state = SLOT_STATE_RECV_LAST; + slotStatus_NI->recv.phase = 0; + slotStatus_NI->recv.n[0] = 0; + slotStatus_NI->recv.state = SLOT_STATE_RECV_LAST; } } - else if (r6->unk02 == 2) + else if (llsf_NI->slotState == LCOM_NI) { - if (r9 == SLOT_STATE_RECV_START && !r5->remainSize) - rfu_STC_NI_initSlot_asRecvDataEntity(r8, r5); - if (r5->state == SLOT_STATE_RECEIVING) - r7 = 1; + if (state == SLOT_STATE_RECV_START && !recvSlot->remainSize) + rfu_STC_NI_initSlot_asRecvDataEntity(bm_slot_id, recvSlot); + if (recvSlot->state == SLOT_STATE_RECEIVING) + state_check = 1; } - else if (r6->unk02 == 1) + else if (llsf_NI->slotState == LCOM_NI_START) { - if (r9 == SLOT_STATE_RECV_START) + if (state == SLOT_STATE_RECV_START) { - r7 = 1; + state_check = 1; } else { - rfu_STC_NI_initSlot_asRecvControllData(r8, r5); - if (r4->recv.state != SLOT_STATE_RECV_START) + rfu_STC_NI_initSlot_asRecvControllData(bm_slot_id, recvSlot); + if (slotStatus_NI->recv.state != SLOT_STATE_RECV_START) return; - r7 = 1; + state_check = 1; } } - if (r7 != 0) + if (state_check != 0) { - if (r6->unk05 == ((r5->n[r6->unk04] + 1) & 3)) + if (llsf_NI->n == ((recvSlot->n[llsf_NI->phase] + 1) & 3)) { - gRfuFixed->fastCopyPtr(&sp00, (u8 **)&r5->now_p[r6->unk04], r6->unk06); - if (r5->state == SLOT_STATE_RECEIVING) - r5->now_p[r6->unk04] += 3 * r5->payloadSize; - r5->remainSize -= r6->unk06; - r5->n[r6->unk04] = r6->unk05; + gRfuFixed->fastCopyPtr(&data_p, (u8 **)&recvSlot->now_p[llsf_NI->phase], llsf_NI->frame); + if (recvSlot->state == SLOT_STATE_RECEIVING) + recvSlot->now_p[llsf_NI->phase] += 3 * recvSlot->payloadSize; + recvSlot->remainSize -= llsf_NI->frame; + recvSlot->n[llsf_NI->phase] = llsf_NI->n; } } - if (r5->errorCode == 0) + if (recvSlot->errorCode == 0) { - r5->phase = r6->unk04; - if (r5->state != r9 || r5->n[r6->unk04] != r10 || r5->n[r6->unk04] == r6->unk05) + recvSlot->phase = llsf_NI->phase; + if (recvSlot->state != state || recvSlot->n[llsf_NI->phase] != n || recvSlot->n[llsf_NI->phase] == llsf_NI->n) { - r2 = REG_IME; + imeBak = REG_IME; REG_IME = 0; - gRfuStatic->recvRenewalFlag |= 1 << r8; - r5->failCounter = 0; - REG_IME = r2; + gRfuStatic->recvRenewalFlag |= 1 << bm_slot_id; + recvSlot->failCounter = 0; + REG_IME = imeBak; } } } -static void rfu_STC_NI_initSlot_asRecvControllData(u8 r4, struct NIComm *r2) +static void rfu_STC_NI_initSlot_asRecvControllData(u8 bm_slot_id, struct NIComm *NI_comm) { - u8 *r1; - u32 r5; - u8 r6; + u8 *llFrameSize_p; + u32 llFrameSize; + u8 bm_slot_flag; if (gRfuLinkStatus->parentChild == MODE_PARENT) { - r5 = 3; - r1 = &gRfuLinkStatus->remainLLFrameSizeParent; + llFrameSize = 3; + llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeParent; } else { - r5 = 2; - r1 = &gRfuLinkStatus->remainLLFrameSizeChild[r4]; + llFrameSize = 2; + llFrameSize_p = &gRfuLinkStatus->remainLLFrameSizeChild[bm_slot_id]; } - r6 = 1 << r4; - if (r2->state == 0) + bm_slot_flag = 1 << bm_slot_id; + if (NI_comm->state == 0) { - if (*r1 < r5) + if (*llFrameSize_p < llFrameSize) { - r2->state = SLOT_STATE_RECV_IGNORE; - r2->errorCode = ERR_RECV_REPLY_SUBFRAME_SIZE; - gRfuStatic->recvErrorFlag |= r6; + NI_comm->state = SLOT_STATE_RECV_IGNORE; + NI_comm->errorCode = ERR_RECV_REPLY_SUBFRAME_SIZE; + gRfuStatic->recvErrorFlag |= bm_slot_flag; } else { - r2->errorCode = 0; - *r1 -= r5; - r2->now_p[0] = &r2->dataType; - r2->remainSize = 7; - r2->ack = 1; - r2->payloadSize = 0; - r2->bmSlot = r6; - r2->state = SLOT_STATE_RECV_START; - gRfuLinkStatus->recvSlotNIFlag |= r6; + NI_comm->errorCode = 0; + *llFrameSize_p -= llFrameSize; + NI_comm->now_p[0] = &NI_comm->dataType; + NI_comm->remainSize = 7; + NI_comm->ack = 1; + NI_comm->payloadSize = 0; + NI_comm->bmSlot = bm_slot_flag; + NI_comm->state = SLOT_STATE_RECV_START; + gRfuLinkStatus->recvSlotNIFlag |= bm_slot_flag; } } } -static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 r5, struct NIComm *r4) +static void rfu_STC_NI_initSlot_asRecvDataEntity(u8 bm_slot_id, struct NIComm *NI_comm) { - u8 r1, r3; + u8 bm_slot_flag, win_id; - if (r4->dataType == 1) + if (NI_comm->dataType == 1) { - r4->now_p[0] = (void *)&gRfuLinkStatus->partner[r5].serialNo; + NI_comm->now_p[0] = (void *)&gRfuLinkStatus->partner[bm_slot_id].serialNo; } else { - if (r4->dataSize > gRfuSlotStatusNI[r5]->recvBufferSize) + if (NI_comm->dataSize > gRfuSlotStatusNI[bm_slot_id]->recvBufferSize) { - r1 = 1 << r5; - gRfuStatic->recvErrorFlag |= r1; - gRfuLinkStatus->recvSlotNIFlag &= ~r1; - r4->errorCode = ERR_RECV_BUFF_OVER; - r4->state = SLOT_STATE_RECV_FAILED; - rfu_STC_releaseFrame(r5, 1, r4); + bm_slot_flag = 1 << bm_slot_id; + gRfuStatic->recvErrorFlag |= bm_slot_flag; + gRfuLinkStatus->recvSlotNIFlag &= ~bm_slot_flag; + NI_comm->errorCode = ERR_RECV_BUFF_OVER; + NI_comm->state = SLOT_STATE_RECV_FAILED; + rfu_STC_releaseFrame(bm_slot_id, 1, NI_comm); return; } - r4->now_p[0] = gRfuSlotStatusNI[r5]->recvBuffer; + NI_comm->now_p[0] = gRfuSlotStatusNI[bm_slot_id]->recvBuffer; } - for (r3 = 0; r3 < WINDOW_COUNT; ++r3) + for (win_id = 0; win_id < WINDOW_COUNT; ++win_id) { - r4->n[r3] = 0; - r4->now_p[r3] = &r4->now_p[0][r4->payloadSize * r3]; + NI_comm->n[win_id] = 0; + NI_comm->now_p[win_id] = &NI_comm->now_p[0][NI_comm->payloadSize * win_id]; } - r4->remainSize = r4->dataSize; - r4->state = SLOT_STATE_RECEIVING; + NI_comm->remainSize = NI_comm->dataSize; + NI_comm->state = SLOT_STATE_RECEIVING; } static void rfu_NI_checkCommFailCounter(void) { - u16 r12; - u32 r7; - u8 r2, r3; + u16 imeBak; + u32 recvRenewalFlag; + u8 bm_slot_flag, bm_slot_id; if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) { - r12 = REG_IME; + imeBak = REG_IME; REG_IME = 0; - r7 = gRfuStatic->recvRenewalFlag >> 4; - for (r3 = 0; r3 < RFU_CHILD_MAX; ++r3) + recvRenewalFlag = gRfuStatic->recvRenewalFlag >> 4; + for (bm_slot_id = 0; bm_slot_id < RFU_CHILD_MAX; ++bm_slot_id) { - r2 = 1 << r3; - if (gRfuLinkStatus->sendSlotNIFlag & r2 - && !(gRfuStatic->recvRenewalFlag & r2)) - ++gRfuSlotStatusNI[r3]->send.failCounter; - if (gRfuLinkStatus->recvSlotNIFlag & r2 - && !(r7 & r2)) - ++gRfuSlotStatusNI[r3]->recv.failCounter; + bm_slot_flag = 1 << bm_slot_id; + if (gRfuLinkStatus->sendSlotNIFlag & bm_slot_flag + && !(gRfuStatic->recvRenewalFlag & bm_slot_flag)) + ++gRfuSlotStatusNI[bm_slot_id]->send.failCounter; + if (gRfuLinkStatus->recvSlotNIFlag & bm_slot_flag + && !(recvRenewalFlag & bm_slot_flag)) + ++gRfuSlotStatusNI[bm_slot_id]->recv.failCounter; } gRfuStatic->recvRenewalFlag = 0; - REG_IME = r12; + REG_IME = imeBak; } } diff --git a/src/librfu_sio32id.c b/src/librfu_sio32id.c index fc5701986..b6623540f 100644 --- a/src/librfu_sio32id.c +++ b/src/librfu_sio32id.c @@ -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; } } diff --git a/src/librfu_stwi.c b/src/librfu_stwi.c index b88f21737..0287b358a 100644 --- a/src/librfu_stwi.c +++ b/src/librfu_stwi.c @@ -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); diff --git a/src/link.c b/src/link.c index dfb21f126..26e223153 100644 --- a/src/link.c +++ b/src/link.c @@ -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); diff --git a/src/link_rfu.c b/src/link_rfu.c deleted file mode 100644 index 8ab76ffd5..000000000 --- a/src/link_rfu.c +++ /dev/null @@ -1,1381 +0,0 @@ -#include "global.h" -#include "librfu.h" -#include "link_rfu.h" - -struct UnkRfuStruct_1 gUnknown_3005E10; - -static void sub_80FD4E4(void); -static void sub_80FDC28(u32 a0); -static void sub_80FDC98(u16 reqCommandId, u16 reqResult); -static void sub_80FE394(u16 reqCommandId); -static void sub_80FE418(void); -static void sub_80FE63C(void); -static void sub_80FE6F0(void); -static void sub_80FE74C(void); -static u8 sub_80FE778(void); -static void sub_80FE7F0(u8 a0, u8 a1); -static void sub_80FE818(u8 bmDisconnectSlot); -static void sub_80FE83C(u8 a0); -static void sub_80FE918(void); -static void sub_80FEAF4(void); - -u32 sub_80FD3A4(void) -{ - u32 id = rfu_REQBN_softReset_and_checkID(); - if (id == RFU_ID) - gUnknown_3005E10.unk_08 = 1; - if (gUnknown_3005E10.unk_04 != 0x17 && gUnknown_3005E10.unk_04 != 0x01) - { - gUnknown_3005E10.unk_05 = 0; - gUnknown_3005E10.unk_04 = 0; - } - gUnknown_3005E10.unk_07 = 0; - gUnknown_3005E10.unk_0d = 0; - gUnknown_3005E10.unk_01 = 0; - gUnknown_3005E10.unk_00 = 0; - gUnknown_3005E10.unk_06 = -1; - sub_80FEAF4(); - return id; -} - -void LinkRfu_REQ_SendData_HandleParentRelationship(u8 clockChangeFlag) -{ - if (gRfuLinkStatus->parentChild == MODE_CHILD) - { - if (gUnknown_3005E10.unk_02 == TRUE) - clockChangeFlag = TRUE; - else - clockChangeFlag = FALSE; - } - else - gUnknown_3005E10.unk_03 = 0; - rfu_REQ_sendData(clockChangeFlag); -} - -s32 sub_80FD430(void (*func1)(u8, u8), void (*func2)(u16)) -{ - if (func1 == NULL) - { - return 4; - } - CpuFill16(0, &gUnknown_3005E10, sizeof(struct UnkRfuStruct_1)); - gUnknown_3005E10.unk_06 = -1; - gUnknown_3005E10.unk_40 = func1; - gUnknown_3005E10.unk_44 = func2; - rfu_setMSCCallback(sub_80FE394); - rfu_setREQCallback(sub_80FDC98); - return 0; -} - -static void sub_80FD484(void) -{ - CpuFill16(0, &gUnknown_3005E10, offsetof(struct UnkRfuStruct_1, unk_40)); - gUnknown_3005E10.unk_06 = -1; -} - -void sub_80FD4B0(const struct UnkLinkRfuStruct_02022B2C *unk0) -{ - sub_80FD4E4(); - gUnknown_3005E10.unk_04 = 1; - gUnknown_3005E10.unk_05 = 2; - gUnknown_3005E10.unk_3c = unk0; - gUnknown_3005E10.unk_09 = unk0->unk_11; - gUnknown_3005E10.unk_32 = unk0->unk_12; - gUnknown_3005E10.unk_18 = unk0->unk_14; - if (unk0->unk_10) - { - gUnknown_3005E10.unk_0b = 1; - } -} - -static void sub_80FD4E4(void) -{ - u8 i; - - gUnknown_3005E10.unk_05 = 0; - gUnknown_3005E10.unk_04 = 0; - gUnknown_3005E10.unk_06 = -1; - gUnknown_3005E10.unk_07 = 0; - gUnknown_3005E10.unk_10 = 0; - gUnknown_3005E10.unk_0c = 0; - gUnknown_3005E10.unk_24 = 0; - gUnknown_3005E10.unk_30 = 0; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - gUnknown_3005E10.unk_28[i] = 0; - gUnknown_3005E10.unk_34[i] = 0; - } -} - -void sub_80FD52C(void) -{ - gUnknown_3005E10.unk_04 = 0x15; -} - -u8 sub_80FD538(u8 r5, u16 r7, u16 r8, const u16 *r6) -{ - u8 i; - const u16 *buffer; - - if (gUnknown_3005E10.unk_04 != 0 && (gUnknown_3005E10.unk_04 != 0x08 || r5 != 1)) - { - gUnknown_3005E10.unk_14 = 1; - sub_80FE7F0(0xf3, 0x01); - return 1; - } - if (rfu_getMasterSlave() == AGB_CLK_SLAVE) - { - gUnknown_3005E10.unk_14 = 2; - sub_80FE7F0(0xf3, 0x01); - return 2; - } - for (i = 0, buffer = r6; i < 16; i++) - { - if (*buffer++ == 0xFFFF) - { - break; - } - } - if (i == 16) - { - gUnknown_3005E10.unk_14 = 4; - sub_80FE7F0(0xf3, 0x01); - return 4; - } - if (r5 > 1) - { - gUnknown_3005E10.unk_07 = 1; - r5 = 1; - r7 = 0; - } - else - { - gUnknown_3005E10.unk_07 = 0; - } - if (r5 != 0) - { - gUnknown_3005E10.unk_04 = 5; - } - else - { - gUnknown_3005E10.unk_04 = 9; - if (gUnknown_3005E10.unk_0b) - { - gUnknown_3005E10.unk_0b = 2; - } - } - gUnknown_3005E10.unk_06 = r5; - gUnknown_3005E10.unk_1a = r7; - gUnknown_3005E10.unk_26 = r8; - gUnknown_3005E10.unk_20 = r6; - return 0; -} - -u8 sub_80FD610(u16 parentId, u16 unk_1a) -{ - u8 i; - - if (gUnknown_3005E10.unk_04 != 0 && (gUnknown_3005E10.unk_04 < 9 || gUnknown_3005E10.unk_04 > 11)) - { - gUnknown_3005E10.unk_14 = 1; - sub_80FE7F0(0xF3, 0x01); - return 1; - } - if (rfu_getMasterSlave() == AGB_CLK_SLAVE) - { - gUnknown_3005E10.unk_14 = 2; - sub_80FE7F0(0xF3, 0x01); - return 2; - } - for (i = 0; i < gRfuLinkStatus->findParentCount; i++) - { - if (gRfuLinkStatus->partner[i].id == parentId) - { - break; - } - } - if (gRfuLinkStatus->findParentCount == 0 || i == gRfuLinkStatus->findParentCount) - { - gUnknown_3005E10.unk_14 = 3; - sub_80FE7F0(0xF3, 0x01); - return 3; - } - if (gUnknown_3005E10.unk_04 == 0 || gUnknown_3005E10.unk_04 == 9) - { - gUnknown_3005E10.unk_04 = 12; - gUnknown_3005E10.unk_05 = 13; - } - else - { - gUnknown_3005E10.unk_04 = 11; - gUnknown_3005E10.unk_05 = 12; - } - gUnknown_3005E10.unk_1e = parentId; - gUnknown_3005E10.unk_1a = unk_1a; - if (gUnknown_3005E10.unk_07 != 0) - { - gUnknown_3005E10.unk_07 = 7; - } - return 0; -} - -static void sub_80FD6F4(u8 lossSlot) -{ - u8 i; - - if (lossSlot & gUnknown_3005E10.unk_30) - { - gUnknown_3005E10.unk_30 &= ~lossSlot; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((lossSlot >> i) & 1) - { - gUnknown_3005E10.unk_34[i] = 0; - } - } - i = gRfuLinkStatus->linkLossSlotFlag & lossSlot; - if (i) - { - sub_80FE818(i); - } - gUnknown_3005E10.unk_14 = i; - sub_80FE7F0(0x33, i); - } -} - -void sub_80FD760(bool8 a0) -{ - u8 r2; - - r2 = 0; - gUnknown_3005E10.unk_07 = 0; - if (a0) - { - sub_80FD4E4(); - gUnknown_3005E10.unk_04 = 23; - } - else - { - switch (gUnknown_3005E10.unk_04) - { - case 5: - gUnknown_3005E10.unk_04 = 8; - gUnknown_3005E10.unk_05 = 0; - r2 = 0x13; - break; - case 6: - gUnknown_3005E10.unk_04 = 7; - gUnknown_3005E10.unk_05 = 8; - break; - case 7: - gUnknown_3005E10.unk_04 = 7; - gUnknown_3005E10.unk_05 = 8; - break; - case 8: - break; - case 9: - gUnknown_3005E10.unk_05 = 0; - gUnknown_3005E10.unk_04 = 0; - r2 = 0x21; - break; - case 10: - gUnknown_3005E10.unk_04 = 11; - gUnknown_3005E10.unk_05 = 0; - break; - case 11: - gUnknown_3005E10.unk_04 = 11; - gUnknown_3005E10.unk_05 = 0; - break; - case 12: - gUnknown_3005E10.unk_05 = 0; - gUnknown_3005E10.unk_04 = 0; - r2 = 0x23; - break; - case 13: - gUnknown_3005E10.unk_04 = 14; - break; - case 14: - gUnknown_3005E10.unk_04 = 14; - break; - case 15: - break; - case 16: - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_11; - gUnknown_3005E10.unk_05 = gUnknown_3005E10.unk_12; - sub_80FE818(gRfuLinkStatus->linkLossSlotFlag); - gUnknown_3005E10.unk_14 = gRfuLinkStatus->linkLossSlotFlag; - sub_80FE7F0(0x33, 0x01); - return; - case 17: - gUnknown_3005E10.unk_04 = 18; - break; - case 18: - gUnknown_3005E10.unk_04 = 18; - break; - default: - gUnknown_3005E10.unk_05 = 0; - gUnknown_3005E10.unk_04 = 0; - r2 = 0x43; - break; - } - if (gUnknown_3005E10.unk_04 == 0) - { - sub_80FE7F0(r2, 0); - } - } -} - -static bool8 sub_80FD850(u16 reqCommandId) -{ - bool8 retVal; - u8 i; - u8 bmLinkLossSlot; - u8 linkLossReason; - u8 parentBmLinkRecoverySlot; - u8 flags; - - retVal = FALSE; - rfu_REQBN_watchLink(reqCommandId, &bmLinkLossSlot, &linkLossReason, &parentBmLinkRecoverySlot); - if (bmLinkLossSlot) - { - gUnknown_3005E10.unk_14 = bmLinkLossSlot; - gUnknown_3005E10.unk_16 = linkLossReason; - if (gUnknown_3005E10.unk_09) - { - gUnknown_3005E10.unk_0a = 1; - if (gUnknown_3005E10.unk_06 == 0 && linkLossReason == REASON_DISCONNECTED) - { - gUnknown_3005E10.unk_0a = 4; - } - if (gUnknown_3005E10.unk_0a == 1) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((bmLinkLossSlot >> i) & 1) - { - gUnknown_3005E10.unk_30 |= (1 << i); - gUnknown_3005E10.unk_34[i] = gUnknown_3005E10.unk_32; - } - } - sub_80FE7F0(0x31, 0x01); - } - else - { - gUnknown_3005E10.unk_0a = 0; - sub_80FE818(bmLinkLossSlot); - retVal = TRUE; - sub_80FE7F0(0x33, 0x01); - } - } - else - { - sub_80FE818(bmLinkLossSlot); - retVal = TRUE; - sub_80FE7F0(0x30, 0x02); - } - sub_80FEAF4(); - } - if (gRfuLinkStatus->parentChild == MODE_PARENT) - { - if (parentBmLinkRecoverySlot) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((gUnknown_3005E10.unk_30 >> i) & 1 && (parentBmLinkRecoverySlot >> i) & 1) - { - gUnknown_3005E10.unk_34[i] = 0; - } - } - gUnknown_3005E10.unk_30 &= ~parentBmLinkRecoverySlot; - gUnknown_3005E10.unk_14 = parentBmLinkRecoverySlot; - sub_80FE7F0(0x32, 0x01); - } - if (gUnknown_3005E10.unk_30) - { - flags = 0; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((gUnknown_3005E10.unk_30 >> i) & 1 && gUnknown_3005E10.unk_34[i] && --gUnknown_3005E10.unk_34[i] == 0) - { - gUnknown_3005E10.unk_30 &= ~(1 << i); - flags |= (1 << i); - } - } - if (flags) - { - sub_80FE818(flags); - retVal = TRUE; - gUnknown_3005E10.unk_14 = flags; - sub_80FE7F0(0x33, 0x01); - } - } - if (!gUnknown_3005E10.unk_30) - { - gUnknown_3005E10.unk_0a = 0; - } - } - return retVal; -} - -void LinkRfu_syncVBlank_(void) -{ - if (rfu_syncVBlank()) - { - sub_80FE7F0(0xF1, 0x00); - sub_80FEAF4(); - } -} - -void sub_80FDA30(u32 a0) -{ - u8 r2; - - if (gUnknown_3005E10.unk_40 == NULL && gUnknown_3005E10.unk_04 != 0) - { - gUnknown_3005E10.unk_04 = 0; - } - else - { - if (gUnknown_3005E10.unk_07 != 0) - { - sub_80FDC28(a0); - } - do - { - if (gUnknown_3005E10.unk_04 != 0) - { - rfu_waitREQComplete(); - gUnknown_3005E10.unk_0e = 1; - switch (gUnknown_3005E10.unk_04) - { - case 23: - r2 = sub_80FD3A4() == RFU_ID ? 0x44 : 0xFF; - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - sub_80FE7F0(r2, 0); - break; - case 1: - if (sub_80FD3A4() == RFU_ID) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; - gUnknown_3005E10.unk_05 = 3; - } - else - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - sub_80FE7F0(0xFF, 0); - } - break; - case 2: - rfu_REQ_reset(); - break; - case 3: - rfu_REQ_configSystem(gUnknown_3005E10.unk_3c->availSlotFlag, gUnknown_3005E10.unk_3c->maxMFrame, gUnknown_3005E10.unk_3c->mcTimer); - break; - case 4: - rfu_REQ_configGameData(gUnknown_3005E10.unk_3c->mbootFlag, gUnknown_3005E10.unk_3c->serialNo, (const u8 *)gUnknown_3005E10.unk_3c->gname, gUnknown_3005E10.unk_3c->uname); - break; - case 5: - rfu_REQ_startSearchChild(); - break; - case 6: - rfu_REQ_pollSearchChild(); - break; - case 7: - rfu_REQ_endSearchChild(); - break; - case 8: - break; - case 9: - rfu_REQ_startSearchParent(); - break; - case 10: - rfu_REQ_pollSearchParent(); - break; - case 11: - rfu_REQ_endSearchParent(); - break; - case 12: - rfu_REQ_startConnectParent(gUnknown_3005E10.unk_1e); - break; - case 13: - rfu_REQ_pollConnectParent(); - break; - case 14: - rfu_REQ_endConnectParent(); - break; - case 15: - break; - case 16: - rfu_REQ_CHILD_startConnectRecovery(gRfuLinkStatus->linkLossSlotFlag); - break; - case 17: - rfu_REQ_CHILD_pollConnectRecovery(); - break; - case 18: - rfu_REQ_CHILD_endConnectRecovery(); - break; - case 19: - rfu_REQ_changeMasterSlave(); - break; - case 20: - break; - case 21: - rfu_REQ_stopMode(); - break; - case 22: - break; - } - rfu_waitREQComplete(); - gUnknown_3005E10.unk_0e = 0; - } - } while (gUnknown_3005E10.unk_04 == 18 || gUnknown_3005E10.unk_04 == 19); - if (gRfuLinkStatus->parentChild != MODE_PARENT || !sub_80FD850(0)) - { - sub_80FE418(); - sub_80FE63C(); - sub_80FE74C(); - sub_80FE918(); - } - } -} - -static void sub_80FDC28(u32 a0) -{ - if (gUnknown_3005E10.unk_07 == 5) - { - gUnknown_3005E10.unk_06 = 1; - gUnknown_3005E10.unk_04 = 5; - gUnknown_3005E10.unk_1a = gUnknown_3005E10.unk_1c; - if (gUnknown_3005E10.unk_1a) - { - gUnknown_3005E10.unk_07 = 6; - } - else - { - gUnknown_3005E10.unk_07 = 1; - } - } - if (gUnknown_3005E10.unk_07 == 1) - { - gUnknown_3005E10.unk_06 = 1; - gUnknown_3005E10.unk_04 = 5; - gUnknown_3005E10.unk_1a = a0 % 140; - gUnknown_3005E10.unk_1c = 140 - gUnknown_3005E10.unk_1a; - if (gUnknown_3005E10.unk_1a) - { - gUnknown_3005E10.unk_07 = 2; - } - else - { - gUnknown_3005E10.unk_07 = 3; - } - } - if (gUnknown_3005E10.unk_07 == 3) - { - gUnknown_3005E10.unk_06 = 0; - gUnknown_3005E10.unk_1a = 40; - gUnknown_3005E10.unk_07 = 4; - gUnknown_3005E10.unk_04 = 9; - } -} - -static void sub_80FDC98(u16 reqCommandId, u16 reqResult) -{ - u8 sp0; - register u8 *stwiRecvBuffer asm("r0"); - u8 *tmp; - u8 i; - - if (gUnknown_3005E10.unk_0e != 0) - { - gUnknown_3005E10.unk_0e = 0; - switch (reqCommandId) - { - case ID_RESET_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; - gUnknown_3005E10.unk_05 = 4; - } - break; - case ID_SYSTEM_CONFIG_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; - gUnknown_3005E10.unk_05 = 0; - } - break; - case ID_GAME_CONFIG_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - sub_80FE7F0(0x00, 0x00); - } - break; - case ID_SC_START_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 6; - } - break; - case ID_SC_POLL_REQ: - if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0) - { - gUnknown_3005E10.unk_04 = 7; - gUnknown_3005E10.unk_05 = 8; - } - break; - case ID_SC_END_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; - gUnknown_3005E10.unk_05 = 0; - if (gUnknown_3005E10.unk_07 == 0) - { - sub_80FE7F0(0x13, 0x00); - } - } - break; - case ID_SP_START_REQ: - if (reqResult == 0) - { - if (gUnknown_3005E10.unk_0b == 1 && gUnknown_3005E10.unk_1a > 1) - { - gUnknown_3005E10.unk_1a--; - } - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 10; - } - break; - case ID_SP_POLL_REQ: - if (reqResult == 0) - { - sp0 = sub_80FE778(); - gUnknown_3005E10.unk_14 = sp0; - if (sp0) - { - sub_80FE7F0(0x20, 0x01); - } - if (gUnknown_3005E10.unk_0b && gUnknown_3005E10.unk_1a != 1 && gRfuLinkStatus->findParentCount == RFU_CHILD_MAX) - { - rfu_REQ_endSearchParent(); - rfu_waitREQComplete(); - gUnknown_3005E10.unk_04 = 9; - gUnknown_3005E10.unk_0b = 1; - } - } - if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0) - { - gUnknown_3005E10.unk_04 = 11; - gUnknown_3005E10.unk_05 = 0; - } - break; - case ID_SP_END_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; - if (gUnknown_3005E10.unk_07 == 0) - { - if (gUnknown_3005E10.unk_04 == 0) - { - sub_80FE7F0(0x21, 0x00); - } - } - else if (gUnknown_3005E10.unk_07 != 7) - { - gUnknown_3005E10.unk_04 = 5; - gUnknown_3005E10.unk_07 = 5; - } - } - break; - case ID_CP_START_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 13; - } - break; - case ID_CP_POLL_REQ: - if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10) && !sp0) - { - gUnknown_3005E10.unk_04 = 14; - } - if (gUnknown_3005E10.unk_1a && --gUnknown_3005E10.unk_1a == 0) - { - gUnknown_3005E10.unk_04 = 14; - } - break; - case ID_CP_END_REQ: - if (reqResult == 0 && !rfu_getConnectParentStatus(&sp0, &gUnknown_3005E10.unk_10)) - { - if (!sp0) - { - gUnknown_3005E10.unk_04 = 19; - gUnknown_3005E10.unk_05 = 15; - gUnknown_3005E10.unk_1e = 0x22; - gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_10; - } - else - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - gUnknown_3005E10.unk_1e = 0x23; - gUnknown_3005E10.unk_14 = sp0; - if (gUnknown_3005E10.unk_07) - { - gUnknown_3005E10.unk_07 = 3; - gUnknown_3005E10.unk_04 = 9; - } - } - sub_80FE7F0(gUnknown_3005E10.unk_1e, 0x01); - gUnknown_3005E10.unk_1e = 0; - } - break; - case ID_CPR_START_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_14 = gRfuLinkStatus->linkLossSlotFlag; - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 17; - for (gUnknown_3005E10.unk_10 = 0; gUnknown_3005E10.unk_10 < RFU_CHILD_MAX; gUnknown_3005E10.unk_10++) - { - if ((gRfuLinkStatus->linkLossSlotFlag >> gUnknown_3005E10.unk_10) & 1) - { - break; - } - } - } - break; - case ID_CPR_POLL_REQ: - if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0) && sp0 < 2) - { - gUnknown_3005E10.unk_04 = 18; - } - if (gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] && --gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] == 0) - { - gUnknown_3005E10.unk_04 = 18; - } - break; - case ID_CPR_END_REQ: - if (reqResult == 0 && !rfu_CHILD_getConnectRecoveryStatus(&sp0)) - { - if (!sp0) - { - gUnknown_3005E10.unk_04 = 19; - gUnknown_3005E10.unk_05 = 22; - gUnknown_3005E10.unk_1e = 0x32; - } - else - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - sub_80FE818(gRfuLinkStatus->linkLossSlotFlag); - gUnknown_3005E10.unk_1e = 0x33; - } - gUnknown_3005E10.unk_34[gUnknown_3005E10.unk_10] = 0; - gUnknown_3005E10.unk_30 = 0; - gUnknown_3005E10.unk_0a = 0; - sub_80FE7F0(gUnknown_3005E10.unk_1e, 0x01); - gUnknown_3005E10.unk_1e = 0; - } - break; - case ID_MS_CHANGE_REQ: - if (reqResult == 0) - { - if (gUnknown_3005E10.unk_05 == 22) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_11; - gUnknown_3005E10.unk_05 = gUnknown_3005E10.unk_12; - gUnknown_3005E10.unk_02 = 1; - sub_80FE7F0(0x41, 0x00); - } - else if (gUnknown_3005E10.unk_05 == 15) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05; - gUnknown_3005E10.unk_02 = 1; - sub_80FE7F0(0x41, 0x00); - gUnknown_3005E10.unk_24 |= 1 << gUnknown_3005E10.unk_10; - gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = gUnknown_3005E10.unk_26; - rfu_clearSlot(TYPE_NI_SEND, gUnknown_3005E10.unk_10); - tmp = &sp0; - *tmp = rfu_NI_CHILD_setSendGameName(gUnknown_3005E10.unk_10, 0x0e); - if (*tmp) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - sub_80FEAF4(); - sub_80FE818(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); - gUnknown_3005E10.unk_14 = sp0; - sub_80FE7F0(0x25, 0x01); - } - } - } - break; - case ID_STOP_MODE_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - sub_80FE7F0(0x42, 0x00); - } - break; - } - gUnknown_3005E10.unk_0e = 1; - } - else if (reqResult == 3 && gUnknown_3005E10.unk_0f && (reqCommandId == ID_DATA_TX_REQ || reqCommandId == ID_DATA_RX_REQ || reqCommandId == ID_MS_CHANGE_REQ)) - { - rfu_REQ_RFUStatus(); - rfu_waitREQComplete(); - rfu_getRFUStatus(&sp0); - if (sp0 == 0 && gRfuLinkStatus->parentChild == MODE_CHILD) - { - stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data; - stwiRecvBuffer[4] = gRfuLinkStatus->connSlotFlag; - stwiRecvBuffer[5] = 1; - sub_80FD850(0x29); - reqResult = 0; - } - } - switch (reqCommandId) - { - case ID_DISCONNECT_REQ: - if (reqResult == 0) - { - stwiRecvBuffer = rfu_getSTWIRecvBuffer()->rxPacketAlloc.rfuPacket8.data; - gUnknown_3005E10.unk_14 = stwiRecvBuffer[8]; - sub_80FE83C(gUnknown_3005E10.unk_14); - if (gUnknown_3005E10.unk_30) - { - gUnknown_3005E10.unk_30 &= ~gUnknown_3005E10.unk_14; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((gUnknown_3005E10.unk_14 >> i) & 1) - { - gUnknown_3005E10.unk_34[i] = 0; - } - } - if (gUnknown_3005E10.unk_06 == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - } - } - sp0 = gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if ((sp0 >> i) & 1 && gUnknown_3005E10.unk_01) - { - gUnknown_3005E10.unk_01--; - } - } - gUnknown_3005E10.unk_00 &= ~gUnknown_3005E10.unk_14; - if (gUnknown_3005E10.unk_07) - { - if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) - { - if (gUnknown_3005E10.unk_07 == 8) - { - gUnknown_3005E10.unk_1a = gUnknown_3005E10.unk_1c; - gUnknown_3005E10.unk_07 = 6; - gUnknown_3005E10.unk_04 = 6; - } - else if (gUnknown_3005E10.unk_04 != 6 && gUnknown_3005E10.unk_04 != 7) - { - gUnknown_3005E10.unk_07 = 1; - gUnknown_3005E10.unk_04 = 5; - } - } - } - if (gRfuLinkStatus->parentChild == MODE_NEUTRAL) - { - if (gUnknown_3005E10.unk_04 == 0) - { - gUnknown_3005E10.unk_06 = -1; - } - } - if (gUnknown_3005E10.unk_0e == 0) - { - sub_80FE7F0(0x40, 0x01); - } - } - break; - case ID_DATA_RX_REQ: - sub_80FE6F0(); - if (gRfuLinkStatus->parentChild != MODE_NEUTRAL) - { - sub_80FE7F0(0x50, 0x00); - } - break; - case ID_RESET_REQ: - case ID_STOP_MODE_REQ: - if (reqResult == 0) - { - gUnknown_3005E10.unk_0d = 0; - gUnknown_3005E10.unk_01 = 0; - gUnknown_3005E10.unk_00 = 0;; - gUnknown_3005E10.unk_06 = -1; - sub_80FEAF4(); - if (reqCommandId == 61) - { - sub_80FD484(); - } - } - break; - } - if (reqResult != 0) - { - if (reqCommandId == ID_SP_START_REQ && reqResult != 0 && gUnknown_3005E10.unk_07 == 4) - { - gRfuLinkStatus->parentChild = MODE_PARENT; - gRfuLinkStatus->connSlotFlag = 0xF; - sub_80FE818(15); - rfu_waitREQComplete(); - return; - } - else - { - gUnknown_3005E10.unk_14 = reqCommandId; - gUnknown_3005E10.unk_16 = reqResult; - if (gUnknown_3005E10.unk_0e) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - } - sub_80FE7F0(0xf0, 0x02); - sub_80FEAF4(); - } - } - if (reqCommandId == ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ) - { - sub_80FE7F0(0xf2, 0x00); - sub_80FEAF4(); - } -} - -static void sub_80FE394(u16 reqCommandId) -{ - u8 r7; - u8 ackFlag; - - r7 = gUnknown_3005E10.unk_0e; - gUnknown_3005E10.unk_0e = 0; - gUnknown_3005E10.unk_0f = 1; - if (gRfuLinkStatus->parentChild == MODE_CHILD) - { - sub_80FD850(reqCommandId); - if (gUnknown_3005E10.unk_02 != 1) - { - sub_80FEAF4(); - gUnknown_3005E10.unk_0f = 0; - gUnknown_3005E10.unk_0e = r7; - return; - } - } - else - { - if (!rfu_UNI_PARENT_getDRAC_ACK(&ackFlag)) - { - gUnknown_3005E10.unk_03 |= ackFlag; - } - } - if (gUnknown_3005E10.unk_44 != NULL) - { - gUnknown_3005E10.unk_44(reqCommandId); - rfu_waitREQComplete(); - if (gUnknown_3005E10.unk_02 == 2) - { - sub_80FEAF4(); - } - } - gUnknown_3005E10.unk_0f = 0; - gUnknown_3005E10.unk_0e = r7; -} - -static void sub_80FE418(void) -{ - u8 flags; - u8 sp0; - u8 i; - u8 r5; - u8 r4; - const u16 *ptr; - - if (gUnknown_3005E10.unk_04 == 5 || gUnknown_3005E10.unk_04 == 6 || gUnknown_3005E10.unk_04 == 7 || gUnknown_3005E10.unk_04 == 8) - { - flags = ((gRfuLinkStatus->connSlotFlag ^ gUnknown_3005E10.unk_0c) & gRfuLinkStatus->connSlotFlag) & ~gRfuLinkStatus->getNameFlag; - gUnknown_3005E10.unk_0c = gRfuLinkStatus->connSlotFlag; - if (flags) - { - gUnknown_3005E10.unk_14 = flags; - sub_80FE7F0(0x10, 0x01); - } - sp0 = 0x00; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - r4 = 1 << i; - r5 = 0x00; - if (flags & r4) - { - gUnknown_3005E10.unk_28[i] = gUnknown_3005E10.unk_26; - gUnknown_3005E10.unk_24 |= r4; - } - else if (gUnknown_3005E10.unk_24 & r4) - { - if (gRfuSlotStatusNI[i]->recv.state == SLOT_STATE_RECV_SUCCESS) - { - if (gRfuSlotStatusNI[i]->recv.dataType == 1) // Game identification information - { - r5 = 0x02; - for (ptr = gUnknown_3005E10.unk_20; *ptr != 0xFFFF; ptr++) - { - if (gRfuLinkStatus->partner[i].serialNo == *ptr) - { - gUnknown_3005E10.unk_00 |= r4; - gUnknown_3005E10.unk_01++; - sp0 |= r4; - r5 |= 0x01; - break; - } - } - if (!(r5 & 0x01)) - { - r5 |= 0x04; - } - } - } - else if (--gUnknown_3005E10.unk_28[i] == 0) - { - r5 = 0x06; - } - if (r5 & 0x02) - { - gUnknown_3005E10.unk_24 &= ~r4; - gUnknown_3005E10.unk_28[i] = 0; - rfu_clearSlot(TYPE_NI_RECV, i); - } - if (r5 & 0x04) - { - gUnknown_3005E10.unk_0d |= r4; - } - } - } - if (sp0) - { - gUnknown_3005E10.unk_14 = sp0; - sub_80FE7F0(0x11, 0x01); - } - if (gUnknown_3005E10.unk_0d) - { - r5 = 0x01; - if (gRfuLinkStatus->sendSlotUNIFlag && ((gUnknown_3005E10.unk_03 & gUnknown_3005E10.unk_00) != gUnknown_3005E10.unk_00)) - { - r5 = 0x00; - } - if (r5) - { - sub_80FE818(gUnknown_3005E10.unk_0d); - gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_0d; - gUnknown_3005E10.unk_0d = 0; - sub_80FE7F0(0x12, 0x01); - } - } - if (gUnknown_3005E10.unk_24 == 0 && gUnknown_3005E10.unk_04 == 8) - { - if (gUnknown_3005E10.unk_07 == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - sub_80FE7F0(0x14, 0x00); - } - else - { - if (gUnknown_3005E10.unk_07 == 2) - { - gUnknown_3005E10.unk_07 = 3; - gUnknown_3005E10.unk_04 = 9; - } - else - { - gUnknown_3005E10.unk_07 = 1; - gUnknown_3005E10.unk_04 = 5; - } - if (gUnknown_3005E10.unk_00) - { - gUnknown_3005E10.unk_1a = 0; - gUnknown_3005E10.unk_07 = 8; - gUnknown_3005E10.unk_04 = 5; - } - } - } - } -} - -static void sub_80FE63C(void) -{ - u16 imeBak = REG_IME; - REG_IME = 0; - if (gUnknown_3005E10.unk_04 == 15) - { - if (--gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] == 0 || gRfuSlotStatusNI[gUnknown_3005E10.unk_10]->send.state == SLOT_STATE_SEND_FAILED) - { - sub_80FEB14(); - gUnknown_3005E10.unk_04 = 24; - rfu_clearSlot(TYPE_NI_SEND, gUnknown_3005E10.unk_10); - gUnknown_3005E10.unk_24 &= ~(1 << gUnknown_3005E10.unk_10); - gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = 0; - } - } - REG_IME = imeBak; - if (gUnknown_3005E10.unk_04 == 24) - { - if (gUnknown_3005E10.unk_02 == 1) - { - sub_80FEB14(); - } - if (gUnknown_3005E10.unk_02 == 0) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - sub_80FE818(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); - gUnknown_3005E10.unk_14 = 0; - sub_80FE7F0(0x25, 0x01); - } - } -} - -static void sub_80FE6F0(void) -{ - if (gUnknown_3005E10.unk_04 == 15 && gRfuSlotStatusNI[gUnknown_3005E10.unk_10]->send.state == SLOT_STATE_SEND_SUCCESS) - { - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; - rfu_clearSlot(TYPE_NI_SEND, gUnknown_3005E10.unk_10); - gUnknown_3005E10.unk_24 &= ~(1 << gUnknown_3005E10.unk_10); - gUnknown_3005E10.unk_28[gUnknown_3005E10.unk_10] = 0; - sub_80FE7F0(0x24, 0x00); - } -} - -static void sub_80FE74C(void) -{ - if (gUnknown_3005E10.unk_06 == 0 && gUnknown_3005E10.unk_0a == 1) - { - gUnknown_3005E10.unk_11 = gUnknown_3005E10.unk_04; - gUnknown_3005E10.unk_12 = gUnknown_3005E10.unk_05; - gUnknown_3005E10.unk_04 = 16; - gUnknown_3005E10.unk_05 = 17; - gUnknown_3005E10.unk_0a = 2; - } -} - -static u8 sub_80FE778(void) -{ - u8 i; - const u16 *ptr; - u8 flags = 0x00; - - for (i = 0; i < gRfuLinkStatus->findParentCount; i++) - { - for (ptr = gUnknown_3005E10.unk_20; *ptr != 0xFFFF; ptr++) - { - if (gRfuLinkStatus->partner[i].serialNo == *ptr) - { - flags |= (1 << i); - } - } - } - return flags; -} - -static void sub_80FE7F0(u8 a0, u8 a1) -{ - if (gUnknown_3005E10.unk_40 != NULL) - { - gUnknown_3005E10.unk_40(a0, a1); - } - gUnknown_3005E10.unk_14 = gUnknown_3005E10.unk_16 = 0; -} - -static void sub_80FE818(u8 a0) -{ - u8 unk_0e_bak = gUnknown_3005E10.unk_0e; - gUnknown_3005E10.unk_0e = 1; - rfu_REQ_disconnect(a0); - rfu_waitREQComplete(); - gUnknown_3005E10.unk_0e = unk_0e_bak; -} - -static void sub_80FE83C(u8 a0) -{ - u8 i; - - if (gRfuLinkStatus->sendSlotNIFlag) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->send.bmSlot & a0) - { - rfu_changeSendTarget(TYPE_NI, i, gRfuSlotStatusNI[i]->send.bmSlot & ~a0); - } - } - } - if (gRfuLinkStatus->recvSlotNIFlag) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.bmSlot & a0) - { - rfu_NI_stopReceivingData(i); - } - } - } - if (gRfuLinkStatus->sendSlotUNIFlag) - { - gRfuLinkStatus->sendSlotUNIFlag &= ~a0; - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusUNI[i]->send.state == SLOT_STATE_SEND_UNI && a0 & gRfuSlotStatusUNI[i]->send.bmSlot) - { - gRfuSlotStatusUNI[i]->send.bmSlot &= ~a0; - } - } - } -} - -static void sub_80FE918(void) -{ - u8 i; - u8 j; - u8 flags; - - if (gUnknown_3005E10.unk_18) - { - if (gRfuLinkStatus->sendSlotNIFlag) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusNI[i]->send.state & SLOT_BUSY_FLAG) - { - flags = 0; - for (j = 0; j < RFU_CHILD_MAX; j++) - { - if ((gRfuSlotStatusNI[i]->send.bmSlot >> j) & 1 && gRfuSlotStatusNI[j]->send.failCounter > gUnknown_3005E10.unk_18) - { - flags |= (1 << j); - } - if (flags) - { - rfu_changeSendTarget(TYPE_NI, i, flags ^ gRfuSlotStatusNI[i]->send.bmSlot); - } - } - } - } - } - if (gRfuLinkStatus->recvSlotNIFlag) - { - for (i = 0; i < RFU_CHILD_MAX; i++) - { - if (gRfuSlotStatusNI[i]->recv.state & SLOT_BUSY_FLAG && gRfuSlotStatusNI[i]->recv.failCounter > gUnknown_3005E10.unk_18) - { - rfu_NI_stopReceivingData(i); - } - } - } - } -} - -void sub_80FEA10(void (*func)(u16)) -{ - gUnknown_3005E10.unk_44 = func; - rfu_setMSCCallback(sub_80FE394); -} - -static void sub_80FEA28(void (*func)(u8, u8)) -{ - gUnknown_3005E10.unk_40 = func; -} - -u8 sub_80FEA34(u8 a0, u16 a1) -{ - u16 imeBak; - if (gUnknown_3005E10.unk_09 && a0 == 0 && gUnknown_3005E10.unk_30) - { - return 5; - } - imeBak = REG_IME; - REG_IME = 0; - gUnknown_3005E10.unk_09 = a0; - gUnknown_3005E10.unk_32 = a1; - REG_IME = imeBak; - return 0; -} - -static u8 sub_80FEA78(u16 a0) -{ - if (gRfuLinkStatus->sendSlotNIFlag | gRfuLinkStatus->recvSlotNIFlag) - { - gUnknown_3005E10.unk_14 = 6; - sub_80FE7F0(0xf3, 0x01); - return 6; - } - gUnknown_3005E10.unk_18 = a0; - return 0; -} - -static u8 sub_80FEAB4(u8 a0) -{ - if (gUnknown_3005E10.unk_04 == 9 || gUnknown_3005E10.unk_04 == 10 || gUnknown_3005E10.unk_04 == 11) - { - gUnknown_3005E10.unk_14 = 7; - sub_80FE7F0(0xf3, 0x01); - return 7; - } - if (a0) - { - gUnknown_3005E10.unk_0b = 1; - } - else - { - gUnknown_3005E10.unk_0b = 0; - } - return 0; -} - -static void sub_80FEAF4(void) -{ - if (gUnknown_3005E10.unk_02) - { - gUnknown_3005E10.unk_02 = 0; - sub_80FE7F0(0x45, 0x00); - } -} - -void sub_80FEB14(void) -{ - if (gUnknown_3005E10.unk_02 == 0) - { - sub_80FE7F0(0x45, 0x00); - } - else if (gUnknown_3005E10.unk_02 == 1) - { - gUnknown_3005E10.unk_02 = 2; - } -} - -void sub_80FEB3C(void) -{ - if (gUnknown_3005E10.unk_07) - { - switch (gUnknown_3005E10.unk_04) - { - case 5: - gUnknown_3005E10.unk_07 = 3; - gUnknown_3005E10.unk_04 = 9; - break; - case 6: - gUnknown_3005E10.unk_07 = 2; - gUnknown_3005E10.unk_1a = 1; - break; - case 7: - case 8: - gUnknown_3005E10.unk_07 = 2; - break; - case 9: - case 10: - gUnknown_3005E10.unk_1a = 40; - break; - case 11: - gUnknown_3005E10.unk_1a = 40; - gUnknown_3005E10.unk_04 = 10; - break; - } - } -} diff --git a/src/link_rfu_2.c b/src/link_rfu_2.c index 17f604ee8..2259e9214 100644 --- a/src/link_rfu_2.c +++ b/src/link_rfu_2.c @@ -12,67 +12,69 @@ #include "string_util.h" #include "task.h" #include "constants/species.h" +#include "constants/union_room.h" -struct UnkRfuStruct_8010A14{ - char unk_00[15]; // PokemonSioInfo - u8 unk_0f; - u8 unk_10[4]; - struct LinkPlayer unk_14[5]; +struct SioInfo +{ + char magic[15]; // PokemonSioInfo + u8 playerCount; + u8 linkPlayerIdx[RFU_CHILD_MAX]; + struct LinkPlayer linkPlayers[MAX_RFU_PLAYERS]; u8 fill_a0[0x5c]; }; -static EWRAM_DATA struct UnkLinkRfuStruct_02022B2C sRfuReqConfig = {}; +static EWRAM_DATA struct InitializeParametersTag sRfuReqConfig = {}; static EWRAM_DATA struct UnkLinkRfuStruct_02022B44 gUnknown_203AC08 = {}; -static struct RfuAPIBuffer gRfuAPIBuffer; -static u8 gUnknown_3001FF8[14]; -static u16 gUnknown_3002008[7]; +static u32 gf_rfu_REQ_api[RFU_API_BUFF_SIZE_RAM / 4]; +static u8 sResendBlock8[14]; +static u16 sResendBlock16[7]; struct GFtgtGname gHostRFUtgtGnameBuffer; -struct UnkRfuStruct_2 Rfu; -u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH]; +GF_RFU_MANAGER Rfu; +u8 gHostRFUtgtUnameBuffer[PLAYER_NAME_LENGTH + 1]; static void sub_80F8AA4(void); static void sub_80F8AEC(void); -static void sub_80F8D20(u16 a0); -static void sub_80F8DA8(u16 a0); +static void MscCallback_Child(u16 a0); +static void MSCCallback_SetUnkCDB(u16 a0); static void sub_80F906C(void); -static void sub_80F9868(u8 unused); -static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data); -static void sub_80F9D04(u16 command); -static void rfufunc_80F9F44(void); -static void sub_80F9FA8(void); -static void rfufunc_80FA020(void); +static void RfuHandleReceiveCommand(u8 unused); +static void ResetSendDataManager(struct RfuBlockSend *data); +static void RfuPrepareSendBuffer(u16 command); +static void RfuFunc_HandleBlockSend(void); +static void RfuFunc_SendNextBlock(void); +static void RfuFunc_SendLastBlock(void); static void CallRfuFunc(void); static void sub_80FA738(void); static int sub_80FA788(void); static void sub_80FA834(u8 taskId); static void sub_80FA9D0(u16 a0); -static void sub_80FAA58(void * a0); -static void sub_80FAA94(u8 taskId); +static void ValidateAndReceivePokemonSioInfo(void * a0); +static void Task_ExchangeLinkPlayers(u8 taskId); static void sub_80FACF0(u8 taskId); -static void sub_80FB0E8(u32 a0); -static void sub_80FB564(s32 a0); +static void GetLinkmanErrorParams(u32 msg); +static void sub_80FB564(s32 bmConnectedFlag); static void sub_80FBB74(void); -static u8 sub_80FBC70(const u8 *a0, u16 a1); -static void sub_80FBCF8(u32 a0); +static u8 GetPartnerIndexByNameAndTrainerID(const u8 *trainerName, u16 trainerId); +static void RfuReqDisconnectSlot(u32 bmDisconnectSlot); static void sub_80FBE20(u32 a0, u32 a1); static void sub_80FC028(u8 taskId); -static void sub_80FC208(void); -static void nullsub_89(u8 taskId); +static void rfu_dbg_clear(void); +static void Task_idle(u8 taskId); -static const struct UnkLinkRfuStruct_02022B2C sRfuReqConfigTemplate = { +static const struct InitializeParametersTag sRfuReqConfigTemplate = { .maxMFrame = 4, - .mcTimer = 32, - .availSlotFlag = 0, - .mbootFlag = 0, + .MC_TimerCount = 32, + .availSlot_flag = 0, + .mboot_flag = 0, .serialNo = 0x0002, - .gname = &gHostRFUtgtGnameBuffer, - .uname = gHostRFUtgtUnameBuffer, - .unk_10 = 0x01, - .unk_11 = 0x00, - .unk_12 = 0x0258, - .unk_14 = 0x012c + .gameName = (void *)&gHostRFUtgtGnameBuffer, + .userName = gHostRFUtgtUnameBuffer, + .fastSearchParent_flag = TRUE, + .linkRecovery_enable = FALSE, + .linkRecovery_period = 600, + .NI_failCounter_limit = 300 }; static const u8 sAvailSlots[] = { @@ -82,7 +84,7 @@ static const u8 sAvailSlots[] = { [4] = AVAIL_SLOT4 }; -static const u32 gUnknown_843EBD4[] = { +static const u32 sAllBlocksReceived[] = { 0x000000, 0x000001, 0x000003, @@ -138,8 +140,10 @@ static const struct { { gBlockSendBuffer, 40 } }; -static const u16 gUnknown_843EC8C[] = { - 0x0002, 0x7f7d, 0xFFFF +static const u16 sAcceptedSerialNos[] = { + 0x0002, // Pokemon FR/LG/EM + 0x7f7d, + 0xFFFF }; static const char sUnref_843EC92[][15] = { @@ -166,38 +170,38 @@ static const char sUnref_843ED37[][16] = { static const TaskFunc gUnknown_843ED88[] = { sub_80FA834, - sub_80FAA94, + Task_ExchangeLinkPlayers, sub_80FACF0 }; -static void nullsub_87(const void *unused_0, u8 unused_1, u8 unused_2) +static void rfu_dbg_print_str(const void *string, u8 x, u8 y) { // debug? } -static void nullsub_88(u16 unused_0, u8 unused_1, u8 unused_2, u8 unused_3) +static void rfu_dbg_print_num(u16 num, u8 x, u8 y, u8 ndigits) { } -void sub_80F85F8(void) +void ResetLinkRfuGFLayer(void) { s32 i; - u8 unk_ee_bak = Rfu.unk_ee; + u8 errorState_bak = Rfu.errorState; CpuFill16(0, &Rfu, sizeof Rfu); - Rfu.unk_0c = 0xFF; - Rfu.unk_ee = unk_ee_bak; - if (Rfu.unk_ee != 4) + Rfu.parent_child = MODE_NEUTRAL; + Rfu.errorState = errorState_bak; + if (Rfu.errorState != 4) { - Rfu.unk_ee = 0; + Rfu.errorState = 0; } for (i = 0; i < 5; i++) { - sub_80F9CB4(Rfu.unk_80 + i); + ResetSendDataManager(Rfu.cmd_8800_recvbuf + i); } - sub_80F9CB4(&Rfu.unk_6c); - sub_80FC478(&Rfu.unk_124); - sub_80FC4D4(&Rfu.unk_9e8); + ResetSendDataManager(&Rfu.cmd_8800_sendbuf); + RFU_queue_20_70_reset(&Rfu.unk_124); + RFU_queue_40_14_reset(&Rfu.unk_9e8); CpuFill16(0, gSendCmd, sizeof gSendCmd); CpuFill16(0, gRecvCmds, sizeof gRecvCmds); CpuFill16(0, gLinkPlayers, sizeof gLinkPlayers); @@ -218,46 +222,46 @@ void InitRFU(void) void sub_80F86F4(void) { - if (!rfu_initializeAPI(&gRfuAPIBuffer, sizeof gRfuAPIBuffer, gIntrTable + 1, TRUE)) + if (!rfu_initializeAPI(gf_rfu_REQ_api, RFU_API_BUFF_SIZE_RAM, gIntrTable + 1, TRUE)) { gLinkType = 0; sub_80FB128(FALSE); - sub_80F85F8(); + ResetLinkRfuGFLayer(); rfu_setTimerInterrupt(3, gIntrTable + 2); } } -static void sub_80F8738(u8 taskId) +static void Task_LinkLeaderSearchForChildren(u8 taskId) { sub_80FA738(); - switch (Rfu.unk_04) + switch (Rfu.state) { case 0: - sub_80FD4B0(&sRfuReqConfig); - Rfu.unk_04 = 1; + rfu_LMAN_initializeRFU(&sRfuReqConfig); + Rfu.state = 1; gTasks[taskId].data[1] = 1; break; case 1: break; case 2: - sub_80FD538(Rfu.unk_0c, 0, 240, gUnknown_843EC8C); - Rfu.unk_04 = 3; + rfu_LMAN_establishConnection(Rfu.parent_child, 0, 240, (u16*)sAcceptedSerialNos); + Rfu.state = 3; gTasks[taskId].data[1] = 6; break; case 3: break; case 4: - sub_80FD760(FALSE); - Rfu.unk_04 = 5; + rfu_LMAN_stopManager(0); + Rfu.state = 5; break; case 5: break; case 18: Rfu.unk_cdb = 0; - sub_80FEA10(sub_80F8DA8); + rfu_LMAN_setMSCCallback(MSCCallback_SetUnkCDB); sub_80F8AA4(); sub_80F8AEC(); - Rfu.unk_04 = 20; + Rfu.state = 20; gTasks[taskId].data[1] = 8; CreateTask(sub_80FA834, 5); DestroyTask(taskId); @@ -282,7 +286,7 @@ static void sub_80F887C(s32 r2, s32 r5) { if (r2 & 1) { - Rfu.unk_cde[i] = r4; + Rfu.linkPlayerIdx[i] = r4; r4++; } } @@ -293,12 +297,12 @@ static void sub_80F887C(s32 r2, s32 r5) { if (!(r1 & 1)) { - Rfu.unk_cde[i] = 0; + Rfu.linkPlayerIdx[i] = 0; } } for (r4 = 4; r4 != 0; r4--) { - for (i = 0; i < RFU_CHILD_MAX && Rfu.unk_cde[i] != r4; i++); + for (i = 0; i < RFU_CHILD_MAX && Rfu.linkPlayerIdx[i] != r4; i++); if (i == 4) { r6 = r4; @@ -308,26 +312,26 @@ static void sub_80F887C(s32 r2, s32 r5) { if (r5 & 1) { - Rfu.unk_cde[i] = r6++; + Rfu.linkPlayerIdx[i] = r6++; } } } } -static void sub_80F893C(u8 taskId) +static void Task_JoinGroupSearchForParent(u8 taskId) { - switch (Rfu.unk_04) + switch (Rfu.state) { case 0: - sub_80FD4B0(&sRfuReqConfigTemplate); - Rfu.unk_04 = 1; + rfu_LMAN_initializeRFU((INIT_PARAM*)&sRfuReqConfigTemplate); + Rfu.state = 1; gTasks[taskId].data[1] = 1; break; case 1: break; case 6: - sub_80FD538(Rfu.unk_0c, 0, 0xf0, gUnknown_843EC8C); - Rfu.unk_04 = 7; + rfu_LMAN_establishConnection(Rfu.parent_child, 0, 240, (u16*)sAcceptedSerialNos); + Rfu.state = 7; gTasks[taskId].data[1] = 7; break; case 7: @@ -339,11 +343,11 @@ static void sub_80F893C(u8 taskId) switch (sub_80FA788()) { case 5: - Rfu.unk_04 = 12; + Rfu.state = 12; break; case 6: case 9: - sub_80FEB14(); + rfu_LMAN_requestChangeAgbClockMaster(); Rfu.unk_ce4 = 2; DestroyTask(taskId); break; @@ -351,15 +355,15 @@ static void sub_80F893C(u8 taskId) break; case 12: { - u8 r5 = 1 << Rfu.unk_c3e; - rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, Rfu.unk_c3e); - rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, sizeof(Rfu.unk_c3f)); - rfu_UNI_setSendData(r5, Rfu.unk_4c, sizeof(Rfu.unk_4c)); + u8 bmChildSlot = 1 << Rfu.child_slot; + rfu_clearSlot(TYPE_NI_SEND | TYPE_NI_RECV, Rfu.child_slot); + rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f)); + rfu_UNI_setSendData(bmChildSlot, Rfu.unk_4c, sizeof(Rfu.unk_4c)); gTasks[taskId].data[1] = 8; DestroyTask(taskId); if (gUnknown_203AC08.unk_0f == 0) { - sub_80FC208(); + rfu_dbg_clear(); gUnknown_203AC08.unk_0f++; } CreateTask(sub_80FA834, 5); @@ -371,56 +375,56 @@ static void sub_80F893C(u8 taskId) static void sub_80F8AA4(void) { u8 i; - u8 r5 = gUnknown_3005E10.unk_00; + u8 acceptSlot = lman.acceptSlot_flag; for (i = 0; i < RFU_CHILD_MAX; i++) { - if (r5 & 1) + if (acceptSlot & 1) { rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], sizeof(Rfu.unk_14[i])); rfu_clearSlot(TYPE_UNI_SEND | TYPE_UNI_RECV, i); } - r5 >>= 1; + acceptSlot >>= 1; } } static void sub_80F8AEC(void) { - u8 r5 = gUnknown_3005E10.unk_00; - rfu_UNI_setSendData(r5, Rfu.unk_c87, sizeof(Rfu.unk_c87)); - Rfu.unk_cda = sub_80F886C(r5); - Rfu.unk_ce2 = r5; - sub_80F887C(r5, -1); - Rfu.unk_0c = 1; + u8 acceptSlot = lman.acceptSlot_flag; + rfu_UNI_setSendData(acceptSlot, Rfu.recvCmds, sizeof(Rfu.recvCmds)); + Rfu.unk_cda = sub_80F886C(acceptSlot); + Rfu.bm_PartnerFlags = acceptSlot; + sub_80F887C(acceptSlot, -1); + Rfu.parent_child = MODE_PARENT; } -static void sub_80F8B34(u8 taskId) +static void Task_LinkRfu_UnionRoomListen(u8 taskId) { - if (sub_80F9800()->unk_0a_0 == 0x54 && sub_80FB9F4() == 4) + if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM) && RfuGetErrorStatus() == 4) { - rfu_REQ_disconnect(gUnknown_3005E10.unk_00); + rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_waitREQComplete(); - sub_80FB9E4(0, 0); + RfuSetErrorStatus(0, 0); } - switch (Rfu.unk_04) + switch (Rfu.state) { case 0: - sub_80FD4B0(&sRfuReqConfig); - Rfu.unk_04 = 1; + rfu_LMAN_initializeRFU(&sRfuReqConfig); + Rfu.state = 1; gTasks[taskId].data[1] = 1; break; case 1: break; case 17: - sub_80FD538(2, 0, 240, gUnknown_843EC8C); - sub_80FEA10(sub_80F8D20); - Rfu.unk_04 = 18; + rfu_LMAN_establishConnection(2, 0, 240, (u16*)sAcceptedSerialNos); + rfu_LMAN_setMSCCallback(MscCallback_Child); + Rfu.state = 18; break; case 18: break; case 13: - if (rfu_UNI_setSendData(1 << Rfu.unk_c3e, Rfu.unk_4c, sizeof(Rfu.unk_4c)) == 0) + if (rfu_UNI_setSendData(1 << Rfu.child_slot, Rfu.unk_4c, sizeof(Rfu.unk_4c)) == 0) { - Rfu.unk_0c = 0; + Rfu.parent_child = MODE_CHILD; DestroyTask(taskId); if (gTasks[taskId].data[7]) { @@ -433,38 +437,38 @@ static void sub_80F8B34(u8 taskId) } break; case 14: - sub_80FD760(0); - Rfu.unk_04 = 15; + rfu_LMAN_stopManager(0); + Rfu.state = 15; break; case 15: break; case 16: Rfu.unk_cdb = 0; - sub_80FEA10(sub_80F8DA8); - sub_80FAFE0(1); + rfu_LMAN_setMSCCallback(MSCCallback_SetUnkCDB); + UpdateGameData_GroupLockedIn(1); sub_80F8AA4(); sub_80F8AEC(); - Rfu.unk_04 = 20; + Rfu.state = 20; gTasks[taskId].data[1] = 8; - Rfu.unk_0c = 1; + Rfu.parent_child = MODE_PARENT; CreateTask(sub_80FA834, 5); - Rfu.unk_ce8 = 1; + Rfu.unk_ce8 = TRUE; DestroyTask(taskId); break; } } -void sub_80F8CFC(void) +void LinkRfu_CreateConnectionAsParent(void) { - sub_80FD538(1, 0, 240, gUnknown_843EC8C); + rfu_LMAN_establishConnection(MODE_PARENT, 0, 240, (u16*)sAcceptedSerialNos); } -void sub_80F8D14(void) +void LinkRfu_StopManagerBeforeEnteringChat(void) { - sub_80FD760(FALSE); + rfu_LMAN_stopManager(0); } -static void sub_80F8D20(u16 unused) +static void MscCallback_Child(u16 unused) { s32 i; @@ -474,53 +478,53 @@ static void sub_80F8D20(u16 unused) } rfu_REQ_recvData(); rfu_waitREQComplete(); - if (gRfuSlotStatusUNI[Rfu.unk_c3e]->recv.newDataFlag) + if (gRfuSlotStatusUNI[Rfu.child_slot]->recv.newDataFlag) { Rfu.unk_cd0++; - sub_80FC588(&Rfu.unk_124, Rfu.unk_c3f); + RFU_queue_20_70_recv(&Rfu.unk_124, Rfu.unk_c3f); gUnknown_203AC08.unk_06++; sub_80F906C(); - rfu_UNI_readySendData(Rfu.unk_c3e); - rfu_UNI_clearRecvNewDataFlag(Rfu.unk_c3e); + rfu_UNI_readySendData(Rfu.child_slot); + rfu_UNI_clearRecvNewDataFlag(Rfu.child_slot); } - LinkRfu_REQ_SendData_HandleParentRelationship(TRUE); + rfu_LMAN_REQ_sendData(TRUE); } -static void sub_80F8DA8(u16 unused) +static void MSCCallback_SetUnkCDB(u16 unused) { Rfu.unk_cdb = 1; } -void sub_80F8DC0(void) +void LinkRfu_Shutdown(void) { u8 i; if (gQuestLogState == 2 || gQuestLogState == 3) return; - sub_80FD52C(); - if (Rfu.unk_0c == 1) + rfu_LMAN_powerDownRFU(); + if (Rfu.parent_child == MODE_PARENT) { - if (FuncIsActiveTask(sub_80F8738) == TRUE) + if (FuncIsActiveTask(Task_LinkLeaderSearchForChildren) == TRUE) { DestroyTask(Rfu.unk_67); - sub_80F85F8(); + ResetLinkRfuGFLayer(); } } - else if (Rfu.unk_0c == 0) + else if (Rfu.parent_child == MODE_CHILD) { - if (FuncIsActiveTask(sub_80F893C) == TRUE) + if (FuncIsActiveTask(Task_JoinGroupSearchForParent) == TRUE) { DestroyTask(Rfu.unk_67); - sub_80F85F8(); + ResetLinkRfuGFLayer(); } } - else if (Rfu.unk_0c == 2) + else if (Rfu.parent_child == 2) { - if (FuncIsActiveTask(sub_80F8B34) == TRUE) + if (FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE) { DestroyTask(Rfu.unk_67); - sub_80F85F8(); + ResetLinkRfuGFLayer(); } } for (i = 0; i < NELEMS(gUnknown_843ED88); i++) @@ -532,59 +536,59 @@ void sub_80F8DC0(void) } } -static void sub_80F8E74(void) +static void CreateTask_LinkLeaderSearchForChildren(void) { if (gQuestLogState == 2 || gQuestLogState == 3) return; - Rfu.unk_67 = CreateTask(sub_80F8738, 1); + Rfu.unk_67 = CreateTask(Task_LinkLeaderSearchForChildren, 1); } -static bool8 sub_80F8EA4(void) +static bool8 RfuStateIs7AndPlayerIsChild(void) { - if (Rfu.unk_04 == 7 && Rfu.unk_ccd) + if (Rfu.state == 7 && Rfu.parentId) { return TRUE; } return FALSE; } -static bool32 sub_80F8ECC(void) +static bool32 IsParentSuccessfullyReconnected(void) { - if (Rfu.unk_04 == 7 && !sub_80FD610(gRfuLinkStatus->partner[Rfu.unk_c3d].id, 240)) + if (Rfu.state == 7 && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[Rfu.reconnectedParentIdx].id, 240)) { - Rfu.unk_04 = 9; + Rfu.state = 9; return TRUE; } return FALSE; } -static void sub_80F8F10(void) +static void CreateTask_JoinGroupSearchForParent(void) { if (gQuestLogState == 2 || gQuestLogState == 3) return; - Rfu.unk_67 = CreateTask(sub_80F893C, 1); + Rfu.unk_67 = CreateTask(Task_JoinGroupSearchForParent, 1); } -bool8 sub_80F8F40(void) +bool8 LmanAcceptSlotFlagIsNotZero(void) { - if (gUnknown_3005E10.unk_00) + if (lman.acceptSlot_flag) { return TRUE; } return FALSE; } -void sub_80F8F5C(void) +void LinkRfu_StopManagerAndFinalizeSlots(void) { - Rfu.unk_04 = 4; - Rfu.unk_ce7 = gUnknown_3005E10.unk_00; + Rfu.state = 4; + Rfu.acceptSlot_flag = lman.acceptSlot_flag; } -bool32 sub_80F8F7C(bool32 a0) +bool32 WaitRfuState(bool32 force) { - if (Rfu.unk_04 == 17 || a0) + if (Rfu.state == 17 || force) { - Rfu.unk_04 = 18; + Rfu.state = 18; return TRUE; } return FALSE; @@ -592,7 +596,7 @@ bool32 sub_80F8F7C(bool32 a0) void sub_80F8FA0(void) { - Rfu.unk_04 = 14; + Rfu.state = 14; } static void sub_80F8FAC(u8 a0) @@ -616,11 +620,11 @@ static void sub_80F8FD4(void) for (i = 0; i < 5; i++) { - struct UnkRfuStruct_2 *ptr = &Rfu; + GF_RFU_MANAGER *ptr = &Rfu; for (j = 0; j < 7; j++) { - ptr->unk_c87[i][j][1] = gRecvCmds[i][j] >> 8; - ptr->unk_c87[i][j][0] = gRecvCmds[i][j]; + ptr->recvCmds[i][j][1] = gRecvCmds[i][j] >> 8; + ptr->recvCmds[i][j][0] = gRecvCmds[i][j]; } } CpuFill16(0, gRecvCmds, sizeof gRecvCmds); @@ -643,8 +647,8 @@ static void sub_80F906C(void) { if (Rfu.unk_c3c) { - u8 r2 = sub_80FC888(&Rfu.unk_c1c, Rfu.unk_4c); - if (Rfu.unk_c1c.unk_1e == 0) + u8 r2 = RFU_queue_2_14_send(&Rfu.unk_c1c, Rfu.unk_4c); + if (Rfu.unk_c1c.count == 0) { Rfu.unk_c3c = 0; } @@ -655,8 +659,8 @@ static void sub_80F906C(void) } if (Rfu.unk_c3c == 0) { - sub_80FC79C(&Rfu.unk_9e8, Rfu.unk_4c); - sub_80FC828(&Rfu.unk_c1c, Rfu.unk_4c); + RFU_queue_40_14_send(&Rfu.unk_9e8, Rfu.unk_4c); + RFU_queue_2_14_recv(&Rfu.unk_c1c, Rfu.unk_4c); } } @@ -684,39 +688,39 @@ bool32 IsRfuRecvQueueEmpty(void) static bool32 sub_80F911C(void) { - if (Rfu.unk_04 < 20) + if (Rfu.state < 20) { rfu_REQ_recvData(); rfu_waitREQComplete(); - LinkRfu_REQ_SendData_HandleParentRelationship(FALSE); + rfu_LMAN_REQ_sendData(FALSE); } else { Rfu.unk_cdb = 0; - if ((Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag) == Rfu.unk_ce2 && (Rfu.unk_ce2 & gRfuLinkStatus->connSlotFlag)) + if ((Rfu.bm_PartnerFlags & gRfuLinkStatus->connSlotFlag) == Rfu.bm_PartnerFlags && (Rfu.bm_PartnerFlags & gRfuLinkStatus->connSlotFlag)) { if (!Rfu.unk_cdc) { - if (Rfu.unk_ce3) + if (Rfu.bm_DisconnectSlot) { - sub_80FBCF8(Rfu.unk_ce3); - Rfu.unk_ce3 = 0; + RfuReqDisconnectSlot(Rfu.bm_DisconnectSlot); + Rfu.bm_DisconnectSlot = 0; if (Rfu.unk_ce4 == 1) { - sub_80FB9E4(2, 0x8000); - sub_80FB0E8(0x8000); + RfuSetErrorStatus(2, 0x8000); + GetLinkmanErrorParams(0x8000); return FALSE; } - if (!gUnknown_3005E10.unk_00) + if (!lman.acceptSlot_flag) { - sub_80F8DC0(); + LinkRfu_Shutdown(); gReceivedRemoteLinkPlayers = 0; return FALSE; } } sub_80F8FD4(); rfu_UNI_readySendData(Rfu.unk_cda); - LinkRfu_REQ_SendData_HandleParentRelationship(TRUE); + rfu_LMAN_REQ_sendData(TRUE); } else { @@ -736,23 +740,23 @@ static bool32 sub_80F9204(void) u16 j; u8 retval; - if (Rfu.unk_04 >= 20 && Rfu.unk_0e == 1) + if (Rfu.state >= 20 && Rfu.unk_0e == 1) { rfu_waitREQComplete(); while (Rfu.unk_cdb == 0) { - if (Rfu.unk_ee != 0) + if (Rfu.errorState != 0) { return FALSE; } } rfu_REQ_recvData(); rfu_waitREQComplete(); - if ((gUnknown_3005E10.unk_03 & Rfu.unk_ce2) == Rfu.unk_ce2) + if ((lman.parentAck_flag & Rfu.bm_PartnerFlags) == Rfu.bm_PartnerFlags) { Rfu.unk_cdc = 0; gUnknown_203AC08.unk_06++; - flags = gUnknown_3005E10.unk_00; + flags = lman.acceptSlot_flag; for (i = 0; i < RFU_CHILD_MAX; i++) { if (flags & 1) @@ -762,14 +766,14 @@ static bool32 sub_80F9204(void) if (Rfu.unk_cee[i] != 0xFF && (Rfu.unk_14[i][0] >> 5) != ((Rfu.unk_cee[i] + 1) & 7)) { if (++Rfu.unk_cea[i] > 4) - sub_80FB0E8(0x8100); + GetLinkmanErrorParams(0x8100); } else { Rfu.unk_cee[i] = Rfu.unk_14[i][0] / 32; Rfu.unk_cea[i] = 0; Rfu.unk_14[i][0] &= 0x1f; - r0 = Rfu.unk_cde[i]; + r0 = Rfu.linkPlayerIdx[i]; for (j = 0; j < 7; j++) { gRecvCmds[r0][j] = (Rfu.unk_14[i][(j << 1) + 1] << 8) | Rfu.unk_14[i][(j << 1) + 0]; @@ -783,7 +787,7 @@ static bool32 sub_80F9204(void) flags >>= 1; } sub_80F9038(); - sub_80F9868(0); + RfuHandleReceiveCommand(0); CallRfuFunc(); if (Rfu.unk_ce5 && !Rfu.unk_cd9) { @@ -796,13 +800,13 @@ static bool32 sub_80F9204(void) rfu_setRecvBuffer(TYPE_UNI, i, Rfu.unk_14[i], sizeof(Rfu.unk_14[i])); } } - sub_80F887C(Rfu.unk_ce2, Rfu.unk_ce2 | Rfu.unk_ce5); + sub_80F887C(Rfu.bm_PartnerFlags, Rfu.bm_PartnerFlags | Rfu.unk_ce5); Rfu.unk_ce9 = Rfu.unk_ce5; - Rfu.unk_ce2 |= Rfu.unk_ce5; + Rfu.bm_PartnerFlags |= Rfu.unk_ce5; Rfu.unk_ce5 = 0; - rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, sizeof(Rfu.unk_c87)); - Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2); - CreateTask(sub_80FAA94, 0); + rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, sizeof(Rfu.recvCmds)); + Rfu.unk_cda = sub_80F886C(Rfu.bm_PartnerFlags); + CreateTask(Task_ExchangeLinkPlayers, 0); } } else @@ -837,7 +841,7 @@ static void sub_80F94BC(u16 *a0, u8 *a1) } } -static bool32 sub_80F9514(void) +static bool32 RfuProcessEnqueuedRecvBlock(void) { u8 i; u8 j; @@ -845,7 +849,7 @@ static bool32 sub_80F9514(void) u8 sp48[2 * (CMD_LENGTH - 1)]; u8 switchval; - sub_80FC6E8(&Rfu.unk_124, sp00); + RFU_queue_20_70_send(&Rfu.unk_124, sp00); for (i = 0; i < MAX_RFU_PLAYERS; i++) { for (j = 0; j < CMD_LENGTH - 1; j++) @@ -853,23 +857,23 @@ static bool32 sub_80F9514(void) gRecvCmds[i][j] = (sp00[i * 14 + (j << 1) + 1] << 8) | sp00[i * 14 + (j << 1) + 0]; } } - sub_80F9868(0); - if (gUnknown_3005E10.unk_02 == 0 && Rfu.unk_ce4) + RfuHandleReceiveCommand(0); + if (lman.childClockSlave_flag == 0 && Rfu.unk_ce4) { rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); - switchval = sub_80FB9F4(); + switchval = RfuGetErrorStatus(); if (switchval != 1 && switchval != 6 && switchval != 9) - sub_80FB9E4(2, 0x9000); + RfuSetErrorStatus(2, 0x9000); rfu_clearAllSlot(); gReceivedRemoteLinkPlayers = FALSE; Rfu.RfuFunc = NULL; if (Rfu.unk_ce4 == 1) { - sub_80FB9E4(2, 0x9000); - sub_80FB0E8(0x9000); + RfuSetErrorStatus(2, 0x9000); + GetLinkmanErrorParams(0x9000); } - gUnknown_3005E10.unk_04 = gUnknown_3005E10.unk_05 = 0; + lman.state = lman.next_state = 0; Rfu.unk_ce4 = 0; } if (Rfu.unk_cd0) @@ -877,36 +881,36 @@ static bool32 sub_80F9514(void) Rfu.unk_cd0--; CallRfuFunc(); sub_80F94BC(gSendCmd, sp48); - sub_80FC63C(&Rfu.unk_9e8, sp48); + RFU_queue_40_14_recv(&Rfu.unk_9e8, sp48); for (i = 0; i < CMD_LENGTH - 1; i++) gSendCmd[i] = 0; } return IsRfuRecvQueueEmpty(); } -static void sub_80F965C(u8 unused, u32 flags) +static void HandleSendFailure(u8 unused, u32 flags) { s32 i, j; - const u8 *r10 = Rfu.unk_6c.unk_04; - for (i = 0; i < Rfu.unk_6c.unk_02; i++) + const u8 *r10 = Rfu.cmd_8800_sendbuf.payload; + for (i = 0; i < Rfu.cmd_8800_sendbuf.count; i++) { if (!(flags & 1)) { - gUnknown_3002008[0] = (~0x76ff) | i; + sResendBlock16[0] = RFU_COMMAND_0x8900 | i; for (j = 0; j < 7; j++) { - gUnknown_3002008[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0]; + sResendBlock16[j + 1] = (r10[12 * i + (j << 1) + 1] << 8) | r10[12 * i + (j << 1) + 0]; } for (j = 0; j < 7; j++) { - gUnknown_3001FF8[2 * j + 1] = gUnknown_3002008[j] >> 8; - gUnknown_3001FF8[2 * j + 0] = gUnknown_3002008[j]; + sResendBlock8[2 * j + 1] = sResendBlock16[j] >> 8; + sResendBlock8[2 * j + 0] = sResendBlock16[j]; j++;j--; // Needed to match; } - sub_80FC63C(&Rfu.unk_9e8, gUnknown_3001FF8); - Rfu.unk_6c.unk_0c |= (1 << i); + RFU_queue_40_14_recv(&Rfu.unk_9e8, sResendBlock8); + Rfu.cmd_8800_sendbuf.failedFlags |= (1 << i); } flags >>= 1; } @@ -914,7 +918,7 @@ static void sub_80F965C(u8 unused, u32 flags) void Rfu_SetBlockReceivedFlag(u8 a0) { - if (Rfu.unk_0c == 1 && a0) + if (Rfu.parent_child == MODE_PARENT && a0) Rfu.unk_61[a0] = 1; else Rfu.unk_5c[a0] = 1; @@ -923,23 +927,23 @@ void Rfu_SetBlockReceivedFlag(u8 a0) void Rfu_ResetBlockReceivedFlag(u8 a0) { Rfu.unk_5c[a0] = 0; - Rfu.unk_80[a0].unk_12 = 0; + Rfu.cmd_8800_recvbuf[a0].receiving = 0; } static u8 sub_80F9770(const u8 *a0) { u8 i; - if (Rfu.unk_0c == 1) + if (Rfu.parent_child == MODE_PARENT) return FALSE; for (i = 0; i < RFU_CHILD_MAX; i++) { - Rfu.unk_cde[i] = a0[i]; + Rfu.linkPlayerIdx[i] = a0[i]; } - return a0[Rfu.unk_c3e]; + return a0[Rfu.child_slot]; } -static void rfu_func_080F97B8(void) +static void RfuFunc_SendKeysToRfu(void) { static u8 gUnknown_3001188; if (gReceivedRemoteLinkPlayers @@ -948,24 +952,24 @@ static void rfu_func_080F97B8(void) { gUnknown_3001188++; gHeldKeyCodeToSend |= (gUnknown_3001188 << 8); - sub_80F9D04(0xbe00); + RfuPrepareSendBuffer(RFU_COMMAND_0xbe00); } } -struct GFtgtGname *sub_80F9800(void) +struct GFtgtGname *GetHostRFUtgtGname(void) { return &gHostRFUtgtGnameBuffer; } bool32 IsSendingKeysToRfu(void) { - return Rfu.RfuFunc == rfu_func_080F97B8; + return Rfu.RfuFunc == RfuFunc_SendKeysToRfu; } -void sub_80F9828(void) +void StartSendingKeysToRfu(void) { AGB_ASSERT_EX(Rfu.RfuFunc == NULL, ABSPATH("rfu.c"), 1473); - Rfu.RfuFunc = rfu_func_080F97B8; + Rfu.RfuFunc = RfuFunc_SendKeysToRfu; } void Rfu_set_zero(void) @@ -973,7 +977,7 @@ void Rfu_set_zero(void) Rfu.RfuFunc = NULL; } -static void sub_80F9868(u8 unused) +static void RfuHandleReceiveCommand(u8 unused) { u16 i; u16 j; @@ -982,63 +986,63 @@ static void sub_80F9868(u8 unused) { switch (gRecvCmds[i][0] & 0xff00) { - case 0x7800: - if (Rfu.unk_0c == 0 && gReceivedRemoteLinkPlayers != 0) + case RFU_COMMAND_0x7800: + if (Rfu.parent_child == MODE_CHILD && gReceivedRemoteLinkPlayers != 0) return; // fallthrough - case 0x7700: + case RFU_COMMAND_0x7700: if (gRfuLinkStatus->parentChild == MODE_CHILD) { Rfu.playerCount = gRecvCmds[i][1]; Rfu.unk_cce = sub_80F9770((u8 *)(gRecvCmds[i] + 2)); } break; - case 0x8800: - if (Rfu.unk_80[i].unk_12 == 0) + case RFU_COMMAND_0x8800: + if (Rfu.cmd_8800_recvbuf[i].receiving == 0) { - Rfu.unk_80[i].unk_00 = 0; - Rfu.unk_80[i].unk_02 = gRecvCmds[i][1]; - Rfu.unk_80[i].unk_11 = gRecvCmds[i][2]; - Rfu.unk_80[i].unk_08 = 0; - Rfu.unk_80[i].unk_12 = 1; + Rfu.cmd_8800_recvbuf[i].next = 0; + Rfu.cmd_8800_recvbuf[i].count = gRecvCmds[i][1]; + Rfu.cmd_8800_recvbuf[i].owner = gRecvCmds[i][2]; + Rfu.cmd_8800_recvbuf[i].receivedFlags = 0; + Rfu.cmd_8800_recvbuf[i].receiving = 1; Rfu.unk_5c[i] = 0; } break; - case 0x8900: - if (Rfu.unk_80[i].unk_12 == 1) + case RFU_COMMAND_0x8900: + if (Rfu.cmd_8800_recvbuf[i].receiving == 1) { - Rfu.unk_80[i].unk_00 = gRecvCmds[i][0] & 0xff; - Rfu.unk_80[i].unk_08 |= (1 << Rfu.unk_80[i].unk_00); + Rfu.cmd_8800_recvbuf[i].next = gRecvCmds[i][0] & 0xff; + Rfu.cmd_8800_recvbuf[i].receivedFlags |= (1 << Rfu.cmd_8800_recvbuf[i].next); for (j = 0; j < 6; j++) - gBlockRecvBuffer[i][Rfu.unk_80[i].unk_00 * 6 + j] = gRecvCmds[i][j + 1]; - if (Rfu.unk_80[i].unk_08 == gUnknown_843EBD4[Rfu.unk_80[i].unk_02]) + gBlockRecvBuffer[i][Rfu.cmd_8800_recvbuf[i].next * 6 + j] = gRecvCmds[i][j + 1]; + if (Rfu.cmd_8800_recvbuf[i].receivedFlags == sAllBlocksReceived[Rfu.cmd_8800_recvbuf[i].count]) { - Rfu.unk_80[i].unk_12 = 2; + Rfu.cmd_8800_recvbuf[i].receiving = 2; Rfu_SetBlockReceivedFlag(i); - if (sub_80F9800()->unk_0a_0 == 0x45 && gReceivedRemoteLinkPlayers != 0 && Rfu.unk_0c == 0) - sub_80FAA58(gBlockRecvBuffer); + if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && gReceivedRemoteLinkPlayers != 0 && Rfu.parent_child == MODE_CHILD) + ValidateAndReceivePokemonSioInfo(gBlockRecvBuffer); } } break; - case 0xa100: + case RFU_COMMAND_0xa100: Rfu_InitBlockSend(gUnknown_843EC64[gRecvCmds[i][1]].buffer, (u16)gUnknown_843EC64[gRecvCmds[i][1]].size); break; - case 0x5f00: - Rfu.unk_e4[i] = 1; + case RFU_COMMAND_0x5f00: + Rfu.cmd5f00Ack[i] = 1; break; - case 0x6600: - if (Rfu.unk_100 == gRecvCmds[i][1]) - Rfu.unk_e9[i] = 1; + case RFU_COMMAND_0x6600: + if (Rfu.cmd_6600_count == gRecvCmds[i][1]) + Rfu.cmd_6600_recvd[i] = 1; break; - case 0xed00: - if (Rfu.unk_0c == 0) + case RFU_COMMAND_0xed00: + if (Rfu.parent_child == MODE_CHILD) { if (gReceivedRemoteLinkPlayers != 0) { if (gRecvCmds[i][1] & gRfuLinkStatus->connSlotFlag) { gReceivedRemoteLinkPlayers = 0; - sub_80FEB14(); + rfu_LMAN_requestChangeAgbClockMaster(); Rfu.unk_ce4 = gRecvCmds[i][2]; } Rfu.playerCount = gRecvCmds[i][3]; @@ -1047,25 +1051,25 @@ static void sub_80F9868(u8 unused) } else { - sub_80F9D04(0xee00); + RfuPrepareSendBuffer(RFU_COMMAND_0xee00); gSendCmd[1] = gRecvCmds[i][1]; gSendCmd[2] = gRecvCmds[i][2]; gSendCmd[3] = gRecvCmds[i][3]; } break; - case 0xee00: - if (Rfu.unk_0c == 1) + case RFU_COMMAND_0xee00: + if (Rfu.parent_child == MODE_PARENT) { - Rfu.unk_ce3 |= gRecvCmds[i][1]; + Rfu.bm_DisconnectSlot |= gRecvCmds[i][1]; Rfu.unk_ce4 = gRecvCmds[i][2]; sub_80FA9D0(gRecvCmds[i][1]); } break; - case 0xbe00: + case RFU_COMMAND_0xbe00: gLinkPartnersHeldKeys[i] = gRecvCmds[i][1]; break; } - if (Rfu.unk_0c == 1 && Rfu.unk_61[i]) + if (Rfu.parent_child == MODE_PARENT && Rfu.unk_61[i]) { if (Rfu.unk_61[i] == 4) { @@ -1078,13 +1082,13 @@ static void sub_80F9868(u8 unused) } } -static bool8 sub_80F9C50(void) +static bool8 Cmd8000recvIsFinished(void) { s32 i; for (i = 0; i < 5; i++) { - if (Rfu.unk_80[i].unk_12) + if (Rfu.cmd_8800_recvbuf[i].receiving) return FALSE; } return TRUE; @@ -1096,21 +1100,21 @@ static bool8 sub_80F9C78(void) for (i = 0; i < Rfu.playerCount; i++) { - if (Rfu.unk_80[i].unk_12 != 2 || Rfu.unk_5c[i] != 1) + if (Rfu.cmd_8800_recvbuf[i].receiving != 2 || Rfu.unk_5c[i] != 1) return FALSE; } return TRUE; } -static void sub_80F9CB4(struct UnkRfuStruct_2_Sub_6c *data) +static void ResetSendDataManager(struct RfuBlockSend *data) { - data->unk_00 = 0; - data->unk_02 = 0; - data->unk_04 = NULL; - data->unk_08 = 0; - data->unk_10 = 0; - data->unk_11 = 0; - data->unk_12 = 0; + data->next = 0; + data->count = 0; + data->payload = NULL; + data->receivedFlags = 0; + data->sending = 0; + data->owner = 0; + data->receiving = 0; } u8 Rfu_GetBlockReceivedStatus(void) @@ -1120,7 +1124,7 @@ u8 Rfu_GetBlockReceivedStatus(void) for (i = 0; i < 5; i++) { - if (Rfu.unk_80[i].unk_12 == 2 && Rfu.unk_5c[i] == 1) + if (Rfu.cmd_8800_recvbuf[i].receiving == 2 && Rfu.unk_5c[i] == 1) { flags |= (1 << i); } @@ -1128,7 +1132,7 @@ u8 Rfu_GetBlockReceivedStatus(void) return flags; } -static void sub_80F9D04(u16 command) +static void RfuPrepareSendBuffer(u16 command) { u8 i; u8 *buff; @@ -1137,47 +1141,47 @@ static void sub_80F9D04(u16 command) gSendCmd[0] = command; switch (command) { - case 0x8800: - gSendCmd[1] = Rfu.unk_6c.unk_02; - gSendCmd[2] = Rfu.unk_6c.unk_11 + 0x80; + case RFU_COMMAND_0x8800: + gSendCmd[1] = Rfu.cmd_8800_sendbuf.count; + gSendCmd[2] = Rfu.cmd_8800_sendbuf.owner + 0x80; break; - case 0xa100: - if (sub_80F9C50()) + case RFU_COMMAND_0xa100: + if (Cmd8000recvIsFinished()) gSendCmd[1] = Rfu.unk_5a; break; - case 0x7700: - case 0x7800: - tmp = Rfu.unk_ce2 ^ Rfu.unk_ce3; + case RFU_COMMAND_0x7700: + case RFU_COMMAND_0x7800: + tmp = Rfu.bm_PartnerFlags ^ Rfu.bm_DisconnectSlot; Rfu.playerCount = gUnknown_843EC41[tmp] + 1; gSendCmd[1] = Rfu.playerCount; buff = (u8 *)(gSendCmd + 2); for (i = 0; i < RFU_CHILD_MAX; i++) - buff[i] = Rfu.unk_cde[i]; + buff[i] = Rfu.linkPlayerIdx[i]; break; - case 0x6600: - case 0x5f00: - gSendCmd[1] = Rfu.unk_100; + case RFU_COMMAND_0x6600: + case RFU_COMMAND_0x5f00: + gSendCmd[1] = Rfu.cmd_6600_count; break; - case 0x2f00: + case RFU_COMMAND_0x2f00: for (i = 0; i < 6; i++) gSendCmd[1 + i] = Rfu.unk_f2[i]; break; - case 0xbe00: + case RFU_COMMAND_0xbe00: gSendCmd[1] = gHeldKeyCodeToSend; break; - case 0xee00: + case RFU_COMMAND_0xee00: break; - case 0xed00: + case RFU_COMMAND_0xed00: break; } } -void sub_80F9E2C(void *a0) +void RfuPrepareSend0x2f00(void * data) { - if (gSendCmd[0] == 0 && !sub_80FBA00()) + if (gSendCmd[0] == 0 && !RfuIsErrorStatus1or2()) { - memcpy(Rfu.unk_f2, a0, sizeof(Rfu.unk_f2)); - sub_80F9D04(0x2f00); + memcpy(Rfu.unk_f2, data, sizeof(Rfu.unk_f2)); + RfuPrepareSendBuffer(RFU_COMMAND_0x2f00); } } @@ -1189,77 +1193,77 @@ bool32 Rfu_InitBlockSend(const u8 *src, size_t size) return FALSE; if (gSendCmd[0] != 0) return FALSE; - if (Rfu.unk_6c.unk_10 != 0) + if (Rfu.cmd_8800_sendbuf.sending != 0) { gUnknown_203AC08.unk_83++; return FALSE; } r4 = (size % 12) != 0; - Rfu.unk_6c.unk_11 = GetMultiplayerId(); - Rfu.unk_6c.unk_10 = 1; - Rfu.unk_6c.unk_02 = (size / 12) + r4; - Rfu.unk_6c.unk_00 = 0; - if (size > 0x100) - Rfu.unk_6c.unk_04 = src; + Rfu.cmd_8800_sendbuf.owner = GetMultiplayerId(); + Rfu.cmd_8800_sendbuf.sending = 1; + Rfu.cmd_8800_sendbuf.count = (size / 12) + r4; + Rfu.cmd_8800_sendbuf.next = 0; + if (size > 0x100) // should never be reached + Rfu.cmd_8800_sendbuf.payload = src; else { if (src != gBlockSendBuffer) memcpy(gBlockSendBuffer, src, size); - Rfu.unk_6c.unk_04 = gBlockSendBuffer; + Rfu.cmd_8800_sendbuf.payload = gBlockSendBuffer; } - sub_80F9D04(0x8800); - Rfu.RfuFunc = rfufunc_80F9F44; + RfuPrepareSendBuffer(RFU_COMMAND_0x8800); + Rfu.RfuFunc = RfuFunc_HandleBlockSend; Rfu.unk_5b = 0; return TRUE; } -static void rfufunc_80F9F44(void) +static void RfuFunc_HandleBlockSend(void) { if (gSendCmd[0] == 0) { - sub_80F9D04(0x8800); - if (Rfu.unk_0c == 1) + RfuPrepareSendBuffer(RFU_COMMAND_0x8800); + if (Rfu.parent_child == MODE_PARENT) { if (++Rfu.unk_5b > 2) - Rfu.RfuFunc = sub_80F9FA8; + Rfu.RfuFunc = RfuFunc_SendNextBlock; } else { - if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == 0x8800) - Rfu.RfuFunc = sub_80F9FA8; + if ((gRecvCmds[GetMultiplayerId()][0] & 0xff00) == RFU_COMMAND_0x8800) + Rfu.RfuFunc = RfuFunc_SendNextBlock; } } } -static void sub_80F9FA8(void) +static void RfuFunc_SendNextBlock(void) { s32 i; - const u8 *src = Rfu.unk_6c.unk_04; - gSendCmd[0] = 0x8900 | Rfu.unk_6c.unk_00; + const u8 *src = Rfu.cmd_8800_sendbuf.payload; + gSendCmd[0] = RFU_COMMAND_0x8900 | Rfu.cmd_8800_sendbuf.next; for (i = 0; i < 7; i++) - gSendCmd[i + 1] = (src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 1] << 8) | src[(i << 1) + Rfu.unk_6c.unk_00 * 12 + 0]; - Rfu.unk_6c.unk_00++; - if (Rfu.unk_6c.unk_02 <= Rfu.unk_6c.unk_00) + gSendCmd[i + 1] = (src[(i << 1) + Rfu.cmd_8800_sendbuf.next * 12 + 1] << 8) | src[(i << 1) + Rfu.cmd_8800_sendbuf.next * 12 + 0]; + Rfu.cmd_8800_sendbuf.next++; + if (Rfu.cmd_8800_sendbuf.count <= Rfu.cmd_8800_sendbuf.next) { - Rfu.unk_6c.unk_10 = 0; - Rfu.RfuFunc = rfufunc_80FA020; + Rfu.cmd_8800_sendbuf.sending = 0; + Rfu.RfuFunc = RfuFunc_SendLastBlock; } } -static void rfufunc_80FA020(void) +static void RfuFunc_SendLastBlock(void) { - const u8 *src = Rfu.unk_6c.unk_04; + const u8 *src = Rfu.cmd_8800_sendbuf.payload; u8 mpId = GetMultiplayerId(); s32 i; - if (Rfu.unk_0c == 0) + if (Rfu.parent_child == MODE_CHILD) { - gSendCmd[0] = (~0x76ff) | (Rfu.unk_6c.unk_02 - 1); + gSendCmd[0] = RFU_COMMAND_0x8900 | (Rfu.cmd_8800_sendbuf.count - 1); for (i = 0; i < 7; i++) - gSendCmd[i + 1] = (src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.unk_6c.unk_02 - 1) * 12 + 0]; - if ((u8)gRecvCmds[mpId][0] == Rfu.unk_6c.unk_02 - 1) + gSendCmd[i + 1] = (src[(i << 1) + (Rfu.cmd_8800_sendbuf.count - 1) * 12 + 1] << 8) | src[(i << 1) + (Rfu.cmd_8800_sendbuf.count - 1) * 12 + 0]; + if ((u8)gRecvCmds[mpId][0] == Rfu.cmd_8800_sendbuf.count - 1) { - if (Rfu.unk_80[mpId].unk_08 != gUnknown_843EBD4[Rfu.unk_80[mpId].unk_02]) + if (Rfu.cmd_8800_recvbuf[mpId].receivedFlags != sAllBlocksReceived[Rfu.cmd_8800_recvbuf[mpId].count]) { - sub_80F965C(mpId, Rfu.unk_80[mpId].unk_08); + HandleSendFailure(mpId, Rfu.cmd_8800_recvbuf[mpId].receivedFlags); gUnknown_203AC08.unk_64++; } else @@ -1273,45 +1277,45 @@ static void rfufunc_80FA020(void) bool8 sub_80FA0F8(u8 a0) { Rfu.unk_5a = a0; - sub_80F9D04(0xa100); + RfuPrepareSendBuffer(RFU_COMMAND_0xa100); return TRUE; } -static void sub_80FA114(void) +static void RfuFunc_End5F00_PowerDownRfu(void) { rfu_clearAllSlot(); - sub_80FD52C(); + rfu_LMAN_powerDownRFU(); gReceivedRemoteLinkPlayers = 0; Rfu.unk_ef = 1; Rfu.RfuFunc = NULL; } -static void sub_80FA140(void) +static void RfuFunc_End5F00_ParentDisconnect(void) { rfu_REQ_disconnect(gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag); rfu_waitREQComplete(); - sub_80FA114(); + RfuFunc_End5F00_PowerDownRfu(); } -static void sub_80FA160(void) +static void RfuFunc_End5F00(void) { - if (Rfu.unk_0c == 0) + if (Rfu.parent_child == MODE_CHILD) { - sub_80FEB14(); + rfu_LMAN_requestChangeAgbClockMaster(); Rfu.unk_ce4 = 2; } else - Rfu.RfuFunc = sub_80FA140; + Rfu.RfuFunc = RfuFunc_End5F00_ParentDisconnect; } void LinkRfu_FatalError(void) { - sub_80FEB14(); + rfu_LMAN_requestChangeAgbClockMaster(); Rfu.unk_ce4 = 1; - Rfu.unk_ce3 = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; + Rfu.bm_DisconnectSlot = gRfuLinkStatus->connSlotFlag | gRfuLinkStatus->linkLossSlotFlag; } -static void sub_80FA1C4(void) +static void RfuFunc_WaitAck5F00(void) { s32 i; u8 playerCount = Rfu.playerCount; @@ -1319,132 +1323,132 @@ static void sub_80FA1C4(void) for (i = 0; i < MAX_RFU_PLAYERS; i++) { - if (Rfu.unk_e4[i]) + if (Rfu.cmd5f00Ack[i]) count++; } if (count == playerCount) { - gBattleTypeFlags &= (u16)~BATTLE_TYPE_20; - if (Rfu.unk_0c == 0) + gBattleTypeFlags &= ~(BATTLE_TYPE_20 | 0xFFFF0000); + if (Rfu.parent_child == MODE_CHILD) { - Rfu.unk_ee = 3; - sub_80FA160(); + Rfu.errorState = 3; + RfuFunc_End5F00(); } else - Rfu.RfuFunc = sub_80FA160; + Rfu.RfuFunc = RfuFunc_End5F00; } } -static void sub_80FA224(void) +static void RfuFunc_BuildCommand5F00(void) { - if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + if (gSendCmd[0] == 0 && !Rfu.unk_ce8) { - sub_80F9D04(0x5f00); - Rfu.RfuFunc = sub_80FA1C4; + RfuPrepareSendBuffer(RFU_COMMAND_0x5f00); + Rfu.RfuFunc = RfuFunc_WaitAck5F00; } } -static void sub_80FA25C(u8 taskId) +static void Task_WaitRfuFuncAndSetBuildCmd5F00(u8 taskId) { if (Rfu.RfuFunc == NULL) { Rfu.unk_cd9 = 1; - Rfu.RfuFunc = sub_80FA224; + Rfu.RfuFunc = RfuFunc_BuildCommand5F00; DestroyTask(taskId); } } -void task_add_05_task_del_08FA224_when_no_RfuFunc(void) +void Rfu_BeginBuildAndSendCommand5F(void) { - if (!FuncIsActiveTask(sub_80FA25C)) - CreateTask(sub_80FA25C, 5); + if (!FuncIsActiveTask(Task_WaitRfuFuncAndSetBuildCmd5F00)) + CreateTask(Task_WaitRfuFuncAndSetBuildCmd5F00, 5); } -static void sub_80FA2B0(void) +static void RfuFunc_Send6600_3(void) { u8 playerCount; u8 i; - if (GetMultiplayerId() != 0) + if (GetMultiplayerId() != 0) // child { - if (Rfu.unk_124.unk_8c2 == 0 && Rfu.unk_fe > 0x3c) + if (Rfu.unk_124.count == 0 && Rfu.cmd_6600_timer > 60) { - sub_80F9D04(0x6600); - Rfu.unk_fe = 0; + RfuPrepareSendBuffer(RFU_COMMAND_0x6600); + Rfu.cmd_6600_timer = 0; } } playerCount = GetLinkPlayerCount(); for (i = 0; i < playerCount; i++) { - if (Rfu.unk_e9[i] == 0) + if (Rfu.cmd_6600_recvd[i] == 0) break; } if (i == playerCount) { for (i = 0; i < MAX_RFU_PLAYERS; i++) - Rfu.unk_e9[i] = 0; - Rfu.unk_100++; + Rfu.cmd_6600_recvd[i] = 0; + Rfu.cmd_6600_count++; Rfu.RfuFunc = NULL; } - Rfu.unk_fe++; + Rfu.cmd_6600_timer++; } -static void sub_80FA350(void) +static void RfuFunc_Send6600_2(void) { - if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0) + if (Rfu.unk_124.count == 0 && gSendCmd[0] == 0) { - sub_80F9D04(0x6600); - Rfu.RfuFunc = sub_80FA2B0; + RfuPrepareSendBuffer(RFU_COMMAND_0x6600); + Rfu.RfuFunc = RfuFunc_Send6600_3; } } -static void sub_80FA388(void) +static void RfuFunc_Send6600_1(void) { u8 i; u8 playerCount; - if (GetMultiplayerId() != 0) + if (GetMultiplayerId() != 0) // child { - if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0) + if (Rfu.unk_124.count == 0 && gSendCmd[0] == 0) { - sub_80F9D04(0x6600); - Rfu.RfuFunc = sub_80FA2B0; + RfuPrepareSendBuffer(RFU_COMMAND_0x6600); + Rfu.RfuFunc = RfuFunc_Send6600_3; } } - else + else // parent { playerCount = GetLinkPlayerCount(); for (i = 1; i < playerCount; i++) { - if (Rfu.unk_e9[i] == 0) + if (Rfu.cmd_6600_recvd[i] == 0) break; } if (i == playerCount) { - if (Rfu.unk_124.unk_8c2 == 0 && gSendCmd[0] == 0) + if (Rfu.unk_124.count == 0 && gSendCmd[0] == 0) { - sub_80F9D04(0x6600); - Rfu.RfuFunc = sub_80FA350; + RfuPrepareSendBuffer(RFU_COMMAND_0x6600); + Rfu.RfuFunc = RfuFunc_Send6600_2; } } } } -void sub_80FA42C(void) +void LinkRfu_SetRfuFuncToSend6600(void) { if (Rfu.RfuFunc == NULL) { - Rfu.RfuFunc = sub_80FA388; - Rfu.unk_fe = 0; + Rfu.RfuFunc = RfuFunc_Send6600_1; + Rfu.cmd_6600_timer = 0; } } -bool32 sub_80FA44C(u32 a0) +bool32 RfuSerialNumberIsValid(u32 serialNo) { s32 i; - for (i = 0; gUnknown_843EC8C[i] != a0; i++) + for (i = 0; sAcceptedSerialNos[i] != serialNo; i++) { - if (gUnknown_843EC8C[i] == 0xFFFF) + if (sAcceptedSerialNos[i] == 0xFFFF) return FALSE; } return TRUE; @@ -1453,20 +1457,20 @@ bool32 sub_80FA44C(u32 a0) u8 sub_80FA484(bool32 a0) { if (!a0) - return sub_80FEA34(0, 0); - sub_80FEA34(1, 0x258); + return rfu_LMAN_setLinkRecovery(0, 0); + rfu_LMAN_setLinkRecovery(1, 600); return 0; } void sub_80FA4A8(void) { Rfu.unk_cd9 = 1; - sub_80FD760(FALSE); + rfu_LMAN_stopManager(0); } u8 LinkRfu_GetMultiplayerId(void) { - if (Rfu.unk_0c == 1) + if (Rfu.parent_child == MODE_PARENT) return 0; return Rfu.unk_cce; } @@ -1507,7 +1511,7 @@ static bool8 sub_80FA528(void) } } - else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED) + else if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_FAILED) { rfu_clearSlot(TYPE_NI_RECV, i); } @@ -1541,9 +1545,9 @@ bool32 sub_80FA5D4(void) return FALSE; } -bool32 sub_80FA634(u16 a0, const u8 *a1) +bool32 TrainerIdAndNameStillInPartnersList(u16 trainerId, const u8 *trainerName) { - u8 r1 = sub_80FBC70(a1, a0); + u8 r1 = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId); if (r1 == 0xFF) return TRUE; if (Rfu.unk_cd1[r1] == 9) @@ -1551,27 +1555,27 @@ bool32 sub_80FA634(u16 a0, const u8 *a1) return FALSE; } -void sub_80FA670(u8 a0, u16 a1, const u8 *a2) +void SendByteToPartnerByIdAndName(u8 value, u16 trainerId, const u8 *trainerName) { - u8 r4 = sub_80FBC70(a2, a1); - Rfu.unk_cd1[r4] = a0; - rfu_clearSlot(TYPE_NI_SEND, r4); - rfu_NI_setSendData(1 << r4, 8, Rfu.unk_cd1 + r4, 1); + u8 slotNo = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId); + Rfu.unk_cd1[slotNo] = value; + rfu_clearSlot(TYPE_NI_SEND, slotNo); + rfu_NI_setSendData(1 << slotNo, 8, Rfu.unk_cd1 + slotNo, 1); } -void sub_80FA6BC(void) +void LinkRfuNIsend8(void) { Rfu.unk_c85 = 8; - rfu_clearSlot(TYPE_NI_SEND, Rfu.unk_c3e); - rfu_NI_setSendData(1 << Rfu.unk_c3e, 8, &Rfu.unk_c85, 1); + rfu_clearSlot(TYPE_NI_SEND, Rfu.child_slot); + rfu_NI_setSendData(1 << Rfu.child_slot, 8, &Rfu.unk_c85, 1); } -u32 sub_80FA6FC(u16 a0, const u8 *a1) +u32 WaitSendByteToPartnerByIdAndName(u16 trainerId, const u8 *trainerName) { - u8 r0 = sub_80FBC70(a1, a0); + u8 r0 = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId); if (r0 == 0xFF) return 2; - if (gRfuSlotStatusNI[r0]->send.state == 0) + if (gRfuSlotStatusNI[r0]->send.state == SLOT_STATE_READY) return 1; return 0; } @@ -1597,18 +1601,18 @@ static s32 sub_80FA788(void) s32 retval = 0; if (Rfu.unk_c85 == 8) { - if (gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->send.state == SLOT_STATE_SEND_FAILED) - rfu_clearSlot(TYPE_NI_SEND, Rfu.unk_c3e); + if (gRfuSlotStatusNI[Rfu.child_slot]->send.state == SLOT_STATE_SEND_SUCCESS || gRfuSlotStatusNI[Rfu.child_slot]->send.state == SLOT_STATE_SEND_FAILED) + rfu_clearSlot(TYPE_NI_SEND, Rfu.child_slot); } - if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) + if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_SUCCESS || gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN) { - rfu_clearSlot(TYPE_NI_RECV, Rfu.unk_c3e); - sub_80FB9E4(Rfu.unk_c86, 0); + rfu_clearSlot(TYPE_NI_RECV, Rfu.child_slot); + RfuSetErrorStatus(Rfu.unk_c86, 0); retval = Rfu.unk_c86; } - else if (gRfuSlotStatusNI[Rfu.unk_c3e]->recv.state == SLOT_STATE_RECV_FAILED) + else if (gRfuSlotStatusNI[Rfu.child_slot]->recv.state == SLOT_STATE_RECV_FAILED) { - rfu_clearSlot(TYPE_NI_RECV, Rfu.unk_c3e); + rfu_clearSlot(TYPE_NI_RECV, Rfu.child_slot); retval = 6; } return retval; @@ -1620,26 +1624,26 @@ static void sub_80FA834(u8 taskId) if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2) { - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; DestroyTask(taskId); } switch (gTasks[taskId].data[0]) { case 0: - if (sub_80F9C50()) + if (Cmd8000recvIsFinished()) { ResetBlockReceivedFlags(); - sub_800B0B4(); + PrepareLocalLinkPlayerBlock(); gTasks[taskId].data[0]++; } break; case 1: - if (Rfu.unk_0c == 1) + if (Rfu.parent_child == MODE_PARENT) { if (gReceivedRemoteLinkPlayers) - sub_80F9D04(0x7800); + RfuPrepareSendBuffer(RFU_COMMAND_0x7800); else - sub_80F9D04(0x7700); + RfuPrepareSendBuffer(RFU_COMMAND_0x7700); gTasks[taskId].data[0] = 101; } else @@ -1654,12 +1658,12 @@ static void sub_80FA834(u8 taskId) gTasks[taskId].data[0]++; break; case 3: - if (Rfu.unk_0c == 1) + if (Rfu.parent_child == MODE_PARENT) { - if (sub_80F9C50()) + if (Cmd8000recvIsFinished()) { Rfu.unk_5a = 0; - sub_80F9D04(0xa100); + RfuPrepareSendBuffer(RFU_COMMAND_0xa100); gTasks[taskId].data[0]++; } } @@ -1673,7 +1677,7 @@ static void sub_80FA834(u8 taskId) case 5: for (i = 0; i < Rfu.playerCount; i++) { - sub_800B110(i); + LinkPlayerFromBlock(i); Rfu_ResetBlockReceivedFlag(i); } gTasks[taskId].data[0]++; @@ -1681,16 +1685,16 @@ static void sub_80FA834(u8 taskId) case 6: DestroyTask(taskId); gReceivedRemoteLinkPlayers = 1; - Rfu.unk_ce8 = 0; - sub_80FEA34(1, 0x258); - if (Rfu.unk_ce6) + Rfu.unk_ce8 = FALSE; + rfu_LMAN_setLinkRecovery(1, 600); + if (Rfu.unionRoomChatters) { for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((Rfu.unk_ce6 >> i) & 1) + if ((Rfu.unionRoomChatters >> i) & 1) { Rfu.unk_ce5 = 1 << i; - Rfu.unk_ce6 ^= (1 << i); + Rfu.unionRoomChatters ^= (1 << i); } } } @@ -1705,42 +1709,42 @@ static void sub_80FA9D0(u16 a0) for (i = 0; i < RFU_CHILD_MAX; i++) { if ((a0 >> i) & 1) - Rfu.unk_cde[i] = 0; + Rfu.linkPlayerIdx[i] = 0; } } -static void sub_80FA9FC(const struct UnkRfuStruct_8010A14 *a0) +static void ReceiveRfuLinkPlayers(const struct SioInfo *chunk) { s32 i; - Rfu.playerCount = a0->unk_0f; + Rfu.playerCount = chunk->playerCount; for (i = 0; i < RFU_CHILD_MAX; i++) - Rfu.unk_cde[i] = a0->unk_10[i]; + Rfu.linkPlayerIdx[i] = chunk->linkPlayerIdx[i]; for (i = 0; i < MAX_RFU_PLAYERS; i++) { - gLinkPlayers[i] = a0->unk_14[i]; - sub_800B284(gLinkPlayers + i); + gLinkPlayers[i] = chunk->linkPlayers[i]; + IntlConvertLinkPlayerName(gLinkPlayers + i); } } -static void sub_80FAA58(void *a0) +static void ValidateAndReceivePokemonSioInfo(void *recvBuffer) { - if (strcmp("PokemonSioInfo", ((struct UnkRfuStruct_8010A14 *)a0)->unk_00) == 0) + if (strcmp("PokemonSioInfo", recvBuffer) == 0) { - sub_80FA9FC(a0); - CpuFill16(0, a0, sizeof(struct UnkRfuStruct_8010A14)); + ReceiveRfuLinkPlayers(recvBuffer); + CpuFill16(0, recvBuffer, sizeof(struct SioInfo)); ResetBlockReceivedFlag(0); } } -static void sub_80FAA94(u8 taskId) +static void Task_ExchangeLinkPlayers(u8 taskId) { s32 i; struct LinkPlayerBlock *r2; - struct UnkRfuStruct_8010A14 *r5; - u8 r4 = Rfu.unk_cde[gUnknown_843EC38[Rfu.unk_ce9]]; + struct SioInfo *r5; + u8 r4 = Rfu.linkPlayerIdx[gUnknown_843EC38[Rfu.unk_ce9]]; if (Rfu.unk_f1 == 1 || Rfu.unk_f1 == 2) { - Rfu.unk_ce8 = 0; + Rfu.unk_ce8 = FALSE; DestroyTask(taskId); } switch (gTasks[taskId].data[0]) @@ -1749,7 +1753,7 @@ static void sub_80FAA94(u8 taskId) if (gSendCmd[0] == 0) { ResetBlockReceivedFlag(r4); - sub_80F9D04(0x7800); + RfuPrepareSendBuffer(RFU_COMMAND_0x7800); gTasks[taskId].data[0]++; } break; @@ -1763,43 +1767,44 @@ static void sub_80FAA94(u8 taskId) ResetBlockReceivedFlag(r4); r2 = (struct LinkPlayerBlock *)gBlockRecvBuffer[r4]; gLinkPlayers[r4] = r2->linkPlayer; - sub_800B284(gLinkPlayers + r4); + IntlConvertLinkPlayerName(gLinkPlayers + r4); gTasks[taskId].data[0]++; } break; case 3: - r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer; - memcpy(r5->unk_00, "PokemonSioInfo", sizeof("PokemonSioInfo")); - r5->unk_0f = Rfu.playerCount; + // Prepare send block + r5 = (struct SioInfo *)gBlockSendBuffer; + memcpy(r5->magic, "PokemonSioInfo", sizeof("PokemonSioInfo")); + r5->playerCount = Rfu.playerCount; for (i = 0; i < RFU_CHILD_MAX; i++) - r5->unk_10[i] = Rfu.unk_cde[i]; - memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers); + r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i]; + memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers); gTasks[taskId].data[0]++; // fallthrough case 4: - r5 = (struct UnkRfuStruct_8010A14 *)gBlockSendBuffer; - r5->unk_0f = Rfu.playerCount; + r5 = (struct SioInfo *)gBlockSendBuffer; + r5->playerCount = Rfu.playerCount; for (i = 0; i < RFU_CHILD_MAX; i++) - r5->unk_10[i] = Rfu.unk_cde[i]; - memcpy(r5->unk_14, gLinkPlayers, sizeof gLinkPlayers); + r5->linkPlayerIdx[i] = Rfu.linkPlayerIdx[i]; + memcpy(r5->linkPlayers, gLinkPlayers, sizeof gLinkPlayers); if (SendBlock(0, gBlockSendBuffer, 0xa0)) gTasks[taskId].data[0]++; break; case 5: if (IsLinkTaskFinished() && GetBlockReceivedStatus() & 1) { - CpuFill16(0, gBlockRecvBuffer, sizeof(struct UnkRfuStruct_8010A14)); + CpuFill16(0, gBlockRecvBuffer, sizeof(struct SioInfo)); ResetBlockReceivedFlag(0); - Rfu.unk_ce8 = 0; - if (Rfu.unk_ce6) + Rfu.unk_ce8 = FALSE; + if (Rfu.unionRoomChatters) { for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((Rfu.unk_ce6 >> i) & 1) + if ((Rfu.unionRoomChatters >> i) & 1) { Rfu.unk_ce5 = 1 << i; - Rfu.unk_ce6 ^= (1 << i); - Rfu.unk_ce8 = 1; + Rfu.unionRoomChatters ^= (1 << i); + Rfu.unk_ce8 = TRUE; break; } } @@ -1819,7 +1824,7 @@ static void sub_80FACF0(u8 taskId) case 0: if (Rfu.playerCount) { - sub_800B0B4(); + PrepareLocalLinkPlayerBlock(); SendBlock(0, gBlockSendBuffer, sizeof(struct LinkPlayerBlock)); gTasks[taskId].data[0]++; } @@ -1831,7 +1836,7 @@ static void sub_80FACF0(u8 taskId) case 2: if (GetBlockReceivedStatus() & 1) { - sub_80FA9FC((const struct UnkRfuStruct_8010A14 *)gBlockRecvBuffer); + ReceiveRfuLinkPlayers((const struct SioInfo *)gBlockRecvBuffer); ResetBlockReceivedFlag(0); gReceivedRemoteLinkPlayers = 1; DestroyTask(taskId); @@ -1840,51 +1845,51 @@ static void sub_80FACF0(u8 taskId) } } -static void sub_80FAD98(void) +static void RfuCheckErrorStatus(void) { - if (Rfu.unk_ee == 1 && gUnknown_3005E10.unk_02 == 0) + if (Rfu.errorState == 1 && lman.childClockSlave_flag == 0) { if (gMain.callback2 == c2_mystery_gift_e_reader_run) gWirelessCommType = 2; SetMainCallback2(CB2_LinkError); gMain.savedCallback = CB2_LinkError; - sub_800ACBC((Rfu.unk_0a << 16) | (Rfu.unk_10 << 8) | Rfu.unk_12, Rfu.unk_124.unk_8c2, Rfu.unk_9e8.unk_232, sub_80FB9F4() == 2); - Rfu.unk_ee = 2; + SetLinkErrorFromRfu((Rfu.linkman_msg << 16) | (Rfu.linkman_param[0] << 8) | Rfu.linkman_param[1], Rfu.unk_124.count, Rfu.unk_9e8.count, RfuGetErrorStatus() == 2); + Rfu.errorState = 2; CloseLink(); } - else if (Rfu.unk_9e8.unk_233 == 1 || Rfu.unk_124.unk_8c3 == 1) + else if (Rfu.unk_9e8.full == 1 || Rfu.unk_124.full == 1) { - if (gUnknown_3005E10.unk_02) - sub_80FEB14(); - sub_80FB9E4(1, 0x7000); - sub_80FB0E8(0x7000); + if (lman.childClockSlave_flag) + rfu_LMAN_requestChangeAgbClockMaster(); + RfuSetErrorStatus(1, 0x7000); + GetLinkmanErrorParams(0x7000); } } static void rfu_REQ_recvData_then_sendData(void) { - if (gUnknown_3005E10.unk_06 == 1) + if (lman.parent_child == MODE_PARENT) { rfu_REQ_recvData(); rfu_waitREQComplete(); - LinkRfu_REQ_SendData_HandleParentRelationship(0); + rfu_LMAN_REQ_sendData(RFU_CHILD_CLOCK_SLAVE_OFF); } } -bool32 sub_80FAE94(void) +bool32 LinkRfuMain1(void) { bool32 retval = FALSE; - Rfu.unk_ccd = 0; - sub_80FDA30(Random()); + Rfu.parentId = 0; + rfu_LMAN_manager_entity(Random()); if (Rfu.unk_ef == 0) { - switch (Rfu.unk_0c) + switch (Rfu.parent_child) { case 1: sub_80F911C(); break; case 0: - retval = sub_80F9514(); + retval = RfuProcessEnqueuedRecvBlock(); break; case 2: rfu_REQ_recvData_then_sendData(); @@ -1894,19 +1899,19 @@ bool32 sub_80FAE94(void) return retval; } -bool32 sub_80FAEF0(void) +bool32 LinkRfuMain2(void) { bool32 retval = FALSE; if (Rfu.unk_ef == 0) { - if (Rfu.unk_0c == 1) + if (Rfu.parent_child == MODE_PARENT) retval = sub_80F9204(); - sub_80FAD98(); + RfuCheckErrorStatus(); } return retval; } -static void sub_80FAF1C(void) +static void CopyPlayerNameToUnameBuffer(void) { StringCopy(gHostRFUtgtUnameBuffer, gSaveBlock2Ptr->playerName); } @@ -1914,93 +1919,96 @@ static void sub_80FAF1C(void) void ClearAndInitHostRFUtgtGname(void) { memset(&gHostRFUtgtGnameBuffer, 0, RFU_GAME_NAME_LENGTH); - InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, 0, 0, 0); + InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, 0, FALSE, 0); } -void SetHostRFUtgtGname(u8 a0, u32 a1, u32 a2) +void SetHostRFUtgtGname(u8 activity, u32 child_sprite_genders, u32 started) { - InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, a0, a2, a1); + InitHostRFUtgtGname(&gHostRFUtgtGnameBuffer, activity, started, child_sprite_genders); } -void sub_80FAF74(bool32 a0, bool32 a1) +void SetGnameBufferWonderFlags(bool32 hasNews, bool32 hasCard) { - gHostRFUtgtGnameBuffer.unk_00.unk_00_4 = a0; - gHostRFUtgtGnameBuffer.unk_00.unk_00_5 = a1; + gHostRFUtgtGnameBuffer.unk_00.hasNews = hasNews; + gHostRFUtgtGnameBuffer.unk_00.hasCard = hasCard; } -void sub_80FAFA0(u32 type, u32 species, u32 level) +void RfuUpdatePlayerGnameStateAndSend(u32 type, u32 species, u32 level) { gHostRFUtgtGnameBuffer.type = type; gHostRFUtgtGnameBuffer.species = species; gHostRFUtgtGnameBuffer.level = level; } -void sub_80FAFE0(u8 a0) +void UpdateGameData_GroupLockedIn(bool8 started) { - gHostRFUtgtGnameBuffer.unk_0a_7 = a0; - rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); + gHostRFUtgtGnameBuffer.started = started; + rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); } -void sub_80FB008(u8 a0, u32 a1, u32 a2) +void UpdateGameDataWithActivitySpriteGendersFlag(u8 activity, u32 child_sprite_genders, u32 started) { - if (a0) - SetHostRFUtgtGname(a0, a1, a2); - rfu_REQ_configGameData(0, 2, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); + if (activity) + SetHostRFUtgtGname(activity, child_sprite_genders, started); + rfu_REQ_configGameData(0, 0x0002, (void *)&gHostRFUtgtGnameBuffer, gHostRFUtgtUnameBuffer); } -void sub_80FB030(u32 a0) +void sub_80FB030(u32 linkPlayerCount) { s32 i; - u32 r5; - u32 r7; - s32 r8; + u32 numConnectedChildren; + u32 child_sprite_genders; + s32 bm_child_slots; - if (sub_80F9800()->unk_0a_0 == 0x45) + if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { - r5 = 0; - r7 = 0; - r8 = Rfu.unk_ce2 ^ Rfu.unk_ce3; + numConnectedChildren = 0; + child_sprite_genders = 0; + bm_child_slots = Rfu.bm_PartnerFlags ^ Rfu.bm_DisconnectSlot; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((r8 >> i) & 1) + if ((bm_child_slots >> i) & 1) { - r7 |= ((0x80 | ((gLinkPlayers[Rfu.unk_cde[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.unk_cde[i]].trainerId & 7)) << (r5 << 3)); - r5++; - if (r5 == a0 - 1) + // The 0x80 prevents this element from being incorrectly read as a 0. + child_sprite_genders |= (( + 0x80 | ((gLinkPlayers[Rfu.linkPlayerIdx[i]].gender & 1) << 3) | (gLinkPlayers[Rfu.linkPlayerIdx[i]].trainerId & 7) + ) << (numConnectedChildren << 3)); + numConnectedChildren++; + if (numConnectedChildren == linkPlayerCount - 1) break; } } - sub_80FB008(0x45, r7, 0); + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_CHAT | IN_UNION_ROOM, child_sprite_genders, 0); } } -static void sub_80FB0E8(u32 a0) +static void GetLinkmanErrorParams(u32 msg) { - if (Rfu.unk_ee == 0) + if (Rfu.errorState == 0) { - Rfu.unk_10 = gUnknown_3005E10.unk_14; - Rfu.unk_12 = gUnknown_3005E10.unk_16; - Rfu.unk_0a = a0; - Rfu.unk_ee = 1; + Rfu.linkman_param[0] = lman.param[0]; + Rfu.linkman_param[1] = lman.param[1]; + Rfu.linkman_msg = msg; + Rfu.errorState = 1; } } -static void sub_80FB118(void) +static void ResetErrorState(void) { - Rfu.unk_ee = 0; + Rfu.errorState = 0; } void sub_80FB128(bool32 a0) { if (!a0) - Rfu.unk_ee = 0; + Rfu.errorState = 0; else - Rfu.unk_ee = 4; + Rfu.errorState = 4; } static void sub_80FB154(void) { - sub_80FBE20(gUnknown_3005E10.unk_00, 1); + sub_80FBE20(lman.acceptSlot_flag, 1); Rfu.RfuFunc = NULL; } @@ -2009,25 +2017,25 @@ static void sub_80FB174(void) Rfu.RfuFunc = sub_80FB154; } -static void sub_80FB184(u8 a0, u8 unused1) +static void LmanCallback_Parent2(u8 msg, u8 param_count) { u8 i; - u8 r6 = 0; - switch (a0) + u8 bmDisconnectFlag = 0; + switch (msg) { - case 0x00: - Rfu.unk_04 = 2; + case LMAN_MSG_INITIALIZE_COMPLETED: + Rfu.state = 2; break; - case 0x10: + case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED: break; - case 0x11: - sub_80FB564(gUnknown_3005E10.unk_14); + case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED: + sub_80FB564(lman.param[0]); for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((gUnknown_3005E10.unk_14 >> i) & 1) + if ((lman.param[0] >> i) & 1) { struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; - if (structPtr->unk_0a_0 == sub_80F9800()->unk_0a_0) + if (structPtr->activity == GetHostRFUtgtGname()->activity) { Rfu.unk_cd1[i] = 0; Rfu.unk_cd5[i] = 0; @@ -2035,60 +2043,64 @@ static void sub_80FB184(u8 a0, u8 unused1) } else { - r6 |= (1 << i); + bmDisconnectFlag |= (1 << i); } } } - if (r6) + if (bmDisconnectFlag) { - rfu_REQ_disconnect(r6); + rfu_REQ_disconnect(bmDisconnectFlag); rfu_waitREQComplete(); } break; - case 0x12: + case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED: break; - case 0x13: + case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED: break; - case 0x14: - if (Rfu.unk_ce7 != gUnknown_3005E10.unk_00) + case LMAN_MSG_END_WAIT_CHILD_NAME: + if (Rfu.acceptSlot_flag != lman.acceptSlot_flag) { - rfu_REQ_disconnect(Rfu.unk_ce7 ^ gUnknown_3005E10.unk_00); + rfu_REQ_disconnect(Rfu.acceptSlot_flag ^ lman.acceptSlot_flag); rfu_waitREQComplete(); } - Rfu.unk_04 = 0x11; + Rfu.state = 17; break; - case 0x31: - Rfu.unk_f0 = 1; + case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: + Rfu.linkLossRecoveryState = 1; break; - case 0x32: - Rfu.unk_f0 = 3; + case LMAN_MSG_LINK_RECOVERY_SUCCESSED: + Rfu.linkLossRecoveryState = 3; break; - case 0x30: - case 0x33: - Rfu.unk_f0 = 4; - Rfu.unk_ce2 &= ~gUnknown_3005E10.unk_14; + case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: + case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: + Rfu.linkLossRecoveryState = 4; + Rfu.bm_PartnerFlags &= ~lman.param[0]; if (gReceivedRemoteLinkPlayers == 1) { - if (Rfu.unk_ce2 == 0) - sub_80FB0E8(a0); + if (Rfu.bm_PartnerFlags == 0) + GetLinkmanErrorParams(msg); else sub_80FB174(); } - sub_80FB9E4(2, a0); + RfuSetErrorStatus(2, msg); break; case 0x34: break; - case 0x42 ... 0x44: + case LMAN_MSG_RFU_POWER_DOWN: + case LMAN_MSG_MANAGER_STOPPED: + case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET: break; - case 0xf3: - sub_80FB9E4(1, a0); - sub_80FB0E8(a0); + case LMAN_MSG_LMAN_API_ERROR_RETURN: + RfuSetErrorStatus(1, msg); + GetLinkmanErrorParams(msg); Rfu.unk_ef = 1; break; - case 0xf0 ... 0xf2: - case 0xff: - sub_80FB0E8(a0); - sub_80FB9E4(1, a0); + case LMAN_MSG_REQ_API_ERROR: + case LMAN_MSG_WATCH_DOG_TIMER_ERROR: + case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: + case LMAN_MSG_RFU_FATAL_ERROR: + GetLinkmanErrorParams(msg); + RfuSetErrorStatus(1, msg); Rfu.unk_cdb = 1; break; } @@ -2096,80 +2108,84 @@ static void sub_80FB184(u8 a0, u8 unused1) static const u8 unref_843EDF3[] = _(" あきと"); -static void sub_80FB37C(u8 a0, u8 unused1) +static void LmanCallback_Child(u8 msg, u8 param_count) { - switch (a0) + switch (msg) { - case 0x00: - Rfu.unk_04 = 6; + case LMAN_MSG_INITIALIZE_COMPLETED: + Rfu.state = 6; break; - case 0x20: - Rfu.unk_ccd = gUnknown_3005E10.unk_14; + case LMAN_MSG_PARENT_FOUND: + Rfu.parentId = lman.param[0]; break; - case 0x21: + case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED: break; - case 0x22: - Rfu.unk_c3e = gUnknown_3005E10.unk_14; + case LMAN_MSG_CONNECT_PARENT_SUCCESSED: + Rfu.child_slot = lman.param[0]; break; - case 0x23: - sub_80FB9E4(2, a0); + case LMAN_MSG_CONNECT_PARENT_FAILED: + RfuSetErrorStatus(2, msg); break; - case 0x24: - Rfu.unk_04 = 11; + case LMAN_MSG_CHILD_NAME_SEND_COMPLETED: + Rfu.state = 11; Rfu.unk_c85 = 0; Rfu.unk_c86 = 0; - rfu_setRecvBuffer(TYPE_NI, Rfu.unk_c3e, &Rfu.unk_c86, 1); - rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, 70); + rfu_setRecvBuffer(TYPE_NI, Rfu.child_slot, &Rfu.unk_c86, 1); + rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f)); break; - case 0x25: - sub_80FB9E4(2, 0x25); + case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED: + RfuSetErrorStatus(2, msg); break; - case 0x30: - Rfu.unk_f0 = 2; + case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: + Rfu.linkLossRecoveryState = 2; if (Rfu.unk_c86 == 6) break; - case 0x33: - if (Rfu.unk_f0 != 2) - Rfu.unk_f0 = 4; + case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: + if (Rfu.linkLossRecoveryState != 2) + Rfu.linkLossRecoveryState = 4; if (Rfu.unk_c86 != 9) - sub_80FB9E4(2, a0); - nullsub_87("LINK LOSS DISCONNECT!", 5, 5); + RfuSetErrorStatus(2, msg); + rfu_dbg_print_str("LINK LOSS DISCONNECT!", 5, 5); if (gReceivedRemoteLinkPlayers == 1) - sub_80FB0E8(a0); + GetLinkmanErrorParams(msg); break; - case 0x31: - Rfu.unk_f0 = 1; - nullsub_87("LINK LOSS RECOVERY NOW", 5, 5); + case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: + Rfu.linkLossRecoveryState = 1; + rfu_dbg_print_str("LINK LOSS RECOVERY NOW", 5, 5); break; - case 0x32: - Rfu.unk_f0 = 3; + case LMAN_MSG_LINK_RECOVERY_SUCCESSED: + Rfu.linkLossRecoveryState = 3; Rfu.unk_c3c = 1; break; case 0x34: break; - case 0x42 ... 0x44: + case LMAN_MSG_RFU_POWER_DOWN: + case LMAN_MSG_MANAGER_STOPPED: + case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET: break; - case 0xF3: - sub_80FB9E4(1, a0); - sub_80FB0E8(a0); + case LMAN_MSG_LMAN_API_ERROR_RETURN: + RfuSetErrorStatus(1, msg); + GetLinkmanErrorParams(msg); Rfu.unk_ef = 1; break; - case 0xF0 ... 0xF2: - case 0xFF: - sub_80FB9E4(1, a0); - sub_80FB0E8(a0); + case LMAN_MSG_REQ_API_ERROR: + case LMAN_MSG_WATCH_DOG_TIMER_ERROR: + case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: + case LMAN_MSG_RFU_FATAL_ERROR: + RfuSetErrorStatus(1, msg); + GetLinkmanErrorParams(msg); Rfu.unk_cdb = 1; break; } } -static void sub_80FB564(s32 a0) +static void sub_80FB564(s32 bmConnectedFlag) { s32 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((a0 >> i) & 1) + if ((bmConnectedFlag >> i) & 1) { Rfu.unk_cea[i] = 0; Rfu.unk_cee[i] = 0xFF; @@ -2177,17 +2193,17 @@ static void sub_80FB564(s32 a0) } } -static u8 sub_80FB5A0(s32 a0) +static u8 GetNewChildrenInUnionRoomChat(s32 bmNewChildSlot) { u8 ret = 0; u8 i; for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((a0 >> i) & 1) + if ((bmNewChildSlot >> i) & 1) { struct GFtgtGname *structPtr = (void *)&gRfuLinkStatus->partner[i].gname; - if (structPtr->unk_0a_0 == 0x45) + if (structPtr->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) ret |= (1 << i); } } @@ -2195,73 +2211,73 @@ static u8 sub_80FB5A0(s32 a0) return ret; } -static void sub_80FB5EC(u8 a0, u8 unused1) +static void LmanCallback_Parent(u8 msg, u8 param_count) { u8 r1; - switch (a0) + switch (msg) { - case 0x00: - Rfu.unk_04 = 0x11; + case LMAN_MSG_INITIALIZE_COMPLETED: + Rfu.state = 17; break; - case 0x10: - sub_80FB9E4(4, 0); + case LMAN_MSG_NEW_CHILD_CONNECT_DETECTED: + RfuSetErrorStatus(4, 0); break; - case 0x11: - if (sub_80F9800()->unk_0a_0 == 0x45 && Rfu.unk_cd9 == 0) + case LMAN_MSG_NEW_CHILD_CONNECT_ACCEPTED: + if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM) && Rfu.unk_cd9 == 0) { - u8 idx = sub_80FB5A0(gUnknown_3005E10.unk_14); - if (idx != 0) + u8 bmAcceptSlot = GetNewChildrenInUnionRoomChat(lman.param[0]); + if (bmAcceptSlot != 0) { - r1 = 1 << sub_80F886C(idx); - if (Rfu.unk_ce6 == 0 && Rfu.unk_ce8 == 0) + r1 = 1 << sub_80F886C(bmAcceptSlot); + if (Rfu.unionRoomChatters == 0 && !Rfu.unk_ce8) { Rfu.unk_ce5 = r1; - Rfu.unk_ce6 |= (r1 ^ idx); - Rfu.unk_ce8 = 1; + Rfu.unionRoomChatters |= (r1 ^ bmAcceptSlot); + Rfu.unk_ce8 = TRUE; } else { - Rfu.unk_ce6 |= idx; + Rfu.unionRoomChatters |= bmAcceptSlot; } } - if (idx != gUnknown_3005E10.unk_14) + if (bmAcceptSlot != lman.param[0]) { - Rfu.unk_ce3 |= (idx ^ gUnknown_3005E10.unk_14); + Rfu.bm_DisconnectSlot |= (bmAcceptSlot ^ lman.param[0]); Rfu.unk_ce4 = 2; } } - else if (sub_80F9800()->unk_0a_0 == 0x54) + else if (GetHostRFUtgtGname()->activity == (ACTIVITY_PLYRTALK | IN_UNION_ROOM)) { - rfu_REQ_disconnect(gUnknown_3005E10.unk_00); + rfu_REQ_disconnect(lman.acceptSlot_flag); rfu_waitREQComplete(); } - sub_80FB564(gUnknown_3005E10.unk_14); + sub_80FB564(lman.param[0]); break; - case 0x12: + case LMAN_MSG_NEW_CHILD_CONNECT_REJECTED: break; - case 0x13: + case LMAN_MSG_SEARCH_CHILD_PERIOD_EXPIRED: break; - case 0x14: - if (sub_80F9800()->unk_0a_0 != 0x45 && gUnknown_3005E10.unk_01 > 1) + case LMAN_MSG_END_WAIT_CHILD_NAME: + if (GetHostRFUtgtGname()->activity != (ACTIVITY_CHAT | IN_UNION_ROOM) && lman.acceptCount > 1) { - r1 = 1 << sub_80F886C(gUnknown_3005E10.unk_14); - rfu_REQ_disconnect(gUnknown_3005E10.unk_00 ^ r1); + r1 = 1 << sub_80F886C(lman.param[0]); + rfu_REQ_disconnect(lman.acceptSlot_flag ^ r1); rfu_waitREQComplete(); } - if (Rfu.unk_04 == 0xF) - Rfu.unk_04 = 0x10; + if (Rfu.state == 0xF) + Rfu.state = 16; break; - case 0x20: - Rfu.unk_ccd = gUnknown_3005E10.unk_14; + case LMAN_MSG_PARENT_FOUND: + Rfu.parentId = lman.param[0]; break; - case 0x21: + case LMAN_MSG_SEARCH_PARENT_PERIOD_EXPIRED: break; - case 0x22: - Rfu.unk_c3e = gUnknown_3005E10.unk_14; + case LMAN_MSG_CONNECT_PARENT_SUCCESSED: + Rfu.child_slot = lman.param[0]; break; - case 0x23: - Rfu.unk_04 = 0x12; + case LMAN_MSG_CONNECT_PARENT_FAILED: + Rfu.state = 18; if (Rfu.unk_ccf < 2) { Rfu.unk_ccf++; @@ -2269,67 +2285,72 @@ static void sub_80FB5EC(u8 a0, u8 unused1) } else { - sub_80FB9E4(2, a0); + RfuSetErrorStatus(2, msg); } break; - case 0x24: - Rfu.unk_04 = 0xD; - sub_80FB9E4(3, 0); - rfu_setRecvBuffer(TYPE_UNI, Rfu.unk_c3e, Rfu.unk_c3f, sizeof(Rfu.unk_c3f)); + case LMAN_MSG_CHILD_NAME_SEND_COMPLETED: + Rfu.state = 13; + RfuSetErrorStatus(3, 0); + rfu_setRecvBuffer(TYPE_UNI, Rfu.child_slot, Rfu.unk_c3f, sizeof(Rfu.unk_c3f)); break; - case 0x25: - sub_80FB9E4(2, a0); + case LMAN_MSG_CHILD_NAME_SEND_FAILED_AND_DISCONNECTED: + RfuSetErrorStatus(2, msg); break; - case 0x31: - if (gUnknown_3005E10.unk_00 & gUnknown_3005E10.unk_14) - Rfu.unk_f0 = 1; + case LMAN_MSG_LINK_LOSS_DETECTED_AND_START_RECOVERY: + if (lman.acceptSlot_flag & lman.param[0]) + Rfu.linkLossRecoveryState = 1; break; - case 0x32: - Rfu.unk_f0 = 3; + case LMAN_MSG_LINK_RECOVERY_SUCCESSED: + Rfu.linkLossRecoveryState = 3; if (gRfuLinkStatus->parentChild == MODE_CHILD) Rfu.unk_c3c = 1; break; - case 0x30: - Rfu.unk_f0 = 2; - case 0x33: - if (Rfu.unk_f0 != 2) - Rfu.unk_f0 = 4; - if (Rfu.unk_0c == 1) + case LMAN_MSG_LINK_LOSS_DETECTED_AND_DISCONNECTED: + Rfu.linkLossRecoveryState = 2; + // fallthrough + case LMAN_MSG_LINK_RECOVERY_FAILED_AND_DISCONNECTED: + if (Rfu.linkLossRecoveryState != 2) + Rfu.linkLossRecoveryState = 4; + if (Rfu.parent_child == MODE_PARENT) { if (gReceivedRemoteLinkPlayers == 1) { - Rfu.unk_ce2 &= ~(gUnknown_3005E10.unk_14); - if (Rfu.unk_ce2 == 0) - sub_80FB0E8(a0); + Rfu.bm_PartnerFlags &= ~(lman.param[0]); + if (Rfu.bm_PartnerFlags == 0) + GetLinkmanErrorParams(msg); else sub_80FB174(); } } else if (Rfu.unk_ce4 != 2 && gReceivedRemoteLinkPlayers == 1) { - sub_80FB0E8(a0); - sub_80FD760(0); + GetLinkmanErrorParams(msg); + rfu_LMAN_stopManager(0); } - if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && gUnknown_3005E10.unk_07 == 0 && FuncIsActiveTask(sub_80F8B34) == TRUE) - Rfu.unk_04 = 0x11; + if (gRfuLinkStatus->parentChild == MODE_NEUTRAL && lman.pcswitch_flag == 0 && FuncIsActiveTask(Task_LinkRfu_UnionRoomListen) == TRUE) + Rfu.state = 17; - sub_80FB9E4(2, a0); + RfuSetErrorStatus(2, msg); break; - case 0x40: - Rfu.unk_ce3 = 0; + case LMAN_MSG_LINK_DISCONNECTED_BY_USER: + Rfu.bm_DisconnectSlot = 0; break; - case 0x42 ... 0x44: + case LMAN_MSG_RFU_POWER_DOWN: + case LMAN_MSG_MANAGER_STOPPED: + case LMAN_MSG_MANAGER_FORCED_STOPPED_AND_RFU_RESET: break; - case 0xF3: - sub_80FB9E4(1, a0); - sub_80FB0E8(a0); + case LMAN_MSG_LMAN_API_ERROR_RETURN: + RfuSetErrorStatus(1, msg); + GetLinkmanErrorParams(msg); Rfu.unk_ef = 1; break; - case 0xF0 ... 0xF2: - case 0xFF: - sub_80FB0E8(a0); - sub_80FB9E4(1, a0); + case LMAN_MSG_REQ_API_ERROR: + case LMAN_MSG_WATCH_DOG_TIMER_ERROR: + case LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA: + case LMAN_MSG_RFU_FATAL_ERROR: + GetLinkmanErrorParams(msg); + RfuSetErrorStatus(1, msg); Rfu.unk_cdb = 0; break; } @@ -2340,39 +2361,39 @@ void sub_80FB9D0(void) Rfu.unk_ce4 = 2; } -void sub_80FB9E4(u8 a0, u16 a1) +void RfuSetErrorStatus(u8 a0, u16 msg) { Rfu.unk_f1 = a0; - Rfu.unk_0a = a1; + Rfu.linkman_msg = msg; } -u8 sub_80FB9F4(void) +u8 RfuGetErrorStatus(void) { return Rfu.unk_f1; } -bool32 sub_80FBA00(void) +bool32 RfuIsErrorStatus1or2(void) { - u32 var = sub_80FB9F4() - 1; - if (var < 2) + u32 var = RfuGetErrorStatus(); + if (var == 1 || var == 2) return TRUE; else return FALSE; } -bool32 sub_80FBA1C(void) +bool32 GetRfuUnkCE8(void) { return Rfu.unk_ce8; } bool8 Rfu_IsMaster(void) { - return Rfu.unk_0c; + return Rfu.parent_child; } void RFUVSync(void) { - LinkRfu_syncVBlank_(); + rfu_LMAN_syncVBlank(); } void sub_80FBA44(void) @@ -2399,7 +2420,7 @@ static void sub_80FBA78(void) if (IsWirelessAdapterConnected()) { gLinkType = LINKTYPE_0x1111; - sub_800B1F4(); + SetWirelessCommType1(); OpenLink(); SeedRng(gMain.vblankCounter2); for (i = 0; i < RFU_CHILD_MAX; i++) @@ -2410,25 +2431,25 @@ static void sub_80FBA78(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - sub_80FBB20(); + LinkRfu_CreateIdleTask(); SetMainCallback2(sub_80FBB74); } } -bool32 sub_80FBB0C(void) +bool32 IsUnionRoomListenTaskActive(void) { - return FuncIsActiveTask(sub_80F8B34); + return FuncIsActiveTask(Task_LinkRfu_UnionRoomListen); } -void sub_80FBB20(void) +void LinkRfu_CreateIdleTask(void) { - if (!FuncIsActiveTask(nullsub_89)) - Rfu.unk_66 = CreateTask(nullsub_89, 0); + if (!FuncIsActiveTask(Task_idle)) + Rfu.unk_66 = CreateTask(Task_idle, 0); } -void sub_80FBB4C(void) +void LinkRfu_DestroyIdleTask(void) { - if (FuncIsActiveTask(nullsub_89) == TRUE) + if (FuncIsActiveTask(Task_idle) == TRUE) DestroyTask(Rfu.unk_66); } @@ -2440,35 +2461,35 @@ static void sub_80FBB74(void) UpdatePaletteFade(); } -void sub_80FBB8C(u32 a0) +void InitializeRfuLinkManager_LinkLeader(u32 availSlots) { - Rfu.unk_0c = 1; - sub_80FAF1C(); - sub_80FD430(sub_80FB184, NULL); + Rfu.parent_child = MODE_PARENT; + CopyPlayerNameToUnameBuffer(); + rfu_LMAN_initializeManager(LmanCallback_Parent2, NULL); sRfuReqConfig = sRfuReqConfigTemplate; - sRfuReqConfig.availSlotFlag = sAvailSlots[a0 - 1]; - sub_80F8E74(); + sRfuReqConfig.availSlot_flag = sAvailSlots[availSlots - 1]; + CreateTask_LinkLeaderSearchForChildren(); } -void sub_80FBBD8(void) +void InitializeRfuLinkManager_JoinGroup(void) { - Rfu.unk_0c = 0; - sub_80FAF1C(); - sub_80FD430(sub_80FB37C, sub_80F8D20); - sub_80F8F10(); + Rfu.parent_child = MODE_CHILD; + CopyPlayerNameToUnameBuffer(); + rfu_LMAN_initializeManager(LmanCallback_Child, MscCallback_Child); + CreateTask_JoinGroupSearchForParent(); } -void sub_80FBC00(void) +void InitializeRfuLinkManager_EnterUnionRoom(void) { if (gQuestLogState == 2 || gQuestLogState == 3) return; - Rfu.unk_0c = 2; - sub_80FAF1C(); - sub_80FD430(sub_80FB5EC, NULL); + Rfu.parent_child = 2; + CopyPlayerNameToUnameBuffer(); + rfu_LMAN_initializeManager(LmanCallback_Parent, NULL); sRfuReqConfig = sRfuReqConfigTemplate; - sRfuReqConfig.unk_11 = 0; - sRfuReqConfig.unk_12 = 0x258; - Rfu.unk_67 = CreateTask(sub_80F8B34, 1); + sRfuReqConfig.linkRecovery_enable = 0; + sRfuReqConfig.linkRecovery_period = 600; + Rfu.unk_67 = CreateTask(Task_LinkRfu_UnionRoomListen, 1); } static u16 ReadU16(const void *ptr) @@ -2477,17 +2498,24 @@ static u16 ReadU16(const void *ptr) return (ptr_[1] << 8) | (ptr_[0]); } -static u8 sub_80FBC70(const u8 *a0, u16 a1) +/* + * ================================================================ + * Looks up the player by uname and pid. Returns the index in + * gRfuLinkStatus->partner of the first match with a valid slot ID. + * Returns 0xFF if not found. + * ================================================================ + */ +static u8 GetPartnerIndexByNameAndTrainerID(const u8 *trainerName, u16 trainerId) { u8 i; u8 ret = 0xFF; for (i = 0; i < RFU_CHILD_MAX; i++) { - u16 trainerId = ReadU16(((struct GFtgtGname *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId); - if (sub_80FA44C(gRfuLinkStatus->partner[i].serialNo) - && !StringCompare(a0, gRfuLinkStatus->partner[i].uname) - && a1 == trainerId) + u16 partnerTrainerId = ReadU16(((struct GFtgtGname *)gRfuLinkStatus->partner[i].gname)->unk_00.playerTrainerId); + if (RfuSerialNumberIsValid(gRfuLinkStatus->partner[i].serialNo) + && !StringCompare(trainerName, gRfuLinkStatus->partner[i].uname) + && trainerId == partnerTrainerId) { ret = i; if (gRfuLinkStatus->partner[i].slot != 0xFF) @@ -2498,21 +2526,21 @@ static u8 sub_80FBC70(const u8 *a0, u16 a1) return ret; } -static void sub_80FBCF8(u32 a0) +static void RfuReqDisconnectSlot(u32 bmDisconnectSlot) { - rfu_REQ_disconnect(a0); + rfu_REQ_disconnect(bmDisconnectSlot); rfu_waitREQComplete(); - Rfu.unk_ce2 &= ~(a0); + Rfu.bm_PartnerFlags &= ~(bmDisconnectSlot); rfu_clearSlot(TYPE_UNI_SEND, Rfu.unk_cda); - rfu_UNI_setSendData(Rfu.unk_ce2, Rfu.unk_c87, 70); - Rfu.unk_cda = sub_80F886C(Rfu.unk_ce2); + rfu_UNI_setSendData(Rfu.bm_PartnerFlags, Rfu.recvCmds, 70); + Rfu.unk_cda = sub_80F886C(Rfu.bm_PartnerFlags); } -void sub_80FBD4C(const u8 *ptr, u16 a1) +void RequestDisconnectSlotByTrainerNameAndId(const u8 *trainerName, u16 trainerId) { - u8 var = sub_80FBC70(ptr, a1); + u8 var = GetPartnerIndexByNameAndTrainerID(trainerName, trainerId); if (var != 0xFF) - sub_80FBCF8(1 << var); + RfuReqDisconnectSlot(1 << var); } void sub_80FBD6C(u32 a0) @@ -2524,7 +2552,7 @@ void sub_80FBD6C(u32 a0) for (i = 0; i < RFU_CHILD_MAX; i++) { - if (Rfu.unk_cde[i] == a0 && (Rfu.unk_ce2 >> i) & 1) + if (Rfu.linkPlayerIdx[i] == a0 && (Rfu.bm_PartnerFlags >> i) & 1) var |= 1 << i; } if (var) @@ -2534,9 +2562,9 @@ void sub_80FBD6C(u32 a0) static void sub_80FBDB8(u8 taskId) { - if (gSendCmd[0] == 0 && Rfu.unk_ce8 == 0) + if (gSendCmd[0] == 0 && !Rfu.unk_ce8) { - sub_80F9D04(0xED00); + RfuPrepareSendBuffer(RFU_COMMAND_0xed00); gSendCmd[1] = gTasks[taskId].data[0]; gSendCmd[2] = gTasks[taskId].data[1]; Rfu.playerCount -= gUnknown_843EC41[gTasks[taskId].data[0]]; @@ -2561,35 +2589,35 @@ static void sub_80FBE20(u32 a0, u32 a1) gTasks[taskId].data[1] = a1; } -static void sub_80FBE80(u8 taskId) +static void Task_RfuReconnectWithParent(u8 taskId) { s16 *data = gTasks[taskId].data; - if (sub_80F8EA4()) + if (RfuStateIs7AndPlayerIsChild()) { - u8 id = sub_80FBC70((u8*)data, ReadU16(&data[8])); + u8 id = GetPartnerIndexByNameAndTrainerID((u8*)data, ReadU16(&data[8])); if (id != 0xFF) { if (gRfuLinkStatus->partner[id].slot != 0xFF) { - Rfu.unk_c3d = id; - if (sub_80F8ECC()) + Rfu.reconnectedParentIdx = id; + if (IsParentSuccessfullyReconnected()) DestroyTask(taskId); } - else if (sub_80F9800()->unk_0a_0 == 0x15 || sub_80F9800()->unk_0a_0 == 0x16) + else if (GetHostRFUtgtGname()->activity == ACTIVITY_WCARD2 || GetHostRFUtgtGname()->activity == ACTIVITY_WNEWS2) { data[15]++; } else { - sub_80FB9E4(2, 0x7000); + RfuSetErrorStatus(2, 0x7000); DestroyTask(taskId); } } else { data[15]++; - Rfu.unk_c3d = id; + Rfu.reconnectedParentIdx = id; } } else @@ -2599,47 +2627,47 @@ static void sub_80FBE80(u8 taskId) if (data[15] > 240) { - sub_80FB9E4(2, 0x7000); + RfuSetErrorStatus(2, 0x7000); DestroyTask(taskId); } } -void sub_80FBF54(const u8 *src, u16 trainerId) +void CreateTask_RfuReconnectWithParent(const u8 *trainerName, u16 trainerId) { u8 taskId; s16 *data; Rfu.unk_f1 = 0; - taskId = CreateTask(sub_80FBE80, 3); + taskId = CreateTask(Task_RfuReconnectWithParent, 3); data = gTasks[taskId].data; - StringCopy((u8*)(data), src); + StringCopy((u8*)(data), trainerName); data[8] = trainerId; } -static bool32 sub_80FBF98(s16 a1, struct GFtgtGname *structPtr) +static bool32 ShouldRejectPartnerConnectionBasedOnActivity(s16 activity, struct GFtgtGname *partnerGname) { - if (sub_80F9800()->unk_0a_0 == 0x45) + if (GetHostRFUtgtGname()->activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { - if (structPtr->unk_0a_0 != 0x45) + if (partnerGname->activity != (ACTIVITY_CHAT | IN_UNION_ROOM)) return TRUE; } - else if (structPtr->unk_0a_0 != 0x40) + else if (partnerGname->activity != IN_UNION_ROOM) { return TRUE; } - else if (a1 == 0x44) + else if (activity == (ACTIVITY_TRADE | IN_UNION_ROOM)) { - struct GFtgtGname *structPtr2 = (struct GFtgtGname *)&Rfu.unk_104.gname; - if (structPtr2->species == SPECIES_EGG) + struct GFtgtGname *myTradeGname = (struct GFtgtGname *)&Rfu.unk_104.gname; + if (myTradeGname->species == SPECIES_EGG) { - if (structPtr->species == structPtr2->species) + if (partnerGname->species == myTradeGname->species) return FALSE; else return TRUE; } - else if (structPtr->species != structPtr2->species - || structPtr->level != structPtr2->level - || structPtr->type != structPtr2->type) + else if (partnerGname->species != myTradeGname->species + || partnerGname->level != myTradeGname->level + || partnerGname->type != myTradeGname->type) { return TRUE; } @@ -2655,34 +2683,34 @@ static void sub_80FC028(u8 taskId) if (++gTasks[taskId].data[0] > 300) { - sub_80FB9E4(2, 0x7000); + RfuSetErrorStatus(2, 0x7000); DestroyTask(taskId); } - if (Rfu.unk_ccd != 0 && gUnknown_3005E10.unk_06 == 0) + if (Rfu.parentId != 0 && lman.parent_child == MODE_CHILD) { u16 trainerId = ReadU16(((struct GFtgtGname *)&Rfu.unk_104.gname)->unk_00.playerTrainerId); - u8 id = sub_80FBC70(Rfu.unk_104.uname, trainerId); + u8 id = GetPartnerIndexByNameAndTrainerID(Rfu.unk_104.uname, trainerId); if (id != 0xFF) { - if (!sub_80FBF98(gTasks[taskId].data[1], (struct GFtgtGname *)&gRfuLinkStatus->partner[id].gname)) + if (!ShouldRejectPartnerConnectionBasedOnActivity(gTasks[taskId].data[1], (struct GFtgtGname *)&gRfuLinkStatus->partner[id].gname)) { - if (gRfuLinkStatus->partner[id].slot != 0xFF && !sub_80FD610(gRfuLinkStatus->partner[id].id, 0x5A)) + if (gRfuLinkStatus->partner[id].slot != 0xFF && !rfu_LMAN_CHILD_connectParent(gRfuLinkStatus->partner[id].id, 90)) { - Rfu.unk_04 = 0xA; + Rfu.state = 10; DestroyTask(taskId); } } else { - sub_80FB9E4(2, 0x7000); + RfuSetErrorStatus(2, 0x7000); DestroyTask(taskId); } } } } -void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2) +void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 activity) { u8 taskId, taskId2; @@ -2690,11 +2718,11 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2) Rfu.unk_f1 = 0; StringCopy(Rfu.unk_104.uname, name); memcpy(Rfu.unk_104.gname, structPtr, RFU_GAME_NAME_LENGTH); - sub_80FEB3C(); + rfu_LMAN_forceChangeSP(); taskId = CreateTask(sub_80FC028, 2); - gTasks[taskId].data[1] = a2; - taskId2 = FindTaskIdByFunc(sub_80F8B34); - if (a2 == 0x45) + gTasks[taskId].data[1] = activity; + taskId2 = FindTaskIdByFunc(Task_LinkRfu_UnionRoomListen); + if (activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { if (taskId2 != 0xFF) gTasks[taskId2].data[7] = 1; @@ -2708,7 +2736,7 @@ void sub_80FC114(const u8 *name, struct GFtgtGname *structPtr, u8 a2) bool8 sub_80FC1B0(void) { - if (Rfu.unk_f0 == 1) + if (Rfu.linkLossRecoveryState == 1) return TRUE; else return FALSE; @@ -2720,19 +2748,19 @@ bool32 sub_80FC1CC(void) for (i = 0; i < RFU_CHILD_MAX; i++) { - if ((gUnknown_3005E10.unk_00 >> i) & 1 && Rfu.unk_cd1[i] == 0) + if ((lman.acceptSlot_flag >> i) & 1 && Rfu.unk_cd1[i] == 0) return FALSE; } return TRUE; } -static void sub_80FC208(void) +static void rfu_dbg_clear(void) { s32 i; for (i = 0; i < 20; i++) - nullsub_87(" ", 0, i); + rfu_dbg_print_str(" ", 0, i); } static const char gUnknown_843EE47[16] = { @@ -2748,44 +2776,44 @@ static const char gUnknown_843EE57[9] = { static const char gUnknown_843EE60[] = {' ', '\0'}; static const char gUnknown_843EE62[] = {'*', '\0'}; -static void sub_80FC228(void) +static void rfu_dbg_print_status(void) { s32 i, j; - nullsub_88(GetBlockReceivedStatus(), 0x1C, 0x13, 2); - nullsub_88(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1); - nullsub_88(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1); - if (Rfu.unk_0c == 1) + rfu_dbg_print_num(GetBlockReceivedStatus(), 0x1C, 0x13, 2); + rfu_dbg_print_num(gRfuLinkStatus->connSlotFlag, 0x14, 1, 1); + rfu_dbg_print_num(gRfuLinkStatus->linkLossSlotFlag, 0x17, 1, 1); + if (Rfu.parent_child == MODE_PARENT) { for (i = 0; i < RFU_CHILD_MAX; i++) { if ((gRfuLinkStatus->getNameFlag >> i) & 1) { - nullsub_88(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); - nullsub_87((void*) &gRfuLinkStatus->partner[i].gname, 6, i + 3); - nullsub_87(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); + rfu_dbg_print_num(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); + rfu_dbg_print_str((void*) &gRfuLinkStatus->partner[i].gname, 6, i + 3); + rfu_dbg_print_str(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); } } for (i = 0; i < RFU_CHILD_MAX; i++) { for (j = 0; j < 14; j++) { - nullsub_88(Rfu.unk_14[i][j], j * 2, i + 11, 2); + rfu_dbg_print_num(Rfu.unk_14[i][j], j * 2, i + 11, 2); } } - nullsub_87("NOWSLOT", 1, 0xF); + rfu_dbg_print_str("NOWSLOT", 1, 0xF); } else if (gRfuLinkStatus->connSlotFlag != 0 && gRfuLinkStatus->getNameFlag != 0) { for (i = 0; i < RFU_CHILD_MAX; i++) { - nullsub_88(0, 1, i + 3, 4); - nullsub_87(gUnknown_843EE47, 6, i + 3); - nullsub_87(gUnknown_843EE57, 0x16, i + 3); + rfu_dbg_print_num(0, 1, i + 3, 4); + rfu_dbg_print_str(gUnknown_843EE47, 6, i + 3); + rfu_dbg_print_str(gUnknown_843EE57, 0x16, i + 3); } - nullsub_88(gRfuLinkStatus->partner[Rfu.unk_c3e].serialNo, 1, 3, 4); - nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].gname, 6, 3); - nullsub_87(gRfuLinkStatus->partner[Rfu.unk_c3e].uname, 0x16, 3); + rfu_dbg_print_num(gRfuLinkStatus->partner[Rfu.child_slot].serialNo, 1, 3, 4); + rfu_dbg_print_str(gRfuLinkStatus->partner[Rfu.child_slot].gname, 6, 3); + rfu_dbg_print_str(gRfuLinkStatus->partner[Rfu.child_slot].uname, 0x16, 3); } else { @@ -2793,16 +2821,16 @@ static void sub_80FC228(void) { if (gRfuLinkStatus->partner[i].slot != 0xFF) { - nullsub_88(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); - nullsub_88(gRfuLinkStatus->partner[i].id, 6, i + 3, 4); - nullsub_87(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); + rfu_dbg_print_num(gRfuLinkStatus->partner[i].serialNo, 1, i + 3, 4); + rfu_dbg_print_num(gRfuLinkStatus->partner[i].id, 6, i + 3, 4); + rfu_dbg_print_str(gRfuLinkStatus->partner[i].uname, 0x16, i + 3); } } for (; i < RFU_CHILD_MAX; i++) { - nullsub_88(0, 1, i + 3, 4); - nullsub_87(gUnknown_843EE47, 6, i + 3); - nullsub_87(gUnknown_843EE57, 0x16, i + 3); + rfu_dbg_print_num(0, 1, i + 3, 4); + rfu_dbg_print_str(gUnknown_843EE47, 6, i + 3); + rfu_dbg_print_str(gUnknown_843EE57, 0x16, i + 3); } } } @@ -2823,15 +2851,15 @@ static const char gUnknown_843EEA8[][8] = { static u32 sub_80FC44C(void) { - return Rfu.unk_9e8.unk_232; + return Rfu.unk_9e8.count; } u32 GetRfuRecvQueueLength(void) { - return Rfu.unk_124.unk_8c2; + return Rfu.unk_124.count; } -static void nullsub_89(u8 taskId) +static void Task_idle(u8 taskId) { } diff --git a/src/link_rfu_3.c b/src/link_rfu_3.c index 31ea0830b..d3f6e93db 100644 --- a/src/link_rfu_3.c +++ b/src/link_rfu_3.c @@ -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(); } @@ -848,7 +861,7 @@ static void ZeroName(u8 *name) { s32 i; - for (i = 0; i < PLAYER_NAME_LENGTH; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { *name++ = 0; } @@ -858,7 +871,7 @@ static bool32 NameIsEmpty(const u8 *name) { s32 i; - for (i = 0; i < PLAYER_NAME_LENGTH; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { if (*name++ != 0) { diff --git a/src/list_menu.c b/src/list_menu.c index 6c4d50961..706c1679b 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -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; diff --git a/src/mail_data.c b/src/mail_data.c index d4fa649e1..43ca1d0e6 100644 --- a/src/mail_data.c +++ b/src/mail_data.c @@ -20,7 +20,7 @@ void ClearMailStruct(struct MailStruct *mail) for (i = 0; i < MAIL_WORDS_COUNT; i++) mail->words[i] = 0xFFFF; - for (i = 0; i < PLAYER_NAME_LENGTH; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) mail->playerName[i] = EOS; for (i = 0; i < 4; i++) mail->trainerId[i] = 0; @@ -52,7 +52,7 @@ u8 GiveMailToMon(struct Pokemon *mon, u16 itemId) { for (i = 0; i < MAIL_WORDS_COUNT; i++) gSaveBlock1Ptr->mail[id].words[i] = 0xFFFF; - for (i = 0; i < PLAYER_NAME_LENGTH - 1 && gSaveBlock2Ptr->playerName[i] != EOS; i++) + for (i = 0; i < PLAYER_NAME_LENGTH && gSaveBlock2Ptr->playerName[i] != EOS; i++) gSaveBlock1Ptr->mail[id].playerName[i] = gSaveBlock2Ptr->playerName[i]; for (; i <= 5; i++) gSaveBlock1Ptr->mail[id].playerName[i] = CHAR_SPACE; diff --git a/src/mevent.c b/src/mevent.c index 9d26cdc12..9eabcad61 100644 --- a/src/mevent.c +++ b/src/mevent.c @@ -9,7 +9,7 @@ #include "decompress.h" #include "link.h" #include "link_rfu.h" -#include "unk_815c27c.h" +#include "ereader_helpers.h" #include "util.h" #include "script.h" #include "event_data.h" @@ -21,77 +21,65 @@ #include "mystery_gift_menu.h" #include "help_system.h" #include "mevent.h" +#include "strings.h" struct MEventTaskData1 { - u16 t00; + u16 stateAdvanceDelay; u16 t02; u16 t04; u16 t06; u8 state; - u8 t09; + u8 textOrReceiveState; u8 t0A; u8 t0B; u8 t0C; u8 t0D; - u8 t0E; + u8 initialSendResult; struct MEvent_Str_2 *t10; }; -void sub_8143910(u8 taskId); -bool32 sub_8143E64(const struct MEWonderNewsData * src); -void sub_8143E9C(void); -void sub_8143ED0(void); -bool32 sub_8144018(const struct MEWonderCardData * src); -void BlankSavedWonderCard(void); -void BlankMEventBuffer2(void); -void sub_8144824(u32, u32, u32 *, s32); -void sub_8144790(void); - -extern const u8 gUnknown_841DE52[]; -extern const u8 gUnknown_841DE53[]; -extern const u8 gUnknown_841DE54[]; -extern const u8 gUnknown_841DE7C[]; -extern const u8 gUnknown_841DE7D[]; -extern const u8 gUnknown_841DE95[]; -extern const u8 gUnknown_841DE96[]; -extern const u8 gUnknown_841DE97[]; -extern const u8 gUnknown_841DE98[]; -extern const u8 gUnknown_841DE99[]; -extern const u8 gUnknown_841DE9A[]; -extern const u8 gUnknown_841DE9B[]; -extern const u8 gUnknown_841DE9C[]; +static void Task_EReaderComm(u8 taskId); +static bool32 IsReceivedWonderNewsHeaderValid(const struct MEWonderNewsData * src); +static void BlankWonderNews(void); +static void BlankMENewsJisan(void); +static bool32 IsReceivedWonderCardHeaderValid(const struct MEWonderCardData * src); +static void BlankSavedWonderCard(void); +static void BlankMEventBuffer2(void); +static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 *idsList, s32 count); +static void BlankBuffer344(void); + extern const u8 gUnknownSerialData_Start[]; extern const u8 gUnknownSerialData_End[]; -const u16 gUnknown_8466F00[] = { - 0x02a7, - 0x02a8, - 0x02a9, - 0x02aa, - 0x02ab, - 0x02ac, - 0x02ad, - 0x02ae, - 0x02af, - 0x02b0, - 0x02b1, - 0x02b2, - 0x02b3, - 0x02b4, - 0x02b5, - 0x02b6, - 0x02b7, - 0x02b8, - 0x02b9, - 0x02ba +static const u16 sGiftItemFlagIds[] = { + FLAG_GOT_AURORA_TICKET, + FLAG_GOT_MYSTIC_TICKET, + FLAG_0x2A9, + FLAG_0x2AA, + FLAG_0x2AB, + FLAG_0x2AC, + FLAG_0x2AD, + FLAG_0x2AE, + FLAG_0x2AF, + FLAG_0x2B0, + FLAG_0x2B1, + FLAG_0x2B2, + FLAG_0x2B3, + FLAG_0x2B4, + FLAG_0x2B5, + FLAG_0x2B6, + FLAG_0x2B7, + FLAG_0x2B8, + FLAG_0x2B9, + FLAG_0x2BA }; -struct MEvent_Str_1 gUnknown_3005ED0; +struct MEvent_Str_1 sMEventSendToEReaderManager; -static EWRAM_DATA bool32 gUnknown_203F3BC = FALSE; +static EWRAM_DATA bool32 sReceivedWonderCardIsValid = FALSE; -void sub_81435DC(struct MEvent_Str_1 *mgr, size_t size, const void * data) +void SendUnknownSerialData_Init(struct MEvent_Str_1 *mgr, size_t size, const void * data) { vu16 imeBak = REG_IME; REG_IME = 0; @@ -106,7 +94,7 @@ void sub_81435DC(struct MEvent_Str_1 *mgr, size_t size, const void * data) mgr->data = data; } -void sub_8143644(struct MEvent_Str_1 *unused) +void SendUnknownSerialData_Teardown(struct MEvent_Str_1 *unused) { vu16 imeBak = REG_IME; REG_IME = 0; @@ -116,15 +104,15 @@ void sub_8143644(struct MEvent_Str_1 *unused) REG_IME = imeBak; } -u8 sub_8143674(struct MEvent_Str_1 *mgr) +u8 SendUnknownSerialData_Run(struct MEvent_Str_1 *mgr) { u8 resp = 0; mgr->status = EReaderHandleTransfer(1, mgr->size, mgr->data, 0); - if ((mgr->status & 0x13) == 0x10) + if ((mgr->status & 0x13) == 0x10) // checksum OK and xfer off resp = 1; - if (mgr->status & 8) + if (mgr->status & 8) // cancelled by player resp = 2; - if (mgr->status & 4) + if (mgr->status & 4) // timed out resp = 3; gShouldAdvanceLinkState = 0; return resp; @@ -161,32 +149,32 @@ static bool32 IsEReaderConnectionSane(void) return FALSE; } -u32 sub_8143770(u8 * r4, u16 * r5) +static u32 EReaderReceive(u8 * state_p, u16 * receiveDelay) { - if ((*r4 == 3 || *r4 == 4 || *r4 == 5) && HasLinkErrorOccurred()) + if ((*state_p == 3 || *state_p == 4 || *state_p == 5) && HasLinkErrorOccurred()) { - *r4 = 0; + *state_p = 0; return 3; } - switch (*r4) + switch (*state_p) { case 0: if (IsLinkMaster() && GetLinkPlayerCount_2() > 1) { - *r4 = 1; + *state_p = 1; ; } else if (JOY_NEW(B_BUTTON)) { - *r4 = 0; + *state_p = 0; return 1; } break; case 1: - if (++(*r5) > 5) + if (++(*receiveDelay) > 5) { - *r5 = 0; - *r4 = 2; + *receiveDelay = 0; + *state_p = 2; } break; case 2: @@ -194,19 +182,19 @@ u32 sub_8143770(u8 * r4, u16 * r5) { PlaySE(SE_PINPON); CheckShouldAdvanceLinkState(); - *r5 = 0; - *r4 = 3; + *receiveDelay = 0; + *state_p = 3; } else if (JOY_NEW(B_BUTTON)) { - *r4 = 0; + *state_p = 0; return 1; } break; case 3: - if (++(*r5) > 30) + if (++(*receiveDelay) > 30) { - *r4 = 0; + *state_p = 0; return 5; } else if (IsLinkConnectionEstablished()) @@ -215,24 +203,24 @@ u32 sub_8143770(u8 * r4, u16 * r5) { if (IsLinkPlayerDataExchangeComplete()) { - *r4 = 0; + *state_p = 0; return 2; } else - *r4 = 4; + *state_p = 4; } else - *r4 = 3; + *state_p = 3; } break; case 4: - sub_800AA80(0); - *r4 = 5; + Link_StartSend5FFFwithParam(0); + *state_p = 5; break; case 5: if (!gReceivedRemoteLinkPlayers) { - *r4 = 0; + *state_p = 0; return 4; } break; @@ -242,19 +230,19 @@ u32 sub_8143770(u8 * r4, u16 * r5) void task_add_00_ereader(void) { - u8 taskId = CreateTask(sub_8143910, 0); + u8 taskId = CreateTask(Task_EReaderComm, 0); struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data; data->state = 0; - data->t09 = 0; + data->textOrReceiveState = 0; data->t0A = 0; data->t0B = 0; data->t0C = 0; data->t0D = 0; - data->t00 = 0; + data->stateAdvanceDelay = 0; data->t02 = 0; data->t04 = 0; data->t06 = 0; - data->t0E = 0; + data->initialSendResult = 0; data->t10 = AllocZeroed(sizeof(struct MEvent_Str_2)); } @@ -273,22 +261,22 @@ static bool32 AdvanceDelayTimerCheckTimeout(u16 * a0, u16 a1) return FALSE; } -void sub_8143910(u8 taskId) +static void Task_EReaderComm(u8 taskId) { struct MEventTaskData1 *data = (struct MEventTaskData1 *)gTasks[taskId].data; switch (data->state) { case 0: - if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE52)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ReceiveMysteryGiftWithEReader)) data->state = 1; break; case 1: ResetTTDataBuffer(); - ResetDelayTimer(&data->t00); + ResetDelayTimer(&data->stateAdvanceDelay); data->state = 2; break; case 2: - if (AdvanceDelayTimerCheckTimeout(&data->t00, 10)) + if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 10)) data->state = 3; break; case 3: @@ -301,22 +289,22 @@ void sub_8143910(u8 taskId) data->state = 13; break; case 4: - if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE53)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_SelectConnectFromEReaderMenu)) { - AddTextPrinterToWindow1(gUnknown_841DE54); - ResetDelayTimer(&data->t00); + AddTextPrinterToWindow1(gJPText_SelectConnectWithGBA); + ResetDelayTimer(&data->stateAdvanceDelay); data->state = 5; } break; case 5: - if (AdvanceDelayTimerCheckTimeout(&data->t00, 90)) + if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 90)) { ResetTTDataBuffer(); data->state = 6; } else if (JOY_NEW(B_BUTTON)) { - ResetDelayTimer(&data->t00); + ResetDelayTimer(&data->stateAdvanceDelay); PlaySE(SE_SELECT); data->state = 23; } @@ -326,12 +314,12 @@ void sub_8143910(u8 taskId) { PlaySE(SE_SELECT); CloseLink(); - ResetDelayTimer(&data->t00); + ResetDelayTimer(&data->stateAdvanceDelay); data->state = 23; } else if (GetLinkPlayerCount_2() > 1) { - ResetDelayTimer(&data->t00); + ResetDelayTimer(&data->stateAdvanceDelay); CloseLink(); data->state = 7; } @@ -339,72 +327,80 @@ void sub_8143910(u8 taskId) { PlaySE(SE_SELECT); CloseLink(); - ResetDelayTimer(&data->t00); + ResetDelayTimer(&data->stateAdvanceDelay); data->state = 8; } - else if (AdvanceDelayTimerCheckTimeout(&data->t00, 10)) + else if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 10)) { CloseLink(); ResetTTDataBuffer(); - ResetDelayTimer(&data->t00); + ResetDelayTimer(&data->stateAdvanceDelay); } break; case 7: - if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7C)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_LinkIsIncorrect)) data->state = 4; break; case 8: - AddTextPrinterToWindow1(gUnknown_841DE95); - sub_81435DC(&gUnknown_3005ED0, gUnknownSerialData_End - gUnknownSerialData_Start, gUnknownSerialData_Start); + AddTextPrinterToWindow1(gJPText_Connecting); + SendUnknownSerialData_Init(&sMEventSendToEReaderManager, gUnknownSerialData_End - gUnknownSerialData_Start, gUnknownSerialData_Start); data->state = 9; break; case 9: - data->t0E = sub_8143674(&gUnknown_3005ED0); - if (data->t0E != 0) + data->initialSendResult = SendUnknownSerialData_Run(&sMEventSendToEReaderManager); + if (data->initialSendResult != 0) data->state = 10; break; case 10: - sub_8143644(&gUnknown_3005ED0); - if (data->t0E == 3) + SendUnknownSerialData_Teardown(&sMEventSendToEReaderManager); + if (data->initialSendResult == 3) + // Error data->state = 20; - else if (data->t0E == 1) + else if (data->initialSendResult == 1) { - ResetDelayTimer(&data->t00); - AddTextPrinterToWindow1(gUnknown_841DE9B); + // OK + ResetDelayTimer(&data->stateAdvanceDelay); + AddTextPrinterToWindow1(gJPText_PleaseWaitAMoment); data->state = 11; } else + // Try again data->state = 0; break; case 11: - if (AdvanceDelayTimerCheckTimeout(&data->t00, 840)) + if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 840)) data->state = 12; break; case 12: ResetTTDataBuffer(); - AddTextPrinterToWindow1(gUnknown_841DE98); + AddTextPrinterToWindow1(gJPText_AllowEReaderToLoadCard); data->state = 13; break; case 13: - switch (sub_8143770(&data->t09, &data->t00)) + switch (EReaderReceive(&data->textOrReceiveState, &data->stateAdvanceDelay)) { case 0: + // Running break; case 2: - AddTextPrinterToWindow1(gUnknown_841DE95); + // Done + AddTextPrinterToWindow1(gJPText_Connecting); data->state = 14; break; case 1: + // Cancelled PlaySE(SE_SELECT); CloseLink(); data->state = 23; break; case 5: + // Error Try Again CloseLink(); data->state = 21; break; case 3: case 4: + // Error CheckLink CloseLink(); data->state = 20; break; @@ -423,14 +419,14 @@ void sub_8143910(u8 taskId) } break; case 15: - data->t0E = ValidateTrainerTowerData((struct EReaderTrainerTowerSet *)gDecompressionBuffer); - sub_800AA80(data->t0E); + data->initialSendResult = ValidateTrainerTowerData((struct EReaderTrainerTowerSet *)gDecompressionBuffer); + Link_StartSend5FFFwithParam(data->initialSendResult); data->state = 16; break; case 16: if (!gReceivedRemoteLinkPlayers) { - if (data->t0E == 1) + if (data->initialSendResult == 1) data->state = 17; else data->state = 20; @@ -439,39 +435,39 @@ void sub_8143910(u8 taskId) case 17: if (CEReaderTool_SaveTrainerTower((struct EReaderTrainerTowerSet *)gDecompressionBuffer)) { - AddTextPrinterToWindow1(gUnknown_841DE99); - ResetDelayTimer(&data->t00); + AddTextPrinterToWindow1(gJPText_ConnectionComplete); + ResetDelayTimer(&data->stateAdvanceDelay); data->state = 18; } else data->state = 22; break; case 18: - if (AdvanceDelayTimerCheckTimeout(&data->t00, 120)) + if (AdvanceDelayTimerCheckTimeout(&data->stateAdvanceDelay, 120)) { - AddTextPrinterToWindow1(gUnknown_841DE9A); - PlayFanfare(258); + AddTextPrinterToWindow1(gJPText_NewTrainerHasComeToSevii); + PlayFanfare(MUS_FANFA4); data->state = 19; } break; case 19: - if (IsFanfareTaskInactive() &&JOY_NEW(A_BUTTON | B_BUTTON)) + if (IsFanfareTaskInactive() && JOY_NEW(A_BUTTON | B_BUTTON)) data->state = 26; break; case 23: - if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE7D)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_CardReadingHasBeenHalted)) data->state = 26; break; case 20: - if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE96)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorCheckLink)) data->state = 0; break; case 21: - if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE97)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_ConnectionErrorTryAgain)) data->state = 0; break; case 22: - if (MG_PrintTextOnWindow1AndWaitButton(&data->t09, gUnknown_841DE9C)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textOrReceiveState, gJPText_WriteErrorUnableToSaveData)) data->state = 0; break; case 26: @@ -483,10 +479,10 @@ void sub_8143910(u8 taskId) } } -void sub_8143D24(void) +void InitMEventData(void) { CpuFill32(0, &gSaveBlock1Ptr->mysteryEventBuffers, sizeof(gSaveBlock1Ptr->mysteryEventBuffers)); - sub_8143ED0(); + BlankMENewsJisan(); EC_ResetMEventProfileMaybe(); } @@ -517,14 +513,14 @@ u16 * GetMEventProfileECWordsMaybe(void) void DestroyWonderNews(void) { - sub_8143E9C(); + BlankWonderNews(); } -bool32 sub_8143DC8(const struct MEWonderNewsData * src) +bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct MEWonderNewsData * src) { - if (!sub_8143E64(src)) + if (!IsReceivedWonderNewsHeaderValid(src)) return FALSE; - sub_8143E9C(); + BlankWonderNews(); gSaveBlock1Ptr->mysteryEventBuffers.menews.data = *src; gSaveBlock1Ptr->mysteryEventBuffers.menews.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data, sizeof(struct MEWonderNewsData)); return TRUE; @@ -534,14 +530,14 @@ bool32 ValidateReceivedWonderNews(void) { if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data, sizeof(struct MEWonderNewsData)) != gSaveBlock1Ptr->mysteryEventBuffers.menews.crc) return FALSE; - if (!sub_8143E64(&gSaveBlock1Ptr->mysteryEventBuffers.menews.data)) + if (!IsReceivedWonderNewsHeaderValid(&gSaveBlock1Ptr->mysteryEventBuffers.menews.data)) return FALSE; return TRUE; } -bool32 sub_8143E64(const struct MEWonderNewsData * data) +static bool32 IsReceivedWonderNewsHeaderValid(const struct MEWonderNewsData * data) { - if (data->unk_00 == 0) + if (data->newsId == 0) return FALSE; return TRUE; } @@ -549,24 +545,24 @@ bool32 sub_8143E64(const struct MEWonderNewsData * data) bool32 WonderNews_Test_Unk_02(void) { const struct MEWonderNewsData * data = &gSaveBlock1Ptr->mysteryEventBuffers.menews.data; - if (data->unk_02 == 0) + if (data->shareState == 0) return FALSE; return TRUE; } -void sub_8143E9C(void) +static void BlankWonderNews(void) { CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->mysteryEventBuffers.menews.data)); gSaveBlock1Ptr->mysteryEventBuffers.menews.crc = 0; } -void sub_8143ED0(void) +static void BlankMENewsJisan(void) { CpuFill32(0, GetMENewsJisanStructPtr(), sizeof(struct MENewsJisanStruct)); MENewsJisanReset(); } -bool32 sub_8143EF4(const u8 * src) +bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src) { const u8 * r5 = (const u8 *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data; u32 i; @@ -584,22 +580,23 @@ void DestroyWonderCard(void) { BlankSavedWonderCard(); BlankMEventBuffer2(); - sub_8144790(); + BlankBuffer344(); ClearRamScript(); - sub_806E2D0(); - sub_806E370(); + ResetMysteryEventFlags(); + ResetMysteryEventVars(); ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer); } -bool32 sub_8143F68(const struct MEWonderCardData * data) +bool32 OverwriteSavedWonderCardWithReceivedCard(const struct MEWonderCardData * data) { struct MEventBuffer_3430_Sub * r2; struct MEWonderCardData * r1; - if (!sub_8144018(data)) + if (!IsReceivedWonderCardHeaderValid(data)) return FALSE; DestroyWonderCard(); memcpy(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, data, sizeof(struct MEWonderCardData)); gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData)); + // Annoying hack to match r2 = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data; r1 = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; r2->unk_06 = r1->unk_02; @@ -610,24 +607,24 @@ bool32 ValidateReceivedWonderCard(void) { if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData))) return FALSE; - if (!sub_8144018(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data)) + if (!IsReceivedWonderCardHeaderValid(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data)) return FALSE; - if (!sub_8069DFC()) + if (!ValidateRamScript()) return FALSE; return TRUE; } -bool32 sub_8144018(const struct MEWonderCardData * data) +static bool32 IsReceivedWonderCardHeaderValid(const struct MEWonderCardData * data) { - if (data->unk_00 == 0) + if (data->cardId == 0) return FALSE; if (data->unk_08_0 > 2) return FALSE; - if (!(data->unk_08_6 == 0 || data->unk_08_6 == 1 || data->unk_08_6 == 2)) + if (!(data->shareState == 0 || data->shareState == 1 || data->shareState == 2)) return FALSE; if (data->unk_08_2 > 7) return FALSE; - if (data->unk_09 > 7) + if (data->recvMonCapacity > 7) return FALSE; return TRUE; } @@ -635,18 +632,18 @@ bool32 sub_8144018(const struct MEWonderCardData * data) bool32 WonderCard_Test_Unk_08_6(void) { const struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; - if (data->unk_08_6 == 0) + if (data->shareState == 0) return FALSE; return TRUE; } -void BlankSavedWonderCard(void) +static void BlankSavedWonderCard(void) { CpuFill32(0, &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData)); gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc = 0; } -void BlankMEventBuffer2(void) +static void BlankMEventBuffer2(void) { CpuFill32(0, sav1_get_mevent_buffer_2(), 18 * sizeof(u16)); gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.crc = 0; @@ -655,17 +652,17 @@ void BlankMEventBuffer2(void) u16 GetWonderCardFlagId(void) { if (ValidateReceivedWonderCard()) - return gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.unk_00; + return gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.cardId; return 0; } -void sub_814410C(struct MEWonderCardData * buffer) +void MEvent_WonderCardResetUnk08_6(struct MEWonderCardData * buffer) { - if (buffer->unk_08_6 == 1) - buffer->unk_08_6 = 0; + if (buffer->shareState == 1) + buffer->shareState = 0; } -bool32 sub_8144124(u16 a0) +static bool32 IsCardIdInValidRange(u16 a0) { if (a0 >= 1000 && a0 < 1020) return TRUE; @@ -675,33 +672,33 @@ bool32 sub_8144124(u16 a0) bool32 CheckReceivedGiftFromWonderCard(void) { u16 value = GetWonderCardFlagId(); - if (!sub_8144124(value)) + if (!IsCardIdInValidRange(value)) return FALSE; - if (FlagGet(gUnknown_8466F00[value - 1000]) == TRUE) + if (FlagGet(sGiftItemFlagIds[value - 1000]) == TRUE) return FALSE; return TRUE; } -s32 sub_8144184(const struct MEventBuffer_3430_Sub * data, s32 size) +static s32 CountReceivedDistributionMons(const struct MEventBuffer_3430_Sub * data, s32 size) { s32 r3 = 0; s32 i; for (i = 0; i < size; i++) { - if (data->unk_08[1][i] && data->unk_08[0][i]) + if (data->distributedMons[1][i] && data->distributedMons[0][i]) r3++; } return r3; } -bool32 sub_81441AC(const struct MEventBuffer_3430_Sub * data1, const u16 * data2, s32 size) +static bool32 HasPlayerAlreadyReceivedDistributedMon(const struct MEventBuffer_3430_Sub * data1, const u16 * data2, s32 size) { s32 i; for (i = 0; i < size; i++) { - if (data1->unk_08[1][i] == data2[1]) + if (data1->distributedMons[1][i] == data2[1]) return TRUE; - if (data1->unk_08[0][i] == data2[0]) + if (data1->distributedMons[0][i] == data2[0]) return TRUE; } return FALSE; @@ -718,7 +715,7 @@ static bool32 IsWonderCardSpeciesValid(const u16 * data) return TRUE; } -s32 sub_8144218(void) +static s32 ValidateCardAndCountMonsReceived(void) { struct MEWonderCardData * data; if (!ValidateReceivedWonderCard()) @@ -726,24 +723,24 @@ s32 sub_8144218(void) data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; if (data->unk_08_0 != 1) return 0; - return sub_8144184(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data->unk_09); + return CountReceivedDistributionMons(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data->recvMonCapacity); } -bool32 sub_8144254(const u16 * data) +bool32 MEvent_ReceiveDistributionMon(const u16 * data) { struct MEWonderCardData * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; - s32 size = buffer->unk_09; + s32 capacity = buffer->recvMonCapacity; s32 i; if (!IsWonderCardSpeciesValid(data)) return FALSE; - if (sub_81441AC(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data, size)) + if (HasPlayerAlreadyReceivedDistributedMon(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data, capacity)) return FALSE; - for (i = 0; i < size; i++) + for (i = 0; i < capacity; i++) { - if (gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[1][i] == 0 && gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[0][i] == 0) + if (gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[1][i] == 0 && gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[0][i] == 0) { - gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[1][i] = data[1]; - gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_08[0][i] = data[0]; + gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[1][i] = data[1]; + gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[0][i] = data[0]; return TRUE; } } @@ -771,9 +768,9 @@ void BuildMEventClientHeader(struct MEventClientHeaderStruct * data) if (ValidateReceivedWonderCard()) { // Populate fields - data->id = GetSavedWonderCard()->unk_00; + data->id = GetSavedWonderCard()->cardId; data->unk_20 = *sav1_get_mevent_buffer_2(); - data->unk_44 = GetSavedWonderCard()->unk_09; + data->maxDistributionMons = GetSavedWonderCard()->recvMonCapacity; } else data->id = 0; @@ -815,14 +812,14 @@ u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void return 2; } -u32 sub_8144434(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused) +u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused) { - s32 r4 = a1->unk_44 - sub_8144184(&a1->unk_20, a1->unk_44); - if (r4 == 0) + s32 numSpaces = a1->maxDistributionMons - CountReceivedDistributionMons(&a1->unk_20, a1->maxDistributionMons); + if (numSpaces == 0) return 1; - if (sub_81441AC(&a1->unk_20, a0, a1->unk_44)) + if (HasPlayerAlreadyReceivedDistributedMon(&a1->unk_20, a0, a1->maxDistributionMons)) return 3; - if (r4 == 1) + if (numSpaces == 1) return 4; return 2; } @@ -838,9 +835,9 @@ bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1) return TRUE; } -s32 sub_814449C(const struct MEventClientHeaderStruct * a0) +static s32 GetNumReceivedDistributionMons(const struct MEventClientHeaderStruct * a0) { - return sub_8144184(&a0->unk_20, a0->unk_44); + return CountReceivedDistributionMons(&a0->unk_20, a0->maxDistributionMons); } u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command) @@ -848,22 +845,23 @@ u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command) switch (command) { case 0: - return a0->unk_20.unk_00; + return a0->unk_20.linkWins; case 1: - return a0->unk_20.unk_02; + return a0->unk_20.linkLosses; case 2: - return a0->unk_20.unk_04; + return a0->unk_20.linkTrades; case 3: - return sub_814449C(a0); + return GetNumReceivedDistributionMons(a0); case 4: - return a0->unk_44; + return a0->maxDistributionMons; default: AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 825); return 0; } } -void sub_814451C(u32 command) +// Increments an interaction count in the save block +static void IncrementBattleCardCount(u32 command) { struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; if (data->unk_08_0 == 2) @@ -872,13 +870,13 @@ void sub_814451C(u32 command) switch (command) { case 0: - dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_00; + dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkWins; break; case 1: - dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_02; + dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkLosses; break; case 2: - dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.unk_04; + dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkTrades; break; case 3: break; @@ -896,7 +894,7 @@ void sub_814451C(u32 command) } } -u16 sub_81445C0(u32 command) +u16 MEvent_GetBattleCardCount(u32 command) { switch (command) { @@ -906,7 +904,7 @@ u16 sub_81445C0(u32 command) if (data->unk_08_0 == 2) { struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data; - return buffer->unk_00; + return buffer->linkWins; } break; } @@ -916,7 +914,7 @@ u16 sub_81445C0(u32 command) if (data->unk_08_0 == 2) { struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data; - return buffer->unk_02; + return buffer->linkLosses; } break; } @@ -926,7 +924,7 @@ u16 sub_81445C0(u32 command) if (data->unk_08_0 == 2) { struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data; - return buffer->unk_04; + return buffer->linkTrades; } break; } @@ -934,14 +932,14 @@ u16 sub_81445C0(u32 command) { struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; if (data->unk_08_0 == 1) - return sub_8144218(); + return ValidateCardAndCountMonsReceived(); break; } case 4: { struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; if (data->unk_08_0 == 1) - return data->unk_09; + return data->recvMonCapacity; break; } } @@ -949,38 +947,38 @@ u16 sub_81445C0(u32 command) return 0; } -void sub_81446C4(void) +void ResetReceivedWonderCardFlag(void) { - gUnknown_203F3BC = FALSE; + sReceivedWonderCardIsValid = FALSE; } -bool32 sub_81446D0(u16 a0) +bool32 MEventHandleReceivedWonderCard(u16 cardId) { - gUnknown_203F3BC = FALSE; - if (a0 == 0) + sReceivedWonderCardIsValid = FALSE; + if (cardId == 0) return FALSE; if (!ValidateReceivedWonderCard()) return FALSE; - if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.unk_00 != a0) + if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.cardId != cardId) return FALSE; - gUnknown_203F3BC = TRUE; + sReceivedWonderCardIsValid = TRUE; return TRUE; } -void sub_8144714(u32 a0, u32 a1) +void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId) { - if (gUnknown_203F3BC) + if (sReceivedWonderCardIsValid) { - switch (a0) + switch (eventId) { - case 2: - sub_8144824(2, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[1], 5); + case 2: // trade + RecordIdOfWonderCardSender(2, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[1], 5); break; - case 0: - sub_8144824(0, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5); + case 0: // link win + RecordIdOfWonderCardSender(0, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5); break; - case 1: - sub_8144824(1, a1, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5); + case 1: // link loss + RecordIdOfWonderCardSender(1, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5); break; default: AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 988); @@ -988,43 +986,48 @@ void sub_8144714(u32 a0, u32 a1) } } -void sub_8144790(void) +static void BlankBuffer344(void) { CpuFill32(0, gSaveBlock1Ptr->mysteryEventBuffers.unk_344, sizeof(gSaveBlock1Ptr->mysteryEventBuffers.unk_344)); } -bool32 sub_81447BC(u32 a0, u32 * a1, s32 size) +// Looks up trainerId in an array idsList with count elements. +// If trainerId is found, rearranges idsList to put it in the front. +// Otherwise, drops the last element of the list and inserts +// trainerId at the front. +// Returns TRUE in the latter case. +static bool32 PlaceTrainerIdAtFrontOfList(u32 trainerId, u32 * idsList, s32 count) { s32 i; s32 j; - for (i = 0; i < size; i++) + for (i = 0; i < count; i++) { - if (a1[i] == a0) + if (idsList[i] == trainerId) break; } - if (i == size) + if (i == count) { - for (j = size - 1; j > 0; j--) + for (j = count - 1; j > 0; j--) { - a1[j] = a1[j - 1]; + idsList[j] = idsList[j - 1]; } - a1[0] = a0; + idsList[0] = trainerId; return TRUE; } else { for (j = i; j > 0; j--) { - a1[j] = a1[j - 1]; + idsList[j] = idsList[j - 1]; } - a1[0] = a0; + idsList[0] = trainerId; return FALSE; } } -void sub_8144824(u32 a0, u32 a1, u32 * a2, s32 a3) +static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 * idsList, s32 count) { - if (sub_81447BC(a1, a2, a3)) - sub_814451C(a0); + if (PlaceTrainerIdAtFrontOfList(trainerId, idsList, count)) + IncrementBattleCardCount(eventId); } diff --git a/src/mevent_8145654.c b/src/mevent_8145654.c deleted file mode 100644 index 3de09ab44..000000000 --- a/src/mevent_8145654.c +++ /dev/null @@ -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; - } -} diff --git a/src/mevent_client.c b/src/mevent_client.c index 4da0b4bc1..d7eff1ec6 100644 --- a/src/mevent_client.c +++ b/src/mevent_client.c @@ -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); diff --git a/src/mevent_server.c b/src/mevent_server.c index bebd69fe3..3b1762540 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -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); diff --git a/src/mevent_show_card.c b/src/mevent_show_card.c new file mode 100644 index 000000000..3eeafa4b5 --- /dev/null +++ b/src/mevent_show_card.c @@ -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); + } +} diff --git a/src/mevent_show_news.c b/src/mevent_show_news.c new file mode 100644 index 000000000..44b19b130 --- /dev/null +++ b/src/mevent_show_news.c @@ -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; + } +} diff --git a/src/unk_815F138.c b/src/minigame_countdown.c index 8aa776bc9..d100caea1 100644 --- a/src/unk_815F138.c +++ b/src/minigame_countdown.c @@ -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 }; diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 8384d211d..cdfd62624 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -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; diff --git a/src/new_game.c b/src/new_game.c index 381ba28c8..9aea0b3aa 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -108,7 +108,7 @@ void ResetMenuAndMonGlobals(void) void NewGameInitData(void) { - u8 rivalName[PLAYER_NAME_LENGTH]; + u8 rivalName[PLAYER_NAME_LENGTH + 1]; StringCopy(rivalName, gSaveBlock1Ptr->rivalName); gDifferentSaveFile = TRUE; @@ -143,9 +143,9 @@ void NewGameInitData(void) sub_809C794(); InitEasyChatPhrases(); ResetTrainerFanClub(); - copy_strings_to_sav1(); + UnionRoomChat_InitializeRegisteredTexts(); ResetMiniGamesResults(); - sub_8143D24(); + InitMEventData(); SetAllRenewableItemFlags(); WarpToPlayersRoom(); ScriptContext2_RunNewScript(EventScript_ResetAllMapFlags); diff --git a/src/oak_speech.c b/src/oak_speech.c index 0ad5d6a6f..6887ff85a 100644 --- a/src/oak_speech.c +++ b/src/oak_speech.c @@ -1902,8 +1902,8 @@ static void GetDefaultName(u8 arg0, u8 namePick) src = sRivalNameChoices[namePick]; dest = gSaveBlock1Ptr->rivalName; } - for (i = 0; i < PLAYER_NAME_LENGTH - 1 && src[i] != EOS; i++) + for (i = 0; i < PLAYER_NAME_LENGTH && src[i] != EOS; i++) dest[i] = src[i]; - for (; i < PLAYER_NAME_LENGTH; i++) + for (; i < PLAYER_NAME_LENGTH + 1; i++) dest[i] = EOS; } diff --git a/src/party_menu.c b/src/party_menu.c index df0e70b37..600350ca9 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -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) { diff --git a/src/pokedex_screen.c b/src/pokedex_screen.c index 2ccec7a3f..cd201a884 100644 --- a/src/pokedex_screen.c +++ b/src/pokedex_screen.c @@ -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; diff --git a/src/pokemon.c b/src/pokemon.c index d1305861a..f1f7834b1 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -90,7 +90,20 @@ static u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon); #include "data/battle_moves.h" -static const u8 sUnreferencedData[] = { 0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00 }; +// Used in an unreferenced function in RS. +// Unreferenced here and in Emerald. +struct CombinedMove +{ + u16 move1; + u16 move2; + u16 newMove; +}; + +static const struct CombinedMove sCombinedMoves[2] = +{ + {MOVE_EMBER, MOVE_GUST, MOVE_HEAT_WAVE}, + {0xFFFF, 0xFFFF, 0xFFFF} +}; static const u16 sSpeciesToHoennPokedexNum[] = // Assigns all species to the Hoenn Dex Index (Summary No. for Hoenn Dex) { @@ -2991,7 +3004,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) { retVal = 0; - // FRLG changed this to 7 which used to be PLAYER_NAME_LENGTH + // FRLG changed this to 7 which used to be PLAYER_NAME_LENGTH + 1 while (retVal < 7) { data[retVal] = boxMon->otName[retVal]; @@ -5769,7 +5782,7 @@ s8 GetFlavorRelationByPersonality(u32 personality, u8 flavor) bool8 IsTradedMon(struct Pokemon *mon) { - u8 otName[7 + 1]; // change PLAYER_NAME_LENGTH to 7 + u8 otName[PLAYER_NAME_LENGTH]; u32 otId; GetMonData(mon, MON_DATA_OT_NAME, otName); otId = GetMonData(mon, MON_DATA_OT_ID, 0); diff --git a/src/quest_log.c b/src/quest_log.c index 11f93329d..2ae5e9cfe 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -2411,8 +2411,8 @@ static void BufferFanClubTrainerName(struct LinkBattleRecords *linkRecords, u8 w else { str = gStringVar1; - StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH - 1); - str[PLAYER_NAME_LENGTH - 1] = EOS; + StringCopyN(str, linkTrainerName, PLAYER_NAME_LENGTH); + str[PLAYER_NAME_LENGTH] = EOS; if ( str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN) { @@ -3401,8 +3401,8 @@ static const u16 *BufferQuestLogText_LinkTraded(const u16 *a0) { const u16 *r6 = a0 + 4; - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); // Mon received @@ -3435,7 +3435,7 @@ static u16 *BufferQuestLogData_LinkBattledSingle(u16 *a0, const u16 *eventData) a0[0] = QL_EVENT_LINK_BATTLED_SINGLE; a0[1] = sQuestLogIdx; *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); a0 += 6; return a0; } @@ -3444,8 +3444,8 @@ static const u16 *BufferQuestLogText_LinkBattledSingle(const u16 *a0) { DynamicPlaceholderTextUtil_Reset(); - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]); @@ -3459,7 +3459,7 @@ static u16 *BufferQuestLogData_LinkBattledDouble(u16 *a0, const u16 *eventData) a0[0] = QL_EVENT_LINK_BATTLED_DOUBLE; a0[1] = sQuestLogIdx; *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); a0 += 6; return a0; } @@ -3468,8 +3468,8 @@ static const u16 *BufferQuestLogText_LinkBattledDouble(const u16 *a0) { DynamicPlaceholderTextUtil_Reset(); - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gStringVar1); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, sBattleOutcomeTexts[((const u8 *)a0)[4]]); @@ -3483,9 +3483,9 @@ static u16 *BufferQuestLogData_LinkBattledMulti(u16 *a0, const u16 *eventData) a0[0] = QL_EVENT_LINK_BATTLED_MULTI; a0[1] = sQuestLogIdx; *((u8 *)a0 + 4) = *((const u8 *)eventData + 0); - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1); - memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH - 1); - memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH - 1); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); + memcpy((u8 *)a0 + 12, (const u8 *)eventData + 8, PLAYER_NAME_LENGTH); + memcpy((u8 *)a0 + 19, (const u8 *)eventData + 15, PLAYER_NAME_LENGTH); a0 += 13; return a0; } @@ -3494,9 +3494,9 @@ static const u16 *BufferQuestLogText_LinkBattledMulti(const u16 *a0) { DynamicPlaceholderTextUtil_Reset(); - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memset(gStringVar2, EOS, PLAYER_NAME_LENGTH); - memset(gStringVar3, EOS, PLAYER_NAME_LENGTH); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memset(gStringVar2, EOS, PLAYER_NAME_LENGTH + 1); + memset(gStringVar3, EOS, PLAYER_NAME_LENGTH + 1); StringCopy7(gStringVar1, (const u8 *)a0 + 5); StringCopy7(gStringVar2, (const u8 *)a0 + 12); StringCopy7(gStringVar3, (const u8 *)a0 + 19); @@ -3548,7 +3548,7 @@ static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData a0[1] = sQuestLogIdx; a0[2] = eventData[0]; a0[3] = eventData[1]; - memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH - 1); + memcpy(r4, eventData + 2, PLAYER_NAME_LENGTH); r4 += 8; return (u16 *)r4; } @@ -3556,8 +3556,8 @@ static u16 *BufferQuestLogData_LinkTradedUnionRoom(u16 *a0, const u16 *eventData static const u16 *BufferQuestLogText_LinkTradedUnionRoom(const u16 *a0) { const u8 *r6 = (const u8 *)(a0 + 4); - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, r6, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); QuestLog_GetSpeciesName(a0[3], gStringVar2, 0); QuestLog_GetSpeciesName(a0[2], gStringVar3, 0); @@ -3571,15 +3571,15 @@ static u16 *BufferQuestLogData_LinkBattledUnionRoom(u16 *a0, const u16 *eventDat a0[0] = QL_EVENT_LINK_BATTLED_UNION; a0[1] = sQuestLogIdx; *(u8 *)&a0[2] = *(const u8 *)&eventData[0]; - memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH - 1); + memcpy((u8 *)a0 + 5, (const u8 *)eventData + 1, PLAYER_NAME_LENGTH); a0 += 6; return a0; } static const u16 *BufferQuestLogText_LinkBattledUnionRoom(const u16 *a0) { - memset(gStringVar1, EOS, PLAYER_NAME_LENGTH); - memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH - 1); + memset(gStringVar1, EOS, PLAYER_NAME_LENGTH + 1); + memcpy(gStringVar1, (const u8 *)a0 + 5, PLAYER_NAME_LENGTH); BufferLinkPartnersName(gStringVar1); StringCopy(gStringVar2, sBattleOutcomeTexts[*(const u8 *)&a0[2]]); StringExpandPlaceholders(gStringVar4, QuestLog_Text_BattledTrainerEndedInOutcome); diff --git a/src/quest_log_objects.c b/src/quest_log_objects.c index 7917d03e9..aecc5fd68 100644 --- a/src/quest_log_objects.c +++ b/src/quest_log_objects.c @@ -14,22 +14,22 @@ void SetQuestLogObjectEventsData(struct QuestLog * questLog) for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { questLog->unk_008[i].active = gObjectEvents[i].active; - questLog->unk_008[i].mapobj_bit_3 = gObjectEvents[i].mapobj_bit_3; - questLog->unk_008[i].mapobj_bit_4 = gObjectEvents[i].mapobj_bit_4; - questLog->unk_008[i].mapobj_bit_5 = gObjectEvents[i].mapobj_bit_5; - questLog->unk_008[i].mapobj_bit_8 = gObjectEvents[i].mapobj_bit_8; - questLog->unk_008[i].mapobj_bit_9 = gObjectEvents[i].mapobj_bit_9; - questLog->unk_008[i].mapobj_bit_10 = gObjectEvents[i].mapobj_bit_10; - questLog->unk_008[i].mapobj_bit_11 = gObjectEvents[i].mapobj_bit_11; - questLog->unk_008[i].mapobj_bit_12 = gObjectEvents[i].mapobj_bit_12; - questLog->unk_008[i].mapobj_bit_13 = gObjectEvents[i].mapobj_bit_13; - questLog->unk_008[i].mapobj_bit_14 = gObjectEvents[i].mapobj_bit_14; - questLog->unk_008[i].mapobj_bit_15 = gObjectEvents[i].mapobj_bit_15; - questLog->unk_008[i].mapobj_bit_16 = gObjectEvents[i].mapobj_bit_16; - questLog->unk_008[i].mapobj_bit_23 = gObjectEvents[i].mapobj_bit_23; - questLog->unk_008[i].mapobj_bit_24 = gObjectEvents[i].mapobj_bit_24; - questLog->unk_008[i].mapobj_bit_25 = gObjectEvents[i].mapobj_bit_25; - questLog->unk_008[i].mapobj_bit_26 = gObjectEvents[i].mapobj_bit_26; + questLog->unk_008[i].triggerGroundEffectsOnStop = gObjectEvents[i].triggerGroundEffectsOnStop; + questLog->unk_008[i].disableCoveringGroundEffects = gObjectEvents[i].disableCoveringGroundEffects; + questLog->unk_008[i].landingJump = gObjectEvents[i].landingJump; + questLog->unk_008[i].frozen = gObjectEvents[i].frozen; + questLog->unk_008[i].facingDirectionLocked = gObjectEvents[i].facingDirectionLocked; + questLog->unk_008[i].disableAnim = gObjectEvents[i].disableAnim; + questLog->unk_008[i].enableAnim = gObjectEvents[i].enableAnim; + questLog->unk_008[i].inanimate = gObjectEvents[i].inanimate; + questLog->unk_008[i].invisible = gObjectEvents[i].invisible; + questLog->unk_008[i].offScreen = gObjectEvents[i].offScreen; + questLog->unk_008[i].trackedByCamera = gObjectEvents[i].trackedByCamera; + questLog->unk_008[i].isPlayer = gObjectEvents[i].isPlayer; + questLog->unk_008[i].spriteAnimPausedBackup = gObjectEvents[i].spriteAnimPausedBackup; + questLog->unk_008[i].spriteAffineAnimPausedBackup = gObjectEvents[i].spriteAffineAnimPausedBackup; + questLog->unk_008[i].disableJumpLandingGroundEffect = gObjectEvents[i].disableJumpLandingGroundEffect; + questLog->unk_008[i].fixedPriority = gObjectEvents[i].fixedPriority; questLog->unk_008[i].mapobj_unk_18 = gObjectEvents[i].facingDirection; questLog->unk_008[i].mapobj_unk_0B_0 = gObjectEvents[i].mapobj_unk_0B_0; questLog->unk_008[i].elevation = gObjectEvents[i].elevation; @@ -58,22 +58,22 @@ void sub_815A1F8(const struct QuestLog * questLog, const struct ObjectEventTempl for (i = 0; i < OBJECT_EVENTS_COUNT; i++) { gObjectEvents[i].active = questLogObjectEvents[i].active; - gObjectEvents[i].mapobj_bit_3 = questLogObjectEvents[i].mapobj_bit_3; - gObjectEvents[i].mapobj_bit_4 = questLogObjectEvents[i].mapobj_bit_4; - gObjectEvents[i].mapobj_bit_5 = questLogObjectEvents[i].mapobj_bit_5; - gObjectEvents[i].mapobj_bit_8 = questLogObjectEvents[i].mapobj_bit_8; - gObjectEvents[i].mapobj_bit_9 = questLogObjectEvents[i].mapobj_bit_9; - gObjectEvents[i].mapobj_bit_10 = questLogObjectEvents[i].mapobj_bit_10; - gObjectEvents[i].mapobj_bit_11 = questLogObjectEvents[i].mapobj_bit_11; - gObjectEvents[i].mapobj_bit_12 = questLogObjectEvents[i].mapobj_bit_12; - gObjectEvents[i].mapobj_bit_13 = questLogObjectEvents[i].mapobj_bit_13; - gObjectEvents[i].mapobj_bit_14 = questLogObjectEvents[i].mapobj_bit_14; - gObjectEvents[i].mapobj_bit_15 = questLogObjectEvents[i].mapobj_bit_15; - gObjectEvents[i].mapobj_bit_16 = questLogObjectEvents[i].mapobj_bit_16; - gObjectEvents[i].mapobj_bit_23 = questLogObjectEvents[i].mapobj_bit_23; - gObjectEvents[i].mapobj_bit_24 = questLogObjectEvents[i].mapobj_bit_24; - gObjectEvents[i].mapobj_bit_25 = questLogObjectEvents[i].mapobj_bit_25; - gObjectEvents[i].mapobj_bit_26 = questLogObjectEvents[i].mapobj_bit_26; + gObjectEvents[i].triggerGroundEffectsOnStop = questLogObjectEvents[i].triggerGroundEffectsOnStop; + gObjectEvents[i].disableCoveringGroundEffects = questLogObjectEvents[i].disableCoveringGroundEffects; + gObjectEvents[i].landingJump = questLogObjectEvents[i].landingJump; + gObjectEvents[i].frozen = questLogObjectEvents[i].frozen; + gObjectEvents[i].facingDirectionLocked = questLogObjectEvents[i].facingDirectionLocked; + gObjectEvents[i].disableAnim = questLogObjectEvents[i].disableAnim; + gObjectEvents[i].enableAnim = questLogObjectEvents[i].enableAnim; + gObjectEvents[i].inanimate = questLogObjectEvents[i].inanimate; + gObjectEvents[i].invisible = questLogObjectEvents[i].invisible; + gObjectEvents[i].offScreen = questLogObjectEvents[i].offScreen; + gObjectEvents[i].trackedByCamera = questLogObjectEvents[i].trackedByCamera; + gObjectEvents[i].isPlayer = questLogObjectEvents[i].isPlayer; + gObjectEvents[i].spriteAnimPausedBackup = questLogObjectEvents[i].spriteAnimPausedBackup; + gObjectEvents[i].spriteAffineAnimPausedBackup = questLogObjectEvents[i].spriteAffineAnimPausedBackup; + gObjectEvents[i].disableJumpLandingGroundEffect = questLogObjectEvents[i].disableJumpLandingGroundEffect; + gObjectEvents[i].fixedPriority = questLogObjectEvents[i].fixedPriority; gObjectEvents[i].facingDirection = questLogObjectEvents[i].mapobj_unk_18; gObjectEvents[i].mapobj_unk_0B_0 = questLogObjectEvents[i].mapobj_unk_0B_0; gObjectEvents[i].elevation = questLogObjectEvents[i].elevation; diff --git a/src/quest_log_player.c b/src/quest_log_player.c index 7665a8a92..0d7a2bb50 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -100,7 +100,7 @@ static void sub_81505C4(u8 taskId) { case 0: ObjectEventClearAnimIfSpecialAnimActive(objectEvent); - objectEvent->mapobj_bit_11 = TRUE; + objectEvent->enableAnim = TRUE; sub_81507BC(objectEvent, sub_805C808(4)); StartSpriteAnim(sprite, sub_80634F0(objectEvent->facingDirection)); gTasks[taskId].data[0]++; diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c index 20b29de9b..1d33fb7d1 100644 --- a/src/rfu_union_tool.c +++ b/src/rfu_union_tool.c @@ -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); - sub_8069124(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 sub_806916C(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) { - sub_8069124(r7 - 0x38, FALSE); - sub_80691A4(r7 - 0x38, 1); + RfuUnionObjectToggleInvisibility(objId - 0x38, FALSE); + RfuUnionObjectStartWarp(objId - 0x38, UNION_ROOM_SPAWN_IN); } - sub_8069094(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; - sub_80691A4(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 (sub_806916C(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 (sub_806916C(r3 - 0x38) != 0) + if (RfuUnionObjectIsInvisible(objId - 0x38) != 0) { continue; } - if (sub_8069294(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) { - sub_8069058(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)); } diff --git a/src/save.c b/src/save.c index a2d365886..3db8dcdbf 100644 --- a/src/save.c +++ b/src/save.c @@ -856,7 +856,7 @@ void sub_80DA634(u8 taskId) gTasks[taskId].data[0] = 1; break; case 1: - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); gTasks[taskId].data[0] = 2; break; case 2: @@ -890,7 +890,7 @@ void sub_80DA634(u8 taskId) break; case 7: ClearContinueGameWarpStatus2(); - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); gTasks[taskId].data[0] = 8; break; case 8: @@ -901,7 +901,7 @@ void sub_80DA634(u8 taskId) } break; case 9: - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); gTasks[taskId].data[0] = 10; break; case 10: diff --git a/src/scrcmd.c b/src/scrcmd.c index c2c422a0a..1ff3eb954 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -1193,7 +1193,7 @@ bool8 ScrCmd_turnvobject(struct ScriptContext *ctx) u8 v1 = ScriptReadByte(ctx); u8 direction = ScriptReadByte(ctx); - sub_8069058(v1, direction); + TurnObjectEvent(v1, direction); return FALSE; } diff --git a/src/script.c b/src/script.c index 99bfa9999..4b8565589 100644 --- a/src/script.c +++ b/src/script.c @@ -506,7 +506,7 @@ u8 *GetRamScript(u8 objectId, u8 *script) } } -bool32 sub_8069DFC(void) +bool32 ValidateRamScript(void) { struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data; if (scriptData->magic != RAM_SCRIPT_MAGIC) diff --git a/src/seagallop.c b/src/seagallop.c index 10ea97fec..aa0c48da1 100644 --- a/src/seagallop.c +++ b/src/seagallop.c @@ -176,7 +176,7 @@ static const struct SpriteTemplate sWakeSpriteTemplate = { SpriteCB_Wake }; -void ScrSpecial_SeagallopFerry(void) +void DoSeagallopFerryScene(void) { SetVBlankCallback(NULL); HelpSystem_Disable(); @@ -459,7 +459,8 @@ static bool8 GetDirectionOfTravel(void) return (sTravelDirectionMatrix[gSpecialVar_0x8004] >> gSpecialVar_0x8006) & 1; } -u8 sub_8147500(void) +// For "All aboard SEAGALLOP HI-SPEED ##" text +u8 GetSeagallopNumber(void) { u16 originId, destId; @@ -478,21 +479,34 @@ u8 sub_8147500(void) if (originId == SEAGALLOP_BIRTH_ISLAND || destId == SEAGALLOP_BIRTH_ISLAND) return 12; - if ((originId == SEAGALLOP_ONE_ISLAND || originId == SEAGALLOP_TWO_ISLAND || originId == SEAGALLOP_THREE_ISLAND) && (destId == SEAGALLOP_ONE_ISLAND || destId == SEAGALLOP_TWO_ISLAND || destId == SEAGALLOP_THREE_ISLAND)) + if ((originId == SEAGALLOP_ONE_ISLAND + || originId == SEAGALLOP_TWO_ISLAND + || originId == SEAGALLOP_THREE_ISLAND) + && (destId == SEAGALLOP_ONE_ISLAND + || destId == SEAGALLOP_TWO_ISLAND + || destId == SEAGALLOP_THREE_ISLAND)) return 2; - if ((originId == SEAGALLOP_FOUR_ISLAND || originId == SEAGALLOP_FIVE_ISLAND) && (destId == SEAGALLOP_FOUR_ISLAND || destId == SEAGALLOP_FIVE_ISLAND)) + if ((originId == SEAGALLOP_FOUR_ISLAND + || originId == SEAGALLOP_FIVE_ISLAND) + && (destId == SEAGALLOP_FOUR_ISLAND + || destId == SEAGALLOP_FIVE_ISLAND)) return 3; - if ((originId == SEAGALLOP_SIX_ISLAND || originId == SEAGALLOP_SEVEN_ISLAND) && (destId == SEAGALLOP_SIX_ISLAND || destId == SEAGALLOP_SEVEN_ISLAND)) + if ((originId == SEAGALLOP_SIX_ISLAND + || originId == SEAGALLOP_SEVEN_ISLAND) + && (destId == SEAGALLOP_SIX_ISLAND + || destId == SEAGALLOP_SEVEN_ISLAND)) return 5; return 6; } -bool8 sub_8147594(void) +bool8 IsPlayerLeftOfVermilionSailor(void) { - if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(VERMILION_CITY) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(VERMILION_CITY) && gSaveBlock1Ptr->pos.x < 24) + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(VERMILION_CITY) + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(VERMILION_CITY) + && gSaveBlock1Ptr->pos.x < 24) return TRUE; return FALSE; diff --git a/src/smokescreen.c b/src/smokescreen.c new file mode 100644 index 000000000..2f269737e --- /dev/null +++ b/src/smokescreen.c @@ -0,0 +1,73 @@ +#include "global.h" +#include "decompress.h" +#include "util.h" + +static void SmokescreenImpact_Callback(struct Sprite * sprite); + +extern const struct CompressedSpriteSheet gSmokescreenImpactSpriteSheet; +extern const struct CompressedSpritePalette gSmokescreenImpactSpritePalette; +extern const struct SpriteTemplate gSmokescreenImpactSpriteTemplate; + +u8 SmokescreenImpact(s16 x, s16 y, u8 a3) +{ + u8 mainSpriteId; + u8 spriteId1, spriteId2, spriteId3, spriteId4; + struct Sprite *mainSprite; + + if (GetSpriteTileStartByTag(gSmokescreenImpactSpriteSheet.tag) == 0xFFFF) + { + LoadCompressedSpriteSheetUsingHeap(&gSmokescreenImpactSpriteSheet); + LoadCompressedSpritePaletteUsingHeap(&gSmokescreenImpactSpritePalette); + } + + mainSpriteId = CreateInvisibleSpriteWithCallback(SmokescreenImpact_Callback); + mainSprite = &gSprites[mainSpriteId]; + mainSprite->data[1] = a3; + + spriteId1 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y - 16, 2); + gSprites[spriteId1].data[0] = mainSpriteId; + mainSprite->data[0]++; + AnimateSprite(&gSprites[spriteId1]); + + spriteId2 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y - 16, 2); + gSprites[spriteId2].data[0] = mainSpriteId; + mainSprite->data[0]++; + StartSpriteAnim(&gSprites[spriteId2], 1); + AnimateSprite(&gSprites[spriteId2]); + + spriteId3 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x - 16, y, 2); + gSprites[spriteId3].data[0] = mainSpriteId; + mainSprite->data[0]++; + StartSpriteAnim(&gSprites[spriteId3], 2); + AnimateSprite(&gSprites[spriteId3]); + + spriteId4 = CreateSprite(&gSmokescreenImpactSpriteTemplate, x, y, 2); + gSprites[spriteId4].data[0] = mainSpriteId; + mainSprite->data[0]++; + StartSpriteAnim(&gSprites[spriteId4], 3); + AnimateSprite(&gSprites[spriteId4]); + + return mainSpriteId; +} + +static void SmokescreenImpact_Callback(struct Sprite *sprite) +{ + if (!sprite->data[0]) + { + FreeSpriteTilesByTag(gSmokescreenImpactSpriteSheet.tag); + FreeSpritePaletteByTag(gSmokescreenImpactSpritePalette.tag); + if (!sprite->data[1]) + DestroySprite(sprite); + else + sprite->callback = SpriteCallbackDummy; + } +} + +void SpriteCB_DestroySprite(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + gSprites[sprite->data[0]].data[0]--; + DestroySprite(sprite); + } +} diff --git a/src/sprite.c b/src/sprite.c index c1fc89777..fd824494b 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -94,17 +94,17 @@ typedef void (*AffineAnimCmdFunc)(u8 matrixNum, struct Sprite *); #define DUMMY_OAM_DATA \ { \ 160, /* Y (off-screen) */ \ - 0, \ - 0, \ - 0, \ - 0, \ - 0, \ + ST_OAM_AFFINE_OFF, \ + ST_OAM_OBJ_NORMAL, \ + FALSE, \ + ST_OAM_4BPP, \ + ST_OAM_SQUARE, \ 304, /* X */ \ 0, \ - 0, \ - 0, \ + ST_OAM_SIZE_0, \ + 0x000, \ 3, /* lowest priority */ \ - 0, \ + 0x0, \ 0 \ } @@ -250,47 +250,47 @@ static const AffineAnimCmdFunc sAffineAnimCmdFuncs[] = AffineAnimCmd_frame, }; -static const s32 sUnknown_082EC6F4[3][4][2] = +static const s32 sOamDimensionsCopy[3][4][2] = { - { - {8, 8}, - {0x10, 0x10}, - {0x20, 0x20}, - {0x40, 0x40}, + [ST_OAM_SQUARE] = { + [ST_OAM_SIZE_0] = { 8, 8}, // SPRITE_SIZE_8x8 + [ST_OAM_SIZE_1] = {16, 16}, // SPRITE_SIZE_16x16 + [ST_OAM_SIZE_2] = {32, 32}, // SPRITE_SIZE_32x32 + [ST_OAM_SIZE_3] = {64, 64}, // SPRITE_SIZE_64x64 }, - { - {0x10, 8}, - {0x20, 8}, - {0x20, 0x10}, - {0x40, 0x20}, + [ST_OAM_H_RECTANGLE] = { + [ST_OAM_SIZE_0] = {16, 8}, // SPRITE_SIZE_16x8 + [ST_OAM_SIZE_1] = {32, 8}, // SPRITE_SIZE_32x8 + [ST_OAM_SIZE_2] = {32, 16}, // SPRITE_SIZE_32x16 + [ST_OAM_SIZE_3] = {64, 32}, // SPRITE_SIZE_64x32 }, - { - {8, 0x10}, - {8, 0x20}, - {0x10, 0x20}, - {0x20, 0x40}, + [ST_OAM_V_RECTANGLE] = { + [ST_OAM_SIZE_0] = { 8, 16}, // SPRITE_SIZE_8x16 + [ST_OAM_SIZE_1] = { 8, 32}, // SPRITE_SIZE_8x32 + [ST_OAM_SIZE_2] = {16, 32}, // SPRITE_SIZE_16x32 + [ST_OAM_SIZE_3] = {32, 64}, // SPRITE_SIZE_32x64 }, }; static const struct OamDimensions sOamDimensions[3][4] = { - { // square - { 8, 8 }, - { 16, 16 }, - { 32, 32 }, - { 64, 64 }, + [ST_OAM_SQUARE] = { + [ST_OAM_SIZE_0] = { 8, 8}, // SPRITE_SIZE_8x8 + [ST_OAM_SIZE_1] = {16, 16}, // SPRITE_SIZE_16x16 + [ST_OAM_SIZE_2] = {32, 32}, // SPRITE_SIZE_32x32 + [ST_OAM_SIZE_3] = {64, 64}, // SPRITE_SIZE_64x64 }, - { // horizontal rectangle - { 16, 8 }, - { 32, 8 }, - { 32, 16 }, - { 64, 32 }, + [ST_OAM_H_RECTANGLE] = { + [ST_OAM_SIZE_0] = {16, 8}, // SPRITE_SIZE_16x8 + [ST_OAM_SIZE_1] = {32, 8}, // SPRITE_SIZE_32x8 + [ST_OAM_SIZE_2] = {32, 16}, // SPRITE_SIZE_32x16 + [ST_OAM_SIZE_3] = {64, 32}, // SPRITE_SIZE_64x32 }, - { // vertical rectangle - { 8, 16 }, - { 8, 32 }, - { 16, 32 }, - { 32, 64 }, + [ST_OAM_V_RECTANGLE] = { + [ST_OAM_SIZE_0] = { 8, 16}, // SPRITE_SIZE_8x16 + [ST_OAM_SIZE_1] = { 8, 32}, // SPRITE_SIZE_8x32 + [ST_OAM_SIZE_2] = {16, 32}, // SPRITE_SIZE_16x32 + [ST_OAM_SIZE_3] = {32, 64}, // SPRITE_SIZE_32x64 }, }; @@ -1222,43 +1222,43 @@ u8 GetSpriteMatrixNum(struct Sprite *sprite) return matrixNum; } -void sub_8007FFC(struct Sprite* sprite, s16 a2, s16 a3) +void obj_pos2_update_enable(struct Sprite* sprite, s16 xmod, s16 ymod) { - sprite->data[6] = a2; - sprite->data[7] = a3; + sprite->data[6] = xmod; + sprite->data[7] = ymod; sprite->flags_f = 1; } -s32 sub_800800C(s32 a0, s32 a1, s32 a2) +static s32 affine_get_new_pos2(s32 baseDim, s32 xformed, s32 modifier) { - s32 subResult, var1; + s32 subResult, shiftResult; - subResult = a1 - a0; + subResult = xformed - baseDim; if (subResult < 0) - var1 = -(subResult) >> 9; + shiftResult = -(subResult) >> 9; else - var1 = -(subResult >> 9); - return a2 - ((u32)(a2 * a1) / (u32)(a0) + var1); + shiftResult = -(subResult >> 9); + return modifier - ((u32)(modifier * xformed) / (u32)(baseDim) + shiftResult); } -void obj_update_pos2(struct Sprite *sprite, s32 a1, s32 a2) +static void obj_update_pos2(struct Sprite *sprite, s32 xmod, s32 ymod) { - s32 var0, var1, var2; + s32 dim, baseDim, xFormed; u32 matrixNum = sprite->oam.matrixNum; - if (a1 != 0x800) + if (xmod != 0x800) { - var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][0]; - var1 = var0 << 8; - var2 = (var0 << 16) / gOamMatrices[matrixNum].a; - sprite->pos2.x = sub_800800C(var1, var2, a1); + dim = sOamDimensionsCopy[sprite->oam.shape][sprite->oam.size][0]; + baseDim = dim << 8; + xFormed = (dim << 16) / gOamMatrices[matrixNum].a; + sprite->pos2.x = affine_get_new_pos2(baseDim, xFormed, xmod); } - if (a2 != 0x800) + if (ymod != 0x800) { - var0 = sUnknown_082EC6F4[sprite->oam.shape][sprite->oam.size][1]; - var1 = var0 << 8; - var2 = (var0 << 16) / gOamMatrices[matrixNum].d; - sprite->pos2.y = sub_800800C(var1, var2, a2); + dim = sOamDimensionsCopy[sprite->oam.shape][sprite->oam.size][1]; + baseDim = dim << 8; + xFormed = (dim << 16) / gOamMatrices[matrixNum].d; + sprite->pos2.y = affine_get_new_pos2(baseDim, xFormed, ymod); } } diff --git a/src/tm_case.c b/src/tm_case.c index d45061bde..ac4134029 100644 --- a/src/tm_case.c +++ b/src/tm_case.c @@ -1304,7 +1304,7 @@ static void InitWindowTemplatesAndPals(void) LoadPalette(gTMCaseMainWindowPalette, 0xA0, 0x20); LoadPalette(sPal3Override, 0xF6, 0x04); LoadPalette(sPal3Override, 0xD6, 0x04); - sub_8107D38(0xc0, 0x01); + ListMenuLoadStdPalAt(0xc0, 0x01); for (i = 0; i < 9; i++) FillWindowPixelBuffer(i, 0x00); PutWindowTilemap(0); diff --git a/src/trade.c b/src/trade.c index 05a259e60..1872e98ee 100644 --- a/src/trade.c +++ b/src/trade.c @@ -1,41 +1,22 @@ #include "global.h" -#include "palette.h" +#include "gflib.h" #include "task.h" #include "decompress.h" -#include "gpu_regs.h" -#include "malloc.h" -#include "bg.h" -#include "text.h" -#include "window.h" -#include "librfu.h" #include "text_window.h" -#include "evolution_scene.h" #include "pokemon_icon.h" -#include "pokedex.h" -#include "mail_data.h" #include "graphics.h" #include "link.h" -#include "random.h" -#include "save.h" #include "load_save.h" -#include "quest_log.h" -#include "field_fadetransition.h" -#include "mevent.h" -#include "help_system.h" #include "link_rfu.h" #include "cable_club.h" #include "data.h" -#include "sound.h" -#include "string_util.h" #include "strings.h" #include "menu.h" #include "overworld.h" #include "battle_anim.h" #include "pokeball.h" #include "party_menu.h" -#include "util.h" #include "daycare.h" -#include "script.h" #include "event_data.h" #include "battle_interface.h" #include "pokemon_summary_screen.h" @@ -43,11 +24,7 @@ #include "new_menu_helpers.h" #include "trade.h" #include "trade_scene.h" -#include "constants/species.h" -#include "constants/items.h" -#include "constants/easy_chat.h" #include "constants/songs.h" -#include "constants/region_map.h" #include "constants/moves.h" struct TradeMenuResources @@ -788,9 +765,9 @@ static void sub_804C728(void) if (gWirelessCommType) { - sub_800B1F4(); + SetWirelessCommType1(); OpenLink(); - sub_80FBB20(); + LinkRfu_CreateIdleTask(); } else { @@ -833,14 +810,14 @@ static void sub_804C728(void) case 4: if (gReceivedRemoteLinkPlayers == TRUE && IsLinkPlayerDataExchangeComplete() == TRUE) { - sub_80FBB4C(); + LinkRfu_DestroyIdleTask(); CalculatePlayerPartyCount(); gMain.state++; sTradeMenuResourcesPtr->unk_A8 = 0; if (gWirelessCommType) { sub_80FA484(TRUE); - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); } } break; @@ -1236,7 +1213,7 @@ static void sub_804D548(void) } else { - sub_800AA80(32); + Link_StartSend5FFFwithParam(32); sTradeMenuResourcesPtr->unk_6F = 13; } } @@ -2027,11 +2004,11 @@ static void sub_804E908(void) { if (gWirelessCommType) { - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); } else { - sub_800AA80(12); + Link_StartSend5FFFwithParam(12); } sTradeMenuResourcesPtr->unk_6F = 12; @@ -2067,7 +2044,7 @@ static void sub_804E9C0(void) { if (!sub_80FA484(FALSE)) { - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); sTradeMenuResourcesPtr->unk_6F = 13; } } @@ -2763,30 +2740,30 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet) return FALSE; } -int GetUnionRoomTradeMessageId(struct GFtgtGnameSub a0, struct GFtgtGnameSub a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet) +int GetUnionRoomTradeMessageId(struct GFtgtGnameSub playerSub, struct GFtgtGnameSub partnerSub, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet) { - u8 r9 = a0.hasNationalDex; - u8 r4 = a0.isChampion; - u8 r10 = a1.hasNationalDex; - u8 r0 = a1.isChampion; - u8 r1 = a1.unk_01_2; - u8 r2; + u8 playerHasNationalDex = playerSub.hasNationalDex; + u8 playerIsChampion = playerSub.isChampion; + u8 partnerHasNationalDex = partnerSub.hasNationalDex; + u8 partnerIsChampion = partnerSub.isChampion; + u8 partnerVersion = partnerSub.version; + bool8 isNotFRLG; - if (r1 == VERSION_FIRE_RED || r1 == VERSION_LEAF_GREEN) + if (partnerVersion == VERSION_FIRE_RED || partnerVersion == VERSION_LEAF_GREEN) { - r2 = 0; + isNotFRLG = FALSE; } else { - r2 = 1; + isNotFRLG = TRUE; } - if (r2) + if (isNotFRLG) { - if (!r4) + if (!playerIsChampion) { return 8; } - else if (!r0) + else if (!partnerIsChampion) { return 9; } @@ -2817,7 +2794,7 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub a0, struct GFtgtGnameSub a1, return 3; } - if (!r9) + if (!playerHasNationalDex) { if (species1 == SPECIES_EGG) { @@ -2835,7 +2812,7 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub a0, struct GFtgtGnameSub a1, } } - if (!r10 && species1 > SPECIES_MEW) + if (!partnerHasNationalDex && species1 > SPECIES_MEW) { return 7; } @@ -2843,11 +2820,11 @@ int GetUnionRoomTradeMessageId(struct GFtgtGnameSub a0, struct GFtgtGnameSub a1, return 0; } -int CanRegisterMonForTradingBoard(struct GFtgtGnameSub a0, u16 species, u16 a2, u8 a3) +int CanRegisterMonForTradingBoard(struct GFtgtGnameSub playerSub, u16 species2, u16 species, u8 obedience) { - u8 canTradeEggAndNational = a0.hasNationalDex; + u8 canTradeEggAndNational = playerSub.hasNationalDex; - if (IsDeoxysOrMewUntradable(a2, a3)) + if (IsDeoxysOrMewUntradable(species, obedience)) { return 1; } @@ -2857,12 +2834,12 @@ int CanRegisterMonForTradingBoard(struct GFtgtGnameSub a0, u16 species, u16 a2, return 0; } - if (species == SPECIES_EGG) + if (species2 == SPECIES_EGG) { return 2; } - if (species > SPECIES_MEW && species != SPECIES_EGG) + if (species2 > SPECIES_MEW && species2 != SPECIES_EGG) { return 1; } diff --git a/src/trade_scene.c b/src/trade_scene.c index b420cb196..601d7ae2b 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -2556,7 +2556,7 @@ static void sub_8053E8C(void) DrawTextOnTradeWindow(0, gStringVar4, 0); break; case 1: - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); gMain.state = 100; sTradeData->timer = 0; break; @@ -2594,7 +2594,7 @@ static void sub_8053E8C(void) } if (gWirelessCommType) { - sub_8144714(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); + MEvent_RecordIdOfWonderCardSenderByEventType(2, gLinkPlayers[GetMultiplayerId() ^ 1].trainerId); } SetContinueGameWarpStatusToDynamicWarp(); sub_80DA3AC(); @@ -2641,7 +2641,7 @@ static void sub_8053E8C(void) case 41: if (sTradeData->timer == 0) { - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); gMain.state = 42; } else @@ -2660,7 +2660,7 @@ static void sub_8053E8C(void) if (++sTradeData->timer > 60) { gMain.state++; - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); } break; case 6: @@ -2682,11 +2682,11 @@ static void sub_8053E8C(void) { if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade) { - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); } else { - sub_800AAC0(); + Link_TryStartSend5FFF(); } gMain.state++; } diff --git a/src/trainer_card.c b/src/trainer_card.c index e4778f5ed..f29c9c71c 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -590,7 +590,7 @@ static void Task_TrainerCard(u8 taskId) } break; case 15: - sub_800AAC0(); + Link_TryStartSend5FFF(); DrawDialogueFrame(0, 1); AddTextPrinterParameterized(0, 2, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SPEED_FF, 0); CopyWindowToVram(0, 3); diff --git a/src/union_room.c b/src/union_room.c index 4e3428cc6..f3aeeebc5 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -37,6 +37,7 @@ #include "trade_scene.h" #include "trainer_card.h" #include "union_room.h" +#include "union_room_battle.h" #include "union_room_chat.h" #include "rfu_union_tool.h" #include "union_room_message.h" @@ -45,13 +46,14 @@ #include "constants/cable_club.h" #include "constants/field_weather.h" #include "constants/species.h" +#include "constants/union_room.h" static EWRAM_DATA u8 sUnionRoomPlayerName[12] = {}; -static EWRAM_DATA u8 gUnknown_203B058 = 0; -static EWRAM_DATA u8 gUnknown_203B059 = 0; +static EWRAM_DATA u8 sPlayerCurrActivity = 0; +static EWRAM_DATA u8 sPlayerActivityGroupSize = 0; static EWRAM_DATA union UnkUnion_Main sUnionRoomMain = {}; static EWRAM_DATA u32 sUnref_203B060 = 0; -EWRAM_DATA struct GFtgtGnameSub gUnknown_203B064 = {}; +EWRAM_DATA struct GFtgtGnameSub gPartnerTgtGnameSub = {}; EWRAM_DATA u16 gUnionRoomOfferedSpecies = SPECIES_NONE; EWRAM_DATA u8 gUnionRoomRequestedMonType = TYPE_NORMAL; static EWRAM_DATA struct UnionRoomTrade sUnionRoomTrade = {}; @@ -60,103 +62,103 @@ static struct UnkStruct_Leader * sLeader; static struct UnkStruct_Group * sGroup; static struct UnkStruct_URoom * sURoom; -static void sub_8115A68(u8 taskId); -static void sub_81161E4(struct UnkStruct_Leader * leader); -static bool8 sub_8116444(struct UnkStruct_Leader * leader, u32 a1, u32 a2); -static void sub_81164C8(u8 windowId, s32 itemId, u8 y); -static u8 sub_8116524(struct UnkStruct_Main0 * a0); -static u8 sub_81165E8(struct UnkStruct_Main0 * a0); -static void sub_8116738(u8 taskId); -static u32 sub_8116D10(struct UnkStruct_Group * group, s32 id); -static void sub_8116D60(struct UnkStruct_Group * group, s32 id); -static void sub_8116E1C(u8 taskId); -static void sub_8116F94(u8 windowId, s32 itemId, u8 y); -static u8 sub_8116FE4(void); -static void sub_8117990(void); -static void sub_81179A4(void); -static void sub_8117A0C(u8 taskId); -static void sub_8117F20(u8 taskId); -static void sub_81182DC(u8 taskId); -static void sub_81186E0(u8 taskId); +static void Task_TryBecomeLinkLeader(u8 taskId); +static void Leader_DestroyResources(struct UnkStruct_Leader * leader); +static bool8 Leader_SetStateIfMemberListChanged(struct UnkStruct_Leader * leader, u32 state1, u32 state2); +static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, s32 itemId, u8 y); +static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 * main0); +static u8 UnionRoomLeaderField0CompactionAndCount(struct UnkStruct_Main0 * main0); +static void Task_TryJoinLinkGroup(u8 taskId); +static u32 IsTryingToTradeWithHoennTooSoon(struct UnkStruct_Group * group, s32 id); +static void AskToJoinRfuGroup(struct UnkStruct_Group * group, s32 id); +static void Task_ListenToWireless(u8 taskId); +static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, s32 itemId, u8 y); +static u8 GetNewLeaderCandidate(void); +static void CreateTask_RunScriptAndFadeToActivity(void); +static void CreateTask_StartActivity(void); +static void Task_MEvent_Leader(u8 taskId); +static void Task_CardOrNewsWithFriend(u8 taskId); +static void Task_CardOrNewsOverWireless(u8 taskId); +static void Task_RunUnionRoom(u8 taskId); static u16 ReadAsU16(const u8 *data); -static void sub_8119904(struct UnkStruct_URoom * uRoom); -static bool32 sub_8119944(struct UnkStruct_URoom * uRoom); -static void sub_81199FC(u8 taskId); -static u8 sub_8119B94(void); -static u8 sub_8119E84(struct UnkStruct_Main4 * arg0, struct UnkStruct_Main4 * arg1, u32 arg2); -static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1); -static u8 sub_811A054(struct UnkStruct_Main4 * arg0, u32 arg1); -static u8 sub_811A084(struct UnkStruct_Main4 * arg0, u32 arg1); -static bool32 sub_811A0B4(const u8 * str); -static bool32 sub_811A0E0(void); +static void ReceiveUnionRoomActivityPacket(struct UnkStruct_URoom * uRoom); +static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * uRoom); +static void Task_InitUnionRoom(u8 taskId); +static u8 HandlePlayerListUpdate(void); +static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 * main4, struct UnkStruct_Main4 * arg1, u32 arg2); +static bool32 GetGnameWonderFlagByLinkGroup(struct GFtgtGname * gname, s16 linkGroup); +static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 * main4, u32 linkGroup); +static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * main4, u32 linkGroup); +static bool32 UR_PrintFieldMessage(const u8 * str); +static bool32 UR_RunTextPrinters_CheckPrinter0Active(void); static bool8 PrintOnTextbox(u8 *textState, const u8 *str); -static s8 sub_811A14C(u8 *dest, bool32 arg1); -static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate); -static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6); -static void sub_811A3F8(void); -static void sub_811A41C(void); -static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); -static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count); -static void sub_811A650(struct UnkStruct_x1C * arg0, u8 count); -static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1); -static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1); -static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1); -static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2); -static void sub_811A81C(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); -static void sub_811A910(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id); -static bool32 sub_811A9B8(void); -static u32 sub_811A9FC(s32 a0); -static u32 sub_811AA24(struct UnkStruct_x20 * unkX20); -static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender); +static s8 UnionRoomHandleYesNo(u8 *state_p, bool32 no_draw); +static s32 ListMenuHandler_AllItemsAvailable(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate); +static s32 TradeBoardMenuHandler(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, u8 *trade_board_win_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * traders); +static void UR_BlankBg0(void); +static void JoinGroup_BlankBg0AndEnableScriptContexts(void); +static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx); +static void BlankUnkStruct_x20Array(struct UnkStruct_x20 * x20, u8 count); +static void BlankUnkStruct_x1CArray(struct UnkStruct_x1C * x1C, u8 count); +static bool8 AreGnameUnameDifferent(struct UnionGnameUnamePair * arg0, const struct UnionGnameUnamePair * arg1); +static bool32 AreUnionRoomPlayerGnamesDifferent(struct UnionGnameUnamePair * arg0, struct UnionGnameUnamePair * arg1); +static u32 Findx20Inx1CArray(struct UnkStruct_x20 * x20, struct UnkStruct_x1C * x1Carr); +static u8 Appendx1Ctox20(struct UnkStruct_x20 * x20arr, struct UnkStruct_x1C * x1C, u8 count); +static void PrintUnionRoomGroupOnWindow(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id); +static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id); +static bool32 PlayerIsTalkingToUnionRoomAide(void); +static u32 GetResponseIdx_InviteToURoomActivity(s32 activity); +static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 * unkX20); +static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, u8 overrideGender, u8 playerIdx, u32 playerGender); static void nullsub_92(u8 windowId, s32 itemId, u8 y); -static void sub_811ACA4(u8 windowId, s32 itemId, u8 y); -static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1); -static s32 GetUnionRoomPlayerGender(s32 a0, struct UnkStruct_Main0 * a1); -static s32 sub_811ADD0(u32 type, u32 species); -static void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender); -static void sub_811AECC(u8 *dst, u8 arg1); -static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * arg3); -static bool32 sub_811B0A4(struct UnkStruct_URoom * arg0); +static void TradeBoardListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y); +static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * x20, s32 n); +static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct UnkStruct_Main0 * main0); +static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species); +static void GetURoomActivityRejectMsg(u8 *dst, s32 activity, u32 playerGender); +static void GetURoomActivityStartMsg(u8 *dst, u8 activity); +static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_p, struct UnkStruct_URoom * uroom); +static bool32 PollPartnerYesNoResponse(struct UnkStruct_URoom * uroom); static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void); static void ResetUnionRoomTrade(struct UnionRoomTrade * trade); static bool32 RegisterTradeMonAndGetIsEgg(u32 monId, struct UnionRoomTrade * trade); static void RegisterTradeMon(u32 monId, struct UnionRoomTrade * trade); static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mpId); -static void sub_811B258(bool32 a0); -static void sub_811B298(void); -static u8 sub_811B2A8(s32 a0); -static u8 sub_811B2D8(struct UnkStruct_URoom * arg0); -static void sub_811B31C(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 gender); +static void HandleCancelTrade(bool32 unlockObjs); +static void UR_EnableScriptContext2AndFreezeObjectEvents(void); +static u8 GetSinglePartnerSpriteGenderParam(s32 linkPlayer); +static u8 GetActivePartnerSpriteGenderParam(struct UnkStruct_URoom * uroom); +static void ViewURoomPartnerTrainerCard(u8 *dest, struct UnkStruct_URoom * uRoom, bool8 parent_child); #define _8456CD8(a, b) ((a) | ((b) << 8)) -static const u8 *const gUnknown_8456C74[] = { - gUnknown_84571AC, - gUnknown_8459394, - gUnknown_84593A4, - gUnknown_84593B4, - gUnknown_84593C4, - gUnknown_84593D4, - gUnknown_84593E4, - gUnknown_84593F4, - gUnknown_84593DC, - gUnknown_8459400, - gUnknown_8459410, - gUnknown_845941C, - gUnknown_845942C, - gUnknown_8459434, - gUnknown_8459440, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84571AC, - gUnknown_84593E4, - gUnknown_84593F4 +static const u8 *const sUnionRoomActivityStringPtrs[] = { + gUnionRoomActivity_Blank, + gUnionRoomActivity_SingleBattle, + gUnionRoomActivity_DoubleBattle, + gUnionRoomActivity_MultiBattle, + gUnionRoomActivity_PokemonTrades, + gUnionRoomActivity_Chat, + gUnionRoomActivity_WonderCards, + gunionRoomActivity_WonderNews, + gUnionRoomActivity_Cards, + gUnionRoomActivity_PokemonJump, + gUnionRoomActivity_BerryCrush, + gUnionRoomActivity_BerryPicking, + gUnionRoomActivity_Search, + gUnionRoomActivity_SpinTradeJP, + gUnionRoomActivity_ItemTradeJP, + gUnionRoomActivity_Blank, + gUnionRoomActivity_Blank, + gUnionRoomActivity_Blank, + gUnionRoomActivity_Blank, + gUnionRoomActivity_Blank, + gUnionRoomActivity_Blank, + gUnionRoomActivity_WonderCards, + gunionRoomActivity_WonderNews }; -static const struct WindowTemplate gUnknown_8456CD0 = { +static const struct WindowTemplate sWindowTemplate_BButtonCancel = { .bg = 0, .tilemapLeft = 0, .tilemapTop = 0, @@ -166,19 +168,19 @@ static const struct WindowTemplate gUnknown_8456CD0 = { .baseBlock = 0x008 }; -static const u32 gUnknown_8456CD8[] = { - _8456CD8( 1, 2), - _8456CD8( 2, 2), - _8456CD8( 3, 4), - _8456CD8( 4, 2), - _8456CD8( 9, 37), - _8456CD8(10, 37), - _8456CD8(11, 53), - _8456CD8(13, 53), - _8456CD8(14, 53) +static const u32 sLinkGroupToActivityAndCapacity[] = { + [LINK_GROUP_SINGLE_BATTLE] = _8456CD8(ACTIVITY_BATTLE, 2), + [LINK_GROUP_DOUBLE_BATTLE] = _8456CD8(ACTIVITY_DBLBATTLE, 2), + [LINK_GROUP_MULTI_BATTLE] = _8456CD8(ACTIVITY_MLTBATTLE, 4), + [LINK_GROUP_TRADE] = _8456CD8(ACTIVITY_TRADE, 2), + [LINK_GROUP_POKEMON_JUMP] = _8456CD8(ACTIVITY_PJUMP, 5 | 0x20), + [LINK_GROUP_BERRY_CRUSH] = _8456CD8(ACTIVITY_BCRUSH, 5 | 0x20), + [LINK_GROUP_BERRY_PICKING] = _8456CD8(ACTIVITY_BPICK, 5 | 0x30), + [LINK_GROUP_WONDER_CARD] = _8456CD8(ACTIVITY_SPINTRADE, 5 | 0x30), + [LINK_GROUP_WONDER_NEWS] = _8456CD8(ACTIVITY_ITEMTRADE, 5 | 0x30) }; -static const struct WindowTemplate gUnknown_8456CFC = { +static const struct WindowTemplate sWindowTemplate_List_PossibleGroupMembers = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 3, @@ -188,7 +190,7 @@ static const struct WindowTemplate gUnknown_8456CFC = { .baseBlock = 0x044 }; -static const struct WindowTemplate gUnknown_8456D04 = { +static const struct WindowTemplate sWindowTemplate_NumPlayerMode = { .bg = 0, .tilemapLeft = 16, .tilemapTop = 3, @@ -198,18 +200,18 @@ static const struct WindowTemplate gUnknown_8456D04 = { .baseBlock = 0x0C6 }; -const struct ListMenuItem gUnknown_8456D0C[] = { - {gUnknown_84571AC, 0}, - {gUnknown_84571AC, 1}, - {gUnknown_84571AC, 2}, - {gUnknown_84571AC, 3}, - {gUnknown_84571AC, 4} +const struct ListMenuItem sListMenuItems_PossibleGroupMembers[] = { + {gUnionRoomActivity_Blank, 0}, + {gUnionRoomActivity_Blank, 1}, + {gUnionRoomActivity_Blank, 2}, + {gUnionRoomActivity_Blank, 3}, + {gUnionRoomActivity_Blank, 4} }; -static const struct ListMenuTemplate gUnknown_8456D34 = { - .items = gUnknown_8456D0C, +static const struct ListMenuTemplate sListMenuTemplate_PossibleGroupMembers = { + .items = sListMenuItems_PossibleGroupMembers, .moveCursorFunc = NULL, - .itemPrintFunc = sub_81164C8, + .itemPrintFunc = ItemPrintFunc_PossibleGroupMembers, .totalItems = 5, .maxShowed = 5, .windowId = 0, @@ -227,7 +229,7 @@ static const struct ListMenuTemplate gUnknown_8456D34 = { .cursorKind = 1 }; -static const struct WindowTemplate gUnknown_8456D4C = { +static const struct WindowTemplate sWindowTemplate_MysteryGiftList = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 3, @@ -237,7 +239,7 @@ static const struct WindowTemplate gUnknown_8456D4C = { .baseBlock = 0x044 }; -static const struct WindowTemplate gUnknown_8456D54 = { +static const struct WindowTemplate sWindowTemplate_MysteryGiftPlayerNameAndId = { .bg = 0, .tilemapLeft = 20, .tilemapTop = 3, @@ -247,29 +249,29 @@ static const struct WindowTemplate gUnknown_8456D54 = { .baseBlock = 0x0EE }; -static const struct ListMenuItem gUnknown_8456D5C[] = { - {gUnknown_84571AC, 0}, - {gUnknown_84571AC, 1}, - {gUnknown_84571AC, 2}, - {gUnknown_84571AC, 3}, - {gUnknown_84571AC, 4}, - {gUnknown_84571AC, 5}, - {gUnknown_84571AC, 6}, - {gUnknown_84571AC, 7}, - {gUnknown_84571AC, 8}, - {gUnknown_84571AC, 9}, - {gUnknown_84571AC, 10}, - {gUnknown_84571AC, 11}, - {gUnknown_84571AC, 12}, - {gUnknown_84571AC, 13}, - {gUnknown_84571AC, 14}, - {gUnknown_84571AC, 15} +static const struct ListMenuItem sListMenuItems_UnionRoomGroups[] = { + {gUnionRoomActivity_Blank, 0}, + {gUnionRoomActivity_Blank, 1}, + {gUnionRoomActivity_Blank, 2}, + {gUnionRoomActivity_Blank, 3}, + {gUnionRoomActivity_Blank, 4}, + {gUnionRoomActivity_Blank, 5}, + {gUnionRoomActivity_Blank, 6}, + {gUnionRoomActivity_Blank, 7}, + {gUnionRoomActivity_Blank, 8}, + {gUnionRoomActivity_Blank, 9}, + {gUnionRoomActivity_Blank, 10}, + {gUnionRoomActivity_Blank, 11}, + {gUnionRoomActivity_Blank, 12}, + {gUnionRoomActivity_Blank, 13}, + {gUnionRoomActivity_Blank, 14}, + {gUnionRoomActivity_Blank, 15} }; -static const struct ListMenuTemplate gUnknown_8456DDC = { - .items = gUnknown_8456D5C, +static const struct ListMenuTemplate sListMenuTemplate_UnionRoomGroups = { + .items = sListMenuItems_UnionRoomGroups, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = sub_8116F94, + .itemPrintFunc = ListMenuItemPrintFunc_UnionRoomGroups, .totalItems = 16, .maxShowed = 5, .windowId = 0, @@ -287,7 +289,7 @@ static const struct ListMenuTemplate gUnknown_8456DDC = { .cursorKind = 0 }; -static const struct WindowTemplate gUnknown_8456DF4 = { +static const struct WindowTemplate sWindowTemplate_InviteToActivity = { .bg = 0, .tilemapLeft = 20, .tilemapTop = 6, @@ -297,15 +299,15 @@ static const struct WindowTemplate gUnknown_8456DF4 = { .baseBlock = 0x001 }; -static const struct ListMenuItem gUnknown_8456DFC[] = { - {gUnknown_8459354, _8456CD8( 8, 2)}, - {gUnknown_8459344, _8456CD8(65, 2)}, - {gUnknown_845934C, _8456CD8(69, 2)}, - {gUnknown_8459360, _8456CD8(64, 0)} +static const struct ListMenuItem sListMenuItems_InviteToActivity[] = { + {gUnknown_8459354, _8456CD8( ACTIVITY_CARD, 2)}, + {gUnknown_8459344, _8456CD8(ACTIVITY_BATTLE | IN_UNION_ROOM, 2)}, + {gUnknown_845934C, _8456CD8(ACTIVITY_CHAT | IN_UNION_ROOM, 2)}, + {gUnknown_8459360, _8456CD8(ACTIVITY_NONE | IN_UNION_ROOM, 0)} }; -static const struct ListMenuTemplate gUnknown_8456E1C = { - .items = gUnknown_8456DFC, +static const struct ListMenuTemplate sListMenuTemplate_InviteToActivity = { + .items = sListMenuItems_InviteToActivity, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, .totalItems = 4, @@ -325,7 +327,7 @@ static const struct ListMenuTemplate gUnknown_8456E1C = { .cursorKind = 0 }; -static const struct WindowTemplate gUnknown_8456E34 = { +static const struct WindowTemplate sWindowTemplate_TradeBoardRegisterInfoExit = { .bg = 0, .tilemapLeft = 18, .tilemapTop = 8, @@ -341,7 +343,7 @@ static const struct ListMenuItem gUnknown_8456E3C[] = { {gUnknown_8459360, 3} }; -static const struct ListMenuTemplate gUnknown_8456E54 = { +static const struct ListMenuTemplate sListMenuTemplate_TradeBoardRegisterInfoExit = { .items = gUnknown_8456E3C, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, @@ -362,7 +364,7 @@ static const struct ListMenuTemplate gUnknown_8456E54 = { .cursorKind = 0 }; -static const struct WindowTemplate gUnknown_8456E6C = { +static const struct WindowTemplate sWindowTemplate_TypeNames = { .bg = 0, .tilemapLeft = 20, .tilemapTop = 2, @@ -372,7 +374,7 @@ static const struct WindowTemplate gUnknown_8456E6C = { .baseBlock = 0x001 }; -static const struct ListMenuItem gUnknown_8456E74[] = { +static const struct ListMenuItem sListMenuItems_TypeNames[] = { {gTypeNames[TYPE_NORMAL], TYPE_NORMAL}, {gTypeNames[TYPE_FIRE], TYPE_FIRE}, {gTypeNames[TYPE_WATER], TYPE_WATER}, @@ -393,8 +395,8 @@ static const struct ListMenuItem gUnknown_8456E74[] = { {gUnknown_8459360, NUMBER_OF_MON_TYPES} }; -static const struct ListMenuTemplate gUnknown_8456F04 = { - .items = gUnknown_8456E74, +static const struct ListMenuTemplate sListMenuTemplate_TypeNames = { + .items = sListMenuItems_TypeNames, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, .totalItems = NUMBER_OF_MON_TYPES, @@ -414,7 +416,7 @@ static const struct ListMenuTemplate gUnknown_8456F04 = { .cursorKind = 0 }; -static const struct WindowTemplate gUnknown_8456F1C = { +static const struct WindowTemplate sTradeBoardWindowTemplate = { .bg = 0, .tilemapLeft = 1, .tilemapTop = 1, @@ -434,23 +436,23 @@ static const struct WindowTemplate gUnknown_8456F24 = { .baseBlock = 0x039 }; -static const struct ListMenuItem gUnknown_8456F2C[] = { - {gUnknown_84571AC, -3}, - {gUnknown_84571AC, 0}, - {gUnknown_84571AC, 1}, - {gUnknown_84571AC, 2}, - {gUnknown_84571AC, 3}, - {gUnknown_84571AC, 4}, - {gUnknown_84571AC, 5}, - {gUnknown_84571AC, 6}, - {gUnknown_84571AC, 7}, +static const struct ListMenuItem sTradeBoardListMenuItems[] = { + {gUnionRoomActivity_Blank, -3}, + {gUnionRoomActivity_Blank, 0}, + {gUnionRoomActivity_Blank, 1}, + {gUnionRoomActivity_Blank, 2}, + {gUnionRoomActivity_Blank, 3}, + {gUnionRoomActivity_Blank, 4}, + {gUnionRoomActivity_Blank, 5}, + {gUnionRoomActivity_Blank, 6}, + {gUnionRoomActivity_Blank, 7}, {gUnknown_8459368, 8} }; -static const struct ListMenuTemplate gUnknown_8456F7C = { - .items = gUnknown_8456F2C, +static const struct ListMenuTemplate sTradeBoardListMenuTemplate = { + .items = sTradeBoardListMenuItems, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, - .itemPrintFunc = sub_811ACA4, + .itemPrintFunc = TradeBoardListMenuItemPrintFunc, .totalItems = 10, .maxShowed = 5, .windowId = 0, @@ -479,22 +481,22 @@ static const struct WindowTemplate gUnknown_8456F94 = { }; static const struct ListMenuItem gUnknown_8456F9C[] = { - {gUnknown_84571AC, 0}, - {gUnknown_84571AC, 1}, - {gUnknown_84571AC, 2}, - {gUnknown_84571AC, 3}, - {gUnknown_84571AC, 4}, - {gUnknown_84571AC, 5}, - {gUnknown_84571AC, 6}, - {gUnknown_84571AC, 7}, - {gUnknown_84571AC, 8}, - {gUnknown_84571AC, 9}, - {gUnknown_84571AC, 10}, - {gUnknown_84571AC, 11}, - {gUnknown_84571AC, 12}, - {gUnknown_84571AC, 13}, - {gUnknown_84571AC, 14}, - {gUnknown_84571AC, 15} + {gUnionRoomActivity_Blank, 0}, + {gUnionRoomActivity_Blank, 1}, + {gUnionRoomActivity_Blank, 2}, + {gUnionRoomActivity_Blank, 3}, + {gUnionRoomActivity_Blank, 4}, + {gUnionRoomActivity_Blank, 5}, + {gUnionRoomActivity_Blank, 6}, + {gUnionRoomActivity_Blank, 7}, + {gUnionRoomActivity_Blank, 8}, + {gUnionRoomActivity_Blank, 9}, + {gUnionRoomActivity_Blank, 10}, + {gUnionRoomActivity_Blank, 11}, + {gUnionRoomActivity_Blank, 12}, + {gUnionRoomActivity_Blank, 13}, + {gUnionRoomActivity_Blank, 14}, + {gUnionRoomActivity_Blank, 15} }; static const struct ListMenuTemplate gUnknown_845701C = { @@ -518,54 +520,138 @@ static const struct ListMenuTemplate gUnknown_845701C = { .cursorKind = 0 }; -static const struct UnkStruct_Shared gUnknown_8457034 = {}; +static const struct UnionGnameUnamePair sUnionGnameUnamePair_Dummy = {}; // starts at gUnknown_082F0474 in pokeemerald, union link groups -ALIGNED(4) static const u8 gUnknown_845704C[] = {0x01, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457050[] = {0x02, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457054[] = {0x03, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457058[] = {0x04, 0xFF}; -ALIGNED(4) static const u8 gUnknown_845705C[] = {0x09, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457060[] = {0x0A, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457064[] = {0x0B, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457068[] = {0x15, 0xFF}; -ALIGNED(4) static const u8 gUnknown_845706C[] = {0x16, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457070[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xFF}; -ALIGNED(4) static const u8 gUnknown_845707C[] = {0x0C, 0xFF}; -ALIGNED(4) static const u8 gUnknown_8457080[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0x0D, 0xFF}; -ALIGNED(4) static const u8 gUnknown_845708C[] = {0x01, 0x02, 0x03, 0x04, 0x0A, 0xFF}; - -static const u8 *const gUnknown_8457094[] = { - gUnknown_845704C, - gUnknown_8457050, - gUnknown_8457054, - gUnknown_8457058, - gUnknown_845705C, - gUnknown_8457060, - gUnknown_8457064, - gUnknown_8457068, - gUnknown_845706C, - gUnknown_8457070, - gUnknown_845707C, - gUnknown_8457080, - gUnknown_845708C +ALIGNED(4) static const u8 gUnknown_845704C[] = { + ACTIVITY_BATTLE, + 0xFF }; -static const u8 gUnknown_84570C8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, 0x15, 0x16, 0xF7, 0x00, 0xAF, 0xF7, 0x01, 0xFF, 0x00}; +ALIGNED(4) static const u8 gUnknown_8457050[] = { + ACTIVITY_DBLBATTLE, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_8457054[] = { + ACTIVITY_MLTBATTLE, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_8457058[] = { + ACTIVITY_TRADE, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_845705C[] = { + ACTIVITY_PJUMP, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_8457060[] = { + ACTIVITY_BCRUSH, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_8457064[] = { + ACTIVITY_BPICK, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_8457068[] = { + ACTIVITY_WCARD2, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_845706C[] = { + ACTIVITY_WNEWS2, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_8457070[] = { + ACTIVITY_NONE | IN_UNION_ROOM, + ACTIVITY_BATTLE | IN_UNION_ROOM, + ACTIVITY_TRADE | IN_UNION_ROOM, + ACTIVITY_CHAT | IN_UNION_ROOM, + ACTIVITY_CARD | IN_UNION_ROOM, + ACTIVITY_ACCEPT | IN_UNION_ROOM, + ACTIVITY_DECLINE | IN_UNION_ROOM, + ACTIVITY_NPCTALK | IN_UNION_ROOM, + ACTIVITY_PLYRTALK | IN_UNION_ROOM, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_845707C[] = { + ACTIVITY_SEARCH, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_8457080[] = { + ACTIVITY_BATTLE, + ACTIVITY_DBLBATTLE, + ACTIVITY_MLTBATTLE, + ACTIVITY_TRADE, + ACTIVITY_PJUMP, + ACTIVITY_BCRUSH, + ACTIVITY_BPICK, + ACTIVITY_WCARD2, + ACTIVITY_WNEWS2, + ACTIVITY_SPINTRADE, + 0xFF +}; + +ALIGNED(4) static const u8 gUnknown_845708C[] = { + ACTIVITY_BATTLE, + ACTIVITY_DBLBATTLE, + ACTIVITY_MLTBATTLE, + ACTIVITY_TRADE, + ACTIVITY_BCRUSH, + 0xFF +}; + +static const u8 *const sAcceptedActivityIds[] = { + [LINK_GROUP_SINGLE_BATTLE] = gUnknown_845704C, + [LINK_GROUP_DOUBLE_BATTLE] = gUnknown_8457050, + [LINK_GROUP_MULTI_BATTLE] = gUnknown_8457054, + [LINK_GROUP_TRADE] = gUnknown_8457058, + [LINK_GROUP_POKEMON_JUMP] = gUnknown_845705C, + [LINK_GROUP_BERRY_CRUSH] = gUnknown_8457060, + [LINK_GROUP_BERRY_PICKING] = gUnknown_8457064, + [LINK_GROUP_WONDER_CARD] = gUnknown_8457068, + [LINK_GROUP_WONDER_NEWS] = gUnknown_845706C, + [9] = gUnknown_8457070, + [10] = gUnknown_845707C, + [11] = gUnknown_8457080, + [12] = gUnknown_845708C +}; + +static const u8 sLinkGroupToURoomActivity[] = { + [LINK_GROUP_SINGLE_BATTLE] = ACTIVITY_BATTLE, + [LINK_GROUP_DOUBLE_BATTLE] = ACTIVITY_DBLBATTLE, + [LINK_GROUP_MULTI_BATTLE] = ACTIVITY_MLTBATTLE, + [LINK_GROUP_TRADE] = ACTIVITY_TRADE, + [LINK_GROUP_POKEMON_JUMP] = ACTIVITY_PJUMP, + [LINK_GROUP_BERRY_CRUSH] = ACTIVITY_BCRUSH, + [LINK_GROUP_BERRY_PICKING] = ACTIVITY_BPICK, + [LINK_GROUP_WONDER_CARD] = ACTIVITY_WCARD2, + [LINK_GROUP_WONDER_NEWS] = ACTIVITY_WNEWS2 +}; + +static const u8 sUnref_84570D1[] = _("{DYNAMIC 00}·{DYNAMIC 01}"); #undef _8456CD8 // These are functions in Emerald but inlined in FireRed -#define IntlConvPartnerUname7(dest, arg1) ({ \ - StringCopy7(dest, (arg1).unk.playerName); \ - ConvertInternationalString(dest, (arg1).unk.gname.unk_00.unk_00_0); \ +#define IntlConvPartnerUname7(dest, arg1) ({ \ + StringCopy7(dest, (arg1).gname_uname.uname); \ + ConvertInternationalString(dest, (arg1).gname_uname.gname.unk_00.language); \ }) -#define IntlConvPartnerUname(dest, arg1) ({ \ - StringCopy(dest, (arg1).unk.playerName); \ - ConvertInternationalString(dest, (arg1).unk.gname.unk_00.unk_00_0); \ +#define IntlConvPartnerUname(dest, arg1) ({ \ + StringCopy(dest, (arg1).gname_uname.uname); \ + ConvertInternationalString(dest, (arg1).gname_uname.gname.unk_00.language); \ }) #define CopyTrainerCardData(dest, src, _version) ({ \ @@ -578,47 +664,56 @@ static const u8 gUnknown_84570C8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0A, 0x0B, _maxWidth - strWidth; \ }) -static void sub_811586C(u8 windowId, u8 arg1, u8 stringId) +// capacityCode is a 2-nybble code +// Bits 0-3: Capacity +// Bits 4-7: Min required (if 0, must have exactly Capacity players +static void PrintNumPlayersWaitingForMsg(u8 windowId, u8 capacityCode, u8 count) { FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); - switch (arg1 << 8) + switch (capacityCode << 8) { case 0x200: - sub_811A444(windowId, 2, gUnknown_845742C[0][stringId - 1], 0, 2, 0); + UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[0][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE); break; case 0x400: - sub_811A444(windowId, 2, gUnknown_845742C[1][stringId - 1], 0, 2, 0); + UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[1][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE); break; case 0x2500: - sub_811A444(windowId, 2, gUnknown_845742C[2][stringId - 1], 0, 2, 0); + UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[2][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE); break; case 0x3500: - sub_811A444(windowId, 2, gUnknown_845742C[3][stringId - 1], 0, 2, 0); + UR_AddTextPrinterParameterized(windowId, 2, gUnknown_845742C[3][count - 1], 0, 2, UR_COLOR_DKE_WHT_LTE); break; } CopyWindowToVram(windowId, 2); } -static void sub_8115924(u8 windowId) +static void PrintPlayerNameAndIdOnWindow(u8 windowId) { u8 text[12]; u8 text2[12]; - sub_811A444(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, 0); + UR_AddTextPrinterParameterized(windowId, 2, gSaveBlock2Ptr->playerName, 0, 2, UR_COLOR_DKE_WHT_LTE); StringCopy(text2, gUnknown_84571B4); ConvertIntToDecimalStringN(text, ReadAsU16(gSaveBlock2Ptr->playerTrainerId), STR_CONV_MODE_LEADING_ZEROS, 5); StringAppend(text2, text); - sub_811A444(windowId, 0, text2, 0, 0x10, 0); + UR_AddTextPrinterParameterized(windowId, 0, text2, 0, 0x10, UR_COLOR_DKE_WHT_LTE); } -static void sub_811599C(u8 *dst, u8 caseId) +static void StringExpandPlaceholders_AwaitingCommFromAnother(u8 *dst, u8 caseId) { switch (caseId) { - case 1 ... 4: - case 9 ... 11: - case 21 ... 22: + case ACTIVITY_BATTLE: + case ACTIVITY_DBLBATTLE: + case ACTIVITY_MLTBATTLE: + case ACTIVITY_TRADE: + case ACTIVITY_PJUMP: + case ACTIVITY_BCRUSH: + case ACTIVITY_BPICK: + case ACTIVITY_WCARD2: + case ACTIVITY_WNEWS2: // UB: argument *dst isn't used, instead it always prints to gStringVar4 StringExpandPlaceholders(gStringVar4, gUnknown_8457234); break; @@ -630,7 +725,7 @@ void TryBecomeLinkLeader(void) u8 taskId; struct UnkStruct_Leader * dataPtr; - taskId = CreateTask(sub_8115A68, 0); + taskId = CreateTask(Task_TryBecomeLinkLeader, 0); sUnionRoomMain.leader = dataPtr = (void*)(gTasks[taskId].data); sLeader = dataPtr; @@ -639,7 +734,7 @@ void TryBecomeLinkLeader(void) gSpecialVar_Result = 0; } -static void sub_8115A68(u8 taskId) +static void Task_TryBecomeLinkLeader(u8 taskId) { u32 id, val; struct UnkStruct_Leader * data = sUnionRoomMain.leader; @@ -647,63 +742,63 @@ static void sub_8115A68(u8 taskId) switch (data->state) { case 0: - gUnknown_203B058 = gUnknown_8456CD8[gSpecialVar_0x8004]; - gUnknown_203B059 = gUnknown_8456CD8[gSpecialVar_0x8004] >> 8; - SetHostRFUtgtGname(gUnknown_203B058, 0, 0); - sub_800B1F4(); + sPlayerCurrActivity = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004]; + sPlayerActivityGroupSize = sLinkGroupToActivityAndCapacity[gSpecialVar_0x8004] >> 8; + SetHostRFUtgtGname(sPlayerCurrActivity, 0, 0); + SetWirelessCommType1(); OpenLink(); - sub_80FBB8C(gUnknown_203B059 & 0xF); + InitializeRfuLinkManager_LinkLeader(sPlayerActivityGroupSize & 0xF); data->state = 3; break; case 3: data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); - data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); - sub_811A650(data->field_4->arr, 4); - sub_811A5E4(data->field_0->arr, 5); - LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName); + data->field_0 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); + data->field_8 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); + BlankUnkStruct_x1CArray(data->field_4->arr, 4); + BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_PARTY_SIZE); + LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname); data->field_0->arr[0].field_18 = 0; - data->field_0->arr[0].field_1A_0 = 1; + data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; data->field_0->arr[0].field_1A_1 = 0; data->field_0->arr[0].field_1B = 0; - data->field_17 = sub_811A054(data->field_4, 0xFF); - data->field_10 = AddWindow(&gUnknown_8456CD0); - data->listWindowId = AddWindow(&gUnknown_8456CFC); - data->field_11 = AddWindow(&gUnknown_8456D04); + data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); + data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel); + data->listWindowId = AddWindow(&sWindowTemplate_List_PossibleGroupMembers); + data->nPlayerModeWindowId = AddWindow(&sWindowTemplate_NumPlayerMode); - FillWindowPixelBuffer(data->field_10, PIXEL_FILL(2)); - sub_811A444(data->field_10, 0, gUnknown_845747C, 8, 2, 4); - PutWindowTilemap(data->field_10); - CopyWindowToVram(data->field_10, 2); + FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2)); + UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, gUnknown_845747C, 8, 2, UR_COLOR_WHT_DKE_LTE); + PutWindowTilemap(data->bButtonCancelWindowId); + CopyWindowToVram(data->bButtonCancelWindowId, 2); DrawStdWindowFrame(data->listWindowId, FALSE); - gMultiuseListMenuTemplate = gUnknown_8456D34; + gMultiuseListMenuTemplate = sListMenuTemplate_PossibleGroupMembers; gMultiuseListMenuTemplate.windowId = data->listWindowId; data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - DrawStdWindowFrame(data->field_11, FALSE); - PutWindowTilemap(data->field_11); - CopyWindowToVram(data->field_11, 2); + DrawStdWindowFrame(data->nPlayerModeWindowId, FALSE); + PutWindowTilemap(data->nPlayerModeWindowId); + CopyWindowToVram(data->nPlayerModeWindowId, 2); CopyBgTilemapBufferToVram(0); - data->field_13 = 1; + data->playerCount = 1; data->state = 4; break; case 4: - StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]); - if ((gUnknown_203B059 >> 4) != 0) + StringCopy(gStringVar1, sUnionRoomActivityStringPtrs[sPlayerCurrActivity]); + if ((sPlayerActivityGroupSize >> 4) != 0) { - if (data->field_13 > (gUnknown_203B059 >> 4) - 1 && (gUnknown_203B059 & 0xF) != 0) + if (data->playerCount > (sPlayerActivityGroupSize >> 4) - 1 && (sPlayerActivityGroupSize & 0xF) != 0) StringExpandPlaceholders(gStringVar4, gUnknown_8457264); else StringExpandPlaceholders(gStringVar4, gUnknown_8457234); } else { - sub_811599C(gStringVar4, gUnknown_203B058); + StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, sPlayerCurrActivity); } - sub_811586C(data->field_11, gUnknown_203B059, data->field_13); + PrintNumPlayersWaitingForMsg(data->nPlayerModeWindowId, sPlayerActivityGroupSize, data->playerCount); data->state = 5; break; case 5: @@ -711,24 +806,24 @@ static void sub_8115A68(u8 taskId) data->state = 6; break; case 6: - sub_8116444(data, 7, 10); + Leader_SetStateIfMemberListChanged(data, 7, 10); if (JOY_NEW(B_BUTTON)) { - if (data->field_13 == 1) + if (data->playerCount == 1) data->state = 23; - else if ((gUnknown_203B059 & 0xF0) != 0) + else if ((sPlayerActivityGroupSize & 0xF0) != 0) data->state = 30; else data->state = 19; } - if ((gUnknown_203B059 >> 4) != 0 - && data->field_13 > (gUnknown_203B059 >> 4) - 1 - && (gUnknown_203B059 & 0xF) != 0 + if ((sPlayerActivityGroupSize >> 4) != 0 + && data->playerCount > (sPlayerActivityGroupSize >> 4) - 1 + && (sPlayerActivityGroupSize & 0xF) != 0 && sub_80FC1CC() && JOY_NEW(START_BUTTON)) { data->state = 15; - sub_80F8F5C(); + LinkRfu_StopManagerAndFinalizeSlots(); } if (data->state == 6 && sub_80FA5D4()) { @@ -739,20 +834,21 @@ static void sub_8115A68(u8 taskId) if (!sub_80FA5D4()) { data->state = 6; - data->field_13 = sub_81165E8(data->field_0); + data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0); } break; case 10: - id = ((gUnknown_203B058 & 0xF) == 2) ? 1 : 0; + id = ((sPlayerCurrActivity & 0xF) == 2) ? 1 : 0; if (PrintOnTextbox(&data->textState, gUnknown_845767C[id])) { - data->field_13 = sub_81165E8(data->field_0); + data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0); RedrawListMenu(data->listTaskId); data->state = 4; } break; case 29: - id = ((gUnknown_203B059 & 0xF) == 2) ? 0 : 1; + // Other player cancelled. + id = ((sPlayerActivityGroupSize & 0xF) == 2) ? 0 : 1; if (PrintOnTextbox(&data->textState, gUnknown_845767C[id])) { data->state = 21; @@ -765,19 +861,19 @@ static void sub_8115A68(u8 taskId) } break; case 11: - switch (sub_811A14C(&data->textState, sub_80FA634(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName))) + switch (UnionRoomHandleYesNo(&data->textState, TrainerIdAndNameStillInPartnersList(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname))) { case 0: LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); data->field_19 = 5; - sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + SendByteToPartnerByIdAndName(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); data->state = 12; break; case 1: case -1: data->field_19 = 6; - sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + SendByteToPartnerByIdAndName(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); data->state = 12; break; case -3: @@ -786,29 +882,31 @@ static void sub_8115A68(u8 taskId) } break; case 12: - val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + val = WaitSendByteToPartnerByIdAndName(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); if (val == 1) { + // Xfer complete if (data->field_19 == 5) { - data->field_0->arr[data->field_13].field_1B = 0; + // Sent "OK" + data->field_0->arr[data->playerCount].field_1B = 0; RedrawListMenu(data->listTaskId); - data->field_13++; - if (data->field_13 == (gUnknown_203B059 & 0xF)) + data->playerCount++; + if (data->playerCount == (sPlayerActivityGroupSize & 0xF)) { - if ((gUnknown_203B059 & 0xF0) != 0 || data->field_13 == 4) + if ((sPlayerActivityGroupSize & 0xF0) != 0 || data->playerCount == 4) { data->state = 15; } else { - IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_13 - 1]); + IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->playerCount - 1]); StringExpandPlaceholders(gStringVar4, gUnknown_8457554); data->state = 13; } - sub_80F8F5C(); - sub_811586C(data->field_11, gUnknown_203B059, data->field_13); + LinkRfu_StopManagerAndFinalizeSlots(); + PrintNumPlayersWaitingForMsg(data->nPlayerModeWindowId, sPlayerActivityGroupSize, data->playerCount); } else { @@ -817,9 +915,10 @@ static void sub_8115A68(u8 taskId) } else { - sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId)); - data->field_0->arr[data->field_13].field_1A_0 = 0; - sub_81165E8(data->field_0); + // Sent "no" + RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId)); + data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + UnionRoomLeaderField0CompactionAndCount(data->field_0); RedrawListMenu(data->listTaskId); data->state = 4; } @@ -828,7 +927,8 @@ static void sub_8115A68(u8 taskId) } else if (val == 2) { - sub_80FB9E4(0, 0); + // Disconnect + RfuSetErrorStatus(0, 0); data->state = 4; } break; @@ -837,22 +937,25 @@ static void sub_8115A68(u8 taskId) data->state = 14; break; case 14: - if (++data->field_E > 120) + if (++data->delayTimerAfterOk > 120) data->state = 17; break; case 15: + // Are these members OK? if (PrintOnTextbox(&data->textState, gUnknown_8457514)) data->state = 16; break; case 16: - switch (sub_811A14C(&data->textState, FALSE)) + switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { case 0: + // Yes data->state = 17; break; case 1: case -1: - if ((gUnknown_203B059 & 0xF0) != 0) + // No + if ((sPlayerActivityGroupSize & 0xF0) != 0) data->state = 30; else data->state = 19; @@ -864,16 +967,16 @@ static void sub_8115A68(u8 taskId) data->state = 20; break; case 20: - switch (sub_811A14C(&data->textState, FALSE)) + switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { case 0: data->state = 23; break; case 1: case -1: - if ((gUnknown_203B059 & 0xF0) != 0) + if ((sPlayerActivityGroupSize & 0xF0) != 0) data->state = 15; - else if (data->field_13 == (gUnknown_203B059 & 0xF)) + else if (data->playerCount == (sPlayerActivityGroupSize & 0xF)) data->state = 15; else data->state = 4; @@ -881,13 +984,15 @@ static void sub_8115A68(u8 taskId) } break; case 17: - if (!sub_8116444(data, 7, 23)) + // Go to start + // Final membership check + if (!Leader_SetStateIfMemberListChanged(data, 7, 23)) data->state = 18; break; case 18: - if (sub_80F8F40()) + if (LmanAcceptSlotFlagIsNotZero()) { - if (sub_80F8F7C(FALSE)) + if (WaitRfuState(FALSE)) { data->state = 26; } @@ -899,14 +1004,16 @@ static void sub_8115A68(u8 taskId) } break; case 30: + // Mode with members will be canceled. if (PrintOnTextbox(&data->textState, gUnknown_8457610)) data->state = 23; break; case 21: case 23: + // An error occurred. Please start over from the beginning. DestroyWirelessStatusIndicatorSprite(); - sub_80F8DC0(); - sub_81161E4(data); + LinkRfu_Shutdown(); + Leader_DestroyResources(data); data->state++; break; case 24: @@ -920,7 +1027,7 @@ static void sub_8115A68(u8 taskId) gSpecialVar_Result = 8; break; case 26: - if (sub_80FBA00()) + if (RfuIsErrorStatus1or2()) { data->state = 29; } @@ -928,9 +1035,9 @@ static void sub_8115A68(u8 taskId) { if (gReceivedRemoteLinkPlayers != 0) { - sub_80FAFE0(1); - sub_8117990(); - sub_81161E4(data); + UpdateGameData_GroupLockedIn(TRUE); + CreateTask_RunScriptAndFadeToActivity(); + Leader_DestroyResources(data); DestroyTask(taskId); } } @@ -938,196 +1045,196 @@ static void sub_8115A68(u8 taskId) } } -static void sub_81161E4(struct UnkStruct_Leader * data) +static void Leader_DestroyResources(struct UnkStruct_Leader * data) { - ClearWindowTilemap(data->field_11); - ClearStdWindowAndFrame(data->field_11, FALSE); + ClearWindowTilemap(data->nPlayerModeWindowId); + ClearStdWindowAndFrame(data->nPlayerModeWindowId, FALSE); DestroyListMenuTask(data->listTaskId, 0, 0); - ClearWindowTilemap(data->field_10); + ClearWindowTilemap(data->bButtonCancelWindowId); ClearStdWindowAndFrame(data->listWindowId, FALSE); CopyBgTilemapBufferToVram(0); - RemoveWindow(data->field_11); + RemoveWindow(data->nPlayerModeWindowId); RemoveWindow(data->listWindowId); - RemoveWindow(data->field_10); - DestroyTask(data->field_17); + RemoveWindow(data->bButtonCancelWindowId); + DestroyTask(data->listenTaskId); Free(data->field_8); Free(data->field_0); Free(data->field_4); } -static void sub_8116244(u8 *dst, u8 caseId) +static void Leader_GetAcceptNewMemberPrompt(u8 *dst, u8 activity) { - switch (caseId) + switch (activity) { - case 1: - case 2: - case 4: + case ACTIVITY_BATTLE: + case ACTIVITY_DBLBATTLE: + case ACTIVITY_TRADE: StringExpandPlaceholders(dst, gUnknown_84574A0); break; - case 21: - case 22: + case ACTIVITY_WCARD2: + case ACTIVITY_WNEWS2: StringExpandPlaceholders(dst, gUnknown_84574C4); break; - case 3: - case 9: - case 10: - case 11: + case ACTIVITY_MLTBATTLE: + case ACTIVITY_PJUMP: + case ACTIVITY_BCRUSH: + case ACTIVITY_BPICK: StringExpandPlaceholders(dst, gUnknown_84574EC); break; } } -static void sub_81162E0(u8 *dst, u8 caseId) +static void GetYouDeclinedTheOfferMessage(u8 *dst, u8 activity) { - switch (caseId) + switch (activity) { - case 65: - case 68: + case ACTIVITY_BATTLE | IN_UNION_ROOM: + case ACTIVITY_TRADE | IN_UNION_ROOM: StringExpandPlaceholders(dst, gUnknown_8457E28); break; - case 69: - case 72: + case ACTIVITY_CHAT | IN_UNION_ROOM: + case ACTIVITY_CARD | IN_UNION_ROOM: StringExpandPlaceholders(dst, gUnknown_8457E44); break; } } -static void sub_811631C(u8 *dst, u8 caseId) +static void GetYouAskedToJoinGroupPleaseWaitMessage(u8 *dst, u8 activity) { - switch (caseId) + switch (activity) { - case 1: - case 2: - case 4: - case 21: - case 22: + case ACTIVITY_BATTLE: + case ACTIVITY_DBLBATTLE: + case ACTIVITY_TRADE: + case ACTIVITY_WCARD2: + case ACTIVITY_WNEWS2: StringExpandPlaceholders(dst, gUnknown_8459238); break; - case 3: - case 9: - case 10: - case 11: + case ACTIVITY_MLTBATTLE: + case ACTIVITY_PJUMP: + case ACTIVITY_BCRUSH: + case ACTIVITY_BPICK: StringExpandPlaceholders(dst, gUnknown_8459250); break; } } -static void sub_81163B0(u8 *dst, u8 caseId) +static void GetGroupLeaderSentAnOKMessage(u8 *dst, u8 caseId) { switch (caseId) { - case 1: - case 2: - case 4: - case 21: - case 22: + case ACTIVITY_BATTLE: + case ACTIVITY_DBLBATTLE: + case ACTIVITY_TRADE: + case ACTIVITY_WCARD2: + case ACTIVITY_WNEWS2: StringExpandPlaceholders(dst, gUnknown_84576AC); break; - case 3: - case 9: - case 10: - case 11: + case ACTIVITY_MLTBATTLE: + case ACTIVITY_PJUMP: + case ACTIVITY_BCRUSH: + case ACTIVITY_BPICK: StringExpandPlaceholders(dst, gUnknown_84576C4); break; } } -static bool8 sub_8116444(struct UnkStruct_Leader * data, u32 arg1, u32 arg2) +static bool8 Leader_SetStateIfMemberListChanged(struct UnkStruct_Leader * data, u32 state1, u32 state2) { - switch (sub_8116524(data->field_0)) + switch (LeaderUpdateGroupMembership(data->field_0)) { - case 1: + case UNION_ROOM_SPAWN_IN: PlaySE(SE_PC_LOGIN); RedrawListMenu(data->listTaskId); - IntlConvPartnerUname7(gStringVar2, data->field_0->arr[data->field_13]); - sub_8116244(gStringVar4, gUnknown_203B058); - data->state = arg1; + IntlConvPartnerUname7(gStringVar2, data->field_0->arr[data->playerCount]); + Leader_GetAcceptNewMemberPrompt(gStringVar4, sPlayerCurrActivity); + data->state = state1; break; - case 2: - sub_80FB9E4(0, 0); + case UNION_ROOM_SPAWN_OUT: + RfuSetErrorStatus(0, 0); RedrawListMenu(data->listTaskId); - data->state = arg2; + data->state = state2; return TRUE; } return FALSE; } -static void sub_81164C8(u8 windowId, s32 itemId, u8 y) +static void ItemPrintFunc_PossibleGroupMembers(u8 windowId, s32 itemId, u8 y) { struct UnkStruct_Leader * data = sUnionRoomMain.leader; u8 var = 0; - switch (data->field_0->arr[itemId].field_1A_0) + switch (data->field_0->arr[itemId].groupScheduledAnim) { - case 1: + case UNION_ROOM_SPAWN_IN: if (data->field_0->arr[itemId].field_1B != 0) - var = 2; + var = UR_COLOR_GRN_WHT_LTG; break; - case 2: - var = 1; + case UNION_ROOM_SPAWN_OUT: + var = UR_COLOR_RED_WHT_LTR; break; } - sub_811A910(windowId, 0, y, &data->field_0->arr[itemId], var, itemId); + PrintGroupMemberCandidateOnWindowWithColor(windowId, 0, y, &data->field_0->arr[itemId], var, itemId); } -static u8 sub_8116524(struct UnkStruct_Main0 * arg0) +static u8 LeaderUpdateGroupMembership(struct UnkStruct_Main0 * arg0) { struct UnkStruct_Leader * data = sUnionRoomMain.leader; - u8 ret = 0; + u8 ret = UNION_ROOM_SPAWN_NONE; u8 i; s32 id; - for (i = 1; i < 5; i++) + for (i = 1; i < UROOM_MAX_PARTY_SIZE; i++) { - u16 var = data->field_0->arr[i].field_1A_0; - if (var == 1) + u16 var = data->field_0->arr[i].groupScheduledAnim; + if (var == UNION_ROOM_SPAWN_IN) { - id = sub_811A748(&data->field_0->arr[i], data->field_4->arr); + id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr); if (id != 0xFF) { - data->field_0->arr[i].unk = data->field_4->arr[id].unk0; - data->field_0->arr[i].field_18 = var; + data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname; + data->field_0->arr[i].field_18 = 1; } else { - data->field_0->arr[i].field_1A_0 = 2; - ret = 2; + data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; + ret = UNION_ROOM_SPAWN_OUT; } } } - for (id = 0; id < 4; id++) - sub_811A798(data->field_0->arr, &data->field_4->arr[id], 5); + for (id = 0; id < RFU_CHILD_MAX; id++) + Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], UROOM_MAX_PARTY_SIZE); - if (ret != 2) + if (ret != UNION_ROOM_SPAWN_OUT) { - for (id = 0; id < 5; id++) + for (id = 0; id < UROOM_MAX_PARTY_SIZE; id++) { if (data->field_0->arr[id].field_1B != 0) - ret = 1; + ret = UNION_ROOM_SPAWN_IN; } } return ret; } -static u8 sub_81165E8(struct UnkStruct_Main0 * arg0) +static u8 UnionRoomLeaderField0CompactionAndCount(struct UnkStruct_Main0 * arg0) { struct UnkStruct_Leader * data = sUnionRoomMain.leader; u8 copiedCount; s32 i; u8 ret; - for (i = 0; i < 5; i++) + for (i = 0; i < UROOM_MAX_PARTY_SIZE; i++) data->field_8->arr[i] = data->field_0->arr[i]; copiedCount = 0; - for (i = 0; i < 5; i++) + for (i = 0; i < UROOM_MAX_PARTY_SIZE; i++) { - if (data->field_8->arr[i].field_1A_0 == 1) + if (data->field_8->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { data->field_0->arr[copiedCount] = data->field_8->arr[i]; copiedCount++; @@ -1135,18 +1242,18 @@ static u8 sub_81165E8(struct UnkStruct_Main0 * arg0) } ret = copiedCount; - for (; copiedCount < 5; copiedCount++) + for (; copiedCount < UROOM_MAX_PARTY_SIZE; copiedCount++) { - data->field_0->arr[copiedCount].unk = gUnknown_8457034; + data->field_0->arr[copiedCount].gname_uname = sUnionGnameUnamePair_Dummy; data->field_0->arr[copiedCount].field_18 = 0; - data->field_0->arr[copiedCount].field_1A_0 = 0; - data->field_0->arr[copiedCount].field_1A_1 = 0; + data->field_0->arr[copiedCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + data->field_0->arr[copiedCount].field_1A_1 = FALSE; data->field_0->arr[copiedCount].field_1B = 0; } - for (i = 0; i < 5; i++) + for (i = 0; i < UROOM_MAX_PARTY_SIZE; i++) { - if (data->field_0->arr[i].field_1A_0 != 1) + if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_IN) continue; if (data->field_0->arr[i].field_1B != 0x40) continue; @@ -1163,7 +1270,7 @@ void TryJoinLinkGroup(void) u8 taskId; struct UnkStruct_Group * dataPtr; - taskId = CreateTask(sub_8116738, 0); + taskId = CreateTask(Task_TryJoinLinkGroup, 0); sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data); sGroup = dataPtr; @@ -1172,7 +1279,7 @@ void TryJoinLinkGroup(void) gSpecialVar_Result = 0; } -static void sub_8116738(u8 taskId) +static void Task_TryJoinLinkGroup(u8 taskId) { s32 id; struct UnkStruct_Group * data = sUnionRoomMain.group; @@ -1180,11 +1287,11 @@ static void sub_8116738(u8 taskId) switch (data->state) { case 0: - SetHostRFUtgtGname(gUnknown_84570C8[gSpecialVar_0x8004], 0, 0); - gUnknown_203B058 = gUnknown_84570C8[gSpecialVar_0x8004]; - sub_800B1F4(); + SetHostRFUtgtGname(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, 0); + sPlayerCurrActivity = sLinkGroupToURoomActivity[gSpecialVar_0x8004]; + SetWirelessCommType1(); OpenLink(); - sub_80FBBD8(); + InitializeRfuLinkManager_JoinGroup(); data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); data->state = 1; @@ -1194,34 +1301,34 @@ static void sub_8116738(u8 taskId) data->state = 2; break; case 2: - sub_811A650(data->field_4->arr, 4); - sub_811A5E4(data->field_0->arr, 16); - data->field_11 = sub_811A054(data->field_4, gSpecialVar_0x8004); - data->field_C = AddWindow(&gUnknown_8456CD0); - data->listWindowId = AddWindow(&gUnknown_8456D4C); - data->field_D = AddWindow(&gUnknown_8456D54); - - FillWindowPixelBuffer(data->field_C, PIXEL_FILL(2)); - sub_811A444(data->field_C, 0, gUnknown_8458FC8, 8, 2, 4); - PutWindowTilemap(data->field_C); - CopyWindowToVram(data->field_C, 2); + BlankUnkStruct_x1CArray(data->field_4->arr, 4); + BlankUnkStruct_x20Array(data->field_0->arr, 16); + data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, gSpecialVar_0x8004); + data->bButtonCancelWindowId = AddWindow(&sWindowTemplate_BButtonCancel); + data->listWindowId = AddWindow(&sWindowTemplate_MysteryGiftList); + data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_MysteryGiftPlayerNameAndId); + + FillWindowPixelBuffer(data->bButtonCancelWindowId, PIXEL_FILL(2)); + UR_AddTextPrinterParameterized(data->bButtonCancelWindowId, 0, gUnknown_8458FC8, 8, 2, UR_COLOR_WHT_DKE_LTE); + PutWindowTilemap(data->bButtonCancelWindowId); + CopyWindowToVram(data->bButtonCancelWindowId, 2); DrawStdWindowFrame(data->listWindowId, FALSE); - gMultiuseListMenuTemplate = gUnknown_8456DDC; + gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups; gMultiuseListMenuTemplate.windowId = data->listWindowId; data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - DrawStdWindowFrame(data->field_D, FALSE); - PutWindowTilemap(data->field_D); - sub_8115924(data->field_D); - CopyWindowToVram(data->field_D, 2); + DrawStdWindowFrame(data->playerNameAndIdWindowId, FALSE); + PutWindowTilemap(data->playerNameAndIdWindowId); + PrintPlayerNameAndIdOnWindow(data->playerNameAndIdWindowId); + CopyWindowToVram(data->playerNameAndIdWindowId, 2); CopyBgTilemapBufferToVram(0); - data->field_F = 0; + data->leaderId = 0; data->state = 3; break; case 3: - id = sub_8116FE4(); + id = GetNewLeaderCandidate(); switch (id) { case 1: @@ -1234,19 +1341,20 @@ static void sub_8116738(u8 taskId) { // this unused variable along with the assignment is needed to match u32 unusedVar; - unusedVar = data->field_0->arr[id].unk.gname.unk_0a_0; + unusedVar = data->field_0->arr[id].gname_uname.gname.activity; - if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7) + if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started) { - u32 var = sub_8116D10(data, id); + u32 var = IsTryingToTradeWithHoennTooSoon(data, id); if (var == 0) { - sub_8116D60(data, id); + AskToJoinRfuGroup(data, id); data->state = 5; PlaySE(SE_PN_ON); } else { + // Postgame flags not both set StringCopy(gStringVar4, gUnknown_8457608[var - 1]); data->state = 18; PlaySE(SE_PN_ON); @@ -1268,30 +1376,38 @@ static void sub_8116738(u8 taskId) } break; case 5: - sub_811631C(gStringVar4, gUnknown_203B058); + GetYouAskedToJoinGroupPleaseWaitMessage(gStringVar4, sPlayerCurrActivity); if (PrintOnTextbox(&data->textState, gStringVar4)) { - IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_F]); + IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->leaderId]); data->state = 6; } break; case 6: if (gReceivedRemoteLinkPlayers != 0) { - gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0; - sub_80FB9E4(0, 0); - switch (gUnknown_203B058) + sPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; + RfuSetErrorStatus(0, 0); + switch (sPlayerCurrActivity) { - case 1 ... 5: - case 9 ... 11: - case 13 ... 14: - case 21 ... 22: + case ACTIVITY_BATTLE: + case ACTIVITY_DBLBATTLE: + case ACTIVITY_MLTBATTLE: + case ACTIVITY_TRADE: + case ACTIVITY_CHAT: + case ACTIVITY_PJUMP: + case ACTIVITY_BCRUSH: + case ACTIVITY_BPICK: + case ACTIVITY_SPINTRADE: + case ACTIVITY_ITEMTRADE: + case ACTIVITY_WCARD2: + case ACTIVITY_WNEWS2: data->state = 20; break; } } - switch (sub_80FB9F4()) + switch (RfuGetErrorStatus()) { case 1: data->state = 12; @@ -1302,31 +1418,32 @@ static void sub_8116738(u8 taskId) data->state = 14; break; case 5: - sub_81163B0(gStringVar4, gUnknown_203B058); + GetGroupLeaderSentAnOKMessage(gStringVar4, sPlayerCurrActivity); if (PrintOnTextbox(&data->textState, gStringVar4)) { - sub_80FB9E4(7, 0); - StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]); + RfuSetErrorStatus(7, 0); + StringCopy(gStringVar1, sUnionRoomActivityStringPtrs[sPlayerCurrActivity]); StringExpandPlaceholders(gStringVar4, gUnknown_8457700); } break; case 7: - if (data->field_15 > 0xF0) + // Wait 4 seconds + if (data->delayBeforePrint > 240) { if (PrintOnTextbox(&data->textState, gStringVar4)) { - sub_80FB9E4(12, 0); - data->field_15 = 0; + RfuSetErrorStatus(12, 0); + data->delayBeforePrint = 0; } } else { - data->field_15++; + data->delayBeforePrint++; } break; } - if (!sub_80FB9F4() && JOY_NEW(B_BUTTON)) + if (!RfuGetErrorStatus() && JOY_NEW(B_BUTTON)) data->state = 7; break; case 7: @@ -1334,10 +1451,10 @@ static void sub_8116738(u8 taskId) data->state = 8; break; case 8: - switch (sub_811A14C(&data->textState, sub_80FB9F4())) + switch (UnionRoomHandleYesNo(&data->textState, RfuGetErrorStatus())) { case 0: - sub_80FA6BC(); + LinkRfuNIsend8(); data->state = 9; RedrawListMenu(data->listTaskId); break; @@ -1353,7 +1470,7 @@ static void sub_8116738(u8 taskId) } break; case 9: - if (sub_80FB9F4()) + if (RfuGetErrorStatus()) data->state = 6; break; case 10: @@ -1361,23 +1478,23 @@ static void sub_8116738(u8 taskId) case 14: case 18: case 20: - ClearWindowTilemap(data->field_D); - ClearStdWindowAndFrame(data->field_D, FALSE); + ClearWindowTilemap(data->playerNameAndIdWindowId); + ClearStdWindowAndFrame(data->playerNameAndIdWindowId, FALSE); DestroyListMenuTask(data->listTaskId, 0, 0); - ClearWindowTilemap(data->field_C); + ClearWindowTilemap(data->bButtonCancelWindowId); ClearStdWindowAndFrame(data->listWindowId, FALSE); CopyBgTilemapBufferToVram(0); - RemoveWindow(data->field_D); + RemoveWindow(data->playerNameAndIdWindowId); RemoveWindow(data->listWindowId); - RemoveWindow(data->field_C); - DestroyTask(data->field_11); + RemoveWindow(data->bButtonCancelWindowId); + DestroyTask(data->listenTaskId); Free(data->field_0); Free(data->field_4); data->state++; break; case 13: DestroyWirelessStatusIndicatorSprite(); - if (PrintOnTextbox(&data->textState, gUnknown_8457754[sub_80FB9F4()])) + if (PrintOnTextbox(&data->textState, gUnknown_8457754[RfuGetErrorStatus()])) { gSpecialVar_Result = 6; data->state = 23; @@ -1390,7 +1507,7 @@ static void sub_8116738(u8 taskId) break; case 15: DestroyWirelessStatusIndicatorSprite(); - if (PrintOnTextbox(&data->textState, gUnknown_8457754[sub_80FB9F4()])) + if (PrintOnTextbox(&data->textState, gUnknown_8457754[RfuGetErrorStatus()])) { gSpecialVar_Result = 8; data->state = 23; @@ -1405,25 +1522,25 @@ static void sub_8116738(u8 taskId) break; case 23: DestroyTask(taskId); - sub_811A41C(); - sub_80F8DC0(); + JoinGroup_BlankBg0AndEnableScriptContexts(); + LinkRfu_Shutdown(); break; case 21: - sub_8117990(); + CreateTask_RunScriptAndFadeToActivity(); DestroyTask(taskId); break; } } -static u32 sub_8116D10(struct UnkStruct_Group * arg0, s32 id) +static u32 IsTryingToTradeWithHoennTooSoon(struct UnkStruct_Group * arg0, s32 id) { struct UnkStruct_x20 * structPtr = &arg0->field_0->arr[id]; - if (gUnknown_203B058 == 4 && structPtr->unk.gname.unk_00.unk_01_2 != VERSION_FIRE_RED && structPtr->unk.gname.unk_00.unk_01_2 != VERSION_LEAF_GREEN) + if (sPlayerCurrActivity == ACTIVITY_TRADE && structPtr->gname_uname.gname.unk_00.version != VERSION_FIRE_RED && structPtr->gname_uname.gname.unk_00.version != VERSION_LEAF_GREEN) { if (!(gSaveBlock2Ptr->specialSaveWarpFlags & CHAMPION_SAVEWARP)) return 1; - else if (structPtr->unk.gname.unk_00.isChampion) + else if (structPtr->gname_uname.gname.unk_00.isChampion) return 0; } else @@ -1434,23 +1551,23 @@ static u32 sub_8116D10(struct UnkStruct_Group * arg0, s32 id) return 2; } -static void sub_8116D60(struct UnkStruct_Group * data, s32 id) +static void AskToJoinRfuGroup(struct UnkStruct_Group * data, s32 id) { - data->field_F = id; + data->leaderId = id; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); - IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_F]); - sub_80FB008(gUnknown_84570C8[gSpecialVar_0x8004], 0, 1); - sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.gname.unk_00.playerTrainerId)); + IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->leaderId]); + UpdateGameDataWithActivitySpriteGendersFlag(sLinkGroupToURoomActivity[gSpecialVar_0x8004], 0, TRUE); + CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId)); } -u8 sub_8116DE0(void) +u8 CreateTask_ListenToWireless(void) { u8 taskId; struct UnkStruct_Group * dataPtr; - taskId = CreateTask(sub_8116E1C, 0); + taskId = CreateTask(Task_ListenToWireless, 0); sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data); dataPtr->state = 0; @@ -1461,7 +1578,7 @@ u8 sub_8116DE0(void) return taskId; } -static void sub_8116E1C(u8 taskId) +static void Task_ListenToWireless(u8 taskId) { struct UnkStruct_Group * data = sUnionRoomMain.group; @@ -1469,53 +1586,53 @@ static void sub_8116E1C(u8 taskId) { case 0: SetHostRFUtgtGname(0, 0, 0); - sub_800B1F4(); + SetWirelessCommType1(); OpenLink(); - sub_80FBBD8(); + InitializeRfuLinkManager_JoinGroup(); sub_80FB128(TRUE); data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); data->state = 2; break; case 2: - sub_811A650(data->field_4->arr, 4); - sub_811A5E4(data->field_0->arr, 16); - data->field_11 = sub_811A054(data->field_4, 0xFF); - data->field_F = 0; + BlankUnkStruct_x1CArray(data->field_4->arr, 4); + BlankUnkStruct_x20Array(data->field_0->arr, 16); + data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); + data->leaderId = 0; data->state = 3; break; case 3: - if (sub_8116FE4() == 1) + if (GetNewLeaderCandidate() == 1) PlaySE(SE_PC_LOGIN); if (gTasks[taskId].data[15] == 0xFF) data->state = 10; break; case 10: - DestroyTask(data->field_11); + DestroyTask(data->listenTaskId); Free(data->field_0); Free(data->field_4); - sub_80F8DC0(); + LinkRfu_Shutdown(); data->state++; break; case 11: - sub_80F8DC0(); + LinkRfu_Shutdown(); DestroyTask(taskId); break; } } -static bool32 sub_8116F28(u32 arg0, u32 id) +static bool32 IsPartnerActivityAcceptable(u32 activity, u32 group) { - if (id == 0xFF) + if (group == 0xFF) return TRUE; - if (id <= NELEMS(gUnknown_8457094)) // UB: <= may access data outside the array + if (group <= NELEMS(sAcceptedActivityIds)) // UB: <= may access data outside the array { - const u8 *bytes = gUnknown_8457094[id]; + const u8 *bytes = sAcceptedActivityIds[group]; while ((*(bytes) != 0xFF)) { - if ((*bytes) == arg0) + if ((*bytes) == activity) return TRUE; bytes++; } @@ -1524,30 +1641,30 @@ static bool32 sub_8116F28(u32 arg0, u32 id) return FALSE; } -static u8 sub_8116F5C(struct UnkStruct_Group * data, u32 id) +static u8 URoomGroupListGetTextColor(struct UnkStruct_Group * data, u32 id) { - if (data->field_0->arr[id].field_1A_0 == 1) + if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (data->field_0->arr[id].unk.gname.unk_0a_7) - return 3; - else if (data->field_0->arr[id].field_1A_1 != 0) - return 1; + if (data->field_0->arr[id].gname_uname.gname.started) + return UR_COLOR_WHT_WHT_LTE; + else if (data->field_0->arr[id].field_1A_1) + return UR_COLOR_RED_WHT_LTR; else if (data->field_0->arr[id].field_1B != 0) - return 2; + return UR_COLOR_GRN_WHT_LTG; } - return 0; + return UR_COLOR_DKE_WHT_LTE; } -static void sub_8116F94(u8 windowId, s32 itemId, u8 y) +static void ListMenuItemPrintFunc_UnionRoomGroups(u8 windowId, s32 itemId, u8 y) { struct UnkStruct_Group * data = sUnionRoomMain.group; - u8 var = sub_8116F5C(data, itemId); + u8 color_idx = URoomGroupListGetTextColor(data, itemId); - sub_811A81C(windowId, 8, y, &data->field_0->arr[itemId], var, itemId); + PrintUnionRoomGroupOnWindow(windowId, 8, y, &data->field_0->arr[itemId], color_idx, itemId); } -static u8 sub_8116FE4(void) +static u8 GetNewLeaderCandidate(void) { struct UnkStruct_Group * data = sUnionRoomMain.group; u8 ret = 0; @@ -1556,17 +1673,17 @@ static u8 sub_8116FE4(void) for (i = 0; i < 16; i++) { - if (data->field_0->arr[i].field_1A_0 != 0) + if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) { - id = sub_811A748(&data->field_0->arr[i], data->field_4->arr); + id = Findx20Inx1CArray(&data->field_0->arr[i], data->field_4->arr); if (id != 0xFF) { - if (data->field_0->arr[i].field_1A_0 == 1) + if (data->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (sub_811A6DC(&data->field_0->arr[i].unk, &data->field_4->arr[id].unk0)) + if (AreUnionRoomPlayerGnamesDifferent(&data->field_0->arr[i].gname_uname, &data->field_4->arr[id].gname_uname)) { - data->field_0->arr[i].unk = data->field_4->arr[id].unk0; - data->field_0->arr[i].field_1B = 0x40; + data->field_0->arr[i].gname_uname = data->field_4->arr[id].gname_uname; + data->field_0->arr[i].field_1B = 64; ret = 1; } else @@ -1581,8 +1698,8 @@ static u8 sub_8116FE4(void) } else { - data->field_0->arr[i].field_1A_0 = 1; - data->field_0->arr[i].field_1B = 0x40; + data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->field_0->arr[i].field_1B = 64; ret = 1; } @@ -1590,12 +1707,12 @@ static u8 sub_8116FE4(void) } else { - if (data->field_0->arr[i].field_1A_0 != 2) + if (data->field_0->arr[i].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) { data->field_0->arr[i].field_18++; if (data->field_0->arr[i].field_18 >= 300) { - data->field_0->arr[i].field_1A_0 = 2; + data->field_0->arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; ret = 2; } } @@ -1603,29 +1720,29 @@ static u8 sub_8116FE4(void) } } - for (id = 0; id < 4; id++) + for (id = 0; id < RFU_CHILD_MAX; id++) { - if (sub_811A798(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF) + if (Appendx1Ctox20(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF) ret = 1; } return ret; } -static void sub_8117100(u8 taskId) +static void Task_CallCB2ReturnFromLinkTrade(u8 taskId) { CB2_ReturnFromLinkTrade(); DestroyTask(taskId); } -u8 sub_8117118(void) +u8 UnionRoom_CreateTask_CallBC2ReturnFromLinkTrade(void) { - u8 taskId = CreateTask(sub_8117100, 0); + u8 taskId = CreateTask(Task_CallCB2ReturnFromLinkTrade, 0); return taskId; } -static void sub_8117130(u8 taskId) +static void Task_StartUnionRoomTrade(u8 taskId) { u32 monId = GetPartyPositionOfRegisteredMon(&sUnionRoomTrade, GetMultiplayerId()); @@ -1665,7 +1782,7 @@ static void sub_8117130(u8 taskId) } } -static void sub_8117280(u8 taskId) +static void Task_ExchangeCards(u8 taskId) { switch (gTasks[taskId].data[0]) { @@ -1689,11 +1806,11 @@ static void sub_8117280(u8 taskId) if (GetLinkPlayerCount() == 2) { recvBuff = gBlockRecvBuffer[GetMultiplayerId() ^ 1]; - sub_81446D0(recvBuff[48]); + MEventHandleReceivedWonderCard(recvBuff[sizeof(struct TrainerCard) / 2]); } else { - sub_81446C4(); + ResetReceivedWonderCardFlag(); } ResetBlockReceivedFlags(); @@ -1703,16 +1820,16 @@ static void sub_8117280(u8 taskId) } } -static void sub_8117354(void) +static void CB2_ShowCard(void) { switch (gMain.state) { case 0: - CreateTask(sub_8117280, 5); + CreateTask(Task_ExchangeCards, 5); gMain.state++; break; case 1: - if (!FuncIsActiveTask(sub_8117280)) + if (!FuncIsActiveTask(Task_ExchangeCards)) ShowTrainerCardInLink(GetMultiplayerId() ^ 1, CB2_ReturnToField); break; } @@ -1723,7 +1840,7 @@ static void sub_8117354(void) BuildOamBuffer(); } -void sub_81173C0(u16 battleFlags) +void StartUnionRoomBattle(u16 battleFlags) { HealPlayerParty(); SavePlayerParty(); @@ -1736,7 +1853,7 @@ void sub_81173C0(u16 battleFlags) PlayBattleBGM(); } -static void sub_8117440(u16 linkService, u16 x, u16 y) +static void SetCableClubStateAndWarpCurrentMap(u16 linkService, u16 x, u16 y) { VarSet(VAR_CABLE_CLUB_STATE, linkService); SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, x, y); @@ -1744,7 +1861,7 @@ static void sub_8117440(u16 linkService, u16 x, u16 y) WarpIntoMap(); } -static void sub_81174B4(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) +static void SetCableClubStateAndWarpToNewMap(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) { gSpecialVar_0x8004 = linkService; VarSet(VAR_CABLE_CLUB_STATE, linkService); @@ -1755,17 +1872,17 @@ static void sub_81174B4(s8 mapGroup, s8 mapNum, s32 x, s32 y, u16 linkService) WarpIntoMap(); } -static void sub_8117534(void) +static void CB2_TransitionToCableClub(void) { switch (gMain.state) { case 0: - CreateTask(sub_8117280, 5); + CreateTask(Task_ExchangeCards, 5); gMain.state++; break; case 1: - if (!FuncIsActiveTask(sub_8117280)) - SetMainCallback2(sub_8056788); + if (!FuncIsActiveTask(Task_ExchangeCards)) + SetMainCallback2(CB2_ReturnToFieldCableClub); break; } @@ -1775,101 +1892,106 @@ static void sub_8117534(void) BuildOamBuffer(); } -static void sub_8117594(void *arg0, bool32 arg1) +static void CreateTrainerCardInBuffer(void *dest, bool32 setWonderCard) { - TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard * )arg0); - if (arg1) - *((u16 *)(arg0 + sizeof(struct TrainerCard))) = GetWonderCardFlagId(); + TrainerCard_GenerateCardForLinkPlayer((struct TrainerCard * )dest); + if (setWonderCard) + *((u16 *)(dest + sizeof(struct TrainerCard))) = GetWonderCardFlagId(); else - *((u16 *)(arg0 + sizeof(struct TrainerCard))) = 0; + *((u16 *)(dest + sizeof(struct TrainerCard))) = 0; } -static void sub_81175BC(u8 taskId) +static void Task_StartActivity(u8 taskId) { - sub_81446C4(); - switch (gUnknown_203B058) + ResetReceivedWonderCardFlag(); + switch (sPlayerCurrActivity) { - case 1 ... 4: - case 9 ... 11: - case 13: - case 14: + case ACTIVITY_BATTLE: + case ACTIVITY_DBLBATTLE: + case ACTIVITY_MLTBATTLE: + case ACTIVITY_TRADE: + case ACTIVITY_PJUMP: + case ACTIVITY_BCRUSH: + case ACTIVITY_BPICK: + case ACTIVITY_SPINTRADE: + case ACTIVITY_ITEMTRADE: RecordMixTrainerNames(); break; } - switch (gUnknown_203B058) + switch (sPlayerCurrActivity) { - case 65: - case 81: + case ACTIVITY_BATTLE | IN_UNION_ROOM: + case ACTIVITY_ACCEPT | IN_UNION_ROOM: CleanupOverworldWindowsAndTilemaps(); - gMain.savedCallback = sub_811C1C8; + gMain.savedCallback = CB2_UnionRoomBattle; InitChooseHalfPartyForBattle(2); break; - case 1: + case ACTIVITY_BATTLE: CleanupOverworldWindowsAndTilemaps(); - sub_8117594(gBlockSendBuffer, TRUE); + CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); HealPlayerParty(); SavePlayerParty(); LoadPlayerBag(); - sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE); - SetMainCallback2(sub_8117534); + SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_SINGLE_BATTLE); + SetMainCallback2(CB2_TransitionToCableClub); break; - case 2: + case ACTIVITY_DBLBATTLE: CleanupOverworldWindowsAndTilemaps(); HealPlayerParty(); SavePlayerParty(); LoadPlayerBag(); - sub_8117594(gBlockSendBuffer, TRUE); - sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE); - SetMainCallback2(sub_8117534); + CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); + SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_2P), MAP_NUM(BATTLE_COLOSSEUM_2P), 6, 8, USING_DOUBLE_BATTLE); + SetMainCallback2(CB2_TransitionToCableClub); break; - case 3: + case ACTIVITY_MLTBATTLE: CleanupOverworldWindowsAndTilemaps(); HealPlayerParty(); SavePlayerParty(); LoadPlayerBag(); - sub_8117594(gBlockSendBuffer, TRUE); - sub_81174B4(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE); - SetMainCallback2(sub_8117534); + CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); + SetCableClubStateAndWarpToNewMap(MAP_GROUP(BATTLE_COLOSSEUM_4P), MAP_NUM(BATTLE_COLOSSEUM_4P), 5, 8, USING_MULTI_BATTLE); + SetMainCallback2(CB2_TransitionToCableClub); break; - case 4: - sub_8117594(gBlockSendBuffer, TRUE); + case ACTIVITY_TRADE: + CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); CleanupOverworldWindowsAndTilemaps(); - sub_81174B4(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER); - SetMainCallback2(sub_8117534); + SetCableClubStateAndWarpToNewMap(MAP_GROUP(TRADE_CENTER), MAP_NUM(TRADE_CENTER), 5, 8, USING_TRADE_CENTER); + SetMainCallback2(CB2_TransitionToCableClub); break; - case 68: - CreateTask(sub_8117130, 0); + case ACTIVITY_TRADE | IN_UNION_ROOM: + CreateTask(Task_StartUnionRoomTrade, 0); break; - case 5: - case 69: + case ACTIVITY_CHAT: + case ACTIVITY_CHAT | IN_UNION_ROOM: if (GetMultiplayerId() == 0) { - sub_80F8CFC(); + LinkRfu_CreateConnectionAsParent(); } else { - sub_80F8D14(); - SetHostRFUtgtGname(69, 0, 1); + LinkRfu_StopManagerBeforeEnteringChat(); + SetHostRFUtgtGname(ACTIVITY_CHAT | IN_UNION_ROOM, 0, 1); } - sub_8128420(); + EnterUnionRoomChat(); break; - case 8: - case 72: - sub_8117594(gBlockSendBuffer, FALSE); - SetMainCallback2(sub_8117354); + case ACTIVITY_CARD: + case ACTIVITY_CARD | IN_UNION_ROOM: + CreateTrainerCardInBuffer(gBlockSendBuffer, FALSE); + SetMainCallback2(CB2_ShowCard); break; - case 9: - sub_8117440(USING_MINIGAME, 5, 1); - sub_8147AA8(GetCursorSelectionMonId(), CB2_LoadMap); + case ACTIVITY_PJUMP: + SetCableClubStateAndWarpCurrentMap(USING_MINIGAME, 5, 1); + StartPokemonJump(GetCursorSelectionMonId(), CB2_LoadMap); break; - case 10: - sub_8117440(USING_BERRY_CRUSH, 9, 1); - sub_814B754(CB2_LoadMap); + case ACTIVITY_BCRUSH: + SetCableClubStateAndWarpCurrentMap(USING_BERRY_CRUSH, 9, 1); + StartBerryCrush(CB2_LoadMap); break; - case 11: - sub_8117440(USING_MINIGAME, 5, 1); - sub_81507FC(GetCursorSelectionMonId(), CB2_LoadMap); + case ACTIVITY_BPICK: + SetCableClubStateAndWarpCurrentMap(USING_MINIGAME, 5, 1); + StartDodrioBerryPicking(GetCursorSelectionMonId(), CB2_LoadMap); break; } @@ -1878,7 +2000,7 @@ static void sub_81175BC(u8 taskId) ScriptContext2_Disable(); } -static void sub_8117900(u8 taskId) +static void Task_RunScriptAndFadeToActivity(u8 taskId) { s16 *data = gTasks[taskId].data; u16 *sendBuff = (u16*)(gBlockSendBuffer); @@ -1900,7 +2022,7 @@ static void sub_8117900(u8 taskId) case 2: if (!gPaletteFade.active) { - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); data[0]++; } break; @@ -1908,38 +2030,38 @@ static void sub_8117900(u8 taskId) if (IsLinkTaskFinished()) { DestroyTask(taskId); - sub_81179A4(); + CreateTask_StartActivity(); } break; } } -static void sub_8117990(void) +static void CreateTask_RunScriptAndFadeToActivity(void) { - CreateTask(sub_8117900, 0); + CreateTask(Task_RunScriptAndFadeToActivity, 0); } -static void sub_81179A4(void) +static void CreateTask_StartActivity(void) { - u8 taskId = CreateTask(sub_81175BC, 0); + u8 taskId = CreateTask(Task_StartActivity, 0); gTasks[taskId].data[0] = 0; } -void MEvent_CreateTask_Leader(u32 arg0) +void MEvent_CreateTask_Leader(u32 activity) { u8 taskId; struct UnkStruct_Leader * dataPtr; - taskId = CreateTask(sub_8117A0C, 0); + taskId = CreateTask(Task_MEvent_Leader, 0); sUnionRoomMain.leader = dataPtr = (void*)(gTasks[taskId].data); dataPtr->state = 0; dataPtr->textState = 0; - dataPtr->field_18 = arg0; + dataPtr->activity = activity; gSpecialVar_Result = 0; } -static void sub_8117A0C(u8 taskId) +static void Task_MEvent_Leader(u8 taskId) { struct UnkStruct_Leader * data = sUnionRoomMain.leader; struct WindowTemplate winTemplate; @@ -1948,43 +2070,43 @@ static void sub_8117A0C(u8 taskId) switch (data->state) { case 0: - gUnknown_203B058 = data->field_18; - gUnknown_203B059 = 2; - SetHostRFUtgtGname(data->field_18, 0, 0); - sub_80FAF74(FALSE, FALSE); - sub_800B1F4(); + sPlayerCurrActivity = data->activity; + sPlayerActivityGroupSize = 2; + SetHostRFUtgtGname(data->activity, 0, 0); + SetGnameBufferWonderFlags(FALSE, FALSE); + SetWirelessCommType1(); OpenLink(); - sub_80FBB8C(2); + InitializeRfuLinkManager_LinkLeader(2); data->state = 1; break; case 1: data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); - data->field_8 = AllocZeroed(5 * sizeof(struct UnkStruct_x20)); - sub_811A650(data->field_4->arr, 4); - sub_811A5E4(data->field_0->arr, 5); - LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].unk.gname, data->field_0->arr[0].unk.playerName); + data->field_0 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); + data->field_8 = AllocZeroed(UROOM_MAX_PARTY_SIZE * sizeof(struct UnkStruct_x20)); + BlankUnkStruct_x1CArray(data->field_4->arr, 4); + BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_PARTY_SIZE); + LinkRfu3_SetGnameUnameFromStaticBuffers(&data->field_0->arr[0].gname_uname.gname, data->field_0->arr[0].gname_uname.uname); data->field_0->arr[0].field_18 = 0; - data->field_0->arr[0].field_1A_0 = 1; - data->field_0->arr[0].field_1A_1 = 0; + data->field_0->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + data->field_0->arr[0].field_1A_1 = FALSE; data->field_0->arr[0].field_1B = 0; - data->field_17 = sub_811A054(data->field_4, 0xFF); + data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, 0xFF); - winTemplate = gUnknown_8456CFC; + winTemplate = sWindowTemplate_List_PossibleGroupMembers; winTemplate.baseBlock = GetMysteryGiftBaseBlock(); data->listWindowId = AddWindow(&winTemplate); MG_DrawTextBorder(data->listWindowId); - gMultiuseListMenuTemplate = gUnknown_8456D34; + gMultiuseListMenuTemplate = sListMenuTemplate_PossibleGroupMembers; gMultiuseListMenuTemplate.windowId = data->listWindowId; data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); CopyBgTilemapBufferToVram(0); - data->field_13 = 1; + data->playerCount = 1; data->state = 2; break; case 2: - StringCopy(gStringVar1, gUnknown_8456C74[gUnknown_203B058]); - sub_811599C(gStringVar4, gUnknown_203B058); + StringCopy(gStringVar1, sUnionRoomActivityStringPtrs[sPlayerCurrActivity]); + StringExpandPlaceholders_AwaitingCommFromAnother(gStringVar4, sPlayerCurrActivity); data->state = 3; break; case 3: @@ -1992,7 +2114,7 @@ static void sub_8117A0C(u8 taskId) data->state = 4; break; case 4: - sub_8116444(data, 5, 6); + Leader_SetStateIfMemberListChanged(data, 5, 6); if (JOY_NEW(B_BUTTON)) { data->state = 13; @@ -2000,9 +2122,10 @@ static void sub_8117A0C(u8 taskId) } break; case 6: + // The link with your friend has been dropped... if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84577F8)) { - data->field_13 = sub_81165E8(data->field_0); + data->playerCount = UnionRoomLeaderField0CompactionAndCount(data->field_0); RedrawListMenu(data->listTaskId); data->state = 2; } @@ -2011,44 +2134,44 @@ static void sub_8117A0C(u8 taskId) data->state = 7; break; case 7: - switch (mevent_message_print_and_prompt_yes_no(&data->textState, (u16 *)&data->field_14, FALSE, gStringVar4)) + switch (mevent_message_print_and_prompt_yes_no(&data->textState, (u16 *)&data->messageWindowId, FALSE, gStringVar4)) { case 0: LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - data->field_0->arr[data->field_13].field_1B = 0; + data->field_0->arr[data->playerCount].field_1B = 0; RedrawListMenu(data->listTaskId); data->field_19 = 5; - sub_80FA670(5, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + SendByteToPartnerByIdAndName(5, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); data->state = 8; break; case 1: case -1: data->field_19 = 6; - sub_80FA670(6, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + SendByteToPartnerByIdAndName(6, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); data->state = 8; break; } break; case 8: - val = sub_80FA6FC(ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId), data->field_0->arr[data->field_13].unk.playerName); + val = WaitSendByteToPartnerByIdAndName(ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId), data->field_0->arr[data->playerCount].gname_uname.uname); if (val == 1) { if (data->field_19 == 5) { - data->field_0->arr[data->field_13].field_1B = 0; + data->field_0->arr[data->playerCount].field_1B = 0; RedrawListMenu(data->listTaskId); - data->field_13++; - IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->field_13 - 1]); + data->playerCount++; + IntlConvPartnerUname7(gStringVar1, data->field_0->arr[data->playerCount - 1]); StringExpandPlaceholders(gStringVar4, gUnknown_8457554); data->state = 9; - sub_80F8F5C(); + LinkRfu_StopManagerAndFinalizeSlots(); } else { - sub_80FBD4C(data->field_0->arr[data->field_13].unk.playerName, ReadAsU16(data->field_0->arr[data->field_13].unk.gname.unk_00.playerTrainerId)); - data->field_0->arr[data->field_13].field_1A_0 = 0; - sub_81165E8(data->field_0); + RequestDisconnectSlotByTrainerNameAndId(data->field_0->arr[data->playerCount].gname_uname.uname, ReadAsU16(data->field_0->arr[data->playerCount].gname_uname.gname.unk_00.playerTrainerId)); + data->field_0->arr[data->playerCount].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + UnionRoomLeaderField0CompactionAndCount(data->field_0); RedrawListMenu(data->listTaskId); data->state = 2; } @@ -2057,7 +2180,7 @@ static void sub_8117A0C(u8 taskId) } else if (val == 2) { - sub_80FB9E4(0, 0); + RfuSetErrorStatus(0, 0); data->state = 2; } break; @@ -2066,17 +2189,17 @@ static void sub_8117A0C(u8 taskId) data->state = 10; break; case 10: - if (++data->field_E > 120) + if (++data->delayTimerAfterOk > 120) data->state = 11; break; case 11: - if (!sub_8116444(data, 5, 6)) + if (!Leader_SetStateIfMemberListChanged(data, 5, 6)) data->state = 12; break; case 12: - if (sub_80F8F40()) + if (LmanAcceptSlotFlagIsNotZero()) { - sub_80F8F7C(FALSE); + WaitRfuState(FALSE); data->state = 15; } else @@ -2086,17 +2209,18 @@ static void sub_8117A0C(u8 taskId) break; case 13: DestroyWirelessStatusIndicatorSprite(); - sub_80F8DC0(); + LinkRfu_Shutdown(); DestroyListMenuTask(data->listTaskId, 0, 0); CopyBgTilemapBufferToVram(0); RemoveWindow(data->listWindowId); - DestroyTask(data->field_17); + DestroyTask(data->listenTaskId); Free(data->field_8); Free(data->field_0); Free(data->field_4); data->state++; break; case 14: + // Please start over from the beginning. if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_84571B8)) { DestroyTask(taskId); @@ -2104,13 +2228,13 @@ static void sub_8117A0C(u8 taskId) } break; case 15: - if (sub_80FB9F4() == 1 || sub_80FB9F4() == 2) + if (RfuGetErrorStatus() == 1 || RfuGetErrorStatus() == 2) { data->state = 13; } else if (gReceivedRemoteLinkPlayers != 0) { - sub_80FAFE0(1); + UpdateGameData_GroupLockedIn(TRUE); data->state++; } break; @@ -2118,11 +2242,11 @@ static void sub_8117A0C(u8 taskId) DestroyListMenuTask(data->listTaskId, 0, 0); CopyBgTilemapBufferToVram(0); RemoveWindow(data->listWindowId); - DestroyTask(data->field_17); + DestroyTask(data->listenTaskId); Free(data->field_8); Free(data->field_0); Free(data->field_4); - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); data->state++; break; case 17: @@ -2132,22 +2256,22 @@ static void sub_8117A0C(u8 taskId) } } -void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0) +void MEvent_CreateTask_CardOrNewsWithFriend(u32 activity) { u8 taskId; struct UnkStruct_Group * dataPtr; - taskId = CreateTask(sub_8117F20, 0); + taskId = CreateTask(Task_CardOrNewsWithFriend, 0); sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data); sGroup = dataPtr; dataPtr->state = 0; dataPtr->textState = 0; - dataPtr->field_12 = arg0 - 21; + dataPtr->cardOrNews = activity - ACTIVITY_WCARD2; // 0: Card; 1: News gSpecialVar_Result = 0; } -static void sub_8117F20(u8 taskId) +static void Task_CardOrNewsWithFriend(u8 taskId) { s32 id; struct WindowTemplate winTemplate1, winTemplate2; @@ -2156,10 +2280,10 @@ static void sub_8117F20(u8 taskId) switch (data->state) { case 0: - SetHostRFUtgtGname(data->field_12 + 21, 0, 0); - sub_800B1F4(); + SetHostRFUtgtGname(data->cardOrNews + ACTIVITY_WCARD2, 0, 0); + SetWirelessCommType1(); OpenLink(); - sub_80FBBD8(); + InitializeRfuLinkManager_JoinGroup(); data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); data->state = 1; @@ -2169,33 +2293,33 @@ static void sub_8117F20(u8 taskId) data->state = 2; break; case 2: - sub_811A650(data->field_4->arr, 4); - sub_811A5E4(data->field_0->arr, 16); - data->field_11 = sub_811A054(data->field_4, data->field_12 + 7); + BlankUnkStruct_x1CArray(data->field_4->arr, 4); + BlankUnkStruct_x20Array(data->field_0->arr, 16); + data->listenTaskId = CreateTask_ListenForPartnersWithCompatibleSerialNos(data->field_4, data->cardOrNews + LINK_GROUP_WONDER_CARD); - winTemplate1 = gUnknown_8456D4C; + winTemplate1 = sWindowTemplate_MysteryGiftList; winTemplate1.baseBlock = GetMysteryGiftBaseBlock(); data->listWindowId = AddWindow(&winTemplate1); - data->field_D = AddWindow(&gUnknown_8456D54); + data->playerNameAndIdWindowId = AddWindow(&sWindowTemplate_MysteryGiftPlayerNameAndId); MG_DrawTextBorder(data->listWindowId); - gMultiuseListMenuTemplate = gUnknown_8456DDC; + gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups; gMultiuseListMenuTemplate.windowId = data->listWindowId; data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - MG_DrawTextBorder(data->field_D); - FillWindowPixelBuffer(data->field_D, PIXEL_FILL(1)); - PutWindowTilemap(data->field_D); - sub_8115924(data->field_D); - CopyWindowToVram(data->field_D, 2); + MG_DrawTextBorder(data->playerNameAndIdWindowId); + FillWindowPixelBuffer(data->playerNameAndIdWindowId, PIXEL_FILL(1)); + PutWindowTilemap(data->playerNameAndIdWindowId); + PrintPlayerNameAndIdOnWindow(data->playerNameAndIdWindowId); + CopyWindowToVram(data->playerNameAndIdWindowId, 2); CopyBgTilemapBufferToVram(0); - data->field_F = 0; + data->leaderId = 0; data->state = 3; break; case 3: - id = sub_8116FE4(); + id = GetNewLeaderCandidate(); switch (id) { case 1: @@ -2209,16 +2333,16 @@ static void sub_8117F20(u8 taskId) { // this unused variable along with the assignment is needed to match u32 unusedVar; - unusedVar = data->field_0->arr[id].unk.gname.unk_0a_0; + unusedVar = data->field_0->arr[id].gname_uname.gname.activity; - if (data->field_0->arr[id].field_1A_0 == 1 && !data->field_0->arr[id].unk.gname.unk_0a_7) + if (data->field_0->arr[id].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[id].gname_uname.gname.started) { - data->field_F = id; + data->leaderId = id; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); RedrawListMenu(data->listTaskId); - IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]); - sub_80FBF54(data->field_0->arr[data->field_F].unk.playerName, ReadAsU16(data->field_0->arr[data->field_F].unk.gname.unk_00.playerTrainerId)); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]); + CreateTask_RfuReconnectWithParent(data->field_0->arr[data->leaderId].gname_uname.uname, ReadAsU16(data->field_0->arr[data->leaderId].gname_uname.gname.unk_00.playerTrainerId)); PlaySE(SE_PN_ON); data->state = 4; } @@ -2236,17 +2360,17 @@ static void sub_8117F20(u8 taskId) break; case 4: AddTextPrinterToWindow1(gUnknown_8459238); - IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]); data->state = 5; break; case 5: if (gReceivedRemoteLinkPlayers != 0) { - gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0; + sPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; data->state = 10; } - switch (sub_80FB9F4()) + switch (RfuGetErrorStatus()) { case 1: case 2: @@ -2255,7 +2379,7 @@ static void sub_8117F20(u8 taskId) break; case 5: AddTextPrinterToWindow1(gUnknown_84576AC); - sub_80FB9E4(0, 0); + RfuSetErrorStatus(0, 0); break; } break; @@ -2264,19 +2388,19 @@ static void sub_8117F20(u8 taskId) case 10: DestroyListMenuTask(data->listTaskId, 0, 0); CopyBgTilemapBufferToVram(0); - RemoveWindow(data->field_D); + RemoveWindow(data->playerNameAndIdWindowId); RemoveWindow(data->listWindowId); - DestroyTask(data->field_11); + DestroyTask(data->listenTaskId); Free(data->field_0); Free(data->field_4); data->state++; break; case 9: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_8457838[sub_80FB9F4()])) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_8457838[RfuGetErrorStatus()])) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); - sub_80F8DC0(); + LinkRfu_Shutdown(); gSpecialVar_Result = 5; } break; @@ -2284,12 +2408,12 @@ static void sub_8117F20(u8 taskId) DestroyWirelessStatusIndicatorSprite(); AddTextPrinterToWindow1(gUnknown_84571B8); DestroyTask(taskId); - sub_80F8DC0(); + LinkRfu_Shutdown(); gSpecialVar_Result = 5; break; case 11: data->state++; - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); break; case 12: if (IsLinkTaskFinished()) @@ -2298,22 +2422,22 @@ static void sub_8117F20(u8 taskId) } } -void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0) +void MEvent_CreateTask_CardOrNewsOverWireless(u32 activity) { u8 taskId; struct UnkStruct_Group * dataPtr; - taskId = CreateTask(sub_81182DC, 0); + taskId = CreateTask(Task_CardOrNewsOverWireless, 0); sUnionRoomMain.group = dataPtr = (void*)(gTasks[taskId].data); sGroup = dataPtr; dataPtr->state = 0; dataPtr->textState = 0; - dataPtr->field_12 = arg0 - 21; + dataPtr->cardOrNews = activity - ACTIVITY_WCARD2; // 0: Card; 1: News gSpecialVar_Result = 0; } -static void sub_81182DC(u8 taskId) +static void Task_CardOrNewsOverWireless(u8 taskId) { s32 id; struct WindowTemplate winTemplate; @@ -2323,9 +2447,9 @@ static void sub_81182DC(u8 taskId) { case 0: SetHostRFUtgtGname(0, 0, 0); - sub_800B1F4(); + SetWirelessCommType1(); OpenLink(); - sub_80FBBD8(); + InitializeRfuLinkManager_JoinGroup(); data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); data->field_0 = AllocZeroed(16 * sizeof(struct UnkStruct_x20)); data->state = 1; @@ -2335,29 +2459,29 @@ static void sub_81182DC(u8 taskId) data->state = 2; break; case 2: - sub_811A650(data->field_4->arr, 4); - sub_811A5E4(data->field_0->arr, 16); - data->field_11 = sub_811A084(data->field_4, data->field_12 + 7); + BlankUnkStruct_x1CArray(data->field_4->arr, 4); + BlankUnkStruct_x20Array(data->field_0->arr, 16); + data->listenTaskId = CreateTask_ListenForPartnersWithSerial7F7D(data->field_4, data->cardOrNews + LINK_GROUP_WONDER_CARD); if (data->field_13 != 0) { - winTemplate = gUnknown_8456D4C; + winTemplate = sWindowTemplate_MysteryGiftList; winTemplate.baseBlock = GetMysteryGiftBaseBlock(); data->listWindowId = AddWindow(&winTemplate); MG_DrawTextBorder(data->listWindowId); - gMultiuseListMenuTemplate = gUnknown_8456DDC; + gMultiuseListMenuTemplate = sListMenuTemplate_UnionRoomGroups; gMultiuseListMenuTemplate.windowId = data->listWindowId; data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); CopyBgTilemapBufferToVram(0); } - data->field_F = 0; + data->leaderId = 0; data->state = 3; break; case 3: - id = sub_8116FE4(); + id = GetNewLeaderCandidate(); switch (id) { case 1: @@ -2369,17 +2493,17 @@ static void sub_81182DC(u8 taskId) case 0: if (data->field_13 != 0) id = ListMenu_ProcessInput(data->listTaskId); - if (data->field_14 > 120) + if (data->refreshTimer > 120) { - if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.gname.unk_0a_7) + if (data->field_0->arr[0].groupScheduledAnim == UNION_ROOM_SPAWN_IN && !data->field_0->arr[0].gname_uname.gname.started) { - if (sub_8119FB0(&data->field_0->arr[0].unk.gname, data->field_12 + 7)) + if (GetGnameWonderFlagByLinkGroup(&data->field_0->arr[0].gname_uname.gname, data->cardOrNews + LINK_GROUP_WONDER_CARD)) { - data->field_F = 0; - data->field_14 = 0; + data->leaderId = 0; + data->refreshTimer = 0; LoadWirelessStatusIndicatorSpriteGfx(); CreateWirelessStatusIndicatorSprite(0, 0); - sub_80FBF54(data->field_0->arr[0].unk.playerName, ReadAsU16(data->field_0->arr[0].unk.gname.unk_00.playerTrainerId)); + CreateTask_RfuReconnectWithParent(data->field_0->arr[0].gname_uname.uname, ReadAsU16(data->field_0->arr[0].gname_uname.gname.unk_00.playerTrainerId)); PlaySE(SE_PN_ON); data->state = 4; } @@ -2393,25 +2517,25 @@ static void sub_81182DC(u8 taskId) else if (JOY_NEW(B_BUTTON)) { data->state = 6; - data->field_14 = 0; + data->refreshTimer = 0; } - data->field_14++; + data->refreshTimer++; break; } break; case 4: AddTextPrinterToWindow1(gUnknown_845928C); - IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->field_F]); + IntlConvPartnerUname(gStringVar1, data->field_0->arr[data->leaderId]); data->state = 5; break; case 5: if (gReceivedRemoteLinkPlayers != 0) { - gUnknown_203B058 = data->field_0->arr[data->field_F].unk.gname.unk_0a_0; + sPlayerCurrActivity = data->field_0->arr[data->leaderId].gname_uname.gname.activity; data->state = 12; } - switch (sub_80FB9F4()) + switch (RfuGetErrorStatus()) { case 1: case 2: @@ -2420,7 +2544,7 @@ static void sub_81182DC(u8 taskId) break; case 5: AddTextPrinterToWindow1(gUnknown_845777C); - sub_80FB9E4(0, 0); + RfuSetErrorStatus(0, 0); break; } break; @@ -2434,7 +2558,7 @@ static void sub_81182DC(u8 taskId) CopyBgTilemapBufferToVram(0); RemoveWindow(data->listWindowId); } - DestroyTask(data->field_11); + DestroyTask(data->listenTaskId); Free(data->field_0); Free(data->field_4); data->state++; @@ -2444,7 +2568,7 @@ static void sub_81182DC(u8 taskId) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); - sub_80F8DC0(); + LinkRfu_Shutdown(); gSpecialVar_Result = 5; } break; @@ -2453,22 +2577,22 @@ static void sub_81182DC(u8 taskId) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); - sub_80F8DC0(); + LinkRfu_Shutdown(); gSpecialVar_Result = 5; } break; case 11: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_845933C[data->field_12])) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_845933C[data->cardOrNews])) { DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); - sub_80F8DC0(); + LinkRfu_Shutdown(); gSpecialVar_Result = 5; } break; case 13: data->state++; - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); break; case 14: if (IsLinkTaskFinished()) @@ -2482,7 +2606,7 @@ void UnionRoomSpecial(void) struct UnkStruct_URoom * dataPtr; ClearAndInitHostRFUtgtGname(); - CreateTask(sub_81186E0, 10); + CreateTask(Task_RunUnionRoom, 10); // dumb line needed to match sUnionRoomMain.uRoom = sUnionRoomMain.uRoom; @@ -2497,7 +2621,7 @@ void UnionRoomSpecial(void) dataPtr->field_12 = 0; gSpecialVar_Result = 0; - sub_8107D38(0xD0, 1); + ListMenuLoadStdPalAt(0xD0, 1); } static u16 ReadAsU16(const u8 *ptr) @@ -2505,7 +2629,7 @@ static u16 ReadAsU16(const u8 *ptr) return (ptr[1] << 8) | (ptr[0]); } -static void sub_8118664(u32 nextState, const u8 *src) +static void UnionRoom_ScheduleFieldMessageWithFollowupState(u32 nextState, const u8 *src) { struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; @@ -2515,7 +2639,7 @@ static void sub_8118664(u32 nextState, const u8 *src) StringExpandPlaceholders(gStringVar4, src); } -static void sub_811868C(const u8 *src) +static void UnionRoom_ScheduleFieldMessageAndExit(const u8 *src) { struct UnkStruct_URoom * data = sUnionRoomMain.uRoom; @@ -2524,17 +2648,17 @@ static void sub_811868C(const u8 *src) StringExpandPlaceholders(gStringVar4, src); } -static void sub_81186B0(struct UnkStruct_URoom * data) +static void BackUpURoomField0ToDecompressionBuffer(struct UnkStruct_URoom * data) { - memcpy(&gDecompressionBuffer[0x3F00], data->field_0, 8 * sizeof(struct UnkStruct_x20)); + memcpy(&gDecompressionBuffer[0x3F00], data->field_0, UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20)); } -static void sub_81186C8(struct UnkStruct_URoom * data) +static void RestoreURoomField0FromDecompressionBuffer(struct UnkStruct_URoom * data) { - memcpy(data->field_0, &gDecompressionBuffer[0x3F00], 8 * sizeof(struct UnkStruct_x20)); + memcpy(data->field_0, &gDecompressionBuffer[0x3F00], UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20)); } -static void sub_81186E0(u8 taskId) +static void Task_RunUnionRoom(u8 taskId) { u32 id = 0; s32 var5 = 0; @@ -2545,53 +2669,53 @@ static void sub_81186E0(u8 taskId) switch (data->state) { case 0: - data->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - data->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20)); + data->field_4 = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); + data->field_C = AllocZeroed(RFU_CHILD_MAX * sizeof(struct UnkStruct_x1C)); + data->field_0 = AllocZeroed(UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20)); data->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); - sub_811A5E4(data->field_0->arr, 8); - gUnknown_203B058 = 0x40; - data->field_20 = sub_8119E84(data->field_C, data->field_4, 9); + BlankUnkStruct_x20Array(data->field_0->arr, UROOM_MAX_GROUP_COUNT); + sPlayerCurrActivity = IN_UNION_ROOM; + data->field_20 = CreateTask_SearchForChildOrParent(data->field_C, data->field_4, LINK_GROUP_UNION_ROOM_RESUME); ZeroUnionObjWork(data->unionObjs); - sub_811BB68(); + MakeGroupAssemblyAreasPassable(); data->state = 1; break; case 1: - sub_811BAAC(data->spriteIds, taskData[0]); + CreateGroupMemberObjectsInvisible(data->spriteIds, taskData[0]); if (++taskData[0] == 8) data->state = 2; break; case 2: - SetHostRFUtgtGname(0x40, 0, 0); - sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); - sub_800B1F4(); + SetHostRFUtgtGname(IN_UNION_ROOM, 0, 0); + RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + SetWirelessCommType1(); OpenLink(); - sub_80FBC00(); - sub_811A5E4(&data->field_8->arr[0], 1); - sub_811A650(data->field_4->arr, 4); - sub_811A650(data->field_C->arr, 4); + InitializeRfuLinkManager_EnterUnionRoom(); + BlankUnkStruct_x20Array(&data->field_8->arr[0], 1); + BlankUnkStruct_x1CArray(data->field_4->arr, 4); + BlankUnkStruct_x1CArray(data->field_C->arr, 4); gSpecialVar_Result = 0; data->state = 3; break; case 3: if ((GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_REGISTER - || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE) + || GetPartyMenuType() == PARTY_MENU_TYPE_UNION_ROOM_TRADE) && sUnionRoomTrade.field_0 != 0) { id = GetCursorSelectionMonId(); switch (sUnionRoomTrade.field_0) { case 1: - sub_80FB008(0x54, 0, 1); + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); if (id >= PARTY_SIZE) { ResetUnionRoomTrade(&sUnionRoomTrade); - sub_80FAFA0(0, 0, 0); - sub_811868C(gUnknown_8458D54); + RfuUpdatePlayerGnameStateAndSend(0, 0, 0); + UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458D54); } else if (!RegisterTradeMonAndGetIsEgg(GetCursorSelectionMonId(), &sUnionRoomTrade)) { - sub_8118664(0x34, gUnknown_8458CD4); + UnionRoom_ScheduleFieldMessageWithFollowupState(52, gURText_PleaseChooseTypeOfMon); } else { @@ -2599,16 +2723,16 @@ static void sub_81186E0(u8 taskId) } break; case 2: - sub_81186C8(data); + RestoreURoomField0FromDecompressionBuffer(data); taskData[1] = sUnionRoomTrade.field_8; if (id >= PARTY_SIZE) { - sub_811868C(gUnknown_8458D9C); + UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458D9C); } else { - sub_80FB008(0x54, 0, 1); - gUnknown_203B058 = 0x44; + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM; RegisterTradeMon(GetCursorSelectionMonId(), &sUnionRoomTrade); data->state = 51; } @@ -2626,7 +2750,7 @@ static void sub_81186E0(u8 taskId) { if (gSpecialVar_Result == 9) { - sub_80FB008(0x54, 0, 1); + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); PlaySE(SE_PC_LOGIN); StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); data->state = 42; @@ -2634,7 +2758,7 @@ static void sub_81186E0(u8 taskId) } else if (gSpecialVar_Result == 11) { - sub_80FB008(0x54, 0, 1); + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); data->state = 23; gSpecialVar_Result = 0; } @@ -2650,98 +2774,98 @@ static void sub_81186E0(u8 taskId) { if (JOY_NEW(A_BUTTON)) { - if (sub_811BF00(data->field_0, &taskData[0], &taskData[1], data->spriteIds)) + if (RfuUnionTool_GetGroupAndMemberInFrontOfPlayer(data->field_0, &taskData[0], &taskData[1], data->spriteIds)) { PlaySE(SE_SELECT); - sub_811B298(); + UR_EnableScriptContext2AndFreezeObjectEvents(); data->state = 24; break; } - else if (sub_811A9B8()) + else if (PlayerIsTalkingToUnionRoomAide()) { - sub_80FB008(0x54, 0, 1); + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); PlaySE(SE_PC_LOGIN); - sub_811B298(); + UR_EnableScriptContext2AndFreezeObjectEvents(); StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); data->state = 45; break; } } - switch (sub_8119B94()) + switch (HandlePlayerListUpdate()) { case 1: PlaySE(SE_TOY_C); case 2: - sub_811BECC(data); + ScheduleUnionRoomPlayerRefresh(data); break; case 4: data->state = 11; - sub_811B298(); - sub_80FAFA0(0, 0, 0); - sub_80FB008(0x53, sub_811B2D8(data), 0); + UR_EnableScriptContext2AndFreezeObjectEvents(); + RfuUpdatePlayerGnameStateAndSend(0, 0, 0); + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_NPCTALK | IN_UNION_ROOM, GetActivePartnerSpriteGenderParam(data), FALSE); break; } - sub_811BEDC(data); + HandleUnionRoomPlayerRefresh(data); } break; case 23: if (!FuncIsActiveTask(Task_StartMenuHandleInput)) { - sub_80FB008(0x40, 0, 0); + UpdateGameDataWithActivitySpriteGendersFlag(IN_UNION_ROOM, 0, FALSE); data->state = 4; } break; case 24: - sub_811A0E0(); + UR_RunTextPrinters_CheckPrinter0Active(); playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - sub_80FB008(0x54, 0, 1); - switch (sub_811AA5C(data->field_0, taskData[0], taskData[1], playerGender)) + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + switch (UnionRoomGetPlayerInteractionResponse(data->field_0, taskData[0], taskData[1], playerGender)) { case 0: data->state = 26; break; case 1: - sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.gname, gUnknown_203B058); + sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity); data->field_12 = id; // Should be just 0, but won't match any other way. data->state = 25; break; case 2: - sub_8118664(0x13, gStringVar4); + UnionRoom_ScheduleFieldMessageWithFollowupState(19, gStringVar4); break; } break; case 25: - sub_811A0E0(); - switch (sub_80FB9F4()) + UR_RunTextPrinters_CheckPrinter0Active(); + switch (RfuGetErrorStatus()) { case 4: - sub_811B258(TRUE); + HandleCancelTrade(TRUE); data->state = 4; break; case 1: case 2: - if (sub_80FBB0C() == TRUE) - sub_811868C(gUnknown_8457F90); + if (IsUnionRoomListenTaskActive() == TRUE) + UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8457F90); else - sub_8118664(30, gUnknown_8457F90); + UnionRoom_ScheduleFieldMessageWithFollowupState(30, gUnknown_8457F90); - gUnknown_203B058 = 0x40; + sPlayerCurrActivity = IN_UNION_ROOM; break; } if (gReceivedRemoteLinkPlayers != 0) { - sub_8117594(gBlockSendBuffer, TRUE); - CreateTask(sub_8117280, 5); + CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); + CreateTask(Task_ExchangeCards, 5); data->state = 38; } break; case 38: - if (!FuncIsActiveTask(sub_8117280)) + if (!FuncIsActiveTask(Task_ExchangeCards)) { - if (gUnknown_203B058 == 0x44) - sub_8118664(31, gUnknown_84578BC); + if (sPlayerCurrActivity == (ACTIVITY_TRADE | IN_UNION_ROOM)) + UnionRoom_ScheduleFieldMessageWithFollowupState(31, gUnknown_84578BC); else data->state = 5; } @@ -2749,18 +2873,18 @@ static void sub_81186E0(u8 taskId) case 30: if (gReceivedRemoteLinkPlayers == 0) { - sub_811B258(FALSE); - sub_811C028(taskData[0], taskData[1], data->field_0); + HandleCancelTrade(FALSE); + UpdateUnionGroupMemberFacing(taskData[0], taskData[1], data->field_0); data->state = 2; } break; case 5: - id = sub_811AA24(&data->field_0->arr[taskData[1]]); + id = ConvPartnerUnameAndGetWhetherMetAlready(&data->field_0->arr[taskData[1]]); playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - sub_8118664(6, gUnknown_8457B04[id][playerGender]); + UnionRoom_ScheduleFieldMessageWithFollowupState(6, gURText_FriendPromptsForActivity[id][playerGender]); break; case 6: - var5 = sub_811A218(&data->textState, &data->field_1B, &data->field_1C, &gUnknown_8456DF4, &gUnknown_8456E1C); + var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->topListMenuWindowId, &data->topListMenuListMenuId, &sWindowTemplate_InviteToActivity, &sListMenuTemplate_InviteToActivity); if (var5 != -1) { if (gReceivedRemoteLinkPlayers == 0) @@ -2769,27 +2893,27 @@ static void sub_81186E0(u8 taskId) } else { - data->field_98 = 0; + data->partnerYesNoResponse = 0; playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - if (var5 == -2 || var5 == 0x40) + if (var5 == -2 || var5 == IN_UNION_ROOM) { - data->field_4C[0] = 0x40; - sub_80F9E2C(data->field_4C); + data->playerSendBuffer[0] = IN_UNION_ROOM; + RfuPrepareSend0x2f00(data->playerSendBuffer); StringCopy(gStringVar4, gUnknown_845842C[gLinkPlayers[0].gender]); data->state = 32; } else { - gUnknown_203B058 = var5; - gUnknown_203B059 = (u32)(var5) >> 8; - if (gUnknown_203B058 == 0x41 && !HasAtLeastTwoMonsOfLevel30OrLower()) + sPlayerCurrActivity = var5; + sPlayerActivityGroupSize = (u32)(var5) >> 8; + if (sPlayerCurrActivity == (ACTIVITY_BATTLE | IN_UNION_ROOM) && !HasAtLeastTwoMonsOfLevel30OrLower()) { - sub_8118664(5, gUnknown_845847C); + UnionRoom_ScheduleFieldMessageWithFollowupState(5, gUnknown_845847C); } else { - data->field_4C[0] = gUnknown_203B058 | 0x40; - sub_80F9E2C(data->field_4C); + data->playerSendBuffer[0] = sPlayerCurrActivity | IN_UNION_ROOM; + RfuPrepareSend0x2f00(data->playerSendBuffer); data->state = 27; } } @@ -2801,24 +2925,24 @@ static void sub_81186E0(u8 taskId) data->state = 36; break; case 27: - sub_811B0A4(data); + PollPartnerYesNoResponse(data); playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - id = sub_811A9FC(data->field_4C[0] & 0x3F); - if (PrintOnTextbox(&data->textState, gUnknown_84580F4[playerGender][id])) + id = GetResponseIdx_InviteToURoomActivity(data->playerSendBuffer[0] & 0x3F); + if (PrintOnTextbox(&data->textState, gResponseToURoomActivityInviteStringPtrs[playerGender][id])) { taskData[3] = 0; data->state = 29; } break; case 32: - sub_800AAC0(); + Link_TryStartSend5FFF(); data->state = 36; break; case 31: - data->field_4C[0] = 0x44; - data->field_4C[1] = sUnionRoomTrade.species; - data->field_4C[2] = sUnionRoomTrade.level; - sub_80F9E2C(data->field_4C); + data->playerSendBuffer[0] = ACTIVITY_TRADE | IN_UNION_ROOM; + data->playerSendBuffer[1] = sUnionRoomTrade.species; + data->playerSendBuffer[2] = sUnionRoomTrade.level; + RfuPrepareSend0x2f00(data->playerSendBuffer); data->state = 29; break; case 29: @@ -2829,12 +2953,12 @@ static void sub_81186E0(u8 taskId) } else { - sub_811B0A4(data); - if (data->field_98 == 0x51) + PollPartnerYesNoResponse(data); + if (data->partnerYesNoResponse == (ACTIVITY_ACCEPT | IN_UNION_ROOM)) { - if (gUnknown_203B058 == 8) + if (sPlayerCurrActivity == ACTIVITY_CARD) { - sub_811B31C(gStringVar4, data, FALSE); + ViewURoomPartnerTrainerCard(gStringVar4, data, MODE_CHILD); data->state = 40; } else @@ -2842,27 +2966,27 @@ static void sub_81186E0(u8 taskId) data->state = 13; } } - else if (data->field_98 == 0x52) + else if (data->partnerYesNoResponse == (ACTIVITY_DECLINE | IN_UNION_ROOM)) { data->state = 32; - sub_811AE68(gStringVar4, gUnknown_203B058 | 0x40, gLinkPlayers[0].gender); - gUnknown_203B058 = 0; + GetURoomActivityRejectMsg(gStringVar4, sPlayerCurrActivity | IN_UNION_ROOM, gLinkPlayers[0].gender); + sPlayerCurrActivity = 0; } } break; case 7: - id = sub_811AA24(&data->field_0->arr[taskData[1]]); + id = ConvPartnerUnameAndGetWhetherMetAlready(&data->field_0->arr[taskData[1]]); playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - sub_8118664(6, gUnknown_8457B04[id][playerGender]); + UnionRoom_ScheduleFieldMessageWithFollowupState(6, gURText_FriendPromptsForActivity[id][playerGender]); break; case 40: if (PrintOnTextbox(&data->textState, gStringVar4)) { data->state = 41; - sub_800AB9C(); - data->field_98 = 0; - data->field_9A[0] = 0; + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + data->partnerYesNoResponse = 0; + data->recvActivityRequest[0] = 0; } break; case 41: @@ -2882,13 +3006,13 @@ static void sub_81186E0(u8 taskId) } break; case 19: - switch (sub_811A14C(&data->textState, FALSE)) + switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { case 0: CopyBgTilemapBufferToVram(0); - gUnknown_203B058 = 0x45; - sub_80FB008(0x45, 0, 1); - sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.gname, gUnknown_203B058); + sPlayerCurrActivity = ACTIVITY_CHAT | IN_UNION_ROOM; + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_CHAT | IN_UNION_ROOM, 0, TRUE); + sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, sPlayerCurrActivity); data->field_12 = taskData[1]; data->state = 20; taskData[3] = 0; @@ -2896,7 +3020,7 @@ static void sub_81186E0(u8 taskId) case 1: case -1: playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - sub_811868C(gUnknown_8458548[playerGender]); + UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458548[playerGender]); break; } break; @@ -2908,20 +3032,20 @@ static void sub_81186E0(u8 taskId) } break; case 21: - switch (sub_80FB9F4()) + switch (RfuGetErrorStatus()) { case 4: - sub_811B258(TRUE); + HandleCancelTrade(TRUE); data->state = 4; break; case 1: case 2: playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - sub_80FB008(0x54, 0, 1); - if (sub_80FBB0C() == TRUE) - sub_811868C(gUnknown_84585E8[playerGender]); + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + if (IsUnionRoomListenTaskActive() == TRUE) + UnionRoom_ScheduleFieldMessageAndExit(gUnknown_84585E8[playerGender]); else - sub_8118664(30, gUnknown_84585E8[playerGender]); + UnionRoom_ScheduleFieldMessageWithFollowupState(30, gUnknown_84585E8[playerGender]); break; case 3: data->state = 22; @@ -2930,14 +3054,14 @@ static void sub_81186E0(u8 taskId) taskData[3]++; break; case 22: - if (sub_80FBA00()) + if (RfuIsErrorStatus1or2()) { playerGender = GetUnionRoomPlayerGender(taskData[1], data->field_0); - sub_80FB008(0x54, 0, 1); - if (sub_80FBB0C() == TRUE) - sub_811868C(gUnknown_84585E8[playerGender]); + UpdateGameDataWithActivitySpriteGendersFlag(ACTIVITY_PLYRTALK | IN_UNION_ROOM, 0, TRUE); + if (IsUnionRoomListenTaskActive() == TRUE) + UnionRoom_ScheduleFieldMessageAndExit(gUnknown_84585E8[playerGender]); else - sub_8118664(30, gUnknown_84585E8[playerGender]); + UnionRoom_ScheduleFieldMessageWithFollowupState(30, gUnknown_84585E8[playerGender]); } if (gReceivedRemoteLinkPlayers != 0) data->state = 16; @@ -2946,24 +3070,24 @@ static void sub_81186E0(u8 taskId) PlaySE(SE_PINPON); sub_80F8FA0(); data->state = 12; - data->field_9A[0] = 0; + data->recvActivityRequest[0] = 0; break; case 12: - if (sub_80FBA00()) + if (RfuIsErrorStatus1or2()) { - sub_811B258(FALSE); + HandleCancelTrade(FALSE); data->state = 2; } else if (gReceivedRemoteLinkPlayers != 0) { - sub_8117594(gBlockSendBuffer, TRUE); - CreateTask(sub_8117280, 5); + CreateTrainerCardInBuffer(gBlockSendBuffer, TRUE); + CreateTask(Task_ExchangeCards, 5); data->state = 39; } break; case 39: - sub_8119904(data); - if (!FuncIsActiveTask(sub_8117280)) + ReceiveUnionRoomActivityPacket(data); + if (!FuncIsActiveTask(Task_ExchangeCards)) { data->state = 33; StringCopy(gStringVar1, gLinkPlayers[1].name); @@ -2972,13 +3096,13 @@ static void sub_81186E0(u8 taskId) } break; case 33: - sub_8119904(data); + ReceiveUnionRoomActivityPacket(data); if (PrintOnTextbox(&data->textState, gStringVar4)) data->state = 34; break; case 34: - sub_8119904(data); - if (sub_8119944(data) && JOY_NEW(B_BUTTON)) + ReceiveUnionRoomActivityPacket(data); + if (UnionRoom_HandleContactFromOtherPlayer(data) && JOY_NEW(B_BUTTON)) { sub_80FBD6C(1); StringCopy(gStringVar4, gUnknown_8457E60); @@ -2986,80 +3110,82 @@ static void sub_81186E0(u8 taskId) } break; case 35: - sub_8118664(9, gStringVar4); + // You said yes + UnionRoom_ScheduleFieldMessageWithFollowupState(9, gStringVar4); break; case 9: - switch (sub_811A14C(&data->textState, FALSE)) + switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { case 0: - data->field_4C[0] = 0x51; - if (gUnknown_203B058 == 0x45) - sub_80FB008(gUnknown_203B058 | 0x40, sub_811B2A8(1), 0); + data->playerSendBuffer[0] = ACTIVITY_ACCEPT | IN_UNION_ROOM; + if (sPlayerCurrActivity == (ACTIVITY_CHAT | IN_UNION_ROOM)) + UpdateGameDataWithActivitySpriteGendersFlag(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), FALSE); else - sub_80FB008(gUnknown_203B058 | 0x40, sub_811B2A8(1), 1); + UpdateGameDataWithActivitySpriteGendersFlag(sPlayerCurrActivity | IN_UNION_ROOM, GetSinglePartnerSpriteGenderParam(1), TRUE); data->field_8->arr[0].field_1B = 0; taskData[3] = 0; - if (gUnknown_203B058 == 0x41) + if (sPlayerCurrActivity == (ACTIVITY_BATTLE | IN_UNION_ROOM)) { if (!HasAtLeastTwoMonsOfLevel30OrLower()) { - data->field_4C[0] = 0x52; - sub_80F9E2C(data->field_4C); + data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; + RfuPrepareSend0x2f00(data->playerSendBuffer); data->state = 10; StringCopy(gStringVar4, gUnknown_84584C0); } else { - sub_80F9E2C(data->field_4C); + RfuPrepareSend0x2f00(data->playerSendBuffer); data->state = 13; } } - else if (gUnknown_203B058 == 0x48) + else if (sPlayerCurrActivity == (ACTIVITY_CARD | IN_UNION_ROOM)) { - sub_80F9E2C(data->field_4C); - sub_811B31C(gStringVar4, data, 1); + RfuPrepareSend0x2f00(data->playerSendBuffer); + ViewURoomPartnerTrainerCard(gStringVar4, data, MODE_PARENT); data->state = 40; } else { - sub_80F9E2C(data->field_4C); + RfuPrepareSend0x2f00(data->playerSendBuffer); data->state = 13; } break; case 1: case -1: - data->field_4C[0] = 0x52; - sub_80F9E2C(data->field_4C); + data->playerSendBuffer[0] = ACTIVITY_DECLINE | IN_UNION_ROOM; + RfuPrepareSend0x2f00(data->playerSendBuffer); data->state = 10; - sub_81162E0(gStringVar4, gUnknown_203B058); + GetYouDeclinedTheOfferMessage(gStringVar4, sPlayerCurrActivity); break; } break; case 10: - sub_800AAC0(); + Link_TryStartSend5FFF(); data->state = 36; break; case 36: + // You said no if (gReceivedRemoteLinkPlayers == 0) { - gUnknown_203B058 = 0x40; - sub_8118664(0x25, gStringVar4); - memset(data->field_4C, 0, sizeof(data->field_4C)); - data->field_9A[0] = 0; - data->field_98 = 0; + sPlayerCurrActivity = IN_UNION_ROOM; + UnionRoom_ScheduleFieldMessageWithFollowupState(37, gStringVar4); + memset(data->playerSendBuffer, 0, sizeof(data->playerSendBuffer)); + data->recvActivityRequest[0] = 0; + data->partnerYesNoResponse = 0; } break; case 37: data->state = 2; - sub_811B258(FALSE); + HandleCancelTrade(FALSE); break; case 13: - sub_811AECC(gStringVar4, gUnknown_203B058 | 0x40); - sub_8118664(14, gStringVar4); + GetURoomActivityStartMsg(gStringVar4, sPlayerCurrActivity | IN_UNION_ROOM); + UnionRoom_ScheduleFieldMessageWithFollowupState(14, gStringVar4); break; case 14: - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); data->state = 15; break; case 15: @@ -3072,7 +3198,7 @@ static void sub_81186E0(u8 taskId) Free(data->field_C); Free(data->field_4); DestroyTask(data->field_20); - sub_811BB40(data->spriteIds); + DestroyGroupMemberObjects(data->spriteIds); data->state = 17; break; case 17: @@ -3082,30 +3208,30 @@ static void sub_81186E0(u8 taskId) case 18: if (!UpdatePaletteFade()) { - sub_811BA78(); + DeleteUnionObjWorkAndStopTask(); DestroyTask(taskId); Free(sUnionRoomMain.uRoom); - sub_81179A4(); + CreateTask_StartActivity(); } break; case 42: - if (sub_80F9800()->species == SPECIES_NONE) + if (GetHostRFUtgtGname()->species == SPECIES_NONE) { data->state = 43; } else { - if (sub_80F9800()->species == SPECIES_EGG) + if (GetHostRFUtgtGname()->species == SPECIES_EGG) { StringCopy(gStringVar4, gUnknown_8458DE8); } else { - StringCopy(gStringVar1, gSpeciesNames[sub_80F9800()->species]); - ConvertIntToDecimalStringN(gStringVar2, sub_80F9800()->level, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(gStringVar1, gSpeciesNames[GetHostRFUtgtGname()->species]); + ConvertIntToDecimalStringN(gStringVar2, GetHostRFUtgtGname()->level, STR_CONV_MODE_LEFT_ALIGN, 3); StringExpandPlaceholders(gStringVar4, gUnknown_8458DBC); } - sub_8118664(44, gStringVar4); + UnionRoom_ScheduleFieldMessageWithFollowupState(44, gStringVar4); } break; case 43: @@ -3113,23 +3239,23 @@ static void sub_81186E0(u8 taskId) data->state = 47; break; case 47: - var5 = sub_811A218(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E34, &gUnknown_8456E54); + var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardDetailsWindowId, &sWindowTemplate_TradeBoardRegisterInfoExit, &sListMenuTemplate_TradeBoardRegisterInfoExit); if (var5 != -1) { if (var5 == -2 || var5 == 3) { data->state = 4; - sub_811B258(TRUE); + HandleCancelTrade(TRUE); } else { switch (var5) { case 1: // REGISTER - sub_8118664(53, gUnknown_8458D1C); + UnionRoom_ScheduleFieldMessageWithFollowupState(53, gUnknown_8458D1C); break; case 2: // INFO - sub_8118664(47, gUnknown_8458B44); + UnionRoom_ScheduleFieldMessageWithFollowupState(47, gUnknown_8458B44); break; } } @@ -3149,7 +3275,7 @@ static void sub_81186E0(u8 taskId) } break; case 52: - var5 = sub_811A218(&data->textState, &data->field_1D, &data->field_1E, &gUnknown_8456E6C, &gUnknown_8456F04); + var5 = ListMenuHandler_AllItemsAvailable(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardDetailsWindowId, &sWindowTemplate_TypeNames, &sListMenuTemplate_TypeNames); if (var5 != -1) { switch (var5) @@ -3157,8 +3283,8 @@ static void sub_81186E0(u8 taskId) case -2: case 18: ResetUnionRoomTrade(&sUnionRoomTrade); - sub_80FAFA0(0, 0, 0); - sub_811868C(gUnknown_8458D54); + RfuUpdatePlayerGnameStateAndSend(0, 0, 0); + UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458D54); break; default: sUnionRoomTrade.type = var5; @@ -3168,18 +3294,18 @@ static void sub_81186E0(u8 taskId) } break; case 55: - sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); - sub_811868C(gUnknown_8458D78); + RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + UnionRoom_ScheduleFieldMessageAndExit(gUnknown_8458D78); break; case 44: - switch (sub_811A14C(&data->textState, FALSE)) + switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { case 0: data->state = 56; break; case 1: case -1: - sub_811B258(TRUE); + HandleCancelTrade(TRUE); data->state = 4; break; } @@ -3187,9 +3313,9 @@ static void sub_81186E0(u8 taskId) case 56: if (PrintOnTextbox(&data->textState, gUnknown_8458E10)) { - sub_80FAFA0(0, 0, 0); + RfuUpdatePlayerGnameStateAndSend(0, 0, 0); ResetUnionRoomTrade(&sUnionRoomTrade); - sub_811B258(TRUE); + HandleCancelTrade(TRUE); data->state = 4; } break; @@ -3198,38 +3324,38 @@ static void sub_81186E0(u8 taskId) data->state = 46; break; case 46: - sub_811A3F8(); + UR_BlankBg0(); data->state = 48; break; case 48: - var5 = sub_811A2EC(&data->textState, &data->field_1D, &data->field_4A, &data->field_1E, &gUnknown_8456F24, &gUnknown_8456F7C, data->field_0); + var5 = TradeBoardMenuHandler(&data->textState, &data->tradeBoardSelectWindowId, &data->tradeBoardListMenuId, &data->tradeBoardDetailsWindowId, &gUnknown_8456F24, &sTradeBoardListMenuTemplate, data->field_0); if (var5 != -1) { switch (var5) { case -2: case 8: - sub_811B258(TRUE); + HandleCancelTrade(TRUE); DestroyHelpMessageWindow_(); data->state = 4; break; default: - switch (sub_811ADD0(data->field_0->arr[var5].unk.gname.type, data->field_0->arr[var5].unk.gname.species)) + switch (IsRequestedTypeAndSpeciesInPlayerParty(data->field_0->arr[var5].gname_uname.gname.type, data->field_0->arr[var5].gname_uname.gname.species)) { - case 0: + case UR_TRADE_MATCH: IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - sub_8118664(49, gUnknown_8458E70); + UnionRoom_ScheduleFieldMessageWithFollowupState(49, gUnknown_8458E70); taskData[1] = var5; break; - case 1: + case UR_TRADE_NOTYPE: IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.gname.type]); - sub_8118664(46, gUnknown_8458ED0); + StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.type]); + UnionRoom_ScheduleFieldMessageWithFollowupState(46, gUnknown_8458ED0); break; - case 2: + case UR_TRADE_NOEGG: IntlConvPartnerUname(gStringVar1, data->field_0->arr[var5]); - StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].unk.gname.type]); - sub_8118664(46, gUnknown_8458F04); + StringCopy(gStringVar2, gTypeNames[data->field_0->arr[var5].gname_uname.gname.type]); + UnionRoom_ScheduleFieldMessageWithFollowupState(46, gUnknown_8458F04); break; } break; @@ -3237,14 +3363,14 @@ static void sub_81186E0(u8 taskId) } break; case 49: - switch (sub_811A14C(&data->textState, FALSE)) + switch (UnionRoomHandleYesNo(&data->textState, FALSE)) { case 0: data->state = 50; break; case -1: case 1: - sub_811B258(TRUE); + HandleCancelTrade(TRUE); data->state = 4; break; } @@ -3253,27 +3379,27 @@ static void sub_81186E0(u8 taskId) if (PrintOnTextbox(&data->textState, gUnknown_8458D1C)) { sUnionRoomTrade.field_0 = 2; - memcpy(&gUnknown_203B064, &data->field_0->arr[taskData[1]].unk.gname.unk_00, sizeof(gUnknown_203B064)); - gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].unk.gname.type; - gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].unk.gname.species; + memcpy(&gPartnerTgtGnameSub, &data->field_0->arr[taskData[1]].gname_uname.gname.unk_00, sizeof(gPartnerTgtGnameSub)); + gUnionRoomRequestedMonType = data->field_0->arr[taskData[1]].gname_uname.gname.type; + gUnionRoomOfferedSpecies = data->field_0->arr[taskData[1]].gname_uname.gname.species; gFieldCallback = sub_807DCE4; ChooseMonForTradingBoard(PARTY_MENU_TYPE_UNION_ROOM_TRADE, CB2_ReturnToField); - sub_81186B0(data); + BackUpURoomField0ToDecompressionBuffer(data); sUnionRoomTrade.field_8 = taskData[1]; } break; case 51: - gUnknown_203B058 = 0x44; - sub_80FC114(data->field_0->arr[taskData[1]].unk.playerName, &data->field_0->arr[taskData[1]].unk.gname, 0x44); + sPlayerCurrActivity = ACTIVITY_TRADE | IN_UNION_ROOM; + sub_80FC114(data->field_0->arr[taskData[1]].gname_uname.uname, &data->field_0->arr[taskData[1]].gname_uname.gname, ACTIVITY_TRADE | IN_UNION_ROOM); IntlConvPartnerUname(gStringVar1, data->field_0->arr[taskData[1]]); - sub_811A0B4(gUnknown_8457A34[2]); + UR_PrintFieldMessage(gURText_PleaseWaitMsgs[2]); data->state = 25; break; case 26: if (PrintOnTextbox(&data->textState, gStringVar4)) { - sub_811B258(TRUE); - sub_811C028(taskData[0], taskData[1], data->field_0); + HandleCancelTrade(TRUE); + UpdateUnionGroupMemberFacing(taskData[0], taskData[1], data->field_0); data->state = 4; } break; @@ -3290,38 +3416,38 @@ void var_800D_set_xB(void) gSpecialVar_Result = 11; } -static void sub_8119904(struct UnkStruct_URoom * arg0) +static void ReceiveUnionRoomActivityPacket(struct UnkStruct_URoom * uroom) { - if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == 0x2F00) + if (gRecvCmds[1][1] != 0 && (gRecvCmds[1][0] & 0xFF00) == RFU_COMMAND_0x2f00) { - arg0->field_9A[0] = gRecvCmds[1][1]; - if (gRecvCmds[1][1] == 0x44) + uroom->recvActivityRequest[0] = gRecvCmds[1][1]; + if (gRecvCmds[1][1] == (ACTIVITY_TRADE | IN_UNION_ROOM)) { - arg0->field_9A[1] = gRecvCmds[1][2]; - arg0->field_9A[2] = gRecvCmds[1][3]; + uroom->recvActivityRequest[1] = gRecvCmds[1][2]; + uroom->recvActivityRequest[2] = gRecvCmds[1][3]; } } } -static bool32 sub_8119944(struct UnkStruct_URoom * arg0) +static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * uroom) { - if (arg0->field_9A[0] != 0) + if (uroom->recvActivityRequest[0] != 0) { - s32 var = sub_811AF6C(gStringVar4, gLinkPlayers[1].gender, &arg0->field_9A[0], arg0); + s32 var = GetChatLeaderActionRequestMessage(gStringVar4, gLinkPlayers[1].gender, &uroom->recvActivityRequest[0], uroom); if (var == 0) { return TRUE; } else if (var == 1) { - arg0->state = 35; - gUnknown_203B058 = arg0->field_9A[0]; + uroom->state = 35; + sPlayerCurrActivity = uroom->recvActivityRequest[0]; return FALSE; } else if (var == 2) { - arg0->state = 36; - sub_800AAC0(); + uroom->state = 36; + Link_TryStartSend5FFF(); return FALSE; } } @@ -3336,7 +3462,7 @@ void InitUnionRoom(void) sUnionRoomPlayerName[0] = EOS; if (gQuestLogState == 2 || gQuestLogState == 3) return; - CreateTask(sub_81199FC, 0); + CreateTask(Task_InitUnionRoom, 0); sUnionRoomMain.uRoom = sUnionRoomMain.uRoom; // Needed to match. sUnionRoomMain.uRoom = ptr = AllocZeroed(sizeof(struct UnkStruct_URoom)); sURoom = sUnionRoomMain.uRoom; @@ -3347,7 +3473,7 @@ void InitUnionRoom(void) sUnionRoomPlayerName[0] = EOS; } -static void sub_81199FC(u8 taskId) +static void Task_InitUnionRoom(u8 taskId) { s32 i; u8 text[32]; @@ -3359,38 +3485,38 @@ static void sub_81199FC(u8 taskId) structPtr->state = 1; break; case 1: - SetHostRFUtgtGname(0xC, 0, 0); - sub_800B1F4(); + SetHostRFUtgtGname(ACTIVITY_SEARCH, 0, 0); + SetWirelessCommType1(); OpenLink(); - sub_80FBC00(); - sub_80FB128(1); + InitializeRfuLinkManager_EnterUnionRoom(); + sub_80FB128(TRUE); structPtr->state = 2; break; case 2: structPtr->field_4 = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - sub_811A650(structPtr->field_4->arr, 4); + BlankUnkStruct_x1CArray(structPtr->field_4->arr, 4); structPtr->field_C = AllocZeroed(4 * sizeof(struct UnkStruct_x1C)); - sub_811A650(structPtr->field_C->arr, 4); - structPtr->field_0 = AllocZeroed(8 * sizeof(struct UnkStruct_x20)); - sub_811A5E4(structPtr->field_0->arr, 8); + BlankUnkStruct_x1CArray(structPtr->field_C->arr, 4); + structPtr->field_0 = AllocZeroed(UROOM_MAX_GROUP_COUNT * sizeof(struct UnkStruct_x20)); + BlankUnkStruct_x20Array(structPtr->field_0->arr, UROOM_MAX_GROUP_COUNT); structPtr->field_8 = AllocZeroed(sizeof(struct UnkStruct_x20)); - sub_811A5E4(&structPtr->field_8->arr[0], 1); - structPtr->field_20 = sub_8119E84(structPtr->field_C, structPtr->field_4, 10); + BlankUnkStruct_x20Array(&structPtr->field_8->arr[0], 1); + structPtr->field_20 = CreateTask_SearchForChildOrParent(structPtr->field_C, structPtr->field_4, LINK_GROUP_UNION_ROOM_INIT); structPtr->state = 3; break; case 3: - switch (sub_8119B94()) + switch (HandlePlayerListUpdate()) { case 1: case 2: if (sUnionRoomPlayerName[0] == EOS) { - for (i = 0; i < PLAYER_NAME_LENGTH; i++) + for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++) { - if (structPtr->field_0->arr[i].field_1A_0 == 1) + if (structPtr->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { IntlConvPartnerUname(text, structPtr->field_0->arr[i]); - if (PlayerHasMetTrainerBefore(ReadAsU16(structPtr->field_0->arr[i].unk.gname.unk_00.playerTrainerId), text)) + if (PlayerHasMetTrainerBefore(ReadAsU16(structPtr->field_0->arr[i].gname_uname.gname.unk_00.playerTrainerId), text)) { StringCopy(sUnionRoomPlayerName, text); break; @@ -3410,7 +3536,7 @@ static void sub_81199FC(u8 taskId) Free(structPtr->field_4); DestroyTask(structPtr->field_20); Free(sUnionRoomMain.uRoom); - sub_80F8DC0(); + LinkRfu_Shutdown(); DestroyTask(taskId); break; } @@ -3430,36 +3556,41 @@ bool16 BufferUnionRoomPlayerName(void) } } -static u8 sub_8119B94(void) +static u8 HandlePlayerListUpdate(void) { s32 i; u8 j; struct UnkStruct_URoom * structPtr = sUnionRoomMain.uRoom; s32 r7 = 0; - for (i = 0; i < 4; i++) + // If someone new joined, register them in field_8 + for (i = 0; i < RFU_CHILD_MAX; i++) { - if (sub_811A694(&structPtr->field_C->arr[i].unk0, &gUnknown_8457034) == TRUE) + if (AreGnameUnameDifferent(&structPtr->field_C->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy) == TRUE) { - structPtr->field_8->arr[0].unk = structPtr->field_C->arr[i].unk0; + structPtr->field_8->arr[0].gname_uname = structPtr->field_C->arr[i].gname_uname; structPtr->field_8->arr[0].field_18 = 0; - structPtr->field_8->arr[0].field_1A_0 = 1; + structPtr->field_8->arr[0].groupScheduledAnim = UNION_ROOM_SPAWN_IN; structPtr->field_8->arr[0].field_1B = 1; return 4; } } - for (j = 0; j < 8; j++) + + // Handle changes to existing player statuses + for (j = 0; j < UROOM_MAX_GROUP_COUNT; j++) { - if (structPtr->field_0->arr[j].field_1A_0 != 0) + if (structPtr->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_NONE) { - i = sub_811A748(&structPtr->field_0->arr[j], &structPtr->field_4->arr[0]); + i = Findx20Inx1CArray(&structPtr->field_0->arr[j], &structPtr->field_4->arr[0]); if (i != 0xFF) { - if (structPtr->field_0->arr[j].field_1A_0 == 1) + if (structPtr->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (sub_811A6DC(&structPtr->field_0->arr[j].unk, &structPtr->field_4->arr[i].unk0)) + // New join in queue + if (AreUnionRoomPlayerGnamesDifferent(&structPtr->field_0->arr[j].gname_uname, &structPtr->field_4->arr[i].gname_uname)) { - structPtr->field_0->arr[j].unk = structPtr->field_4->arr[i].unk0; + // Just joined, copy their names + structPtr->field_0->arr[j].gname_uname = structPtr->field_4->arr[i].gname_uname; structPtr->field_0->arr[j].field_1B = 0x40; r7 = 1; } @@ -3472,116 +3603,121 @@ static u8 sub_8119B94(void) } else { - structPtr->field_0->arr[j].field_1A_0 = 1; + // New join, queue them + structPtr->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_IN; structPtr->field_0->arr[j].field_1B = 0; r7 = 2; } structPtr->field_0->arr[j].field_18 = 0; } - else if (structPtr->field_0->arr[j].field_1A_0 != 2) + else if (structPtr->field_0->arr[j].groupScheduledAnim != UNION_ROOM_SPAWN_OUT) { + // Person may have disconnected. Give them 10 seconds. structPtr->field_0->arr[j].field_18++; if (structPtr->field_0->arr[j].field_18 >= 600) { - structPtr->field_0->arr[j].field_1A_0 = 2; + structPtr->field_0->arr[j].groupScheduledAnim = UNION_ROOM_SPAWN_OUT; r7 = 2; } } - else if (structPtr->field_0->arr[j].field_1A_0 == 2) + else if (structPtr->field_0->arr[j].groupScheduledAnim == UNION_ROOM_SPAWN_OUT) { + // Person dropped. Wait 15 seconds, then remove them. structPtr->field_0->arr[j].field_18++; if (structPtr->field_0->arr[j].field_18 >= 900) { - sub_811A5E4(&structPtr->field_0->arr[j], 1); + BlankUnkStruct_x20Array(&structPtr->field_0->arr[j], 1); } } } } - for (i = 0; i < 4; i++) + + // Update the players list + for (i = 0; i < RFU_CHILD_MAX; i++) { - if (sub_811A798(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i], 8) != 0xFF) + if (Appendx1Ctox20(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i], UROOM_MAX_GROUP_COUNT) != 0xFF) r7 = 1; } return r7; } -static void sub_8119D34(u8 taskId) +static void Task_SearchForChildOrParent(u8 taskId) { s32 i, j; - struct UnkStruct_Shared sp0; + struct UnionGnameUnamePair gname_uname; struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; - bool8 r4; + bool8 parent_child; - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; i++) { - r4 = sub_80FCC3C(&sp0.gname, sp0.playerName, i); - if (!sub_8116F28(sp0.gname.unk_0a_0, gTasks[taskId].data[4])) + parent_child = LinkRfu_GetNameIfCompatible(&gname_uname.gname, gname_uname.uname, i); + if (!IsPartnerActivityAcceptable(gname_uname.gname.activity, gTasks[taskId].data[4])) { - sp0 = gUnknown_8457034; + gname_uname = sUnionGnameUnamePair_Dummy; } - if (sp0.gname.unk_00.unk_00_0 == 1) + if (gname_uname.gname.unk_00.language == LANGUAGE_JAPANESE) { - sp0 = gUnknown_8457034; + gname_uname = sUnionGnameUnamePair_Dummy; } - if (!r4) + if (parent_child == MODE_CHILD) { for (j = 0; j < i; j++) { - if (!sub_811A694(&ptr[1]->arr[j].unk0, &sp0)) + if (!AreGnameUnameDifferent(&ptr[1]->arr[j].gname_uname, &gname_uname)) { - sp0 = gUnknown_8457034; + gname_uname = sUnionGnameUnamePair_Dummy; } } - ptr[1]->arr[i].unk0 = sp0; - ptr[1]->arr[i].unk18 = sub_811A694(&ptr[1]->arr[i].unk0, &gUnknown_8457034); + ptr[1]->arr[i].gname_uname = gname_uname; + ptr[1]->arr[i].active = AreGnameUnameDifferent(&ptr[1]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy); } else { - ptr[0]->arr[i].unk0 = sp0; - ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034); + ptr[0]->arr[i].gname_uname = gname_uname; + ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy); } } } -static u8 sub_8119E84(struct UnkStruct_Main4 * a0, struct UnkStruct_Main4 * a1, u32 a2) +static u8 CreateTask_SearchForChildOrParent(struct UnkStruct_Main4 * main4_parent, struct UnkStruct_Main4 * main4_child, u32 linkGroup) { - u8 taskId = CreateTask(sub_8119D34, 0); + u8 taskId = CreateTask(Task_SearchForChildOrParent, 0); struct UnkStruct_Main4 ** data = (void *)gTasks[taskId].data; - data[0] = a0; - data[1] = a1; - gTasks[taskId].data[4] = a2; + data[0] = main4_parent; + data[1] = main4_child; + gTasks[taskId].data[4] = linkGroup; return taskId; } -static void sub_8119EB8(u8 taskId) +static void Task_ListenForPartnersWithCompatibleSerialNos(u8 taskId) { s32 i, j; struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; i++) { - sub_80FCC3C(&ptr[0]->arr[i].unk0.gname, ptr[0]->arr[i].unk0.playerName, i); - if (!sub_8116F28(ptr[0]->arr[i].unk0.gname.unk_0a_0, gTasks[taskId].data[2])) + LinkRfu_GetNameIfCompatible(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i); + if (!IsPartnerActivityAcceptable(ptr[0]->arr[i].gname_uname.gname.activity, gTasks[taskId].data[2])) { - ptr[0]->arr[i].unk0 = gUnknown_8457034; + ptr[0]->arr[i].gname_uname = sUnionGnameUnamePair_Dummy; } for (j = 0; j < i; j++) { - if (!sub_811A694(&ptr[0]->arr[j].unk0, &ptr[0]->arr[i].unk0)) + if (!AreGnameUnameDifferent(&ptr[0]->arr[j].gname_uname, &ptr[0]->arr[i].gname_uname)) { - ptr[0]->arr[i].unk0 = gUnknown_8457034; + ptr[0]->arr[i].gname_uname = sUnionGnameUnamePair_Dummy; } } - ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034); + ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy); } } -static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1) +static bool32 GetGnameWonderFlagByLinkGroup(struct GFtgtGname * gname, s16 linkGroup) { - if (arg1 == 7) + if (linkGroup == LINK_GROUP_WONDER_CARD) { - if (!arg0->unk_00.unk_00_5) + if (!gname->unk_00.hasCard) { return FALSE; } @@ -3590,9 +3726,9 @@ static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1) return TRUE; } } - else if (arg1 == 8) + else if (linkGroup == LINK_GROUP_WONDER_NEWS) { - if (!arg0->unk_00.unk_00_4) + if (!gname->unk_00.hasNews) { return FALSE; } @@ -3607,40 +3743,40 @@ static bool32 sub_8119FB0(struct GFtgtGname * arg0, s16 arg1) } } -static void sub_8119FD8(u8 taskId) +static void Task_ListenForPartnersWithSerial7F7D(u8 taskId) { s32 i; struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; i++) { - if (sub_80FCCF4(&ptr[0]->arr[i].unk0.gname, ptr[0]->arr[i].unk0.playerName, i)) + if (LinkRfu_GetNameIfSerial7F7D(&ptr[0]->arr[i].gname_uname.gname, ptr[0]->arr[i].gname_uname.uname, i)) { - sub_8119FB0(&ptr[0]->arr[i].unk0.gname, gTasks[taskId].data[2]); + GetGnameWonderFlagByLinkGroup(&ptr[0]->arr[i].gname_uname.gname, gTasks[taskId].data[2]); } - ptr[0]->arr[i].unk18 = sub_811A694(&ptr[0]->arr[i].unk0, &gUnknown_8457034); + ptr[0]->arr[i].active = AreGnameUnameDifferent(&ptr[0]->arr[i].gname_uname, &sUnionGnameUnamePair_Dummy); } } -static u8 sub_811A054(struct UnkStruct_Main4 * a0, u32 a1) +static u8 CreateTask_ListenForPartnersWithCompatibleSerialNos(struct UnkStruct_Main4 * main4, u32 linkGroup) { - u8 taskId = CreateTask(sub_8119EB8, 0); + u8 taskId = CreateTask(Task_ListenForPartnersWithCompatibleSerialNos, 0); struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; - ptr[0] = a0; - gTasks[taskId].data[2] = a1; + ptr[0] = main4; + gTasks[taskId].data[2] = linkGroup; return taskId; } -static u8 sub_811A084(struct UnkStruct_Main4 * a0, u32 a1) +static u8 CreateTask_ListenForPartnersWithSerial7F7D(struct UnkStruct_Main4 * main4, u32 linkGroup) { - u8 taskId = CreateTask(sub_8119FD8, 0); + u8 taskId = CreateTask(Task_ListenForPartnersWithSerial7F7D, 0); struct UnkStruct_Main4 ** ptr = (void*) gTasks[taskId].data; - ptr[0] = a0; - gTasks[taskId].data[2] = a1; + ptr[0] = main4; + gTasks[taskId].data[2] = linkGroup; return taskId; } -static bool32 sub_811A0B4(const u8 *src) +static bool32 UR_PrintFieldMessage(const u8 *src) { LoadStdWindowFrameGfx(); DrawDialogueFrame(0, 1); @@ -3649,7 +3785,7 @@ static bool32 sub_811A0B4(const u8 *src) return FALSE; } -static bool32 sub_811A0E0(void) +static bool32 UR_RunTextPrinters_CheckPrinter0Active(void) { if (!RunTextPrinters_CheckPrinter0Active()) { @@ -3683,31 +3819,31 @@ static bool8 PrintOnTextbox(u8 *textState, const u8 *str) return FALSE; } -static s8 sub_811A14C(u8 *arg0, bool32 arg1) +static s8 UnionRoomHandleYesNo(u8 *state_p, bool32 no_draw) { s8 r1; - switch (*arg0) + switch (*state_p) { case 0: - if (arg1) + if (no_draw) { return -3; } DisplayYesNoMenuDefaultYes(); - (*arg0)++; + (*state_p)++; break; case 1: - if (arg1) + if (no_draw) { DestroyYesNoMenu(); - *arg0 = 0; + *state_p = 0; return -3; } r1 = Menu_ProcessInputNoWrapClearOnChoose(); if (r1 == -1 || r1 == 0 || r1 == 1) { - *arg0 = 0; + *state_p = 0; return r1; } break; @@ -3715,54 +3851,54 @@ static s8 sub_811A14C(u8 *arg0, bool32 arg1) return -2; } -static u8 sub_811A1AC(const struct WindowTemplate * template) +static u8 CreateTradeBoardWindow(const struct WindowTemplate * template) { u8 windowId = AddWindow(template); DrawStdWindowFrame(windowId, FALSE); FillWindowPixelBuffer(windowId, PIXEL_FILL(15)); - sub_811A444(windowId, 0, gUnknown_8459378, 8, 1, 6); + UR_AddTextPrinterParameterized(windowId, 0, gUnknown_8459378, 8, 1, UR_COLOR_DN5_DN6_LTB); PutWindowTilemap(windowId); CopyWindowToVram(windowId, 2); return windowId; } -static void sub_811A1FC(u8 windowId) +static void DeleteTradeBoardWindow(u8 windowId) { ClearStdWindowAndFrame(windowId, TRUE); RemoveWindow(windowId); } -static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate) +static s32 ListMenuHandler_AllItemsAvailable(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate) { - s32 r1, r8; + s32 input; - switch (*arg0) + switch (*state_p) { case 0: - *arg1 = AddWindow(winTemplate); - DrawStdWindowFrame(*arg1, FALSE); + *win_id_p = AddWindow(winTemplate); + DrawStdWindowFrame(*win_id_p, FALSE); gMultiuseListMenuTemplate = *menuTemplate; - gMultiuseListMenuTemplate.windowId = *arg1; - *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - CopyWindowToVram(*arg1, TRUE); - (*arg0)++; + gMultiuseListMenuTemplate.windowId = *win_id_p; + *list_menu_id_p = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + CopyWindowToVram(*win_id_p, TRUE); + (*state_p)++; break; case 1: - r8 = ListMenu_ProcessInput(*arg2); + input = ListMenu_ProcessInput(*list_menu_id_p); if (JOY_NEW(A_BUTTON)) { - DestroyListMenuTask(*arg2, NULL, NULL); - ClearStdWindowAndFrame(*arg1, TRUE); - RemoveWindow(*arg1); - *arg0 = 0; - return r8; + DestroyListMenuTask(*list_menu_id_p, NULL, NULL); + ClearStdWindowAndFrame(*win_id_p, TRUE); + RemoveWindow(*win_id_p); + *state_p = 0; + return input; } else if (JOY_NEW(B_BUTTON)) { - DestroyListMenuTask(*arg2, NULL, NULL); - ClearStdWindowAndFrame(*arg1, TRUE); - RemoveWindow(*arg1); - *arg0 = 0; + DestroyListMenuTask(*list_menu_id_p, NULL, NULL); + ClearStdWindowAndFrame(*win_id_p, TRUE); + RemoveWindow(*win_id_p); + *state_p = 0; return -2; } break; @@ -3771,46 +3907,46 @@ static s32 sub_811A218(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate return -1; } -static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * arg6) +static s32 TradeBoardMenuHandler(u8 *state_p, u8 *win_id_p, u8 *list_menu_id_p, u8 *trade_board_win_id_p, const struct WindowTemplate * winTemplate, const struct ListMenuTemplate * menuTemplate, struct UnkStruct_Main0 * traders) { s32 input; s32 r4; - switch (*arg0) + switch (*state_p) { case 0: - *arg3 = sub_811A1AC(&gUnknown_8456F1C); - *arg1 = AddWindow(winTemplate); - DrawStdWindowFrame(*arg1, FALSE); + *trade_board_win_id_p = CreateTradeBoardWindow(&sTradeBoardWindowTemplate); + *win_id_p = AddWindow(winTemplate); + DrawStdWindowFrame(*win_id_p, FALSE); gMultiuseListMenuTemplate = *menuTemplate; - gMultiuseListMenuTemplate.windowId = *arg1; - *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1); - CopyWindowToVram(*arg1, TRUE); - (*arg0)++; + gMultiuseListMenuTemplate.windowId = *win_id_p; + *list_menu_id_p = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1); + CopyWindowToVram(*win_id_p, TRUE); + (*state_p)++; break; case 1: - input = ListMenu_ProcessInput(*arg2); + input = ListMenu_ProcessInput(*list_menu_id_p); if (JOY_NEW(A_BUTTON | B_BUTTON)) { - if (input == 8 || JOY_NEW(B_BUTTON)) + if (input == UROOM_MAX_GROUP_COUNT || JOY_NEW(B_BUTTON)) { - DestroyListMenuTask(*arg2, NULL, NULL); - ClearStdWindowAndFrame(*arg1, TRUE); - RemoveWindow(*arg1); - sub_811A1FC(*arg3); - *arg0 = 0; + DestroyListMenuTask(*list_menu_id_p, NULL, NULL); + ClearStdWindowAndFrame(*win_id_p, TRUE); + RemoveWindow(*win_id_p); + DeleteTradeBoardWindow(*trade_board_win_id_p); + *state_p = 0; return -2; } else { - r4 = sub_811AD7C(arg6->arr, input); + r4 = GetIndexOfNthTradeBoardOffer(traders->arr, input); if (r4 >= 0) { - DestroyListMenuTask(*arg2, NULL, NULL); - ClearStdWindowAndFrame(*arg1, TRUE); - RemoveWindow(*arg1); - sub_811A1FC(*arg3); - *arg0 = 0; + DestroyListMenuTask(*list_menu_id_p, NULL, NULL); + ClearStdWindowAndFrame(*win_id_p, TRUE); + RemoveWindow(*win_id_p); + DeleteTradeBoardWindow(*trade_board_win_id_p); + *state_p = 0; return r4; } else @@ -3825,20 +3961,20 @@ static s32 sub_811A2EC(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct Wind return -1; } -static void sub_811A3F8(void) +static void UR_BlankBg0(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); CopyBgTilemapBufferToVram(0); } -static void sub_811A41C(void) +static void JoinGroup_BlankBg0AndEnableScriptContexts(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); CopyBgTilemapBufferToVram(0); EnableBothScriptContexts(); } -static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) +static void UR_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 colorIdx) { struct TextPrinterTemplate printerTemplate; @@ -3854,100 +3990,100 @@ static void sub_811A444(u8 windowId, u8 fontId, const u8 *str, u8 x, u8 y, u8 co gTextFlags.useAlternateDownArrow = FALSE; switch (colorIdx) { - case 0: + case UR_COLOR_DKE_WHT_LTE: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.fgColor = 2; - printerTemplate.bgColor = 1; - printerTemplate.shadowColor = 3; + printerTemplate.fgColor = TEXT_COLOR_DARK_GREY; + printerTemplate.bgColor = TEXT_COLOR_WHITE; + printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREY; break; - case 1: + case UR_COLOR_RED_WHT_LTR: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.fgColor = 4; - printerTemplate.bgColor = 1; - printerTemplate.shadowColor = 5; + printerTemplate.fgColor = TEXT_COLOR_RED; + printerTemplate.bgColor = TEXT_COLOR_WHITE; + printerTemplate.shadowColor = TEXT_COLOR_LIGHT_RED; break; - case 2: + case UR_COLOR_GRN_WHT_LTG: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.fgColor = 6; - printerTemplate.bgColor = 1; - printerTemplate.shadowColor = 7; + printerTemplate.fgColor = TEXT_COLOR_GREEN; + printerTemplate.bgColor = TEXT_COLOR_WHITE; + printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREEN; break; - case 3: + case UR_COLOR_WHT_WHT_LTE: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.fgColor = 1; - printerTemplate.bgColor = 1; - printerTemplate.shadowColor = 3; + printerTemplate.fgColor = TEXT_COLOR_WHITE; + printerTemplate.bgColor = TEXT_COLOR_WHITE; + printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREY; break; - case 4: + case UR_COLOR_WHT_DKE_LTE: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.fgColor = 1; - printerTemplate.bgColor = 2; - printerTemplate.shadowColor = 3; + printerTemplate.fgColor = TEXT_COLOR_WHITE; + printerTemplate.bgColor = TEXT_COLOR_DARK_GREY; + printerTemplate.shadowColor = TEXT_COLOR_LIGHT_GREY; break; - case 5: + case UR_COLOR_GRN_DN6_LTB: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.fgColor = 7; - printerTemplate.bgColor = 15; - printerTemplate.shadowColor = 9; + printerTemplate.fgColor = TEXT_COLOR_LIGHT_GREEN; + printerTemplate.bgColor = TEXT_DYNAMIC_COLOR_6; + printerTemplate.shadowColor = TEXT_COLOR_LIGHT_BLUE; break; - case 6: + case UR_COLOR_DN5_DN6_LTB: printerTemplate.letterSpacing = 0; printerTemplate.lineSpacing = 0; - printerTemplate.fgColor = 14; - printerTemplate.bgColor = 15; - printerTemplate.shadowColor = 9; + printerTemplate.fgColor = TEXT_DYNAMIC_COLOR_5; + printerTemplate.bgColor = TEXT_DYNAMIC_COLOR_6; + printerTemplate.shadowColor = TEXT_COLOR_LIGHT_BLUE; break; } AddTextPrinter(&printerTemplate, 0xFF, NULL); } -static void sub_811A5E4(struct UnkStruct_x20 * arg0, u8 count) +static void BlankUnkStruct_x20Array(struct UnkStruct_x20 * x20arr, u8 count) { s32 i; for (i = 0; i < count; i++) { - arg0[i].unk = gUnknown_8457034; - arg0[i].field_18 = 0xFF; - arg0[i].field_1A_0 = 0; - arg0[i].field_1A_1 = 0; - arg0[i].field_1B = 0; + x20arr[i].gname_uname = sUnionGnameUnamePair_Dummy; + x20arr[i].field_18 = 0xFF; + x20arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_NONE; + x20arr[i].field_1A_1 = FALSE; + x20arr[i].field_1B = 0; } } -static void sub_811A650(struct UnkStruct_x1C * arg0, u8 count) +static void BlankUnkStruct_x1CArray(struct UnkStruct_x1C * x1Carr, u8 count) { s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; i++) { - arg0[i].unk0 = gUnknown_8457034; - arg0[i].unk18 = 0; + x1Carr[i].gname_uname = sUnionGnameUnamePair_Dummy; + x1Carr[i].active = FALSE; } } -static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_Shared * arg1) +static bool8 AreGnameUnameDifferent(struct UnionGnameUnamePair * left, const struct UnionGnameUnamePair * right) { s32 i; for (i = 0; i < 2; i++) { - if (arg0->gname.unk_00.playerTrainerId[i] != arg1->gname.unk_00.playerTrainerId[i]) + if (left->gname.unk_00.playerTrainerId[i] != right->gname.unk_00.playerTrainerId[i]) { return TRUE; } } - for (i = 0; i < 8; i++) + for (i = 0; i < RFU_USER_NAME_LENGTH; i++) { - if (arg0->playerName[i] != arg1->playerName[i]) + if (left->uname[i] != right->uname[i]) { return TRUE; } @@ -3956,34 +4092,34 @@ static bool8 sub_811A694(struct UnkStruct_Shared * arg0, const struct UnkStruct_ return FALSE; } -static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Shared * arg1) +static bool32 AreUnionRoomPlayerGnamesDifferent(struct UnionGnameUnamePair * left, struct UnionGnameUnamePair * right) { s32 i; - if (arg0->gname.unk_0a_0 != arg1->gname.unk_0a_0) + if (left->gname.activity != right->gname.activity) { return TRUE; } - if (arg0->gname.unk_0a_7 != arg1->gname.unk_0a_7) + if (left->gname.started != right->gname.started) { return TRUE; } - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; i++) { - if (arg0->gname.unk_04[i] != arg1->gname.unk_04[i]) + if (left->gname.child_sprite_gender[i] != right->gname.child_sprite_gender[i]) { return TRUE; } } - if (arg0->gname.species != arg1->gname.species) + if (left->gname.species != right->gname.species) { return TRUE; } - if (arg0->gname.type != arg1->gname.type) + if (left->gname.type != right->gname.type) { return TRUE; } @@ -3991,38 +4127,38 @@ static bool32 sub_811A6DC(struct UnkStruct_Shared * arg0, struct UnkStruct_Share return FALSE; } -static u32 sub_811A748(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1) +static u32 Findx20Inx1CArray(struct UnkStruct_x20 * x20, struct UnkStruct_x1C * x1Carr) { u8 result = 0xFF; s32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; i++) { - if (arg1[i].unk18 && !sub_811A694(&arg0->unk, &arg1[i].unk0)) + if (x1Carr[i].active && !AreGnameUnameDifferent(&x20->gname_uname, &x1Carr[i].gname_uname)) { result = i; - arg1[i].unk18 = FALSE; + x1Carr[i].active = FALSE; } } return result; } -static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, u8 arg2) +static u8 Appendx1Ctox20(struct UnkStruct_x20 * x20arr, struct UnkStruct_x1C * x1C, u8 count) { s32 i; - if (arg1->unk18) + if (x1C->active) { - for (i = 0; i < arg2; i++) + for (i = 0; i < count; i++) { - if (arg0[i].field_1A_0 == 0) + if (x20arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_NONE) { - arg0[i].unk = arg1->unk0; - arg0[i].field_18 = 0; - arg0[i].field_1A_0 = 1; - arg0[i].field_1B = 64; - arg1->unk18 = FALSE; + x20arr[i].gname_uname = x1C->gname_uname; + x20arr[i].field_18 = 0; + x20arr[i].groupScheduledAnim = UNION_ROOM_SPAWN_IN; + x20arr[i].field_1B = 0x40; + x1C->active = FALSE; return i; } } @@ -4031,47 +4167,47 @@ static u8 sub_811A798(struct UnkStruct_x20 * arg0, struct UnkStruct_x1C * arg1, return 0xFF; } -static void sub_811A81C(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 * arg3, u8 arg4, u8 id) +static void PrintUnionRoomGroupOnWindow(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id) { - u8 r2; - u8 sp0[6]; - u8 sp10[30]; + u8 activity; + u8 id_str[6]; + u8 uname[30]; ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2); StringAppend(gStringVar4, gUnknown_84571B0); - sub_811A444(arg0, 0, gStringVar4, arg1, arg2, 0); - arg1 += 18; - r2 = arg3->unk.gname.unk_0a_0; - if (arg3->field_1A_0 == 1 && !(r2 & 0x40)) + UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, UR_COLOR_DKE_WHT_LTE); + x += 18; + activity = group->gname_uname.gname.activity; + if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN && !(activity & IN_UNION_ROOM)) { - IntlConvPartnerUname(sp10, *arg3); - sub_811A444(arg0, 2, sp10, arg1, arg2, arg4); - ConvertIntToDecimalStringN(sp0, arg3->unk.gname.unk_00.playerTrainerId[0] | (arg3->unk.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + IntlConvPartnerUname(uname, *group); + UR_AddTextPrinterParameterized(windowId, 2, uname, x, y, colorIdx); + ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gUnknown_84571B4); - StringAppend(gStringVar4, sp0); - arg1 += 77; - sub_811A444(arg0, 0, gStringVar4, arg1, arg2, arg4); + StringAppend(gStringVar4, id_str); + x += 77; + UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, colorIdx); } } -static void sub_811A910(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * arg3, u8 arg4, u8 id) +static void PrintGroupMemberCandidateOnWindowWithColor(u8 windowId, u8 x, u8 y, struct UnkStruct_x20 * group, u8 colorIdx, u8 id) { - u8 sp0[6]; - u8 sp10[30]; + u8 id_str[6]; + u8 uname[30]; - if (arg3->field_1A_0 == 1) + if (group->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - IntlConvPartnerUname(sp10, *arg3); - sub_811A444(windowId, 2, sp10, x, y, arg4); - ConvertIntToDecimalStringN(sp0, arg3->unk.gname.unk_00.playerTrainerId[0] | (arg3->unk.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + IntlConvPartnerUname(uname, *group); + UR_AddTextPrinterParameterized(windowId, 2, uname, x, y, colorIdx); + ConvertIntToDecimalStringN(id_str, group->gname_uname.gname.unk_00.playerTrainerId[0] | (group->gname_uname.gname.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); StringCopy(gStringVar4, gUnknown_84571B4); - StringAppend(gStringVar4, sp0); + StringAppend(gStringVar4, id_str); x += 71; - sub_811A444(windowId, 0, gStringVar4, x, y, arg4); + UR_AddTextPrinterParameterized(windowId, 0, gStringVar4, x, y, colorIdx); } } -static bool32 sub_811A9B8(void) +static bool32 PlayerIsTalkingToUnionRoomAide(void) { s16 x, y; GetXYCoordsOneStepInFrontOfPlayer(&x, &y); @@ -4091,72 +4227,77 @@ static bool32 sub_811A9B8(void) return FALSE; } -static u32 sub_811A9FC(s32 arg0) +static u32 GetResponseIdx_InviteToURoomActivity(s32 activity) { - switch (arg0) + switch (activity) { - case 5: + case ACTIVITY_CHAT: return 1; - case 4: + case ACTIVITY_TRADE: return 2; - case 8: + case ACTIVITY_CARD: return 3; - case 3: + case ACTIVITY_MLTBATTLE: default: return 0; } } -static u32 sub_811AA24(struct UnkStruct_x20 * arg0) +static u32 ConvPartnerUnameAndGetWhetherMetAlready(struct UnkStruct_x20 * x20) { u8 sp0[30]; - IntlConvPartnerUname(sp0, *arg0); - return PlayerHasMetTrainerBefore(ReadAsU16(arg0->unk.gname.unk_00.playerTrainerId), sp0); + IntlConvPartnerUname(sp0, *x20); + return PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.unk_00.playerTrainerId), sp0); } -static s32 sub_811AA5C(struct UnkStruct_Main0 * arg0, u8 arg1, u8 arg2, u32 playerGender) +static s32 UnionRoomGetPlayerInteractionResponse(struct UnkStruct_Main0 * main0, u8 overrideGender, u8 playerIdx, u32 playerGender) { - bool32 r2; + bool32 metBefore; - struct UnkStruct_x20 * r5 = &arg0->arr[arg2]; + struct UnkStruct_x20 * x20 = &main0->arr[playerIdx]; - if (!r5->unk.gname.unk_0a_7 && arg1 == 0) + if (!x20->gname_uname.gname.started && overrideGender == 0) { - IntlConvPartnerUname(gStringVar1, *r5); - r2 = PlayerHasMetTrainerBefore(ReadAsU16(r5->unk.gname.unk_00.playerTrainerId), gStringVar1); - if (r5->unk.gname.unk_0a_0 == 0x45) + IntlConvPartnerUname(gStringVar1, *x20); + metBefore = PlayerHasMetTrainerBefore(ReadAsU16(x20->gname_uname.gname.unk_00.playerTrainerId), gStringVar1); + if (x20->gname_uname.gname.activity == (ACTIVITY_CHAT | IN_UNION_ROOM)) { - StringExpandPlaceholders(gStringVar4, gUnknown_8457F80[r2][playerGender]); + StringExpandPlaceholders(gStringVar4, gUnknown_8457F80[metBefore][playerGender]); return 2; } else { - sub_811A0B4(gUnknown_8457A34[r2]); + UR_PrintFieldMessage(gURText_PleaseWaitMsgs[metBefore]); return 1; } } else { - IntlConvPartnerUname(gStringVar1, *r5); - if (arg1 != 0) + IntlConvPartnerUname(gStringVar1, *x20); + if (overrideGender != 0) { - playerGender = (r5->unk.gname.unk_00.playerTrainerId[arg1 + 1] >> 3) & 1; + playerGender = (x20->gname_uname.gname.unk_00.playerTrainerId[overrideGender + 1] >> 3) & 1; } - switch (r5->unk.gname.unk_0a_0 & 0x3F) + switch (x20->gname_uname.gname.activity & 0x3F) { - case 1: + case ACTIVITY_BATTLE: + // Battling StringExpandPlaceholders(gStringVar4, gUnknown_8458758[playerGender][Random() % 4]); break; - case 4: + case ACTIVITY_TRADE: + // Trading StringExpandPlaceholders(gStringVar4, gUnknown_8458A78[playerGender][Random() % 2]); break; - case 5: + case ACTIVITY_CHAT: + // Chatting StringExpandPlaceholders(gStringVar4, gUnknown_84588BC[playerGender][Random() % 4]); break; - case 8: + case ACTIVITY_CARD: + // Sharing cards StringExpandPlaceholders(gStringVar4, gUnknown_84589AC[playerGender][Random() % 2]); break; default: + // Unknown StringExpandPlaceholders(gStringVar4, gUnknown_8457F90); break; } @@ -4169,73 +4310,73 @@ static void nullsub_92(u8 windowId, s32 itemId, u8 y) } -static void sub_811ABE4(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx) +static void TradeBoardPrintItemInfo(u8 windowId, u8 y, struct GFtgtGname * gname, const u8 * uname, u8 colorIdx) { u8 level_t[4]; u16 species = gname->species; u8 type = gname->type; u8 level = gname->level; - sub_811A444(windowId, 2, uname, 8, y, colorIdx); + UR_AddTextPrinterParameterized(windowId, 2, uname, 8, y, colorIdx); if (species == SPECIES_EGG) { - sub_811A444(windowId, 2, gUnknown_8458FBC, 0x44, y, colorIdx); + UR_AddTextPrinterParameterized(windowId, 2, gText_EggTrade, 0x44, y, colorIdx); } else { BlitMoveInfoIcon(windowId, type + 1, 0x44, y); - sub_811A444(windowId, 2, gSpeciesNames[species], 0x76, y, colorIdx); + UR_AddTextPrinterParameterized(windowId, 2, gSpeciesNames[species], 0x76, y, colorIdx); ConvertIntToDecimalStringN(level_t, level, STR_CONV_MODE_LEFT_ALIGN, 3); - sub_811A444(windowId, 2, level_t, GetStringRightAlignXOffset(2, level_t, 218), y, colorIdx); + UR_AddTextPrinterParameterized(windowId, 2, level_t, GetStringRightAlignXOffset(2, level_t, 218), y, colorIdx); } } -static void sub_811ACA4(u8 windowId, s32 itemId, u8 y) +static void TradeBoardListMenuItemPrintFunc(u8 windowId, s32 itemId, u8 y) { struct UnkStruct_Leader * leader = sUnionRoomMain.leader; struct GFtgtGname * rfu; s32 i, j; - u8 uname[8]; + u8 uname[RFU_USER_NAME_LENGTH]; - if (itemId == -3 && y == gUnknown_8456F7C.upText_Y) + if (itemId == -3 && y == sTradeBoardListMenuTemplate.upText_Y) { - rfu = sub_80F9800(); + rfu = GetHostRFUtgtGname(); if (rfu->species != SPECIES_NONE) { - sub_811ABE4(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5); + TradeBoardPrintItemInfo(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5); } } else { j = 0; - for (i = 0; i < 8; i++) + for (i = 0; i < UROOM_MAX_GROUP_COUNT; i++) { - if (leader->field_0->arr[i].field_1A_0 == 1 && leader->field_0->arr[i].unk.gname.species != SPECIES_NONE) + if (leader->field_0->arr[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && leader->field_0->arr[i].gname_uname.gname.species != SPECIES_NONE) { j++; } if (j == itemId + 1) { IntlConvPartnerUname(uname, leader->field_0->arr[i]); - sub_811ABE4(windowId, y, &leader->field_0->arr[i].unk.gname, uname, 6); + TradeBoardPrintItemInfo(windowId, y, &leader->field_0->arr[i].gname_uname.gname, uname, 6); break; } } } } -static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1) +static s32 GetIndexOfNthTradeBoardOffer(struct UnkStruct_x20 * x20, s32 n) { s32 i; s32 j = 0; - for (i = 0; i < 8; i++) + for (i = 0; i < UROOM_MAX_GROUP_COUNT; i++) { - if (arg[i].field_1A_0 == 1 && arg[i].unk.gname.species != SPECIES_NONE) + if (x20[i].groupScheduledAnim == UNION_ROOM_SPAWN_IN && x20[i].gname_uname.gname.species != SPECIES_NONE) { j++; } - if (j == arg1 + 1) + if (j == n + 1) { return i; } @@ -4244,12 +4385,12 @@ static s32 sub_811AD7C(struct UnkStruct_x20 * arg, s32 arg1) return -1; } -static s32 GetUnionRoomPlayerGender(s32 arg1, struct UnkStruct_Main0 * arg0) +static s32 GetUnionRoomPlayerGender(s32 playerIdx, struct UnkStruct_Main0 * main0) { - return arg0->arr[arg1].unk.gname.playerGender; + return main0->arr[playerIdx].gname_uname.gname.playerGender; } -static s32 sub_811ADD0(u32 type, u32 species) +static s32 IsRequestedTypeAndSpeciesInPlayerParty(u32 type, u32 species) { s32 i; @@ -4260,10 +4401,10 @@ static s32 sub_811ADD0(u32 type, u32 species) species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); if (species == SPECIES_EGG) { - return 0; + return UR_TRADE_MATCH; } } - return 2; + return UR_TRADE_NOEGG; } else { @@ -4272,77 +4413,77 @@ static s32 sub_811ADD0(u32 type, u32 species) species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type) { - return 0; + return UR_TRADE_MATCH; } } - return 1; + return UR_TRADE_NOTYPE; } } -static void sub_811AE68(u8 *dst, s32 arg1, u32 playerGender) +static void GetURoomActivityRejectMsg(u8 *dst, s32 activity, u32 playerGender) { - switch (arg1) + switch (activity) { - case 0x41: + case ACTIVITY_BATTLE | IN_UNION_ROOM: StringExpandPlaceholders(dst, gUnknown_8458314[playerGender]); break; - case 0x45: + case ACTIVITY_CHAT | IN_UNION_ROOM: StringExpandPlaceholders(dst, gUnknown_84585E8[playerGender]); break; - case 0x44: + case ACTIVITY_TRADE | IN_UNION_ROOM: StringExpandPlaceholders(dst, gUnknown_8458F9C); break; - case 0x48: + case ACTIVITY_CARD | IN_UNION_ROOM: StringExpandPlaceholders(dst, gUnknown_84583B4[playerGender]); break; } } -static void sub_811AECC(u8 *dst, u8 arg1) +static void GetURoomActivityStartMsg(u8 *dst, u8 activity) { u8 mpId = GetMultiplayerId(); u8 gender = gLinkPlayers[mpId ^ 1].gender; - switch (arg1) + switch (activity) { - case 0x41: + case ACTIVITY_BATTLE | IN_UNION_ROOM: StringCopy(dst, gUnknown_8458230[mpId][gender][0]); break; - case 0x44: + case ACTIVITY_TRADE | IN_UNION_ROOM: StringCopy(dst, gUnknown_8458230[mpId][gender][2]); break; - case 0x45: + case ACTIVITY_CHAT | IN_UNION_ROOM: StringCopy(dst, gUnknown_8458230[mpId][gender][1]); break; } } -static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * arg3) +static s32 GetChatLeaderActionRequestMessage(u8 *dst, u32 gender, u16 *activity_p, struct UnkStruct_URoom * arg3) { s32 result = 0; u16 species = SPECIES_NONE; s32 i; - switch (arg2[0]) + switch (activity_p[0]) { - case 0x41: + case ACTIVITY_BATTLE | IN_UNION_ROOM: StringExpandPlaceholders(dst, gUnknown_8457CA4); result = 1; break; - case 0x45: + case ACTIVITY_CHAT | IN_UNION_ROOM: StringExpandPlaceholders(dst, gUnknown_8457CF8); result = 1; break; - case 0x44: - ConvertIntToDecimalStringN(arg3->field_58[0], sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3); - StringCopy(arg3->field_58[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]); - for (i = 0; i < 4; i++) + case ACTIVITY_TRADE | IN_UNION_ROOM: + ConvertIntToDecimalStringN(arg3->activityRequestStrbufs[0], sUnionRoomTrade.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(arg3->activityRequestStrbufs[1], gSpeciesNames[sUnionRoomTrade.playerSpecies]); + for (i = 0; i < RFU_CHILD_MAX; i++) { - if (gRfuLinkStatus->partner[i].serialNo == 2) + if (gRfuLinkStatus->partner[i].serialNo == 0x0002) { - ConvertIntToDecimalStringN(arg3->field_58[2], arg2[2], STR_CONV_MODE_LEFT_ALIGN, 3); - StringCopy(arg3->field_58[3], gSpeciesNames[arg2[1]]); - species = arg2[1]; + ConvertIntToDecimalStringN(arg3->activityRequestStrbufs[2], activity_p[2], STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(arg3->activityRequestStrbufs[3], gSpeciesNames[activity_p[1]]); + species = activity_p[1]; break; } } @@ -4352,19 +4493,20 @@ static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * } else { - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; i++) { - DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->field_58[i]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->activityRequestStrbufs[i]); } DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, gUnknown_8457D44); } result = 1; break; - case 0x48: + case ACTIVITY_CARD | IN_UNION_ROOM: StringExpandPlaceholders(dst, gUnknown_8457C48); result = 1; break; - case 0x40: + case IN_UNION_ROOM: + // Chat dropped StringExpandPlaceholders(dst, gUnknown_8457E0C); result = 2; break; @@ -4373,18 +4515,18 @@ static s32 sub_811AF6C(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom * return result; } -static bool32 sub_811B0A4(struct UnkStruct_URoom * arg0) +static bool32 PollPartnerYesNoResponse(struct UnkStruct_URoom * uroom) { if (gRecvCmds[0][1] != 0) { - if (gRecvCmds[0][1] == 0x51) + if (gRecvCmds[0][1] == (ACTIVITY_ACCEPT | IN_UNION_ROOM)) { - arg0->field_98 = 0x51; + uroom->partnerYesNoResponse = ACTIVITY_ACCEPT | IN_UNION_ROOM; return TRUE; } - else if (gRecvCmds[0][1] == 0x52) + else if (gRecvCmds[0][1] == (ACTIVITY_DECLINE | IN_UNION_ROOM)) { - arg0->field_98 = 0x52; + uroom->partnerYesNoResponse = ACTIVITY_DECLINE | IN_UNION_ROOM; return TRUE; } } @@ -4418,16 +4560,16 @@ static bool32 HasAtLeastTwoMonsOfLevel30OrLower(void) return FALSE; } -static void ResetUnionRoomTrade(struct UnionRoomTrade * arg0) +static void ResetUnionRoomTrade(struct UnionRoomTrade * uroomTrade) { - arg0->field_0 = 0; - arg0->type = 0; - arg0->playerPersonality = 0; - arg0->playerSpecies = 0; - arg0->playerLevel = 0; - arg0->species = 0; - arg0->level = 0; - arg0->personality = 0; + uroomTrade->field_0 = 0; + uroomTrade->type = 0; + uroomTrade->playerPersonality = 0; + uroomTrade->playerSpecies = 0; + uroomTrade->playerLevel = 0; + uroomTrade->species = 0; + uroomTrade->level = 0; + uroomTrade->personality = 0; } void Script_ResetUnionRoomTrade(void) @@ -4494,26 +4636,26 @@ static u32 GetPartyPositionOfRegisteredMon(struct UnionRoomTrade * trade, u8 mul return response; } -static void sub_811B258(bool32 arg0) +static void HandleCancelTrade(bool32 unlockObjs) { - sub_811A3F8(); + UR_BlankBg0(); ScriptContext2_Disable(); - sub_80696F0(); - gUnknown_203B058 = 0; - if (arg0) + UnionRoom_UnlockPlayerAndChatPartner(); + sPlayerCurrActivity = 0; + if (unlockObjs) { - sub_80FAFA0(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); - sub_80FB008(0x40, 0, 0); + RfuUpdatePlayerGnameStateAndSend(sUnionRoomTrade.type, sUnionRoomTrade.playerSpecies, sUnionRoomTrade.playerLevel); + UpdateGameDataWithActivitySpriteGendersFlag(IN_UNION_ROOM, 0, FALSE); } } -static void sub_811B298(void) +static void UR_EnableScriptContext2AndFreezeObjectEvents(void) { ScriptContext2_Enable(); ScriptFreezeObjectEvents(); } -static u8 sub_811B2A8(s32 linkPlayer) +static u8 GetSinglePartnerSpriteGenderParam(s32 linkPlayer) { u8 retval = 0x80; retval |= gLinkPlayers[linkPlayer].gender << 3; @@ -4521,17 +4663,17 @@ static u8 sub_811B2A8(s32 linkPlayer) return retval; } -static u8 sub_811B2D8(struct UnkStruct_URoom * arg0) +static u8 GetActivePartnerSpriteGenderParam(struct UnkStruct_URoom * uroom) { u8 retVal = 0x80; u8 i; - for (i = 0; i < 4; i++) + for (i = 0; i < RFU_CHILD_MAX; i++) { - if (arg0->field_C->arr[i].unk18) + if (uroom->field_C->arr[i].active) { - retVal |= arg0->field_C->arr[i].unk0.gname.playerGender << 3; - retVal |= arg0->field_C->arr[i].unk0.gname.unk_00.playerTrainerId[0] & 7; + retVal |= uroom->field_C->arr[i].gname_uname.gname.playerGender << 3; + retVal |= uroom->field_C->arr[i].gname_uname.gname.unk_00.playerTrainerId[0] & 7; break; } } @@ -4539,7 +4681,7 @@ static u8 sub_811B2D8(struct UnkStruct_URoom * arg0) return retVal; } -static void sub_811B31C(u8 *unused, struct UnkStruct_URoom * arg1, bool8 arg2) +static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uroom, bool8 parent_child) { struct TrainerCard * trainerCard = &gTrainerCards[GetMultiplayerId() ^ 1]; s32 i; @@ -4547,61 +4689,61 @@ static void sub_811B31C(u8 *unused, struct UnkStruct_URoom * arg1, bool8 arg2) DynamicPlaceholderTextUtil_Reset(); - StringCopy(arg1->trainerCardStrbufs[0], gTrainerClassNames[sub_80447F0()]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->trainerCardStrbufs[0]); + StringCopy(uroom->trainerCardStrbufs[0], gTrainerClassNames[sub_80447F0()]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName); - StringCopy(arg1->field_174, gUnknown_84594B0[trainerCard->stars]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_174); + StringCopy(uroom->field_174, gUnknown_84594B0[trainerCard->stars]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->field_174); - ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->trainerCardStrbufs[2]); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]); - ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); - ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, arg1->trainerCardStrbufs[3]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, arg1->trainerCardStrbufs[4]); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, uroom->trainerCardStrbufs[3]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, uroom->trainerCardStrbufs[4]); - DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_84594C4); - StringCopy(gStringVar4, arg1->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_84594C4); + StringCopy(gStringVar4, uroom->field_1A4); n = trainerCard->linkBattleWins; if (n > 9999) { n = 9999; } - ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->trainerCardStrbufs[0]); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]); n = trainerCard->linkBattleLosses; if (n > 9999) { n = 9999; } - ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->trainerCardStrbufs[1]); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, uroom->trainerCardStrbufs[1]); - ConvertIntToDecimalStringN(arg1->trainerCardStrbufs[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->trainerCardStrbufs[2]); + ConvertIntToDecimalStringN(uroom->trainerCardStrbufs[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, uroom->trainerCardStrbufs[2]); for (i = 0; i < 4; i++) { - CopyEasyChatWord(arg1->trainerCardStrbufs[i + 3], trainerCard->var_28[i]); - DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, arg1->trainerCardStrbufs[i + 3]); + CopyEasyChatWord(uroom->trainerCardStrbufs[i + 3], trainerCard->var_28[i]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, uroom->trainerCardStrbufs[i + 3]); } - DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459504); - StringAppend(gStringVar4, arg1->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459504); + StringAppend(gStringVar4, uroom->field_1A4); - if (arg2 == TRUE) + if (parent_child == MODE_PARENT) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459588); - StringAppend(gStringVar4, arg1->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459588); + StringAppend(gStringVar4, uroom->field_1A4); } - else if (arg2 == FALSE) + else if (parent_child == MODE_CHILD) { - DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_8459580[trainerCard->gender]); - StringAppend(gStringVar4, arg1->field_1A4); + DynamicPlaceholderTextUtil_ExpandPlaceholders(uroom->field_1A4, gUnknown_8459580[trainerCard->gender]); + StringAppend(gStringVar4, uroom->field_1A4); } } diff --git a/src/union_room_battle.c b/src/union_room_battle.c index b75cc086d..b4d8af9ce 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -13,15 +13,16 @@ #include "text_window.h" #include "union_room.h" #include "window.h" +#include "constants/union_room.h" -struct UnkStruct_203B08C +struct UnionRoomBattleWork { - s16 a0; + s16 textState; }; -static EWRAM_DATA struct UnkStruct_203B08C * gUnknown_203B08C = NULL; +static EWRAM_DATA struct UnionRoomBattleWork * sWork = NULL; -static const struct BgTemplate gUnknown_8457194[] = { +static const struct BgTemplate sBgTemplates[] = { { .bg = 0, .charBaseIndex = 3, @@ -29,7 +30,7 @@ static const struct BgTemplate gUnknown_8457194[] = { } }; -static const struct WindowTemplate gUnknown_8457198[] = { +static const struct WindowTemplate sWindowTemplates[] = { { .bg = 0, .tilemapLeft = 2, @@ -43,10 +44,10 @@ static const struct WindowTemplate gUnknown_8457198[] = { static const u8 gUnknown_84571A8[] = {1, 2, 3}; -static void sub_811C04C(void) +static void SetUpPartiesAndStartBattle(void) { s32 i; - sub_81173C0(BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER); + StartUnionRoomBattle(BATTLE_TYPE_LINK | BATTLE_TYPE_TRAINER); for (i = 0; i < 2; i++) { gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; @@ -65,7 +66,7 @@ static void sub_811C04C(void) SetMainCallback2(CB2_InitBattle); } -static void sub_811C0E0(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed) +static void UnionRoomBattle_CreateTextPrinter(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed) { s32 letterSpacing = 1; s32 lineSpacing = 1; @@ -73,13 +74,13 @@ static void sub_811C0E0(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed) AddTextPrinterParameterized4(windowId, 3, x, y, letterSpacing, lineSpacing, gUnknown_84571A8, speed, str); } -static bool32 sub_811C150(s16 * state, const u8 * str, s32 speed) +static bool32 UnionRoomBattle_PrintTextOnWindow0(s16 * state, const u8 * str, s32 speed) { switch (*state) { case 0: DrawTextBorderOuter(0, 0x001, 0xD); - sub_811C0E0(0, str, 0, 2, speed); + UnionRoomBattle_CreateTextPrinter(0, str, 0, 2, speed); PutWindowTilemap(0); CopyWindowToVram(0, 3); (*state)++; @@ -95,27 +96,27 @@ static bool32 sub_811C150(s16 * state, const u8 * str, s32 speed) return FALSE; } -static void sub_811C1B4(void) +static void VBlankCB_UnionRoomBattle(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_811C1C8(void) +void CB2_UnionRoomBattle(void) { switch (gMain.state) { case 0: SetGpuReg(REG_OFFSET_DISPCNT, 0x0000); - gUnknown_203B08C = AllocZeroed(sizeof(struct UnkStruct_203B08C)); + sWork = AllocZeroed(sizeof(struct UnionRoomBattleWork)); ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_8457194, 1); + InitBgsFromTemplates(0, sBgTemplates, 1); ResetTempTileDataBuffers(); - if (!InitWindows(gUnknown_8457198)) + if (!InitWindows(sWindowTemplates)) { return; } @@ -126,11 +127,11 @@ void sub_811C1C8(void) FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF); TextWindow_SetStdFrame0_WithPal(0, 1, 0xD0); Menu_LoadStdPal(); - SetVBlankCallback(sub_811C1B4); + SetVBlankCallback(VBlankCB_UnionRoomBattle); gMain.state++; break; case 1: - if (sub_811C150(&gUnknown_203B08C->a0, gText_CommStandbyAwaitingOtherPlayer, 0)) + if (UnionRoomBattle_PrintTextOnWindow0(&sWork->textState, gText_CommStandbyAwaitingOtherPlayer, 0)) { gMain.state++; } @@ -146,11 +147,11 @@ void sub_811C1C8(void) memset(gBlockSendBuffer, 0, 0x20); if (gSelectedOrderFromParty[0] == -gSelectedOrderFromParty[1]) { - gBlockSendBuffer[0] = 0x52; + gBlockSendBuffer[0] = ACTIVITY_DECLINE | 0x40; } else { - gBlockSendBuffer[0] = 0x51; + gBlockSendBuffer[0] = ACTIVITY_ACCEPT | 0x40; } SendBlock(0, gBlockSendBuffer, 0x20); gMain.state++; @@ -159,15 +160,15 @@ void sub_811C1C8(void) case 4: if (GetBlockReceivedStatus() == 3) { - if (gBlockRecvBuffer[0][0] == 0x51 && gBlockRecvBuffer[1][0] == 0x51) + if (gBlockRecvBuffer[0][0] == (ACTIVITY_ACCEPT | 0x40) && gBlockRecvBuffer[1][0] == (ACTIVITY_ACCEPT | 0x40)) { BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gMain.state = 50; } else { - sub_800AAC0(); - if (gBlockRecvBuffer[GetMultiplayerId()][0] == 0x52) + Link_TryStartSend5FFF(); + if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | 0x40)) { gMain.state = 6; } @@ -182,14 +183,14 @@ void sub_811C1C8(void) case 50: if (!UpdatePaletteFade()) { - sub_800AB9C(); + PrepareSendLinkCmd2FFE_or_RfuCmd6600(); gMain.state++; } break; case 51: if (IsLinkTaskFinished()) { - SetMainCallback2(sub_811C04C); + SetMainCallback2(SetUpPartiesAndStartBattle); } break; case 6: @@ -199,7 +200,7 @@ void sub_811C1C8(void) } break; case 7: - if (sub_811C150(&gUnknown_203B08C->a0, gText_RefusedBattle, 1)) + if (UnionRoomBattle_PrintTextOnWindow0(&sWork->textState, gText_RefusedBattle, 1)) { SetMainCallback2(CB2_ReturnToField); } @@ -211,7 +212,7 @@ void sub_811C1C8(void) } break; case 9: - if (sub_811C150(&gUnknown_203B08C->a0, gText_BattleWasRefused, 1)) + if (UnionRoomBattle_PrintTextOnWindow0(&sWork->textState, gText_BattleWasRefused, 1)) { SetMainCallback2(CB2_ReturnToField); } diff --git a/src/union_room_chat.c b/src/union_room_chat.c new file mode 100644 index 000000000..167da514a --- /dev/null +++ b/src/union_room_chat.c @@ -0,0 +1,1452 @@ +#include "global.h" +#include "gflib.h" +#include "dynamic_placeholder_text_util.h" +#include "help_system.h" +#include "link.h" +#include "link_rfu.h" +#include "load_save.h" +#include "menu.h" +#include "overworld.h" +#include "quest_log.h" +#include "save.h" +#include "scanline_effect.h" +#include "strings.h" +#include "task.h" +#include "union_room_chat.h" +#include "union_room_chat_display.h" +#include "data_8479668.h" +#include "constants/songs.h" + +#define MESSAGE_BUFFER_NCHAR 15 + +#define CHAT_MESSAGE_0 0 +#define CHAT_MESSAGE_CHAT 1 +#define CHAT_MESSAGE_JOIN 2 +#define CHAT_MESSAGE_LEAVE 3 +#define CHAT_MESSAGE_DROP 4 +#define CHAT_MESSAGE_DISBAND 5 + +#define CHATENTRYROUTINE_JOIN 0 +#define CHATNETRYROUTINE_HANDLE_INPUT 1 +#define CHATENTRYROUTINE_SWITCH 2 +#define CHATENTRYROUTINE_ASKQUITCHATTING 3 +#define CHATENTRYROUTINE_SEND 4 +#define CHATENTRYROUTINE_REGISTER 5 +#define CHATENTRYROUTINE_EXITCHAT 6 +#define CHATENTRYROUTINE_DROP 7 +#define CHATENTRYROUTINE_DISBANDED 8 +#define CHATENTRYROUTINE_SAVEANDEXIT 9 + +#define CHATEXIT_NONE 0 +#define CHATEXIT_LEADER_LAST 1 +#define CHATEXIT_DROPPED 2 +#define CHATEXIT_DISBANDED 3 + +struct UnionRoomChat +{ + u8 filler0[0x4]; + u16 routineNo; + u16 routineState; + u8 filler8[0x2]; + u16 exitDelayTimer; + u8 fillerC[0x1]; + u8 linkPlayerCount; + u8 handleInputTask; + u8 receiveMessagesTask; + u8 currentPage; + u8 currentCol; + u8 currentRow; + u8 multiplayerId; + u8 lastBufferCursorPos; + u8 bufferCursorPos; + u8 receivedPlayerIndex; + u8 exitType; + bool8 changedRegisteredTexts; + u8 afterSaveTimer; + u8 messageEntryBuffer[2 * MESSAGE_BUFFER_NCHAR + 1]; + u8 receivedMessage[0x40]; + u8 hostName[0x40]; + u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21]; + u8 filler18B[0x5]; + u8 sendMessageBuffer[0x28]; +}; + +static EWRAM_DATA struct UnionRoomChat * sWork = NULL; + +static void InitChatWork(struct UnionRoomChat * unionRoomChat); +static void CB2_LoadInterface(void); +static void VBlankCB_UnionRoomChatMain(void); +static void CB2_UnionRoomChatMain(void); +static void Task_HandlePlayerInput(u8 taskId); +static void ChatEntryRoutine_Join(void); +static void ChatEntryRoutine_HandleInput(void); +static void ChatEntryRoutine_Switch(void); +static void ChatEntryRoutine_AskQuitChatting(void); +static void ChatEntryRoutine_ExitChat(void); +static void ChatEntryRoutine_Drop(void); +static void ChatEntryRoutine_Disbanded(void); +static void ChatEntryRoutine_SendMessage(void); +static void ChatEntryRoutine_Register(void); +static void ChatEntryRoutine_SaveAndExit(void); +static void GoToRoutine(u16 routineNo); +static bool32 TypeChatMessage_HandleDPad(void); +static void AppendCharacterToChatMessageBuffer(void); +static void DeleteLastCharacterOfChatMessageBuffer(void); +static void ToggleCaseOfLastCharacterInChatMessageBuffer(void); +static bool32 ChatMsgHasAtLeastOneCharcter(void); +static void RegisterTextAtRow(void); +static void ResetMessageEntryBuffer(void); +static void SaveRegisteredTextsToSB1(void); +static u8 *GetEndOfUnk1A(void); +static u8 *GetPtrToLastCharOfUnk1A(void); +static void PrepareSendBuffer_Null(u8 *ptr); +static void PrepareSendBuffer_Join(u8 *ptr); +static void PrepareSendBuffer_Chat(u8 *ptr); +static void PrepareSendBuffer_Leave(u8 *ptr); +static void PrepareSendBuffer_Drop(u8 *ptr); +static void PrepareSendBuffer_Disband(u8 *ptr); +static void Task_ReceiveChatMessage(u8 taskId); + +static void (*const sChatEntryRoutines[])(void) = { + [CHATENTRYROUTINE_JOIN] = ChatEntryRoutine_Join, + [CHATNETRYROUTINE_HANDLE_INPUT] = ChatEntryRoutine_HandleInput, + [CHATENTRYROUTINE_SWITCH] = ChatEntryRoutine_Switch, + [CHATENTRYROUTINE_ASKQUITCHATTING] = ChatEntryRoutine_AskQuitChatting, + [CHATENTRYROUTINE_SEND] = ChatEntryRoutine_SendMessage, + [CHATENTRYROUTINE_REGISTER] = ChatEntryRoutine_Register, + [CHATENTRYROUTINE_EXITCHAT] = ChatEntryRoutine_ExitChat, + [CHATENTRYROUTINE_DROP] = ChatEntryRoutine_Drop, + [CHATENTRYROUTINE_DISBANDED] = ChatEntryRoutine_Disbanded, + [CHATENTRYROUTINE_SAVEANDEXIT] = ChatEntryRoutine_SaveAndExit +}; + +static const u8 sKeyboardPageMaxRow[] = +{ + [UNION_ROOM_KB_PAGE_UPPER] = 9, + [UNION_ROOM_KB_PAGE_LOWER] = 9, + [UNION_ROOM_KB_PAGE_EMOJI] = 9, + 9 +}; + +static const u8 sCaseToggleTable[] = { + 0x00, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, + 0x1D, 0x1E, 0x00, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02, + 0x00, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x00, + 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x36, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x53, 0x54, 0x55, 0x56, 0x00, + 0x00, 0x00, 0x6F, 0x5B, 0x5C, 0x5D, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x84, 0x85, 0x86, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, + 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, + 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, + 0xB8, 0xB9, 0xBA, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, + 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, + 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, + 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xBB, 0xBC, 0xBD, + 0xBE, 0xBF, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, + 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, + 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xEF, + 0xF0, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 +}; + +const u8 *const gUnionRoomKeyboardText[UNION_ROOM_KB_PAGE_COUNT][UNION_ROOM_KB_ROW_COUNT] = { + [UNION_ROOM_KB_PAGE_UPPER] = { + gText_UnionRoomChatKeyboard_ABCDE, + gText_UnionRoomChatKeyboard_FGHIJ, + gText_UnionRoomChatKeyboard_KLMNO, + gText_UnionRoomChatKeyboard_PQRST, + gText_UnionRoomChatKeyboard_UVWXY, + gText_UnionRoomChatKeyboard_Z, + gText_UnionRoomChatKeyboard_01234Upper, + gText_UnionRoomChatKeyboard_56789Upper, + gText_UnionRoomChatKeyboard_PunctuationUpper, + gText_UnionRoomChatKeyboard_SymbolsUpper + }, + [UNION_ROOM_KB_PAGE_LOWER] = { + gText_UnionRoomChatKeyboard_abcde, + gText_UnionRoomChatKeyboard_fghij, + gText_UnionRoomChatKeyboard_klmno, + gText_UnionRoomChatKeyboard_pqrst, + gText_UnionRoomChatKeyboard_uvwxy, + gText_UnionRoomChatKeyboard_z, + gText_UnionRoomChatKeyboard_01234Lower, + gText_UnionRoomChatKeyboard_56789Lower, + gText_UnionRoomChatKeyboard_PunctuationLower, + gText_UnionRoomChatKeyboard_SymbolsLower + }, + [UNION_ROOM_KB_PAGE_EMOJI] = { + gText_UnionRoomChatKeyboard_Emoji1, + gText_UnionRoomChatKeyboard_Emoji2, + gText_UnionRoomChatKeyboard_Emoji3, + gText_UnionRoomChatKeyboard_Emoji4, + gText_UnionRoomChatKeyboard_Emoji5, + gText_UnionRoomChatKeyboard_Emoji6, + gText_UnionRoomChatKeyboard_Emoji7, + gText_UnionRoomChatKeyboard_Emoji8, + gText_UnionRoomChatKeyboard_Emoji9, + gText_UnionRoomChatKeyboard_Emoji10 + } +}; + +void EnterUnionRoomChat(void) +{ + sWork = Alloc(sizeof(struct UnionRoomChat)); + InitChatWork(sWork); + gKeyRepeatStartDelay = 20; + HelpSystem_DisableToggleWithRButton(); + SetVBlankCallback(NULL); + SetMainCallback2(CB2_LoadInterface); +} + +static void InitChatWork(struct UnionRoomChat * unionRoomChat) +{ + int i; + + unionRoomChat->routineNo = CHATENTRYROUTINE_JOIN; + unionRoomChat->routineState = 0; + unionRoomChat->currentPage = UNION_ROOM_KB_PAGE_UPPER; + unionRoomChat->currentCol = 0; + unionRoomChat->currentRow = 0; + unionRoomChat->lastBufferCursorPos = 0; + unionRoomChat->bufferCursorPos = 0; + unionRoomChat->receivedPlayerIndex = 0; + unionRoomChat->messageEntryBuffer[0] = EOS; + unionRoomChat->linkPlayerCount = GetLinkPlayerCount(); + unionRoomChat->multiplayerId = GetMultiplayerId(); + unionRoomChat->exitType = 0; + unionRoomChat->changedRegisteredTexts = FALSE; + PrepareSendBuffer_Null(unionRoomChat->sendMessageBuffer); + for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) + StringCopy(unionRoomChat->registeredTexts[i], gSaveBlock1Ptr->registeredTexts[i]); +} + +static void FreeChatWork(void) +{ + DestroyTask(sWork->handleInputTask); + DestroyTask(sWork->receiveMessagesTask); + Free(sWork); +} + +static void CB2_LoadInterface(void) +{ + switch (gMain.state) + { + case 0: + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + UnionRoomChat_TryAllocGraphicsWork(); + gMain.state++; + break; + case 1: + UnionRoomChat_RunDisplaySubtasks(); + if (!UnionRoomChat_RunDisplaySubtask0()) + { + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + SetVBlankCallback(VBlankCB_UnionRoomChatMain); + gMain.state++; + } + break; + case 2: + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_UnionRoomChatMain); + SetQuestLogEvent(QL_EVENT_USED_UNION_ROOM_CHAT, NULL); + sWork->handleInputTask = CreateTask(Task_HandlePlayerInput, 8); + sWork->receiveMessagesTask = CreateTask(Task_ReceiveChatMessage, 7); + LoadWirelessStatusIndicatorSpriteGfx(); + CreateWirelessStatusIndicatorSprite(232, 150); + } + break; + } +} + +static void VBlankCB_UnionRoomChatMain(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +static void CB2_UnionRoomChatMain(void) +{ + RunTasks(); + UnionRoomChat_RunDisplaySubtasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +static void Task_HandlePlayerInput(u8 taskId) +{ + switch (sWork->exitType) + { + case CHATEXIT_LEADER_LAST: + GoToRoutine(CHATENTRYROUTINE_EXITCHAT); + sWork->exitType = CHATEXIT_NONE; + break; + case CHATEXIT_DROPPED: + GoToRoutine(CHATENTRYROUTINE_DROP); + sWork->exitType = CHATEXIT_NONE; + break; + case CHATEXIT_DISBANDED: + GoToRoutine(CHATENTRYROUTINE_DISBANDED); + sWork->exitType = CHATEXIT_NONE; + break; + } + + sChatEntryRoutines[sWork->routineNo](); +} + +static void ChatEntryRoutine_Join(void) +{ + switch (sWork->routineState) + { + case 0: + PrepareSendBuffer_Join(sWork->sendMessageBuffer); + sWork->routineState++; + // fall through + case 1: + if (IsLinkTaskFinished() && !GetRfuUnkCE8()) + { + if (SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + sWork->routineState++; + } + break; + case 2: + if (IsLinkTaskFinished()) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); + break; + } +} + +static void ChatEntryRoutine_HandleInput(void) +{ + bool8 var0, var1; + + switch (sWork->routineState) + { + case 0: + if (JOY_NEW(START_BUTTON)) + { + if (sWork->bufferCursorPos) + GoToRoutine(CHATENTRYROUTINE_SEND); + } + else if (JOY_NEW(SELECT_BUTTON)) + { + GoToRoutine(CHATENTRYROUTINE_SWITCH); + } + else if (JOY_REPT(B_BUTTON)) + { + if (sWork->bufferCursorPos) + { + DeleteLastCharacterOfChatMessageBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + sWork->routineState = 1; + } + else + { + GoToRoutine(CHATENTRYROUTINE_ASKQUITCHATTING); + } + } + else if (JOY_NEW(A_BUTTON)) + { + AppendCharacterToChatMessageBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CURSORBLINK, 1); + sWork->routineState = 1; + } + else if (JOY_NEW(R_BUTTON)) + { + if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT) + { + ToggleCaseOfLastCharacterInChatMessageBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + sWork->routineState = 1; + } + else + { + GoToRoutine(CHATENTRYROUTINE_REGISTER); + } + } + else if (TypeChatMessage_HandleDPad()) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0); + sWork->routineState = 1; + } + break; + case 1: + var0 = RunDisplaySubtask(0); + var1 = RunDisplaySubtask(1); + if (!var0 && !var1) + sWork->routineState = 0; + break; + } +} + +static void ChatEntryRoutine_Switch(void) +{ + s16 input; + bool32 shouldSwitchPages; + + switch (sWork->routineState) + { + case 0: + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWKBSWAPMENU, 0); + sWork->routineState++; + break; + case 1: + if (!RunDisplaySubtask(0)) + sWork->routineState++; + break; + case 2: + input = Menu_ProcessInput(); + switch (input) + { + default: + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0); + shouldSwitchPages = TRUE; + if (sWork->currentPage == input || input > UNION_ROOM_KB_PAGE_COUNT) + shouldSwitchPages = FALSE; + break; + case MENU_NOTHING_CHOSEN: + if (JOY_NEW(SELECT_BUTTON)) + { + PlaySE(SE_SELECT); + Menu_MoveCursor(1); + } + return; + case MENU_B_PRESSED: + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_HIDEKBSWAPMENU, 0); + sWork->routineState = 3; + return; + } + + if (!shouldSwitchPages) + { + sWork->routineState = 3; + return; + } + + sWork->currentCol = 0; + sWork->currentRow = 0; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SWITCHPAGES, 1); + sWork->currentPage = input; + sWork->routineState = 4; + break; + case 3: + // Wait Return To Prev Page + if (!RunDisplaySubtask(0)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); + break; + case 4: + // Wait Page Switch + if (!RunDisplaySubtask(0) && !RunDisplaySubtask(1)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); + break; + } +} + +static void ChatEntryRoutine_AskQuitChatting(void) +{ + s8 input; + + switch (sWork->routineState) + { + case 0: + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, 0); + sWork->routineState = 1; + break; + case 1: + if (!RunDisplaySubtask(0)) + sWork->routineState = 2; + break; + case 2: + input = UnionRoomChat_ProcessInput(); + switch (input) + { + case -1: + case 1: + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 3; + break; + case 0: + if (sWork->multiplayerId == 0) + { + PrepareSendBuffer_Disband(sWork->sendMessageBuffer); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 9; + } + else + { + PrepareSendBuffer_Leave(sWork->sendMessageBuffer); + sWork->routineState = 4; + } + break; + } + break; + case 3: + if (!RunDisplaySubtask(0)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); + break; + case 9: + if (!RunDisplaySubtask(0)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, 0); + sWork->routineState = 10; + } + break; + case 10: + if (!RunDisplaySubtask(0)) + sWork->routineState = 8; + break; + case 8: + input = UnionRoomChat_ProcessInput(); + switch (input) + { + case -1: + case 1: + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 3; + break; + case 0: + sub_80FA4A8(); + PrepareSendBuffer_Disband(sWork->sendMessageBuffer); + sWork->routineState = 4; + break; + } + break; + case 4: + if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + { + if (sWork->multiplayerId == 0) + sWork->routineState = 6; + else + sWork->routineState = 5; + } + break; + case 5: + if (gReceivedRemoteLinkPlayers == 0) + { + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); + } + break; + } +} + +static void ChatEntryRoutine_ExitChat(void) +{ + switch (sWork->routineState) + { + case 0: + if (!FuncIsActiveTask(Task_ReceiveChatMessage)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState++; + } + break; + case 1: + if (!RunDisplaySubtask(0)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTEXITINGCHAT, 0); + sWork->routineState++; + } + break; + case 2: + if (!RunDisplaySubtask(0)) + { + PrepareSendBuffer_Drop(sWork->sendMessageBuffer); + sWork->routineState++; + } + break; + case 3: + if (IsLinkTaskFinished() && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + sWork->routineState++; + break; + case 4: + if ((GetBlockReceivedStatus() & 1) && !GetRfuUnkCE8()) + sWork->routineState++; + break; + case 5: + if (IsLinkTaskFinished() && !GetRfuUnkCE8()) + { + Link_TryStartSend5FFF(); + sWork->exitDelayTimer = 0; + sWork->routineState++; + } + break; + case 6: + if (sWork->exitDelayTimer < 150) + sWork->exitDelayTimer++; + + if (!gReceivedRemoteLinkPlayers) + sWork->routineState++; + break; + case 7: + if (sWork->exitDelayTimer >= 150) + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); + else + sWork->exitDelayTimer++; + break; + } +} + +static void ChatEntryRoutine_Drop(void) +{ + switch (sWork->routineState) + { + case 0: + if (!FuncIsActiveTask(Task_ReceiveChatMessage)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState++; + } + break; + case 1: + if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !GetRfuUnkCE8()) + { + Link_TryStartSend5FFF(); + sWork->exitDelayTimer = 0; + sWork->routineState++; + } + break; + case 2: + if (sWork->exitDelayTimer < 150) + sWork->exitDelayTimer++; + + if (!gReceivedRemoteLinkPlayers) + sWork->routineState++; + break; + case 3: + if (sWork->exitDelayTimer >= 150) + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); + else + sWork->exitDelayTimer++; + break; + } +} + +static void ChatEntryRoutine_Disbanded(void) +{ + switch (sWork->routineState) + { + case 0: + if (!FuncIsActiveTask(Task_ReceiveChatMessage)) + { + if (sWork->multiplayerId) + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + + sWork->routineState++; + } + break; + case 1: + if (!RunDisplaySubtask(0)) + { + if (sWork->multiplayerId != 0) + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTLEADERLEFT, 0); + + sWork->routineState++; + } + break; + case 2: + if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !GetRfuUnkCE8()) + { + Link_TryStartSend5FFF(); + sWork->exitDelayTimer = 0; + sWork->routineState++; + } + break; + case 3: + if (sWork->exitDelayTimer < 150) + sWork->exitDelayTimer++; + + if (!gReceivedRemoteLinkPlayers) + sWork->routineState++; + break; + case 4: + if (sWork->exitDelayTimer >= 150) + GoToRoutine(CHATENTRYROUTINE_SAVEANDEXIT); + else + sWork->exitDelayTimer++; + break; + } +} + +static void ChatEntryRoutine_SendMessage(void) +{ + switch (sWork->routineState) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); + break; + } + + PrepareSendBuffer_Chat(sWork->sendMessageBuffer); + sWork->routineState++; + // fall through + case 1: + if (IsLinkTaskFinished() == TRUE && !GetRfuUnkCE8() && SendBlock(0, sWork->sendMessageBuffer, sizeof(sWork->sendMessageBuffer))) + sWork->routineState++; + break; + case 2: + ResetMessageEntryBuffer(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTMSG, 0); + sWork->routineState++; + break; + case 3: + if (!RunDisplaySubtask(0)) + sWork->routineState++; + break; + case 4: + if (IsLinkTaskFinished()) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); + break; + } +} + +static void ChatEntryRoutine_Register(void) +{ + switch (sWork->routineState) + { + case 0: + if (ChatMsgHasAtLeastOneCharcter()) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTREGISTERWHERE, 0); + sWork->routineState = 2; + } + else + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTINPUTTEXT, 0); + sWork->routineState = 5; + } + break; + case 1: + if (JOY_NEW(A_BUTTON)) + { + RegisterTextAtRow(); + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_RETURNTOKB, 0); + sWork->routineState = 3; + } + else if (JOY_NEW(B_BUTTON)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0); + sWork->routineState = 4; + } + else if (TypeChatMessage_HandleDPad()) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_MOVEKBCURSOR, 0); + sWork->routineState = 2; + } + break; + case 2: + if (!RunDisplaySubtask(0)) + sWork->routineState = 1; + break; + case 3: + if (!RunDisplaySubtask(0)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_CANCELREGISTER, 0); + sWork->routineState = 4; + } + break; + case 4: + if (!RunDisplaySubtask(0)) + GoToRoutine(CHATNETRYROUTINE_HANDLE_INPUT); + break; + case 5: + if (!RunDisplaySubtask(0)) + sWork->routineState = 6; + break; + case 6: + if (JOY_NEW(A_BUTTON | B_BUTTON)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 4; + } + break; + } +} + +static void ChatEntryRoutine_SaveAndExit(void) +{ + s8 input; + + switch (sWork->routineState) + { + case 0: + if (!sWork->changedRegisteredTexts) + { + sWork->routineState = 12; + } + else + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 1; + } + break; + case 1: + if (!RunDisplaySubtask(0)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKSAVE, 0); + sWork->routineState = 2; + } + break; + case 2: + input = UnionRoomChat_ProcessInput(); + switch (input) + { + case -1: + case 1: + sWork->routineState = 12; + break; + case 0: + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 3; + break; + } + break; + case 3: + if (!RunDisplaySubtask(0)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_ASKOVERWRITESAVE, 0); + sWork->routineState = 4; + } + break; + case 4: + if (!RunDisplaySubtask(0)) + sWork->routineState = 5; + break; + case 5: + input = UnionRoomChat_ProcessInput(); + switch (input) + { + case -1: + case 1: + sWork->routineState = 12; + break; + case 0: + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, 0); + sWork->routineState = 6; + break; + } + break; + case 6: + if (!RunDisplaySubtask(0)) + { + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVING, 0); + SaveRegisteredTextsToSB1(); + sWork->routineState = 7; + } + break; + case 7: + if (!RunDisplaySubtask(0)) + { + SetContinueGameWarpStatusToDynamicWarp(); + TrySavingData(SAVE_NORMAL); + sWork->routineState = 8; + } + break; + case 8: + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, 0); + sWork->routineState = 9; + break; + case 9: + if (!RunDisplaySubtask(0)) + { + PlaySE(SE_SAVE); + ClearContinueGameWarpStatus2(); + sWork->routineState = 10; + } + break; + case 10: + sWork->afterSaveTimer = 0; + sWork->routineState = 11; + break; + case 11: + sWork->afterSaveTimer++; + if (sWork->afterSaveTimer > 120) + sWork->routineState = 12; + break; + case 12: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + sWork->routineState = 13; + break; + case 13: + if (!gPaletteFade.active) + { + HelpSystem_EnableToggleWithRButton(); + UnionRoomChat_FreeGraphicsWork(); + FreeChatWork(); + SetMainCallback2(CB2_ReturnToField); + } + break; + } +} + +static void GoToRoutine(u16 routineNo) +{ + sWork->routineNo = routineNo; + sWork->routineState = 0; +} + +static bool32 TypeChatMessage_HandleDPad(void) +{ + do + { + if (JOY_REPT(DPAD_UP)) + { + if (sWork->currentRow > 0) + sWork->currentRow--; + else + sWork->currentRow = sKeyboardPageMaxRow[sWork->currentPage]; + + break; + } + if (JOY_REPT(DPAD_DOWN)) + { + if (sWork->currentRow < sKeyboardPageMaxRow[sWork->currentPage]) + { + sWork->currentRow++; + } + else + { + sWork->currentRow = 0; + } + + break; + } + if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT) + { + if (JOY_REPT(DPAD_LEFT)) + { + if (sWork->currentCol > 0) + sWork->currentCol--; + else + sWork->currentCol = 4; + break; + } + if (JOY_REPT(DPAD_RIGHT)) + { + if (sWork->currentCol < 4) + sWork->currentCol++; + else + sWork->currentCol = 0; + break; + } + } + + return FALSE; + } while (0); + return TRUE; +} + +static void AppendCharacterToChatMessageBuffer(void) +{ + int i; + const u8 *charsStr; + int strLength; + u8 *str; + u8 buffer[21]; + + if (sWork->currentPage != UNION_ROOM_KB_PAGE_COUNT) + { + charsStr = gUnionRoomKeyboardText[sWork->currentPage][sWork->currentRow]; + for (i = 0; i < sWork->currentCol; i++) + { + if (*charsStr == CHAR_EXTRA_EMOJI) + charsStr++; + charsStr++; + } + + strLength = 1; + } + else + { + u8 *tempStr = StringCopy(buffer, sWork->registeredTexts[sWork->currentRow]); + tempStr[0] = CHAR_SPACE; + tempStr[1] = EOS; + charsStr = buffer; + strLength = StringLength_Multibyte(buffer); + } + + sWork->lastBufferCursorPos = sWork->bufferCursorPos; + if (!charsStr) + return; + + str = GetEndOfUnk1A(); + while (--strLength != -1 && sWork->bufferCursorPos < MESSAGE_BUFFER_NCHAR) + { + if (*charsStr == CHAR_EXTRA_EMOJI) + { + *str = *charsStr; + charsStr++; + str++; + } + + *str = *charsStr; + charsStr++; + str++; + + sWork->bufferCursorPos++; + } + + *str = EOS; +} + +static void DeleteLastCharacterOfChatMessageBuffer(void) +{ + sWork->lastBufferCursorPos = sWork->bufferCursorPos; + if (sWork->bufferCursorPos) + { + u8 *str = GetPtrToLastCharOfUnk1A(); + *str = EOS; + sWork->bufferCursorPos--; + } +} + +static void ToggleCaseOfLastCharacterInChatMessageBuffer(void) +{ + u8 *str; + u8 character; + + sWork->lastBufferCursorPos = sWork->bufferCursorPos - 1; + str = GetPtrToLastCharOfUnk1A(); + if (*str != CHAR_EXTRA_EMOJI) + { + character = sCaseToggleTable[*str]; + if (character) + *str = character; + } +} + +static bool32 ChatMsgHasAtLeastOneCharcter(void) +{ + if (sWork->bufferCursorPos) + return TRUE; + else + return FALSE; +} + +static void RegisterTextAtRow(void) +{ + u8 *src = UnionRoomChat_GetEndOfMessageEntryBuffer(); + StringCopy(sWork->registeredTexts[sWork->currentRow], src); + sWork->changedRegisteredTexts = TRUE; +} + +static void ResetMessageEntryBuffer(void) +{ + sWork->messageEntryBuffer[0] = EOS; + sWork->lastBufferCursorPos = MESSAGE_BUFFER_NCHAR; + sWork->bufferCursorPos = 0; +} + +static void SaveRegisteredTextsToSB1(void) +{ + int i; + for (i = 0; i < UNION_ROOM_KB_ROW_COUNT; i++) + StringCopy(gSaveBlock1Ptr->registeredTexts[i], sWork->registeredTexts[i]); +} + +u8 *UnionRoomChat_GetWorkRegisteredText(int arg0) +{ + return sWork->registeredTexts[arg0]; +} + +static u8 *GetEndOfUnk1A(void) +{ + u8 *str = sWork->messageEntryBuffer; + while (*str != EOS) + str++; + + return str; +} + +static u8 *GetPtrToLastCharOfUnk1A(void) +{ + u8 *str = sWork->messageEntryBuffer; + u8 *str2 = str; + while (*str != EOS) + { + str2 = str; + if (*str == CHAR_EXTRA_EMOJI) + str++; + str++; + } + + return str2; +} + +static u16 GetNumCharsInMessageEntryBuffer(void) +{ + u8 *str; + u32 i, numChars, strLength; + + strLength = StringLength_Multibyte(sWork->messageEntryBuffer); + str = sWork->messageEntryBuffer; + numChars = 0; + if (strLength > 10) + { + strLength -= 10; + for (i = 0; i < strLength; i++) + { + if (*str == CHAR_EXTRA_EMOJI) + str++; + + str++; + numChars++; + } + } + + return numChars; +} + +static void PrepareSendBuffer_Null(u8 *arg0) +{ + arg0[0] = CHAT_MESSAGE_0; +} + +static void PrepareSendBuffer_Join(u8 *arg0) +{ + arg0[0] = CHAT_MESSAGE_JOIN; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; +} + +static void PrepareSendBuffer_Chat(u8 *arg0) +{ + arg0[0] = CHAT_MESSAGE_CHAT; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], sWork->messageEntryBuffer); +} + +static void PrepareSendBuffer_Leave(u8 *arg0) +{ + arg0[0] = CHAT_MESSAGE_LEAVE; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; + sub_80FB9D0(); +} + +static void PrepareSendBuffer_Drop(u8 *arg0) +{ + arg0[0] = CHAT_MESSAGE_DROP; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; +} + +static void PrepareSendBuffer_Disband(u8 *arg0) +{ + arg0[0] = CHAT_MESSAGE_DISBAND; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = sWork->multiplayerId; +} + +static bool32 ProcessReceivedChatMessage(u8 *dest, u8 *recvMessage) +{ + u8 *tempStr; + u8 cmd = *recvMessage; + u8 *name = recvMessage + 1; + recvMessage = name; + recvMessage += PLAYER_NAME_LENGTH + 1; + + switch (cmd) + { + case CHAT_MESSAGE_JOIN: + if (sWork->multiplayerId != name[PLAYER_NAME_LENGTH + 1]) + { + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name); + DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700JoinedChat); + return TRUE; + } + break; + case CHAT_MESSAGE_CHAT: + tempStr = StringCopy(dest, name); + *(tempStr++) = EXT_CTRL_CODE_BEGIN; + *(tempStr++) = EXT_CTRL_CODE_CLEAR_TO; + *(tempStr++) = 42; + *(tempStr++) = CHAR_COLON; + StringCopy(tempStr, recvMessage); + return TRUE; + case CHAT_MESSAGE_DISBAND: + StringCopy(sWork->hostName, name); + // fall through + case CHAT_MESSAGE_LEAVE: + if (sWork->multiplayerId != *recvMessage) + { + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, name); + DynamicPlaceholderTextUtil_ExpandPlaceholders(dest, gText_F700LeftChat); + return TRUE; + } + break; + } + + return FALSE; +} + +u8 GetCurrentKeyboardPage(void) +{ + return sWork->currentPage; +} + +void UnionRoomChat_GetCursorColAndRow(u8 *colp, u8 *rowp) +{ + *colp = sWork->currentCol; + *rowp = sWork->currentRow; +} + +u8 *UnionRoomChat_GetMessageEntryBuffer(void) +{ + return sWork->messageEntryBuffer; +} + +int UnionRoomChat_LenMessageEntryBuffer(void) +{ + u8 *str = UnionRoomChat_GetMessageEntryBuffer(); + return StringLength_Multibyte(str); +} + +void UnionRoomChat_GetBufferSelectionRegion(u32 *startp, u32 *diffp) +{ + int diff = sWork->bufferCursorPos - sWork->lastBufferCursorPos; + if (diff < 0) + { + diff *= -1; + *startp = sWork->bufferCursorPos; + } + else + { + *startp = sWork->lastBufferCursorPos; + } + + *diffp = diff; +} + +u8 *UnionRoomChat_GetEndOfMessageEntryBuffer(void) +{ + int i; + u16 numChars = GetNumCharsInMessageEntryBuffer(); + u8 *str = sWork->messageEntryBuffer; + for (i = 0; i < numChars; i++) + { + if (*str == CHAR_EXTRA_EMOJI) + str++; + + str++; + } + + return str; +} + +// Useless overhead +u16 UnionRoomChat_GetNumCharsInMessageEntryBuffer(void) +{ + u16 count; + u32 i; + u16 numChars = GetNumCharsInMessageEntryBuffer(); + u8 *str = sWork->messageEntryBuffer; + for (count = 0, i = 0; i < numChars; count++, i++) + { + if (*str == CHAR_EXTRA_EMOJI) + str++; + + str++; + } + + return count; +} + +u8 *UnionRoomChat_GetLastReceivedMessage(void) +{ + return sWork->receivedMessage; +} + +u16 UnionRoomChat_GetReceivedPlayerIndex(void) +{ + return sWork->receivedPlayerIndex; +} + +int UnionRoomChat_GetMessageEntryCursorPosition(void) +{ + return sWork->bufferCursorPos; +} + +// This probably does more in the Japanese titles. +int UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(void) +{ + u8 *str = GetPtrToLastCharOfUnk1A(); + u32 character = *str; + if (character > 0xFF || sCaseToggleTable[character] == character || sCaseToggleTable[character] == 0) + return 3; + else + return 0; +} + +u8 *UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(void) +{ + return sWork->hostName; +} + +void UnionRoomChat_InitializeRegisteredTexts(void) +{ + StringCopy(gSaveBlock1Ptr->registeredTexts[0], gText_Hello); + StringCopy(gSaveBlock1Ptr->registeredTexts[1], gText_Pokemon2); + StringCopy(gSaveBlock1Ptr->registeredTexts[2], gText_Trade); + StringCopy(gSaveBlock1Ptr->registeredTexts[3], gText_Battle); + StringCopy(gSaveBlock1Ptr->registeredTexts[4], gText_Lets); + StringCopy(gSaveBlock1Ptr->registeredTexts[5], gText_Ok); + StringCopy(gSaveBlock1Ptr->registeredTexts[6], gText_Sorry); + StringCopy(gSaveBlock1Ptr->registeredTexts[7], gText_YaySmileEmoji); + StringCopy(gSaveBlock1Ptr->registeredTexts[8], gText_ThankYou); + StringCopy(gSaveBlock1Ptr->registeredTexts[9], gText_ByeBye); +} + +#define tState data[0] +#define tI data[1] +#define tCurrLinkPlayer data[2] +#define tBlockReceivedStatus data[3] +#define tLinkPlayerCount data[4] +#define tNextState data[5] + +static void Task_ReceiveChatMessage(u8 taskId) +{ + u8 *buffer; + s16 *data = gTasks[taskId].data; + + switch (tState) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + DestroyTask(taskId); + return; + } + + tState = 1; + // fall through + case 1: + tLinkPlayerCount = GetLinkPlayerCount(); + if (sWork->linkPlayerCount != tLinkPlayerCount) + { + tState = 2; + sWork->linkPlayerCount = tLinkPlayerCount; + return; + } + + tBlockReceivedStatus = GetBlockReceivedStatus(); + if (!tBlockReceivedStatus && GetRfuUnkCE8()) + return; + + tI = 0; + tState = 3; + // fall through + case 3: + // Idle listen + for (; tI < 5 && ((tBlockReceivedStatus >> tI) & 1) == 0; tI++) + ; + + if (tI == 5) + { + tState = 1; + return; + } + + tCurrLinkPlayer = tI; + ResetBlockReceivedFlag(tCurrLinkPlayer); + buffer = (u8 *)gBlockRecvBuffer[tI]; + switch (buffer[0]) + { + default: + case CHAT_MESSAGE_CHAT: tNextState = 3; break; + case CHAT_MESSAGE_JOIN: tNextState = 3; break; + case CHAT_MESSAGE_LEAVE: tNextState = 4; break; + case CHAT_MESSAGE_DROP: tNextState = 5; break; + case CHAT_MESSAGE_DISBAND: tNextState = 6; break; + } + + if (ProcessReceivedChatMessage(sWork->receivedMessage, (u8 *)gBlockRecvBuffer[tI])) + { + sWork->receivedPlayerIndex = tI; + UnionRoomChat_StartDisplaySubtask(CHATDISPLAYROUTINE_SCROLLCHAT, 2); + tState = 7; + } + else + { + tState = tNextState; + } + + tI++; + break; + case 7: + if (!RunDisplaySubtask(2)) + tState = tNextState; + break; + case 4: + // Someone is leaving + if (sWork->multiplayerId == 0 && tCurrLinkPlayer != 0) + { + // You're the leader, and the person who left is not you + if (GetLinkPlayerCount() == 2) + { + sub_80FA4A8(); + sWork->exitType = CHATEXIT_LEADER_LAST; + DestroyTask(taskId); + return; + } + + sub_80FBD6C(tCurrLinkPlayer); + } + + tState = 3; + break; + case 5: + // Person left + if (sWork->multiplayerId != 0) + sWork->exitType = CHATEXIT_DROPPED; + + DestroyTask(taskId); + break; + case 6: + // The leader disbanded the chat + sWork->exitType = CHATEXIT_DISBANDED; + DestroyTask(taskId); + break; + case 2: + if (!GetRfuUnkCE8()) + { + if (sWork->multiplayerId == 0) + sub_80FB030(sWork->linkPlayerCount); + + tState = 1; + } + break; + } +} + +#undef tNextState +#undef tLinkPlayerCount +#undef tBlockReceivedStatus +#undef tCurrLinkPlayer +#undef tI +#undef tState diff --git a/src/union_room_chat_display.c b/src/union_room_chat_display.c new file mode 100644 index 000000000..54aef8d65 --- /dev/null +++ b/src/union_room_chat_display.c @@ -0,0 +1,1339 @@ +#include "global.h" +#include "gflib.h" +#include "dynamic_placeholder_text_util.h" +#include "graphics.h" +#include "menu.h" +#include "new_menu_helpers.h" +#include "scanline_effect.h" +#include "strings.h" +#include "text_window.h" +#include "union_room_chat.h" +#include "union_room_chat_display.h" +#include "union_room_chat_objects.h" + +#define STDMESSAGE_QUIT_CHATTING 0 +#define STDMESSAGE_REGISTER_WHERE 1 +#define STDMESSAGE_REGISTER_HERE 2 +#define STDMESSAGE_INPUT_TEXT 3 +#define STDMESSAGE_EXITING_CHAT 4 +#define STDMESSAGE_LEADER_LEFT 5 +#define STDMESSAGE_ASK_SAVE 6 +#define STDMESSAGE_ASK_OVERWRITE 7 +#define STDMESSAGE_SAVING_NO_OFF 8 +#define STDMESSAGE_SAVED_THE_GAME 9 +#define STDMESSAGE_WARN_LEADER_LEAVE 10 + +struct UnionRoomChat2Subtask +{ + bool32 (*callback)(u8 *); + u8 active; + u8 state; +}; + +struct UnionRoomChat2 +{ + struct UnionRoomChat2Subtask subtasks[3]; + u16 yesNoMenuWinId; + u16 curLine; + u16 scrollCount; + u16 messageWindowId; + s16 bg1hofs; + u8 expandedPlaceholdersBuffer[0x106]; + u8 bg0Buffer[BG_SCREEN_SIZE]; + u8 bg1Buffer[BG_SCREEN_SIZE]; + u8 bg3Buffer[BG_SCREEN_SIZE]; + u8 bg2Buffer[BG_SCREEN_SIZE]; + u8 unk2128[0x20]; + u8 unk2148[0x20]; +}; + +struct SubtaskInfo +{ + u16 idx; + bool32 (*callback)(u8 *); +}; + +struct MessageWindowInfo +{ + const u8 *text; + bool8 boxType; + u8 x; + u8 y; + u8 letterSpacing; + u8 lineSpacing; + bool8 expandPlaceholders; + bool8 widerBox; +}; + +static EWRAM_DATA struct UnionRoomChat2 * sWork = NULL; + +static void InitWork(struct UnionRoomChat2 * ptr); +static void UnionRoomChat_ResetDisplaySubtasks(void); +static bool32 DisplaySubtask_LoadGfx(u8 *state); +static bool32 DisplaySubtask_PrintWin3(u8 *state); +static bool32 DisplaySubtask_HideWin3(u8 *state); +static bool32 DisplaySubtask_SwitchPages(u8 *state); +static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state); +static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state); +static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state); +static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state); +static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state); +static bool32 DisplaySubtask_CancelRegister(u8 *state); +static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state); +static bool32 DisplaySubtask_ScrollChat(u8 *state); +static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state); +static bool32 DisplaySubtask_PrintInputText(u8 *state); +static bool32 DisplaySubtask_PrintExitingChat(u8 *state); +static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state); +static bool32 DisplaySubtask_AskSave(u8 *state); +static bool32 DisplaySubtask_AskOverwriteSave(u8 *state); +static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state); +static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state); +static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state); +static bool32 DisplaySubtaskDummy(u8 *state); +static void PlaceYesNoMenuAt(u8 a0, u8 a1, u8 a2); +static void HideYesNoMenuWindow(void); +static void DestroyYesNoMenuWindow(void); +static void PlaceStdMessageWindow(int id, u16 bg0vofs); +static void HideStdMessageWindow(void); +static void DestroyStdMessageWindow(void); +static void FillWin1Rect(u16 x, u16 width, u8 fillValue); +static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor); +static void PrintCurrentKeyboardPage(void); +static bool32 AnimateMoveBg1Right(void); +static bool32 AnimateMoveBg1Left(void); +static void PrintKeyboardSwapTextsOnWin3(void); +static void ClearWin3(void); +static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx); +static void ResetGpuBgState(void); +static void SetBgTilemapWorkBuffers(void); +static void ClearBg0(void); +static void LoadUnionRoomChatPanelGfx(void); +static void LoadLinkMiscMenuGfx(void); +static void LoadBg1Pal8(void); +static void LoadWin0(void); +static void LoadWin2(void); +static void LoadWin1(void); +static void LoadWin3(void); +static void sub_812AD50(void); +static void FillScanlineEffectWithValue1col(s16 a0); +static void FillScanlineEffectWithValue2col(s16 a0); + +static const u16 sUnionRoomChatPanelBgPal_C[] = INCBIN_U16("graphics/union_room_chat/unk_845AA24.gbapal"); +static const u16 sBg1Pal8[] = INCBIN_U16("graphics/union_room_chat/unk_845AA44.gbapal"); +static const u16 sWin0PalF[] = INCBIN_U16("graphics/union_room_chat/unk_845AA64.gbapal"); + +static const struct BgTemplate gUnknown_845AA84[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 7, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x0000 + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x0000 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 23, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x0000 + }, { + .bg = 3, + .charBaseIndex = 1, + .mapBaseIndex = 15, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x0001 + } +}; + +static const struct WindowTemplate gUnknown_845AA94[] = { + { + .bg = 3, + .tilemapLeft = 8, + .tilemapTop = 1, + .width = 21, + .height = 19, + .paletteNum = 15, + .baseBlock = 0x001 + }, { + .bg = 1, + .tilemapLeft = 9, + .tilemapTop = 18, + .width = 15, + .height = 2, + .paletteNum = 12, + .baseBlock = 0x07a + }, { + .bg = 1, + .tilemapLeft = 0, + .tilemapTop = 2, + .width = 6, + .height = 15, + .paletteNum = 7, + .baseBlock = 0x020 + }, { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 2, + .width = 7, + .height = 9, + .paletteNum = 14, + .baseBlock = 0x013 + }, DUMMY_WIN_TEMPLATE +}; + +static const struct SubtaskInfo sSubtaskInfo[] = { + {CHATDISPLAYROUTINE_LOADGFX, DisplaySubtask_LoadGfx}, + {CHATDISPLAYROUTINE_SHOWKBSWAPMENU, DisplaySubtask_PrintWin3}, + {CHATDISPLAYROUTINE_HIDEKBSWAPMENU, DisplaySubtask_HideWin3}, + {CHATDISPLAYROUTINE_SWITCHPAGES, DisplaySubtask_SwitchPages}, + {CHATDISPLAYROUTINE_MOVEKBCURSOR, DisplaySubtask_MoveSelectorCursorObj}, + {CHATDISPLAYROUTINE_SHOWQUITCHATTINGDIALOG, DisplaySubtask_ShowQuitChattingDialog}, + {CHATDISPLAYROUTINE_DESTROYSTDMSGANDYESNO, DisplaySubtask_HideQuitChattingDialog}, + {CHATDISPLAYROUTINE_PRINTMSG, DisplaySubtask_UpdateMessageBuffer}, + {CHATDISPLAYROUTINE_PRINTREGISTERWHERE, DisplaySubtask_PrintRegisterWhere}, + {CHATDISPLAYROUTINE_CANCELREGISTER, DisplaySubtask_CancelRegister}, + {CHATDISPLAYROUTINE_RETURNTOKB, DisplaySubtask_ReturnToKeyboard}, + {CHATDISPLAYROUTINE_SCROLLCHAT, DisplaySubtask_ScrollChat}, + {CHATDISPLAYROUTINE_CURSORBLINK, DisplaySubtask_AnimateSelectorCursorBlink}, + {CHATDISPLAYROUTINE_PRINTINPUTTEXT, DisplaySubtask_PrintInputText}, + {CHATDISPLAYROUTINE_PRINTEXITINGCHAT, DisplaySubtask_PrintExitingChat}, + {CHATDISPLAYROUTINE_PRINTLEADERLEFT, DisplaySubtask_PrintLeaderLeft}, + {CHATDISPLAYROUTINE_ASKSAVE, DisplaySubtask_AskSave}, + {CHATDISPLAYROUTINE_ASKOVERWRITESAVE, DisplaySubtask_AskOverwriteSave}, + {CHATDISPLAYROUTINE_PRINTSAVING, DisplaySubtask_PrintSavingDontTurnOffPower}, + {CHATDISPLAYROUTINE_PRINTSAVEDTHEGAME, DisplaySubtask_PrintSavedTheGame}, + {CHATDISPLAYROUTINE_SHOWCONFIRMLEADERLEAVEDIALOG, DisplaySubtask_ShowConfirmLeaderLeaveDialog} +}; + +static const struct MessageWindowInfo sMessageWindowInfo[] = { + + [STDMESSAGE_QUIT_CHATTING] = { + .text = gText_QuitChatting, + .boxType = 1, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, + [STDMESSAGE_REGISTER_WHERE] = { + .text = gText_RegisterTextWhere, + .boxType = 1, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, + [STDMESSAGE_REGISTER_HERE] = { + .text = gText_RegisterTextHere, + .boxType = 1, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, + [STDMESSAGE_INPUT_TEXT] = { + .text = gText_InputText, + .boxType = 1, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, + [STDMESSAGE_EXITING_CHAT] = { + .text = gText_ExitingTheChat, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = FALSE + }, + [STDMESSAGE_LEADER_LEFT] = { + .text = gText_LeaderHasLeftEndingChat, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 0, + .lineSpacing = 2, + .expandPlaceholders = TRUE, + .widerBox = FALSE + }, + [STDMESSAGE_ASK_SAVE] = { + .text = gText_RegisteredTextChanged_OKtoSave, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = TRUE + }, + [STDMESSAGE_ASK_OVERWRITE] = { + .text = gText_RegisteredTextChanged_AlreadySavedFile, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = TRUE + }, + [STDMESSAGE_SAVING_NO_OFF] = { + .text = gText_RegisteredTextChanged_SavingDontTurnOff, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = TRUE + }, + [STDMESSAGE_SAVED_THE_GAME] = { + .text = gText_RegisteredTextChanged_SavedTheGame, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = TRUE, + .widerBox = TRUE + }, + [STDMESSAGE_WARN_LEADER_LEAVE] = { + .text = gText_IfLeaderLeavesChatWillEnd, + .boxType = 2, + .x = 0, + .y = 0, + .letterSpacing = 1, + .lineSpacing = 2, + .expandPlaceholders = FALSE, + .widerBox = TRUE + } +}; + +static const u8 gText_Ellipsis[] = _("…"); + +static const struct MenuAction sKeyboardSwapTexts[] = { + {gText_Upper}, + {gText_Lower}, + {gText_Symbols}, + {gText_Register2}, + {gText_Exit} +}; + +bool8 UnionRoomChat_TryAllocGraphicsWork(void) +{ + sWork = Alloc(sizeof(*sWork)); + if (sWork && UnionRoomChat_TryAllocSpriteWork()) + { + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_845AA84, NELEMS(gUnknown_845AA84)); + InitWindows(gUnknown_845AA94); + ResetTempTileDataBuffers(); + sub_812AD50(); + InitWork(sWork); + UnionRoomChat_ResetDisplaySubtasks(); + UnionRoomChat_StartDisplaySubtask(0, 0); + return TRUE; + } + else + { + return FALSE; + } +} + +bool32 UnionRoomChat_RunDisplaySubtask0(void) +{ + return RunDisplaySubtask(0); +} + +void UnionRoomChat_FreeGraphicsWork(void) +{ + UnionRoomChat_FreeSpriteWork(); + if (sWork != NULL) + FREE_AND_SET_NULL(sWork); + + FreeAllWindowBuffers(); + gScanlineEffect.state = 3; +} + +static void InitWork(struct UnionRoomChat2 *arg0) +{ + arg0->yesNoMenuWinId = 0xFF; + arg0->messageWindowId = 0xFF; + arg0->curLine = 0; +} + +void UnionRoomChat_ResetDisplaySubtasks(void) +{ + int i; + + if (sWork == NULL) + return; + + for (i = 0; i < 3; i++) + { + sWork->subtasks[i].callback = DisplaySubtaskDummy; + sWork->subtasks[i].active = FALSE; + sWork->subtasks[i].state = 0; + } +} + +void UnionRoomChat_RunDisplaySubtasks(void) +{ + int i; + + if (sWork == NULL) + return; + + for (i = 0; i < 3; i++) + { + if (sWork->subtasks[i].active) + sWork->subtasks[i].active = sWork->subtasks[i].callback(&sWork->subtasks[i].state); + } +} + +void UnionRoomChat_StartDisplaySubtask(u16 arg0, u8 arg1) +{ + int i; + + sWork->subtasks[arg1].callback = DisplaySubtaskDummy; + for (i = 0; i < NELEMS(sSubtaskInfo); i++) + { + if (sSubtaskInfo[i].idx == arg0) + { + sWork->subtasks[arg1].callback = sSubtaskInfo[i].callback; + sWork->subtasks[arg1].active = TRUE; + sWork->subtasks[arg1].state = 0; + break; + } + } +} + +bool8 RunDisplaySubtask(u8 arg0) +{ + return sWork->subtasks[arg0].active; +} + +static bool32 DisplaySubtask_LoadGfx(u8 *state) +{ + if (FreeTempTileDataBuffersIfPossible() == TRUE) + return TRUE; + + switch (*state) + { + case 0: + ResetGpuBgState(); + SetBgTilemapWorkBuffers(); + break; + case 1: + ClearBg0(); + break; + case 2: + LoadUnionRoomChatPanelGfx(); + break; + case 3: + LoadLinkMiscMenuGfx(); + break; + case 4: + LoadBg1Pal8(); + break; + case 5: + LoadWin0(); + LoadWin2(); + LoadWin3(); + LoadWin1(); + break; + case 6: + if (!IsDma3ManagerBusyWithBgCopy()) + { + UnionRoomChat_CreateSelectorCursorObj(); + UnionRoomChat_SpawnTextEntryPointerSprites(); + CreatePageSwitchUISprites(); + } + break; + default: + return FALSE; + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_PrintWin3(u8 *state) +{ + switch (*state) + { + case 0: + PrintKeyboardSwapTextsOnWin3(); + CopyWindowToVram(3, 3); + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_HideWin3(u8 *state) +{ + switch (*state) + { + case 0: + ClearWin3(); + CopyWindowToVram(3, 3); + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_SwitchPages(u8 *state) +{ + switch (*state) + { + case 0: + UnionRoomChat_ToggleSelectorCursorObjVisibility(TRUE); + if (AnimateMoveBg1Right()) + return TRUE; + + PrintCurrentKeyboardPage(); + CopyWindowToVram(2, 2); + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + break; + case 2: + if (AnimateMoveBg1Left()) + return TRUE; + + UnionRoomChat_MoveSelectorCursorObj(); + UnionRoomChat_ToggleSelectorCursorObjVisibility(FALSE); + UpdateVisibleUnionRoomChatIcon(); + return FALSE; + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_MoveSelectorCursorObj(u8 *state) +{ + UnionRoomChat_MoveSelectorCursorObj(); + return FALSE; +} + +static bool32 DisplaySubtask_ShowQuitChattingDialog(u8 *state) +{ + switch (*state) + { + case 0: + PlaceStdMessageWindow(STDMESSAGE_QUIT_CHATTING, 0); + PlaceYesNoMenuAt(23, 11, 1); + CopyWindowToVram(sWork->messageWindowId, 3); + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_HideQuitChattingDialog(u8 *state) +{ + switch (*state) + { + case 0: + HideStdMessageWindow(); + HideYesNoMenuWindow(); + CopyBgTilemapBufferToVram(0); + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + + DestroyStdMessageWindow(); + DestroyYesNoMenuWindow(); + return FALSE; + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_UpdateMessageBuffer(u8 *state) +{ + u32 start, length; + u8 *str; + + switch (*state) + { + case 0: + UnionRoomChat_GetBufferSelectionRegion(&start, &length); + FillWin1Rect(start, length, PIXEL_FILL(0)); + str = UnionRoomChat_GetMessageEntryBuffer(); + PrintOnWin1Parameterized(0, str, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY); + CopyWindowToVram(1, 2); + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + UpdateVisibleUnionRoomChatIcon(); + return FALSE; + } + return TRUE; + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_PrintRegisterWhere(u8 *state) +{ + u16 var0; + u8 *str; + u16 length; + + switch (*state) + { + case 0: + var0 = UnionRoomChat_GetNumCharsInMessageEntryBuffer(); + str = UnionRoomChat_GetEndOfMessageEntryBuffer(); + length = StringLength_Multibyte(str); + FillWin1Rect(var0, length, PIXEL_FILL(6)); + PrintOnWin1Parameterized(var0, str, TEXT_COLOR_TRANSPARENT, TEXT_COLOR_RED, TEXT_COLOR_LIGHT_RED); + CopyWindowToVram(1, 2); + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + PlaceStdMessageWindow(STDMESSAGE_REGISTER_WHERE, 16); + CopyWindowToVram(sWork->messageWindowId, 3); + } + else + { + return TRUE; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + UnionRoomChat_UpdateObjPalCycle(1); + else + return TRUE; + break; + case 3: + return FALSE; + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_CancelRegister(u8 *state) +{ + u16 x; + u8 *str; + u16 length; + + switch (*state) + { + case 0: + x = UnionRoomChat_GetNumCharsInMessageEntryBuffer(); + str = UnionRoomChat_GetEndOfMessageEntryBuffer(); + length = StringLength_Multibyte(str); + FillWin1Rect(x, length, PIXEL_FILL(0)); + PrintOnWin1Parameterized(x, str, TEXT_COLOR_LIGHT_GREY, TEXT_COLOR_WHITE, TEXT_COLOR_DARK_GREY); + CopyWindowToVram(1, 2); + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + HideStdMessageWindow(); + CopyWindowToVram(sWork->messageWindowId, 3); + } + else + { + return TRUE; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + UnionRoomChat_UpdateObjPalCycle(0); + DestroyStdMessageWindow(); + } + else + { + return TRUE; + } + break; + case 3: + return FALSE; + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_ReturnToKeyboard(u8 *state) +{ + switch (*state) + { + case 0: + PrintCurrentKeyboardPage(); + CopyWindowToVram(2, 2); + (*state)++; + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + else + return FALSE; + } + + return TRUE; +} + +static bool32 DisplaySubtask_ScrollChat(u8 *state) +{ + u16 row; + u8 *str; + u8 colorIdx; + + switch (*state) + { + case 0: + row = sWork->curLine; + str = UnionRoomChat_GetLastReceivedMessage(); + colorIdx = UnionRoomChat_GetReceivedPlayerIndex(); + PrintTextOnWin0Colorized(row, str, colorIdx); + CopyWindowToVram(0, 2); + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + + if (sWork->curLine < 9) + { + sWork->curLine++; + *state = 4; + return FALSE; + } + else + { + sWork->scrollCount = 0; + (*state)++; + } + // fall through + case 2: + ScrollWindow(0, 0, 5, PIXEL_FILL(1)); + CopyWindowToVram(0, 2); + sWork->scrollCount++; + (*state)++; + // fall through + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + + if (sWork->scrollCount < 3) + { + (*state)--; + return TRUE; + } + break; + case 4: + return FALSE; + default: + return TRUE; + } + + (*state)++; + return TRUE; +} + +static bool32 DisplaySubtask_AnimateSelectorCursorBlink(u8 *state) +{ + switch (*state) + { + case 0: + UnionRoomChat_SetSelectorCursorClosedImage(); + (*state)++; + break; + case 1: + return UnionRoomChat_AnimateSelectorCursorReopen(); + } + + return TRUE; +} + +static bool32 DisplaySubtask_PrintInputText(u8 *state) +{ + switch (*state) + { + case 0: + PlaceStdMessageWindow(STDMESSAGE_INPUT_TEXT, 16); + CopyWindowToVram(sWork->messageWindowId, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool32 DisplaySubtask_PrintExitingChat(u8 *state) +{ + switch (*state) + { + case 0: + PlaceStdMessageWindow(STDMESSAGE_EXITING_CHAT, 0); + CopyWindowToVram(sWork->messageWindowId, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool32 DisplaySubtask_PrintLeaderLeft(u8 *state) +{ + u8 *str; + + switch (*state) + { + case 0: + DynamicPlaceholderTextUtil_Reset(); + str = UnionRoomChat_GetNameOfPlayerWhoDisbandedChat(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); + PlaceStdMessageWindow(STDMESSAGE_LEADER_LEFT, 0); + CopyWindowToVram(sWork->messageWindowId, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool32 DisplaySubtask_AskSave(u8 *state) +{ + switch (*state) + { + case 0: + PlaceStdMessageWindow(STDMESSAGE_ASK_SAVE, 0); + PlaceYesNoMenuAt(23, 10, 1); + CopyWindowToVram(sWork->messageWindowId, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool32 DisplaySubtask_AskOverwriteSave(u8 *state) +{ + switch (*state) + { + case 0: + PlaceStdMessageWindow(STDMESSAGE_ASK_OVERWRITE, 0); + PlaceYesNoMenuAt(23, 10, 1); + CopyWindowToVram(sWork->messageWindowId, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool32 DisplaySubtask_PrintSavingDontTurnOffPower(u8 *state) +{ + switch (*state) + { + case 0: + PlaceStdMessageWindow(STDMESSAGE_SAVING_NO_OFF, 0); + CopyWindowToVram(sWork->messageWindowId, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool32 DisplaySubtask_PrintSavedTheGame(u8 *state) +{ + switch (*state) + { + case 0: + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); + PlaceStdMessageWindow(STDMESSAGE_SAVED_THE_GAME, 0); + CopyWindowToVram(sWork->messageWindowId, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool32 DisplaySubtask_ShowConfirmLeaderLeaveDialog(u8 *state) +{ + switch (*state) + { + case 0: + PlaceStdMessageWindow(STDMESSAGE_WARN_LEADER_LEAVE, 0); + PlaceYesNoMenuAt(23, 10, 1); + CopyWindowToVram(sWork->messageWindowId, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool32 DisplaySubtaskDummy(u8 *arg0) +{ + return FALSE; +} + +static void PlaceYesNoMenuAt(u8 left, u8 top, u8 initialCursorPos) +{ + struct WindowTemplate template; + template.bg = 0; + template.tilemapLeft = left; + template.tilemapTop = top; + template.width = 6; + template.height = 4; + template.paletteNum = 14; + template.baseBlock = 0x052; + sWork->yesNoMenuWinId = AddWindow(&template); + if (sWork->yesNoMenuWinId != 0xFF) + { + FillWindowPixelBuffer(sWork->yesNoMenuWinId, PIXEL_FILL(1)); + PutWindowTilemap(sWork->yesNoMenuWinId); + AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_Yes, 8, 2, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(sWork->yesNoMenuWinId, 2, gText_No, 8, 16, TEXT_SPEED_FF, NULL); + DrawTextBorderOuter(sWork->yesNoMenuWinId, 1, 13); + Menu_InitCursor(sWork->yesNoMenuWinId, 2, 0, 2, 14, 2, initialCursorPos); + } +} + +static void HideYesNoMenuWindow(void) +{ + if (sWork->yesNoMenuWinId != 0xFF) + { + ClearStdWindowAndFrameToTransparent(sWork->yesNoMenuWinId, FALSE); + ClearWindowTilemap(sWork->yesNoMenuWinId); + } +} + +static void DestroyYesNoMenuWindow(void) +{ + if (sWork->yesNoMenuWinId != 0xFF) + { + RemoveWindow(sWork->yesNoMenuWinId); + sWork->yesNoMenuWinId = 0xFF; + } +} + +s8 UnionRoomChat_ProcessInput(void) +{ + return Menu_ProcessInput(); +} + +static void PlaceStdMessageWindow(int id, u16 bg0vofs) +{ + const u8 *str; + int windowId; + struct WindowTemplate template; + template.bg = 0; + template.tilemapLeft = 8; + template.tilemapTop = 16; + template.width = 21; + template.height = 4; + template.paletteNum = 14; + template.baseBlock = 0x06A; + if (sMessageWindowInfo[id].widerBox) + { + template.tilemapLeft -= 7; + template.width += 7; + } + + sWork->messageWindowId = AddWindow(&template); + windowId = sWork->messageWindowId; + if (sWork->messageWindowId == 0xFF) + return; + + if (sMessageWindowInfo[id].expandPlaceholders) + { + DynamicPlaceholderTextUtil_ExpandPlaceholders(sWork->expandedPlaceholdersBuffer, sMessageWindowInfo[id].text); + str = sWork->expandedPlaceholdersBuffer; + } + else + { + str = sMessageWindowInfo[id].text; + } + + ChangeBgY(0, bg0vofs * 256, 0); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + PutWindowTilemap(windowId); + if (sMessageWindowInfo[id].boxType == 1) + { + DrawTextBorderInner(windowId, 0xA, 2); + AddTextPrinterParameterized5( + windowId, + 2, + str, + sMessageWindowInfo[id].x + 8, + sMessageWindowInfo[id].y + 8, + TEXT_SPEED_FF, + NULL, + sMessageWindowInfo[id].letterSpacing, + sMessageWindowInfo[id].lineSpacing); + } + else + { + DrawTextBorderOuter(windowId, 0xA, 2); + AddTextPrinterParameterized5( + windowId, + 2, + str, + sMessageWindowInfo[id].x, + sMessageWindowInfo[id].y, + TEXT_SPEED_FF, + NULL, + sMessageWindowInfo[id].letterSpacing, + sMessageWindowInfo[id].lineSpacing); + } + + sWork->messageWindowId = windowId; +} + +static void HideStdMessageWindow(void) +{ + if (sWork->messageWindowId != 0xFF) + { + ClearStdWindowAndFrameToTransparent(sWork->messageWindowId, FALSE); + ClearWindowTilemap(sWork->messageWindowId); + } + + ChangeBgY(0, 0, 0); +} + +static void DestroyStdMessageWindow(void) +{ + if (sWork->messageWindowId != 0xFF) + { + RemoveWindow(sWork->messageWindowId); + sWork->messageWindowId = 0xFF; + } +} + +static void FillWin1Rect(u16 x, u16 width, u8 fillValue) +{ + FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); +} + +static void PrintOnWin1Parameterized(u16 x, u8 *str, u8 bgColor, u8 fgColor, u8 shadowColor) +{ + u8 color[3]; + u8 strbuf[35]; + + if (bgColor != TEXT_COLOR_TRANSPARENT) + FillWin1Rect(x, UnionRoomChat_GetMessageEntryCursorPosition() - x, bgColor); + + color[0] = bgColor; + color[1] = fgColor; + color[2] = shadowColor; + strbuf[0] = EXT_CTRL_CODE_BEGIN; + strbuf[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; + strbuf[2] = 8; + StringCopy(&strbuf[3], str); + AddTextPrinterParameterized3(1, 2, x * 8, 1, color, TEXT_SPEED_FF, strbuf); +} + +static void PrintCurrentKeyboardPage(void) +{ + u8 page; + int i; + u16 left; + u16 top; + u8 color[3]; + u8 str[45]; + u8 *str2; + + FillWindowPixelBuffer(2, PIXEL_FILL(15)); + page = GetCurrentKeyboardPage(); + color[0] = TEXT_COLOR_TRANSPARENT; + color[1] = TEXT_DYNAMIC_COLOR_5; + color[2] = TEXT_DYNAMIC_COLOR_4; + if (page != UNION_ROOM_KB_PAGE_COUNT) + { + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; + str[2] = 8; + + if (page == UNION_ROOM_KB_PAGE_EMOJI) + left = 6; + else + left = 8; + for (i = 0, top = 0; i < UNION_ROOM_KB_ROW_COUNT; i++, top += 12) + { + if (!gUnionRoomKeyboardText[page][i]) + return; + + StringCopy(&str[3], gUnionRoomKeyboardText[page][i]); + AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str); + } + } + else + { + left = 4; + for (i = 0, top = 0; i < 10; i++, top += 12) + { + str2 = UnionRoomChat_GetWorkRegisteredText(i); + if (GetStringWidth(0, str2, 0) <= 40) + { + AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str2); + } + else + { + int length = StringLength_Multibyte(str2); + do + { + length--; + StringCopyN_Multibyte(str, str2, length); + } while (GetStringWidth(0, str, 0) > 35); + + AddTextPrinterParameterized3(2, 0, left, top, color, TEXT_SPEED_FF, str); + AddTextPrinterParameterized3(2, 0, left + 35, top, color, TEXT_SPEED_FF, gText_Ellipsis); + } + } + } +} + +static bool32 AnimateMoveBg1Right(void) +{ + if (sWork->bg1hofs < 56) + { + sWork->bg1hofs += 12; + if (sWork->bg1hofs >= 56) + sWork->bg1hofs = 56; + + if (sWork->bg1hofs < 56) + { + FillScanlineEffectWithValue1col(sWork->bg1hofs); + return TRUE; + } + } + + FillScanlineEffectWithValue2col(sWork->bg1hofs); + return FALSE; +} + +static bool32 AnimateMoveBg1Left(void) +{ + if (sWork->bg1hofs > 0) + { + sWork->bg1hofs -= 12; + if (sWork->bg1hofs <= 0) + sWork->bg1hofs = 0; + + if (sWork->bg1hofs > 0) + { + FillScanlineEffectWithValue1col(sWork->bg1hofs); + return TRUE; + } + } + + FillScanlineEffectWithValue2col(sWork->bg1hofs); + return FALSE; +} + +static void PrintKeyboardSwapTextsOnWin3(void) +{ + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + DrawTextBorderOuter(3, 1, 13); + UnionRoomAndTradeMenuPrintOptions(3, 2, 14, 5, sKeyboardSwapTexts); + Menu_InitCursor(3, 2, 0, 0, 14, 5, GetCurrentKeyboardPage()); + PutWindowTilemap(3); +} + +static void ClearWin3(void) +{ + ClearStdWindowAndFrameToTransparent(3, FALSE); + ClearWindowTilemap(3); +} + +static void PrintTextOnWin0Colorized(u16 row, u8 *str, u8 colorIdx) +// colorIdx: 0 = grey, 1 = red, 2 = green, 3 = blue +{ + u8 color[3]; + color[0] = TEXT_COLOR_WHITE; + color[1] = colorIdx * 2 + 2; + color[2] = colorIdx * 2 + 3; + FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); + AddTextPrinterParameterized3(0, 2, 0, row * 15, color, TEXT_SPEED_FF, str); +} + +static void ResetGpuBgState(void) +{ + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(64, 240)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 144)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG2 | WININ_WIN0_BG3 + | WININ_WIN0_OBJ | WININ_WIN0_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); +} + +static void SetBgTilemapWorkBuffers(void) +{ + SetBgTilemapBuffer(0, sWork->bg0Buffer); + SetBgTilemapBuffer(1, sWork->bg1Buffer); + SetBgTilemapBuffer(3, sWork->bg3Buffer); + SetBgTilemapBuffer(2, sWork->bg2Buffer); +} + +static void ClearBg0(void) +{ + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); + CopyBgTilemapBufferToVram(0); +} + +static void LoadUnionRoomChatPanelGfx(void) +{ + LoadPalette(gUnionRoomChatPanelBgPal_7, 0x70, 0x20); + LoadPalette(sUnionRoomChatPanelBgPal_C, 0xC0, 0x20); + DecompressAndCopyTileDataToVram(1, gUnionRoomChatPanelBgTiles, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnionRoomChatPanelBgMap, 0, 0); + CopyBgTilemapBufferToVram(1); +} + +static void LoadLinkMiscMenuGfx(void) +{ + u8 *ptr; + + LoadPalette(gLinkMiscMenu_Pal, 0, 0x20); + ptr = DecompressAndCopyTileDataToVram(2, gLinkMiscMenu_Gfx, 0, 0, 0); + CopyToBgTilemapBuffer(2, gLinkMiscMenu_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(2); +} + +static void LoadBg1Pal8(void) +{ + LoadPalette(sBg1Pal8, 0x80, 0x20); + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); +} + +static void LoadWin0(void) +{ + LoadPalette(sWin0PalF, 0xF0, 0x20); + PutWindowTilemap(0); + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + CopyWindowToVram(0, 3); +} + +static void LoadWin2(void) +{ + PutWindowTilemap(2); + PrintCurrentKeyboardPage(); + CopyWindowToVram(2, 3); +} + +static void LoadWin1(void) +{ + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + PutWindowTilemap(1); + CopyWindowToVram(1, 3); +} + +static void LoadWin3(void) +{ + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + TextWindow_SetUserSelectedFrame(3, 1, 0xD0); + TextWindow_SetStdFrame0_WithPal(3, 0xA, 0x20); + LoadPalette(gTMCaseMainWindowPalette, 0xE0, 0x20); +} + +static void sub_812AD50(void) +{ + struct ScanlineEffectParams params; + params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + params.dmaDest = ®_BG1HOFS; + params.initState = 1; + params.unused9 = 0; + sWork->bg1hofs = 0; + CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers)); + ScanlineEffect_SetParams(params); +} + +static void FillScanlineEffectWithValue1col(s16 arg0) +{ + CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120); + CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20); +} + +static void FillScanlineEffectWithValue2col(s16 arg0) +{ + CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120); + CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20); + CpuFill16(arg0, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120); + CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20); +} diff --git a/src/union_room_chat_objects.c b/src/union_room_chat_objects.c new file mode 100644 index 000000000..f97136a0a --- /dev/null +++ b/src/union_room_chat_objects.c @@ -0,0 +1,318 @@ +#include "global.h" +#include "gflib.h" +#include "decompress.h" +#include "graphics.h" +#include "union_room_chat.h" + +struct UnionRoomChat3 +{ + struct Sprite *selectorCursorSprite; + struct Sprite *characterSelectCursorSprite; + struct Sprite *textEntryCursorSprite; + struct Sprite *rButtonSprite; + struct Sprite *chatIconsSprite; + u16 cursorBlinkTimer; +}; + +static EWRAM_DATA struct UnionRoomChat3 *sWork = NULL; + +static void SpriteCB_TextEntryCursor(struct Sprite * sprite); +static void SpriteCB_CharacterSelectCursor(struct Sprite * sprite); + +static const u16 sUnionRoomChatInterfacePal[] = INCBIN_U16("graphics/union_room_chat/unk_845AC14.gbapal"); +static const u32 sSelectorCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AC34.4bpp.lz"); +static const u32 sHorizontalBarGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AEB8.4bpp.lz"); +static const u32 sMenuCursorGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AED8.4bpp.lz"); +static const u32 sRButtonGfxTiles[] = INCBIN_U32("graphics/union_room_chat/unk_845AF04.4bpp.lz"); + +static const struct CompressedSpriteSheet sSpriteSheets[] = { + {sSelectorCursorGfxTiles, 0x1000, 0}, + {sMenuCursorGfxTiles, 0x0040, 1}, + {sHorizontalBarGfxTiles, 0x0040, 2}, + {sRButtonGfxTiles, 0x0080, 3}, + {gUnionRoomChatIcons, 0x0400, 4} +}; + +static const struct SpritePalette sSpritePalette = { + sUnionRoomChatInterfacePal, 0 +}; + +static const struct OamData sOamData_64x32_1 = { + .shape = SPRITE_SHAPE(64x32), + .size = SPRITE_SIZE(64x32), + .priority = 1 +}; + +static const union AnimCmd sAnim_CursorSmallOpen[] = { + ANIMCMD_FRAME(0x00, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_CursorSmallClosed[] = { + ANIMCMD_FRAME(0x20, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_CursorLargeOpen[] = { + ANIMCMD_FRAME(0x40, 30), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_CursorLargeClosed[] = { + ANIMCMD_FRAME(0x60, 30), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnims_SelectorCursor[] = { + sAnim_CursorSmallOpen, + sAnim_CursorSmallClosed, + sAnim_CursorLargeOpen, + sAnim_CursorLargeClosed +}; + +static const struct SpriteTemplate sSpriteTemplate_SelectorCursor = { + .tileTag = 0, + .paletteTag = 0, + .oam = &sOamData_64x32_1, + .anims = sSpriteAnims_SelectorCursor, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct OamData sOamData_8x16_2 = { + .shape = SPRITE_SHAPE(8x16), + .size = SPRITE_SIZE(8x16), + .priority = 2 +}; + +static const struct SpriteTemplate sSpriteTemplate_TextEntryCursor = { + .tileTag = 2, + .paletteTag = 0, + .oam = &sOamData_8x16_2, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_TextEntryCursor +}; + +static const struct SpriteTemplate sSpriteTemplate_CharacterSelectCursor = { + .tileTag = 1, + .paletteTag = 0, + .oam = &sOamData_8x16_2, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_CharacterSelectCursor +}; + +static const struct OamData sOamData_16x16_2 = { + .shape = SPRITE_SHAPE(16x16), + .size = SPRITE_SIZE(16x16), + .priority = 2 +}; + +static const struct OamData sOamData_32x16_2 = { + .shape = SPRITE_SHAPE(32x16), + .size = SPRITE_SIZE(32x16), + .priority = 2 +}; + +static const union AnimCmd sAnim_UnionRoomChatIcons_ToggleCase[] = { + ANIMCMD_FRAME(0x00, 2), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy1[] = { + ANIMCMD_FRAME(0x08, 2), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_UnionRoomChatIcons_Dummy2[] = { + ANIMCMD_FRAME(0x10, 2), + ANIMCMD_END +}; + +static const union AnimCmd sAnim_UnionRoomChatIcons_Register[] = { + ANIMCMD_FRAME(0x18, 2), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_UnionRoomChatIcons[] = { + sAnim_UnionRoomChatIcons_ToggleCase, + sAnim_UnionRoomChatIcons_Dummy1, + sAnim_UnionRoomChatIcons_Dummy2, + sAnim_UnionRoomChatIcons_Register +}; + +static const struct SpriteTemplate sSpriteTemplate_RButton = { + .tileTag = 3, + .paletteTag = 0, + .oam = &sOamData_16x16_2, + .anims = gDummySpriteAnimTable, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +static const struct SpriteTemplate sSpriteTemplate_UnionRoomChatIcons = { + .tileTag = 4, + .paletteTag = 0, + .oam = &sOamData_32x16_2, + .anims = sSpriteAnimTable_UnionRoomChatIcons, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +bool32 UnionRoomChat_TryAllocSpriteWork(void) +{ + int i; + for (i = 0; i < NELEMS(sSpriteSheets); i++) + LoadCompressedSpriteSheet(&sSpriteSheets[i]); + + LoadSpritePalette(&sSpritePalette); + sWork = Alloc(sizeof(struct UnionRoomChat3)); + if (sWork == NULL) + return FALSE; + + return TRUE; +} + +void UnionRoomChat_FreeSpriteWork(void) +{ + if (sWork != NULL) + Free(sWork); +} + +void UnionRoomChat_CreateSelectorCursorObj(void) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_SelectorCursor, 10, 24, 0); + sWork->selectorCursorSprite = &gSprites[spriteId]; +} + +void UnionRoomChat_ToggleSelectorCursorObjVisibility(bool32 invisible) +{ + sWork->selectorCursorSprite->invisible = invisible; +} + +void UnionRoomChat_MoveSelectorCursorObj(void) +{ + u8 x, y; + u8 page = GetCurrentKeyboardPage(); + UnionRoomChat_GetCursorColAndRow(&x, &y); + if (page != UNION_ROOM_KB_PAGE_COUNT) + { + StartSpriteAnim(sWork->selectorCursorSprite, 0); + sWork->selectorCursorSprite->pos1.x = x * 8 + 10; + sWork->selectorCursorSprite->pos1.y = y * 12 + 24; + } + else + { + StartSpriteAnim(sWork->selectorCursorSprite, 2); + sWork->selectorCursorSprite->pos1.x = 24; + sWork->selectorCursorSprite->pos1.y = y * 12 + 24; + } +} + +void UnionRoomChat_UpdateObjPalCycle(int arg0) +{ + const u16 *palette = &sUnionRoomChatInterfacePal[arg0 * 2 + 1]; + u8 index = IndexOfSpritePaletteTag(0); + LoadPalette(palette, index * 16 + 0x101, 4); +} + +void UnionRoomChat_SetSelectorCursorClosedImage(void) +{ + if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) + StartSpriteAnim(sWork->selectorCursorSprite, 1); + else + StartSpriteAnim(sWork->selectorCursorSprite, 3); + + sWork->cursorBlinkTimer = 0; +} + +bool32 UnionRoomChat_AnimateSelectorCursorReopen(void) +{ + if (sWork->cursorBlinkTimer > 3) + return FALSE; + + if (++sWork->cursorBlinkTimer > 3) + { + if (GetCurrentKeyboardPage() != UNION_ROOM_KB_PAGE_COUNT) + StartSpriteAnim(sWork->selectorCursorSprite, 0); + else + StartSpriteAnim(sWork->selectorCursorSprite, 2); + + return FALSE; + } + + return TRUE; +} + +void UnionRoomChat_SpawnTextEntryPointerSprites(void) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_TextEntryCursor, 76, 152, 2); + sWork->textEntryCursorSprite = &gSprites[spriteId]; + spriteId = CreateSprite(&sSpriteTemplate_CharacterSelectCursor, 64, 152, 1); + sWork->characterSelectCursorSprite = &gSprites[spriteId]; +} + +static void SpriteCB_TextEntryCursor(struct Sprite *sprite) +{ + int var0 = UnionRoomChat_GetMessageEntryCursorPosition(); + if (var0 == 15) + { + sprite->invisible = TRUE; + } + else + { + sprite->invisible = FALSE; + sprite->pos1.x = var0 * 8 + 76; + } +} + +static void SpriteCB_CharacterSelectCursor(struct Sprite *sprite) +{ + if (++sprite->data[0] > 4) + { + sprite->data[0] = 0; + if (++sprite->pos2.x > 4) + sprite->pos2.x = 0; + } +} + +void CreatePageSwitchUISprites(void) +{ + u8 spriteId = CreateSprite(&sSpriteTemplate_RButton, 8, 152, 3); + sWork->rButtonSprite = &gSprites[spriteId]; + spriteId = CreateSprite(&sSpriteTemplate_UnionRoomChatIcons, 32, 152, 4); + sWork->chatIconsSprite = &gSprites[spriteId]; + sWork->chatIconsSprite->invisible = TRUE; +} + +void UpdateVisibleUnionRoomChatIcon(void) +{ + if (GetCurrentKeyboardPage() == UNION_ROOM_KB_PAGE_COUNT) + { + if (UnionRoomChat_LenMessageEntryBuffer() != 0) + { + // REGISTER + sWork->chatIconsSprite->invisible = FALSE; + StartSpriteAnim(sWork->chatIconsSprite, 3); + } + else + { + sWork->chatIconsSprite->invisible = TRUE; + } + } + else + { + int anim = UnionRoomChat_GetWhetherShouldShowCaseToggleIcon(); + if (anim == 3) + { + sWork->chatIconsSprite->invisible = TRUE; + } + else + { + // A <--> a + sWork->chatIconsSprite->invisible = FALSE; + StartSpriteAnim(sWork->chatIconsSprite, anim); + } + } +} diff --git a/src/union_room_message.c b/src/union_room_message.c index 9ca5aa15b..1d26d1968 100644 --- a/src/union_room_message.c +++ b/src/union_room_message.c @@ -1,10 +1,11 @@ #include "global.h" #include "union_room_message.h" #include "mevent_server.h" +#include "constants/union_room.h" -ALIGNED(4) const u8 gUnknown_84571AC[] = _(""); +ALIGNED(4) const u8 gUnionRoomActivity_Blank[] = _(""); ALIGNED(4) const u8 gUnknown_84571B0[] = _(":"); -ALIGNED(4) const u8 gUnknown_84571B4[] = _("{EXTRA 7}"); +ALIGNED(4) const u8 gUnknown_84571B4[] = _("{ID}"); ALIGNED(4) const u8 gUnknown_84571B8[] = _("Please start over from the beginning."); ALIGNED(4) const u8 gUnknown_84571E0[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled."); ALIGNED(4) const u8 gUnref_845721C[] = _("ともだちからの れんらくを\nまっています"); @@ -124,6 +125,7 @@ const u8 *const gUnknown_8457754[] = { ALIGNED(4) const u8 gUnknown_845777C[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); ALIGNED(4) const u8 gUnknown_84577BC[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…"); + ALIGNED(4) const u8 gUnknown_84577F8[] = _("The link with your friend has been\ndropped…"); ALIGNED(4) const u8 gUnknown_8457824[] = _("{STR_VAR_1} replied, “No…”"); @@ -150,11 +152,12 @@ const u8 *const gUnknown_8457898[] = { ALIGNED(4) const u8 gUnknown_84578A0[] = _("はなしかけています…\nしょうしょう おまちください"); ALIGNED(4) const u8 gUnknown_84578BC[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…"); + ALIGNED(4) const u8 gUnknown_84578E4[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); ALIGNED(4) const u8 gUnknown_8457950[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); ALIGNED(4) const u8 gUnknown_84579BC[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); -const u8 *const gUnknown_8457A34[] = { +const u8 *const gURText_PleaseWaitMsgs[] = { gUnknown_84578E4, gUnknown_8457950, gUnknown_84579BC @@ -165,7 +168,7 @@ ALIGNED(4) const u8 gUnknown_8457A70[] = _("Hello!\nWould you like to do somethi ALIGNED(4) const u8 gUnknown_8457A98[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?"); ALIGNED(4) const u8 gUnknown_8457AD0[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?"); -const u8 *const gUnknown_8457B04[][2] = { +const u8 *const gURText_FriendPromptsForActivity[][2] = { { gUnknown_8457A40, gUnknown_8457A70 @@ -237,6 +240,7 @@ const u8 *const gUnknown_8457F80[][2] = { }; ALIGNED(4) const u8 gUnknown_8457F90[] = _("……\nThe TRAINER appears to be busy…\p"); + ALIGNED(4) const u8 gUnknown_8457FB4[] = _("A battle, huh?\nAll right, just give me some time."); ALIGNED(4) const u8 gUnknown_8457FE8[] = _("You want to chat, huh?\nSure, just wait a little."); ALIGNED(4) const u8 gUnknown_845801C[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD."); @@ -244,7 +248,7 @@ ALIGNED(4) const u8 gUnknown_8458054[] = _("A battle? Of course, but I need\ntim ALIGNED(4) const u8 gUnknown_8458088[] = _("Did you want to chat?\nOkay, but please wait a moment."); ALIGNED(4) const u8 gUnknown_84580C0[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); -const u8 *const gUnknown_84580F4[][4] = { +const u8 *const gResponseToURoomActivityInviteStringPtrs[][4] = { { gUnknown_8457FB4, gUnknown_8457FE8, @@ -415,7 +419,8 @@ ALIGNED(4) const u8 gUnknown_8458AB8[] = _("Welcome to the TRADING BOARD.\pYou m ALIGNED(4) const u8 gUnknown_8458B44[] = _("This TRADING BOARD is used for\noffering a POKéMON for a trade.\pAll you need to do is register a\nPOKéMON for a trade.\pAnother TRAINER may offer a party\nPOKéMON in return for the trade.\pWe hope you will register POKéMON\nand trade them with many, many\lother TRAINERS.\pWould you like to register one of\nyour POKéMON?"); ALIGNED(4) const u8 gUnref_ThankYouForComing_JP[] = _("こうかんけいじばん の とうろくが\nかんりょう しました\pごりよう ありがとう\nございました!\p"); ALIGNED(4) const u8 gUnref_NoOneRegisteredMon[] = _("けいじばんに だれも ポケモンを\nとうろく していません\p\n"); -ALIGNED(4) const u8 gUnknown_8458CD4[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); + +ALIGNED(4) const u8 gURText_PleaseChooseTypeOfMon[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); ALIGNED(4) const u8 gUnknown_8458D1C[] = _("Which of your party POKéMON will\nyou offer in trade?\p"); ALIGNED(4) const u8 gUnknown_8458D54[] = _("Registration has been canceled.\p"); ALIGNED(4) const u8 gUnknown_8458D78[] = _("Registration has been completed.\p"); @@ -439,9 +444,10 @@ const u8 *const gUnknown_8458F94[] = { }; ALIGNED(4) const u8 gUnknown_8458F9C[] = _("Your trade offer was rejected.\p"); -ALIGNED(4) const u8 gUnknown_8458FBC[] = _("EGG TRADE"); +ALIGNED(4) const u8 gText_EggTrade[] = _("EGG TRADE"); ALIGNED(4) const u8 gUnknown_8458FC8[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL"); ALIGNED(4) const u8 gUnknown_8458FE4[] = _("Please choose a TRAINER."); + ALIGNED(4) const u8 gUnknown_8459000[] = _("Please choose a TRAINER for\na SINGLE BATTLE."); ALIGNED(4) const u8 gUnknown_8459030[] = _("Please choose a TRAINER for\na DOUBLE BATTLE."); ALIGNED(4) const u8 gUnknown_8459060[] = _("Please choose the LEADER\nfor a MULTI BATTLE."); @@ -453,15 +459,15 @@ ALIGNED(4) const u8 gUnknown_8459160[] = _("BERRY CRUSH!\nPlease choose the LEAD ALIGNED(4) const u8 gUnknown_8459188[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER."); const u8 *const gUnknown_84591B8[] = { - gUnknown_8459000, - gUnknown_8459030, - gUnknown_8459060, - gUnknown_8459090, - gUnknown_845912C, - gUnknown_8459160, - gUnknown_8459188, - gUnknown_84590BC, - gUnknown_84590F4 + [LINK_GROUP_SINGLE_BATTLE] = gUnknown_8459000, + [LINK_GROUP_DOUBLE_BATTLE] = gUnknown_8459030, + [LINK_GROUP_MULTI_BATTLE] = gUnknown_8459060, + [LINK_GROUP_TRADE] = gUnknown_8459090, + [LINK_GROUP_POKEMON_JUMP] = gUnknown_845912C, + [LINK_GROUP_BERRY_CRUSH] = gUnknown_8459160, + [LINK_GROUP_BERRY_PICKING] = gUnknown_8459188, + [LINK_GROUP_WONDER_CARD] = gUnknown_84590BC, + [LINK_GROUP_WONDER_NEWS] = gUnknown_84590F4 }; ALIGNED(4) const u8 gUnknown_84591DC[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait..."); @@ -470,6 +476,7 @@ ALIGNED(4) const u8 gUnknown_8459238[] = _("Awaiting {STR_VAR_1}'s response…") ALIGNED(4) const u8 gUnknown_8459250[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait."); ALIGNED(4) const u8 gUnknown_845928C[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM."); ALIGNED(4) const u8 gUnref_PlsWaitLittleWHile[] = _("ほかの さんかしゃが そろうまで\nしょうしょう おまちください"); + ALIGNED(4) const u8 gUnknown_84592E8[] = _("No CARDS appear to be shared \nright now."); ALIGNED(4) const u8 gUnknown_8459314[] = _("No NEWS appears to be shared\nright now."); @@ -482,23 +489,26 @@ ALIGNED(4) const u8 gUnknown_8459344[] = _("BATTLE"); ALIGNED(4) const u8 gUnknown_845934C[] = _("CHAT"); ALIGNED(4) const u8 gUnknown_8459354[] = _("GREETINGS"); ALIGNED(4) const u8 gUnknown_8459360[] = _("EXIT"); + ALIGNED(4) const u8 gUnknown_8459368[] = _("EXIT"); ALIGNED(4) const u8 gUnknown_8459370[] = _("INFO"); ALIGNED(4) const u8 gUnknown_8459378[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV."); -ALIGNED(4) const u8 gUnknown_8459394[] = _("SINGLE BATTLE"); -ALIGNED(4) const u8 gUnknown_84593A4[] = _("DOUBLE BATTLE"); -ALIGNED(4) const u8 gUnknown_84593B4[] = _("MULTI BATTLE"); -ALIGNED(4) const u8 gUnknown_84593C4[] = _("POKéMON TRADES"); -ALIGNED(4) const u8 gUnknown_84593D4[] = _("CHAT"); -ALIGNED(4) const u8 gUnknown_84593DC[] = _("CARDS"); -ALIGNED(4) const u8 gUnknown_84593E4[] = _("WONDER CARDS"); -ALIGNED(4) const u8 gUnknown_84593F4[] = _("WONDER NEWS"); -ALIGNED(4) const u8 gUnknown_8459400[] = _("POKéMON JUMP"); -ALIGNED(4) const u8 gUnknown_8459410[] = _("BERRY CRUSH"); -ALIGNED(4) const u8 gUnknown_845941C[] = _("BERRY-PICKING"); -ALIGNED(4) const u8 gUnknown_845942C[] = _("SEARCH"); -ALIGNED(4) const u8 gUnknown_8459434[] = _("ぐるぐるこうかん"); -ALIGNED(4) const u8 gUnknown_8459440[] = _("アイテムトレード"); + +ALIGNED(4) const u8 gUnionRoomActivity_SingleBattle[] = _("SINGLE BATTLE"); +ALIGNED(4) const u8 gUnionRoomActivity_DoubleBattle[] = _("DOUBLE BATTLE"); +ALIGNED(4) const u8 gUnionRoomActivity_MultiBattle[] = _("MULTI BATTLE"); +ALIGNED(4) const u8 gUnionRoomActivity_PokemonTrades[] = _("POKéMON TRADES"); +ALIGNED(4) const u8 gUnionRoomActivity_Chat[] = _("CHAT"); +ALIGNED(4) const u8 gUnionRoomActivity_Cards[] = _("CARDS"); +ALIGNED(4) const u8 gUnionRoomActivity_WonderCards[] = _("WONDER CARDS"); +ALIGNED(4) const u8 gunionRoomActivity_WonderNews[] = _("WONDER NEWS"); +ALIGNED(4) const u8 gUnionRoomActivity_PokemonJump[] = _("POKéMON JUMP"); +ALIGNED(4) const u8 gUnionRoomActivity_BerryCrush[] = _("BERRY CRUSH"); +ALIGNED(4) const u8 gUnionRoomActivity_BerryPicking[] = _("BERRY-PICKING"); +ALIGNED(4) const u8 gUnionRoomActivity_Search[] = _("SEARCH"); +ALIGNED(4) const u8 gUnionRoomActivity_SpinTradeJP[] = _("ぐるぐるこうかん"); +ALIGNED(4) const u8 gUnionRoomActivity_ItemTradeJP[] = _("アイテムトレード"); + ALIGNED(4) const u8 gUnknown_845944C[] = _("It's a NORMAL CARD."); ALIGNED(4) const u8 gUnknown_8459460[] = _("It's a BRONZE CARD!"); ALIGNED(4) const u8 gUnknown_8459474[] = _("It's a COPPER CARD!"); @@ -515,6 +525,7 @@ const u8 *const gUnknown_84594B0[] = { ALIGNED(4) const u8 gUnknown_84594C4[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p"); ALIGNED(4) const u8 gUnknown_8459504[] = _("BATTLES: {SPECIAL_F7 0x00} WINS {SPECIAL_F7 0x02} LOSSES\nTRADES: {SPECIAL_F7 0x03} TIMES\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p"); + ALIGNED(4) const u8 gUnknown_8459544[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}"); ALIGNED(4) const u8 gUnknown_8459564[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}"); diff --git a/src/unk_815C980.c b/src/unk_815C980.c deleted file mode 100644 index 09b92c834..000000000 --- a/src/unk_815C980.c +++ /dev/null @@ -1,437 +0,0 @@ -#include "global.h" -#include "malloc.h" -#include "decompress.h" -#include "unk_815C980.h" -#include "main.h" -#include "battle.h" - -struct UnkStruct2 -{ - bool8 isActive; - u8 firstOamId; - u8 field_2; - u8 oamCount; - u8 palTagIndex; - u8 size; - u8 shape; - u8 priority; - u8 xDelta; - u8 field_9; - u16 tileStart; - s16 x; - s16 y; - u16 tileTag; - u16 palTag; - u32 field_14; - s32 field_18; -}; - -struct UnkStruct1 -{ - u32 count; - struct UnkStruct2 *array; -}; - -// this file's functions -static u8 sub_815D244(u8 arg0);; -static void sub_815CC28(struct UnkStruct2 *arg0); -static void sub_815CDDC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2); -static void sub_815CE90(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2); -static void sub_815CFEC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2); -static bool32 SharesTileWithAnyActive(u32 id); -static bool32 SharesPalWithAnyActive(u32 id); -static void sub_8035648(void); -static u8 sub_815D324(u32 shape, u32 size); - -// ewram -static EWRAM_DATA struct UnkStruct1 *gUnknown_203F454 = {0}; - -// const rom data -static const u8 gUnknown_8479658[][4] = -{ - {0x01, 0x04, 0x10, 0x40}, - {0x02, 0x04, 0x08, 0x20}, - {0x02, 0x04, 0x08, 0x20}, - {0x00, 0x00, 0x00, 0x00} -}; - -// code -bool32 sub_815C980(u32 count) -{ - u32 i; - - if (gUnknown_203F454 != NULL) - sub_815C9F4(); - - gUnknown_203F454 = Alloc(sizeof(*gUnknown_203F454)); - if (gUnknown_203F454 == NULL) - return FALSE; - - gUnknown_203F454->array = Alloc(sizeof(struct UnkStruct2) * count); - if (gUnknown_203F454->array == NULL) - { - Free(gUnknown_203F454); - return FALSE; - } - - gUnknown_203F454->count = count; - for (i = 0; i < count; i++) - { - gUnknown_203F454->array[i].isActive = FALSE; - gUnknown_203F454->array[i].firstOamId = 0xFF; - } - - return TRUE; -} - -void sub_815C9F4(void) -{ - if (gUnknown_203F454 != NULL) - { - if (gUnknown_203F454->array != NULL) - { - u32 i; - - for (i = 0; i < gUnknown_203F454->count; i++) - sub_815D108(i); - - Free(gUnknown_203F454->array); - } - - FREE_AND_SET_NULL(gUnknown_203F454); - } -} - -bool32 sub_815CA40(u32 id, s32 arg1, const struct UnkStruct3 *arg2) -{ - u32 i; - - if (gUnknown_203F454 == NULL) - return FALSE; - if (gUnknown_203F454->array[id].isActive) - return FALSE; - - gUnknown_203F454->array[id].firstOamId = sub_815D244(arg2->field_1); - if (gUnknown_203F454->array[id].firstOamId == 0xFF) - return FALSE; - - gUnknown_203F454->array[id].tileStart = GetSpriteTileStartByTag(arg2->spriteSheet->tag); - if (gUnknown_203F454->array[id].tileStart == 0xFFFF) - { - if (arg2->spriteSheet->size != 0) - { - gUnknown_203F454->array[id].tileStart = LoadSpriteSheet(arg2->spriteSheet); - } - else - { - struct CompressedSpriteSheet compObjectPic; - - compObjectPic = *(struct CompressedSpriteSheet*)(arg2->spriteSheet); - compObjectPic.size = GetDecompressedDataSize(arg2->spriteSheet->data); - gUnknown_203F454->array[id].tileStart = LoadCompressedSpriteSheet(&compObjectPic); - } - - if (gUnknown_203F454->array[id].tileStart == 0xFFFF) - return FALSE; - } - - gUnknown_203F454->array[id].palTagIndex = IndexOfSpritePaletteTag(arg2->spritePal->tag); - if (gUnknown_203F454->array[id].palTagIndex == 0xFF) - gUnknown_203F454->array[id].palTagIndex = LoadSpritePalette(arg2->spritePal); - - gUnknown_203F454->array[id].field_2 = arg2->field_0_0; - gUnknown_203F454->array[id].oamCount = arg2->field_1; - gUnknown_203F454->array[id].x = arg2->x; - gUnknown_203F454->array[id].y = arg2->y; - gUnknown_203F454->array[id].shape = arg2->shape; - gUnknown_203F454->array[id].size = arg2->size; - gUnknown_203F454->array[id].priority = arg2->priority; - gUnknown_203F454->array[id].xDelta = arg2->xDelta; - gUnknown_203F454->array[id].field_9 = sub_815D324(arg2->shape, arg2->size); - gUnknown_203F454->array[id].tileTag = arg2->spriteSheet->tag; - gUnknown_203F454->array[id].palTag = arg2->spritePal->tag; - gUnknown_203F454->array[id].isActive = TRUE; - gUnknown_203F454->array[id].field_14 = 1; - - for (i = 1; i < arg2->field_1; i++) - gUnknown_203F454->array[id].field_14 *= 10; - - sub_815CC28(&gUnknown_203F454->array[id]); - sub_815CD70(id, arg1); - - return TRUE; -} - -static void sub_815CC28(struct UnkStruct2 *arg0) -{ - u32 i; - u32 oamId = arg0->firstOamId; - u32 x = arg0->x; - u32 oamCount = arg0->oamCount + 1; - - CpuFill16(0, &gMain.oamBuffer[oamId], sizeof(struct OamData) * oamCount); - for (i = 0, oamId = arg0->firstOamId; i < oamCount; i++, oamId++) - { - gMain.oamBuffer[oamId].y = arg0->y; - gMain.oamBuffer[oamId].x = x; - gMain.oamBuffer[oamId].shape = arg0->shape; - gMain.oamBuffer[oamId].size = arg0->size; - gMain.oamBuffer[oamId].tileNum = arg0->tileStart; - gMain.oamBuffer[oamId].priority = arg0->priority; - gMain.oamBuffer[oamId].paletteNum = arg0->palTagIndex; - - x += arg0->xDelta; - } - - oamId--; - gMain.oamBuffer[oamId].x = arg0->x - arg0->xDelta; - gMain.oamBuffer[oamId].affineMode = 2; - gMain.oamBuffer[oamId].tileNum = arg0->tileStart + (arg0->field_9 * 10); -} - -void sub_815CD70(u32 id, s32 arg1) -{ - bool32 r2; - - if (gUnknown_203F454 == NULL) - return; - if (!gUnknown_203F454->array[id].isActive) - return; - - gUnknown_203F454->array[id].field_18 = arg1; - if (arg1 < 0) - { - r2 = TRUE; - arg1 *= -1; - } - else - { - r2 = FALSE; - } - - switch (gUnknown_203F454->array[id].field_2) - { - case 0: - default: - sub_815CDDC(&gUnknown_203F454->array[id], arg1, r2); - break; - case 1: - sub_815CE90(&gUnknown_203F454->array[id], arg1, r2); - break; - case 2: - sub_815CFEC(&gUnknown_203F454->array[id], arg1, r2); - break; - } -} - -static void sub_815CDDC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2) -{ - u32 r5 = arg0->field_14; - u32 oamId = arg0->firstOamId; - - while (r5 != 0) - { - u32 r4 = arg1 / r5; - arg1 -= (r4 * r5); - r5 /= 10; - - gMain.oamBuffer[oamId].tileNum = (r4 * arg0->field_9) + arg0->tileStart; - oamId++; - } - - if (arg2) - gMain.oamBuffer[oamId].affineMode = 0; - else - gMain.oamBuffer[oamId].affineMode = 2; -} - -static void sub_815CE90(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2) -{ - u32 r5 = arg0->field_14; - static int gUnknown_3002078; - static int gUnknown_300207C; - static int gUnknown_3002080; - - gUnknown_3002078 = arg0->firstOamId; - gUnknown_300207C = 0; - gUnknown_3002080 = -1; - - while (r5 != 0) - { - u32 r4 = arg1 / r5; - arg1 -= (r4 * r5); - r5 /= 10; - - if (r4 != 0 || gUnknown_3002080 != -1 || r5 == 0) - { - gMain.oamBuffer[gUnknown_3002078].tileNum = (r4 * arg0->field_9) + arg0->tileStart; - gMain.oamBuffer[gUnknown_3002078].affineMode = 0; - - if (gUnknown_3002080 == -1) - gUnknown_3002080 = gUnknown_300207C; - } - else - { - gMain.oamBuffer[gUnknown_3002078].affineMode = 2; - } - - gUnknown_3002078++; - gUnknown_300207C++; - } - - if (arg2) - { - gMain.oamBuffer[gUnknown_3002078].affineMode = 0; - gMain.oamBuffer[gUnknown_3002078].x = arg0->x + ((gUnknown_3002080 - 1) * arg0->xDelta); - } - else - { - gMain.oamBuffer[gUnknown_3002078].affineMode = 2; - } -} - -static void sub_815CFEC(struct UnkStruct2 *arg0, s32 arg1, bool32 arg2) -{ - u32 r5 = arg0->field_14; - u32 oamId = arg0->firstOamId; - u32 var_28 = 0; - s32 r9 = 0; - - while (r5 != 0) - { - u32 r4 = arg1 / r5; - arg1 -= (r4 * r5); - r5 /= 10; - - if (r4 != 0 || var_28 != 0 || r5 == 0) - { - var_28 = 1; - gMain.oamBuffer[oamId].tileNum = (r4 * arg0->field_9) + arg0->tileStart; - gMain.oamBuffer[oamId].affineMode = 0; - - oamId++; - r9++; - } - } - - while (r9 < arg0->oamCount) - { - gMain.oamBuffer[oamId].affineMode = 2; - oamId++; - r9++; - } - - if (arg2) - gMain.oamBuffer[oamId].affineMode = 0; - else - gMain.oamBuffer[oamId].affineMode = 2; -} - -void sub_815D108(u32 id) -{ - s32 oamId, oamCount, i; - - if (gUnknown_203F454 == NULL) - return; - if (!gUnknown_203F454->array[id].isActive) - return; - - oamCount = gUnknown_203F454->array[id].oamCount + 1; - oamId = gUnknown_203F454->array[id].firstOamId; - - for (i = 0; i < oamCount; i++, oamId++) - gMain.oamBuffer[oamId].affineMode = 2; - - if (!SharesTileWithAnyActive(id)) - FreeSpriteTilesByTag(gUnknown_203F454->array[id].tileTag); - if (!SharesPalWithAnyActive(id)) - FreeSpritePaletteByTag(gUnknown_203F454->array[id].palTag); - - gUnknown_203F454->array[id].isActive = FALSE; -} - -void sub_815D1A8(u32 id, bool32 arg1) -{ - s32 oamId, oamCount, i; - - if (gUnknown_203F454 == NULL) - return; - if (!gUnknown_203F454->array[id].isActive) - return; - - oamCount = gUnknown_203F454->array[id].oamCount + 1; - oamId = gUnknown_203F454->array[id].firstOamId; - if (arg1) - { - for (i = 0; i < oamCount; i++, oamId++) - gMain.oamBuffer[oamId].affineMode = 2; - } - else - { - for (i = 0; i < oamCount; i++, oamId++) - gMain.oamBuffer[oamId].affineMode = 0; - - sub_815CD70(id, gUnknown_203F454->array[id].field_18); - } -} - -static u8 sub_815D244(u8 arg0) -{ - u32 i; - u16 oamCount = 64; - - for (i = 0; i < gUnknown_203F454->count; i++) - { - if (!gUnknown_203F454->array[i].isActive) - { - if (gUnknown_203F454->array[i].firstOamId != 0xFF && gUnknown_203F454->array[i].oamCount <= arg0) - return gUnknown_203F454->array[i].firstOamId; - } - else - { - oamCount += 1 + gUnknown_203F454->array[i].oamCount; - } - } - - if (oamCount + arg0 + 1 > 128) - return 0xFF; - else - return oamCount; -} - -static bool32 SharesTileWithAnyActive(u32 id) -{ - u32 i; - - for (i = 0; i < gUnknown_203F454->count; i++) - { - if (gUnknown_203F454->array[i].isActive && i != id - && gUnknown_203F454->array[i].tileTag == gUnknown_203F454->array[id].tileTag) - { - return TRUE; - } - } - - return FALSE; -} - -static bool32 SharesPalWithAnyActive(u32 id) -{ - u32 i; - - for (i = 0; i < gUnknown_203F454->count; i++) - { - if (gUnknown_203F454->array[i].isActive && i != id - && gUnknown_203F454->array[i].palTag == gUnknown_203F454->array[id].palTag) - { - return TRUE; - } - } - - return FALSE; -} - -static u8 sub_815D324(u32 shape, u32 size) -{ - return gUnknown_8479658[shape][size]; -} diff --git a/src/vs_seeker.c b/src/vs_seeker.c index b35b6143e..9c9a4d67f 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -22,7 +22,6 @@ #include "field_player_avatar.h" #include "event_object_80688E4.h" #include "event_object_8097404.h" -#include "unk_810c3a4.h" #include "vs_seeker.h" #include "constants/movement_commands.h" #include "constants/object_events.h" @@ -598,7 +597,7 @@ static void sub_810C3B8(u8 taskId) { if (sub_810CF04(i) == TRUE) { - if (gObjectEvents[i].mapobj_bit_1) + if (gObjectEvents[i].singleMovementActive) return; FreezeObjectEvent(&gObjectEvents[i]); } diff --git a/src/wireless_communication_status_screen.c b/src/wireless_communication_status_screen.c index 9be2823aa..7267d4ace 100644 --- a/src/wireless_communication_status_screen.c +++ b/src/wireless_communication_status_screen.c @@ -13,40 +13,32 @@ #include "dynamic_placeholder_text_util.h" #include "overworld.h" #include "sound.h" +#include "strings.h" #include "menu.h" #include "librfu.h" #include "link_rfu.h" #include "union_room.h" #include "constants/songs.h" +#include "constants/union_room.h" struct WirelessCommunicationStatusScreenStruct { - u32 field_00[4]; - u32 field_10[4]; - u32 field_20[16]; - u8 field_60; - u8 field_61; + u32 counts[4]; + u32 lastCounts[4]; + u32 activities[16]; + u8 taskId; + u8 rfuTaskId; u8 filler_62[0xA]; }; -struct WirelessCommunicationStatusScreenStruct * gUnknown_3002040; +static struct WirelessCommunicationStatusScreenStruct * sWCSS; -extern const u8 gUnknown_841E2B4[]; -extern const u8 gUnknown_841E2BF[]; -extern const u8 gUnknown_841E2C9[]; -extern const u8 gUnknown_841E2D4[]; -extern const u8 gUnknown_841E245[]; -extern const u8 gUnknown_841E263[]; -extern const u8 gUnknown_841E273[]; -extern const u8 gUnknown_841E284[]; -extern const u8 gUnknown_841E29E[]; +static void CB2_InitWirelessCommunicationScreen(void); +static void Task_WirelessCommunicationScreen(u8 taskId); +static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx); +static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * activities, u8 taskId); -void sub_814F1E4(void); -void sub_814F46C(u8 taskId); -void sub_814F65C(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx); -bool32 sub_814F7E4(u32 * a0, u32 * a1, u32 * a2, u8 taskId); - -const u16 gUnknown_846F4D0[][16] = { +static const u16 sWCSS_Palettes[][16] = { INCBIN_U16("graphics/misc/unk_846f4d0.gbapal"), INCBIN_U16("graphics/misc/unk_846f4f0.gbapal"), INCBIN_U16("graphics/misc/unk_846f510.gbapal"), @@ -65,10 +57,10 @@ const u16 gUnknown_846F4D0[][16] = { INCBIN_U16("graphics/misc/unk_846f6b0.gbapal") }; -const u32 gUnknown_846F6D0[] = INCBIN_U32("graphics/misc/unk_846f6d0.4bpp.lz"); -const u16 gUnknown_846F8E0[] = INCBIN_U16("graphics/misc/unk_846f8e0.bin"); +static const u32 sBgTilesGfx[] = INCBIN_U32("graphics/misc/unk_846f6d0.4bpp.lz"); +static const u16 sBgTilemap[] = INCBIN_U16("graphics/misc/unk_846f8e0.bin"); -const struct BgTemplate gUnknown_846FA74[] = { +static const struct BgTemplate sBGTemplates[] = { { .bg = 0, .charBaseIndex = 2, @@ -88,7 +80,7 @@ const struct BgTemplate gUnknown_846FA74[] = { } }; -const struct WindowTemplate gUnknown_846FA7C[] = { +static const struct WindowTemplate sWindowTemplates[] = { { .bg = 0x00, .tilemapLeft = 0x03, @@ -116,47 +108,51 @@ const struct WindowTemplate gUnknown_846FA7C[] = { }, DUMMY_WIN_TEMPLATE }; -const u8 *const gUnknown_846FA9C[] = { +static const u8 *const gUnknown_846FA9C[] = { gUnknown_841E2B4, gUnknown_841E2BF, gUnknown_841E2C9, gUnknown_841E2D4 }; -const u8 *const gUnknown_846FAAC[] = { - gUnknown_841E245, - gUnknown_841E263, - gUnknown_841E273, - gUnknown_841E284, - gUnknown_841E29E + +static const u8 *const sHeaderTextPtrs[] = { + gText_WirelessCommunicationStatus, + gText_PeopleTrading, + gText_PeopleBattling, + gText_PeopleInUnionRoom, + gText_PeopleCommunicating }; -const u8 gUnknown_846FAC0[][3] = { - {0x01, 0x01, 0x02}, - {0x02, 0x01, 0x02}, - {0x03, 0x01, 0x04}, - {0x04, 0x00, 0x02}, - {0x15, 0x03, 0x02}, - {0x16, 0x03, 0x02}, - {0x09, 0x04, 0x00}, - {0x0a, 0x04, 0x00}, - {0x0b, 0x04, 0x00}, - {0x0c, 0xff, 0x00}, - {0x0d, 0x00, 0x00}, - {0x0e, 0xff, 0x00}, - {0x0f, 0x04, 0x00}, - {0x10, 0xff, 0x00}, - {0x40, 0x02, 0x01}, - {0x41, 0x02, 0x02}, - {0x44, 0x02, 0x02}, - {0x45, 0x02, 0x00}, - {0x48, 0x02, 0x02}, - {0x54, 0x02, 0x01}, - {0x53, 0x02, 0x02}, - {0x51, 0x02, 0x01}, - {0x52, 0x02, 0x01} +static const u8 sCountParams[][3] = { + // activity, count idx, by + // by=0 means count all + // UB: no check for count idx == -1 + {ACTIVITY_BATTLE, 1, 2}, + {ACTIVITY_DBLBATTLE, 1, 2}, + {ACTIVITY_MLTBATTLE, 1, 4}, + {ACTIVITY_TRADE, 0, 2}, + {ACTIVITY_WCARD2, 3, 2}, + {ACTIVITY_WNEWS2, 3, 2}, + {ACTIVITY_PJUMP, 4, 0}, + {ACTIVITY_BCRUSH, 4, 0}, + {ACTIVITY_BPICK, 4, 0}, + {ACTIVITY_SEARCH, -1, 0}, + {ACTIVITY_SPINTRADE, 0, 0}, + {ACTIVITY_ITEMTRADE, -1, 0}, + {0x0f, 4, 0}, + {0x10, -1, 0}, + {0x40, 2, 1}, + {ACTIVITY_BATTLE | 0x40, 2, 2}, + {ACTIVITY_TRADE | 0x40, 2, 2}, + {ACTIVITY_CHAT | 0x40, 2, 0}, + {ACTIVITY_CARD | 0x40, 2, 2}, + {20 | 0x40, 2, 1}, + {19 | 0x40, 2, 2}, + {ACTIVITY_ACCEPT | 0x40, 2, 1}, + {ACTIVITY_DECLINE | 0x40, 2, 1} }; -void sub_814F19C(void) +static void CB2_RunWirelessCommunicationScreen(void) { if (!IsDma3ManagerBusyWithBgCopy()) { @@ -168,50 +164,50 @@ void sub_814F19C(void) } } -void sub_814F1C0(void) +static void VBlankCB_WirelessCommunicationScreen(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_814F1D4(void) +void Special_WirelessCommunicationScreen(void) { - SetMainCallback2(sub_814F1E4); + SetMainCallback2(CB2_InitWirelessCommunicationScreen); } -void sub_814F1E4(void) +static void CB2_InitWirelessCommunicationScreen(void) { SetGpuReg(REG_OFFSET_DISPCNT, 0); - gUnknown_3002040 = AllocZeroed(sizeof(*gUnknown_3002040)); + sWCSS = AllocZeroed(sizeof(*sWCSS)); SetVBlankCallback(NULL); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_846FA74, NELEMS(gUnknown_846FA74)); + ResetBgsAndClearDma3BusyFlags(FALSE); + InitBgsFromTemplates(0, sBGTemplates, NELEMS(sBGTemplates)); SetBgTilemapBuffer(1, Alloc(0x800)); SetBgTilemapBuffer(0, Alloc(0x800)); - DecompressAndLoadBgGfxUsingHeap(1, gUnknown_846F6D0, 0, 0, 0); - CopyToBgTilemapBuffer(1, gUnknown_846F8E0, 0, 0); - InitWindows(gUnknown_846FA7C); + DecompressAndLoadBgGfxUsingHeap(1, sBgTilesGfx, 0, 0, 0); + CopyToBgTilemapBuffer(1, sBgTilemap, 0, 0); + InitWindows(sWindowTemplates); DeactivateAllTextPrinters(); ResetPaletteFade(); ResetSpriteData(); ResetTasks(); ScanlineEffect_Stop(); m4aSoundVSyncOn(); - SetVBlankCallback(sub_814F1C0); - gUnknown_3002040->field_60 = CreateTask(sub_814F46C, 0); - gUnknown_3002040->field_61 = sub_8116DE0(); - gUnknown_3002040->field_10[3] = 1; + SetVBlankCallback(VBlankCB_WirelessCommunicationScreen); + sWCSS->taskId = CreateTask(Task_WirelessCommunicationScreen, 0); + sWCSS->rfuTaskId = CreateTask_ListenToWireless(); + sWCSS->lastCounts[3] = 1; ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); ChangeBgY(1, 0, 0); - LoadPalette(gUnknown_846F4D0, 0, 0x20); + LoadPalette(sWCSS_Palettes, 0, 0x20); Menu_LoadStdPalAt(0xf0); DynamicPlaceholderTextUtil_Reset(); FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0xF); CopyBgTilemapBufferToVram(1); - SetMainCallback2(sub_814F19C); + SetMainCallback2(CB2_RunWirelessCommunicationScreen); RunTasks(); RunTextPrinters(); AnimateSprites(); @@ -219,7 +215,7 @@ void sub_814F1E4(void) UpdatePaletteFade(); } -void sub_814F32C(void) +static void ExitWirelessCommunicationStatusScreen(void) { s32 i; @@ -228,55 +224,55 @@ void sub_814F32C(void) { Free(GetBgTilemapBuffer(i)); } - Free(gUnknown_3002040); + Free(sWCSS); SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); } -void sub_814F364(s16 * unk0, s16 * unk1) +static void WCSS_CyclePalette(s16 * frameCtr_p, s16 * palIdx_p) { s32 idx; - (*unk0)++; - if (*unk0 > 5) + (*frameCtr_p)++; + if (*frameCtr_p > 5) { - (*unk1)++; - if (*unk1 == 14) + (*palIdx_p)++; + if (*palIdx_p == 14) { - *unk1 = 0; + *palIdx_p = 0; } - *unk0 = 0; + *frameCtr_p = 0; } - idx = *unk1 + 2; - LoadPalette(gUnknown_846F4D0[idx], 0, 16); + idx = *palIdx_p + 2; + LoadPalette(sWCSS_Palettes[idx], 0, 16); } -void sub_814F3A8(void) +static void PrintHeaderTexts(void) { s32 i; u32 width; - FillWindowPixelBuffer(0, 0); - FillWindowPixelBuffer(1, 0); - FillWindowPixelBuffer(2, 0); - width = 0xC0 - GetStringWidth(3, gUnknown_846FAAC[0], 0); - sub_814F65C(0, 3, gUnknown_846FAAC[0], width / 2, 6, 3); + FillWindowPixelBuffer(0, PIXEL_FILL(0)); + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + FillWindowPixelBuffer(2, PIXEL_FILL(0)); + width = 0xC0 - GetStringWidth(3, sHeaderTextPtrs[0], 0); + WCSS_AddTextPrinterParameterized(0, 3, sHeaderTextPtrs[0], width / 2, 6, 3); for (i = 0; i < 3; i++) { - sub_814F65C(1, 3, gUnknown_846FAAC[i + 1], 0, 30 * i + 10, 1); + WCSS_AddTextPrinterParameterized(1, 3, sHeaderTextPtrs[i + 1], 0, 30 * i + 10, 1); } - sub_814F65C(1, 3, gUnknown_846FAAC[i + 1], 0, 30 * i + 10, 2); + WCSS_AddTextPrinterParameterized(1, 3, sHeaderTextPtrs[i + 1], 0, 30 * i + 10, 2); PutWindowTilemap(0); CopyWindowToVram(0, 2); PutWindowTilemap(1); CopyWindowToVram(1, 2); } -void sub_814F46C(u8 taskId) +static void Task_WirelessCommunicationScreen(u8 taskId) { s32 i; switch (gTasks[taskId].data[0]) { case 0: - sub_814F3A8(); + PrintHeaderTexts(); gTasks[taskId].data[0]++; break; case 1: @@ -291,16 +287,16 @@ void sub_814F46C(u8 taskId) gTasks[taskId].data[0]++; break; case 3: - if (sub_814F7E4(gUnknown_3002040->field_00, gUnknown_3002040->field_10, gUnknown_3002040->field_20, gUnknown_3002040->field_61)) + if (UpdateCommunicationCounts(sWCSS->counts, sWCSS->lastCounts, sWCSS->activities, sWCSS->rfuTaskId)) { - FillWindowPixelBuffer(2, 0x00); + FillWindowPixelBuffer(2, PIXEL_FILL(0)); for (i = 0; i < 4; i++) { - ConvertIntToDecimalStringN(gStringVar4, gUnknown_3002040->field_00[i], STR_CONV_MODE_RIGHT_ALIGN, 2); + ConvertIntToDecimalStringN(gStringVar4, sWCSS->counts[i], STR_CONV_MODE_RIGHT_ALIGN, 2); if (i != 3) - sub_814F65C(2, 3, gStringVar4, 4, 30 * i + 10, 1); + WCSS_AddTextPrinterParameterized(2, 3, gStringVar4, 4, 30 * i + 10, 1); else - sub_814F65C(2, 3, gStringVar4, 4, 100, 2); + WCSS_AddTextPrinterParameterized(2, 3, gStringVar4, 4, 100, 2); } PutWindowTilemap(2); CopyWindowToVram(2, 3); @@ -308,10 +304,10 @@ void sub_814F46C(u8 taskId) if (JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - gTasks[gUnknown_3002040->field_61].data[15] = 0xFF; + gTasks[sWCSS->rfuTaskId].data[15] = 0xFF; gTasks[taskId].data[0]++; } - sub_814F364(&gTasks[taskId].data[7], &gTasks[taskId].data[8]); + WCSS_CyclePalette(&gTasks[taskId].data[7], &gTasks[taskId].data[8]); break; case 4: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); @@ -320,117 +316,117 @@ void sub_814F46C(u8 taskId) case 5: if (!gPaletteFade.active) { - SetMainCallback2(sub_814F32C); + SetMainCallback2(ExitWirelessCommunicationStatusScreen); DestroyTask(taskId); } break; } } -void sub_814F65C(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx) +static void WCSS_AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 palIdx) { u8 textColor[3]; switch (palIdx) { case 0: - textColor[0] = 0; - textColor[1] = 2; - textColor[2] = 3; + textColor[0] = TEXT_COLOR_TRANSPARENT; + textColor[1] = TEXT_COLOR_DARK_GREY; + textColor[2] = TEXT_COLOR_LIGHT_GREY; break; case 1: - textColor[0] = 0; - textColor[1] = 1; - textColor[2] = 3; + textColor[0] = TEXT_COLOR_TRANSPARENT; + textColor[1] = TEXT_COLOR_WHITE; + textColor[2] = TEXT_COLOR_LIGHT_GREY; break; case 2: - textColor[0] = 0; - textColor[1] = 4; - textColor[2] = 5; + textColor[0] = TEXT_COLOR_TRANSPARENT; + textColor[1] = TEXT_COLOR_RED; + textColor[2] = TEXT_COLOR_LIGHT_RED; break; case 3: - textColor[0] = 0; - textColor[1] = 7; - textColor[2] = 6; + textColor[0] = TEXT_COLOR_TRANSPARENT; + textColor[1] = TEXT_COLOR_LIGHT_GREEN; + textColor[2] = TEXT_COLOR_GREEN; break; case 4: - textColor[0] = 0; - textColor[1] = 1; - textColor[2] = 2; + textColor[0] = TEXT_COLOR_TRANSPARENT; + textColor[1] = TEXT_COLOR_WHITE; + textColor[2] = TEXT_COLOR_DARK_GREY; break; // default: UB } AddTextPrinterParameterized4(windowId, fontId,x, y, fontId == 0 ? 0 : 1, 0, textColor, -1, str); } -u32 sub_814F714(struct UnkStruct_x20 * unk20, u32 * arg1) +static u32 CountMembersInGroup(struct UnkStruct_x20 * unk20, u32 * counts) { - u32 r8 = unk20->unk.gname.unk_0a_0; + u32 activity = unk20->gname_uname.gname.activity; s32 i, j, k; - for (i = 0; i < NELEMS(gUnknown_846FAC0); i++) + for (i = 0; i < NELEMS(sCountParams); i++) { - if (r8 == gUnknown_846FAC0[i][0] && unk20->field_1A_0 == 1) + if (activity == sCountParams[i][0] && unk20->groupScheduledAnim == UNION_ROOM_SPAWN_IN) { - if (gUnknown_846FAC0[i][2] == 0) + if (sCountParams[i][2] == 0) { k = 0; - for (j = 0; j < 4; j++) + for (j = 0; j < RFU_CHILD_MAX; j++) { - if (unk20->unk.gname.unk_04[j] != 0) k++; + if (unk20->gname_uname.gname.child_sprite_gender[j] != 0) k++; } k++; - arg1[gUnknown_846FAC0[i][1]] += k; + counts[sCountParams[i][1]] += k; } else { - arg1[gUnknown_846FAC0[i][1]] += gUnknown_846FAC0[i][2]; + counts[sCountParams[i][1]] += sCountParams[i][2]; } } } - return r8; + return activity; } -bool32 sub_814F7BC(const u32 * ptr0, const u32 * ptr1) +static bool32 HaveCountsChanged(const u32 * newCounts, const u32 * prevCounts) { s32 i; for (i = 0; i < 4; i++) { - if (ptr0[i] != ptr1[i]) + if (newCounts[i] != prevCounts[i]) return TRUE; } return FALSE; } -bool32 sub_814F7E4(u32 * a0, u32 * a1, u32 * a2, u8 taskId) +static bool32 UpdateCommunicationCounts(u32 * counts, u32 * lastCounts, u32 * activities, u8 taskId) { - bool32 r8 = FALSE; - u32 sp0[4] = {0, 0, 0, 0}; + bool32 activitiesUpdated = FALSE; + u32 buffer[4] = {0, 0, 0, 0}; struct UnkStruct_Group * group = (void *)gTasks[taskId].data; s32 i; for (i = 0; i < 16; i++) { - u32 r1 = sub_814F714(&group->field_0->arr[i], sp0); - if (r1 != a2[i]) + u32 activity = CountMembersInGroup(&group->field_0->arr[i], buffer); + if (activity != activities[i]) { - a2[i] = r1; - r8 = TRUE; + activities[i] = activity; + activitiesUpdated = TRUE; } } - if (sub_814F7BC(sp0, a1) == FALSE) + if (HaveCountsChanged(buffer, lastCounts) == FALSE) { - if (r8 == TRUE) + if (activitiesUpdated == TRUE) return TRUE; else return FALSE; } - memcpy(a0, sp0, sizeof(sp0)); - memcpy(a1, sp0, sizeof(sp0)); - a0[3] = a0[0] + a0[1] + a0[2]; + memcpy(counts, buffer, sizeof(buffer)); + memcpy(lastCounts, buffer, sizeof(buffer)); + counts[3] = counts[0] + counts[1] + counts[2]; return TRUE; } diff --git a/sym_bss.txt b/sym_bss.txt index 5651e3366..ec3d7d947 100644 --- a/sym_bss.txt +++ b/sym_bss.txt @@ -86,9 +86,10 @@ gUnknown_3002030: @ 3002030 gUnknown_3002038: @ 3002038 .space 0x8 -gUnknown_3002040: @ 3002040 - .space 0x4 + .align 2 + .include "src/wireless_communication_status_screen.o" + .align 2 gUnknown_3002044: @ 3002044 .space 0x4 @@ -96,14 +97,15 @@ gUnknown_3002044: @ 3002044 .include "src/ereader_helpers.o" .align 3 - .include "src/unk_815C980.o" + .include "src/digit_obj_util.o" .align 3 .include "asm/m4a_1.o" + .align 3 .include "src/agb_flash.o" - - .space 0x4 @ This isn't needed for Ruby/Sapphire or Emerald. - + .align 3 .include "*libgcc.a:dp-bit.o" + .align 3 .include "*libgcc.a:fp-bit.o" + .align 3 .include "*libc.a:syscalls.o" diff --git a/sym_common.txt b/sym_common.txt index d71df5ce2..e729f5515 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -91,7 +91,7 @@ gUnknown_3005078: @ 3005078 .align 4 .include "link_rfu_2.o" .align 4 - .include "link_rfu.o" + .include "AgbRfu_LinkManager.o" .align 4 .include "list_menu.o" .align 2 diff --git a/sym_ewram.txt b/sym_ewram.txt index 3ab110c7b..32229ac11 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -369,17 +369,12 @@ gUnknown_203B098: @ 203B098 .align 2 .include "src/party_menu.o" - .align 2 -gUnknown_203B0E0: @ 203B0E0 - .space 0x4 - -gUnknown_203B0E4: @ 203B0E4 - .space 0x4 - -gUnknown_203B0E8: @ 203B0E8 - .space 0x4 - + .include "src/union_room_chat.o" + .align 2 + .include "src/union_room_chat_display.o" + .align 2 + .include "src/union_room_chat_objects.o" .align 2 .include "src/help_system_812B1E0.o" .align 2 @@ -448,7 +443,9 @@ gUnknown_203B170: @ 203B170 .align 2 .include "src/mevent_server.o" .align 2 - .include "src/mevent_8145654.o" + .include "src/mevent_show_card.o" + .align 2 + .include "src/mevent_show_news.o" .align 2 .include "src/seagallop.o" @@ -486,7 +483,7 @@ gUnknown_203F440: @ 203F440 .align 2 .include "src/teachy_tv.o" .align 2 - .include "src/unk_815C980.o" + .include "src/digit_obj_util.o" .align 2 .include "src/trainer_tower.o" .align 2 |