summaryrefslogtreecommitdiff
path: root/src/engine/record_mixing.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/record_mixing.c')
-rw-r--r--src/engine/record_mixing.c1082
1 files changed, 0 insertions, 1082 deletions
diff --git a/src/engine/record_mixing.c b/src/engine/record_mixing.c
deleted file mode 100644
index a2660bf82..000000000
--- a/src/engine/record_mixing.c
+++ /dev/null
@@ -1,1082 +0,0 @@
-#include "global.h"
-#include "record_mixing.h"
-#include "battle_tower.h"
-#include "cable_club.h"
-#include "daycare.h"
-#include "dewford_trend.h"
-#include "event_data.h"
-#include "fldeff_recordmixing.h"
-#include "item.h"
-#include "constants/items.h"
-#include "load_save.h"
-#include "link.h"
-#include "mauville_man.h"
-#include "menu.h"
-#include "mystery_event_script.h"
-#include "random.h"
-#include "overworld.h"
-#include "save.h"
-#include "script.h"
-#include "secret_base.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "string_util.h"
-#include "strings2.h"
-#include "task.h"
-#include "tv.h"
-#include "ewram.h"
-
-EWRAM_DATA struct RecordMixingDayCareMail gUnknown_02038738 = {0};
-extern u16 gSpecialVar_0x8005;
-
-u32 gUnknown_03005D2C;
-
-static u8 gUnknown_03000718;
-static u8 gUnknown_0300071C[4];
-
-void *recordMixingSecretBases = &gSaveBlock1.secretBases;
-void *recordMixingTvShows = &gSaveBlock1.tvShows;
-void *gUnknown_083D0274 = &gSaveBlock1.pokeNews;
-void *gUnknown_083D0278 = &gSaveBlock1.mauvilleMan;
-void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs;
-struct RecordMixingDayCareMail *gUnknown_083D0280 = &gUnknown_02038738;
-void *gBattleTowerPlayerRecord = &gSaveBlock2.battleTower.playerRecord;
-
-#define BUFFER_CHUNK_SIZE 200
-
-void sub_80B929C(void)
-{
- sub_8083A84(Task_RecordMixing_Main);
-}
-
-struct PlayerRecords
-{
- struct SecretBaseRecord secretBases[20];
- TVShow tvShows[25];
- u8 filler1004[0x40];
- u8 filler1044[0x40];
- struct EasyChatPair easyChatPairs[5];
- struct RecordMixingDayCareMail filler10AC;
- struct BattleTowerRecord battleTowerRecord;
- u16 filler11C8[0x34];
-};
-
-void RecordMixing_PrepareExchangePacket(void)
-{
- sub_80BC300();
- sub_80C045C();
-
- memcpy(ewram_2018000.secretBases, recordMixingSecretBases, sizeof(ewram_2018000.secretBases));
- memcpy(ewram_2018000.tvShows, recordMixingTvShows, sizeof(ewram_2018000.tvShows));
- memcpy(ewram_2018000.filler1004, gUnknown_083D0274, sizeof(ewram_2008000.filler1004));
- memcpy(ewram_2018000.filler1044, gUnknown_083D0278, sizeof(ewram_2008000.filler1044));
- memcpy(ewram_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(ewram_2018000.easyChatPairs));
- gUnknown_02038738.mail[0] = gSaveBlock1.daycare.misc.mail[0];
- gUnknown_02038738.mail[1] = gSaveBlock1.daycare.misc.mail[1];
- InitDaycareMailRecordMixing(gSaveBlock1.daycare.mons, &gUnknown_02038738);
- memcpy(&ewram_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail));
- memcpy(&ewram_2018000.battleTowerRecord, gBattleTowerPlayerRecord, sizeof(struct BattleTowerRecord));
-
- if (GetMultiplayerId() == 0)
- ewram_2018000.filler11C8[0] = GetRecordMixingGift();
-}
-
-void RecordMixing_ReceiveExchangePacket(u32 a)
-{
- sub_80BD674(ewram_2008000.secretBases, sizeof(struct PlayerRecords), a);
- sub_80BFD44((u8 *)ewram_2008000.tvShows, sizeof(struct PlayerRecords), a);
- sub_80C0514(ewram_2008000.filler1004, sizeof(struct PlayerRecords), a);
- sub_80B9B1C(ewram_2008000.filler1044, sizeof(struct PlayerRecords), a);
- sub_80FA4E4(ewram_2008000.easyChatPairs, sizeof(struct PlayerRecords), a);
- sub_80B9C6C((u8 *)&ewram_2008000.filler10AC, sizeof(struct PlayerRecords), a, ewram_2008000.tvShows);
- sub_80B9B70(&ewram_2008000.battleTowerRecord, sizeof(struct PlayerRecords), a);
- sub_80B9F3C(ewram_2008000.filler11C8, a);
-}
-
-#define tCounter data[0]
-
-void Task_RecordMixing_SoundEffect(u8 taskId)
-{
- gTasks[taskId].tCounter++;
- if (gTasks[taskId].tCounter == 50)
- {
- PlaySE(SE_W213);
- gTasks[taskId].tCounter = 0;
- }
-}
-
-#undef tCounter
-
-
-#define tState data[0]
-#define tSndEffTaskId data[15]
-
-void Task_RecordMixing_Main(u8 taskId)
-{
- s16 *data = gTasks[taskId].data;
-
- switch (tState)
- {
- case 0: // init
- sub_8007270(gSpecialVar_0x8005);
- VarSet(VAR_TEMP_0, 1);
- gUnknown_03000718 = 0;
- RecordMixing_PrepareExchangePacket();
- CreateRecordMixingSprite();
- tState = 1;
- data[10] = CreateTask(sub_80B95F0, 0x50);
- tSndEffTaskId = CreateTask(Task_RecordMixing_SoundEffect, 0x51);
- break;
- case 1: // wait for sub_80B95F0
- if (!gTasks[data[10]].isActive)
- {
- tState = 2;
- FlagSet(FLAG_SYS_MIX_RECORD);
- DestroyRecordMixingSprite();
- DestroyTask(tSndEffTaskId);
- }
- break;
- case 2:
- data[10] = CreateTask(sub_80BA00C, 10);
- tState = 3;
- PlaySE(SE_W226);
- break;
- case 3: // wait for sub_80BA00C
- if (!gTasks[data[10]].isActive)
- {
- tState = 4;
- data[10] = sub_8083664();
- Menu_ClearWindowText();
- Menu_PrintText(gOtherText_MixingComplete, 2, 15);
- data[8] = 0;
- }
- break;
- case 4: // wait 60 frames
- data[8]++;
- if (data[8] > 60)
- tState = 5;
- break;
- case 5:
- if (!gTasks[data[10]].isActive)
- {
- sub_8055588();
- Menu_EraseScreen();
- DestroyTask(taskId);
- EnableBothScriptContexts();
- }
- break;
- }
-}
-
-void sub_80B95F0(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
-
- switch (task->tState)
- {
- case 0:
- sub_80B9A78();
- Menu_DisplayDialogueFrame();
- Menu_PrintText(gOtherText_MixingRecordsWithFriend, 2, 15);
- task->data[8] = 0x708;
- task->tState = 400;
- ClearLinkCallback_2();
- break;
- case 100: // wait 20 frames
- task->data[12]++;
- if (task->data[12] > 20)
- {
- task->data[12] = 0;
- task->tState = 101;
- }
- break;
- case 101:
- {
- u8 players = GetLinkPlayerCount_2();
-
- if (IsLinkMaster() == 1)
- {
- if (players == sub_800820C())
- {
- PlaySE(SE_PIN);
- task->tState = 201;
- task->data[12] = 0;
- }
- }
- else
- {
- PlaySE(SE_BOO);
- task->tState = 301;
- }
- }
- break;
- case 201:
- if (sub_800820C() == GetLinkPlayerCount_2())
- {
- if (++task->data[12] > GetLinkPlayerCount_2() * 30)
- {
- sub_8007F4C();
- task->tState = 1;
- }
- }
- break;
- case 301:
- if (sub_800820C() == GetLinkPlayerCount_2())
- task->tState = 1;
- break;
- case 400: // wait 20 frames
- task->data[12]++;
- if (task->data[12] > 20)
- {
- task->tState = 1;
- task->data[12] = 0;
- }
- break;
- case 1: // wait for handshake
- if (gReceivedRemoteLinkPlayers)
- {
- ConvertIntToDecimalStringN(gStringVar1, GetMultiplayerId_(), 2, 2);
- task->tState = 5;
- }
- break;
- case 2:
- {
- u8 subTaskId;
-
- task->data[6] = GetLinkPlayerCount_2();
- task->tState = 0;
- task->data[5] = GetMultiplayerId_();
- task->func = Task_RecordMixing_SendPacket;
- StorePtrInTaskData(&ewram_2018000, &task->data[2]);
- subTaskId = CreateTask(Task_RecordMixing_CopyReceiveBuffer, 0x50);
- task->data[10] = subTaskId;
- gTasks[subTaskId].data[0] = taskId;
- StorePtrInTaskData((u8 *)&ewram_2008000, &gTasks[subTaskId].data[5]);
- }
- break;
- case 5: // wait 60 frames
- task->data[10]++;
- if (task->data[10] > 60)
- {
- task->data[10] = 0;
- task->tState = 2;
- }
- break;
- }
-}
-
-void Task_RecordMixing_SendPacket(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
- // does this send the data 24 times?
-
- switch (task->tState)
- {
- 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->tState++;
- }
- break;
- case 1:
- if (GetMultiplayerId() == 0)
- sub_8007E9C(1);
- task->tState++;
- break;
- case 2:
- break;
- case 3:
- task->data[4]++;
- if ((u16)task->data[4] == 24)
- task->tState++;
- else
- task->tState = 0;
- break;
- case 4:
- if (!gTasks[task->data[10]].isActive)
- task->func = Task_RecordMixing_SendPacket_SwitchToReceive;
- }
-}
-
-void Task_RecordMixing_CopyReceiveBuffer(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
- s32 recvStatus = GetBlockReceivedStatus();
- u8 handledPlayers = 0;
-
- if (recvStatus == sub_8008198())
- {
- u8 player;
-
- for (player = 0; player < GetLinkPlayerCount(); player++)
- {
- void *src;
- u8 *dst;
-
- if ((recvStatus >> player) & 1)
- {
- dst = LoadPtrFromTaskData(&task->data[5]) + task->data[player + 1] * BUFFER_CHUNK_SIZE + player * sizeof(struct PlayerRecords);
- src = GetPlayerRecvBuffer(player);
- 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);
- ResetBlockReceivedFlag(player);
- task->data[player + 1]++;
- if ((u16)task->data[player + 1] == 0x18)
- handledPlayers++;
- }
- }
- gTasks[task->data[0]].data[0]++;
- }
- if (handledPlayers == GetLinkPlayerCount())
- DestroyTask(taskId);
-}
-
-void sub_80B99B4(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
-
- if (!gTasks[task->data[10]].isActive)
- DestroyTask(taskId);
-}
-
-void Task_RecordMixing_ReceivePacket(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
-
- task->func = sub_80B99B4;
- if (gUnknown_03000718 == 1)
- RecordMixing_ReceiveExchangePacket(task->data[5]);
-}
-
-void Task_RecordMixing_SendPacket_SwitchToReceive(u8 taskId)
-{
- gTasks[taskId].func = Task_RecordMixing_ReceivePacket;
- gUnknown_03000718 = 1;
-}
-
-void *LoadPtrFromTaskData(u16 *taskData)
-{
- return (void *)(taskData[0] | (taskData[1] << 16));
-}
-
-void StorePtrInTaskData(void *ptr, u16 *taskData)
-{
- taskData[0] = (u32)ptr;
- taskData[1] = (u32)ptr >> 16;
-}
-
-u8 GetMultiplayerId_(void)
-{
- return GetMultiplayerId();
-}
-
-u16 *GetPlayerRecvBuffer(u8 player)
-{
- return gBlockRecvBuffer[player];
-}
-
-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;
- u32 id;
- u32 players = GetLinkPlayerCount();
-
- switch (players)
- {
- case 2:
- for (i = 0; i < 2; i++)
- a[i] = gUnknown_083D0288[i];
- break;
- case 3:
- id = GetLinkPlayerTrainerId(0) % 2;
- 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++)
- a[i] = gUnknown_083D0290[id][i];
- break;
- default:
- break;
- }
-}
-
-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);
- memcpy(ptr, a + arr[index] * size, 0x40);
- sub_80F7F30();
-}
-
-void sub_80B9B70(void *battleTowerRecord, u32 size, u8 index)
-{
- sub_80B9A88(gUnknown_0300071C);
- memcpy(battleTowerRecord + size * index, battleTowerRecord + size * gUnknown_0300071C[index], sizeof(struct BattleTowerRecord));
- sub_8134AC0(battleTowerRecord + size * index);
-}
-
-u8 sub_80B9BBC(u16 *a)
-{
- return a[16];
-}
-
-void sub_80B9BC4(u8 *a, size_t b, u8 c[][2], u8 d, u8 e)
-{
- struct DayCareMail *r6 = (struct DayCareMail *)(a + b * c[d][0]);
- struct DayCareMail *src = r6 + c[d][1];
- struct DayCareMail sp0 = *src;
- struct DayCareMail *r8 = (struct DayCareMail *)(a + b * c[e][0]);
-
- r6 += c[d][1];
- *r6 = *(r8 + c[e][1]);
-
- r8 += c[e][1];
- *r8 = sp0;
-}
-
-u8 sub_80B9C4C(u8 *a)
-{
- int i;
- u8 r2 = 0;
-
- for (i = 0; i < 0x100; i++)
- r2 += a[i];
- return r2;
-}
-
-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)
-{
- u8 r8;
- u8 sp4[4];
- u8 sp8[4];
- void *spC[4];
- u8 sp1C[4][2];
- u8 sp24[4][2];
- u8 sp3C;
- u16 sp40 = Random();
- u16 i; // r3
- u16 r7;
- u8 r1;
- struct DayCareMisc *r6;
-
- //asm("":::"r8");
- SeedRng(gLinkPlayers[0].trainerId);
- r8 = GetLinkPlayerCount();
- for (i = 0; i < 4; i++)
- {
- sp4[i] = 0xFF;
- sp8[i] = 0;
- sp1C[i][0] = 0;
- sp1C[i][1] = 0;
- }
- sp3C = 0;
- for (i = 0; i < r8; i++)
- {
- r6 = (struct DayCareMisc *)(a + b * i);
- if (r6->numDaycareMons != 0)
- {
- for (r7 = 0; r7 < r6->numDaycareMons; r7++)
- {
- if (r6->itemsHeld[r7] == 0)
- sp1C[i][r7] = 1;
- }
- }
- //_080B9D3C
- }
- //_080B9D46
- for (r7 = 0, i = 0; i < r8; i++)
- {
- r6 = (struct DayCareMisc *)(a + b * i);
- if (sp1C[i][0] == 1 || sp1C[i][1] == 1)
- sp3C++;
- if (sp1C[i][0] == 1 && sp1C[i][1] == 0)
- {
- sp24[r7][0] = i;
- sp24[r7][1] = 0;
- r7++;
- }
- else if (sp1C[i][0] == 0 && sp1C[i][1] == 1)
- {
- sp24[r7][0] = i;
- sp24[r7][1] = 0;
- r7++;
- }
- //else if (sp1C[i][0] == 1 + 1 && sp1C[i][1] + 1 == 1 + 1)
- else if (sp1C[i][0] == 1 && sp1C[i][1] == 1)
- {
- u8 r4, r1;
-
- sp24[r7][0] = i;
- r4 = sub_80B9BBC((u16 *)&r6->data[0]);
- r1 = sub_80B9BBC((u16 *)&r6->data[1]);
-
- asm("");
- if (r4 == 0 && r1 != 0)
- sp24[r7][1] = 1;
- else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0))
- sp24[r7][1] = Random() % 2;
- else
- sp24[r7][1] = 0;
- /*
- if (r4 == 0 && r1 != 0)
- sp24[r7][1] = 1;
- else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0))
- sp24[r7][1] = Random() % 2;
- else
- sp24[r7][1] = 0;
- */
-
- /*
- if (r4 == 0 && r1 != 0)
- sp24[r7][1] = 1;
- else if ((r4 == 0 && r1 == 0) || (r4 != 0 && r1 != 0))
- //sp24[r7][1] = ((Random() << 16) >> 16) % 2;
- sp24[r7][1] = Random() % 2;
- else
- sp24[r7][1] = 0;
- */
- //_080B9E2C:
- r7++;
- }
- }
- //_080B9E3E
- for (i = 0; i < 4; i++)
- {
- r6 = (struct DayCareMisc *)a + b * c;
- spC[i] = r6;
- }
- r1 = sub_80B9C4C(d) % 3;
- switch (sp3C)
- {
- case 2:
- sub_80B9BC4(a, b, (u8 *)sp24, 0, 1);
- break;
- case 3:
- {
- u8 var1 = gUnknown_083D02B4[r1][0];
- u8 var2 = gUnknown_083D02B4[r1][1];
- sub_80B9BC4(a, b, (u8 *)sp24, var1, var2);
- }
- break;
- case 4:
- {
- u8 *r6 = (u8 *)sp24;
- 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_083D02BA[r1][2];
- u8 var2 = gUnknown_083D02BA[r1][3];
- sub_80B9BC4(a, b, r6, 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);
- r6 = (struct DayCareMisc *)(a + b * c);
- gSaveBlock1.filler_303C.data[0] = r6->data[0];
- gSaveBlock1.filler_303C.data[1] = r6->data[1];
- //memcpy(&gSaveBlock1.filler_303C.data[0], &r6->data[0], 0x38);
- //memcpy(&gSaveBlock1.filler_303C.data[1], &r6->data[1], 0x38);
- SeedRng(sp40);
-}
-#else
-__attribute__((naked))
-void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x58\n\
- str r0, [sp, 0x2C]\n\
- str r1, [sp, 0x30]\n\
- str r3, [sp, 0x38]\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- str r2, [sp, 0x34]\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x40]\n\
- ldr r0, _080B9DA8 @ =gLinkPlayers\n\
- ldrh r0, [r0, 0x4]\n\
- bl SeedRng\n\
- bl GetLinkPlayerCount\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r8, r0\n\
- movs r3, 0\n\
- add r0, sp, 0x1C\n\
- mov r9, r0\n\
- movs r1, 0x1D\n\
- add r1, sp\n\
- mov r10, r1\n\
- mov r2, sp\n\
- adds r2, 0xC\n\
- str r2, [sp, 0x4C]\n\
- movs r7, 0xFF\n\
- add r4, sp, 0x8\n\
- movs r2, 0\n\
- mov r6, r9\n\
- mov r5, r10\n\
-_080B9CBC:\n\
- mov r1, sp\n\
- adds r1, r3\n\
- adds r1, 0x4\n\
- ldrb r0, [r1]\n\
- orrs r0, r7\n\
- strb r0, [r1]\n\
- adds r0, r4, r3\n\
- strb r2, [r0]\n\
- lsls r1, r3, 1\n\
- adds r0, r6, r1\n\
- strb r2, [r0]\n\
- adds r1, r5, r1\n\
- strb r2, [r1]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x3\n\
- bls _080B9CBC\n\
- movs r4, 0\n\
- str r4, [sp, 0x3C]\n\
- movs r3, 0\n\
- mov r1, r8\n\
- lsls r0, r1, 16\n\
- lsrs r1, r0, 16\n\
- str r0, [sp, 0x50]\n\
- ldr r4, [sp, 0x30]\n\
- ldr r0, [sp, 0x34]\n\
- adds r2, r4, 0\n\
- muls r2, r0\n\
- str r2, [sp, 0x48]\n\
- ldr r2, [sp, 0x3C]\n\
- cmp r2, r1\n\
- bcs _080B9D46\n\
- mov r8, r1\n\
-_080B9D00:\n\
- ldr r4, [sp, 0x30]\n\
- adds r0, r4, 0\n\
- muls r0, r3\n\
- ldr r1, [sp, 0x2C]\n\
- adds r6, r1, r0\n\
- ldr r0, [r6, 0x70]\n\
- cmp r0, 0\n\
- beq _080B9D3C\n\
- movs r7, 0\n\
- cmp r7, r0\n\
- bcs _080B9D3C\n\
- adds r4, r6, 0\n\
- adds r4, 0x74\n\
- mov r2, r9\n\
- lsls r1, r3, 1\n\
- movs r5, 0x1\n\
-_080B9D20:\n\
- lsls r0, r7, 1\n\
- adds r0, r4, r0\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- bne _080B9D30\n\
- adds r0, r7, r1\n\
- adds r0, r2, r0\n\
- strb r5, [r0]\n\
-_080B9D30:\n\
- adds r0, r7, 0x1\n\
- lsls r0, 16\n\
- lsrs r7, r0, 16\n\
- ldr r0, [r6, 0x70]\n\
- cmp r7, r0\n\
- bcc _080B9D20\n\
-_080B9D3C:\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, r8\n\
- bcc _080B9D00\n\
-_080B9D46:\n\
- movs r7, 0\n\
- movs r3, 0\n\
- ldr r2, [sp, 0x50]\n\
- cmp r2, 0\n\
- beq _080B9E3E\n\
- mov r4, sp\n\
- adds r4, 0x24\n\
- str r4, [sp, 0x44]\n\
- movs r0, 0x25\n\
- add r0, sp\n\
- mov r8, r0\n\
-_080B9D5C:\n\
- ldr r1, [sp, 0x30]\n\
- adds r0, r1, 0\n\
- muls r0, r3\n\
- ldr r2, [sp, 0x2C]\n\
- adds r6, r2, r0\n\
- lsls r1, r3, 1\n\
- mov r4, r9\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- beq _080B9D7C\n\
- mov r2, r10\n\
- adds r0, r2, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080B9D86\n\
-_080B9D7C:\n\
- ldr r0, [sp, 0x3C]\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x3C]\n\
-_080B9D86:\n\
- mov r4, r9\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080B9DAC\n\
- mov r2, r10\n\
- adds r0, r2, r1\n\
- ldrb r2, [r0]\n\
- cmp r2, 0\n\
- bne _080B9DAC\n\
-_080B9D9A:\n\
- lsls r1, r7, 1\n\
- ldr r4, [sp, 0x44]\n\
- adds r0, r4, r1\n\
- strb r3, [r0]\n\
- add r1, r8\n\
- strb r2, [r1]\n\
- b _080B9E2C\n\
- .align 2, 0\n\
-_080B9DA8: .4byte gLinkPlayers\n\
-_080B9DAC:\n\
- mov r2, r9\n\
- adds r0, r2, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _080B9DC0\n\
- mov r4, r10\n\
- adds r0, r4, r1\n\
- ldrb r2, [r0]\n\
- cmp r2, 0x1\n\
- beq _080B9D9A\n\
-_080B9DC0:\n\
- mov r2, r9\n\
- adds r0, r2, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080B9E32\n\
- mov r4, r10\n\
- adds r0, r4, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1\n\
- bne _080B9E32\n\
- lsls r5, r7, 1\n\
- ldr r1, [sp, 0x44]\n\
- adds r0, r1, r5\n\
- strb r3, [r0]\n\
- adds r0, r6, 0\n\
- str r3, [sp, 0x54]\n\
- bl sub_80B9BBC\n\
- adds r4, r0, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- adds r0, r6, 0\n\
- adds r0, 0x38\n\
- bl sub_80B9BBC\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- ldr r3, [sp, 0x54]\n\
- cmp r4, 0\n\
- bne _080B9E0A\n\
- cmp r1, 0\n\
- beq _080B9E0E\n\
- mov r2, r8\n\
- adds r1, r2, r5\n\
- movs r0, 0x1\n\
- strb r0, [r1]\n\
- b _080B9E2C\n\
-_080B9E0A:\n\
- cmp r1, 0\n\
- beq _080B9E26\n\
-_080B9E0E:\n\
- str r3, [sp, 0x54]\n\
- bl Random\n\
- mov r4, r8\n\
- adds r2, r4, r5\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x1\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
- ldr r3, [sp, 0x54]\n\
- b _080B9E2C\n\
-_080B9E26:\n\
- mov r2, r8\n\
- adds r0, r2, r5\n\
- strb r1, [r0]\n\
-_080B9E2C:\n\
- adds r0, r7, 0x1\n\
- lsls r0, 16\n\
- lsrs r7, r0, 16\n\
-_080B9E32:\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- ldr r4, [sp, 0x50]\n\
- cmp r0, r4\n\
- bcc _080B9D5C\n\
-_080B9E3E:\n\
- movs r3, 0\n\
- ldr r1, [sp, 0x48]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- lsls r0, 3\n\
- ldr r2, [sp, 0x2C]\n\
- adds r6, r2, r0\n\
- ldr r1, [sp, 0x4C]\n\
-_080B9E4E:\n\
- lsls r0, r3, 2\n\
- adds r0, r1, r0\n\
- str r6, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x3\n\
- bls _080B9E4E\n\
- ldr r0, [sp, 0x38]\n\
- bl sub_80B9C4C\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- ldr r4, [sp, 0x3C]\n\
- cmp r4, 0x3\n\
- beq _080B9E9C\n\
- cmp r4, 0x3\n\
- bgt _080B9E82\n\
- cmp r4, 0x2\n\
- beq _080B9E8A\n\
- b _080B9EF0\n\
-_080B9E82:\n\
- ldr r0, [sp, 0x3C]\n\
- cmp r0, 0x4\n\
- beq _080B9EBC\n\
- b _080B9EF0\n\
-_080B9E8A:\n\
- add r2, sp, 0x24\n\
- movs r0, 0x1\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- ldr r1, [sp, 0x30]\n\
- movs r3, 0\n\
- bl sub_80B9BC4\n\
- b _080B9EF0\n\
-_080B9E9C:\n\
- ldr r0, _080B9EB8 @ =gUnknown_083D02B4\n\
- lsls r1, 1\n\
- adds r2, r1, r0\n\
- ldrb r3, [r2]\n\
- adds r0, 0x1\n\
- adds r1, r0\n\
- ldrb r0, [r1]\n\
- add r2, sp, 0x24\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- ldr r1, [sp, 0x30]\n\
- bl sub_80B9BC4\n\
- b _080B9EF0\n\
- .align 2, 0\n\
-_080B9EB8: .4byte gUnknown_083D02B4\n\
-_080B9EBC:\n\
- add r6, sp, 0x24\n\
- ldr r4, _080B9F2C @ =gUnknown_083D02BA\n\
- lsls r5, r1, 2\n\
- adds r0, r5, r4\n\
- ldrb r3, [r0]\n\
- adds r0, r4, 0x1\n\
- adds r0, r5, r0\n\
- ldrb r0, [r0]\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- ldr r1, [sp, 0x30]\n\
- adds r2, r6, 0\n\
- bl sub_80B9BC4\n\
- adds r0, r4, 0x2\n\
- adds r0, r5, r0\n\
- ldrb r3, [r0]\n\
- adds r4, 0x3\n\
- adds r5, r4\n\
- ldrb r0, [r5]\n\
- str r0, [sp]\n\
- ldr r0, [sp, 0x2C]\n\
- ldr r1, [sp, 0x30]\n\
- adds r2, r6, 0\n\
- bl sub_80B9BC4\n\
-_080B9EF0:\n\
- ldr r1, [sp, 0x2C]\n\
- ldr r2, [sp, 0x48]\n\
- adds r6, r1, r2\n\
- ldr r4, _080B9F30 @ =gSaveBlock1\n\
- ldr r1, _080B9F34 @ =0x0000303c\n\
- adds r0, r4, r1\n\
- adds r1, r6, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r2, _080B9F38 @ =0x00003074\n\
- adds r4, r2\n\
- adds r1, r6, 0\n\
- adds r1, 0x38\n\
- adds r0, r4, 0\n\
- movs r2, 0x38\n\
- bl memcpy\n\
- ldr r0, [sp, 0x40]\n\
- bl SeedRng\n\
- add sp, 0x58\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_080B9F2C: .4byte gUnknown_083D02BA\n\
-_080B9F30: .4byte gSaveBlock1\n\
-_080B9F34: .4byte 0x0000303c\n\
-_080B9F38: .4byte 0x00003074\n\
- .syntax divided\n");
-}
-#endif
-
-void sub_80B9F3C(u16 *a, u8 b)
-{
- if (b != 0 && *a != 0)
- {
- if (GetPocketByItemId(*a) == 5)
- {
- if (!CheckBagHasItem(*a, 1) && !CheckPCHasItem(*a, 1) && AddBagItem(*a, 1))
- {
- VarSet(VAR_TEMP_1, *a);
- StringCopy(gStringVar1, gLinkPlayers[0].name);
- if (*a == ITEM_EON_TICKET)
- FlagSet(FLAG_SYS_HAS_EON_TICKET);
- }
- else
- {
- VarSet(VAR_TEMP_1, ITEM_NONE);
- }
- }
- else
- {
- if (AddBagItem(*a, 1) == TRUE)
- {
- VarSet(VAR_TEMP_1, *a);
- StringCopy(gStringVar1, gLinkPlayers[0].name);
- }
- else
- {
- VarSet(VAR_TEMP_1, ITEM_NONE);
- }
- }
- }
-}
-
-void sub_80BA00C(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
-
- switch (task->data[0])
- {
- case 0:
- task->data[0]++;
- break;
- case 1:
- task->data[0]++;
- break;
- case 2:
- SetSecretBase2Field_9_AndHideBG();
- sub_8125E2C();
- task->data[0]++;
- break;
- case 3:
- if (sub_8125E6C() != 0)
- {
- ClearSecretBase2Field_9_2();
- task->data[0]++;
- task->data[1] = 0;
- }
- break;
- case 4:
- task->data[1]++;
- if (task->data[1] > 10)
- {
- sub_800832C();
- task->data[0]++;
- }
- break;
- case 5:
- if (!gReceivedRemoteLinkPlayers)
- DestroyTask(taskId);
- break;
- }
-}