summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/engine/cable_club.c550
-rw-r--r--src/engine/link.c2
-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
-rw-r--r--src/field/field_map_obj.c501
-rw-r--r--src/field/mauville_man.c103
-rw-r--r--src/field/overworld.c2
8 files changed, 324 insertions, 1453 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..70c2b85cc 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);
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
diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c
index 13d8ebb5b..f3a949b51 100644
--- a/src/field/field_map_obj.c
+++ b/src/field/field_map_obj.c
@@ -1908,7 +1908,7 @@ static u16 gUnknown_030005A6;
struct MapObject gMapObjects[16];
#if DEBUG
-u8 gUnknown_Debug_03004BC0[4]; // unknown type
+u8 gUnknown_Debug_03004BC0; // unknown type
#endif
void npc_clear_ids_and_state(struct MapObject *mapObj)
@@ -1920,48 +1920,16 @@ void npc_clear_ids_and_state(struct MapObject *mapObj)
mapObj->mapobj_unk_1C = 0xFF;
}
-#if DEBUG
-__attribute__((naked))
-void npcs_clear_ids_and_state()
-{
- asm(
- " push {r4, r5, lr}\n"
- " mov r4, #0x0\n"
- " ldr r5, ._2 @ gMapObjects\n"
- "._1:\n"
- " lsl r0, r4, #0x3\n"
- " add r0, r0, r4\n"
- " lsl r0, r0, #0x2\n"
- " add r0, r0, r5\n"
- " bl npc_clear_ids_and_state\n"
- " add r0, r4, #1\n"
- " lsl r0, r0, #0x18\n"
- " lsr r4, r0, #0x18\n"
- " cmp r4, #0xf\n"
- " bls ._1 @cond_branch\n"
- " ldr r1, ._2 + 4 @ gUnknown_Debug_03004BC0\n"
- " mov r0, #0x0\n"
- " strb r0, [r1]\n"
- " pop {r4, r5}\n"
- " pop {r0}\n"
- " bx r0\n"
- "._3:\n"
- " .align 2, 0\n"
- "._2:\n"
- " .word gMapObjects\n"
- " .word gUnknown_Debug_03004BC0\n"
- "\n"
- );
-}
-#else
void npcs_clear_ids_and_state(void)
{
u8 i;
for (i = 0; i < 16; i++)
npc_clear_ids_and_state(&gMapObjects[i]);
-}
+#if DEBUG
+ gUnknown_Debug_03004BC0 = 0;
#endif
+}
void sub_805AA98(void)
{
@@ -2004,7 +1972,7 @@ u8 sub_805AB54(void)
u8 GetFieldObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
{
- if (localId <= 0xFE)
+ if (localId < 255)
return GetFieldObjectIdByLocalIdAndMapInternal(localId, mapNum, mapGroup);
else
return GetFieldObjectIdByLocalId(localId);
@@ -2055,190 +2023,80 @@ u8 GetFieldObjectIdByLocalId(u8 localId)
return 16;
}
-#if DEBUG
-__attribute__((naked))
-u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c)
-{
- asm(
- " push {r4, r5, r6, r7, lr}\n"
- " mov r7, r9\n"
- " mov r6, r8\n"
- " push {r6, r7}\n"
- " add sp, sp, #0xfffffffc\n"
- " add r5, r0, #0\n"
- " lsl r1, r1, #0x18\n"
- " lsr r6, r1, #0x18\n"
- " lsl r2, r2, #0x18\n"
- " lsr r7, r2, #0x18\n"
- " ldrb r0, [r5]\n"
- " add r1, r6, #0\n"
- " add r2, r7, #0\n"
- " mov r3, sp\n"
- " bl GetAvailableFieldObjectSlot\n"
- " lsl r0, r0, #0x18\n"
- " cmp r0, #0\n"
- " beq ._35 @cond_branch\n"
- " mov r0, #0x10\n"
- " b ._36\n"
- "._35:\n"
- " mov r0, sp\n"
- " ldrb r1, [r0]\n"
- " lsl r0, r1, #0x3\n"
- " add r0, r0, r1\n"
- " lsl r0, r0, #0x2\n"
- " ldr r1, ._40 @ gMapObjects\n"
- " add r4, r0, r1\n"
- " add r0, r4, #0\n"
- " bl npc_clear_ids_and_state\n"
- " ldrh r3, [r5, #0x4]\n"
- " add r3, r3, #0x7\n"
- " lsl r3, r3, #0x10\n"
- " lsr r3, r3, #0x10\n"
- " ldrh r2, [r5, #0x6]\n"
- " add r2, r2, #0x7\n"
- " lsl r2, r2, #0x10\n"
- " lsr r2, r2, #0x10\n"
- " ldrb r0, [r4]\n"
- " mov r1, #0x1\n"
- " orr r0, r0, r1\n"
- " mov r1, #0x4\n"
- " orr r0, r0, r1\n"
- " strb r0, [r4]\n"
- " ldrb r0, [r5, #0x1]\n"
- " strb r0, [r4, #0x5]\n"
- " ldrb r0, [r5, #0x9]\n"
- " strb r0, [r4, #0x6]\n"
- " ldrb r0, [r5]\n"
- " strb r0, [r4, #0x8]\n"
- " strb r6, [r4, #0x9]\n"
- " strb r7, [r4, #0xa]\n"
- " strh r3, [r4, #0xc]\n"
- " strh r2, [r4, #0xe]\n"
- " strh r3, [r4, #0x10]\n"
- " strh r2, [r4, #0x12]\n"
- " strh r3, [r4, #0x14]\n"
- " strh r2, [r4, #0x16]\n"
- " ldrb r0, [r5, #0x8]\n"
- " mov r7, #0xf\n"
- " add r1, r7, #0\n"
- " and r1, r1, r0\n"
- " ldrb r2, [r4, #0xb]\n"
- " mov r0, #0x10\n"
- " neg r0, r0\n"
- " mov r8, r0\n"
- " and r0, r0, r2\n"
- " orr r0, r0, r1\n"
- " strb r0, [r4, #0xb]\n"
- " ldrb r1, [r5, #0x8]\n"
- " lsl r1, r1, #0x4\n"
- " and r0, r0, r7\n"
- " orr r0, r0, r1\n"
- " strb r0, [r4, #0xb]\n"
- " ldrb r1, [r5, #0xa]\n"
- " lsl r1, r1, #0x1c\n"
- " mov r0, #0xf\n"
- " mov r9, r0\n"
- " lsr r1, r1, #0x1c\n"
- " ldrb r2, [r4, #0x19]\n"
- " mov r0, r8\n"
- " and r0, r0, r2\n"
- " orr r0, r0, r1\n"
- " strb r0, [r4, #0x19]\n"
- " ldrb r1, [r5, #0xa]\n"
- " lsr r1, r1, #0x4\n"
- " lsl r1, r1, #0x4\n"
- " and r0, r0, r7\n"
- " orr r0, r0, r1\n"
- " strb r0, [r4, #0x19]\n"
- " ldrh r0, [r5, #0xc]\n"
- " strb r0, [r4, #0x7]\n"
- " ldrh r0, [r5, #0xe]\n"
- " strb r0, [r4, #0x1d]\n"
- " ldr r1, ._40 + 4 @ gUnknown_0836DC09\n"
- " ldrb r0, [r5, #0x9]\n"
- " add r0, r0, r1\n"
- " ldrb r1, [r0]\n"
- " add r0, r4, #0\n"
- " add r0, r0, #0x20\n"
- " strb r1, [r0]\n"
- " ldrb r1, [r0]\n"
- " add r0, r4, #0\n"
- " bl FieldObjectSetDirection\n"
- " add r0, r4, #0\n"
- " bl FieldObjectHandleDynamicGraphicsId\n"
- " ldr r1, ._40 + 8 @ gUnknown_0836DBBC\n"
- " ldrb r0, [r4, #0x6]\n"
- " add r0, r0, r1\n"
- " ldrb r0, [r0]\n"
- " cmp r0, #0\n"
- " beq ._39 @cond_branch\n"
- " ldrb r2, [r4, #0x19]\n"
- " add r0, r7, #0\n"
- " and r0, r0, r2\n"
- " cmp r0, #0\n"
- " bne ._38 @cond_branch\n"
- " lsl r0, r2, #0x1c\n"
- " lsr r0, r0, #0x1c\n"
- " add r0, r0, #0x1\n"
- " mov r1, r9\n"
- " and r0, r0, r1\n"
- " mov r1, r8\n"
- " and r1, r1, r2\n"
- " orr r1, r1, r0\n"
- " strb r1, [r4, #0x19]\n"
- "._38:\n"
- " ldrb r2, [r4, #0x19]\n"
- " mov r0, #0xf0\n"
- " and r0, r0, r2\n"
- " cmp r0, #0\n"
- " bne ._39 @cond_branch\n"
- " lsr r1, r2, #0x4\n"
- " add r1, r1, #0x1\n"
- " lsl r1, r1, #0x4\n"
- " add r0, r7, #0\n"
- " and r0, r0, r2\n"
- " orr r0, r0, r1\n"
- " strb r0, [r4, #0x19]\n"
- "._39:\n"
- " ldr r1, ._40 + 12 @ gUnknown_Debug_03004BC0\n"
- " ldrb r0, [r1]\n"
- " add r0, r0, #0x1\n"
- " strb r0, [r1]\n"
- " mov r0, sp\n"
- " ldrb r0, [r0]\n"
- "._36:\n"
- " add sp, sp, #0x4\n"
- " pop {r3, r4}\n"
- " mov r8, r3\n"
- " mov r9, r4\n"
- " pop {r4, r5, r6, r7}\n"
- " pop {r1}\n"
- " bx r1\n"
- "._41:\n"
- " .align 2, 0\n"
- "._40:\n"
- " .word gMapObjects\n"
- " .word gUnknown_0836DC09\n"
- " .word gUnknown_0836DBBC\n"
- " .word gUnknown_Debug_03004BC0\n"
- "\n"
- );
-}
-#else
-#ifdef NONMATCHING
+// The bitfield at 0x18 needs to be u16 for this function to match
+struct MapObjectAlt
+{
+ /*0x00*/ u32 active:1;
+ u32 mapobj_bit_1:1;
+ u32 mapobj_bit_2:1;
+ u32 mapobj_bit_3:1;
+ u32 mapobj_bit_4:1;
+ u32 mapobj_bit_5:1;
+ u32 mapobj_bit_6:1;
+ u32 mapobj_bit_7:1;
+ /*0x01*/ u32 mapobj_bit_8:1;
+ u32 mapobj_bit_9:1;
+ u32 mapobj_bit_10:1;
+ u32 mapobj_bit_11:1;
+ u32 mapobj_bit_12:1;
+ u32 mapobj_bit_13:1;
+ u32 mapobj_bit_14:1;
+ u32 mapobj_bit_15:1;
+ /*0x02*/ u32 mapobj_bit_16:1;
+ u32 mapobj_bit_17:1;
+ u32 mapobj_bit_18:1;
+ u32 mapobj_bit_19:1;
+ u32 mapobj_bit_20:1;
+ u32 mapobj_bit_21:1;
+ u32 mapobj_bit_22:1;
+ u32 mapobj_bit_23:1;
+ /*0x03*/ u32 mapobj_bit_24:1;
+ u32 mapobj_bit_25:1;
+ u32 mapobj_bit_26:1;
+ u32 mapobj_bit_27:1;
+ u32 mapobj_bit_28:1;
+ u32 mapobj_bit_29:1;
+ u32 mapobj_bit_30:1;
+ u32 mapobj_bit_31:1;
+ /*0x04*/ u8 spriteId;
+ /*0x05*/ u8 graphicsId;
+ /*0x06*/ u8 animPattern;
+ /*0x07*/ u8 trainerType;
+ /*0x08*/ u8 localId;
+ /*0x09*/ u8 mapNum;
+ /*0x0A*/ u8 mapGroup;
+ /*0x0B*/ u8 mapobj_unk_0B_0:4;
+ u8 elevation:4;
+ /*0x0C*/ struct Coords16 coords1;
+ /*0x10*/ struct Coords16 coords2;
+ /*0x14*/ struct Coords16 coords3;
+ /*0x18*/ u16 mapobj_unk_18:4; //current direction?
+ /*0x18*/ u16 placeholder18:4;
+ /*0x19*/ u16 rangeX:4;
+ /*0x19*/ u16 rangeY:4;
+ /*0x1A*/ u8 mapobj_unk_1A;
+ /*0x1B*/ u8 mapobj_unk_1B;
+ /*0x1C*/ u8 mapobj_unk_1C;
+ /*0x1D*/ u8 trainerRange_berryTreeId;
+ /*0x1E*/ u8 mapobj_unk_1E;
+ /*0x1F*/ u8 mapobj_unk_1F;
+ /*0x20*/ u8 mapobj_unk_20;
+ /*0x21*/ u8 mapobj_unk_21;
+ /*0x22*/ u8 animId;
+ /*size = 0x24*/
+};
+
u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c)
{
- struct MapObject *mapObj; //TODO: resolve the mapobj_unk_19b weirdness
+ struct MapObjectAlt *mapObj; //TODO: resolve the mapobj_unk_19b weirdness
u8 var;
- u16 r3;
- u16 r2;
+ s16 r3;
+ s16 r2;
- //asm("nop"::"r"(b));
if (GetAvailableFieldObjectSlot(template->localId, b, c, &var) != 0)
return 16;
- //_0805ACCE
- mapObj = &gMapObjects[var];
- npc_clear_ids_and_state(mapObj);
+ mapObj = (void *)&gMapObjects[var];
+ npc_clear_ids_and_state((struct MapObject *)mapObj);
r3 = template->x + 7;
r2 = template->y + 7;
mapObj->active = TRUE;
@@ -2247,6 +2105,7 @@ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8
mapObj->animPattern = template->movementType;
mapObj->localId = template->localId;
mapObj->mapNum = b;
+ asm("":::"r6");
mapObj->mapGroup = c;
mapObj->coords1.x = r3;
mapObj->coords1.y = r2;
@@ -2256,186 +2115,26 @@ u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8
mapObj->coords3.y = r2;
mapObj->mapobj_unk_0B_0 = template->elevation;
mapObj->elevation = template->elevation;
- mapObj->range.as_nybbles.x = template->unkA_0;
- mapObj->range.as_nybbles.y = template->unkA_4;
+ mapObj->rangeX = template->unkA_0;
+ mapObj->rangeY = template->unkA_4;
mapObj->trainerType = template->unkC;
mapObj->trainerRange_berryTreeId = template->unkE;
mapObj->mapobj_unk_20 = gUnknown_0836DC09[template->movementType];
FieldObjectSetDirection((struct MapObject *)mapObj, mapObj->mapobj_unk_20);
- FieldObjectHandleDynamicGraphicsId(mapObj);
- //asm("":::"r5","r6");
+ asm("":::"r5","r6");
+ FieldObjectHandleDynamicGraphicsId((struct MapObject *)mapObj);
if (gUnknown_0836DBBC[mapObj->animPattern] != 0)
{
- if (mapObj->range.as_nybbles.x == 0)
- mapObj->range.as_nybbles.x++;
- if (mapObj->range.as_nybbles.y == 0)
- mapObj->range.as_nybbles.y++;
+ if (mapObj->rangeX == 0)
+ mapObj->rangeX++;
+ if (mapObj->rangeY == 0)
+ mapObj->rangeY++;
}
+#if DEBUG
+ gUnknown_Debug_03004BC0++;
+#endif
return var;
}
-#else
-__attribute__((naked))
-u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 b, u8 c)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- sub sp, 0x4\n\
- adds r5, r0, 0\n\
- lsls r1, 24\n\
- lsrs r6, r1, 24\n\
- lsls r2, 24\n\
- lsrs r7, r2, 24\n\
- ldrb r0, [r5]\n\
- adds r1, r6, 0\n\
- adds r2, r7, 0\n\
- mov r3, sp\n\
- bl GetAvailableFieldObjectSlot\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0805ACCE\n\
- movs r0, 0x10\n\
- b _0805ADC2\n\
-_0805ACCE:\n\
- mov r0, sp\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 3\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldr r1, _0805ADD0 @ =gMapObjects\n\
- adds r4, r0, r1\n\
- adds r0, r4, 0\n\
- bl npc_clear_ids_and_state\n\
- ldrh r3, [r5, 0x4]\n\
- adds r3, 0x7\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- ldrh r2, [r5, 0x6]\n\
- adds r2, 0x7\n\
- lsls r2, 16\n\
- lsrs r2, 16\n\
- ldrb r0, [r4]\n\
- movs r1, 0x1\n\
- orrs r0, r1\n\
- movs r1, 0x4\n\
- orrs r0, r1\n\
- strb r0, [r4]\n\
- ldrb r0, [r5, 0x1]\n\
- strb r0, [r4, 0x5]\n\
- ldrb r0, [r5, 0x9]\n\
- strb r0, [r4, 0x6]\n\
- ldrb r0, [r5]\n\
- strb r0, [r4, 0x8]\n\
- strb r6, [r4, 0x9]\n\
- strb r7, [r4, 0xA]\n\
- strh r3, [r4, 0xC]\n\
- strh r2, [r4, 0xE]\n\
- strh r3, [r4, 0x10]\n\
- strh r2, [r4, 0x12]\n\
- strh r3, [r4, 0x14]\n\
- strh r2, [r4, 0x16]\n\
- ldrb r0, [r5, 0x8]\n\
- movs r7, 0xF\n\
- adds r1, r7, 0\n\
- ands r1, r0\n\
- ldrb r2, [r4, 0xB]\n\
- movs r0, 0x10\n\
- negs r0, r0\n\
- mov r8, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r4, 0xB]\n\
- ldrb r1, [r5, 0x8]\n\
- lsls r1, 4\n\
- ands r0, r7\n\
- orrs r0, r1\n\
- strb r0, [r4, 0xB]\n\
- ldrb r1, [r5, 0xA]\n\
- lsls r1, 28\n\
- movs r0, 0xF\n\
- mov r9, r0\n\
- lsrs r1, 28\n\
- ldrb r2, [r4, 0x19]\n\
- mov r0, r8\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r4, 0x19]\n\
- ldrb r1, [r5, 0xA]\n\
- lsrs r1, 4\n\
- lsls r1, 4\n\
- ands r0, r7\n\
- orrs r0, r1\n\
- strb r0, [r4, 0x19]\n\
- ldrh r0, [r5, 0xC]\n\
- strb r0, [r4, 0x7]\n\
- ldrh r0, [r5, 0xE]\n\
- strb r0, [r4, 0x1D]\n\
- ldr r1, _0805ADD4 @ =gUnknown_0836DC09\n\
- ldrb r0, [r5, 0x9]\n\
- adds r0, r1\n\
- ldrb r1, [r0]\n\
- adds r0, r4, 0\n\
- adds r0, 0x20\n\
- strb r1, [r0]\n\
- ldrb r1, [r0]\n\
- adds r0, r4, 0\n\
- bl FieldObjectSetDirection\n\
- adds r0, r4, 0\n\
- bl FieldObjectHandleDynamicGraphicsId\n\
- ldr r1, _0805ADD8 @ =gUnknown_0836DBBC\n\
- ldrb r0, [r4, 0x6]\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _0805ADBE\n\
- ldrb r2, [r4, 0x19]\n\
- adds r0, r7, 0\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- bne _0805ADA6\n\
- lsls r0, r2, 28\n\
- lsrs r0, 28\n\
- adds r0, 0x1\n\
- mov r1, r9\n\
- ands r0, r1\n\
- mov r1, r8\n\
- ands r1, r2\n\
- orrs r1, r0\n\
- strb r1, [r4, 0x19]\n\
-_0805ADA6:\n\
- ldrb r2, [r4, 0x19]\n\
- movs r0, 0xF0\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- bne _0805ADBE\n\
- lsrs r1, r2, 4\n\
- adds r1, 0x1\n\
- lsls r1, 4\n\
- adds r0, r7, 0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- strb r0, [r4, 0x19]\n\
-_0805ADBE:\n\
- mov r0, sp\n\
- ldrb r0, [r0]\n\
-_0805ADC2:\n\
- add sp, 0x4\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_0805ADD0: .4byte gMapObjects\n\
-_0805ADD4: .4byte gUnknown_0836DC09\n\
-_0805ADD8: .4byte gUnknown_0836DBBC\n\
- .syntax divided\n");
-}
-#endif
-#endif
u8 sub_805ADDC(u8 localId)
{
@@ -2475,38 +2174,14 @@ u8 GetAvailableFieldObjectSlot(u16 a, u8 b, u8 c, u8 *d)
return 0;
}
-#if DEBUG
-__attribute__((naked))
-void RemoveFieldObject(struct MapObject *mapObject)
-{
- asm(
- " push {lr}\n"
- " ldrb r2, [r0]\n"
- " mov r1, #0x2\n"
- " neg r1, r1\n"
- " and r1, r1, r2\n"
- " strb r1, [r0]\n"
- " bl RemoveFieldObjectInternal\n"
- " ldr r1, ._72 @ gUnknown_Debug_03004BC0\n"
- " ldrb r0, [r1]\n"
- " sub r0, r0, #0x1\n"
- " strb r0, [r1]\n"
- " pop {r0}\n"
- " bx r0\n"
- "._73:\n"
- " .align 2, 0\n"
- "._72:\n"
- " .word gUnknown_Debug_03004BC0\n"
- "\n"
- );
-}
-#else
void RemoveFieldObject(struct MapObject *mapObject)
{
mapObject->active = FALSE;
RemoveFieldObjectInternal(mapObject);
-}
+#if DEBUG
+ gUnknown_Debug_03004BC0--;
#endif
+}
void RemoveFieldObjectByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
{
diff --git a/src/field/mauville_man.c b/src/field/mauville_man.c
index b42c50513..ec2f3cb69 100644
--- a/src/field/mauville_man.c
+++ b/src/field/mauville_man.c
@@ -251,83 +251,34 @@ void SetupMauvilleOldMan(void)
}
#if DEBUG
-__attribute__((naked))
-void debug_sub_810B32C()
+void debug_sub_810B32C(u8 a)
{
- asm(
- " push {r4, lr}\n"
- " add sp, sp, #0xfffffff8\n"
- " lsl r0, r0, #0x18\n"
- " lsr r0, r0, #0x18\n"
- " cmp r0, #0x4\n"
- " bhi ._37 @cond_branch\n"
- " lsl r0, r0, #0x2\n"
- " ldr r1, ._23 @ \n"
- " add r0, r0, r1\n"
- " ldr r0, [r0]\n"
- " mov pc, r0\n"
- "._24:\n"
- " .align 2, 0\n"
- "._23:\n"
- " .word ._22\n"
- "._22:\n"
- " .word ._25\n"
- " .word ._26\n"
- " .word ._27\n"
- " .word ._28\n"
- " .word ._29\n"
- "._25:\n"
- " bl SetupBard\n"
- " b ._37\n"
- "._26:\n"
- " mov r2, #0x0\n"
- " ldr r3, ._34 @ gSaveBlock1\n"
- "._31:\n"
- " mov r0, sp\n"
- " add r1, r0, r2\n"
- " add r0, r2, r3\n"
- " ldrb r0, [r0]\n"
- " strb r0, [r1]\n"
- " add r0, r2, #1\n"
- " lsl r0, r0, #0x18\n"
- " lsr r2, r0, #0x18\n"
- " cmp r2, #0x7\n"
- " bls ._31 @cond_branch\n"
- " bl SetupHipster\n"
- " mov r2, #0x0\n"
- " ldr r3, ._34 @ gSaveBlock1\n"
- "._32:\n"
- " add r1, r2, r3\n"
- " mov r4, sp\n"
- " add r0, r4, r2\n"
- " ldrb r0, [r0]\n"
- " strb r0, [r1]\n"
- " add r0, r2, #1\n"
- " lsl r0, r0, #0x18\n"
- " lsr r2, r0, #0x18\n"
- " cmp r2, #0x7\n"
- " bls ._32 @cond_branch\n"
- " b ._37\n"
- "._35:\n"
- " .align 2, 0\n"
- "._34:\n"
- " .word gSaveBlock1+0x2d8c\n"
- "._27:\n"
- " bl SetupTrader\n"
- " b ._37\n"
- "._28:\n"
- " bl SetupStoryteller\n"
- " b ._37\n"
- "._29:\n"
- " bl SetupGiddy\n"
- "._37:\n"
- " bl sub_80F83D0\n"
- " add sp, sp, #0x8\n"
- " pop {r4}\n"
- " pop {r0}\n"
- " bx r0\n"
- "\n"
- );
+ u8 i;
+ u8 savedArr[8];
+
+ switch (a)
+ {
+ case 0:
+ SetupBard();
+ break;
+ case 1:
+ for (i = 0; i < 8; i++)
+ savedArr[i] = gSaveBlock1.unk2D8C[i];
+ SetupHipster();
+ for (i = 0; i < 8; i++)
+ gSaveBlock1.unk2D8C[i] = savedArr[i];
+ break;
+ case 2:
+ SetupTrader();
+ break;
+ case 3:
+ SetupStoryteller();
+ break;
+ case 4:
+ SetupGiddy();
+ break;
+ }
+ sub_80F83D0();
}
#endif
diff --git a/src/field/overworld.c b/src/field/overworld.c
index 07135080e..14d3101a9 100644
--- a/src/field/overworld.c
+++ b/src/field/overworld.c
@@ -2235,7 +2235,7 @@ u16 sub_80554E4(u32 a1)
return 23;
}
-u32 sub_80554F8(void)
+s32 sub_80554F8(void)
{
if (sub_8054FC0(0x83) == TRUE)
return 2;