diff options
-rw-r--r-- | asm/quest_log.s | 280 | ||||
-rw-r--r-- | include/global.h | 4 | ||||
-rw-r--r-- | src/quest_log.c | 107 |
3 files changed, 98 insertions, 293 deletions
diff --git a/asm/quest_log.s b/asm/quest_log.s index b26643b9f..82816d861 100644 --- a/asm/quest_log.s +++ b/asm/quest_log.s @@ -5,286 +5,6 @@ .text - thumb_func_start sub_8111688 -sub_8111688: @ 8111688 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - movs r5, 0 - ldr r0, _081116CC @ =gSaveBlock1Ptr - mov r8, r0 - ldr r7, _081116D0 @ =0x0000063a -_08111698: - ldr r1, _081116D4 @ =0x000040aa - adds r0, r5, r1 - lsls r0, 16 - lsrs r0, 16 - bl VarGet - lsls r1, r5, 1 - add r1, sp - strh r0, [r1] - movs r4, 0 - adds r6, r5, 0x1 - adds r3, r1, 0 - lsls r5, 4 -_081116B2: - ldrh r0, [r3] - movs r2, 0x1 - ands r2, r0 - cmp r2, 0 - beq _081116D8 - mov r1, r8 - ldr r0, [r1] - adds r1, r5, r4 - adds r0, r7 - adds r0, r1 - movs r1, 0x1E - strb r1, [r0] - b _081116E4 - .align 2, 0 -_081116CC: .4byte gSaveBlock1Ptr -_081116D0: .4byte 0x0000063a -_081116D4: .4byte 0x000040aa -_081116D8: - mov r1, r8 - ldr r0, [r1] - adds r1, r5, r4 - adds r0, r7 - adds r0, r1 - strb r2, [r0] -_081116E4: - ldrh r0, [r3] - lsrs r0, 1 - strh r0, [r3] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0xF - bls _081116B2 - lsls r0, r6, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _08111698 - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8111688 - - thumb_func_start sub_8111708 -sub_8111708: @ 8111708 - push {r4,r5,lr} - sub sp, 0x1C - ldr r0, _08111754 @ =0x000040ae - bl VarGet - ldr r4, _08111758 @ =gSaveBlock1Ptr - ldr r1, [r4] - strh r0, [r1, 0x32] - lsls r0, 16 - cmp r0, 0 - bne _0811174A - movs r0, 0x4 - ldrsb r0, [r1, r0] - lsls r0, 16 - lsrs r0, 16 - ldrb r1, [r1, 0x5] - lsls r1, 24 - asrs r1, 24 - lsls r1, 16 - lsrs r1, 16 - bl get_mapheader_by_bank_and_number - mov r1, sp - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldm r0!, {r2,r3,r5} - stm r1!, {r2,r3,r5} - ldr r0, [r0] - str r0, [r1] - ldr r1, [r4] - mov r0, sp - ldrh r0, [r0, 0x12] - strh r0, [r1, 0x32] -_0811174A: - add sp, 0x1C - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08111754: .4byte 0x000040ae -_08111758: .4byte gSaveBlock1Ptr - thumb_func_end sub_8111708 - - thumb_func_start sub_811175C -sub_811175C: @ 811175C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - mov r8, r1 - lsls r0, 24 - lsrs r4, r0, 24 - movs r6, 0 - mov r9, r6 - movs r2, 0x80 - lsls r2, 1 - mov r0, r8 - movs r1, 0 - bl memset - movs r7, 0 - ldr r2, _081117B8 @ =gUnknown_203AE0C - movs r1, 0 -_08111780: - lsls r0, r7, 2 - adds r0, r2 - str r1, [r0] - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - cmp r7, 0x1F - bls _08111780 - ldr r1, _081117BC @ =gSaveBlock1Ptr - movs r0, 0xCD - lsls r0, 3 - muls r0, r4 - ldr r1, [r1] - adds r0, r1 - ldr r1, _081117C0 @ =0x00001868 - adds r4, r0, r1 - movs r7, 0 -_081117A2: - ldrh r0, [r4] - ldr r1, _081117C4 @ =0x00000fff - ands r1, r0 - cmp r1, 0x29 - bls _081117AE - b _081118AC -_081117AE: - lsls r0, r1, 2 - ldr r1, _081117C8 @ =_081117CC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_081117B8: .4byte gUnknown_203AE0C -_081117BC: .4byte gSaveBlock1Ptr -_081117C0: .4byte 0x00001868 -_081117C4: .4byte 0x00000fff -_081117C8: .4byte _081117CC - .align 2, 0 -_081117CC: - .4byte _08111874 - .4byte _08111880 - .4byte _08111880 - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _081118AC - .4byte _0811188C - .4byte _081118AC - .4byte _08111898 -_08111874: - lsls r1, r6, 3 - add r1, r8 - adds r0, r4, 0 - bl sub_8113D08 - b _081118A2 -_08111880: - lsls r1, r6, 3 - add r1, r8 - adds r0, r4, 0 - bl sub_8113D94 - b _081118A2 -_0811188C: - lsls r1, r6, 3 - add r1, r8 - adds r0, r4, 0 - bl sub_8113C20 - b _081118A2 -_08111898: - lsls r1, r6, 3 - add r1, r8 - adds r0, r4, 0 - bl sub_8113C8C -_081118A2: - adds r4, r0, 0 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - b _081118D2 -_081118AC: - mov r0, r9 - lsls r1, r0, 2 - ldr r5, _081118F0 @ =gUnknown_203AE0C - adds r1, r5 - adds r0, r4, 0 - bl sub_8113A78 - adds r4, r0, 0 - mov r1, r9 - cmp r1, 0 - bne _081118C8 - ldr r0, [r5] - bl sub_8113ABC -_081118C8: - mov r0, r9 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 -_081118D2: - cmp r4, 0 - beq _081118E2 - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - cmp r7, 0x1F - bhi _081118E2 - b _081117A2 -_081118E2: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_081118F0: .4byte gUnknown_203AE0C - thumb_func_end sub_811175C - thumb_func_start sub_81118F4 sub_81118F4: @ 81118F4 push {lr} diff --git a/include/global.h b/include/global.h index f1efeb4e0..5cbdbb360 100644 --- a/include/global.h +++ b/include/global.h @@ -496,8 +496,8 @@ struct QuestLog /*0x0148*/ u8 unk_148[0x120]; /*0x02c8*/ u8 unk_268[0x200]; /*0x0468*/ struct QuestLogNPCData npcData[64]; - /*0x0568*/ u8 filler_568[0x100]; - /*0x0668*/ u8 end[0]; + /*0x0568*/ u16 unk_568[0x80]; + /*0x0668*/ u16 end[0]; }; #define MAP_OBJECTS_COUNT 16 diff --git a/src/quest_log.c b/src/quest_log.c index 7ed5e0560..da918be79 100644 --- a/src/quest_log.c +++ b/src/quest_log.c @@ -41,7 +41,7 @@ EWRAM_DATA u8 gUnknown_203ADFA = 0; EWRAM_DATA u16 gUnknown_203ADFC = 0; EWRAM_DATA u8 gUnknown_203ADFE[3]; EWRAM_DATA void * gUnknown_203AE04 = NULL; -EWRAM_DATA void * gUnknown_203AE08 = NULL; +EWRAM_DATA u16 * gUnknown_203AE08 = NULL; EWRAM_DATA void * gUnknown_203AE0C[32] = {NULL}; EWRAM_DATA void (* gUnknown_203AE8C)(void) = 0; EWRAM_DATA struct UnkStruct_203AE94 gUnknown_203AE94 = {0}; @@ -65,7 +65,12 @@ u16 sub_8111618(void); u16 sub_811164C(void); void sub_8111688(void); void sub_811175C(u8, struct UnkStruct_203AE98 *); -void sub_81118F4(s8); +void * sub_8113D08(void *, struct UnkStruct_203AE98 *); +void * sub_8113D94(void *, struct UnkStruct_203AE98 *); +void * sub_8113C20(void *, struct UnkStruct_203AE98 *); +void * sub_8113C8C(void *, struct UnkStruct_203AE98 *); +void * sub_8113A78(void *, void **); +void sub_8113ABC(void *); void sub_81138F8(void); void sub_8111AD8(void); void sub_8112940(u8, struct UnkStruct_203AE98 *, u16); @@ -75,6 +80,7 @@ void sub_8113BD8(void); void * sub_8113BF4(void *); void * sub_8113D48(void *, struct UnkStruct_203AE98 *); void * sub_8113CC8(void *, struct UnkStruct_203AE98 *); +void sub_81118F4(s8); extern const u8 gUnknown_841A155[]; @@ -94,7 +100,7 @@ void sub_8110840(void * a0) if (gUnknown_203ADFA != 0) { if (gUnknown_203AE08) - gUnknown_203AE08 += r1; + gUnknown_203AE08 = (void *)gUnknown_203AE08 + r1; if (gUnknown_203ADFA == 2) { int r3; @@ -111,7 +117,7 @@ void sub_811089C(void) gUnknown_203ADF8 = 0; gUnknown_203ADFA = 0; gUnknown_203AE8C = 0; - gUnknown_203AE08 = 0; + gUnknown_203AE08 = NULL; gUnknown_203AE04 = 0; sub_8113BD8(); sub_81138F8(); @@ -134,20 +140,20 @@ void sub_811092C(void) gUnknown_203AE8C(); } -bool8 sub_8110944(u8 * a0, size_t a1) +bool8 sub_8110944(void * a0, size_t a1) { - u8 * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].filler_568; - u8 * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end; + void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568; + void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end; r0 -= a1; if (a0 < r2 || a0 > r0) return FALSE; return TRUE; } -bool8 sub_8110988(u8 * a0, size_t a1) +bool8 sub_8110988(void * a0, size_t a1) { - u8 * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].filler_568; - u8 * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end; + void * r2 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568; + void * r0 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].end; r0 -= a1; if (a0 < r2 || a0 > r0) return FALSE; @@ -209,7 +215,7 @@ void sub_8110AEC(u16 a0) sub_81108F0(gUnknown_203ADF8); sub_8113B88(); - gUnknown_203AE08 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].filler_568; + gUnknown_203AE08 = gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_568; if ((a0 >= 12 && a0 < 20) || a0 == 35) gSaveBlock1Ptr->questLog[gUnknown_203ADF8].unk_000 = 2; else @@ -798,3 +804,82 @@ u16 sub_811164C(void) return count; } + +void sub_8111688(void) +{ + u16 i, j; + u16 sp0[4]; + + for (i = 0; i < 4; i++) + { + sp0[i] = VarGet(VAR_0x40AA + i); + + for (j = 0; j < 16; j++) + { + if (sp0[i] & 1) + gSaveBlock1Ptr->trainerRematches[16 * i + j] = 30; + else + gSaveBlock1Ptr->trainerRematches[16 * i + j] = 0; + sp0[i] >>= 1; + } + } +} + +void sub_8111708(void) +{ + struct MapHeader sp0; + + gSaveBlock1Ptr->mapDataId = VarGet(VAR_0x40AE); + if (gSaveBlock1Ptr->mapDataId == 0) + { + sp0 = *get_mapheader_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); + gSaveBlock1Ptr->mapDataId = sp0.mapDataId; + } +} + +void sub_811175C(u8 a0, struct UnkStruct_203AE98 * a1) +{ + u16 i; + u16 *r4; + u16 r6 = 0; + u16 r9 = 0; + + memset(a1, 0, 32 * sizeof(struct UnkStruct_203AE98)); + for (i = 0; i < 32; i++) + { + gUnknown_203AE0C[i] = NULL; + } + + r4 = gSaveBlock1Ptr->questLog[a0].unk_568; + for (i = 0; i < 32; i++) + { + switch (*r4 & 0xFFF) + { + case 0: + r4 = sub_8113D08(r4, &a1[r6]); + r6++; + break; + case 1: + case 2: + r4 = sub_8113D94(r4, &a1[r6]); + r6++; + break; + case 39: + r4 = sub_8113C20(r4, &a1[r6]); + r6++; + break; + case 41: + r4 = sub_8113C8C(r4, &a1[r6]); + r6++; + break; + default: + r4 = sub_8113A78(r4, &gUnknown_203AE0C[r9]); + if (r9 == 0) + sub_8113ABC(gUnknown_203AE0C[0]); + r9++; + break; + } + if (r4 == NULL) + break; + } +} |