let gameConfig = null; let isLoaded = false; let isGameRunning = false; let isGameOver = false; let sessionID = null; let socket = null; let obstacleBuffer = []; let platformBuffer = []; let score = 0; let currentTick = 0; let godModeLives = 0; let hasBat = false; let bootTicks = 0; let maxRawBgIndex = 0; let lastTime = 0; let accumulator = 0; let sprites = {}; let playerSprite = new Image(); let bgSprites = []; let player = { x: 50, y: 300, w: 30, h: 50, color: "red", vy: 0, grounded: false, prevY: 300 }; let particles = []; let obstacles = []; let platforms = []; let serverObstacles = []; let serverPlatforms = []; let currentLatencyMs = 0; let pingInterval = null; let isCrouching = false; const canvas = document.getElementById('gameCanvas'); const ctx = canvas.getContext('2d'); const container = document.getElementById('game-container'); const startScreen = document.getElementById('startScreen'); const startBtn = document.getElementById('startBtn'); const loadingText = document.getElementById('loadingText'); const gameOverScreen = document.getElementById('gameOverScreen'); const scoreDisplay = document.getElementById('score'); const highscoreDisplay = document.getElementById('localHighscore');