-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdocs.html
More file actions
251 lines (232 loc) · 57.6 KB
/
Copy pathdocs.html
File metadata and controls
251 lines (232 loc) · 57.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover">
<meta name="theme-color" content="#080a0c">
<meta name="author" content="Kevin B. Liu">
<meta name="copyright" content="Copyright © 2026 Kevin B. Liu">
<meta name="application-name" content="Claude of Tanks">
<meta name="description" content="Technical documentation for Claude of Tanks: how it was built, procedural model and icon workflows, 60 Hz combat, bots, audio, performance, {{COT_PRODUCTION_VEHICLES}} vehicles, {{COT_BATTLEFIELDS}} battlefields, and Three.js rendering.">
<link rel="canonical" href="https://cot.kevinliu.studio/docs">
<link rel="describedby" href="/llms.txt" type="text/plain">
<link rel="manifest" href="/site.webmanifest">
<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1">
<meta property="og:site_name" content="Claude of Tanks"><meta property="og:title" content="Claude of Tanks Technical Field Manual"><meta property="og:description" content="How the game was built, how procedural tanks and icons are made, and how combat, AI, audio, rendering, multiplayer, performance, and browser tools work."><meta property="og:type" content="article"><meta property="og:url" content="https://cot.kevinliu.studio/docs"><meta property="og:locale" content="en_US"><meta property="og:image" content="https://cot.kevinliu.studio/brand/og/docs.jpg"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="630"><meta property="og:image:type" content="image/jpeg"><meta property="og:image:alt" content="Claude of Tanks in-engine armored battle and crest wordmark">
<meta name="twitter:card" content="summary_large_image"><meta name="twitter:title" content="Claude of Tanks Technical Field Manual"><meta name="twitter:description" content="Build workflow, procedural models and icons, combat, bots, audio, rendering, multiplayer, performance, mobile, and production tools."><meta name="twitter:image" content="https://cot.kevinliu.studio/brand/og/docs.jpg"><meta name="twitter:image:alt" content="Claude of Tanks in-engine armored battle and crest wordmark">
<link rel="icon" type="image/svg+xml" href="/brand/favicon.svg">
<link rel="preload" href="/media/presentation-r1/12_urban_crossfire_x.webp" as="image">
<link rel="stylesheet" href="/src/presentation/mediaArchive.css">
<link rel="stylesheet" href="/src/docs/docs.css">
<link rel="stylesheet" href="/src/presentation/publicNav.css">
<title>Technical Field Manual — Claude of Tanks</title>
<script type="application/ld+json">{"@context":"https://schema.org","@graph":[{"@type":"TechArticle","@id":"https://cot.kevinliu.studio/docs#manual","url":"https://cot.kevinliu.studio/docs","headline":"Claude of Tanks Technical Field Manual","description":"Public engineering documentation for how Claude of Tanks was built, its procedural model and icon workflow, simulation, AI, audio, renderer, worlds, multiplayer, performance, interface, Tank Gallery, and Scene Studio.","image":"https://cot.kevinliu.studio/brand/og/docs.jpg","author":{"@type":"Person","@id":"https://cot.kevinliu.studio/#creator","name":"Kevin B. Liu","url":"https://github.com/Kevin-Liu-01"},"copyrightHolder":{"@id":"https://cot.kevinliu.studio/#creator"},"dateModified":"2026-09-03","mainEntityOfPage":{"@id":"https://cot.kevinliu.studio/docs#page"},"about":{"@id":"https://cot.kevinliu.studio/#game"},"inLanguage":"en-US"},{"@type":"WebPage","@id":"https://cot.kevinliu.studio/docs#page","url":"https://cot.kevinliu.studio/docs","name":"Technical Field Manual — Claude of Tanks","isPartOf":{"@id":"https://cot.kevinliu.studio/#website"},"about":{"@id":"https://cot.kevinliu.studio/#game"}},{"@type":"VideoGame","@id":"https://cot.kevinliu.studio/#game","name":"Claude of Tanks","url":"https://cot.kevinliu.studio/"}]}</script>
</head>
<body>
<nav class="public-nav" aria-label="Primary navigation">
<div class="public-nav__inner">
<a class="public-nav__brand" href="/home" data-i18n-aria-label="publicNav.brandAria"><img src="/brand/logo-mark.svg" alt=""><span>Claude <b>of Tanks</b></span></a>
<div class="public-nav__links">
<a href="/home"><img class="public-nav__icon public-nav__icon--home" src="/brand/nav/home.svg" alt=""><span data-i18n="publicNav.home">Home</span></a><a href="/studio"><img class="public-nav__icon public-nav__icon--studio" src="/brand/nav/studio.svg" alt=""><span data-i18n="publicNav.studio">Studio</span></a><a href="/gallery"><img class="public-nav__icon public-nav__icon--tank" src="/brand/nav/tank-gallery.svg" alt=""><span data-i18n="publicNav.gallery">Gallery</span></a><a href="/docs" aria-current="page"><img class="public-nav__icon public-nav__icon--docs" src="/brand/nav/docs.svg" alt=""><span data-i18n="publicNav.docs">Docs</span></a>
<a class="public-nav__github" href="https://github.com/Kevin-Liu-01/claude-of-tanks" target="_blank" rel="noreferrer" data-i18n-aria-label="publicNav.githubAria"><span class="public-nav__github-label" data-i18n="publicNav.githubLabel">GitHub</span><span class="public-nav__stars"><svg viewBox="0 0 16 16" aria-hidden="true"><path d="m8 1.2 2.1 4.2 4.7.7-3.4 3.3.8 4.7L8 11.9l-4.2 2.2.8-4.7-3.4-3.3 4.7-.7L8 1.2Z"/></svg><span data-github-stars data-github-stars-state="loading" aria-busy="true" aria-label="Loading GitHub star count"></span></span></a>
<a class="public-nav__cta" href="/"><span class="public-nav__play-icon" aria-hidden="true"></span><span data-i18n="publicNav.playNow">Play Now</span></a>
</div>
</div>
</nav>
<header class="docs-hero docs-hero--visual">
<img src="/media/presentation-r1/12_urban_crossfire_x.webp" alt="Three armored vehicles exchanging fire in Steinburg" data-i18n-alt="docs.media.alt.threearmoredvehiclesexchangingfireinsteinburg">
<div class="docs-hero-shade"></div>
<div class="shell">
<div class="docs-hero-copy">
<p class="docs-hero-eyebrow"><span data-doc-icon="manual"></span><span data-i18n="docs.hero.eyebrow" data-i18n-vars='{"date":"3 September 2026"}'>Engineering field manual // Updated 3 September 2026</span></p>
<h1><span data-i18n="docs.hero.titleLead">Inside the</span><br><span data-i18n="docs.hero.titleMain">browser battlefield</span></h1>
<p class="hero-lede" data-i18n-html="docs.hero.lede" data-i18n-vars='{"name":"Claude of Tanks"}'>See how <strong>Claude of Tanks</strong> turns Three.js, deterministic simulation, procedural vehicles, physical ballistics, networking, and production tooling into one playable browser game.</p>
<div class="docs-hero-actions">
<a class="primary" href="#chapters"><span data-doc-icon="manual"></span><span data-i18n="docs.hero.ctaExplore">Explore system guides</span></a>
<a href="https://github.com/Kevin-Liu-01/Claude-of-Tanks/blob/main/docs/ARCHITECTURE.md"><span data-doc-icon="github"></span><span data-i18n="docs.hero.ctaArch">Read the architecture</span></a>
</div>
<p class="docs-hero-route"><span data-i18n="docs.hero.badgeManuals" data-i18n-vars='{"count":"12"}'>12 focused manuals</span><span data-i18n="docs.hero.badgeRendererFree">Renderer-free public pages</span><span data-i18n="docs.hero.badgeVerification">Executable verification</span></p>
</div>
<figure class="doc-hero-reel">
<video controls playsinline preload="metadata" poster="/media/promo-v13/claude-of-tanks-promo-badged.jpg" aria-label="Claude of Tanks feature reel with chapter labels and synchronized score" data-i18n-aria-label="aria.claudeoftanksfeaturereelwithchapterlabelsandsynchronizedscore"><source src="/media/promo-v13/claude-of-tanks-promo-badged.mp4" type="video/mp4"><track kind="captions" src="/media/promo-v13/claude-of-tanks-promo-v13.vtt" srclang="en" label="English" default></video>
<figcaption><span data-i18n="docs.hero.reelCaption">Current in-engine feature reel</span><strong data-i18n="docs.hero.reelApproved" data-i18n-vars='{"version":"v13","seconds":"24"}'>Approved v13 // 24 seconds</strong></figcaption>
</figure>
</div>
</header>
<section class="docs-evidence" aria-label="Current build facts"><div class="shell"><dl>
<div><dt><span data-doc-icon="fleet"></span><span data-i18n="docs.evidence.fleet">Production fleet</span></dt><dd>{{COT_PRODUCTION_VEHICLES}} <span data-i18n="docs.evidence.fleetValue" data-i18n-vars='{"count":"{{COT_PRODUCTION_VEHICLES}}"}'>vehicles</span></dd></div>
<div><dt><span data-doc-icon="battlefields"></span><span data-i18n="docs.evidence.battlefields">Battlefields</span></dt><dd>{{COT_BATTLEFIELDS}} <span data-i18n="docs.evidence.battlefieldsValue" data-i18n-vars='{"count":"{{COT_BATTLEFIELDS}}"}'>maps</span></dd></div>
<div><dt><span data-doc-icon="simulation"></span><span data-i18n="docs.evidence.simulation">Simulation</span></dt><dd data-i18n="docs.evidence.simulationValue">60 Hz fixed step</dd></div>
<div><dt><span data-doc-icon="refresh"></span><span data-i18n="docs.evidence.presentation">Presentation</span></dt><dd><span>120 FPS</span> <span data-i18n="docs.evidence.presentationValue" data-i18n-vars='{"fps":"120"}'>test path</span></dd></div>
</dl></div></section>
<section class="docs-chapters" id="chapters" aria-labelledby="chaptersTitle"><div class="shell">
<div class="docs-chapters-heading"><div><p class="kicker" data-i18n="docs.chapters.kicker">Choose a system</p><h2 id="chaptersTitle" data-i18n="docs.chapters.title">Focused field manuals</h2></div><p data-i18n="docs.chapters.lede">Start with how the game was made, follow the model pipeline, or open a specific runtime system. Every guide connects behavior to ownership and proof.</p></div>
<div class="docs-chapter-grid">
<a href="/docs/build"><span class="docs-chapter-media"><img src="/media/presentation-r1/12_urban_crossfire_x.webp" alt="Armored battle running in the browser" data-i18n-alt="docs.media.alt.armoredbattlerunninginthebrowser"><span data-doc-icon="build"></span><b>01</b></span><span data-i18n="docs.chapter.build">How the game was built</span><strong data-i18n="docs.chapter.buildLede">Architecture, agent worktrees, proof loops, and main.</strong></a>
<a href="/docs/models"><span class="docs-chapter-media"><img src="/media/showcase-r2/11_gallery_hero.webp" alt="T-90M Proryv in the current Tank Gallery" data-i18n-alt="docs.media.alt.tmproryvinthecurrenttankgallery"><span data-doc-icon="models"></span><b>02</b></span><span data-i18n="docs.chapter.models">Procedural model pipeline</span><strong data-i18n="docs.chapter.modelsLede">References, rigs, anatomy, generated icons, and gates.</strong></a>
<a href="/docs/simulation"><span class="docs-chapter-media"><img src="/media/feature-loops-r1/01_desert_duel_leclerc_kill.jpg" alt="Desert tank engagement" data-i18n-alt="docs.media.alt.deserttankengagement"><span data-doc-icon="combat"></span><b>03</b></span><span data-i18n="docs.chapter.simulation">Simulation and combat</span><strong data-i18n="docs.chapter.simulationLede">Shots, armor, modules, reloads, and authority.</strong></a>
<a href="/docs/vehicles"><span class="docs-chapter-media"><img src="/media/feature-loops-r1/06_verdant_meadow_duel.jpg" alt="Tanks moving through a meadow" data-i18n-alt="docs.media.alt.tanksmovingthroughameadow"><span data-doc-icon="vehicles"></span><b>04</b></span><span data-i18n="docs.chapter.vehicles">Vehicles and running gear</span><strong data-i18n="docs.chapter.vehiclesLede">Procedural rigs, tracks, suspension, and anatomy.</strong></a>
<a href="/docs/rendering"><span class="docs-chapter-media"><img src="/media/feature-loops-r1/05_urban_hero_abramsx.jpg" alt="Tank in the urban renderer" data-i18n-alt="docs.media.alt.tankintheurbanrenderer"><span data-doc-icon="rendering"></span><b>05</b></span><span data-i18n="docs.chapter.rendering">Renderer and graphics</span><strong data-i18n="docs.chapter.renderingLede">Lighting, post-processing, quality, and recovery.</strong></a>
<a href="/docs/performance"><span class="docs-chapter-media"><img src="/media/showcase-r2/17_live_player_hud.webp" alt="Current measured gameplay frame from a K2" data-i18n-alt="docs.media.alt.currentmeasuredgameplayframefromak"><span data-doc-icon="performance"></span><b>06</b></span><span data-i18n="docs.chapter.performance">Performance and loading</span><strong data-i18n="docs.chapter.performanceLede">Cold boot, battle opening, frame pacing, and devices.</strong></a>
<a href="/docs/worlds"><span class="docs-chapter-media"><img src="/media/feature-loops-r1/03_winter_lake_duel.jpg" alt="Winter battlefield" data-i18n-alt="docs.media.alt.winterbattlefield"><span data-doc-icon="worlds"></span><b>07</b></span><span data-i18n="docs.chapter.worlds">Battlefields and destruction</span><strong data-i18n="docs.chapter.worldsLede">Terrain, structures, props, collision, and wrecks.</strong></a>
<a href="/docs/ai"><span class="docs-chapter-media"><img src="/media/presentation-r1/43_frontier_contact.webp" alt="Bots fighting across Frontier Basin" data-i18n-alt="docs.media.alt.botsfightingacrossfrontierbasin"><span data-doc-icon="ai"></span><b>08</b></span><span data-i18n="docs.chapter.ai">Bots and tactical AI</span><strong data-i18n="docs.chapter.aiLede">Perception, routes, aim, team safety, and survival.</strong></a>
<a href="/docs/multiplayer"><span class="docs-chapter-media"><img src="/media/presentation-r1/ui_spectator_switcher.webp" alt="Allied spectator camera" data-i18n-alt="docs.media.alt.alliedspectatorcamera"><span data-doc-icon="multiplayer"></span><b>09</b></span><span data-i18n="docs.chapter.multiplayer">Multiplayer authority</span><strong data-i18n="docs.chapter.multiplayerLede">Rooms, snapshots, prediction, and spotting.</strong></a>
<a href="/docs/audio"><span class="docs-chapter-media"><img src="/media/presentation-r1/ui_combat_firing.webp" alt="Tank firing with layered battlefield effects" data-i18n-alt="docs.media.alt.tankfiringwithlayeredbattlefieldeffects"><span data-doc-icon="audio"></span><b>10</b></span><span data-i18n="docs.chapter.audio">Audio and battlefield FX</span><strong data-i18n="docs.chapter.audioLede">Weapons, engines, spatial mix, radio, and replay.</strong></a>
<a href="/docs/interface"><span class="docs-chapter-media"><img src="/media/showcase-r2/16_mobile_garage.webp" alt="Current mobile Garage interface with a K2" data-i18n-alt="docs.media.alt.currentmobilegarageinterfacewithak"><span data-doc-icon="interface"></span><b>11</b></span><span data-i18n="docs.chapter.interface">Interface and controls</span><strong data-i18n="docs.chapter.interfaceLede">Garage, HUD, killcam, spectating, and touch.</strong></a>
<a href="/docs/studio"><span class="docs-chapter-media"><img src="/media/showcase-r2/15_studio_workspace.webp" alt="Current Scene Studio workspace" data-i18n-alt="docs.media.alt.currentscenestudioworkspace"><span data-doc-icon="studio"></span><b>12</b></span><span data-i18n="docs.chapter.studio">Studio and capture</span><strong data-i18n="docs.chapter.studioLede">Scenes, timelines, effects, video, and review gates.</strong></a>
</div>
</div></section>
<main class="docs-layout shell">
<aside class="docs-toc" aria-label="Documentation contents" data-i18n-aria-label="aria.documentationcontents">
<div class="toc-head"><span data-i18n="docs.toc.head">Field manual</span><button id="docsMenu" type="button" aria-expanded="false" data-i18n="docs.toc.menu">Menu</button></div>
<nav>
<a href="#overview"><span class="toc-index">01</span><span class="toc-icon" data-doc-icon="overview"></span><span class="toc-label" data-i18n="docs.toc.overview">Current system</span></a><a href="#graphics"><span class="toc-index">02</span><span class="toc-icon" data-doc-icon="rendering"></span><span class="toc-label" data-i18n="docs.toc.graphics">Graphics + drivers</span></a><a href="#vehicles"><span class="toc-index">03</span><span class="toc-icon" data-doc-icon="vehicles"></span><span class="toc-label" data-i18n="docs.toc.tankDesign">Tank design</span></a><a href="#combat"><span class="toc-index">04</span><span class="toc-icon" data-doc-icon="combat"></span><span class="toc-label" data-i18n="docs.toc.combat">Combat + killcam</span></a><a href="#worlds"><span class="toc-index">05</span><span class="toc-icon" data-doc-icon="worlds"></span><span class="toc-label" data-i18n="docs.toc.worlds">Worlds + physics</span></a><a href="#interface"><span class="toc-index">06</span><span class="toc-icon" data-doc-icon="interface"></span><span class="toc-label" data-i18n="docs.toc.hud">HUD + UI</span></a><a href="#multiplayer"><span class="toc-index">07</span><span class="toc-icon" data-doc-icon="multiplayer"></span><span class="toc-label" data-i18n="docs.toc.multiplayer">Multiplayer</span></a><a href="#performance"><span class="toc-index">08</span><span class="toc-icon" data-doc-icon="performance"></span><span class="toc-label" data-i18n="docs.toc.performance">Performance + GPU</span></a><a href="#mobile"><span class="toc-index">09</span><span class="toc-icon" data-doc-icon="mobile"></span><span class="toc-label" data-i18n="docs.toc.mobile">Mobile</span></a><a href="#studio"><span class="toc-index">10</span><span class="toc-icon" data-doc-icon="studio"></span><span class="toc-label" data-i18n="docs.toc.studio">Studio + review</span></a><a href="#gallery"><span class="toc-index">11</span><span class="toc-icon" data-doc-icon="gallery"></span><span class="toc-label" data-i18n="docs.toc.gallery">Tank Gallery</span></a><a href="#verification"><span class="toc-index">12</span><span class="toc-icon" data-doc-icon="verification"></span><span class="toc-label" data-i18n="docs.toc.verification">Verification</span></a>
</nav>
<p class="toc-footer" data-i18n="docs.toc.footer">This page is the overview. Use the detailed manuals above for system contracts, invariants, media, and verification paths.</p>
</aside>
<article class="docs-main">
<section class="doc-section" id="overview">
<p class="section-index" data-i18n="docs.section.overviewIdx">01 // Current system</p><h2><span class="doc-section-icon" data-doc-icon="overview"></span><span data-i18n="docs.section.overviewTitle">Current runtime overview</span></h2>
<p class="lead" data-i18n-html="docs.section.overviewLead" data-i18n-vars='{"name":"Claude of Tanks","prod":"{{COT_PRODUCTION_VEHICLES}}","dev":"{{COT_DEVELOPMENT_VEHICLES}}","saved":"{{COT_SAVED_VEHICLE_RECORDS}}","bf":"{{COT_BATTLEFIELDS}}"}'>Claude of Tanks is a browser-based armored combat game built directly on Three.js. Production exposes <strong>{{COT_PRODUCTION_VEHICLES}} first-party procedural vehicles</strong>; a keyed local-development build exposes <strong>{{COT_DEVELOPMENT_VEHICLES}} playable models</strong> from <strong>{{COT_SAVED_VEHICLE_RECORDS}} saved roster records</strong>. The game contains <strong>{{COT_BATTLEFIELDS}} authored battlefields</strong>, runs combat at a fixed <strong>60 Hz</strong>, and supports local bots, persistent private and LAN rooms, and dedicated ranked authority.</p>
<div class="principles"><article class="principle"><span class="principle-mark"><span data-doc-icon="authority"></span><b>01</b></span><h3 data-i18n="docs.principle.authorityTitle">Authoritative simulation</h3><p data-i18n="docs.principle.authorityBody">Clients request actions. The authority resolves movement, reloads, hits, damage, visibility, destruction, and match results.</p></article><article class="principle"><span class="principle-mark"><span data-doc-icon="measured"></span><b>02</b></span><h3 data-i18n="docs.principle.measuredTitle">Measured presentation</h3><p data-i18n="docs.principle.measuredBody">Three.js renders simulation state and adjusts visual cost without changing combat rate, map dimensions, ballistics, or armor.</p></article><article class="principle"><span class="principle-mark"><span data-doc-icon="assets"></span><b>03</b></span><h3 data-i18n="docs.principle.assetsTitle">Verified assets</h3><p data-i18n="docs.principle.assetsBody">Geometry fingerprints, generated diagrams, deterministic screenshots, browser checks, and release tests verify the current assets.</p></article></div>
<div class="callout warning"><strong data-i18n="docs.scope.title">Scope statement</strong><span data-i18n="docs.scope.body">Vehicle statistics and diagnostic overlays describe this game simulation. They are not real-world protection, engineering, or survivability assessments.</span></div>
<div class="doc-media-block" data-media-archive data-mode="rail" data-limit="8"></div>
</section>
<section class="doc-section" id="graphics">
<p class="section-index" data-i18n="docs.section.graphicsIdx">02 // Graphics + drivers</p><h2><span class="doc-section-icon" data-doc-icon="rendering"></span><span data-i18n="docs.section.graphicsTitle">Three.js rendering architecture</span></h2>
<p data-i18n="docs.section.graphicsLede">The engine owns the Three.js renderer, color output, camera, lighting, sky, fog, post-processing, shadows, GPU timing, quality policy, warmup, and context recovery. The renderer combines output conversion and color grading, supports stable high-refresh presentation, preserves image clarity during battle loading, and anchors cascaded shadows to prevent flashing during camera movement.</p>
<div class="doc-image-pair"><figure><img src="/media/showcase-r2/17_live_player_hud.webp" alt="Current game renderer and HUD from a K2" data-i18n-alt="docs.media.alt.currentgamerendererandhudfromak" loading="lazy"><figcaption data-i18n="docs.graphics.figFrame">Game frame // current lighting, shadows, atmosphere, HUD</figcaption></figure><figure><img src="/media/presentation-r1/13_urban_hero_leo2a6.webp" alt="Close game-rendered tank firing in Steinburg" data-i18n-alt="docs.media.alt.closegamerenderedtankfiringinsteinburg" loading="lazy"><figcaption data-i18n="docs.graphics.figClose">Close geometry // muzzle lighting, dust, material response</figcaption></figure></div>
<table class="ownership-table"><thead><tr><th data-i18n="docs.graphics.colName">Driver responsibility</th><th data-i18n="docs.graphics.colMech">Current mechanism</th><th data-i18n="docs.graphics.colFailure">Failure behavior</th></tr></thead><tbody><tr><td data-i18n="docs.graphics.rowClarityName">Image clarity</td><td data-i18n="docs.graphics.rowClarityMech">Device-capped pixel ratio, adaptive internal scale, subpixel AA, fused output/grade.</td><td data-i18n="docs.graphics.rowClarityFailure">Optional resolution and post cost adapt before gameplay.</td></tr><tr><td data-i18n="docs.graphics.rowShadowsName">Shadows</td><td data-i18n="docs.graphics.rowShadowsMech">Stable cascades, texel anchoring, bounded contrast, articulated tank shadow proxies.</td><td data-i18n="docs.graphics.rowShadowsFailure">Quality tiers reduce cascade cost without altering visibility rules.</td></tr><tr><td data-i18n="docs.graphics.rowShaderName">Shader readiness</td><td data-i18n="docs.graphics.rowShaderMech">Boot and transition warmup of battle-critical material/pass variants.</td><td data-i18n="docs.graphics.rowShaderFailure">Countdown waits for required visual work instead of compiling on first fire.</td></tr><tr><td data-i18n="docs.graphics.rowGpuName">GPU safety</td><td data-i18n="docs.graphics.rowGpuMech">Capability probes, framebuffer validation, context-loss recovery, black-frame rescue ladder.</td><td data-i18n="docs.graphics.rowGpuFailure">Optional shadows, environment, fog, and post can be stepped down.</td></tr></tbody></table>
<p data-i18n-html="docs.graphics.files" data-i18n-vars='{"files":"src/engine/renderer.ts, post.ts, lighting.ts, deviceDiag.ts, renderScalePolicy.ts, and the shadow stability and refresh self-tests"}'>Primary implementation files: <code>src/engine/renderer.ts, post.ts, lighting.ts, deviceDiag.ts, renderScalePolicy.ts, and the shadow stability and refresh self-tests</code>.</p>
</section>
<section class="doc-section" id="vehicles">
<p class="section-index" data-i18n="docs.section.vehiclesIdx">03 // Tank design</p><h2><span class="doc-section-icon" data-doc-icon="vehicles"></span><span data-i18n="docs.section.vehiclesTitle">Shared vehicle specifications</span></h2>
<p class="lead" data-i18n-html="docs.section.vehiclesLead" data-i18n-vars='{"prod":"{{COT_PRODUCTION_VEHICLES}}","dev":"{{COT_DEVELOPMENT_VEHICLES}}","saved":"{{COT_SAVED_VEHICLE_RECORDS}}","ref":"{{COT_REFERENCE_VEHICLE_RECORDS}}"}'>The canonical roster reports <strong>{{COT_PRODUCTION_VEHICLES}} production-visible vehicles, {{COT_DEVELOPMENT_VEHICLES}} keyed local-development models, and {{COT_SAVED_VEHICLE_RECORDS}} saved records</strong>, with {{COT_REFERENCE_VEHICLE_RECORDS}} reference-only placeholders kept outside the playable path. Every playable remains first-party procedural with zero GLB-sourced playable geometry. A shared vehicle specification supplies data to garage cards, combat authority, bots, icons, anatomy diagrams, Tank Gallery, and Scene Studio.</p>
<div class="system-grid"><article class="system-card"><header><span class="system-card-name"><span data-doc-icon="specification"></span><code>specification</code></span><span data-i18n="docs.vehicles.specTitle">canonical data</span></header><p data-i18n="docs.vehicles.specBody">Dimensions, mass, engine, movement, weapon, armor, modules, crew, labels, markings, nation, class, and tier.</p></article><article class="system-card"><header><span class="system-card-name"><span data-doc-icon="rig"></span><code>procedural rig</code></span><span data-i18n="docs.vehicles.rigTitle">current geometry</span></header><p data-i18n="docs.vehicles.rigBody">Hull, turret, gun, recoil group, fittings, suspension, road wheels, flexible track path, shadow proxies, and LOD.</p></article><article class="system-card"><header><span class="system-card-name"><span data-doc-icon="anatomy"></span><code>combat anatomy</code></span><span data-i18n="docs.vehicles.anatomyTitle">simulation data</span></header><p data-i18n="docs.vehicles.anatomyBody">Authored plates, internal volumes, crew stations, muzzle and articulation anchors, hit logic, and damage state.</p></article><article class="system-card"><header><span class="system-card-name"><span data-doc-icon="release"></span><code>release checks</code></span><span data-i18n="docs.vehicles.releaseTitle">verification</span></header><p data-i18n="docs.vehicles.releaseBody">Current hero, side, and top assets; geometry fingerprints; anatomy diagrams; focused profile tests; and release results.</p></article></div>
<div class="doc-image-pair"><figure><img src="/media/presentation-r1/ui_tank_closeup_modern.webp" alt="Close view of a current first-party tank rig" data-i18n-alt="docs.media.alt.closeviewofacurrentfirstpartytankrig" loading="lazy"><figcaption data-i18n="docs.vehicles.figFirstParty">First-party rig // armor, fittings, markings, running gear</figcaption></figure><figure><img src="/media/presentation-r1/43_frontier_contact.webp" alt="Bradley fighting in Frontier Basin" data-i18n-alt="docs.media.alt.bradleyfightinginfrontierbasin" loading="lazy"><figcaption data-i18n="docs.vehicles.figDiversity">Vehicle diversity // IFV mechanics in a current battlefield</figcaption></figure></div>
<p data-i18n="docs.vehicles.body">Vehicle systems include class-specific IFV statistics and audio behavior, visible recoil, magazine autoloaders, missiles and special actions, Swedish siege suspension, vehicle-specific fidelity profiles, and component-level geometry reports.</p>
</section>
<section class="doc-section" id="combat">
<p class="section-index" data-i18n="docs.section.combatIdx">04 // Combat + killcam</p><h2><span class="doc-section-icon" data-doc-icon="combat"></span><span data-i18n="docs.section.combatTitle">Projectile and damage resolution</span></h2>
<div class="doc-image-pair doc-image-pair--hero"><figure><img src="/media/showcase-r2/25_live_killcam_xray.webp" alt="Current X-ray killcam showing a resolved shell path through armor and modules" data-i18n-alt="docs.media.alt.currentxraykillcamshowingaresolvedshellpaththrougharmorandmodules" loading="lazy"><figcaption data-i18n="docs.combat.figKillcam">X-ray killcam // authoritative armor and module resolution</figcaption></figure><figure><img src="/media/presentation-r1/04_desert_last_stand.webp" alt="Multiple tanks firing and producing impact sparks" data-i18n-alt="docs.media.alt.multipletanksfiringandproducingimpactsparks" loading="lazy"><figcaption data-i18n="docs.combat.figEffects">Effects // muzzle flash, tracer, impact, dust, armor sparks</figcaption></figure></div>
<ol><li data-i18n="docs.combat.step1">The center reticle requests a finite world-space point.</li><li data-i18n="docs.combat.step2">Authority bounds turret yaw, gun pitch, traverse rate, and dispersion.</li><li data-i18n="docs.combat.step3">The articulated muzzle transform spawns AP, APCR, APFSDS, HEAT, or HE.</li><li data-i18n="docs.combat.step4">Projectile travel and gravity determine the first eligible world or vehicle contact.</li><li data-i18n="docs.combat.step5">Armor evaluates the struck plate, impact angle, slope, normalization, ricochet, overmatch, spaced layers, ERA, and ammunition behavior.</li><li data-i18n="docs.combat.step6">Damage updates hit points, modules, crew, fire, repair, tracks, and destruction state.</li><li data-i18n="docs.combat.step7">The HUD and X-ray killcam present the completed result.</li></ol>
<div class="callout"><strong data-i18n="docs.combat.invariantTitle">Killcam invariant</strong><span data-i18n="docs.combat.invariantBody">The X-ray view is a presentation of authority data. It cannot generate a second penetration or damage outcome.</span></div>
</section>
<section class="doc-section" id="worlds">
<p class="section-index" data-i18n="docs.section.worldsIdx">05 // Worlds + physics</p><h2><span class="doc-section-icon" data-doc-icon="worlds"></span><span data-i18n="docs.section.worldsTitle">Battlefield construction and physics</span></h2>
<p data-i18n="docs.worlds.lede" data-i18n-vars='{"maps":"Verdant Fields, Sirocco Wadi, Frosthollow, Steinburg, Saltmere Bay, Amberford, Tarkhan Steppe, Cinder Junction, Frontier Basin, Nordhavn Fjord, Jade River Delta, Redrock Divide, Monsoon Ridge, Glacier Pass, Obsidian Caldera, Ironworks, Ruinspires, Blackglass District, Titan Gorge, and Skybridge Chasm"}'>Verdant Fields, Sirocco Wadi, Frosthollow, Steinburg, Saltmere Bay, Amberford, Tarkhan Steppe, Cinder Junction, Frontier Basin, Nordhavn Fjord, Jade River Delta, Redrock Divide, Monsoon Ridge, Glacier Pass, Obsidian Caldera, Ironworks, Ruinspires, Blackglass District, Titan Gorge, and Skybridge Chasm share the current world systems.</p>
<div class="doc-media-block" data-media-archive data-mode="rail" data-feature="World system" data-filters="false" data-limit="16"></div>
<p data-i18n="docs.worlds.body">Each map combines designed routes and role-specific positions with smoothed terrain, matte surface materials, atmosphere, textured structures, precise collision, modern wreck families, detached remnants, movable props, crushable objects, toppling, linked utility wires, vegetation, craters, and persistent networked destruction. The original eight maps use the same current world systems as the expansion maps.</p>
</section>
<section class="doc-section" id="interface">
<p class="section-index" data-i18n="docs.section.interfaceIdx">06 // HUD + UI</p><h2><span class="doc-section-icon" data-doc-icon="interface"></span><span data-i18n="docs.section.interfaceTitle">Interface design across game states</span></h2>
<div class="doc-image-pair doc-image-pair--hero">
<figure><a href="/media/garage-environments-r2/verdant-workshop-floor.webp" target="_blank" rel="noreferrer"><img src="/media/garage-environments-r2/verdant-workshop-floor.webp" alt="M1A3 Abrams centered on the illuminated service platform inside Verdant Motor Pool" data-i18n-alt="docs.media.alt.maabramscenteredontheilluminatedserviceplatforminsideverdantmotorpool" loading="lazy"></a><figcaption data-i18n="docs.interface.figVerdant">Verdant Motor Pool // illuminated workshop floor // production Garage</figcaption></figure>
<figure><a href="/media/garage-environments-r2/abrams-service-bay.webp" target="_blank" rel="noreferrer"><img src="/media/garage-environments-r2/abrams-service-bay.webp" alt="M1 Abrams undergoing maintenance beside wheel dollies, tool storage, ammunition racks, and flammable-material drums" data-i18n-alt="docs.media.alt.mabramsundergoingmaintenancebesidewheeldolliestoolstorageammunitionracksandflammablematerialdrums" loading="lazy"></a><figcaption data-i18n="docs.interface.figAbrams">Abrams service bay // running-gear work // grounded shop equipment</figcaption></figure>
<figure><a href="/media/garage-environments-r2/burlak-service-bay.webp" target="_blank" rel="noreferrer"><img src="/media/garage-environments-r2/burlak-service-bay.webp" alt="T-90A Burlak hull and turret staged beneath overhead cranes in a maintenance bay" data-i18n-alt="docs.media.alt.taburlakhullandturretstagedbeneathoverheadcranesinamaintenancebay" loading="lazy"></a><figcaption data-i18n="docs.interface.figBurlak">Burlak service bay // separated assembly // overhead lift coverage</figcaption></figure>
</div>
<figure class="doc-wide-figure doc-wide-figure--uncropped"><a href="/media/showcase-r2/process/review-01.webp" target="_blank" rel="noreferrer"><img src="/media/showcase-r2/process/review-01.webp" alt="All ten Garage environments shown with a varied non-Abrams fleet and the current Garage interface" data-i18n-alt="docs.media.alt.alltengarageenvironmentsshownwithavariednonabramsfleetandthecurrentgarageinterface" loading="lazy"></a><figcaption data-i18n="docs.interface.figTen">Ten Garage environments // varied vehicle fleet // 4 September 2026 in-engine contact sheet</figcaption></figure>
<p data-i18n="docs.interface.body">The Garage combines one consistent vehicle and camera presentation with ten distinct service locations. Verdant keeps its enclosed Motor Pool; the other nine destinations use compact battlefield-derived terrain, connected structures, full-detail service exhibits, biome horizons, and the shared procedural sky without loading a battle world. Their release gate checks four orbit views, responsive layouts, structure support and collision, platform clearance, transition timing, and repeated-cycle resource growth.</p>
<div class="doc-ui-grid"><figure><img src="/media/showcase-r2/01_garage_verdant.webp" alt="Current Garage interface with a K2" data-i18n-alt="docs.media.alt.currentgarageinterfacewithak" loading="lazy"><figcaption data-i18n="docs.uiGarage.caption">Garage // maps, camos, dossier, rooms</figcaption></figure><figure><img src="/media/showcase-r2/17_live_player_hud.webp" alt="Current K2 battle HUD" data-i18n-alt="docs.media.alt.currentkbattlehud" loading="lazy"><figcaption data-i18n="docs.uiBattle.caption">Battle // reticles, ammo, team state, minimap</figcaption></figure><figure><img src="/media/showcase-r2/19_live_sniper.webp" alt="Current Leclerc XLR precision sight" data-i18n-alt="docs.media.alt.currentleclercxlrprecisionsight" loading="lazy"><figcaption data-i18n="docs.uiSight.caption">Sight // range, aim, bore, dispersion</figcaption></figure><figure><img src="/media/showcase-r2/25_live_killcam_xray.webp" alt="Current X-ray killcam resolving a hit" data-i18n-alt="docs.media.alt.currentxraykillcamresolvingahit" loading="lazy"><figcaption data-i18n="docs.uiKillcam.caption">Killcam // armor, path, modules, result</figcaption></figure></div>
<p data-i18n="docs.interface.tail">The current interface includes the vehicle dossier and component workshop, map and camouflage previews, autoloader shell rack, stabilized aiming readouts, room chat, local lifetime statistics, responsive nation filters, debrief and rematch flow, settings, graphics and audio controls, and compact FPS and ping telemetry. Debug and shadow-tuning controls require dedicated URL parameters and remain hidden during normal play.</p>
</section>
<section class="doc-section" id="multiplayer">
<p class="section-index" data-i18n="docs.section.multiplayerIdx">07 // Multiplayer</p><h2><span class="doc-section-icon" data-doc-icon="multiplayer"></span><span data-i18n="docs.section.multiplayerTitle">Multiplayer authority and session persistence</span></h2>
<figure class="doc-wide-figure doc-wide-figure--multiplayer"><img src="/media/multiplayer-r1/dual-perspective.webp" alt="Opposing live multiplayer views: an M1A2 Abrams and T-90M Proryv use matching camouflage and aim at each other from mirrored player cameras" data-i18n-alt="docs.media.alt.opposinglivemultiplayerviewsanmaabramsandtmproryvusematchingcamouflageandaimateachotherfrommirroredplayercameras" loading="lazy"><figcaption data-i18n="docs.multiplayer.fig">Two rendered clients // opposing cameras // authority-owned aiming and filtered snapshots</figcaption></figure>
<div class="trust-boundary"><div class="trust-zone"><h3 data-i18n="docs.multiplayer.clientTitle">Client responsibilities</h3><p data-i18n="docs.multiplayer.clientBody">Input requests and presentation.</p><ul><li data-i18n="docs.multiplayer.clientItem1">Normalized movement and aim input</li><li data-i18n="docs.multiplayer.clientItem2">Fire, ammunition, and equipment input</li><li data-i18n="docs.multiplayer.clientItem3">Local movement prediction</li><li data-i18n="docs.multiplayer.clientItem4">Snapshot interpolation</li><li data-i18n="docs.multiplayer.clientItem5">HUD, audio, effects, and reports</li></ul></div><div class="boundary-line"><span data-i18n="docs.multiplayer.boundary">Trust boundary</span></div><div class="trust-zone authoritative"><h3 data-i18n="docs.multiplayer.authTitle">Authority responsibilities</h3><p data-i18n="docs.multiplayer.authBody">Simulation outcomes and shared state.</p><ul><li data-i18n="docs.multiplayer.authItem1">Movement acceptance</li><li data-i18n="docs.multiplayer.authItem2">Reload and projectile spawning</li><li data-i18n="docs.multiplayer.authItem3">Hits, armor, and damage</li><li data-i18n="docs.multiplayer.authItem4">Spotting and hidden state</li><li data-i18n="docs.multiplayer.authItem5">Destruction and match results</li></ul></div></div>
<p data-i18n="docs.multiplayer.body">Private and LAN rooms use browser-hosted WebRTC authority. Ranked matches use a renderer-free Node service. Rooms retain the host-selected map, player camouflage, authenticated chat, invitation metadata, rejoin state, garage presence, team and ready state, and round-to-round continuity. Separate browser tests verify four-player and 7v7 moving-and-firing matches, including synchronization, reconciliation, rubber-banding, event delivery, and rendering behavior.</p>
</section>
<section class="doc-section" id="performance">
<p class="section-index" data-i18n="docs.section.performanceIdx">08 // Performance + GPU</p><h2><span class="doc-section-icon" data-doc-icon="performance"></span><span data-i18n="docs.section.performanceTitle">Performance budgets and runtime ownership</span></h2>
<p data-i18n="docs.performance.lede">The garage does not build a battlefield until it is required. Battle entry completes required warmup before the countdown, performance-sensitive loops reuse scratch state, and repeated world and vehicle resources are cached or pooled. Effect budgets limit transient work. Public presentation pages do not start the playable renderer.</p>
<table class="ownership-table"><thead><tr><th data-i18n="docs.perf.colName">Budget</th><th data-i18n="docs.perf.colMech">Mechanism</th><th data-i18n="docs.perf.colInvariant">Invariant</th></tr></thead><tbody><tr><td data-i18n="docs.perf.simName">Simulation</td><td data-i18n="docs.perf.simMech">Bounded fixed-step accumulator at 60 Hz.</td><td data-i18n="docs.perf.simInvariant">Graphics quality cannot change combat.</td></tr><tr><td data-i18n="docs.perf.renderName">Rendering</td><td data-i18n="docs.perf.renderMech">High-refresh frame scheduler, adaptive scale, quality tiers, fused post output.</td><td data-i18n="docs.perf.renderInvariant">Certified test runs reached the native 120 FPS refresh rate on measured hardware.</td></tr><tr><td data-i18n="docs.perf.drawName">Draw/GPU</td><td data-i18n="docs.perf.drawMech">Instancing/merging, LOD cadence, shadow proxies, cached worlds, resource disposal.</td><td data-i18n="docs.perf.drawInvariant">Cosmetic work is reduced before simulation work.</td></tr><tr><td data-i18n="docs.perf.loadName">Loading</td><td data-i18n="docs.perf.loadMech">Garage-first boot, lazy battle graph, shader/material warmup, staged world activation.</td><td data-i18n="docs.perf.loadInvariant">Required battle work finishes before countdown.</td></tr><tr><td data-i18n="docs.perf.netName">Network</td><td data-i18n="docs.perf.netMech">20 Hz viewer-filtered snapshots, deltas, keyframes, event channel, bounded prediction.</td><td data-i18n="docs.perf.netInvariant">Hidden transforms never reach unauthorized viewers.</td></tr></tbody></table>
<div class="code-sample"><div class="code-head"><span data-i18n="docs.perf.codeTitle">verification // focused paths</span><button type="button" data-copy="#perfCommands" data-i18n="docs.perf.codeCopy">Copy</button></div><pre id="perfCommands"><code>npm run perf:dev
npm run perf:loading
npm run test:net:render
node src/engine/renderScalePolicy.selftest.mjs
node src/engine/shadowStability.selftest.mjs</code></pre></div>
</section>
<section class="doc-section" id="mobile">
<p class="section-index" data-i18n="docs.section.mobileIdx">09 // Mobile compatibility</p><h2><span class="doc-section-icon" data-doc-icon="mobile"></span><span data-i18n="docs.section.mobileTitle">Mobile rendering and input</span></h2>
<div class="doc-image-pair"><figure><img src="/media/showcase-r2/16_mobile_garage.webp" alt="Current Claude of Tanks mobile Garage interface with a K2" data-i18n-alt="docs.media.alt.currentclaudeoftanksmobilegarageinterfacewithak" loading="lazy"><figcaption data-i18n="docs.mobile.figTouch">Touch interface // safe-area layout and direct controls</figcaption></figure><figure><img src="/media/presentation-r1/45_delta_contact.webp" alt="Mobile-compatible battlefield composition rendered by the game" data-i18n-alt="docs.media.alt.mobilecompatiblebattlefieldcompositionrenderedbythegame" loading="lazy"><figcaption data-i18n="docs.mobile.figAdaptive">Adaptive rendering // unchanged simulation</figcaption></figure></div>
<p data-i18n="docs.mobile.body">Phones and tablets receive dual-stick movement, swipe aim, pinch-to-scope, held/dynamic fire, accessible ammunition and equipment placement, safe-area-aware layout, compact settings, and automatic device tiers. Boot-time GPU probes, pixel-ratio caps, memory-conscious detail, shadow rescue, PMREM validation, and a black-scene watchdog let presentation recover without changing gameplay.</p>
</section>
<section class="doc-section" id="studio">
<p class="section-index" data-i18n="docs.section.studioIdx">10 // Scene Studio</p><h2><span class="doc-section-icon" data-doc-icon="studio"></span><span data-i18n="docs.section.studioTitle">Scene production with the game renderer</span></h2>
<figure class="doc-wide-figure"><img src="/media/showcase-r2/15_studio_workspace.webp" alt="Current Scene Studio unified workspace" data-i18n-alt="docs.media.alt.currentscenestudiounifiedworkspace" loading="lazy"><figcaption data-i18n="docs.studio.fig">Scene Studio // map, actors, pose, effects, storyboard, camera, video, still, JSON</figcaption></figure>
<p data-i18n-html="docs.studio.body">Open <a class="inline-link" href="/studio">/studio</a> or press F8 in the garage. Studio places any roster vehicle on any map, conforms actors to terrain, applies camouflage and damage states, schedules the game’s firing and destruction effects, scrubs a deterministic 20-second timeline, builds camera, actor, and effect tracks, records video, captures high-resolution PNGs, and imports or exports scene JSON. The Field Frames drawer provides the current 88-frame archive beside the authoring controls.</p>
<div class="battle-reels" id="battle-reels" data-battle-reels>
<header class="battle-reels-head"><span data-i18n="docs.studio.reelsHead" data-i18n-vars='{"count":"20"}'>Scene Studio collection // 20 reels</span><h3 data-i18n="docs.studio.reelsTitle">Modern tank duels</h3><p data-i18n="docs.studio.reelsLede">Twenty recorded scenes pair modern tanks across the full battlefield set. Select a scene to load it into the player.</p></header>
<figure class="battle-reel-stage">
<video controls playsinline preload="metadata" poster="/media/battle-reels-v3/01_m1a2_sepv3_vs_t90m_verdant.webp" data-battle-reel-video aria-label="M1A2 Abrams SEPv3 versus T-90M at Verdant Fields" data-i18n-aria-label="aria.maabramssepvversustmatverdantfields"><source src="/media/battle-reels-v3/01_m1a2_sepv3_vs_t90m_verdant.mp4" type="video/mp4"></video>
<figcaption data-battle-reel-status aria-live="polite" aria-atomic="true"><span><strong data-battle-reel-title>M1A2 Abrams SEPv3 vs T-90M</strong><small data-battle-reel-map>Verdant Fields // 14.7 seconds // 720p</small></span><b data-battle-reel-count>01 / 20</b></figcaption>
</figure>
<div class="battle-reel-grid" data-battle-reel-grid aria-label="Modern tank duel scenes" data-i18n-aria-label="aria.moderntankduelscenes"></div>
<noscript><p><a class="inline-link" href="/media/battle-reels-v3/01_m1a2_sepv3_vs_t90m_verdant.mp4" data-i18n="docs.studio.reelNoscript">Open the first modern tank duel.</a></p></noscript>
</div>
<h3 data-i18n="docs.studio.contactTitle">Contact-sheet review</h3>
<p data-i18n="docs.studio.contactBody">Each campaign begins with deterministic scene data. Low-resolution captures are then reviewed in groups of ten. The contact sheets reveal weak silhouettes, obstructed cameras, unreadable vehicles, repetitive staging, and effects that hide the action. Approved frames proceed to 4K export, automated image analysis, owner approval, and publication.</p>
<div class="review-sequence" role="list" data-i18n-aria-label="docs.studio.sequenceAria"><span role="listitem" data-i18n="docs.studio.seq1">Scene JSON</span><span role="listitem" data-i18n="docs.studio.seq2">Review capture</span><span role="listitem" data-i18n="docs.studio.seq3">Contact sheets</span><span role="listitem" data-i18n="docs.studio.seq4">4K + grade</span><span role="listitem" data-i18n="docs.studio.seq5">Owner approval</span></div>
<div class="process-sheet-group">
<header><span data-i18n="docs.studio.actionHead">Action campaign</span><strong data-i18n="docs.studio.actionSheets" data-i18n-vars='{"count":"30","sheets":"3"}'>30 frames // 3 review sheets</strong></header>
<div class="process-sheet-grid">
<a href="/media/showcase-r1/process/action-review-01.webp" target="_blank"><img src="/media/showcase-r1/process/action-review-01.webp" alt="Action campaign review sheet 1, frames 61 through 70" data-i18n-alt="docs.media.alt.actioncampaignreviewsheetsheet1" loading="lazy"></a>
<a href="/media/showcase-r1/process/action-review-02.webp" target="_blank"><img src="/media/showcase-r1/process/action-review-02.webp" alt="Action campaign review sheet 2, frames 71 through 80" data-i18n-alt="docs.media.alt.actioncampaignreviewsheetsheet2" loading="lazy"></a>
<a href="/media/showcase-r1/process/action-review-03.webp" target="_blank"><img src="/media/showcase-r1/process/action-review-03.webp" alt="Action campaign review sheet 3, frames 81 through 90" data-i18n-alt="docs.media.alt.actioncampaignreviewsheetsheet3" loading="lazy"></a>
</div>
</div>
<div class="process-sheet-group">
<header><span data-i18n="docs.studio.foregroundHead">Foreground campaign</span><strong data-i18n="docs.studio.foregroundSheets" data-i18n-vars='{"count":"30","sheets":"3"}'>30 frames // 3 review sheets</strong></header>
<div class="process-sheet-grid">
<a href="/media/showcase-r1/process/foreground-review-01.webp" target="_blank"><img src="/media/showcase-r1/process/foreground-review-01.webp" alt="Foreground campaign review sheet 1, frames 91 through 100" data-i18n-alt="docs.media.alt.foregroundcampaignreviewsheetsheet1" loading="lazy"></a>
<a href="/media/showcase-r1/process/foreground-review-02.webp" target="_blank"><img src="/media/showcase-r1/process/foreground-review-02.webp" alt="Foreground campaign review sheet 2, frames 101 through 110" data-i18n-alt="docs.media.alt.foregroundcampaignreviewsheetsheet2" loading="lazy"></a>
<a href="/media/showcase-r1/process/foreground-review-03.webp" target="_blank"><img src="/media/showcase-r1/process/foreground-review-03.webp" alt="Foreground campaign review sheet 3, frames 111 through 120" data-i18n-alt="docs.media.alt.foregroundcampaignreviewsheetsheet3" loading="lazy"></a>
</div>
<p class="process-sheet-note" data-i18n="docs.studio.foregroundNote">Open any sheet at full resolution. The filenames are the stable scene IDs used by the capture and quality receipts.</p>
</div>
</section>
<section class="doc-section" id="gallery">
<p class="section-index" data-i18n="docs.section.galleryIdx">11 // Tank Gallery</p><h2><span class="doc-section-icon" data-doc-icon="gallery"></span><span data-i18n="docs.section.galleryTitle">Interactive vehicle inspection</span></h2>
<figure class="doc-wide-figure"><img src="/media/showcase-r2/11_gallery_hero.webp" alt="Current Tank Gallery with a T-90M Proryv procedural rig and technical dossier" data-i18n-alt="docs.media.alt.currenttankgallerywithatmproryvproceduralrigandtechnicaldossier" loading="lazy"><figcaption data-i18n="docs.gallery.fig" data-i18n-vars='{"prod":"{{COT_PRODUCTION_VEHICLES}}","dev":"{{COT_DEVELOPMENT_VEHICLES}}"}'>Tank Gallery // {{COT_PRODUCTION_VEHICLES}} production vehicles, {{COT_DEVELOPMENT_VEHICLES}} in keyed local development, current rig, articulation, armor, modules, crew, exact surfaces</figcaption></figure>
<p data-i18n-html="docs.gallery.body">The <a class="inline-link" href="/gallery">Tank Gallery</a> searches the current fleet registry and constructs the selected procedural vehicle. Camera presets, hull, turret, and gun articulation, armor, module, and crew overlays, normalized ratings, ammunition tables, and triangle or coplanar-patch markup all use canonical game data. Exported JSON and PNG review packets preserve pose, camera, rig path, mesh identity, bounds, centroid, triangle, and requested operation.</p>
</section>
<section class="doc-section" id="verification">
<p class="section-index" data-i18n="docs.section.verificationIdx">12 // Verification</p><h2><span class="doc-section-icon" data-doc-icon="verification"></span><span data-i18n="docs.section.verificationTitle">Automated verification</span></h2>
<div class="system-grid"><article class="system-card"><header><span class="system-card-name"><span data-doc-icon="verification"></span><code>npm test</code></span><span data-i18n="docs.verification.behaviorTitle">behavior</span></header><p data-i18n="docs.verification.behaviorBody">Simulation, networking, UI, rendering policy, vehicles, maps, collision, destruction, assets, and tools.</p></article><article class="system-card"><header><span class="system-card-name"><span data-doc-icon="specification"></span><code>tank:native:check</code></span><span data-i18n="docs.verification.provenanceTitle">provenance</span></header><p data-i18n="docs.verification.provenanceBody" data-i18n-vars='{"count":"{{COT_BATTLE_PLAYABLE_VEHICLES}}"}'>Reports {{COT_BATTLE_PLAYABLE_VEHICLES}} first-party procedural playables and rejects all runtime GLB and comparison-source paths.</p></article><article class="system-card"><header><span class="system-card-name"><span data-doc-icon="vehicles"></span><code>tank:release:check</code></span><span data-i18n="docs.verification.vehicleTitle">vehicle checks</span></header><p data-i18n="docs.verification.vehicleBody">Targeted anatomy, geometry, generated assets, profiles, and current release results.</p></article><article class="system-card"><header><span class="system-card-name"><span data-doc-icon="studio"></span><code>marketing-shots</code></span><span data-i18n="docs.verification.imageTitle">image review</span></header><p data-i18n="docs.verification.imageBody">Deterministic scenes, six review sheets, 4K image analysis, and owner approval produce the 88-frame archive.</p></article></div>
<div class="code-sample"><div class="code-head"><span data-i18n="docs.verification.codeTitle">Local verification commands</span><button type="button" data-copy="#verifyCommands" data-i18n="docs.verification.codeCopy">Copy</button></div><pre id="verifyCommands"><code>npm install
npx vite
npm test
npm run tank:native:check
npm run test:net:seven:live
npm run build</code></pre></div>
<p data-i18n-html="docs.verification.tail">Continue with <a class="inline-link" href="https://github.com/Kevin-Liu-01/Claude-of-Tanks/blob/main/docs/ARCHITECTURE.md">architecture</a>, <a class="inline-link" href="https://github.com/Kevin-Liu-01/Claude-of-Tanks/blob/main/docs/PERFORMANCE.md">performance</a>, <a class="inline-link" href="https://github.com/Kevin-Liu-01/Claude-of-Tanks/blob/main/docs/MULTIPLAYER-ARCHITECTURE.md">multiplayer</a>, <a class="inline-link" href="https://github.com/Kevin-Liu-01/Claude-of-Tanks/blob/main/docs/STUDIO.md">Studio</a>, <a class="inline-link" href="https://github.com/Kevin-Liu-01/Claude-of-Tanks/blob/main/docs/GALLERY.md">Gallery</a>, and the maintained <a class="inline-link" href="https://github.com/Kevin-Liu-01/Claude-of-Tanks/blob/main/docs/DECISIONS.md">architecture decisions</a>.</p>
</section>
</article>
<aside class="doc-aside">
<button type="button" class="aside-card aside-card--archive" id="docsArchiveOpen" aria-haspopup="dialog" aria-controls="docsArchive">
<span class="aside-card-icon"><img src="/brand/features/camera-paths.svg" alt=""></span>
<span class="aside-card-content"><span class="aside-card-kicker" data-i18n="docs.aside.archiveKicker">Visual archive</span><strong data-i18n="docs.aside.archiveTitle" data-i18n-vars='{"count":"88"}'>88 field frames</strong><span class="aside-card-copy" data-i18n="docs.aside.archiveBody">This manual, the landing page, Tank Gallery, and Scene Studio use the same published archive.</span></span>
<span class="aside-card-action" data-i18n-html="docs.aside.archiveCta">Open field frames <b aria-hidden="true">→</b></span>
</button>
<div class="aside-card aside-card--signal"><span data-doc-icon="runtimeData"></span><div><p data-i18n="docs.aside.runtimeKicker">Runtime data</p><strong data-i18n="docs.aside.runtimeTitle">Current fleet and map registries</strong><p data-i18n="docs.aside.runtimeBody">Vehicle and battlefield counts are read from the current runtime registries.</p></div></div>
<div class="aside-card aside-card--signal"><span data-doc-icon="coordinates"></span><div><p data-i18n="docs.aside.coordKicker">Coordinate system</p><strong data-i18n="docs.aside.coordTitle">Metres · seconds · radians</strong><p data-i18n="docs.aside.coordBody">Vehicle forward is local +Z. The authoritative simulation advances at 1/60 second.</p></div></div>
</aside>
</main>
<dialog class="docs-archive-dialog" id="docsArchive" aria-labelledby="docsArchiveTitle">
<header><div><p class="section-index" data-i18n="docs.archive.headIdx" data-i18n-vars='{"count":"88"}'>Visual archive // 88 field frames</p><h2 id="docsArchiveTitle" data-i18n="docs.archive.title">Vehicles in game scenes</h2><p data-i18n="docs.archive.lede">Review the same first-party vehicle rigs in battle, destruction, terrain, and Scene Studio compositions.</p></div><button type="button" id="docsArchiveClose" data-i18n-aria-label="docs.archive.closeAria" aria-label="Close field frames">×</button></header>
<div class="docs-motion-grid" aria-label="Animated game scenes" data-i18n-aria-label="aria.animatedgamescenes">
<video muted loop playsinline preload="none" poster="/media/feature-loops-r1/01_desert_duel_leclerc_kill.jpg"><source src="/media/feature-loops-r1/01_desert_duel_leclerc_kill.webm" type="video/webm"></video>
<video muted loop playsinline preload="none" poster="/media/feature-loops-r1/03_winter_lake_duel.jpg"><source src="/media/feature-loops-r1/03_winter_lake_duel.webm" type="video/webm"></video>
<video muted loop playsinline preload="none" poster="/media/feature-loops-r1/04_urban_street_duel.jpg"><source src="/media/feature-loops-r1/04_urban_street_duel.webm" type="video/webm"></video>
<video muted loop playsinline preload="none" poster="/media/feature-loops-r1/06_verdant_meadow_duel.jpg"><source src="/media/feature-loops-r1/06_verdant_meadow_duel.webm" type="video/webm"></video>
</div>
<div class="docs-archive-body" id="docsArchiveBody"></div>
</dialog>
<footer class="docs-footer"><div class="inner shell"><a class="brand" href="/home" aria-label="Claude of Tanks showcase" data-i18n-aria-label="aria.claudeoftanksshowcase"><img src="/brand/logo-mark-metal.svg" alt=""><span>Claude <b>of Tanks</b></span></a><div class="footer-links"><a href="/gallery" data-i18n="docs.footer.docsGallery">Tank Gallery</a><a href="/" data-i18n="docs.footer.docsGarage">Garage</a><a href="/studio" data-i18n="docs.footer.docsStudio">Scene Studio</a><a href="https://github.com/Kevin-Liu-01/Claude-of-Tanks" data-i18n-aria-label="docs.footer.docsGithubAria"><span>GitHub</span><span class="footer-stars"><span aria-hidden="true">★</span><span data-github-stars data-github-stars-state="loading" aria-busy="true" aria-label="Loading GitHub star count"></span></span></a></div><span class="footer-mark" data-i18n="docs.footer.docsMark">Public field manual // 2026</span></div></footer>
<div class="docs-toast" id="docsToast" role="status"></div>
<script type="module" src="/src/analytics.ts"></script>
<script type="module" src="/src/presentation/publicNav.ts"></script>
<script type="module" src="/src/presentation/publicPages.ts"></script>
<script type="module" src="/src/docs/docs.ts"></script>
</body>
</html>