From 5653e58578ee14d3299cb13aafde224dbf9b2ba7 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 6 Mar 2026 02:24:16 +0000 Subject: [PATCH 01/17] Build initial browser jumper prototype Co-authored-by: ilikevibecoding --- README.md | 73 ++- game.js | 1447 ++++++++++++++++++++++++++++++++++++++++++++++++ index.html | 808 ++++++--------------------- smoke-test.mjs | 282 ++++++++++ styles.css | 495 +++++++++++++++++ 5 files changed, 2465 insertions(+), 640 deletions(-) create mode 100644 game.js create mode 100644 smoke-test.mjs create mode 100644 styles.css diff --git a/README.md b/README.md index 6c7da79..148d13a 100644 --- a/README.md +++ b/README.md @@ -1 +1,72 @@ -# My-projects \ No newline at end of file +# Skybound Scribble + +Skybound Scribble is a polished browser-based arcade platformer inspired by Doodle Jump. +It is built with plain HTML, CSS, and JavaScript, so you can run it locally in any modern desktop browser without a bundler or framework. + +## Features + +- Endless vertical jumping gameplay +- Auto-bounce movement just like classic Doodle Jump-style games +- Horizontal wraparound +- Procedural platform generation +- Multiple platform types: + - stable platforms + - moving platforms + - breakable platforms + - vanishing platforms + - boost platforms +- Power-ups: + - spring boosts + - jetpack bursts +- Hazards: + - doodle sky monsters +- HUD with score, height, best score, and style streak +- Start, pause, and game-over overlays +- Keyboard and touch controls +- Persistent best score and sound setting with `localStorage` +- Lightweight procedural sound toggle + +## Run locally + +From the project folder: + +```bash +python3 -m http.server 8000 +``` + +Then open: + +```text +http://localhost:8000 +``` + +You can also open `index.html` directly, but a local server is recommended. + +## Controls + +### Desktop + +- `A` / `D` — move left / right +- `←` / `→` — move left / right +- `P` or `Esc` — pause / resume +- `Enter` — start a run from the start or game-over screen +- `R` — quick restart from the start or game-over screen + +### Mobile / touch + +- Use the on-screen left / right buttons at the bottom of the page + +## Gameplay tips + +- Land on platforms from above to bounce automatically. +- Use wraparound movement to recover from awkward jumps. +- Springs and boost pads are your best tools for skipping dangerous gaps. +- Vanishing pads help once, then disappear. +- Breakable pads crack and drop out after contact. +- The longer you survive, the more hazards and tricky platform combinations appear. + +## Project files + +- `index.html` — page structure and overlays +- `styles.css` — full visual design and responsive layout +- `game.js` — gameplay loop, physics, rendering, input, audio, and persistence \ No newline at end of file diff --git a/game.js b/game.js new file mode 100644 index 0000000..619b918 --- /dev/null +++ b/game.js @@ -0,0 +1,1447 @@ +(() => { + const STORAGE_KEY = "skybound-scribble-save-v1"; + + const CONFIG = { + width: 420, + height: 720, + gravity: -1820, + moveAcceleration: 1650, + friction: 1280, + maxMoveSpeed: 320, + jumpVelocity: 920, + springVelocity: 1180, + boostVelocity: 1260, + breakVelocity: 760, + jetpackVelocity: 1380, + jetpackDuration: 1.3, + cameraFollowHeight: 300, + deathBuffer: 170, + platformThickness: 14, + cloudBuffer: 560, + worldPadding: 18, + maxDelta: 1 / 30, + }; + + const clamp = (value, min, max) => Math.max(min, Math.min(max, value)); + const lerp = (start, end, amount) => start + (end - start) * amount; + const randomRange = (min, max) => min + Math.random() * (max - min); + const randomInt = (min, max) => Math.floor(randomRange(min, max + 1)); + const chance = (value) => Math.random() < value; + const sign = () => (Math.random() < 0.5 ? -1 : 1); + + class AudioSystem { + constructor() { + this.context = null; + this.master = null; + this.muted = true; + } + + ensureContext() { + if (this.context) { + if (this.context.state === "suspended") { + this.context.resume().catch(() => {}); + } + return; + } + + const AudioContext = window.AudioContext || window.webkitAudioContext; + if (!AudioContext) { + return; + } + + this.context = new AudioContext(); + this.master = this.context.createGain(); + this.master.gain.value = this.muted ? 0 : 0.08; + this.master.connect(this.context.destination); + } + + setMuted(value) { + this.muted = value; + if (this.master) { + this.master.gain.value = value ? 0 : 0.08; + } + } + + tone(frequency, duration, type = "sine", volume = 0.2, slideTo = null) { + if (!this.context || this.muted) { + return; + } + + const now = this.context.currentTime; + const oscillator = this.context.createOscillator(); + const gain = this.context.createGain(); + + oscillator.type = type; + oscillator.frequency.setValueAtTime(frequency, now); + if (slideTo) { + oscillator.frequency.exponentialRampToValueAtTime(Math.max(1, slideTo), now + duration); + } + + gain.gain.setValueAtTime(volume, now); + gain.gain.exponentialRampToValueAtTime(0.001, now + duration); + + oscillator.connect(gain); + gain.connect(this.master); + + oscillator.start(now); + oscillator.stop(now + duration); + } + + playJump() { + this.tone(360, 0.08, "triangle", 0.07, 510); + } + + playBoost() { + this.tone(420, 0.22, "sawtooth", 0.08, 900); + } + + playJetpack() { + this.tone(180, 0.16, "square", 0.05, 260); + } + + playGameOver() { + this.tone(260, 0.12, "triangle", 0.08, 160); + this.tone(180, 0.24, "sine", 0.06, 100); + } + + playButton() { + this.tone(520, 0.06, "triangle", 0.06, 690); + } + } + + class InputController { + constructor() { + this.left = false; + this.right = false; + this.pauseRequested = false; + this.restartRequested = false; + } + + bind({ leftButton, rightButton }) { + const setButtonState = (element, property, active) => { + this[property] = active; + if (element) { + element.classList.toggle("is-active", active); + } + }; + + window.addEventListener("keydown", (event) => { + if (["ArrowLeft", "a", "A"].includes(event.key)) { + this.left = true; + } + if (["ArrowRight", "d", "D"].includes(event.key)) { + this.right = true; + } + if (["p", "P", "Escape"].includes(event.key)) { + this.pauseRequested = true; + } + if (["r", "R", "Enter"].includes(event.key)) { + this.restartRequested = true; + } + }); + + window.addEventListener("keyup", (event) => { + if (["ArrowLeft", "a", "A"].includes(event.key)) { + this.left = false; + } + if (["ArrowRight", "d", "D"].includes(event.key)) { + this.right = false; + } + }); + + const bindTouchControl = (element, property) => { + if (!element) { + return; + } + + const activate = (event) => { + event.preventDefault(); + setButtonState(element, property, true); + }; + + const deactivate = (event) => { + event.preventDefault(); + setButtonState(element, property, false); + }; + + element.addEventListener("pointerdown", activate); + element.addEventListener("pointerup", deactivate); + element.addEventListener("pointercancel", deactivate); + element.addEventListener("pointerleave", (event) => { + if (event.buttons === 0) { + deactivate(event); + } + }); + }; + + bindTouchControl(leftButton, "left"); + bindTouchControl(rightButton, "right"); + } + + getAxis() { + return (this.right ? 1 : 0) - (this.left ? 1 : 0); + } + + consumePauseRequest() { + const requested = this.pauseRequested; + this.pauseRequested = false; + return requested; + } + + consumeRestartRequest() { + const requested = this.restartRequested; + this.restartRequested = false; + return requested; + } + } + + class Player { + constructor() { + this.width = 40; + this.height = 54; + this.reset(CONFIG.width / 2, 130); + } + + reset(x, y) { + this.x = x; + this.y = y; + this.prevY = y; + this.vx = 0; + this.vy = CONFIG.jumpVelocity * 0.92; + this.jetpackTimer = 0; + this.bob = 0; + this.facing = 1; + this.squash = 0; + } + + applyJetpack() { + this.jetpackTimer = CONFIG.jetpackDuration; + this.vy = CONFIG.jetpackVelocity; + } + + bounce(velocity) { + this.vy = velocity; + this.squash = 1; + } + + getBounds() { + const left = this.x - this.width / 2; + return { + left, + right: left + this.width, + bottom: this.y, + top: this.y + this.height, + }; + } + + update(dt, input) { + this.prevY = this.y; + this.bob += dt * 8; + + const axis = input.getAxis(); + if (axis !== 0) { + this.vx += axis * CONFIG.moveAcceleration * dt; + this.facing = axis > 0 ? 1 : -1; + } else { + const frictionAmount = CONFIG.friction * dt; + if (Math.abs(this.vx) <= frictionAmount) { + this.vx = 0; + } else { + this.vx -= Math.sign(this.vx) * frictionAmount; + } + } + + this.vx = clamp(this.vx, -CONFIG.maxMoveSpeed, CONFIG.maxMoveSpeed); + this.x += this.vx * dt; + + const wrapPadding = this.width / 2; + if (this.x < -wrapPadding) { + this.x = CONFIG.width + wrapPadding; + } + if (this.x > CONFIG.width + wrapPadding) { + this.x = -wrapPadding; + } + + if (this.jetpackTimer > 0) { + this.jetpackTimer = Math.max(0, this.jetpackTimer - dt); + this.vy = lerp(this.vy, CONFIG.jetpackVelocity, 0.24); + } else { + this.vy += CONFIG.gravity * dt; + } + + this.y += this.vy * dt; + this.squash = Math.max(0, this.squash - dt * 3.2); + } + + draw(ctx, game) { + const screenY = game.worldToScreenY(this.y); + const bounceStretch = 1 + Math.max(0, this.vy) / 2800; + const squashX = 1 + this.squash * 0.22; + const squashY = 1 - this.squash * 0.16; + + ctx.save(); + ctx.translate(this.x, screenY - this.height * 0.58); + ctx.scale(this.facing, 1); + ctx.scale(squashX, squashY * clamp(bounceStretch, 0.94, 1.12)); + + ctx.lineWidth = 3; + ctx.strokeStyle = "#173150"; + + ctx.fillStyle = "#82d66b"; + ctx.beginPath(); + ctx.ellipse(0, -6, 18, 22, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + + ctx.fillStyle = "#fff"; + ctx.beginPath(); + ctx.arc(-6, -10, 4, 0, Math.PI * 2); + ctx.arc(6, -10, 4, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + + ctx.fillStyle = "#173150"; + ctx.beginPath(); + ctx.arc(-6, -10, 1.8, 0, Math.PI * 2); + ctx.arc(6, -10, 1.8, 0, Math.PI * 2); + ctx.fill(); + + ctx.beginPath(); + ctx.moveTo(9, -5); + ctx.lineTo(18, -2); + ctx.lineTo(7, 2); + ctx.closePath(); + ctx.fillStyle = "#ffbb6e"; + ctx.fill(); + ctx.stroke(); + + ctx.beginPath(); + ctx.moveTo(-10, 17); + ctx.lineTo(-18, 26); + ctx.moveTo(10, 17); + ctx.lineTo(18, 26); + ctx.moveTo(-14, 4); + ctx.lineTo(-22, 10); + ctx.moveTo(14, 4); + ctx.lineTo(24, 10); + ctx.stroke(); + + if (this.jetpackTimer > 0) { + ctx.fillStyle = "#ff8c62"; + ctx.fillRect(-16, 0, 8, 18); + ctx.fillRect(8, 0, 8, 18); + ctx.fillStyle = "#ffd166"; + const flameLength = 12 + Math.sin(game.time * 36) * 6; + ctx.beginPath(); + ctx.moveTo(-12, 18); + ctx.lineTo(-16, 18 + flameLength); + ctx.lineTo(-8, 18 + flameLength * 0.7); + ctx.closePath(); + ctx.fill(); + + ctx.beginPath(); + ctx.moveTo(12, 18); + ctx.lineTo(8, 18 + flameLength); + ctx.lineTo(16, 18 + flameLength * 0.7); + ctx.closePath(); + ctx.fill(); + } + + ctx.restore(); + } + } + + class Pickup { + constructor(type, x, y, platform = null) { + this.type = type; + this.x = x; + this.y = y; + this.platform = platform; + this.width = type === "jetpack" ? 28 : 24; + this.height = type === "jetpack" ? 36 : 24; + this.used = false; + this.phase = randomRange(0, Math.PI * 2); + } + + update(dt) { + this.phase += dt * 3; + if (this.platform) { + this.x = this.platform.x + this.platform.width / 2; + this.y = this.platform.y + 14; + if (!this.platform.active) { + this.used = true; + } + } + } + + getBounds() { + return { + left: this.x - this.width / 2, + right: this.x + this.width / 2, + bottom: this.y, + top: this.y + this.height, + }; + } + + draw(ctx, game) { + if (this.used) { + return; + } + + const screenY = game.worldToScreenY(this.y); + ctx.save(); + ctx.translate(this.x, screenY - this.height * 0.55 + Math.sin(this.phase) * 4); + ctx.lineWidth = 2.5; + ctx.strokeStyle = "#173150"; + + if (this.type === "spring") { + ctx.beginPath(); + ctx.moveTo(-8, 12); + ctx.lineTo(-4, 7); + ctx.lineTo(0, 12); + ctx.lineTo(4, 7); + ctx.lineTo(8, 12); + ctx.stroke(); + ctx.fillStyle = "#ffd166"; + ctx.fillRect(-11, 12, 22, 6); + ctx.strokeRect(-11, 12, 22, 6); + } else if (this.type === "jetpack") { + ctx.fillStyle = "#ff8764"; + ctx.fillRect(-12, -4, 10, 24); + ctx.strokeRect(-12, -4, 10, 24); + ctx.fillRect(2, -4, 10, 24); + ctx.strokeRect(2, -4, 10, 24); + + ctx.fillStyle = "#85daf4"; + ctx.fillRect(-8, -12, 16, 12); + ctx.strokeRect(-8, -12, 16, 12); + + ctx.fillStyle = "#ffd166"; + ctx.beginPath(); + ctx.moveTo(-7, 20); + ctx.lineTo(-12, 30); + ctx.lineTo(-3, 27); + ctx.closePath(); + ctx.fill(); + + ctx.beginPath(); + ctx.moveTo(7, 20); + ctx.lineTo(3, 30); + ctx.lineTo(12, 27); + ctx.closePath(); + ctx.fill(); + } + + ctx.restore(); + } + } + + class Platform { + constructor({ type, x, y, width, speed = 0 }) { + this.type = type; + this.x = x; + this.y = y; + this.width = width; + this.height = CONFIG.platformThickness; + this.speed = speed; + this.active = true; + this.life = 1; + this.breakTimer = 0; + this.fadeTimer = 0; + this.pickup = null; + } + + update(dt) { + if (this.type === "moving") { + this.x += this.speed * dt; + if (this.x <= CONFIG.worldPadding || this.x + this.width >= CONFIG.width - CONFIG.worldPadding) { + this.speed *= -1; + this.x = clamp(this.x, CONFIG.worldPadding, CONFIG.width - CONFIG.worldPadding - this.width); + } + } + + if (this.breakTimer > 0) { + this.breakTimer = Math.max(0, this.breakTimer - dt); + this.life = this.breakTimer / 0.35; + } + + if (this.fadeTimer > 0) { + this.fadeTimer = Math.max(0, this.fadeTimer - dt); + this.life = this.fadeTimer / 0.45; + } + } + + canLand(player) { + if (!this.active) { + return false; + } + + const bounds = player.getBounds(); + const prevBottom = player.prevY; + const currentBottom = bounds.bottom; + const overlap = Math.min(bounds.right, this.x + this.width) - Math.max(bounds.left, this.x); + + return ( + player.vy <= 0 && + prevBottom >= this.y + this.height && + currentBottom <= this.y + this.height && + overlap > 16 + ); + } + + onLand(game, player) { + if (!this.active) { + return false; + } + + player.y = this.y + this.height; + + let bounceVelocity = CONFIG.jumpVelocity; + let specialLabel = ""; + + if (this.type === "boost") { + bounceVelocity = CONFIG.boostVelocity; + specialLabel = "BOOST!"; + } else if (this.type === "break") { + bounceVelocity = CONFIG.breakVelocity; + specialLabel = "CRACK!"; + this.breakTimer = 0.35; + this.active = false; + } else if (this.type === "ghost") { + bounceVelocity = CONFIG.jumpVelocity * 1.03; + specialLabel = "FADE!"; + this.fadeTimer = 0.45; + this.active = false; + } else if (this.type === "moving") { + specialLabel = "DRIFT!"; + } + + if (this.pickup && !this.pickup.used && this.pickup.type === "spring") { + this.pickup.used = true; + bounceVelocity = Math.max(bounceVelocity, CONFIG.springVelocity); + specialLabel = "SPRING!"; + } + + player.bounce(bounceVelocity); + game.onPlayerBounce(this, bounceVelocity, specialLabel); + return true; + } + + draw(ctx, game) { + if (!this.active && this.life <= 0) { + return; + } + + const screenY = game.worldToScreenY(this.y); + const opacity = clamp(this.life, 0, 1); + const colors = { + normal: "#8ddf95", + moving: "#73ccff", + break: "#ffd166", + ghost: "#cab8ff", + boost: "#ff9a92", + }; + + ctx.save(); + ctx.globalAlpha = opacity; + ctx.translate(this.x, screenY - this.height); + ctx.lineWidth = 3; + ctx.strokeStyle = "#173150"; + ctx.fillStyle = colors[this.type] || colors.normal; + + ctx.beginPath(); + ctx.roundRect(0, 0, this.width, this.height, 10); + ctx.fill(); + ctx.stroke(); + + if (this.type === "moving") { + ctx.beginPath(); + ctx.moveTo(14, this.height / 2); + ctx.lineTo(24, this.height / 2 - 4); + ctx.moveTo(14, this.height / 2); + ctx.lineTo(24, this.height / 2 + 4); + ctx.moveTo(this.width - 14, this.height / 2); + ctx.lineTo(this.width - 24, this.height / 2 - 4); + ctx.moveTo(this.width - 14, this.height / 2); + ctx.lineTo(this.width - 24, this.height / 2 + 4); + ctx.stroke(); + } + + if (this.type === "break") { + ctx.beginPath(); + ctx.moveTo(this.width * 0.18, 4); + ctx.lineTo(this.width * 0.42, this.height - 2); + ctx.lineTo(this.width * 0.57, 5); + ctx.lineTo(this.width * 0.81, this.height - 2); + ctx.stroke(); + } + + if (this.type === "ghost") { + ctx.setLineDash([5, 5]); + ctx.strokeRect(6, 3, this.width - 12, this.height - 6); + } + + if (this.type === "boost") { + ctx.strokeStyle = "rgba(255, 255, 255, 0.7)"; + ctx.beginPath(); + ctx.moveTo(14, this.height - 3); + ctx.lineTo(this.width / 2, 3); + ctx.lineTo(this.width - 14, this.height - 3); + ctx.stroke(); + } + + ctx.restore(); + } + } + + class Enemy { + constructor(x, y) { + this.x = x; + this.y = y; + this.width = 42; + this.height = 34; + this.speed = randomRange(32, 68) * sign(); + this.phase = randomRange(0, Math.PI * 2); + this.counted = false; + } + + update(dt) { + this.phase += dt * 2.2; + this.x += this.speed * dt; + + if (this.x < 22 || this.x + this.width > CONFIG.width - 22) { + this.speed *= -1; + this.x = clamp(this.x, 22, CONFIG.width - this.width - 22); + } + } + + getBounds() { + return { + left: this.x, + right: this.x + this.width, + bottom: this.y, + top: this.y + this.height, + }; + } + + collides(player) { + const a = this.getBounds(); + const b = player.getBounds(); + + return ( + a.left < b.right && + a.right > b.left && + a.bottom < b.top - 8 && + a.top > b.bottom + 4 + ); + } + + draw(ctx, game) { + const screenY = game.worldToScreenY(this.y); + const bob = Math.sin(this.phase) * 5; + + ctx.save(); + ctx.translate(this.x + this.width / 2, screenY - this.height / 2 + bob); + ctx.lineWidth = 3; + ctx.strokeStyle = "#173150"; + ctx.fillStyle = "#ff799d"; + + ctx.beginPath(); + ctx.ellipse(0, 0, 20, 15, 0, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + + ctx.fillStyle = "#fff"; + ctx.beginPath(); + ctx.arc(-7, -2, 4, 0, Math.PI * 2); + ctx.arc(7, -2, 4, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + + ctx.fillStyle = "#173150"; + ctx.beginPath(); + ctx.arc(-7, -2, 2, 0, Math.PI * 2); + ctx.arc(7, -2, 2, 0, Math.PI * 2); + ctx.fill(); + + ctx.beginPath(); + ctx.moveTo(-11, 9); + ctx.lineTo(-7, 15); + ctx.lineTo(-1, 9); + ctx.lineTo(5, 15); + ctx.lineTo(11, 9); + ctx.stroke(); + + ctx.restore(); + } + } + + class Game { + constructor() { + this.canvas = document.getElementById("gameCanvas"); + this.ctx = this.canvas.getContext("2d"); + + this.elements = { + hudScore: document.getElementById("hudScore"), + hudHeight: document.getElementById("hudHeight"), + hudBest: document.getElementById("hudBest"), + hudStreak: document.getElementById("hudStreak"), + finalScore: document.getElementById("finalScore"), + finalHeight: document.getElementById("finalHeight"), + finalStreak: document.getElementById("finalStreak"), + startScreen: document.getElementById("startScreen"), + pauseScreen: document.getElementById("pauseScreen"), + gameOverScreen: document.getElementById("gameOverScreen"), + startButton: document.getElementById("startButton"), + resumeButton: document.getElementById("resumeButton"), + restartButton: document.getElementById("restartButton"), + pauseButton: document.getElementById("pauseButton"), + soundToggle: document.getElementById("soundToggle"), + leftButton: document.getElementById("leftButton"), + rightButton: document.getElementById("rightButton"), + }; + + this.audio = new AudioSystem(); + this.input = new InputController(); + this.player = new Player(); + this.platforms = []; + this.pickups = []; + this.enemies = []; + this.particles = []; + this.floatingTexts = []; + this.clouds = []; + this.stars = []; + this.state = "start"; + this.cameraBottom = 0; + this.maxHeight = 0; + this.score = 0; + this.bestScore = 0; + this.bestHeight = 0; + this.startHeight = 0; + this.styleStreak = 0; + this.maxStyleStreak = 0; + this.styleTimer = 0; + this.bonusScore = 0; + this.landings = 0; + this.time = 0; + this.lastFrameTime = 0; + this.highestPlatformY = 0; + this.highestCloudY = 0; + this.highestStarY = 0; + this.spawnGuideX = CONFIG.width / 2; + this.spawnIndex = 0; + + this.loadSave(); + this.audio.setMuted(this.muted); + this.input.bind({ + leftButton: this.elements.leftButton, + rightButton: this.elements.rightButton, + }); + this.bindUi(); + this.syncHud(true); + } + + bindUi() { + this.elements.startButton.addEventListener("click", () => { + this.audio.ensureContext(); + this.audio.playButton(); + this.startRun(); + }); + + this.elements.resumeButton.addEventListener("click", () => { + this.audio.ensureContext(); + this.audio.playButton(); + this.resume(); + }); + + this.elements.restartButton.addEventListener("click", () => { + this.audio.ensureContext(); + this.audio.playButton(); + this.startRun(); + }); + + this.elements.pauseButton.addEventListener("click", () => { + this.audio.ensureContext(); + this.audio.playButton(); + if (this.state === "playing") { + this.pause(); + } else if (this.state === "paused") { + this.resume(); + } else if (this.state === "start" || this.state === "gameOver") { + this.startRun(); + } + }); + + this.elements.soundToggle.addEventListener("click", () => { + this.audio.ensureContext(); + this.muted = !this.muted; + this.audio.setMuted(this.muted); + if (!this.muted) { + this.audio.playButton(); + } + this.persist(); + this.syncHud(); + }); + } + + init() { + this.resetRun(); + this.setState("start"); + this.lastFrameTime = performance.now(); + requestAnimationFrame((time) => this.frame(time)); + } + + loadSave() { + this.muted = true; + + try { + const raw = window.localStorage.getItem(STORAGE_KEY); + if (!raw) { + return; + } + + const data = JSON.parse(raw); + this.bestScore = Number(data.bestScore) || 0; + this.bestHeight = Number(data.bestHeight) || 0; + this.muted = data.muted !== undefined ? Boolean(data.muted) : true; + } catch (_error) { + this.bestScore = 0; + this.bestHeight = 0; + this.muted = true; + } + } + + persist() { + try { + window.localStorage.setItem( + STORAGE_KEY, + JSON.stringify({ + bestScore: this.bestScore, + bestHeight: this.bestHeight, + muted: this.muted, + }), + ); + } catch (_error) { + // Ignore storage failures. + } + } + + setState(nextState) { + this.state = nextState; + this.elements.startScreen.classList.toggle("is-hidden", nextState !== "start"); + this.elements.pauseScreen.classList.toggle("is-hidden", nextState !== "paused"); + this.elements.gameOverScreen.classList.toggle("is-hidden", nextState !== "gameOver"); + + const pauseLabel = nextState === "paused" ? "Resume" : nextState === "playing" ? "Pause" : "Play"; + this.elements.pauseButton.textContent = pauseLabel; + } + + startRun() { + this.resetRun(); + this.setState("playing"); + } + + pause() { + if (this.state === "playing") { + this.setState("paused"); + } + } + + resume() { + if (this.state === "paused") { + this.setState("playing"); + } + } + + endRun() { + this.bestScore = Math.max(this.bestScore, this.score); + this.bestHeight = Math.max(this.bestHeight, this.heightToMeters(this.getRunHeight())); + this.persist(); + + this.elements.finalScore.textContent = this.score.toLocaleString(); + this.elements.finalHeight.textContent = `${this.heightToMeters(this.getRunHeight()).toLocaleString()} m`; + this.elements.finalStreak.textContent = `x${this.maxStyleStreak}`; + this.audio.playGameOver(); + this.setState("gameOver"); + this.syncHud(); + } + + resetRun() { + this.player.reset(CONFIG.width / 2, 120); + this.startHeight = this.player.y; + this.platforms = []; + this.pickups = []; + this.enemies = []; + this.particles = []; + this.floatingTexts = []; + this.clouds = []; + this.stars = []; + this.cameraBottom = 0; + this.maxHeight = this.player.y; + this.score = 0; + this.styleStreak = 0; + this.maxStyleStreak = 0; + this.styleTimer = 0; + this.bonusScore = 0; + this.landings = 0; + this.highestPlatformY = 0; + this.highestCloudY = 0; + this.highestStarY = 0; + this.spawnGuideX = CONFIG.width / 2; + this.spawnIndex = 0; + + const basePlatform = new Platform({ + type: "normal", + x: CONFIG.width / 2 - 56, + y: 62, + width: 112, + }); + this.platforms.push(basePlatform); + this.highestPlatformY = basePlatform.y; + + for (let index = 0; index < 8; index += 1) { + this.generateNextPlatform(true); + } + + this.ensureWorldFilled(); + this.syncHud(true); + } + + frame(timestamp) { + const dt = Math.min(CONFIG.maxDelta, (timestamp - this.lastFrameTime) / 1000 || 0); + this.lastFrameTime = timestamp; + this.time += dt; + + if (this.input.consumePauseRequest()) { + if (this.state === "playing") { + this.pause(); + } else if (this.state === "paused") { + this.resume(); + } else if (this.state === "start" || this.state === "gameOver") { + this.startRun(); + } + } + + if (this.input.consumeRestartRequest() && (this.state === "start" || this.state === "gameOver")) { + this.startRun(); + } + + if (this.state === "playing") { + this.update(dt); + } else { + this.updateIdle(dt); + } + + this.render(); + requestAnimationFrame((time) => this.frame(time)); + } + + updateIdle(dt) { + this.player.bob += dt * 2; + this.ensureWorldFilled(); + + for (const cloud of this.clouds) { + cloud.phase += dt * cloud.speed; + } + } + + update(dt) { + this.styleTimer = Math.max(0, this.styleTimer - dt); + if (this.styleTimer === 0) { + this.styleStreak = 0; + } + + for (const platform of this.platforms) { + platform.update(dt); + } + + for (const pickup of this.pickups) { + pickup.update(dt); + } + + for (const enemy of this.enemies) { + enemy.update(dt); + } + + for (const cloud of this.clouds) { + cloud.phase += dt * cloud.speed; + } + + this.player.update(dt, this.input); + + if (this.player.jetpackTimer > 0) { + if (chance(0.55)) { + this.spawnParticle({ + x: this.player.x + randomRange(-8, 8), + y: this.player.y + 6, + vx: randomRange(-24, 24), + vy: randomRange(-220, -110), + life: 0.42, + color: chance(0.5) ? "#ffd166" : "#ff8f66", + size: randomRange(4, 8), + }); + } + if (chance(0.08)) { + this.audio.playJetpack(); + } + } + + for (const pickup of this.pickups) { + if (pickup.used || pickup.type !== "jetpack") { + continue; + } + if (this.boundsOverlap(this.player.getBounds(), pickup.getBounds())) { + pickup.used = true; + this.player.applyJetpack(); + this.bonusScore += 250; + this.bumpStyleStreak(2); + this.spawnFloatingText("JETPACK!", this.player.x, this.player.y + 90, "#ff8f66"); + this.emitBurst(this.player.x, this.player.y + 40, 18, ["#ffd166", "#ff8f66", "#85daf4"]); + this.audio.playBoost(); + } + } + + if (this.player.vy <= 0 && this.player.jetpackTimer <= 0) { + for (let index = this.platforms.length - 1; index >= 0; index -= 1) { + if (this.platforms[index].canLand(this.player)) { + this.platforms[index].onLand(this, this.player); + break; + } + } + } + + this.maxHeight = Math.max(this.maxHeight, this.player.y); + this.cameraBottom = Math.max(this.cameraBottom, this.player.y - CONFIG.cameraFollowHeight); + + for (const enemy of this.enemies) { + if (!enemy.counted && enemy.y + 40 < this.maxHeight) { + enemy.counted = true; + this.bonusScore += 30; + } + + if (enemy.collides(this.player)) { + this.endRun(); + return; + } + } + + if (this.player.y < this.cameraBottom - CONFIG.deathBuffer) { + this.endRun(); + return; + } + + this.updateParticles(dt); + this.updateFloatingTexts(dt); + this.cleanupWorld(); + this.ensureWorldFilled(); + this.updateScore(); + this.syncHud(); + } + + updateParticles(dt) { + this.particles = this.particles.filter((particle) => { + particle.life -= dt; + particle.x += particle.vx * dt; + particle.y += particle.vy * dt; + particle.vy += CONFIG.gravity * 0.14 * dt; + particle.size = Math.max(0.5, particle.size - dt * 7); + return particle.life > 0; + }); + } + + updateFloatingTexts(dt) { + this.floatingTexts = this.floatingTexts.filter((item) => { + item.life -= dt; + item.y += item.vy * dt; + item.opacity = clamp(item.life / item.totalLife, 0, 1); + return item.life > 0; + }); + } + + cleanupWorld() { + const lowerBound = this.cameraBottom - 140; + const upperBound = this.cameraBottom + CONFIG.height + 800; + + this.platforms = this.platforms.filter((platform) => platform.y > lowerBound && platform.y < upperBound); + this.pickups = this.pickups.filter((pickup) => !pickup.used && pickup.y > lowerBound && pickup.y < upperBound); + this.enemies = this.enemies.filter((enemy) => enemy.y > lowerBound && enemy.y < upperBound); + this.clouds = this.clouds.filter((cloud) => cloud.y > this.cameraBottom - 220); + this.stars = this.stars.filter((star) => star.y > this.cameraBottom - 120); + } + + updateScore() { + const runHeight = this.getRunHeight(); + this.score = Math.max( + 0, + Math.floor(runHeight * 0.68 + this.bonusScore + this.landings * 4 + this.maxStyleStreak * 18), + ); + } + + onPlayerBounce(platform, bounceVelocity, specialLabel) { + this.landings += 1; + + const special = ["boost", "ghost", "break", "moving"].includes(platform.type) || bounceVelocity > CONFIG.jumpVelocity + 40; + if (special) { + this.bumpStyleStreak(1); + this.bonusScore += platform.type === "boost" ? 90 : 45; + } else { + this.styleStreak = Math.max(0, this.styleStreak - 1); + this.styleTimer = 1.4; + } + + this.spawnParticle({ + x: this.player.x, + y: platform.y + 8, + vx: randomRange(-60, 60), + vy: randomRange(80, 180), + life: 0.28, + color: "#ffffff", + size: randomRange(3, 6), + }); + this.emitBurst(this.player.x, platform.y + 10, 8, ["#8ddf95", "#85daf4", "#ffd166"]); + + if (specialLabel) { + this.spawnFloatingText(specialLabel, this.player.x, this.player.y + 60, "#ff8f66"); + } + + if (bounceVelocity >= CONFIG.boostVelocity) { + this.audio.playBoost(); + } else { + this.audio.playJump(); + } + } + + bumpStyleStreak(amount) { + this.styleStreak += amount; + this.maxStyleStreak = Math.max(this.maxStyleStreak, this.styleStreak); + this.styleTimer = 2.8; + } + + emitBurst(x, y, count, palette) { + for (let index = 0; index < count; index += 1) { + this.spawnParticle({ + x, + y, + vx: randomRange(-130, 130), + vy: randomRange(50, 240), + life: randomRange(0.2, 0.65), + color: palette[randomInt(0, palette.length - 1)], + size: randomRange(2, 5), + }); + } + } + + spawnParticle(particle) { + this.particles.push(particle); + } + + spawnFloatingText(text, x, y, color) { + this.floatingTexts.push({ + text, + x, + y, + vy: 46, + life: 0.9, + totalLife: 0.9, + opacity: 1, + color, + }); + } + + ensureWorldFilled() { + while (this.highestPlatformY < this.cameraBottom + CONFIG.height + 700) { + this.generateNextPlatform(); + } + + while (this.highestCloudY < this.cameraBottom + CONFIG.height + CONFIG.cloudBuffer) { + this.clouds.push({ + x: randomRange(30, CONFIG.width - 30), + y: this.highestCloudY + randomRange(120, 200), + scale: randomRange(0.7, 1.4), + speed: randomRange(0.1, 0.3), + phase: randomRange(0, Math.PI * 2), + }); + this.highestCloudY = this.clouds[this.clouds.length - 1].y; + } + + while (this.highestStarY < this.cameraBottom + CONFIG.height + 600) { + const starY = this.highestStarY + randomRange(30, 90); + this.highestStarY = starY; + if (starY > 980) { + this.stars.push({ + x: randomRange(20, CONFIG.width - 20), + y: starY, + size: randomRange(1.5, 3.6), + }); + } + } + } + + generateNextPlatform(forceEasy = false) { + const difficulty = clamp(this.getRunHeight() / 3600, 0, 1); + const yGap = forceEasy ? randomRange(72, 92) : randomRange(78, lerp(110, 154, difficulty)); + const nextY = this.highestPlatformY + yGap; + + let type = "normal"; + if (!forceEasy) { + const roll = Math.random(); + if (difficulty > 0.7 && roll < 0.08) { + type = "boost"; + } else if (difficulty > 0.4 && roll < 0.2) { + type = "ghost"; + } else if (difficulty > 0.22 && roll < 0.34) { + type = "break"; + } else if (difficulty > 0.08 && roll < 0.54) { + type = "moving"; + } + } + + const widthMap = { + normal: randomRange(78, 112), + moving: randomRange(76, 104), + break: randomRange(82, 106), + ghost: randomRange(76, 100), + boost: randomRange(78, 96), + }; + + const width = widthMap[type]; + const maxShift = forceEasy ? 70 : lerp(90, 160, difficulty); + const targetX = clamp( + this.spawnGuideX + randomRange(-maxShift, maxShift) - width / 2, + CONFIG.worldPadding, + CONFIG.width - CONFIG.worldPadding - width, + ); + + const speed = type === "moving" ? randomRange(38, 82) * sign() : 0; + const platform = new Platform({ type, x: targetX, y: nextY, width, speed }); + this.platforms.push(platform); + this.highestPlatformY = nextY; + this.spawnGuideX = targetX + width / 2; + this.spawnIndex += 1; + + if (chance(forceEasy ? 0.04 : 0.09 + difficulty * 0.08) && type !== "break") { + const spring = new Pickup("spring", platform.x + platform.width / 2, platform.y + 14, platform); + platform.pickup = spring; + this.pickups.push(spring); + } else if (!forceEasy && nextY > 900 && chance(0.025 + difficulty * 0.06)) { + this.pickups.push( + new Pickup( + "jetpack", + platform.x + platform.width / 2, + platform.y + randomRange(52, 78), + ), + ); + } + + if (!forceEasy && nextY > 1150 && chance(0.045 + difficulty * 0.12)) { + this.enemies.push( + new Enemy( + clamp(platform.x + platform.width / 2 - 21, 20, CONFIG.width - 62), + platform.y + randomRange(64, 92), + ), + ); + } + } + + boundsOverlap(a, b) { + return a.left < b.right && a.right > b.left && a.bottom < b.top && a.top > b.bottom; + } + + worldToScreenY(y) { + return CONFIG.height - (y - this.cameraBottom); + } + + getRunHeight() { + return Math.max(0, this.maxHeight - this.startHeight); + } + + heightToMeters(height) { + return Math.max(0, Math.floor(height * 0.36)); + } + + syncHud(force = false) { + const scoreText = this.score.toLocaleString(); + const heightText = `${this.heightToMeters(this.getRunHeight()).toLocaleString()} m`; + const bestText = this.bestScore.toLocaleString(); + const streakText = `x${this.styleStreak}`; + const soundText = this.muted ? "Sound: Off" : "Sound: On"; + + if ( + force || + this.elements.hudScore.textContent !== scoreText || + this.elements.hudHeight.textContent !== heightText || + this.elements.hudBest.textContent !== bestText || + this.elements.hudStreak.textContent !== streakText || + this.elements.soundToggle.textContent !== soundText + ) { + this.elements.hudScore.textContent = scoreText; + this.elements.hudHeight.textContent = heightText; + this.elements.hudBest.textContent = bestText; + this.elements.hudStreak.textContent = streakText; + this.elements.soundToggle.textContent = soundText; + this.elements.soundToggle.setAttribute("aria-pressed", String(!this.muted)); + } + } + + drawBackground() { + const ctx = this.ctx; + ctx.clearRect(0, 0, CONFIG.width, CONFIG.height); + + const altitudeTint = clamp(this.cameraBottom / 2400, 0, 1); + const sky = ctx.createLinearGradient(0, 0, 0, CONFIG.height); + sky.addColorStop(0, `rgb(${Math.round(214 - altitudeTint * 28)}, ${Math.round(241 - altitudeTint * 38)}, 255)`); + sky.addColorStop(0.55, `rgb(${Math.round(233 - altitudeTint * 22)}, ${Math.round(249 - altitudeTint * 30)}, ${Math.round(255 - altitudeTint * 10)})`); + sky.addColorStop(1, `rgb(${Math.round(255 - altitudeTint * 18)}, ${Math.round(250 - altitudeTint * 26)}, ${Math.round(238 + altitudeTint * 6)})`); + ctx.fillStyle = sky; + ctx.fillRect(0, 0, CONFIG.width, CONFIG.height); + + ctx.save(); + ctx.globalAlpha = 0.22; + ctx.strokeStyle = "#7aa7d9"; + ctx.lineWidth = 1; + const lineOffset = (this.cameraBottom * 0.4) % 42; + for (let y = -42; y <= CONFIG.height + 42; y += 42) { + ctx.beginPath(); + ctx.moveTo(0, y + lineOffset); + ctx.lineTo(CONFIG.width, y + lineOffset); + ctx.stroke(); + } + + ctx.strokeStyle = "rgba(255, 123, 141, 0.26)"; + ctx.lineWidth = 2; + ctx.beginPath(); + ctx.moveTo(54, 0); + ctx.lineTo(54, CONFIG.height); + ctx.stroke(); + ctx.restore(); + + if (this.cameraBottom > 980) { + ctx.save(); + ctx.globalAlpha = clamp((this.cameraBottom - 900) / 1400, 0, 0.78); + ctx.fillStyle = "#fef5c4"; + for (const star of this.stars) { + const screenY = this.worldToScreenY(star.y); + if (screenY < -10 || screenY > CONFIG.height + 10) { + continue; + } + ctx.beginPath(); + ctx.arc(star.x, screenY, star.size, 0, Math.PI * 2); + ctx.fill(); + } + ctx.restore(); + } + + const sunX = CONFIG.width - 70; + const sunY = 90 + Math.sin(this.time * 0.35) * 8; + ctx.save(); + ctx.fillStyle = "rgba(255, 236, 150, 0.74)"; + ctx.beginPath(); + ctx.arc(sunX, sunY, 34, 0, Math.PI * 2); + ctx.fill(); + ctx.restore(); + } + + drawClouds() { + const ctx = this.ctx; + ctx.save(); + + for (const cloud of this.clouds) { + const screenY = this.worldToScreenY(cloud.y); + if (screenY < -80 || screenY > CONFIG.height + 80) { + continue; + } + + const drift = Math.sin(cloud.phase) * 18; + ctx.save(); + ctx.translate(cloud.x + drift, screenY); + ctx.scale(cloud.scale, cloud.scale); + ctx.globalAlpha = 0.72; + ctx.fillStyle = "rgba(255, 255, 255, 0.82)"; + ctx.strokeStyle = "rgba(23, 49, 80, 0.18)"; + ctx.lineWidth = 2; + + ctx.beginPath(); + ctx.arc(-24, 8, 16, 0, Math.PI * 2); + ctx.arc(-6, 0, 18, 0, Math.PI * 2); + ctx.arc(16, 7, 14, 0, Math.PI * 2); + ctx.arc(34, 10, 12, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + + ctx.restore(); + } + + ctx.restore(); + } + + drawParticles() { + const ctx = this.ctx; + + for (const particle of this.particles) { + const screenY = this.worldToScreenY(particle.y); + ctx.save(); + ctx.globalAlpha = clamp(particle.life * 2, 0, 1); + ctx.fillStyle = particle.color; + ctx.beginPath(); + ctx.arc(particle.x, screenY, particle.size, 0, Math.PI * 2); + ctx.fill(); + ctx.restore(); + } + } + + drawFloatingTexts() { + const ctx = this.ctx; + + for (const text of this.floatingTexts) { + const screenY = this.worldToScreenY(text.y); + ctx.save(); + ctx.globalAlpha = text.opacity; + ctx.fillStyle = text.color; + ctx.strokeStyle = "rgba(255,255,255,0.9)"; + ctx.lineWidth = 4; + ctx.font = '700 22px "Baloo 2"'; + ctx.textAlign = "center"; + ctx.strokeText(text.text, text.x, screenY); + ctx.fillText(text.text, text.x, screenY); + ctx.restore(); + } + } + + render() { + this.drawBackground(); + this.drawClouds(); + + for (const platform of this.platforms) { + platform.draw(this.ctx, this); + } + + for (const pickup of this.pickups) { + pickup.draw(this.ctx, this); + } + + for (const enemy of this.enemies) { + enemy.draw(this.ctx, this); + } + + this.player.draw(this.ctx, this); + this.drawParticles(); + this.drawFloatingTexts(); + } + + getSnapshot() { + return { + state: this.state, + score: this.score, + maxHeight: this.maxHeight, + playerY: this.player.y, + platforms: this.platforms.length, + pickups: this.pickups.length, + enemies: this.enemies.length, + }; + } + } + + const game = new Game(); + window.skyboundGame = game; + window.addEventListener("DOMContentLoaded", () => game.init()); +})(); diff --git a/index.html b/index.html index cea2202..af424b5 100644 --- a/index.html +++ b/index.html @@ -1,652 +1,182 @@ - - Countdown to Superintelligence - + + Skybound Scribble + + + + + -
+ -
-

The Intelligence Age

-

Countdown to Superintelligence

- -
-
- 0 - Days -
-
- 0 - Hours -
-
- 0 - Minutes +
+
+
+

Notebook Arcade

+

Skybound Scribble

+

A detailed Doodle Jump-style climb through scribbled skies, sketchy monsters, cracked ledges, springs, and jetpack bursts.

-
- 0 - Seconds +
+
+ Goal + Climb forever +
+
+ Input + Keyboard + touch +
-
- -
-
-
- -
-
-
3000
-
Total Days
-
-
-
0
-
Days Elapsed
-
-
-
0%
-
Progress
-
-
- -

- It is possible that we will have superintelligence in a few thousand days (!); it may take longer, but I'm confident we'll get there. -

-

— Sam Altman, "The Intelligence Age" (September 23, 2024)

-
+ + +
+ + +
+
+ + +
+
+
+ Score + 0 +
+
+ Height + 0 m +
+
+ Best + 0 +
+
+ Style + x0 +
+
+ +
+ + +
+
+ +
+
+

Ready to scribble?

+

Jump into the margins

+

Climb through moving ledges, cracked doodles, spring pads, jetpacks, and grumpy sky monsters. Chase the highest score and keep your style streak alive.

+
+ +
+
+
+ Controls + A / D / ← / → +
+
+ Pause + P or Esc +
+
+ Touch + Bottom arrows +
+
+
+
+ + + + +
+ +
+ + +
+
+ + +
+ +
+

Tip: run locally in a browser with python3 -m http.server 8000, then open http://localhost:8000.

+
+ - + diff --git a/smoke-test.mjs b/smoke-test.mjs new file mode 100644 index 0000000..183c111 --- /dev/null +++ b/smoke-test.mjs @@ -0,0 +1,282 @@ +import { writeFile } from "node:fs/promises"; +import { setTimeout as delay } from "node:timers/promises"; + +const CDP_URL = "http://127.0.0.1:9222"; + +async function waitForDebugger() { + for (let attempt = 0; attempt < 40; attempt += 1) { + try { + const response = await fetch(`${CDP_URL}/json/version`); + if (response.ok) { + return; + } + } catch (_error) { + // Retry. + } + await delay(250); + } + throw new Error("Chrome remote debugger did not become available."); +} + +class CdpClient { + constructor(socketUrl) { + this.socket = new WebSocket(socketUrl); + this.nextId = 1; + this.pending = new Map(); + this.events = new Map(); + } + + async connect() { + await new Promise((resolve, reject) => { + this.socket.addEventListener("open", resolve, { once: true }); + this.socket.addEventListener("error", reject, { once: true }); + }); + + this.socket.addEventListener("message", (event) => { + const message = JSON.parse(event.data); + if (message.id) { + const pending = this.pending.get(message.id); + if (!pending) { + return; + } + this.pending.delete(message.id); + if (message.error) { + pending.reject(new Error(message.error.message)); + } else { + pending.resolve(message.result); + } + return; + } + + const listeners = this.events.get(message.method) || []; + for (const listener of listeners) { + listener(message.params); + } + }); + } + + send(method, params = {}) { + const id = this.nextId++; + const payload = { id, method, params }; + this.socket.send(JSON.stringify(payload)); + return new Promise((resolve, reject) => { + this.pending.set(id, { resolve, reject }); + }); + } + + once(method) { + return new Promise((resolve) => { + const handler = (params) => { + const listeners = this.events.get(method) || []; + this.events.set( + method, + listeners.filter((listener) => listener !== handler), + ); + resolve(params); + }; + this.on(method, handler); + }); + } + + on(method, listener) { + const listeners = this.events.get(method) || []; + listeners.push(listener); + this.events.set(method, listeners); + } + + async evaluate(expression) { + const result = await this.send("Runtime.evaluate", { + expression, + awaitPromise: true, + returnByValue: true, + }); + + return result.result?.value; + } + + async screenshot(path) { + const response = await this.send("Page.captureScreenshot", { format: "png" }); + await writeFile(path, Buffer.from(response.data, "base64")); + } +} + +async function main() { + await waitForDebugger(); + const targets = await fetch(`${CDP_URL}/json/list`).then((response) => response.json()); + const pageTarget = targets.find((target) => target.type === "page"); + if (!pageTarget) { + throw new Error("No page target available."); + } + + const client = new CdpClient(pageTarget.webSocketDebuggerUrl); + await client.connect(); + + const consoleMessages = []; + const pageErrors = []; + + await client.send("Page.enable"); + await client.send("Runtime.enable"); + await client.send("Log.enable"); + + client.on("Runtime.consoleAPICalled", (params) => { + consoleMessages.push( + params.args?.map((arg) => arg.value).filter(Boolean).join(" ") || params.type, + ); + }); + client.on("Runtime.exceptionThrown", (params) => { + pageErrors.push(params.exceptionDetails?.text || "Runtime exception"); + }); + client.on("Log.entryAdded", (params) => { + if (params.entry.level === "error") { + pageErrors.push(params.entry.text); + } + }); + + const loadPromise = client.once("Page.loadEventFired"); + await client.send("Page.navigate", { url: "http://127.0.0.1:8000" }); + await loadPromise; + await delay(1500); + + const initial = await client.evaluate(`(() => ({ + title: document.querySelector("h1")?.textContent ?? null, + hasCanvas: Boolean(document.getElementById("gameCanvas")), + startVisible: !document.getElementById("startScreen")?.classList.contains("is-hidden"), + hudScore: document.getElementById("hudScore")?.textContent ?? null, + soundToggle: document.getElementById("soundToggle")?.textContent ?? null + }))()`); + + await client.screenshot("/workspace/skybound-runtime-start.png"); + + await client.evaluate(`document.getElementById("startButton").click()`); + await delay(400); + + await client.evaluate(` + (() => { + window.dispatchEvent(new KeyboardEvent("keydown", { key: "p" })); + return window.skyboundGame.state; + })() + `); + await delay(150); + const pausedState = await client.evaluate(`window.skyboundGame.state`); + + await client.evaluate(`window.dispatchEvent(new KeyboardEvent("keydown", { key: "p" }))`); + await delay(150); + const resumedState = await client.evaluate(`window.skyboundGame.state`); + + await client.evaluate(` + (() => { + const shortestDx = (from, to, width) => { + const direct = to - from; + const wrappedPositive = direct + width; + const wrappedNegative = direct - width; + return [direct, wrappedPositive, wrappedNegative].sort((a, b) => Math.abs(a) - Math.abs(b))[0]; + }; + + window.__skyboundPilot = setInterval(() => { + const game = window.skyboundGame; + if (!game || game.state !== "playing") { + return; + } + + const player = game.player; + const candidates = game.platforms + .filter((platform) => platform.active && platform.y > player.y + 12 && platform.y < player.y + 250) + .sort((a, b) => { + const aScore = (a.type === "boost" ? 50 : 0) + (a.type === "moving" ? 18 : 0) + (a.y - player.y); + const bScore = (b.type === "boost" ? 50 : 0) + (b.type === "moving" ? 18 : 0) + (b.y - player.y); + return bScore - aScore; + }); + + const target = candidates[0]; + const targetX = target ? target.x + target.width / 2 : game.canvas.width / 2; + const dx = shortestDx(player.x, targetX, game.canvas.width); + game.input.left = dx < -12; + game.input.right = dx > 12; + }, 24); + })() + `); + + await delay(3000); + await client.screenshot("/workspace/skybound-runtime-live.png"); + const liveRuntime = await client.evaluate(`(() => ({ + state: window.skyboundGame.state, + score: window.skyboundGame.score, + heightMeters: Math.floor((window.skyboundGame.maxHeight - window.skyboundGame.startHeight) * 0.36), + streak: window.skyboundGame.styleStreak + }))()`); + + await delay(12000); + await client.screenshot("/workspace/skybound-runtime-play.png"); + + const runtime = await client.evaluate(`(() => { + const game = window.skyboundGame; + const typeCounts = game.platforms.reduce((acc, platform) => { + acc[platform.type] = (acc[platform.type] || 0) + 1; + return acc; + }, {}); + return { + state: game.state, + score: game.score, + maxHeightMeters: Math.floor((game.maxHeight - game.startHeight) * 0.36), + streak: game.styleStreak, + maxStreak: game.maxStyleStreak, + enemiesVisible: game.enemies.length, + pickupsVisible: game.pickups.length, + typeCounts, + }; + })()`); + + await client.evaluate(` + (() => { + clearInterval(window.__skyboundPilot); + window.skyboundGame.input.left = false; + window.skyboundGame.input.right = false; + window.skyboundGame.endRun(); + })() + `); + await delay(400); + await client.screenshot("/workspace/skybound-runtime-gameover.png"); + + const gameOverSummary = await client.evaluate(`(() => ({ + state: window.skyboundGame.state, + finalScore: document.getElementById("finalScore")?.textContent ?? null, + finalHeight: document.getElementById("finalHeight")?.textContent ?? null, + finalStreak: document.getElementById("finalStreak")?.textContent ?? null + }))()`); + + const reloadPromise = client.once("Page.loadEventFired"); + await client.send("Page.reload"); + await reloadPromise; + await delay(1000); + + const persisted = await client.evaluate(`(() => ({ + bestHud: document.getElementById("hudBest")?.textContent ?? null, + startVisible: !document.getElementById("startScreen")?.classList.contains("is-hidden"), + soundToggle: document.getElementById("soundToggle")?.textContent ?? null + }))()`); + + console.log( + JSON.stringify( + { + initial, + pausedState, + resumedState, + liveRuntime, + runtime, + gameOverSummary, + persisted, + consoleMessages, + pageErrors, + }, + null, + 2, + ), + ); + + client.socket.close(); +} + +main().catch((error) => { + console.error(error); + process.exitCode = 1; +}); diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..a745bf1 --- /dev/null +++ b/styles.css @@ -0,0 +1,495 @@ +:root { + --bg-1: #9fd4ff; + --bg-2: #f8d8ff; + --bg-3: #fff6c1; + --ink: #193052; + --paper: rgba(255, 255, 255, 0.88); + --paper-strong: rgba(255, 255, 255, 0.96); + --shadow: 0 24px 70px rgba(37, 60, 99, 0.18); + --border: rgba(25, 48, 82, 0.16); + --accent: #ff8f6b; + --accent-2: #7d8cff; + --success: #65d29b; + --danger: #ff6f91; + --warning: #ffd166; +} + +* { + box-sizing: border-box; +} + +html, +body { + margin: 0; + min-height: 100%; +} + +body { + position: relative; + overflow-x: hidden; + font-family: "Inter", sans-serif; + color: var(--ink); + background: + radial-gradient(circle at top left, rgba(255, 255, 255, 0.8), transparent 28%), + radial-gradient(circle at top right, rgba(255, 247, 214, 0.65), transparent 32%), + linear-gradient(180deg, #bce5ff 0%, #daf0ff 24%, #f7e7ff 65%, #fff6d5 100%); +} + +body::before, +body::after { + content: ""; + position: fixed; + inset: auto; + width: 34vmax; + height: 34vmax; + border-radius: 50%; + filter: blur(20px); + opacity: 0.26; + pointer-events: none; + z-index: -2; +} + +body::before { + top: -10vmax; + right: -6vmax; + background: radial-gradient(circle, rgba(255, 164, 185, 0.7), transparent 68%); +} + +body::after { + bottom: -14vmax; + left: -8vmax; + background: radial-gradient(circle, rgba(118, 195, 255, 0.75), transparent 64%); +} + +.page-noise { + position: fixed; + inset: 0; + pointer-events: none; + z-index: -1; + opacity: 0.18; + background-image: + radial-gradient(circle at 12% 18%, rgba(25, 48, 82, 0.14) 0 1px, transparent 1px), + radial-gradient(circle at 70% 30%, rgba(25, 48, 82, 0.12) 0 1px, transparent 1px), + radial-gradient(circle at 25% 75%, rgba(25, 48, 82, 0.14) 0 1px, transparent 1px), + radial-gradient(circle at 85% 80%, rgba(25, 48, 82, 0.12) 0 1px, transparent 1px); + background-size: 28px 28px, 32px 32px, 26px 26px, 34px 34px; +} + +.app-shell { + width: min(1400px, calc(100vw - 32px)); + margin: 0 auto; + padding: 28px 0 36px; +} + +.hero-bar { + display: flex; + justify-content: space-between; + gap: 24px; + align-items: flex-end; + margin-bottom: 22px; + padding: 22px 24px; + background: linear-gradient(135deg, rgba(255, 255, 255, 0.68), rgba(255, 255, 255, 0.48)); + border: 2px solid rgba(25, 48, 82, 0.12); + border-radius: 28px; + box-shadow: var(--shadow); + backdrop-filter: blur(10px); +} + +.eyebrow { + margin: 0 0 6px; + font-size: 0.82rem; + letter-spacing: 0.2em; + text-transform: uppercase; + color: rgba(25, 48, 82, 0.62); +} + +.hero-bar h1 { + margin: 0; + font-family: "Baloo 2", cursive; + font-weight: 800; + font-size: clamp(2.6rem, 4.4vw, 4.6rem); + line-height: 0.95; +} + +.hero-copy { + max-width: 720px; + margin: 10px 0 0; + color: rgba(25, 48, 82, 0.78); + font-size: 1.02rem; + line-height: 1.6; +} + +.hero-stats { + display: grid; + grid-template-columns: repeat(2, minmax(140px, 1fr)); + gap: 12px; + min-width: 280px; +} + +.pill, +.hud-card, +.panel-card, +.overlay-card, +.touch-button, +.icon-button, +.primary-button { + border: 2px solid var(--border); + box-shadow: 0 12px 26px rgba(42, 64, 102, 0.12); +} + +.pill { + display: grid; + gap: 4px; + padding: 14px 16px; + border-radius: 18px; + background: rgba(255, 255, 255, 0.72); +} + +.pill span, +.hud-card span, +.result-grid span, +.mini-grid span { + font-size: 0.76rem; + letter-spacing: 0.08em; + text-transform: uppercase; + color: rgba(25, 48, 82, 0.62); +} + +.pill strong { + font-size: 1rem; +} + +.game-layout { + display: grid; + grid-template-columns: minmax(220px, 270px) minmax(340px, 540px) minmax(220px, 270px); + gap: 24px; + align-items: start; +} + +.info-panel { + display: grid; + gap: 18px; +} + +.panel-card { + padding: 18px 18px 20px; + border-radius: 22px; + background: var(--paper); + backdrop-filter: blur(12px); +} + +.panel-card h2 { + margin: 0 0 12px; + font-family: "Baloo 2", cursive; + font-size: 1.42rem; + line-height: 1; +} + +.panel-card p, +.tip-list { + margin: 0; + color: rgba(25, 48, 82, 0.78); + line-height: 1.6; +} + +.tip-list { + padding-left: 18px; +} + +.legend-list { + display: grid; + gap: 10px; + color: rgba(25, 48, 82, 0.82); +} + +.legend-list div { + display: flex; + align-items: center; + gap: 10px; +} + +.swatch { + width: 18px; + height: 18px; + border-radius: 999px; + border: 2px solid rgba(25, 48, 82, 0.4); +} + +.swatch-normal { background: #8ddf95; } +.swatch-moving { background: #71caff; } +.swatch-break { background: #ffc96e; } +.swatch-ghost { background: #ccb9ff; } +.swatch-boost { background: #ff9aa2; } + +.game-column { + display: grid; + gap: 18px; +} + +.game-frame { + position: relative; + width: 100%; + padding: 16px; + border-radius: 32px; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.42), rgba(255, 255, 255, 0.22)), + linear-gradient(135deg, rgba(125, 140, 255, 0.16), rgba(255, 143, 107, 0.16)); + border: 2px solid rgba(25, 48, 82, 0.14); + box-shadow: var(--shadow); + backdrop-filter: blur(12px); +} + +#gameCanvas { + display: block; + width: 100%; + height: auto; + border-radius: 24px; + background: linear-gradient(180deg, #d6f1ff 0%, #ebf9ff 45%, #fffbee 100%); + border: 3px solid rgba(25, 48, 82, 0.18); +} + +.hud { + position: absolute; + inset: 28px 30px auto 30px; + display: flex; + justify-content: space-between; + align-items: flex-start; + gap: 14px; + pointer-events: none; +} + +.hud-group { + display: grid; + grid-template-columns: repeat(2, minmax(80px, 1fr)); + gap: 10px; +} + +.hud-card { + display: grid; + gap: 2px; + min-width: 92px; + padding: 12px 14px; + border-radius: 18px; + background: rgba(255, 255, 255, 0.84); +} + +.hud-card strong { + font-family: "Baloo 2", cursive; + font-size: 1.36rem; + line-height: 1; +} + +.hud-actions { + display: flex; + flex-direction: column; + gap: 10px; + pointer-events: auto; +} + +.icon-button, +.primary-button, +.touch-button { + cursor: pointer; + font: inherit; + border-radius: 16px; + color: var(--ink); + transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease; +} + +.icon-button:hover, +.primary-button:hover, +.touch-button:hover { + transform: translateY(-2px); + box-shadow: 0 16px 28px rgba(42, 64, 102, 0.18); +} + +.icon-button { + padding: 11px 14px; + background: rgba(255, 255, 255, 0.86); +} + +.primary-button { + padding: 14px 24px; + background: linear-gradient(135deg, var(--accent), #ffb15d); + color: #fff; + border-color: rgba(255, 115, 72, 0.35); + font-weight: 700; +} + +.screen-overlay { + position: absolute; + inset: 16px; + display: grid; + place-items: center; + background: rgba(32, 53, 86, 0.22); + backdrop-filter: blur(6px); + border-radius: 24px; + transition: opacity 0.22s ease, transform 0.22s ease; +} + +.screen-overlay.is-hidden { + opacity: 0; + pointer-events: none; + transform: scale(0.98); +} + +.overlay-card { + width: min(88%, 380px); + padding: 24px 24px 22px; + border-radius: 24px; + background: var(--paper-strong); + text-align: center; +} + +.overlay-card h2 { + margin: 0 0 10px; + font-family: "Baloo 2", cursive; + font-size: 2rem; + line-height: 0.96; +} + +.overlay-card p { + margin: 0; + line-height: 1.6; + color: rgba(25, 48, 82, 0.8); +} + +.button-row { + display: flex; + justify-content: center; + margin-top: 18px; +} + +.mini-grid, +.result-grid { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 10px; + margin-top: 18px; +} + +.mini-grid div, +.result-grid div { + display: grid; + gap: 4px; + padding: 12px; + border-radius: 16px; + background: rgba(125, 140, 255, 0.08); +} + +.mini-grid strong, +.result-grid strong { + font-size: 1rem; +} + +.result-grid strong { + font-family: "Baloo 2", cursive; + font-size: 1.35rem; +} + +.touch-controls { + display: none; + justify-content: center; + gap: 16px; +} + +.touch-button { + width: 92px; + height: 62px; + background: rgba(255, 255, 255, 0.86); + font-size: 1.8rem; + font-weight: 700; +} + +.touch-button.is-active { + background: linear-gradient(135deg, rgba(125, 140, 255, 0.28), rgba(255, 143, 107, 0.28)); + transform: translateY(1px) scale(0.98); +} + +.footer-note { + margin-top: 20px; + padding: 0 4px; + text-align: center; + color: rgba(25, 48, 82, 0.72); +} + +code { + padding: 2px 8px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.68); + border: 1px solid rgba(25, 48, 82, 0.12); +} + +@media (max-width: 1180px) { + .game-layout { + grid-template-columns: 1fr minmax(340px, 540px) 1fr; + } + + .hero-bar { + flex-direction: column; + align-items: flex-start; + } +} + +@media (max-width: 980px) { + .app-shell { + width: min(720px, calc(100vw - 20px)); + padding-top: 18px; + } + + .game-layout { + grid-template-columns: 1fr; + } + + .info-panel { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .game-column { + order: -1; + } +} + +@media (max-width: 720px) { + .hero-bar { + padding: 18px; + border-radius: 24px; + } + + .hero-stats, + .info-panel, + .mini-grid, + .result-grid { + grid-template-columns: 1fr; + } + + .game-frame { + padding: 12px; + border-radius: 24px; + } + + .hud { + inset: 22px 24px auto 24px; + flex-direction: column; + align-items: stretch; + } + + .hud-group { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .hud-actions { + flex-direction: row; + justify-content: flex-end; + } + + .touch-controls { + display: flex; + } +} + +@media (pointer: coarse) { + .touch-controls { + display: flex; + } +} From f766b4a679a956c28aaee9843b0752463ad1326f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 6 Mar 2026 02:55:39 +0000 Subject: [PATCH 02/17] Rebuild as faithful doodle jump parody Co-authored-by: ilikevibecoding --- README.md | 65 +- assets/audio/gameover.wav | Bin 0 -> 68300 bytes assets/audio/jetpack.mp3 | Bin 0 -> 51046 bytes assets/audio/jump.wav | Bin 0 -> 29612 bytes assets/audio/monster.mp3 | Bin 0 -> 172268 bytes assets/audio/propeller.mp3 | Bin 0 -> 46033 bytes assets/audio/shoot.mp3 | Bin 0 -> 4653 bytes assets/audio/spring.mp3 | Bin 0 -> 15099 bytes assets/images/jetpack.png | Bin 0 -> 11041 bytes assets/images/monster.png | Bin 0 -> 12811 bytes assets/images/platform-blue.png | Bin 0 -> 14371 bytes assets/images/platform-brown-broken.png | Bin 0 -> 25835 bytes assets/images/platform-brown.png | Bin 0 -> 9558 bytes assets/images/platform-green.png | Bin 0 -> 13144 bytes assets/images/platform-white.png | Bin 0 -> 4744 bytes assets/images/player-left-jump.png | Bin 0 -> 3637 bytes assets/images/player-left.png | Bin 0 -> 3572 bytes assets/images/player-right-jump.png | Bin 0 -> 3582 bytes assets/images/player-right.png | Bin 0 -> 3547 bytes assets/images/player-shoot-jump.png | Bin 0 -> 13954 bytes assets/images/player-shoot.png | Bin 0 -> 14036 bytes assets/images/projectile.png | Bin 0 -> 932 bytes assets/images/propeller.png | Bin 0 -> 4831 bytes assets/images/spring-compressed.png | Bin 0 -> 7056 bytes assets/images/spring.png | Bin 0 -> 7056 bytes game.js | 1877 +++++++++-------------- index.html | 201 +-- smoke-test.mjs | 204 ++- styles.css | 537 +++---- 29 files changed, 1124 insertions(+), 1760 deletions(-) create mode 100644 assets/audio/gameover.wav create mode 100644 assets/audio/jetpack.mp3 create mode 100644 assets/audio/jump.wav create mode 100644 assets/audio/monster.mp3 create mode 100644 assets/audio/propeller.mp3 create mode 100644 assets/audio/shoot.mp3 create mode 100644 assets/audio/spring.mp3 create mode 100644 assets/images/jetpack.png create mode 100644 assets/images/monster.png create mode 100644 assets/images/platform-blue.png create mode 100644 assets/images/platform-brown-broken.png create mode 100644 assets/images/platform-brown.png create mode 100644 assets/images/platform-green.png create mode 100644 assets/images/platform-white.png create mode 100644 assets/images/player-left-jump.png create mode 100644 assets/images/player-left.png create mode 100644 assets/images/player-right-jump.png create mode 100644 assets/images/player-right.png create mode 100644 assets/images/player-shoot-jump.png create mode 100644 assets/images/player-shoot.png create mode 100644 assets/images/projectile.png create mode 100644 assets/images/propeller.png create mode 100644 assets/images/spring-compressed.png create mode 100644 assets/images/spring.png diff --git a/README.md b/README.md index 148d13a..5069c93 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,30 @@ -# Skybound Scribble +# Doodle Jump Parody -Skybound Scribble is a polished browser-based arcade platformer inspired by Doodle Jump. -It is built with plain HTML, CSS, and JavaScript, so you can run it locally in any modern desktop browser without a bundler or framework. +Doodle Jump Parody is a faithful browser parody clone tuned to feel closer to the original Doodle Jump formula while still running as a plain static web app. + +The project uses plain HTML, CSS, and JavaScript and now bundles local sprite/audio assets in the repository, so local play does not depend on fetching remote art or sounds at runtime. ## Features -- Endless vertical jumping gameplay -- Auto-bounce movement just like classic Doodle Jump-style games +- Portrait graph-paper playfield +- Score in the top-left and pause in the top-right +- Automatic jumping / bouncing - Horizontal wraparound -- Procedural platform generation -- Multiple platform types: - - stable platforms - - moving platforms - - breakable platforms - - vanishing platforms - - boost platforms -- Power-ups: - - spring boosts - - jetpack bursts -- Hazards: - - doodle sky monsters -- HUD with score, height, best score, and style streak +- Canonical platform families: + - green standard platforms + - blue moving platforms + - brown breakable platforms + - white disappearing platforms +- Boost pickups: + - spring + - propeller hat + - jetpack +- Monsters that can be stomped or shot +- Upward shooting - Start, pause, and game-over overlays - Keyboard and touch controls - Persistent best score and sound setting with `localStorage` -- Lightweight procedural sound toggle +- Local bundled assets under `assets/images` and `assets/audio` ## Run locally @@ -40,7 +40,13 @@ Then open: http://localhost:8000 ``` -You can also open `index.html` directly, but a local server is recommended. +If `python3` is unavailable, try: + +```bash +python -m http.server 8000 +``` + +Opening `index.html` directly can work, but a local server is recommended. ## Controls @@ -48,25 +54,28 @@ You can also open `index.html` directly, but a local server is recommended. - `A` / `D` — move left / right - `←` / `→` — move left / right +- `Space` — shoot upward - `P` or `Esc` — pause / resume - `Enter` — start a run from the start or game-over screen - `R` — quick restart from the start or game-over screen ### Mobile / touch -- Use the on-screen left / right buttons at the bottom of the page +- Use the on-screen left / shoot / right buttons ## Gameplay tips - Land on platforms from above to bounce automatically. -- Use wraparound movement to recover from awkward jumps. -- Springs and boost pads are your best tools for skipping dangerous gaps. -- Vanishing pads help once, then disappear. -- Breakable pads crack and drop out after contact. -- The longer you survive, the more hazards and tricky platform combinations appear. +- Use wraparound movement to rescue awkward jumps. +- Springs, propellers, and jetpacks are the fastest ways to climb. +- Brown platforms break after one bounce. +- White platforms disappear after contact. +- Stomp monsters from above or shoot them. ## Project files - `index.html` — page structure and overlays -- `styles.css` — full visual design and responsive layout -- `game.js` — gameplay loop, physics, rendering, input, audio, and persistence \ No newline at end of file +- `styles.css` — portrait parody presentation and responsive layout +- `game.js` — gameplay loop, platform generation, rendering, input, audio, and persistence +- `assets/images` — local sprite assets used by the game +- `assets/audio` — local sound effects used by the game \ No newline at end of file diff --git a/assets/audio/gameover.wav b/assets/audio/gameover.wav new file mode 100644 index 0000000000000000000000000000000000000000..d60ef5d9efc86d6d1e6e0e43099779abbb02685b GIT binary patch literal 68300 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 literal 0 HcmV?d00001 diff --git a/assets/audio/jetpack.mp3 b/assets/audio/jetpack.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..4f5403f5d11922900fdac1f18c07505a1e08a967 GIT binary patch literal 51046 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

deD5KsijlnH1n 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 If8T-s2Zyfmp#T5? literal 0 HcmV?d00001 diff --git a/assets/audio/propeller.mp3 b/assets/audio/propeller.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..92e02d949a1ee3d3c00d1446e293abd9edaa8086 GIT binary patch literal 46033 zcmd?QWmFv7_U>JcO9PEJ-nc_ULy!Pz+zIX^xI^#&vBot7cL;6)f(J-~YjBs~?gWbv zlD_P-_y67_``r6}f7ci_x~lp^uhGAH=A7%9t5g*bn7|)HNMHWG*6kQh%aD7#M;oB2}+rz`_k%yhDtDP76XME4?^}h~Pcl$@TcSvpzHvp(l1+Z}O z35g+Ol+-lzFjjU>9zFpf#2s6o|W^ups1w0s-~{tUCaBnj;`Lp;n9hynfb+~)%BgdgX7b)%dg*m{<{4w2@P3I zMTCHaxEE;Te zyu?UX>Bk*c^f=70WOadW-kR2C_wJvG9k;TvSW0EI9Y2qQMzE*Y#ub)CpIqYeD2G1v zVk6lmkhCt5Z(X?kwm?L0&fq3#^95giFf(a$7=?rp z|E`$eN!@m9+M{zL=M|>+=TY`_AIo|}@-e_Vj-@{Aaj_Qz-WQ9$a&n}D19E7+kMj)% z5{s9TZS99IX3+N%QsbhNmrWK{{ClN`la$4;znt-WC?JudMvxLY<_-vD8PA0U2ca6Oh>0fV z9g(KWLO*O2G~sn_6YQH4(etNzfC#m0@=^3UWt z12^uQ&9h6-&$UnV`kW4|RGW#LzEy62{i+M)?ik=34`zYJ?lJS>4164rb5t)JGpn*_ zSeay8oVi;+v+(HiUVHUNvz?RF*8L|=C((-ZyKas)1b$eZT`kG6$^M`?i~kDgAA|r( z^C2$ZeiSAmmwiaOZE(kZs+rnWs`f+6U+kPdERc8!h|3?EL6A&;$XgNZo)x$>|;N+@ITFI5T~G+)ah~37t!L2<|k1v&fuO7(&TSao>&S$KCxg* zYZpm59H3aaPpn3xyi`B->*4XI``x-d9nZPmKFE(VTJd+eSZ=ecI%GH)u3jX-przl9 zXY;?1$6oT#-aY`KB#Z~n$Pu=*W|?^`tqRp5$3~d_63Ats{Pfc*}8te#}U83RagIzvZ_QTeixut z6^LM$+?u&gv3uuKY>r0nqR}V)&sTqOzCuQG6|Jsx-9BVx3mmp5tf+a3%877jUw1>7 z6})%+X{TjPBqk7qWWM7mo|InCv*(Xv9fMK_r11S&NKjQ6{>p@3>cYI}1&X%JN66MG z#h2o|q@gcuTM!_1AN{lM>-flm*|D?TgcIwxUfACb&uS%YgOQHV)S0151U(?-o!eXwD)%IM&v5Nl1 z9m!o*V%N`!-G}`5IQM6iOPT)6C9u7(M^|sBxYWv2; z;Nw2VkM{?%9}IU-#UcY{9NuWQ@Z%<{)B;1Hw$qzlKzi+T^ZL{R+u_!|D)bNE#Ju_6 zRtsL480I9K5;zv6avf>egX2iF z=C5GO1Ay&M*w-Hs;aOH^-b-KRCstQc2$#$8>NWm)=gTyMK-?6s?aJYL3fC{XQOgo|j2xf#H{U<}#RPYKDZkbj0-NEv#8kD*6OSSU-{&56-X zfCWQ^c6mI_qkE*TrG^hxp~496wMQBKG*6P>gYg#>%bEC06NAkt627L1uNMS9Y(-Oh zTwUTZQ3V!5cpe#Bt_{~Y>t@M{_cRq7vKu&>gnPP%+#Y2wS zZx3J%!tul|kTb$lL1B+Fv%E-`#U>^Hp27RJkmchJEbM92s`^J^p5YlAHlg4O_1mT&sO z_Hkl-n-<+bLn3#G^0FgHws3qonOw*rOH9%ElS3X?{V(S?hm^@9ie;r0I_KejvjyC; zq`Q{0(dEHj@)PFkWju^oi4x9B1{{i-F7K0ki`Sz>11QZl3=a&QvP?5=ni_vnxm)hP zI(2C*)XsM(IZn2@pB%7K^OIL(3c=O;KlQ7?A7%D`jz0+{&yNXftw(j`*Ob2Oqn!Xi zo4U1#sJ!}e(oHhEO`6eeg|K*pzcmD1*cCF$XqC1ow zyGG5*<+*I%oEkeJJM@Nx-PBj=l`@mbEH#ofC3w6iM`aE_)OvyliBBH|rcdnZp~B}- z*l-lHsA70J)BAO-@3iL5X!n`i@f*?fAfOx=j0e|J>Jd9&A=Vt@YGR(3VO@nA6_w+P6EVe=}*PQ5VR>V@Y9Vet7OY+^dh(ub; z)7KH*{q@aDcurf_`iX-dzxW=bi?jN>&`e>0NL8*qbGP#8z+WccjM3&zKLlGYLmJf{Zl!Y-*bS{Qv*ocm5oHNC1w^#eSi|D< zRyyPh*6|LvG)|TJkh^lcy4*85Nqd=;_abxvESerbuuRL*9OBJ?ulna+riUUX0<-%I zV6?&-kx}|M|2M$Y|A6zsJpf==*I4{0%J5}kJV}79qjw4x4sLiT952-vj7-6RdsLoi zM1~zvfj#66ST4i5hzW7LTCMu9N*6Bq*F7HG@&0mA(36#UoKrFTkSm43Dc!H=s@m-R zY&Vi)p@!{|2&L>Y2D1>?hDG|;dq#yGgVseX*d)p zODXUkrNifl%qvxh3*2Vc^5nP8o?)AI=6{$t_Dj$Gh3X@>+#mO)j(h*MAo#DS{)%!r z(s#7hUAo$eN>rDGT5mOEdQY#E&O0{8n;2|kt%E7wQOMMFO&ErQ9i&k61|%`9~#pk zlfvRnh~g@QDlQ-^id2my^=K(=nRI(YIno>QJRKYY*`^q%rr2th{so6{`c zZe(=cv7X{`fp?u#N9<`?te+5(05gBV_)0E)GYdIUFy|u)PlN1 zM3s{3Ru7F_nS(9j`GDrMoFWI}vr)7YH)#Aw8d16@vWwCYHIs{Luw zYZ?t-M$r)?zEx_(9c5k%iU&mtW10^>>|V$;OtN`a*tMh4i@ElJ!Lss(H?CEz3N4l& zqS+JT=6_^I^R*;S-eljyWsW;~NW;vLpN_Yd@i53Fb{q+o-0kHidh2G;Lwi++cnVTCH-Z*WKNAxn7sb^4&Y&vCK(9d}84Cevf`Xe4^&IBZpI zKSLrjxa?6%XS7Dzk-p)Y9QwsUo?$Wa)^iejn6@q--?`wg{VpRDx~Djq+E&(aSXs&< z$Q{{hJJF&Zy{5!~n@Rhe!|{Q`q@S58Z@G)48o^Vmtm)ae`Xw#ucNfjReEpV7b+VoI z=<&l3UaJe;;JUXjWbCS!y*iC5*pYZ&e+ofFEu8~ew*F36e`)CBt%kNEhEz+7KYfe` z0RY1q;7Sj6ODD8Se5m!`8M5-Sq>OAmN7GPx`d5P(u^(+CJO9 zQ5kqbO5ElVc7O&uF&X=0eIaJ^ha(w^Qf*VV95()}_1r*?(IG!Wk(BQ>ypnb%UnCyu z+?e*#t{7gJQ9Mj5)va{69<2NBb=Gg}Nx?U!S#RDzr@XlEbNJNz%i<%a^r^c6&wM$a z`_=n<1xDO`)rJR#%2U*4t8%3)a^@#;ab&z8T0lYkp*6wlA&!CRy9q}Y! z5GpSo(4YjcIshO#&yf=F9z|6v*BxZ9de9p?T2`m zadp21d@hb`xhKjI!T;#4_vNZYs{d^JXLQ(!S5cqwqo+4-4US*!eEYP7?$261L9e2UKR>}*;#S|v=c2N}wnxkN z<7qk%o2PP;Z$VDnq^u2UIFHXB`+VQLxk=aQJ-5qrOudP%Croy5@)=uX0J-9DLNY{v zL40Q)jkcpEg4k=8w-PuAiwUF|8VXPn5-0e;K|)m(_tf?!fH?SkkZ{qM$ow)w{1v=e z5I(Lfq~RkJDh0n3$HqoN;2j<+UE0Ry4!cdNdx{j?3SNJmcz&?S-dIH0}yS6dG=M{QAIwD6g1v-Q>x5X*!xIN*kqKJmqop z&OCV&J^K69VD805Ki$1Jk@snxPq|!~+smJfZJuLeV^c!QUZc@B!NGL|VowR&R=+cU z(YE+6CEuSKN{!;Zt+w5|*7EEL-rs5n)Xlb4NDn68a!MjC*%bd&Z;H*T-Z@2%F@@C~ zg4LM^XR}0NP+_tPIu>;n2@T>GOe*9h6(qKWU~J+^W)YDhhXHxJxEfMfs}kK(&-F-l z_`{!C^`jTaIM(0CrI=Rc!_m2R-z}3SqKBiYHI;6P1Y`_xUlR2j-y~NW%jrz%j4w5m z>zkIJAM@JX$;a1wYV!Tfso$=28gb5D)#+XL*C$I;O+NFKEQPosg+Rf$AbLx#lRVN7 zdL7UQcnUg_2GeVhXM$fsDXgHzOwdG(bY~zgq=Y<_8I%rX#0uU^76t(XqAm7X-lg~UCk|x(%sH6{rM(bGXB}?zG8Ft=Xbk}&fCqBGgi8P zqT6@pZoG@zbI-2CTExOrmzF=&tQM93cQ@fr9sQ{xsBeaiNh?6sRa!RG`sJ1o)_G5e znzGw_e7Vg&FaZS#83sIn(m>lxi2^U*N|zMI_!%Rjn3fE3V(&@^xg#zB`3{a0-^66` zA%egaR9?_oP^L$VN*elmaWn1My{BwjIuU&C(ke3w=T?P!~M;t#>$LUFW_)fXOYLqi&*AG z;T@Y~3F{P+bt3XXVl?_u`*{YR1|>P?P$cDGci;A4Iv|)HtfwFrk z>e;;s`o^zi1pAl1WZQQqk+YOjHo62C5a)ImUB4FZ34qBxG3|^gt(dQKpIz-c%t2pR z>}aB03>$mf_z7kkT`K1`(O2lNKdM|z4@U7}ekCeLWBg%~ij$AzX?vSq_bL zS9wuqib|nO?R6-?y;yJe6XaeKFZvz1Gb$V@vibKKroXo#QO+Eg%Hd%8c0T$M##*T5 zYj`Y0mnz1R!_=ly|FBz5Cx!7*`5DA_v`bbS0H9!{F34=M;z$9`O$YwtSesAr{SaD> zMiS527vrTBW=bTH09cyh$iIcFva$_ zoxz6qBb%eFWb1vm%DXYlfs1b@Idc6ZwX8mBCLI**2L5dp`il@iZNMvHumsSl)>Yh> zh{ps#AwtGexKklrd#qRjHukjL%zb+5$O}e|Zer{Z63`|QsK!yw(w~nQOtIAoq2R$3 z%qQSN*=&Vfs8*U;iz8Do~Gl59|TN$E!5UD=|t3y$UaLhhTNI zc8e0OqqHG&N}ynq(k^>3q8|ECB`hKhJPy~swWvuOVJ`ukM!~6L8SWlT5@9Kp4|b|E zmDkuwAhK-NjyKyr;&H3JTtgSutXfwBESZGw9 zEQmebqG#K7&Vw(3KUKG_Yy5BeY`0D&LAPxQG*J-b&u!nBQcNtm4^m-?&a!sfy_7Oa?q(YG zHl0FDE}XH-y{n`*JCvMpIy4Uu`|#`0=`}j%Mb3-Yzs1hnOh5l_{W0T`xiS7GMy~0? z^kk*|-bQ1wORSl1Zlp&ilA2&<<4mDdi*9o!OrhXhxR1j1oXZ^+8mwhwpO4qXh74xHG}vZoWi z3CHAFVH(OQaL|?pCZ`8yM%$Zvd6?V&pHlA6C$E&9EV6?!u(kTHe6bcL_0Gy1e z;z1cfkr+^Hz{9c|&wsAVo=XNxssL+1mnIC8G8`maEE|H#FH)?)#?Z@K!*fpdG`Ne$ zCW0-vR5!?iJsnrwspru;PNaX}x{WzaB+t&b{oS|RWJt}WM!l1S%Q?h;d?k`)>!_l5 zD9t*)=WdJnjaRBPhHj_H*vOFUv*DV?@*%|MmK7Jh>-VYtR*2kZ+emK{#ndI0+~p z)!h*PcwEC051=O!u5Gmq+j9Qhs{l*05QP-6*Ai|6c}DEZf7D- zSsD9suRbFX5Q0>$7BYEG~;w5Dpf_@%yCDsRYAg{sBA- zfUNC*@2h(IcKmuW&hnX$Ppfug@b2{VjAj8RGwW)GKXNkAs=;v|<4Z~IPJl2p6)W=N zjUpHPMZR5nrhcTgPvv-vOLlwN%!pd%AYVxv*4XfGa7(J=(xRr#9ZH%&sM4etn$mk~ zdKw7;ygG4j&U)jb2HVSnes`7}v=l4oq_6}eDty7K7K(+zQF?eJ(O9e)Awlt6JE&FU zqDU-4j4fXri)xL}%5L043D$_Dluv@o^V6i#J}bNw-}q2dmURYxXN2vMCvHix@+2c( zpC+6mD#l63@Os-4Lc8_wK!@1i5vSTqKI1zG9Ebj1MfqMjm4(k}@58<;v!h^M8sR1U z%x!d;#>w*Ky^KIZ#@u(lR~Dd|48#+ zI4rHK!U?f$L;SeY-mJQFAy`IYB`bLuU;_t3c$HiD4WBPF_My9GoW-AN=Sj;b;k*~i%7Z5%cnS$-^x*1(X zjL?7IT%O2e)M9YMVN^%b%D^(TD4@?(GaR*oqNb>@5g6SU#HcC4Uirl4scMm8oS+PL zjs)&ke1`mmDas_cm>@abU4?0&n*uWNB$NJdqt4tX%#OFQL60rmkngZ#@ZHUMl9@HPM>zNiDo{5Z|sgatW04BAyRqtVfk+5_XGP2t~vJh&G zwLlV=1SkaXYZR6tAX4M~V#i?=0yd#d5w12nOAp4-jVIP+C4>f2YYam(RA8}pzv!uJ z%`YoY8oxihdlV$*(UUsFW(60p&nhQy~P+l=fU z++rnit-9Myves@Z28qzD6uaRld$&_eX?5+jxS$ z?hV~bjeyQuQ-wL3+pA1|s7%tDb3J-%ZrPJ@$m*T6|90o)$pyjZzWSs4YqMsjyZYbz z1iw{1IuyB@`&L@oxU(YmTj-g4o%egWzo`}eBD8(~j@GtIH_w|r(1_5jhBnDGSzo13 z(OoBLt%Xp9={gMe*oX{4_cVC{=httjIKNk(@ju&+>snGzK5ad=CAq1P)WnVFgjm&FI%=Cs z;T?g3t&C3!0_}$tUXwfPmTn9!jmgGF1-xH;?%(w2seapgYldE#2k0I2_UXr1@vE;w zKUeQwqqSynJy2`LpRmx$4IAoN-`PNZuL|9TNp(7&((r%g_Uv(=aWFxI zzAJd4`oi3*@2tXCTB&o+i`vVz_r>0?lC=87o+I!2dkr7AqtU*{b02pfO=rA59CP*Q zk%*FzyZa;DVT!IxIo05wT1bBp`h}3u+UNarRAP_6B-9K5HZt3+_0ry+98=IKa;gDx z28?>{;3<9_Jwjj{=3~`tZnfv(p@IQ~V>44Y3{pL#h{fXweXGtFHTaClL6kNrx^o2w z)ne-ElqWetGaAS3m1wWg;#WQE4J*iqo=?0Y1vUCKZ|71Q~DV`QJC>3xtzFqnmsf{q)dU(;bKumT`U04c@&wsYK-f`M2S z8387AZfKw=dI0odsi?Ts2eQ8IXF!7{nnRbv|xRiTYvb4{6P(-nJ(gKZ~<@gptV9*LLLQzh-i-rNr4Zz zF7k-fNNB2YOoZS7(R;LBo75r*Tt1ZeiTwi3 z#{_$3r%5a!kfO#Kf5kg_Y#1Gb%L4+H1^0y!N@7#U^7-dS=Lk>d4p)4w=ktx7Y;(UX zbZ2otjcGAU-I?0$uc@5(?+hEC33+nHnxC#Jl8!67U)mqpMJ-gSq(3~WIRH5JN;k0xj!Y8Oc|l(R^zSyjJG)GsJ7*{f#*LqpmD%=ATmM; z18ia3?1FcwU`Ulne+U^KCN?Q987V0~NVWhO+>OyW+^d-3Ro`ZT*~>+pldK$+X;%z! zy!+Y&?+H@0%gdi#qM-Oa9pq=M{42f6>xk=9J*SU|BB!08F@MUpngfzwCJujzTzLd- zV}aQS_w30M#93r?g+pz<9Nk_ITr6{auEDD~01L$=>;)BmRI0{z-EZf}42Ynf@RUlgd-`pvz zT5lYJO~im`qEYw`yjNI}YvF~1I4svdgur6B7WIx?T6uJn{=RTFmt3)Xs(E-~L7Zu3 zcU102)56HwHEL<3-Xxn4&CCTNu@!NU<9TLW_SBrK5gK_fyP`i{Yh&s>SK^7BiRnp> z#X{`1ySHi6N7G}f_iwBR>$R3$QWvFKvrI)1U$dJ&ogP&c?l)cjoTcS0ebO3kt|hvx zyUhN>n&4lO(LV?Q)I|JngC!IuXX(z+-T2!DYq#{Ew~bL@Mv=U3xxBARh`wA6nXzqx zu%$|qF@^>n{xBn`2e}_?>7`t{2Zi&2@?jaMj9&IG%pir*s7yS{0*+wPN0f~M%W_Th zU;X7UjD)_w|FB)t!|Zek`4v$+SQT*X?(D!GU^l8Sn&Z#I&hr9Br(3RZS;v_BYPKtj zNBw85=~BV5^Sw`59~!IemTFg?_DkJeetcE^0=+$o-W)r5xZ0iF{i4bRZNR%;y(pil zxJTIo1F#PPM{>A3KH%Xx>Ldkr@bR=qC3rsWyju`3&q{2IEJYChJZ|YI+;Ckmd{#oo`1~;J?3l zX?T2ewt9om95JmAr?xM3RudST>w9;B=6``kuMgMEw)}AJ7v)>A_?ae#p0V33`6r9+ zPYoqmL>NA6LJ^uHI8>KvZ=2x7OJ#=kTbz)mkG6o$dN2+=*xJgIC0|?g`^)v9_`q-0 z+KUeWQ6-3=!el-eZa0NVu6t&(;ptS~$Ir^7NufcwJ3l<3tf@OurCy~1d#A8jm8P0| ztUH}a9G$sW5tncgE@p#ym!CtCy(wBNW;foqa^T#3NR_UtI&op#7jc>JzF}e_FL7_i z!dds_Vs5Z=wPo|bfYInMcDjQ(Q;`Bw8*L7i5_JAvMjTeUB{mHf82Z6Al&X&zCme_^ z5yFPS95Eo7LAiL@j|5p2ne)u+f#h18@CR6oRM>nVrS|A~0!@}x>$Q!a6?Lk2wMA^} zM$PU-6p27Yp5+ZOtwgcG9zfjhUF3s-kXv5{za__42PuCB#b2)7YB=cw2oS)%y?099YQ zHr8skRvxgDGY^XoK_X(6h=iI`2nbb(@rtG_b<@e<>G6lD#gVV@UBMsCC>qsi0!Lru zs=5@6tZO6A@v+q@=&dl=`neLqQ}kbE(nJ%>Nw7Hnq`9k*ayQoHqaHmZge2_g*rF1u zo34~2c2V#LkIc3}%%=4H{?yW?fWWs;#?u?2CVOtuv(zP0O10CBE(y?>dxr7!N_V6C zP%V9AR}KbWIHXuPa5Fe$dHW~Ug2$apO0)Jj_+YxW$0Ph)UPR`^RCt#gpd0grEd zVX1w5KB>v1Jx=_)-ZZ47Qrd{x;-a|dt{q#((C-`d#Vk1oQPWFL-I`JsRfVm3BWJcB z;>4`ZXiaHig*H_ohHL7Q<$=I3mT+X~p0+e#YRHkH&zAZ1q#93 z99shaowC^E0A8^ooET@*s3^w5vP9jX`!rrZ2c=~;7EN+H)y`*h|4X~>U+MgD^{0mP z@?UA)<{`E71}D`KxIciA{ehxPxWfLRGXNnEh~(MOnScb7aU(-QLnuaA#$9%~=?Mp?Fev%SXqvTbCBfJux7Dif_roBB|C~nb)GVUZ790jFy0gOMXZLtDKquRb&Kjjt}Wv=*iBPT$mp+ z7z~RzoM*)YX@Xb-97urJXgu*b|LH9o=?Wq~Ooibk3dyq(2-#XX3WkMbSJF6hN{ezu z=E-5R4HJ~!Z+*_DFGJCZm&gRqJMMIhg9JhE=kcYEk;Dze4#s3WUU0|FeDve-_1BpG zUYjj98MOzAT(gYt<}}*8a<@dQ$Sxjy8tF3;$}TXx<2O?x>chJ;l)(QkL+U~zz%27U zKW5DS{Bq8ZC_V$1CyXx`>^WK}ICWCky~1Yqj)ou{8c)86T-*^&scx!!Wl$`+XiebE zo#8py>3N$<{y&a?5W*nNiL%pxI@~}i*zk|7909tHA=4Y-sUA21heciSU(6!xHT-64 zU%jlUs0<(tx4#j-Gu%(}1pV#8_4nJ)w8R(~n%(tR+9M$bEQBd?tporjj$s*}8(C{V z#PP&I<{Bqtz~AcD{=o>&wB;b%!LveH5m2yprdvTE;X(^9GaqrJ%h@-Kqz~YgsPOmmp+9t;yZRmA>}9<2`fj2o}@Pz!j3BEXuew3`A!kt zC7~Z7zZ-0!a(x#2$)Qj)@N?2#bu0(L;>5+&{(~WhM`l?=+y;(2zV1uc7irG=1#i`@ zU!-}y4fh|ay50Dqt@rR_&YdH(*?`42X`D~^1-w38vuxXApMZEeKPCTN$^EB>QhS92 zw6=-5nfM)gdtSxgwueCKn6E+JKM7dfzImr4b*m5Qsi@m<#p}^3Vv=@DQ3u04!bOM# z*8xdrbCYW7=W-Qcsz?@bx#$_2U~tTaf{Q$dWm9Mb0jU5NzAqPK9Q?AZPW(E%{c5{X z8fko~T2e>3vpcj#;}c91{(74{Ri;up8`Bd>UE3+wqu1FSO|4^j7D>&vQ|sTvDKPF0 z_C6KwQ+yKn&?I6*>Erz;zU_x%v`>d2kuslyt%|E!-=NW)B%#yMnB}YY7wcp?iybml zhDAmtY@4y@5a}X)vPtl)zE~wmZX6QutzAc&0V%VF>q%l0Q*%dj*i&KPfado@JM6lh z_ax0=m%FL`?Uo+6U~0e`}>5~BY#kW_R>P` zld^!OYruD-;7Lc7VR|x;Rcxo&)v?GPsPXN_QlFkB&6r%vEt(Qcl$7NsLS&v2BcM&@ zu)#8%DIZj&M9!tdtqVpvd1@O&No`YuYPc1+>DkCDtGc^W_lYcu=X3akvhGlK-ZeKN zSkTtzOE$&7o!pt1 z-3z(lQH8=e^SF*Yl=i-KB*bLf!cY`(;F|2MIATo-tW?!}+OQKLu%LfUFf2=ZTY)20 zQwZoUJ&;pi3X5XbQ)W98*nyJmDC{9ZW9h@s@E?*NX1O|BxwG{bG+!8{d4;JuW>vwC z2S3rrO3&oVdnVkcg9t?$28ADe7`1fp6l0vJx;K2Ep5y647e?fL0l0-i$G((mKdr&) z`GcD6{2rU4$PpcFk?(u!;TLo`!w2HDj8MyPTPrIR#`Yo{&P++RgfVUl_+#OzaV$i4 zFm$|8smvg>&A`iyz2CHa$9$HV$fUOGz${Tx$ni$VeYx4an4d`HBikrxTw|22bZ)g# zkX(m6DT|@`gGFkU2fH)hez;Agr^Fj}Cb)+EigWmo$(&YmO5J>VzF>4i{n+QL?#AbO z>4)D)Du1lC<4#5b2v&9dID(CPYovb{&Hgu%e>?e0Lm!sawCuP)ox>anKB8{-V%b13 zN1VpRlCnpc5vqh;G#pxDG*yhYYZE~|6gL08I@CP>U=ocvn^%14=P@Zecj2=|u6oi8b^2 z4T2#=i}i0>a}7mysuMMNM7C46=Dg3(t+Xa3VSU$f`IWZ0m`d4; z$^WkP;yqORw_h)QwSVPJpNNnxEYnEmy9GK=nvTGZLIDa;A|NVcPY?>mph4|nrZa=e z?T{!bYQPIcDd2n`gz}&5*C-PnXjJ6bsW^|S0>>oebkmG!b+QH(6;$7p9ZKkTNvb8tTMs%!3`x>|pz*`non^*slHQ`)(U zS@FZ1*`KdAQ^gP832vxxR4@{q8bx6G&k}QRI~Y&d8$)$^rijkkna#XeqW&*t!e6BR zK?tBa6Ou6*1~6F~97)7)U+@B;+L-%K;zZ!m4tNJ8@^A8DDX3Vqppg&;$PK@Dts1lTMh zO@m^4D3e_Mb#crmhW#iX7Wb*8y=Ff*i^s)?3m<=%6RqcgAH8OlL|?|j8@)b0X+3>> z{d+s`s~P(AbNMIDZ_j?;uJ3Ng?(MP_{SC}VPBQuejn%P*Nxpt-|Dd_XZzmpwiYF!& z6#b~Mvbs6*o~X@FJaPUriykJPe7w7ABqmNE8wp5*7%U)s6;%mQ#H*DuBQH3RK#mKl z!F(`)z)=555!|9xL7V_QGc$(JjGh+b9kB^b5AxE@GDlx4Q!Evp6#Zds;_`L(XD!Qp z#%>3DLeK{?-~ur8CFwPjXozC8*88S{owL2u_&M*N?2<@=InQ_#UHaj zyFG4(5i$vvO(DuPta7jaxcS$pcHwA8qc1uB`CW-WHAK~7qhZmHB4BCY(fp9-41m1x z(}tx&rK&DxvB*KMy1+`fytLvQRsbx)9Lz41$JJx$p#w4IuwVs+fwAboXVzqSR3tD0 z^$Ha%dp#5L7ujJfi<`EvZ!)Yoo`c*yMW{#gCuzd`e5$k+_QuVqw^1z>KW5fs9;HD% zr9Nkh@Ep*;x_W7Nr~ZR_v=QB`Z|iA5ljl`S<3*I`+nmFDFK$fRH!j-{&ZiG9SAU{6 z@1j?kerbNRX5`7yS2}0>NE0Tfr4$e7x@)u49!}wz0$es@*{F1^NENT4#WM49Grx#( zOH)jRCMt1C46Sv@#g^fHN2rlkBc-St*@vw}@tu>RXq_;^T$%&!#6?r$wn3$~&l&lH z6cG($_8P+smvf8VPY{7KFNmh!WQ`C$)O3EMJ=bk|QA;G(ufs7t2cG09HW3x!yBx7U zRAk`(f9vAk0@?rd@~=D;c>&kj8XKal7A31{@TipT1ZdcV#+K*FdIsvD+J|1>$ph^ zd3%RfZug}yD~zo>OP-ZVN;S{|GZlLvHODMQJ18ieu)xgE0^&cD;WNbB!=j1*Iab-x zDw1Ipm6yt?R=ufXq~@o{O^=E4kFt~uI@<{8#U^2%@0U>N>G~4lo{Q7v7xLP_zoV!Z z5|`3SqZRHRQsTx#R>HX9F5#lu9Q|r{`4`SB7Ww{CCtST)KAWB8D!IQ|Fa4E=MxJQ7 zTM@=EAa+%^UPawD@H{%Z$rUtXH+~4K!MiLs@xwHP1B5^|y_Oy@E=NAgGm}j@sh&_6 zG$;*rMs>8LEr+3TiHhza9b9nHbT+JdlaYfwPC1Kf=x^C~NU`z6=mw^>WP=$XRu~>z zmMtwE^R)2-T!)yL7zFeZqvk&S(sL7iGac){`(91DU!~4cUI!KOY}HY1GpR*P{wA%^ zogIH^n#?3U~v*mWU?{61~wAugFB3g;wQ$Qk_S3K+6Hd=hwF5dUYzogYR?iN zasXa%#klT}o{xcX%yY?<3iEk${e9yaibKta;*l*9iZ@&y`v;BU9H3y^1UzvJ+@4-V zO;T`1V|?Xg_oUA5@H?G`&HBc$s&XZ;O9w~6^J=}#wAxCsL}!Kf)Yaahi`{IF2TH|6 z`t`2Ezg`-2XsS%7UvYeuq;UQlI)8}kPeRE#MpEwZIZQ2{;+IFYx9y?bwUHVdkJS6^ z9KwFFgFLVhs86zz8YDz655tO3M$>vAogV10b#uz;gewFnP7v@-F9tpyZ-2!bUN`fN zZ6uylPL_?62W5lZ->X}8lW(=CRFRkMl|JH>Kub+BZ@#eY<|zC=t^A!_)HFYhqM2{y z^>2cyPCG?BkD?nNt>w6{TOI|YokfwfSYFO-+GJOaO398#?4{VakBh4l2Cg((oY@Fa z-5-!68eJ6Q>)0Ak@j3Asv&*{?GT_ok7!7KE+QPFj%v>UWNM~Y^@2$lFuVb85g(-Lj1BX@oy~kW3WDhQj ziZ53f$+%B=8%`c72lG6*)&lc=ukPjjuGL1CyZemQd*VAx_kOdCs>G98*i8oj?G(u! zCYW}eq)3a^4Oi&)=ZMt<;=7=}12OSEPYJ+OvX>pkSi}4nSe^8|u{fR69bEVtL@4@B zD5C}|kj*MDYNHWPQ3184a+aaST8XXem&D-Q5fYdNucj*g zvUsC`M_6X!)B+}GS`#Bpc*m{LZ4omBePzMBi97)*Pj$(HBk#j~2uXMq9B%g=q!CT< zSL_&GvyV~V|MI^$d&{u4+HGAp2?2r!4^oOdG&mF~uEE{iDNd1=;x5ID6?Z9CiWYbG z3KT0^3KS?%isYnk-?hK9_j=cL&UfaId660ZBqR6Gd)!Yd(cBaHa-#YhQoCu%M2;om z3Jb^R&)sJ4&sUETJ!>_c_T@&mtkdADv<8x1;b9>U+BpzV*aTZ`Y#NnYd(0WR_}|$&2AfUD0Yonk|e|L|7y}Nr)w=(n2Hy{r#xCr)1$dL z;|B(ZS@vT-e`@th2Y?3$=utJNn zOv^Y43tXnr$5NUyML^6t=;r!Hh-Qq7Lu8T$029dX8mkzeTmJJLkLbhw!BHZ+f+guv zcaJXM6&_WjK~Ney?}d8=4_Loyl7)9GY|K;6<8_CHhm>%QGht0v-)b{nWyfafCB=b( zu@81f)Hy;bqvdn=uZy2QuReDP<(lEQPzk?(8-%=XzDpAj{~wB^zc2(KE9DUOSpneO zE8im!tw$LSr(lqjf9Xp>52AH$*kPVnY%krORL!9wBJu}$h6Rwle2R001UH?Pmi8^#94SAJE>H&T+odnuHp0Y?z%xi z^2aVsX;2A)a~p1Jpa-+%C4*K)$>$2I*w4x-aTKR=uiqbaXSo@z26fyli5=g%ewo~! z4BDP_Mt<+lLY{FUMJF2XR;%9yYJM60iQX?duN;gTYe~WZR>VXIPRgmhOqzPC$JE&p zYZ)=gnbh!1GBnsKI136LO_QYrXR>0!lwq)i`{-y!>6FxXpx|%CWE|nw(LJ__nWrH| z1RU&rLsk8p#cxi|$g#rKgq;Lb@aE-;jusMSh!ZGwkK;Ef;9eCt+R*uT0|Gut~S;?DsGRe{N zCr>^HA@{vIR%lRfT@CzCvd1yGi=;U^Ud7hOz*E1gXQ zBO;j)9lXcbuNX|cr4y+*$L`k|NMFhQP`S9GJvKp8yO_I3msd%UM~J&~U{Ec@W6nBO zfbU@}Yxk-S<7iB>ce^T7SDezPt636FzW@Wj19&%2AA*aHrr5kza?@rV^33gV^g<-2;t>*vhtt^*&D2Zi)W6@~yF z_V;eWftYbR7PJs3TDsAEFj`oO!0QT9zQ|@eMfUfprVr$Ur;MfdAEg+ew>QQmut%&u zE#l^A?{n*|dAFE6qt^aSzO3k&-$|R`f+3G^6j8SLT*a|krLRNz)6SVQQb6mRsbFM^oa-aFBk$SP4*@O`-BC1^YH=ZO*k$#e&kbz6tl;E_c*fnZi4|P zl=Wl40kS(m(U>igU^+mJ%><=R4{Bfn6G{Z*%&%ZD{Dq>0=U52c(#*QUX+A5aZQKyS z;Qk9qb?2KAl0){Dw`iCP>HNZR7cE8uc9Neh{357BS17bUM-z$i(3gK!Y0NesyEim> zq%$-`X1loWYB>CTJm~Y8#E1TOyU6Xtww30pU&GjKULE64@0_W-@4vggLB90U_bC8s zfN2NMO8oi-A9slP;AZYy#q@{)7W~aFfjqurr;fa9x3}I^)lKpgXiaqOB=`mIzXH)>qXdO;= z68LvcY+Oe~G*wTyIEcTa0vd7f{^StdWI`nuws`y@$I42--CCuD)a8ZCTEJJO2XF8U zNJdJ@xU%&SU&vl7DQmPADyMb0e6KUluj>ptN_`gfIyotwy!L_f*VZ8(B=Q+Qj(^z+ zzkhmB*OK(AxnPQbTkfv;`x|HE+tKB+4kiQIrusIw{?x80#YWelYP)B(SXxYy0CWMt zC*Q^eWxi)ln1u*I5g$OQ^n?Rw#8^NCC4lo3nBFh%z%klP3lfQG*n4F_xM>Il5CeEGTbtm8@j2pcfKTZa*P(^vJF9-CW?WWBtX0nuFcj zF9Qn~W!(b=9mW*3&(BN)tZ(es1WI{w>>qw^-da3+rWE&Sw&nvzXh&So17RH!eaf{p zOzEJ?lK<(;P;To#Tz|6d3^{dvR}|HUm5B+p#)|q^P)VPa_mPy}ZQ;+}L$L}T%3OAe ziwBwO$}m5=OhuebGGHn;nxsJwB*8%yK&qKNMNgbIJAflONP6<2J>&>uYuYafVC!Rdf&jf|5<|L|}o$REcXI|L6MwB66dF@m77bCr}0a7jRQGVvS&S z_ClBHqF2`x9J8582;0$tckv~q21hvDl}6lln?W0ox%sIlY?YPMi~`j_~0xN6fid}p0eU&$3e zw3)l;^y61n%Er?J3%+IbcH zxj7q3bO=s{$zUXE;>wE6fb#*9fEG5&sNsdz{~Sk9EJPjv_QUl%r44caP@)dqiq5p+ zp^D=o0;%UDdky21m_l9FL%~0X@GUjv%H{WKJ~H6|nKc+OpH@1)&UXE(rDM`AH_tMe zSd{zakt#N2qx-CllnQO2Xj=a?&=R_t(d>)9Q(i(_L0^&1>x7ISZCbn_FBQ}-@ z_ppL~TxJASm}2i1@c=E-&DxLPxbg=d5hcS>%f=Z-CU!I?O$ z*;3k0Bj!6Di=!1Y_6x$7bQ%rVL|>%@RZ%4d8?nZr+9qmNk97U(`o%3LkiI;LQY;^{y~pdE!@#{Tc1^0<@_Svf6&K#F~9XjA8)X7sNet$gmaW11 zZHxJ`FKg=|!2C@;pP2du zi{iIj1d@Y~?Y~0=>a*M(>@-EH5j$cJ#K`49!9~Cqqs+V<$#g$3s9Pz$3!KqI5~;a; zSwl)e7;svcMX-Z9{&!j0RF1S47!WpWfK>2iaqfd~IxjCG_Z0~b`xIHROsMcYo(>!Q z%Pe=D!3;GR5)5({bMW<^ihfz8BMu%>*mpPC&@S1E}pQnBbVWuJb}#Q$~C$tRM7W0&*e(f!6= zZ4uXFySE!o%MtCLmYyEg?m`Ro^;XZwjV68WE=>aukOwd74xOKUx!GKPdmD6dbusB| zYJFq;>%BR$`;M!_@Vx6egFam&9Gm??FVoauEHHj}z^4D>n<2LkGcf-5vf;BHte^Xg(orQdX3m% z6w!UmU`27}M7-#tvMdE1@i^XG_w$CZ4b@CWU(Iiee2>Xe=lKs(xY>uYGaUP`3|{>3 z*Nu#eyEaOwX4K0z2*R6uTGyo7F#1nDpT8~i@*W4Ty2bR^DzAOaL?KFdsUMuo!@Ca+ zqi808w~A?FX%+&pu0mLKVFZ|Tp>R%6aCA=rUOXm%w#`8aejhX|DaQc$aX_cS;Hv4{hi<=dtPNv6v1@t&4x1A-v<|$Iy99 zza3=-a6vkv@JtsnSdZnmYcWciZ<+-v>CtckSY4lK#0kNpu?4qGO!j_xYGoWplOvvk&;-j}WY5z4L?w@!>#lxfF&qb4Wb42)qCn*MTP* z&@a_&f&jt+ve+b&eV5(z!I%?GHMa=e?WI%tqqm2id9=tjuBIl#Z_kVw)?n`#?H1n5 zWlk8qYmG=(V;UkHWasyPYa@%uR@WnvZhXQ^Ewk!oBzN%l#bf z@viZ6-1sPB>}J`QV~?(AX7$7&Ti)+W)_SVld4C!8%!SX$(q7RNtR(P{H#jU?e)u?B z&~NG9Ba=IB5%DCGnk3$0!{edS0gqpwki( z&HG@EyBL!M_#Jn}wZ&D2K7Ck66}nMqBg*cU6Z_6TdqNaqO;9@OVmfT}LyKG*_<sg;=#^Pz1XVVU7Nt@RLQ51kQQ z765>Uz4DGUu?P;{vpS)M+u=eh>0n;WwBFgogjm?Yz}`sn-aYyyRYG)pY+`&c20GO< za3W*eUdrp(epZU7uztsNmVxj2#F{sz$-V+u{&_Fb%JL4Vq zZ%0p)pV+d~+B#t4tKgCgO~Uzx6T(1XG^ivWCg{tt!)!iT5r&`@4)qEKiufqPlT1GY zF|o{NwH^be!iOwU#=z`wY9*g;5P(Z0l1xb@Rf%wZyFvCt4nl)9@Fwb$s~fH%JPjP| z9{(7!^{@@V$V;f3t`gRRK~9?9YV&KDO1$Qa_{^xm_(>{b5L;^Aq`u43q%Y^CSy|(? zVJC|-gE(*P%a$J*=GLh%HJ2VQi@oxO*atMv! zTwUie17rlI4a1`~`|P3$74BQk)OeOO znVWhmpQbWD5$S+`tu2)vT4=qDAq<5n(6C5jKdgp7Ynt)C8GDb%;F4Vt;!!r1GO98! zaN<7E_-5*%MaEj>a8)Ir=)IvF6VhMVn{LSP6HVWXLA2X^Qbo=1Um4lO$(k*PqM4Ut zqbaB3S)Le5FMD)gmw>|Z!JJg77Y{ReD1sAm7h^iPgWK=HODyrN`5qu5*jkJ%zh#d0 zMaNSS3;z7sC)p1hrH|jx*4`rao5AJ*$Dh*r6jT(31lv_f(Wr*5^YB`50H7j=JakE9 z*`s=3B2vnw5E(>)Mr)dfR4`8yjiwW$3+q6*)hVNdzH`I-m)y4e$&z(MIczH!?;p=R z;?W6roXhyw)FWczza}5Z{wnK5zt(OM`+>%^*>oEJ2(LJi6&Sad97mC3TsjGQD%Xn3V^<<%jQZFct(DGS8#w?+=AXSKuK^6u6S3dHEQ# zU>v2Q3u1=b1g2BTZc-tX;DW5zpIqyzm6IOXY8VCTg+Lv#1s-_jFznMjCO`Z{*-XW_ zP0jVI(n*0k!8D5dIe%(uOVi7d`@=;}v6I)?{W(X-{HNzrx2E>f9lqC-NTg5Qk;vI) z-Q8XH*{Yz>_3q-T|8}B&hx)|#qeriUP__K=c`!st@QXW!wT9w4)E~pr3+qL({Ud@d z?u}HLGFBi=;F*<1XRM+DFdQ_Y2!|2lHZUqgbO%qNJ!eoV0+H)+g_}HR%}g{TU{2OJ zX2dB;3fR1{8Il7pgls}AVha06lF8=wNhCjhEQ>Z>F)8}M1pP8zWS1?^Mth({0)3{p z5jz4cMUNNk3n@yqscF$we3&qAU>@=qiZBHI;K{ruZe5Vh;dRMr-hWuPF-;-GithoY z2=V4EW)_uu`Mc(py^=7Iu#m+HQ!0G6(ysq|8u2eLmw|4q95@2N5ie&N{MOL^dk8*C zCvzcz|Lcc9Tfrc!6{~+tbeREJ=17&brUfL;0^k@9EQ8=>x>KIgvi8sdK$7=J!}|Ft zV775zsQp#~3m!(h-^j-B`sLk|;eWPJ#;t{I;}YXTN>j-qyU=JgG`P9%y?;i3;{P%J zP5V)DQzbFc!K{G5oZzf>6C1zgQM$4cV@gphTL8aiCBNoE3TrdtE2gEYg>#)0bvY75 zDl-meZrt~T3RVt>#H$!sUn~2BPGWA)sA0UUlF6`v4I*ATbI^qzfgifi^AisjBZRZZ z54We6+JX{POp5_Rx1x|5&aui(0L_Uf$ueQ!G68K2bDA=~Gp0Z1yz1&zXyVx#KK4-Hh_ntbBTOpk~-j)zdpJz9hJJM85*BqVA zO(K{=c;Mfmo`oEp50?IS^}qkBSQ{Sj{~ixX@v##K!BOBs3!Z5**%KI<_#EFW!MG?i zuy7(a%-hr7FWDaw{BGwyCI%@$3J}dIq?kqrcgMoVzyKL&87G5BTA7|quzM#s4xV@f zzxP{8g&N4Ys3>emu6rB%!J1oFxaxQ-TYpH~sx1@mQzl8)J?8iSxw!X3`YEf`3%yDX zWp0h}rndA)9w}3%D}!;yH@w4~JS|<%yMu0#$hEuX>6`BSPNA2N^1BW$uiOIeyaH-p z`1vU_^%9;zffy9Iir!Pe}rck1@D5xHD@A9(E@Q3)=PdGhr|s zB;`R5T%Z6DCUFsF(nV-xftf;+$!UoQHJu*@n;Md{4EjLC@rG zY_jH~5LNo8VEtF7P#T2@M2&~m9@yippeUyR5PZmr*vsLC+B4qDk&!Pl)T9UyKm2F# z@U{#&h9*k43>}hJP){9=ZB(EL!K*Qb^wqZwpyTWK(HECQ63J?KkVoW-43A^wBx|`} zfyfDyLsD$^(dCGDSo0-3K+_!L>CepOCUY^*?`hCX30ySSO% z+>}h$kx8~av6wOCiG0f2Uk^Ddmtu{XRBG?J#Q8AEk;zq3NxwMF7VyDqu+d3&h{M-=q8l;5Kwz*{%!9OhIOv%St+u`D`q5YNy`x%hl9-nZ zTmqk@MEJ579XS&Wr~&KmWLHLU=I)H1ot9+AskIWjbANg5L!w-=Q1u+em|*T{>|-l< zmgZd{;&cukDe_2g^61fz+L+3{&O>daFKN;%kj&%W%)1|4;~9K9P1#7e`qaGj)pO+b zO1FFIhCx{G?kwKDLcw@YjQrO>q-}r2o&S0JJC`d&smpD-ja4-5p-92MD^|iWuNOf6R zmNk(z*aWAuutG4Y0^d7My6m*Tf*|z3K1RN>aQB+!Fzt~y zT$JUdz}~=HZO%C3pGXJ3H=B~7Ns*GcgRuyMi?F&%=SyJ=94LtqVsJLJQCet6*TIc_;`-3sodp@)3&2dZVd9yj@dk z`uc~y&1eX%cM`^Jzp6lc=ZOP*r>nR%8O`lG^5R2JqovK$7+btHTk(w_mRR@id9ak_ zILjNG-LM!R72)#`Ec*ubQ7}TJAU;{pZ%uUQu<$OLyrhIDsp(V{AW$u!IR5BhG;5WKo0E9Lb z!W@*CK#fQQPOxAiBp~rt^tfI`{SY)Xa50*c3~<05;BIL^WG1_T0onnC4W_C8H1tl^ zaR=KfgOiSl-@}ph%(cKi`p4*AbstvzTZJE&n5Cb)B)8d&|2kIL(ZiUKX2qCNT{7Sk zqL<*_EtE`{=B=9Z`WV=b*DeZPH?e(4`I3Y$2g@!iIoZ4Q*_PNId#+xW>h1K|?f9i< z0Cst`R)ufxMhiJ^77+#KYB5$3h~HWY4Yy|jUQBxiv9RNj$MM4co&r~a^kaVKghPQ| z0Js0k9V1=S-kT8Orv4H@xh;uPn06A717VD747Xp!|VoZlov#RWwv2^?u{;x_@ zqT4?>$Dhk@;5~`dB?~nEK#BP1TJLXmINA)*RHTV};l04ey`wGERdS3+3Xx~T&hXc? zy~k9=y5-@_-p-tpekE_H``Dl?uQK(MZeiuy^o!-Cw_OkJsJ|}N#l$SV(|xT!#V@Of zM}wYMw?z4mM1?;V%7|d&Rof=$Yi+7fouK<&u`}3-i1{ny#Np-$78kBBuf~D5gx1< z1Iy+LEPr#}7(bcyyh$L8`>lUZ?U_(W(NVRrCr!&HX5dPC)laqd@7Is4U90zBTX**@ z7UK5Q7rc@^hyfaEx*VW=C_=Q5KCD$rH_CAnwRj-$6zf@?g$y90`OQVWlT{>D!_dmG?YaReXB(x^1$2K zmfby0?bIl?td9WD}LWvz(o(H0BRU?J;^;x#`K8Pw#X&%~$ze^NGJcMIiKeINVbKDA&Naei?u}wV=#o-B zSGrBrFy}ILn;exsdnt~Ro>IL}tw8mYNtc1_D5aueC98<2lz5fI4W0kfu=S6HNZasG zdg!~M`jz`rZ<9a((7Z-VQ}zqK$KTHg>&_@i2_;R2dO!3@RY(i;rNGBXGjt`C$Zu_yP$bFi(5lF4AfaR=OvA{+`d|UD#8zsA zY`xXxA&|RPHHjXx*^V~Ld}^G-Sp)7$qxW=@0?>!NO$gm$eYmw=xG*R-771kJs{G8? z$ntDXzS=E-N$;Q%&L&6ulHMf#xsOC9~->6=Tt}#F~*@ zH;s+lwXf1Av!=BTpM8(?D^nz2xxXHy{2vIU{}C$x@r}PM1R(#Ij6jW8LA6|te`%M| zV(V!LF}l^sH)Y%pLw;nqA3Z{sqJ zLw5naH8`7c!>lIs-oW6{$7m#AOdM?5`!>~7u?^rcNN`V~8NQe}|3sdXECqw~cbB3> zSrQX#7NwPTtLAw=7G;_Gna(B_-Tg8TXX99nU|8Z0oX8(KF}vnIwJe*8_eB6CZHiB@ zCOombk;o*?Z+f9AWW7V8YD8dY6DmEuo=0@0B34#W2Ul_RY{@BDt2&@G zcjfuQLgZkv^ZSe!c!S+ESzYhATzX2+s)tf{B3}OaqMl*B04Sc3Nw?4OgqHb}75g>w*wBPmhsxu}4egIgcrf?)F+t75Dx*^89yW z{lQSWEsKQOw*6RB)o#KB(?isGbC|~rp3?KG(P)}#+JfkO0)$$PnbG*@YTjG!1#Zz6 zMC6i#FmTft7`>_gK-Z@7iqNY_ZF~rW6x&GKoqOzl8=P1bH=MAN)18P;3HVbA#8X%? z_mD=09K_0)3gkbvH)xM{tn_D1QPLHrijAMOI43M?ZZWOjbG8o9yJ)?9X6*dSr6mp} zFnR4uJ}GxJOZqcHmz!0U>I$0@TalKdKL2*4c(Y;NDr24RuyxBOb#pr2v7dj8b<(0= z5)ir-0^{U{;1$J^zY2h<#X2MokjKiAO`3I7t^^Ox4Qx2Sdj7hsuNbGznNwf+)ul_r zP%}+bZ4dTC%FxX@g1KH6{!=Z_NM&f}Ct3}$9SVO@EE#%M_MiyPrZ1eRf!j#vlFKLF z!bp8OzXHMN!iVu`Op3NzZc7n!7`~;Xi}q?&q28kpWyW=kL)|!6+;9b}*qDbh^-2FR z6Zr4;`1eNZs+WnW)M7T6_W z_h&GCYR#2@U`O>-;9)PLTj;!5EKuscVZE`j5&vT5nVI9)v88&`2hKaKxlafPqx6a^ zmZ+it|lYh}FZYUVHs1?KJl@74M z$^1UKpa)2g1*&q+?UZ%lOJL-0PBv|CJ-qNWTDAOF7ytX!+GtOE?1e}uf#RVuS@Svp8fnTplV`*j|Nvw-9M9JSD~}xKVev-DiJ<8sEc)GxCe40 ziei#PiY4LTwudRqE4<+E4nmENwnrf7O(K`mL-iWHvsnXOEj!VnmO1SUb8Swa#a1%S(g(6GY4 zfP%d>a2bg4+28WOY(w}h*5Mx3-AR?~GMRDJOh?^ZzdW1ro|Aet_5u_HGBj8li2y~D96y|%5UPRZzv zt{O;)u#3pPlJ_)q8Apip?r|&stX6dwUt^HK_iEn5M?8~syh)QhA82@lq3{`?;d+lE zoLO3nLeN&weiWM&Kyy)WUAeujJLy>(Ps7_@nBlO^FWi*TZ+yT=)fnkq#yFo9p4eu{ zr+*L2u6)U?a>u+-ltD8~TyCN%1FYd9c`b?0TILhH#~NxuZS+yaID}D^Sh_<$8r~9O z4EMEKm&LfYJAxZ6e4iBb$@{ZHiIe@D-s zCx2te@-L-e9MUrT@!y0-P(M~OaRcD2m8+P6rAd7zRX;+qP0(668Uq_B8B9W`z<;Sq zC<#r2*i5;D=|`Xtsx$xSl=?5R7->#S9~6`A>dxVYtR!#JJ_=B@zp`d~PS^fA?fP4K zLa`gW6XGlE$({i<_IGK^;l=A{<8XWG1|w>J>l4GTVs+*zvqvc}a2v+`+_bI*ScO*4 z#DczVbh)m%PouWijz#JYpPw1r-T!rrd=zlIF=>PVdv;#laP9yABoH*B{u2PyQRxYe z8E!zWs!u#3l|W9Cm}zvKmfpob#m<6L1C!3EP2HMWWuAMe@v7d60cvE>0@|HxzU2M-LGMtX;P;jP z`*vk{I<~%!3q;;w0$^yZv}-5=W9mQ7TK~3Cmc5yOOE6_g)4n>2&?pJF6yRKO>Axps zHnah?x5GH%XH}_eYU=U;sscv*6YrpGc(~( z!Xf4H@9WLyrrI~=kG_!KtcWa}5EQ9}@J<5{lIJ>b+*NbrD?PpGr$d*q}K4{CNJIwzvd#nYZTB6L}%*W--%8 zQLpCO4-XWVHOxfwCcM>|XIMQv zm0B3l_3~?fJo6`VYCW;*fVP0I8;_fx-@F%%iT&bUb7Ja(wNm-^(WNT9^e%=&Ct~E# zpqr-YBFFpF+g;8t#5waF{8w35S$PKoyZw)r90LBIv+q9`f;D8>8`cC9wcK~a`Aw|H zfHW?oxqf`Sj3Ws|i(=j6hAq29vSh*vq4kcsoPD26-fYv>HV1f?Dci`)C|N~sLWDy< zk23JE-@G?CyTUhqIqdXtce~R(-pQ=DWXREx<>QB+e=zwfUcfjPK`C{dm zqiz0h-PR42sH!j3g;3XB_a$4m($nmQuv)yHX|(a@x0!ioH`gzYFWUkoo_PHnWQsox zhDE&fRVA1iV76#`gmM?ZuQRdhs7J_GsKC3eB2>4bRHfqceQ^dr#rI82WW$_iC5#`J zn`h)D9M_*`LLMAC1PR~4z+%S1*Z?|)NgBE$Xh8iSjbI&4K&Z{VZ5w0hKK1H}EY%_* zdNtfFLQ)s*T{8}Kez7yfEU$NZ>Amk61RRATo8CqGZ#bQ=?0S_p*i-o0Rh!pdp56NT z+fTpu-1T{V*On+coO2g+jDIJ7`~2#~^J#4xQuB|e{WrB~kk|QNHXW*g_J?UB?z_cIHjXA+)w)f`C;;i zc921MnOA4jGilh8wy!}<@fkdvg$^ApSbDz_VId0+2L$7z<5PYBKeWoR4mTjxQXj=9w?Pu3nGU-H)JUv>ofQny@) zKKVSpR-I+3JOClt{U%fjQT@N8ZvTN0`8z&A3e@HUE8p*A8^p)346j!gG4GHV=o6!- z;svXclHl?Ju@{S}!@X$3)=_fk5I_%v8G{Iy4S*tGSLqk}c$&RVLYuOHHkOS)mXIh}W36Z7@heLIKV3tS%0`o6lRM4g9`ao2U(DfAkN z49a{?ee(!;dhBKqe)y}Mban~lzQJISvYoycSy)K?n_L`_n}z&dnr&GmGl&spBN-++ z7TqKLGQ^wcTwI0!jZ6i4=s*-1%jQfwFEMr*CRrf4Hq`XW+&@ z@XIFh=p+w(>R5T{RIHZ2DB1HHq7Yi)oTCbWR%>A>)`X zLoo_nb0_d3*5Pe3)Bg2dp=z#?T3v$jLLI6nEiz@FwtXX=9jnT&DJxQml1@NQ)amZr zGEPYw5ML$+b$V=WKfr3i0>~L_XNBPoimq^Q z@7HJWI{ zACvbmgqZiV^fl-{r=mbpno#p{`%mrN-n#G&VzTDy4kPAH7yXC7mX5`ikTj^CPb==H zv3wYv*JzqS7B)2}DYAxHDDX-USps(sS~bh<}bZK?>2- z5N3kUpuqvEaDECn1W5BPg#y4#%cJ3G?=gUu>5>3TAF>F+FYt>F7)_ZQZylpOPl`<7 zDi;80e6-S(!uB_w)eU{U;HsEe>@re88Y4>flsqWA_&oe`t_W#@qRYn}EpZiA?;pvp zgtO79{Py-YVdiwu;h!yxF3f?s7vwZ`jWr6{VP$Dz*$Nn2TWMxNb)FUe`=+^ZF zfgiKeh2hJ;HhF#$X&s93?q{L*$?j!KbLJd;dx2S3GLJT5CT>zD5HsKN`IQ2hX0&x) z`j2R*6GL^$jR!JVh+O(R+bs2D_0bK3@-1ZkCDQ-Lu$%(8DkPog`@}_p-^fNXS=|qS zPWu^W1VTYekaZD_0Rx=@i#i@9ZI}p@?9n;0nr3u`Prc^LoIg4pvWyXX(^H@Mh)_`H zQ>(}(+e@NRd*n~yZk_RbN)x^Lm$kc0^qku<3Bno0#`%L9(jS35H@Hu+^{O=Vyp?~| zi1ns35NSuYIoY_6m*Vpd2^7Q23KL1$tW{*s{j8)GA2PT9TVvqAzVQFwfBcQ1)^kC% z&PC7-t(|W`?xMGN!2Rf8{s1eEd$mzNzuhn3BUndZe|@KRg?NL=uO?*qK5QOcKVxD- zhChf!R%ji0<*j7K4*iLF5?S<=Oo|Q^E-&4{=v~x>G1(_O&Qct!o&`*rY&1 zNKa_JdiI){9UZUKsf-${16@jH3UMM#WdGM7$ToTHPsmTiu>x)uRGq2wsM+LqwA$>TUitaFd+~_3Q(0=v` z8ONU3@q542&)u-m(BLpji&?rKX~L>m){>1C9vkuf6In&_M$OTkA)fpg@vCDdLY}E! zC+&-e8k2KJIgQt6m#&)2l`llCF4}&WPk3x2c-D@)r^~-t4e1_!sow4N4*MZP*F;oQ zNo$cwU1T`@XU*=P$)J-5)1&KL*;d}l~o?M01=jrdoM6} zi&evmNu)Jn?FaF&crP~MRj(}^ZwY^yOG<=Ye0X{Vptv z={A{^sySc^wAA!$d%f<%?NQ{Dh7Oi$GlM3eIJ^a|z3Y5{Xk2W33^0Nb(`YY)%ChcZ zJ*AW2zBA-8)oP=IQyyZ2waCrDM%SWTd5VPh^5aUZO0mX~0AIKDSC!M^ces;}cyUCu zwViTWnwoz#Yg04(I<@d2kHk>Tjnn+PDcf{sVc+}X2FDqv{jI(PKi?TCnO?V-mNan= zQwN>gG~U`H>((A!pT;^9rx^3@%U!kEY&&H%617<|^emLe*Zzl1{eKO?(;ZGEOi`Ia zKHDzp$mtmXsEKK%_`@S@8@eVEHEnQsaCpy{#nu4u87poWzzZOmu1tc4-6Ko^AMb+# zUTj-N;ua3v@AH5>CkdG{ld&nF17A>N1mbuR?v#6q7u_GG%;Wzm;6l|1Z>^of2_;^w z8L|t`^P9cbt@{!#?p1AOXqN!Wn&LWevGyBsChOi=dW&4;di~SJjOj-~;Rzi{SBUSY z4nG;sOZ2CjQqM!)%IeIvhF%W+Si4ADg_XLvqKBO2V1U0wOO;*VQ2ZbwI9w8~wjOaPNY~ARIbXuA0Dj&hA{r`4Y%^z(1-`@XVh#biEdwmE^ zs)=p-H-V#9~-fcpA&%m!f zpB_&M`Q^g4TOY z+5Btg{tNg~cjm=w178E@oSkaR&#M-SaEtYm&?w?+-#q{k5r2C@61a~Ui|Uu6tEB&n z>!F_nnF#y@j4lHhzncA5-d@6o>P#<&9c-8jRfl`UPv|*+Bv-5f6 zr4r}Rf?Xc0o3ya@C(>h_YtC}gGBWU&ibuP@&X)9o^Mhd|&E2C;Br>p{pda_^c;y#z zrY8Q*mVdd0sthh9A96adABX6G^jy{HNGH?UnX(eK5>fDX97>L}%0M{z2MiFCI_XjG~BQD`M6Lpw}~x7Os5eDs7|EWe9S>s6m62 zmEIcE<0O4a3i&D>wlDkww`i8r`=yK~;=yq6W`GY&Q3JGa@+;mnZ_hC@f+IcR%H4ra z+*WJMME_&bpoy|DYWn->$$hU^2ahR8Rc9KEKIu1D%^nFP?7R=_a7At|Jr$Y`!_*8L zq{tAlYI*sj-!f1{aJ)8Vp(9Fc{k6~k=k)%@5IVzO;~}m*yJ2zEo-wG0XD%?9J20Kz zm5a3joHTE8encm6XS1&9!@D!AwyWX_ZG}#|Rj(FvGBWAoU9X zEJm-_Lqk&v`GA!SfLk!ZAb{BrKX4`xNEA#2F{a%FKF=(D?Ri&3WJ1Tu>i^cV9wzd{ zD$)VXyf?92>nVd4Ur5DcMy1GODIPX$V$amJ*G*Lh0v{aX566QTcwFb-k{(U3+*s&4 zHkSp{eogt5QZfDDPN1S~x{|Y+rl_>r)2$nMbNiv}#^9p{gAFX8!pYie zoo7Gm?7h#uzwWR5{mS?K%y{NI=R4;Zb9jhu6{U3h;^`UV_H!Dprq@5Q?d!a83$GS` z={Y7+##TA}7IW*Al6{NYZ?AU8+*EkuqBi1&T9i`h5sWT7}&H`m;_ zF}<{h&6DHiuRcC~XPIsv%a@iR7WaC6^NYCS^tg2OR|aq4>g-eDwxDIJ%&!|gWn7GA zW^CF9sY?K~i1?%ofIV850UtO-fYk#c@!Opsja7FLVY)*d4+cT-RMn7EvOatT@%!-GNLq z)AiIj)zSNc$~$WPA&YM9eK#2?zKQTPJip#v5~Uy-TL4EnzTd2SuEr3lGnjN$6G@XL z)fdGX&7_EHh=diZ47m7fG2+Xe=2mR%D~!|XOrWY~lP#{;`f$#0%x(Qm?O5@Gf>1Ur z^V6qJdviFHjl|^$sgf9L!y$F9QV)B3m4dNUJ6FL{Fi63A8=_7JsO2C*<0P}QGd%4> z2>@lFL4>>-eKq0s6jL|*62|e#2y;Y|A`{eSL{-XGiyn*CFGe?qlVD4-<6_Xx5#RVA z5+vs_O)WR`V&hqplBf}h&6kq>B`6wqb9| zldR{aV2=E)$yym#-YtK*@%ib6+mD6$nocK+pOKHW-HfV*vYol9s;LmyTsXe8X3$aj zMJX8kPmi@f5u)>bjJur~z!LV%nRKP$3(>aSOIxjI^5$W$DHf%q6H}y)^0WipU=2fb z99EFAsJV;u$yr8sd-lska#C;JZFQpvwD_?lR6Ir0_NyWd$@JWw**pT$sE%&FVUX>7 zV4<_((4f$_8y2`Y{LmwXDS6PU$vtK9Av?#@MZk+fPM)*e^`0G~Lwa5zx89dJs|hm` zaN0EN%$dCl%KKprL`N343vv-Iz4P*(>-Q7qeOBx8FI2v9_O|htsbQS-SX<6f75Xc| zTx>%G>meIY*631rSOgQ457}o5XR~i3%z7hcbqvJma2W_h%*Z|seeyFpVM7Uh26`U! zNsgs+%;)Pj_@5by6^VLf2{&{_OUZ-+hL3Ggv%hJ3Q{&2#=)$GHs#&D-H;hRCZ^Y>u-6CqkH3;gYR_cwP% z9N~vV2_7Ofae8*LN^@pQd4|JlR+IwF1P0=(<(O=YXBn;Q8dW?QSSLhrU-n+LCsGJm z4+=vB%MGlXy{Tjy8(y{YCF1=Qg*RP@*{Z(1+GI%Xc~p6n&3G=)B|6hiU@I*^=X; zNh(p$_=zyNT)~&T-0N$O6%icSPT6CFwCC|bwj%Y7+DmG470iMR*UZ-*?i&dQa5Fp( zfl$C@#Jjq?J>u3obgbK6ZeM;Nr$=FH5j0jlv0@@00n6s+WirU=538hBTsl^XFgcIq z_9z~p(T@8`nK)1W1QrwT+XP&HKhE_JWmF z*i3yMpK$v;W#R1h&K=pV^VAZt)U2nSEo@haSJPjBUx1giSAYGTYWG(j3gFY!-4hsR zuW*b%Qv3k`HX$@qK+a$j_%S;COBe>`hwRbGe1?bw014!tc1qkE0&Ifu=wMFHh;X#^ zG!(60NiwLLfqpUiz9nZTymnwQz70QWIDRC4E7JjOxv(5(NEMt0ZJsO$Vp0)kS-=Ti z4OiuRG6160shs3Y|5{??Y-c3o*laph;x+mB;?&)zN+_N;lBXj;tAotn;*Ml&^L zS&rh6gu&@jW`Ql`7ni~>ugyNtxGSI^DXzn`EGGXX|8Xsr2I0W=hFL&gIO<+ipBa;6{L z`k0km7P|+MtXo$z5zt~0!6^A@ugSg-J-^B<1?VvFN%Dt7i$~dyH>54--d(#a#PHz} z#qLt%u~5~}`1geuZ|WeTUD90-YBO^_^Arp(R5QQgp3V^VnaWwuHLeT4S9_!KLmZimme+Z2MH+zN|Mn+XUmqrdp8_HiQ z6J}6~1z1#=1_U%XK(^u!q6uL~+*k!k*#wvOw~QI^7(QjX+E%r;=UQ;bl*n8^F{)}M zdndSI@*v$Z=$STmE>uiWosHy_FP4nPf8-h`lH)aVL5i)u>4xK6?JT=j?)d`)8kLt8 z!lxfpUtRD%Ih^lu$xx`NwNh95UfUQbS*GOYj#KipbUfL;aC4n^Aq6_#mEsz(DZQoc z&$Hp!vKv9={=)h_RfN}Cko9|xQo$a78$9(8ll8pdr_W0_2*?z3?2@pQ{=^epVJMw7 zv-|605Fa$qek^-th?geCD9|pMxgd&{t(yIsJ$1B&um}T-p$e30f54JnM$X>OJnSP7 zSq{%Pcmc1c(-5!q596WX09*^tN;QNJEGZ}$4FGLq8QcRd4O}-B9s5FV``Fxy_o2{b z38BgzC%%bVi>&sm-+1?=L0@cHNmVg|3$U@WWuc;ZwPf3D*Nz>blSVt5fyxvD`L}>OiAx>lcFLgHT z8T0RavJgox>v+5DrT5|D%lGkLkH*_q#k_R0xjR-$6b)DN3tiN5cO8@pjX&`_KIwAi zPtc0>LoVmA%;0jcK3SPs$PG9gxlKYAaXGxNuYQD)f*g&ekOZQ6=D?LrPpNOjj)gX_ zEF(OetU~6#awWks)KlACEDfoy@5^B*sjo%_{i`kCbQ$xNh4;p zHzzkU#3J10130{Cfy|O>aEd{o52vRDF1$>c$3{mT(~i#&ce#hJ983*yk(dGVXco{p zWqRN~@da=8Mm=*xxo|sQN>3Q{D@qE;)(LbHGgEmrODPssA^3E3M(SH0l5w8>#4t=F zL?6nN^2M$%O+QF7mP1uQjQ2j#m~#agG{|z+ltoWq*1q#3-#hdC22(C+CMPzWQ12xO zVI>1vdy*5KxvbG75MUfN@!q{?gQw3_rs)j@kixi87F9J^S>618m5RV(|0|IX%C4Dp zPbUoX%+|xCmgVSN!0{UT#Y0ypYvc6KysMtqjEyfJN$>Nihgi`!kgdLdU2>NCav(ss zfjzTZ$3stgS->~YG%QAgt4TP<^`wx))l4My;y!!&&^9WwN>%(i`;pF@rpnuIpL^$t z&d$tNa1K2S6}(>MVRn7A!oCQaYZYnteoY0xe2%c z`)zBe4BsqW8*@*vGDsG_#z=ETASi}&-Ir1-lITx-0gLv6h+oSJ_M8;gN(gSh8cmPL zEVn|}2Dq?W7g`nuo95{-WZfM7Jr?#Rp)a^n#{P~yjk4?)K~)Og_qaX(>Hdosx!uh6 zu+Ai~K8+84=8xXifwZy|Wz-dyJNy8Uc?4ZlWSWuVF3AuR<@*x(G>kwhhA9T56;5~_ zQXn3>HWRk?IXIugEuAU!(rF1Zfg;rKmQEjrx9`1as@UsVF`5AZ!+u7#>Ve4XHwp8p zmSrY7^#|tVmNFY-6|ZGewy8J~LWt^H>9-nT<&x@=1`Q1v_7Ynrhw?!oX45vR&xzrL3 zLD6DM1B()S;F0|zApTxAjLt>3Dq}*pKQ6@tdk+R{0AX)Zg2DOxmN7BQJM0nn9mzsS z0f`6*GcfV69ijCBSJuF1SQ0`F7OUW=h$Pv_QPC#ZtoJA+e=8cq{0w@<0q5>DkH^dG zkJ&ajFT3=LWAikBN2S92*+Y64c6PHmrw5lG27-y4-W1Qnaa8?n)5`0~{==6ItYgU=5H#q9Gd%bGin{-Vv2=~eSA>B9UM0h~b&Kc+eRxbgF8t`q`2DJg zQ$L~sp7iOl0J#lqIkU+=D_LGO3cYV^D@_b}+O!5EM*UgCcJO_6V80 znSr4+2q=(1f&@ZHtZ~-5BwRg=)-<5VXTj-Dh8Cz0!eo{p23eUUF#BsYGE$c&Km5cQ zsj|pDTtd|{_r<-5mIZ77uMbpK1XR6)9sCb2f8Se8P-PI+?Ul~6!g_qW^7g(9@2xvN zs&zt1D`PF6i~EI9L=nE`u&~>cmn}Z2o36RpTYv1rySR9{qZfh1+t^)OiJR7T@G?Kf zo2PZZeBpC{&inP>>bgH;C~Zkig4o*zot6~;xepykm?TQyKOF9S2s-FL83l2}_K|%Q zNKN@nd-_Zn8gM9zMw>9wgQ7&CX;CzA04N_1`64$=RX`4KCP%9nL=$A9X?e|!%MBxA zK8vWD-mF?-F?z`K&C)c#EYo;qCp(b7aa>QQf6<2?w!NPDNbvFLBV?0I2iOLOb{ zArY+k{I}++x{tTc53GWA%$jRr?`&Re9c=yn%k=r=Z8wuUzQ>I9w{QVVZqJ1Idn4h53a`MZN8c%0JaQBe!z?tOtU=+dZy~6M~7(hx60zk9n3ijd1-%HX!(0hzM_70ph z^Mu!j(pT+BhB(Z~-F+2Pmq5_p3P(|c>9-!SgpDr=JBv|}HrmVFT^NrdHs3BAusPI} z{UQ^I9pv=p7h%uw)X~tGd>7~H<-idUL-IDIl;!P`Rt)_>6D00>`tVc!J;_z_33s!~2N zhOp>y`kaX`$c@JQ@sq^q(E5>exdB?t@HC>A#<>?I5(FV7py4!g<`6YJKv9oO&Vbh(b>@j4Y|kMD-h0#0x7E1F1B@>1`boRF-(_2| z$rVyUJ9ek6Af>=*e? zlaWI#6Q^gUy%89!@>D*;*R?PiH2PPP`b%e=VY(n;bx2?#Ewmdvx5p7xtN^@(6hfh2 zg272bi!qdnok83Rs>;|)hPn<5C7)JAX^{1kq5vpCAc8=21D8cn0XD%XDHy5b$Nag+ zqBX+_dMEBmsi}T-x5u}>mAz>B85n3ZT5hN&)QrU0x2?fUz6_ex^;?YrT zpE!UN1opI?<-2lCO*qCf2X#pm4pZ`H`9jL+1yRfq)0%YOFEQ~O1h7^hUGMe8r2Qz- zJ%Q_PZKpNGU|RC?Z`cp=j*n93Ls(rVX3pG_95h#(m*%SgHC7+e>7_44@NdOEVzR8% zKz5L5H`M4&2m}ai-CtZcFpvvCAxJ7JvU~QzR3I9-0GS>w36Jz9O&>0}5EQBrjuoaC2$xJx z?RZZS@IV2p7B$L;w7oCdGWOQ?FnLRmp?Ag1Vz2aj8?*Ap&3UU8x2QHXsv9e6FQli4K18eM4^QuZ&y&BXt}@yo3J01x z5L4{YCqgu}o+m>w(`1^@{2 zlMRuqF&hDn@22jn^u*4zsh={h^^mF1u})&2}81Xq?fP|o<&Ge~L>sh)kZ z>|yq%0!8TkeW3CjB$$b!PbTinF~0b9p07Y^JCjGljzfMapEOxvec#- zTgqXMkJp#7?j62+dAO5+Fi8Jsva|liw}}M2Hp&5I980%Wg~XFn{T8S?X&U5|B90|+ z#MA7rV!P)vO8y7{TFog^?IHjG>@Y6n>HZ+;iMkp4Sy+$`hK?`;lZ0{iV)}3tae{qO z2t+9vdfOTS*aosYTB`tgNdcACYowb!G7NxqsDXsygph*v>m{Wp4e^W+U2k{-5JA_N zW$=Jhnd<#*8~qs$&;}C&w;+=Xh4q?b8;4%gGYb#mLiLG?sWPXdjgD5AAL-Yq!k*R+ zU1sbO?0D#Sxt}FqJ@VBQ=7VWfj$`q6uiqcLSARd69jfwE{M0qJ_$nRoXuOT)pz7kR zP68az-|U+!dE<%?oF+h`jKPintAy2SLc++WUQv2LIn+qK365WV zfgvgOG!Fc)*30lM?S`Z+4htp>g4-!$`6m02smubm&ogN++T`?}mGs6u<9%@TDt<+0 z>FKRk78=3DHlOJdToEc5US|f(XL9?)uToy=g63H~miwHBm{$QQFgVY!iBMn^#(1-T z7MgsgLBQwwhYNGs7k33=!Ugo@C=wbjx!|{`U-%RTpDA%(nkEEF4%J7RLYi2NVgu8I z2^4gI`ZkJ;%TuV!pyNV9-y}HfZbAfWz_K_2S{NKdd6y2ssx4S!|B{Mf@&Q>)o~Eg{ z>$Pv~@L()?DfU^ZzNv!>llD#&>e5Z$r_GUmH8XRyb@uTy&qDw#R|xBwhHSdYlVr|| z=GGN*pZWbn_3W8g_&v0ZN_XBlKQQO%+i{D0Rdzr9llQs9r>TOjRjJcD{Pid2-4_?- zk1x_c`TfW{sLcA-yg(^`UWWQ!+`k-$R{Gl<;!lJYY#NZF>+rERPm74Q?SUXzgCJFz z4fe@UywG)>hvHbcNL(}-AdH-U_YdMGih(3pQ;`HPK>?Ujq-v9{fOrR**ChhXX5uO9 z$rPatwbYlJ_qEjovN_fyqxRH4 z#*!E85fWMLO%+_u<;)aVs8NyJ@qWgf1E4~lAw$$at$8w6@pk38huFpDmD$gV_Og+xYU7RslpE=>n3Rs>7K|RX!6+Vh2~5on6IWtBCizT< zg2O!9Br=ge@7^9zB3MbuQ>H;~*(=FnoHoA@$!p-`3;)_CF zG3)uxAKnU;c=ZsEd@gXi~oppUWaWC2;s!v>~AUHkgnh}bY z1VGRu76+d|A0e8Z9O$fcPU2j$Ut}~$We`8l+>H>YXiUwJYO9`mJpQzFFc9v;e0+x- zXZGFb+av1=OQSTk%3StXa0t1I^Ia|qTzv#*7&p|Jg_@=`A|@u?)wF!Wir2`<#MVT9 z&_PVn<3piG_QB8E!Y$*Xx~%gmw{K_NKhA4eKAxu5b!^-#{kqS5n+>0}P0?0YaLldD z8;*b+=V+L%tCJW*uumXGVZ1lvBN(B8o`GI#pxnGKDh`a@DG{ZU))U*hj4?*n4F@N` z2Pt!_da~pYQt9)rg)T~I0#8zfZnhN8xgRudjyMT!ebnWP6G+p)j%h`2uU|__Gkj)) zJ6lc9l{7Gz8+8)ZwXGPBft3Ufz?PVUhxiw_n$EvVvN$RFy)^k{Z_q#VEpPKe%C@{4r1T5 z-SpK4yt1Z)jt68AiTZ~;NuQOWET@!81zG3@G!M3g3W>>+QXh;E_ zDDosl_?kTm@wDvO&C-@zr&A_!UjU1vraijk6kIX1)`QynwS={b8pZy`S1a=|`wTc% zWIQa-bR9qN0ZMLbgA3r{5y%mvwIIJm7-kQTIubE%jka4NQ)OtnFWFj^k#Xi@)m)SG zCUB|2B=AVhV%0lOYo(^C+v3MVpWUOzpI^4-r~0*R-6vxOPBA`4AMv84xm_LtN(yNy zujY&yJh=&wpa={Z7l3qF=9!{yRKB}W2dV2MY+dwgaR zcNDBV@;srxH_uKW3D_HN3yj?G#3`eY6!sHxax7%7&Ld8J%t>vF<2`pK-%n&P|L|d7 zOSf@MQbdLP1_Ya7yPlT2AM@j68X%qc#XvS+`)^#5_~&u_6(ydSdn;E1J#x+Xau{h< zwj-54mu2q1;oiF!x|`(vvAaX-x4`z3v&ZK$3AHnKcIMAsbVolrzx3i_^W9CppMiUC zHWYJRxnjjPOPcxH2Fqbpc_qJ`b27BpCbH(mS2LpCA(EMkKlhAkqk)W2!g? zu}8O}%jN@(IMc4#ajz-*2iYbz-qo~}i`tBKk&o`0dx2tC^wiee2(2-^nk~wZMw^D! zZ{5?_5`I!+>Y5*zG8B(@ye`^{1vnKfWzy3VsOyFH4a31=)M{4!{`KKa_r##PxR(Afc1%(N6W2a2)#|EU zAAUdivrV-#zK^cWh+ZYF2lr{}G9QbViW+2|Oh3~F2HNB(cKC$!dj69&b?cH*ok-*4 zi`IrYLa(9st?XmbbyF7h8q2I*sK#ou;~VuF#aADOGHzuAO$K-!&sw>>FJ8C~Raci% zkVx?GQ8)gg&$9@?LBxH_Qowc|t|9nOt~v$$EMU83Q6Bo-)Kb)-5B>61LL64lmgkDf zA*C+X*7en09<}NT6M~P38om*}866>TrX*0}1|7TGLSx_9Y~fG(BZIBDMR^Qd5eVf6 za+s?V=po5la6Q(c#CKrvmVb-fp9u8;fW<@v*#Q740#P3IFU`AukM95f`v2k|_%Fjb BKFR<9 literal 0 HcmV?d00001 diff --git a/assets/audio/shoot.mp3 b/assets/audio/shoot.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..388cbe249e8b7a1a1a73fed1d56f65e780e44e47 GIT binary patch literal 4653 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 Q0RF$}?*FIS|62?E2O6 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 literal 0 HcmV?d00001 diff --git a/assets/images/monster.png b/assets/images/monster.png new file mode 100644 index 0000000000000000000000000000000000000000..3ebbaf82005bfc2079e50de21d05c1caf459d7dc GIT binary patch literal 12811 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 d9KwGP{XfAAspelKr0DUSW!_#MUX+U;Eaxd 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 literal 0 HcmV?d00001 diff --git a/assets/images/platform-brown.png b/assets/images/platform-brown.png new file mode 100644 index 0000000000000000000000000000000000000000..9a06df1a1ec98751004784bcd950c494dddb6602 GIT binary patch literal 9558 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 aU;3@z``UY+vVGon&j;^*_^yxt@qYkz%5viX literal 0 HcmV?d00001 diff --git a/assets/images/platform-green.png b/assets/images/platform-green.png new file mode 100644 index 0000000000000000000000000000000000000000..505440161be6f14efec2184bee5d9b3ef40c09fd GIT binary patch literal 13144 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 b*Be9S9X@x|zw!j%H)-6(V>gbTbLYPS>PJf` literal 0 HcmV?d00001 diff --git a/assets/images/platform-white.png b/assets/images/platform-white.png new file mode 100644 index 0000000000000000000000000000000000000000..3e9cf22f588ba231421f694a692c6edfd3666805 GIT binary patch literal 4744 zcmV;35_j#1P)4Tx0C)j~RL^S@K@|QrZmG~B2wH0nvUrdpNm;9CMbtL^5n^i$+aIn^?(HA4aZWV5ov6ELTdbo0FI&wK{O>*+w4vx20?>!`FrQsdJlnHR>OPy zcd~b_n$otK2Za4V;76L-DzNVtaSB-y0*E}{p()372;bw_^6ZZ}PI-92wGS&j#91PI zKs7DSe@(bk%_Y-7gGe}(^>I=@oY#w#*Bu9GZf3^F5WP>3rn}7Ut74&?PWBFvy`A)a zPP5)V!Xd&78LdA?xQ(9mjMYElVd13a#D+Z_7&Y|xU=_C-srWU*6kiZcC!$nw*)9$7 zn6CX+@=AhmkT}X@VSsa5NKe;HZuq)~1$`#h6R+ZTR#D-3j}vF!)ZOnz+5)dI4jl{{ z44Mr{P!L4~VVJN`K!!XTF*LGrKO?IK8z<8w`3e3jI8lUGNUta*C8 zn(P`s>{pjD=7Kek#B;Fw@hxAK%$F&Q6vg9J^Xf~4by_hu-=A!MJ3Znq&n~srbFGPs zH&&aMXZ>nO`|hf|ljc?VPhR!${AbO?W8x_>CU%PFA&Hm8F7cAsOREdwU~R_;ot1_u z(ruCYB-LPGn!NQdT|ZlRy+(fw^-+`=%+gee_kY4FWHg<*4sZI8+sFJD270UUORdLHO0nA4V) z%{fwsET5CQ>B?eK%uw4yQc~9?*JVo2}ze(;aRcp*ceL#HUJSllrgm5wQKR zQu+C;QrUh^8rFfA`ftFz{YAidi-`aL010qNS#tmY3ljhU3ljkVnw%H_01rS(L_t(& z1>Kqpj9gcF$IrcY-jCgxot>S>&c5vR#&I@4N=ln1)VKvAC_$LG6hT!82nkvN6;0KE zNSY{VN=w>+)K*j>F;r@02Lgl`A_5dhFs8x5PMpQ>eRyB9Gy9m`nLBgu%$gmHLhuz&3;&6O<6PI(i^DNn(;c)%Qx;h zCm(&(Q4Rfi+MR?^f4v=d0+eaUbB7>kz|QhZ;++lB$(~ze-ShTPcl0%d*}|@>sIYz& zgf40LtIt?&>!QU&@eQxvzv2)06j&MAQeuKUnxal?9`A&-n=xrizoIIQrj$__L8)7| z4!iWB-Y^y2Lh`4Xa10X^8AIF1MhstJC{Fp`^VlDjYh_rR?~;7 z0eCa?u@xxmJf!oFWmzn13MrcK7zN%YCMG6?*XL7=s;<8H>`#P>d=;jVnkFt3ilVqw z5b#7XvVEJ#CVE7@S{3M9p-Y~do{=@A(HDj)@n}U+;rhk=vN(D69BR=2el?Qo9T0(F zK-8^zt-4{n;L#c@(x-kkUo3u}8qk)PHFP`QarJ0VblfjJ_jE_2SLv1d{rT1WzoBgk z+zH+Xra%m2K@Io;E$y^NNa3V$X`KN}fJ=_c6YE@w+RbLRrt2Csio=jyXs9+|VC173 zDtkP_10%uRT5jaZ&Y4)I4aHew2IRD~_6Hgy}^q_|P0q|?va@)I& ziXobG5!JqTdA0B<4AXR;N{?`HIznemr<3XT^!28`JCMozEArFrI(rdL0(vO-KG?*e zju5tKI{9un>$K}(>u%}*wy+qtP{#!;SQ5whZ2NyesEf;1bvpGtg2GSKYPI*?b=O_L z4?BG-m+Y@(y0bDJOUXn${D&y#4)cE4(>;JKjKC3B)Aq_2fhb(fG}X$ zcJNK`BQOfMrLbNaaKCpqa7^>&_TsKqH$>4dC(zgFfZK^1zfzCwI^25Li2Ct>ucMuY zyeQit&hnOi>>Jl3WU(&x8pRzG>m5e=b>Q6teS=?U)D3J8=C5yhG#aR=#6EimGlM4) zKEO2C3lCdFNI3+45Bv+@Rca5Q#~a`d@Gw{arvXpj^MLYwP;g=|?-lK8zi>bU{5-i_ z`PRHSbnq;A1biHDJe2PM=5Lh?$XM>kd=ROmId}fSKv(?oaeR zwX%3&3Wok9xE*{2<@Cl!01v{y0Q=e@55Io~{{i{{_b7S;_w>VnM?d4Iz%$?{;Jbij z4B750AP?Bix#1xEc|vb!xkPJ4IO&cC^g07jH$tHv%%iZpb;`CvK9_ml0zU?nSr7yq z&w21Lp!_5Fb0;RmB*Kk$d_TfBfkHdI3pVpttNH?NQqEn`y>L@m(Vq%^7%E(+3-MYQ zo<_bGtO6=F4{iiB=mdBgJOz5dXTj?Mml-E$3NY`}U>kS^_$i=r99S7}n_>Lz;D_J_ zkO40z&hmBsv<$ShzB3kNQfH2jTNvZ(APH!EK9}-lKs`7nIsqsC2`~*l0chaA0=zF$ zG{7yBau>J-`~m0%Y=0WCFW%`>0WENiVVS~IYla7w=RVE-C%7#)^e2-`Gv6*OFK15HO!@Y~TaTqYgA+7SsXzOMr*KtAJY;N1Vod0ptL6r~vj)eXjxR z&jjq7!hYC>^*F{+K)q?mj{??Z+t&dK`x*p0n1C#S-GN{*s@JM#VCq#ql+Gc0dV1g8 zXxKEyN0N!e8xZoMO>YFNFi=cCZuBsH{gl*vE5V3~)8F4vlp+pguMz z0Y6~B)R{tOx!;Mkyq=c;IvD$=JOyZAj_){NKQ{mhb^jvZxP@UDoVZ&Z?JfDdp&N4^ zWH^dhI8u}7#PTQMZ3O+n%~1+`5(BI;HEKy;B$;a-UnEh_vkMGzPvmR zT&W>~-wNb=!Drf;yk+p_avbnd&y)EKm<3g^0xDn?xWfB3uT{L4cf$OwxaC`K3}w`% zP$&1!%jYo8=kj(i4|r3eJOkbjCYk6E-kPX4hkz@5K6RsP?0;ncaoADr z7~CO~-LW5Fx{}C84*sOG>D#(ROpXqWo0c!78r==A)JJDIb#(RNc=*bE6Sx7K1e7Phq!Vj7 zifdTBvE$XZB@0K79(@`{UK~sg$#hS4KAld!2}SgD{CRhR8Yu*1!nyZDLekD1J zfXinO2m>2us#pHD|KGSi#Y@zVEJ6w=78m%?^JOD2mx@or! zmEm(3y6|~!oFUV!L!-KBt}wzetpSdO2JF;>>8--{t~kyMdpMz+iQm*04jee}!?EpS zg@B02;q;(Pgu{P>a>t2XL$|EWlvmlE>B)Z7TC?^R8-*{;&dvsNx!kK!#DfgK#M>qg zM?{^?KY)-|9bOBsMyIm~d0-6#9z3&vhb0e19&kK#oWm1!*^he&vkeaumhtf8MDrmP zU;rLyRJe|SUj>-Qmjs^byk)Qj-f^AZXS^t9d)6T|b`SD+Q&HPV(Q7)Iwd_G^i^OJY#`1NiWhhL;C9j%tiD}Pzm z_0OVRqur0wfn#-cMuNWJ-dta9&M$)V-Tv70gAYE4ZRaQtFV}Msy+j;u<1)Go)5tr+ zNn$IOyMnj@HdhT-4$^LgHAMMbM_$TybN+Y2VzFo+J9e!8^~WDC-~7g#Iav)LM>4}Q zm+D`N#bUQXGsl*k7&p$)Nw}6r*dI&8ZVd*4uWqi__Z2EDAv7r8ci(-%t9I`6j0_Jq zckSAx;`d$Y^?KEMy)F>)zKv@C{{)5=hYuf?%f%u-GStMeW5<>KU);}Ch*jVfxkL&d zE9^Y(&7YHg`|E|m+A&%I_HcgE=(LDq=+2DmmFv9|fr*Q)#85 zSLEE>oSd1tplll%QBlucU0qei#>Ny*7{8RPuCB=ZLP1(JOQeTWVsT+n;Y8AZPoF+5 za19lHzh9w;^DBOuIVaii1r^7O&z6?9%B15yHTSVO2=|0U-Lyn$y(qdO*s@iR6qZ!XYF)&$_#D@?siZKg zCO&bM(cBiXa8#`5>v(evgZB9phT~T}hOyEKotB9KE72cnPggQGkKD48>s$V;^ zF#WS$Z+zE!!@#Q-U%qNEp1Kx@be)7_2K0?;JQ@n58@8?EL*WKi(7I`ue%or|bC;Hf zqBz*>s6QN7$ER^eXX=VF1z+Az;P_T6>qei)qpssK*C4+A@PH0u+Y6({Mzdkn;PF$c zR~=G>I*b#f=<}%Oc*f$>rLAh7vTd2B(WsoQispQAzQ`9YzS3_>+g5xw&2@>%t(B0Jzwcp{So}Q4)>;u<3`~PhYO}@dYay5P^r|Srbny$ zgwHfo!@$2YXtr*LeBHisKn5DRt^09XGH_d`x*V%g!G$G%E?=OsN?Hkv-xfyyiT>F9 zsrgbioAu-05WJIL2Rr50000IKS9$;L`_6mz<=xp` z^QQc#JDsjMZ!T5p#eKVvJ2%60YykeL82|BO@XRSiq#+@L<g(77l1DSUjV)Ud;$0Z@CD!tz!!io0Ds+vHnL>t z@1CF$b!c^J6XbTtA3?5!xbu!Z4|xLeHOQftpLqMbJ=(m*d&#~HZ)#ok7T*fl4|x)D z2W0KbK=W7wxf`+%@(&R6wSK7A@&*HtZ$NHQH!>-HVgrLu)-tjKTiQhNiSEUvnb{rD#_){Tnxh2rE*;-E0iJX)^X=IUZ z6c9=_RVp#vbkj1r`_o$*-~QJlXLdaLqcu{>pW^&&kf(lMlG{26KlJd5m3sV-+gpgy zs+r09x{wj_MVoj@TN1W~4{2dLgyj!W96yx%@JHqFgAZ=?DwS?4Ro=&63*bg~x%`UB z?E(g8${#_x*RMDHzx=C)oy&Qeu4l=%mr^#fjxz2VxP3PXQ3udE38e^@0NGZ-#^u!nDDk}I@S9J;%9q$;<+0QFaF$R+Y5-WldEC zLoX;1vPGJ-piEbZuG=^+aEc()=z?;VQ!J*b9ULInvE46xakcZ;_tctu_Rx0A%9$f0 z_WkFx`sGv39)#SvWQi7i{)>TO+f7Z%kaWbb<6NO8wESP=S`l$l)AbC%mWk&?@i`Ui zu6s3HzYVMJBimYx@2e03+4!zc{k(Pj_)G@RaWgLSeZJPA(W9>)@YSmWS_PRu_Pt=! z{{8kwWaFnTi{#(m=gFZVp=(HAx}GD$D3M|ILIDn}2@en2bwlpC-z$(W+(48Tug zK6^nHVbJ6|Q>pNFDwWPR zpLu)pmRJl8k)de@fVzm~9%Sw=Shg2Zf)W}04Eg>6Y$LB~CO}UrkbI7Swb|{V6NCj4 zUT}o!-VbQWvQ@oXHg6hxWXF?>G2zpYdtcXb#@2nz$|Dxf`~Km>_8lUo)m>c_y=!yU z)ODdOCXlHm{#)iEWm&ZkR^>RC6u^sg$|BLlW|f+)-9Tz2${>UFfIq1cUCaL!lHzsr z=kMEA+VSZ3+pzkbDar9)H{dS-ILrKmhETYNH@5v*Ha5+s8ONTooM~pru~z_eH-+JG zSaupvVoJOri!);7<{GTdai4@015cEyK>-~95_8(YK`P{T7O%awa%Rt-Q;Sl9^WT@U zj(;5S-(M_Jc*6}%D-2K5yZ@9zkKVW#zP+CaRztfbXHUBK-`9-T?U}UbMiHMHyrQM*cgzaWGzA)H z@o6eAV9;ux8dAmnHETxN^PaaOz&U1agFKsdO82HpaDU4=!|Czeuy#+mEaY9!R zt=IdxC{wNG*k0qu1WPNExf!W5NOo~fdWnT4lu%MJt?PL*t$rNKsrcsamRW&Ul$8?H zgQ7yLTeo2-eTF5SNN&TkjYK-GPUUad%OJ<*H47u@d{yGstO?~EpQvg*J!Q)0ZlrhK zdbPKI-y^M&6~}Tde>8vH^#gJR~!Nso@?3rEwi1KTxP~+PHLW48 z@Jb0Th>eE2-EJR70z9d_z`}7uFDXT^cO=`BbJW&#oe;n;zB@yB-OSe8y45qI_$j+s z>=CSwe|o@@rcssW&KXgwm2a1d{qf*Xk6SFtOc+jpaERmrCQ6lT&`fhPiHA z=77r0tPowxsQN8cbSGKdvIZ4l3Bz$HVOqH~^Z7!46VC5ODLa5;W6CQi)>Kjy!lQDz z7}V2YdU#Ss<anwZmNDXgmS|) zl(Vyl8%dG^7?s2T*0L&??^6H(sxrfhAnUMVnc`@QT3qJhgus|aA3R_+O5jS>tVGdi z;wnKXe;n%qtt?lDcDv2bH*?XzK{dMv2Zaw#ZN{Qk962mC%hGBqSA48g^BzaS+9k)v zTFuGHjIU{V6jslw42oQ(GUT!~m}e*PNvSo%go4Tm3ZrqAnT2R5SLH@UL#)QpktE)s zK-1_^z$|ccW_n!Sn6X9iX%&g=>P&uE83Dp!W~Q2F-qaE1)^6L?uC6Tuk3BXv)o$NnrKIJ)ij6SRK%UlBN9G=66vd*O4+M*-@M(30WoD+tp*wY+L80`db@5BjF zoH+HCec$-{XL@<(fdhwDLT2aidfBddH)D-o?|I@+9)9>3{qToYM++mlqX; zY^o}$dTa&{ux#z568I`aG}ZZ_qtPN2!>kZJJeIbrmP%@xnRrToaNzy6)u-}C5Xi1h z0e?aWdE5IxaM!YVb(_t{jmLL>+p1?eRzMz~nhHm@f9Xv7fiJ&7#d88usD!0l9Fp|h zv&1K1X9+9ghJ?wARMeEf?^OjwrsrHiD1Dp+ISiN$PD~Wo|NDQ(GhGnyzkuA3E)H_* z^>>g5UPTkYH~$aFXOA9@oc;T9Gi%o_FLCU)!=uX59N&gsOj=VF%LP@7lPvGSdWRF{ zrV?L>xq0ROycWmjvseJkixlhyqodQ!^xhq@I0LvA^4^rTzT!o7eQrsLDeJY!0dF52 zT_!eed>gX-FOiszkEnxh>@yE{N%B4M36MwSuCm3_NjjTX_N#9VtB| z$`BQ!N}8?H*jSYB6!2GEh93Gu7y?SwBLuS4b*XEbfV!ln zI!=w5oF;_OBebV*4aq^T%Bb&4s?A76c60;fmJ1;2V-#sYqd^%|A=b<%4~-su@UmEQ zGn{-OB)t$?89F}WP&i9)3|JUXp2_AYLdVq#VzQCA+EL8=9W@6o#EFpEo*p(R?`jAE z^y6Wy6hM)0W%VedX)|fXAn$TmS6AG9`ifgf?^{YEiwa0+f*NfFjE1|jlygive7a5= zz+6))Qo*%o@7OfeTM<=T0X3l{*D|P>v8V~foN6VUo#ROdatq1}u+j6(SE$+W{wMXa zOAfp|+c>h7UmUNg`0p>d3g96C&e#T>oNg(aJ2urI$Kp~&WE%`jQ{~MM!KCs!6y?yF znvP>SO*aDyBB8G52N8p&G!I=CZ&G^rU+%!;Bpl=(-NI* zNf;j7-Zpje>K^*{+J#)=0Kct4a`P{x#phnb{M)y`Np>brm4N~EU7*Gl3yAL=YBQ{; zn^wZuX0C+LM=KTl8p_-RVtrTLfI)#re} zY2%G4kOYhr$jDsq)pt3!|2%{H&397<<_`@oRxEDG(xpmav*VG69-0My*~GXSyPkV4 zT_rs~vM6C)-Cc9v`}+FGaqPK_{nBXB(zQ35TW*>?7KZ^HJ9=n7W4z?R=azupyX`#} zc4O0|{{H?sa8kWQV5=utUZ&wtNBr08bs8M3TvqSL=VHyW&|;Q{Nb6ZbL9UMitAGZ~ zB>`(u&;&J=pwnRhKGm6wnBH&SBr$W?Xu+p`%t^GSTT-nrBB0M=gAqFdhUL44K zajb&<8RlY5zg=sYjeF6DZE8~cic+!U>w&5gg*x5 literal 0 HcmV?d00001 diff --git a/assets/images/player-left.png b/assets/images/player-left.png new file mode 100644 index 0000000000000000000000000000000000000000..0618c49c00408ecb55648efaa40b4db44e8e91fd GIT binary patch literal 3572 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 Eg89Mt82|tP literal 0 HcmV?d00001 diff --git a/assets/images/player-right.png b/assets/images/player-right.png new file mode 100644 index 0000000000000000000000000000000000000000..5e7406afeb009502036bf7be81c8468d25fe9230 GIT binary patch literal 3547 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 V5+AT-mV5vJ002ovPDHLkV1oD~=V$-` literal 0 HcmV?d00001 diff --git a/assets/images/player-shoot-jump.png b/assets/images/player-shoot-jump.png new file mode 100644 index 0000000000000000000000000000000000000000..c6738444f3818d14d9399b565d941b954a12ea30 GIT binary patch literal 13954 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 literal 0 HcmV?d00001 diff --git a/assets/images/player-shoot.png b/assets/images/player-shoot.png new file mode 100644 index 0000000000000000000000000000000000000000..589d55635315081be7f4444a3803911b65477a14 GIT binary patch literal 14036 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 FV1kW1d%yqy literal 0 HcmV?d00001 diff --git a/assets/images/spring-compressed.png b/assets/images/spring-compressed.png new file mode 100644 index 0000000000000000000000000000000000000000..ca6e52a60b5e3024318546b07d00ba2245c6f8dc GIT binary patch literal 7056 zcmeHLXINB6+n!T)&-UI~VChAQpdd<65Kypzy~L;p2q;YiTTIay6H8*E#-13B(Wr?g zCSr*(u_PKLN)bfqAkvqG?fsi$UK8G2*PHLV-e2F3%wA{qK67U7dFE*|=WI=#Hj&Lx zFaQATpz0I-(l#K)(mW)~C}tjaDZR3*p9s|t$>mgVGT02m>H3eO2MqnGmNV8u&5XSBoz)Ak&(G79pcRp=dLL(B-=F*iL7 z;ku%ntn6Zye|mr_Z1m_TRZ`}f+|1(Q;MBDA6=_8os`!Gu!nFK#0Q|mYaug7dx>Z3X zM~01#j0_GBf$IOG{O!X(di^~hZTouP-k$=%-3&nKgCXmYkp7ZgTwFLNG<40HH6b~f=^>;-|0w@!hd+A$XE0>G z5OTghbf-$lT$WanTdX3LnqH7wP*S8?RhX8ZsS5t96aUu(hln*qj-VNt%QA~H^Wju; zpqJ(3XF+r4XXF&;6y&RN^8b^C|I1-RWFX=1ehq=}xC4k5hXCFK5y1M&04`(#Y~d&H z3G#>CrqJgAGVwl}zo$wZ2m6N3+o8xE9Ql*y^ttK&y39_O92H*k_ zkOMd11^huU2nVA;G>8R>U=m0Hv%q|?2&98-kOzvu8n6Lu1Y5v%@B#P;90W(eac~Np z1?Ryj$BoUc{%s}QN zOOPxiA1OgLAa5btkzL3^WL2Z%3;ABjq$oiNduG!4ZbJh~5k3_XROL0?DTNk2}%LVrMSr&}3(h94t_F^jRBv5~Q#ahCBjqn@E< zGMS#t(ah=09Oj$M{mieKcbF|qGfThiAwP_t!q4OH;GgFI%I_2q0$)L*AVaWO@R{JIpiPJgy@c_?bm3dV-iQ;EPuZzef+9lm( zo6C8ZCrVTqsGOmERr#5+OsRKubDii~=z75QrfaX8#4Xlsx!WGMYi?ccLie%mIqrMh ze{}CwiB)l`T-AQnEtSSY>5=47;&IgDzK7M*&vUltCeL%84PFedD6eH+d%SLVX}sON zr+RPjKI8qwhwc;QlkKz5=eCd0*UxvZ?>oL1eLMYRe#w68{m%H+`?LMW`LFap=KnB& z8W0t*BH-hI@<22&A}~AfP~d}M=&;CPIm134RuM!A8Xc4$bS&smFe^ANcy;iZ;Fb_c z$dr&xAs0i`q28ejLO%?>9qJe!F+6wp@!@r0g0M+po5HSy4TcAXr-vU3e>j3YV#0_w zMqC;(Fml+)%#ojrtc?&xOpSOa;zoo$a#UndDFY{i5&B(^ID(n*MA?*o+M`ZqF3X zTs-siOv9}4vv$s^o9#clWcH0Y+&K&9oSI{tn=p6R+~#?q^In^GZ@yxF&iqRYhy`;N zoLHcLIq~I>UT$9)v2e@6npgZ@S^LVbixi7;7yYo9yEtv}w@WBX<}NwC#Fmzlb}UW5 zG3@lGt zeq_0EMaqhkE1bD=bI;|`@|NUX&KKmb$iG$KR z+uok|_L(i5Ek#=%y%YV;k$3TTbKbqbb;Q;KTOHdnw%y%6eEZ(*wjJp^?!FiH-v0NT z?=O4*{?5pqpL{_5Ape7!566A@#V-D?^}E`3Pu*R*N400$9^FTaKl*j=$h}AQG4_@0 zYu-O)|D^-o2R=ApJD7d2`q218=MF0mZ#``MIOF5WPhvkgd&Kp~_9K>0b3Uy-I`L@f zG2df*KcjxO`m<-p=N!NNdDQ2pPAE=nKVd(af3o?D8DHEwHR{x<)5_C3&!A^Y&UAgb z@XPYA627{0Hu&t(bCPr0zXo5IeBJ%cl5c9xPd*c#qcQ4+HyjNNlQFh_Ch~F;U zkGx;{VAO+4<)h25RJ>Git#VxD^{RxbUmhkuyjMM~x}s)wP3@zFkD6;UYC9k2J|1|o z`iZsf&3a1xwgz6q-bQ8Pv8I5gbIp;>KeQyYl(o)mt!qnf>v_8BsjYqUGxoE+9qt{c zI>S4!c1`Fi?|!+vy{E9p+PkHX-*;H;ul}w-w!cg>Pt!h7G~gWEp_OY->PG5r=u`EL zhCGASxXmOtePNC=-?q%PbXeEe2-|*pfc=VNvZLOa=X7HGwYIU*SIKiYb?M}Z3BXDI zKKg`|3SkjHGIIC*L!QO8u`;;>7p74HJTIhmXgH!F#a9Ok4C zz#jjUe>Cuq2L92&KN|S|s)3=ei4=jrn;sOTkkV*uj$UstiIkGTs>(`Qe`lu&zPJsj z)oL>D+u-H+y9GTb6$*uHsnj(|>FyS=>ja2cEN0PY%*jC^!!rW{1EN_R7Nxndp?^@P?KB!p7>mW$ zakv~Om4drMX?Yli+Xl6Ron2j><=yR_7u4#W^R2C|{X>ayqtQr1G0HR+hZ)IaF^TrJ zwx@UQ-n(GX>dNd6JHq3Od&E-d6O`f<@Y(Eekw`pJ>Ei0`=H@=G%e6DSv7rHhr0@&N zpDMv^HVVUPwet`JWdQ_g13~L-7V900$?*iGQ3rbayDWNO=`$lptD~c%0={}3b8+z! z@I}I4f{x3qc5BU0DM^guxFa0JfYEF;b;0FHDLC%SAc(o{As&4+I)T_64k28!nMx47 zsDDs{ZgBAK)8>wvn;lJ;L4Ca)a*&4mw}LU5JRC0D&tftA*=$y}OfKViczOEBy*-IvTpWJMZXqhVP9g!`C*OjZ)MBypLzj7~^6-*NWwK#V3bd`Y^+7{j zV}9+U+RJ@?>Ke_!K&RbqN2nC4C!NU%mr5i7JT6yEr_;E4t(LIctaUn_u9GBw{v`zh z2lVnsj~VT`UnAA*a)5 zHnWTdy%8GEWHOnbc6WFE*xl7xiZ~o)Bq2#OloYn(gm2(5j6zV6?ye5NX0nMVPik!q z4GnD$C-}xL9s+4RVv-&0-;bMlgZg!9?#I)()wNN(`P0I6aE;?D2LN& zFz9uadRT@^>a<$*>b~A?s4J?IAZX34O-&oCs;kxE;Smu^SLFx<#YSKVI*!fbu{j)$ z9iW)OX}6nU9;kH4ocF60u1r5_ubqrd7dyfo3O)@S0j%2(!t= z(hUq4tv0I-g<*){6g3RVulffD@0s<3^?iMPMv`Rc^2vJ}`~>8HVko6@MS!cTYlw?N z87>s?J>kcnL9@w%a0UDxxx%FjCK(+1s2hvPbiq*62#u#9CAC_uroT$cf`Kp+5`=O& zTsn+64Y>Y%z(U?}Y{j zhbDM0gqcbP^@=}hYpa1PDMb@X1(iBQm31nw6X5- zqu)53{_g(1J{LEY2Rb@tEUmh#QvR^2;)=~yaSO*WKyKe29$svd#mwqct1&K%-A$tr z?G~d}2hRpQLk|O)bYYQSu6bGwkgZ++~i(@4VP#Ayj<$1mCRKSUvv?*IS* literal 0 HcmV?d00001 diff --git a/assets/images/spring.png b/assets/images/spring.png new file mode 100644 index 0000000000000000000000000000000000000000..c773f3882a85ea7ffaa26ecadb9dd3b4840aa5df GIT binary patch literal 7056 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 E0AWiD4FCWD literal 0 HcmV?d00001 diff --git a/game.js b/game.js index 619b918..cd94ee6 100644 --- a/game.js +++ b/game.js @@ -1,111 +1,124 @@ (() => { - const STORAGE_KEY = "skybound-scribble-save-v1"; - - const CONFIG = { - width: 420, - height: 720, - gravity: -1820, - moveAcceleration: 1650, - friction: 1280, - maxMoveSpeed: 320, - jumpVelocity: 920, - springVelocity: 1180, - boostVelocity: 1260, - breakVelocity: 760, - jetpackVelocity: 1380, - jetpackDuration: 1.3, - cameraFollowHeight: 300, - deathBuffer: 170, - platformThickness: 14, - cloudBuffer: 560, - worldPadding: 18, - maxDelta: 1 / 30, - }; + const STORAGE_KEY = "doodle-jump-parody-save-v2"; + + const WIDTH = 432; + const HEIGHT = 768; + const TOP_BAR_HEIGHT = 56; + const PLATFORM_WIDTH = 74; + const PLATFORM_HEIGHT = 20; + const PLAYER_WIDTH = 62; + const PLAYER_HEIGHT = 60; + const MOVE_SPEED = 178; + const GRAVITY = -1880; + const JUMP_VELOCITY = 835; + const SPRING_VELOCITY = 1080; + const PROPELLER_VELOCITY = 930; + const JETPACK_VELOCITY = 1185; + const CAMERA_THRESHOLD = 305; + const DEATH_BUFFER = 110; + const BULLET_SPEED = 880; + const SHOT_COOLDOWN = 0.23; + const MAX_DT = 1 / 30; const clamp = (value, min, max) => Math.max(min, Math.min(max, value)); - const lerp = (start, end, amount) => start + (end - start) * amount; const randomRange = (min, max) => min + Math.random() * (max - min); - const randomInt = (min, max) => Math.floor(randomRange(min, max + 1)); const chance = (value) => Math.random() < value; - const sign = () => (Math.random() < 0.5 ? -1 : 1); - class AudioSystem { - constructor() { - this.context = null; - this.master = null; - this.muted = true; - } - - ensureContext() { - if (this.context) { - if (this.context.state === "suspended") { - this.context.resume().catch(() => {}); - } - return; - } + const IMAGE_URLS = { + playerRight: "assets/images/player-right.png", + playerLeft: "assets/images/player-left.png", + playerRightJump: "assets/images/player-right-jump.png", + playerLeftJump: "assets/images/player-left-jump.png", + playerShoot: "assets/images/player-shoot.png", + playerShootJump: "assets/images/player-shoot-jump.png", + propeller: "assets/images/propeller.png", + jetpack: "assets/images/jetpack.png", + projectile: "assets/images/projectile.png", + platformGreen: "assets/images/platform-green.png", + platformBlue: "assets/images/platform-blue.png", + platformBrown: "assets/images/platform-brown.png", + platformBrownBroken: "assets/images/platform-brown-broken.png", + platformWhite: "assets/images/platform-white.png", + spring: "assets/images/spring.png", + springCompressed: "assets/images/spring-compressed.png", + monster: "assets/images/monster.png", + }; - const AudioContext = window.AudioContext || window.webkitAudioContext; - if (!AudioContext) { - return; - } + const AUDIO_URLS = { + jump: "assets/audio/jump.wav", + gameOver: "assets/audio/gameover.wav", + spring: "assets/audio/spring.mp3", + propeller: "assets/audio/propeller.mp3", + jetpack: "assets/audio/jetpack.mp3", + shoot: "assets/audio/shoot.mp3", + monster: "assets/audio/monster.mp3", + }; - this.context = new AudioContext(); - this.master = this.context.createGain(); - this.master.gain.value = this.muted ? 0 : 0.08; - this.master.connect(this.context.destination); + class AudioSystem { + constructor(urls) { + this.urls = urls; + this.buffers = new Map(); + this.enabled = false; + } + + preload() { + Object.entries(this.urls).forEach(([name, url]) => { + const audio = new Audio(url); + audio.preload = "auto"; + audio.crossOrigin = "anonymous"; + this.buffers.set(name, audio); + }); } - setMuted(value) { - this.muted = value; - if (this.master) { - this.master.gain.value = value ? 0 : 0.08; - } + setEnabled(value) { + this.enabled = value; } - tone(frequency, duration, type = "sine", volume = 0.2, slideTo = null) { - if (!this.context || this.muted) { + play(name, volume = 0.55) { + if (!this.enabled) { return; } - - const now = this.context.currentTime; - const oscillator = this.context.createOscillator(); - const gain = this.context.createGain(); - - oscillator.type = type; - oscillator.frequency.setValueAtTime(frequency, now); - if (slideTo) { - oscillator.frequency.exponentialRampToValueAtTime(Math.max(1, slideTo), now + duration); + const base = this.buffers.get(name); + if (!base) { + return; } - - gain.gain.setValueAtTime(volume, now); - gain.gain.exponentialRampToValueAtTime(0.001, now + duration); - - oscillator.connect(gain); - gain.connect(this.master); - - oscillator.start(now); - oscillator.stop(now + duration); - } - - playJump() { - this.tone(360, 0.08, "triangle", 0.07, 510); - } - - playBoost() { - this.tone(420, 0.22, "sawtooth", 0.08, 900); - } - - playJetpack() { - this.tone(180, 0.16, "square", 0.05, 260); + const sound = base.cloneNode(); + sound.volume = volume; + sound.play().catch(() => {}); } + } - playGameOver() { - this.tone(260, 0.12, "triangle", 0.08, 160); - this.tone(180, 0.24, "sine", 0.06, 100); - } + class AssetLoader { + constructor(manifest) { + this.manifest = manifest; + this.images = {}; + } + + load(onProgress) { + const entries = Object.entries(this.manifest); + let loaded = 0; + + const tasks = entries.map(([name, url]) => + new Promise((resolve) => { + const image = new Image(); + image.crossOrigin = "anonymous"; + image.onload = () => { + this.images[name] = image; + loaded += 1; + onProgress?.(loaded, entries.length); + resolve(); + }; + image.onerror = () => { + this.images[name] = null; + loaded += 1; + onProgress?.(loaded, entries.length); + resolve(); + }; + image.src = url; + }), + ); - playButton() { - this.tone(520, 0.06, "triangle", 0.06, 690); + return Promise.all(tasks).then(() => this.images); } } @@ -113,16 +126,15 @@ constructor() { this.left = false; this.right = false; + this.shoot = false; this.pauseRequested = false; - this.restartRequested = false; + this.startRequested = false; } - bind({ leftButton, rightButton }) { - const setButtonState = (element, property, active) => { - this[property] = active; - if (element) { - element.classList.toggle("is-active", active); - } + bind({ leftButton, rightButton, shootButton }) { + const setPressed = (key, value, element) => { + this[key] = value; + element?.classList.toggle("is-active", value); }; window.addEventListener("keydown", (event) => { @@ -132,11 +144,15 @@ if (["ArrowRight", "d", "D"].includes(event.key)) { this.right = true; } + if (event.key === " " || event.key === "Spacebar") { + event.preventDefault(); + this.shoot = true; + } if (["p", "P", "Escape"].includes(event.key)) { this.pauseRequested = true; } - if (["r", "R", "Enter"].includes(event.key)) { - this.restartRequested = true; + if (["Enter", "r", "R"].includes(event.key)) { + this.startRequested = true; } }); @@ -147,532 +163,54 @@ if (["ArrowRight", "d", "D"].includes(event.key)) { this.right = false; } + if (event.key === " " || event.key === "Spacebar") { + this.shoot = false; + } }); - const bindTouchControl = (element, property) => { + const bindButton = (element, key) => { if (!element) { return; } - const activate = (event) => { + const down = (event) => { event.preventDefault(); - setButtonState(element, property, true); + setPressed(key, true, element); }; - - const deactivate = (event) => { + const up = (event) => { event.preventDefault(); - setButtonState(element, property, false); + setPressed(key, false, element); }; - element.addEventListener("pointerdown", activate); - element.addEventListener("pointerup", deactivate); - element.addEventListener("pointercancel", deactivate); + element.addEventListener("pointerdown", down); + element.addEventListener("pointerup", up); + element.addEventListener("pointercancel", up); element.addEventListener("pointerleave", (event) => { if (event.buttons === 0) { - deactivate(event); + up(event); } }); }; - bindTouchControl(leftButton, "left"); - bindTouchControl(rightButton, "right"); + bindButton(leftButton, "left"); + bindButton(rightButton, "right"); + bindButton(shootButton, "shoot"); } - getAxis() { + axis() { return (this.right ? 1 : 0) - (this.left ? 1 : 0); } - consumePauseRequest() { - const requested = this.pauseRequested; + consumePause() { + const value = this.pauseRequested; this.pauseRequested = false; - return requested; - } - - consumeRestartRequest() { - const requested = this.restartRequested; - this.restartRequested = false; - return requested; - } - } - - class Player { - constructor() { - this.width = 40; - this.height = 54; - this.reset(CONFIG.width / 2, 130); - } - - reset(x, y) { - this.x = x; - this.y = y; - this.prevY = y; - this.vx = 0; - this.vy = CONFIG.jumpVelocity * 0.92; - this.jetpackTimer = 0; - this.bob = 0; - this.facing = 1; - this.squash = 0; - } - - applyJetpack() { - this.jetpackTimer = CONFIG.jetpackDuration; - this.vy = CONFIG.jetpackVelocity; - } - - bounce(velocity) { - this.vy = velocity; - this.squash = 1; - } - - getBounds() { - const left = this.x - this.width / 2; - return { - left, - right: left + this.width, - bottom: this.y, - top: this.y + this.height, - }; - } - - update(dt, input) { - this.prevY = this.y; - this.bob += dt * 8; - - const axis = input.getAxis(); - if (axis !== 0) { - this.vx += axis * CONFIG.moveAcceleration * dt; - this.facing = axis > 0 ? 1 : -1; - } else { - const frictionAmount = CONFIG.friction * dt; - if (Math.abs(this.vx) <= frictionAmount) { - this.vx = 0; - } else { - this.vx -= Math.sign(this.vx) * frictionAmount; - } - } - - this.vx = clamp(this.vx, -CONFIG.maxMoveSpeed, CONFIG.maxMoveSpeed); - this.x += this.vx * dt; - - const wrapPadding = this.width / 2; - if (this.x < -wrapPadding) { - this.x = CONFIG.width + wrapPadding; - } - if (this.x > CONFIG.width + wrapPadding) { - this.x = -wrapPadding; - } - - if (this.jetpackTimer > 0) { - this.jetpackTimer = Math.max(0, this.jetpackTimer - dt); - this.vy = lerp(this.vy, CONFIG.jetpackVelocity, 0.24); - } else { - this.vy += CONFIG.gravity * dt; - } - - this.y += this.vy * dt; - this.squash = Math.max(0, this.squash - dt * 3.2); - } - - draw(ctx, game) { - const screenY = game.worldToScreenY(this.y); - const bounceStretch = 1 + Math.max(0, this.vy) / 2800; - const squashX = 1 + this.squash * 0.22; - const squashY = 1 - this.squash * 0.16; - - ctx.save(); - ctx.translate(this.x, screenY - this.height * 0.58); - ctx.scale(this.facing, 1); - ctx.scale(squashX, squashY * clamp(bounceStretch, 0.94, 1.12)); - - ctx.lineWidth = 3; - ctx.strokeStyle = "#173150"; - - ctx.fillStyle = "#82d66b"; - ctx.beginPath(); - ctx.ellipse(0, -6, 18, 22, 0, 0, Math.PI * 2); - ctx.fill(); - ctx.stroke(); - - ctx.fillStyle = "#fff"; - ctx.beginPath(); - ctx.arc(-6, -10, 4, 0, Math.PI * 2); - ctx.arc(6, -10, 4, 0, Math.PI * 2); - ctx.fill(); - ctx.stroke(); - - ctx.fillStyle = "#173150"; - ctx.beginPath(); - ctx.arc(-6, -10, 1.8, 0, Math.PI * 2); - ctx.arc(6, -10, 1.8, 0, Math.PI * 2); - ctx.fill(); - - ctx.beginPath(); - ctx.moveTo(9, -5); - ctx.lineTo(18, -2); - ctx.lineTo(7, 2); - ctx.closePath(); - ctx.fillStyle = "#ffbb6e"; - ctx.fill(); - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(-10, 17); - ctx.lineTo(-18, 26); - ctx.moveTo(10, 17); - ctx.lineTo(18, 26); - ctx.moveTo(-14, 4); - ctx.lineTo(-22, 10); - ctx.moveTo(14, 4); - ctx.lineTo(24, 10); - ctx.stroke(); - - if (this.jetpackTimer > 0) { - ctx.fillStyle = "#ff8c62"; - ctx.fillRect(-16, 0, 8, 18); - ctx.fillRect(8, 0, 8, 18); - ctx.fillStyle = "#ffd166"; - const flameLength = 12 + Math.sin(game.time * 36) * 6; - ctx.beginPath(); - ctx.moveTo(-12, 18); - ctx.lineTo(-16, 18 + flameLength); - ctx.lineTo(-8, 18 + flameLength * 0.7); - ctx.closePath(); - ctx.fill(); - - ctx.beginPath(); - ctx.moveTo(12, 18); - ctx.lineTo(8, 18 + flameLength); - ctx.lineTo(16, 18 + flameLength * 0.7); - ctx.closePath(); - ctx.fill(); - } - - ctx.restore(); - } - } - - class Pickup { - constructor(type, x, y, platform = null) { - this.type = type; - this.x = x; - this.y = y; - this.platform = platform; - this.width = type === "jetpack" ? 28 : 24; - this.height = type === "jetpack" ? 36 : 24; - this.used = false; - this.phase = randomRange(0, Math.PI * 2); - } - - update(dt) { - this.phase += dt * 3; - if (this.platform) { - this.x = this.platform.x + this.platform.width / 2; - this.y = this.platform.y + 14; - if (!this.platform.active) { - this.used = true; - } - } - } - - getBounds() { - return { - left: this.x - this.width / 2, - right: this.x + this.width / 2, - bottom: this.y, - top: this.y + this.height, - }; - } - - draw(ctx, game) { - if (this.used) { - return; - } - - const screenY = game.worldToScreenY(this.y); - ctx.save(); - ctx.translate(this.x, screenY - this.height * 0.55 + Math.sin(this.phase) * 4); - ctx.lineWidth = 2.5; - ctx.strokeStyle = "#173150"; - - if (this.type === "spring") { - ctx.beginPath(); - ctx.moveTo(-8, 12); - ctx.lineTo(-4, 7); - ctx.lineTo(0, 12); - ctx.lineTo(4, 7); - ctx.lineTo(8, 12); - ctx.stroke(); - ctx.fillStyle = "#ffd166"; - ctx.fillRect(-11, 12, 22, 6); - ctx.strokeRect(-11, 12, 22, 6); - } else if (this.type === "jetpack") { - ctx.fillStyle = "#ff8764"; - ctx.fillRect(-12, -4, 10, 24); - ctx.strokeRect(-12, -4, 10, 24); - ctx.fillRect(2, -4, 10, 24); - ctx.strokeRect(2, -4, 10, 24); - - ctx.fillStyle = "#85daf4"; - ctx.fillRect(-8, -12, 16, 12); - ctx.strokeRect(-8, -12, 16, 12); - - ctx.fillStyle = "#ffd166"; - ctx.beginPath(); - ctx.moveTo(-7, 20); - ctx.lineTo(-12, 30); - ctx.lineTo(-3, 27); - ctx.closePath(); - ctx.fill(); - - ctx.beginPath(); - ctx.moveTo(7, 20); - ctx.lineTo(3, 30); - ctx.lineTo(12, 27); - ctx.closePath(); - ctx.fill(); - } - - ctx.restore(); - } - } - - class Platform { - constructor({ type, x, y, width, speed = 0 }) { - this.type = type; - this.x = x; - this.y = y; - this.width = width; - this.height = CONFIG.platformThickness; - this.speed = speed; - this.active = true; - this.life = 1; - this.breakTimer = 0; - this.fadeTimer = 0; - this.pickup = null; - } - - update(dt) { - if (this.type === "moving") { - this.x += this.speed * dt; - if (this.x <= CONFIG.worldPadding || this.x + this.width >= CONFIG.width - CONFIG.worldPadding) { - this.speed *= -1; - this.x = clamp(this.x, CONFIG.worldPadding, CONFIG.width - CONFIG.worldPadding - this.width); - } - } - - if (this.breakTimer > 0) { - this.breakTimer = Math.max(0, this.breakTimer - dt); - this.life = this.breakTimer / 0.35; - } - - if (this.fadeTimer > 0) { - this.fadeTimer = Math.max(0, this.fadeTimer - dt); - this.life = this.fadeTimer / 0.45; - } - } - - canLand(player) { - if (!this.active) { - return false; - } - - const bounds = player.getBounds(); - const prevBottom = player.prevY; - const currentBottom = bounds.bottom; - const overlap = Math.min(bounds.right, this.x + this.width) - Math.max(bounds.left, this.x); - - return ( - player.vy <= 0 && - prevBottom >= this.y + this.height && - currentBottom <= this.y + this.height && - overlap > 16 - ); - } - - onLand(game, player) { - if (!this.active) { - return false; - } - - player.y = this.y + this.height; - - let bounceVelocity = CONFIG.jumpVelocity; - let specialLabel = ""; - - if (this.type === "boost") { - bounceVelocity = CONFIG.boostVelocity; - specialLabel = "BOOST!"; - } else if (this.type === "break") { - bounceVelocity = CONFIG.breakVelocity; - specialLabel = "CRACK!"; - this.breakTimer = 0.35; - this.active = false; - } else if (this.type === "ghost") { - bounceVelocity = CONFIG.jumpVelocity * 1.03; - specialLabel = "FADE!"; - this.fadeTimer = 0.45; - this.active = false; - } else if (this.type === "moving") { - specialLabel = "DRIFT!"; - } - - if (this.pickup && !this.pickup.used && this.pickup.type === "spring") { - this.pickup.used = true; - bounceVelocity = Math.max(bounceVelocity, CONFIG.springVelocity); - specialLabel = "SPRING!"; - } - - player.bounce(bounceVelocity); - game.onPlayerBounce(this, bounceVelocity, specialLabel); - return true; - } - - draw(ctx, game) { - if (!this.active && this.life <= 0) { - return; - } - - const screenY = game.worldToScreenY(this.y); - const opacity = clamp(this.life, 0, 1); - const colors = { - normal: "#8ddf95", - moving: "#73ccff", - break: "#ffd166", - ghost: "#cab8ff", - boost: "#ff9a92", - }; - - ctx.save(); - ctx.globalAlpha = opacity; - ctx.translate(this.x, screenY - this.height); - ctx.lineWidth = 3; - ctx.strokeStyle = "#173150"; - ctx.fillStyle = colors[this.type] || colors.normal; - - ctx.beginPath(); - ctx.roundRect(0, 0, this.width, this.height, 10); - ctx.fill(); - ctx.stroke(); - - if (this.type === "moving") { - ctx.beginPath(); - ctx.moveTo(14, this.height / 2); - ctx.lineTo(24, this.height / 2 - 4); - ctx.moveTo(14, this.height / 2); - ctx.lineTo(24, this.height / 2 + 4); - ctx.moveTo(this.width - 14, this.height / 2); - ctx.lineTo(this.width - 24, this.height / 2 - 4); - ctx.moveTo(this.width - 14, this.height / 2); - ctx.lineTo(this.width - 24, this.height / 2 + 4); - ctx.stroke(); - } - - if (this.type === "break") { - ctx.beginPath(); - ctx.moveTo(this.width * 0.18, 4); - ctx.lineTo(this.width * 0.42, this.height - 2); - ctx.lineTo(this.width * 0.57, 5); - ctx.lineTo(this.width * 0.81, this.height - 2); - ctx.stroke(); - } - - if (this.type === "ghost") { - ctx.setLineDash([5, 5]); - ctx.strokeRect(6, 3, this.width - 12, this.height - 6); - } - - if (this.type === "boost") { - ctx.strokeStyle = "rgba(255, 255, 255, 0.7)"; - ctx.beginPath(); - ctx.moveTo(14, this.height - 3); - ctx.lineTo(this.width / 2, 3); - ctx.lineTo(this.width - 14, this.height - 3); - ctx.stroke(); - } - - ctx.restore(); - } - } - - class Enemy { - constructor(x, y) { - this.x = x; - this.y = y; - this.width = 42; - this.height = 34; - this.speed = randomRange(32, 68) * sign(); - this.phase = randomRange(0, Math.PI * 2); - this.counted = false; - } - - update(dt) { - this.phase += dt * 2.2; - this.x += this.speed * dt; - - if (this.x < 22 || this.x + this.width > CONFIG.width - 22) { - this.speed *= -1; - this.x = clamp(this.x, 22, CONFIG.width - this.width - 22); - } - } - - getBounds() { - return { - left: this.x, - right: this.x + this.width, - bottom: this.y, - top: this.y + this.height, - }; - } - - collides(player) { - const a = this.getBounds(); - const b = player.getBounds(); - - return ( - a.left < b.right && - a.right > b.left && - a.bottom < b.top - 8 && - a.top > b.bottom + 4 - ); + return value; } - draw(ctx, game) { - const screenY = game.worldToScreenY(this.y); - const bob = Math.sin(this.phase) * 5; - - ctx.save(); - ctx.translate(this.x + this.width / 2, screenY - this.height / 2 + bob); - ctx.lineWidth = 3; - ctx.strokeStyle = "#173150"; - ctx.fillStyle = "#ff799d"; - - ctx.beginPath(); - ctx.ellipse(0, 0, 20, 15, 0, 0, Math.PI * 2); - ctx.fill(); - ctx.stroke(); - - ctx.fillStyle = "#fff"; - ctx.beginPath(); - ctx.arc(-7, -2, 4, 0, Math.PI * 2); - ctx.arc(7, -2, 4, 0, Math.PI * 2); - ctx.fill(); - ctx.stroke(); - - ctx.fillStyle = "#173150"; - ctx.beginPath(); - ctx.arc(-7, -2, 2, 0, Math.PI * 2); - ctx.arc(7, -2, 2, 0, Math.PI * 2); - ctx.fill(); - - ctx.beginPath(); - ctx.moveTo(-11, 9); - ctx.lineTo(-7, 15); - ctx.lineTo(-1, 9); - ctx.lineTo(5, 15); - ctx.lineTo(11, 9); - ctx.stroke(); - - ctx.restore(); + consumeStart() { + const value = this.startRequested; + this.startRequested = false; + return value; } } @@ -680,89 +218,78 @@ constructor() { this.canvas = document.getElementById("gameCanvas"); this.ctx = this.canvas.getContext("2d"); + this.loader = new AssetLoader(IMAGE_URLS); + this.audio = new AudioSystem(AUDIO_URLS); + this.input = new InputController(); this.elements = { hudScore: document.getElementById("hudScore"), - hudHeight: document.getElementById("hudHeight"), - hudBest: document.getElementById("hudBest"), - hudStreak: document.getElementById("hudStreak"), - finalScore: document.getElementById("finalScore"), - finalHeight: document.getElementById("finalHeight"), - finalStreak: document.getElementById("finalStreak"), + soundToggle: document.getElementById("soundToggle"), + pauseButton: document.getElementById("pauseButton"), startScreen: document.getElementById("startScreen"), pauseScreen: document.getElementById("pauseScreen"), gameOverScreen: document.getElementById("gameOverScreen"), startButton: document.getElementById("startButton"), resumeButton: document.getElementById("resumeButton"), restartButton: document.getElementById("restartButton"), - pauseButton: document.getElementById("pauseButton"), - soundToggle: document.getElementById("soundToggle"), + finalScore: document.getElementById("finalScore"), + finalBest: document.getElementById("finalBest"), + loadingLabel: document.getElementById("loadingLabel"), leftButton: document.getElementById("leftButton"), rightButton: document.getElementById("rightButton"), + shootButton: document.getElementById("shootButton"), }; - this.audio = new AudioSystem(); - this.input = new InputController(); - this.player = new Player(); + this.state = "loading"; + this.assets = {}; this.platforms = []; - this.pickups = []; - this.enemies = []; - this.particles = []; - this.floatingTexts = []; - this.clouds = []; - this.stars = []; - this.state = "start"; - this.cameraBottom = 0; - this.maxHeight = 0; + this.monsters = []; + this.bullets = []; + this.effects = []; + this.cameraY = 0; + this.maxY = 0; this.score = 0; this.bestScore = 0; - this.bestHeight = 0; - this.startHeight = 0; - this.styleStreak = 0; - this.maxStyleStreak = 0; - this.styleTimer = 0; - this.bonusScore = 0; - this.landings = 0; - this.time = 0; - this.lastFrameTime = 0; + this.muted = true; + this.lastFrame = 0; + this.spawnAnchorX = WIDTH / 2; this.highestPlatformY = 0; - this.highestCloudY = 0; - this.highestStarY = 0; - this.spawnGuideX = CONFIG.width / 2; - this.spawnIndex = 0; + this.time = 0; + this.player = this.createPlayer(); - this.loadSave(); - this.audio.setMuted(this.muted); + this.restore(); + this.audio.preload(); + this.audio.setEnabled(!this.muted); this.input.bind({ leftButton: this.elements.leftButton, rightButton: this.elements.rightButton, + shootButton: this.elements.shootButton, }); this.bindUi(); - this.syncHud(true); + this.updateHud(); } - bindUi() { - this.elements.startButton.addEventListener("click", () => { - this.audio.ensureContext(); - this.audio.playButton(); - this.startRun(); - }); - - this.elements.resumeButton.addEventListener("click", () => { - this.audio.ensureContext(); - this.audio.playButton(); - this.resume(); - }); - - this.elements.restartButton.addEventListener("click", () => { - this.audio.ensureContext(); - this.audio.playButton(); - this.startRun(); - }); + createPlayer() { + return { + x: WIDTH / 2, + y: 120, + prevY: 120, + width: PLAYER_WIDTH, + height: PLAYER_HEIGHT, + vx: 0, + vy: JUMP_VELOCITY, + facing: "right", + shootCooldown: 0, + boostType: null, + boostTimer: 0, + }; + } + bindUi() { + this.elements.startButton.addEventListener("click", () => this.startRun()); + this.elements.resumeButton.addEventListener("click", () => this.resume()); + this.elements.restartButton.addEventListener("click", () => this.startRun()); this.elements.pauseButton.addEventListener("click", () => { - this.audio.ensureContext(); - this.audio.playButton(); if (this.state === "playing") { this.pause(); } else if (this.state === "paused") { @@ -771,42 +298,25 @@ this.startRun(); } }); - this.elements.soundToggle.addEventListener("click", () => { - this.audio.ensureContext(); this.muted = !this.muted; - this.audio.setMuted(this.muted); - if (!this.muted) { - this.audio.playButton(); - } + this.audio.setEnabled(!this.muted); this.persist(); - this.syncHud(); + this.updateHud(); }); } - init() { - this.resetRun(); - this.setState("start"); - this.lastFrameTime = performance.now(); - requestAnimationFrame((time) => this.frame(time)); - } - - loadSave() { - this.muted = true; - + restore() { try { const raw = window.localStorage.getItem(STORAGE_KEY); if (!raw) { return; } - const data = JSON.parse(raw); this.bestScore = Number(data.bestScore) || 0; - this.bestHeight = Number(data.bestHeight) || 0; this.muted = data.muted !== undefined ? Boolean(data.muted) : true; } catch (_error) { this.bestScore = 0; - this.bestHeight = 0; this.muted = true; } } @@ -817,631 +327,698 @@ STORAGE_KEY, JSON.stringify({ bestScore: this.bestScore, - bestHeight: this.bestHeight, muted: this.muted, }), ); } catch (_error) { - // Ignore storage failures. + // Storage may be unavailable. } } - setState(nextState) { - this.state = nextState; - this.elements.startScreen.classList.toggle("is-hidden", nextState !== "start"); - this.elements.pauseScreen.classList.toggle("is-hidden", nextState !== "paused"); - this.elements.gameOverScreen.classList.toggle("is-hidden", nextState !== "gameOver"); + init() { + this.loader + .load((loaded, total) => { + this.elements.loadingLabel.textContent = `Loading sprites and sounds… ${loaded}/${total}`; + }) + .then((images) => { + this.assets = images; + this.state = "start"; + this.elements.startButton.disabled = false; + this.elements.startButton.textContent = "Play"; + this.elements.loadingLabel.textContent = "Closer movement, classic platforms, shooting, boosts, and sound."; + this.resetWorld(); + this.setOverlay(); + }); + + this.lastFrame = performance.now(); + requestAnimationFrame((time) => this.frame(time)); + } + + resetWorld() { + this.player = this.createPlayer(); + this.platforms = []; + this.monsters = []; + this.bullets = []; + this.effects = []; + this.cameraY = 0; + this.maxY = this.player.y; + this.score = 0; + this.spawnAnchorX = WIDTH / 2; + this.highestPlatformY = 0; + this.time = 0; - const pauseLabel = nextState === "paused" ? "Resume" : nextState === "playing" ? "Pause" : "Play"; - this.elements.pauseButton.textContent = pauseLabel; + this.platforms.push({ + x: WIDTH / 2, + y: 80, + width: 92, + type: "green", + active: true, + vx: 0, + brokenTimer: 0, + vanishTimer: 0, + pickup: null, + }); + this.highestPlatformY = 80; + + for (let index = 0; index < 11; index += 1) { + this.spawnNextPlatform(true); + } + + this.ensureWorld(); + this.updateHud(); + } + + setOverlay() { + this.elements.startScreen.classList.toggle("is-hidden", this.state !== "start"); + this.elements.pauseScreen.classList.toggle("is-hidden", this.state !== "paused"); + this.elements.gameOverScreen.classList.toggle("is-hidden", this.state !== "gameOver"); + this.elements.pauseButton.textContent = this.state === "paused" ? "▶" : "Ⅱ"; } startRun() { - this.resetRun(); - this.setState("playing"); + if (this.state === "loading") { + return; + } + this.audio.setEnabled(!this.muted); + this.resetWorld(); + this.state = "playing"; + this.setOverlay(); } pause() { - if (this.state === "playing") { - this.setState("paused"); + if (this.state !== "playing") { + return; } + this.state = "paused"; + this.setOverlay(); } resume() { - if (this.state === "paused") { - this.setState("playing"); + if (this.state !== "paused") { + return; } + this.state = "playing"; + this.setOverlay(); } - endRun() { + gameOver() { this.bestScore = Math.max(this.bestScore, this.score); - this.bestHeight = Math.max(this.bestHeight, this.heightToMeters(this.getRunHeight())); this.persist(); - this.elements.finalScore.textContent = this.score.toLocaleString(); - this.elements.finalHeight.textContent = `${this.heightToMeters(this.getRunHeight()).toLocaleString()} m`; - this.elements.finalStreak.textContent = `x${this.maxStyleStreak}`; - this.audio.playGameOver(); - this.setState("gameOver"); - this.syncHud(); - } - - resetRun() { - this.player.reset(CONFIG.width / 2, 120); - this.startHeight = this.player.y; - this.platforms = []; - this.pickups = []; - this.enemies = []; - this.particles = []; - this.floatingTexts = []; - this.clouds = []; - this.stars = []; - this.cameraBottom = 0; - this.maxHeight = this.player.y; - this.score = 0; - this.styleStreak = 0; - this.maxStyleStreak = 0; - this.styleTimer = 0; - this.bonusScore = 0; - this.landings = 0; - this.highestPlatformY = 0; - this.highestCloudY = 0; - this.highestStarY = 0; - this.spawnGuideX = CONFIG.width / 2; - this.spawnIndex = 0; - - const basePlatform = new Platform({ - type: "normal", - x: CONFIG.width / 2 - 56, - y: 62, - width: 112, - }); - this.platforms.push(basePlatform); - this.highestPlatformY = basePlatform.y; - - for (let index = 0; index < 8; index += 1) { - this.generateNextPlatform(true); - } - - this.ensureWorldFilled(); - this.syncHud(true); + this.elements.finalBest.textContent = this.bestScore.toLocaleString(); + this.audio.play("gameOver", 0.55); + this.state = "gameOver"; + this.setOverlay(); + this.updateHud(); } frame(timestamp) { - const dt = Math.min(CONFIG.maxDelta, (timestamp - this.lastFrameTime) / 1000 || 0); - this.lastFrameTime = timestamp; - this.time += dt; + const dt = Math.min(MAX_DT, (timestamp - this.lastFrame) / 1000 || 0); + this.lastFrame = timestamp; - if (this.input.consumePauseRequest()) { + if (this.input.consumePause()) { if (this.state === "playing") { this.pause(); } else if (this.state === "paused") { this.resume(); - } else if (this.state === "start" || this.state === "gameOver") { - this.startRun(); } } - if (this.input.consumeRestartRequest() && (this.state === "start" || this.state === "gameOver")) { + if (this.input.consumeStart() && (this.state === "start" || this.state === "gameOver")) { this.startRun(); } if (this.state === "playing") { this.update(dt); - } else { - this.updateIdle(dt); } this.render(); requestAnimationFrame((time) => this.frame(time)); } - updateIdle(dt) { - this.player.bob += dt * 2; - this.ensureWorldFilled(); - - for (const cloud of this.clouds) { - cloud.phase += dt * cloud.speed; - } - } - update(dt) { - this.styleTimer = Math.max(0, this.styleTimer - dt); - if (this.styleTimer === 0) { - this.styleStreak = 0; - } - - for (const platform of this.platforms) { - platform.update(dt); - } + this.time += dt; + this.player.prevY = this.player.y; + this.player.shootCooldown = Math.max(0, this.player.shootCooldown - dt); - for (const pickup of this.pickups) { - pickup.update(dt); + const axis = this.input.axis(); + this.player.vx = axis * MOVE_SPEED; + if (axis !== 0) { + this.player.facing = axis < 0 ? "left" : "right"; } - for (const enemy of this.enemies) { - enemy.update(dt); + this.player.x += this.player.vx * dt; + if (this.player.x < -this.player.width / 2) { + this.player.x = WIDTH + this.player.width / 2; } - - for (const cloud of this.clouds) { - cloud.phase += dt * cloud.speed; + if (this.player.x > WIDTH + this.player.width / 2) { + this.player.x = -this.player.width / 2; } - this.player.update(dt, this.input); - - if (this.player.jetpackTimer > 0) { - if (chance(0.55)) { - this.spawnParticle({ - x: this.player.x + randomRange(-8, 8), - y: this.player.y + 6, - vx: randomRange(-24, 24), - vy: randomRange(-220, -110), - life: 0.42, - color: chance(0.5) ? "#ffd166" : "#ff8f66", - size: randomRange(4, 8), - }); + if (this.player.boostTimer > 0) { + this.player.boostTimer = Math.max(0, this.player.boostTimer - dt); + if (this.player.boostType === "jetpack") { + this.player.vy = JETPACK_VELOCITY; + } else if (this.player.boostType === "propeller") { + this.player.vy = PROPELLER_VELOCITY; } - if (chance(0.08)) { - this.audio.playJetpack(); + if (this.player.boostTimer === 0) { + this.player.boostType = null; } + } else { + this.player.vy += GRAVITY * dt; } - for (const pickup of this.pickups) { - if (pickup.used || pickup.type !== "jetpack") { - continue; - } - if (this.boundsOverlap(this.player.getBounds(), pickup.getBounds())) { - pickup.used = true; - this.player.applyJetpack(); - this.bonusScore += 250; - this.bumpStyleStreak(2); - this.spawnFloatingText("JETPACK!", this.player.x, this.player.y + 90, "#ff8f66"); - this.emitBurst(this.player.x, this.player.y + 40, 18, ["#ffd166", "#ff8f66", "#85daf4"]); - this.audio.playBoost(); - } - } + this.player.y += this.player.vy * dt; - if (this.player.vy <= 0 && this.player.jetpackTimer <= 0) { - for (let index = this.platforms.length - 1; index >= 0; index -= 1) { - if (this.platforms[index].canLand(this.player)) { - this.platforms[index].onLand(this, this.player); - break; - } - } + if (this.input.shoot && this.player.shootCooldown <= 0) { + this.fireBullet(); } - this.maxHeight = Math.max(this.maxHeight, this.player.y); - this.cameraBottom = Math.max(this.cameraBottom, this.player.y - CONFIG.cameraFollowHeight); - - for (const enemy of this.enemies) { - if (!enemy.counted && enemy.y + 40 < this.maxHeight) { - enemy.counted = true; - this.bonusScore += 30; - } + this.updatePlatforms(dt); + this.updateBullets(dt); + this.updateMonsters(dt); + this.updateEffects(dt); + this.handlePlatformCollisions(); + this.handlePickupCollisions(); + this.handleMonsterCollisions(); - if (enemy.collides(this.player)) { - this.endRun(); - return; - } - } + this.maxY = Math.max(this.maxY, this.player.y); + this.score = Math.max(0, Math.floor(this.maxY - 120)); + this.cameraY = Math.max(this.cameraY, this.player.y - CAMERA_THRESHOLD); - if (this.player.y < this.cameraBottom - CONFIG.deathBuffer) { - this.endRun(); + if (this.player.y < this.cameraY - DEATH_BUFFER) { + this.gameOver(); return; } - this.updateParticles(dt); - this.updateFloatingTexts(dt); this.cleanupWorld(); - this.ensureWorldFilled(); - this.updateScore(); - this.syncHud(); + this.ensureWorld(); + this.updateHud(); } - updateParticles(dt) { - this.particles = this.particles.filter((particle) => { - particle.life -= dt; - particle.x += particle.vx * dt; - particle.y += particle.vy * dt; - particle.vy += CONFIG.gravity * 0.14 * dt; - particle.size = Math.max(0.5, particle.size - dt * 7); - return particle.life > 0; - }); + updatePlatforms(dt) { + for (const platform of this.platforms) { + if (platform.type === "blue") { + platform.x += platform.vx * dt; + if (platform.x < platform.width / 2 + 12 || platform.x > WIDTH - platform.width / 2 - 12) { + platform.vx *= -1; + platform.x = clamp(platform.x, platform.width / 2 + 12, WIDTH - platform.width / 2 - 12); + } + } + + if (platform.brokenTimer > 0) { + platform.brokenTimer = Math.max(0, platform.brokenTimer - dt); + } + if (platform.vanishTimer > 0) { + platform.vanishTimer = Math.max(0, platform.vanishTimer - dt); + } + } } - updateFloatingTexts(dt) { - this.floatingTexts = this.floatingTexts.filter((item) => { - item.life -= dt; - item.y += item.vy * dt; - item.opacity = clamp(item.life / item.totalLife, 0, 1); - return item.life > 0; + updateBullets(dt) { + this.bullets = this.bullets.filter((bullet) => { + bullet.y += bullet.vy * dt; + return bullet.y < this.cameraY + HEIGHT + 120; }); } - cleanupWorld() { - const lowerBound = this.cameraBottom - 140; - const upperBound = this.cameraBottom + CONFIG.height + 800; - - this.platforms = this.platforms.filter((platform) => platform.y > lowerBound && platform.y < upperBound); - this.pickups = this.pickups.filter((pickup) => !pickup.used && pickup.y > lowerBound && pickup.y < upperBound); - this.enemies = this.enemies.filter((enemy) => enemy.y > lowerBound && enemy.y < upperBound); - this.clouds = this.clouds.filter((cloud) => cloud.y > this.cameraBottom - 220); - this.stars = this.stars.filter((star) => star.y > this.cameraBottom - 120); + updateMonsters(dt) { + for (const monster of this.monsters) { + monster.x += monster.vx * dt; + if (monster.x < monster.width / 2 + 10 || monster.x > WIDTH - monster.width / 2 - 10) { + monster.vx *= -1; + monster.x = clamp(monster.x, monster.width / 2 + 10, WIDTH - monster.width / 2 - 10); + } + } } - updateScore() { - const runHeight = this.getRunHeight(); - this.score = Math.max( - 0, - Math.floor(runHeight * 0.68 + this.bonusScore + this.landings * 4 + this.maxStyleStreak * 18), - ); + updateEffects(dt) { + this.effects = this.effects.filter((effect) => { + effect.life -= dt; + effect.y += effect.vy * dt; + return effect.life > 0; + }); } - onPlayerBounce(platform, bounceVelocity, specialLabel) { - this.landings += 1; - - const special = ["boost", "ghost", "break", "moving"].includes(platform.type) || bounceVelocity > CONFIG.jumpVelocity + 40; - if (special) { - this.bumpStyleStreak(1); - this.bonusScore += platform.type === "boost" ? 90 : 45; - } else { - this.styleStreak = Math.max(0, this.styleStreak - 1); - this.styleTimer = 1.4; - } - - this.spawnParticle({ - x: this.player.x, - y: platform.y + 8, - vx: randomRange(-60, 60), - vy: randomRange(80, 180), - life: 0.28, - color: "#ffffff", - size: randomRange(3, 6), + fireBullet() { + this.player.shootCooldown = SHOT_COOLDOWN; + this.bullets.push({ + x: this.player.x + (this.player.facing === "left" ? -10 : 10), + y: this.player.y + this.player.height - 6, + vy: BULLET_SPEED, }); - this.emitBurst(this.player.x, platform.y + 10, 8, ["#8ddf95", "#85daf4", "#ffd166"]); + this.audio.play("shoot", 0.32); + } - if (specialLabel) { - this.spawnFloatingText(specialLabel, this.player.x, this.player.y + 60, "#ff8f66"); + handlePlatformCollisions() { + if (this.player.vy > 0 || this.player.boostTimer > 0) { + return; } - if (bounceVelocity >= CONFIG.boostVelocity) { - this.audio.playBoost(); - } else { - this.audio.playJump(); - } - } + for (let index = this.platforms.length - 1; index >= 0; index -= 1) { + const platform = this.platforms[index]; + if (!platform.active) { + continue; + } - bumpStyleStreak(amount) { - this.styleStreak += amount; - this.maxStyleStreak = Math.max(this.maxStyleStreak, this.styleStreak); - this.styleTimer = 2.8; - } + const overlap = Math.min(this.player.x + this.player.width / 2, platform.x + platform.width / 2) - + Math.max(this.player.x - this.player.width / 2, platform.x - platform.width / 2); + + if ( + overlap > 18 && + this.player.prevY >= platform.y && + this.player.y <= platform.y + ) { + let bounceVelocity = JUMP_VELOCITY; + + if (platform.pickup?.type === "spring" && !platform.pickup.used) { + platform.pickup.used = true; + bounceVelocity = SPRING_VELOCITY; + this.audio.play("spring", 0.5); + } else { + this.audio.play("jump", 0.34); + } - emitBurst(x, y, count, palette) { - for (let index = 0; index < count; index += 1) { - this.spawnParticle({ - x, - y, - vx: randomRange(-130, 130), - vy: randomRange(50, 240), - life: randomRange(0.2, 0.65), - color: palette[randomInt(0, palette.length - 1)], - size: randomRange(2, 5), - }); + if (platform.type === "brown") { + platform.active = false; + platform.brokenTimer = 0.28; + } + if (platform.type === "white") { + platform.active = false; + platform.vanishTimer = 0.18; + } + + this.player.y = platform.y; + this.player.vy = bounceVelocity; + return; + } } } - spawnParticle(particle) { - this.particles.push(particle); - } + handlePickupCollisions() { + for (const platform of this.platforms) { + if (!platform.pickup || platform.pickup.used || platform.pickup.type === "spring") { + continue; + } - spawnFloatingText(text, x, y, color) { - this.floatingTexts.push({ - text, - x, - y, - vy: 46, - life: 0.9, - totalLife: 0.9, - opacity: 1, - color, - }); + const pickup = platform.pickup; + const width = pickup.type === "jetpack" ? 36 : 42; + const height = pickup.type === "jetpack" ? 46 : 32; + const pickupY = platform.y + 42; + + if ( + this.player.x + this.player.width / 2 > pickup.x - width / 2 && + this.player.x - this.player.width / 2 < pickup.x + width / 2 && + this.player.y < pickupY + height && + this.player.y + this.player.height > pickupY + ) { + pickup.used = true; + if (pickup.type === "propeller") { + this.player.boostType = "propeller"; + this.player.boostTimer = 1.05; + this.player.vy = PROPELLER_VELOCITY; + this.audio.play("propeller", 0.48); + } else if (pickup.type === "jetpack") { + this.player.boostType = "jetpack"; + this.player.boostTimer = 1.32; + this.player.vy = JETPACK_VELOCITY; + this.audio.play("jetpack", 0.45); + } + this.effects.push({ x: this.player.x, y: this.player.y + 60, vy: 34, life: 0.5, text: pickup.type === "propeller" ? "PROPELLER!" : "JETPACK!" }); + return; + } + } } - ensureWorldFilled() { - while (this.highestPlatformY < this.cameraBottom + CONFIG.height + 700) { - this.generateNextPlatform(); + handleMonsterCollisions() { + for (const bullet of this.bullets) { + for (const monster of this.monsters) { + if (monster.dead) { + continue; + } + if ( + bullet.x > monster.x - monster.width / 2 && + bullet.x < monster.x + monster.width / 2 && + bullet.y > monster.y && + bullet.y < monster.y + monster.height + ) { + monster.dead = true; + bullet.dead = true; + this.audio.play("monster", 0.42); + this.score += 250; + this.effects.push({ x: monster.x, y: monster.y + 20, vy: 30, life: 0.4, text: "POP!" }); + } + } } - while (this.highestCloudY < this.cameraBottom + CONFIG.height + CONFIG.cloudBuffer) { - this.clouds.push({ - x: randomRange(30, CONFIG.width - 30), - y: this.highestCloudY + randomRange(120, 200), - scale: randomRange(0.7, 1.4), - speed: randomRange(0.1, 0.3), - phase: randomRange(0, Math.PI * 2), - }); - this.highestCloudY = this.clouds[this.clouds.length - 1].y; + this.bullets = this.bullets.filter((bullet) => !bullet.dead); + this.monsters = this.monsters.filter((monster) => !monster.dead); + + for (const monster of this.monsters) { + const overlapX = Math.min(this.player.x + this.player.width / 2, monster.x + monster.width / 2) - + Math.max(this.player.x - this.player.width / 2, monster.x - monster.width / 2); + const overlapY = Math.min(this.player.y + this.player.height, monster.y + monster.height) - + Math.max(this.player.y, monster.y); + + if (overlapX > 12 && overlapY > 8) { + const stompLine = monster.y + monster.height * 0.62; + if (this.player.vy <= 0 && this.player.prevY >= stompLine && this.player.y <= stompLine) { + monster.dead = true; + this.player.y = stompLine; + this.player.vy = JUMP_VELOCITY * 0.92; + this.audio.play("monster", 0.42); + this.effects.push({ x: monster.x, y: monster.y + 16, vy: 28, life: 0.4, text: "BOUNCE!" }); + } else { + this.gameOver(); + return; + } + } } - while (this.highestStarY < this.cameraBottom + CONFIG.height + 600) { - const starY = this.highestStarY + randomRange(30, 90); - this.highestStarY = starY; - if (starY > 980) { - this.stars.push({ - x: randomRange(20, CONFIG.width - 20), - y: starY, - size: randomRange(1.5, 3.6), - }); - } + this.monsters = this.monsters.filter((monster) => !monster.dead); + } + + cleanupWorld() { + const floor = this.cameraY - 80; + this.platforms = this.platforms.filter((platform) => platform.y > floor - 40); + this.monsters = this.monsters.filter((monster) => monster.y > floor - 60); + } + + ensureWorld() { + while (this.highestPlatformY < this.cameraY + HEIGHT + 240) { + this.spawnNextPlatform(false); } } - generateNextPlatform(forceEasy = false) { - const difficulty = clamp(this.getRunHeight() / 3600, 0, 1); - const yGap = forceEasy ? randomRange(72, 92) : randomRange(78, lerp(110, 154, difficulty)); - const nextY = this.highestPlatformY + yGap; + spawnNextPlatform(isEarly) { + const heightScore = Math.max(0, this.highestPlatformY - 100); + const difficulty = clamp(heightScore / 5200, 0, 1); + const gap = isEarly ? randomRange(64, 82) : randomRange(70, 104 + difficulty * 14); + const y = this.highestPlatformY + gap; + const width = randomRange(70, 92); - let type = "normal"; - if (!forceEasy) { + let type = "green"; + if (!isEarly) { + const movingChance = heightScore > 450 ? 0.16 + difficulty * 0.08 : 0; + const brownChance = heightScore > 900 ? 0.11 + difficulty * 0.07 : 0; + const whiteChance = heightScore > 1500 ? 0.09 + difficulty * 0.06 : 0; const roll = Math.random(); - if (difficulty > 0.7 && roll < 0.08) { - type = "boost"; - } else if (difficulty > 0.4 && roll < 0.2) { - type = "ghost"; - } else if (difficulty > 0.22 && roll < 0.34) { - type = "break"; - } else if (difficulty > 0.08 && roll < 0.54) { - type = "moving"; + + if (whiteChance && roll < whiteChance) { + type = "white"; + } else if (brownChance && roll < whiteChance + brownChance) { + type = "brown"; + } else if (movingChance && roll < whiteChance + brownChance + movingChance) { + type = "blue"; } } - const widthMap = { - normal: randomRange(78, 112), - moving: randomRange(76, 104), - break: randomRange(82, 106), - ghost: randomRange(76, 100), - boost: randomRange(78, 96), - }; - - const width = widthMap[type]; - const maxShift = forceEasy ? 70 : lerp(90, 160, difficulty); - const targetX = clamp( - this.spawnGuideX + randomRange(-maxShift, maxShift) - width / 2, - CONFIG.worldPadding, - CONFIG.width - CONFIG.worldPadding - width, + const shift = isEarly ? 78 : 120 + difficulty * 30; + const x = clamp( + this.spawnAnchorX + randomRange(-shift, shift), + width / 2 + 14, + WIDTH - width / 2 - 14, ); - const speed = type === "moving" ? randomRange(38, 82) * sign() : 0; - const platform = new Platform({ type, x: targetX, y: nextY, width, speed }); - this.platforms.push(platform); - this.highestPlatformY = nextY; - this.spawnGuideX = targetX + width / 2; - this.spawnIndex += 1; - - if (chance(forceEasy ? 0.04 : 0.09 + difficulty * 0.08) && type !== "break") { - const spring = new Pickup("spring", platform.x + platform.width / 2, platform.y + 14, platform); - platform.pickup = spring; - this.pickups.push(spring); - } else if (!forceEasy && nextY > 900 && chance(0.025 + difficulty * 0.06)) { - this.pickups.push( - new Pickup( - "jetpack", - platform.x + platform.width / 2, - platform.y + randomRange(52, 78), - ), - ); - } + const platform = { + x, + y, + width, + type, + active: true, + vx: type === "blue" ? randomRange(42, 78) * (chance(0.5) ? -1 : 1) : 0, + brokenTimer: 0, + vanishTimer: 0, + pickup: null, + }; - if (!forceEasy && nextY > 1150 && chance(0.045 + difficulty * 0.12)) { - this.enemies.push( - new Enemy( - clamp(platform.x + platform.width / 2 - 21, 20, CONFIG.width - 62), - platform.y + randomRange(64, 92), - ), - ); + if (chance(isEarly ? 0.1 : 0.15) && type !== "brown" && type !== "white") { + platform.pickup = { type: "spring", x, used: false }; + } else if (!isEarly && heightScore > 900 && chance(0.06)) { + platform.pickup = { type: "propeller", x, used: false }; + } else if (!isEarly && heightScore > 2200 && chance(0.04)) { + platform.pickup = { type: "jetpack", x, used: false }; + } + + if (!isEarly && heightScore > 1200 && chance(0.08 + difficulty * 0.08)) { + this.monsters.push({ + x: clamp(x + randomRange(-42, 42), 40, WIDTH - 40), + y: y + randomRange(54, 94), + width: 62, + height: 42, + vx: randomRange(30, 58) * (chance(0.5) ? -1 : 1), + dead: false, + }); } - } - - boundsOverlap(a, b) { - return a.left < b.right && a.right > b.left && a.bottom < b.top && a.top > b.bottom; - } - worldToScreenY(y) { - return CONFIG.height - (y - this.cameraBottom); - } - - getRunHeight() { - return Math.max(0, this.maxHeight - this.startHeight); + this.platforms.push(platform); + this.highestPlatformY = y; + this.spawnAnchorX = x; } - heightToMeters(height) { - return Math.max(0, Math.floor(height * 0.36)); + updateHud() { + this.elements.hudScore.textContent = this.score.toLocaleString(); + this.elements.soundToggle.textContent = this.muted ? "🔇" : "🔊"; + this.elements.soundToggle.setAttribute("aria-pressed", String(!this.muted)); } - syncHud(force = false) { - const scoreText = this.score.toLocaleString(); - const heightText = `${this.heightToMeters(this.getRunHeight()).toLocaleString()} m`; - const bestText = this.bestScore.toLocaleString(); - const streakText = `x${this.styleStreak}`; - const soundText = this.muted ? "Sound: Off" : "Sound: On"; - - if ( - force || - this.elements.hudScore.textContent !== scoreText || - this.elements.hudHeight.textContent !== heightText || - this.elements.hudBest.textContent !== bestText || - this.elements.hudStreak.textContent !== streakText || - this.elements.soundToggle.textContent !== soundText - ) { - this.elements.hudScore.textContent = scoreText; - this.elements.hudHeight.textContent = heightText; - this.elements.hudBest.textContent = bestText; - this.elements.hudStreak.textContent = streakText; - this.elements.soundToggle.textContent = soundText; - this.elements.soundToggle.setAttribute("aria-pressed", String(!this.muted)); - } + worldToScreen(y) { + return HEIGHT - (y - this.cameraY); } drawBackground() { const ctx = this.ctx; - ctx.clearRect(0, 0, CONFIG.width, CONFIG.height); - - const altitudeTint = clamp(this.cameraBottom / 2400, 0, 1); - const sky = ctx.createLinearGradient(0, 0, 0, CONFIG.height); - sky.addColorStop(0, `rgb(${Math.round(214 - altitudeTint * 28)}, ${Math.round(241 - altitudeTint * 38)}, 255)`); - sky.addColorStop(0.55, `rgb(${Math.round(233 - altitudeTint * 22)}, ${Math.round(249 - altitudeTint * 30)}, ${Math.round(255 - altitudeTint * 10)})`); - sky.addColorStop(1, `rgb(${Math.round(255 - altitudeTint * 18)}, ${Math.round(250 - altitudeTint * 26)}, ${Math.round(238 + altitudeTint * 6)})`); - ctx.fillStyle = sky; - ctx.fillRect(0, 0, CONFIG.width, CONFIG.height); - - ctx.save(); - ctx.globalAlpha = 0.22; - ctx.strokeStyle = "#7aa7d9"; + ctx.clearRect(0, 0, WIDTH, HEIGHT); + + ctx.fillStyle = "#eef4f2"; + ctx.fillRect(0, 0, WIDTH, TOP_BAR_HEIGHT); + + ctx.fillStyle = "#f7f2e8"; + ctx.fillRect(0, TOP_BAR_HEIGHT, WIDTH, HEIGHT - TOP_BAR_HEIGHT); + + ctx.strokeStyle = "rgba(217, 175, 141, 0.34)"; ctx.lineWidth = 1; - const lineOffset = (this.cameraBottom * 0.4) % 42; - for (let y = -42; y <= CONFIG.height + 42; y += 42) { + for (let x = 0; x <= WIDTH; x += 18) { ctx.beginPath(); - ctx.moveTo(0, y + lineOffset); - ctx.lineTo(CONFIG.width, y + lineOffset); + ctx.moveTo(x + 0.5, TOP_BAR_HEIGHT); + ctx.lineTo(x + 0.5, HEIGHT); ctx.stroke(); } - ctx.strokeStyle = "rgba(255, 123, 141, 0.26)"; - ctx.lineWidth = 2; - ctx.beginPath(); - ctx.moveTo(54, 0); - ctx.lineTo(54, CONFIG.height); - ctx.stroke(); - ctx.restore(); - - if (this.cameraBottom > 980) { - ctx.save(); - ctx.globalAlpha = clamp((this.cameraBottom - 900) / 1400, 0, 0.78); - ctx.fillStyle = "#fef5c4"; - for (const star of this.stars) { - const screenY = this.worldToScreenY(star.y); - if (screenY < -10 || screenY > CONFIG.height + 10) { - continue; - } - ctx.beginPath(); - ctx.arc(star.x, screenY, star.size, 0, Math.PI * 2); - ctx.fill(); - } - ctx.restore(); + for (let y = TOP_BAR_HEIGHT; y <= HEIGHT; y += 18) { + ctx.beginPath(); + ctx.moveTo(0, y + 0.5); + ctx.lineTo(WIDTH, y + 0.5); + ctx.stroke(); } - const sunX = CONFIG.width - 70; - const sunY = 90 + Math.sin(this.time * 0.35) * 8; - ctx.save(); - ctx.fillStyle = "rgba(255, 236, 150, 0.74)"; + ctx.strokeStyle = "#171310"; + ctx.lineWidth = 5; + ctx.lineCap = "round"; ctx.beginPath(); - ctx.arc(sunX, sunY, 34, 0, Math.PI * 2); - ctx.fill(); - ctx.restore(); + ctx.moveTo(0, TOP_BAR_HEIGHT); + for (let x = 0; x <= WIDTH; x += 28) { + ctx.lineTo(x, TOP_BAR_HEIGHT + Math.sin((this.time * 2.4) + x * 0.03) * 1.2); + } + ctx.stroke(); } - drawClouds() { - const ctx = this.ctx; - ctx.save(); + drawImageOrFallback(image, drawImage, fallback) { + if (image) { + drawImage(image); + } else { + fallback(); + } + } - for (const cloud of this.clouds) { - const screenY = this.worldToScreenY(cloud.y); - if (screenY < -80 || screenY > CONFIG.height + 80) { - continue; - } + drawPlatforms() { + for (const platform of this.platforms) { + const screenY = this.worldToScreen(platform.y); + const image = + platform.type === "green" + ? this.assets.platformGreen + : platform.type === "blue" + ? this.assets.platformBlue + : platform.type === "brown" + ? (platform.brokenTimer > 0 ? this.assets.platformBrownBroken : this.assets.platformBrown) + : this.assets.platformWhite; + + this.drawImageOrFallback( + image, + (img) => this.ctx.drawImage(img, platform.x - platform.width / 2, screenY - 12, platform.width, 18), + () => { + this.ctx.fillStyle = platform.type === "green" ? "#79c937" : platform.type === "blue" ? "#6bb8f2" : platform.type === "brown" ? "#8d6338" : "#ffffff"; + this.ctx.strokeStyle = "#191511"; + this.ctx.lineWidth = 2; + this.ctx.beginPath(); + this.ctx.roundRect(platform.x - platform.width / 2, screenY - 12, platform.width, 18, 12); + this.ctx.fill(); + this.ctx.stroke(); + }, + ); - const drift = Math.sin(cloud.phase) * 18; - ctx.save(); - ctx.translate(cloud.x + drift, screenY); - ctx.scale(cloud.scale, cloud.scale); - ctx.globalAlpha = 0.72; - ctx.fillStyle = "rgba(255, 255, 255, 0.82)"; - ctx.strokeStyle = "rgba(23, 49, 80, 0.18)"; - ctx.lineWidth = 2; + if (platform.pickup && !platform.pickup.used) { + this.drawPickup(platform); + } + } + } - ctx.beginPath(); - ctx.arc(-24, 8, 16, 0, Math.PI * 2); - ctx.arc(-6, 0, 18, 0, Math.PI * 2); - ctx.arc(16, 7, 14, 0, Math.PI * 2); - ctx.arc(34, 10, 12, 0, Math.PI * 2); - ctx.fill(); - ctx.stroke(); + drawPickup(platform) { + const pickup = platform.pickup; + const screenY = this.worldToScreen(platform.y + 28); + + if (pickup.type === "spring") { + this.drawImageOrFallback( + this.assets.spring, + (img) => this.ctx.drawImage(img, pickup.x - 14, screenY - 26, 28, 30), + () => { + this.ctx.strokeStyle = "#171310"; + this.ctx.lineWidth = 2; + this.ctx.beginPath(); + this.ctx.moveTo(pickup.x - 8, screenY + 2); + this.ctx.lineTo(pickup.x - 4, screenY - 4); + this.ctx.lineTo(pickup.x, screenY + 2); + this.ctx.lineTo(pickup.x + 4, screenY - 4); + this.ctx.lineTo(pickup.x + 8, screenY + 2); + this.ctx.stroke(); + }, + ); + return; + } - ctx.restore(); + if (pickup.type === "propeller") { + this.drawImageOrFallback( + this.assets.propeller, + (img) => this.ctx.drawImage(img, pickup.x - 22, screenY - 30 + Math.sin(this.time * 16) * 2, 44, 32), + () => { + this.ctx.fillStyle = "#ffb83f"; + this.ctx.fillRect(pickup.x - 8, screenY - 12, 16, 12); + this.ctx.strokeRect(pickup.x - 8, screenY - 12, 16, 12); + }, + ); + return; } - ctx.restore(); + if (pickup.type === "jetpack") { + this.drawImageOrFallback( + this.assets.jetpack, + (img) => this.ctx.drawImage(img, pickup.x - 20, screenY - 34, 40, 46), + () => { + this.ctx.fillStyle = "#9dd6ff"; + this.ctx.fillRect(pickup.x - 10, screenY - 18, 20, 24); + this.ctx.strokeRect(pickup.x - 10, screenY - 18, 20, 24); + }, + ); + } } - drawParticles() { - const ctx = this.ctx; + drawMonsters() { + for (const monster of this.monsters) { + const screenY = this.worldToScreen(monster.y); + this.drawImageOrFallback( + this.assets.monster, + (img) => this.ctx.drawImage(img, monster.x - monster.width / 2, screenY - monster.height, monster.width, monster.height), + () => { + this.ctx.fillStyle = "#6fae39"; + this.ctx.strokeStyle = "#191511"; + this.ctx.lineWidth = 2; + this.ctx.beginPath(); + this.ctx.ellipse(monster.x, screenY - monster.height / 2, monster.width / 2, monster.height / 2, 0, 0, Math.PI * 2); + this.ctx.fill(); + this.ctx.stroke(); + }, + ); + } + } - for (const particle of this.particles) { - const screenY = this.worldToScreenY(particle.y); - ctx.save(); - ctx.globalAlpha = clamp(particle.life * 2, 0, 1); - ctx.fillStyle = particle.color; - ctx.beginPath(); - ctx.arc(particle.x, screenY, particle.size, 0, Math.PI * 2); - ctx.fill(); - ctx.restore(); + drawBullets() { + for (const bullet of this.bullets) { + const screenY = this.worldToScreen(bullet.y); + this.drawImageOrFallback( + this.assets.projectile, + (img) => this.ctx.drawImage(img, bullet.x - 7, screenY - 16, 14, 18), + () => { + this.ctx.fillStyle = "#171310"; + this.ctx.fillRect(bullet.x - 2, screenY - 12, 4, 12); + }, + ); } } - drawFloatingTexts() { - const ctx = this.ctx; + drawPlayer() { + const screenY = this.worldToScreen(this.player.y); + const ascending = this.player.vy > 0; + const shooting = this.input.shoot && this.player.shootCooldown > SHOT_COOLDOWN - 0.1; - for (const text of this.floatingTexts) { - const screenY = this.worldToScreenY(text.y); - ctx.save(); - ctx.globalAlpha = text.opacity; - ctx.fillStyle = text.color; - ctx.strokeStyle = "rgba(255,255,255,0.9)"; - ctx.lineWidth = 4; - ctx.font = '700 22px "Baloo 2"'; - ctx.textAlign = "center"; - ctx.strokeText(text.text, text.x, screenY); - ctx.fillText(text.text, text.x, screenY); - ctx.restore(); + let sprite = this.player.facing === "left" ? this.assets.playerLeft : this.assets.playerRight; + if (ascending) { + sprite = this.player.facing === "left" ? this.assets.playerLeftJump : this.assets.playerRightJump; + } + if (shooting) { + sprite = ascending ? this.assets.playerShootJump : this.assets.playerShoot; } - } - render() { - this.drawBackground(); - this.drawClouds(); + this.drawImageOrFallback( + sprite, + (img) => this.ctx.drawImage(img, this.player.x - this.player.width / 2, screenY - this.player.height, this.player.width, this.player.height), + () => { + this.ctx.fillStyle = "#8bcf32"; + this.ctx.strokeStyle = "#191511"; + this.ctx.lineWidth = 2; + this.ctx.beginPath(); + this.ctx.ellipse(this.player.x, screenY - 28, 24, 20, 0, 0, Math.PI * 2); + this.ctx.fill(); + this.ctx.stroke(); + }, + ); - for (const platform of this.platforms) { - platform.draw(this.ctx, this); + if (this.player.boostType === "propeller") { + this.drawImageOrFallback( + this.assets.propeller, + (img) => this.ctx.drawImage(img, this.player.x - 24, screenY - this.player.height - 18 + Math.sin(this.time * 20) * 2, 48, 30), + () => {}, + ); } - for (const pickup of this.pickups) { - pickup.draw(this.ctx, this); + if (this.player.boostType === "jetpack") { + this.drawImageOrFallback( + this.assets.jetpack, + (img) => this.ctx.drawImage(img, this.player.x - 25, screenY - this.player.height + 2, 50, 52), + () => {}, + ); } + } + + drawEffects() { + this.ctx.save(); + this.ctx.font = '700 18px "Patrick Hand SC"'; + this.ctx.textAlign = "center"; + this.ctx.fillStyle = "#171310"; + this.ctx.strokeStyle = "rgba(255,255,255,0.8)"; + this.ctx.lineWidth = 4; - for (const enemy of this.enemies) { - enemy.draw(this.ctx, this); + for (const effect of this.effects) { + const screenY = this.worldToScreen(effect.y); + this.ctx.globalAlpha = clamp(effect.life / 0.5, 0, 1); + this.ctx.strokeText(effect.text, effect.x, screenY); + this.ctx.fillText(effect.text, effect.x, screenY); } - this.player.draw(this.ctx, this); - this.drawParticles(); - this.drawFloatingTexts(); + this.ctx.restore(); } - getSnapshot() { - return { - state: this.state, - score: this.score, - maxHeight: this.maxHeight, - playerY: this.player.y, - platforms: this.platforms.length, - pickups: this.pickups.length, - enemies: this.enemies.length, - }; + render() { + this.drawBackground(); + this.drawPlatforms(); + this.drawMonsters(); + this.drawBullets(); + this.drawPlayer(); + this.drawEffects(); } } const game = new Game(); - window.skyboundGame = game; + window.doodleJumpParody = game; window.addEventListener("DOMContentLoaded", () => game.init()); })(); diff --git a/index.html b/index.html index af424b5..9c27f1b 100644 --- a/index.html +++ b/index.html @@ -3,178 +3,77 @@ - - Skybound Scribble - + + Doodle Jump Parody + - + -

- -
-
+
+
-

Notebook Arcade

-

Skybound Scribble

-

A detailed Doodle Jump-style climb through scribbled skies, sketchy monsters, cracked ledges, springs, and jetpack bursts.

-
-
-
- Goal - Climb forever -
-
- Input - Keyboard + touch -
+

faithful browser parody

+

Doodle Jump Parody

+

Classic graph-paper jumping, closer physics, real platform families, monsters, boosts, and upward shooting.

+

Parody build for personal authorized use.

-
- -
-
- +
parody
-
-
-
- Score - 0 -
-
- Height - 0 m -
-
- Best - 0 -
-
- Style - x0 -
-
- -
- - -
+
+
+

Doodle Jump Parody

+

Bounce, wrap, shoot upward, and climb with a feel tuned closer to the original.

+

Move: A / D / ← / → · Shoot: Space · Pause: P

+ +

Loading sprites and sounds…

+
-
-
-

Ready to scribble?

-

Jump into the margins

-

Climb through moving ledges, cracked doodles, spring pads, jetpacks, and grumpy sky monsters. Chase the highest score and keep your style streak alive.

-
- -
-
-
- Controls - A / D / ← / → -
-
- Pause - P or Esc -
-
- Touch - Bottom arrows -
-
-
-
- - + - - -
+
+
-
-

Sky hazards

-
    -
  • Jetpacks launch you past dangerous gaps.
  • -
  • Cloud critters appear deeper into a run.
  • -
  • Ghost pads fade quickly, so don’t hesitate.
  • -
  • Boost pads give huge altitude bursts—use them to skip chaos.
  • -
-
- +
+ + + +
-
-

Tip: run locally in a browser with python3 -m http.server 8000, then open http://localhost:8000.

-
+

Run locally with python -m http.server 8000 or python3 -m http.server 8000, then open http://localhost:8000.

diff --git a/smoke-test.mjs b/smoke-test.mjs index 183c111..4c4d889 100644 --- a/smoke-test.mjs +++ b/smoke-test.mjs @@ -57,8 +57,7 @@ class CdpClient { send(method, params = {}) { const id = this.nextId++; - const payload = { id, method, params }; - this.socket.send(JSON.stringify(payload)); + this.socket.send(JSON.stringify({ id, method, params })); return new Promise((resolve, reject) => { this.pending.set(id, { resolve, reject }); }); @@ -68,10 +67,7 @@ class CdpClient { return new Promise((resolve) => { const handler = (params) => { const listeners = this.events.get(method) || []; - this.events.set( - method, - listeners.filter((listener) => listener !== handler), - ); + this.events.set(method, listeners.filter((listener) => listener !== handler)); resolve(params); }; this.on(method, handler); @@ -90,7 +86,6 @@ class CdpClient { awaitPromise: true, returnByValue: true, }); - return result.result?.value; } @@ -119,9 +114,7 @@ async function main() { await client.send("Log.enable"); client.on("Runtime.consoleAPICalled", (params) => { - consoleMessages.push( - params.args?.map((arg) => arg.value).filter(Boolean).join(" ") || params.type, - ); + consoleMessages.push(params.args?.map((arg) => arg.value).filter(Boolean).join(" ") || params.type); }); client.on("Runtime.exceptionThrown", (params) => { pageErrors.push(params.exceptionDetails?.text || "Runtime exception"); @@ -135,33 +128,48 @@ async function main() { const loadPromise = client.once("Page.loadEventFired"); await client.send("Page.navigate", { url: "http://127.0.0.1:8000" }); await loadPromise; - await delay(1500); + + await client.evaluate(` + new Promise((resolve) => { + const check = () => { + const button = document.getElementById("startButton"); + const game = window.doodleJumpParody; + if (button && !button.disabled && game && game.state === "start") { + resolve(true); + return; + } + setTimeout(check, 100); + }; + check(); + }) + `); const initial = await client.evaluate(`(() => ({ title: document.querySelector("h1")?.textContent ?? null, - hasCanvas: Boolean(document.getElementById("gameCanvas")), startVisible: !document.getElementById("startScreen")?.classList.contains("is-hidden"), - hudScore: document.getElementById("hudScore")?.textContent ?? null, - soundToggle: document.getElementById("soundToggle")?.textContent ?? null + scoreTopLeft: (() => { + const scoreRect = document.getElementById("hudScore")?.getBoundingClientRect(); + const canvasRect = document.getElementById("gameCanvas")?.getBoundingClientRect(); + if (!scoreRect || !canvasRect) return false; + return scoreRect.left < canvasRect.left + 48 && scoreRect.top < canvasRect.top + 40; + })(), + soundToggle: document.getElementById("soundToggle")?.textContent ?? null, + buttonText: document.getElementById("startButton")?.textContent ?? null, + assetCount: Object.values(window.doodleJumpParody.assets).filter(Boolean).length }))()`); - await client.screenshot("/workspace/skybound-runtime-start.png"); + await client.screenshot("/workspace/doodle-parody-start-01.png"); await client.evaluate(`document.getElementById("startButton").click()`); - await delay(400); + await delay(500); - await client.evaluate(` - (() => { - window.dispatchEvent(new KeyboardEvent("keydown", { key: "p" })); - return window.skyboundGame.state; - })() - `); - await delay(150); - const pausedState = await client.evaluate(`window.skyboundGame.state`); + await client.evaluate(`window.dispatchEvent(new KeyboardEvent("keydown", { key: "p" }))`); + await delay(200); + const pausedState = await client.evaluate(`window.doodleJumpParody.state`); await client.evaluate(`window.dispatchEvent(new KeyboardEvent("keydown", { key: "p" }))`); - await delay(150); - const resumedState = await client.evaluate(`window.skyboundGame.state`); + await delay(200); + const resumedState = await client.evaluate(`window.doodleJumpParody.state`); await client.evaluate(` (() => { @@ -172,44 +180,69 @@ async function main() { return [direct, wrappedPositive, wrappedNegative].sort((a, b) => Math.abs(a) - Math.abs(b))[0]; }; - window.__skyboundPilot = setInterval(() => { - const game = window.skyboundGame; + window.__doodlePilot = setInterval(() => { + const game = window.doodleJumpParody; if (!game || game.state !== "playing") { return; } const player = game.player; const candidates = game.platforms - .filter((platform) => platform.active && platform.y > player.y + 12 && platform.y < player.y + 250) + .filter((platform) => platform.active && platform.y > player.y + 6 && platform.y < player.y + 220) .sort((a, b) => { - const aScore = (a.type === "boost" ? 50 : 0) + (a.type === "moving" ? 18 : 0) + (a.y - player.y); - const bScore = (b.type === "boost" ? 50 : 0) + (b.type === "moving" ? 18 : 0) + (b.y - player.y); - return bScore - aScore; + const rank = (platform) => { + let bonus = 0; + if (platform.pickup?.type === "spring") bonus += 60; + if (platform.pickup?.type === "propeller") bonus += 130; + if (platform.pickup?.type === "jetpack") bonus += 180; + if (platform.type === "green") bonus += 40; + if (platform.type === "blue") bonus += 30; + if (platform.type === "brown") bonus -= 15; + if (platform.type === "white") bonus -= 20; + return bonus + (platform.y - player.y) * 1.8 - Math.abs(platform.x - player.x) * 0.9; + }; + return rank(b) - rank(a); }); const target = candidates[0]; - const targetX = target ? target.x + target.width / 2 : game.canvas.width / 2; + const targetX = target ? target.x : game.canvas.width / 2; const dx = shortestDx(player.x, targetX, game.canvas.width); - game.input.left = dx < -12; - game.input.right = dx > 12; + game.input.left = dx < -10; + game.input.right = dx > 10; + + const monsterAhead = game.monsters.find((monster) => { + const vertical = monster.y > player.y + 40 && monster.y < player.y + 340; + const aligned = Math.abs(monster.x - player.x) < 22; + return vertical && aligned; + }); + game.input.shoot = Boolean(monsterAhead); }, 24); })() `); - await delay(3000); - await client.screenshot("/workspace/skybound-runtime-live.png"); - const liveRuntime = await client.evaluate(`(() => ({ - state: window.skyboundGame.state, - score: window.skyboundGame.score, - heightMeters: Math.floor((window.skyboundGame.maxHeight - window.skyboundGame.startHeight) * 0.36), - streak: window.skyboundGame.styleStreak - }))()`); - - await delay(12000); - await client.screenshot("/workspace/skybound-runtime-play.png"); + await delay(3500); + await client.screenshot("/workspace/doodle-parody-live-01.png"); + const midRun = await client.evaluate(`(() => { + const game = window.doodleJumpParody; + const typeCounts = game.platforms.reduce((acc, platform) => { + acc[platform.type] = (acc[platform.type] || 0) + 1; + return acc; + }, {}); + return { + state: game.state, + score: game.score, + cameraY: Math.floor(game.cameraY), + monsters: game.monsters.length, + bullets: game.bullets.length, + pickups: game.platforms.filter((platform) => platform.pickup && !platform.pickup.used).map((platform) => platform.pickup.type), + typeCounts + }; + })()`); + await delay(15000); + await client.screenshot("/workspace/doodle-parody-play-01.png"); const runtime = await client.evaluate(`(() => { - const game = window.skyboundGame; + const game = window.doodleJumpParody; const typeCounts = game.platforms.reduce((acc, platform) => { acc[platform.type] = (acc[platform.type] || 0) + 1; return acc; @@ -217,61 +250,68 @@ async function main() { return { state: game.state, score: game.score, - maxHeightMeters: Math.floor((game.maxHeight - game.startHeight) * 0.36), - streak: game.styleStreak, - maxStreak: game.maxStyleStreak, - enemiesVisible: game.enemies.length, - pickupsVisible: game.pickups.length, - typeCounts, + bestScore: game.bestScore, + monstersVisible: game.monsters.length, + bulletsVisible: game.bullets.length, + pickupsVisible: game.platforms.filter((platform) => platform.pickup && !platform.pickup.used).length, + typeCounts }; })()`); await client.evaluate(` (() => { - clearInterval(window.__skyboundPilot); - window.skyboundGame.input.left = false; - window.skyboundGame.input.right = false; - window.skyboundGame.endRun(); + clearInterval(window.__doodlePilot); + const game = window.doodleJumpParody; + game.input.left = false; + game.input.right = false; + game.input.shoot = false; + game.gameOver(); })() `); await delay(400); - await client.screenshot("/workspace/skybound-runtime-gameover.png"); + await client.screenshot("/workspace/doodle-parody-gameover-01.png"); const gameOverSummary = await client.evaluate(`(() => ({ - state: window.skyboundGame.state, + state: window.doodleJumpParody.state, finalScore: document.getElementById("finalScore")?.textContent ?? null, - finalHeight: document.getElementById("finalHeight")?.textContent ?? null, - finalStreak: document.getElementById("finalStreak")?.textContent ?? null + finalBest: document.getElementById("finalBest")?.textContent ?? null }))()`); const reloadPromise = client.once("Page.loadEventFired"); await client.send("Page.reload"); await reloadPromise; - await delay(1000); + await client.evaluate(` + new Promise((resolve) => { + const check = () => { + const button = document.getElementById("startButton"); + const game = window.doodleJumpParody; + if (button && !button.disabled && game && game.state === "start") { + resolve(true); + return; + } + setTimeout(check, 100); + }; + check(); + }) + `); const persisted = await client.evaluate(`(() => ({ - bestHud: document.getElementById("hudBest")?.textContent ?? null, - startVisible: !document.getElementById("startScreen")?.classList.contains("is-hidden"), - soundToggle: document.getElementById("soundToggle")?.textContent ?? null + bestScore: window.doodleJumpParody.bestScore, + soundToggle: document.getElementById("soundToggle")?.textContent ?? null, + startVisible: !document.getElementById("startScreen")?.classList.contains("is-hidden") }))()`); - console.log( - JSON.stringify( - { - initial, - pausedState, - resumedState, - liveRuntime, - runtime, - gameOverSummary, - persisted, - consoleMessages, - pageErrors, - }, - null, - 2, - ), - ); + console.log(JSON.stringify({ + initial, + pausedState, + resumedState, + midRun, + runtime, + gameOverSummary, + persisted, + consoleMessages, + pageErrors + }, null, 2)); client.socket.close(); } diff --git a/styles.css b/styles.css index a745bf1..df8707f 100644 --- a/styles.css +++ b/styles.css @@ -1,17 +1,12 @@ :root { - --bg-1: #9fd4ff; - --bg-2: #f8d8ff; - --bg-3: #fff6c1; - --ink: #193052; - --paper: rgba(255, 255, 255, 0.88); - --paper-strong: rgba(255, 255, 255, 0.96); - --shadow: 0 24px 70px rgba(37, 60, 99, 0.18); - --border: rgba(25, 48, 82, 0.16); - --accent: #ff8f6b; - --accent-2: #7d8cff; - --success: #65d29b; - --danger: #ff6f91; - --warning: #ffd166; + --ink: #1f1b17; + --paper: #f7f2e8; + --grid-a: rgba(217, 175, 141, 0.3); + --grid-b: rgba(217, 175, 141, 0.16); + --accent: #f68d3e; + --accent-dark: #d96f23; + --panel: rgba(255, 253, 247, 0.94); + --shadow: 0 24px 60px rgba(50, 34, 18, 0.16); } * { @@ -25,471 +20,315 @@ body { } body { - position: relative; - overflow-x: hidden; font-family: "Inter", sans-serif; color: var(--ink); background: - radial-gradient(circle at top left, rgba(255, 255, 255, 0.8), transparent 28%), - radial-gradient(circle at top right, rgba(255, 247, 214, 0.65), transparent 32%), - linear-gradient(180deg, #bce5ff 0%, #daf0ff 24%, #f7e7ff 65%, #fff6d5 100%); -} - -body::before, -body::after { - content: ""; - position: fixed; - inset: auto; - width: 34vmax; - height: 34vmax; - border-radius: 50%; - filter: blur(20px); - opacity: 0.26; - pointer-events: none; - z-index: -2; -} - -body::before { - top: -10vmax; - right: -6vmax; - background: radial-gradient(circle, rgba(255, 164, 185, 0.7), transparent 68%); -} - -body::after { - bottom: -14vmax; - left: -8vmax; - background: radial-gradient(circle, rgba(118, 195, 255, 0.75), transparent 64%); -} - -.page-noise { - position: fixed; - inset: 0; - pointer-events: none; - z-index: -1; - opacity: 0.18; - background-image: - radial-gradient(circle at 12% 18%, rgba(25, 48, 82, 0.14) 0 1px, transparent 1px), - radial-gradient(circle at 70% 30%, rgba(25, 48, 82, 0.12) 0 1px, transparent 1px), - radial-gradient(circle at 25% 75%, rgba(25, 48, 82, 0.14) 0 1px, transparent 1px), - radial-gradient(circle at 85% 80%, rgba(25, 48, 82, 0.12) 0 1px, transparent 1px); - background-size: 28px 28px, 32px 32px, 26px 26px, 34px 34px; + linear-gradient(var(--grid-b) 1px, transparent 1px), + linear-gradient(90deg, var(--grid-b) 1px, transparent 1px), + linear-gradient(var(--grid-a) 1px, transparent 1px), + linear-gradient(90deg, var(--grid-a) 1px, transparent 1px), + var(--paper); + background-size: 18px 18px, 18px 18px, 90px 90px, 90px 90px, auto; } -.app-shell { - width: min(1400px, calc(100vw - 32px)); - margin: 0 auto; - padding: 28px 0 36px; +.page-shell { + min-height: 100vh; + display: grid; + place-items: center; + gap: 18px; + padding: 20px 16px 24px; } -.hero-bar { +.masthead { + width: min(100%, 460px); display: flex; justify-content: space-between; - gap: 24px; align-items: flex-end; - margin-bottom: 22px; - padding: 22px 24px; - background: linear-gradient(135deg, rgba(255, 255, 255, 0.68), rgba(255, 255, 255, 0.48)); - border: 2px solid rgba(25, 48, 82, 0.12); - border-radius: 28px; - box-shadow: var(--shadow); - backdrop-filter: blur(10px); + gap: 18px; } -.eyebrow { - margin: 0 0 6px; - font-size: 0.82rem; - letter-spacing: 0.2em; +.kicker { + margin: 0 0 4px; + font-size: 0.72rem; + letter-spacing: 0.16em; text-transform: uppercase; - color: rgba(25, 48, 82, 0.62); + opacity: 0.7; } -.hero-bar h1 { +.masthead h1 { margin: 0; - font-family: "Baloo 2", cursive; - font-weight: 800; - font-size: clamp(2.6rem, 4.4vw, 4.6rem); - line-height: 0.95; -} - -.hero-copy { - max-width: 720px; - margin: 10px 0 0; - color: rgba(25, 48, 82, 0.78); - font-size: 1.02rem; - line-height: 1.6; -} - -.hero-stats { - display: grid; - grid-template-columns: repeat(2, minmax(140px, 1fr)); - gap: 12px; - min-width: 280px; -} - -.pill, -.hud-card, -.panel-card, -.overlay-card, -.touch-button, -.icon-button, -.primary-button { - border: 2px solid var(--border); - box-shadow: 0 12px 26px rgba(42, 64, 102, 0.12); -} - -.pill { - display: grid; - gap: 4px; - padding: 14px 16px; - border-radius: 18px; - background: rgba(255, 255, 255, 0.72); -} - -.pill span, -.hud-card span, -.result-grid span, -.mini-grid span { - font-size: 0.76rem; - letter-spacing: 0.08em; - text-transform: uppercase; - color: rgba(25, 48, 82, 0.62); -} - -.pill strong { - font-size: 1rem; + font-family: "Bangers", cursive; + font-size: clamp(2.5rem, 8vw, 3.8rem); + letter-spacing: 0.04em; + color: #f4cf33; + -webkit-text-stroke: 3px #1f1b17; + text-shadow: 3px 3px 0 #fe7347; } -.game-layout { - display: grid; - grid-template-columns: minmax(220px, 270px) minmax(340px, 540px) minmax(220px, 270px); - gap: 24px; - align-items: start; -} - -.info-panel { - display: grid; - gap: 18px; -} - -.panel-card { - padding: 18px 18px 20px; - border-radius: 22px; - background: var(--paper); - backdrop-filter: blur(12px); -} - -.panel-card h2 { - margin: 0 0 12px; - font-family: "Baloo 2", cursive; - font-size: 1.42rem; - line-height: 1; +.masthead h1 span { + display: block; + font-size: 1.1rem; + letter-spacing: 0.18em; + color: #fff; + -webkit-text-stroke: 1px #1f1b17; + text-shadow: none; + margin-top: -2px; } -.panel-card p, -.tip-list { +.subcopy, +.parody-note, +.run-note { margin: 0; - color: rgba(25, 48, 82, 0.78); - line-height: 1.6; -} - -.tip-list { - padding-left: 18px; -} - -.legend-list { - display: grid; - gap: 10px; - color: rgba(25, 48, 82, 0.82); + line-height: 1.4; + opacity: 0.82; } -.legend-list div { - display: flex; - align-items: center; - gap: 10px; +.parody-note { + max-width: 120px; + text-align: right; + font-size: 0.88rem; } -.swatch { - width: 18px; - height: 18px; - border-radius: 999px; - border: 2px solid rgba(25, 48, 82, 0.4); -} - -.swatch-normal { background: #8ddf95; } -.swatch-moving { background: #71caff; } -.swatch-break { background: #ffc96e; } -.swatch-ghost { background: #ccb9ff; } -.swatch-boost { background: #ff9aa2; } - -.game-column { - display: grid; - gap: 18px; +.game-stage { + width: min(100%, 460px); } .game-frame { position: relative; width: 100%; - padding: 16px; - border-radius: 32px; - background: - linear-gradient(180deg, rgba(255, 255, 255, 0.42), rgba(255, 255, 255, 0.22)), - linear-gradient(135deg, rgba(125, 140, 255, 0.16), rgba(255, 143, 107, 0.16)); - border: 2px solid rgba(25, 48, 82, 0.14); + padding: 12px; + border-radius: 28px; + background: rgba(255, 255, 255, 0.74); + border: 2px solid rgba(31, 27, 23, 0.18); box-shadow: var(--shadow); - backdrop-filter: blur(12px); } #gameCanvas { display: block; width: 100%; height: auto; - border-radius: 24px; - background: linear-gradient(180deg, #d6f1ff 0%, #ebf9ff 45%, #fffbee 100%); - border: 3px solid rgba(25, 48, 82, 0.18); + border-radius: 20px; + border: 2px solid rgba(31, 27, 23, 0.18); + background: #f7f2e8; } -.hud { +.top-ui { position: absolute; - inset: 28px 30px auto 30px; + top: 14px; + left: 18px; + right: 18px; display: flex; - justify-content: space-between; align-items: flex-start; - gap: 14px; + justify-content: space-between; pointer-events: none; } -.hud-group { - display: grid; - grid-template-columns: repeat(2, minmax(80px, 1fr)); - gap: 10px; -} - -.hud-card { - display: grid; - gap: 2px; - min-width: 92px; - padding: 12px 14px; - border-radius: 18px; - background: rgba(255, 255, 255, 0.84); -} - -.hud-card strong { - font-family: "Baloo 2", cursive; - font-size: 1.36rem; - line-height: 1; +.hud-score { + min-width: 110px; + font-family: "Patrick Hand SC", cursive; + font-size: clamp(2rem, 5vw, 2.8rem); + font-weight: 700; + letter-spacing: 0.04em; + color: #1f1b17; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.75); } -.hud-actions { +.hud-buttons { display: flex; - flex-direction: column; - gap: 10px; + gap: 8px; pointer-events: auto; } -.icon-button, -.primary-button, +.hud-button, +.main-button, .touch-button { + appearance: none; + border: 2px solid rgba(31, 27, 23, 0.28); + background: rgba(255, 255, 255, 0.86); + color: var(--ink); cursor: pointer; font: inherit; - border-radius: 16px; - color: var(--ink); - transition: transform 0.18s ease, box-shadow 0.18s ease, background 0.18s ease; + transition: transform 0.15s ease, box-shadow 0.15s ease, background 0.15s ease; + box-shadow: 0 8px 20px rgba(50, 34, 18, 0.12); } -.icon-button:hover, -.primary-button:hover, +.hud-button:hover, +.main-button:hover, .touch-button:hover { - transform: translateY(-2px); - box-shadow: 0 16px 28px rgba(42, 64, 102, 0.18); + transform: translateY(-1px); } -.icon-button { - padding: 11px 14px; - background: rgba(255, 255, 255, 0.86); +.hud-button { + width: 42px; + height: 42px; + border-radius: 14px; + font-size: 1rem; + font-weight: 700; } -.primary-button { - padding: 14px 24px; - background: linear-gradient(135deg, var(--accent), #ffb15d); - color: #fff; - border-color: rgba(255, 115, 72, 0.35); - font-weight: 700; +.canvas-badge { + position: absolute; + right: 20px; + bottom: 18px; + padding: 4px 10px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.78); + border: 1px solid rgba(31, 27, 23, 0.18); + font-size: 0.72rem; + letter-spacing: 0.16em; + text-transform: uppercase; + opacity: 0.75; } -.screen-overlay { +.overlay-screen { position: absolute; - inset: 16px; + inset: 12px; display: grid; place-items: center; - background: rgba(32, 53, 86, 0.22); - backdrop-filter: blur(6px); - border-radius: 24px; - transition: opacity 0.22s ease, transform 0.22s ease; + background: rgba(247, 242, 232, 0.75); + border-radius: 20px; + transition: opacity 0.18s ease, transform 0.18s ease; } -.screen-overlay.is-hidden { +.overlay-screen.is-hidden { opacity: 0; pointer-events: none; - transform: scale(0.98); + transform: scale(0.985); } .overlay-card { - width: min(88%, 380px); - padding: 24px 24px 22px; + width: min(84%, 300px); + padding: 22px 18px 18px; border-radius: 24px; - background: var(--paper-strong); + background: var(--panel); + border: 2px solid rgba(31, 27, 23, 0.14); text-align: center; + box-shadow: 0 12px 30px rgba(50, 34, 18, 0.12); } .overlay-card h2 { margin: 0 0 10px; - font-family: "Baloo 2", cursive; + font-family: "Patrick Hand SC", cursive; font-size: 2rem; - line-height: 0.96; } .overlay-card p { margin: 0; - line-height: 1.6; - color: rgba(25, 48, 82, 0.8); + line-height: 1.5; } -.button-row { - display: flex; - justify-content: center; - margin-top: 18px; +.control-line, +.loading-label { + margin-top: 10px !important; + font-size: 0.92rem; + opacity: 0.74; +} + +.main-button { + margin-top: 16px; + padding: 12px 18px; + border-radius: 14px; + background: linear-gradient(180deg, var(--accent), var(--accent-dark)); + color: #fffdf6; + font-weight: 700; +} + +.main-button:disabled { + cursor: wait; + opacity: 0.7; } -.mini-grid, -.result-grid { +.result-stack { display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; - margin-top: 18px; + margin-top: 10px; } -.mini-grid div, -.result-grid div { - display: grid; - gap: 4px; - padding: 12px; - border-radius: 16px; - background: rgba(125, 140, 255, 0.08); +.result-stack div { + display: flex; + justify-content: space-between; + align-items: baseline; + padding: 10px 12px; + border-radius: 14px; + background: rgba(0, 0, 0, 0.04); } -.mini-grid strong, -.result-grid strong { - font-size: 1rem; +.result-stack span { + font-size: 0.82rem; + letter-spacing: 0.12em; + text-transform: uppercase; + opacity: 0.7; } -.result-grid strong { - font-family: "Baloo 2", cursive; - font-size: 1.35rem; +.result-stack strong { + font-family: "Patrick Hand SC", cursive; + font-size: 1.5rem; } .touch-controls { display: none; + gap: 12px; justify-content: center; - gap: 16px; + margin-top: 14px; } .touch-button { - width: 92px; - height: 62px; - background: rgba(255, 255, 255, 0.86); + width: 96px; + height: 60px; + border-radius: 18px; font-size: 1.8rem; font-weight: 700; } +.touch-button-shoot { + font-size: 1.35rem; + letter-spacing: 0.08em; +} + .touch-button.is-active { - background: linear-gradient(135deg, rgba(125, 140, 255, 0.28), rgba(255, 143, 107, 0.28)); transform: translateY(1px) scale(0.98); + background: rgba(245, 207, 51, 0.35); } -.footer-note { - margin-top: 20px; - padding: 0 4px; +.run-note { + width: min(100%, 460px); text-align: center; - color: rgba(25, 48, 82, 0.72); + font-size: 0.94rem; } code { - padding: 2px 8px; + padding: 1px 7px; border-radius: 999px; - background: rgba(255, 255, 255, 0.68); - border: 1px solid rgba(25, 48, 82, 0.12); + background: rgba(255, 255, 255, 0.7); } -@media (max-width: 1180px) { - .game-layout { - grid-template-columns: 1fr minmax(340px, 540px) 1fr; - } - - .hero-bar { +@media (max-width: 560px) { + .masthead { flex-direction: column; align-items: flex-start; } -} - -@media (max-width: 980px) { - .app-shell { - width: min(720px, calc(100vw - 20px)); - padding-top: 18px; - } - - .game-layout { - grid-template-columns: 1fr; - } - - .info-panel { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - .game-column { - order: -1; + .parody-note { + max-width: none; + text-align: left; } } -@media (max-width: 720px) { - .hero-bar { - padding: 18px; - border-radius: 24px; - } - - .hero-stats, - .info-panel, - .mini-grid, - .result-grid { - grid-template-columns: 1fr; - } - - .game-frame { - padding: 12px; - border-radius: 24px; - } - - .hud { - inset: 22px 24px auto 24px; - flex-direction: column; - align-items: stretch; - } - - .hud-group { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } - - .hud-actions { - flex-direction: row; - justify-content: flex-end; - } - +@media (max-width: 700px), (pointer: coarse) { .touch-controls { display: flex; + position: fixed; + left: 0; + right: 0; + bottom: 12px; + z-index: 20; } -} -@media (pointer: coarse) { - .touch-controls { - display: flex; + .page-shell { + padding-bottom: 96px; + } + + .run-note { + display: none; } } From bfd4e19d175fadd850092efd11e9dfee1e103f70 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 6 Mar 2026 03:20:19 +0000 Subject: [PATCH 03/17] Fix brown platform breaks and monster stomps Co-authored-by: ilikevibecoding --- assets/audio/break.wav | Bin 0 -> 61518 bytes game.js | 76 ++++++++++++++++++++++++++++++++--------- smoke-test.mjs | 62 +++++++++++++++++++++++++++++++++ 3 files changed, 122 insertions(+), 16 deletions(-) create mode 100644 assets/audio/break.wav diff --git a/assets/audio/break.wav b/assets/audio/break.wav new file mode 100644 index 0000000000000000000000000000000000000000..9ae13a596f543cfd3a472fe3673820ebad08a7d3 GIT binary patch literal 61518 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 DrutLS literal 0 HcmV?d00001 diff --git a/game.js b/game.js index cd94ee6..d479f74 100644 --- a/game.js +++ b/game.js @@ -8,12 +8,12 @@ const PLATFORM_HEIGHT = 20; const PLAYER_WIDTH = 62; const PLAYER_HEIGHT = 60; - const MOVE_SPEED = 178; - const GRAVITY = -1880; - const JUMP_VELOCITY = 835; - const SPRING_VELOCITY = 1080; - const PROPELLER_VELOCITY = 930; - const JETPACK_VELOCITY = 1185; + const MOVE_SPEED = 188; + const GRAVITY = -1940; + const JUMP_VELOCITY = 860; + const SPRING_VELOCITY = 1110; + const PROPELLER_VELOCITY = 960; + const JETPACK_VELOCITY = 1210; const CAMERA_THRESHOLD = 305; const DEATH_BUFFER = 110; const BULLET_SPEED = 880; @@ -45,6 +45,7 @@ }; const AUDIO_URLS = { + break: "assets/audio/break.wav", jump: "assets/audio/jump.wav", gameOver: "assets/audio/gameover.wav", spring: "assets/audio/spring.mp3", @@ -590,6 +591,14 @@ this.player.prevY >= platform.y && this.player.y <= platform.y ) { + if (platform.type === "brown") { + platform.active = false; + platform.brokenTimer = 0.28; + this.audio.play("break", 0.45); + this.effects.push({ x: platform.x, y: platform.y + 12, vy: 20, life: 0.35, text: "CRACK!" }); + return; + } + let bounceVelocity = JUMP_VELOCITY; if (platform.pickup?.type === "spring" && !platform.pickup.used) { @@ -600,10 +609,6 @@ this.audio.play("jump", 0.34); } - if (platform.type === "brown") { - platform.active = false; - platform.brokenTimer = 0.28; - } if (platform.type === "white") { platform.active = false; platform.vanishTimer = 0.18; @@ -681,14 +686,17 @@ const overlapY = Math.min(this.player.y + this.player.height, monster.y + monster.height) - Math.max(this.player.y, monster.y); - if (overlapX > 12 && overlapY > 8) { - const stompLine = monster.y + monster.height * 0.62; - if (this.player.vy <= 0 && this.player.prevY >= stompLine && this.player.y <= stompLine) { + if (overlapX > 12 && overlapY >= 6) { + const stompLine = monster.y + monster.height - 6; + const stompedFromAbove = this.player.prevY >= stompLine && this.player.y <= stompLine; + if (this.player.vy <= 0 && stompedFromAbove) { monster.dead = true; this.player.y = stompLine; - this.player.vy = JUMP_VELOCITY * 0.92; + this.player.vy = JUMP_VELOCITY * 0.98; this.audio.play("monster", 0.42); this.effects.push({ x: monster.x, y: monster.y + 16, vy: 28, life: 0.4, text: "BOUNCE!" }); + this.monsters = this.monsters.filter((activeMonster) => !activeMonster.dead); + return; } else { this.gameOver(); return; @@ -701,7 +709,18 @@ cleanupWorld() { const floor = this.cameraY - 80; - this.platforms = this.platforms.filter((platform) => platform.y > floor - 40); + this.platforms = this.platforms.filter((platform) => { + if (platform.y <= floor - 40) { + return false; + } + if (!platform.active && platform.type === "brown" && platform.brokenTimer <= 0) { + return false; + } + if (!platform.active && platform.type === "white" && platform.vanishTimer <= 0) { + return false; + } + return true; + }); this.monsters = this.monsters.filter((monster) => monster.y > floor - 60); } @@ -834,6 +853,13 @@ drawPlatforms() { for (const platform of this.platforms) { + if (!platform.active && platform.type === "brown" && platform.brokenTimer <= 0) { + continue; + } + if (!platform.active && platform.type === "white" && platform.vanishTimer <= 0) { + continue; + } + const screenY = this.worldToScreen(platform.y); const image = platform.type === "green" @@ -846,8 +872,25 @@ this.drawImageOrFallback( image, - (img) => this.ctx.drawImage(img, platform.x - platform.width / 2, screenY - 12, platform.width, 18), + (img) => { + this.ctx.save(); + if (!platform.active && platform.type === "brown") { + this.ctx.globalAlpha = clamp(platform.brokenTimer / 0.28, 0, 1); + } + if (!platform.active && platform.type === "white") { + this.ctx.globalAlpha = clamp(platform.vanishTimer / 0.18, 0, 1); + } + this.ctx.drawImage(img, platform.x - platform.width / 2, screenY - 12, platform.width, 18); + this.ctx.restore(); + }, () => { + this.ctx.save(); + if (!platform.active && platform.type === "brown") { + this.ctx.globalAlpha = clamp(platform.brokenTimer / 0.28, 0, 1); + } + if (!platform.active && platform.type === "white") { + this.ctx.globalAlpha = clamp(platform.vanishTimer / 0.18, 0, 1); + } this.ctx.fillStyle = platform.type === "green" ? "#79c937" : platform.type === "blue" ? "#6bb8f2" : platform.type === "brown" ? "#8d6338" : "#ffffff"; this.ctx.strokeStyle = "#191511"; this.ctx.lineWidth = 2; @@ -855,6 +898,7 @@ this.ctx.roundRect(platform.x - platform.width / 2, screenY - 12, platform.width, 18, 12); this.ctx.fill(); this.ctx.stroke(); + this.ctx.restore(); }, ); diff --git a/smoke-test.mjs b/smoke-test.mjs index 4c4d889..30590cc 100644 --- a/smoke-test.mjs +++ b/smoke-test.mjs @@ -171,6 +171,66 @@ async function main() { await delay(200); const resumedState = await client.evaluate(`window.doodleJumpParody.state`); + const brownPlatformTest = await client.evaluate(`(() => { + const game = window.doodleJumpParody; + game.resetWorld(); + game.state = "playing"; + game.platforms = [{ + x: 216, + y: 220, + width: 82, + type: "brown", + active: true, + vx: 0, + brokenTimer: 0, + vanishTimer: 0, + pickup: null + }]; + game.monsters = []; + game.player.x = 216; + game.player.prevY = 250; + game.player.y = 210; + game.player.vy = -180; + game.player.boostTimer = 0; + game.handlePlatformCollisions(); + const afterImpactVy = game.player.vy; + const breakTimer = game.platforms[0]?.brokenTimer ?? 0; + game.updatePlatforms(0.3); + game.cleanupWorld(); + return { + afterImpactVy, + platformActiveAfterImpact: game.platforms[0]?.active ?? false, + breakTimerStarted: breakTimer > 0, + removedAfterCleanup: game.platforms.length === 0 + }; + })()`); + + const monsterStompTest = await client.evaluate(`(() => { + const game = window.doodleJumpParody; + game.resetWorld(); + game.state = "playing"; + game.monsters = [{ + x: 216, + y: 240, + width: 62, + height: 42, + vx: 0, + dead: false + }]; + game.player.x = 216; + game.player.prevY = 282; + game.player.y = 274; + game.player.vy = -160; + game.handleMonsterCollisions(); + return { + state: game.state, + playerVy: game.player.vy, + monsterCount: game.monsters.length + }; + })()`); + + await client.evaluate(`window.doodleJumpParody.resetWorld()`); + await client.evaluate(` (() => { const shortestDx = (from, to, width) => { @@ -305,6 +365,8 @@ async function main() { initial, pausedState, resumedState, + brownPlatformTest, + monsterStompTest, midRun, runtime, gameOverSummary, From 3a9fe80e9eca024b29baee9f4402705e2e88c6c6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 6 Mar 2026 03:34:30 +0000 Subject: [PATCH 04/17] Fix pickup sprites and platform fairness Co-authored-by: ilikevibecoding --- game.js | 110 +++++++++++++++++++++++++++++++++++++++++++------ smoke-test.mjs | 53 ++++++++++++++++++++++++ 2 files changed, 150 insertions(+), 13 deletions(-) diff --git a/game.js b/game.js index d479f74..638db96 100644 --- a/game.js +++ b/game.js @@ -8,12 +8,12 @@ const PLATFORM_HEIGHT = 20; const PLAYER_WIDTH = 62; const PLAYER_HEIGHT = 60; - const MOVE_SPEED = 188; - const GRAVITY = -1940; - const JUMP_VELOCITY = 860; - const SPRING_VELOCITY = 1110; - const PROPELLER_VELOCITY = 960; - const JETPACK_VELOCITY = 1210; + const MOVE_SPEED = 182; + const GRAVITY = -1910; + const JUMP_VELOCITY = 872; + const SPRING_VELOCITY = 1115; + const PROPELLER_VELOCITY = 972; + const JETPACK_VELOCITY = 1225; const CAMERA_THRESHOLD = 305; const DEATH_BUFFER = 110; const BULLET_SPEED = 880; @@ -611,7 +611,7 @@ if (platform.type === "white") { platform.active = false; - platform.vanishTimer = 0.18; + platform.vanishTimer = 0.08; } this.player.y = platform.y; @@ -733,7 +733,7 @@ spawnNextPlatform(isEarly) { const heightScore = Math.max(0, this.highestPlatformY - 100); const difficulty = clamp(heightScore / 5200, 0, 1); - const gap = isEarly ? randomRange(64, 82) : randomRange(70, 104 + difficulty * 14); + const gap = isEarly ? randomRange(64, 82) : randomRange(68, 96 + difficulty * 10); const y = this.highestPlatformY + gap; const width = randomRange(70, 92); @@ -753,7 +753,7 @@ } } - const shift = isEarly ? 78 : 120 + difficulty * 30; + const shift = isEarly ? 78 : 92 + difficulty * 16; const x = clamp( this.spawnAnchorX + randomRange(-shift, shift), width / 2 + 14, @@ -792,6 +792,28 @@ } this.platforms.push(platform); + + if (!isEarly && (type === "brown" || type === "white")) { + const supportWidth = randomRange(76, 92); + const supportX = clamp( + x + randomRange(-56, 56), + supportWidth / 2 + 14, + WIDTH - supportWidth / 2 - 14, + ); + + this.platforms.push({ + x: supportX, + y: y - randomRange(8, 20), + width: supportWidth, + type: "green", + active: true, + vx: 0, + brokenTimer: 0, + vanishTimer: 0, + pickup: chance(0.08) ? { type: "spring", x: supportX, used: false } : null, + }); + } + this.highestPlatformY = y; this.spawnAnchorX = x; } @@ -851,6 +873,16 @@ } } + drawSpriteFrame(image, frameWidth, frameHeight, frameIndex, columns, dx, dy, dw, dh) { + const totalColumns = Math.max(1, Math.floor(image.width / frameWidth)); + const totalRows = Math.max(1, Math.floor(image.height / frameHeight)); + const totalFrames = totalColumns * totalRows; + const safeIndex = ((frameIndex % totalFrames) + totalFrames) % totalFrames; + const sx = (safeIndex % columns) * frameWidth; + const sy = Math.floor(safeIndex / columns) * frameHeight; + this.ctx.drawImage(image, sx, sy, frameWidth, frameHeight, dx, dy, dw, dh); + } + drawPlatforms() { for (const platform of this.platforms) { if (!platform.active && platform.type === "brown" && platform.brokenTimer <= 0) { @@ -934,7 +966,20 @@ if (pickup.type === "propeller") { this.drawImageOrFallback( this.assets.propeller, - (img) => this.ctx.drawImage(img, pickup.x - 22, screenY - 30 + Math.sin(this.time * 16) * 2, 44, 32), + (img) => { + const frame = Math.floor(this.time * 12) % 4; + this.drawSpriteFrame( + img, + img.width / 2, + img.height / 2, + frame, + 2, + pickup.x - 22, + screenY - 30 + Math.sin(this.time * 16) * 2, + 44, + 32, + ); + }, () => { this.ctx.fillStyle = "#ffb83f"; this.ctx.fillRect(pickup.x - 8, screenY - 12, 16, 12); @@ -947,7 +992,20 @@ if (pickup.type === "jetpack") { this.drawImageOrFallback( this.assets.jetpack, - (img) => this.ctx.drawImage(img, pickup.x - 20, screenY - 34, 40, 46), + (img) => { + const frame = Math.floor(this.time * 14) % 4; + this.drawSpriteFrame( + img, + img.width / 4, + img.height / 4, + frame, + 4, + pickup.x - 20, + screenY - 34, + 40, + 46, + ); + }, () => { this.ctx.fillStyle = "#9dd6ff"; this.ctx.fillRect(pickup.x - 10, screenY - 18, 20, 24); @@ -1020,7 +1078,20 @@ if (this.player.boostType === "propeller") { this.drawImageOrFallback( this.assets.propeller, - (img) => this.ctx.drawImage(img, this.player.x - 24, screenY - this.player.height - 18 + Math.sin(this.time * 20) * 2, 48, 30), + (img) => { + const frame = Math.floor(this.time * 14) % 4; + this.drawSpriteFrame( + img, + img.width / 2, + img.height / 2, + frame, + 2, + this.player.x - 24, + screenY - this.player.height - 18 + Math.sin(this.time * 20) * 2, + 48, + 30, + ); + }, () => {}, ); } @@ -1028,7 +1099,20 @@ if (this.player.boostType === "jetpack") { this.drawImageOrFallback( this.assets.jetpack, - (img) => this.ctx.drawImage(img, this.player.x - 25, screenY - this.player.height + 2, 50, 52), + (img) => { + const frame = Math.floor(this.time * 16) % 4; + this.drawSpriteFrame( + img, + img.width / 4, + img.height / 4, + frame, + 4, + this.player.x - 25, + screenY - this.player.height + 2, + 50, + 52, + ); + }, () => {}, ); } diff --git a/smoke-test.mjs b/smoke-test.mjs index 30590cc..bedf9e0 100644 --- a/smoke-test.mjs +++ b/smoke-test.mjs @@ -229,6 +229,58 @@ async function main() { }; })()`); + const whitePlatformTest = await client.evaluate(`(() => { + const game = window.doodleJumpParody; + game.resetWorld(); + game.state = "playing"; + game.platforms = [{ + x: 216, + y: 220, + width: 82, + type: "white", + active: true, + vx: 0, + brokenTimer: 0, + vanishTimer: 0, + pickup: null + }]; + game.monsters = []; + game.player.x = 216; + game.player.prevY = 250; + game.player.y = 210; + game.player.vy = -180; + game.player.boostTimer = 0; + game.handlePlatformCollisions(); + const afterBounceVy = game.player.vy; + const vanishTimer = game.platforms[0]?.vanishTimer ?? 0; + game.updatePlatforms(0.1); + game.cleanupWorld(); + return { + afterBounceVy, + platformActiveAfterBounce: game.platforms[0]?.active ?? false, + vanishTimerStarted: vanishTimer > 0, + removedAfterCleanup: game.platforms.length === 0 + }; + })()`); + + await client.evaluate(`(() => { + const game = window.doodleJumpParody; + game.resetWorld(); + game.state = "playing"; + game.platforms = [ + { x: 170, y: 240, width: 82, type: "green", active: true, vx: 0, brokenTimer: 0, vanishTimer: 0, pickup: { type: "propeller", x: 170, used: false } }, + { x: 280, y: 360, width: 82, type: "green", active: true, vx: 0, brokenTimer: 0, vanishTimer: 0, pickup: { type: "jetpack", x: 280, used: false } } + ]; + game.monsters = []; + game.player.x = 220; + game.player.y = 150; + game.player.prevY = 150; + game.player.vy = 0; + game.cameraY = 0; + })()`); + await delay(200); + await client.screenshot("/workspace/doodle-parody-pickups-01.png"); + await client.evaluate(`window.doodleJumpParody.resetWorld()`); await client.evaluate(` @@ -367,6 +419,7 @@ async function main() { resumedState, brownPlatformTest, monsterStompTest, + whitePlatformTest, midRun, runtime, gameOverSummary, From 188d2d02284b031ee38e05ac298310ea2f40df39 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 6 Mar 2026 03:51:59 +0000 Subject: [PATCH 05/17] Add visible V2 build markers Co-authored-by: ilikevibecoding --- index.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/index.html b/index.html index 9c27f1b..18b41cd 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ - Doodle Jump Parody + Doodle Jump Parody V2 @@ -16,7 +16,7 @@

faithful browser parody

-

Doodle Jump Parody

+

Doodle Jump Parody V2

Classic graph-paper jumping, closer physics, real platform families, monsters, boosts, and upward shooting.

Parody build for personal authorized use.

@@ -34,11 +34,11 @@

Doodle Jump Parody

-
parody
+
parody v2
-

Doodle Jump Parody

+

Doodle Jump Parody V2

Bounce, wrap, shoot upward, and climb with a feel tuned closer to the original.

Move: A / D / ← / → · Shoot: Space · Pause: P

From a68e30859fc6c7d0fd4c04f47ea58b4b6f3bbef5 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 7 Mar 2026 01:51:31 +0000 Subject: [PATCH 06/17] Polish white poof and boost behavior Co-authored-by: ilikevibecoding --- assets/audio/pop.mp3 | Bin 0 -> 12288 bytes game.js | 101 ++++++++++++++++++++++++++++++++++++------- smoke-test.mjs | 56 ++++++++++++++++++++++++ 3 files changed, 142 insertions(+), 15 deletions(-) create mode 100644 assets/audio/pop.mp3 diff --git a/assets/audio/pop.mp3 b/assets/audio/pop.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..e76bc33fe421821f946e0f6b35a65a203fc81fba GIT binary patch literal 12288 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 literal 0 HcmV?d00001 diff --git a/game.js b/game.js index 638db96..31995f8 100644 --- a/game.js +++ b/game.js @@ -48,6 +48,7 @@ break: "assets/audio/break.wav", jump: "assets/audio/jump.wav", gameOver: "assets/audio/gameover.wav", + poof: "assets/audio/pop.mp3", spring: "assets/audio/spring.mp3", propeller: "assets/audio/propeller.mp3", jetpack: "assets/audio/jetpack.mp3", @@ -492,6 +493,19 @@ this.player.y += this.player.vy * dt; + if (this.player.boostTimer > 0) { + this.effects.push({ + kind: "trail", + x: this.player.x + randomRange(-16, 16), + y: this.player.y + randomRange(-8, 18), + vy: -45, + life: 0.16, + size: randomRange(18, 34), + alpha: 0.38, + color: this.player.boostType === "jetpack" ? "rgba(255, 169, 84, 0.65)" : "rgba(255,255,255,0.5)", + }); + } + if (this.input.shoot && this.player.shootCooldown <= 0) { this.fireBullet(); } @@ -558,6 +572,7 @@ this.effects = this.effects.filter((effect) => { effect.life -= dt; effect.y += effect.vy * dt; + effect.alpha = Math.max(0, (effect.alpha ?? 1) - dt * 1.8); return effect.life > 0; }); } @@ -612,6 +627,8 @@ if (platform.type === "white") { platform.active = false; platform.vanishTimer = 0.08; + this.audio.play("poof", 0.36); + this.effects.push({ x: platform.x, y: platform.y + 14, vy: 18, life: 0.28, text: "POOF!" }); } this.player.y = platform.y; @@ -680,6 +697,23 @@ this.bullets = this.bullets.filter((bullet) => !bullet.dead); this.monsters = this.monsters.filter((monster) => !monster.dead); + if (this.player.boostTimer > 0) { + for (const monster of this.monsters) { + const overlapX = Math.min(this.player.x + this.player.width / 2, monster.x + monster.width / 2) - + Math.max(this.player.x - this.player.width / 2, monster.x - monster.width / 2); + const overlapY = Math.min(this.player.y + this.player.height, monster.y + monster.height) - + Math.max(this.player.y, monster.y); + + if (overlapX > 10 && overlapY > 6) { + monster.dead = true; + this.effects.push({ x: monster.x, y: monster.y + 20, vy: 24, life: 0.32, text: "WHOOSH!" }); + } + } + + this.monsters = this.monsters.filter((monster) => !monster.dead); + return; + } + for (const monster of this.monsters) { const overlapX = Math.min(this.player.x + this.player.width / 2, monster.x + monster.width / 2) - Math.max(this.player.x - this.player.width / 2, monster.x - monster.width / 2); @@ -795,23 +829,41 @@ if (!isEarly && (type === "brown" || type === "white")) { const supportWidth = randomRange(76, 92); - const supportX = clamp( - x + randomRange(-56, 56), + const supportMinDx = type === "brown" ? 34 : 24; + const supportOffsetBase = type === "brown" ? randomRange(42, 76) : randomRange(28, 56); + const supportDirection = chance(0.5) ? -1 : 1; + let supportX = clamp( + x + supportOffsetBase * supportDirection, supportWidth / 2 + 14, WIDTH - supportWidth / 2 - 14, ); - - this.platforms.push({ - x: supportX, - y: y - randomRange(8, 20), - width: supportWidth, - type: "green", - active: true, - vx: 0, - brokenTimer: 0, - vanishTimer: 0, - pickup: chance(0.08) ? { type: "spring", x: supportX, used: false } : null, - }); + if (Math.abs(supportX - x) < supportMinDx) { + const alternateSupportX = clamp( + x - supportOffsetBase * supportDirection, + supportWidth / 2 + 14, + WIDTH - supportWidth / 2 - 14, + ); + if (Math.abs(alternateSupportX - x) > Math.abs(supportX - x)) { + supportX = alternateSupportX; + } + } + const supportY = y - (type === "brown" ? randomRange(30, 48) : randomRange(22, 36)); + + if (Math.abs(supportX - x) >= supportMinDx) { + this.platforms.push({ + x: supportX, + y: supportY, + width: supportWidth, + type: "green", + active: true, + vx: 0, + brokenTimer: 0, + vanishTimer: 0, + pickup: chance(0.08) ? { type: "spring", x: supportX, used: false } : null, + }); + } else { + platform.type = "green"; + } } this.highestPlatformY = y; @@ -1018,6 +1070,11 @@ drawMonsters() { for (const monster of this.monsters) { const screenY = this.worldToScreen(monster.y); + const fadedByBoost = this.player.boostTimer > 0 && monster.y > this.player.y && monster.y < this.player.y + 260; + if (fadedByBoost) { + this.ctx.save(); + this.ctx.globalAlpha = 0.32; + } this.drawImageOrFallback( this.assets.monster, (img) => this.ctx.drawImage(img, monster.x - monster.width / 2, screenY - monster.height, monster.width, monster.height), @@ -1031,6 +1088,9 @@ this.ctx.stroke(); }, ); + if (fadedByBoost) { + this.ctx.restore(); + } } } @@ -1128,7 +1188,18 @@ for (const effect of this.effects) { const screenY = this.worldToScreen(effect.y); - this.ctx.globalAlpha = clamp(effect.life / 0.5, 0, 1); + this.ctx.globalAlpha = effect.alpha ?? clamp(effect.life / 0.5, 0, 1); + if (effect.kind === "trail") { + this.ctx.save(); + this.ctx.strokeStyle = effect.color ?? "rgba(255,255,255,0.5)"; + this.ctx.lineWidth = 4; + this.ctx.beginPath(); + this.ctx.moveTo(effect.x, screenY - effect.size * 0.2); + this.ctx.lineTo(effect.x, screenY + effect.size); + this.ctx.stroke(); + this.ctx.restore(); + continue; + } this.ctx.strokeText(effect.text, effect.x, screenY); this.ctx.fillText(effect.text, effect.x, screenY); } diff --git a/smoke-test.mjs b/smoke-test.mjs index bedf9e0..65548ea 100644 --- a/smoke-test.mjs +++ b/smoke-test.mjs @@ -263,6 +263,60 @@ async function main() { }; })()`); + const boostProtectionTest = await client.evaluate(`(() => { + const game = window.doodleJumpParody; + game.resetWorld(); + game.state = "playing"; + game.monsters = [{ + x: 216, + y: 250, + width: 62, + height: 42, + vx: 0, + dead: false + }]; + game.player.x = 216; + game.player.y = 230; + game.player.prevY = 228; + game.player.vy = 980; + game.player.boostType = "jetpack"; + game.player.boostTimer = 1.1; + game.handleMonsterCollisions(); + return { + state: game.state, + monsterCount: game.monsters.length, + playerBoostTimer: game.player.boostTimer + }; + })()`); + + const supportSpacingTest = await client.evaluate(`(() => { + const game = window.doodleJumpParody; + game.resetWorld(); + game.platforms = []; + game.monsters = []; + game.highestPlatformY = 1400; + game.spawnAnchorX = 216; + const samples = []; + for (let i = 0; i < 120; i += 1) { + game.platforms = []; + game.monsters = []; + game.spawnNextPlatform(false); + const hazard = game.platforms.find((platform) => platform.type === "brown" || platform.type === "white"); + if (!hazard) continue; + const support = game.platforms.find((platform) => platform !== hazard && platform.type === "green"); + if (support) { + samples.push({ + type: hazard.type, + dx: Math.abs(hazard.x - support.x), + dy: Math.abs(hazard.y - support.y) + }); + } + } + const minDx = samples.length ? Math.min(...samples.map((sample) => sample.dx)) : null; + const minDy = samples.length ? Math.min(...samples.map((sample) => sample.dy)) : null; + return { count: samples.length, minDx, minDy }; + })()`); + await client.evaluate(`(() => { const game = window.doodleJumpParody; game.resetWorld(); @@ -420,6 +474,8 @@ async function main() { brownPlatformTest, monsterStompTest, whitePlatformTest, + boostProtectionTest, + supportSpacingTest, midRun, runtime, gameOverSummary, From 50c106b3603a26230acae20c87fc57dfcafdaf8f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 7 Mar 2026 02:02:15 +0000 Subject: [PATCH 07/17] Bump visible build marker to V3 Co-authored-by: ilikevibecoding --- index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index 18b41cd..1a6fbae 100644 --- a/index.html +++ b/index.html @@ -3,8 +3,8 @@ - - Doodle Jump Parody V2 + + Doodle Jump Parody V3 @@ -16,7 +16,7 @@

faithful browser parody

-

Doodle Jump Parody V2

+

Doodle Jump Parody V3

Classic graph-paper jumping, closer physics, real platform families, monsters, boosts, and upward shooting.

Parody build for personal authorized use.

@@ -34,11 +34,11 @@

Doodle Jump Parody V2

-
parody v2
+
parody v3
-

Doodle Jump Parody V2

+

Doodle Jump Parody V3

Bounce, wrap, shoot upward, and climb with a feel tuned closer to the original.

Move: A / D / ← / → · Shoot: Space · Pause: P

From 1b872ba406730f39cd113ad1521ecfe10e933a2f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 7 Mar 2026 02:23:36 +0000 Subject: [PATCH 08/17] Strengthen boost safety and support spacing Co-authored-by: ilikevibecoding --- game.js | 36 ++++++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/game.js b/game.js index 31995f8..bd9369e 100644 --- a/game.js +++ b/game.js @@ -19,6 +19,7 @@ const BULLET_SPEED = 880; const SHOT_COOLDOWN = 0.23; const MAX_DT = 1 / 30; + const BOOST_MONSTER_CLEARANCE = 280; const clamp = (value, min, max) => Math.max(min, Math.min(max, value)); const randomRange = (min, max) => min + Math.random() * (max - min); @@ -504,6 +505,16 @@ alpha: 0.38, color: this.player.boostType === "jetpack" ? "rgba(255, 169, 84, 0.65)" : "rgba(255,255,255,0.5)", }); + this.effects.push({ + kind: "burst", + x: this.player.x, + y: this.player.y + 16, + vy: -30, + life: 0.14, + radius: this.player.boostType === "jetpack" ? 46 : 34, + alpha: 0.22, + color: this.player.boostType === "jetpack" ? "rgba(255, 200, 128, 0.65)" : "rgba(255,255,255,0.55)", + }); } if (this.input.shoot && this.player.shootCooldown <= 0) { @@ -627,8 +638,9 @@ if (platform.type === "white") { platform.active = false; platform.vanishTimer = 0.08; - this.audio.play("poof", 0.36); - this.effects.push({ x: platform.x, y: platform.y + 14, vy: 18, life: 0.28, text: "POOF!" }); + this.audio.play("poof", 0.7); + this.effects.push({ x: platform.x, y: platform.y + 14, vy: 18, life: 0.3, text: "POOF!" }); + this.effects.push({ kind: "burst", x: platform.x, y: platform.y + 8, vy: 0, life: 0.18, radius: 30, alpha: 0.34, color: "rgba(255,255,255,0.85)" }); } this.player.y = platform.y; @@ -699,14 +711,20 @@ if (this.player.boostTimer > 0) { for (const monster of this.monsters) { + const verticalDelta = monster.y - this.player.y; + const horizontalDelta = Math.abs(monster.x - this.player.x); const overlapX = Math.min(this.player.x + this.player.width / 2, monster.x + monster.width / 2) - Math.max(this.player.x - this.player.width / 2, monster.x - monster.width / 2); const overlapY = Math.min(this.player.y + this.player.height, monster.y + monster.height) - Math.max(this.player.y, monster.y); - if (overlapX > 10 && overlapY > 6) { + if ( + (verticalDelta > -60 && verticalDelta < BOOST_MONSTER_CLEARANCE && horizontalDelta < 90) || + (overlapX > 10 && overlapY > 6) + ) { monster.dead = true; this.effects.push({ x: monster.x, y: monster.y + 20, vy: 24, life: 0.32, text: "WHOOSH!" }); + this.effects.push({ kind: "burst", x: monster.x, y: monster.y + 12, vy: 6, life: 0.18, radius: 28, alpha: 0.25, color: "rgba(255,245,220,0.7)" }); } } @@ -829,7 +847,7 @@ if (!isEarly && (type === "brown" || type === "white")) { const supportWidth = randomRange(76, 92); - const supportMinDx = type === "brown" ? 34 : 24; + const supportMinDx = type === "brown" ? 56 : 38; const supportOffsetBase = type === "brown" ? randomRange(42, 76) : randomRange(28, 56); const supportDirection = chance(0.5) ? -1 : 1; let supportX = clamp( @@ -1200,6 +1218,16 @@ this.ctx.restore(); continue; } + if (effect.kind === "burst") { + this.ctx.save(); + this.ctx.strokeStyle = effect.color ?? "rgba(255,255,255,0.6)"; + this.ctx.lineWidth = 5; + this.ctx.beginPath(); + this.ctx.arc(effect.x, screenY, effect.radius, 0, Math.PI * 2); + this.ctx.stroke(); + this.ctx.restore(); + continue; + } this.ctx.strokeText(effect.text, effect.x, screenY); this.ctx.fillText(effect.text, effect.x, screenY); } From 433a8da81879386caeb0d7ef7da45df002fe01d6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 7 Mar 2026 02:43:06 +0000 Subject: [PATCH 09/17] Bump visible build marker to V4 Co-authored-by: ilikevibecoding --- index.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/index.html b/index.html index 1a6fbae..40a6ae5 100644 --- a/index.html +++ b/index.html @@ -3,8 +3,8 @@ - - Doodle Jump Parody V3 + + Doodle Jump Parody V4 @@ -16,7 +16,7 @@

faithful browser parody

-

Doodle Jump Parody V3

+

Doodle Jump Parody V4

Classic graph-paper jumping, closer physics, real platform families, monsters, boosts, and upward shooting.

Parody build for personal authorized use.

@@ -34,11 +34,11 @@

Doodle Jump Parody V3

-
parody v3
+
parody v4
-

Doodle Jump Parody V3

+

Doodle Jump Parody V4

Bounce, wrap, shoot upward, and climb with a feel tuned closer to the original.

Move: A / D / ← / → · Shoot: Space · Pause: P

From 9cf7813d7fb74524142ce3f46998fffecf93d01b Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sat, 7 Mar 2026 03:37:54 +0000 Subject: [PATCH 10/17] Ban stacked hazard supports Co-authored-by: ilikevibecoding --- game.js | 82 +++++++++++++++++++++++--------------------------- smoke-test.mjs | 26 ++++++++-------- 2 files changed, 51 insertions(+), 57 deletions(-) diff --git a/game.js b/game.js index bd9369e..d55aba0 100644 --- a/game.js +++ b/game.js @@ -20,6 +20,7 @@ const SHOT_COOLDOWN = 0.23; const MAX_DT = 1 / 30; const BOOST_MONSTER_CLEARANCE = 280; + const BOOST_INVULNERABLE_EXTRA = 0.45; const clamp = (value, min, max) => Math.max(min, Math.min(max, value)); const randomRange = (min, max) => min + Math.random() * (max - min); @@ -285,6 +286,7 @@ shootCooldown: 0, boostType: null, boostTimer: 0, + boostInvulnerableTimer: 0, }; } @@ -492,6 +494,8 @@ this.player.vy += GRAVITY * dt; } + this.player.boostInvulnerableTimer = Math.max(0, this.player.boostInvulnerableTimer - dt); + this.player.y += this.player.vy * dt; if (this.player.boostTimer > 0) { @@ -638,9 +642,9 @@ if (platform.type === "white") { platform.active = false; platform.vanishTimer = 0.08; - this.audio.play("poof", 0.7); + this.audio.play("poof", 1); this.effects.push({ x: platform.x, y: platform.y + 14, vy: 18, life: 0.3, text: "POOF!" }); - this.effects.push({ kind: "burst", x: platform.x, y: platform.y + 8, vy: 0, life: 0.18, radius: 30, alpha: 0.34, color: "rgba(255,255,255,0.85)" }); + this.effects.push({ kind: "burst", x: platform.x, y: platform.y + 8, vy: 0, life: 0.22, radius: 40, alpha: 0.48, color: "rgba(255,255,255,0.9)" }); } this.player.y = platform.y; @@ -671,11 +675,13 @@ if (pickup.type === "propeller") { this.player.boostType = "propeller"; this.player.boostTimer = 1.05; + this.player.boostInvulnerableTimer = 1.05 + BOOST_INVULNERABLE_EXTRA; this.player.vy = PROPELLER_VELOCITY; this.audio.play("propeller", 0.48); } else if (pickup.type === "jetpack") { this.player.boostType = "jetpack"; this.player.boostTimer = 1.32; + this.player.boostInvulnerableTimer = 1.32 + BOOST_INVULNERABLE_EXTRA; this.player.vy = JETPACK_VELOCITY; this.audio.play("jetpack", 0.45); } @@ -709,7 +715,7 @@ this.bullets = this.bullets.filter((bullet) => !bullet.dead); this.monsters = this.monsters.filter((monster) => !monster.dead); - if (this.player.boostTimer > 0) { + if (this.player.boostInvulnerableTimer > 0) { for (const monster of this.monsters) { const verticalDelta = monster.y - this.player.y; const horizontalDelta = Math.abs(monster.x - this.player.x); @@ -719,7 +725,7 @@ Math.max(this.player.y, monster.y); if ( - (verticalDelta > -60 && verticalDelta < BOOST_MONSTER_CLEARANCE && horizontalDelta < 90) || + (verticalDelta > -90 && verticalDelta < BOOST_MONSTER_CLEARANCE && horizontalDelta < 130) || (overlapX > 10 && overlapY > 6) ) { monster.dead = true; @@ -843,47 +849,17 @@ }); } - this.platforms.push(platform); - - if (!isEarly && (type === "brown" || type === "white")) { - const supportWidth = randomRange(76, 92); - const supportMinDx = type === "brown" ? 56 : 38; - const supportOffsetBase = type === "brown" ? randomRange(42, 76) : randomRange(28, 56); - const supportDirection = chance(0.5) ? -1 : 1; - let supportX = clamp( - x + supportOffsetBase * supportDirection, - supportWidth / 2 + 14, - WIDTH - supportWidth / 2 - 14, - ); - if (Math.abs(supportX - x) < supportMinDx) { - const alternateSupportX = clamp( - x - supportOffsetBase * supportDirection, - supportWidth / 2 + 14, - WIDTH - supportWidth / 2 - 14, - ); - if (Math.abs(alternateSupportX - x) > Math.abs(supportX - x)) { - supportX = alternateSupportX; - } - } - const supportY = y - (type === "brown" ? randomRange(30, 48) : randomRange(22, 36)); - - if (Math.abs(supportX - x) >= supportMinDx) { - this.platforms.push({ - x: supportX, - y: supportY, - width: supportWidth, - type: "green", - active: true, - vx: 0, - brokenTimer: 0, - vanishTimer: 0, - pickup: chance(0.08) ? { type: "spring", x: supportX, used: false } : null, - }); - } else { - platform.type = "green"; - } + const conflictsWithNearbyGreen = this.platforms.some((existingPlatform) => + existingPlatform.type === "green" && + Math.abs(existingPlatform.x - platform.x) < 72 && + Math.abs(existingPlatform.y - platform.y) < 64, + ); + if (conflictsWithNearbyGreen && (platform.type === "brown" || platform.type === "white")) { + platform.type = "green"; } + this.platforms.push(platform); + this.highestPlatformY = y; this.spawnAnchorX = x; } @@ -1088,7 +1064,7 @@ drawMonsters() { for (const monster of this.monsters) { const screenY = this.worldToScreen(monster.y); - const fadedByBoost = this.player.boostTimer > 0 && monster.y > this.player.y && monster.y < this.player.y + 260; + const fadedByBoost = this.player.boostInvulnerableTimer > 0 && monster.y > this.player.y - 80 && monster.y < this.player.y + 280; if (fadedByBoost) { this.ctx.save(); this.ctx.globalAlpha = 0.32; @@ -1204,6 +1180,24 @@ this.ctx.strokeStyle = "rgba(255,255,255,0.8)"; this.ctx.lineWidth = 4; + if (this.player.boostInvulnerableTimer > 0) { + const strength = clamp(this.player.boostInvulnerableTimer / (this.player.boostType === "jetpack" ? 1.77 : 1.5), 0, 1); + this.ctx.save(); + this.ctx.globalAlpha = 0.22 + strength * 0.22; + this.ctx.strokeStyle = this.player.boostType === "jetpack" ? "rgba(255, 199, 105, 0.85)" : "rgba(255,255,255,0.75)"; + this.ctx.lineWidth = 3; + for (let index = 0; index < 7; index += 1) { + const offset = (index - 3) * 18; + const x = this.player.x + offset; + const screenY = this.worldToScreen(this.player.y); + this.ctx.beginPath(); + this.ctx.moveTo(x, screenY + 60); + this.ctx.lineTo(x, screenY - 120); + this.ctx.stroke(); + } + this.ctx.restore(); + } + for (const effect of this.effects) { const screenY = this.worldToScreen(effect.y); this.ctx.globalAlpha = effect.alpha ?? clamp(effect.life / 0.5, 0, 1); diff --git a/smoke-test.mjs b/smoke-test.mjs index 65548ea..1671871 100644 --- a/smoke-test.mjs +++ b/smoke-test.mjs @@ -281,11 +281,13 @@ async function main() { game.player.vy = 980; game.player.boostType = "jetpack"; game.player.boostTimer = 1.1; + game.player.boostInvulnerableTimer = 1.5; game.handleMonsterCollisions(); return { state: game.state, monsterCount: game.monsters.length, - playerBoostTimer: game.player.boostTimer + playerBoostTimer: game.player.boostTimer, + playerBoostInvulnerableTimer: game.player.boostInvulnerableTimer }; })()`); @@ -296,25 +298,23 @@ async function main() { game.monsters = []; game.highestPlatformY = 1400; game.spawnAnchorX = 216; - const samples = []; + const hazards = []; + let hazardConflictCount = 0; for (let i = 0; i < 120; i += 1) { game.platforms = []; game.monsters = []; game.spawnNextPlatform(false); const hazard = game.platforms.find((platform) => platform.type === "brown" || platform.type === "white"); if (!hazard) continue; - const support = game.platforms.find((platform) => platform !== hazard && platform.type === "green"); - if (support) { - samples.push({ - type: hazard.type, - dx: Math.abs(hazard.x - support.x), - dy: Math.abs(hazard.y - support.y) - }); - } + hazards.push(hazard.type); + hazardConflictCount += game.platforms.filter((platform) => + platform !== hazard && + platform.type === "green" && + Math.abs(platform.x - hazard.x) < 72 && + Math.abs(platform.y - hazard.y) < 64, + ).length; } - const minDx = samples.length ? Math.min(...samples.map((sample) => sample.dx)) : null; - const minDy = samples.length ? Math.min(...samples.map((sample) => sample.dy)) : null; - return { count: samples.length, minDx, minDy }; + return { hazardCount: hazards.length, hazardConflictCount }; })()`); await client.evaluate(`(() => { From 9c67bff2d3792edbde2e80c62b5bd31269105000 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 11 Mar 2026 04:49:41 +0000 Subject: [PATCH 11/17] Add Star Wars mode UI shell Co-authored-by: ilikevibecoding --- index.html | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/index.html b/index.html index 40a6ae5..bd3cf00 100644 --- a/index.html +++ b/index.html @@ -28,6 +28,7 @@

Doodle Jump Parody V4

0
+
Classic
@@ -39,13 +40,24 @@

Doodle Jump Parody V4

Doodle Jump Parody V4

-

Bounce, wrap, shoot upward, and climb with a feel tuned closer to the original.

-

Move: A / D / ← / → · Shoot: Space · Pause: P

- +

Bounce, wrap, shoot upward, and climb with a feel tuned closer to the original — or jump into the Star Wars version and unlock a flappy transition at 1K.

+

Move: A / D / ← / → · Shoot/Flap: Space · Pause: P

+
+ + +

Loading sprites and sounds…

+ +