diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-17 20:59:39 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-17 20:59:39 -0400 |
commit | 901fceec188ff640f32b22343e5a0b6e7e4c9c42 (patch) | |
tree | 3384fab2ba989c1fd4eee44284d100faa084bbfd | |
parent | 715c2ff3ad3a7842a97a2b221f4c02135a813139 (diff) |
through GetInteractedObjectEventScript
-rw-r--r-- | asm/field_control_avatar.s | 1118 | ||||
-rw-r--r-- | asm/overworld.s | 12 | ||||
-rw-r--r-- | data/maps/PalletTown/scripts.inc | 4 | ||||
-rw-r--r-- | data/maps/PalletTown_ProfessorOaksLab/scripts.inc | 2 | ||||
-rw-r--r-- | include/constants/flags.h | 2 | ||||
-rw-r--r-- | include/event_scripts.h | 4 | ||||
-rw-r--r-- | include/field_control_avatar.h | 20 | ||||
-rw-r--r-- | include/field_specials.h | 3 | ||||
-rw-r--r-- | include/global.fieldmap.h | 8 | ||||
-rw-r--r-- | include/item_menu.h | 1 | ||||
-rw-r--r-- | include/script.h | 9 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/field_control_avatar.c | 428 | ||||
-rw-r--r-- | src/field_specials.c | 2 | ||||
-rw-r--r-- | src/script.c | 28 |
15 files changed, 520 insertions, 1122 deletions
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s index 09c516bd8..7721da952 100644 --- a/asm/field_control_avatar.s +++ b/asm/field_control_avatar.s @@ -5,1078 +5,8 @@ .text - thumb_func_start sub_806C888 -sub_806C888: @ 806C888 - push {r4-r6,lr} - movs r1, 0x2 - negs r1, r1 - movs r3, 0x3 - negs r3, r3 - movs r4, 0x5 - negs r4, r4 - movs r5, 0x9 - negs r5, r5 - movs r6, 0x11 - negs r6, r6 - movs r2, 0 - strb r2, [r0] - ldrb r2, [r0, 0x1] - ands r1, r2 - ands r1, r3 - ands r1, r4 - ands r1, r5 - ands r1, r6 - strb r1, [r0, 0x1] - movs r1, 0 - strb r1, [r0, 0x2] - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_806C888 - - thumb_func_start FieldGetPlayerInput -FieldGetPlayerInput: @ 806C8BC - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - adds r5, r0, 0 - mov r0, sp - strh r1, [r0] - mov r4, sp - adds r4, 0x2 - strh r2, [r4] - ldr r0, _0806CA14 @ =gPlayerAvatar - ldrb r1, [r0, 0x2] - mov r8, r1 - ldrb r6, [r0, 0x3] - bl cur_mapdata_block_role_at_player_pos - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsForcedMovementTile - lsls r0, 24 - lsrs r7, r0, 24 - bl ScriptContext1_IsScriptSetUp - lsls r0, 24 - cmp r0, 0 - bne _0806C908 - bl sub_806997C - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806C908 - adds r0, r5, 0 - mov r1, sp - adds r2, r4, 0 - bl sub_806CA4C -_0806C908: - cmp r6, 0x2 - bne _0806C910 - cmp r7, 0 - beq _0806C914 -_0806C910: - cmp r6, 0 - bne _0806C9D0 -_0806C914: - bl GetPlayerSpeed - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x4 - beq _0806C9AC - mov r0, sp - ldrh r1, [r0] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0806C940 - ldr r0, _0806CA14 @ =gPlayerAvatar - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0806C940 - ldrb r0, [r5] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r5] -_0806C940: - ldr r0, _0806CA18 @ =gQuestLogState - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _0806C9D0 - ldr r0, _0806CA14 @ =gPlayerAvatar - ldrb r1, [r0] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - bne _0806C9AC - mov r0, sp - ldrh r1, [r0] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0806C96E - ldrb r0, [r5] - movs r1, 0x8 - orrs r0, r1 - strb r0, [r5] -_0806C96E: - mov r0, sp - ldrh r1, [r0] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806C982 - ldrb r0, [r5] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r5] -_0806C982: - mov r0, sp - ldrh r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0806C996 - ldrb r0, [r5] - movs r1, 0x80 - orrs r0, r1 - strb r0, [r5] -_0806C996: - mov r0, sp - ldrh r1, [r0] - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _0806C9AC - ldrb r0, [r5, 0x1] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r5, 0x1] -_0806C9AC: - ldr r0, _0806CA18 @ =gQuestLogState - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _0806C9D0 - ldrh r1, [r4] - movs r0, 0xF0 - ands r0, r1 - cmp r0, 0 - beq _0806C9D0 - ldrb r0, [r5] - movs r1, 0x10 - orrs r0, r1 - movs r1, 0x20 - orrs r0, r1 - strb r0, [r5] -_0806C9D0: - cmp r7, 0 - bne _0806C9F6 - cmp r6, 0x2 - bne _0806C9E6 - mov r0, r8 - cmp r0, 0x2 - bne _0806C9E6 - ldrb r0, [r5] - movs r1, 0x40 - orrs r0, r1 - strb r0, [r5] -_0806C9E6: - cmp r7, 0 - bne _0806C9F6 - cmp r6, 0x2 - bne _0806C9F6 - ldrb r0, [r5] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r5] -_0806C9F6: - ldr r0, _0806CA18 @ =gQuestLogState - ldrb r0, [r0] - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _0806CA40 - ldrh r1, [r4] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0806CA1C - movs r0, 0x2 - b _0806CA3E - .align 2, 0 -_0806CA14: .4byte gPlayerAvatar -_0806CA18: .4byte gQuestLogState -_0806CA1C: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0806CA28 - movs r0, 0x1 - b _0806CA3E -_0806CA28: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0806CA34 - movs r0, 0x3 - b _0806CA3E -_0806CA34: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0806CA40 - movs r0, 0x4 -_0806CA3E: - strb r0, [r5, 0x2] -_0806CA40: - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end FieldGetPlayerInput - - thumb_func_start sub_806CA4C -sub_806CA4C: @ 806CA4C - push {r4,r5,lr} - adds r4, r1, 0 - adds r5, r2, 0 - bl sub_80699B0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x8 - bhi _0806CABA - lsls r0, 2 - ldr r1, _0806CA68 @ =_0806CA6C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0806CA68: .4byte _0806CA6C - .align 2, 0 -_0806CA6C: - .4byte _0806CABA - .4byte _0806CA90 - .4byte _0806CA94 - .4byte _0806CA98 - .4byte _0806CA9C - .4byte _0806CAA0 - .4byte _0806CAA8 - .4byte _0806CAB0 - .4byte _0806CAB4 -_0806CA90: - movs r0, 0x40 - b _0806CAB6 -_0806CA94: - movs r0, 0x80 - b _0806CAB6 -_0806CA98: - movs r0, 0x20 - b _0806CAB6 -_0806CA9C: - movs r0, 0x10 - b _0806CAB6 -_0806CAA0: - movs r1, 0x80 - lsls r1, 2 - adds r0, r1, 0 - b _0806CAB6 -_0806CAA8: - movs r1, 0x80 - lsls r1, 1 - adds r0, r1, 0 - b _0806CAB6 -_0806CAB0: - movs r0, 0x8 - b _0806CAB6 -_0806CAB4: - movs r0, 0x4 -_0806CAB6: - strh r0, [r4] - strh r0, [r5] -_0806CABA: - bl sub_8069970 - bl sub_80699A4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_806CA4C - - thumb_func_start sub_806CAC8 -sub_806CAC8: @ 806CAC8 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - adds r5, r0, 0 - bl sub_8069A54 - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r6, r0, 24 - mov r4, sp - mov r0, sp - bl player_get_pos_to_and_height - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - movs r2, 0xFF - bl MapGridGetMetatileAttributeAt - mov r8, r0 - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r4, r0, 16 - ldr r7, _0806CB70 @ =gUnknown_3005078 - adds r0, r7, 0 - bl sub_806C888 - ldrb r0, [r5, 0x2] - strb r0, [r7, 0x2] - bl CheckForTrainersWantingBattle - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0806CB6C - bl mapheader_run_first_tag2_script_list_match - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0806CB6C - ldrb r1, [r5] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _0806CB74 - movs r0, 0x5 - bl IncrementGameStat - bl MENewsJisanStepCounter - bl IncrementRenewableHiddenItemStepCounter - bl RunMassageCooldownStepCounter - bl IncrementResortGorgeousStepCounter - bl BirthIslandDeoxysStepCounter - mov r0, sp - adds r1, r4, 0 - adds r2, r6, 0 - bl sub_806D5E8 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CB74 - ldrb r0, [r7] - movs r1, 0x40 - orrs r0, r1 - strb r0, [r7] -_0806CB6C: - movs r0, 0x1 - b _0806CD22 - .align 2, 0 -_0806CB70: .4byte gUnknown_3005078 -_0806CB74: - ldrb r1, [r5] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0806CBFC - ldrb r0, [r5, 0x2] - cmp r0, 0 - beq _0806CB88 - cmp r0, r6 - bne _0806CBD8 -_0806CB88: - mov r7, sp - mov r0, sp - bl player_get_next_pos_and_height - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x2 - ldrsh r1, [r7, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r4, r0, 16 - mov r0, sp - adds r1, r4, 0 - adds r2, r6, 0 - bl sub_806D804 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CBC0 - ldr r0, _0806CBBC @ =gUnknown_3005078 - ldrb r1, [r0] - movs r2, 0x2 - b _0806CD16 - .align 2, 0 -_0806CBBC: .4byte gUnknown_3005078 -_0806CBC0: - mov r0, sp - bl player_get_pos_to_and_height - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x2 - ldrsh r1, [r7, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r4, r0, 16 -_0806CBD8: - ldrb r1, [r5] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0806CBFC - mov r0, r8 - bl is_it_battle_time_3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CBFC - ldr r0, _0806CBF8 @ =gUnknown_3005078 - ldrb r1, [r0] - movs r2, 0x2 - b _0806CD16 - .align 2, 0 -_0806CBF8: .4byte gUnknown_3005078 -_0806CBFC: - ldrb r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0806CC2C - ldrb r0, [r5, 0x2] - cmp r0, r6 - bne _0806CC2C - mov r0, sp - adds r1, r4, 0 - adds r2, r6, 0 - bl mapheader_run_first_tag2_script_list_match_conditionally - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CC2C - ldr r0, _0806CC28 @ =gUnknown_3005078 - ldrb r1, [r0] - movs r2, 0x10 - b _0806CD16 - .align 2, 0 -_0806CC28: .4byte gUnknown_3005078 -_0806CC2C: - mov r4, sp - mov r0, sp - bl player_get_next_pos_and_height - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r4, r0, 16 - ldrb r1, [r5] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0806CC74 - ldrb r0, [r5, 0x2] - cmp r0, r6 - bne _0806CC74 - mov r0, sp - adds r1, r4, 0 - adds r2, r6, 0 - bl sub_806D804 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CC74 - ldr r0, _0806CC70 @ =gUnknown_3005078 - ldrb r1, [r0] - movs r2, 0x10 - b _0806CD16 - .align 2, 0 -_0806CC70: .4byte gUnknown_3005078 -_0806CC74: - ldrb r1, [r5] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0806CC9C - mov r0, sp - adds r1, r4, 0 - adds r2, r6, 0 - bl sub_806CEA0 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CC9C - ldr r0, _0806CC98 @ =gUnknown_3005078 - ldrb r1, [r0] - movs r2, 0x1 - b _0806CD16 - .align 2, 0 -_0806CC98: .4byte gUnknown_3005078 -_0806CC9C: - ldrb r1, [r5] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0806CCCC - ldrb r0, [r5, 0x2] - cmp r0, r6 - bne _0806CCCC - mov r0, sp - adds r1, r4, 0 - adds r2, r6, 0 - bl map_warp_consider_2_to_inside - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CCCC - ldr r0, _0806CCC8 @ =gUnknown_3005078 - ldrb r1, [r0] - movs r2, 0x20 - b _0806CD16 - .align 2, 0 -_0806CCC8: .4byte gUnknown_3005078 -_0806CCCC: - ldrb r1, [r5] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0806CCFC - ldr r2, _0806CCF4 @ =gUnknown_3005078 - ldrb r0, [r2] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r0, _0806CCF8 @ =0x0000083e - bl FlagSet - movs r0, 0x6 - bl PlaySE - bl ShowStartMenu - b _0806CB6C - .align 2, 0 -_0806CCF4: .4byte gUnknown_3005078 -_0806CCF8: .4byte 0x0000083e -_0806CCFC: - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0806CD20 - bl UseRegisteredKeyItemOnField - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CD20 - ldr r0, _0806CD1C @ =gUnknown_3005078 - ldrb r1, [r0] - movs r2, 0x8 -_0806CD16: - orrs r1, r2 - strb r1, [r0] - b _0806CB6C - .align 2, 0 -_0806CD1C: .4byte gUnknown_3005078 -_0806CD20: - movs r0, 0 -_0806CD22: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_806CAC8 - - thumb_func_start sub_806CD30 -sub_806CD30: @ 806CD30 - push {r4,lr} - adds r4, r0, 0 - bl ScriptContext1_IsScriptSetUp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CDEA - ldr r1, _0806CD50 @ =gUnknown_20370A0 - ldrb r0, [r1] - cmp r0, 0 - beq _0806CD54 - subs r0, 0x1 - strb r0, [r1] - b _0806CDEA - .align 2, 0 -_0806CD50: .4byte gUnknown_20370A0 -_0806CD54: - bl sub_8069A04 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806CDEA - ldrb r0, [r4, 0x2] - cmp r0, 0 - beq _0806CDC0 - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - ldrb r1, [r4, 0x2] - cmp r0, r1 - beq _0806CDC0 - bl sub_80699D4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0806CDEA - ldrb r0, [r4, 0x2] - cmp r0, 0x2 - bne _0806CD8E - movs r0, 0x1 - bl sub_8069998 - b _0806CDB0 -_0806CD8E: - cmp r0, 0x1 - bne _0806CD9A - movs r0, 0x2 - bl sub_8069998 - b _0806CDB0 -_0806CD9A: - cmp r0, 0x3 - bne _0806CDA6 - movs r0, 0x3 - bl sub_8069998 - b _0806CDB0 -_0806CDA6: - cmp r0, 0x4 - bne _0806CDB0 - movs r0, 0x4 - bl sub_8069998 -_0806CDB0: - ldr r0, _0806CDBC @ =gUnknown_81A7ADB - bl ScriptContext1_SetupScript - bl ScriptContext2_Enable - b _0806CDEA - .align 2, 0 -_0806CDBC: .4byte gUnknown_81A7ADB -_0806CDC0: - ldrb r1, [r4] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0806CDEA - ldr r0, _0806CDF0 @ =gUnknown_81A7ADB - bl ScriptContext1_SetupScript - bl ScriptContext2_Enable - ldr r4, _0806CDF4 @ =sub_806CDF8 - adds r0, r4, 0 - bl FuncIsActiveTask - lsls r0, 24 - cmp r0, 0 - bne _0806CDEA - adds r0, r4, 0 - movs r1, 0x8 - bl CreateTask -_0806CDEA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0806CDF0: .4byte gUnknown_81A7ADB -_0806CDF4: .4byte sub_806CDF8 - thumb_func_end sub_806CD30 - - thumb_func_start sub_806CDF8 -sub_806CDF8: @ 806CDF8 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl ScriptContext2_IsEnabled - lsls r0, 24 - cmp r0, 0 - bne _0806CE18 - movs r0, 0x6 - bl PlaySE - bl ShowStartMenu - adds r0, r4, 0 - bl DestroyTask -_0806CE18: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_806CDF8 - - thumb_func_start player_get_pos_to_and_height -player_get_pos_to_and_height: @ 806CE20 - push {r4,lr} - adds r4, r0, 0 - adds r1, r4, 0x2 - bl PlayerGetDestCoords - bl PlayerGetZCoord - strb r0, [r4, 0x4] - pop {r4} - pop {r0} - bx r0 - thumb_func_end player_get_pos_to_and_height - - thumb_func_start player_get_next_pos_and_height -player_get_next_pos_and_height: @ 806CE38 - push {r4,r5,lr} - sub sp, 0x4 - adds r5, r0, 0 - adds r1, r5, 0x2 - bl GetXYCoordsOneStepInFrontOfPlayer - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetZCoordAt - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0806CE6A - bl PlayerGetZCoord -_0806CE6A: - strb r0, [r5, 0x4] - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end player_get_next_pos_and_height - - thumb_func_start cur_mapdata_block_role_at_player_pos -cur_mapdata_block_role_at_player_pos: @ 806CE74 - push {r4,lr} - sub sp, 0x4 - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl PlayerGetDestCoords - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - movs r2, 0 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 16 - lsrs r0, 16 - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end cur_mapdata_block_role_at_player_pos - - thumb_func_start sub_806CEA0 -sub_806CEA0: @ 806CEA0 - push {r4,lr} - lsls r2, 24 - lsrs r2, 24 - lsls r1, 24 - lsrs r1, 24 - bl TryGetScriptOnPressingA - adds r4, r0, 0 - cmp r4, 0 - bne _0806CEB8 - movs r0, 0 - b _0806CED2 -_0806CEB8: - ldr r0, _0806CED8 @ =PalletTown_PlayersHouse_2F_EventScript_PC - cmp r4, r0 - beq _0806CECA - ldr r0, _0806CEDC @ =EventScript_PC - cmp r4, r0 - beq _0806CECA - movs r0, 0x5 - bl PlaySE -_0806CECA: - adds r0, r4, 0 - bl ScriptContext1_SetupScript - movs r0, 0x1 -_0806CED2: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0806CED8: .4byte PalletTown_PlayersHouse_2F_EventScript_PC -_0806CEDC: .4byte EventScript_PC - thumb_func_end sub_806CEA0 - - thumb_func_start TryGetScriptOnPressingA -TryGetScriptOnPressingA: @ 806CEE0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r6, r0, 0 - lsls r1, 24 - lsrs r5, r1, 24 - mov r8, r5 - lsls r2, 24 - lsrs r4, r2, 24 - adds r7, r4, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_806CFF4 - cmp r0, 0 - bne _0806CF2C - adds r0, r6, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_806D0E4 - cmp r0, 0 - bne _0806CF2C - adds r0, r6, 0 - adds r1, r5, 0 - adds r2, r4, 0 - bl sub_806D1F0 - cmp r0, 0 - bne _0806CF2C - adds r0, r6, 0 - mov r1, r8 - adds r2, r7, 0 - bl sub_806D548 - cmp r0, 0 - bne _0806CF2C - movs r0, 0 -_0806CF2C: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end TryGetScriptOnPressingA - - thumb_func_start sub_806CF38 -sub_806CF38: @ 806CF38 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r2, 24 - lsrs r6, r2, 24 - movs r1, 0 - ldrsh r0, [r4, r1] - movs r2, 0x2 - ldrsh r1, [r4, r2] - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl MetatileBehavior_IsCounter - lsls r0, 24 - cmp r0, 0 - bne _0806CF60 - ldrh r0, [r4] - ldrh r1, [r4, 0x2] - b _0806CF7E -_0806CF60: - ldr r1, _0806CFA4 @ =gDirectionToVectors - lsls r2, r6, 3 - adds r0, r2, r1 - ldr r3, [r0] - ldrh r0, [r4] - adds r0, r3 - lsls r0, 16 - lsrs r0, 16 - adds r1, 0x4 - adds r2, r1 - ldr r2, [r2] - ldrh r1, [r4, 0x2] - adds r1, r2 - lsls r1, 16 - lsrs r1, 16 -_0806CF7E: - ldrb r2, [r4, 0x4] - bl GetObjectEventIdByXYZ - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x10 - beq _0806CF9E - ldr r1, _0806CFA8 @ =gObjectEvents - lsls r2, r3, 3 - adds r0, r2, r3 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x8] - adds r5, r1, 0 - cmp r0, 0xFF - bne _0806CFAC -_0806CF9E: - movs r0, 0 - b _0806CFDE - .align 2, 0 -_0806CFA4: .4byte gDirectionToVectors -_0806CFA8: .4byte gObjectEvents -_0806CFAC: - movs r4, 0 - ldr r1, _0806CFE4 @ =gLinkPlayerObjectEvents -_0806CFB0: - ldrb r0, [r1] - cmp r0, 0x1 - bne _0806CFBC - ldrb r0, [r1, 0x2] - cmp r0, r3 - beq _0806CF9E -_0806CFBC: - adds r1, 0x4 - adds r4, 0x1 - cmp r4, 0x3 - ble _0806CFB0 - ldr r0, _0806CFE8 @ =gSelectedObjectEvent - strb r3, [r0] - ldr r1, _0806CFEC @ =gSpecialVar_LastTalked - adds r0, r2, r3 - lsls r0, 2 - adds r0, r5 - ldrb r0, [r0, 0x8] - strh r0, [r1] - ldr r0, _0806CFF0 @ =gSpecialVar_Facing - strh r6, [r0] - adds r0, r3, 0 - bl GetObjectEventScriptPointerByObjectEventId -_0806CFDE: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0806CFE4: .4byte gLinkPlayerObjectEvents -_0806CFE8: .4byte gSelectedObjectEvent -_0806CFEC: .4byte gSpecialVar_LastTalked -_0806CFF0: .4byte gSpecialVar_Facing - thumb_func_end sub_806CF38 - - thumb_func_start sub_806CFF4 -sub_806CFF4: @ 806CFF4 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r4, r0, 0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r8, r2 - ldrh r0, [r4] - ldrh r1, [r4, 0x2] - ldrb r2, [r4, 0x4] - bl GetObjectEventIdByXYZ - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x10 - beq _0806D02A - ldr r2, _0806D098 @ =gObjectEvents - lsls r1, r5, 3 - adds r0, r1, r5 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x8] - adds r6, r1, 0 - cmp r0, 0xFF - bne _0806D078 -_0806D02A: - adds r0, r7, 0 - bl MetatileBehavior_IsCounter - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806D092 - ldr r1, _0806D09C @ =gDirectionToVectors - mov r0, r8 - lsls r2, r0, 3 - adds r0, r2, r1 - ldr r3, [r0] - ldrh r0, [r4] - adds r0, r3 - lsls r0, 16 - lsrs r0, 16 - adds r1, 0x4 - adds r2, r1 - ldr r2, [r2] - ldrh r1, [r4, 0x2] - adds r1, r2 - lsls r1, 16 - lsrs r1, 16 - ldrb r2, [r4, 0x4] - bl GetObjectEventIdByXYZ - lsls r0, 24 - lsrs r5, r0, 24 - cmp r5, 0x10 - beq _0806D092 - ldr r2, _0806D098 @ =gObjectEvents - lsls r1, r5, 3 - adds r0, r1, r5 - lsls r0, 2 - adds r0, r2 - ldrb r0, [r0, 0x8] - adds r6, r1, 0 - cmp r0, 0xFF - beq _0806D092 -_0806D078: - bl InUnionRoom - cmp r0, 0x1 - bne _0806D0A0 - adds r0, r6, r5 - lsls r0, 2 - ldr r1, _0806D098 @ =gObjectEvents - adds r0, r1 - bl ObjectEventCheckHeldMovementStatus - lsls r0, 24 - cmp r0, 0 - bne _0806D0A0 -_0806D092: - movs r0, 0 - b _0806D0C8 - .align 2, 0 -_0806D098: .4byte gObjectEvents -_0806D09C: .4byte gDirectionToVectors -_0806D0A0: - ldr r0, _0806D0D4 @ =gSelectedObjectEvent - strb r5, [r0] - ldr r4, _0806D0D8 @ =gSpecialVar_LastTalked - ldr r1, _0806D0DC @ =gObjectEvents - adds r0, r6, r5 - lsls r0, 2 - adds r0, r1 - ldrb r0, [r0, 0x8] - strh r0, [r4] - ldr r0, _0806D0E0 @ =gSpecialVar_Facing - mov r1, r8 - strh r1, [r0] - adds r0, r5, 0 - bl GetObjectEventScriptPointerByObjectEventId - adds r1, r0, 0 - ldrb r0, [r4] - bl GetRamScript - adds r1, r0, 0 -_0806D0C8: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0806D0D4: .4byte gSelectedObjectEvent -_0806D0D8: .4byte gSpecialVar_LastTalked -_0806D0DC: .4byte gObjectEvents -_0806D0E0: .4byte gSpecialVar_Facing - thumb_func_end sub_806CFF4 - - thumb_func_start sub_806D0E4 -sub_806D0E4: @ 806D0E4 + thumb_func_start GetInteractedBackgroundEventScript +GetInteractedBackgroundEventScript: @ 806D0E4 push {r4-r7,lr} lsls r1, 24 lsrs r7, r1, 24 @@ -1202,10 +132,10 @@ _0806D1E6: bx r1 .align 2, 0 _0806D1EC: .4byte gSpecialVar_Facing - thumb_func_end sub_806D0E4 + thumb_func_end GetInteractedBackgroundEventScript - thumb_func_start sub_806D1F0 -sub_806D1F0: @ 806D1F0 + thumb_func_start GetInteractedMetatileScript +GetInteractedMetatileScript: @ 806D1F0 push {r4,r5,lr} lsls r1, 24 lsrs r4, r1, 24 @@ -1602,10 +532,10 @@ _0806D53E: bx r1 .align 2, 0 _0806D544: .4byte gUnknown_81A76E7 - thumb_func_end sub_806D1F0 + thumb_func_end GetInteractedMetatileScript - thumb_func_start sub_806D548 -sub_806D548: @ 806D548 + thumb_func_start GetInteractedWaterScript +GetInteractedWaterScript: @ 806D548 push {r4,lr} lsls r1, 24 lsrs r4, r1, 24 @@ -1680,10 +610,10 @@ _0806D5E2: pop {r4} pop {r1} bx r1 - thumb_func_end sub_806D548 + thumb_func_end GetInteractedWaterScript - thumb_func_start sub_806D5E8 -sub_806D5E8: @ 806D5E8 + thumb_func_start TryStartStepBasedScript +TryStartStepBasedScript: @ 806D5E8 push {r4-r6,lr} adds r5, r0, 0 lsls r1, 16 @@ -1741,7 +671,7 @@ _0806D65A: pop {r4-r6} pop {r1} bx r1 - thumb_func_end sub_806D5E8 + thumb_func_end TryStartStepBasedScript thumb_func_start sub_806D660 sub_806D660: @ 806D660 @@ -1961,15 +891,15 @@ RestartWildEncounterImmunitySteps: @ 806D7E8 bx r0 thumb_func_end RestartWildEncounterImmunitySteps - thumb_func_start is_it_battle_time_3 -is_it_battle_time_3: @ 806D7F4 + thumb_func_start CheckStandardWildEncounter +CheckStandardWildEncounter: @ 806D7F4 push {lr} bl TryStandardWildEncounter lsls r0, 24 lsrs r0, 24 pop {r1} bx r1 - thumb_func_end is_it_battle_time_3 + thumb_func_end CheckStandardWildEncounter thumb_func_start sub_806D804 sub_806D804: @ 806D804 @@ -2159,8 +1089,8 @@ _0806D958: _0806D960: .4byte Test_EventScript_Sign thumb_func_end sub_806D928 - thumb_func_start mapheader_run_first_tag2_script_list_match_conditionally -mapheader_run_first_tag2_script_list_match_conditionally: @ 806D964 + thumb_func_start TryArrowWarp +TryArrowWarp: @ 806D964 push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -2241,7 +1171,7 @@ _0806DA02: pop {r4-r7} pop {r1} bx r1 - thumb_func_end mapheader_run_first_tag2_script_list_match_conditionally + thumb_func_end TryArrowWarp thumb_func_start sub_806DA10 sub_806DA10: @ 806DA10 @@ -2600,8 +1530,8 @@ _0806DCC4: _0806DCCC: .4byte gSaveBlock1Ptr thumb_func_end sub_806DC54 - thumb_func_start map_warp_consider_2_to_inside -map_warp_consider_2_to_inside: @ 806DCD0 + thumb_func_start TryDoorWarp +TryDoorWarp: @ 806DCD0 push {r4-r7,lr} adds r6, r0, 0 lsls r1, 16 @@ -2649,7 +1579,7 @@ _0806DD32: pop {r4-r7} pop {r1} bx r1 - thumb_func_end map_warp_consider_2_to_inside + thumb_func_end TryDoorWarp thumb_func_start map_warp_check map_warp_check: @ 806DD38 @@ -3089,7 +2019,7 @@ GetObjectEventScriptPointerForComparison: @ 806E050 lsrs r4, 24 mov r5, sp mov r0, sp - bl player_get_next_pos_and_height + bl GetInFrontOfPlayerPosition mov r0, sp movs r1, 0 ldrsh r0, [r0, r1] @@ -3101,7 +2031,7 @@ GetObjectEventScriptPointerForComparison: @ 806E050 lsrs r1, 24 mov r0, sp adds r2, r4, 0 - bl sub_806CFF4 + bl GetInteractedObjectEventScript add sp, 0x8 pop {r4,r5} pop {r1} @@ -3115,7 +2045,7 @@ SetCableClubWarp: @ 806E08C bl GetPlayerMovementDirection mov r4, sp mov r0, sp - bl player_get_pos_to_and_height + bl GetPlayerPosition mov r0, sp movs r1, 0 ldrsh r0, [r0, r1] diff --git a/asm/overworld.s b/asm/overworld.s index 179d79fdc..8f928c555 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -3259,7 +3259,7 @@ sub_805644C: @ 805644C bl sub_805BEB8 mov r6, sp mov r0, sp - bl sub_806C888 + bl FieldClearPlayerInput mov r0, sp adds r1, r5, 0 adds r2, r4, 0 @@ -3271,7 +3271,7 @@ sub_805644C: @ 805644C cmp r0, 0 bne _080564BA mov r0, sp - bl sub_806CAC8 + bl ProcessPlayerFieldInput cmp r0, 0x1 bne _080564B0 ldr r0, _080564A8 @ =gUnknown_3005E88 @@ -3308,7 +3308,7 @@ sub_80564C8: @ 80564C8 bl sub_805BEB8 bl sub_8111C68 mov r0, sp - bl sub_806C888 + bl FieldClearPlayerInput ldr r0, _08056508 @ =gUnknown_3005E90 ldr r0, [r0] str r0, [sp] @@ -3319,7 +3319,7 @@ sub_80564C8: @ 80564C8 cmp r0, 0 bne _08056512 mov r0, sp - bl sub_806CAC8 + bl ProcessPlayerFieldInput cmp r0, 0x1 bne _0805650C bl ScriptContext2_Enable @@ -3339,7 +3339,7 @@ _08056512: bl RunQuestLogCB _08056522: ldr r0, _08056530 @ =gUnknown_3005E90 - bl sub_806C888 + bl FieldClearPlayerInput add sp, 0x4 pop {r0} bx r0 @@ -6825,7 +6825,7 @@ _08058118: ldrb r1, [r4, 0xC] ldrb r2, [r4, 0x3] mov r0, sp - bl sub_806CF38 + bl GetInteractedLinkPlayerScript _08058122: add sp, 0x8 pop {r4} diff --git a/data/maps/PalletTown/scripts.inc b/data/maps/PalletTown/scripts.inc index eb8904713..43a56496e 100644 --- a/data/maps/PalletTown/scripts.inc +++ b/data/maps/PalletTown/scripts.inc @@ -18,7 +18,7 @@ PalletTown_OnTransition:: @ 8165465 end PalletTown_EventScript_TryReadySignLady:: @ 8165488 - goto_if_unset FLAG_PALLET_TOWN_LADY_MOVED_FROM_SIGN, EventScript_Return + goto_if_unset FLAG_OPENED_START_MENU, EventScript_Return compare VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1 goto_if_ge EventScript_Return setvar VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1 @@ -447,7 +447,7 @@ PalletTown_EventScript_SignLadyShowSign:: @ 8165894 closemessage delay 20 textcolor 3 - setflag FLAG_PALLET_TOWN_LADY_MOVED_FROM_SIGN + setflag FLAG_OPENED_START_MENU setvar VAR_MAP_SCENE_PALLET_TOWN_SIGN_LADY, 1 setvar SIGN_LADY_READY, FALSE special sub_80699E0 diff --git a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc index 395d4d385..461318e35 100644 --- a/data/maps/PalletTown_ProfessorOaksLab/scripts.inc +++ b/data/maps/PalletTown_ProfessorOaksLab/scripts.inc @@ -1274,7 +1274,7 @@ PalletTown_ProfessorOaksLab_EventScript_RivalTakesStarter:: @ 8169D2F playfanfare MUS_FAN5 waitfanfare setvar VAR_MAP_SCENE_PALLET_TOWN_PROFESSOR_OAKS_LAB, 3 - call_if_set FLAG_PALLET_TOWN_LADY_MOVED_FROM_SIGN, PalletTown_ProfessorOaksLab_EventScript_ReadyEndSignLadyScene + call_if_set FLAG_OPENED_START_MENU, PalletTown_ProfessorOaksLab_EventScript_ReadyEndSignLadyScene release end diff --git a/include/constants/flags.h b/include/constants/flags.h index 0bc96eb35..ccac1da3b 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -1360,7 +1360,7 @@ #define FLAG_SYS_RIBBON_GET (SYS_FLAGS + 0x3B) #define FLAG_SYS_SAW_HELP_SYSTEM_INTRO (SYS_FLAGS + 0x3C) #define FLAG_0x83D (SYS_FLAGS + 0x3D) -#define FLAG_PALLET_TOWN_LADY_MOVED_FROM_SIGN (SYS_FLAGS + 0x3E) +#define FLAG_OPENED_START_MENU (SYS_FLAGS + 0x3E) #define FLAG_0x83F (SYS_FLAGS + 0x3F) #define FLAG_SYS_NATIONAL_DEX (SYS_FLAGS + 0x40) #define FLAG_SYS_PC_STORAGE_DISABLED (SYS_FLAGS + 0x41) diff --git a/include/event_scripts.h b/include/event_scripts.h index c211e3a34..9b1f65fef 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1212,4 +1212,8 @@ extern const u8 CableClub_Text_PleaseWaitBCancel[]; // fldeff_flash extern const u8 EventScript_FldEffFlash[]; +// field_control_avatar +extern const u8 gUnknown_81A7ADB[]; +extern const u8 PalletTown_PlayersHouse_2F_EventScript_PC[]; + #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h index 4311a2b29..587586746 100644 --- a/include/field_control_avatar.h +++ b/include/field_control_avatar.h @@ -3,7 +3,25 @@ #include "global.h" -extern u32 gUnknown_3005078; +struct FieldInput +{ + bool8 pressedAButton:1; + bool8 checkStandardWildEncounter:1; + bool8 pressedStartButton:1; + bool8 pressedSelectButton:1; + bool8 heldDirection:1; + bool8 heldDirection2:1; + bool8 tookStep:1; + bool8 pressedBButton:1; + bool8 pressedRButton:1; + bool8 input_field_1_0:1; + bool8 input_field_1_1:1; + bool8 input_field_1_2:1; + bool8 input_field_1_3:1; + u8 dpadDirection; +}; + +extern struct FieldInput gUnknown_3005078; void RestartWildEncounterImmunitySteps(void); void ClearPoisonStepCounter(void); diff --git a/include/field_specials.h b/include/field_specials.h index b3291bf54..9c44c35bc 100644 --- a/include/field_specials.h +++ b/include/field_specials.h @@ -28,5 +28,8 @@ u8 GetUnlockedSeviiAreas(void); u32 GetPlayerTrainerId(void); bool8 CutMoveRuinValleyCheck(void); void CutMoveOpenDottedHoleDoor(void); +void RunMassageCooldownStepCounter(void); +void IncrementResortGorgeousStepCounter(void); +void IncrementBirthIslandRockStepCount(void); #endif // GUARD_FIELD_SPECIALS_H diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h index e1998afdf..2d7dc104e 100644 --- a/include/global.fieldmap.h +++ b/include/global.fieldmap.h @@ -318,6 +318,14 @@ enum COLLISION_HORIZONTAL_RAIL, }; +// player running states +enum +{ + NOT_MOVING, + TURN_DIRECTION, // not the same as turning! turns your avatar without moving. also known as a turn frame in some circles + MOVING, +}; + // player tile transition states enum { diff --git a/include/item_menu.h b/include/item_menu.h index 27bd73e72..fe593ff02 100644 --- a/include/item_menu.h +++ b/include/item_menu.h @@ -41,5 +41,6 @@ void InitOldManBag(void); void Pocket_CalculateNItemsAndMaxShowed(u8 pocketId); void PocketCalculateInitialCursorPosAndItemsAbove(u8 pocketId); void GoToBagMenu(u8 menuType, u8 pocket, MainCallback callback); +bool8 UseRegisteredKeyItemOnField(void); #endif //GUARD_ITEM_MENU_H diff --git a/include/script.h b/include/script.h index 2fb732396..38da71774 100644 --- a/include/script.h +++ b/include/script.h @@ -53,12 +53,12 @@ void mapheader_run_script_with_tag_x3(void); void mapheader_run_script_with_tag_x5(void); void mapheader_run_script_with_tag_x7(void); void mapheader_run_script_with_tag_x6(void); -bool8 mapheader_run_first_tag2_script_list_match(void); +bool8 TryRunOnFrameMapScript(void); void mapheader_run_first_tag4_script_list_match(void); u32 CalculateRamScriptChecksum(void); void ClearRamScript(void); bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId); -u8 *GetRamScript(u8 objectId, u8 *script); +const u8 *GetRamScript(u8 objectId, const u8 *script); bool32 sub_80991F8(void); u8 *sub_8099244(void); void sub_80992A0(u8 *script, u16 scriptSize); @@ -73,7 +73,12 @@ void sub_8069970(void); void sub_8069A20(void); void sub_8069A2C(void); bool8 IsMsgSignPost(void); +bool8 sub_806997C(void); +u8 sub_80699B0(void); +void sub_8069A54(void); +bool8 sub_8069A04(void); extern const u8 *gRAMScriptPtr; +extern u8 gUnknown_20370A0; #endif // GUARD_SCRIPT_H diff --git a/ld_script.txt b/ld_script.txt index 01e1d0eb3..203cab28f 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -99,6 +99,7 @@ SECTIONS { src/text_window_graphics.o(.text); src/script.o(.text); src/scrcmd.o(.text); + src/field_control_avatar.o(.text); asm/field_control_avatar.o(.text); src/event_data.o(.text); src/coord_event_weather.o(.text); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c new file mode 100644 index 000000000..bf743d071 --- /dev/null +++ b/src/field_control_avatar.c @@ -0,0 +1,428 @@ +#include "global.h" +#include "gflib.h" +#include "bike.h" +#include "event_data.h" +#include "event_object_movement.h" +#include "event_scripts.h" +#include "fieldmap.h" +#include "field_control_avatar.h" +#include "field_player_avatar.h" +#include "field_specials.h" +#include "item_menu.h" +#include "link.h" +#include "menews_jisan.h" +#include "metatile_behavior.h" +#include "overworld.h" +#include "renewable_hidden_items.h" +#include "quest_log.h" +#include "script.h" +#include "start_menu.h" +#include "trainer_see.h" +#include "constants/songs.h" +#include "constants/event_objects.h" + +void sub_806CA4C(struct FieldInput *input, u16 *newKeys, u16 *heldKeys); +bool8 sub_80699D4(void); +void sub_806CDF8(u8 taskId); +void GetPlayerPosition(struct MapPosition * position); +void GetInFrontOfPlayerPosition(struct MapPosition * position); +u16 GetPlayerCurMetatileBehavior(void); +bool8 TryStartStepBasedScript(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +bool8 TryArrowWarp(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +bool8 TryDoorWarp(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +bool8 TryStartInteractionScript(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +const u8 *GetInteractionScript(struct MapPosition * position, u8 metatileBehavior, u8 playerDirection); +const u8 *GetInteractedObjectEventScript(struct MapPosition * position, u8 metatileBehavior, u8 playerDirection); +const u8 *GetInteractedBackgroundEventScript(struct MapPosition * position, u8 metatileBehavior, u8 playerDirection); +const u8 *GetInteractedMetatileScript(struct MapPosition * position, u8 metatileBehavior, u8 playerDirection); +const u8 *GetInteractedWaterScript(struct MapPosition * position, u8 metatileBehavior, u8 playerDirection); +bool8 sub_806D804(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +bool8 CheckStandardWildEncounter(u32 encounter); + +struct FieldInput gUnknown_3005078; + +void FieldClearPlayerInput(struct FieldInput *input) +{ + input->pressedAButton = FALSE; + input->checkStandardWildEncounter = FALSE; + input->pressedStartButton = FALSE; + input->pressedSelectButton = FALSE; + input->heldDirection = FALSE; + input->heldDirection2 = FALSE; + input->tookStep = FALSE; + input->pressedBButton = FALSE; + input->pressedRButton = FALSE; + input->input_field_1_0 = FALSE; + input->input_field_1_1 = FALSE; + input->input_field_1_2 = FALSE; + input->input_field_1_3 = FALSE; + input->dpadDirection = 0; +} + +void FieldGetPlayerInput(struct FieldInput *input, u16 newKeys, u16 heldKeys) +{ + u8 runningState = gPlayerAvatar.runningState; + u8 tileTransitionState = gPlayerAvatar.tileTransitionState; + bool8 forcedMove = MetatileBehavior_IsForcedMovementTile(GetPlayerCurMetatileBehavior()); + + if (!ScriptContext1_IsScriptSetUp() && sub_806997C() == TRUE) + { + sub_806CA4C(input, &newKeys, &heldKeys); + } + if ((tileTransitionState == T_TILE_CENTER && forcedMove == FALSE) || tileTransitionState == T_NOT_MOVING) + { + if (GetPlayerSpeed() != 4) + { + if ((newKeys & START_BUTTON) && !(gPlayerAvatar.flags & 0x40)) + input->pressedStartButton = TRUE; + if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) + { + if (!(gPlayerAvatar.flags & 0x40)) + { + if (newKeys & SELECT_BUTTON) + input->pressedSelectButton = TRUE; + if (newKeys & A_BUTTON) + input->pressedAButton = TRUE; + if (newKeys & B_BUTTON) + input->pressedBButton = TRUE; + if (newKeys & R_BUTTON) + input->pressedRButton = TRUE; + } + } + } + + if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) + { + if (heldKeys & (DPAD_UP | DPAD_DOWN | DPAD_LEFT | DPAD_RIGHT)) + { + input->heldDirection = TRUE; + input->heldDirection2 = TRUE; + } + } + + } + + if (forcedMove == FALSE) + { + if (tileTransitionState == T_TILE_CENTER && runningState == MOVING) + input->tookStep = TRUE; + if (forcedMove == FALSE && tileTransitionState == T_TILE_CENTER) + input->checkStandardWildEncounter = TRUE; + } + + if (gQuestLogState != QL_STATE_2 && gQuestLogState != QL_STATE_3) + { + if (heldKeys & DPAD_UP) + input->dpadDirection = DIR_NORTH; + else if (heldKeys & DPAD_DOWN) + input->dpadDirection = DIR_SOUTH; + else if (heldKeys & DPAD_LEFT) + input->dpadDirection = DIR_WEST; + else if (heldKeys & DPAD_RIGHT) + input->dpadDirection = DIR_EAST; + } +} + +void sub_806CA4C(struct FieldInput *input, u16 *newKeys, u16 *heldKeys) +{ + switch (sub_80699B0()) + { + case 0: + break; + case 1: + *heldKeys = *newKeys = DPAD_UP; + break; + case 2: + *heldKeys = *newKeys = DPAD_DOWN; + break; + case 3: + *heldKeys = *newKeys = DPAD_LEFT; + break; + case 4: + *heldKeys = *newKeys = DPAD_RIGHT; + break; + case 5: + *heldKeys = *newKeys = L_BUTTON; + break; + case 6: + *heldKeys = *newKeys = R_BUTTON; + break; + case 7: + *heldKeys = *newKeys = START_BUTTON; + break; + case 8: + *heldKeys = *newKeys = SELECT_BUTTON; + break; + } + sub_8069970(); + sub_80699A4(); +} + +int ProcessPlayerFieldInput(struct FieldInput *input) +{ + struct MapPosition position; + u8 playerDirection; + u16 metatileBehavior; + u32 r8; + + sub_8069A54(); + playerDirection = GetPlayerFacingDirection(); + GetPlayerPosition(&position); + r8 = MapGridGetMetatileAttributeAt(position.x, position.y, 0xFF); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + + FieldClearPlayerInput(&gUnknown_3005078); + gUnknown_3005078.dpadDirection = input->dpadDirection; + + if (CheckForTrainersWantingBattle() == TRUE) + return TRUE; + + if (TryRunOnFrameMapScript() == TRUE) + return TRUE; + + if (input->tookStep) + { + IncrementGameStat(GAME_STAT_STEPS); + MENewsJisanStepCounter(); + IncrementRenewableHiddenItemStepCounter(); + RunMassageCooldownStepCounter(); + IncrementResortGorgeousStepCounter(); + IncrementBirthIslandRockStepCount(); + if (TryStartStepBasedScript(&position, metatileBehavior, playerDirection) == TRUE) + { + gUnknown_3005078.tookStep = TRUE; + return TRUE; + } + } + if (input->checkStandardWildEncounter) + { + if (input->dpadDirection == 0 || input->dpadDirection == playerDirection) + { + GetInFrontOfPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (sub_806D804(&position, metatileBehavior, playerDirection) == TRUE) + { + gUnknown_3005078.checkStandardWildEncounter = TRUE; + return TRUE; + } + GetPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + } + } + if (input->checkStandardWildEncounter && CheckStandardWildEncounter(r8) == TRUE) + { + gUnknown_3005078.checkStandardWildEncounter = TRUE; + return TRUE; + } + if (input->heldDirection && input->dpadDirection == playerDirection) + { + if (TryArrowWarp(&position, metatileBehavior, playerDirection) == TRUE) + { + gUnknown_3005078.heldDirection = TRUE; + return TRUE; + } + } + + GetInFrontOfPlayerPosition(&position); + metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y); + if (input->heldDirection && input->dpadDirection == playerDirection) + { + if (sub_806D804(&position, metatileBehavior, playerDirection) == TRUE) + { + gUnknown_3005078.heldDirection = TRUE; + return TRUE; + } + } + + if (input->pressedAButton && TryStartInteractionScript(&position, metatileBehavior, playerDirection) == TRUE) + { + gUnknown_3005078.pressedAButton = TRUE; + return TRUE; + } + + if (input->heldDirection2 && input->dpadDirection == playerDirection) + { + if (TryDoorWarp(&position, metatileBehavior, playerDirection) == TRUE) + { + gUnknown_3005078.heldDirection2 = TRUE; + return TRUE; + } + } + + if (input->pressedStartButton) + { + gUnknown_3005078.pressedStartButton = TRUE; + FlagSet(FLAG_OPENED_START_MENU); + PlaySE(SE_WIN_OPEN); + ShowStartMenu(); + return TRUE; + } + if (input->pressedSelectButton && UseRegisteredKeyItemOnField() == TRUE) + { + gUnknown_3005078.pressedSelectButton = TRUE; + return TRUE; + } + + return FALSE; +} + +void sub_806CD30(struct FieldInput * input) +{ + if (ScriptContext1_IsScriptSetUp() == TRUE) + { + if (gUnknown_20370A0 != 0) + gUnknown_20370A0--; + else if (sub_8069A04() == TRUE) + { + if (input->dpadDirection != 0 && GetPlayerFacingDirection() != input->dpadDirection) + { + if (sub_80699D4() == TRUE) + return; + if (input->dpadDirection == DIR_NORTH) + sub_8069998(1); + else if (input->dpadDirection == DIR_SOUTH) + sub_8069998(2); + else if (input->dpadDirection == DIR_WEST) + sub_8069998(3); + else if (input->dpadDirection == DIR_EAST) + sub_8069998(4); + ScriptContext1_SetupScript(gUnknown_81A7ADB); + ScriptContext2_Enable(); + } + else if (input->pressedStartButton) + { + ScriptContext1_SetupScript(gUnknown_81A7ADB); + ScriptContext2_Enable(); + if (!FuncIsActiveTask(sub_806CDF8)) + CreateTask(sub_806CDF8, 8); + } + } + } +} + +void sub_806CDF8(u8 taskId) +{ + if (!ScriptContext2_IsEnabled()) + { + PlaySE(SE_WIN_OPEN); + ShowStartMenu(); + DestroyTask(taskId); + } +} + +void GetPlayerPosition(struct MapPosition *position) +{ + PlayerGetDestCoords(&position->x, &position->y); + position->height = PlayerGetZCoord(); +} + +void GetInFrontOfPlayerPosition(struct MapPosition *position) +{ + s16 x, y; + + GetXYCoordsOneStepInFrontOfPlayer(&position->x, &position->y); + PlayerGetDestCoords(&x, &y); + if (MapGridGetZCoordAt(x, y) != 0) + position->height = PlayerGetZCoord(); + else + position->height = 0; +} + +u16 GetPlayerCurMetatileBehavior(void) +{ + s16 x, y; + + PlayerGetDestCoords(&x, &y); + return MapGridGetMetatileBehaviorAt(x, y); +} + +bool8 TryStartInteractionScript(struct MapPosition *position, u16 metatileBehavior, u8 direction) +{ + const u8 *script = GetInteractionScript(position, metatileBehavior, direction); + if (script == NULL) + return FALSE; + + // Don't play interaction sound for certain scripts. + if (script != PalletTown_PlayersHouse_2F_EventScript_PC + && script != EventScript_PC) + PlaySE(SE_SELECT); + + ScriptContext1_SetupScript(script); + return TRUE; +} + +const u8 *GetInteractionScript(struct MapPosition *position, u8 metatileBehavior, u8 direction) +{ + const u8 *script = GetInteractedObjectEventScript(position, metatileBehavior, direction); + if (script != NULL) + return script; + + script = GetInteractedBackgroundEventScript(position, metatileBehavior, direction); + if (script != NULL) + return script; + + script = GetInteractedMetatileScript(position, metatileBehavior, direction); + if (script != NULL) + return script; + + script = GetInteractedWaterScript(position, metatileBehavior, direction); + if (script != NULL) + return script; + + return NULL; +} + +const u8 *GetInteractedLinkPlayerScript(struct MapPosition *position, u8 metatileBehavior, u8 direction) +{ + u8 objectEventId; + s32 i; + + if (!MetatileBehavior_IsCounter(MapGridGetMetatileBehaviorAt(position->x, position->y))) + objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height); + else + objectEventId = GetObjectEventIdByXYZ(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->height); + + if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER) + return NULL; + + for (i = 0; i < 4; i++) + { + if (gLinkPlayerObjectEvents[i].active == TRUE && gLinkPlayerObjectEvents[i].objEventId == objectEventId) + return NULL; + } + + gSelectedObjectEvent = objectEventId; + gSpecialVar_LastTalked = gObjectEvents[objectEventId].localId; + gSpecialVar_Facing = direction; + return GetObjectEventScriptPointerByObjectEventId(objectEventId); +} + +const u8 *GetInteractedObjectEventScript(struct MapPosition *position, u8 metatileBehavior, u8 direction) +{ + u8 objectEventId; + const u8 *script; + + objectEventId = GetObjectEventIdByXYZ(position->x, position->y, position->height); + if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER) + { + if (MetatileBehavior_IsCounter(metatileBehavior) != TRUE) + return NULL; + + // Look for an object event on the other side of the counter. + objectEventId = GetObjectEventIdByXYZ(position->x + gDirectionToVectors[direction].x, position->y + gDirectionToVectors[direction].y, position->height); + if (objectEventId == OBJECT_EVENTS_COUNT || gObjectEvents[objectEventId].localId == OBJ_EVENT_ID_PLAYER) + return NULL; + } + + if (InUnionRoom() == TRUE && !ObjectEventCheckHeldMovementStatus(&gObjectEvents[objectEventId])) + return NULL; + + gSelectedObjectEvent = objectEventId; + gSpecialVar_LastTalked = gObjectEvents[objectEventId].localId; + gSpecialVar_Facing = direction; + + script = GetObjectEventScriptPointerByObjectEventId(objectEventId); + + script = GetRamScript(gSpecialVar_LastTalked, script); + return script; +} diff --git a/src/field_specials.c b/src/field_specials.c index 474fcd081..86ae03ddb 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -2435,7 +2435,7 @@ static void Task_WaitDeoxysFieldEffect(u8 taskId) } } -void BirthIslandDeoxysStepCounter(void) +void IncrementBirthIslandRockStepCount(void) { u16 count = VarGet(VAR_DEOXYS_INTERACTION_STEP_COUNTER); if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BIRTH_ISLAND_EXTERIOR) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BIRTH_ISLAND_EXTERIOR)) diff --git a/src/script.c b/src/script.c index 4b8565589..7c7c3b970 100644 --- a/src/script.c +++ b/src/script.c @@ -21,18 +21,18 @@ enum EWRAM_DATA u8 gUnknown_20370A0 = 0; EWRAM_DATA const u8 *gRAMScriptPtr = NULL; -// ewram bss -/*IWRAM_DATA*/ static u8 sScriptContext1Status; -/*IWRAM_DATA*/ static u32 sUnusedVariable1; -/*IWRAM_DATA*/ static struct ScriptContext sScriptContext1; -/*IWRAM_DATA*/ static u32 sUnusedVariable2; -/*IWRAM_DATA*/ static struct ScriptContext sScriptContext2; -/*IWRAM_DATA*/ static bool8 sScriptContext2Enabled; -/*IWRAM_DATA*/ static u8 gUnknown_3000F9D; -/*IWRAM_DATA*/ static u8 gUnknown_3000F9E; -/*IWRAM_DATA*/ static u8 gUnknown_3000F9F; -/*IWRAM_DATA*/ static u8 gUnknown_3000FA0; -/*IWRAM_DATA*/ static u8 gUnknown_3000FA1; +// iwram bss +static u8 sScriptContext1Status; +static u32 sUnusedVariable1; +static struct ScriptContext sScriptContext1; +static u32 sUnusedVariable2; +static struct ScriptContext sScriptContext2; +static bool8 sScriptContext2Enabled; +static u8 gUnknown_3000F9D; +static u8 gUnknown_3000F9E; +static u8 gUnknown_3000F9F; +static u8 gUnknown_3000FA0; +static u8 gUnknown_3000FA1; extern ScrCmdFunc gScriptCmdTable[]; extern ScrCmdFunc gScriptCmdTableEnd[]; @@ -431,7 +431,7 @@ void mapheader_run_script_with_tag_x6(void) mapheader_run_script_by_tag(6); } -bool8 mapheader_run_first_tag2_script_list_match(void) +bool8 TryRunOnFrameMapScript(void) { u8 *ptr; @@ -482,7 +482,7 @@ bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objec return TRUE; } -u8 *GetRamScript(u8 objectId, u8 *script) +const u8 *GetRamScript(u8 objectId, const u8 *script) { struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data; gRAMScriptPtr = NULL; |