Dossier — Generated Case File Spread for Unity
A downloadable asset pack
Your mystery game already knows its suspects, clues and statements. Dossier types them up.
Hand Dossier a case and it composes an open manila case file on a lamp-lit desk: a suspect roster typed onto a printed form with a booking photograph beside every name, an evidence index with redaction bars wherever your data says a fact is unknown, carbon copies and telex strips for the statements, rubber stamps struck in red, a paperclip, a strip of evidence tape, and the investigator's red-pencil marks in the margins.
None of it is an imported image. Every sheet, stamp, clip and line of type is drawn in code by a software rasteriser shipped in the package, and the lettering is filled from the outlines of three real typefaces (Oswald, Courier Prime and Caveat, SIL Open Font License, included).
The layout answers the data
- Three people get full-width cards with large photographs; ten get a two-column roster.
- Seven clues get two lines each with their descriptions; twenty get a two-column index.
- A cold case is typed on yellowed, foxed paper; a classified one on onionskin, redacted hard.
- A suspect's status strikes the stamp across their photograph: SUSPECT, CLEARED, CHARGED, DECEASED, MISSING, WITNESS, INFORMANT, PERSON OF INTEREST, UNIDENTIFIED.
- A key clue linked to a suspect gets a red-pencil arrow across the spread to that person's photograph, and the most-linked suspect has their name circled.
- A statement taken by interview is a carbon copy; one taken by phone, telegram or radio is a telex strip. Low reliability earns a "doubtful" query in the margin.
Unknown is a word, not a blank
An empty field is simply not typed. A field that says it is unknown (?, unknown, redacted, classified, withheld) is blacked out, weighted by what the fact is: a withheld name is blocked out with a double marker pass, an alias gets a marker bar, an age is struck through. A sentence that merely contains the word ("an unknown man in a grey coat") is data and is typed.
52 hand-authored motifs, 4 paper stocks
- Stamps (8): box, double rule, round seal, oval, date, slanted banner, cartouche, hazard band
- Fasteners (6): gem paperclip, brass owl clip, binder clip, staples, push pin, brass paper fastener
- Tapes (4), folder tabs (6), photo mountings (4), typed blocks (5)
- Hand marks (8): circle, underline, arrow, query, tick, cross, bracket, star
- Stains (4), redactions (3), and four paper stocks: bond, aged, onionskin, ledger
Nothing is struck over a name
Every stamp, clip, strip of tape and coffee ring is placed by searching candidate spots for one that misses the record. A name, a title, a face, the booking placard and a redaction bar are refused outright. The red-pencil arrow goes through the same search, and when a crowded card leaves no clear approach it stops at the circled name instead of ruling through the file. The editor window lists anything that was left out, and why.
Thirty seconds to your first spread
var c = new CaseFile { CaseNumber = "HX-1954-0117", Title = "The Lantern Street Fire",
Category = "Arson", Status = CaseStatus.Active };
c.Suspects.Add(new CaseSuspect { Name = "Marguerite Vane", Status = SuspectStatus.Suspect });
c.Clues.Add(new CaseClue { Title = "Scorched theatre ticket", Status = ClueStatus.Key,
LinkedTo = "Marguerite Vane" });
Texture2D spread = DossierSpread.Compose(c, type); // 1920x1080 by default
Or open Tools > CSAF > Dossier, pick a case (or one of the four samples) and press Compose spread. Beside the spread the window shows why it looks like this: every stamp, clip and paper choice with the word in your data that chose it. Cases can also be authored as ScriptableObject assets with no code at all.
The result is an ordinary Texture2D: show it in uGUI, UI Toolkit, or on a quad lying on your own desk. Turn the lamp-lit desk off and the area round the folder is transparent.
Demo scene
Assets/CSAF/Dossier/Demo/Scenes/DossierDemo.unity. Press Play and page between four sample cases (active, cold, closed and classified) with the arrow keys.
Compatibility
- Unity 2022.3 and newer, including Unity 6. Built and tested against 6000.5.7f1.
- Render pipeline agnostic: Built-in, URP and HDRP. The spread is rasterised on the CPU into a texture, so it touches no pipeline.
- Three named assembly definitions (Runtime, Editor, Demo). No
Resourcesfolder, no shaders, no images, no network calls, no third-party packages. - Full, readable C# source. 34 scripts.
Performance, measured
A full 1920x1080 spread took 3.1 to 4.1 s in the Unity 6000.5.7f1 Editor on a busy build machine, and about 1 s at 960x540. That is a sample, not a ceiling. Compose it once when the case changes, off the main thread (the documented recipe uses Task.Run), never per frame.
Limitations, stated plainly
- The font reader is TrueType only, with no hinting or kerning tables, and no complex-script shaping. Latin is what the shipped faces are for.
- The layout sets up to 10 suspect cards, 24 clues and 4 statements; the rest are listed as continued on file, never dropped silently.
- The photographs are generated profiles unless you supply portraits.
- It is not a detective game framework: it does not run your case logic, deduction or dialogue. Keep whichever framework you use and hand Dossier its data.
Documentation: the full guide, also included in the package.
AI disclosure
Code: yes. Graphics: yes, because the code that draws the spread was AI-written; there is no image model anywhere in the art path, and every spread is rasterised offline and deterministically by the shipped code. Sounds: no, the package contains no audio. Text and dialog: no.
| Published | 3 days ago |
| Status | Released |
| Category | Assets |
| Author | CSAF — Core Systems Asset Factory |
| Made with | Unity |
| Tags | Asset Pack, Crime, Detective, Generator, Mystery, Noir, Procedural Generation, sourcecode, Unity, User Interface (UI) |
| Languages | English |
| Links | Homepage |
| AI Disclosure | AI Assisted, Code, Graphics |
Purchase
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:









Leave a comment
Log in with itch.io to leave a comment.