summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-10-06 17:23:14 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-10-06 17:23:14 -0400
commit53b701c9effd24ec19e1e0dbeb5f411b0674a95d (patch)
tree8ea4bb2f76d47d6f52e2e899c512a58445a666ea
parent43a0915d90b8c53c3e1fc8141e3c3d6376e18293 (diff)
sub_810C808
-rw-r--r--asm/vs_seeker.s116
-rw-r--r--include/global.h9
-rw-r--r--include/vs_seeker.h14
-rw-r--r--src/vs_seeker.c31
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;
+}