summaryrefslogtreecommitdiff
path: root/src/record_mixing.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/record_mixing.c')
-rw-r--r--src/record_mixing.c190
1 files changed, 40 insertions, 150 deletions
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 76fe13059..58722010f 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -23,7 +23,7 @@ extern u8 gUnknown_083D0288[2];
extern u8 gUnknown_083D028A[2][3];
extern u8 gUnknown_083D0290[9][4];
-extern u8 gUnknown_02038738[]; //Don't know what type this points to
+extern struct RecordMixing_UnknownStruct gUnknown_02038738[2]; //Don't know what type this points to
extern u16 gSpecialVar_0x8005;
extern u32 gUnknown_03005D2C;
extern u8 gUnknown_03000718;
@@ -36,7 +36,7 @@ extern bool8 gReceivedRemoteLinkPlayers;
void sub_80B929C(void)
{
- sub_8083A84(sub_80B9484);
+ sub_8083A84(Task_RecordMixing_Main);
}
struct PlayerRecords {
@@ -53,8 +53,10 @@ struct PlayerRecords {
extern struct PlayerRecords unk_2008000;
extern struct PlayerRecords unk_2018000;
-#ifdef NONMATCHING
-void sub_80B92AC(void)
+void sub_80BC300();
+void sub_80C045C();
+
+void RecordMixing_PrepareExchangePacket(void)
{
sub_80BC300();
sub_80C045C();
@@ -64,128 +66,20 @@ void sub_80B92AC(void)
memcpy(unk_2018000.filler1004, gUnknown_083D0274, 0x40);
memcpy(unk_2018000.filler1044, gUnknown_083D0278, 0x40);
memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, 0x28);
- memcpy(gUnknown_02038738, gSaveBlock1.filler_303C, 0x38);
- memcpy(gUnknown_02038738 + 0x38, gSaveBlock1.filler_3074, 0x38);
- sub_8041324(gSaveBlock1.filler_2F9C, gUnknown_02038738);
+ gUnknown_02038738[0] = gSaveBlock1.filler_303C[0];
+ gUnknown_02038738[1] = gSaveBlock1.filler_303C[1];
+ sub_8041324(gSaveBlock1.daycareData, gUnknown_02038738);
memcpy(unk_2018000.filler10AC, gUnknown_083D0280, 0x78);
memcpy(unk_2018000.filler1124, gUnknown_083D0284, 0xA4);
if (GetMultiplayerId() == 0)
unk_2018000.filler11C8[0] = sub_8126338();
}
-#else
-__attribute__((naked))
-void sub_80B92AC(void)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- bl sub_80BC300\n\
- bl sub_80C045C\n\
- ldr r6, _080B9364 @ =0x02018000\n\
- ldr r0, _080B9368 @ =recordMixingSecretBases\n\
- ldr r1, [r0]\n\
- movs r2, 0xC8\n\
- lsls r2, 4\n\
- adds r0, r6, 0\n\
- bl memcpy\n\
- movs r1, 0xC8\n\
- lsls r1, 4\n\
- adds r0, r6, r1\n\
- ldr r1, _080B936C @ =recordMixingTvShows\n\
- ldr r1, [r1]\n\
- movs r2, 0xE1\n\
- lsls r2, 2\n\
- bl memcpy\n\
- ldr r2, _080B9370 @ =0x00001004\n\
- adds r0, r6, r2\n\
- ldr r1, _080B9374 @ =gUnknown_083D0274\n\
- ldr r1, [r1]\n\
- movs r2, 0x40\n\
- bl memcpy\n\
- ldr r1, _080B9378 @ =0x00001044\n\
- adds r0, r6, r1\n\
- ldr r1, _080B937C @ =gUnknown_083D0278\n\
- ldr r1, [r1]\n\
- movs r2, 0x40\n\
- bl memcpy\n\
- ldr r2, _080B9380 @ =0x00001084\n\
- adds r0, r6, r2\n\
- ldr r1, _080B9384 @ =recordMixingEasyChatPairs\n\
- ldr r1, [r1]\n\
- movs r2, 0x28\n\
- bl memcpy\n\
- ldr r5, _080B9388 @ =gUnknown_02038738\n\
- ldr r4, _080B938C @ =gSaveBlock1\n\
- ldr r0, _080B9390 @ =0x0000303c\n\
- adds r1, r4, r0\n\
- adds r0, r5, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r2, _080B9394 @ =0x00003074\n\
- adds r1, r4, r2\n\
- adds r0, r5, 0\n\
- adds r0, 0x38\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r0, _080B9398 @ =0x00002f9c\n\
- adds r4, r0\n\
- adds r0, r4, 0\n\
- adds r1, r5, 0\n\
- bl sub_8041324\n\
- ldr r1, _080B939C @ =0x000010ac\n\
- adds r0, r6, r1\n\
- ldr r1, _080B93A0 @ =gUnknown_083D0280\n\
- ldr r1, [r1]\n\
- movs r2, 0x78\n\
- bl memcpy\n\
- ldr r2, _080B93A4 @ =0x00001124\n\
- adds r0, r6, r2\n\
- ldr r1, _080B93A8 @ =gUnknown_083D0284\n\
- ldr r1, [r1]\n\
- movs r2, 0xA4\n\
- bl memcpy\n\
- bl GetMultiplayerId\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080B935C\n\
- bl sub_8126338\n\
- ldr r2, _080B93AC @ =0x000011c8\n\
- adds r1, r6, r2\n\
- strh r0, [r1]\n\
-_080B935C:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080B9364: .4byte 0x02018000\n\
-_080B9368: .4byte recordMixingSecretBases\n\
-_080B936C: .4byte recordMixingTvShows\n\
-_080B9370: .4byte 0x00001004\n\
-_080B9374: .4byte gUnknown_083D0274\n\
-_080B9378: .4byte 0x00001044\n\
-_080B937C: .4byte gUnknown_083D0278\n\
-_080B9380: .4byte 0x00001084\n\
-_080B9384: .4byte recordMixingEasyChatPairs\n\
-_080B9388: .4byte gUnknown_02038738\n\
-_080B938C: .4byte gSaveBlock1\n\
-_080B9390: .4byte 0x0000303c\n\
-_080B9394: .4byte 0x00003074\n\
-_080B9398: .4byte 0x00002f9c\n\
-_080B939C: .4byte 0x000010ac\n\
-_080B93A0: .4byte gUnknown_083D0280\n\
-_080B93A4: .4byte 0x00001124\n\
-_080B93A8: .4byte gUnknown_083D0284\n\
-_080B93AC: .4byte 0x000011c8\n\
- .syntax divided\n");
-}
-#endif
-#undef NONMATCHING
-
-void sub_80B93B0(u32 a)
+void RecordMixing_ReceiveExchangePacket(u32 a)
{
sub_80BD674(unk_2008000.secretBases, sizeof(struct PlayerRecords), a);
- sub_80BFD44(unk_2008000.tvShows, sizeof(struct PlayerRecords), a);
+ sub_80BFD44((u8 *)unk_2008000.tvShows, sizeof(struct PlayerRecords), a);
sub_80C0514(unk_2008000.filler1004, sizeof(struct PlayerRecords), a);
sub_80B9B1C(unk_2008000.filler1044, sizeof(struct PlayerRecords), a);
//UB: Too many arguments for function "sub_80FA4E4"
@@ -195,7 +89,7 @@ void sub_80B93B0(u32 a)
sub_80B9F3C(unk_2008000.filler11C8, a);
}
-void sub_80B9450(u8 taskId)
+void Task_RecordMixing_SoundEffect(u8 taskId)
{
gTasks[taskId].data[0]++;
if (gTasks[taskId].data[0] == 50)
@@ -206,24 +100,23 @@ void sub_80B9450(u8 taskId)
}
#define TD_STATE 0
-
-void sub_80B9484(u8 taskId)
+void Task_RecordMixing_Main(u8 taskId)
{
s16 *taskData = gTasks[taskId].data;
switch (taskData[TD_STATE])
{
- case 0:
+ case 0: // init
sub_8007270(gSpecialVar_0x8005);
VarSet(0x4000, 1);
gUnknown_03000718 = 0;
- sub_80B92AC();
+ RecordMixing_PrepareExchangePacket();
CreateRecordMixingSprite();
taskData[TD_STATE] = 1;
taskData[10] = CreateTask(sub_80B95F0, 0x50);
- taskData[15] = CreateTask(sub_80B9450, 0x51);
+ taskData[15] = CreateTask(Task_RecordMixing_SoundEffect, 0x51);
break;
- case 1:
+ case 1: // wait for sub_80B95F0
if (!gTasks[taskData[10]].isActive)
{
taskData[TD_STATE] = 2;
@@ -237,7 +130,7 @@ void sub_80B9484(u8 taskId)
taskData[TD_STATE] = 3;
PlaySE(SE_W226);
break;
- case 3:
+ case 3: // wait for sub_80BA00C
if (!gTasks[taskData[10]].isActive)
{
taskData[TD_STATE] = 4;
@@ -247,7 +140,7 @@ void sub_80B9484(u8 taskId)
taskData[8] = 0;
}
break;
- case 4:
+ case 4: // wait 60 frames
taskData[8]++;
if (taskData[8] > 60)
taskData[TD_STATE] = 5;
@@ -275,10 +168,10 @@ void sub_80B95F0(u8 taskId)
MenuDisplayMessageBox();
MenuPrint(gOtherText_MixingRecordsWithFriend, 2, 15);
task->data[8] = 0x708;
- task->data[TD_STATE] = 0x190;
+ task->data[TD_STATE] = 400;
ClearLinkCallback_2();
break;
- case 100:
+ case 100: // wait 20 frames
task->data[12]++;
if (task->data[12] > 20)
{
@@ -320,7 +213,7 @@ void sub_80B95F0(u8 taskId)
if (sub_800820C() == GetLinkPlayerCount_2())
task->data[TD_STATE] = 1;
break;
- case 400:
+ case 400: // wait 20 frames
task->data[12]++;
if (task->data[12] > 20)
{
@@ -328,7 +221,7 @@ void sub_80B95F0(u8 taskId)
task->data[12] = 0;
}
break;
- case 1:
+ case 1: // wait for handshake
if (gReceivedRemoteLinkPlayers)
{
ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2);
@@ -342,16 +235,16 @@ void sub_80B95F0(u8 taskId)
task->data[6] = GetLinkPlayerCount_2();
task->data[TD_STATE] = 0;
task->data[5] = GetMultiplayerId_();
- task->func = sub_80B97DC;
+ task->func = Task_RecordMixing_SendPacket;
StorePtrInTaskData(&unk_2018000, &task->data[2]);
- subTaskId = CreateTask(Task_CopyRecvBuffer, 0x50);
+ subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50);
task->data[10] = subTaskId;
gTasks[subTaskId].data[0] = taskId;
//StorePtrInTaskData((void*)0x2008000, &gTasks[subTaskId].data[5]);
StorePtrInTaskData((u8 *)&unk_2018000 - 0x10000, &gTasks[subTaskId].data[5]);
break;
}
- case 5:
+ case 5: // wait 60 frames
task->data[10]++;
if (task->data[10] > 60)
{
@@ -362,9 +255,10 @@ void sub_80B95F0(u8 taskId)
}
}
-void sub_80B97DC(u8 taskId)
+void Task_RecordMixing_SendPacket(u8 taskId)
{
struct Task *task = &gTasks[taskId];
+ // does this send the data 24 times?
switch (task->data[TD_STATE])
{
@@ -392,15 +286,15 @@ void sub_80B97DC(u8 taskId)
break;
case 4:
if (!gTasks[task->data[10]].isActive)
- task->func = sub_80B9A1C;
+ task->func = Task_RecordMixing_SendPacket_SwitchToReceive;
}
}
-void Task_CopyRecvBuffer(u8 taskId)
+void Task_RecordMixing_CopyReceiveBuffer(u8 taskId)
{
struct Task *task = &gTasks[taskId];
s32 recvStatus = GetBlockReceivedStatus();
- u32 sp8 = 0;
+ u8 handledPlayers = 0;
if (recvStatus == sub_8008198())
{
@@ -408,32 +302,27 @@ void Task_CopyRecvBuffer(u8 taskId)
for (player = 0; player < GetLinkPlayerCount(); player++)
{
- //_080B98D4
- u8 *ptr;
void *src;
u8 *dst;
if ((recvStatus >> player) & 1)
{
- ptr = LoadPtrFromTaskData(&task->data[5]);
- dst = ptr + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords);
+ dst = LoadPtrFromTaskData(&task->data[5]) + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords);
src = GetPlayerRecvBuffer(player);
- if ((u32)(task->data[player + 1] + 1) * BUFFER_CHUNK_SIZE > sizeof(struct PlayerRecords))
+ if ((task->data[player + 1] + 1) * BUFFER_CHUNK_SIZE > sizeof(struct PlayerRecords))
memcpy(dst, src, sizeof(struct PlayerRecords) - task->data[player + 1] * BUFFER_CHUNK_SIZE);
else
memcpy(dst, src, BUFFER_CHUNK_SIZE);
- //_080B993C
ResetBlockReceivedFlag(player);
task->data[player + 1]++;
if ((u16)task->data[player + 1] == 0x18)
- sp8 = (u8)(sp8 + 1);
+ handledPlayers++;
}
}
- //line 828
gTasks[task->data[0]].data[0]++;
}
//_080B998A
- if (sp8 == GetLinkPlayerCount())
+ if (handledPlayers == GetLinkPlayerCount())
DestroyTask(taskId);
}
@@ -445,18 +334,18 @@ void sub_80B99B4(u8 taskId)
DestroyTask(taskId);
}
-void sub_80B99E8(u8 taskId)
+void Task_RecordMixing_ReceivePacket(u8 taskId)
{
struct Task *task = &gTasks[taskId];
task->func = sub_80B99B4;
if (gUnknown_03000718 == 1)
- sub_80B93B0(task->data[5]);
+ RecordMixing_ReceiveExchangePacket(task->data[5]);
}
-void sub_80B9A1C(u8 taskId)
+void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId)
{
- gTasks[taskId].func = sub_80B99E8;
+ gTasks[taskId].func = Task_RecordMixing_ReceivePacket;
gUnknown_03000718 = 1;
}
@@ -537,6 +426,7 @@ u8 sub_80B9BBC(u16 *a)
return a[16];
}
+#undef NONMATCHING
#ifdef NONMATCHING
void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d)