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.c560
1 files changed, 193 insertions, 367 deletions
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 281ab2803..e1a72cf2e 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -1,53 +1,58 @@
#include "global.h"
#include "record_mixing.h"
-#include "asm.h"
+#include "battle_tower.h"
+#include "cable_club.h"
+#include "daycare.h"
+#include "dewford_trend.h"
+#include "event_data.h"
+#include "fldeff_80C5CD4.h"
#include "link.h"
+#include "mauville_old_man.h"
#include "menu.h"
+#include "mystery_event_script.h"
#include "rom4.h"
#include "script.h"
+#include "secret_base.h"
#include "songs.h"
#include "sound.h"
#include "string_util.h"
+#include "strings2.h"
#include "task.h"
-#include "flag.h"
-#include "var.h"
+#include "tv.h"
+
extern void *recordMixingSecretBases;
extern void *recordMixingTvShows;
extern void *gUnknown_083D0274;
extern void *gUnknown_083D0278;
extern void *recordMixingEasyChatPairs;
-extern void *gUnknown_083D0280;
extern void *gUnknown_083D0284;
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; //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 u8 gOtherText_MixingComplete[];
-extern u8 gOtherText_MixingRecordsWithFriend[];
extern bool8 gReceivedRemoteLinkPlayers;
-extern u8 gBlockSendBuffer[BLOCK_BUFFER_SIZE];
-extern u16 gBlockRecvBuffer[MAX_LINK_PLAYERS][BLOCK_BUFFER_SIZE / 2];
#define BUFFER_CHUNK_SIZE 200
void sub_80B929C(void)
{
- sub_8083A84(sub_80B9484);
+ sub_8083A84(Task_RecordMixing_Main);
}
struct PlayerRecords {
struct SecretBaseRecord secretBases[20];
- u8 tvShows[25][36];
+ TVShow tvShows[25];
u8 filler1004[0x40];
u8 filler1044[0x40];
struct EasyChatPair easyChatPairs[5];
- u8 filler10AC[0x78];
+ struct RecordMixing_UnknownStruct filler10AC;
u8 filler1124[0xA4];
u16 filler11C8[0x34];
};
@@ -55,152 +60,43 @@ struct PlayerRecords {
extern struct PlayerRecords unk_2008000;
extern struct PlayerRecords unk_2018000;
-#ifdef NONMATCHING
-void sub_80B92AC(void)
+void RecordMixing_PrepareExchangePacket(void)
{
sub_80BC300();
sub_80C045C();
-
+
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(gUnknown_02038738, gSaveBlock1.filler_303C, 0x38);
- memcpy(gUnknown_02038738 + 0x38, gSaveBlock1.filler_3074, 0x38);
- sub_8041324(gSaveBlock1.filler_2F9C, gUnknown_02038738);
- memcpy(unk_2018000.filler10AC, gUnknown_083D0280, 0x78);
+ 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);
-
- if(GetMultiplayerId() == 0)
+
+ 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"
sub_80FA4E4(unk_2008000.easyChatPairs, sizeof(struct PlayerRecords), a);
- sub_80B9C6C(unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows);
+ sub_80B9C6C(&unk_2008000.filler10AC, sizeof(struct PlayerRecords), a, unk_2008000.tvShows);
sub_80B9B70(unk_2008000.filler1124, sizeof(struct PlayerRecords), 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)
+ if (gTasks[taskId].data[0] == 50)
{
PlaySE(SE_W213);
gTasks[taskId].data[0] = 0;
@@ -208,25 +104,24 @@ 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])
+
+ 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:
- if(!gTasks[taskData[10]].isActive)
+ case 1: // wait for sub_80B95F0
+ if (!gTasks[taskData[10]].isActive)
{
taskData[TD_STATE] = 2;
FlagSet(SYS_MIX_RECORD);
@@ -239,8 +134,8 @@ void sub_80B9484(u8 taskId)
taskData[TD_STATE] = 3;
PlaySE(SE_W226);
break;
- case 3:
- if(!gTasks[taskData[10]].isActive)
+ case 3: // wait for sub_80BA00C
+ if (!gTasks[taskData[10]].isActive)
{
taskData[TD_STATE] = 4;
taskData[10] = sub_8083664();
@@ -249,13 +144,13 @@ void sub_80B9484(u8 taskId)
taskData[8] = 0;
}
break;
- case 4:
+ case 4: // wait 60 frames
taskData[8]++;
- if(taskData[8] > 60)
+ if (taskData[8] > 60)
taskData[TD_STATE] = 5;
break;
case 5:
- if(!gTasks[taskData[10]].isActive)
+ if (!gTasks[taskData[10]].isActive)
{
sub_8055588();
MenuZeroFillScreen();
@@ -269,20 +164,20 @@ void sub_80B9484(u8 taskId)
void sub_80B95F0(u8 taskId)
{
struct Task *task = &gTasks[taskId];
-
- switch(task->data[TD_STATE])
+
+ switch (task->data[TD_STATE])
{
case 0:
sub_80B9A78();
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)
+ if (task->data[12] > 20)
{
task->data[12] = 0;
task->data[TD_STATE] = 101;
@@ -291,10 +186,10 @@ void sub_80B95F0(u8 taskId)
case 101:
{
u8 players = GetLinkPlayerCount_2();
-
- if(IsLinkMaster() == 1)
+
+ if (IsLinkMaster() == 1)
{
- if(players == sub_800820C())
+ if (players == sub_800820C())
{
PlaySE(0x15);
task->data[TD_STATE] = 201;
@@ -309,9 +204,9 @@ void sub_80B95F0(u8 taskId)
break;
}
case 201:
- if(sub_800820C() == GetLinkPlayerCount_2())
+ if (sub_800820C() == GetLinkPlayerCount_2())
{
- if(++task->data[12] > GetLinkPlayerCount_2() * 30)
+ if (++task->data[12] > GetLinkPlayerCount_2() * 30)
{
sub_8007F4C();
task->data[TD_STATE] = 1;
@@ -319,19 +214,19 @@ void sub_80B95F0(u8 taskId)
}
break;
case 301:
- if(sub_800820C() == GetLinkPlayerCount_2())
+ 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)
+ if (task->data[12] > 20)
{
task->data[TD_STATE] = 1;
task->data[12] = 0;
}
break;
- case 1:
- if(gReceivedRemoteLinkPlayers)
+ case 1: // wait for handshake
+ if (gReceivedRemoteLinkPlayers)
{
ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2);
task->data[TD_STATE] = 5;
@@ -340,22 +235,22 @@ void sub_80B95F0(u8 taskId)
case 2:
{
u8 subTaskId;
-
+
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)
+ if (task->data[10] > 60)
{
task->data[10] = 0;
task->data[TD_STATE] = 2;
@@ -364,101 +259,97 @@ void sub_80B95F0(u8 taskId)
}
}
-void sub_80B97DC(u8 taskId)
+void Task_RecordMixing_SendPacket(u8 taskId)
{
struct Task *task = &gTasks[taskId];
-
- switch(task->data[TD_STATE])
+ // does this send the data 24 times?
+
+ switch (task->data[TD_STATE])
{
- case 0: //Copy record data to send buffer
- {
- void *recordData = (u8 *)LoadPtrFromTaskData(&task->data[2]) + BUFFER_CHUNK_SIZE * task->data[4];
-
- memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE);
- task->data[TD_STATE]++;
- break;
- }
- case 1:
- if(GetMultiplayerId() == 0)
- sub_8007E9C(1);
+ case 0: //Copy record data to send buffer
+ {
+ void *recordData = (u8 *)LoadPtrFromTaskData(&task->data[2]) + BUFFER_CHUNK_SIZE * task->data[4];
+
+ memcpy(gBlockSendBuffer, recordData, BUFFER_CHUNK_SIZE);
+ task->data[TD_STATE]++;
+ break;
+ }
+ case 1:
+ if (GetMultiplayerId() == 0)
+ sub_8007E9C(1);
+ task->data[TD_STATE]++;
+ break;
+ case 2:
+ break;
+ case 3:
+ task->data[4]++;
+ if ((u16)task->data[4] == 24)
task->data[TD_STATE]++;
- break;
- case 2:
- break;
- case 3:
- task->data[4]++;
- if((u16)task->data[4] == 24)
- task->data[TD_STATE]++;
- else
- task->data[TD_STATE] = 0;
- break;
- case 4:
- if(!gTasks[task->data[10]].isActive)
- task->func = sub_80B9A1C;
+ else
+ task->data[TD_STATE] = 0;
+ break;
+ case 4:
+ if (!gTasks[task->data[10]].isActive)
+ 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;
-
- if(recvStatus == sub_8008198())
+ u8 handledPlayers = 0;
+
+ if (recvStatus == sub_8008198())
{
u8 player;
-
- for(player = 0; player < GetLinkPlayerCount(); player++)
+
+ for (player = 0; player < GetLinkPlayerCount(); player++)
{
- //_080B98D4
- u8 *ptr;
void *src;
u8 *dst;
-
- if((recvStatus >> player) & 1)
+
+ 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);
+ if ((u16)task->data[player + 1] == 0x18)
+ handledPlayers++;
}
}
- //line 828
gTasks[task->data[0]].data[0]++;
}
//_080B998A
- if(sp8 == GetLinkPlayerCount())
+ if (handledPlayers == GetLinkPlayerCount())
DestroyTask(taskId);
}
void sub_80B99B4(u8 taskId)
{
struct Task *task = &gTasks[taskId];
-
- if(!gTasks[task->data[10]].isActive)
+
+ if (!gTasks[task->data[10]].isActive)
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]);
+ if (gUnknown_03000718 == 1)
+ 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;
}
@@ -493,21 +384,21 @@ void sub_80B9A88(u8 *a)
u32 i;
u32 id;
u32 players = GetLinkPlayerCount();
-
- switch(players)
+
+ switch (players)
{
case 2:
- for(i = 0; i < 2; i++)
+ for (i = 0; i < 2; i++)
a[i] = gUnknown_083D0288[i];
break;
case 3:
id = GetLinkPlayerTrainerId(0) % 2;
- for(i = 0; i < 3; i++)
+ for (i = 0; i < 3; i++)
a[i] = gUnknown_083D028A[id][i];
break;
case 4:
id = GetLinkPlayerTrainerId(0) % 9;
- for(i = 0; i < 4; i++)
+ for (i = 0; i < 4; i++)
a[i] = gUnknown_083D0290[id][i];
break;
default:
@@ -519,7 +410,7 @@ void sub_80B9B1C(u8 *a, size_t size, u8 index)
{
u8 arr[4];
u8 *ptr;
-
+
sub_80B9A88(arr);
//Probably not how it was originally written, but this matches.
memcpy(a + index * size, (ptr = gUnknown_083D0278), 0x40);
@@ -539,83 +430,90 @@ u8 sub_80B9BBC(u16 *a)
return a[16];
}
+#undef NONMATCHING
#ifdef NONMATCHING
-void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d)
+void sub_80B9BC4(struct RecordMixing_UnknownStruct *a, size_t b, u8 c[][2], u8 d, u8 e)
{
+ struct RecordMixing_UnknownStructSub *offA;
+ struct RecordMixing_UnknownStructSub *offB;
+ struct RecordMixing_UnknownStructSub v0;
+ v0 = (offA = ((struct RecordMixing_UnknownStruct *)(b * c[d][0] + (u32)&a))->data)[c[d][1]];
+ offA[c[d][1]] = (offB = ((struct RecordMixing_UnknownStruct *)(b * c[e][0] + (u32)&a))->data)[c[e][1]];
+ offB[c[e][1]] = v0;
//ToDo: Figure out what this strange stack usage is
}
#else
__attribute__((naked))
-void sub_80B9BC4(u32 a, u32 b, u32 c, u32 d)
+void sub_80B9BC4(struct RecordMixing_UnknownStruct *a, size_t b, u8 c[][2], u8 d, u8 e)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
- mov r6, r10\n\
- mov r5, r9\n\
- mov r4, r8\n\
- push {r4-r6}\n\
- sub sp, 0x38\n\
- mov r8, r0\n\
- mov r10, r1\n\
- mov r9, r2\n\
- adds r4, r3, 0\n\
- ldr r5, [sp, 0x54]\n\
- lsls r4, 24\n\
- lsls r5, 24\n\
- lsrs r5, 24\n\
- lsrs r4, 23\n\
- add r4, r9\n\
- ldrb r0, [r4]\n\
- mov r6, r10\n\
- muls r6, r0\n\
- add r6, r8\n\
- ldrb r0, [r4, 0x1]\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 3\n\
- adds r1, r6, r1\n\
- mov r0, sp\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- lsls r5, 1\n\
- add r5, r9\n\
- ldrb r0, [r5]\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- add r8, r0\n\
- ldrb r1, [r4, 0x1]\n\
- lsls r0, r1, 3\n\
- subs r0, r1\n\
- lsls r0, 3\n\
- adds r6, r0\n\
- ldrb r0, [r5, 0x1]\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 3\n\
- add r1, r8\n\
- adds r0, r6, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldrb r1, [r5, 0x1]\n\
- lsls r0, r1, 3\n\
- subs r0, r1\n\
- lsls r0, 3\n\
- add r8, r0\n\
- mov r0, r8\n\
- mov r1, sp\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- add sp, 0x38\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
+ mov r6, r10\n\
+ mov r5, r9\n\
+ mov r4, r8\n\
+ push {r4-r6}\n\
+ sub sp, 0x38\n\
+ mov r8, r0\n\
+ mov r10, r1\n\
+ mov r9, r2\n\
+ adds r4, r3, 0\n\
+ ldr r5, [sp, 0x54]\n\
+ lsls r4, 24\n\
+ lsls r5, 24\n\
+ lsrs r5, 24\n\
+ lsrs r4, 23\n\
+ add r4, r9\n\
+ ldrb r0, [r4]\n\
+ mov r6, r10\n\
+ muls r6, r0\n\
+ add r6, r8\n\
+ ldrb r0, [r4, 0x1]\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 3\n\
+ adds r1, r6, r1\n\
+ mov r0, sp\n\
+ movs r2, 0x38\n\
+ bl memcpy\n\
+ lsls r5, 1\n\
+ add r5, r9\n\
+ ldrb r0, [r5]\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ add r8, r0\n\
+ ldrb r1, [r4, 0x1]\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ lsls r0, 3\n\
+ adds r6, r0\n\
+ ldrb r0, [r5, 0x1]\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 3\n\
+ add r1, r8\n\
+ adds r0, r6, 0\n\
+ movs r2, 0x38\n\
+ bl memcpy\n\
+ ldrb r1, [r5, 0x1]\n\
+ lsls r0, r1, 3\n\
+ subs r0, r1\n\
+ lsls r0, 3\n\
+ add r8, r0\n\
+ mov r0, r8\n\
+ mov r1, sp\n\
+ movs r2, 0x38\n\
+ bl memcpy\n\
+ add sp, 0x38\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
.syntax divided\n");
}
#endif
@@ -624,81 +522,9 @@ u8 sub_80B9C4C(u8 *a)
{
int i;
u8 r2 = 0;
-
- for(i = 0; i < 0x100; i++)
+
+ for (i = 0; i < 0x100; i++)
r2 += a[i];
return r2;
}
-struct UnkStruct1
-{
- u8 unk0[4];
- u8 unk4[4];
- u8 unk8[4];
- u8 fillerC[0x10];
- u8 unk1C[4][2];
- u8 filler24[8];
- void *unk2C;
- u32 unk30;
- u32 unk34;
- void *unk38;
- u32 unk3C;
- u32 unk40;
- u8 filler44[4];
- u32 unk48;
- u32 unk4C;
- u32 unk50;
-
-};
-
-/*
-//Not finished
-extern void sub_80B9C6C(void *a, u32 b, u8 c, void *d)
-{
- struct UnkStruct1 s;
- u16 r8;
- u16 r3;
-
- s.unk2C = a;
- s.unk30 = b;
- s.unk38 = d;
- s.unk34 = c;
- s.unk40 = Random();
- SeedRng(gLinkPlayers[0].trainerId);
- r8 = GetLinkPlayerCount();
- r3 = 0;
-
- s.unk4C = 12;
-
- while(r3 < 4)
- {
-
- s.unk4[r3] |= 0xFF;
- s.unk8[r3] = 0;
-
- s.unk1C[r3][0] = 0;
- s.unk1C[r3][1] = 0;
- r3++;
- }
- s.unk3C = 0;
- r3 = 0;
- s.unk50 = r8 << 16;
- s.unk48 = s.unk30 * s.unk34;
-
- if(s.unk3C < r8)
- {
- do //_080B9D00
- {
- u32 *r6 = (u32 *)(s.unk2C + s.unk30 * r3);
- if(r6[0x1C] != 0 && r6[0x1C] > 0)
- {
-
- }
- //_080B9D3C
- }
- while(r3 < r8);
- }
- //_080B9D46
-}
-*/
-