summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-10-06 16:16:33 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2018-10-06 16:16:33 -0400
commit43a0915d90b8c53c3e1fc8141e3c3d6376e18293 (patch)
tree3d0889c118a1ea63a60214df7b496a55250c2c51
parente7c43d6890616fa10b770266c2b81f0c7f4677b8 (diff)
through sub_810C760
-rw-r--r--asm/vs_seeker.s106
-rw-r--r--include/item_use.h9
-rw-r--r--include/vs_seeker.h13
-rw-r--r--src/vs_seeker.c94
4 files changed, 116 insertions, 106 deletions
diff --git a/asm/vs_seeker.s b/asm/vs_seeker.s
index dd9e48caf..59391c41e 100644
--- a/asm/vs_seeker.s
+++ b/asm/vs_seeker.s
@@ -5,112 +5,6 @@
.text
- thumb_func_start sub_810C730
-sub_810C730: @ 810C730
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0810C758 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r0, [r1, 0x8]
- subs r0, 0x1
- strh r0, [r1, 0x8]
- lsls r0, 16
- cmp r0, 0
- bne _0810C754
- ldr r0, _0810C75C @ =sub_810C760
- str r0, [r1]
- movs r0, 0x10
- strh r0, [r1, 0xA]
-_0810C754:
- pop {r0}
- bx r0
- .align 2, 0
-_0810C758: .4byte gTasks
-_0810C75C: .4byte sub_810C760
- thumb_func_end sub_810C730
-
- thumb_func_start sub_810C760
-sub_810C760: @ 810C760
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _0810C7E8 @ =gTasks+0x8
- adds r4, r0, r1
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0x2
- beq _0810C794
- ldrh r0, [r4, 0x2]
- subs r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- cmp r0, 0
- bne _0810C794
- movs r0, 0x5E
- bl PlaySE
- movs r0, 0xB
- strh r0, [r4, 0x2]
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
-_0810C794:
- movs r0, 0x41
- bl FieldEffectActiveListContains
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0810C7E2
- strh r0, [r4, 0x2]
- strh r0, [r4, 0x4]
- bl sub_810C604
- ldr r0, _0810C7EC @ =gUnknown_845318C
- bl sub_810C9A8
- ldr r1, _0810C7F0 @ =gUnknown_203ADB8
- ldr r2, [r1]
- ldr r1, _0810C7F4 @ =0x00000431
- adds r2, r1
- lsls r0, 3
- ldrb r3, [r2]
- movs r1, 0x7
- ands r1, r3
- orrs r1, r0
- strb r1, [r2]
- ldr r0, _0810C7F8 @ =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrb r1, [r0, 0x5]
- ldrb r2, [r0, 0x4]
- ldr r3, _0810C7FC @ =gUnknown_8453F5C
- movs r0, 0xFF
- bl ScriptMovement_StartObjectMovementScript
- ldr r1, _0810C800 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _0810C804 @ =sub_810C8EC
- str r1, [r0]
-_0810C7E2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0810C7E8: .4byte gTasks+0x8
-_0810C7EC: .4byte gUnknown_845318C
-_0810C7F0: .4byte gUnknown_203ADB8
-_0810C7F4: .4byte 0x00000431
-_0810C7F8: .4byte gSaveBlock1Ptr
-_0810C7FC: .4byte gUnknown_8453F5C
-_0810C800: .4byte gTasks
-_0810C804: .4byte sub_810C8EC
- thumb_func_end sub_810C760
-
thumb_func_start sub_810C808
sub_810C808: @ 810C808
push {r4-r7,lr}
diff --git a/include/item_use.h b/include/item_use.h
new file mode 100644
index 000000000..5ec5f2b33
--- /dev/null
+++ b/include/item_use.h
@@ -0,0 +1,9 @@
+#ifndef GUARD_ITEM_USE_H
+#define GUARD_ITEM_USE_H
+
+#include "global.h"
+
+void sub_80A1E0C(u8);
+void sub_80A2294(u8, u8, u16, u16);
+
+#endif //GUARD_ITEM_USE_H
diff --git a/include/vs_seeker.h b/include/vs_seeker.h
new file mode 100644
index 000000000..6db741a11
--- /dev/null
+++ b/include/vs_seeker.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_VS_SEEKER_H
+#define GUARD_VS_SEEKER_H
+
+#include "global.h"
+
+struct VsSeekerStruct
+{
+ /*0x000*/ u8 filler_00[0x431];
+ /*0x431*/ u8 unk_431_0:3;
+ u8 unk_431_3:5;
+};
+
+#endif //GUARD_VS_SEEKER_H
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
new file mode 100644
index 000000000..14b522679
--- /dev/null
+++ b/src/vs_seeker.c
@@ -0,0 +1,94 @@
+#include "global.h"
+#include "songs.h"
+#include "sound.h"
+#include "task.h"
+#include "malloc.h"
+#include "new_menu_helpers.h"
+#include "item_use.h"
+#include "event_scripts.h"
+#include "item_menu.h"
+#include "field_effect.h"
+#include "script_movement.h"
+#include "vs_seeker.h"
+
+// static types
+struct UnkStruct_845318C
+{
+ // TODO: populate
+};
+
+// 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);
+bool8 sub_810C96C(void);
+void sub_810C604(void);
+u8 sub_810C9A8(const void *);
+
+// rodata
+extern const struct UnkStruct_845318C gUnknown_845318C[];
+extern const u8 gUnknown_8453F5C[];
+
+// text
+void sub_810C670(u8 taskId)
+{
+ u8 i;
+ u8 respval;
+
+ for (i = 0; i < 16; i++)
+ gTasks[taskId].data[i] = 0;
+
+ gUnknown_203ADB8 = AllocZeroed(sizeof(struct VsSeekerStruct));
+ sub_810C808();
+ respval = sub_810C96C();
+ if (respval == 0)
+ {
+ Free(gUnknown_203ADB8);
+ DisplayItemMessageOnField(taskId, 2, gUnknown_81C137C, sub_80A1E0C);
+ }
+ else if (respval == 1)
+ {
+ Free(gUnknown_203ADB8);
+ DisplayItemMessageOnField(taskId, 2, gUnknown_81C13D6, sub_80A1E0C);
+ }
+ else if (respval == 2)
+ {
+ sub_80A2294(4, 0, gUnknown_203AD30, 0xffff);
+ FieldEffectStart(FLDEFF_UNK_41); // TODO: name this enum
+ gTasks[taskId].func = sub_810C730;
+ gTasks[taskId].data[0] = 15;
+ }
+}
+
+void sub_810C730(u8 taskId)
+{
+ if (--gTasks[taskId].data[0] == 0)
+ {
+ gTasks[taskId].func = sub_810C760;
+ gTasks[taskId].data[1] = 16;
+ }
+}
+
+void sub_810C760(u8 taskId)
+{
+ s16 * data = gTasks[taskId].data;
+
+ if (data[2] != 2 && --data[1] == 0)
+ {
+ PlaySE(SE_BASABASA);
+ data[1] = 11;
+ data[2]++;
+ }
+
+ if (!FieldEffectActiveListContains(FLDEFF_UNK_41))
+ {
+ data[1] = 0;
+ data[2] = 0;
+ sub_810C604();
+ gUnknown_203ADB8->unk_431_3 = sub_810C9A8(gUnknown_845318C);
+ ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, gUnknown_8453F5C);
+ gTasks[taskId].func = sub_810C8EC;
+ }
+}