diff options
author | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-18 08:49:31 -0400 |
---|---|---|
committer | PikalaxALT <PikalaxALT@gmail.com> | 2020-03-18 08:49:31 -0400 |
commit | 4516c63652686344160015ea91ee8729c2f355c5 (patch) | |
tree | fbc763526f1e6d91e727f8b3c5a8f60f3b7e5f87 | |
parent | ba7e4acfeee5bdda18113586fde37b19429c3715 (diff) |
through TryStartWarpEventScript
-rw-r--r-- | asm/field_control_avatar.s | 423 | ||||
-rw-r--r-- | asm/overworld.s | 6 | ||||
-rw-r--r-- | include/event_scripts.h | 1 | ||||
-rw-r--r-- | include/field_fadetransition.h | 8 | ||||
-rw-r--r-- | include/metatile_behavior.h | 6 | ||||
-rw-r--r-- | include/overworld.h | 1 | ||||
-rw-r--r-- | include/script.h | 1 | ||||
-rw-r--r-- | src/field_control_avatar.c | 174 | ||||
-rw-r--r-- | src/field_fadetransition.c | 18 | ||||
-rw-r--r-- | src/metatile_behavior.c | 6 | ||||
-rw-r--r-- | src/scrcmd.c | 2 |
11 files changed, 220 insertions, 426 deletions
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s index 71cf34c05..7430ea2ff 100644 --- a/asm/field_control_avatar.s +++ b/asm/field_control_avatar.s @@ -5,387 +5,8 @@ .text - thumb_func_start sub_806D804 -sub_806D804: @ 806D804 - push {r4-r7,lr} - adds r6, r0, 0 - lsls r1, 16 - lsrs r3, r1, 16 - lsls r2, 24 - lsrs r5, r2, 24 - adds r7, r5, 0 - ldr r0, _0806D840 @ =gMain - ldrh r1, [r0, 0x2C] - movs r0, 0x30 - ands r0, r1 - cmp r0, 0 - bne _0806D890 - subs r0, r5, 0x3 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _0806D890 - adds r0, r3, 0 - adds r1, r5, 0 - bl sub_806D898 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0 - bne _0806D848 - ldr r0, _0806D844 @ =gUnknown_81A76E7 - adds r1, r5, 0 - b _0806D888 - .align 2, 0 -_0806D840: .4byte gMain -_0806D844: .4byte gUnknown_81A76E7 -_0806D848: - cmp r4, 0x1 - bne _0806D858 - ldr r0, _0806D854 @ =gUnknown_81A76DE - adds r1, r5, 0 - b _0806D888 - .align 2, 0 -_0806D854: .4byte gUnknown_81A76DE -_0806D858: - cmp r4, 0x2 - bne _0806D868 - ldr r0, _0806D864 @ =gUnknown_81A76F0 - adds r1, r5, 0 - b _0806D888 - .align 2, 0 -_0806D864: .4byte gUnknown_81A76F0 -_0806D868: - cmp r4, 0x3 - bne _0806D878 - ldr r0, _0806D874 @ =gUnknown_81A76F9 - adds r1, r5, 0 - b _0806D888 - .align 2, 0 -_0806D874: .4byte gUnknown_81A76F9 -_0806D878: - adds r0, r6, 0 - bl sub_806D928 - cmp r0, 0 - beq _0806D890 - cmp r4, 0xF0 - bne _0806D890 - adds r1, r7, 0 -_0806D888: - bl sub_806D908 - movs r0, 0x1 - b _0806D892 -_0806D890: - movs r0, 0 -_0806D892: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_806D804 - - thumb_func_start sub_806D898 -sub_806D898: @ 806D898 - push {r4,r5,lr} - lsls r1, 24 - lsrs r5, r1, 24 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - adds r1, r5, 0 - bl MetatileBehavior_IsPlayerFacingPokemonCenterSign - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806D8B6 - movs r0, 0 - b _0806D902 -_0806D8B6: - adds r0, r4, 0 - adds r1, r5, 0 - bl MetatileBehavior_IsPlayerFacingPokeMartSign - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806D8CA - movs r0, 0x1 - b _0806D902 -_0806D8CA: - adds r0, r4, 0 - bl MetatileBehavior_IsIndigoPlateauMark - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806D8DC - movs r0, 0x2 - b _0806D902 -_0806D8DC: - adds r0, r4, 0 - bl MetatileBehavior_IsIndigoPlateauMark2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806D8EE - movs r0, 0x3 - b _0806D902 -_0806D8EE: - adds r0, r4, 0 - bl MetatileBehavior_IsSignpost - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _0806D900 - movs r0, 0xFF - b _0806D902 -_0806D900: - movs r0, 0xF0 -_0806D902: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_806D898 - - thumb_func_start sub_806D908 -sub_806D908: @ 806D908 - push {lr} - lsls r1, 24 - lsrs r1, 24 - ldr r2, _0806D924 @ =gSpecialVar_Facing - strh r1, [r2] - bl ScriptContext1_SetupScript - bl sub_80699E0 - bl sub_8069A20 - pop {r0} - bx r0 - .align 2, 0 -_0806D924: .4byte gSpecialVar_Facing - thumb_func_end sub_806D908 - - thumb_func_start sub_806D928 -sub_806D928: @ 806D928 - push {r4,lr} - ldr r4, _0806D94C @ =gMapHeader - ldrh r1, [r0] - subs r1, 0x7 - lsls r1, 16 - lsrs r1, 16 - ldrh r2, [r0, 0x2] - subs r2, 0x7 - lsls r2, 16 - lsrs r2, 16 - ldrb r3, [r0, 0x4] - adds r0, r4, 0 - bl GetBackgroundEventAtPosition - cmp r0, 0 - bne _0806D950 - movs r0, 0 - b _0806D958 - .align 2, 0 -_0806D94C: .4byte gMapHeader -_0806D950: - ldr r0, [r0, 0x8] - cmp r0, 0 - bne _0806D958 - ldr r0, _0806D960 @ =EventScript_TestSignpostMsg -_0806D958: - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_0806D960: .4byte EventScript_TestSignpostMsg - thumb_func_end sub_806D928 - - thumb_func_start TryArrowWarp -TryArrowWarp: @ 806D964 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r7, r0, 0 - lsls r1, 16 - lsrs r4, r1, 16 - mov r10, r4 - lsls r2, 24 - lsrs r6, r2, 24 - mov r9, r6 - ldr r0, _0806D9B8 @ =gMapHeader - mov r8, r0 - adds r1, r7, 0 - bl map_warp_check_packed - lsls r0, 24 - asrs r5, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r5, r0 - beq _0806DA00 - adds r0, r4, 0 - adds r1, r6, 0 - bl is_non_stair_warp_tile - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806D9BC - bl sub_8055A08 - mov r0, r8 - adds r1, r5, 0 - adds r2, r7, 0 - bl sub_806DC54 - bl DoWarp - movs r0, 0x1 - b _0806DA02 - .align 2, 0 -_0806D9B8: .4byte gMapHeader -_0806D9BC: - adds r0, r4, 0 - mov r1, r9 - bl sub_806DB84 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806DA00 - movs r4, 0 - ldr r0, _0806D9FC @ =gPlayerAvatar - ldrb r1, [r0] - movs r0, 0x6 - ands r0, r1 - cmp r0, 0 - beq _0806D9E2 - movs r0, 0x1 - bl SetPlayerAvatarTransitionFlags - movs r4, 0xC -_0806D9E2: - bl sub_8055A08 - mov r0, r8 - adds r1, r5, 0 - adds r2, r7, 0 - bl sub_806DC54 - mov r0, r10 - adds r1, r4, 0 - bl sub_807E4A0 - movs r0, 0x1 - b _0806DA02 - .align 2, 0 -_0806D9FC: .4byte gPlayerAvatar -_0806DA00: - movs r0, 0 -_0806DA02: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end TryArrowWarp - - thumb_func_start TryStartWarpEventScript -TryStartWarpEventScript: @ 806DA10 - push {r4-r7,lr} - adds r6, r0, 0 - lsls r1, 16 - lsrs r5, r1, 16 - ldr r7, _0806DA68 @ =gMapHeader - adds r0, r7, 0 - adds r1, r6, 0 - bl map_warp_check_packed - lsls r0, 24 - asrs r4, r0, 24 - movs r0, 0x1 - negs r0, r0 - cmp r4, r0 - beq _0806DAEC - adds r0, r5, 0 - bl sub_806DAF4 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806DAEC - bl sub_8055A08 - adds r0, r7, 0 - adds r1, r4, 0 - adds r2, r6, 0 - bl sub_806DC54 - lsls r0, r5, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl MetatileBehavior_IsEscalator - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806DA6C - adds r0, r4, 0 - bl sub_807E560 - movs r0, 0x1 - b _0806DAEE - .align 2, 0 -_0806DA68: .4byte gMapHeader -_0806DA6C: - adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_12 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806DA82 - bl sub_807E57C - movs r0, 0x1 - b _0806DAEE -_0806DA82: - adds r0, r4, 0 - bl MetatileBheavior_IsMB_68 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806DA98 - bl sub_807E58C - movs r0, 0x1 - b _0806DAEE -_0806DA98: - adds r0, r4, 0 - bl MetatileBehavior_IsRegularWarp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806DAAE - bl sub_807E59C - movs r0, 0x1 - b _0806DAEE -_0806DAAE: - adds r0, r4, 0 - bl MetatileBehavior_IsUnionRoomWarp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806DAC4 - bl sub_807E524 - movs r0, 0x1 - b _0806DAEE -_0806DAC4: - adds r0, r4, 0 - bl MetatileBehavior_IsFallWarp - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _0806DAE4 - bl ResetInitialPlayerAvatarState - ldr r0, _0806DAE0 @ =EventScript_1C1361 - bl ScriptContext1_SetupScript - movs r0, 0x1 - b _0806DAEE - .align 2, 0 -_0806DAE0: .4byte EventScript_1C1361 -_0806DAE4: - bl DoWarp - movs r0, 0x1 - b _0806DAEE -_0806DAEC: - movs r0, 0 -_0806DAEE: - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end TryStartWarpEventScript - - thumb_func_start sub_806DAF4 -sub_806DAF4: @ 806DAF4 + thumb_func_start IsWarpMetatileBehavior +IsWarpMetatileBehavior: @ 806DAF4 push {r4,lr} lsls r0, 24 lsrs r4, r0, 24 @@ -414,19 +35,19 @@ sub_806DAF4: @ 806DAF4 cmp r0, 0x1 beq _0806DB7C adds r0, r4, 0 - bl MetatileBehavior_ReturnFalse_12 + bl MetatileBehavior_IsLavaridgeB1FWarp lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 beq _0806DB7C adds r0, r4, 0 - bl MetatileBheavior_IsMB_68 + bl MetatileBehavior_IsLavaridge1FWarp lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 beq _0806DB7C adds r0, r4, 0 - bl MetatileBehavior_IsRegularWarp + bl MetatileBehavior_IsWarpPad lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 @@ -451,7 +72,7 @@ _0806DB7E: pop {r4} pop {r1} bx r1 - thumb_func_end sub_806DAF4 + thumb_func_end IsWarpMetatileBehavior thumb_func_start sub_806DB84 sub_806DB84: @ 806DB84 @@ -501,8 +122,8 @@ _0806DBD2: bx r1 thumb_func_end sub_806DB84 - thumb_func_start is_non_stair_warp_tile -is_non_stair_warp_tile: @ 806DBD8 + thumb_func_start IsArrowWarpMetatileBehavior +IsArrowWarpMetatileBehavior: @ 806DBD8 push {lr} lsls r0, 16 lsrs r0, 16 @@ -550,10 +171,10 @@ _0806DC28: _0806DC2A: pop {r1} bx r1 - thumb_func_end is_non_stair_warp_tile + thumb_func_end IsArrowWarpMetatileBehavior - thumb_func_start map_warp_check_packed -map_warp_check_packed: @ 806DC30 + thumb_func_start GetWarpEventAtMapPosition +GetWarpEventAtMapPosition: @ 806DC30 push {lr} adds r3, r1, 0 ldrh r1, [r3] @@ -570,10 +191,10 @@ map_warp_check_packed: @ 806DC30 asrs r0, 24 pop {r1} bx r1 - thumb_func_end map_warp_check_packed + thumb_func_end GetWarpEventAtMapPosition - thumb_func_start sub_806DC54 -sub_806DC54: @ 806DC54 + thumb_func_start SetupWarp +SetupWarp: @ 806DC54 push {r4-r7,lr} adds r5, r2, 0 ldr r0, _0806DC74 @ =gMapHeader @@ -632,7 +253,7 @@ _0806DCC4: bx r0 .align 2, 0 _0806DCCC: .4byte gSaveBlock1Ptr - thumb_func_end sub_806DC54 + thumb_func_end SetupWarp thumb_func_start TryDoorWarp TryDoorWarp: @ 806DCD0 @@ -654,7 +275,7 @@ TryDoorWarp: @ 806DCD0 ldr r7, _0806DD2C @ =gMapHeader adds r0, r7, 0 adds r1, r6, 0 - bl map_warp_check_packed + bl GetWarpEventAtMapPosition lsls r0, 24 asrs r4, r0, 24 movs r0, 0x1 @@ -662,16 +283,16 @@ TryDoorWarp: @ 806DCD0 cmp r4, r0 beq _0806DD30 adds r0, r5, 0 - bl sub_806DAF4 + bl IsWarpMetatileBehavior lsls r0, 24 lsrs r0, 24 cmp r0, 0x1 bne _0806DD30 - bl sub_8055A08 + bl StoreInitialPlayerAvatarState adds r0, r7, 0 adds r1, r4, 0 adds r2, r6, 0 - bl sub_806DC54 + bl SetupWarp bl DoDoorWarp movs r0, 0x1 b _0806DD32 @@ -1023,7 +644,7 @@ _0806DF98: lsls r0, 24 cmp r0, 0 beq _0806DFB0 - bl sub_8055A08 + bl StoreInitialPlayerAvatarState bl DoDiveWarp movs r0, 0xE2 bl PlaySE @@ -1159,13 +780,13 @@ SetCableClubWarp: @ 806E08C ldr r4, _0806E0CC @ =gMapHeader adds r0, r4, 0 mov r1, sp - bl map_warp_check_packed + bl GetWarpEventAtMapPosition adds r1, r0, 0 lsls r1, 24 asrs r1, 24 adds r0, r4, 0 mov r2, sp - bl sub_806DC54 + bl SetupWarp movs r0, 0 add sp, 0x8 pop {r4} diff --git a/asm/overworld.s b/asm/overworld.s index 8f928c555..88b11ea80 100644 --- a/asm/overworld.s +++ b/asm/overworld.s @@ -1855,8 +1855,8 @@ sub_80559F8: @ 80559F8 _08055A04: .4byte gUnknown_2031DD4 thumb_func_end sub_80559F8 - thumb_func_start sub_8055A08 -sub_8055A08: @ 8055A08 + thumb_func_start StoreInitialPlayerAvatarState +StoreInitialPlayerAvatarState: @ 8055A08 push {r4,lr} bl GetPlayerFacingDirection ldr r4, _08055A24 @ =gUnknown_2031DD4 @@ -1906,7 +1906,7 @@ _08055A5A: bx r0 .align 2, 0 _08055A68: .4byte gUnknown_2031DD4 - thumb_func_end sub_8055A08 + thumb_func_end StoreInitialPlayerAvatarState thumb_func_start sub_8055A6C sub_8055A6C: @ 8055A6C diff --git a/include/event_scripts.h b/include/event_scripts.h index 1a2b26bf2..afc509909 100644 --- a/include/event_scripts.h +++ b/include/event_scripts.h @@ -1257,5 +1257,6 @@ extern const u8 EventScript_CantUseWaterfall[]; extern const u8 gUnknown_81A8CED[]; extern const u8 EventScript_FieldPoison[]; extern const u8 EventScript_EggHatch[]; +extern const u8 EventScript_1C1361[]; #endif //GUARD_EVENT_SCRIPTS_H diff --git a/include/field_fadetransition.h b/include/field_fadetransition.h index a1fe590fa..d649fc02f 100644 --- a/include/field_fadetransition.h +++ b/include/field_fadetransition.h @@ -9,7 +9,7 @@ void DoDiveWarp(void); void DoDoorWarp(void); void DoFallWarp(void); -void sub_807E59C(void); +void DoTeleportWarp(void); void sub_807E500(void); void sub_807DF64(void); void WarpFadeOutScreen(void); @@ -22,5 +22,11 @@ void sub_807DCE4(void); bool32 sub_807E418(void); void palette_bg_faded_fill_black(void); +void sub_807E4A0(u16 metatileBehavior, u16 delay); +void DoEscalatorWarp(u8 a0); +void DoLavaridgeGymB1FWarp(void); +void DoLavaridgeGym1FWarp(void); +void DoTeleportWarp(void); +void DoUnionRoomWarp(void); #endif // GUARD_FIELD_FADETRANSITION_H diff --git a/include/metatile_behavior.h b/include/metatile_behavior.h index 91a1824e5..2ae011e5f 100644 --- a/include/metatile_behavior.h +++ b/include/metatile_behavior.h @@ -89,9 +89,9 @@ bool8 MetatileBehavior_UnusedReturnFalse_5(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse_6(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse_7(u8 metatileBehavior); bool8 MetatileBehavior_UnusedReturnFalse_8(u8 metatileBehavior); -bool8 MetatileBehavior_ReturnFalse_12(u8 metatileBehavior); -bool8 MetatileBheavior_IsMB_68(u8 metatileBehavior); -bool8 MetatileBehavior_IsRegularWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsLavaridge1FWarp(u8 metatileBehavior); +bool8 MetatileBehavior_IsWarpPad(u8 metatileBehavior); bool8 MetatileBehavior_IsUnionRoomWarp(u8 metatileBehavior); bool8 MetatileBehavior_IsWater(u8 metatileBehavior); bool8 MetatileBehavior_IsFallWarp(u8 metatileBehavior); diff --git a/include/overworld.h b/include/overworld.h index 37274dfb4..546c4f00e 100644 --- a/include/overworld.h +++ b/include/overworld.h @@ -194,6 +194,7 @@ void SetMainCallback1(MainCallback cb); void CB1_Overworld(void); void sub_80568C4(void); u8 GetLastUsedWarpMapSectionId(void); +void StoreInitialPlayerAvatarState(void); extern u16 *gBGTilemapBuffers1; extern u16 *gBGTilemapBuffers2; diff --git a/include/script.h b/include/script.h index 38da71774..b56fedec9 100644 --- a/include/script.h +++ b/include/script.h @@ -77,6 +77,7 @@ bool8 sub_806997C(void); u8 sub_80699B0(void); void sub_8069A54(void); bool8 sub_8069A04(void); +void sub_80699E0(void); extern const u8 *gRAMScriptPtr; extern u8 gUnknown_20370A0; diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index 590589937..3dfed44fd 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -7,6 +7,7 @@ #include "event_scripts.h" #include "fieldmap.h" #include "field_control_avatar.h" +#include "field_fadetransition.h" #include "field_player_avatar.h" #include "field_poison.h" #include "field_specials.h" @@ -47,13 +48,20 @@ bool8 TryStartMiscWalkingScripts(u16 metatileBehavior); bool8 TryStartStepCountScript(u16 metatileBehavior); void UpdateHappinessStepCounter(void); bool8 UpdatePoisonStepCounter(void); -u8 sub_806D898(u8 metatileBehvaior, u8 direction); -const u8 *GetCoordEventScriptAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z); -bool8 TryStartWarpEventScript(struct MapPosition * position, u16 metatileBehavior); +bool8 CheckStandardWildEncounter(u32 encounter); +bool8 sub_806D804(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +void sub_806D908(const u8 *script, u8 playerDirection); +u8 sub_806D898(u16 metatileBehvaior, u8 direction); +const u8 *sub_806D928(struct MapPosition * position); bool8 TryArrowWarp(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); +bool8 TryStartWarpEventScript(struct MapPosition * position, u16 metatileBehavior); +bool8 IsWarpMetatileBehavior(u16 metatileBehavior); +bool8 sub_806DB84(u16 metatileBehavior, u8 playerDirection); +void SetupWarp(struct MapHeader * mapHeader, s8 warpId, struct MapPosition * position); +bool8 IsArrowWarpMetatileBehavior(u16 metatileBehavior, u8 playerDirection); +s8 GetWarpEventAtMapPosition(struct MapHeader * mapHeader, struct MapPosition * mapPosition); +const u8 *GetCoordEventScriptAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z); bool8 TryDoorWarp(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); -bool8 sub_806D804(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection); -bool8 CheckStandardWildEncounter(u32 encounter); struct FieldInput gUnknown_3005078; @@ -725,3 +733,159 @@ bool8 CheckStandardWildEncounter(u32 encounter) { return TryStandardWildEncounter(encounter); } + +bool8 sub_806D804(struct MapPosition * position, u16 metatileBehavior, u8 playerDirection) +{ + u8 r4; + const u8 * script; + if (JOY_HELD(DPAD_LEFT | DPAD_RIGHT)) + return FALSE; + if (playerDirection == DIR_EAST || playerDirection == DIR_WEST) + return FALSE; + + r4 = sub_806D898(metatileBehavior, playerDirection); + if (r4 == 0) + { + sub_806D908(gUnknown_81A76E7, playerDirection); + return TRUE; + } + else if (r4 == 1) + { + sub_806D908(gUnknown_81A76DE, playerDirection); + return TRUE; + } + else if (r4 == 2) + { + sub_806D908(gUnknown_81A76F0, playerDirection); + return TRUE; + } + else if (r4 == 3) + { + sub_806D908(gUnknown_81A76F9, playerDirection); + return TRUE; + } + else + { + script = sub_806D928(position); + if (script == NULL) + return FALSE; + if (r4 != 0xF0) + return FALSE; + sub_806D908(script, playerDirection); + return TRUE; + } +} + +u8 sub_806D898(u16 metatileBehavior, u8 playerDirection) +{ + if (MetatileBehavior_IsPlayerFacingPokemonCenterSign(metatileBehavior, playerDirection) == TRUE) + return 0; + + if (MetatileBehavior_IsPlayerFacingPokeMartSign(metatileBehavior, playerDirection) == TRUE) + return 1; + + if (MetatileBehavior_IsIndigoPlateauMark(metatileBehavior) == TRUE) + return 2; + + if (MetatileBehavior_IsIndigoPlateauMark2(metatileBehavior) == TRUE) + return 3; + + if (MetatileBehavior_IsSignpost(metatileBehavior) == TRUE) + return 0xF0; + + return 0xFF; +} + +void sub_806D908(const u8 *script, u8 playerDirection) +{ + gSpecialVar_Facing = playerDirection; + ScriptContext1_SetupScript(script); + sub_80699E0(); + sub_8069A20(); +} + +const u8 *sub_806D928(struct MapPosition * position) +{ + const struct BgEvent * event = GetBackgroundEventAtPosition(&gMapHeader, position->x - 7, position->y - 7, position->height); + if (event == NULL) + return NULL; + if (event->bgUnion.script != NULL) + return event->bgUnion.script; + return EventScript_TestSignpostMsg; +} + +bool8 TryArrowWarp(struct MapPosition *position, u16 metatileBehavior, u8 direction) +{ + s8 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position); + u16 delay; + + if (warpEventId != -1) + { + if (IsArrowWarpMetatileBehavior(metatileBehavior, direction) == TRUE) + { + StoreInitialPlayerAvatarState(); + SetupWarp(&gMapHeader, warpEventId, position); + DoWarp(); + return TRUE; + } + else if (sub_806DB84(metatileBehavior, direction) == TRUE) + { + delay = 0; + if (gPlayerAvatar.flags & 6) + { + SetPlayerAvatarTransitionFlags(1); + delay = 12; + } + StoreInitialPlayerAvatarState(); + SetupWarp(&gMapHeader, warpEventId, position); + sub_807E4A0(metatileBehavior, delay); + return TRUE; + } + } + return FALSE; +} + +bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileBehavior) +{ + s8 warpEventId = GetWarpEventAtMapPosition(&gMapHeader, position); + + if (warpEventId != -1 && IsWarpMetatileBehavior(metatileBehavior) == TRUE) + { + StoreInitialPlayerAvatarState(); + SetupWarp(&gMapHeader, warpEventId, position); + if (MetatileBehavior_IsEscalator(metatileBehavior) == TRUE) + { + DoEscalatorWarp(metatileBehavior); + return TRUE; + } + if (MetatileBehavior_IsLavaridgeB1FWarp(metatileBehavior) == TRUE) + { + DoLavaridgeGymB1FWarp(); + return TRUE; + } + if (MetatileBehavior_IsLavaridge1FWarp(metatileBehavior) == TRUE) + { + DoLavaridgeGym1FWarp(); + return TRUE; + } + if (MetatileBehavior_IsWarpPad(metatileBehavior) == TRUE) + { + DoTeleportWarp(); + return TRUE; + } + if (MetatileBehavior_IsUnionRoomWarp(metatileBehavior) == TRUE) + { + DoUnionRoomWarp(); + return TRUE; + } + if (MetatileBehavior_IsFallWarp(metatileBehavior) == TRUE) + { + ResetInitialPlayerAvatarState(); + ScriptContext1_SetupScript(EventScript_1C1361); + return TRUE; + } + DoWarp(); + return TRUE; + } + return FALSE; +} diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 58f654110..10d6b3d72 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -549,11 +549,11 @@ void DoDiveWarp(void) CreateTask(sub_807E718, 10); } -void sub_807E4A0(u16 a, u16 b) +void sub_807E4A0(u16 metatileBehavior, u16 delay) { u8 taskId = CreateTask(sub_807E980, 10); - gTasks[taskId].data[1] = a; - gTasks[taskId].data[15] = b; + gTasks[taskId].data[1] = metatileBehavior; + gTasks[taskId].data[15] = delay; sub_807E980(taskId); } @@ -571,7 +571,7 @@ void sub_807E500(void) gFieldCallback = sub_807DF94; } -void sub_807E524(void) +void DoUnionRoomWarp(void) { ScriptContext2_Enable(); gFieldCallback = sub_807DF64; @@ -584,25 +584,25 @@ void DoFallWarp(void) gFieldCallback = FieldCB_FallWarpExit; } -void sub_807E560(u8 a0) +void DoEscalatorWarp(u8 metatileBehavior) { ScriptContext2_Enable(); - StartEscalatorWarp(a0, 10); + StartEscalatorWarp(metatileBehavior, 10); } -void sub_807E57C(void) +void DoLavaridgeGymB1FWarp(void) { ScriptContext2_Enable(); StartLavaridgeGymB1FWarp(10); } -void sub_807E58C(void) +void DoLavaridgeGym1FWarp(void) { ScriptContext2_Enable(); StartLavaridgeGym1FWarp(10); } -void sub_807E59C(void) +void DoTeleportWarp(void) { ScriptContext2_Enable(); TryFadeOutOldMapMusic(); diff --git a/src/metatile_behavior.c b/src/metatile_behavior.c index 414ece873..fdcb25105 100644 --- a/src/metatile_behavior.c +++ b/src/metatile_behavior.c @@ -618,9 +618,9 @@ bool8 MetatileBehavior_UnusedReturnFalse_5(u8 metatileBehavior) { return FALSE; bool8 MetatileBehavior_UnusedReturnFalse_6(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_UnusedReturnFalse_7(u8 metatileBehavior) { return FALSE; } bool8 MetatileBehavior_UnusedReturnFalse_8(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBehavior_ReturnFalse_12(u8 metatileBehavior) { return FALSE; } +bool8 MetatileBehavior_IsLavaridgeB1FWarp(u8 metatileBehavior) { return FALSE; } -bool8 MetatileBheavior_IsMB_68(u8 metatileBehavior) +bool8 MetatileBehavior_IsLavaridge1FWarp(u8 metatileBehavior) { if(metatileBehavior == MB_68) return TRUE; @@ -628,7 +628,7 @@ bool8 MetatileBheavior_IsMB_68(u8 metatileBehavior) return FALSE; } -bool8 MetatileBehavior_IsRegularWarp(u8 metatileBehavior) +bool8 MetatileBehavior_IsWarpPad(u8 metatileBehavior) { if(metatileBehavior == MB_REGULAR_WARP) return TRUE; diff --git a/src/scrcmd.c b/src/scrcmd.c index 32ac5c4e2..f58c5b220 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -789,7 +789,7 @@ bool8 ScrCmd_warpteleport(struct ScriptContext * ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); SetWarpDestination(mapGroup, mapNum, warpId, x, y); - sub_807E59C(); + DoTeleportWarp(); ResetInitialPlayerAvatarState(); return TRUE; } |