# Asset credits — ZONE 01:23 v2

Every third-party byte shipped by this repo is listed here with its license and
source URL. All runtime assets are committed and served same-origin (the CSP
allows nothing else). Fetching/encoding happens only at dev time via
`tools/fetch-assets.mjs` and `tools/encode-models.mjs`; sources are cached in
gitignored `tools/_src/`. sha256 is the hash of the downloaded source file(s).

Both ambientCG and Poly Haven publish under CC0 1.0 Universal
(https://creativecommons.org/publicdomain/zero/1.0/) — no attribution required,
attribution given anyway.

## PBR texture sets (assets/tex/…)

<!-- BEGIN:TEXTURES -->
| set | source | license | tier | purpose | fetched | sha256 (source) |
|---|---|---|---|---|---|---|
| `concrete031` | [Concrete031](https://ambientcg.com/view?id=Concrete031) | CC0 1.0 | hero | Soviet bunker green-gray tile; interior hero wall (corridors, stairwells, sanpropusknik wainscot) | 2026-08-23 | `a346866352d7` |
| `asphalt033` | [Asphalt033](https://ambientcg.com/view?id=Asphalt033) | CC0 1.0 | hero | dark granular industrial asphalt; roads/pavement bucket + terrain asphalt layer | 2026-08-23 | `ad7193b7635b` |
| `paintedplaster017` | [PaintedPlaster017](https://ambientcg.com/view?id=PaintedPlaster017) | CC0 1.0 | hero | white plaster; interior upper walls + ceilings | 2026-08-23 | `a61330b10b1a` |
| `paintedmetal006` | [PaintedMetal006](https://ambientcg.com/view?id=PaintedMetal006) | CC0 1.0 | hero | green painted rusty metal; consoles, doors, lockers, machine casings | 2026-08-23 | `15ab5881fae2` |
| `tiles101` | [Tiles101](https://ambientcg.com/view?id=Tiles101) | CC0 1.0 | hero | white square tile; sanpropusknik walls/floor | 2026-08-23 | `db3c1cd1faa4` |
| `woodfloor064` | [WoodFloor064](https://ambientcg.com/view?id=WoodFloor064) | CC0 1.0 | hero | dark parquet; BSchU + canteen floor | 2026-08-23 | `c14c4b907432` |
| `paintedplaster006` | [PaintedPlaster006](https://ambientcg.com/view?id=PaintedPlaster006) | CC0 1.0 | secondary | broken painted facade plaster; Palace of Culture / 'white' bucket | 2026-08-23 | `d0611e8bffe7` |
| `paintedplaster008` | [PaintedPlaster008](https://ambientcg.com/view?id=PaintedPlaster008) | CC0 1.0 | secondary | blue broken plaster; office lower wall band | 2026-08-23 | `baff4ac02716` |
| `corrugatedsteel005` | [CorrugatedSteel005](https://ambientcg.com/view?id=CorrugatedSteel005) | CC0 1.0 | secondary | plant exterior industrial walls | 2026-08-23 | `9bec057d9db9` |
| `metalplates013` | [MetalPlates013](https://ambientcg.com/view?id=MetalPlates013) | CC0 1.0 | secondary | rusted plate; exterior 'metal' bucket | 2026-08-23 | `83687a9d4fe9` |
| `metalplates006` | [MetalPlates006](https://ambientcg.com/view?id=MetalPlates006) | CC0 1.0 | secondary | gallery deck, stair treads — **manifest-declared fallback for DiamondPlate008** | 2026-08-23 | `18dc289f6212` |
| `metal032` | [Metal032](https://ambientcg.com/view?id=Metal032) | CC0 1.0 | secondary | worn galvanized; pipes, cable trays, ducts | 2026-08-23 | `4b8884843c49` |
| `concrete_slab_wall_02` | [concrete_slab_wall_02](https://polyhaven.com/a/concrete_slab_wall_02) | CC0 1.0 | hero | precast panel; apartment facades ('concrete' bucket), 1 panel module = 3 m | 2026-08-23 | `2ee81d2e6e08 f983fd026841 4d9d1a69acea` |
| `snow_02` | [snow_02](https://polyhaven.com/a/snow_02) | CC0 1.0 | hero | smooth powdery snow; terrain snow layer + deformable carpet (albedo ~0.82, lum gate 0.03-0.05) | 2026-08-23 | `d185c2853c7e b17b8e2f1be8 288539ee3338` |
| `snow_03` | [snow_03](https://polyhaven.com/a/snow_03) | CC0 1.0 | hero | trampled snow/mud; terrain off-road base (replaces canvas 'grass') | 2026-08-23 | `5ea976f2bcfa 3c46bfab5849 b4db0799b113` |
| `concrete_floor_worn_001` | [concrete_floor_worn_001](https://polyhaven.com/a/concrete_floor_worn_001) | CC0 1.0 | hero | machine hall / basement floors | 2026-08-23 | `e29b45cdcd6d f239a75b8b81 3b782137e34d` |
| `concrete_wall_007` | [concrete_wall_007](https://polyhaven.com/a/concrete_wall_007) | CC0 1.0 | detail | shared detail micro-normal (detailN) — nor_gl only | 2026-08-23 | `cccb1841908c` |
<!-- END:TEXTURES -->

## Environment (assets/env/…)

<!-- BEGIN:ENV -->
| file | source | license | purpose | fetched | sha256 |
|---|---|---|---|---|---|
| `kloppenheim_07_puresky_1k.hdr` | [kloppenheim_07_puresky](https://polyhaven.com/a/kloppenheim_07_puresky) | CC0 1.0 | outdoor env upgrade at MED+ (RGBELoader -> PMREM at boot) | 2026-08-23 | `c18aa40364d1` |
<!-- END:ENV -->

## Downloaded models (assets/models/…)

<!-- BEGIN:MODELS -->
| file | source asset(s) | license | notes | fetched | sha256 (source gltf) |
|---|---|---|---|---|---|
| `covered_car.glb` | [covered_car](https://polyhaven.com/a/covered_car) | CC0 1.0 | tarped parked car — replaces 5 of 7 box-cars (evacuation-eve fiction); quantized + 1K WebP, length 4.38 m along +Z | 2026-08-23 | `80b210b08673` |
| `facility_props.glb` | [caged_hanging_light](https://polyhaven.com/a/caged_hanging_light), [mounted_fluorescent_lights](https://polyhaven.com/a/mounted_fluorescent_lights), [modular_industrial_pipes_01](https://polyhaven.com/a/modular_industrial_pipes_01), [modular_airduct_rectangular_01](https://polyhaven.com/a/modular_airduct_rectangular_01), [power_box_01](https://polyhaven.com/a/power_box_01), [utility_box_01](https://polyhaven.com/a/utility_box_01), [fire_alarm](https://polyhaven.com/a/fire_alarm), [steel_frame_shelves_01](https://polyhaven.com/a/steel_frame_shelves_01), [Barrel_02](https://polyhaven.com/a/Barrel_02), [metal_trash_can](https://polyhaven.com/a/metal_trash_can), [security_light](https://polyhaven.com/a/security_light), [metal_tool_chest](https://polyhaven.com/a/metal_tool_chest) | CC0 1.0 | 12 industrial props merged; wrapper node per asset named by asset id; quantized + 1K WebP | 2026-08-23 | `4d809194606f 7a56f167fe70 455d3a0fe95b 61468e734df8 edb54e68fb12 5b9f8c45f264 4a924f45a0f2 4eff8994825d 82204368af4d ccdc55ecfe43 d82d2191df1e 2f66fbb723cd` |
<!-- END:MODELS -->

## Voice-over (assets/audio/vo/…)

Generated at dev time by `tools/gen-voice.py` (regeneration is one command);
49 Russian lines, English subtitles, baked processing chains (radio band +
crackle + squelch, PA horn + slap echo + chime, glass lowpass, dry room) via
ffmpeg, shipped as ogg/opus 24 kbps mono (~1.05 MB total, 4 MB budget).
The seven fictional city-dispatch acknowledgements can be generated separately
with `tools/gen-field-voice.py`, which preserves the original cast recordings
and metadata.

<!-- BEGIN:VO -->
| what | source | terms | notes | generated |
|---|---|---|---|---|
| speech synthesis | edge-tts (Python, GPL-3.0 dev tool) driving the public Microsoft Edge read-aloud endpoint — neural voices `ru-RU-DmitryNeural`, `ru-RU-SvetlanaNeural` | Microsoft Edge read-aloud service; synthetic voices, no human performer. edge-tts is a DEV-TIME tool only — nothing of it ships; the generated audio ships same-origin like every other asset | whole cast from two voices via per-speaker rate/pitch + baked chains; fallback path: Piper TTS (MIT, fully local) via `--piper`, noted in the tool | 2026-08-23 |
| processing | ffmpeg (dev-time) | — | loudnorm -19 LUFS, per-chain EQ/echo/noise beds, libopus 24k voip | 2026-08-23 |
| fictional city dispatch | edge-tts / `ru-RU-SvetlanaNeural` | Same synthesis service as above; no human performer | Seven Russian route acknowledgements with English subtitles, radio EQ/compression/static/squelch; 227,830 bytes | 2026-09-10 |
<!-- END:VO -->

## Historical sources (the Unit 4 night shift)

ZONE 01:23 is a **dramatisation**. The player character (a trainee
dosimetrist) and Sasha are invented. Some NPCs are named after real members
of the Unit 4 night shift; the room layout, dialogue and portraits are
adaptations for the game, not a documentary reconstruction or verified
historical likenesses. No real person is a combat target or comic relief.
The snow, pre-accident blackout, access puzzle, instant radiation damage and
90-second escape are fictional gameplay. The boot screen and memorial
distinguish this story from the real night shift.

The 2026-09 review checked the recorded sequence against
[IAEA INSAG-7](https://pub.iaea.org/MTCD/publications/PDF/Pub913e_web.pdf)
and [UNSCEAR's overview](https://www.unscear.org/unscear/en/areas-of-work/chernobyl.html).
The script avoids giving Sasha advance certainty of the failure mechanism,
does not place a documented power excursion at 01:23:31, and does not treat
disputed explosion details as settled. See `docs/quality-review.md`.

Checked 2026-08-26 for names, patronymics, ages, posts and locations at 01:23:

| source | used for |
|---|---|
| Wikipedia, *Individual involvement in the Chernobyl disaster* | posts and locations at 01:23 for all ten: Akimov and Toptunov at the reactor control panel, Stolyarchuk at "desk P … controlling the feedwater and deaerator mechanisms", Kirschenbaum at "desk T", Perevozchenko (reactor section foreman), Proskuryakov and Kudryavtsev (SIUR trainees), Khodemchuk "stationed in the northern main circulating pumps engine room", Shashenok in room 604, Dyatlov supervising the test from the control room |
| Wikipedia / ru.wikipedia entries for Akimov, Toptunov, Dyatlov, Khodemchuk; ruwiki entry for Stolyarchuk | full names with patronymics, dates of birth and death, exact Russian job titles and the СИУР / СИУТ / СИУБ / НСБ abbreviations |
| Find a Grave memorials (Perevozchenko, Proskuryakov) | dates of birth for the two the encyclopaedias do not carry |
| IAEA INSAG-7 and the IAEA / NEA / World Nuclear Association accident sequences | the rundown (выбег) test and its purpose, the xenon poisoning and the 00:28 collapse to ~30 MWt, the 23:00 grid-dispatcher release on 25 April, the extra main circulating pumps at 01:03 and 01:07, the 01:23:04 test start, the AZ-5 press at 01:23:40, the two explosions seconds apart |
| Higginbotham, *Midnight in Chernobyl*; Medvedev, *The Truth About Chernobyl* | corroboration of the same placements and of the trainees having come in off shift to watch the test |

Where the sources disagree the game says less, not more: the reason AZ-5 was
pressed is recorded as unsettled and the game does not invent one.

### What the night shift wore — and what it did not

The question that started this pass was whether the characters should be in
hazmat suits. **They should not, and nobody in the 00:55–01:23 window is.**
Protective clothing at Chernobyl belongs to the people who came *after* the
explosion — the firefighters, the civil-defence reservists and the liquidators
of the months that followed — and even they mostly did not have any. What the
operating shift wore was the Soviet atomic industry's ordinary issue: a
**white cotton (х/б) two-piece — jacket and trousers — with a soft white cotton
cap**, changed into at the sanpropusknik on the way in.

| source | used for |
|---|---|
| Arzamas Academy, [*Дресс-код советского физика-ядерщика (в 110 фотографиях)*](https://arzamas.academy/materials/2215) | the garment itself, from a photo essay of the Soviet atomic complex: white was the atomic industry's allotted colour ("в СССР, где производили рабочие халаты трёх цветов … атомщикам достался белый"); the cloth is dense white cotton with a satin weave *because* it washes clean of contamination; the small white cotton cap (чепчик) is worn at every rank; and the one genuinely protective garment — the **пневмокостюм**, PVC film with a clear helmet and an air hose — belongs to high-dose *repair* work, not to running a unit |
| [*Завели моду на СИЗы*](https://strana-rosatom.ru/2022/04/22/zaveli-modu-na-sizy-kak-poyavilas-spec/), Strana Rosatom (the industry's own paper) | corroboration in one line: "спецодежда атомщиков — исключительно белого цвета", "костюмы шьют только из натурального хлопка" — white, and cotton only |
| PTK Moderam, [*Почему атомщики используют белую обувь?*](https://moderam.ru/obzory-i-stati/pochemu-atomshchiki-ispolzuyut-beluyu-obuv.html) | *why* white, which is what makes it a period constant rather than a style choice: the chlorine used to decontaminate the suits destroys dyes, and contamination has to be **visible** on the cloth for a check to mean anything |
| Rare Historical Photos, [*Chernobyl Disaster in Rare Pictures, 1986*](https://rarehistoricalphotos.com/chernobyl-disaster-pictures-1986/) | the negative half of the claim: protective gear at Chernobyl was improvised *after* the accident — lead sheet 2–4 mm thick cut by hand and worn "under cotton workwear" — and civil-defence reservists worked in ordinary army uniform "protected only by cotton petal respirators". Nothing like a hazmat suit existed for a night shift at a desk |
| Wikipedia, [*Individual involvement in the Chernobyl disaster*](https://en.wikipedia.org/wiki/Individual_involvement_in_the_Chernobyl_disaster) | checked directly for this pass: the record of the ten men's posts and doses says **nothing whatever** about protective equipment, because there was none to record |
| PNNL-13581, [*Independent Evaluation of the Lepestok Filtering Facepiece Respirator*](https://www.pnnl.gov/main/publications/external/technical_reports/pnnl-13581.pdf) (US DOE) | the ШБ-1 "Лепесток" — a 10 g disposable cotton/Petryanov-filter half-mask, in Soviet production since the late 1950s and stocked at nuclear plants. This is the only respiratory protection that is defensible anywhere in this game's window, and only *after* the blast |
| Hollywood Reporter / Filmmakers Academy on Odile Dicks-Mireaux, costume designer, HBO's *Chernobyl* | corroborating a production that did the same research: original Soviet workwear and medical-uniform patterns, period garments sourced across Eastern Europe |

**Confidence, stated honestly.** No source photographs *these* men at 01:23 — the
encyclopaedic record of that night is about posts, doses and timings and is
silent on clothing. The whites are therefore an inference from documented
standard practice at Soviet RBMK stations, not a citation about ten named
individuals. That is the right level of confidence to build at: it is the
dress the plant issued, for reasons that had nothing to do with fashion and
did not vary by shift. What we are *certain* of is the negative — that nobody
on that shift was in protective gear — and that is the claim the pass was
actually asked to settle.

**What the game does with it.** All ten historical figures and the fictional
indoor staff (the desk guard at the dosimetry glass, the canteen attendant,
the man walking the service corridor, Sasha) wear the white two-piece, faces
visible, hood-down heads unchanged; several wear the soft cap. No protective
gear appears anywhere, and no respirator either — the "petal" is documented
and available but the game has no post-blast beat that needs one, and a mask
over a face is the opposite of what this cast is for.

Everyone lost their gloves in the same pass, the player included. The hands
were baked as dark leather because they used to sit on the end of a parka
sleeve; against white cotton a black glove reads as *handling gear*, which is
the one thing this cast is not wearing. Nothing in the sources puts gloves on
an operator at a control desk, and the same white-cotton issue the rest of the
uniform comes from does not include them.

**The player’s fictional field outfit.** The protagonist wears a fitted olive
field uniform with boots and a rucksack. Its dye and gear distinguish him
from the indoor staff; this is an art choice, not a claim about documented
1986 workwear. The snowfall of *PERVYI SNEG* is also invented. The fitted
outfit replaces the earlier padded parka and scarf, while retaining the same
character rig, cloth surfaces and motion clips.

## Detailed character portraits

The character head includes an adaptation of **Infinite, 3D Head Scan by Lee Perry-Smith**, based on a work at [triplegangers.com](https://www.triplegangers.com/), licensed under [Creative Commons Attribution 3.0 Unported](https://creativecommons.org/licenses/by/3.0/). Source geometry and scanned color/normal maps were obtained from the [three.js r185 example assets](https://github.com/mrdoob/three.js/tree/r185/examples/models/gltf/LeePerrySmith). The original license notice is retained in `tools/blender/source/lee-perry-smith/LeePerrySmith_License.txt`.

Changes for this game: balanced head proportions and a shorter continuous neck, open eyelid apertures, new eyeballs and irises, moist lid margins, layered swept hair with tapered roots and strand maps, facial variants, blinking and restrained brow expressions, fitted caps, and binding to the game's character skeleton. Distant hair uses simplified geometry while retaining the full close-up model and cast morphs. The cotton weave maps and hair strand maps are generated by this project's Blender pipeline. The uniform fit, compression folds, continuous cloth bindings and fitted nail plates are procedural project geometry. The work uniform includes a fitted hem and corrected hip deformation, with hidden interior faces removed where they cut through the bent exterior. These adapted portraits are not verified historical likenesses. The third-party portrait source and its applicable license remain distinct from the repository's UNLICENSED project code. Rebuild instructions are in `tools/blender/source/lee-perry-smith/README.md`.

The speech adaptation adds a sealed lip contact, local jaw and lip shapes,
recessed procedural teeth/tongue/oral surfaces, and restrained eye gaze.
Speech responds to decoded audio envelopes and acoustic shape cues; it is
not phoneme-aligned animation. These changes preserve the portrait source
attribution and existing character identities, skeleton and movement clips.
The soft cotton work cap is fitted over the final hair and forehead surfaces,
with a recessed inner wall and narrow hem; its cast shapes follow those same
surfaces so swept locks remain tucked beneath the crown.

The wardrobe construction pass adds project-authored folded collar points,
button plackets, chest pocket panels and flaps, welt pockets, cuff bands,
topstitch seams and boot welts/toe seams. Its cotton twill colour, normal and
roughness maps are original deterministic Blender textures, encoded without
changing their RGB pixels. These construction details are an art adaptation,
not a claim to reproduce a particular historical uniform pattern. The
reviewed cloth/body surfaces, portrait, caps, hair, skin bindings and motion
clips are retained; only the five former buried button heads are replaced.

The portrait surface finishing pass adds project-authored anatomical skin
roughness and a small sclera/iris response data map, generated deterministically
by `tools/refine-portrait-materials.mjs` in the existing scan UVs. The source
scan's color and normal maps retain their attribution and license. The oral
cavity is rendered as an inward-facing shell, and bare-hand vertex pigments
are calibrated against unlit cheek texels from that same scan. These edits
retain the face/eye geometry, cast and speech shapes, clothing, hair, skeleton
and movement clips; their precise export checks and rebuild recipe are in the
portrait source README. Runtime eye attention compensates the actual posed
head transform. These are rendering and animation adaptations, not verified
likenesses of the historical crew.
