Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

pixelsp33d.de — Build Plan

A pixel-art parallax sidescroller. Player avatar Pixel, antagonist kn00t, levels narrated by Moritz (alias pixelsp33d). Levelling up = gaining speed.


1. Asset inventory (gathered — all in assets/src/)

SourceWhat it actually isUse
pixelsp33d.jpg (150×150)Orange blob/taco with eyes + “PIXEL” wordmark. YT/Discord avatarHUD score badge (as specced)
pixel/robot3bild, pixel/unknownVoxel/Minecraft-style robot: white body, cyan eyes, copper antenna, control panel, copper feetPlayer sprite base (proposed)
pixel/kleki_2021_06_03Hand-drawn brown mouse/bear headInterlude art / secret
kn00t/gdrive/*.png8 native 16×16 pixel-art portraits: Cyber, Diving, EvilOriginal, God, InBlack, OpenHair, RedShirt, LazyPer-level boss forms — zero conversion needed
kn00t/kn00t_1..3.webp3 more kn00t busts (straw hat / top hat / eyepatch), ~16×16 upscaledExtra boss forms, dialogue portraits
kn00t/kn00t_67.gif2-frame kn00t idle loop, straw hat + rainbow shirtThe “6-7” special cameo (spec req.)
kn00t/nifty_1kn00t full-body wizard, yellow hat, rainbow shirtBoss full-body sprite reference
kn00t/nifty_2Red mushroom house with rainbow-lit doorLevel scenery / hub
kn00t/nifty_3Yellow horned creature, blue eyesCollectible companion / powerup
kn00t/nifty_4Red “piXELSP33D” wordmarkTitle screen logo
bg/signal-*.jpg ×5Real photos by Moritz: puffy blue sky · mackerel sky w/ tree · field w/ power pylons · 2× above-the-clouds from a plane wingParallax backgrounds, one set per level
video/VID-20210802-WA0000.mp4 (3.2s)Hand-drawn stick-figure flipbook on lined paperPrequel cutscene
video/VDSL_Video_1622044168870.mp4 (18.2s, w/ audio)nifty.ink drawing replay — art appearing stroke by stroke“Meanwhile …” interlude

Everything downloaded: Discord CDN links all live (11 files), gdrive kn00t/ folder pulled via rclone (16 files), local photos + videos copied in (originals left in place — nothing moved or deleted).


2. Design decisions

Items (spec asked me to decide food vs. obstacle)

ItemRoleEffect
PizzaFood+10 energy
KebapFood+25 energy
vegan SchnitzelFood (rare, Moritz’s own)+40 energy, full heal
Lidl River ColaSpeed pickup+1 speed tier — the levelling currency
FootballContext-dependentObstacle everywhere (−15 energy, knockback) — except the Soccer level, where it’s the objective

Rationale: speed is the progression axis, so exactly one item grants it. The football flipping role between levels is the cheap trick that makes the Soccer scene feel authored rather than reskinned.

Egg-dish enemy family (from the 2026-08-02 family-lunch brainstorm)

A moving opponent in the spirit of the Commander Keen snail — Moritz’s own dislike of Eierspeisen (egg dishes) made the antagonist. Two variants of the same creature, opposite intent. Prototyped and working in the Lidl Lunch level.

ItemRoleEffect
Drop ChickenHarmless, patrols like a Keen snail+8 energy on contact — safe, even edible
Poison EggObstacle, patrols like a Keen snail−35 energy on contact (harder-hitting than Football — “possibly fatal”)
uervel knightPowerupOnce collected, touching a Poison Egg defeats it instead of damaging the player (+5 energy, counts as a collected item)

The knight is deliberately scoped to counter only the egg-dish family, not Football — different scene, different mechanic, keeps each obstacle type meaningful on its own.

Secret areas & the uervel knight’s second path

The brainstorm gave the knight two ways to earn it: (1) a hard-to-reach placed item, (2) a hidden level behind a Commander-Keen-style “pipe.” Path 1 is what’s implemented today (the knight sits on a jump-up crate in Lidl Lunch). For path 2 and other secrets, three portal ideas came out of discussion — each assigned a distinct role rather than left redundant:

  • Minigolf hole (chosen) — sinking into the cup instead of finishing the hole normally is the portal into a hidden bonus level, the project’s answer to Keen’s pipe. Natural fit since Minigolf is already planned as level 1.
  • Mushroom house door — the kn00t nifty.ink art (assets/src/kn00t/nifty_2.webp, red mushroom house with a rainbow-lit door) is already drawn and already “his.” Leaning toward combining it with a treasure trove: a separate bonus-loot secret, not knight-related, reachable through that door.
  • River Cola crate stack — good secret-entrance idea, earmarked for a later level (not yet assigned); a stack of crates at the back of a level as a crawl-in point, no new art needed.

None of these hidden levels are built yet — this section records the decision on what each secret is for, ahead of P4 level construction.

Movement → level mapping

Each level teaches one verb and reuses the previous ones.

#SceneVerbBackgroundBoss form
0Prequellined paper
1MinigolfJumpmackerel sky + treeLazykn00t
2Lidl LunchWalk / Runpuffy blue skykn00tInBlack
3Soccer w/ friendsRun (sprint)field + power pylonskn00tRedShirt
4TanzstundeSneak (rhythm)mackerel sky, dusk gradekn00tOpenHair
5Above the CloudsFly / Jetplane wing ×2Cyberkn00t → EvilOriginalkn00t
Post-gameallGodkn00t

Divingkn00t is held for a bonus/underwater stage. The 6-7 gif cameos as a non-hostile easter egg between levels 3 and 4. Minigolf’s hole doubles as the secret portal to the hidden bonus level (see Secret areas above).

Player sprite set (10 sprites, the spec’s ceiling)

idle · run_1 · run_2 · run_3 · run_4 · jump_rise · fall · sneak · fly · hurt

Derived from the voxel robot at 16×24 px, palette-locked.


3. Technical approach

Locked decisions (2026-08-02): player = the voxel robot · vanilla TypeScript + Canvas2D · static dist/ build, hosting deferred · narration ships as timed captions with empty audio slots.

  • Internal resolution 384×216, integer-scaled to viewport. Nearest-neighbour everywhere. No sub-pixel positions for sprites — that’s what kills pixel art.
  • Parallax: 4 layers per level (far sky · cloud band · midground silhouette · ground), each a strip pixelized from the source photo, scroll factors 0.1 / 0.25 / 0.55 / 1.0. Speed tier multiplies scroll rate, so levelling up is visible in the background, not just a number.
  • Pixelization pipeline: ImageMagick script, committed and re-runnable — downsample → quantize to a shared 32-colour palette → optional Floyd-Steinberg on skies only → upscale for layer strips. Source art stays in assets/src/, generated art in assets/gen/. Never hand-edit gen/.
  • Cutscenes: videos → frame-extracted at ~8fps → pixelized → played back as sprite-sheet animations in-canvas. Keeps everything one renderer, no <video> element, no codec worries.
  • Narration: per-level timed caption track (German, in the voice of pixelsp33d) plus an audio slot per line, empty for now. Dropping in Moritz’s recordings later is a data change, not a code change.
  • Build: Vite → static dist/, no server requirement. Deployable to any static host when the domain is ready; the atproto score layer (P6) is the only piece that will later want a Worker or equivalent.

atproto integration

Pentaract is early — only games.gamesgamesgamesgames.game is published; scores/achievements are conceptual, not implemented. So:

  • Publish one games.gamesgamesgamesgames.game record for pixelsp33d (name, summary, type, modes) — real interop where it exists.
  • Define our own de.pixelsp33d.* lexicons for what Pentaract lacks: run (a scored playthrough), trophy (incl. the opcraft-themed one), speedTier. Shaped to be replaceable by Pentaract equivalents when they land.
  • Scores render with the PIXEL blob badge, as specced.

4. Phases

PhaseOutputRough size
P0 Asset pipelinetools/pixelize.sh, palette, assets/gen/ populated, contact sheets to eyeballsmall
P1 Player + kn00t sprites10 Pixel sprites, boss sprite sheets from the 16×16 portraitsmedium
P2 Engine corecanvas loop, fixed timestep, input, integer camera, 4-layer parallax, collisionmedium
P3 Gameplayenergy/speed model, items, obstacles, the 5 movement verbs, boss encounters, egg-dish enemy + uervel knight — done, prototyped in Lidl Lunchlarge
P4 Levels 1–5level data files, per-level backgrounds, tuning, the three secret-area portals (Minigolf hole, mushroom-house treasure trove, River Cola crate stack)large
P5 Narrativeprequel/interlude/sequel cutscene player, caption system, narration slotsmedium
P6 atproto + scoregame record, run/trophy lexicons, score screen with PIXEL badgemedium
P7 Shipstatic dist/ build + mobile touch controls; deployment to pixelsp33d.de left to yousmall

Playable vertical slice = P0–P3 with level 2 only. That’s the first thing worth showing Moritz.


5. Open dependencies

  • Narration audio from Moritz (not blocking — caption-first).
  • Hosting choice for pixelsp33d.de, deferred by decision. Build stays host-agnostic until then.
  • Pentaract’s score/achievement lexicons don’t exist yet; our de.pixelsp33d.* records are the stopgap and may need migrating if upstream lands equivalents.
  • Discord CDN links in ASSETS.txt are signed and will expire — assets are already pulled into assets/src/, so this only matters if we need re-downloads.