The cinematic trailer
standard_of_iron_trailer.mp4 is built entirely from Standard of Iron's own
renderer, simulation and audio. Nothing in it is offline CGI: every image is a
deterministic arena scenario photographed by an authored camera, and every
sound is either the game's own library or synthesis in scripts/trailer/dsp.py.
What was wrong with the previous cut
The September 2026 trailer_v2.json cut showed the right content and is the
basis of this one (the pitched battle, the commander, the town, the Iron
Sepulcher, the title), but it presented it as a feature list:
- a caption on nearly every shot (MASSIVE BATTLE, COMMAND IT., FIGHT IN IT., BE THE COMMANDER, RAISE A CITY, PUT IT TO WORK, ...);
- 720p, flat midday light, washed-out haze, no grade;
- the RTS camera's angle for most shots, and HUD-heavy overhead footage;
- order markers and damage numbers inside supposedly cinematic shots;
- cameras that orbit and zoom because they can, eased to a stop on every key;
- music laid under the picture rather than driving the cut, and sound effects placed on every cut at one level;
- a stock-looking flame card for the title.
Direction
The fight arrives fast. A horn and one hit over the elephants on the ridge, the two commanders, the Numidians riding past, and at nine seconds the elephants drive into the Roman line. From there: scale and command, the commander in the melee, the city being built, the same kind of city set alight, the Iron Sepulcher's dead rising in the snow, an accelerating montage, and the flame card.
- Picture. 1920x1080 at 24 fps, extracted 2.39:1 (the end card opens to the full frame). Arena renders 2x supersampled at 96 fps; the conform integrates three of every four sub-frames for real motion blur. Long lenses carry the close action; units are about a metre tall, so "eye level" is 0.6-1.0 m.
- Light. The game's own lighting profiles (a warm Mediterranean afternoon, dusk over Aurelia Magna, the Iron Sepulcher's night), not trailer haze: an A/B against the game's own screenshots showed overrides turning it grey.
- Grade. Enhances rather than drains the game's colour:
sun,city,dusk,nightandfirelooks incut.json, each with a gentle S-curve, split toning, halation, vignette and grain. - Overlays.
scripts/trailer/fx.pyrenders embers, backlit dust and warm light-leak plates, screened over the footage per shot; impacts get a decaying shake and a short exposure flash (hits). - Typography. Six short captions that say what the game is (Rome against Carthage, command armies of thousands, fight at the front as your commander, build the city, set cities ablaze, the Iron Sepulcher), each with a text stinger in the mix; the title and call to action (free and open source, the GitHub address, Windows / macOS / Linux) over the arena's flame card.
- Narration. None: the captions carry the information.
- Sound. The game's own score cut to drive the edit: Last Defensive Wall's drum ostinato under the open, Dust of Cannae's percussion on the first impact, the main theme's full statement for the city and the burning, Skeletons Awaken's hit on the rising, Cannae's crest into the flame card and the main theme's final hits under the title. Effects are placed with perspective; the arena's recorded mix sits under each shot; hits, risers and swells are synthesised.
Accuracy
Everything shown exists in the game: Rome and Carthage's troop types and commanders (Scipio, Hannibal), formations, cavalry charges, Carthage's war elephants, catapults firing flaming stones that set structures alight, Aurelia Magna's builders and citizens, snow, and the Iron Sepulcher's skeletons and grave priests. Rome fields no elephants in any shot; there are no rams or siege towers, no storms and no voiced dialogue.
Reproducing it
# 1. Build arena_app, then capture every film set on the real GPU (:0).
scripts/trailer/build.sh capture # ~2 h on an RTX 5060
# 2. Conform, mix and deliver.
scripts/trailer/build.sh picture
scripts/trailer/build.sh sound
scripts/trailer/build.sh master
PYTHON must have the packages in scripts/trailer/requirements.txt.
| Stage | Source |
|---|---|
| Film sets | tools/arena/arena_cinematic_scenarios.cpp (cine_field, cine_siege, cine_sepulcher) and promo_imperial_capital |
| Camera and light | tools/arena/promos/cinematic/capture_*.json |
| Edit, looks, sound | tools/arena/promos/cinematic/cut.json |
| Picture | scripts/trailer/conform.py, scripts/trailer/titles.py |
| Sound | scripts/trailer/mix.py, scripts/trailer/dsp.py |
| Delivery and QC | scripts/trailer/deliver.py |
deliver.py refuses a file whose picture and sound lengths disagree, whose
loudness drifted in the AAC encode, whose true peak passes -1 dBTP, or which has
stray black or frozen frames or a flash series.