diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/engine/cable_club.c | 550 | ||||
-rw-r--r-- | src/engine/link.c | 2 | ||||
-rw-r--r-- | src/engine/reset_rtc_screen.c | 398 | ||||
-rw-r--r-- | src/engine/save_failed_screen.c | 213 | ||||
-rw-r--r-- | src/engine/trainer_card.c | 8 | ||||
-rw-r--r-- | src/field/field_map_obj.c | 501 | ||||
-rw-r--r-- | src/field/mauville_man.c | 103 | ||||
-rw-r--r-- | src/field/overworld.c | 2 |
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; |