# worker-gta **Repository Path**: Wilson_Lws/worker-gta ## Basic Information - **Project Name**: worker-gta - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-21 - **Last Updated**: 2026-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 打工侠:职场反击战 一个 GTA 风格的浏览器 3D 小游戏。你是写字楼里的一个普通打工人, 日复一日被领导骂、被同事甩锅、被客户刁难。直到某一天,你决定不再忍了。 > 灵感来自一条抖音 AI 短剧《都玩GTA了 为啥还打工,应该打人!》 --- ## 运行 ```bash npm install npm run dev ``` 浏览器打开 `http://localhost:5173`,双击 `index.html` 不行(需要 dev server 提供 glTF 资源)。 首次加载约 15-20 秒(要载入 34 个角色 + 整层楼的模型),之后浏览器会缓存。 ### 重建素材(clone 后必做一次) **`public/assets/` 不进版本控制** —— 解压后约 214 MB,且全部是 CC0 可重新获取的素材, 与其把仓库撑大不如脚本重建。 clone 之后跑: ```bash mkdir -p public/assets # 1. Kenney 家具包(直链,无需代理) curl -sL "https://kenney.nl/media/pages/assets/furniture-kit/440e0608a4-1677580847/kenney_furniture-kit.zip" \ -o /tmp/kenney.zip unzip -q /tmp/kenney.zip -d public/assets/kenney/furniture-kit # 2. Quaternius 人体 + 动画库(走 itch.io,脚本已封装流程) ITCH_PROXY=http://127.0.0.1:7890 ./tools/itch-download.sh \ quaternius universal-base-characters public/assets/quaternius 15861669 ITCH_PROXY=http://127.0.0.1:7890 ./tools/itch-download.sh \ quaternius universal-animation-library public/assets/quaternius 17958403 # 3. 解压 cd public/assets/quaternius unzip -q "UniversalBaseCharacters-Standard.zip" -d base-characters unzip -q "UniversalAnimationLibrary-Standard.zip" -d animation-library ``` 素材清单、授权与来源见 `CREDITS.md`。 > 关于代理:Quaternius 的包下载走 itch.io,在国内需要代理。 > `ITCH_PROXY` 环境变量可选,直连可用时省略即可。 > 若 `tools/itch-download.sh` 因 itch.io 改版失效, > 直接浏览器打开对应的 itch.io 页面点 Download 也一样。 ### 目录约定 | 路径 | 是否进 git | 说明 | |---|---|---| | `src/` | ✓ | 全部游戏代码 | | `public/assets/` | ✗ | 素材,脚本重建 | | `tools/` | ✓ | 素材下载脚本 | | `perf-probe.html` | ✓ | 性能探针,见 `PERF.md` | | `node_modules/` | ✗ | npm 依赖 | --- ## 操作 | 键 | 功能 | |---|---| | `WASD` / 方向键 | 移动(**相机相对**,转过视角后 W 永远是「远离相机」) | | 鼠标 | 瞄准 | | **左键** | 攻击 | | **右键拖拽** | 转视角(环绕 + 俯仰) | | **滚轮** | 缩放 / 切换武器 | | `Shift` | 冲刺 | | `E` | 交互(喝咖啡、躲厕所、买饮料) | | `Q` | 切换武器 | | **空格** | 狂暴模式(怒气满时可用) | | `Esc` | 暂停 | --- ## 核心机制 ### 精神状态(替代血条) 被欺压掉的是**精神状态**,不是生命值。 - 领导的嘴炮、客户的挑刺、同事的阴阳怪气 —— 靠近就会持续掉精神 - 掉到 30% 以下:画面去饱和、走路踉跄 - **掉到 0:当场破防**,蹲在地上缓 3 秒才能动 ### 怒气(替代 GTA 的特殊能力) 被欺压累积。满了之后按空格进入**狂暴模式**:移速 +42%、伤害 ×1.9、攻速 +38%、短暂霸体。 注意怒气的成长是**非对称**的:被打涨得快,打人涨得慢。 这保证玩家会先经历一段「忍」,而不是一上来就能开无双。 ### 通缉等级(替代通缉星) | 等级 | 谁来抓你 | |---|---| | 1★ | 保安 | | 2★ | HR | | 3★ | 全体同事加入围殴 | | 4★ | 法务 | | 5★ | 警察 | **关键设计**:开局同事、客户、HR 都**不会主动动手**,只会嘴炮。 只有通缉等级上去之后他们才加入围殴 —— 这正是「忍 → 爆发」曲线的实现方式。 躲进卫生间或茶水间可以加速摆脱通缉。 ### 摸鱼恢复 光有压迫没有出口,玩家只会被单向耗死。所以: | 交互点 | 效果 | |---|---| | ☕ 茶水间咖啡机 | 精神 +22,怒气 −6 | | 🚰 接水 | 精神 +10,怒气 −3 | | 🥤 投币买咖啡(¥5) | 精神 +30,怒气 −8 | | 🚽 卫生间隔间 | 精神 +16,怒气 −10,**加速摆脱通缉** | | 🌿 看看绿植 | 精神 +8,怒气 −4 | 卫生间和茶水间在现实里也是打工人唯一的避难所,所以「躲进厕所逃避通缉」这个机制是自然长出来的。 ### 五种武器(全是办公用品) | 武器 | 类型 | 特点 | |---|---|---| | ⌨️ 键盘 | 近战 | 攻速快伤害低,挥出「Ctrl+Alt+Del」 | | 📎 订书机 | 远程 | 射钉子,弹药 30 | | ☕ 咖啡 | 抛射 | 抛物线,命中减速 | | 📁 文件夹 | 近战重击 | 击退强,爆 A4 纸雨 | | 🖨️ 打印机 | 重型范围 | 弹药仅 5,伤害 38,爆墨点 | 命中特效统一是**纸屑爆开 + K.O. 大字幕**,无血腥。被打倒的 NPC 会转圈冒星星,几秒后爬起来 —— 卡通恶搞向,不是死亡。 --- ## 主线任务 | 章 | 标题 | 内容 | |---|---|---| | 1 | 入职第一天 | 领工牌 → 到工位 → 泡咖啡 → 被嫌凉了重泡 | | 2 | 无休止加班 | 18:00 铃响没人走,送文件、撑到 23:00 | | 3 | 客户就是上帝 | 撑过三轮评审,客户要「五彩斑斓的黑」 | | 4 | 同事甩锅 | 找 3 份证据自证 | | 5 | 裁员通知 | HR 通知被优化,回到工位看见纸箱 | | 6 | 奋起反抗 | 掀翻桌子,打进领导办公室 | --- ## 技术要点 | 项 | 说明 | |---|---| | 引擎 | Three.js r186 + Vite 8,无其他运行时依赖 | | 素材 | 全部 CC0(见 `CREDITS.md`),人类角色 + 43 个动画 + 140 件家具 | | 性能 | 见 `PERF.md`。**像素比锁 1.0** 是硬性红线;瓶颈是填充率不是几何 | | 服装 | 挂骨骼的几何体,不是改贴图(UV 图集边界无法精确对准) | | 粒子 | InstancedMesh + alphaTest,不用透明混合(避免 overdraw) | | 碰撞 | 圆 vs AABB + 粗筛网格,不引入物理引擎 | | 无头测试 | `__DEBUG.step(dt, n)` 固定步长推进,不依赖 rAF | ### 调试接口 浏览器控制台里 `__DEBUG` 提供: ```js __DEBUG.info // 帧率 / draw call / 三角面 / 玩家位置 / 相机状态 __DEBUG.state // 精神状态 / 怒气 / 通缉 / 工资 / 任务进度 __DEBUG.step(1/60, 60) // 固定步长推进 1 秒(不受 rAF 节流影响) __DEBUG.teleport(x, z) // 瞬移玩家 __DEBUG.heal(100) // 回精神状态 __DEBUG.missions.jumpTo(5) // 跳到第 6 章 ``` --- ## 已知问题 - **Draw call 偏高**(约 960)。服装每角色约 14 个独立网格 × 34 个角色。 实测帧率仍有 56-58 FPS,但计划按材质合并每角色的服装网格。 - 两个无害的贴图警告(Quaternius 包里发型/眼睛法线图的文件名对不上)。 - 音效尚未实现。 --- ## 目录结构 ``` src/ ├── main.js 主循环、战斗、交互、HUD 接线 ├── core/ │ ├── renderer.js 渲染器、环绕相机、避墙、光照 │ └── input.js 键鼠输入(含右键拖拽与滚轮) ├── world/ │ ├── office.js 办公楼布局、墙体、家具摆放 │ ├── props.js Kenney 道具加载与静态合并 │ └── collision.js 圆 vs AABB + 粗筛网格 ├── entities/ │ ├── character.js 角色加载、43 个动画、发型 │ ├── clothing.js 挂骨骼的服装系统 │ └── npc.js NPC 与 7 态 AI ├── combat/ │ ├── weapons.js 5 种办公用品武器 + 弹道 │ └── fx.js 纸屑粒子 + 漂浮文字 ├── systems/ │ ├── player-state.js 精神状态 / 怒气 / 通缉 / 工资 / 时钟 │ └── interact.js 摸鱼交互点 ├── data/ │ └── missions.js 6 章主线 └── ui/ └── style.css HUD / 对话框 / 特效样式 ```