diff --git a/.gitignore b/.gitignore index d0e1533..e329ab2 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,9 @@ report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json # Finder (MacOS) folder config .DS_Store -# Benchmark prompts/artifacts (kept out of the public repo) +# Benchmark prompts/artifacts (kept out of the public repo). +# Leading slash scopes this to the repo root so website/public/screenshots/ +# (real site assets) can be tracked. mineclone.md website.md -screenshots/ +/screenshots/ diff --git a/website/public/screenshots/in-game.png b/website/public/screenshots/in-game.png new file mode 100644 index 0000000..2e8814d Binary files /dev/null and b/website/public/screenshots/in-game.png differ diff --git a/website/public/screenshots/main-menu.png b/website/public/screenshots/main-menu.png new file mode 100644 index 0000000..5e4f593 Binary files /dev/null and b/website/public/screenshots/main-menu.png differ diff --git a/website/src/components/CTA.astro b/website/src/components/CTA.astro index 115bb02..e53eaa2 100644 --- a/website/src/components/CTA.astro +++ b/website/src/components/CTA.astro @@ -7,9 +7,9 @@

Play now

Play VOXL right in your browser

- No install, no account — click play and the prototype loads in a - dedicated full-screen view. Drop into a seeded world, fly around, and - start shaping terrain. + No install, no account — click play and the world loads in a + dedicated full-screen view. Drop into a seeded world, survive the night, + fly over the canopy, and start shaping terrain.

▶ Play in browser @@ -28,8 +28,8 @@
  1. $ - git clone <repo> && cd Minebench - + git clone <repo> && cd voxl +
  2. $ @@ -42,7 +42,7 @@
-

Then open the printed local URL in a modern desktop browser.

+

Starts the game and the marketing site together. Then open the printed local URL in a modern desktop browser.

diff --git a/website/src/components/Features.astro b/website/src/components/Features.astro index b81961d..de6ae52 100644 --- a/website/src/components/Features.astro +++ b/website/src/components/Features.astro @@ -24,13 +24,12 @@ import { features, blockPalette } from "../data/site";
-

The creative palette

-

Nine blocks in the hotbar — select with 19, scroll, or F.

+

The creative inventory

+

{blockPalette.length} blocks, plants and foods — open the full grid with E in creative mode.

diff --git a/website/src/components/Showcase.astro b/website/src/components/Showcase.astro index 2e4f830..cc3d952 100644 --- a/website/src/components/Showcase.astro +++ b/website/src/components/Showcase.astro @@ -13,9 +13,8 @@ const missingCount = shots.filter((s) => !s.present).length;

The world, in view

VOXL is built to compose well on screen — grassy hills, trees, - shorelines and a fog-softened horizon. Real captures are shown here once - they've been added; until then, the frames below are clearly marked - placeholders. + shorelines and a fog-softened horizon. Here are a couple of captures + straight from the running game.

@@ -63,35 +62,6 @@ const missingCount = shots.filter((s) => !s.present).length; ))} - -
- How to capture these screenshots from the game -
-

- The game ships with two capture paths (documented in the repo - README.md): -

-
    -
  1. - Manual (no extra deps): run the game - (bun run dev at the repo root), open it, and press - P in-game. The canvas PNG downloads — save it with the - exact filename shown under each frame above into - website/public/screenshots/. -
  2. -
  3. - Automated: from the repo root, run - bun run screenshot (uses Playwright) to capture both - files at once, then copy them into - website/public/screenshots/. -
  4. -
-

- After adding the files, rebuild the site (bun run build) — - the real images replace the placeholders automatically. -

-
-
@@ -252,35 +222,4 @@ const missingCount = shots.filter((s) => !s.present).length; font-size: 0.78rem; color: var(--ink-mute); } - - .howto { - margin-top: 1.8rem; - border: 1px solid var(--border); - border-radius: 12px; - background: var(--panel-solid); - padding: 0.2rem 1.1rem; - } - .howto summary { - cursor: pointer; - padding: 0.9rem 0; - font-family: var(--mono); - font-size: 0.92rem; - color: var(--ink-dim); - list-style: none; - } - .howto summary::-webkit-details-marker { - display: none; - } - .howto summary::before { - content: "▸ "; - color: var(--teal); - } - .howto[open] summary::before { - content: "▾ "; - } - .howto-body { - padding-bottom: 1.1rem; - color: var(--ink-dim); - font-size: 0.95rem; - } diff --git a/website/src/components/Status.astro b/website/src/components/Status.astro index 1337a23..78812fc 100644 --- a/website/src/components/Status.astro +++ b/website/src/components/Status.astro @@ -9,17 +9,17 @@ const todo = status.filter((s) => !s.done);

Project status

-

An honest prototype, v{site.version}

+

What works today, v{site.version}

- VOXL is a creative-mode slice — not a finished commercial game. Here's - exactly what works today and what's deliberately out of scope for this - version. + VOXL is an original indie engine, not a finished commercial game. Here's + exactly what's live right now and what's next on the build — the full + phased plan lives on the roadmap.

-

In this build

+

Live now

    {done.map((s) => (
  • {s.label}
  • @@ -27,15 +27,16 @@ const todo = status.filter((s) => !s.done);
-

Not yet

+

Coming next

    {todo.map((s) => (
  • {s.label}
  • ))}

- These are real gaps, not hidden behind placeholders. They're the most - natural next steps for a future version. + These are the nearest milestones on a longer journey to a full sandbox. + See the whole plan — crafting, mobs, advanced biomes and multiplayer — + on the roadmap.

diff --git a/website/src/data/site.ts b/website/src/data/site.ts index f903e1d..fe70b98 100644 --- a/website/src/data/site.ts +++ b/website/src/data/site.ts @@ -1,16 +1,20 @@ // Centralised, typed content for the VOXL marketing site. // Facts here mirror the actual game implementation in this repo -// (src/constants.ts, src/game/Blocks.ts, src/game/TerrainGenerator.ts, etc.). +// (src/constants.ts, src/game/Blocks.ts, src/game/gen/*, src/game/lighting/*). export const site = { name: "VOXL", version: "1.0.0", - tagline: "An original browser-based voxel sandbox prototype.", + tagline: "A browser-based voxel sandbox engine, built from scratch.", description: - "VOXL is a browser-based WebGL voxel sandbox: drop into procedurally generated terrain of plains, forests, deserts and mountains, sculpt the world block by block, fly over the canopy, and capture the view. No download, no account — open it and build.", - stack: "Three.js · Vite · TypeScript · Bun", - bundleGzip: "~135 kB", + "VOXL is a browser-based WebGL voxel sandbox: drop into procedurally generated terrain across 11 biomes — forests, deserts, taiga, rainforests and snow-capped mountains — mine and build block by block, survive a full hunger and health loop, swim through flowing water, and watch a dynamic day/night cycle roll overhead. No download, no account — open it and play.", + stack: "Babylon.js · Vite · TypeScript · Bun", + bundleGzip: "~1.1 MB", chunk: "16×16×96", + biomes: 11, + blocks: "37+", + treeSpecies: 6, + dayLength: "10 min", } as const; export interface NavItem { @@ -24,6 +28,7 @@ export const nav: readonly NavItem[] = [ { label: "Controls", href: "#controls" }, { label: "Tech", href: "#tech" }, { label: "Status", href: "#status" }, + { label: "Roadmap", href: "/roadmap" }, ]; export interface Feature { @@ -36,42 +41,62 @@ export const features: readonly Feature[] = [ { icon: "⛰", title: "Procedural voxel terrain", - body: "Worlds are generated from a seed using layered Perlin/fBm noise — continents, rolling hills and ridged mountain masks combine into terrain that reads clearly the moment you spawn.", + body: "Worlds are grown from a text seed using layered Perlin/fBm noise — continents, ridged mountains with overhangs and spires, and 3D detail noise combine into terrain that reads clearly the moment you spawn.", }, { - icon: "▦", - title: "Chunk streaming", - body: "The world is organised in 16×16 columns up to 64 blocks tall. Chunks stream in around you based on view distance and unload when you leave, on a fixed per-frame budget so spawning never hitches.", + icon: "❀", + title: "11 climate & elevation biomes", + body: "Grassland, forest, dense forest, savanna, rainforest, taiga, tundra and desert compete in climate space, with ocean, bare mountain and snow-capped peaks layered on by elevation — each with its own surface, flora and trees, stitched together by heat & humidity noise with altitude-driven snow lines.", }, { - icon: "❀", - title: "Four biomes", - body: "Grassland, forest, desert and tundra, each with its own surface blocks, flora and elevation — stitched together by heat & moisture noise, with snow capping the highest peaks.", + icon: "✺", + title: "Dynamic day/night cycle", + body: "A full 10-minute day rolls overhead with an orbital sun and moon, a multi-stop sky gradient and warm golden-hour colours. Outdoor areas keep a gentle moonlight floor so nights are atmospheric, never pitch black.", + }, + { + icon: "☼", + title: "Two-channel voxel lighting", + body: "Sun light and block light are propagated separately across 16 levels each and baked into vertex colour. Torches and glowstone keep glowing after dark, sunlight streams straight down through glass — Minetest/Luanti-style, at zero per-frame cost.", + }, + { + icon: "☁", + title: "Drifting voxel clouds", + body: "Blocky, Minetest-style cloud slabs drift across the sky on a 2D noise field and re-centre on the camera, with per-face baked shading and three quality tiers from simple to fancy.", + }, + { + icon: "≋", + title: "Flowing water simulation", + body: "A full liquid flow simulator: sources spread seven blocks, pour down openings, and renew into infinite springs. It ticks at 20 Hz on a priority queue, seeded at shores and waterfalls as chunks stream in.", }, { - icon: "✦", - title: "Creative flight", - body: "Double-tap Space to toggle between walking with real gravity and free flight. Sprint in both modes and cover huge distances to scout the landscape.", + icon: "❂", + title: "Caves, ores & strata", + body: "Worm-tunnel caves wind underground with varied widths and surface entrances on the hills. Depth-gated coal, iron and copper ore veins thread through sedimentary sandstone and gravel layers down to bedrock.", }, { icon: "⛏", - title: "Block breaking & placing", - body: "Left-click breaks, right-click places. A precise voxel raycast picks the exact block you're looking at within a 6-block reach — bedrock stays unbreakable and you can't trap yourself inside a placement.", + title: "Survival & creative modes", + body: "Mine with timed hardness tiers and block drops, manage health, hunger and breath, take fall and cactus damage — or switch to creative for instant mining, infinite blocks and free flight. Toggle the mode any time from your inventory.", }, { icon: "▤", - title: "Bigger creative palette", - body: "A nine-slot hotbar of grass, dirt, stone, sand, wood, leaves, water, snow and cactus — plus coal, iron and copper ore, sandstone, flowers and mushrooms to find across the world. Pick with 1–9, scroll, or F.", + title: "37+ blocks, 6 tree species", + body: "Oak, birch, spruce, pine, jungle and acacia trees, plus flowers, ferns, mushrooms, papyrus and cactus. Snow, ice, sandstone, mossy stone and glowing blocks round out a palette painted entirely in code.", }, { - icon: "☁", - title: "Procedural clouds & sky", - body: "A gradient sky dome with a moving sun and drifting blocky clouds, layered with distance fog that gracefully hides the view-distance edge of the world.", + icon: "✈", + title: "Real movement physics", + body: "Per-axis swept-AABB collision against voxels, with swimming buoyancy and drag, a 3-block safe fall, sprint exhaustion and terminal velocity. Movement stays smooth without catching on seams or tunnelling through walls.", }, { - icon: "✺", - title: "Deterministic seeds", - body: "Type any seed, hit Regenerate, and the entire world rebuilds from scratch. Every setting — view distance, FOV, clouds — persists to your browser between sessions.", + icon: "⊝", + title: "Per-seed persistent worlds", + body: "Type any seed and the whole world rebuilds deterministically — terrain, caves, ores and clouds. Your inventory, stats and game mode auto-save to localStorage every few seconds and reload on return.", + }, + { + icon: "⚙", + title: "Scalable graphics & dev tools", + body: "Low/Medium/High presets with render scale, FXAA and optional shadow maps, plus adaptive streaming budgets that ease off when your frame dips. Worldgen, lighting, perf and chunk-border overlays are all one keystroke away.", }, ]; @@ -84,15 +109,18 @@ export const controls: readonly Control[] = [ { keys: ["W", "A", "S", "D"], action: "Move around" }, { keys: ["Mouse"], action: "Look (pointer lock)" }, { keys: ["Space"], action: "Jump / swim up / fly up" }, - { keys: ["Space", "×2"], action: "Toggle flying" }, + { keys: ["Space", "×2"], action: "Toggle flying (creative)" }, { keys: ["Shift"], action: "Fly down / descend" }, { keys: ["Ctrl"], action: "Sprint" }, - { keys: ["L-Click"], action: "Break block" }, - { keys: ["R-Click"], action: "Place block" }, + { keys: ["L-Click"], action: "Mine block (hold — timed in survival)" }, + { keys: ["R-Click"], action: "Place block / eat selected food" }, + { keys: ["E"], action: "Open inventory & switch mode" }, { keys: ["1", "–", "9"], action: "Select hotbar slot" }, { keys: ["Scroll"], action: "Cycle hotbar" }, { keys: ["F"], action: "Cycle selected block" }, + { keys: ["F4"], action: "Toggle liquid targeting" }, { keys: ["P"], action: "Capture screenshot" }, + { keys: ["F3"], action: "Performance overlay" }, { keys: ["Esc"], action: "Pause / release mouse" }, ]; @@ -103,28 +131,28 @@ export interface TechItem { export const techHighlights: readonly TechItem[] = [ { - title: "Face-culled chunk meshing", - body: "One indexed geometry per chunk with a separate transparent pass for water. Only visible faces are emitted — neighbors cull each other — and directional brightness is baked into vertex colour so the world stays lit with no per-frame light cost.", + title: "Two-channel voxel light engine", + body: "Separate sun-light and block-light propagators push brightness across 16 levels per channel, baked into vertex colour at mesh time. Day/night dimming runs entirely through shader uniforms — no remeshing when the sun moves.", }, { - title: "Swept-AABB voxel collision", - body: "Movement is resolved per-axis against voxel solidity, cleanly handling walking, flying and swimming without catching on seams or tunneling through thin walls.", + title: "Luanti-style liquid simulator", + body: "Sources and flowing cells (levels 1–7) spread horizontally and pour down openings, with renewable infinite springs and a 20 Hz priority queue. Player edits trigger an immediate burst so water reacts within a single frame.", }, { - title: "Amanatides–Woo voxel raycast", - body: "Block picking uses the classic DDA grid traversal for exact, stable voxel selection inside the 6-block reach — no flickering, no mis-targeted edges.", + title: "Three-pass chunk meshing", + body: "One indexed geometry per chunk across three passes — opaque, cutout (plantlike alpha-test) and transparent (water). Only visible faces are emitted, neighbours cull each other, and directional brightness is baked in.", }, { - title: "Budgeted streaming + disposal", - body: "Chunks generate (2/frame) and mesh (2/frame) closest-first in a spiral; far chunks unload and dispose their GPU geometry, so memory and framerate stay bounded on long journeys.", + title: "Swept-AABB voxel collision", + body: "Movement is resolved per-axis against voxel solidity, cleanly handling walking, flying and swimming with buoyancy and drag — no catching on seams, no tunnelling through thin walls.", }, { - title: "Seeded Perlin + fBm", - body: "All terrain derives from the seed string via a deterministic noise layer, so a given seed always reproduces the same world — rivers, ridges and caves included.", + title: "Amanatides–Woo voxel raycast", + body: "Block picking uses the classic DDA grid traversal for exact, stable voxel selection inside the 8-block reach, with a Luanti-style liquid-targeting toggle so you can pick water surfaces or mine through them.", }, { title: "Zero external art assets", - body: "Every texture is drawn procedurally to a 16px canvas atlas at runtime. No image files to ship, no copyrighted assets — the whole look is generated in code.", + body: "Every texture is drawn procedurally to a 16px canvas atlas (8×8 tiles) at runtime — speckled ores, hand-drawn flowers, concentric log rings. No image files to ship, nothing copyrighted.", }, ]; @@ -134,32 +162,229 @@ export interface StatusItem { } export const status: readonly StatusItem[] = [ - { done: true, label: "Procedural terrain, biomes, trees, water, caves" }, - { done: true, label: "Chunk streaming with a view-distance setting" }, - { done: true, label: "Block breaking & placement with instant remeshing" }, - { done: true, label: "Walking, swimming, and creative flight" }, - { done: true, label: "Pause menu + live settings (FOV, sensitivity, clouds, seed)" }, + { done: true, label: "Procedural terrain, 11 biomes, 6 tree species, caves & ores" }, + { done: true, label: "Dynamic day/night cycle with sun, moon & sky gradient" }, + { done: true, label: "Two-channel voxel lighting (sun + block light)" }, + { done: true, label: "Flowing water & full liquid simulation" }, + { done: true, label: "Survival mode: hunger, health, breath, fall damage, mining tiers" }, + { done: true, label: "Creative mode: flight, infinite palette, instant mining" }, + { done: true, label: "Chunk streaming with view distance 2–12" }, + { done: true, label: "Per-seed persistent saves (localStorage)" }, + { done: true, label: "Scalable graphics presets (Low / Medium / High)" }, { done: true, label: "In-browser screenshot capture (P)" }, - { done: false, label: "Ambient occlusion for deeper block shading" }, - { done: false, label: "Day/night cycle, mobs, crafting, and sound" }, - { done: false, label: "Waves / flowing water (currently a flat transparent surface)" }, + { done: false, label: "Crafting & smelting (inventory grid is scaffolded)" }, + { done: false, label: "Mobs, creatures and ambient life" }, + { done: false, label: "Sound & music" }, { done: false, label: "Touch controls for mobile play" }, ]; +// --------------------------------------------------------------------------- +// Roadmap — phased plan for VOXL's evolution into a full voxel sandbox. +// --------------------------------------------------------------------------- + +export type PhaseStatus = "shipped" | "active" | "planned"; + +export interface RoadmapItem { + title: string; + body: string; +} + +export interface RoadmapPhase { + id: string; + phase: string; + status: PhaseStatus; + title: string; + blurb: string; + items: RoadmapItem[]; +} + +export const phaseStatusLabel: Record = { + shipped: "Live now", + active: "In progress", + planned: "Planned", +}; + +export const roadmap: readonly RoadmapPhase[] = [ + { + id: "phase-1", + phase: "Phase 1", + status: "shipped", + title: "The foundation", + blurb: + "A complete, playable voxel engine running entirely in the browser. Every system below is live in v1.0 today — terrain, lighting, water, survival and creative play.", + items: [ + { + title: "Procedural terrain & 11 biomes", + body: "Continents, ridged mountains and overhangs grown from seeded noise, dressed into 11 climate and elevation biomes from rainforest to snowy peaks.", + }, + { + title: "Two-channel voxel lighting", + body: "Sun light and block light propagated separately across 16 levels, baked into vertex colour with a gamma curve so caves stay moody and torches glow at night.", + }, + { + title: "Flowing water simulation", + body: "A Luanti-style liquid simulator with spreading sources, downward flow, renewable springs and a 20 Hz tick — waterfalls react the instant you place a block.", + }, + { + title: "Day/night cycle & atmosphere", + body: "A 10-minute day with an orbital sun and moon, a multi-stop sky gradient, drifting voxel clouds and distance fog that hides the streaming edge.", + }, + { + title: "Caves, ores & strata", + body: "Worm-tunnel caves with surface entrances, depth-gated coal/iron/copper veins and sedimentary sandstone and gravel layers down to unbreakable bedrock.", + }, + { + title: "Survival & creative modes", + body: "Timed mining with hardness tiers, block drops, hunger/health/breath, fall and cactus damage — plus creative flight, an infinite palette and instant mining.", + }, + ], + }, + { + id: "phase-2", + phase: "Phase 2", + status: "active", + title: "Crafting & survival depth", + blurb: + "The survival loop grows teeth. The inventory already ships with a crafting grid scaffolded in — the next milestone is making it actually make things.", + items: [ + { + title: "Crafting system", + body: "A 2×2 and 3×3 crafting grid with recipe matching, so logs become planks, planks become tools, and the blocks you mine turn into the gear you need.", + }, + { + title: "Smelting & furnaces", + body: "A working furnace block: cook food for more hunger, smelt ore into ingots, fire clay and charcoal. Fuel burns on a timer with a flickering block-light glow.", + }, + { + title: "Tools, weapons & armour", + body: "A tiered tool system — wood, stone, copper, iron — that changes mining speed and durability, plus weapons for the combat to come and armour that soaks damage.", + }, + { + title: "More ores & materials", + body: "Gold, diamond and redstone-equivalent veins deeper in the strata, each gating new recipes and tool tiers that reward the trip underground.", + }, + { + title: "Farming & food chain", + body: "Till soil, plant crops that grow over time, breed livestock for a renewable food supply — turning survival from scavenging into stewardship.", + }, + ], + }, + { + id: "phase-3", + phase: "Phase 3", + status: "planned", + title: "Life, danger & the wider world", + blurb: + "A living world needs things in it. Phase 3 populates VOXL with creatures to flee and befriend, structures to raid, and biomes that demand new strategies.", + items: [ + { + title: "Mobs & creatures", + body: "Passive animals that roam and breed, and hostile mobs that spawn in the dark and underground — pathfinding, spawning rules and a full day/night threat cycle.", + }, + { + title: "Health, combat & death", + body: "Melee and ranged combat with knockback and i-frames, a proper death and respawn flow, and item drops so a bad night underground actually costs something.", + }, + { + title: "Generated structures", + body: "Villages, dungeons, temples and ruined outposts placed deterministically by the world seed — hand-crafted rooms worth seeking out for loot and lore.", + }, + { + title: "Advanced biomes", + body: "Mangrove swamps, cherry groves, mushroom fields and more — each with unique flora, surface rules and generation, expanding the climate map beyond the launch eleven.", + }, + { + title: "Cave biomes & deepslate", + body: "Lush caves dripping with foliage, dripstone caverns, and a deepslate layer beneath stone — distinct underground ecosystems that make caving worth the risk.", + }, + { + title: "World generation modes", + body: "Alternate world types beyond the default mapgen — Superflat for clean builds and redstone, Amplified for extreme terrain, Large Biomes for sprawling climates, plus floating sky islands and a cavernous cave-world preset, chosen at seed time.", + }, + { + title: "Weather & ambient audio", + body: "Rain and snow that fall across biomes, thunderstorms that darken the sky, and a full sound bed — footsteps, water, wind, mobs and music — to bring it alive.", + }, + ], + }, + { + id: "phase-4", + phase: "Phase 4", + status: "planned", + title: "Multiplayer & beyond", + blurb: + "The long-term vision: share VOXL with other players, mod it into something uniquely yours, and take it beyond the desktop browser.", + items: [ + { + title: "Multiplayer & shared worlds", + body: "Authoritative servers with chunk-based networking, player sync, shared block edits and conflict resolution — build, survive and explore together in real time.", + }, + { + title: "Multiple dimensions", + body: "Travel between parallel worlds through portal frames: a hostile Underworld of fire and lava beneath the bedrock, a silent Void of floating islands guarding an end-boss, and an Aether sky-realm above the clouds — each with its own terrain, mobs, materials and hazards.", + }, + { + title: "Modding API & plugins", + body: "A stable API for registering custom blocks, items, recipes, biomes and behaviours, so the community can extend VOXL without forking the engine.", + }, + { + title: "Touch & mobile play", + body: "An on-screen control scheme tuned for phones and tablets — virtual joystick, look pad, context-aware mine/place buttons — so VOXL plays anywhere a browser opens.", + }, + { + title: "Map sharing & seeds", + body: "Browse and share interesting seeds, export snapshots of your builds, and jump straight into a friend's world from a link.", + }, + ], + }, +]; + export interface BlockDef { name: string; color: string; } -// Matches the block registry & hotbar order in src/game/Blocks.ts. +// Mirrors the full creative inventory (CREATIVE_PALETTE in src/game/Items.ts), +// in the game's curated order, with the real representative UI colours from +// src/game/Blocks.ts and the food items from src/game/Items.ts. export const blockPalette: readonly BlockDef[] = [ - { name: "Grass", color: "var(--blk-grass)" }, - { name: "Dirt", color: "var(--blk-dirt)" }, - { name: "Stone", color: "var(--blk-stone)" }, - { name: "Sand", color: "var(--blk-sand)" }, - { name: "Wood", color: "var(--blk-wood)" }, - { name: "Leaves", color: "var(--blk-leaves)" }, - { name: "Water", color: "var(--blk-water)" }, - { name: "Snow", color: "var(--blk-snow)" }, - { name: "Cactus", color: "var(--blk-cactus)" }, + { name: "Grass", color: "#5fa84a" }, + { name: "Dirt", color: "#866040" }, + { name: "Stone", color: "#808084" }, + { name: "Sand", color: "#e0d096" }, + { name: "Wood", color: "#785634" }, + { name: "Birch Wood", color: "#d8d0bc" }, + { name: "Leaves", color: "#366e2c" }, + { name: "Birch Leaves", color: "#7fae4e" }, + { name: "Spruce Leaves", color: "#2a4a2a" }, + { name: "Snowy Leaves", color: "#cdd8e6" }, + { name: "Snow", color: "#eef2fa" }, + { name: "Cactus", color: "#4e8840" }, + { name: "Snowy Grass", color: "#dfe6f2" }, + { name: "Ice", color: "#9ec4ee" }, + { name: "Desert Sand", color: "#e2c67a" }, + { name: "Desert Stone", color: "#a87856" }, + { name: "Sandstone", color: "#dec896" }, + { name: "Gravel", color: "#7a767a" }, + { name: "Mossy Stone", color: "#5e7a44" }, + { name: "Coal Ore", color: "#4a4a4e" }, + { name: "Iron Ore", color: "#b89a72" }, + { name: "Copper Ore", color: "#6aaa8c" }, + { name: "Tall Grass", color: "#6a9e4a" }, + { name: "Flower", color: "#d24440" }, + { name: "Dandelion", color: "#ecc846" }, + { name: "Mushroom", color: "#c46060" }, + { name: "Dead Bush", color: "#8a6a3a" }, + { name: "Fern", color: "#4e7e36" }, + { name: "Papyrus", color: "#9aac5a" }, + { name: "Cornflower", color: "#4a6cd6" }, + { name: "Dry Grass", color: "#9e964e" }, + { name: "Jungle Grass", color: "#2e6a28" }, + { name: "Jungle Leaves", color: "#225222" }, + { name: "Water", color: "#366ec4" }, + { name: "Apple", color: "#d24440" }, + { name: "Bread", color: "#c89a5a" }, + { name: "Cooked Beef", color: "#8a4a3a" }, + { name: "Cookie", color: "#b07a3a" }, + { name: "Golden Apple", color: "#f2c94c" }, ]; diff --git a/website/src/layouts/Layout.astro b/website/src/layouts/Layout.astro index 87ac269..8d85fc2 100644 --- a/website/src/layouts/Layout.astro +++ b/website/src/layouts/Layout.astro @@ -3,12 +3,19 @@ import BaseHead from "../components/BaseHead.astro"; import Header from "../components/Header.astro"; import Footer from "../components/Footer.astro"; import Lightbox from "../components/Lightbox.astro"; + +interface Props { + title?: string; + description?: string; +} + +const { title, description } = Astro.props; --- - + diff --git a/website/src/pages/roadmap.astro b/website/src/pages/roadmap.astro new file mode 100644 index 0000000..55f1ba6 --- /dev/null +++ b/website/src/pages/roadmap.astro @@ -0,0 +1,317 @@ +--- +import Layout from "../layouts/Layout.astro"; +import { roadmap, phaseStatusLabel, site } from "../data/site"; + +const legend = [ + { status: "shipped", label: phaseStatusLabel.shipped, color: "var(--grass)" }, + { status: "active", label: phaseStatusLabel.active, color: "var(--amber)" }, + { status: "planned", label: phaseStatusLabel.planned, color: "var(--ink-mute)" }, +] as const; +--- + + + +
+ +
+
+

Roadmap

+

The road to a full voxel sandbox

+

+ VOXL already ships a complete voxel engine — terrain, lighting, water, + survival and creative play. The roadmap below is how it grows from a + rock-solid foundation into something you'd recognise as a full sandbox: + crafting, mobs, advanced biomes, and eventually multiplayer. +

+
+ +
    + {legend.map((l) => ( +
  • + + {l.label} +
  • + ))} +
+
+
+ + +
+
+
    + {roadmap.map((p) => ( +
  1. + +
    +
    + {p.phase} + + + {phaseStatusLabel[p.status]} + +
    +

    {p.title}

    +

    {p.blurb}

    + +
      + {p.items.map((it) => ( +
    • +

      {it.title}

      +

      {it.body}

      +
    • + ))} +
    +
    +
  2. + ))} +
+
+
+ + +
+
+
+

Play what's live

+

Phase 1 is shipping today

+

+ The foundation is already in your browser — 11 biomes, flowing water, + voxel lighting and a full day/night cycle. Jump in, and watch this + space as the world grows. +

+
+ +
+
+
+ +