diff options
-rw-r--r-- | asm/quest_log.s | 175 | ||||
-rw-r--r-- | include/global.h | 13 | ||||
-rw-r--r-- | src/quest_log.c | 206 |
3 files changed, 216 insertions, 178 deletions
diff --git a/asm/quest_log.s b/asm/quest_log.s index 3a4b5eb8e..f97ef90eb 100644 --- a/asm/quest_log.s +++ b/asm/quest_log.s @@ -5,181 +5,6 @@ .text - thumb_func_start sub_8110BE8 -sub_8110BE8: @ 8110BE8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - ldr r4, _08110C54 @ =gSaveBlock1Ptr - movs r1, 0xCD - lsls r1, 3 - muls r0, r1 - movs r1, 0x98 - lsls r1, 5 - adds r0, r1 - ldr r1, [r4] - adds r7, r1, r0 - adds r0, r7, 0 - bl sub_815A008 - movs r6, 0 - mov r9, r4 - movs r2, 0x8D - lsls r2, 3 - mov r8, r2 - ldr r3, _08110C58 @ =0x0000046a - mov r10, r3 -_08110C1C: - mov r4, r9 - ldr r1, [r4] - lsls r2, r6, 1 - adds r0, r2, r6 - lsls r0, 3 - adds r1, r0 - ldr r0, _08110C5C @ =0x000008e4 - adds r1, r0 - ldrh r4, [r1] - movs r3, 0 - ldrsh r0, [r1, r3] - mov r12, r2 - cmp r0, 0 - bge _08110C64 - lsls r3, r6, 2 - adds r2, r7, r3 - negs r0, r0 - mov r4, r8 - adds r1, r2, r4 - strb r0, [r1] - ldr r0, _08110C60 @ =0x00000469 - adds r2, r0 - ldrb r0, [r2] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - b _08110C7C - .align 2, 0 -_08110C54: .4byte gSaveBlock1Ptr -_08110C58: .4byte 0x0000046a -_08110C5C: .4byte 0x000008e4 -_08110C60: .4byte 0x00000469 -_08110C64: - lsls r3, r6, 2 - adds r1, r7, r3 - mov r2, r8 - adds r0, r1, r2 - strb r4, [r0] - ldr r4, _08110CBC @ =0x00000469 - adds r1, r4 - ldrb r2, [r1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1] -_08110C7C: - adds r5, r3, 0 - mov r1, r9 - ldr r0, [r1] - mov r2, r12 - adds r1, r2, r6 - lsls r1, 3 - adds r0, r1 - ldr r3, _08110CC0 @ =0x000008e6 - adds r1, r0, r3 - ldrh r2, [r1] - movs r4, 0 - ldrsh r0, [r1, r4] - cmp r0, 0 - bge _08110CC8 - adds r3, r7, r5 - adds r1, r0, 0 - negs r1, r1 - lsls r1, 24 - mov r2, r8 - adds r4, r3, r2 - lsrs r1, 15 - ldr r0, [r4] - ldr r2, _08110CC4 @ =0xfffe01ff - ands r0, r2 - orrs r0, r1 - str r0, [r4] - add r3, r10 - ldrb r0, [r3] - movs r1, 0x2 - orrs r0, r1 - b _08110CE6 - .align 2, 0 -_08110CBC: .4byte 0x00000469 -_08110CC0: .4byte 0x000008e6 -_08110CC4: .4byte 0xfffe01ff -_08110CC8: - adds r3, r7, r5 - lsls r2, 24 - mov r0, r8 - adds r4, r3, r0 - lsrs r2, 15 - ldr r0, [r4] - ldr r1, _08110D38 @ =0xfffe01ff - ands r0, r1 - orrs r0, r2 - str r0, [r4] - add r3, r10 - ldrb r1, [r3] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 -_08110CE6: - strb r0, [r3] - adds r5, r7, r5 - mov r1, r9 - ldr r0, [r1] - mov r2, r12 - adds r3, r2, r6 - lsls r3, 3 - adds r0, r3 - ldr r4, _08110D3C @ =0x000008e8 - adds r0, r4 - ldrb r1, [r0] - mov r0, r10 - adds r4, r5, r0 - lsls r1, 2 - ldrb r2, [r4] - movs r0, 0x3 - ands r0, r2 - orrs r0, r1 - strb r0, [r4] - mov r1, r9 - ldr r0, [r1] - adds r0, r3 - ldr r2, _08110D40 @ =0x000008e9 - adds r0, r2 - ldrb r0, [r0] - ldr r3, _08110D44 @ =0x0000046b - adds r5, r3 - strb r0, [r5] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x3F - bhi _08110D2A - b _08110C1C -_08110D2A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08110D38: .4byte 0xfffe01ff -_08110D3C: .4byte 0x000008e8 -_08110D40: .4byte 0x000008e9 -_08110D44: .4byte 0x0000046b - thumb_func_end sub_8110BE8 - thumb_func_start sub_8110D48 sub_8110D48: @ 8110D48 push {r4,r5,lr} diff --git a/include/global.h b/include/global.h index 4efd21e48..1655ac4e3 100644 --- a/include/global.h +++ b/include/global.h @@ -474,6 +474,16 @@ struct MysteryEventStruct u8 unk_1; }; +struct QuestLogNPCData +{ + u32 x:8; + u32 negx:1; + u32 y:8; + u32 negy:1; + u32 elevation:6; + u32 movementType:8; +}; + struct QuestLog { /*0x0000*/ u8 unk_000; @@ -482,7 +492,8 @@ struct QuestLog /*0x0003*/ s8 unk_003; /*0x0004*/ s16 unk_004; /*0x0006*/ s16 unk_006; - /*0x0008*/ u8 filler_008[0x560]; + /*0x0008*/ u8 filler_008[0x460]; + /*0x0468*/ struct QuestLogNPCData npcData[64]; /*0x0568*/ u8 filler_568[0x100]; /*0x0668*/ u8 end[0]; }; diff --git a/src/quest_log.c b/src/quest_log.c index 900194040..782e0efe4 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -25,6 +25,9 @@ EWRAM_DATA u8 gUnknown_203AE98[0x100] = {0}; void sub_8110A00(void); void sub_8110A3C(void); +void sub_8110BB0(u8); +void sub_8110BE8(u8); +void sub_815A008(struct QuestLog *); void sub_8110E3C(void); u8 sub_8110E68(void *); void sub_81118F4(s8); @@ -33,8 +36,6 @@ void sub_8113B88(void); void sub_8113BD8(void); void sub_81138F8(void); void sub_81115E8(void); -void sub_8110BB0(u8); -void sub_8110BE8(u8); void sub_8110D94(void); void sub_8110E20(void); void sub_8110D48(u8); @@ -190,3 +191,204 @@ void sub_8110BB0(u8 a0) questLog->unk_004 = gSaveBlock1Ptr->pos.x; questLog->unk_006 = gSaveBlock1Ptr->pos.y; } + +#ifdef NONMATCHING +void sub_8110BE8(u8 a0) +{ + struct QuestLog * questLog = &gSaveBlock1Ptr->questLog[a0]; + u16 i; // r6 + + sub_815A008(questLog); + + for (i = 0; i < ARRAY_COUNT(gSaveBlock1Ptr->mapObjectTemplates); i++) + { + if (gSaveBlock1Ptr->mapObjectTemplates[i].x < 0) + { + questLog->npcData[i].x = (u8)-gSaveBlock1Ptr->mapObjectTemplates[i].x; + questLog->npcData[i].negx = TRUE; + } + else + { + questLog->npcData[i].x = (u8)gSaveBlock1Ptr->mapObjectTemplates[i].x; + questLog->npcData[i].negx = FALSE; + } + if (gSaveBlock1Ptr->mapObjectTemplates[i].y < 0) + { + questLog->npcData[i].y = (u8)-gSaveBlock1Ptr->mapObjectTemplates[i].y; + questLog->npcData[i].negy = TRUE; + } + else + { + questLog->npcData[i].y = (u8)gSaveBlock1Ptr->mapObjectTemplates[i].y; + questLog->npcData[i].negy = FALSE; + } + questLog->npcData[i].elevation = gSaveBlock1Ptr->mapObjectTemplates[i].elevation; + questLog->npcData[i].movementType = gSaveBlock1Ptr->mapObjectTemplates[i].movementType; + } +} +#else +NAKED +void sub_8110BE8(u8 a0) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tldr r4, =gSaveBlock1Ptr\n" + "\tmovs r1, 0xCD\n" + "\tlsls r1, 3\n" + "\tmuls r0, r1\n" + "\tmovs r1, 0x98\n" + "\tlsls r1, 5\n" + "\tadds r0, r1\n" + "\tldr r1, [r4]\n" + "\tadds r7, r1, r0\n" + "\tadds r0, r7, 0\n" + "\tbl sub_815A008\n" + "\tmovs r6, 0\n" + "\tmov r9, r4\n" + "\tmovs r2, 0x8D\n" + "\tlsls r2, 3\n" + "\tmov r8, r2\n" + "\tldr r3, =0x0000046a\n" + "\tmov r10, r3\n" + "_08110C1C:\n" + "\tmov r4, r9\n" + "\tldr r1, [r4]\n" + "\tlsls r2, r6, 1\n" + "\tadds r0, r2, r6\n" + "\tlsls r0, 3\n" + "\tadds r1, r0\n" + "\tldr r0, =0x000008e4\n" + "\tadds r1, r0\n" + "\tldrh r4, [r1]\n" + "\tmovs r3, 0\n" + "\tldrsh r0, [r1, r3]\n" + "\tmov r12, r2\n" + "\tcmp r0, 0\n" + "\tbge _08110C64\n" + "\tlsls r3, r6, 2\n" + "\tadds r2, r7, r3\n" + "\tnegs r0, r0\n" + "\tmov r4, r8\n" + "\tadds r1, r2, r4\n" + "\tstrb r0, [r1]\n" + "\tldr r0, =0x00000469\n" + "\tadds r2, r0\n" + "\tldrb r0, [r2]\n" + "\tmovs r1, 0x1\n" + "\torrs r0, r1\n" + "\tstrb r0, [r2]\n" + "\tb _08110C7C\n" + "\t.pool\n" + "_08110C64:\n" + "\tlsls r3, r6, 2\n" + "\tadds r1, r7, r3\n" + "\tmov r2, r8\n" + "\tadds r0, r1, r2\n" + "\tstrb r4, [r0]\n" + "\tldr r4, =0x00000469\n" + "\tadds r1, r4\n" + "\tldrb r2, [r1]\n" + "\tmovs r0, 0x2\n" + "\tnegs r0, r0\n" + "\tands r0, r2\n" + "\tstrb r0, [r1]\n" + "_08110C7C:\n" + "\tadds r5, r3, 0\n" + "\tmov r1, r9\n" + "\tldr r0, [r1]\n" + "\tmov r2, r12\n" + "\tadds r1, r2, r6\n" + "\tlsls r1, 3\n" + "\tadds r0, r1\n" + "\tldr r3, =0x000008e6\n" + "\tadds r1, r0, r3\n" + "\tldrh r2, [r1]\n" + "\tmovs r4, 0\n" + "\tldrsh r0, [r1, r4]\n" + "\tcmp r0, 0\n" + "\tbge _08110CC8\n" + "\tadds r3, r7, r5\n" + "\tadds r1, r0, 0\n" + "\tnegs r1, r1\n" + "\tlsls r1, 24\n" + "\tmov r2, r8\n" + "\tadds r4, r3, r2\n" + "\tlsrs r1, 15\n" + "\tldr r0, [r4]\n" + "\tldr r2, =0xfffe01ff\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstr r0, [r4]\n" + "\tadd r3, r10\n" + "\tldrb r0, [r3]\n" + "\tmovs r1, 0x2\n" + "\torrs r0, r1\n" + "\tb _08110CE6\n" + "\t.pool\n" + "_08110CC8:\n" + "\tadds r3, r7, r5\n" + "\tlsls r2, 24\n" + "\tmov r0, r8\n" + "\tadds r4, r3, r0\n" + "\tlsrs r2, 15\n" + "\tldr r0, [r4]\n" + "\tldr r1, =0xfffe01ff\n" + "\tands r0, r1\n" + "\torrs r0, r2\n" + "\tstr r0, [r4]\n" + "\tadd r3, r10\n" + "\tldrb r1, [r3]\n" + "\tmovs r0, 0x3\n" + "\tnegs r0, r0\n" + "\tands r0, r1\n" + "_08110CE6:\n" + "\tstrb r0, [r3]\n" + "\tadds r5, r7, r5\n" + "\tmov r1, r9\n" + "\tldr r0, [r1]\n" + "\tmov r2, r12\n" + "\tadds r3, r2, r6\n" + "\tlsls r3, 3\n" + "\tadds r0, r3\n" + "\tldr r4, =0x000008e8\n" + "\tadds r0, r4\n" + "\tldrb r1, [r0]\n" + "\tmov r0, r10\n" + "\tadds r4, r5, r0\n" + "\tlsls r1, 2\n" + "\tldrb r2, [r4]\n" + "\tmovs r0, 0x3\n" + "\tands r0, r2\n" + "\torrs r0, r1\n" + "\tstrb r0, [r4]\n" + "\tmov r1, r9\n" + "\tldr r0, [r1]\n" + "\tadds r0, r3\n" + "\tldr r2, =0x000008e9\n" + "\tadds r0, r2\n" + "\tldrb r0, [r0]\n" + "\tldr r3, =0x0000046b\n" + "\tadds r5, r3\n" + "\tstrb r0, [r5]\n" + "\tadds r0, r6, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r6, r0, 16\n" + "\tcmp r6, 0x3F\n" + "\tbhi _08110D2A\n" + "\tb _08110C1C\n" + "_08110D2A:\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.pool"); +} +#endif // NONMATCHING |