diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-10-06 16:16:33 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-10-06 16:16:33 -0400 |
commit | 43a0915d90b8c53c3e1fc8141e3c3d6376e18293 (patch) | |
tree | 3d0889c118a1ea63a60214df7b496a55250c2c51 | |
parent | e7c43d6890616fa10b770266c2b81f0c7f4677b8 (diff) |
through sub_810C760
-rw-r--r-- | asm/vs_seeker.s | 106 | ||||
-rw-r--r-- | include/item_use.h | 9 | ||||
-rw-r--r-- | include/vs_seeker.h | 13 | ||||
-rw-r--r-- | src/vs_seeker.c | 94 |
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; + } +} |