A downloadable asset pack

Buy Now$14.99 USD or more

Your game already records what happened. Gazette prints the newspaper.

Hand it the day's events — what happened, where, who did it, how much it mattered — and it composes a finished broadsheet. The biggest story becomes the lead under a struck headline. Its subject becomes a woodcut. The rest of the day fills the columns around it. The weather word becomes a device in the weather box. Advertisements fill the foot of the page, because a paper that carried no advertisements never existed.

Day 12 and day 41 are two different papers, and you wrote neither of them.

Nothing on the page is a stored image

There is no PNG, no atlas, no sprite sheet, no shader and no material anywhere in this package. Every mark is drawn in code, at runtime or in the editor, from a corpus of 74 hand-authored forms in thirteen families you can read and edit:

  • 8 war cuts — battle, siege, duel, ambush, trophy, fleet, raid, surrender.
  • 6 statecraft cuts — coronation, treaty, proclamation, trial, assembly, exile.
  • 4 mourning cuts — funeral, grave, procession, lying-in-state.
  • 6 ruin cuts — conflagration, flood, earthquake, storm, plague, famine.
  • 5 trade cuts — market day, caravan, wharf, treasury, a price movement.
  • 5 society cuts — marriage, birth, feast, contest, performance.
  • 5 learning cuts — expedition, relic, laboratory, observation, a working.
  • 4 public works and 5 country cuts — a building raised, a bridge, a well, a road; harvest, portent, a creature sighted, a herd, a great tree.
  • 6 advertisement blocks, 8 weather glyphs, 8 printer's ornaments and 4 masthead devices.

Every one of them is a C# function you can open, change, or copy to author your own.

It strikes its own type

The masthead, the headlines, the datelines, the bylines, the weather box, the advertisements and the folio are struck as real letterforms from a display face inside the package. No font asset, no TextMeshPro, no Text component anywhere on the page.

The body copy is deliberately different. A broadsheet column is about eight point type, which on a 1200 pixel page is four pixels of cap height — a grey line with noise on it. So the body is set as type texture: bars of the right length, in the right rhythm, with real word spacing, a paragraph indent and a short last line. The word lengths come from the real distribution of English word lengths, because uniform lengths produce a barcode, and a barcode is how a fake newspaper is spotted at a glance.

That is the same division a nineteenth century compositor made: display type set by hand, body set on a machine. It reads correctly at arm's length and holds up when a player zooms into the headline.

A cut is a claim, so an unknown story gets none

Matching runs whole-word and case-insensitive in a fixed order: an explicit Kind, then your own Tags, then the words of the Report, then the Place. The first token that hits wins, which is why a report reading "the bridge burned as the fleet sailed" can be pinned to the one it is actually about.

If nothing matches, the story sets as a headline and type with no cut at all. Every other choice on the page has a deterministic fallback; a story cut does not, on purpose. A picture is a claim about what happened, and a hashed fallback would print a siege over a story about a bridge.

Six presses, and the same log prints the same paper

Broadside, Frontier, Penny Press, Wartime, Tabloid and Samizdat each carry their own palette, paper and press wear, and the issue's heaviest story sets its tenor. Every derived choice hangs off a stable seed, so the same event log composes the same page every time your game runs — and a player screenshotting day 41 beside day 12 sees one paper, not two unrelated pictures.

What you write

EventRecord and GazetteIssue are plain serialisable classes, deliberately the shape an event log already has. Fill them, then:

Texture2D page = GazettePage.Compose(issue, 1200, 1600);

Open the demo scene and press Play to see it composed from sample events, or open Window › CSAF › Gazette, edit any field, and watch the page recompose. The panel underneath tells you which of your own words selected each cut and which fell through. Export writes a PNG.

What it costs to print a sheet, measured

Gazette rasterises on the CPU, so a sheet takes seconds, not milliseconds. Measured by importing the package into a blank Unity 6000.5.7f1 project and composing the sample issue — the span across two runs: 600×800 in 8.3–10.3 s, 900×1200 in 18.0–21.3 s, 1200×1600 in 23.0–27.8 s. The high figure is an observation and not a ceiling; a busier machine will take longer.

So do not compose a page on a frame a player is watching, and you do not have to. GazettePage.Bake touches no Unity object, so it runs on a worker thread — the demo scene ships doing exactly that, with the page appearing when it is ready. Or print the paper when the day ends and cache the texture. Either way the player opens a finished newspaper instantly. The full table and both patterns are in the Readme, and this is stated up front rather than left to be discovered after you buy.

The details that matter

  • Unity 2022.3 LTS and newer, built and gated on 6000.5.7f1.
  • Every render pipeline. It rasterises on the CPU into a Texture2D and uses no shader, no material and no camera, so Built-in, URP, HDRP and a custom pipeline are all the same to it.
  • No third-party dependencies, no Resources/ folder, and every script in a named platform-constrained asmdef.
  • No network calls of any kind. It writes a file only when you press Export and choose a path.
  • Full readable source. Nothing obfuscated, minified or compiled away.
  • Ship the pages in your game freely — in the game, its store page, its trailer, its press kit. They are yours.

Disclosure

This tool's code and its store imagery were made with AI assistance, and that is declared on every storefront that asks. What it does not mean: no image model touched the artwork. Every mark is procedural C# in Runtime/Mark/, there is no diffusion model anywhere in the art path, and the tool generates identical output with no network connection at all.

More from CSAF

More Unity editor tools from the same studio:

Everything else we make is at csaf.itch.io.

Purchase

Buy Now$14.99 USD or more

In order to download this asset pack you must purchase it at or above the minimum price of $14.99 USD. You will get access to the following files:

gazette-unity-package.zip 329 kB
Version 1.0.0

Development log

Leave a comment

Log in with itch.io to leave a comment.