summaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/cable_club.c550
-rw-r--r--src/engine/link.c159
-rw-r--r--src/engine/mystery_event_menu.c546
-rw-r--r--src/engine/reset_rtc_screen.c398
-rw-r--r--src/engine/save_failed_screen.c213
-rw-r--r--src/engine/trainer_card.c8
6 files changed, 357 insertions, 1517 deletions
diff --git a/src/engine/cable_club.c b/src/engine/cable_club.c
index ff73e638e..0da23c5f3 100644
--- a/src/engine/cable_club.c
+++ b/src/engine/cable_club.c
@@ -2,7 +2,9 @@
#include "battle.h"
#include "battle_records.h"
#include "cable_club.h"
+#include "event_data.h"
#include "field_message_box.h"
+#include "field_specials.h"
#include "field_weather.h"
#include "link.h"
#include "load_save.h"
@@ -21,16 +23,9 @@
#include "strings2.h"
#include "task.h"
#include "text.h"
+#include "trade.h"
#include "trainer_card.h"
-extern u8 unk_2030220;
-extern u16 gSpecialVar_Result;
-extern struct TrainerCard gTrainerCards[4];
-extern u8 gUnknown_03004860;
-extern u8 gFieldLinkPlayerCount;
-extern u16 gSpecialVar_0x8004;
-extern u16 gSpecialVar_0x8005;
-extern u16 gSpecialVar_0x8006;
extern u16 gBattleTypeFlags;
extern const u8 gUnknown_081A4932[];
extern const u8 gUnknown_081A4975[];
@@ -42,12 +37,13 @@ extern struct
u8 field1;
} gUnknown_020297D8;
-/*static*/ void sub_8082F20(u8 taskId);
+static void sub_8082F20(u8 taskId);
static void sub_8082F68(u8 taskId);
static void sub_8082FEC(u8 taskId);
static void sub_808303C(u8 taskId);
static void sub_80830E4(u8 taskId);
static void sub_8083188(u8 taskId);
+static void sub_80831F8(u8 taskId);
static void sub_8083288(u8 taskId);
static void sub_8083314(u8 taskId);
static void sub_80833C4(u8 taskId);
@@ -66,15 +62,9 @@ static void sub_8083AAC(u8 taskId);
static void sub_8083B44(u8 taskId);
static void sub_8083B6C(void);
static void sub_8083CA4(u8 taskId);
-
-extern void sub_80831F8(u8 taskId);
-extern void Overworld_ResetMapMusic(void);
-extern void sub_810FEFC(void);
-extern void sub_8047CD8(void);
-extern void sub_805559C(void);
-extern void sub_8055574(void);
-extern s32 sub_80554F8(void);
-extern void sub_805465C(void);
+#if DEBUG
+static u8 debug_sub_808B850(void);
+#endif
#ifdef GERMAN
const u8 TrainerCardColorName_Bronze[] = _("BRONZE");
@@ -97,392 +87,86 @@ const u8 *const gTrainerCardColorNames[] =
};
#if DEBUG
-
-__attribute__((naked))
-int debug_sub_808A4D0()
-{
- asm("\
- push {lr}\n\
- add r1, r0, #0\n\
- ldr r0, ._3 @ sub_8082F68\n\
- cmp r1, r0\n\
- bne ._1 @cond_branch\n\
- mov r0, #0x1\n\
- b ._30\n\
-._4:\n\
- .align 2, 0\n\
-._3:\n\
- .word sub_8082F68+1\n\
-._1:\n\
- ldr r0, ._7 @ sub_8082FEC\n\
- cmp r1, r0\n\
- bne ._5 @cond_branch\n\
- mov r0, #0x11\n\
- b ._30\n\
-._8:\n\
- .align 2, 0\n\
-._7:\n\
- .word sub_8082FEC+1\n\
-._5:\n\
- ldr r0, ._11 @ sub_808303C\n\
- cmp r1, r0\n\
- bne ._9 @cond_branch\n\
- mov r0, #0x12\n\
- b ._30\n\
-._12:\n\
- .align 2, 0\n\
-._11:\n\
- .word sub_808303C+1\n\
-._9:\n\
- ldr r0, ._15 @ sub_8083188\n\
- cmp r1, r0\n\
- bne ._13 @cond_branch\n\
- mov r0, #0x13\n\
- b ._30\n\
-._16:\n\
- .align 2, 0\n\
-._15:\n\
- .word sub_8083188+1\n\
-._13:\n\
- ldr r0, ._19 @ sub_80830E4\n\
- cmp r1, r0\n\
- bne ._17 @cond_branch\n\
- mov r0, #0x14\n\
- b ._30\n\
-._20:\n\
- .align 2, 0\n\
-._19:\n\
- .word sub_80830E4+1\n\
-._17:\n\
- ldr r0, ._23 @ sub_80831F8\n\
- cmp r1, r0\n\
- bne ._21 @cond_branch\n\
- mov r0, #0x21\n\
- b ._30\n\
-._24:\n\
- .align 2, 0\n\
-._23:\n\
- .word sub_80831F8+1\n\
-._21:\n\
- ldr r0, ._27 @ sub_8083314\n\
- cmp r1, r0\n\
- bne ._25 @cond_branch\n\
- mov r0, #0x2\n\
- b ._30\n\
-._28:\n\
- .align 2, 0\n\
-._27:\n\
- .word sub_8083314+1\n\
-._25:\n\
- ldr r0, ._31 @ sub_80833C4\n\
- cmp r1, r0\n\
- beq ._29 @cond_branch\n\
- mov r0, #0x0\n\
- b ._30\n\
-._32:\n\
- .align 2, 0\n\
-._31:\n\
- .word sub_80833C4+1\n\
-._29:\n\
- mov r0, #0x3\n\
-._30:\n\
- pop {r1}\n\
- bx r1");
+u8 debug_sub_808A4D0(TaskFunc func)
+{
+ if (func == sub_8082F68)
+ return 1;
+ if (func == sub_8082FEC)
+ return 17;
+ if (func == sub_808303C)
+ return 18;
+ if (func == sub_8083188)
+ return 19;
+ if (func == sub_80830E4)
+ return 20;
+ if (func == sub_80831F8)
+ return 33;
+ if (func == sub_8083314)
+ return 2;
+ if (func == sub_80833C4)
+ return 3;
+ return 0;
}
-__attribute__((naked))
-void debug_sub_808A55C()
+void debug_sub_808A55C(u8 taskId)
{
- asm("\
- push {r4, r5, r6, r7, lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- lsl r0, r0, #0x18\n\
- lsr r7, r0, #0x18\n\
- ldr r2, ._37 @ gTasks\n\
- lsl r0, r7, #0x2\n\
- add r0, r0, r7\n\
- lsl r0, r0, #0x3\n\
- add r4, r0, r2\n\
- mov r0, #0x8\n\
- ldsh r1, [r4, r0]\n\
- lsl r0, r1, #0x2\n\
- add r0, r0, r1\n\
- lsl r0, r0, #0x3\n\
- add r0, r0, r2\n\
- ldrb r0, [r0, #0x4]\n\
- cmp r0, #0\n\
- bne ._33 @cond_branch\n\
- mov r1, #0xa\n\
- ldsh r0, [r4, r1]\n\
- cmp r0, #0x5\n\
- bne ._34 @cond_branch\n\
- add r0, r7, #0\n\
- bl DestroyTask\n\
-._34:\n\
- ldrh r0, [r4, #0xa]\n\
- add r0, r0, #0x1\n\
- strh r0, [r4, #0xa]\n\
-._33:\n\
- ldr r0, ._37 + 4 @ gShouldAdvanceLinkState\n\
- ldrb r0, [r0]\n\
- mov r1, #0x2\n\
- mov r2, #0x0\n\
- mov r3, #0x2\n\
- bl PrintHex\n\
- ldr r0, ._37 + 8 @ gBlockSendBuffer\n\
- ldrb r0, [r0]\n\
- mov r1, #0x16\n\
- mov r2, #0x5\n\
- mov r3, #0x4\n\
- bl PrintHex\n\
- mov r4, #0x0\n\
- lsl r3, r7, #0x2\n\
- mov r8, r3\n\
- mov r6, #0xc0\n\
- lsl r6, r6, #0x13\n\
- mov r5, #0xa0\n\
- lsl r5, r5, #0x13\n\
-._35:\n\
- ldr r0, ._37 + 12 @ gLinkPlayerPending\n\
- add r0, r4, r0\n\
- ldrb r0, [r0]\n\
- lsr r1, r5, #0x18\n\
- mov r2, #0x0\n\
- mov r3, #0x1\n\
- bl PrintHex\n\
- ldr r1, ._37 + 16 @ gBlockRecvBuffer\n\
- lsl r0, r4, #0x8\n\
- add r0, r0, r1\n\
- ldrh r0, [r0]\n\
- lsr r2, r6, #0x18\n\
- mov r1, #0x16\n\
- mov r3, #0x4\n\
- bl PrintHex\n\
- mov r0, #0x80\n\
- lsl r0, r0, #0x11\n\
- add r6, r6, r0\n\
- mov r1, #0x80\n\
- lsl r1, r1, #0x12\n\
- add r5, r5, r1\n\
- add r4, r4, #0x1\n\
- cmp r4, #0x3\n\
- ble ._35 @cond_branch\n\
- ldr r4, ._37 + 20 @ gLinkStatus\n\
- ldr r0, [r4]\n\
- mov r1, #0xf\n\
- mov r2, #0x0\n\
- mov r3, #0x8\n\
- bl PrintHex\n\
- ldr r0, ._37 + 24 @ gLink\n\
- ldrb r0, [r0, #0x1]\n\
- mov r1, #0x2\n\
- mov r2, #0xa\n\
- mov r3, #0x2\n\
- bl PrintHex\n\
- bl GetMultiplayerId\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- mov r1, #0x7\n\
- mov r2, #0xc\n\
- mov r3, #0x2\n\
- bl PrintHex\n\
- bl GetBlockReceivedStatus\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- mov r1, #0x7\n\
- mov r2, #0xa\n\
- mov r3, #0x2\n\
- bl PrintHex\n\
- ldr r0, ._37 + 28 @ gReceivedRemoteLinkPlayers\n\
- ldrb r0, [r0]\n\
- mov r1, #0x2\n\
- mov r2, #0xc\n\
- mov r3, #0x1\n\
- bl PrintHex\n\
- ldr r0, ._37 + 32 @ gSpecialVar_Result\n\
- ldrh r0, [r0]\n\
- mov r1, #0xb\n\
- mov r2, #0x8\n\
- mov r3, #0x2\n\
- bl PrintHex\n\
- ldr r0, [r4]\n\
- mov r1, #0x1c\n\
- and r0, r0, r1\n\
- lsr r0, r0, #0x2\n\
- mov r1, #0xb\n\
- mov r2, #0xa\n\
- mov r3, #0x2\n\
- bl PrintHex\n\
- bl IsLinkConnectionEstablished\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- mov r1, #0xb\n\
- mov r2, #0xc\n\
- mov r3, #0x1\n\
- bl PrintHex\n\
- bl IsLinkTaskFinished\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- mov r1, #0xf\n\
- mov r2, #0xa\n\
- mov r3, #0x1\n\
- bl PrintHex\n\
- ldr r2, ._37 @ gTasks\n\
- mov r3, r8\n\
- add r0, r3, r7\n\
- lsl r0, r0, #0x3\n\
- add r0, r0, r2\n\
- mov r3, #0x8\n\
- ldsh r1, [r0, r3]\n\
- lsl r0, r1, #0x2\n\
- add r0, r0, r1\n\
- lsl r0, r0, #0x3\n\
- add r0, r0, r2\n\
- ldr r0, [r0]\n\
- bl debug_sub_808A4D0\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- mov r1, #0xf\n\
- mov r2, #0xc\n\
- mov r3, #0x2\n\
- bl PrintHex\n\
- ldr r0, ._37 + 36 @ gLinkCallback\n\
- ldr r0, [r0]\n\
- mov r1, #0x2\n\
- mov r2, #0xd\n\
- mov r3, #0x8\n\
- bl PrintHex\n\
- bl HasLinkErrorOccurred\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- mov r1, #0x2\n\
- mov r2, #0x2\n\
- mov r3, #0x1\n\
- bl PrintHex\n\
- ldr r0, ._37 + 40 @ gLinkPlayers\n\
- mov r6, #0x80\n\
- lsl r6, r6, #0x12\n\
- add r5, r0, #0\n\
- add r5, r5, #0x14\n\
- mov r4, #0x3\n\
-._36:\n\
- ldr r0, [r5]\n\
- lsr r1, r6, #0x18\n\
- mov r2, #0x3\n\
- mov r3, #0x4\n\
- bl PrintHex\n\
- mov r0, #0xc0\n\
- lsl r0, r0, #0x13\n\
- add r6, r6, r0\n\
- add r5, r5, #0x1c\n\
- sub r4, r4, #0x1\n\
- cmp r4, #0\n\
- bge ._36 @cond_branch\n\
- ldr r0, ._37 + 44 @ 0x4000128\n\
- ldrh r0, [r0]\n\
- mov r1, #0x2\n\
- mov r2, #0x6\n\
- mov r3, #0x4\n\
- bl PrintHex\n\
- bl debug_sub_808B850\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- mov r1, #0x19\n\
- mov r2, #0x3\n\
- mov r3, #0x1\n\
- bl PrintHex\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4, r5, r6, r7}\n\
- pop {r0}\n\
- bx r0\n\
-._38:\n\
- .align 2, 0\n\
-._37:\n\
- .word gTasks\n\
- .word gShouldAdvanceLinkState\n\
- .word gBlockSendBuffer\n\
- .word gLinkPlayerPending\n\
- .word gBlockRecvBuffer\n\
- .word gLinkStatus\n\
- .word gLink\n\
- .word gReceivedRemoteLinkPlayers\n\
- .word gSpecialVar_Result\n\
- .word gLinkCallback\n\
- .word gLinkPlayers\n\
- .word 0x4000128");
+ s32 i;
+
+ if (!gTasks[gTasks[taskId].data[0]].isActive)
+ {
+ if (gTasks[taskId].data[1] == 5)
+ DestroyTask(taskId);
+ gTasks[taskId].data[1]++;
+ }
+
+ PrintHex(gShouldAdvanceLinkState, 2, 0, 2);
+ PrintHex((u8)gBlockSendBuffer[0], 22, 5, 4);
+ for (i = 0; i < 4; i++)
+ {
+ PrintHex(gLinkPlayerPending[i], 5 + i * 2, 0, 1);
+ PrintHex(gBlockRecvBuffer[i][0], 22, 6 + i, 4);
+ }
+ PrintHex(gLinkStatus, 15, 0, 8);
+ PrintHex(gLink.state, 2, 10, 2);
+ PrintHex(GetMultiplayerId(), 7, 12, 2);
+ PrintHex(GetBlockReceivedStatus(), 7, 10, 2);
+ PrintHex(gReceivedRemoteLinkPlayers, 2, 12, 1);
+ PrintHex(gSpecialVar_Result, 11, 8, 2);
+ PrintHex((gLinkStatus & 0x1C) >> 2, 11, 10, 2);
+ PrintHex(IsLinkConnectionEstablished(), 11, 12, 1);
+ PrintHex(IsLinkTaskFinished(), 15, 10, 1);
+ PrintHex(debug_sub_808A4D0(gTasks[gTasks[taskId].data[0]].func), 15, 12, 2);
+ PrintHex((uintptr_t)gLinkCallback, 2, 13, 8);
+ PrintHex(HasLinkErrorOccurred(), 2, 2, 1);
+ for (i = 0; i < 4; i++)
+ PrintHex(gLinkPlayers[i].linkType, 2 + i * 6, 3, 4);
+ PrintHex(REG_SIOCNT, 2, 6, 4);
+ PrintHex(debug_sub_808B850(), 25, 3, 1);
}
#endif
-#if DEBUG
-__attribute__((naked))
-static void sub_8082CD4(u8 arg0, u8 arg1)
-{
- asm("\
- push {r4, r5, r6, r7, lr}\n\
- lsl r0, r0, #0x18\n\
- lsr r7, r0, #0x18\n\
- lsl r1, r1, #0x18\n\
- lsr r6, r1, #0x18\n\
- mov r0, #0xc\n\
- mov r1, #0x0\n\
- mov r2, #0x1f\n\
- mov r3, #0x2\n\
- bl InitLinkTestBG_Unused\n\
- ldr r4, ._40 @ sub_8082F20\n\
- add r0, r4, #0\n\
- bl FindTaskIdByFunc\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- cmp r0, #0xff\n\
- bne ._39 @cond_branch\n\
- add r0, r4, #0\n\
- mov r1, #0x50\n\
- bl CreateTask\n\
- add r4, r0, #0\n\
- lsl r4, r4, #0x18\n\
- lsr r4, r4, #0x18\n\
- ldr r5, ._40 + 4 @ gTasks\n\
- lsl r0, r4, #0x2\n\
- add r0, r0, r4\n\
- lsl r0, r0, #0x3\n\
- add r0, r0, r5\n\
- strh r7, [r0, #0xa]\n\
- strh r6, [r0, #0xc]\n\
- ldr r0, ._40 + 8 @ debug_sub_808A55C\n\
- mov r1, #0x50\n\
- bl CreateTask\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- lsl r1, r0, #0x2\n\
- add r1, r1, r0\n\
- lsl r1, r1, #0x3\n\
- add r1, r1, r5\n\
- strh r4, [r1, #0x8]\n\
-._39:\n\
- pop {r4, r5, r6, r7}\n\
- pop {r0}\n\
- bx r0\n\
-._41:\n\
- .align 2, 0\n\
-._40:\n\
- .word sub_8082F20+1\n\
- .word gTasks\n\
- .word debug_sub_808A55C+1");
-}
-#else
static void sub_8082CD4(u8 arg0, u8 arg1)
{
+#if DEBUG
+ InitLinkTestBG_Unused(12, 0, 31, 2);
+#endif
if (FindTaskIdByFunc(sub_8082F20) == 0xFF)
{
- u8 taskId = CreateTask(sub_8082F20, 80);
+ u8 taskId1;
+#if DEBUG
+ u8 taskId2;
+#endif
+
+ taskId1 = CreateTask(sub_8082F20, 80);
+ gTasks[taskId1].data[1] = arg0;
+ gTasks[taskId1].data[2] = arg1;
- gTasks[taskId].data[1] = arg0;
- gTasks[taskId].data[2] = arg1;
+#if DEBUG
+ taskId2 = CreateTask(debug_sub_808A55C, 80);
+ gTasks[taskId2].data[0] = taskId1;
+#endif
}
}
-#endif
static void sub_8082D18(u32 value)
{
@@ -585,7 +269,7 @@ void unref_sub_8082EEC(u8 taskId)
}
}
-/*static*/ void sub_8082F20(u8 taskId)
+static void sub_8082F20(u8 taskId)
{
s16 *data = gTasks[taskId].data;
@@ -727,7 +411,7 @@ static void sub_8083188(u8 taskId)
}
}
-void sub_80831F8(u8 taskId)
+static void sub_80831F8(u8 taskId)
{
u8 local1, local2;
@@ -1291,70 +975,26 @@ void sub_8083C50(u8 taskId)
}
#if DEBUG
+extern u16 unk_3004E94;
+extern u32 unk_3004E98;
+
+static void debug_sub_808B7A8(u8);
-__attribute__((naked))
-void debug_sub_808B778()
+void debug_sub_808B778(void)
{
- asm("\
- push {r4, lr}\n\
- ldr r4, ._390 @ debug_sub_808B7A8\n\
- add r0, r4, #0\n\
- bl FuncIsActiveTask\n\
- lsl r0, r0, #0x18\n\
- cmp r0, #0\n\
- bne ._389 @cond_branch\n\
- add r0, r4, #0\n\
- mov r1, #0x50\n\
- bl CreateTask\n\
-._389:\n\
- ldr r1, ._390 + 4 @ unk_3004E98\n\
- ldr r0, [r1]\n\
- add r0, r0, #0x1\n\
- str r0, [r1]\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0\n\
-._391:\n\
- .align 2, 0\n\
-._390:\n\
- .word debug_sub_808B7A8+1\n\
- .word unk_3004E98");
+ if (!FuncIsActiveTask(debug_sub_808B7A8))
+ CreateTask(debug_sub_808B7A8, 80);
+ unk_3004E98++;
}
-__attribute__((naked))
-void debug_sub_808B7A8()
+static void debug_sub_808B7A8(u8 taskId)
{
- asm("\
- push {lr}\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- ldr r2, ._393 @ gTasks\n\
- lsl r1, r0, #0x2\n\
- add r1, r1, r0\n\
- lsl r1, r1, #0x3\n\
- add r1, r1, r2\n\
- ldrh r0, [r1, #0x8]\n\
- add r0, r0, #0x1\n\
- strh r0, [r1, #0x8]\n\
- lsl r0, r0, #0x10\n\
- asr r0, r0, #0x10\n\
- cmp r0, #0x1e\n\
- bne ._392 @cond_branch\n\
- mov r0, #0x0\n\
- strh r0, [r1, #0x8]\n\
- ldr r2, ._393 + 4 @ unk_3004E94\n\
- ldrh r0, [r2]\n\
- mov r1, #0x1\n\
- orr r0, r0, r1\n\
- strh r0, [r2]\n\
-._392:\n\
- pop {r0}\n\
- bx r0\n\
-._394:\n\
- .align 2, 0\n\
-._393:\n\
- .word gTasks\n\
- .word unk_3004E94");
+ gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[0] == 30)
+ {
+ gTasks[taskId].data[0] = 0;
+ unk_3004E94 |= 1;
+ }
}
#endif
@@ -1374,6 +1014,7 @@ void unref_sub_8083CC8(u8 taskId)
}
#if DEBUG
+EWRAM_DATA static u8 unk_2030220 = 0;
void debug_sub_808B82C(void)
{
@@ -1385,9 +1026,8 @@ void debug_sub_808B838(u8 a)
unk_2030220 |= 1 << a;
}
-int debug_sub_808B850(void)
+static u8 debug_sub_808B850(void)
{
return unk_2030220;
}
-
-#endif \ No newline at end of file
+#endif
diff --git a/src/engine/link.c b/src/engine/link.c
index 00c084069..45807830a 100644
--- a/src/engine/link.c
+++ b/src/engine/link.c
@@ -45,7 +45,6 @@ extern u16 word_3004858;
extern void Blender_SetBankBerryData(u8 bank, u16 itemID);
static void InitLinkTestBG(u8, u8, u8, u8);
-void InitLinkTestBG_Unused(u8, u8, u8, u8);
void LinkTestScreen();
static void InitLocalLinkPlayer(void);
static void VBlankCB_LinkTest(void);
@@ -68,7 +67,6 @@ u32 sub_8007E40(void);
static void SetBlockReceivedFlag(u8);
static u16 LinkTestCalcBlockChecksum(void *, u16);
static void PrintHexDigit(u8, u8, u8);
-void PrintHex(u32, u8, u8, u8);
static void LinkCB_RequestPlayerDataExchange(void);
static void Task_PrintTestData(u8);
bool8 sub_8008224(void);
@@ -194,19 +192,9 @@ const struct BlockRequest sBlockRequestLookupTable[5] =
static const u8 sTestString[] = _("テストな");
-// TODO: fix the alignment here
+const u8 sMagic[] = "GameFreak inc.";
-ALIGNED(4) const u8 sMagic[] = "GameFreak inc.";
-
-#if DEBUG
const u8 sEmptyString[] = _(" ");
-#else
-ALIGNED(4) const u8 sEmptyString[] = _("");
-#endif
-
-#if DEBUG
-const u8 linkDebugFillerPleaseRemove[2] = {0};
-#endif
void Task_DestroySelf(u8 taskId)
{
@@ -990,138 +978,49 @@ void PrintHex(u32 num, u8 x, u8 y, u8 maxDigits)
#if DEBUG
-EWRAM_DATA u16 *debugCharacterBase = NULL;
-EWRAM_DATA void *unk_20238C8 = NULL;
-EWRAM_DATA u16 (*debugTileMap)[] = NULL;
+EWRAM_DATA uintptr_t debugCharacterBase = 0;
+EWRAM_DATA uintptr_t unk_20238C8 = 0;
+EWRAM_DATA u16 *debugTileMap = NULL;
EWRAM_DATA u32 unk_20238D0 = 0;
-void debug_sub_8008218(u16 *buffer, void *arg1, u16 (*arg2)[], u32 arg3)
+void debug_sub_8008218(u16 *buffer, u32 arg1, u16 *arg2, u32 arg3)
{
CpuSet(sLinkTestDigitTiles, buffer, 272);
- debugCharacterBase = buffer;
- unk_20238C8 = arg1;
+ debugCharacterBase = (uintptr_t)buffer;
+ unk_20238C8 = (uintptr_t)arg1;
debugTileMap = arg2;
unk_20238D0 = arg3;
}
-#ifdef NONMATCHING
-void debug_sub_8008264(u32 value, int left, int top, int r3, int sp0)
+void debug_sub_8008264(u32 value, int left, int top, int d, int e)
{
+ s32 i;
u32 buffer[8];
- u32 *ptr;
-
- u16 *dest;
-
- int i;
-
- if (unk_20238D0 != sp0)
- return;
-
- r3 = max(r3, 8);
- ptr = &buffer[0];
- dest = &(*debugTileMap)[left + top * 32];
-
- for (i = r3; i != 0; i--)
+ if (unk_20238D0 == e)
{
- *(ptr++) = value & 0xF;
- value = value >> 4;
- }
+ u32 *ptr;
+ u16 *tilemapDest;
- ptr = &buffer[8 - r3];
- for (i = r3; i != 0; i--)
- {
- int charOffset = (((uintptr_t) debugCharacterBase) - ((uintptr_t) unk_20238C8)) / 32;
- *dest = *ptr + charOffset + 1;
- ptr--;
- dest++;
+ if (d > 8)
+ d = 8;
+ ptr = buffer;
+ for (i = 0; i < d; i++)
+ {
+ *ptr++ = value & 0xF;
+ value >>= 4;
+ }
+
+ tilemapDest = (u16 *)debugTileMap + top * 0x20 + left;
+ ptr = buffer + d - 1;
+ for (i = 0; i < d; i++)
+ {
+ *tilemapDest = (debugCharacterBase - unk_20238C8) / 32 + *ptr + 1;
+ ptr--;
+ tilemapDest++;
+ }
}
}
-#else
-__attribute__((naked))
-void debug_sub_8008264(u32 value, int left, int top, int r3, int sp0)
-{
- asm(
- " push {r4, r5, r6, r7, lr}\n"
- " mov r7, r8\n"
- " push {r7}\n"
- " add sp, sp, #0xffffffe0\n"
- " add r5, r0, #0\n"
- " add r6, r1, #0\n"
- " add r4, r3, #0\n"
- " ldr r0, [sp, #0x38]\n"
- " ldr r1, ._347 @ unk_20238D0\n"
- " ldr r1, [r1]\n"
- " cmp r1, r0\n"
- " bne ._345 @cond_branch\n"
- " cmp r4, #0x8\n"
- " ble ._342 @cond_branch\n"
- " mov r4, #0x8\n"
- "._342:\n"
- " mov r3, sp\n"
- " ldr r0, ._347 + 4 @ debugTileMap\n"
- " mov r8, r0\n"
- " lsl r2, r2, #0x6\n"
- " mov ip, r2\n"
- " lsl r6, r6, #0x1\n"
- " lsl r7, r4, #0x2\n"
- " cmp r4, #0\n"
- " ble ._343 @cond_branch\n"
- " mov r1, #0xf\n"
- " add r2, r4, #0\n"
- "._344:\n"
- " add r0, r5, #0\n"
- " and r0, r0, r1\n"
- " stmia r3!, {r0}\n"
- " lsr r5, r5, #0x4\n"
- " sub r2, r2, #0x1\n"
- " cmp r2, #0\n"
- " bne ._344 @cond_branch\n"
- "._343:\n"
- " mov r1, r8\n"
- " ldr r0, [r1]\n"
- " add r0, r0, ip\n"
- " add r5, r0, r6\n"
- " mov r1, sp\n"
- " add r0, r1, r7\n"
- " sub r3, r0, #4\n"
- " cmp r4, #0\n"
- " ble ._345 @cond_branch\n"
- " ldr r7, ._347 + 8 @ debugCharacterBase\n"
- " ldr r6, ._347 + 12 @ unk_20238C8\n"
- " add r2, r4, #0\n"
- "._346:\n"
- " ldr r1, [r7]\n"
- " ldr r0, [r6]\n"
- " sub r1, r1, r0\n"
- " lsr r1, r1, #0x5\n"
- " ldr r0, [r3]\n"
- " add r0, r0, r1\n"
- " add r0, r0, #0x1\n"
- " strh r0, [r5]\n"
- " sub r3, r3, #0x4\n"
- " add r5, r5, #0x2\n"
- " sub r2, r2, #0x1\n"
- " cmp r2, #0\n"
- " bne ._346 @cond_branch\n"
- "._345:\n"
- " add sp, sp, #0x20\n"
- " pop {r3}\n"
- " mov r8, r3\n"
- " pop {r4, r5, r6, r7}\n"
- " pop {r0}\n"
- " bx r0\n"
- "._348:\n"
- " .align 2, 0\n"
- "._347:\n"
- " .word unk_20238D0\n"
- " .word debugTileMap\n"
- " .word debugCharacterBase\n"
- " .word unk_20238C8\n"
- "\n"
- );
-}
-#endif
#endif
diff --git a/src/engine/mystery_event_menu.c b/src/engine/mystery_event_menu.c
index bc14c760d..56801ff53 100644
--- a/src/engine/mystery_event_menu.c
+++ b/src/engine/mystery_event_menu.c
@@ -13,6 +13,7 @@
#include "strings2.h"
#include "task.h"
#include "text.h"
+#include "title_screen.h"
#include "ewram.h"
static EWRAM_DATA u8 gUnknown_02039338 = 0;
@@ -341,151 +342,51 @@ static void CB2_MysteryEventMenu(void)
#if DEBUG
+static const u8 Str_843DA70[] = _("CARDーE emulation。。。");
+static const u8 Str_843DA84[] = _("LR: select A: send。");
+static const u8 Str_843DA98[] = _("sending。。。");
+static const u8 Str_843DAA3[] = _("completed。");
+
+extern const struct {const u8 *text; void (*func)();} gUnknown_Debug_842E2D0[];
+extern const u8 gUnknown_Debug_842E350;
+
void debug_sub_815D1D8();
-__attribute__((naked))
-void debug_sub_815D04C()
+void debug_sub_815D04C(u8 taskId)
{
- asm(
- " push {r4, r5, r6, lr}\n"
- " lsl r0, r0, #0x18\n"
- " lsr r5, r0, #0x18\n"
- " ldr r1, ._125 @ gTasks\n"
- " lsl r0, r5, #0x2\n"
- " add r0, r0, r5\n"
- " lsl r0, r0, #0x3\n"
- " add r4, r0, r1\n"
- " mov r1, #0x8\n"
- " ldsh r0, [r4, r1]\n"
- " cmp r0, #0\n"
- " bne ._121 @cond_branch\n"
- " mov r0, #0x4\n"
- " mov r1, #0x4\n"
- " mov r2, #0xd\n"
- " mov r3, #0x7\n"
- " bl Menu_DrawStdWindowFrame\n"
- " ldr r1, ._125 + 4 @ gUnknown_Debug_842E2D0\n"
- " mov r2, #0xa\n"
- " ldsh r0, [r4, r2]\n"
- " lsl r0, r0, #0x3\n"
- " add r0, r0, r1\n"
- " ldr r0, [r0]\n"
- " mov r1, #0x5\n"
- " mov r2, #0x5\n"
- " bl Menu_PrintText\n"
- " ldrh r0, [r4, #0x8]\n"
- " add r0, r0, #0x1\n"
- " strh r0, [r4, #0x8]\n"
- "._121:\n"
- " ldr r2, ._125 + 8 @ gMain\n"
- " ldrh r1, [r2, #0x2e]\n"
- " mov r0, #0x20\n"
- " and r0, r0, r1\n"
- " add r6, r2, #0\n"
- " cmp r0, #0\n"
- " beq ._122 @cond_branch\n"
- " ldrh r1, [r4, #0xa]\n"
- " mov r2, #0xa\n"
- " ldsh r0, [r4, r2]\n"
- " cmp r0, #0\n"
- " bne ._123 @cond_branch\n"
- " ldr r0, ._125 + 12 @ gUnknown_Debug_842E350\n"
- " ldrb r0, [r0]\n"
- " sub r0, r0, #0x1\n"
- " b ._124\n"
- "._126:\n"
- " .align 2, 0\n"
- "._125:\n"
- " .word gTasks\n"
- " .word gUnknown_Debug_842E2D0\n"
- " .word gMain\n"
- " .word gUnknown_Debug_842E350\n"
- "._123:\n"
- " sub r0, r1, #1\n"
- "._124:\n"
- " strh r0, [r4, #0xa]\n"
- " ldr r0, ._130 @ gTasks\n"
- " lsl r1, r5, #0x2\n"
- " add r1, r1, r5\n"
- " lsl r1, r1, #0x3\n"
- " add r1, r1, r0\n"
- " mov r0, #0x0\n"
- " strh r0, [r1, #0x8]\n"
- "._122:\n"
- " ldrh r1, [r6, #0x2e]\n"
- " mov r0, #0x10\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._127 @cond_branch\n"
- " ldr r1, ._130 @ gTasks\n"
- " lsl r2, r5, #0x2\n"
- " add r0, r2, r5\n"
- " lsl r0, r0, #0x3\n"
- " add r4, r0, r1\n"
- " mov r0, #0xa\n"
- " ldsh r3, [r4, r0]\n"
- " ldr r0, ._130 + 4 @ gUnknown_Debug_842E350\n"
- " ldrb r0, [r0]\n"
- " sub r0, r0, #0x1\n"
- " cmp r3, r0\n"
- " bne ._128 @cond_branch\n"
- " mov r0, #0x0\n"
- " b ._129\n"
- "._131:\n"
- " .align 2, 0\n"
- "._130:\n"
- " .word gTasks\n"
- " .word gUnknown_Debug_842E350\n"
- "._128:\n"
- " ldrh r0, [r4, #0xa]\n"
- " add r0, r0, #0x1\n"
- "._129:\n"
- " strh r0, [r4, #0xa]\n"
- " add r0, r2, r5\n"
- " lsl r0, r0, #0x3\n"
- " add r0, r0, r1\n"
- " mov r1, #0x0\n"
- " strh r1, [r0, #0x8]\n"
- "._127:\n"
- " ldrh r1, [r6, #0x2e]\n"
- " mov r0, #0x1\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._132 @cond_branch\n"
- " ldr r1, ._133 @ gTasks\n"
- " lsl r0, r5, #0x2\n"
- " add r0, r0, r5\n"
- " lsl r0, r0, #0x3\n"
- " add r0, r0, r1\n"
- " mov r2, #0xa\n"
- " ldsh r1, [r0, r2]\n"
- " lsl r1, r1, #0x3\n"
- " ldr r0, ._133 + 4 @ gUnknown_Debug_842E2D0\n"
- " add r0, r0, #0x4\n"
- " add r1, r1, r0\n"
- " ldr r0, ._133 + 8 @ \n"
- " ldr r1, [r1]\n"
- " bl _call_via_r1\n"
- " ldr r0, ._133 + 12 @ \n"
- " add r1, r6, r0\n"
- " ldrb r0, [r1]\n"
- " add r0, r0, #0x1\n"
- " strb r0, [r1]\n"
- " add r0, r5, #0\n"
- " bl DestroyTask\n"
- "._132:\n"
- " pop {r4, r5, r6}\n"
- " pop {r0}\n"
- " bx r0\n"
- "._134:\n"
- " .align 2, 0\n"
- "._133:\n"
- " .word gTasks\n"
- " .word gUnknown_Debug_842E2D0\n"
- " .word +0x2004000\n"
- " .word 0x43c\n"
- "\n"
- );
+ if (gTasks[taskId].data[0] == 0)
+ {
+ Menu_DrawStdWindowFrame(4, 4, 13, 7);
+ Menu_PrintText(gUnknown_Debug_842E2D0[gTasks[taskId].data[1]].text, 5, 5);
+ gTasks[taskId].data[0]++;
+ }
+
+ if (gMain.newKeys & 0x20)
+ {
+ if (gTasks[taskId].data[1] == 0)
+ gTasks[taskId].data[1] = gUnknown_Debug_842E350 - 1;
+ else
+ gTasks[taskId].data[1]--;
+ gTasks[taskId].data[0] = 0;
+ }
+ if (gMain.newKeys & 0x10)
+ {
+ if (gTasks[taskId].data[1] == gUnknown_Debug_842E350 - 1)
+ gTasks[taskId].data[1] = 0;
+ else
+ gTasks[taskId].data[1]++;
+ gTasks[taskId].data[0] = 0;
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ // TODO: fix this
+ s32 var = gTasks[taskId].data[1];
+ asm(""::"r"(var * 8));
+ gUnknown_Debug_842E2D0[var].func(gSharedMem + 0x4000);
+
+ gMain.state++;
+ DestroyTask(taskId);
+ }
}
void debug_sub_815D15C(void)
@@ -510,291 +411,84 @@ void debug_sub_815D15C(void)
SetMainCallback2(debug_sub_815D1D8);
}
-__attribute__((naked))
-void debug_sub_815D1D8()
+void debug_sub_815D1D8(void)
{
- asm(
- " push {r4, lr}\n"
- " add sp, sp, #0xfffffffc\n"
- " ldr r1, ._139 @ gMain\n"
- " ldr r2, ._139 + 4 @ 0x43c\n"
- " add r0, r1, r2\n"
- " ldrb r0, [r0]\n"
- " add r4, r1, #0\n"
- " cmp r0, #0xb\n"
- " bls ._137 @cond_branch\n"
- " b ._196\n"
- "._137:\n"
- " lsl r0, r0, #0x2\n"
- " ldr r1, ._139 + 8 @ \n"
- " add r0, r0, r1\n"
- " ldr r0, [r0]\n"
- " mov pc, r0\n"
- "._140:\n"
- " .align 2, 0\n"
- "._139:\n"
- " .word gMain\n"
- " .word 0x43c\n"
- " .word ._141\n"
- "._141:\n"
- " .word ._142\n"
- " .word ._143\n"
- " .word ._144\n"
- " .word ._145\n"
- " .word ._146\n"
- " .word ._196\n"
- " .word ._148\n"
- " .word ._149\n"
- " .word ._150\n"
- " .word ._151\n"
- " .word ._152\n"
- " .word ._153\n"
- "._142:\n"
- " mov r0, #0x3\n"
- " mov r1, #0xe\n"
- " mov r2, #0x1b\n"
- " mov r3, #0x13\n"
- " bl Menu_DrawStdWindowFrame\n"
- " mov r0, #0x1\n"
- " neg r0, r0\n"
- " mov r1, #0x0\n"
- " str r1, [sp]\n"
- " mov r2, #0x10\n"
- " mov r3, #0x0\n"
- " bl BeginNormalPaletteFade\n"
- " ldr r1, ._155 @ gMain\n"
- " ldr r0, ._155 + 4 @ 0x43c\n"
- " add r1, r1, r0\n"
- " b ._189\n"
- "._156:\n"
- " .align 2, 0\n"
- "._155:\n"
- " .word gMain\n"
- " .word 0x43c\n"
- "._143:\n"
- " ldr r0, ._161 @ gPaletteFade\n"
- " ldrb r1, [r0, #0x7]\n"
- " mov r0, #0x80\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._157 @cond_branch\n"
- " b ._196\n"
- "._157:\n"
- " ldrh r1, [r4, #0x2c]\n"
- " mov r0, #0x80\n"
- " lsl r0, r0, #0x1\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._159 @cond_branch\n"
- " ldr r1, ._161 + 4 @ gUnknown_Debug_30030E0\n"
- " ldrb r0, [r1]\n"
- " add r0, r0, #0x1\n"
- " strb r0, [r1]\n"
- "._159:\n"
- " ldr r0, ._161 + 8 @ Str_843DA70\n"
- " mov r1, #0x4\n"
- " mov r2, #0xf\n"
- " bl MenuPrintMessage\n"
- " ldr r2, ._161 + 12 @ 0x43c\n"
- " add r1, r4, r2\n"
- " b ._189\n"
- "._162:\n"
- " .align 2, 0\n"
- "._161:\n"
- " .word gPaletteFade\n"
- " .word gUnknown_Debug_30030E0\n"
- " .word Str_843DA70\n"
- " .word 0x43c\n"
- "._144:\n"
- " bl Menu_UpdateWindowText\n"
- " lsl r0, r0, #0x18\n"
- " cmp r0, #0\n"
- " bne ._163 @cond_branch\n"
- " b ._196\n"
- "._163:\n"
- " ldr r1, ._166 @ gMain\n"
- " ldr r0, ._166 + 4 @ 0x43c\n"
- " add r1, r1, r0\n"
- " ldrb r0, [r1]\n"
- " add r0, r0, #0x1\n"
- " strb r0, [r1]\n"
- " ldr r1, ._166 + 8 @ gLinkType\n"
- " ldr r2, ._166 + 12 @ 0x5501\n"
- " add r0, r2, #0\n"
- " strh r0, [r1]\n"
- " bl OpenLink\n"
- " b ._196\n"
- "._167:\n"
- " .align 2, 0\n"
- "._166:\n"
- " .word gMain\n"
- " .word 0x43c\n"
- " .word gLinkType\n"
- " .word 0x5501\n"
- "._145:\n"
- " ldr r0, ._171 @ gReceivedRemoteLinkPlayers\n"
- " ldrb r0, [r0]\n"
- " cmp r0, #0\n"
- " bne ._168 @cond_branch\n"
- " b ._196\n"
- "._168:\n"
- " ldr r1, ._171 + 4 @ 0x43c\n"
- " add r0, r4, r1\n"
- " ldrb r1, [r0]\n"
- " add r1, r1, #0x1\n"
- " strb r1, [r0]\n"
- " ldr r0, ._171 + 8 @ Str_843DA84\n"
- " mov r1, #0x4\n"
- " mov r2, #0xf\n"
- " bl MenuPrintMessage\n"
- " b ._196\n"
- "._172:\n"
- " .align 2, 0\n"
- "._171:\n"
- " .word gReceivedRemoteLinkPlayers\n"
- " .word 0x43c\n"
- " .word Str_843DA84\n"
- "._146:\n"
- " bl Menu_UpdateWindowText\n"
- " lsl r0, r0, #0x18\n"
- " cmp r0, #0\n"
- " bne ._173 @cond_branch\n"
- " b ._196\n"
- "._173:\n"
- " ldr r0, ._176 @ debug_sub_815D04C\n"
- " mov r1, #0xa\n"
- " bl CreateTask\n"
- " ldr r1, ._176 + 4 @ gMain\n"
- " ldr r2, ._176 + 8 @ 0x43c\n"
- " add r1, r1, r2\n"
- " b ._189\n"
- "._177:\n"
- " .align 2, 0\n"
- "._176:\n"
- " .word debug_sub_815D04C+1\n"
- " .word gMain\n"
- " .word 0x43c\n"
- "._148:\n"
- " ldr r0, ._179 @ Str_843DA98\n"
- " mov r1, #0x4\n"
- " mov r2, #0xf\n"
- " bl MenuPrintMessage\n"
- " ldr r1, ._179 + 4 @ 0x2004000\n"
- " ldr r2, ._179 + 8 @ 0x2004\n"
- " mov r0, #0x0\n"
- " bl SendBlock\n"
- " ldr r1, ._179 + 12 @ gMain\n"
- " ldr r0, ._179 + 16 @ 0x43c\n"
- " add r1, r1, r0\n"
- " b ._189\n"
- "._180:\n"
- " .align 2, 0\n"
- "._179:\n"
- " .word Str_843DA98\n"
- " .word 0x2004000\n"
- " .word 0x2004\n"
- " .word gMain\n"
- " .word 0x43c\n"
- "._149:\n"
- " bl Menu_UpdateWindowText\n"
- " bl IsLinkTaskFinished\n"
- " lsl r0, r0, #0x18\n"
- " cmp r0, #0\n"
- " beq ._196 @cond_branch\n"
- " ldr r1, ._183 @ gMain\n"
- " ldr r2, ._183 + 4 @ 0x43c\n"
- " add r1, r1, r2\n"
- " b ._189\n"
- "._184:\n"
- " .align 2, 0\n"
- "._183:\n"
- " .word gMain\n"
- " .word 0x43c\n"
- "._150:\n"
- " bl sub_800832C\n"
- " ldr r1, ._186 @ gMain\n"
- " ldr r0, ._186 + 4 @ 0x43c\n"
- " add r1, r1, r0\n"
- " b ._189\n"
- "._187:\n"
- " .align 2, 0\n"
- "._186:\n"
- " .word gMain\n"
- " .word 0x43c\n"
- "._151:\n"
- " ldr r0, ._190 @ gReceivedRemoteLinkPlayers\n"
- " ldrb r0, [r0]\n"
- " cmp r0, #0\n"
- " bne ._196 @cond_branch\n"
- " mov r0, #0x4\n"
- " mov r1, #0xf\n"
- " mov r2, #0x1a\n"
- " mov r3, #0x12\n"
- " bl Menu_BlankWindowRect\n"
- " ldr r0, ._190 + 4 @ Str_843DAA3\n"
- " mov r1, #0x4\n"
- " mov r2, #0xf\n"
- " bl Menu_PrintText\n"
- " ldr r1, ._190 + 8 @ gMain\n"
- " ldr r2, ._190 + 12 @ 0x43c\n"
- " add r1, r1, r2\n"
- " b ._189\n"
- "._191:\n"
- " .align 2, 0\n"
- "._190:\n"
- " .word gReceivedRemoteLinkPlayers\n"
- " .word Str_843DAA3\n"
- " .word gMain\n"
- " .word 0x43c\n"
- "._152:\n"
- " ldrh r1, [r4, #0x2e]\n"
- " mov r0, #0x1\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " beq ._196 @cond_branch\n"
- " mov r0, #0x1\n"
- " neg r0, r0\n"
- " mov r1, #0x0\n"
- " str r1, [sp]\n"
- " mov r2, #0x0\n"
- " mov r3, #0x10\n"
- " bl BeginNormalPaletteFade\n"
- " ldr r0, ._194 @ 0x43c\n"
- " add r1, r4, r0\n"
- "._189:\n"
- " ldrb r0, [r1]\n"
- " add r0, r0, #0x1\n"
- " strb r0, [r1]\n"
- " b ._196\n"
- "._195:\n"
- " .align 2, 0\n"
- "._194:\n"
- " .word 0x43c\n"
- "._153:\n"
- " ldr r0, ._197 @ gPaletteFade\n"
- " ldrb r1, [r0, #0x7]\n"
- " mov r0, #0x80\n"
- " and r0, r0, r1\n"
- " cmp r0, #0\n"
- " bne ._196 @cond_branch\n"
- " ldr r0, ._197 + 4 @ CB2_InitTitleScreen\n"
- " bl SetMainCallback2\n"
- "._196:\n"
- " bl RunTasks\n"
- " bl AnimateSprites\n"
- " bl BuildOamBuffer\n"
- " bl UpdatePaletteFade\n"
- " add sp, sp, #0x4\n"
- " pop {r4}\n"
- " pop {r0}\n"
- " bx r0\n"
- "._198:\n"
- " .align 2, 0\n"
- "._197:\n"
- " .word gPaletteFade\n"
- " .word CB2_InitTitleScreen+1\n"
- "\n"
- );
+ switch (gMain.state)
+ {
+ case 0:
+ Menu_DrawStdWindowFrame(3, 14, 27, 19);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0);
+ gMain.state++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ if (gMain.heldKeys & 0x100)
+ gUnknown_Debug_30030E0++;
+ MenuPrintMessage(Str_843DA70, 4, 15);
+ gMain.state++;
+ }
+ break;
+ case 2:
+ if (Menu_UpdateWindowText())
+ {
+ gMain.state++;
+ gLinkType = 0x5501;
+ OpenLink();
+ }
+ break;
+ case 3:
+ if (gReceivedRemoteLinkPlayers != 0)
+ {
+ gMain.state++;
+ MenuPrintMessage(Str_843DA84, 4, 15);
+ }
+ break;
+ case 4:
+ if (Menu_UpdateWindowText())
+ {
+ CreateTask(debug_sub_815D04C, 10);
+ gMain.state++;
+ }
+ break;
+ case 6:
+ MenuPrintMessage(Str_843DA98, 4, 15);
+ SendBlock(0, gSharedMem + 0x4000, 0x2004);
+ gMain.state++;
+ break;
+ case 7:
+ Menu_UpdateWindowText();
+ if (IsLinkTaskFinished())
+ gMain.state++;
+ break;
+ case 8:
+ sub_800832C();
+ gMain.state++;
+ break;
+ case 9:
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ Menu_BlankWindowRect(4, 15, 26, 18);
+ Menu_PrintText(Str_843DAA3, 4, 15);
+ gMain.state++;
+ }
+ break;
+ case 10:
+ if (gMain.newKeys & A_BUTTON)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gMain.state++;
+ }
+ break;
+ case 11:
+ if (!gPaletteFade.active)
+ SetMainCallback2(CB2_InitTitleScreen);
+ break;
+ }
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
}
#endif
diff --git a/src/engine/reset_rtc_screen.c b/src/engine/reset_rtc_screen.c
index 8b67f39a5..8c2c23569 100644
--- a/src/engine/reset_rtc_screen.c
+++ b/src/engine/reset_rtc_screen.c
@@ -5,6 +5,7 @@
#include "palette.h"
#include "rtc.h"
#include "save.h"
+#include "script.h"
#include "sprite.h"
#include "constants/songs.h"
#include "sound.h"
@@ -147,13 +148,6 @@ const struct SpriteTemplate gSpriteTemplate_83764E8 =
const u8 gUnknown_08376500[] = _(" : ");
-#if DEBUG
-const u8 gUnknown_Debug_0839AE94[] = _("にっすう");
-const u8 gUnknown_Debug_0839AE99[] = _("じかん");
-const u8 gUnknown_Debug_0839AE9D[] = _("ゲームない じかん");
-const u8 gUnknown_Debug_0839AEA7[] = _("RTC じかん");
-#endif
-
void SpriteCB_ResetRtcCusor0(struct Sprite *sprite)
{
int state = gTasks[sprite->data[0]].data[2];
@@ -576,6 +570,7 @@ void Task_ResetRtcScreen(u8 taskId)
PlaySE(SE_BOO);
}
data[0] = 5;
+ // fall through
case 5:
if (gMain.newKeys & A_BUTTON)
{
@@ -586,6 +581,7 @@ void Task_ResetRtcScreen(u8 taskId)
{
break;
}
+ // fall through
case 6:
if (!gPaletteFade.active)
{
@@ -596,317 +592,101 @@ void Task_ResetRtcScreen(u8 taskId)
}
#if DEBUG
-
-__attribute__((naked))
void debug_sub_806F8F8(void)
{
- asm("\
- push {lr}\n\
- ldr r0, ._131 @ CB2_InitResetRtcScreen\n\
- bl SetMainCallback2\n\
- pop {r0}\n\
- bx r0\n\
-._132:\n\
- .align 2, 0\n\
-._131:\n\
- .word CB2_InitResetRtcScreen+1");
+ SetMainCallback2(CB2_InitResetRtcScreen);
}
-__attribute__((naked))
-void debug_sub_806F908(u8 a)
-{
- asm("\
- push {r4, r5, lr}\n\
- lsl r0, r0, #0x18\n\
- lsr r5, r0, #0x18\n\
- lsl r0, r5, #0x2\n\
- add r0, r0, r5\n\
- lsl r0, r0, #0x3\n\
- ldr r2, ._136 @ gTasks\n\
- add r4, r0, r2\n\
- mov r1, #0x0\n\
- ldsh r0, [r4, r1]\n\
- cmp r0, #0\n\
- beq ._133 @cond_branch\n\
- cmp r0, #0x1\n\
- beq ._134 @cond_branch\n\
- b ._141\n\
-._137:\n\
- .align 2, 0\n\
-._136:\n\
- .word gTasks+0x8\n\
-._133:\n\
- ldr r0, ._139 @ Task_ResetRtc_0\n\
- mov r1, #0x50\n\
- bl CreateTask\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- strh r0, [r4, #0x2]\n\
- ldrh r0, [r4]\n\
- add r0, r0, #0x1\n\
- strh r0, [r4]\n\
- b ._141\n\
-._140:\n\
- .align 2, 0\n\
-._139:\n\
- .word Task_ResetRtc_0+1\n\
-._134:\n\
- sub r2, r2, #0x8\n\
- mov r0, #0x2\n\
- ldsh r1, [r4, r0]\n\
- lsl r0, r1, #0x2\n\
- add r0, r0, r1\n\
- lsl r0, r0, #0x3\n\
- add r2, r0, r2\n\
- mov r1, #0x8\n\
- ldsh r0, [r2, r1]\n\
- cmp r0, #0\n\
- beq ._141 @cond_branch\n\
- mov r1, #0xa\n\
- ldsh r0, [r2, r1]\n\
- cmp r0, #0x1\n\
- bne ._142 @cond_branch\n\
- ldr r3, ._143 @ gLocalTime\n\
- mov r1, #0x0\n\
- ldsh r0, [r3, r1]\n\
- mov r1, #0x2\n\
- ldsb r1, [r3, r1]\n\
- mov r2, #0x3\n\
- ldsb r2, [r3, r2]\n\
- ldrb r3, [r3, #0x4]\n\
- lsl r3, r3, #0x18\n\
- asr r3, r3, #0x18\n\
- bl RtcCalcLocalTimeOffset\n\
-._142:\n\
- ldrb r0, [r4, #0x2]\n\
- bl DestroyTask\n\
- bl Menu_EraseScreen\n\
- bl ScriptContext2_Disable\n\
- add r0, r5, #0\n\
- bl DestroyTask\n\
-._141:\n\
- pop {r4, r5}\n\
- pop {r0}\n\
- bx r0\n\
-._144:\n\
- .align 2, 0\n\
-._143:\n\
- .word gLocalTime");
-}
+void debug_sub_806F908(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
-__attribute__((naked))
-void debug_sub_806F99C()
-{
- asm("\
- push {lr}\n\
- bl RtcCalcLocalTime\n\
- ldr r0, ._145 @ debug_sub_806F908\n\
- mov r1, #0x50\n\
- bl CreateTask\n\
- bl ScriptContext2_Enable\n\
- pop {r0}\n\
- bx r0\n\
-._146:\n\
- .align 2, 0\n\
-._145:\n\
- .word debug_sub_806F908+1");
+ switch (data[0])
+ {
+ case 0:
+ data[1] = CreateTask(Task_ResetRtc_0, 80);
+ data[0]++;
+ break;
+ case 1:
+ if (gTasks[data[1]].data[0] != 0)
+ {
+ if (gTasks[data[1]].data[1] == 1)
+ RtcCalcLocalTimeOffset(gLocalTime.days, gLocalTime.hours, gLocalTime.minutes, gLocalTime.seconds);
+ DestroyTask(data[1]);
+ Menu_EraseScreen();
+ ScriptContext2_Disable();
+ DestroyTask(taskId);
+ }
+ break;
+ }
}
-__attribute__((naked))
-void debug_sub_806F9B8()
-{
- asm("\
- push {lr}\n\
- ldr r2, ._147 @ gLocalTime\n\
- ldr r0, ._147 + 4 @ gSaveBlock2\n\
- add r0, r0, #0xa0\n\
- ldr r1, [r0, #0x4]\n\
- ldr r0, [r0]\n\
- str r0, [r2]\n\
- str r1, [r2, #0x4]\n\
- ldr r0, ._147 + 8 @ debug_sub_806F908\n\
- mov r1, #0x50\n\
- bl CreateTask\n\
- bl ScriptContext2_Enable\n\
- pop {r0}\n\
- bx r0\n\
-._148:\n\
- .align 2, 0\n\
-._147:\n\
- .word gLocalTime\n\
- .word gSaveBlock2\n\
- .word debug_sub_806F908+1");
+void debug_sub_806F99C(void)
+{
+ RtcCalcLocalTime();
+ CreateTask(debug_sub_806F908, 80);
+ ScriptContext2_Enable();
}
-__attribute__((naked))
-void debug_sub_806F9E4()
-{
- asm("\
- push {r4, r5, r6, r7, lr}\n\
- mov r7, sl\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5, r6, r7}\n\
- lsl r0, r0, #0x18\n\
- lsr r7, r0, #0x18\n\
- lsl r0, r7, #0x2\n\
- add r0, r0, r7\n\
- lsl r0, r0, #0x3\n\
- ldr r1, ._153 @ gTasks\n\
- add r5, r0, r1\n\
- ldr r6, ._153 + 4 @ gStringVar4\n\
- mov r1, #0x0\n\
- ldsh r0, [r5, r1]\n\
- cmp r0, #0x1\n\
- beq ._149 @cond_branch\n\
- cmp r0, #0x1\n\
- bgt ._150 @cond_branch\n\
- cmp r0, #0\n\
- beq ._151 @cond_branch\n\
- b ._165\n\
-._154:\n\
- .align 2, 0\n\
-._153:\n\
- .word gTasks+0x8\n\
- .word gStringVar4\n\
-._150:\n\
- cmp r0, #0x2\n\
- beq ._155 @cond_branch\n\
- b ._165\n\
-._149:\n\
- mov r0, #0x0\n\
- mov r1, #0x9\n\
- mov r2, #0x1d\n\
- mov r3, #0x13\n\
- bl Menu_DrawStdWindowFrame\n\
- add r4, r6, #0\n\
- add r4, r4, #0x50\n\
- bl RtcGetErrorStatus\n\
- add r1, r0, #0\n\
- lsl r1, r1, #0x10\n\
- lsr r1, r1, #0x10\n\
- add r0, r4, #0\n\
- mov r2, #0x2\n\
- mov r3, #0x4\n\
- bl ConvertIntToHexStringN\n\
- add r0, r4, #0\n\
- mov r1, #0x2\n\
- mov r2, #0xa\n\
- bl Menu_PrintText\n\
- ldr r0, ._158 @ gUnknown_Debug_0839AE94\n\
- mov r1, #0xc\n\
- mov r2, #0xc\n\
- bl Menu_PrintText\n\
- ldr r0, ._158 + 4 @ gUnknown_Debug_0839AE99\n\
- mov r1, #0x14\n\
- mov r2, #0xc\n\
- bl Menu_PrintText\n\
- ldr r0, ._158 + 8 @ gUnknown_Debug_0839AEA7\n\
- mov r1, #0x1\n\
- mov r2, #0xe\n\
- bl Menu_PrintText\n\
- ldr r0, ._158 + 12 @ gUnknown_Debug_0839AE9D\n\
- mov r1, #0x1\n\
- mov r2, #0x10\n\
- bl Menu_PrintText\n\
-._151:\n\
- ldrh r0, [r5]\n\
- add r0, r0, #0x1\n\
- strh r0, [r5]\n\
- b ._165\n\
-._159:\n\
- .align 2, 0\n\
-._158:\n\
- .word gUnknown_Debug_0839AE94\n\
- .word gUnknown_Debug_0839AE99\n\
- .word gUnknown_Debug_0839AEA7\n\
- .word gUnknown_Debug_0839AE9D\n\
-._155:\n\
- bl RtcCalcLocalTime\n\
- add r0, r6, #0\n\
- bl FormatHexRtcTime\n\
- mov r2, #0x14\n\
- add r2, r2, r6\n\
- mov r9, r2\n\
- mov r0, r9\n\
- bl debug_sub_8009894\n\
- mov r0, #0x28\n\
- add r0, r0, r6\n\
- mov sl, r0\n\
- ldr r4, ._163 @ gLocalTime\n\
- mov r1, #0x2\n\
- ldsb r1, [r4, r1]\n\
- mov r2, #0x3\n\
- ldsb r2, [r4, r2]\n\
- mov r3, #0x4\n\
- ldsb r3, [r4, r3]\n\
- bl FormatDecimalTime\n\
- mov r1, #0x3c\n\
- add r1, r1, r6\n\
- mov r8, r1\n\
- mov r2, #0x0\n\
- ldsh r1, [r4, r2]\n\
- mov r0, r8\n\
- mov r2, #0x1\n\
- mov r3, #0x4\n\
- bl ConvertIntToDecimalStringN\n\
- ldr r0, ._163 + 4 @ gSaveBlock2\n\
- ldrb r0, [r0, #0x12]\n\
- cmp r0, #0\n\
- bne ._160 @cond_branch\n\
- add r0, r6, #0\n\
- mov r1, #0x14\n\
- mov r2, #0xe\n\
- bl Menu_PrintText\n\
- mov r0, r9\n\
- mov r1, #0xc\n\
- mov r2, #0xe\n\
- bl Menu_PrintText\n\
- mov r0, sl\n\
- mov r1, #0x14\n\
- mov r2, #0x10\n\
- bl Menu_PrintText\n\
- mov r0, r8\n\
- mov r1, #0xc\n\
- mov r2, #0x10\n\
- bl Menu_PrintText\n\
-._160:\n\
- ldrh r1, [r5, #0x2]\n\
- mov r2, #0x2\n\
- ldsh r0, [r5, r2]\n\
- cmp r0, #0x13\n\
- ble ._161 @cond_branch\n\
- add r0, r1, #1\n\
- strh r0, [r5, #0x2]\n\
- b ._165\n\
-._164:\n\
- .align 2, 0\n\
-._163:\n\
- .word gLocalTime\n\
- .word gSaveBlock2\n\
-._161:\n\
- ldr r0, ._166 @ gMain\n\
- ldrh r1, [r0, #0x2e]\n\
- mov r0, #0x1\n\
- and r0, r0, r1\n\
- cmp r0, #0\n\
- beq ._165 @cond_branch\n\
- bl Menu_EraseScreen\n\
- add r0, r7, #0\n\
- bl DestroyTask\n\
- bl ScriptContext2_Disable\n\
-._165:\n\
- pop {r3, r4, r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov sl, r5\n\
- pop {r4, r5, r6, r7}\n\
- pop {r0}\n\
- bx r0\n\
-._167:\n\
- .align 2, 0\n\
-._166:\n\
- .word gMain");
+void debug_sub_806F9B8(void)
+{
+ gLocalTime = gSaveBlock2.lastBerryTreeUpdate;
+ CreateTask(debug_sub_806F908, 80);
+ ScriptContext2_Enable();
}
+static const u8 sDebugText_Days[] = _("にっすう"); // "days"
+static const u8 sDebugText_Time[] = _("じかん"); // "time"
+static const u8 sDebugText_GameTime[] = _("ゲームない じかん"); // "game time"
+static const u8 sDebugText_RTCTime[] = _("RTC じかん"); // "RTC time"
+
+void debug_sub_806F9E4(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 *str = gStringVar4;
+
+ switch (data[0])
+ {
+ case 0:
+ data[0]++;
+ break;
+ case 1:
+ Menu_DrawStdWindowFrame(0, 9, 29, 19);
+ ConvertIntToHexStringN(str + 80, RtcGetErrorStatus(), 2, 4);
+ Menu_PrintText(str + 80, 2, 10);
+ Menu_PrintText(sDebugText_Days, 12, 12);
+ Menu_PrintText(sDebugText_Time, 20, 12);
+ Menu_PrintText(sDebugText_RTCTime, 1, 14);
+ Menu_PrintText(sDebugText_GameTime, 1, 16);
+ data[0]++;
+ break;
+ case 2:
+ RtcCalcLocalTime();
+ FormatHexRtcTime(str);
+ debug_sub_8009894(str + 20);
+ FormatDecimalTime(str + 40, gLocalTime.hours, gLocalTime.minutes, gLocalTime.seconds);
+ ConvertIntToDecimalStringN(str + 60, gLocalTime.days, 1, 4);
+ if (gSaveBlock2.playTimeVBlanks == 0)
+ {
+ Menu_PrintText(str, 20, 14);
+ Menu_PrintText(str + 20, 12, 14);
+ Menu_PrintText(str + 40, 20, 16);
+ Menu_PrintText(str + 60, 12, 16);
+ }
+ if (data[1] > 19) // Did you mean < 19?
+ {
+ data[1]++;
+ }
+ else
+ {
+ if (gMain.newKeys & A_BUTTON)
+ {
+ Menu_EraseScreen();
+ DestroyTask(taskId);
+ ScriptContext2_Disable();
+ }
+ }
+ break;
+ }
+}
#endif \ No newline at end of file
diff --git a/src/engine/save_failed_screen.c b/src/engine/save_failed_screen.c
index 49cf166d4..f57315d09 100644
--- a/src/engine/save_failed_screen.c
+++ b/src/engine/save_failed_screen.c
@@ -26,6 +26,7 @@
static EWRAM_DATA u16 gSaveFailedType = 0;
static EWRAM_DATA u16 gSaveFailedClockInfo[9] = {0};
+extern u32 gUnknown_Debug_03004BD0;
extern u32 gDamagedSaveSectors;
extern u32 gGameContinueCallback;
@@ -61,18 +62,16 @@ static const u8 sClockFrames[8][3] =
static const u8 gSaveFailedClockPal[] = INCBIN_U8("graphics/misc/clock_small.gbapal");
static const u8 gSaveFailedClockGfx[] = INCBIN_U8("graphics/misc/clock_small.4bpp.lz");
-#define static
-
static void VBlankCB(void);
static void CB2_SaveFailedScreen(void);
static void CB2_WipeSave(void);
-/*static*/ void CB2_GameplayCannotBeContinued(void);
+static void CB2_GameplayCannotBeContinued(void);
static void CB2_FadeAndReturnToTitleScreen(void);
static void CB2_ReturnToTitleScreen(void);
static void VBlankCB_UpdateClockGraphics(void);
-static bool8 VerifySectorWipe(u16 sector);
+static bool8 IsSectorNonEmpty(u16 sector);
static bool8 WipeSector(u16 sector);
-/*static*/ bool8 WipeSectors(u32 sectorBits);
+static bool8 WipeSectors(u32 sectorBits);
void DoSaveFailedScreen(u8 saveType)
{
@@ -150,157 +149,17 @@ static void CB2_SaveFailedScreen(void)
}
}
-#if DEBUG
-__attribute__((naked))
-void CB2_WipeSave()
-{
- asm(
- " push {r4, r5, lr}\n"
- " mov r4, #0x0\n"
- " ldr r0, ._20 @ gSaveFailedClockInfo\n"
- " mov r2, #0x1\n"
- " strh r2, [r0]\n"
- " ldr r0, ._20 + 4 @ gUnknown_Debug_03004BD0\n"
- " ldr r0, [r0]\n"
- " ldr r1, ._20 + 8 @ gDamagedSaveSectors\n"
- " cmp r0, #0\n"
- " beq ._12 @cond_branch\n"
- " str r2, [r1]\n"
- "._12:\n"
- " ldr r0, [r1]\n"
- " cmp r0, #0\n"
- " beq ._16 @cond_branch\n"
- " add r5, r1, #0\n"
- "._17:\n"
- " ldr r0, [r5]\n"
- " bl WipeSectors\n"
- " lsl r0, r0, #0x18\n"
- " cmp r0, #0\n"
- " bne ._14 @cond_branch\n"
- " mov r0, #0x1\n"
- " mov r1, #0xa\n"
- " mov r2, #0x1c\n"
- " mov r3, #0x13\n"
- " bl Menu_DrawStdWindowFrame\n"
- " ldr r0, ._20 + 12 @ gSystemText_CheckCompleteSaveAttempt\n"
- " mov r1, #0x2\n"
- " mov r2, #0xb\n"
- " bl Menu_PrintText\n"
- " ldr r0, ._20 + 16 @ gSaveFailedType\n"
- " ldrb r0, [r0]\n"
- " bl Save_WriteDataInternal\n"
- " ldr r0, [r5]\n"
- " cmp r0, #0\n"
- " beq ._15 @cond_branch\n"
- " mov r0, #0x1\n"
- " mov r1, #0xa\n"
- " mov r2, #0x1c\n"
- " mov r3, #0x13\n"
- " bl Menu_DrawStdWindowFrame\n"
- " ldr r0, ._20 + 20 @ gSystemText_SaveFailedBackupCheck\n"
- " mov r1, #0x2\n"
- " mov r2, #0xb\n"
- " bl Menu_PrintText\n"
- "._15:\n"
- " add r0, r4, #1\n"
- " lsl r0, r0, #0x18\n"
- " lsr r4, r0, #0x18\n"
- " ldr r0, [r5]\n"
- " cmp r0, #0\n"
- " beq ._16 @cond_branch\n"
- " cmp r4, #0x2\n"
- " bls ._17 @cond_branch\n"
- "._16:\n"
- " cmp r4, #0x3\n"
- " bne ._18 @cond_branch\n"
- " mov r0, #0x1\n"
- " mov r1, #0xa\n"
- " mov r2, #0x1c\n"
- " mov r3, #0x13\n"
- " bl Menu_DrawStdWindowFrame\n"
- " ldr r0, ._20 + 24 @ gSystemText_BackupDamagedGameContinue\n"
- " mov r1, #0x2\n"
- " mov r2, #0xb\n"
- " bl Menu_PrintText\n"
- " ldr r0, ._20 + 28 @ CB2_FadeAndReturnToTitleScreen\n"
- " bl SetMainCallback2\n"
- " b ._23\n"
- "._21:\n"
- " .align 2, 0\n"
- "._20:\n"
- " .word gSaveFailedClockInfo\n"
- " .word gUnknown_Debug_03004BD0\n"
- " .word gDamagedSaveSectors\n"
- " .word gSystemText_CheckCompleteSaveAttempt\n"
- " .word gSaveFailedType\n"
- " .word gSystemText_SaveFailedBackupCheck\n"
- " .word gSystemText_BackupDamagedGameContinue\n"
- " .word CB2_FadeAndReturnToTitleScreen+1\n"
- "._18:\n"
- " mov r0, #0x1\n"
- " mov r1, #0xa\n"
- " mov r2, #0x1c\n"
- " mov r3, #0x13\n"
- " bl Menu_DrawStdWindowFrame\n"
- " ldr r0, ._24 @ gGameContinueCallback\n"
- " ldr r0, [r0]\n"
- " cmp r0, #0\n"
- " bne ._22 @cond_branch\n"
- " ldr r0, ._24 + 4 @ gSystemText_SaveCompletedGameEnd\n"
- " mov r1, #0x2\n"
- " mov r2, #0xb\n"
- " bl Menu_PrintText\n"
- " b ._23\n"
- "._25:\n"
- " .align 2, 0\n"
- "._24:\n"
- " .word gGameContinueCallback\n"
- " .word gSystemText_SaveCompletedGameEnd\n"
- "._14:\n"
- " mov r0, #0x1\n"
- " mov r1, #0xa\n"
- " mov r2, #0x1c\n"
- " mov r3, #0x13\n"
- " bl Menu_DrawStdWindowFrame\n"
- " ldr r0, ._27 @ gSystemText_BackupDamagedGameContinue\n"
- " mov r1, #0x2\n"
- " mov r2, #0xb\n"
- " bl Menu_PrintText\n"
- " ldr r0, ._27 + 4 @ CB2_GameplayCannotBeContinued\n"
- " bl SetMainCallback2\n"
- " b ._26\n"
- "._28:\n"
- " .align 2, 0\n"
- "._27:\n"
- " .word gSystemText_BackupDamagedGameContinue\n"
- " .word CB2_GameplayCannotBeContinued+1\n"
- "._22:\n"
- " ldr r0, ._29 @ gSystemText_SaveCompletedPressA\n"
- " mov r1, #0x2\n"
- " mov r2, #0xb\n"
- " bl Menu_PrintText\n"
- "._23:\n"
- " ldr r0, ._29 + 4 @ CB2_FadeAndReturnToTitleScreen\n"
- " bl SetMainCallback2\n"
- "._26:\n"
- " pop {r4, r5}\n"
- " pop {r0}\n"
- " bx r0\n"
- "._30:\n"
- " .align 2, 0\n"
- "._29:\n"
- " .word gSystemText_SaveCompletedPressA\n"
- " .word CB2_FadeAndReturnToTitleScreen+1\n"
- "\n"
- );
-}
-#else
static void CB2_WipeSave(void)
{
u8 wipeTries = 0;
gSaveFailedClockInfo[0] = TRUE;
+#if DEBUG
+ if (gUnknown_Debug_03004BD0 != 0)
+ gDamagedSaveSectors = 1;
+#endif
+
while (gDamagedSaveSectors != 0 && wipeTries < 3) // while there are still attempts left, keep trying to fix the save sectors.
{
if (WipeSectors(gDamagedSaveSectors) != FALSE)
@@ -345,9 +204,8 @@ static void CB2_WipeSave(void)
SetMainCallback2(CB2_FadeAndReturnToTitleScreen);
}
-#endif
-/*static*/ void CB2_GameplayCannotBeContinued(void)
+static void CB2_GameplayCannotBeContinued(void)
{
gSaveFailedClockInfo[0] = FALSE;
@@ -412,55 +270,24 @@ static void VBlankCB_UpdateClockGraphics(void)
gSaveFailedClockInfo[1]--;
}
-#if DEBUG
-__attribute__((naked))
-bool8 VerifySectorWipe(u16 sector)
-{
- asm(
- " push {lr}\n"
- " lsl r0, r0, #0x10\n"
- " lsr r0, r0, #0x10\n"
- " ldr r2, ._50 @ \n"
- " mov r3, #0x80\n"
- " lsl r3, r3, #0x5\n"
- " mov r1, #0x0\n"
- " bl ReadFlash\n"
- " mov r0, #0x0\n"
- " ldr r1, ._50 + 4 @ \n"
- "._49:\n"
- " add r0, r0, #0x1\n"
- " lsl r0, r0, #0x10\n"
- " lsr r0, r0, #0x10\n"
- " cmp r0, r1\n"
- " bls ._49 @cond_branch\n"
- " ldr r0, ._50 + 8 @ \n"
- " ldrb r0, [r0]\n"
- " pop {r1}\n"
- " bx r1\n"
- "._51:\n"
- " .align 2, 0\n"
- "._50:\n"
- " .word +0x2000000\n"
- " .word 0x3ff\n"
- " .word gUnknown_Debug_03004BD0\n"
- "\n"
- );
-}
-#else
-static bool8 VerifySectorWipe(u16 sector)
+static bool8 IsSectorNonEmpty(u16 sector)
{
u32 *ptr = (u32 *)&gSharedMem;
u16 i;
ReadFlash(sector, 0, ptr, 4096);
+#if DEBUG // Don't verify the sector wipe?
for (i = 0; i < 0x400; i++, ptr++)
- if (*ptr)
+ ;
+ return gUnknown_Debug_03004BD0;
+#else
+ for (i = 0; i < 0x400; i++, ptr++)
+ if (*ptr != 0)
return TRUE;
-
return FALSE;
-}
#endif
+}
static bool8 WipeSector(u16 sector)
{
@@ -472,13 +299,13 @@ static bool8 WipeSector(u16 sector)
for (j = 0; j < 0x1000; j++)
ProgramFlashByte(sector, j, 0);
- failed = VerifySectorWipe(sector);
+ failed = IsSectorNonEmpty(sector);
}
return failed;
}
-/*static*/ bool8 WipeSectors(u32 sectorBits)
+static bool8 WipeSectors(u32 sectorBits)
{
u16 i;
diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c
index 998c4697e..8d16aa9bf 100644
--- a/src/engine/trainer_card.c
+++ b/src/engine/trainer_card.c
@@ -64,7 +64,7 @@ const u8 gBadgesTiles[] = INCBIN_U8("graphics/trainer_card/badges.4bpp");
u8 *const ewram_ = gSharedMem;
#if DEBUG
-const struct TrainerCard gUnknown_Debug_083E0448 =
+const struct TrainerCard sTestTrainerCard =
{
.gender = FEMALE,
.stars = 4,
@@ -87,7 +87,7 @@ const struct TrainerCard gUnknown_Debug_083E0448 =
.pokemonTrades = 0xFFFF,
.money = 99999,
.var_28 = {1, 2, 3, 4},
- .playerName = _("てすと"),
+ .playerName = _("てすと"), // "test"
};
#endif
@@ -239,7 +239,7 @@ void debug_sub_80A0710(Callback callback)
void debug_sub_80A073C(Callback callback)
{
- memcpy(&gTrainerCards[0], &gUnknown_Debug_083E0448, sizeof(struct TrainerCard));
+ memcpy(&gTrainerCards[0], &sTestTrainerCard, sizeof(struct TrainerCard));
gDebug_03000748=TRUE;
TrainerCard_InitScreenForLinkPlayer(0, callback);
SetMainCallback2(sub_8093174);
@@ -251,7 +251,7 @@ void debug_sub_80A0780()
int i;
for (i = 0; i < 4; i++)
- memcpy(&gTrainerCards[i], &gUnknown_Debug_083E0448, sizeof(struct TrainerCard));
+ memcpy(&gTrainerCards[i], &sTestTrainerCard, sizeof(struct TrainerCard));
}
#endif