-- name: Bowser Stage Gauntlet -- description: Bowser In The Sky becomes a gauntlet containing all three Bowser stages. Keys are also given by default.\n\nMod by EmilyEmmi gGlobalSyncTable.stageCheckpoints = true gGlobalSyncTable.disableMod = false -- mh support because why not function mh_game_area() if mhExists then local gameArea = mhApi.getGlobalField("gameArea") or 0 return gameArea end return 0 end function update() if gGlobalSyncTable.disableMod then return end if mh_game_area() == 0 then save_file_set_flags(SAVE_FLAG_UNLOCKED_BASEMENT_DOOR | SAVE_FLAG_UNLOCKED_UPSTAIRS_DOOR) end end hook_event(HOOK_UPDATE, update) function before_warp(level, area, node, type) if gGlobalSyncTable.disableMod then return end local np = gNetworkPlayers[0] if level == LEVEL_BOWSER_1 then return {destLevel = LEVEL_BITFS, destArea = 1, destWarpNode = 10} -- second level of gauntlet elseif level == LEVEL_BOWSER_2 then return {destLevel = LEVEL_BITS, destArea = 1, destWarpNode = 10} -- final level of gauntlet elseif (np.currLevelNum == LEVEL_BITDW or np.currLevelNum == LEVEL_BITFS or np.currLevelNum == LEVEL_BITS) and level == LEVEL_CASTLE then if gGlobalSyncTable.stageCheckpoints and np.currLevelNum ~= LEVEL_BITDW then if np.currLevelNum == LEVEL_BITFS then return {destLevel = LEVEL_BITDW, destArea = 1, destWarpNode = 12} -- death warp from bowser 1 entrance elseif np.currLevelNum == LEVEL_BITS then return {destLevel = LEVEL_BITFS, destArea = 1, destWarpNode = 12} -- death warp from bowser 2 entrance end else if mh_game_area() == 1 then return {destLevel = LEVEL_CASTLE, destArea = 1, destWarpNode = 37} -- death warp out of bitdw elseif mh_game_area() == 2 then return {destLevel = LEVEL_CASTLE, destArea = 3, destWarpNode = 104} -- death warp out of bitfs elseif np.currLevelNum ~= LEVEL_BITS then return {destLevel = LEVEL_CASTLE, destArea = 2, destWarpNode = 107} -- death warp from bits entrance end end elseif np.currLevelNum == LEVEL_CASTLE then local isBowserLevel = (level == LEVEL_BITDW or level == LEVEL_BITFS or level == LEVEL_BITS) if not isBowserLevel then return end if level == LEVEL_BITS or mh_game_area() ~= 0 then return {destLevel = LEVEL_BITDW, destArea = 1, destWarpNode = 10} -- warp to entrance of gauntlet else djui_chat_message_create("Can't go here!") if level == LEVEL_BITDW then return {destLevel = LEVEL_CASTLE, destArea = 1, destWarpNode = 37} -- death warp out of bitdw (prevent entry) end return {destLevel = LEVEL_CASTLE, destArea = 3, destWarpNode = 104} -- death warp out of bitfs (prevent entry) end end end hook_event(HOOK_BEFORE_WARP, before_warp) if network_is_server() then hook_mod_menu_checkbox("Disable Mod", gGlobalSyncTable.disableMod, function(index, value) gGlobalSyncTable.disableMod = value end) hook_mod_menu_checkbox("Gauntlet Checkpoints", gGlobalSyncTable.stageCheckpoints, function(index, value) gGlobalSyncTable.stageCheckpoints = value end) end