From 90a05cf824b14861b7c1c942aebae31f9cb502ea Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 15 Oct 2019 05:00:08 -0400 Subject: Finish Mossdeep Gym doc, beging documenting rotating tile puzzle --- asm/macros/event.inc | 12 +- data/maps/MossdeepCity_Gym/map.json | 18 +- data/maps/MossdeepCity_Gym/scripts.inc | 228 ++++++++-------- data/maps/Route110_TrickHousePuzzle7/scripts.inc | 10 +- data/mossdeep_gym.s | 43 ---- data/rotating_tile_puzzle.s | 43 ++++ data/script_cmd_table.inc | 4 +- include/constants/flags.h | 8 +- include/constants/metatile_labels.h | 18 +- include/field_screen_effect.h | 2 +- include/mossdeep_gym.h | 9 - include/rotating_tile_puzzle.h | 9 + ld_script.txt | 6 +- src/field_control_avatar.c | 2 +- src/field_screen_effect.c | 2 +- src/mossdeep_gym.c | 314 ---------------------- src/rotating_tile_puzzle.c | 315 +++++++++++++++++++++++ src/scrcmd.c | 14 +- sym_ewram.txt | 2 +- 19 files changed, 534 insertions(+), 525 deletions(-) delete mode 100644 data/mossdeep_gym.s create mode 100644 data/rotating_tile_puzzle.s delete mode 100644 include/mossdeep_gym.h create mode 100644 include/rotating_tile_puzzle.h delete mode 100644 src/mossdeep_gym.c create mode 100644 src/rotating_tile_puzzle.c diff --git a/asm/macros/event.inc b/asm/macros/event.inc index 54078332c..1500a8c44 100644 --- a/asm/macros/event.inc +++ b/asm/macros/event.inc @@ -1478,21 +1478,21 @@ .endm @ In FireRed, this command is a nop. - .macro mossdeepgym3 var:req + .macro initrotatingtilepuzzle isTrickHouse:req .byte 0xd5 - .2byte \var + .2byte \isTrickHouse .endm .macro mossdeepgym4 .byte 0xd6 .endm - .macro warp7 map:req, byte:req, word1:req, word2:req + .macro warpmossdeepgym map:req, warpId:req, x:req, y:req .byte 0xd7 map \map - .byte \byte - .2byte \word1 - .2byte \word2 + .byte \warpId + .2byte \x + .2byte \y .endm .macro cmdD8 diff --git a/data/maps/MossdeepCity_Gym/map.json b/data/maps/MossdeepCity_Gym/map.json index 23d64364b..33bd1d434 100644 --- a/data/maps/MossdeepCity_Gym/map.json +++ b/data/maps/MossdeepCity_Gym/map.json @@ -591,7 +591,7 @@ "elevation": 3, "var": "VAR_TEMP_1", "var_value": "0", - "script": "MossdeepCity_Gym_EventScript_220C67" + "script": "MossdeepCity_Gym_EventScript_YellowFloorSwitch" }, { "type": "trigger", @@ -600,7 +600,7 @@ "elevation": 3, "var": "VAR_TEMP_1", "var_value": "0", - "script": "MossdeepCity_Gym_EventScript_220C7D" + "script": "MossdeepCity_Gym_EventScript_BlueFloorSwitch" }, { "type": "trigger", @@ -609,7 +609,7 @@ "elevation": 3, "var": "VAR_TEMP_1", "var_value": "0", - "script": "MossdeepCity_Gym_EventScript_220C7D" + "script": "MossdeepCity_Gym_EventScript_BlueFloorSwitch" }, { "type": "trigger", @@ -618,7 +618,7 @@ "elevation": 3, "var": "VAR_TEMP_1", "var_value": "0", - "script": "MossdeepCity_Gym_EventScript_220C93" + "script": "MossdeepCity_Gym_EventScript_GreenFloorSwitch" }, { "type": "trigger", @@ -627,7 +627,7 @@ "elevation": 3, "var": "VAR_TEMP_1", "var_value": "0", - "script": "MossdeepCity_Gym_EventScript_220CA9" + "script": "MossdeepCity_Gym_EventScript_PurpleFloorSwitch" }, { "type": "trigger", @@ -636,7 +636,7 @@ "elevation": 3, "var": "VAR_TEMP_1", "var_value": "0", - "script": "MossdeepCity_Gym_EventScript_220CA9" + "script": "MossdeepCity_Gym_EventScript_PurpleFloorSwitch" }, { "type": "trigger", @@ -645,7 +645,7 @@ "elevation": 3, "var": "VAR_TEMP_1", "var_value": "0", - "script": "MossdeepCity_Gym_EventScript_220CBF" + "script": "MossdeepCity_Gym_EventScript_RedFloorSwitch" }, { "type": "trigger", @@ -654,7 +654,7 @@ "elevation": 0, "var": "VAR_TEMP_1", "var_value": "0", - "script": "MossdeepCity_Gym_EventScript_220AF1" + "script": "MossdeepCity_Gym_EventScript_WarpToEntrance" }, { "type": "trigger", @@ -663,7 +663,7 @@ "elevation": 3, "var": "VAR_TEMP_1", "var_value": "0", - "script": "MossdeepCity_Gym_EventScript_220C67" + "script": "MossdeepCity_Gym_EventScript_YellowFloorSwitch" } ], "bg_events": [ diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc index 58972e75f..1ce08142c 100644 --- a/data/maps/MossdeepCity_Gym/scripts.inc +++ b/data/maps/MossdeepCity_Gym/scripts.inc @@ -2,46 +2,50 @@ MossdeepCity_Gym_MapScripts:: @ 8220800 map_script MAP_SCRIPT_ON_LOAD, MossdeepCity_Gym_OnLoad .byte 0 +@ NOTE: Mossdeep Gym was redesigned between R/S and E. Leftover (and now functionally unused) scripts are commented below + +@ All the below checks are leftover from RS. FLAG_MOSSDEEP_GYM_SWITCH_X is never set MossdeepCity_Gym_OnLoad: @ 8220806 - goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_1, MossdeepCity_Gym_EventScript_22083D - goto MossdeepCity_Gym_EventScript_220815 + goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_1, MossdeepCity_Gym_EventScript_SetSwitch1Metatiles + goto MossdeepCity_Gym_EventScript_CheckSwitch2 end -MossdeepCity_Gym_EventScript_220815:: @ 8220815 - goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_2, MossdeepCity_Gym_EventScript_220855 - goto MossdeepCity_Gym_EventScript_220824 +MossdeepCity_Gym_EventScript_CheckSwitch2:: @ 8220815 + goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_2, MossdeepCity_Gym_EventScript_SetSwitch2Metatiles + goto MossdeepCity_Gym_EventScript_CheckSwitch3 end -MossdeepCity_Gym_EventScript_220824:: @ 8220824 - goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_3, MossdeepCity_Gym_EventScript_22086D - goto MossdeepCity_Gym_EventScript_220833 +MossdeepCity_Gym_EventScript_CheckSwitch3:: @ 8220824 + goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_3, MossdeepCity_Gym_EventScript_SetSwitch3Metatiles + goto MossdeepCity_Gym_EventScript_CheckSwitch4 end -MossdeepCity_Gym_EventScript_220833:: @ 8220833 - goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_4, MossdeepCity_Gym_EventScript_220885 +MossdeepCity_Gym_EventScript_CheckSwitch4:: @ 8220833 + goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_4, MossdeepCity_Gym_EventScript_SetSwitch4Metatiles end -MossdeepCity_Gym_EventScript_22083D:: @ 822083D - setmetatile 5, 5, METATILE_MossdeepGym_Obelisk_Top, 0 - setmetatile 2, 7, METATILE_MossdeepGym_Empty1, 1 - goto MossdeepCity_Gym_EventScript_220815 +@ All the below set metatile scripts are leftover from RS and are functionally unused +MossdeepCity_Gym_EventScript_SetSwitch1Metatiles:: @ 822083D + setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, 0 + setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, 1 + goto MossdeepCity_Gym_EventScript_CheckSwitch2 end -MossdeepCity_Gym_EventScript_220855:: @ 8220855 - setmetatile 8, 14, METATILE_MossdeepGym_Obelisk_Top, 0 - setmetatile 8, 10, METATILE_MossdeepGym_Empty1, 1 - goto MossdeepCity_Gym_EventScript_220824 +MossdeepCity_Gym_EventScript_SetSwitch2Metatiles:: @ 8220855 + setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, 0 + setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, 1 + goto MossdeepCity_Gym_EventScript_CheckSwitch3 end -MossdeepCity_Gym_EventScript_22086D:: @ 822086D - setmetatile 15, 17, METATILE_MossdeepGym_Obelisk_Base, 0 - setmetatile 17, 15, METATILE_MossdeepGym_Empty1, 1 - goto MossdeepCity_Gym_EventScript_220833 +MossdeepCity_Gym_EventScript_SetSwitch3Metatiles:: @ 822086D + setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, 0 + setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, 1 + goto MossdeepCity_Gym_EventScript_CheckSwitch4 end -MossdeepCity_Gym_EventScript_220885:: @ 8220885 - setmetatile 1, 23, METATILE_MossdeepGym_Wall_LeftCorner, 0 - setmetatile 5, 24, METATILE_MossdeepGym_Empty1, 1 +MossdeepCity_Gym_EventScript_SetSwitch4Metatiles:: @ 8220885 + setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, 0 + setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, 1 end MossdeepCity_Gym_EventScript_TateAndLiza:: @ 8220898 @@ -90,7 +94,7 @@ MossdeepCity_Gym_EventScript_GiveCalmMind2:: @ 8220937 giveitem_std ITEM_TM04 compare VAR_RESULT, 0 goto_if_eq Common_EventScript_ShowBagIsFull - msgbox MossdeepCity_Gym_Text_221A40, MSGBOX_DEFAULT + msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM04 release end @@ -99,7 +103,7 @@ MossdeepCity_Gym_EventScript_GiveCalmMind:: @ 822095B giveitem_std ITEM_TM04 compare VAR_RESULT, 0 goto_if_eq Common_EventScript_BagIsFull - msgbox MossdeepCity_Gym_Text_221A40, MSGBOX_DEFAULT + msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT setflag FLAG_RECEIVED_TM04 return @@ -108,14 +112,15 @@ MossdeepCity_Gym_EventScript_TateAndLizaRematch:: @ 822097E msgbox MossdeepCity_Gym_Text_TateAndLizaPostRematch, MSGBOX_AUTOCLOSE end -MossdeepCity_Gym_EventScript_220999:: @ 8220999 +@ All the below switch scripts are leftover from RS and are functionally unused +MossdeepCity_Gym_EventScript_Switch1:: @ 8220999 lockall - goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_1, MossdeepCity_Gym_EventScript_2209D0 + goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_1, MossdeepCity_Gym_EventScript_ClearSwitch1 setflag FLAG_MOSSDEEP_GYM_SWITCH_1 - applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_Delay32 + applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_MossdeepGym_Obelisk_Top, 0 - setmetatile 2, 7, METATILE_MossdeepGym_Empty1, 1 + setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Right, 0 + setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Down, 1 goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end @@ -125,78 +130,78 @@ MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed:: @ 82209C8 releaseall end -MossdeepCity_Gym_EventScript_2209D0:: @ 82209D0 +MossdeepCity_Gym_EventScript_ClearSwitch1:: @ 82209D0 clearflag FLAG_MOSSDEEP_GYM_SWITCH_1 - applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_Delay32 + applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 5, 5, METATILE_MossdeepGym_Obelisk_Base, 0 - setmetatile 2, 7, METATILE_MossdeepGym_Empty0, 1 + setmetatile 5, 5, METATILE_RS_MossdeepGym_RedArrow_Left, 0 + setmetatile 2, 7, METATILE_RS_MossdeepGym_Switch_Up, 1 goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end -MossdeepCity_Gym_EventScript_2209F5:: @ 82209F5 +MossdeepCity_Gym_EventScript_Switch2:: @ 82209F5 lockall - goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_2, MossdeepCity_Gym_EventScript_220A24 + goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_2, MossdeepCity_Gym_EventScript_ClearSwitch2 setflag FLAG_MOSSDEEP_GYM_SWITCH_2 - applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_Delay32 + applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_MossdeepGym_Obelisk_Top, 0 - setmetatile 8, 10, METATILE_MossdeepGym_Empty1, 1 + setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Right, 0 + setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Down, 1 goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end -MossdeepCity_Gym_EventScript_220A24:: @ 8220A24 +MossdeepCity_Gym_EventScript_ClearSwitch2:: @ 8220A24 clearflag FLAG_MOSSDEEP_GYM_SWITCH_2 - applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_Delay32 + applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 8, 14, METATILE_MossdeepGym_OuterWall_RightCorner, 0 - setmetatile 8, 10, METATILE_MossdeepGym_Empty0, 1 + setmetatile 8, 14, METATILE_RS_MossdeepGym_RedArrow_Down, 0 + setmetatile 8, 10, METATILE_RS_MossdeepGym_Switch_Up, 1 goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end -MossdeepCity_Gym_EventScript_220A49:: @ 8220A49 +MossdeepCity_Gym_EventScript_Switch3:: @ 8220A49 lockall - goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_3, MossdeepCity_Gym_EventScript_220A78 + goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_3, MossdeepCity_Gym_EventScript_ClearSwitch3 setflag FLAG_MOSSDEEP_GYM_SWITCH_3 - applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_Delay32 + applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_MossdeepGym_Obelisk_Base, 0 - setmetatile 17, 15, METATILE_MossdeepGym_Empty1, 1 + setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Left, 0 + setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Down, 1 goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end -MossdeepCity_Gym_EventScript_220A78:: @ 8220A78 +MossdeepCity_Gym_EventScript_ClearSwitch3:: @ 8220A78 clearflag FLAG_MOSSDEEP_GYM_SWITCH_3 - applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_Delay32 + applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 15, 17, METATILE_MossdeepGym_Obelisk_Top, 0 - setmetatile 17, 15, METATILE_MossdeepGym_Empty0, 1 + setmetatile 15, 17, METATILE_RS_MossdeepGym_RedArrow_Right, 0 + setmetatile 17, 15, METATILE_RS_MossdeepGym_Switch_Up, 1 goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end -MossdeepCity_Gym_EventScript_220A9D:: @ 8220A9D +MossdeepCity_Gym_EventScript_Switch4:: @ 8220A9D lockall - goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_4, MossdeepCity_Gym_EventScript_220ACC + goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_4, MossdeepCity_Gym_EventScript_ClearSwitch4 setflag FLAG_MOSSDEEP_GYM_SWITCH_4 - applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_Delay32 + applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_MossdeepGym_Wall_LeftCorner, 0 - setmetatile 5, 24, METATILE_MossdeepGym_Empty1, 1 + setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Up, 0 + setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Down, 1 goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end -MossdeepCity_Gym_EventScript_220ACC:: @ 8220ACC +MossdeepCity_Gym_EventScript_ClearSwitch4:: @ 8220ACC clearflag FLAG_MOSSDEEP_GYM_SWITCH_4 - applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_Delay32 + applymovement EVENT_OBJ_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse waitmovement 0 - setmetatile 1, 23, METATILE_MossdeepGym_Obelisk_Top, 0 - setmetatile 5, 24, METATILE_MossdeepGym_Empty0, 1 + setmetatile 1, 23, METATILE_RS_MossdeepGym_RedArrow_Right, 0 + setmetatile 5, 24, METATILE_RS_MossdeepGym_Switch_Up, 1 goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed end -MossdeepCity_Gym_EventScript_220AF1:: @ 8220AF1 +MossdeepCity_Gym_EventScript_WarpToEntrance:: @ 8220AF1 lockall - warp7 MAP_MOSSDEEP_CITY_GYM, 255, 7, 30 + warpmossdeepgym MAP_MOSSDEEP_CITY_GYM, 255, 7, 30 waitstate releaseall end @@ -232,49 +237,50 @@ MossdeepCity_Gym_EventScript_Maura:: @ 8220B70 end MossdeepCity_Gym_EventScript_Sylvia:: @ 8220B87 - trainerbattle_single TRAINER_SYLVIA, MossdeepCity_Gym_Text_2213C2, MossdeepCity_Gym_Text_2213F4 - msgbox MossdeepCity_Gym_Text_221412, MSGBOX_AUTOCLOSE + trainerbattle_single TRAINER_SYLVIA, MossdeepCity_Gym_Text_SylviaPreBattle, MossdeepCity_Gym_Text_SylviaDefeat + msgbox MossdeepCity_Gym_Text_SylviaPostBattle, MSGBOX_AUTOCLOSE end MossdeepCity_Gym_EventScript_Nate:: @ 8220B9E - trainerbattle_single TRAINER_NATE, MossdeepCity_Gym_Text_221460, MossdeepCity_Gym_Text_2214A7 - msgbox MossdeepCity_Gym_Text_2214D3, MSGBOX_AUTOCLOSE + trainerbattle_single TRAINER_NATE, MossdeepCity_Gym_Text_NatePreBattle, MossdeepCity_Gym_Text_NateDefeat + msgbox MossdeepCity_Gym_Text_NatePostBattle, MSGBOX_AUTOCLOSE end MossdeepCity_Gym_EventScript_Macey:: @ 8220BB5 - trainerbattle_single TRAINER_MACEY, MossdeepCity_Gym_Text_22161B, MossdeepCity_Gym_Text_221658 - msgbox MossdeepCity_Gym_Text_221680, MSGBOX_AUTOCLOSE + trainerbattle_single TRAINER_MACEY, MossdeepCity_Gym_Text_MaceyPreBattle, MossdeepCity_Gym_Text_MaceyDefeat + msgbox MossdeepCity_Gym_Text_MaceyPostBattle, MSGBOX_AUTOCLOSE end MossdeepCity_Gym_EventScript_Clifford:: @ 8220BCC - trainerbattle_single TRAINER_CLIFFORD, MossdeepCity_Gym_Text_22157C, MossdeepCity_Gym_Text_2215B8 - msgbox MossdeepCity_Gym_Text_2215E2, MSGBOX_AUTOCLOSE + trainerbattle_single TRAINER_CLIFFORD, MossdeepCity_Gym_Text_CliffordPreBattle, MossdeepCity_Gym_Text_CliffordDefeat + msgbox MossdeepCity_Gym_Text_CliffordPostBattle, MSGBOX_AUTOCLOSE end MossdeepCity_Gym_EventScript_Nicholas:: @ 8220BE3 - trainerbattle_single TRAINER_NICHOLAS, MossdeepCity_Gym_Text_2216EE, MossdeepCity_Gym_Text_22172D - msgbox MossdeepCity_Gym_Text_22173A, MSGBOX_AUTOCLOSE + trainerbattle_single TRAINER_NICHOLAS, MossdeepCity_Gym_Text_NicholasPreBattle, MossdeepCity_Gym_Text_NicholasDefeat + msgbox MossdeepCity_Gym_Text_NicholasPostBattle, MSGBOX_AUTOCLOSE end MossdeepCity_Gym_EventScript_Kathleen:: @ 8220BFA - trainerbattle_single TRAINER_KATHLEEN, MossdeepCity_Gym_Text_221507, MossdeepCity_Gym_Text_22153B - msgbox MossdeepCity_Gym_Text_221545, MSGBOX_AUTOCLOSE + trainerbattle_single TRAINER_KATHLEEN, MossdeepCity_Gym_Text_KathleenPreBattle, MossdeepCity_Gym_Text_KathleenDefeat + msgbox MossdeepCity_Gym_Text_KathleenPostBattle, MSGBOX_AUTOCLOSE end MossdeepCity_Gym_EventScript_GymGuide:: @ 8220C11 lock faceplayer - goto_if_set FLAG_DEFEATED_MOSSDEEP_GYM, MossdeepCity_Gym_EventScript_220C26 + goto_if_set FLAG_DEFEATED_MOSSDEEP_GYM, MossdeepCity_Gym_EventScript_GymGuidePostVictory msgbox MossdeepCity_Gym_Text_GymGuideAdvice, MSGBOX_DEFAULT release end -MossdeepCity_Gym_EventScript_220C26:: @ 8220C26 - msgbox MossdeepCity_Gym_Text_220E2A, MSGBOX_DEFAULT +MossdeepCity_Gym_EventScript_GymGuidePostVictory:: @ 8220C26 + msgbox MossdeepCity_Gym_Text_GymGuidePostVictory, MSGBOX_DEFAULT release end -MossdeepCity_Gym_Movement_Delay32: @ 8220C30 +@ Leftover from RS, functionally unused +MossdeepCity_Gym_Movement_WaitAfterSwitchUse: @ 8220C30 delay_16 delay_16 step_end @@ -301,11 +307,11 @@ MossdeepCity_Gym_EventScript_GymStatue:: @ 8220C5D releaseall end -MossdeepCity_Gym_EventScript_220C67:: @ 8220C67 +MossdeepCity_Gym_EventScript_YellowFloorSwitch:: @ 8220C67 playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 0 + initrotatingtilepuzzle FALSE mossdeepgym1 0 waitmovement 0 mossdeepgym2 @@ -313,11 +319,11 @@ MossdeepCity_Gym_EventScript_220C67:: @ 8220C67 mossdeepgym4 end -MossdeepCity_Gym_EventScript_220C7D:: @ 8220C7D +MossdeepCity_Gym_EventScript_BlueFloorSwitch:: @ 8220C7D playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 0 + initrotatingtilepuzzle FALSE mossdeepgym1 1 waitmovement 0 mossdeepgym2 @@ -325,11 +331,11 @@ MossdeepCity_Gym_EventScript_220C7D:: @ 8220C7D mossdeepgym4 end -MossdeepCity_Gym_EventScript_220C93:: @ 8220C93 +MossdeepCity_Gym_EventScript_GreenFloorSwitch:: @ 8220C93 playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 0 + initrotatingtilepuzzle FALSE mossdeepgym1 2 waitmovement 0 mossdeepgym2 @@ -337,11 +343,11 @@ MossdeepCity_Gym_EventScript_220C93:: @ 8220C93 mossdeepgym4 end -MossdeepCity_Gym_EventScript_220CA9:: @ 8220CA9 +MossdeepCity_Gym_EventScript_PurpleFloorSwitch:: @ 8220CA9 playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 0 + initrotatingtilepuzzle FALSE mossdeepgym1 3 waitmovement 0 mossdeepgym2 @@ -349,11 +355,11 @@ MossdeepCity_Gym_EventScript_220CA9:: @ 8220CA9 mossdeepgym4 end -MossdeepCity_Gym_EventScript_220CBF:: @ 8220CBF +MossdeepCity_Gym_EventScript_RedFloorSwitch:: @ 8220CBF playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 0 + initrotatingtilepuzzle FALSE mossdeepgym1 4 waitmovement 0 mossdeepgym2 @@ -375,7 +381,7 @@ MossdeepCity_Gym_Text_GymGuideAdvice: @ 8220CD5 .string "them how tight you are with your\l" .string "POKéMON. Go for it!$" -MossdeepCity_Gym_Text_220E2A: @ 8220E2A +MossdeepCity_Gym_Text_GymGuidePostVictory: @ 8220E2A .string "Wow, you're astounding!\n" .string "You're one great TRAINER!$" @@ -468,77 +474,77 @@ MossdeepCity_Gym_Text_MauraPostBattle: @ 822132E .string "only despair at the end.\p" .string "What goes around comes around…$" -MossdeepCity_Gym_Text_2213C2: @ 82213C2 +MossdeepCity_Gym_Text_SylviaPreBattle: @ 82213C2 .string "Even at the risk of life, I will win\n" .string "this battle!$" -MossdeepCity_Gym_Text_2213F4: @ 82213F4 +MossdeepCity_Gym_Text_SylviaDefeat: @ 82213F4 .string "What you do…\n" .string "It horrifies me…$" -MossdeepCity_Gym_Text_221412: @ 8221412 +MossdeepCity_Gym_Text_SylviaPostBattle: @ 8221412 .string "How dare you beat me…\p" .string "It won't be my fault if something\n" .string "horrible befalls you…$" -MossdeepCity_Gym_Text_221460: @ 8221460 +MossdeepCity_Gym_Text_NatePreBattle: @ 8221460 .string "Hohoho.\p" .string "You need me to show you how tenacious\n" .string "the PSYCHIC type can be.$" -MossdeepCity_Gym_Text_2214A7: @ 82214A7 +MossdeepCity_Gym_Text_NateDefeat: @ 82214A7 .string "Oh! My, my!\n" .string "Your battle style is fantastic!$" -MossdeepCity_Gym_Text_2214D3: @ 82214D3 +MossdeepCity_Gym_Text_NatePostBattle: @ 82214D3 .string "I… I don't let defeat rattle m-me,\n" .string "however b-badly.$" -MossdeepCity_Gym_Text_221507: @ 8221507 +MossdeepCity_Gym_Text_KathleenPreBattle: @ 8221507 .string "Let me show you a perfectly awful,\n" .string "horrifying time!$" -MossdeepCity_Gym_Text_22153B: @ 822153B +MossdeepCity_Gym_Text_KathleenDefeat: @ 822153B .string "N-nooooo!$" -MossdeepCity_Gym_Text_221545: @ 8221545 +MossdeepCity_Gym_Text_KathleenPostBattle: @ 8221545 .string "Your vitality is contagious!\n" .string "Get away from me quickly!$" -MossdeepCity_Gym_Text_22157C: @ 822157C +MossdeepCity_Gym_Text_CliffordPreBattle: @ 822157C .string "I may be past my prime, but I suggest\n" .string "you not patronize me.$" -MossdeepCity_Gym_Text_2215B8: @ 82215B8 +MossdeepCity_Gym_Text_CliffordDefeat: @ 82215B8 .string "Ah, you overflow with the power\n" .string "of youth!$" -MossdeepCity_Gym_Text_2215E2: @ 82215E2 +MossdeepCity_Gym_Text_CliffordPostBattle: @ 82215E2 .string "It seems that I could not overcome\n" .string "your youthful energy.$" -MossdeepCity_Gym_Text_22161B: @ 822161B +MossdeepCity_Gym_Text_MaceyPreBattle: @ 822161B .string "You're not getting through to the end!\n" .string "Not if I can help it!$" -MossdeepCity_Gym_Text_221658: @ 8221658 +MossdeepCity_Gym_Text_MaceyDefeat: @ 8221658 .string "How could you be so ludicrously\n" .string "strong?$" -MossdeepCity_Gym_Text_221680: @ 8221680 +MossdeepCity_Gym_Text_MaceyPostBattle: @ 8221680 .string "Humph! You may be strong, but you're\n" .string "not suitable for the PSYCHIC type!\p" .string "The way you battle is somehow brutal!$" -MossdeepCity_Gym_Text_2216EE: @ 82216EE +MossdeepCity_Gym_Text_NicholasPreBattle: @ 82216EE .string "Wroooar! Have a taste of my super\n" .string "POKéMON hard-battling power!$" -MossdeepCity_Gym_Text_22172D: @ 822172D +MossdeepCity_Gym_Text_NicholasDefeat: @ 822172D .string "Oh!\n" .string "Done in!$" -MossdeepCity_Gym_Text_22173A: @ 822173A +MossdeepCity_Gym_Text_NicholasPostBattle: @ 822173A .string "All right! I think I'll develop a special\n" .string "invincible POKéMON power next.$" @@ -573,7 +579,7 @@ MossdeepCity_Gym_Text_ExplainMindBadgeTakeThis: @ 8221999 .string "DIVE outside of battle.\p" .string "TATE: You should also take this, too.$" -MossdeepCity_Gym_Text_221A40: @ 8221A40 +MossdeepCity_Gym_Text_ExplainCalmMind: @ 8221A40 .string "TATE: That TM04 contains…\n" .string "LIZA: CALM MIND!\p" .string "TATE: It raises SP. ATK and…\n" diff --git a/data/maps/Route110_TrickHousePuzzle7/scripts.inc b/data/maps/Route110_TrickHousePuzzle7/scripts.inc index db651d8ce..859d6f61a 100644 --- a/data/maps/Route110_TrickHousePuzzle7/scripts.inc +++ b/data/maps/Route110_TrickHousePuzzle7/scripts.inc @@ -222,7 +222,7 @@ Route110_TrickHousePuzzle7_EventScript_26E31B:: @ 826E31B playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 1 + initrotatingtilepuzzle TRUE mossdeepgym1 0 waitmovement 0 mossdeepgym2 @@ -234,7 +234,7 @@ Route110_TrickHousePuzzle7_EventScript_26E331:: @ 826E331 playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 1 + initrotatingtilepuzzle TRUE mossdeepgym1 1 waitmovement 0 mossdeepgym2 @@ -246,7 +246,7 @@ Route110_TrickHousePuzzle7_EventScript_26E347:: @ 826E347 playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 1 + initrotatingtilepuzzle TRUE mossdeepgym1 2 waitmovement 0 mossdeepgym2 @@ -258,7 +258,7 @@ Route110_TrickHousePuzzle7_EventScript_26E35D:: @ 826E35D playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 1 + initrotatingtilepuzzle TRUE mossdeepgym1 3 waitmovement 0 mossdeepgym2 @@ -270,7 +270,7 @@ Route110_TrickHousePuzzle7_EventScript_26E373:: @ 826E373 playse SE_MU_PACHI waitse playse SE_TU_SAA - mossdeepgym3 1 + initrotatingtilepuzzle TRUE mossdeepgym1 4 waitmovement 0 mossdeepgym2 diff --git a/data/mossdeep_gym.s b/data/mossdeep_gym.s deleted file mode 100644 index c7c5169e8..000000000 --- a/data/mossdeep_gym.s +++ /dev/null @@ -1,43 +0,0 @@ - .include "asm/macros.inc" - - .section .rodata - -gUnknown_08612698:: @ 8612698 - store_lock_anim - walk_right - free_unlock_anim - step_end - -gUnknown_0861269C:: @ 861269C - store_lock_anim - walk_down - free_unlock_anim - step_end - -gUnknown_086126A0:: @ 86126A0 - store_lock_anim - walk_left - free_unlock_anim - step_end - -gUnknown_086126A4:: @ 86126A4 - store_lock_anim - walk_up - free_unlock_anim - step_end - -MossdeepGym_Movement_FaceRight:: @ 86126A8 - face_right - step_end - -MossdeepGym_Movement_FaceDown:: @ 86126AA - face_down - step_end - -MossdeepGym_Movement_FaceLeft:: @ 86126AC - face_left - step_end - -MossdeepGym_Movement_FaceUp:: @ 86126AE - face_up - step_end diff --git a/data/rotating_tile_puzzle.s b/data/rotating_tile_puzzle.s new file mode 100644 index 000000000..c7c5169e8 --- /dev/null +++ b/data/rotating_tile_puzzle.s @@ -0,0 +1,43 @@ + .include "asm/macros.inc" + + .section .rodata + +gUnknown_08612698:: @ 8612698 + store_lock_anim + walk_right + free_unlock_anim + step_end + +gUnknown_0861269C:: @ 861269C + store_lock_anim + walk_down + free_unlock_anim + step_end + +gUnknown_086126A0:: @ 86126A0 + store_lock_anim + walk_left + free_unlock_anim + step_end + +gUnknown_086126A4:: @ 86126A4 + store_lock_anim + walk_up + free_unlock_anim + step_end + +MossdeepGym_Movement_FaceRight:: @ 86126A8 + face_right + step_end + +MossdeepGym_Movement_FaceDown:: @ 86126AA + face_down + step_end + +MossdeepGym_Movement_FaceLeft:: @ 86126AC + face_left + step_end + +MossdeepGym_Movement_FaceUp:: @ 86126AE + face_up + step_end diff --git a/data/script_cmd_table.inc b/data/script_cmd_table.inc index 910227a92..0b6db2fc5 100644 --- a/data/script_cmd_table.inc +++ b/data/script_cmd_table.inc @@ -213,9 +213,9 @@ gScriptCmdTable:: @ 81DB67C .4byte ScrCmd_setmonmetlocation .4byte ScrCmd_mossdeepgym1 .4byte ScrCmd_mossdeepgym2 - .4byte ScrCmd_mossdeepgym3 + .4byte ScrCmd_initrotatingtilepuzzle .4byte ScrCmd_mossdeepgym4 - .4byte ScrCmd_warpD7 + .4byte ScrCmd_warpmossdeepgym .4byte ScrCmd_cmdD8 .4byte ScrCmd_cmdD9 .4byte ScrCmd_cmdDA diff --git a/include/constants/flags.h b/include/constants/flags.h index f47b0dff6..21d9fcfb0 100644 --- a/include/constants/flags.h +++ b/include/constants/flags.h @@ -109,10 +109,10 @@ #define FLAG_MET_TEAM_AQUA_HARBOR 0x61 #define FLAG_TV_EXPLAINED 0x62 #define FLAG_MAUVILLE_GYM_BARRIERS_STATE 0x63 -#define FLAG_MOSSDEEP_GYM_SWITCH_1 0x64 -#define FLAG_MOSSDEEP_GYM_SWITCH_2 0x65 -#define FLAG_MOSSDEEP_GYM_SWITCH_3 0x66 -#define FLAG_MOSSDEEP_GYM_SWITCH_4 0x67 +#define FLAG_MOSSDEEP_GYM_SWITCH_1 0x64 // Leftover from the RS version of Mossdeep Gym, functionally always zero +#define FLAG_MOSSDEEP_GYM_SWITCH_2 0x65 // +#define FLAG_MOSSDEEP_GYM_SWITCH_3 0x66 // +#define FLAG_MOSSDEEP_GYM_SWITCH_4 0x67 // #define FLAG_UNUSED_0x068 0x68 // Unused Flag diff --git a/include/constants/metatile_labels.h b/include/constants/metatile_labels.h index ea54d04a8..db205819d 100644 --- a/include/constants/metatile_labels.h +++ b/include/constants/metatile_labels.h @@ -68,15 +68,16 @@ #define METATILE_PetalburgGym_SlidingDoor_Frame3 0x21B #define METATILE_PetalburgGym_SlidingDoor_Frame4 0x21C -// gTileset_MossdeepGym -#define METATILE_MossdeepGym_Obelisk_Top 0x204 -#define METATILE_MossdeepGym_Obelisk_Base 0x20C -#define METATILE_MossdeepGym_Wall_LeftCorner 0x20D -#define METATILE_MossdeepGym_OuterWall_RightCorner 0x205 -#define METATILE_MossdeepGym_Empty0 0x238 -#define METATILE_MossdeepGym_Empty1 0x239 -#define METATILE_MossdeepGym_YellowRightArrow 0x250 +// gTileset_MossdeepGym from R/S +#define METATILE_RS_MossdeepGym_RedArrow_Right 0x204 +#define METATILE_RS_MossdeepGym_RedArrow_Left 0x20C +#define METATILE_RS_MossdeepGym_RedArrow_Up 0x20D +#define METATILE_RS_MossdeepGym_RedArrow_Down 0x205 +#define METATILE_RS_MossdeepGym_Switch_Up 0x238 +#define METATILE_RS_MossdeepGym_Switch_Down 0x239 +// gTileset_MossdeepGym from Emerald +#define METATILE_MossdeepGym_YellowRightArrow 0x250 // gTileset_BrendansMaysHouse #define METATILE_BrendansMaysHouse_BrendanPC_Off 0x25A @@ -378,6 +379,7 @@ #define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Down 0x263 #define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Left_Alt 0x27B #define METATILE_TrickHousePuzzle_Arrow_RedOnBlack_Right_Alt 0x27C +#define METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right 0x298 // gTileset_BikeShop #define METATILE_BikeShop_Barrier_Hidden_Top 0x269 diff --git a/include/field_screen_effect.h b/include/field_screen_effect.h index a62a76b2a..e26188d47 100644 --- a/include/field_screen_effect.h +++ b/include/field_screen_effect.h @@ -28,7 +28,7 @@ void sub_80AF80C(u8 metatileBehavior); void sub_80AF828(void); void sub_80AF838(void); void sub_80AF848(void); -void sub_80AF87C(void); +void DoMossdeepGymWarp(void); void sub_80AF8B8(void); void sub_80AF948(void); void sub_80AF9F8(void); diff --git a/include/mossdeep_gym.h b/include/mossdeep_gym.h deleted file mode 100644 index c16730094..000000000 --- a/include/mossdeep_gym.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef GUARD_MOSSDEEP_GYM_H -#define GUARD_MOSSDEEP_GYM_H - -void InitMossdeepGymTiles(bool8 arg0); -void FinishMossdeepGymTiles(void); -u16 MossdeepGym_MoveEvents(u8 arg0); -void MossdeepGym_TurnEvents(void); - -#endif // GUARD_MOSSDEEP_GYM_H diff --git a/include/rotating_tile_puzzle.h b/include/rotating_tile_puzzle.h new file mode 100644 index 000000000..48b27c5f3 --- /dev/null +++ b/include/rotating_tile_puzzle.h @@ -0,0 +1,9 @@ +#ifndef GUARD_ROTATING_TILE_PUZZLE_H +#define GUARD_ROTATING_TILE_PUZZLE_H + +void InitRotatingTilePuzzle(bool8 isTrickHouse); +void FinishMossdeepGymTiles(void); +u16 MossdeepGym_MoveEvents(u8 puzzleNumber); +void MossdeepGym_TurnEvents(void); + +#endif // GUARD_ROTATING_TILE_PUZZLE_H diff --git a/ld_script.txt b/ld_script.txt index d37cd595f..92aafebde 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -287,7 +287,7 @@ SECTIONS { src/battle_arena.o(.text); src/battle_factory.o(.text); src/battle_pike.o(.text); - src/mossdeep_gym.o(.text); + src/rotating_tile_puzzle.o(.text); src/battle_pyramid.o(.text); src/item_menu.o(.text); src/list_menu.o(.text); @@ -644,8 +644,8 @@ SECTIONS { src/battle_arena.o(.rodata); src/battle_factory.o(.rodata); src/battle_pike.o(.rodata); - src/mossdeep_gym.o(.rodata); - data/mossdeep_gym.o(.rodata); + src/rotating_tile_puzzle.o(.rodata); + data/rotating_tile_puzzle.o(.rodata); src/battle_pyramid.o(.rodata); src/item_menu.o(.rodata); src/list_menu.o(.rodata); diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c index f3f9be530..46e4840a4 100644 --- a/src/field_control_avatar.c +++ b/src/field_control_avatar.c @@ -738,7 +738,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *position, u16 metatileB } if (MetatileBehavior_IsMossdeepGymWarp(metatileBehavior) == TRUE) { - sub_80AF87C(); + DoMossdeepGymWarp(); return TRUE; } DoWarp(); diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c index 9a5d47156..872946ce5 100644 --- a/src/field_screen_effect.c +++ b/src/field_screen_effect.c @@ -556,7 +556,7 @@ void sub_80AF848(void) gFieldCallback = sub_80AF3E8; } -void sub_80AF87C(void) +void DoMossdeepGymWarp(void) { sub_8085540(1); ScriptContext2_Enable(); diff --git a/src/mossdeep_gym.c b/src/mossdeep_gym.c deleted file mode 100644 index 2dc641705..000000000 --- a/src/mossdeep_gym.c +++ /dev/null @@ -1,314 +0,0 @@ -#include "global.h" -#include "event_object_movement.h" -#include "fieldmap.h" -#include "malloc.h" -#include "mossdeep_gym.h" -#include "script_movement.h" -#include "constants/event_object_movement_constants.h" -#include "constants/event_objects.h" - -// Movement scripts. -extern const u8 gUnknown_08612698[]; -extern const u8 gUnknown_0861269C[]; -extern const u8 gUnknown_086126A0[]; -extern const u8 gUnknown_086126A4[]; -extern const u8 MossdeepGym_Movement_FaceRight[]; -extern const u8 MossdeepGym_Movement_FaceDown[]; -extern const u8 MossdeepGym_Movement_FaceLeft[]; -extern const u8 MossdeepGym_Movement_FaceUp[]; - -struct MossdeepSubStruct -{ - u8 unk0; - u8 eventTemplateId; -}; - -struct MossdeepStruct -{ - struct MossdeepSubStruct objects[EVENT_OBJECTS_COUNT]; - u8 count; - bool8 unk41; -}; - -// This file's functions. -static void AddEventObject(u8 eventTemplateId, u8 arg1); -static void sub_81A8D94(u8 eventTemplateId, u8 arg1); - -// EWRAM vars -EWRAM_DATA static struct MossdeepStruct *sMossdeepGym = NULL; - -// code -void InitMossdeepGymTiles(bool8 arg0) -{ - if (sMossdeepGym == NULL) - sMossdeepGym = AllocZeroed(sizeof(*sMossdeepGym)); - - sMossdeepGym->unk41 = arg0; -} - -void FinishMossdeepGymTiles(void) -{ - u8 id; - - if (sMossdeepGym != NULL) - FREE_AND_SET_NULL(sMossdeepGym); - - id = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); - EventObjectClearHeldMovementIfFinished(&gEventObjects[id]); - ScriptMovement_UnfreezeEventObjects(); -} - -u16 MossdeepGym_MoveEvents(u8 arg0) -{ - u8 i; - struct EventObjectTemplate *events = gSaveBlock1Ptr->eventObjectTemplates; - u16 localId = 0; - - for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++) - { - s32 var; - u8 r5; - s16 x = events[i].x + 7; - s16 y = events[i].y + 7; - u16 metatile = MapGridGetMetatileIdAt(x, y); - - if (!sMossdeepGym->unk41) - var = 0x250; - else - var = 0x298; - - if (metatile < 0x250) - continue; - - if ((u8)((metatile - var) / 8) >= 5) - continue; - if ((u8)((metatile - var) / 8) != arg0) - continue; - - r5 = (u8)((metatile - var) % 8); - if (r5 < 4) - { - s8 x = 0; - s8 y = 0; - const u8 *movementScript; - - switch (r5) - { - case 0: - movementScript = gUnknown_08612698; - x = 1; - break; - case 1: - movementScript = gUnknown_0861269C; - y = 1; - break; - case 2: - movementScript = gUnknown_086126A0; - x = -1; - break; - case 3: - movementScript = gUnknown_086126A4; - y = -1; - break; - default: - continue; - } - - events[i].x += x; - events[i].y += y; - if (GetEventObjectIdByLocalIdAndMap(events[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup) != EVENT_OBJECTS_COUNT) - { - AddEventObject(i, r5); - localId = events[i].localId; - ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript); - } - else - { - sub_81A8D94(i, r5); - } - } - } - - return localId; -} - -void MossdeepGym_TurnEvents(void) -{ - u8 i; - s32 var; - struct EventObjectTemplate *events; - - if (sMossdeepGym == NULL) - return; - - if (!sMossdeepGym->unk41) - var = 0x250; - else - var = 0x298; - - events = gSaveBlock1Ptr->eventObjectTemplates; - for (i = 0; i < sMossdeepGym->count; i++) - { - s32 r6; - s8 r0; - u8 eventObjectId; - s16 x = events[sMossdeepGym->objects[i].eventTemplateId].x + 7; - s16 y = events[sMossdeepGym->objects[i].eventTemplateId].y + 7; - u16 metatile = MapGridGetMetatileIdAt(x, y); - - r0 = (u8)((metatile - var) % 8); - r0 -= (sMossdeepGym->objects[i].unk0); - if (r0 < 0 || r0 == 3) - { - if (r0 == -3) - r6 = 1; - else - r6 = 0; - } - else - { - if (r0 > 0) - r6 = 1; - else - r6 = 2; - } - - eventObjectId = GetEventObjectIdByLocalIdAndMap(events[sMossdeepGym->objects[i].eventTemplateId].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); - if (eventObjectId != EVENT_OBJECTS_COUNT) - { - const u8 *movementScript; - u8 direction = gEventObjects[eventObjectId].facingDirection; - if (r6 == 0) - { - switch (direction) - { - case DIR_EAST: - movementScript = MossdeepGym_Movement_FaceUp; - events[sMossdeepGym->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; - break; - case DIR_SOUTH: - movementScript = MossdeepGym_Movement_FaceRight; - events[sMossdeepGym->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; - break; - case DIR_WEST: - movementScript = MossdeepGym_Movement_FaceDown; - events[sMossdeepGym->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; - break; - case DIR_NORTH: - movementScript = MossdeepGym_Movement_FaceLeft; - events[sMossdeepGym->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; - break; - default: - continue; - } - ScriptMovement_StartObjectMovementScript(events[sMossdeepGym->objects[i].eventTemplateId].localId, - gSaveBlock1Ptr->location.mapNum, - gSaveBlock1Ptr->location.mapGroup, - movementScript); - } - else if (r6 == 1) - { - switch (direction) - { - case DIR_EAST: - movementScript = MossdeepGym_Movement_FaceDown; - events[sMossdeepGym->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; - break; - case DIR_SOUTH: - movementScript = MossdeepGym_Movement_FaceLeft; - events[sMossdeepGym->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; - break; - case DIR_WEST: - movementScript = MossdeepGym_Movement_FaceUp; - events[sMossdeepGym->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; - break; - case DIR_NORTH: - movementScript = MossdeepGym_Movement_FaceRight; - events[sMossdeepGym->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; - break; - default: - continue; - } - ScriptMovement_StartObjectMovementScript(events[sMossdeepGym->objects[i].eventTemplateId].localId, - gSaveBlock1Ptr->location.mapNum, - gSaveBlock1Ptr->location.mapGroup, - movementScript); - } - } - } -} - -static void AddEventObject(u8 eventTemplateId, u8 arg1) -{ - sMossdeepGym->objects[sMossdeepGym->count].eventTemplateId = eventTemplateId; - sMossdeepGym->objects[sMossdeepGym->count].unk0 = arg1; - sMossdeepGym->count++; -} - -static void sub_81A8D94(u8 eventTemplateId, u8 arg1) -{ - s8 r0; - s32 r6; - s32 var; - u16 movementType; - struct EventObjectTemplate *events = gSaveBlock1Ptr->eventObjectTemplates; - s16 x = events[eventTemplateId].x + 7; - s16 y = events[eventTemplateId].y + 7; - u16 metatile = MapGridGetMetatileIdAt(x, y); - - if (!sMossdeepGym->unk41) - var = 0x250; - else - var = 0x298; - - r0 = (u8)((metatile - var) % 8); - r0 -= arg1; - if (r0 < 0 || r0 == 3) - r6 = 0; - else if (r0 > 0 || r0 == -3) - r6 = 1; - else - r6 = 2; - - movementType = events[eventTemplateId].movementType; - if (r6 == 0) - { - switch (movementType) - { - case MOVEMENT_TYPE_FACE_RIGHT: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; - break; - case MOVEMENT_TYPE_FACE_DOWN: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; - break; - case MOVEMENT_TYPE_FACE_LEFT: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; - break; - case MOVEMENT_TYPE_FACE_UP: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; - break; - default: - break; - } - } - else if (r6 == 1) - { - switch (movementType) - { - case MOVEMENT_TYPE_FACE_RIGHT: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; - break; - case MOVEMENT_TYPE_FACE_DOWN: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; - break; - case MOVEMENT_TYPE_FACE_LEFT: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; - break; - case MOVEMENT_TYPE_FACE_UP: - events[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; - break; - default: - break; - } - } -} diff --git a/src/rotating_tile_puzzle.c b/src/rotating_tile_puzzle.c new file mode 100644 index 000000000..acc1c11cc --- /dev/null +++ b/src/rotating_tile_puzzle.c @@ -0,0 +1,315 @@ +#include "global.h" +#include "event_object_movement.h" +#include "fieldmap.h" +#include "malloc.h" +#include "rotating_tile_puzzle.h" +#include "script_movement.h" +#include "constants/event_object_movement_constants.h" +#include "constants/event_objects.h" +#include "constants/metatile_labels.h" + +// Movement scripts. +extern const u8 gUnknown_08612698[]; +extern const u8 gUnknown_0861269C[]; +extern const u8 gUnknown_086126A0[]; +extern const u8 gUnknown_086126A4[]; +extern const u8 MossdeepGym_Movement_FaceRight[]; +extern const u8 MossdeepGym_Movement_FaceDown[]; +extern const u8 MossdeepGym_Movement_FaceLeft[]; +extern const u8 MossdeepGym_Movement_FaceUp[]; + +struct MossdeepSubStruct +{ + u8 unk0; + u8 eventTemplateId; +}; + +struct RotatingTilePuzzle +{ + struct MossdeepSubStruct objects[EVENT_OBJECTS_COUNT]; + u8 count; + bool8 isTrickHouse; +}; + +// This file's functions. +static void AddEventObject(u8 eventTemplateId, u8 arg1); +static void sub_81A8D94(u8 eventTemplateId, u8 arg1); + +// EWRAM vars +EWRAM_DATA static struct RotatingTilePuzzle *sRotatingTilePuzzle = NULL; + +// code +void InitRotatingTilePuzzle(bool8 isTrickHouse) +{ + if (sRotatingTilePuzzle == NULL) + sRotatingTilePuzzle = AllocZeroed(sizeof(*sRotatingTilePuzzle)); + + sRotatingTilePuzzle->isTrickHouse = isTrickHouse; +} + +void FinishMossdeepGymTiles(void) +{ + u8 id; + + if (sRotatingTilePuzzle != NULL) + FREE_AND_SET_NULL(sRotatingTilePuzzle); + + id = GetEventObjectIdByLocalIdAndMap(EVENT_OBJ_ID_PLAYER, 0, 0); + EventObjectClearHeldMovementIfFinished(&gEventObjects[id]); + ScriptMovement_UnfreezeEventObjects(); +} + +u16 MossdeepGym_MoveEvents(u8 puzzleNumber) +{ + u8 i; + struct EventObjectTemplate *eventObjects = gSaveBlock1Ptr->eventObjectTemplates; + u16 localId = 0; + + for (i = 0; i < EVENT_OBJECT_TEMPLATES_COUNT; i++) + { + s32 puzzleTileStart; + u8 r5; + s16 x = eventObjects[i].x + 7; + s16 y = eventObjects[i].y + 7; + u16 metatile = MapGridGetMetatileIdAt(x, y); + + if (!sRotatingTilePuzzle->isTrickHouse) + puzzleTileStart = METATILE_MossdeepGym_YellowRightArrow; + else + puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right; + + if (metatile < METATILE_MossdeepGym_YellowRightArrow) + continue; + + if ((u8)((metatile - puzzleTileStart) / 8) >= 5) + continue; + if ((u8)((metatile - puzzleTileStart) / 8) != puzzleNumber) + continue; + + r5 = (u8)((metatile - puzzleTileStart) % 8); + if (r5 < 4) + { + s8 x = 0; + s8 y = 0; + const u8 *movementScript; + + switch (r5) + { + case 0: + movementScript = gUnknown_08612698; + x = 1; + break; + case 1: + movementScript = gUnknown_0861269C; + y = 1; + break; + case 2: + movementScript = gUnknown_086126A0; + x = -1; + break; + case 3: + movementScript = gUnknown_086126A4; + y = -1; + break; + default: + continue; + } + + eventObjects[i].x += x; + eventObjects[i].y += y; + if (GetEventObjectIdByLocalIdAndMap(eventObjects[i].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup) != EVENT_OBJECTS_COUNT) + { + AddEventObject(i, r5); + localId = eventObjects[i].localId; + ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript); + } + else + { + sub_81A8D94(i, r5); + } + } + } + + return localId; +} + +void MossdeepGym_TurnEvents(void) +{ + u8 i; + s32 puzzleTileStart; + struct EventObjectTemplate *eventObjects; + + if (sRotatingTilePuzzle == NULL) + return; + + if (!sRotatingTilePuzzle->isTrickHouse) + puzzleTileStart = METATILE_MossdeepGym_YellowRightArrow; + else + puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right; + + eventObjects = gSaveBlock1Ptr->eventObjectTemplates; + for (i = 0; i < sRotatingTilePuzzle->count; i++) + { + s32 r6; + s8 r0; + u8 eventObjectId; + s16 x = eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].x + 7; + s16 y = eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].y + 7; + u16 metatile = MapGridGetMetatileIdAt(x, y); + + r0 = (u8)((metatile - puzzleTileStart) % 8); + r0 -= (sRotatingTilePuzzle->objects[i].unk0); + if (r0 < 0 || r0 == 3) + { + if (r0 == -3) + r6 = 1; + else + r6 = 0; + } + else + { + if (r0 > 0) + r6 = 1; + else + r6 = 2; + } + + eventObjectId = GetEventObjectIdByLocalIdAndMap(eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); + if (eventObjectId != EVENT_OBJECTS_COUNT) + { + const u8 *movementScript; + u8 direction = gEventObjects[eventObjectId].facingDirection; + if (r6 == 0) + { + switch (direction) + { + case DIR_EAST: + movementScript = MossdeepGym_Movement_FaceUp; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; + break; + case DIR_SOUTH: + movementScript = MossdeepGym_Movement_FaceRight; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; + break; + case DIR_WEST: + movementScript = MossdeepGym_Movement_FaceDown; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; + break; + case DIR_NORTH: + movementScript = MossdeepGym_Movement_FaceLeft; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; + break; + default: + continue; + } + ScriptMovement_StartObjectMovementScript(eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].localId, + gSaveBlock1Ptr->location.mapNum, + gSaveBlock1Ptr->location.mapGroup, + movementScript); + } + else if (r6 == 1) + { + switch (direction) + { + case DIR_EAST: + movementScript = MossdeepGym_Movement_FaceDown; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; + break; + case DIR_SOUTH: + movementScript = MossdeepGym_Movement_FaceLeft; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; + break; + case DIR_WEST: + movementScript = MossdeepGym_Movement_FaceUp; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; + break; + case DIR_NORTH: + movementScript = MossdeepGym_Movement_FaceRight; + eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; + break; + default: + continue; + } + ScriptMovement_StartObjectMovementScript(eventObjects[sRotatingTilePuzzle->objects[i].eventTemplateId].localId, + gSaveBlock1Ptr->location.mapNum, + gSaveBlock1Ptr->location.mapGroup, + movementScript); + } + } + } +} + +static void AddEventObject(u8 eventTemplateId, u8 arg1) +{ + sRotatingTilePuzzle->objects[sRotatingTilePuzzle->count].eventTemplateId = eventTemplateId; + sRotatingTilePuzzle->objects[sRotatingTilePuzzle->count].unk0 = arg1; + sRotatingTilePuzzle->count++; +} + +static void sub_81A8D94(u8 eventTemplateId, u8 arg1) +{ + s8 r0; + s32 r6; + s32 puzzleTileStart; + u16 movementType; + struct EventObjectTemplate *eventObjects = gSaveBlock1Ptr->eventObjectTemplates; + s16 x = eventObjects[eventTemplateId].x + 7; + s16 y = eventObjects[eventTemplateId].y + 7; + u16 metatile = MapGridGetMetatileIdAt(x, y); + + if (!sRotatingTilePuzzle->isTrickHouse) + puzzleTileStart = METATILE_MossdeepGym_YellowRightArrow; + else + puzzleTileStart = METATILE_TrickHousePuzzle_Arrow_YellowOnWhite_Right; + + r0 = (u8)((metatile - puzzleTileStart) % 8); + r0 -= arg1; + if (r0 < 0 || r0 == 3) + r6 = 0; + else if (r0 > 0 || r0 == -3) + r6 = 1; + else + r6 = 2; + + movementType = eventObjects[eventTemplateId].movementType; + if (r6 == 0) + { + switch (movementType) + { + case MOVEMENT_TYPE_FACE_RIGHT: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; + break; + case MOVEMENT_TYPE_FACE_DOWN: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; + break; + case MOVEMENT_TYPE_FACE_LEFT: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; + break; + case MOVEMENT_TYPE_FACE_UP: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; + break; + default: + break; + } + } + else if (r6 == 1) + { + switch (movementType) + { + case MOVEMENT_TYPE_FACE_RIGHT: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_DOWN; + break; + case MOVEMENT_TYPE_FACE_DOWN: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_LEFT; + break; + case MOVEMENT_TYPE_FACE_LEFT: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_UP; + break; + case MOVEMENT_TYPE_FACE_UP: + eventObjects[eventTemplateId].movementType = MOVEMENT_TYPE_FACE_RIGHT; + break; + default: + break; + } + } +} diff --git a/src/scrcmd.c b/src/scrcmd.c index 9861f9dae..c1188f16a 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -815,7 +815,7 @@ bool8 ScrCmd_warpteleport(struct ScriptContext *ctx) return TRUE; } -bool8 ScrCmd_warpD7(struct ScriptContext *ctx) +bool8 ScrCmd_warpmossdeepgym(struct ScriptContext *ctx) { u8 mapGroup = ScriptReadByte(ctx); u8 mapNum = ScriptReadByte(ctx); @@ -824,7 +824,7 @@ bool8 ScrCmd_warpD7(struct ScriptContext *ctx) u16 y = VarGet(ScriptReadHalfword(ctx)); SetWarpDestination(mapGroup, mapNum, warpId, x, y); - sub_80AF87C(); + DoMossdeepGymWarp(); ResetInitialPlayerAvatarState(); return TRUE; } @@ -2151,9 +2151,9 @@ bool8 ScrCmd_takecoins(struct ScriptContext *ctx) bool8 ScrCmd_mossdeepgym1(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u16 puzzleNumber = VarGet(ScriptReadHalfword(ctx)); - sMovingNpcId = MossdeepGym_MoveEvents(v1); + sMovingNpcId = MossdeepGym_MoveEvents(puzzleNumber); return FALSE; } @@ -2163,11 +2163,11 @@ bool8 ScrCmd_mossdeepgym2(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_mossdeepgym3(struct ScriptContext *ctx) +bool8 ScrCmd_initrotatingtilepuzzle(struct ScriptContext *ctx) { - u16 v1 = VarGet(ScriptReadHalfword(ctx)); + u16 isTrickHouse = VarGet(ScriptReadHalfword(ctx)); - InitMossdeepGymTiles(v1); + InitRotatingTilePuzzle(isTrickHouse); return FALSE; } diff --git a/sym_ewram.txt b/sym_ewram.txt index bdbb85d37..79e89fc9b 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -129,7 +129,7 @@ .include "src/match_call.o" .include "src/menu.o" .include "src/battle_factory_screen.o" - .include "src/mossdeep_gym.o" + .include "src/rotating_tile_puzzle.o" .include "src/item_menu.o" .include "src/list_menu.o" .include "src/dynamic_placeholder_text_util.o" -- cgit v1.2.3