diff options
author | camthesaxman <cameronghall@cox.net> | 2017-07-14 01:48:30 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-07-14 01:48:30 -0500 |
commit | 2b39d8f7d763311c69a31dab366f696626c01d36 (patch) | |
tree | aff5a5d4a77bdb81e4ead8bc2a3e0f2163aac45a | |
parent | 5f5c80818653e135e5cda11ce430bde7cbcd62c1 (diff) |
clean up a bit
-rw-r--r-- | data/record_mixing.s | 33 | ||||
-rw-r--r-- | include/record_mixing.h | 6 | ||||
-rwxr-xr-x | include/vars.h | 1 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/record_mixing.c | 298 |
5 files changed, 161 insertions, 178 deletions
diff --git a/data/record_mixing.s b/data/record_mixing.s index 8b46e1ed3..6c02078f5 100644 --- a/data/record_mixing.s +++ b/data/record_mixing.s @@ -33,36 +33,3 @@ gUnknown_083D0280:: @ 83D0280 .align 2 gUnknown_083D0284:: @ 83D0284 .4byte gSaveBlock2+0xA8 - -gUnknown_083D0288:: @ 83D0288 - .byte 1, 0 - -gUnknown_083D028A:: @ 83D028A - .byte 1, 2, 0 - .byte 2, 0, 1 - -gUnknown_083D0290:: @ 83D0290 - .byte 1, 0, 3, 2 - .byte 3, 0, 1, 2 - .byte 2, 0, 3, 1 - .byte 1, 3, 0, 2 - .byte 2, 3, 0, 1 - .byte 3, 2, 0, 1 - .byte 1, 2, 3, 0 - .byte 2, 3, 1, 0 - .byte 3, 2, 1, 0 - -gUnknown_083D02B4:: @ 83D02B4 - .byte 0, 1 - .byte 1, 2 - .byte 2, 0 - -gUnknown_083D02BA:: @ 83D02BA - .byte 0, 1 - .byte 2, 3 - - .byte 0, 2 - .byte 1, 3 - - .byte 0, 3 - .byte 2, 1 diff --git a/include/record_mixing.h b/include/record_mixing.h index e0a56d4b0..ca60b04a7 100644 --- a/include/record_mixing.h +++ b/include/record_mixing.h @@ -14,8 +14,8 @@ void Task_RecordMixing_CopyReceiveBuffer(u8 taskId); void sub_80B99B4(u8 taskId); void Task_RecordMixing_ReceivePacket(u8 taskId); void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId); -void *LoadPtrFromTaskData(u16 *ptr); -void StorePtrInTaskData(void *ptr, u16 *data); +void *LoadPtrFromTaskData(u16 *); +void StorePtrInTaskData(void *, u16 *); u8 GetMultiplayerId_(void); u16 *GetPlayerRecvBuffer(u8 player); void sub_80B9A78(void); @@ -23,7 +23,7 @@ void sub_80B9A88(u8 *a); void sub_80B9B1C(u8 *a, size_t size, u8 index); void sub_80B9B70(u8 *a, size_t size, u8 index); u8 sub_80B9BBC(u16 *a); -void sub_80B9BC4(u8 *, size_t, u8 *, u8 d, u8 e); +void sub_80B9BC4(u8 *, size_t, u8[][2], u8 d, u8 e); u8 sub_80B9C4C(u8 *a); // ASM diff --git a/include/vars.h b/include/vars.h index e08f344d4..efbb462a4 100755 --- a/include/vars.h +++ b/include/vars.h @@ -1,6 +1,7 @@ #ifndef GUARD_VARS_H #define GUARD_VARS_H +#define VAR_0x4000 0x4000 #define VAR_0x4001 0x4001 #define VAR_0x4002 0x4002 #define VAR_0x4003 0x4003 diff --git a/ld_script.txt b/ld_script.txt index 897747da8..0e6e27cb3 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -408,6 +408,7 @@ SECTIONS { data/money.o(.rodata); data/contest_effect.o(.rodata); data/record_mixing.o(.rodata); + src/record_mixing.o(.rodata); src/sound_check_menu.o(.rodata); data/secret_base.o(.rodata); data/tv.o(.rodata); diff --git a/src/record_mixing.c b/src/record_mixing.c index a81b7743a..a92743fdb 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -25,25 +25,37 @@ #include "task.h" #include "tv.h" +extern u8 ewram[]; +#define unk_2018000 (*(struct PlayerRecords *)(ewram + 0x18000)) +#define unk_2008000 (*(struct PlayerRecords *)(ewram + 0x08000)) + +extern struct RecordMixing_UnknownStruct gUnknown_02038738; + +extern void *const recordMixingSecretBases; +extern void *const recordMixingTvShows; +extern void *const gUnknown_083D0274; +extern void *const gUnknown_083D0278; +extern void *const recordMixingEasyChatPairs; +extern struct RecordMixing_UnknownStruct *const gUnknown_083D0280; +extern void *const gUnknown_083D0284; -extern void *recordMixingSecretBases; -extern void *recordMixingTvShows; -extern void *gUnknown_083D0274; -extern void *gUnknown_083D0278; -extern void *recordMixingEasyChatPairs; -extern void *gUnknown_083D0284; -extern u8 gUnknown_083D0288[2]; -extern u8 gUnknown_083D028A[2][3]; -extern u8 gUnknown_083D0290[9][4]; - -extern struct RecordMixing_UnknownStruct gUnknown_02038738; //Don't know what type this points to -extern struct RecordMixing_UnknownStruct *gUnknown_083D0280; extern u16 gSpecialVar_0x8005; extern u32 gUnknown_03005D2C; extern u8 gUnknown_03000718; extern u8 gUnknown_0300071C[]; extern bool8 gReceivedRemoteLinkPlayers; +// I can't define these here or else RecordMixing_PrepareExchangePacket gets optimized. +/* +void *const recordMixingSecretBases = &gSaveBlock1.secretBases; +void *const recordMixingTvShows = &gSaveBlock1.tvShows; +void *const gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC; +void *const gUnknown_083D0278 = &gSaveBlock1.oldMan; +void *const recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs; +struct RecordMixing_UnknownStruct *const gUnknown_083D0280 = &gUnknown_02038738; +void *const gUnknown_083D0284 = &gSaveBlock2.filler_A8; +*/ + #define BUFFER_CHUNK_SIZE 200 void sub_80B929C(void) @@ -51,7 +63,8 @@ void sub_80B929C(void) sub_8083A84(Task_RecordMixing_Main); } -struct PlayerRecords { +struct PlayerRecords +{ struct SecretBaseRecord secretBases[20]; TVShow tvShows[25]; u8 filler1004[0x40]; @@ -62,9 +75,6 @@ struct PlayerRecords { u16 filler11C8[0x34]; }; -extern struct PlayerRecords unk_2008000; -extern struct PlayerRecords unk_2018000; - void RecordMixing_PrepareExchangePacket(void) { sub_80BC300(); @@ -72,14 +82,14 @@ void RecordMixing_PrepareExchangePacket(void) memcpy(unk_2018000.secretBases, recordMixingSecretBases, sizeof(unk_2018000.secretBases)); memcpy(unk_2018000.tvShows, recordMixingTvShows, sizeof(unk_2018000.tvShows)); - memcpy(unk_2018000.filler1004, gUnknown_083D0274, 0x40); - memcpy(unk_2018000.filler1044, gUnknown_083D0278, 0x40); - memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, 0x28); + memcpy(unk_2018000.filler1004, gUnknown_083D0274, sizeof(unk_2008000.filler1004)); + memcpy(unk_2018000.filler1044, gUnknown_083D0278, sizeof(unk_2008000.filler1044)); + memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(unk_2018000.easyChatPairs)); gUnknown_02038738.data[0] = gSaveBlock1.filler_303C.data[0]; gUnknown_02038738.data[1] = gSaveBlock1.filler_303C.data[1]; sub_8041324(gSaveBlock1.daycareData, &gUnknown_02038738); memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixing_UnknownStruct)); - memcpy(unk_2018000.filler1124, gUnknown_083D0284, 0xA4); + memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124)); if (GetMultiplayerId() == 0) unk_2018000.filler11C8[0] = sub_8126338(); @@ -97,64 +107,71 @@ void RecordMixing_ReceiveExchangePacket(u32 a) sub_80B9F3C(unk_2008000.filler11C8, a); } +#define tCounter data[0] + void Task_RecordMixing_SoundEffect(u8 taskId) { - gTasks[taskId].data[0]++; - if (gTasks[taskId].data[0] == 50) + gTasks[taskId].tCounter++; + if (gTasks[taskId].tCounter == 50) { PlaySE(SE_W213); - gTasks[taskId].data[0] = 0; + gTasks[taskId].tCounter = 0; } } -#define TD_STATE 0 +#undef tCounter + + +#define tState data[0] +#define tSndEffTaskId data[15] + void Task_RecordMixing_Main(u8 taskId) { - s16 *taskData = gTasks[taskId].data; + s16 *data = gTasks[taskId].data; - switch (taskData[TD_STATE]) + switch (tState) { case 0: // init sub_8007270(gSpecialVar_0x8005); - VarSet(0x4000, 1); + VarSet(VAR_0x4000, 1); gUnknown_03000718 = 0; RecordMixing_PrepareExchangePacket(); CreateRecordMixingSprite(); - taskData[TD_STATE] = 1; - taskData[10] = CreateTask(sub_80B95F0, 0x50); - taskData[15] = CreateTask(Task_RecordMixing_SoundEffect, 0x51); + tState = 1; + data[10] = CreateTask(sub_80B95F0, 0x50); + tSndEffTaskId = CreateTask(Task_RecordMixing_SoundEffect, 0x51); break; case 1: // wait for sub_80B95F0 - if (!gTasks[taskData[10]].isActive) + if (!gTasks[data[10]].isActive) { - taskData[TD_STATE] = 2; + tState = 2; FlagSet(SYS_MIX_RECORD); DestroyRecordMixingSprite(); - DestroyTask(taskData[15]); + DestroyTask(tSndEffTaskId); } break; case 2: - taskData[10] = CreateTask(sub_80BA00C, 10); - taskData[TD_STATE] = 3; + data[10] = CreateTask(sub_80BA00C, 10); + tState = 3; PlaySE(SE_W226); break; case 3: // wait for sub_80BA00C - if (!gTasks[taskData[10]].isActive) + if (!gTasks[data[10]].isActive) { - taskData[TD_STATE] = 4; - taskData[10] = sub_8083664(); + tState = 4; + data[10] = sub_8083664(); sub_80720B0(); MenuPrint(gOtherText_MixingComplete, 2, 15); - taskData[8] = 0; + data[8] = 0; } break; case 4: // wait 60 frames - taskData[8]++; - if (taskData[8] > 60) - taskData[TD_STATE] = 5; + data[8]++; + if (data[8] > 60) + tState = 5; break; case 5: - if (!gTasks[taskData[10]].isActive) + if (!gTasks[data[10]].isActive) { sub_8055588(); MenuZeroFillScreen(); @@ -169,14 +186,14 @@ void sub_80B95F0(u8 taskId) { struct Task *task = &gTasks[taskId]; - switch (task->data[TD_STATE]) + switch (task->tState) { case 0: sub_80B9A78(); MenuDisplayMessageBox(); MenuPrint(gOtherText_MixingRecordsWithFriend, 2, 15); task->data[8] = 0x708; - task->data[TD_STATE] = 400; + task->tState = 400; ClearLinkCallback_2(); break; case 100: // wait 20 frames @@ -184,48 +201,48 @@ void sub_80B95F0(u8 taskId) if (task->data[12] > 20) { task->data[12] = 0; - task->data[TD_STATE] = 101; + task->tState = 101; } break; case 101: - { - u8 players = GetLinkPlayerCount_2(); - - if (IsLinkMaster() == 1) { - if (players == sub_800820C()) + u8 players = GetLinkPlayerCount_2(); + + if (IsLinkMaster() == 1) { - PlaySE(0x15); - task->data[TD_STATE] = 201; - task->data[12] = 0; + if (players == sub_800820C()) + { + PlaySE(SE_PIN); + task->tState = 201; + task->data[12] = 0; + } + } + else + { + PlaySE(SE_BOO); + task->tState = 301; } - } - else - { - PlaySE(0x16); - task->data[TD_STATE] = 301; } break; - } case 201: if (sub_800820C() == GetLinkPlayerCount_2()) { if (++task->data[12] > GetLinkPlayerCount_2() * 30) { sub_8007F4C(); - task->data[TD_STATE] = 1; + task->tState = 1; } } break; case 301: if (sub_800820C() == GetLinkPlayerCount_2()) - task->data[TD_STATE] = 1; + task->tState = 1; break; case 400: // wait 20 frames task->data[12]++; if (task->data[12] > 20) { - task->data[TD_STATE] = 1; + task->tState = 1; task->data[12] = 0; } break; @@ -233,31 +250,30 @@ void sub_80B95F0(u8 taskId) if (gReceivedRemoteLinkPlayers) { ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2); - task->data[TD_STATE] = 5; + task->tState = 5; } break; case 2: - { - u8 subTaskId; - - task->data[6] = GetLinkPlayerCount_2(); - task->data[TD_STATE] = 0; - task->data[5] = GetMultiplayerId_(); - task->func = Task_RecordMixing_SendPacket; - StorePtrInTaskData(&unk_2018000, &task->data[2]); - 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]); + { + u8 subTaskId; + + task->data[6] = GetLinkPlayerCount_2(); + task->tState = 0; + task->data[5] = GetMultiplayerId_(); + task->func = Task_RecordMixing_SendPacket; + StorePtrInTaskData(&unk_2018000, &task->data[2]); + subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50); + task->data[10] = subTaskId; + gTasks[subTaskId].data[0] = taskId; + StorePtrInTaskData((u8 *)&unk_2008000, &gTasks[subTaskId].data[5]); + } break; - } case 5: // wait 60 frames task->data[10]++; if (task->data[10] > 60) { task->data[10] = 0; - task->data[TD_STATE] = 2; + task->tState = 2; } break; } @@ -268,29 +284,29 @@ void Task_RecordMixing_SendPacket(u8 taskId) struct Task *task = &gTasks[taskId]; // does this send the data 24 times? - switch (task->data[TD_STATE]) + switch (task->tState) { case 0: //Copy record data to send buffer - { - void *recordData = (u8 *)LoadPtrFromTaskData(&task->data[2]) + BUFFER_CHUNK_SIZE * task->data[4]; + { + void *recordData = (u8 *)LoadPtrFromTaskData(&task->data[2]) + BUFFER_CHUNK_SIZE * task->data[4]; - memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE); - task->data[TD_STATE]++; + memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE); + task->tState++; + } break; - } case 1: if (GetMultiplayerId() == 0) sub_8007E9C(1); - task->data[TD_STATE]++; + task->tState++; break; case 2: break; case 3: task->data[4]++; if ((u16)task->data[4] == 24) - task->data[TD_STATE]++; + task->tState++; else - task->data[TD_STATE] = 0; + task->tState = 0; break; case 4: if (!gTasks[task->data[10]].isActive) @@ -329,7 +345,6 @@ void Task_RecordMixing_CopyReceiveBuffer(u8 taskId) } gTasks[task->data[0]].data[0]++; } - //_080B998A if (handledPlayers == GetLinkPlayerCount()) DestroyTask(taskId); } @@ -357,15 +372,15 @@ void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId) gUnknown_03000718 = 1; } -void *LoadPtrFromTaskData(u16 *ptr) +void *LoadPtrFromTaskData(u16 *taskData) { - return (void *)(*ptr | *(ptr + 1) << 16); + return (void *)(taskData[0] | (taskData[1] << 16)); } -void StorePtrInTaskData(void *ptr, u16 *data) +void StorePtrInTaskData(void *ptr, u16 *taskData) { - *data = (u32)ptr; - *(data + 1) = (u32)ptr >> 16; + taskData[0] = (u32)ptr; + taskData[1] = (u32)ptr >> 16; } u8 GetMultiplayerId_(void) @@ -383,6 +398,27 @@ void sub_80B9A78(void) gUnknown_03005D2C = sizeof(struct PlayerRecords); } +const u8 gUnknown_083D0288[2] = {1, 0}; + +const u8 gUnknown_083D028A[2][3] = +{ + {1, 2, 0}, + {2, 0, 1}, +}; + +const u8 gUnknown_083D0290[9][4] = +{ + {1, 0, 3, 2}, + {3, 0, 1, 2}, + {2, 0, 3, 1}, + {1, 3, 0, 2}, + {2, 3, 0, 1}, + {3, 2, 0, 1}, + {1, 2, 3, 0}, + {2, 3, 1, 0}, + {3, 2, 1, 0}, +}; + void sub_80B9A88(u8 *a) { u32 i; @@ -434,25 +470,18 @@ u8 sub_80B9BBC(u16 *a) return a[16]; } -// TODO: clean this up -void sub_80B9BC4(u8 *a, size_t b, u8 *c, u8 d, u8 e) +void sub_80B9BC4(u8 *a, size_t b, u8 c[][2], u8 d, u8 e) { - struct RecordMixing_UnknownStructSub sp0; - struct RecordMixing_UnknownStructSub *r8; - struct RecordMixing_UnknownStructSub *r6 = (struct RecordMixing_UnknownStructSub *)(a + b * c[d * 2]); - - { - struct RecordMixing_UnknownStructSub *src = r6 + c[2 * d + 1]; - - memcpy(&sp0, src, 0x38); - } + struct RecordMixing_UnknownStructSub *r6 = (struct RecordMixing_UnknownStructSub *)(a + b * c[d][0]); + struct RecordMixing_UnknownStructSub *src = r6 + c[d][1]; + struct RecordMixing_UnknownStructSub sp0 = *src; + struct RecordMixing_UnknownStructSub *r8 = (struct RecordMixing_UnknownStructSub *)(a + b * c[e][0]); - r8 = (struct RecordMixing_UnknownStructSub *)(a + c[e * 2] * b); - r6 += c[d * 2 + 1]; - memcpy(r6, r8 + c[e * 2 + 1], 0x38); + r6 += c[d][1]; + *r6 = *(r8 + c[e][1]); - r8 += c[e * 2 + 1]; - memcpy(r8, &sp0, 0x38); + r8 += c[e][1]; + *r8 = sp0; } u8 sub_80B9C4C(u8 *a) @@ -465,7 +494,19 @@ u8 sub_80B9C4C(u8 *a) return r2; } -extern const u8 gUnknown_083D02B4[][2]; +const u8 gUnknown_083D02B4[][2] = +{ + {0, 1}, + {1, 2}, + {2, 0}, +}; + +const u8 gUnknown_083D02BA[3][4] = +{ + {0, 1, 2, 3}, + {0, 2, 1, 3}, + {0, 3, 2, 1}, +}; #ifdef NONMATCHING void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) @@ -585,45 +626,18 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d) case 4: { u8 *r6 = (u8 *)sp24; - u8 var1 = gUnknown_083D02B4[r1][0]; - u8 var2 = gUnknown_083D02B4[r1][1]; + u8 var1 = gUnknown_083D02BA[r1][0]; + u8 var2 = gUnknown_083D02BA[r1][1]; sub_80B9BC4(a, b, r6, var1, var2); } { u8 *r6 = (u8 *)sp24; - u8 var1 = gUnknown_083D02B4[r1][2]; - u8 var2 = gUnknown_083D02B4[r1][3]; + u8 var1 = gUnknown_083D02BA[r1][2]; + u8 var2 = gUnknown_083D02BA[r1][3]; sub_80B9BC4(a, b, r6, var1, var2); } break; } - /* - switch (sp3C) - { - u8 var1; - u8 var2; - - case 2: - sub_80B9BC4(a, b, (u8 *)sp24, 0, 1); - break; - case 3: - var1 = gUnknown_083D02B4[r1 * 2 + 0]; - var2 = gUnknown_083D02B4[r1 * 2 + 1]; - sub_80B9BC4(a, b, (u8 *)sp24, var1, var2); - break; - case 4: - { - var1 = gUnknown_083D02B4[r1 * 2 + 0]; - var2 = gUnknown_083D02B4[r1 * 2 + 1]; - sub_80B9BC4(a, b, (u8 *)sp24, var1, var2); - - var1 = gUnknown_083D02B4[r1 * 2 + 2 + 0]; - var2 = gUnknown_083D02B4[r1 * 2 + 2 + 1]; - sub_80B9BC4(a, b, (u8 *)sp24, var1, var2); - } - break; - } - */ //_080B9EF0 //memcpy(&gSaveBlock1.filler_303C.data[0], a + b * c, 0x38); //memcpy(&gSaveBlock1.filler_303C.data[1], a + b * c + 0x38, 0x38); |