← Dev Log
A trailer from pure code (and why it's all placeholder)
BallOrcs has a 67-second announcement trailer, box art and an app icon, all drawn by code. They're placeholders until real in-game footage replaces them.
In plain words
BallOrcs now has a 67-second announcement trailer with its own soundtrack, box art, a Steam-ready image set, and an app icon — all drawn and composed by code, because no art tools or artists were available on the build machine. It follows the real story (the colourful Realm, the grey wave, the faceless Hollow King, building your orc, the three powers) and honest placeholder status is stamped on all of it: the flat cartoon style reads younger than our 8–16 audience, and the finished game is 3D. The structure stays; the look gets replaced with real in-game footage later.

Under the hood
- Constraint: no ffmpeg, ImageMagick, or Inkscape on the box — just Python. Pillow + numpy + imageio-ffmpeg (which bundles an ffmpeg binary) covered everything: a small art engine draws shaded-sphere orcs from the actual component system in the design doc, scenes compose them, and a ~66 s 720p24 timeline renders in parallel worker processes before ffmpeg muxes in a soundtrack synthesized from raw numpy waveforms (128 BPM; square-wave leads, triangle bass, noise percussion; sections keyed to the storyboard beats).
- Sixteen store images from the same engine: box art, the full Steam capsule matrix, a 3840×1240 hero banner with separate transparent logo (per Steam spec), villain piece, cast lineup, icon, and five stylized level stills.
- Bug of the week: Pillow 12.3's
ImageDraw.chord()with float, non-axis-aligned angles floods an entire quadrant with fill colour. The scarf on our mascot briefly looked like a black sail. Workaround: build circle segments as explicit polygons. - Everything regenerates from
marketing/tools/— deliberately, so when real 3D art exists, the compositions, copy, and storyboard can be re-skinned rather than reinvented.