// Section components // ====== NAV ====== function Nav() { return ( ); } // ====== HERO ====== function Hero() { return (
{/* Eyes scattered around the hero, each blinking on its own clock */}
Dimension Disrupt

Dimension Disrupt

A 2D toon survival RPG. Build a home, raid the dungeon, and try not to wake the things sleeping down there.

Survival RPG Dungeon Crawler Base Building Single-Player
); } // ====== GAME ====== function GameSection() { const pillars = [ { n: "I", color: "p-green", icon: , title: "Survive", copy: "Hunger. Cold. Sanity. Whatever's in the cupboard. The world only pretends to sit still while you sleep." }, { n: "II", color: "p-violet", icon: , title: "Disrupt", copy: "Procedural dungeons that hold a grudge. Loot is a polite word for what you bring back up." }, { n: "III", color: "p-magenta", icon: , title: "Build", copy: "Workshop, garden, shrine, fence. Decide what to put near the door — something out there is taking notes." }]; const features = [ { t: "Hand-drawn, hand-animated", c: "Every leaf, lantern and lurking horror toon-shaded frame by frame." }, { t: "Sanity is a stat", c: "See too much, lose the thread. Your character will start to lie to you. The UI joins in eventually." }, { t: "Dimensions, plural", c: "Five worlds bleed through one map. Find the seams. Don't pull on them." }, { t: "A base that's yours", c: "Modular building, tools and traps. Lay it out, light it up, lock it down." }, { t: "Pets that pull weight", c: "Companions that fight, fetch, and occasionally judge your choices." }]; return (
The Game

Build by day.
Dig by night.

Dimension Disrupt is a 2D toon survival RPG with dungeon-crawler combat and base-building roots. Made by two people. Drawn by hand.

{pillars.map((p, i) =>
PILLAR {p.n}
{p.icon}

{p.title}

{p.copy}

)}
Features
    {features.map((f, i) =>
  • 0{i + 1}

    {f.t}

    {f.c}

  • )}
KEY ART
[ HERO + DUNGEON MAW ]
2400 × 3000
); } // ====== STUDIO ====== function StudioSection() { return (
The Team

Two people.
One small studio.

Black Craft is Charlie and Mabu. We work from our home, on our own hours, with our own pets at our feet. 

PORTRAIT — CHARLIE
1200 × 1600

Charlie

Developer · Technical Artist

Writes the code, builds the tools, teaches sprites to behave. Charlie keeps the engine humming.

MAINS Engine, tools
FEARS French lawyers
PORTRAIT — MABU
1200 × 1600

Mabu

Artist · Animator · Writer

Draws everything you see and writes everything you read. Painstakingly animates hand-drawn sprites, the old school way.

MAINS Art, anim, narrative
FEARS Blank pages
); } // ====== DEVLOG ====== function DevlogSection() { const posts = [ { featured: true, date: "12 · 05 · 26", tag: "Patchwork", title: "Stitching a dungeon that remembers you", excerpt: "On procedural dungeons that aren't actually procedural — how rooms carry grudges between runs, and why we let the map keep a diary.", thumb: "DEVLOG IMG · DUNGEON TILES" }, { date: "03 · 05 · 26", tag: "Art", title: "Sixty frames of one nervous slime", excerpt: "Mabu walks through the wobble-to-burst animation pipeline.", thumb: "DEVLOG IMG · SLIME ANIM" }, { date: "21 · 04 · 26", tag: "Build", title: "Sanity, the worst stat we've ever shipped", excerpt: "Lies, hallucinations, and the UI elements that fight back.", thumb: "DEVLOG IMG · SANITY UI" }]; return (
); } // ====== FOOTER ====== function Footer() { return ( ); } Object.assign(window, { Nav, Hero, GameSection, StudioSection, DevlogSection, Footer });