--!native --!optimize 2 local Players = game:GetService("Players") local ReplicatedStorage = game:GetService("ReplicatedStorage") local LoadingScreen = require(ReplicatedStorage.Client.LoadingScreen) local ModLoader = require(ReplicatedStorage.Shared.ModLoader) local ChunkManager = require(ReplicatedStorage.Shared.ChunkManager) local PlacementManager = require(ReplicatedStorage.Shared.PlacementManager) local Bootstrap = {} local started = false local function ensureFlag(name: string) local objects = ReplicatedStorage:WaitForChild("Objects") local existing = objects:FindFirstChild(name) if existing and existing:IsA("BoolValue") then return existing end local ready = Instance.new("BoolValue") ready.Name = name ready.Value = true ready.Parent = objects return ready end local contentProvider = game:GetService("ContentProvider") local function waitForGameLoaded() if game:IsLoaded() then return end game.Loaded:Wait() end function Bootstrap.start() if started then return end started = true contentProvider:PreloadAsync(game:GetDescendants()) ensureFlag("ClientReady") local screen = LoadingScreen.mount() screen.setStatus("Connecting...") screen.setDetail("Waiting for server") screen.setProgress(0.2) task.wait(1) waitForGameLoaded() local modsFolder = ReplicatedStorage:WaitForChild("Mods") local totalMods = #modsFolder:GetChildren() local modProgressWeight = 0.6 ModLoader.loadModsC(function(index, total, modInstance, success) total = total > 0 and total or math.max(totalMods, 1) local ratio = index / total screen.setStatus(`Modloading progress: {index}/{total}`) screen.setDetail(`Loading {modInstance.Name}`) screen.setProgress(0.05 + ratio * modProgressWeight) if not success then screen.setDetail(`Failed loading {modInstance.Name}; continuing`) end end) ensureFlag("CSMLLoaded") -- needed screen.setStatus("Joining world...") screen.setDetail("Syncing with server") screen.setProgress(0.7) task.wait(0.5) screen.close() end return Bootstrap