Skip to content
Back to skills

Fabius Ludus

ASecurity

fabius's game-craft layer: small games that are fun and ship. Core loop first, juice, explicit state machine, pixel-art lane, one balance knob at a time, jam-sized scope. For any game, mechanic, playable, toy or win/lose/score state.

  • 2 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 3, 2026
ai-agentsgoawsgit

Works with

  • cli

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned September 29, 2026

npx -y skills add shear559/fabius --skill fabius-ludus --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Fabius Ludus?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Fabius Ludus
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/shear559-fabius-ludus/badge)](https://www.skillsdirectory.com/skills/shear559-fabius-ludus)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: fabius-ludus
description: >
  fabius's game-craft layer: small games that are fun and ship. Core loop first, juice, explicit
  state machine, pixel-art lane, one balance knob at a time, jam-sized scope. For any game,
  mechanic, playable, toy or win/lose/score state.
when_to_use: >
  "make a game", "the loop isn't fun", "add juice", "screen shake"
license: UNLICENSED
metadata:
  author: shear559
---
<!-- © 2026 shear559 · fabius · provenance fab1-6bbf82d118bce2cee9d7ac71f034fa26 · release evidence: PROVENANCE.md · github.com/shear559/fabius -->

# Fabius Ludus — the loop is the game; everything else is paint

*Ludus* — the game, and the school where you drill it. A game lives or dies on one thing: the second-to-second loop. Art, menus, story, and meta are paint on top of a loop that's either fun or isn't. Same Fabian stance: **scout wide on what the game could be, strike narrow on the one loop that's fun with grey boxes.** `fabius-parcus` owns YAGNI; this layer owns what makes play feel good.

## 1. Find the core loop first

Name the ~10-second cycle in one line: **act → feedback → reward → again.** *(Move → land hit → number pops + enemy dies → do it again.)* Build *only* that, with grey boxes and placeholder sound, and pass one observable gate, not a feeling: **a tester who did not build it restarts the grey-box loop unprompted at least three times in one sitting — record the count.** No art, no menu, no progression, no content until the loop is fun unpainted. A beautiful game on a dead loop is a dead game (`fabius-parcus`: the content doesn't need to exist until the loop holds).

## 2. Game feel (juice) — deliberate, not decorative

A flat loop becomes a fun loop through feedback on every action. The cheap, high-payoff moves:

- **Response on every input** — a sound and a visual the instant the player acts; nothing should feel silent.
- **Hit-stop** — a few frames of freeze on impact sells weight.
- **Screen-shake — sparingly** — a small kick on big events; constant shake is noise.
- **Easing, not linear** — things ease in/out; anticipation before, follow-through after.
- **Particles & pops** — a burst, a number, a flash on reward.
- **Juice the verbs the player does most** — the core action gets the most feedback budget.

(Animation *laws* — restraint, transform/opacity only — are `fabius-decor`; the game-feel *specifics* above live here. One micro-language, calm baseline, punch on the moments that matter.)

## 3. State as an explicit machine

No boolean soup. Model game state as a named finite-state machine and draw the transitions:

```
boot → menu → play → (pause ⇄ play) → win | lose → menu
```

Each state owns its update/render/input; transitions are named events, not scattered flags. (`fabius-parcus`: no `isPlaying && !isPaused && !isDead` tangles; `fabius-disciplina`: a state diagram you can hold in your head.)

## 4. Hold the pixel-art lane

For a pixel game, the discipline *is* the look:

- **One fixed palette** — lock the project's own brand palette and identity up front, then don't drift. One palette, one identity, applied consistently.
- **Integer scaling only** — 2×, 3×, 4× — never fractional, or it shimmers.
- **Snap to the pixel grid — but only what's axis-aligned and unscaled** — positions round to whole device-pixels; sub-pixel motion blurs the crispness that *is* the aesthetic. Rounding a *rotating or scaling* sprite trades that blur for vertex wobble, so let those render smooth (engines now ship a smooth-pixel-art mode for exactly this) instead of forcing them to the grid.
- **One unit size** — a consistent base tile/sprite size; the grid is the rhythm.

(On RTL surfaces — Hebrew, Arabic — the UI keeps its own reading direction: left-pointing arrows are correct for "back/next" in that layout; don't flip them.)

## 5. Balance one knob at a time

Tune a single variable, playtest, lock it, move to the next. Changing three at once means you learn nothing from the result. Shape the difficulty curve as **teach → test → twist**: introduce a mechanic safely, demand it, then complicate it. The fun is in the climb, not the wall.

## 6. The studio pipeline — how a game ships under fabius

A game is a *vertical*: it composes several layers behind one goal. The dispatch order:

```
fabius-ludus       → the loop + the feel (this layer leads)
  → fabius-disciplina  → plan the build as step → verify; prove it runs
  → fabius-decor       → menus, HUD, the framing UI (tokens, states)
  → fabius-cohors      → only if NPCs/enemies need real agent behavior
  → fabius-parcus      → underneath all of it (lean code, reach for the engine)
```

This is the **studio pattern**: a domain skill leading a mini-pipeline. The router composes it; you don't pick one layer (routing-policy R13).

## 7. Scope the jam

Pick the **smallest shippable game that proves the loop** — a jam-sized cut. One mechanic done well beats five half-done. Cut ruthlessly: every feature past the core loop is a question of *does this earn its build cost?* Ship the vertical slice, then decide what's worth adding.

## When NOT to build the engine

- **Use the engine/platform; don't hand-roll it.** Physics, ECS, input, audio, the render loop — reach for the existing tool (`fabius-parcus` ladder: platform before app code). Hand-rolling a physics engine for a small game is the over-build trap in disguise.
- **Don't add systems the loop doesn't need.** No inventory, no skill tree, no save system until the core loop has earned them.

## References

- Core-loop template, the juice checklist, the FSM skeleton, the pixel-art constants, and jam-scoping rules → `references/game-playbook.md`.
- Engine recipes, feel patterns, and the pixel-art kit → `references/engine-recipes.md`, bundled and indexed by [CORPUS.md](../../CORPUS.md); page in the one slice the task needs (R9 · M9).
- The verified engine + asset stack — engines (Godot/Phaser/KAPLAY/Bevy), pixel/level/audio tools, CC0 asset sources (Kenney/Quaternius), and game-relevant HF models (with the OpenRAIL / FLUX-dev-base license traps flagged) → `references/game-toolkit.md`.

Boundary: lean code is `fabius-parcus`; plan + prove is `fabius-disciplina`; UI/animation laws are `fabius-decor`; enemy/NPC agents are `fabius-cohors`. This layer owns the loop, the feel, and the balance. The user's design and brand always win; `stop fabius` drops the stance (kill-switch owned by `fabius`).

Files in this skill

  • SKILL.md6.9 KB
  • references/engine-recipes.md12.2 KB
  • references/game-playbook.md9.2 KB
  • references/game-toolkit.md6.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.