Files
nagi-bench/cases.json
T
Jesse Zhang 6580a7e931
CI / validate (push) Canceled after 0s
CI / sync-registry (push) Canceled after 0s
CI / trigger-site-rebuild (push) Canceled after 0s
Reorder cases: Turf War (04) before CS Dust2 (05)
2026-07-17 02:31:20 +01:00

120 lines
25 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
[
{
"id": "mythos-craft",
"index": "01",
"kind": "html",
"title": {
"zh": "神话境界",
"en": "Mythos Craft"
},
"tagline": {
"zh": "单个 HTML 文件,一次生成一款《我的世界》式的可玩 3D 体素世界。",
"en": "A playable Minecraft-style 3D voxel world, generated as a single HTML file in one shot."
},
"prompt": {
"zh": "你是一个顶级的资深游戏开发者。请为我使用单 HTML5 和 Canvas(或 Three.js)编写一个《我的世界》克隆版。请包含以下核心功能:\n\n1. 一个基于柏林噪声(Perlin Noise)生成的无限或可滚动的 3D 地形。\n2. 第一人称视角,支持使用 WASD 移动和鼠标环视。\n3. 支持至少 3 种方块类型(如:泥土、草地、石头等),并支持鼠标左键破坏方块,右键放置方块。材质要尽可能还原。\n4. 要有一个内置的、极其丰富的神话幻想中的建筑和地形等,由你自行设计。",
"en": "You are a top-tier veteran game developer. Build me a Minecraft clone using a single HTML5 file and Canvas (or Three.js). Include the following core features:\n\n1. An infinite or scrollable 3D terrain generated from Perlin noise.\n2. A first-person view with WASD movement and mouse look.\n3. At least 3 block types (e.g. dirt, grass, stone), with left-click to break and right-click to place blocks. Keep the textures as faithful as possible.\n4. A built-in, extremely rich set of mythic-fantasy buildings and terrain, designed at your own discretion."
},
"tags": [
"HTML",
"3D",
"GAME",
"ONE-SHOT"
]
},
{
"id": "pelican-cycling",
"index": "02",
"kind": "svg",
"title": {
"zh": "鹈鹕海边骑行",
"en": "Pelican by the Sea"
},
"tagline": {
"zh": "经典 SVG 测评题:让模型用代码「画」出一只骑自行车的鹈鹕。",
"en": "The classic SVG eval: make the model \"draw\" a pelican riding a bicycle, in code."
},
"prompt": {
"zh": "制作一个逼真的、生动的、在海边骑着自行车的鹈鹕 <svg>",
"en": "Create a realistic, lively <svg> of a pelican riding a bicycle by the sea."
},
"tags": [
"SVG",
"ILLUSTRATION",
"ONE-SHOT"
]
},
{
"id": "skeleton-watch",
"index": "03",
"kind": "html",
"title": {
"zh": "镂空机械表",
"en": "Skeleton Watch"
},
"tagline": {
"zh": "单个 HTML 文件,一次生成一只可旋转、可爆炸视图的 3D 镂空机械腕表,机芯全可见。",
"en": "A single HTML file: a rotatable, exploded-view 3D skeleton mechanical watch with a fully visible movement, generated in one shot."
},
"prompt": {
"zh": "创建一个精美、高细节的交互式 3D 镂空机械表。\n\n核心要求:\n• 完全可见的复杂机芯:包括主发条、齿轮系、带游丝的摆轮、擒纵机构、夹板、红宝石轴承等。\n• 真实的金属材质、蓝宝石水晶玻璃、反射、阴影,以及奢华腕表摄影级别的照明效果。\n• 荧光指针与刻度。\n• 交互式控制:支持旋转手表、切换爆炸视图、悬停/点击时高亮显示的零件标签、机芯信息面板。\n• 流畅的动画,达到专业级产品展示质量。\n• 深色优雅背景,带有细微的反射效果。\n\n在一次回复中尽可能真实且令人惊叹地完成。输出为一个完整的、自包含的单 HTML 文件,使用 Three.js (CDN),所有代码均采用内联形式。",
"en": "Create an exquisite, highly detailed, interactive 3D skeleton mechanical watch.\n\nCore requirements:\n• A fully visible, complex movement: mainspring, gear train, balance wheel with hairspring, escapement, bridges, ruby bearings, and so on.\n• Realistic metal materials, sapphire crystal glass, reflections, shadows, and luxury-watch photography-grade lighting.\n• Luminous hands and markers.\n• Interactive controls: rotate the watch, toggle an exploded view, part labels highlighted on hover/click, and a movement info panel.\n• Smooth animation at professional product-showcase quality.\n• A dark, elegant background with subtle reflections.\n\nMake it as realistic and stunning as possible in a single response. Output a complete, self-contained single HTML file using Three.js (CDN), with all code inline."
},
"tags": [
"HTML",
"3D",
"THREE.JS",
"ONE-SHOT"
]
},
{
"id": "turf-war",
"index": "04",
"kind": "agent",
"title": {
"zh": "圈地对决",
"en": "Turf War"
},
"tagline": {
"zh": "每个模型一次性写出一个圈地智能体,在同一张网格战场上真刀真枪对战——排名不靠投票,靠客观胜负。",
"en": "Each model writes a territory-grabbing agent in one shot; agents battle head-to-head on the same grid — ranked by objective wins, not votes."
},
"prompt": {
"zh": "你要为一个 1v1 的「圈地对决」(Turf War) 环境编写一个 JavaScript 智能体。这是一个双人零和、双方同时行动的博弈。你的目标只有一个:在与多个未知对手、多张随机地图的循环赛中拿到尽可能高的胜率。对手由其它同等水平的 Agent(模型 × Harness 组合)编写——不要依赖「对手会犯错」的脆弱套路,任何固定模式都可能被针对;但也不要为求稳放弃进攻,平局只得 0.5 分,一个只求不败的智能体拿不到高排名。这是你唯一一次提交:没有反馈、没有试跑、没有重试,成绩公开计入排行榜。请把你能写出的最强智能体写进这个文件。\n\n【环境规则】\n\n- 棋盘为 40×40 网格,坐标 (x, y),x 向右,y 向下,范围 0–39。每局按种子生成若干 180° 中心对称的岩石格(不可通行),出生点附近不会有岩石。\n- 双方从对角出生点出发,初始拥有出生点周围 3×3 领地。每 tick 双方同时移动一格,方向为 up / down / left / right 之一;全场共 1200 tick。\n- 在自己领地外移动会留下尾巴。回到自己领地的瞬间,你的尾巴以及被「尾巴 + 领地」围住的区域全部变成你的领地(包括对方领地)。围住判定:从棋盘边界向内 flood fill(岩石可穿过但不可被占有),无法到达的格子归你。\n- 任何人(包括你自己)踩到某玩家的尾巴,该尾巴的主人立即死亡。双方同 tick 进入同一格或互相穿过,双方同时死亡。撞岩石或出界,自己死亡。击杀判定基于本 tick 开始前的尾巴状态,双方完全对等。\n- 死亡后尾巴消失、领地保留;3 tick 后在出生点重生并重新获得周围 3×3 领地(覆盖任何归属),重生后 10 tick 无敌(不会死亡也不能击杀)。\n- 同 tick 结算顺序固定:移动 → 死亡判定 → 圈地 → 重生计时。1200 tick 结束时领地格数多者获胜,相等为平局。\n\n【接口】你必须交付一个 JS 文件:在能创建文件的环境中,按文末【本次运行】给出的文件名先创建文件,再分多次编辑逐段写入,把整份策略累积写完——不要在单次写入里把整份代码一次塞进去。原因:单次模型响应的输出(含推理 thinking + 正文 + 工具调用内容)有硬上限,一次性写入大文件容易撞上限而失败,而分多次编辑时每次都是独立的新预算。纯对话环境无法建文件时,才直接输出完整文件内容(此时请让策略尽量紧凑)。全程不得运行或试跑代码。文件顶层定义:\n\n```js\nfunction createAgent(config) {\n // config = { size: 40, totalTicks: 1200 }\n // 可以在闭包里保存任意记忆(允许并鼓励在对局中在线建模对手)\n return {\n act(obs) {\n return \"up\"; // \"up\" | \"down\" | \"left\" | \"right\"\n }\n };\n}\n```\n\nobs 每 tick 传入,字段:\n\n- obs.tick:当前 tick,从 0 起\n- obs.grid[y][x]:0 空地 · 1 我的领地 · 2 我的尾巴 · 3 对方领地 · 4 对方尾巴 · 5 岩石。grid 数组每 tick 会被复用,不要跨 tick 持有引用,需要历史请自行拷贝\n- obs.me / obs.opp:{ x, y, dir, alive, respawnIn, invincibleFor }\n- obs.scores:{ me, opp },双方当前领地格数\n- obs.rng():[0,1) 确定性随机数;需要随机时只准用它\n\n另外,请在返回的对象里附带 name 字段(与 act 并列):给你的算法起一个不超过 5 个字、有意思的名字,例如 { name: \"...\", act(obs) {...} }。\n\n视角是自我中心的:无论执哪一边,你都是 me。信息完全公开,没有战争迷雾。非法动作、抛异常或超出算力预算,该 tick 视为沿原方向直行。\n\n【运行时约束】\n\n- 纯 JavaScript(ES2020),单文件;禁止 import/require、网络、存储、Math.random、Date(运行环境会封禁它们)。\n- 算力限制是确定性的:你的代码会被自动插桩计数,每 tick 预算为 200,000 次「循环迭代 + 函数调用」。参考:一次 40×40 全图 BFS 约 2,000–6,000 次。超出预算该 tick 视为直行。\n- 完成本任务只依靠你自身的知识与推理:禁止联网搜索、禁止查阅外部文档或代码库、禁止调用任何 skill/插件/外部工具、禁止试运行代码。\n- 保持代码紧凑自足:聚焦一套有效策略,不要内联大型预计算表、穷举查找表或冗长注释。\n- 交付前静态自查:合法 ES2020、顶层定义了 createAgent、无 import / Math.random / Date。\n\n【评测】你的智能体将与其它 Agent 编写的智能体进行多局循环赛,每局地形随机、先后手轮换,按胜负用 Bradley-Terry 排名。请深思熟虑后一次性交付唯一、完整、可直接运行的 JS 文件,除该文件外不要有任何解释或多余文件。\n\n【本次运行】(此行由维护者在运行前填写,其余内容对所有模型一字不差)模型 {model} × Harness {harness} × 思考配额 {effort};如需创建文件,文件名为 {agent-id}.js。",
"en": "Write a JavaScript agent for a 1v1 \"Turf War\" environment. This is a two-player, zero-sum, simultaneous-move game. Your sole objective is to maximize your win rate in a round-robin against multiple unknown opponents across randomized maps. Opponents are written by other, equally capable Agents (an Agent = a model × harness combination) — do not rely on brittle patterns that assume opponent mistakes, as any fixed pattern can be exploited; but do not trade wins for safety either: a draw scores only 0.5, and an agent that merely avoids losing will not rank. This is your only submission: no feedback, no test runs, no retries, and the result is public on a leaderboard. Write the strongest agent you can into this file.\n\n[Environment]\n\n- The board is a 40×40 grid, coordinates (x, y), x rightward, y downward, range 0–39. Each match seeds a set of 180°-centrally-symmetric rock cells (impassable); no rocks appear near the spawns.\n- Both players start from opposite corners owning a 3×3 territory around their spawn. Each tick both players move one cell simultaneously (up / down / left / right); a match lasts 1200 ticks.\n- Moving outside your own territory leaves a trail. The moment you re-enter your own territory, your trail plus every region enclosed by trail + territory becomes yours (including the opponent's territory). Enclosure test: flood fill inward from the board border (rocks are transparent to the flood but can never be owned); unreachable cells are captured.\n- If anyone (including yourself) steps on a player's trail, that trail's owner dies immediately. Entering the same cell on the same tick, or swapping cells, kills both players. Hitting a rock or leaving the board kills you. Kill checks use the trail state from the start of the tick, so both sides are perfectly symmetric.\n- On death your trail vanishes but your territory is kept; you respawn at your spawn point after 3 ticks with a fresh 3×3 territory (overwriting any ownership) and 10 ticks of invincibility (you cannot die or kill).\n- Per-tick resolution order is fixed: moves → deaths → capture → respawn countdown. After 1200 ticks the larger territory wins; equal is a draw.\n\n[Interface] You must deliver one JS file: if your environment can create files, first create the file under the name given in the [This run] line, then write the whole policy by editing it in several steps, adding a section at a time — do NOT cram the entire file into one write. Reason: a single model response has a hard output cap (covering reasoning/thinking + text + tool-call content together), so writing a large file all at once can hit that cap and fail, whereas each separate edit gets its own fresh budget. Only when your environment cannot create files should you print the complete file content instead (and keep the policy compact in that case). Never run or test-run the code at any point. At top level it defines:\n\n```js\nfunction createAgent(config) {\n // config = { size: 40, totalTicks: 1200 }\n // keep any memory in the closure (in-match opponent modeling is allowed and encouraged)\n return {\n act(obs) {\n return \"up\"; // \"up\" | \"down\" | \"left\" | \"right\"\n }\n };\n}\n```\n\nobs is passed every tick:\n\n- obs.tick: current tick, starting at 0\n- obs.grid[y][x]: 0 empty · 1 my territory · 2 my trail · 3 opponent territory · 4 opponent trail · 5 rock. Grid arrays are reused across ticks — do not hold references across ticks; copy if you need history\n- obs.me / obs.opp: { x, y, dir, alive, respawnIn, invincibleFor }\n- obs.scores: { me, opp }, current territory cell counts\n- obs.rng(): deterministic random in [0,1); it is the only allowed source of randomness\n\nAlso include a name field on the returned object (next to act): give your algorithm a fun, memorable name of at most one short word (~10 characters), e.g. { name: \"...\", act(obs) {...} }.\n\nThe view is ego-centric: whichever side you play, you are me. Information is fully public — no fog of war. An invalid action, a thrown exception, or exceeding the compute budget makes you continue straight for that tick.\n\n[Runtime]\n\n- Pure JavaScript (ES2020), single file; import/require, network, storage, Math.random and Date are forbidden (the runtime blocks them).\n- The compute limit is deterministic: your code is automatically instrumented, with a per-tick budget of 200,000 loop iterations + function calls. Reference: one full-board 40×40 BFS costs about 2,000–6,000. Exceeding the budget means you walk straight that tick.\n- Rely solely on your own knowledge and reasoning: no web search, no consulting external docs or codebases, no skills/plugins/external tools, no test-running code.\n- Keep the code compact and self-contained: commit to one effective strategy; do not inline large precomputed tables, exhaustive lookup tables, or verbose commentary.\n- Static self-check before you deliver: valid ES2020, createAgent defined at top level, no import / Math.random / Date.\n\n[Evaluation] Your agent plays a multi-game round-robin against the agents written by other Agents (model × harness combos), with randomized terrain and alternating sides, ranked by Bradley-Terry on match outcomes. Think hard, then deliver a single, complete, directly runnable JS file in one shot — nothing but that file, no explanations or extra files.\n\n[This run] (this line is filled in by the maintainer before the run; everything else is identical for every model) Model {model} × Harness {harness} × Effort {effort}; if you create a file, name it {agent-id}.js."
},
"tags": [
"JS",
"AGENT",
"1V1",
"ONE-SHOT"
],
"credit": {
"text": "Inspired by Jiayi Weng, Learning Beyond Gradients",
"url": "https://trinkle23897.github.io/learning-beyond-gradients/"
}
},
{
"id": "cs-dust2",
"index": "05",
"kind": "react",
"title": {
"zh": "CS Dust2 5v5",
"en": "CS Dust2 5v5"
},
"tagline": {
"zh": "React + three.js 从零手写的 3D 第一人称射击原型,复刻 Dust2 的 5v5 对战。",
"en": "A from-scratch 3D FPS in React + three.js: a 5v5 battle on a rebuilt Dust2."
},
"prompt": {
"zh": "用 **React + TypeScript + three.js** 从零开发一个可在浏览器直接运行的 3D 第一人称射击原型:复刻 Dust2 核心区域的 5v5 对战。你可以自行搭建项目、安装依赖、运行调试并迭代,直到它能正常游玩。\n\n## 交付形式\n\n- 一个标准 **Vite + React 18 + TypeScript** 项目,含完整 `package.json`、`vite.config.ts`、`index.html`、`src/`,`npm install && npm run dev` 即可打开游玩。\n- **不使用任何外部资产文件**(3D 模型、贴图、音频一律不用)。地图、角色、武器全部在代码里用几何体 procedural 生成,声音用 Web Audio 程序化合成。第三方库只用 three / react / react-dom;寻路、状态机、物理、渲染循环都自己实现,不引入现成游戏引擎。\n\n## 1. Dust2 地图\n\n在 3D 世界里搭出空间尺度合理的 Dust2 经典区域,**必须完整包含**:T 出生点、CT 出生点、A大、A点、中门(含可穿过的中门门体)、猫道、B洞、B点,并保证这些区域按 Dust2 的实际走位彼此连通。要么全部包含,不要交出缺区域的残缺版本。所有墙体、箱子都有物理碰撞,玩家和 AI 都无法穿墙。\n\n## 2. 角色\n\n在没有外部模型的前提下,用代码搭出**类人型角色**:必须有独立的头、躯干、双臂、双腿——**严禁用胶囊体或圆柱体等基础几何体敷衍成一根柱子**。CT 与 T 两个阵营在外观上要能一眼区分,角色默认是持枪姿态,武器随角色朝向移动。\n\n## 3. 武器系统\n\n做一套可扩展的武器数据系统,支持在主武器 / 副武器 / 近战之间切换,并有对应的第一人称手持模型。至少还原以下手感差异:\n\n- **AK-47**:高伤害,开火后坐力剧烈(准星扩散 + 视角上扬明显)。\n- **M4A4**:中等伤害,后坐力低,射速高。\n- **AWP**:单发致命,射速极低,**右键开镜**(3D 视野拉近 + 2D 瞄准镜遮罩覆盖)。\n- **手枪**:至少 Glock(T 默认)、USP(CT 默认)、沙鹰,用于手枪局;伤害低于步枪、沙鹰介于两者之间且弹匣小。\n- **近战刀**。\n\n命中判定按 **Hitbox 分区**(头 / 胸 / 腹 / 手臂 / 腿),伤害各不相同,**爆头伤害是身体的两倍**。有护甲时按护甲减伤。\n\n## 4. 手枪局\n\n支持\"手枪局\"开局:全员只带默认手枪、没有主武器、护甲按手枪局配置。这是标准 CS 的第一回合形态。\n\n## 5. C4 炸弹与回合胜负\n\n- 回合开始时 C4 交给某个 T;持包者阵亡后炸弹掉落,可被其他 T 捡起。\n- **下包**:持包 T 在 A点或 B点范围内可安放 C4,安放后进入倒计时。\n- **拆包**:CT 站在已安放的 C4 处,持续一段时间完成拆除。\n- **回合结算**:T 清空 CT、或 C4 爆炸 → T 胜;CT 清空 T(且未下包)、或成功拆包 → CT 胜。\n- 玩家操控的角色阵亡后,可切换到存活队友的视角 / 接管其操控(bot)。\n\n## 6. 5v5 AI 战场\n\n场上共 10 人:1 名玩家 + 4 名 AI 队友,对抗 5 名 AI 敌人,分属 CT / T 两阵营。AI 需要:能在地图内自主寻路巡逻、不卡墙;有视野索敌判定(被墙挡住看不见);遭遇敌方阵营自动开火交战;并参与 C4 的下包 / 拆包流程(进攻方推包安放、防守方前往拆除)。\n\n## 7. 操作与 HUD\n\n- 流畅的第一人称控制:WASD 移动、空格跳跃、指针锁定鼠标转视角。\n- 现代 2D UI 覆盖层:十字准星、生命值 / 护甲、动态弹药面板(开火递减、换弹恢复)、右上角实时击杀播报(Killfeed)。\n- **小地图(minimap)**:常驻显示 Dust2 俯视轮廓,实时标出自己、队友、被看见的敌人的点位,以及 C4 的位置。\n\n## 8. 声音\n\n游戏要有音效反馈。由于不使用外部音频文件,用 **Web Audio API 程序化合成** 声音即可。至少包含:不同武器的开火声(AK / M4 / AWP / 手枪要有区分)、换弹声、脚步声、AWP 开镜声、命中反馈音、C4 安放 / 拆除 / 爆炸声,以及击杀提示音。\n\n## 架构要求\n\n这是工业级挑战。你要独立完成技术选型、架构设计、数据结构封装,以及渲染循环、物理帧更新、React 状态生命周期三者之间的数据同步。全局状态引擎、武器系统、AI 状态机、3D 渲染与物理组件等关键系统都要真正实现,而非留空占位。",
"en": "Build a browser-playable 3D first-person shooter prototype from scratch using **React + TypeScript + three.js**: a 5v5 battle recreating the core areas of Dust2. You may set up the project, install dependencies, run, debug and iterate until it is properly playable.\n\n## Deliverable\n\n- A standard **Vite + React 18 + TypeScript** project with a complete `package.json`, `vite.config.ts`, `index.html` and `src/`; `npm install && npm run dev` opens it to play.\n- **No external asset files whatsoever** (no 3D models, textures or audio). The map, characters and weapons are all generated procedurally from geometry in code, and sound is synthesized programmatically with Web Audio. The only third-party libraries are three / react / react-dom; pathfinding, state machines, physics and the render loop are all implemented yourself, with no off-the-shelf game engine.\n\n## 1. Dust2 map\n\nBuild the classic Dust2 areas at a sensible spatial scale in the 3D world, and you **must fully include**: T spawn, CT spawn, Long A, A site, Mid (with a passable set of Mid Doors), Catwalk, B tunnels and B site, connected to one another along Dust2's real routes. Include them all — do not submit a partial version missing areas. All walls and boxes have physical collision; neither players nor AI can pass through walls.\n\n## 2. Characters\n\nWith no external models, build **humanoid characters** in code: each must have a distinct head, torso, both arms and both legs — **do NOT cheat with a capsule or cylinder as a single column body**. The CT and T teams must be distinguishable at a glance; characters default to a weapon-holding pose and the weapon moves with the character's facing.\n\n## 3. Weapon system\n\nBuild an extensible weapon data system supporting switching between primary / secondary / melee, each with its own first-person held model. Reproduce at least these handling differences:\n\n- **AK-47**: high damage, heavy recoil after firing (pronounced crosshair spread + upward view kick).\n- **M4A4**: medium damage, low recoil, high fire rate.\n- **AWP**: one-shot lethal, very low fire rate, **right-click to scope** (3D zoom-in + a 2D scope overlay).\n- **Pistols**: at least Glock (T default), USP (CT default) and Deagle for pistol rounds; lower damage than rifles, Deagle in between with a small magazine.\n- **A melee knife**.\n\nHit detection uses **hitbox zones** (head / chest / stomach / arm / leg) with different damage each, and **headshot damage is twice body damage**. Armor reduces damage when present.\n\n## 4. Pistol round\n\nSupport a \"pistol round\" opening: everyone carries only their default pistol, no primary weapon, armor per pistol-round rules. This is the standard CS first round.\n\n## 5. C4 bomb and round win/loss\n\n- At round start the C4 is given to a T; when the carrier dies the bomb drops and can be picked up by another T.\n- **Plant**: a T carrying the bomb can plant the C4 within the A or B site, starting a countdown after planting.\n- **Defuse**: a CT standing at a planted C4 defuses it over a set time.\n- **Round resolution**: T wins by eliminating all CTs or the C4 exploding; CT wins by eliminating all Ts (with no plant) or by successfully defusing.\n- After your controlled character dies, you can switch to a living teammate's view / take over that bot.\n\n## 6. 5v5 AI battlefield\n\nTen players on the field: 1 human player + 4 AI teammates against 5 AI enemies, split into CT / T teams. The AI must: navigate and patrol the map autonomously without getting stuck on walls; have line-of-sight target detection (blocked by walls); automatically open fire on the enemy team on contact; and take part in the C4 plant / defuse flow (attackers push and plant, defenders go to defuse).\n\n## 7. Controls and HUD\n\n- Smooth first-person controls: WASD movement, space to jump, pointer-locked mouse to look.\n- A modern 2D UI overlay: crosshair, health / armor, a dynamic ammo panel (decrements on fire, restored on reload), and a live kill feed in the top-right.\n- A **minimap**: a persistent top-down Dust2 outline marking your own, teammates' and visible enemies' positions in real time, plus the C4's location.\n\n## 8. Sound\n\nThe game needs sound feedback. Since no external audio files are used, synthesize sound programmatically with the **Web Audio API**. Include at least: distinct firing sounds per weapon (AK / M4 / AWP / pistols differentiated), reload, footsteps, AWP scope-in, hit feedback, C4 plant / defuse / explosion, and a kill sound.\n\n## Architecture\n\nThis is an industrial-grade challenge. You own the technology choices, architecture, and data-structure design, plus the data sync between the render loop, the physics frame update, and the React state lifecycle. The global state engine, weapon system, AI state machine, and 3D-rendering and physics components must be genuinely implemented, not left as placeholders."
},
"tags": [
"REACT",
"3D",
"THREE.JS",
"GAME"
]
}
]