diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-10-02 21:26:01 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-10-02 21:26:01 -0400 |
commit | afd5f1f52f7a2b74e9850892aef118292a45df8e (patch) | |
tree | 09b8d024223b517bc130847dbf10ec8ff49e385d | |
parent | d9ab841b0d72a52676131846447de26e59e7a16d (diff) |
itemfinder through sub_813F004
-rw-r--r-- | asm/itemfinder.s | 521 | ||||
-rw-r--r-- | data/strings.s | 6 | ||||
-rw-r--r-- | include/field_specials.h | 1 | ||||
-rw-r--r-- | include/global.fieldmap.h | 36 | ||||
-rw-r--r-- | include/strings.h | 5 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/itemfinder.c | 204 |
7 files changed, 241 insertions, 534 deletions
diff --git a/asm/itemfinder.s b/asm/itemfinder.s index 8a2dec9de..fbf0a8578 100644 --- a/asm/itemfinder.s +++ b/asm/itemfinder.s @@ -5,519 +5,6 @@ .text - thumb_func_start sub_813EC8C -sub_813EC8C: @ 813EC8C - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - movs r2, 0 - ldr r7, _0813ECE0 @ =gMapHeader - lsls r1, r4, 2 - adds r0, r1, r4 - lsls r3, r0, 3 - ldr r5, _0813ECE4 @ =gTasks+0x8 - adds r6, r1, 0 - movs r1, 0 -_0813ECA2: - lsls r0, r2, 1 - adds r0, r3 - adds r0, r5 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0xF - bls _0813ECA2 - ldr r0, [r7, 0x4] - adds r1, r4, 0 - bl sub_813EE14 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0813ECFC - bl sub_813F3EC - ldr r0, _0813ECE8 @ =gTasks - adds r1, r6, r4 - lsls r1, 3 - adds r1, r0 - movs r2, 0x14 - ldrsh r0, [r1, r2] - cmp r0, 0x1 - bne _0813ECF0 - ldr r0, _0813ECEC @ =sub_813EDB0 - str r0, [r1] - b _0813ED08 - .align 2, 0 -_0813ECE0: .4byte gMapHeader -_0813ECE4: .4byte gTasks+0x8 -_0813ECE8: .4byte gTasks -_0813ECEC: .4byte sub_813EDB0 -_0813ECF0: - ldr r0, _0813ECF8 @ =sub_813ED3C - str r0, [r1] - b _0813ED08 - .align 2, 0 -_0813ECF8: .4byte sub_813ED3C -_0813ECFC: - ldr r2, _0813ED10 @ =gUnknown_8416513 - ldr r3, _0813ED14 @ =sub_813ED18 - adds r0, r4, 0 - movs r1, 0x2 - bl DisplayItemMessageOnField -_0813ED08: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0813ED10: .4byte gUnknown_8416513 -_0813ED14: .4byte sub_813ED18 - thumb_func_end sub_813EC8C - - thumb_func_start sub_813ED18 -sub_813ED18: @ 813ED18 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - movs r1, 0x1 - bl ClearDialogWindowAndFrame - bl sub_80696C0 - bl ScriptContext2_Disable - adds r0, r4, 0 - bl DestroyTask - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_813ED18 - - thumb_func_start sub_813ED3C -sub_813ED3C: @ 813ED3C - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r6, r1, 3 - ldr r7, _0813ED80 @ =gTasks+0x8 - adds r4, r6, r7 - movs r1, 0x6 - ldrsh r0, [r4, r1] - movs r1, 0x19 - bl __modsi3 - lsls r0, 16 - cmp r0, 0 - bne _0813EDA2 - movs r2, 0 - ldrsh r0, [r4, r2] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl GetPlayerDirectionTowardsHiddenItem - lsls r0, 24 - lsrs r5, r0, 24 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0813ED88 - adds r0, r7, 0 - subs r0, 0x8 - adds r0, r6, r0 - ldr r1, _0813ED84 @ =sub_813F364 - str r1, [r0] - b _0813EDA8 - .align 2, 0 -_0813ED80: .4byte gTasks+0x8 -_0813ED84: .4byte sub_813F364 -_0813ED88: - movs r0, 0x41 - bl PlaySE - ldrb r0, [r4, 0xA] - adds r1, r5, 0 - bl sub_813F40C - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x8] - subs r0, 0x1 - strh r0, [r4, 0x8] -_0813EDA2: - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0813EDA8: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_813ED3C - - thumb_func_start sub_813EDB0 -sub_813EDB0: @ 813EDB0 - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r5, r1, 3 - ldr r6, _0813EDE4 @ =gTasks+0x8 - adds r4, r5, r6 - movs r1, 0x6 - ldrsh r0, [r4, r1] - movs r1, 0x19 - bl __modsi3 - lsls r0, 16 - cmp r0, 0 - bne _0813EE08 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _0813EDEC - adds r0, r6, 0 - subs r0, 0x8 - adds r0, r5, r0 - ldr r1, _0813EDE8 @ =sub_813F3A8 - str r1, [r0] - b _0813EE0E - .align 2, 0 -_0813EDE4: .4byte gTasks+0x8 -_0813EDE8: .4byte sub_813F3A8 -_0813EDEC: - movs r0, 0x41 - bl PlaySE - bl sub_813F5AC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xE] - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - ldrh r0, [r4, 0x8] - subs r0, 0x1 - strh r0, [r4, 0x8] -_0813EE08: - ldrh r0, [r4, 0x6] - adds r0, 0x1 - strh r0, [r4, 0x6] -_0813EE0E: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_813EDB0 - - thumb_func_start sub_813EE14 -sub_813EE14: @ 813EE14 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - ldr r1, _0813EEC8 @ =gTasks - mov r2, r9 - lsls r0, r2, 2 - add r0, r9 - lsls r0, 3 - adds r0, r1 - movs r1, 0 - strh r1, [r0, 0xC] - movs r3, 0 - mov r0, r8 - ldrb r0, [r0, 0x3] - cmp r3, r0 - bge _0813EF04 -_0813EE4E: - lsls r3, 16 - asrs r1, r3, 16 - mov r0, r8 - ldr r2, [r0, 0x10] - lsls r0, r1, 1 - adds r0, r1 - lsls r7, r0, 2 - adds r1, r7, r2 - ldrb r0, [r1, 0x5] - mov r10, r3 - cmp r0, 0x7 - bne _0813EEF2 - ldr r0, [r1, 0x8] - movs r1, 0x1 - bl sub_80CC44C - lsls r0, 16 - lsrs r0, 16 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - bne _0813EEF2 - mov r1, r8 - ldr r2, [r1, 0x10] - adds r2, r7, r2 - ldrh r0, [r2] - adds r0, 0x7 - mov r1, sp - ldrh r1, [r1] - subs r0, r1 - lsls r0, 16 - lsrs r5, r0, 16 - ldrh r0, [r2, 0x2] - adds r0, 0x7 - mov r3, sp - ldrh r1, [r3, 0x2] - subs r0, r1 - lsls r0, 16 - lsrs r4, r0, 16 - adds r6, r4, 0 - ldr r0, [r2, 0x8] - movs r1, 0x3 - bl sub_80CC44C - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bne _0813EECC - cmp r5, 0 - bne _0813EEF2 - cmp r4, 0 - bne _0813EEF2 - mov r1, r8 - ldr r0, [r1, 0x10] - adds r0, r7, r0 - ldr r1, [r0, 0x8] - mov r0, r9 - bl sub_813EF40 - b _0813EF2E - .align 2, 0 -_0813EEC8: .4byte gTasks -_0813EECC: - lsls r0, r5, 16 - asrs r1, r0, 16 - movs r2, 0xE0 - lsls r2, 11 - adds r0, r2 - lsrs r0, 16 - cmp r0, 0xE - bhi _0813EEF2 - lsls r0, r6, 16 - asrs r2, r0, 16 - movs r3, 0x5 - negs r3, r3 - cmp r2, r3 - blt _0813EEF2 - cmp r2, 0x5 - bgt _0813EEF2 - mov r0, r9 - bl sub_813F220 -_0813EEF2: - movs r0, 0x80 - lsls r0, 9 - add r0, r10 - lsrs r3, r0, 16 - asrs r0, 16 - mov r1, r8 - ldrb r1, [r1, 0x3] - cmp r0, r1 - blt _0813EE4E -_0813EF04: - mov r0, r9 - bl sub_813F108 - ldr r0, _0813EF24 @ =gTasks - mov r2, r9 - lsls r1, r2, 2 - add r1, r9 - lsls r1, 3 - adds r1, r0 - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0x1 - beq _0813EF28 - movs r0, 0 - b _0813EF30 - .align 2, 0 -_0813EF24: .4byte gTasks -_0813EF28: - mov r0, r9 - bl sub_813EF9C -_0813EF2E: - movs r0, 0x1 -_0813EF30: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_813EE14 - - thumb_func_start sub_813EF40 -sub_813EF40: @ 813EF40 - push {r4,r5,lr} - adds r5, r1, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 2 - adds r4, r0 - lsls r4, 3 - ldr r0, _0813EF8C @ =gTasks+0x8 - adds r4, r0 - adds r0, r5, 0 - movs r1, 0x1 - bl sub_80CC44C - ldr r1, _0813EF90 @ =gSpecialVar_0x8004 - strh r0, [r1] - adds r0, r5, 0 - movs r1, 0 - bl sub_80CC44C - ldr r1, _0813EF94 @ =gSpecialVar_0x8005 - strh r0, [r1] - ldr r0, _0813EF98 @ =gSpecialVar_0x8006 - movs r5, 0x1 - strh r5, [r0] - ldrh r1, [r1] - movs r0, 0 - bl TV_PrintIntToStringVar - strh r5, [r4, 0x4] - movs r0, 0 - strh r0, [r4] - strh r0, [r4, 0x2] - movs r0, 0x3 - strh r0, [r4, 0x8] - strh r5, [r4, 0xC] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0813EF8C: .4byte gTasks+0x8 -_0813EF90: .4byte gSpecialVar_0x8004 -_0813EF94: .4byte gSpecialVar_0x8005 -_0813EF98: .4byte gSpecialVar_0x8006 - thumb_func_end sub_813EF40 - - thumb_func_start sub_813EF9C -sub_813EF9C: @ 813EF9C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _0813EFEC @ =gTasks+0x8 - adds r1, r0 - ldrh r3, [r1, 0x2] - ldrh r2, [r1] - movs r4, 0 - ldrsh r0, [r1, r4] - cmp r0, 0 - bne _0813EFBC - cmp r3, 0 - beq _0813EFF8 -_0813EFBC: - movs r4, 0 - ldrsh r0, [r1, r4] - cmp r0, 0 - bge _0813EFCA - negs r0, r0 - lsls r0, 16 - lsrs r2, r0, 16 -_0813EFCA: - movs r4, 0x2 - ldrsh r0, [r1, r4] - cmp r0, 0 - bge _0813EFD8 - negs r0, r0 - lsls r0, 16 - lsrs r3, r0, 16 -_0813EFD8: - lsls r0, r2, 16 - asrs r2, r0, 16 - lsls r0, r3, 16 - asrs r0, 16 - cmp r2, r0 - ble _0813EFF0 - cmp r2, 0x3 - ble _0813EFF8 - movs r0, 0x2 - b _0813EFFA - .align 2, 0 -_0813EFEC: .4byte gTasks+0x8 -_0813EFF0: - cmp r0, 0x3 - ble _0813EFF8 - movs r0, 0x2 - b _0813EFFA -_0813EFF8: - movs r0, 0x4 -_0813EFFA: - strh r0, [r1, 0x8] - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_813EF9C - - thumb_func_start sub_813F004 -sub_813F004: @ 813F004 - push {r4,r5,lr} - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsrs r2, 16 - ldrb r5, [r0, 0x3] - ldr r4, [r0, 0x10] - movs r3, 0 - cmp r3, r5 - bge _0813F066 - lsls r0, r1, 16 - asrs r1, r0, 16 - lsls r0, r2, 16 - asrs r2, r0, 16 -_0813F020: - ldrb r0, [r4, 0x5] - cmp r0, 0x7 - bne _0813F05E - ldrh r0, [r4] - cmp r1, r0 - bne _0813F05E - ldrh r0, [r4, 0x2] - cmp r2, r0 - bne _0813F05E - ldr r0, [r4, 0x8] - movs r1, 0x1 - bl sub_80CC44C - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, [r4, 0x8] - movs r1, 0x3 - bl sub_80CC44C - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - beq _0813F066 - adds r0, r5, 0 - bl FlagGet - lsls r0, 24 - cmp r0, 0 - bne _0813F066 - movs r0, 0x1 - b _0813F068 -_0813F05E: - adds r4, 0xC - adds r3, 0x1 - cmp r3, r5 - blt _0813F020 -_0813F066: - movs r0, 0 -_0813F068: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_813F004 - thumb_func_start sub_813F070 sub_813F070: @ 813F070 push {r4-r6,lr} @@ -950,14 +437,14 @@ sub_813F364: @ 813F364 push {lr} lsls r0, 24 lsrs r0, 24 - ldr r2, _0813F378 @ =gUnknown_8416476 + ldr r2, _0813F378 @ =gText_ItemfinderResponding ldr r3, _0813F37C @ =sub_813F380 movs r1, 0x2 bl DisplayItemMessageOnField pop {r0} bx r0 .align 2, 0 -_0813F378: .4byte gUnknown_8416476 +_0813F378: .4byte gText_ItemfinderResponding _0813F37C: .4byte sub_813F380 thumb_func_end sub_813F364 @@ -985,14 +472,14 @@ sub_813F3A8: @ 813F3A8 push {lr} lsls r0, 24 lsrs r0, 24 - ldr r2, _0813F3BC @ =gUnknown_84164BE + ldr r2, _0813F3BC @ =gText_ItemfinderShakingWildly ldr r3, _0813F3C0 @ =sub_813F3C4 movs r1, 0x2 bl DisplayItemMessageOnField pop {r0} bx r0 .align 2, 0 -_0813F3BC: .4byte gUnknown_84164BE +_0813F3BC: .4byte gText_ItemfinderShakingWildly _0813F3C0: .4byte sub_813F3C4 thumb_func_end sub_813F3A8 diff --git a/data/strings.s b/data/strings.s index 05bd47c88..98b137425 100644 --- a/data/strings.s +++ b/data/strings.s @@ -582,13 +582,13 @@ gUnknown_8416425:: @ 8416425 gUnknown_8416451:: @ 8416451 .string "You can't dismount your BIKE here.{PAUSE_UNTIL_PRESS}$" -gUnknown_8416476:: @ 8416476 +gText_ItemfinderResponding:: @ 8416476 .string "Huh?\nThe ITEMFINDER's responding!\pThere's an item buried around here!{PAUSE_UNTIL_PRESS}$" -gUnknown_84164BE:: @ 84164BE +gText_ItemfinderShakingWildly:: @ 84164BE .string "Oh!\nThe ITEMFINDER's shaking wildly!\pThere's an item buried underfoot!\p‥ ‥ ‥ ‥ ‥ ‥{PAUSE_UNTIL_PRESS}$" -gUnknown_8416513:: @ 8416513 +gText_NopeTheresNoResponse:: @ 8416513 .string "‥ ‥ ‥ ‥Nope!\nThere's no response.{PAUSE_UNTIL_PRESS}$" gUnknown_8416537:: @ 8416537 diff --git a/include/field_specials.h b/include/field_specials.h index 9a85a8b49..40adbdf9a 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -14,5 +14,6 @@ u8 ContextNpcGetTextColor(void); void set_unknown_box_id(u8); u16 get_unknown_box_id(void); bool8 sub_80CC7B4(void); +u16 sub_80CC44C(struct HiddenItemStruct hiddenItem, u8 attr); #endif // GUARD_FIELD_SPECIALS_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index 3623737ea..cc9510997 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -120,26 +120,34 @@ struct CoordEvent u8 *script; }; +struct HiddenItemStruct +{ + u32 field_00:16; + u32 hiddenItemId:8; // flag offset to determine flag lookup + u32 field_03_0:7; + u32 field_03_7:1; +}; + +union BgUnion +{ // carried over from diego's FR/LG work, seems to be the same struct + // in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union. + u8 *script; + + // hidden item type probably + struct HiddenItemStruct hiddenItem; + + // secret base type + u32 secretBaseId; + +}; + struct BgEvent { u16 x, y; u8 unk4; u8 kind; // 0x2 padding for the union beginning. - union { // carried over from diego's FR/LG work, seems to be the same struct - // in gen 3, "kind" (0x3 in BgEvent struct) determines the method to read the union. - u8 *script; - - // hidden item type probably - struct { - u8 filler6[0x2]; - u16 hiddenItemId; // flag offset to determine flag lookup - } hiddenItem; - - // secret base type - u32 secretBaseId; - - } bgUnion; + union BgUnion bgUnion; }; struct MapEvents diff --git a/include/strings.h b/include/strings.h index b0221b8e9..9ddce6044 100644 --- a/include/strings.h +++ b/include/strings.h @@ -324,4 +324,9 @@ extern const u8 gText_ThrowAwayStrVar2OfThisItemQM[]; extern const u8 gText_BerryPouch[]; extern const u8 gText_TheBerryPouchWillBePutAway[]; +// itemfinder +extern const u8 gText_ItemfinderResponding[]; +extern const u8 gText_ItemfinderShakingWildly[]; +extern const u8 gText_NopeTheresNoResponse[]; + #endif //GUARD_STRINGS_H diff --git a/ld_script.txt b/ld_script.txt index a61f88d14..596ef05e2 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -252,6 +252,7 @@ SECTIONS { asm/wild_pokemon_area.o(.text); src/dynamic_placeholder_text_util.o(.text); src/berry_pouch.o(.text); + src/itemfinder.o(.text); asm/itemfinder.o(.text); src/buy_menu_helpers.o(.text); src/slot_machine.o(.text); @@ -467,6 +468,7 @@ SECTIONS { data/wild_pokemon_area.o(.rodata); src/dynamic_placeholder_text_util.o(.rodata); src/berry_pouch.o(.rodata); + src/itemfinder.o(.rodata); data/itemfinder.o(.rodata); src/buy_menu_helpers.o(.rodata); src/slot_machine.o(.rodata); diff --git a/src/itemfinder.c b/src/itemfinder.c new file mode 100644 index 000000000..20db9e5d2 --- /dev/null +++ b/src/itemfinder.c @@ -0,0 +1,204 @@ +#include "global.h" +#include "task.h" +#include "new_menu_helpers.h" +#include "strings.h" +#include "map_obj_lock.h" +#include "script.h" +#include "sound.h" +#include "event_data.h" +#include "field_player_avatar.h" +#include "field_specials.h" +#include "constants/songs.h" + +void sub_813ED18(u8 taskId); +void sub_813ED3C(u8 taskId); +void sub_813EDB0(u8 taskId); +bool8 sub_813EE14(struct MapEvents *events, u8 taskId); +void sub_813EF9C(u8 taskId); +void sub_813F108(u8 taskId); +void sub_813F220(u8 taskId, s16 dx, s16 dy); +u8 GetPlayerDirectionTowardsHiddenItem(s16 x, s16 y); +void sub_813F364(u8 taskId); +void sub_813F3A8(u8 taskId); +void sub_813F3EC(void); +void sub_813F40C(u8 palIdx, u8 direction); +u8 sub_813F5AC(void); +void sub_813EF40(u8 taskId, struct HiddenItemStruct hiddenItem); + +void sub_813EC8C(u8 taskId) +{ + u8 i; + for (i = 0; i < 16; i++) + gTasks[taskId].data[i] = 0; + if (sub_813EE14(gMapHeader.events, taskId) == TRUE) + { + sub_813F3EC(); + if (gTasks[taskId].data[6] == 1) + gTasks[taskId].func = sub_813EDB0; + else + gTasks[taskId].func = sub_813ED3C; + } + else + { + DisplayItemMessageOnField(taskId, 2, gText_NopeTheresNoResponse, sub_813ED18); + } +} + +void sub_813ED18(u8 taskId) +{ + ClearDialogWindowAndFrame(0, TRUE); + sub_80696C0(); + ScriptContext2_Disable(); + DestroyTask(taskId); +} + +void sub_813ED3C(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + u8 direction; + if (data[3] % 25 == 0) + { + direction = GetPlayerDirectionTowardsHiddenItem(data[0], data[1]); + if (data[4] == 0) + { + gTasks[taskId].func = sub_813F364; + return; + } + else + { + PlaySE(SE_TOY_F); + sub_813F40C(data[5], direction); + data[5]++; + data[4]--; + } + } + data[3]++; +} + +void sub_813EDB0(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + if (data[3] % 25 == 0) + { + if (data[4] == 0) + { + gTasks[taskId].func = sub_813F3A8; + return; + } + else + { + PlaySE(SE_TOY_F); + data[7] = sub_813F5AC(); + data[5]++; + data[4]--; + } + } + data[3]++; +} + +bool8 sub_813EE14(struct MapEvents *events, u8 taskId) +{ + s16 x, y, i, dx, dy; + PlayerGetDestCoords(&x, &y); + gTasks[taskId].data[2] = 0; + for (i = 0; i < events->bgEventCount; i++) + { + if (events->bgEvents[i].kind == 7 && !FlagGet(sub_80CC44C(events->bgEvents[i].bgUnion.hiddenItem, 1))) + { + dx = events->bgEvents[i].x + 7 - x; + dy = events->bgEvents[i].y + 7 - y; + if (sub_80CC44C(events->bgEvents[i].bgUnion.hiddenItem, 3) == TRUE) + { + if (dx == 0 && dy == 0) + { + sub_813EF40(taskId, events->bgEvents[i].bgUnion.hiddenItem); + return TRUE; + } + } + else if ( + dx >= -7 + && dx <= 7 + && dy >= -5 + && dy <= 5 + ) + { + sub_813F220(taskId, dx, dy); + } + } + } + sub_813F108(taskId); + if (gTasks[taskId].data[2] == 1) + { + sub_813EF9C(taskId); + return TRUE; + } + return FALSE; +} + +void sub_813EF40(u8 taskId, struct HiddenItemStruct hiddenItem) +{ + s16 * data = gTasks[taskId].data; + gSpecialVar_0x8004 = sub_80CC44C(hiddenItem, 1); + gSpecialVar_0x8005 = sub_80CC44C(hiddenItem, 0); + gSpecialVar_0x8006 = 1; + TV_PrintIntToStringVar(0, gSpecialVar_0x8005); + data[2] = 1; + data[0] = 0; + data[1] = 0; + data[4] = 3; + data[6] = 1; +} + +void sub_813EF9C(u8 taskId) +{ + s16 * data = gTasks[taskId].data; + s16 r3 = data[1]; + s16 r2 = data[0]; + if (data[0] == 0 && data[1] == 0) + data[4] = 4; + else + { + if (data[0] < 0) + r2 = data[0] * -1; + if (data[1] < 0) + r3 = data[1] * -1; + if (r2 > r3) + { + if (r2 > 3) + data[4] = 2; + else + data[4] = 4; + } + else + { + if (r3 > 3) + data[4] = 2; + else + data[4] = 4; + } + } +} + +bool8 sub_813F004(struct MapEvents *events, s16 x, s16 y) +{ + s32 i; + u16 eventFlag; + s32 bgEventCount = events->bgEventCount; + struct BgEvent *bgEvents = events->bgEvents; + for (i = 0; i < bgEventCount; i++) + { + if ( + bgEvents[i].kind == 7 + && x == bgEvents[i].x + && y == bgEvents[i].y + ) + { + eventFlag = sub_80CC44C(bgEvents[i].bgUnion.hiddenItem, 1); + if (sub_80CC44C(bgEvents[i].bgUnion.hiddenItem, 3) != TRUE && !FlagGet(eventFlag)) + return TRUE; + else + return FALSE; + } + } + return FALSE; +} |