Cookbook
Short recipes for Transmute Core. For agent automation, start with AGENTS.md and examples/java/hello.
Headless verify one frame
GameConfig config = new GameConfig.Builder()
.title("Smoke").version("0").size(160, 90).scale(1)
.headless(true).showStartScreen(false).build();
try (GameHarness harness = GameHarness.of(() -> new MyGame(config))) {
harness.step(1);
FrameAssert.assertPixel(harness.renderer(), 0, 0, expectedColor);
}
Load assets from a manifest
# src/main/resources/gamespec.properties
title=My Game
width=320
height=180
font=fonts/font.png
image.player=sprites/player.png
Manager manager = getManager();
manager.bootstrapDefaults();
GameSpec.loadClasspath("gamespec.properties").loadAssets(manager.getAssetManager());
Script input in headless mode
SimulatedInput input = (SimulatedInput) harness.game().getManager().getInputHandler();
input.pressKey(KeyEvent.VK_SPACE);
harness.step(1);
States
StateManager states = manager.getStateManager();
states.push(new PlayState(...));
states.pop(); // leave current state
Playtest scripts
# playtests/jump.script
0 press SPACE
1 release SPACE
4 idle
PlaytestScript.loadClasspath("playtests/jump.script")
.play(harness, (SimulatedInput) game.getManager().getInputHandler());
Assert audio cues (headless)
try (AudioProbe probe = AudioProbe.install()) {
AudioPlayer.setMuted(true);
AudioPlayer.play("jump");
probe.assertPlayed("jump");
}
Probe records even when muted or when the clip is missing from the AssetManager.
Declarative spawns / triggers
spawn.player=2,2
spawn.player.color=100,150,255
trigger.coin=6,2
trigger.coin.audio=pickup
state.initial=play
World world = spec.createWorld();
world.findTrigger("coin").setOnEnter(a -> score++);
World.Actor marker = world.findActor("player");
Record a playtest
PlaytestRecorder rec = new PlaytestRecorder();
rec.hold(KeyEvent.VK_D);
harness.step(20); rec.advance(20);
rec.release(KeyEvent.VK_D);
rec.write(Path.of("playtests/walk.script"));
Sprite atlas
SpriteAtlas atlas = SpriteAtlas.fromAsset(assets, "sheet-player", 16);
Animation walk = atlas.animation("walk", 150, 0,0, 1,0, 2,0);
Tile world (top-down)
World world = World.grid(20, 15, 16).clearColor(bg).solidColor(wall);
world.fillBorder(World.SOLID);
world.setTile(5, 7, World.SOLID);
World.Actor player = World.Actor.colored(32, 32, 16, 16, color);
world.add(player);
player.tryMove(2, 0); // rejects if solids block
Or from GameSpec (world.cols, world.rows, world.border, world.solid=5,7;6,7):
World world = GameSpec.loadClasspath("gamespec.properties").createWorld();
See examples/java/rpg.
Platformer body
Body2D body = new Body2D(x, y, 16, 16);
body.setVelocityX(3);
body.jump();
body.step(platforms); // platforms implement Body2D.Solid
See examples/java/platformer.
More
- Tutorials: docs/tutorials/
- Architecture: WARP.md
- Domain vocab: CONTEXT.md
- Agent skill:
.cursor/skills/build-transmute-game/SKILL.md