Tactical
The camera, the board, and the staged moments — the `cam` slice of Verdigris Cloister, in one component. It lives on the **`Board`** anchor (or on a child of it) and owns three things:
Tactical
The camera, the board, and the staged moments — the cam slice of
Verdigris Cloister, in one component. It lives on the Board anchor
(or on a child of it) and owns three things:
- The camera. A raised three-quarter station — yaw, pitch, distance
and a target on the board — eased every frame onto the scene's main
camera. It orbits, it zooms, and it refuses to swing anywhere the
1080x1440 portrait frame cannot hold the whole board (see
game.cam.camrig). - The board. The 80
tile_<x>_<y>plates: their tint, their grid lines, the reachable-range wash, the previewed path, the selection ring and the destination pin (seegame.cam.board). - The staging. The greenhouse reveal, the beat where the blight turns
decisive, and the campaign's closing shot (see
game.cam.staging).
It reads the rules and never writes them. Clicking a monk calls
Director:select; clicking a tile calls Director:move and shows the
referee's own refusal wording when it says no.
Controls
game.cam.tactical — the commander's input map. Every control carries
keyboard, gamepad and touch.
| Control | Keyboard / mouse | Pad | Touch |
|---|---|---|---|
| Select | Left click | South | Select button |
| Turn the view | Hold right (or middle) button and drag | Right shoulder + right stick | Turn button + drag the right half |
| Zoom | Scroll wheel | Left stick Y | Pinch |
| Recentre | F / Home | North | Recentre button |
Fields
| Field | Default | What it does |
|---|---|---|
inputMap | game.cam.tactical | The controls. Point it elsewhere to rebind. |
orbitSpeed | 0.26 | Degrees of yaw per pixel dragged. |
pitchSpeed | 0.16 | Degrees of pitch per pixel dragged. |
zoomSpeed | 2.2 | World units of dolly per zoom unit. |
autoReveal | true | Play the greenhouse reveal once on entering play. |
ownSfx | true | The board answers the pointer with its own clicks. |
sfxVolume | 0.45 | How loud those clicks sit under the mix. |
blightBeatShare | 0.42 | The share of the board the blight must hold before the game stops and looks at it. |
What other slices can call
local board = entity.find("Board").component.get("Tactical")
board:hovered() -- { x, y, elev } under the pointer, or nil
board:selectedCell() -- { x, y } last clicked, or nil
board:selectedUnitId() -- the unit the player has selected, or nil
board:selectUnit(id) -- select one, and tell the referee
board:reachable() -- the referee's reachable cells, keyed by Core.key
board:pathPreview() -- { path, target, plan } under the pointer
board:station() -- the live camera station
board:setStation(s, snap)-- move the camera; any field may be omitted
board:focusTile(x, y) -- lean toward a tile without losing the board
board:recentre() -- back to the composed station
board:playReveal() -- the opening
board:playBlightTurn(x, y, share)
board:playClosing(outcome)
Signals
Obeys cameraFocus, unitSelected, unitMoved, phaseChanged,
missionEnded.
Emits unitSelected (when the player picks a monk), tileClicked
({ x, y, unitId?, enemy?, refused? } — the tile inspector's cue, and the
place a refusal arrives in plain words), requestMove (only when the
referee has no mover yet), playMusic (from the staged moments), and
narrate ({ id, text, speaker } — the audio slice may voice a staged
line; the text is on screen either way).
Sound
The board's own clicks — camTick, camSelect, camDeny, camSweep —
are synthesised from raw PCM by game.cam.camsfx and cached as
.soundClip assets under game/cam/. They cost no credit and cannot fail
for a network reason. Clear ownSfx if the audio slice takes them over.
No clock
Nothing here changes game state on a timer. The eased camera, the breathing highlight and the cutscene clocks are presentation; the game waits indefinitely for the player.
Scoped to this part · feeds back into the world's score.