# MASTER PROMPT — STAT: Critical Shift · 3D Web Game Edition...
Prompt
# MASTER PROMPT — STAT: Critical Shift · 3D Web Game Edition > این پرامپت خلاصهٔ اجرایی کل suite پروژهٔ STAT است، اما برای یک بازی سهبعدی واقعی در مرورگر بازنویسی شده. > Promptهای قدیمیِ 2D board/canvas را برای runtime اصلی نادیده بگیر. > خروجی باید **وبگیم سهبعدی قابلبازی** باشد، نه dashboard، نه ward board، نه prototype کارتمحور. --- ## 0. دستور قطعی خروجی یک بازی سومشخص سهبعدی در مرورگر بساز با نام: `STAT: Critical Shift` بازیکن باید از لحظهٔ ورود: 1. کاراکتر سهبعدی را در بیمارستان ببیند؛ 2. با keyboard/mouse، controller یا touch حرکت کند؛ 3. دوربین پشتشانه را کنترل کند؛ 4. در راهروها، اتاقها، bayها، لابی و پشتبام آزادانه حرکت کند؛ 5. NPCهای زنده را ببیند که راه میروند، منتظر میمانند، کار میگیرند، مسیر عوض میکنند و به رخدادها واکنش نشان میدهند؛ 6. مأموریت و case را از خود جهان پیدا کند، نه فقط از فهرست کارتها؛ 7. به اشیا، درها، میزها، ترمینالها، کارکنان و caseها نزدیک شود و interaction فضایی انجام دهد؛ 8. فرمان بدهد، نتیجه را در جهان ببیند و اثرات تصمیمش را در ادامهٔ شیفت مشاهده کند؛ 9. بین zoneهای بیمارستان سفر کند؛ 10. شیفت را از briefing تا debrief کامل کند. **قانون اصلی:** منبع تجربه باید world سهبعدی باشد. UI فقط HUD، prompt، map کوچک، chart، pause و debrief است. هیچ 2D board یا پنل مدیریتی حق ندارد جای گشتوگذار، camera، NPC، room، mission و interaction سهبعدی را بگیرد. از grammar عمومی بازیهای سومشخص open-world مثل حرکت آزاد، دوربین دنبالکننده، interaction context-aware، مأموریتهای world-space، NPC activity، objective marker، world reaction و pause map استفاده کن؛ اما **هیچ asset، UI، صدا، mission، شخصیت، نام، animation، layout یا رفتار مشخص GTA یا اثر دیگری را کپی نکن**. «در حد gameplay» یعنی کیفیت حضور و agency، نه ادعای مقیاس GTA. --- ## 1. قانون اجرای پروژه پروتکل زیر در همهٔ تصمیمها لازم است: 1. رفتار موجود و درست است → reuse؛ تغییر نده. 2. owner مسئول از قبل وجود دارد → همانجا extend کن. 3. browser/runtime/stdlib/dependency موجود کافی است → همان را استفاده کن. 4. implementation کوچک و دارای owner روشن لازم است → در همان boundary بساز. 5. ساختار مانع ownership صحیح است → refactor منسجم انجام بده، نه patch تکراری. قبل از edit، این زنجیره را trace کن: `input → player/camera/world interaction → command → simulation state → domain event → presentation receipt → visible world feedback → save` پروتکلهای غیرقابلحذف: - UI منبع حقیقت gameplay نیست. - animation، sound، VFX یا button click موفقیت را اعلام نمیکنند؛ فقط authoritative receipt چنین اجازهای دارد. - یک state فقط یک writer دارد. - یک command فقط یک mutation یا هیچ mutation دارد. - retry/double-click یک action یا reward اضافه تولید نمیکند. - سادهسازی نباید validation، accessibility، save recovery، error handling، collision safety، content safety، performance proof یا تست لازم را حذف کند. - ادعای 60fps، mobile support، quality، offline یا browser compatibility بدون benchmark/capture واقعی ممنوع. - پاسخ implementation باید بهجای plan طولانی، vertical slice قابلاجرا بسازد، آن را run کند و evidence واقعی گزارش دهد. --- ## 2. هویت محصول و fantasy `STAT: Critical Shift` یک operational drama اورجینال در campus بیمارستانی خیالی `Northlight Memorial` است. بازیکن: - `CHR_PLAYER_COORDINATOR`؛ هماهنگکنندهٔ عملیاتیِ یک شیفت؛ - پزشک همهفنحریف، سرباز، قهرمان نجاتدهنده یا شخصیت combat نیست؛ - در جهان حرکت میکند، نشانهها را میخواند، اولویتبندی میکند، مسیر میسازد، از کارکنان کمک میگیرد، handoff میکند، اطلاعات را روشن میکند و recovery را مدیریت میکند. حلقهٔ اصلی: `Explore → Notice → Inspect → Choose → Delegate/Act → Observe World Consequence → Recover → Debrief → Improve` تنش از اینها میآید: - فاصلهٔ فضایی؛ - اطلاعات ناقص؛ - ظرفیت محدود bay و staff؛ - route obstruction؛ - fatigue/load؛ - زمان و cadence رخداد؛ - trade-off بین سرعت، وضوح، continuity و recovery. تنش از اینها نمیآید: - timer غیرمنصفانه؛ - jump scare؛ - combat؛ - gore؛ - مرگ ناگهانی؛ - screen spam؛ - punishment loop؛ - fake urgency. --- ## 3. مرز ایمنی محتوا — ADR_CONTENT_001 این بازی سرگرمیِ کاملاً خیالی است، نه آموزش پزشکی، شبیهساز بالینی یا ابزار تصمیمگیری واقعی. در هیچ data، code، UI، tooltip، دیالوگ، asset prompt، animation یا test fixture این موارد نیاید: - دوز و نام داروی واقعی؛ - threshold، diagnosis یا treatment decision واقعی؛ - دستور یا توالی قابلاجرای بالینی؛ - روش airway، CPR، shock، energy، anatomy یا clinical waveform؛ - تصویر graphic یا injury porn؛ - برند واقعی، monitor واقعی یا تقلید از HMI پزشکی؛ - محتوایی که بتوان از آن بهعنوان توصیهٔ درمانی استفاده کرد. Simulation فقط از bandهای fictional استفاده میکند: `stability_band`, `attention_need`, `comfort_need`, `information_confidence` و signal channelهای invented: `SIG_ARC`, `SIG_TIDE`, `SIG_LANTERN` اینها internal normalized game values هستند و هرگز به مقدار واقعی map نمیشوند. Outcomeهای V1 فقط: `StabilizedFictionally`, `TransferredOutOfPlayerScope`, `DischargedFromShift`, `ArchivedUnresolved` هیچ `death` state و هیچ visual graphic در V1 وجود ندارد. یک test build-time باید همهٔ `src/data`, `src`, localeها و asset metadata را scan کند و با banned-token registry fail شود. False positiveها باید با allowlist مستند حل شوند، نه با حذف کورکورانهٔ scanner. --- ## 4. Runtime و stack قفلشده ### Runtime اصلی - Vite + TypeScript strict + ESM؛ - Three.js مستقیم برای 3D renderer و scene graph؛ - WebGL2 baseline برای browser compatibility؛ - WebGPU فقط progressive enhancement اختیاری؛ بازی نباید برای اجرا به WebGPU وابسته باشد؛ - `@dimforge/rapier3d-compat` برای capsule collision، raycast، static collider و character controller؛ - GLB/glTF runtime assets؛ - KTX2/Basis texture compression و Draco/Meshopt فقط با اندازهگیری decode/load؛ - React فقط برای shell/HUD/menus/semantic panels؛ React نباید در هر frame scene را re-render کند؛ - Zustand فقط برای presentation projection و settings؛ هیچ domain mutation از store؛ - Web Worker برای deterministic simulation، mission director، NPC task decisions و heavy pure work؛ - Web Audio API برای spatial ambience، functional cues و alert buses؛ - IndexedDB برای save؛ localStorage فقط برای settings و fallback محدود؛ - Vitest برای core؛ Playwright برای browser/e2e؛ axe-core برای accessibility؛ - ESLint/TypeScript dependency-direction checks؛ - PWA shell/offline cache فقط برای assets/versionهایی که واقعاً cache-safe هستند. ### ممنوع - Babylon/Unity/WebGL framework دوم همزمان با Three.js؛ - R3F برای کل game loop مگر اینکه benchmark نشان دهد owner و performance بهتر میشود؛ - React state برای transform، animation یا per-frame entity state؛ - `Math.random()` یا `Date.now()` در simulation؛ - full physics sandbox؛ - open-world streaming بیحد؛ - fake 3D با کارتهای تخت بهعنوان runtime اصلی؛ - 2D board بهعنوان gameplay اصلی. --- ## 5. معماری سیستم ```text src/ core/ # pure deterministic domain; no DOM/Three/React ids.ts contracts.ts rng.ts clock.ts commands.ts events.ts reducer.ts snapshot.ts systems/ intake.ts fictionalStability.ts actions.ts staff.ts pressure.ts rewards.ts incidents.ts domain/ patient.ts case.ts bay.ts queue.ts resource.ts score.ts shift.ts content/ shifts.ts beats.ts cases.ts characters.ts rules.ts sim/ sim.worker.ts # only simulation writer simProtocol.ts # typed main↔worker messages npcDirector.ts # pure task decisions/path intents missionDirector.ts game3d/ GameApp.ts SceneRoot.ts WorldRegistry.ts WorldStreaming.ts AssetRegistry.ts CollisionWorld.ts NavGraph.ts PlayerController.ts CameraController.ts InteractionSystem.ts NPCPresentationSystem.ts AnimationController.ts AudioWorld.ts WorldEffects.ts PerformanceGovernor.ts world/ zones/ rooms/ props/ anchors/ colliders/ nav/ manifests/ ui/ hud/ worldPrompt/ objectiveTracker/ minimap/ tacticalMap/ patientChart/ commandPanel/ debrief/ settings/ accessibility/ data/ content/*.json locale/fa.json locale/en.json assets/*.manifest.json persistence/ idb.ts saveRepository.ts migrations.ts checksum.ts tests/ core/ content/ world/ browser/ performance/ ``` ### Ownership rules | مفهوم | owner یکتا | readerها | |---|---|---| | simulation clock/seed/tick | `core/clock.ts` + worker | HUD, replay, save | | patient/case truth | core domain reducer | world projection, chart | | bay occupancy | `core/domain/bay.ts` | 3D bay actor, HUD | | route state | world command boundary + core route state | nav/camera/marker | | score | `core/domain/score.ts` | debrief/profile | | mission beat | `missionDirector` + core event ledger | world trigger/HUD | | player transform | `PlayerController` presentation/runtime owner | camera, interaction; durable snapshot only at checkpoint | | asset/cell lifecycle | `WorldStreaming` | Three scene, audio, NPC presentation | | settings | settings repository | renderer/UI/audio/input | `game3d` میتواند transform و presentation را مالک باشد، اما اجازه ندارد case, score, reward, bay truth یا patient state را local mutate کند. --- ## 6. World سهبعدی — قلب بازی ### مرز جهان تمام فضای قابلبازی در Northlight Memorial campus است: `ZN_OPERATIONS_HUB`, `ZN_BAY`, `ZN_TRIAGE`, `ZN_ED_A`, `ZN_ED_B`, `ZN_DIAG`, `ZN_SUPPLY`, `ZN_SERVICE`, `ZN_CONTROL`, `ZN_ICU_OR`, `ZN_REFUGE`, `ZN_ROOF` Topology اصلی: ```text OPERATIONS_HUB ├─ BAY │ └─ TRIAGE │ └─ ED_A │ ├─ SUPPLY │ └─ ED_B │ ├─ DIAG │ ├─ SERVICE ── CONTROL │ └─ ICU_OR ── REFUGE ── HUB └─ CONTROL SERVICE ── VERTICAL LIFT ── ROOF ``` هر route باید داشته باشد: - primary path؛ - alternate path؛ - accessibility-equivalent path؛ - authored landmarks؛ - collision/nav data؛ - streaming cell؛ - failure/recovery rule. شهر بیرون، خیابان، open-world driving و map بیانتها فقط background هستند؛ interaction/collision/nav ندارند. ### Room manifest حداقل این room/anchorها را بساز: `RM_HUB_BRIEFING`, `RM_HUB_GEAR`, `RM_HUB_ACCESS`, `RM_BAY_THRESHOLD`, `RM_BAY_CANOPY`, `RM_TRIAGE_DESK`, `RM_TRIAGE_WAIT`, `RM_TRIAGE_PRIVACY_NICHE`, `RM_EDA_BAY_RING`, `RM_EDA_LINK`, `RM_EDB_HANDOFF`, `RM_EDB_BAY_RING`, `RM_DIAG_PORTAL`, `RM_DIAG_WAIT`, `RM_SUPPLY_COUNTER`, `RM_SUPPLY_STORAGE`, `RM_SERVICE_JUNCTION`, `RM_SERVICE_LINEN`, `RM_CONTROL_ENTRY`, `RM_CONTROL_TABLE`, `RM_CONTROL_SUPPORT`, `RM_THRESHOLD_ENTRY`, `RM_THRESHOLD_WAIT`, `RM_REFUGE_TABLE`, `RM_REFUGE_LOCKERS`, `RM_LIFT_LOBBY_GROUND`, `RM_LIFT_LOBBY_ROOF`, `RM_ROOF_LOOKOUT`, `RM_ROOF_MAINT` هر room record: ```ts interface RoomManifestV1 { roomId: string; zoneId: ZoneId; cellId: string; glbUrl: string; collisionUrl: string; navGraphUrl: string; spawnAnchors: string[]; interactionAnchors: string[]; cameraVolumes: string[]; audioZone: string; lightingProfile: string; fallbackPolicy: 'proxy' | 'safe-return' | 'retry'; contentVersion: string; } ``` ### Streaming World را به cellهای lazy-load تقسیم کن: `CELL_HUB`, `CELL_BAY_A`, `CELL_TRIAGE_A`, `CELL_EDA`, `CELL_EDB`, `CELL_DIAG`, `CELL_SUPPLY`, `CELL_SERVICE`, `CELL_CONTROL`, `CELL_THRESHOLD`, `CELL_REFUGE`, `CELL_VERTICAL`, `CELL_ROOF` قواعد: - cell بعدی پیش از عبور از threshold preload شود؛ - unload فقط وقتی player، active case، camera، pending interaction یا save barrier در cell نیست؛ - completion قدیمی با `worldGeneration + cellGeneration + stableId + expectedVersion` validate شود؛ - late asset callback حق spawn در room unloadشده ندارد؛ - timeout باید proxy/readable threshold/retry/Hub return داشته باشد؛ - loading screen هیچوقت readiness جعلی نشان ندهد؛ - cell missing → collision-safe proxy و گزارش واضح، نه void؛ - save وسط transition → آخرین safe room/anchor، نه وسط آسانسور. ### Asset rule Blockout اول با primitives مجاز است؛ اما vertical slice قابلنمایش باید: - floor/wall/door/ceiling/prop/material واقعی داشته باشد؛ - collision جدا و معتبر داشته باشد؛ - lighting و shadow readable داشته باشد؛ - scale reference برای player/NPC داشته باشد؛ - LOD و fallback داشته باشد؛ - no-copy/provenance record داشته باشد. AI concept art بهتنهایی asset production نیست. هر asset نهایی باید source، license/provenance، topology، UV، material، collision، LOD، compression و runtime capture داشته باشد. --- ## 7. Player سومشخص و game feel ### Player contract `CHR_PLAYER_COORDINATOR` یک adult original character با body/capsule/rig ثابت است. skin/hair/face/wardrobe فقط cosmetic هستند و هیچکدام speed، collision، reach، score یا outcome را تغییر نمیدهند. Player shell فقط اینها را نگه میدارد: - lifecycle؛ - component assembly؛ - transform/collision؛ - input intent؛ - animation presentation؛ - interaction facade؛ - camera link. Simulation، score و case logic داخل player actor ممنوع. ### Movement حداقل: - walk؛ - purposeful jog، بدون advantage ناعادلانه؛ - acceleration/deceleration؛ - turn-in-place؛ - ramp/stair/door traversal؛ - crowd avoidance؛ - focused approach؛ - safe anchor recovery؛ - no jump puzzle؛ - no combat roll؛ - no weapon؛ - no vehicle driving؛ - no free climbing. Default design values فقط tuning proposal هستند و تا benchmark `UNVERIFIED DESIGN DEFAULT` بمانند: `MOVE_WALK_SPEED`, `MOVE_FOCUS_SPEED`, `MOVE_ACCEL`, `MOVE_BRAKE`, `MOVE_ROT_RATE`, `MOVE_INTERACT_REACH`, `MOVE_CANDIDATE_RADIUS`, `MOVE_STUCK_WINDOW` ### Input | intent | keyboard/mouse | controller | touch | |---|---|---|---| | move | WASD | left stick | virtual stick یا tap-to-route | | look | mouse | right stick | right-drag | | interact | E/LMB | face-bottom | tap target | | inspect | F | face-left | inspect button | | command | RMB/context | trigger | explicit command button | | cancel | Esc/RMB | face-right | back button | | tactical | Tab | bumper/view | map button | | pause | Esc/menu | menu | persistent button | | scan | V | d-pad | scan button | | camera reset | R | stick press | double tap | هر input دارای `actionId`, context, prompt glyph, remap conflict rule، accessibility alternate و held-input cleanup است. ### Camera profiles - `CAM_EXPLORE`: third-person shoulder، orbit، FOV bounded، collision probe؛ - `CAM_EXPLORE_NARROW`: corridor/door fallback؛ - `CAM_FOCUSED`: target framing و interaction؛ - `CAM_TACTICAL`: bounded overhead/perspective review داخل همان zone؛ - `CAM_SEQUENCE`: authored but skippable sequence framing؛ - `CAM_PHOTO`: safe optional mode. Camera باید: - از wall/door عبور نکند؛ - player یا interaction مهم را نپوشاند؛ - در crowd jitter نکند؛ - privacy area را reveal نکند؛ - با `reduced-motion` shake/head bob/roll را حذف کند؛ - با obstruction، retract/shoulder swap/narrow profile/safe anchor داشته باشد؛ - در resize/device DPR تغییر ناگهانی و غیرقابلفهم ندهد. ---
A system prompt was added to support web rendering
Response not available