diff options
-rw-r--r-- | asm/trainer_see.s | 1119 | ||||
-rw-r--r-- | data/data2.s | 6 | ||||
-rw-r--r-- | include/fieldmap.h | 20 | ||||
-rw-r--r-- | ld_script.txt | 2 | ||||
-rw-r--r-- | src/trainer_see.c | 404 |
5 files changed, 419 insertions, 1132 deletions
diff --git a/asm/trainer_see.s b/asm/trainer_see.s deleted file mode 100644 index 18585ed3a..000000000 --- a/asm/trainer_see.s +++ /dev/null @@ -1,1119 +0,0 @@ - .include "constants/gba_constants.inc" - .include "constants/species_constants.inc" - .include "asm/macros.inc" - - .syntax unified - - .text - - thumb_func_start CheckTrainers -CheckTrainers: @ 8083FBC - push {r4,r5,lr} - movs r4, 0 - ldr r5, _08083FEC @ =gMapObjects -_08083FC2: - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - adds r1, r0, r5 - ldrb r0, [r1] - lsls r0, 31 - cmp r0, 0 - beq _08083FF0 - ldrb r0, [r1, 0x7] - cmp r0, 0x1 - beq _08083FDC - cmp r0, 0x3 - bne _08083FF0 -_08083FDC: - adds r0, r4, 0 - bl CheckTrainer - lsls r0, 24 - cmp r0, 0 - beq _08083FF0 - movs r0, 0x1 - b _08083FFC - .align 2, 0 -_08083FEC: .4byte gMapObjects -_08083FF0: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xF - bls _08083FC2 - movs r0, 0 -_08083FFC: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end CheckTrainers - - thumb_func_start CheckTrainer -CheckTrainer: @ 8084004 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r7, r4, 0 - adds r0, r4, 0 - bl GetFieldObjectScriptPointerByFieldObjectId - adds r6, r0, 0 - bl GetTrainerFlagFromScriptPointer - cmp r0, 0 - bne _08084034 - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 2 - ldr r1, _08084038 @ =gMapObjects - adds r5, r0, r1 - adds r0, r5, 0 - bl TrainerCanApproachPlayer - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _0808403C -_08084034: - movs r0, 0 - b _08084052 - .align 2, 0 -_08084038: .4byte gMapObjects -_0808403C: - adds r0, r7, 0 - adds r1, r6, 0 - bl TrainerWantsBattle - subs r1, r4, 0x1 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl sub_80842C8 - movs r0, 0x1 -_08084052: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CheckTrainer - - thumb_func_start TrainerCanApproachPlayer -TrainerCanApproachPlayer: @ 8084058 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r7, r0, 0 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - ldrb r0, [r7, 0x7] - mov r8, r4 - cmp r0, 0x1 - bne _080840B8 - ldr r1, _080840B0 @ =gUnknown_0839B488 - ldrb r0, [r7, 0x18] - lsls r0, 28 - lsrs r0, 26 - subs r0, 0x4 - adds r0, r1 - ldrb r1, [r7, 0x1D] - mov r2, sp - movs r3, 0 - ldrsh r2, [r2, r3] - movs r5, 0 - ldrsh r3, [r4, r5] - ldr r4, [r0] - adds r0, r7, 0 - bl _call_via_r4 - lsls r0, 24 - lsrs r6, r0, 24 - ldrb r2, [r7, 0x18] - lsls r2, 28 - lsrs r2, 28 - adds r0, r7, 0 - adds r1, r6, 0 - bl CheckPathBetweenTrainerAndPlayer - lsls r0, 24 - lsrs r0, 24 - b _080840F8 - .align 2, 0 -_080840B0: .4byte gUnknown_0839B488 -_080840B4: - adds r0, r6, 0 - b _080840F8 -_080840B8: - movs r5, 0 -_080840BA: - ldr r0, _08084104 @ =gUnknown_0839B488 - lsls r4, r5, 2 - adds r4, r0 - ldrb r1, [r7, 0x1D] - mov r0, sp - movs r6, 0 - ldrsh r2, [r0, r6] - mov r0, r8 - movs r6, 0 - ldrsh r3, [r0, r6] - ldr r4, [r4] - adds r0, r7, 0 - bl _call_via_r4 - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r5, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r7, 0 - adds r1, r6, 0 - adds r2, r4, 0 - bl CheckPathBetweenTrainerAndPlayer - lsls r0, 24 - cmp r0, 0 - bne _080840B4 - adds r5, r4, 0 - cmp r5, 0x3 - bls _080840BA - movs r0, 0 -_080840F8: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08084104: .4byte gUnknown_0839B488 - thumb_func_end TrainerCanApproachPlayer - - thumb_func_start IsTrainerInRangeSouth -IsTrainerInRangeSouth: @ 8084108 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r3, 16 - lsrs r5, r3, 16 - movs r1, 0x10 - ldrsh r0, [r4, r1] - lsls r2, 16 - asrs r2, 16 - cmp r0, r2 - bne _08084142 - lsls r0, r5, 16 - asrs r2, r0, 16 - ldrh r3, [r4, 0x12] - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r2, r0 - ble _08084142 - adds r1, r0, 0 - lsls r0, r6, 16 - asrs r0, 16 - adds r1, r0 - cmp r2, r1 - bgt _08084142 - subs r0, r5, r3 - lsls r0, 24 - lsrs r0, 24 - b _08084144 -_08084142: - movs r0, 0 -_08084144: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end IsTrainerInRangeSouth - - thumb_func_start IsTrainerInRangeNorth -IsTrainerInRangeNorth: @ 808414C - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r3, 16 - lsrs r5, r3, 16 - movs r1, 0x10 - ldrsh r0, [r4, r1] - lsls r2, 16 - asrs r2, 16 - cmp r0, r2 - bne _08084186 - lsls r0, r5, 16 - asrs r2, r0, 16 - ldrh r3, [r4, 0x12] - movs r1, 0x12 - ldrsh r0, [r4, r1] - cmp r2, r0 - bge _08084186 - adds r1, r0, 0 - lsls r0, r6, 16 - asrs r0, 16 - subs r1, r0 - cmp r2, r1 - blt _08084186 - subs r0, r3, r5 - lsls r0, 24 - lsrs r0, 24 - b _08084188 -_08084186: - movs r0, 0 -_08084188: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end IsTrainerInRangeNorth - - thumb_func_start IsTrainerInRangeWest -IsTrainerInRangeWest: @ 8084190 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 16 - lsrs r5, r2, 16 - movs r1, 0x12 - ldrsh r0, [r4, r1] - lsls r3, 16 - asrs r3, 16 - cmp r0, r3 - bne _080841CA - lsls r0, r5, 16 - asrs r3, r0, 16 - ldrh r2, [r4, 0x10] - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r3, r0 - bge _080841CA - adds r1, r0, 0 - lsls r0, r6, 16 - asrs r0, 16 - subs r1, r0 - cmp r3, r1 - blt _080841CA - subs r0, r2, r5 - lsls r0, 24 - lsrs r0, 24 - b _080841CC -_080841CA: - movs r0, 0 -_080841CC: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end IsTrainerInRangeWest - - thumb_func_start IsTrainerInRangeEast -IsTrainerInRangeEast: @ 80841D4 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r1, 16 - lsrs r6, r1, 16 - lsls r2, 16 - lsrs r5, r2, 16 - movs r1, 0x12 - ldrsh r0, [r4, r1] - lsls r3, 16 - asrs r3, 16 - cmp r0, r3 - bne _0808420E - lsls r0, r5, 16 - asrs r3, r0, 16 - ldrh r2, [r4, 0x10] - movs r1, 0x10 - ldrsh r0, [r4, r1] - cmp r3, r0 - ble _0808420E - adds r1, r0, 0 - lsls r0, r6, 16 - asrs r0, 16 - adds r1, r0 - cmp r3, r1 - bgt _0808420E - subs r0, r5, r2 - lsls r0, 24 - lsrs r0, 24 - b _08084210 -_0808420E: - movs r0, 0 -_08084210: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end IsTrainerInRangeEast - - thumb_func_start CheckPathBetweenTrainerAndPlayer -CheckPathBetweenTrainerAndPlayer: @ 8084218 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - adds r6, r0, 0 - lsls r1, 24 - lsrs r1, 24 - mov r9, r1 - lsls r2, 24 - lsrs r7, r2, 24 - cmp r1, 0 - beq _080842B2 - ldrh r1, [r6, 0x10] - mov r0, sp - strh r1, [r0] - ldrh r0, [r6, 0x12] - mov r1, sp - adds r1, 0x2 - strh r0, [r1] - movs r4, 0 - mov r8, r1 - mov r5, r9 - subs r5, 0x1 - cmp r4, r5 - bgt _08084284 -_0808424C: - mov r0, sp - movs r2, 0 - ldrsh r1, [r0, r2] - mov r3, r8 - movs r0, 0 - ldrsh r2, [r3, r0] - adds r0, r6, 0 - adds r3, r7, 0 - bl sub_8060024 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - beq _08084270 - movs r0, 0x1 - ands r1, r0 - cmp r1, 0 - bne _080842B2 -_08084270: - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r7, 0 - mov r1, sp - mov r2, r8 - bl MoveCoords - cmp r4, r5 - ble _0808424C -_08084284: - ldrb r4, [r6, 0x19] - lsls r5, r4, 28 - lsrs r5, 28 - lsrs r4, 4 - movs r0, 0 - strb r0, [r6, 0x19] - mov r0, sp - movs r2, 0 - ldrsh r1, [r0, r2] - mov r3, r8 - movs r0, 0 - ldrsh r2, [r3, r0] - adds r0, r6, 0 - adds r3, r7, 0 - bl npc_block_way - lsls r0, 24 - lsrs r1, r0, 24 - lsls r4, 4 - orrs r5, r4 - strb r5, [r6, 0x19] - cmp r1, 0x4 - beq _080842B6 -_080842B2: - movs r0, 0 - b _080842B8 -_080842B6: - mov r0, r9 -_080842B8: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end CheckPathBetweenTrainerAndPlayer - - thumb_func_start sub_80842C8 -sub_80842C8: @ 80842C8 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r4, r1, 24 - lsrs r4, 24 - ldr r0, _080842F4 @ =sub_808433C - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - ldr r0, _080842F8 @ =gTasks - adds r1, r0 - lsrs r0, r5, 16 - strh r0, [r1, 0xA] - strh r5, [r1, 0xC] - strh r4, [r1, 0xE] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080842F4: .4byte sub_808433C -_080842F8: .4byte gTasks - thumb_func_end sub_80842C8 - - thumb_func_start sub_80842FC -sub_80842FC: @ 80842FC - push {r4-r6,lr} - adds r6, r0, 0 - ldr r5, _08084334 @ =sub_808433C - adds r0, r5, 0 - bl FindTaskIdByFunc - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - adds r1, r5, 0 - adds r2, r6, 0 - bl SetTaskFuncWithFollowupFunc - ldr r1, _08084338 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - movs r1, 0x1 - strh r1, [r0, 0x8] - adds r0, r4, 0 - bl _call_via_r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08084334: .4byte sub_808433C -_08084338: .4byte gTasks - thumb_func_end sub_80842FC - - thumb_func_start sub_808433C -sub_808433C: @ 808433C - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 2 - adds r0, r6 - lsls r0, 3 - ldr r1, _08084368 @ =gTasks - adds r4, r0, r1 - movs r1, 0xA - ldrsh r0, [r4, r1] - lsls r5, r0, 16 - movs r1, 0xC - ldrsh r0, [r4, r1] - orrs r5, r0 - ldrb r0, [r5] - lsls r0, 31 - cmp r0, 0 - bne _0808436C - adds r0, r6, 0 - bl SwitchTaskToFollowupFunc - b _08084388 - .align 2, 0 -_08084368: .4byte gTasks -_0808436C: - ldr r7, _08084390 @ =gUnknown_0839B498 -_0808436E: - movs r1, 0x8 - ldrsh r0, [r4, r1] - lsls r0, 2 - adds r0, r7 - ldr r3, [r0] - adds r0, r6, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl _call_via_r3 - lsls r0, 24 - cmp r0, 0 - bne _0808436E -_08084388: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08084390: .4byte gUnknown_0839B498 - thumb_func_end sub_808433C - - thumb_func_start sub_8084394 -sub_8084394: @ 8084394 - movs r0, 0 - bx lr - thumb_func_end sub_8084394 - - thumb_func_start sub_8084398 -sub_8084398: @ 8084398 - push {r4,r5,lr} - adds r5, r1, 0 - adds r4, r2, 0 - ldr r1, _080843D8 @ =gUnknown_0202FF84 - adds r2, r1, 0x4 - adds r3, r1, 0 - adds r3, 0x8 - adds r0, r4, 0 - bl FieldObjectGetLocalIdAndMap - movs r0, 0 - bl FieldEffectStart - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetFaceDirectionAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] - movs r0, 0x1 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080843D8: .4byte gUnknown_0202FF84 - thumb_func_end sub_8084398 - - thumb_func_start sub_80843DC -sub_80843DC: @ 80843DC - push {r4,r5,lr} - adds r4, r1, 0 - adds r5, r2, 0 - movs r0, 0 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - beq _080843F2 - movs r0, 0 - b _08084414 -_080843F2: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - ldrb r0, [r5, 0x6] - subs r0, 0x39 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08084408 - movs r0, 0x6 - strh r0, [r4, 0x8] -_08084408: - ldrb r0, [r5, 0x6] - cmp r0, 0x3F - bne _08084412 - movs r0, 0x8 - strh r0, [r4, 0x8] -_08084412: - movs r0, 0x1 -_08084414: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80843DC - - thumb_func_start sub_808441C -sub_808441C: @ 808441C - push {r4,r5,lr} - adds r5, r1, 0 - adds r4, r2, 0 - adds r0, r4, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _0808443A - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _0808446E -_0808443A: - movs r1, 0xE - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _08084460 - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetGoSpeed0AnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - ldrh r0, [r5, 0xE] - subs r0, 0x1 - strh r0, [r5, 0xE] - b _0808446E -_08084460: - adds r0, r4, 0 - movs r1, 0x3E - bl FieldObjectSetSpecialAnim - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_0808446E: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_808441C - - thumb_func_start sub_8084478 -sub_8084478: @ 8084478 - push {r4-r6,lr} - adds r6, r1, 0 - adds r5, r2, 0 - adds r0, r5, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _08084496 - adds r0, r5, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _08084524 -_08084496: - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl npc_running_behaviour_by_direction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl npc_set_running_behaviour_etc - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl npc_running_behaviour_by_direction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - bl sub_805C774 - adds r0, r5, 0 - bl sub_805C754 - ldr r0, _0808452C @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08084530 @ =gMapObjects - adds r4, r0, r1 - adds r0, r4, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _080844EE - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _08084524 -_080844EE: - bl sub_80597E8 - ldr r0, _0808452C @ =gPlayerAvatar - ldrb r0, [r0, 0x5] - lsls r4, r0, 3 - adds r4, r0 - lsls r4, 2 - ldr r0, _08084530 @ =gMapObjects - adds r4, r0 - ldrb r0, [r5, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl GetOppositeDirection - lsls r0, 24 - lsrs r0, 24 - bl GetFaceDirectionAnimId - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - ldrh r0, [r6, 0x8] - adds r0, 0x1 - strh r0, [r6, 0x8] -_08084524: - movs r0, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0808452C: .4byte gPlayerAvatar -_08084530: .4byte gMapObjects - thumb_func_end sub_8084478 - - thumb_func_start sub_8084534 -sub_8084534: @ 8084534 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r0, _08084570 @ =gPlayerAvatar - ldrb r1, [r0, 0x5] - lsls r0, r1, 3 - adds r0, r1 - lsls r0, 2 - ldr r1, _08084574 @ =gMapObjects - adds r4, r0, r1 - adds r0, r4, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _08084560 - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _08084566 -_08084560: - adds r0, r5, 0 - bl SwitchTaskToFollowupFunc -_08084566: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08084570: .4byte gPlayerAvatar -_08084574: .4byte gMapObjects - thumb_func_end sub_8084534 - - thumb_func_start sub_8084578 -sub_8084578: @ 8084578 - push {r4,r5,lr} - adds r5, r1, 0 - adds r4, r2, 0 - adds r0, r4, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _08084596 - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _080845A4 -_08084596: - adds r0, r4, 0 - movs r1, 0x59 - bl FieldObjectSetSpecialAnim - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_080845A4: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8084578 - - thumb_func_start sub_80845AC -sub_80845AC: @ 80845AC - push {r4,lr} - adds r4, r1, 0 - adds r0, r2, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _080845C0 - movs r0, 0x3 - strh r0, [r4, 0x8] -_080845C0: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80845AC - - thumb_func_start sub_80845C8 -sub_80845C8: @ 80845C8 - push {r4,r5,lr} - adds r5, r1, 0 - adds r4, r2, 0 - adds r0, r4, 0 - bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive - lsls r0, 24 - cmp r0, 0 - beq _080845E6 - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - lsls r0, 24 - cmp r0, 0 - beq _080845F4 -_080845E6: - adds r0, r4, 0 - movs r1, 0x3E - bl FieldObjectSetSpecialAnim - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_080845F4: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80845C8 - - thumb_func_start sub_80845FC -sub_80845FC: @ 80845FC - push {r4,r5,lr} - adds r5, r1, 0 - adds r4, r2, 0 - adds r0, r4, 0 - bl FieldObjectCheckIfSpecialAnimFinishedOrInactive - lsls r0, 24 - cmp r0, 0 - beq _08084642 - ldr r2, _0808464C @ =gUnknown_0202FF84 - movs r1, 0x10 - ldrsh r0, [r4, r1] - str r0, [r2] - movs r1, 0x12 - ldrsh r0, [r4, r1] - str r0, [r2, 0x4] - ldr r3, _08084650 @ =gSprites - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - adds r0, 0x43 - ldrb r0, [r0] - subs r0, 0x1 - str r0, [r2, 0x8] - movs r0, 0x2 - str r0, [r2, 0xC] - movs r0, 0x31 - bl FieldEffectStart - strh r0, [r5, 0x10] - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_08084642: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0808464C: .4byte gUnknown_0202FF84 -_08084650: .4byte gSprites - thumb_func_end sub_80845FC - - thumb_func_start sub_8084654 -sub_8084654: @ 8084654 - push {r4,r5,lr} - adds r5, r1, 0 - adds r4, r2, 0 - ldr r2, _080846C4 @ =gSprites - movs r1, 0x10 - ldrsh r0, [r5, r1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - adds r1, 0x2B - ldrb r0, [r1] - cmp r0, 0x2 - bne _080846BC - ldrb r1, [r4, 0x3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x3] - ldrb r0, [r4] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] - ldrb r1, [r4, 0x4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldrb r2, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - movs r2, 0x8 - orrs r1, r2 - strb r1, [r0, 0x5] - adds r0, r4, 0 - bl FieldObjectClearAnimIfSpecialAnimFinished - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl sub_806084C - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl FieldObjectSetSpecialAnim - ldrh r0, [r5, 0x8] - adds r0, 0x1 - strh r0, [r5, 0x8] -_080846BC: - movs r0, 0 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_080846C4: .4byte gSprites - thumb_func_end sub_8084654 - - thumb_func_start sub_80846C8 -sub_80846C8: @ 80846C8 - push {r4,lr} - adds r4, r1, 0 - movs r0, 0x31 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _080846DC - movs r0, 0x3 - strh r0, [r4, 0x8] -_080846DC: - movs r0, 0 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80846C8 - - thumb_func_start sub_80846E4 -sub_80846E4: @ 80846E4 - push {r4,r5,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08084778 @ =gTasks - adds r4, r0, r1 - adds r0, r4, 0 - adds r0, 0xA - mov r1, sp - bl LoadWordFromTwoHalfwords - movs r1, 0x16 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08084716 - ldr r0, [sp] - bl FieldObjectClearAnim - ldrh r0, [r4, 0x16] - adds r0, 0x1 - strh r0, [r4, 0x16] -_08084716: - ldr r1, _0808477C @ =gUnknown_0839B4C8 - movs r2, 0x8 - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - ldr r2, [sp] - ldr r3, [r0] - adds r0, r5, 0 - adds r1, r4, 0 - bl _call_via_r3 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x3 - bne _08084780 - movs r0, 0x31 - bl FieldEffectActiveListContains - lsls r0, 24 - cmp r0, 0 - bne _08084780 - ldr r4, [sp] - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl npc_running_behaviour_by_direction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl npc_set_running_behaviour_etc - ldr r4, [sp] - ldrb r0, [r4, 0x18] - lsls r0, 28 - lsrs r0, 28 - bl npc_running_behaviour_by_direction - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_805C774 - adds r0, r5, 0 - bl DestroyTask - b _0808478A - .align 2, 0 -_08084778: .4byte gTasks -_0808477C: .4byte gUnknown_0839B4C8 -_08084780: - ldr r2, [sp] - ldrb r1, [r2] - movs r0, 0x7F - ands r0, r1 - strb r0, [r2] -_0808478A: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_80846E4 - - thumb_func_start sub_8084794 -sub_8084794: @ 8084794 - push {r4,lr} - adds r4, r0, 0 - ldr r0, _080847C0 @ =sub_80846E4 - movs r1, 0 - bl CreateTask - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - lsls r0, r1, 2 - adds r0, r1 - lsls r0, 3 - ldr r1, _080847C4 @ =gTasks + 0x8 - adds r0, r1 - adds r0, 0x2 - adds r1, r4, 0 - bl StoreWordInTwoHalfwords - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080847C0: .4byte sub_80846E4 -_080847C4: .4byte gTasks + 0x8 - thumb_func_end sub_8084794 - - thumb_func_start sub_80847C8 -sub_80847C8: @ 80847C8 - push {lr} - ldr r0, _080847D4 @ =sub_80847D8 - bl sub_80842FC - pop {r0} - bx r0 - .align 2, 0 -_080847D4: .4byte sub_80847D8 - thumb_func_end sub_80847C8 - - thumb_func_start sub_80847D8 -sub_80847D8: @ 80847D8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl DestroyTask - bl EnableBothScriptContexts - pop {r0} - bx r0 - thumb_func_end sub_80847D8 - - .align 2, 0 @ Don't pad with nop. diff --git a/data/data2.s b/data/data2.s index e5dd9110f..35121b3de 100644 --- a/data/data2.s +++ b/data/data2.s @@ -11118,14 +11118,14 @@ gSpriteImage_839B408:: @ 839B408 .incbin "graphics/unknown_sprites/839B408.4bpp" .align 2 -gUnknown_0839B488:: @ 839B488 +gIsTrainerInRange:: @ 839B488 .4byte IsTrainerInRangeSouth .4byte IsTrainerInRangeNorth .4byte IsTrainerInRangeWest .4byte IsTrainerInRangeEast .align 2 -gUnknown_0839B498:: @ 839B498 +gTrainerSeeFuncList:: @ 839B498 .4byte sub_8084394 .4byte sub_8084398 .4byte sub_80843DC @@ -11140,7 +11140,7 @@ gUnknown_0839B498:: @ 839B498 .4byte sub_80846C8 .align 2 -gUnknown_0839B4C8:: @ 839B4C8 +gTrainerSeeFuncList2:: @ 839B4C8 .4byte sub_80845C8 .4byte sub_80845FC .4byte sub_8084654 diff --git a/include/fieldmap.h b/include/fieldmap.h index bd28f752a..66408c43b 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -166,13 +166,15 @@ struct MapObject /*0x10*/ struct Coords16 coords2; /*0x14*/ struct Coords16 coords3; /*0x18*/ u8 mapobj_unk_18:4; - /*0x19*/ u8 mapobj_unk_19; + /*0x18*/ u8 placeholder18:4; + /*0x19*/ u8 mapobj_unk_19:4; + /*0x19*/ u8 mapobj_unk_19b:4; /*0x1A*/ u8 mapobj_unk_1A; /*0x1B*/ u8 mapobj_unk_1B; /*0x1C*/ u8 mapobj_unk_1C; /*0x1D*/ u8 trainerRange_berryTreeId; - /*0x1E*/ u8 mapobj_unk_1E; - /*0x1E*/ u8 mapobj_unk_1F; + /*0x1E */ u8 mapobj_unk_1E; + /*0x1F*/ u8 mapobj_unk_1F; /*0x20*/ u8 mapobj_unk_20; /*0x21*/ u8 mapobj_unk_21; /*size = 0x24*/ @@ -200,12 +202,12 @@ struct MapObjectGraphicsInfo struct PlayerAvatar { - u8 bitfield; - u8 bike; - u8 running2; - u8 running1; - u8 spriteId; - u8 mapObjectId; + /* 0x00 */ u8 bitfield; + /* 0x01 */ u8 bike; + /* 0x02 */ u8 running2; + /* 0x03 */ u8 running1; + /* 0x04 */ u8 spriteId; + /* 0x05 */ u8 mapObjectId; // TODO: rest of struct }; diff --git a/ld_script.txt b/ld_script.txt index c5fbd3bfc..7580985b8 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -100,7 +100,7 @@ SECTIONS { src/battle_setup.o(.text); asm/cable_club.o(.text); src/mori_debug_menu.o(.text); - asm/trainer_see.o(.text); + src/trainer_see.o(.text); src/fldeff_emotion.o(.text); src/wild_encounter.o(.text); src/field_effect.o(.text); diff --git a/src/trainer_see.c b/src/trainer_see.c new file mode 100644 index 000000000..57a53634a --- /dev/null +++ b/src/trainer_see.c @@ -0,0 +1,404 @@ +#include "global.h" +#include "fieldmap.h" +#include "task.h" +#include "sprite.h" + +extern u8 * GetFieldObjectScriptPointerByFieldObjectId(u8); +extern u8 * GetTrainerFlagFromScriptPointer(u8 *); +extern u8 TrainerCanApproachPlayer(struct MapObject *); +extern u8 sub_8060024(struct MapObject *, s16, s16, u8); +extern u8 npc_block_way(struct MapObject *, s16, s16, u8); +extern u8 npc_running_behaviour_by_direction(u8); +extern u8 GetGoSpeed0AnimId(u8); +extern u8 GetOppositeDirection(u8); +extern u8 GetFaceDirectionAnimId(u8); +extern bool8 FieldEffectActiveListContains(u8); +extern bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *); +extern bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *); +extern bool8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *); +extern void FieldObjectClearAnim(struct MapObject *); +extern void TrainerWantsBattle(u8, u8 *); +extern void FieldObjectSetSpecialAnim(struct MapObject *, u8); +extern void LoadWordFromTwoHalfwords(u32, u8 *); +extern void StoreWordInTwoHalfwords(u32, u8 *); + +extern void sub_80842FC(void (*func)(u8)); + +extern bool8 (*gIsTrainerInRange[])(struct MapObject *, u16, s16, s16); +extern bool8 (*gTrainerSeeFuncList[])(u8, struct Task *, struct MapObject *); +extern bool8 (*gTrainerSeeFuncList2[])(u8, struct Task *, struct MapObject *); + +extern u32 gUnknown_0202FF84[]; + +bool8 CheckTrainer(u8); +bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject *, u8, u8); +void sub_80842C8(struct MapObject *, u8); +void RunTrainerSeeFuncList(u8); +void sub_80847D8(u8); + +bool8 CheckTrainers(void) +{ + u8 i; + + for(i = 0; i < 16; i++) + { + if ( gMapObjects[i].active ) + if ( gMapObjects[i].trainerType == 1 || gMapObjects[i].trainerType == 3 ) + if ( CheckTrainer(i) ) + return TRUE; + } + return FALSE; +} + +bool8 CheckTrainer(u8 trainer) +{ + u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(trainer); + + if(GetTrainerFlagFromScriptPointer(scriptPtr)) + return FALSE; + else + { + struct MapObject *trainerObj = &gMapObjects[trainer]; + u8 canApproach = TrainerCanApproachPlayer(trainerObj); + + if(canApproach != 0) + { + TrainerWantsBattle(trainer, scriptPtr); + sub_80842C8(trainerObj, (canApproach - 1)); + return TRUE; + } + else + { + return FALSE; + } + } +} + +bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj) +{ + s16 x, y; + u8 i; + u8 playerCoord; + + PlayerGetDestCoords(&x, &y); + if ( trainerObj->trainerType == 1 ) // trainers that don't spin + { + playerCoord = gIsTrainerInRange[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); + return CheckPathBetweenTrainerAndPlayer(trainerObj, playerCoord, trainerObj->mapobj_unk_18); + } + else // spinners + { + for(i = 0; i < 4; i++) + { + playerCoord = gIsTrainerInRange[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y); + if ( CheckPathBetweenTrainerAndPlayer(trainerObj, playerCoord, i + 1) ) // directions are 1-4 instead of 0-3. south north west east + return playerCoord; + } + return FALSE; + } +} + +bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +{ + if ( trainerObj->coords2.x == x + && y > trainerObj->coords2.y + && y <= trainerObj->coords2.y + vision ) + return (y - trainerObj->coords2.y); + else + return FALSE; +} + +bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +{ + if ( trainerObj->coords2.x == x + && y < trainerObj->coords2.y + && y >= trainerObj->coords2.y - vision ) + return (trainerObj->coords2.y - y); + else + return FALSE; +} + +bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +{ + if ( trainerObj->coords2.y == y + && x < trainerObj->coords2.x + && x >= trainerObj->coords2.x - vision ) + return (trainerObj->coords2.x - x); + else + return FALSE; +} + +bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y) +{ + if ( trainerObj->coords2.y == y + && x > trainerObj->coords2.x + && x <= trainerObj->coords2.x + vision ) + return (x - trainerObj->coords2.x); + else + return FALSE; +} + +bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject *trainerObj, u8 playerCoord, u8 direction) +{ + s16 x, y; + u8 unk19_temp; + u8 unk19b_temp; + u8 i; + u8 var; + + if ( !playerCoord ) + return FALSE; + + x = trainerObj->coords2.x; + y = trainerObj->coords2.y; + + for(i = 0; i <= playerCoord - 1;) + { + var = sub_8060024(trainerObj, x, y, direction); + + if (var != 0 && (var & 1) != 0 ) + return FALSE; + + i++; + MoveCoords(direction, &x, &y); + } + + // preserve mapobj_unk_19 before clearing. + unk19_temp = trainerObj->mapobj_unk_19; + unk19b_temp = trainerObj->mapobj_unk_19b; + trainerObj->mapobj_unk_19 = 0; + trainerObj->mapobj_unk_19b = 0; + + var = npc_block_way(trainerObj, x, y, direction); + + trainerObj->mapobj_unk_19 = unk19_temp; + trainerObj->mapobj_unk_19b = unk19b_temp; + if ( var == 4 ) + return playerCoord; + + return FALSE; +} + +void sub_80842C8(struct MapObject *trainerObj, u8 taskId) +{ + struct Task *task = &gTasks[CreateTask(RunTrainerSeeFuncList, 0x50)]; + + task->data[1] = (u32)(trainerObj) >> 16; + task->data[2] = (u32)(trainerObj); + task->data[3] = taskId; +} + +void sub_80842FC(TaskFunc func) +{ + TaskFunc func2 = RunTrainerSeeFuncList; + u8 taskId = FindTaskIdByFunc(func2); + + SetTaskFuncWithFollowupFunc(taskId, RunTrainerSeeFuncList, func); + gTasks[taskId].data[0] = 1; + func2(taskId); +} + +void RunTrainerSeeFuncList(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + struct MapObject *trainerObj = (task->data[1] << 16) | (task->data[2]); + + if (!trainerObj->active) + SwitchTaskToFollowupFunc(taskId); + else + while (gTrainerSeeFuncList[task->data[0]](taskId, task, trainerObj)); +} + +u8 sub_8084394() // cant be void because it is called with RunTrainerSeeFuncList with arguments. +{ + return 0; +} + +s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + u8 direction; + + FieldObjectGetLocalIdAndMap(trainerObj, &gUnknown_0202FF84[0], &gUnknown_0202FF84[1], &gUnknown_0202FF84[2]); + FieldEffectStart(0); + + direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18); + + FieldObjectSetSpecialAnim(trainerObj, direction); + task->data[0]++; + return 1; +} + +s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if (FieldEffectActiveListContains(0)) + return 0; + else + { + task->data[0]++; + if ((u8)(trainerObj->animPattern - 57) <= 1) + task->data[0] = 6; + if (trainerObj->animPattern == 63) + task->data[0] = 8; + return 1; + } +} + +s8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if (!(FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)) || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) + { + if(task->data[3]) + { + FieldObjectSetSpecialAnim(trainerObj, GetGoSpeed0AnimId(trainerObj->mapobj_unk_18)); + task->data[3]--; + } + else + { + FieldObjectSetSpecialAnim(trainerObj, 0x3E); + task->data[0]++; + } + } + return 0; +} + +s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + struct MapObject *playerObj; + + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) + return 0; + + npc_set_running_behaviour_etc(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18)); + sub_805C774(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18)); + sub_805C754(trainerObj); + + playerObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj) + && !FieldObjectClearAnimIfSpecialAnimFinished(playerObj)) + return 0; + + sub_80597E8(); + FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], GetFaceDirectionAnimId(GetOppositeDirection(trainerObj->mapobj_unk_18))); + task->data[0]++; + return 0; +} + +s8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj) // technically only 1 parameter, but needs all 3 for TrainerSeeFuncList call. +{ + struct MapObject *playerObj = &gMapObjects[gPlayerAvatar.mapObjectId]; + + if ( !FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj) + || FieldObjectClearAnimIfSpecialAnimFinished(playerObj) ) + SwitchTaskToFollowupFunc(taskId); + + return 0; +} + +s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if(!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) + || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) + { + FieldObjectSetSpecialAnim(trainerObj, 0x59); + task->data[0]++; + } + return 0; +} + +s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if ( FieldObjectClearAnimIfSpecialAnimFinished(trainerObj) ) + task->data[0] = 3; + + return 0; +} + +s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if(!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) + || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj)) + { + FieldObjectSetSpecialAnim(trainerObj, 0x3E); + task->data[0]++; + } + return 0; +} + +s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if(FieldObjectCheckIfSpecialAnimFinishedOrInactive(trainerObj)) + { + gUnknown_0202FF84[0] = trainerObj->coords2.x; + gUnknown_0202FF84[1] = trainerObj->coords2.y; + gUnknown_0202FF84[2] = gSprites[trainerObj->spriteId].subpriority - 1; + gUnknown_0202FF84[3] = 2; + task->data[4] = FieldEffectStart(49); + task->data[0]++; + } + return 0; +} + +s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + struct Sprite *sprite; + + if(gSprites[task->data[4]].animCmdIndex == 2) + { + trainerObj->mapobj_bit_26 = 0; + trainerObj->mapobj_bit_2 = 1; + + sprite = &gSprites[trainerObj->spriteId]; + sprite->oam.priority = 2; + FieldObjectClearAnimIfSpecialAnimFinished(trainerObj); + FieldObjectSetSpecialAnim(trainerObj, sub_806084C(trainerObj->mapobj_unk_18)); + task->data[0]++; + } + return 0; +} + +s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj) +{ + if(!FieldEffectActiveListContains(49)) + task->data[0] = 3; + + return 0; +} + +void sub_80846E4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + struct MapObject *mapObj; + + // another mapObj loaded into by loadword? + LoadWordFromTwoHalfwords(&task->data[1], &mapObj); + if(!task->data[7]) + { + FieldObjectClearAnim(mapObj); + task->data[7]++; + } + gTrainerSeeFuncList2[task->data[0]](taskId, task, mapObj); + if(task->data[0] == 3 && !FieldEffectActiveListContains(49)) + { + npc_set_running_behaviour_etc(mapObj, npc_running_behaviour_by_direction(mapObj->mapobj_unk_18)); + sub_805C774(mapObj, npc_running_behaviour_by_direction(mapObj->mapobj_unk_18)); + DestroyTask(taskId); + } + else + mapObj->mapobj_bit_7 = 0; +} + +void sub_8084794(u32 var) +{ + StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80846E4, 0)].data[1], var); +} + +void sub_80847C8(void) +{ + sub_80842FC(sub_80847D8); +} + +void sub_80847D8(u8 taskId) +{ + DestroyTask(taskId); + EnableBothScriptContexts(); +} |