diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-10-06 17:23:14 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-10-06 17:23:14 -0400 |
commit | 53b701c9effd24ec19e1e0dbeb5f411b0674a95d (patch) | |
tree | 8ea4bb2f76d47d6f52e2e899c512a58445a666ea | |
parent | 43a0915d90b8c53c3e1fc8141e3c3d6376e18293 (diff) |
sub_810C808
-rw-r--r-- | asm/vs_seeker.s | 116 | ||||
-rw-r--r-- | include/global.h | 9 | ||||
-rw-r--r-- | include/vs_seeker.h | 14 | ||||
-rw-r--r-- | src/vs_seeker.c | 31 |
4 files changed, 51 insertions, 119 deletions
diff --git a/asm/vs_seeker.s b/asm/vs_seeker.s index 59391c41e..2c2d9993e 100644 --- a/asm/vs_seeker.s +++ b/asm/vs_seeker.s @@ -5,122 +5,6 @@ .text - thumb_func_start sub_810C808 -sub_810C808: @ 810C808 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - ldr r0, _0810C8DC @ =gSaveBlock1Ptr - ldr r0, [r0] - movs r1, 0x8E - lsls r1, 4 - adds r2, r0, r1 - movs r1, 0 - mov r0, sp - strb r1, [r0] - mov r8, r1 - mov r9, r1 - ldr r0, _0810C8E0 @ =gMapHeader - ldr r0, [r0, 0x4] - ldrb r0, [r0] - cmp r8, r0 - bge _0810C8BC - ldr r7, _0810C8E4 @ =gUnknown_203ADB8 - mov r6, sp - ldr r0, _0810C8E8 @ =gUnknown_2036E38 - mov r10, r0 - adds r5, r2, 0 -_0810C83C: - ldrh r0, [r5, 0xC] - cmp r0, 0x1 - beq _0810C846 - cmp r0, 0x3 - bne _0810C8AC -_0810C846: - ldr r1, [r7] - mov r2, r8 - lsls r4, r2, 4 - adds r1, r4 - ldr r0, [r5, 0x10] - str r0, [r1] - ldr r0, [r5, 0x10] - bl sub_810D074 - ldr r1, [r7] - adds r1, r4 - strh r0, [r1, 0x4] - ldrb r0, [r5] - strb r0, [r1, 0x6] - ldrb r0, [r5] - ldr r1, _0810C8DC @ =gSaveBlock1Ptr - ldr r2, [r1] - ldrb r1, [r2, 0x5] - ldrb r2, [r2, 0x4] - mov r3, sp - bl TryGetFieldObjectIdByLocalIdAndMap - ldr r0, [r7] - adds r0, r4 - ldrb r1, [r6] - strb r1, [r0, 0x7] - ldr r2, [r7] - adds r2, r4 - ldrb r1, [r6] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r0, [r0, 0x10] - subs r0, 0x7 - strh r0, [r2, 0x8] - ldrb r1, [r6] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - add r0, r10 - ldrh r0, [r0, 0x12] - subs r0, 0x7 - strh r0, [r2, 0xA] - ldrb r0, [r5, 0x1] - strb r0, [r2, 0xC] - mov r0, r8 - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 -_0810C8AC: - adds r5, 0x18 - movs r0, 0x1 - add r9, r0 - ldr r0, _0810C8E0 @ =gMapHeader - ldr r0, [r0, 0x4] - ldrb r0, [r0] - cmp r9, r0 - blt _0810C83C -_0810C8BC: - ldr r0, _0810C8E4 @ =gUnknown_203ADB8 - ldr r0, [r0] - mov r2, r8 - lsls r1, r2, 4 - adds r0, r1 - movs r1, 0xFF - strb r1, [r0, 0x6] - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0810C8DC: .4byte gSaveBlock1Ptr -_0810C8E0: .4byte gMapHeader -_0810C8E4: .4byte gUnknown_203ADB8 -_0810C8E8: .4byte gUnknown_2036E38 - thumb_func_end sub_810C808 - thumb_func_start sub_810C8EC sub_810C8EC: @ 810C8EC push {r4,r5,lr} diff --git a/include/global.h b/include/global.h index 75911b9f2..a48de5a61 100644 --- a/include/global.h +++ b/include/global.h @@ -476,7 +476,14 @@ struct SaveBlock1 { /*0x0000*/ u8 filler[0x4]; /*0x0004*/ struct WarpData location; - /*0x000C*/ u8 fillerC[0x3610]; + /*0x0C*/ struct WarpData warp1; + /*0x14*/ struct WarpData warp2; + /*0x1C*/ struct WarpData lastHealLocation; + /*0x24*/ struct WarpData warp4; + /*0x002C*/ u8 filler2C[0x674]; + /*0x06A0*/ struct MapObject mapObjects[MAP_OBJECTS_COUNT]; + /*0x08E0*/ struct MapObjectTemplate mapObjectTemplates[64]; + /*0x0EE0*/ u8 fillerEE0[0x273C]; /*0x361C*/ struct RamScript ramScript; /*0x3A08*/ u8 filler3A08[0x44]; /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH]; diff --git a/include/vs_seeker.h b/include/vs_seeker.h index 6db741a11..e01713f49 100644 --- a/include/vs_seeker.h +++ b/include/vs_seeker.h @@ -3,9 +3,21 @@ #include "global.h" +struct VsSeekerSubstruct +{ + const u8 *unk_0; + u16 unk_4; + u8 unk_6; + u8 unk_7; + u16 unk_8; + u16 unk_a; + u8 unk_c; +}; + struct VsSeekerStruct { - /*0x000*/ u8 filler_00[0x431]; + /*0x000*/ struct VsSeekerSubstruct unk_000[MAP_OBJECTS_COUNT]; + /*0x100*/ u8 filler_100[0x331]; /*0x431*/ u8 unk_431_0:3; u8 unk_431_3:5; }; diff --git a/src/vs_seeker.c b/src/vs_seeker.c index 14b522679..b18521b83 100644 --- a/src/vs_seeker.c +++ b/src/vs_seeker.c @@ -3,6 +3,7 @@ #include "sound.h" #include "task.h" #include "malloc.h" +#include "field_map_obj.h" #include "new_menu_helpers.h" #include "item_use.h" #include "event_scripts.h" @@ -17,15 +18,18 @@ struct UnkStruct_845318C // TODO: populate }; +extern struct MapObject gUnknown_2036E38[MAP_OBJECTS_COUNT]; + // static declarations EWRAM_DATA struct VsSeekerStruct *gUnknown_203ADB8; void sub_810C730(u8 taskId); void sub_810C760(u8 taskId); -void sub_810C8EC(u8 taskId); void sub_810C808(void); +void sub_810C8EC(u8 taskId); bool8 sub_810C96C(void); void sub_810C604(void); u8 sub_810C9A8(const void *); +u16 sub_810D074(const u8 *); // rodata extern const struct UnkStruct_845318C gUnknown_845318C[]; @@ -92,3 +96,28 @@ void sub_810C760(u8 taskId) gTasks[taskId].func = sub_810C8EC; } } + +void sub_810C808(void) +{ + struct MapObjectTemplate *templates = gSaveBlock1Ptr->mapObjectTemplates; + u8 fieldObjectId = 0; + u8 vsSeekerObjectIdx = 0; + s32 mapObjectIdx; + + for (mapObjectIdx = 0; mapObjectIdx < gMapHeader.events->mapObjectCount; mapObjectIdx++) + { + if (templates[mapObjectIdx].unkC == 1 || templates[mapObjectIdx].unkC == 3) + { + gUnknown_203ADB8->unk_000[vsSeekerObjectIdx].unk_0 = templates[mapObjectIdx].script; + gUnknown_203ADB8->unk_000[vsSeekerObjectIdx].unk_4 = sub_810D074(templates[mapObjectIdx].script); + gUnknown_203ADB8->unk_000[vsSeekerObjectIdx].unk_6 = templates[mapObjectIdx].localId; + TryGetFieldObjectIdByLocalIdAndMap(templates[mapObjectIdx].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &fieldObjectId); + gUnknown_203ADB8->unk_000[vsSeekerObjectIdx].unk_7 = fieldObjectId; + gUnknown_203ADB8->unk_000[vsSeekerObjectIdx].unk_8 = gUnknown_2036E38[fieldObjectId].coords2.x - 7; + gUnknown_203ADB8->unk_000[vsSeekerObjectIdx].unk_a = gUnknown_2036E38[fieldObjectId].coords2.y - 7; + gUnknown_203ADB8->unk_000[vsSeekerObjectIdx].unk_c = templates[mapObjectIdx].graphicsId; + vsSeekerObjectIdx++; + } + } + gUnknown_203ADB8->unk_000[vsSeekerObjectIdx].unk_6 = 0xFF; +} |