一句提示词,一个 AI(Claude / Fable 5),一个晚上,从零写出的网页版《红色警戒2》。 浏览器即点即玩,适配 PC 与手机,支持多人联网锁步对战。
🎮 在线试玩 → https://peaceful-wave-530.fly.dev
一个从零手写的网页 RTS 引擎:自带 C&C 文件格式解析器(MIX/SHP/VXL/TMP/PAL/CSF…)、 确定性锁步联机内核、PixiJS 等距渲染。
- 本仓库只含原创代码,不含任何 EA 游戏素材(
game-data/已 gitignore)。- 真实美术/音效由玩家在本机导入自己的游戏文件、或浏览器直连下载 EA 官方免费的 《泰伯利亚之日》素材渲染——全程不经本仓库/服务器分发;无素材时用原创占位美术, 无需任何文件即可游玩。
- 本项目为非官方粉丝 / 教学性质,与 Electronic Arts 无任何关联; "Command & Conquer""Red Alert""Tiberian Sun" 等为 EA 商标,归其所有。
- 🎨 真实美术:浏览器一键下载 EA 官方免费的泰伯利亚之日素材 → 真实坦克 / 建筑 / 地形 / 音效(仅本地解析,不分发;无文件则用原创占位,照样能玩)
- 🔊 沉浸音效:对战配乐 + 空间化音效(按屏幕位置声像 + 距离衰减)+ EVA 战场播报(基地受袭 / 电力不足 / 单位损失…)+ 仪式化「点击进入」开场
- 🧠 会打仗的对手:三种打法风格(钢铁防线 / 攻守均衡 / 全力进攻,每局随机),攒够约 15 个兵成波出击、留守守家、按你的兵种反制——不作弊,双方起始资源一致,AI 全靠策略
- 📱 触控为先:编队(点召回 · 长按设组)、选中兵种构成、点建筑即选建筑、单位操作条
- 🔧 工程师修复己方 / 占领敌方建筑 · 🚀 新单位:火箭兵 · 磁能兵 · 光棱坦克 · 天启坦克 · 军犬 · 作战实验室
- 🔗 邀请链接联机:生成一个链接扔给朋友,点开就在同一房间开打
pnpm monorepo,TypeScript 全栈:
| 包 | 职责 |
|---|---|
packages/data |
红警2 文件格式解析器(MIX/INI/PAL/SHP/TMP/VXL/CSF/地图/音频),纯 TS,浏览器与 Node 通用 |
packages/game |
确定性模拟内核(全整数运算 + 种子 PRNG + 状态哈希),客户端与服务器共享,锁步联机的根基 |
packages/client |
PixiJS v8 渲染、调色板着色器、UI、鼠标/触控输入(Vite) |
packages/server |
Node + WebSocket:大厅/房间 + 锁步命令中继 |
# 1. 安装依赖(需要 Node ≥ 20 与 pnpm)
pnpm install
# 2. 准备游戏文件(见 game-data/README.md),然后校验
pnpm check-assets
# 3. 启动开发(客户端 + 服务器)
pnpm dev常用命令:pnpm test(单元测试)· pnpm lint · pnpm typecheck · pnpm build
玩法:基地建设(建造场/电厂/精炼厂/兵营/战车工厂/防御)、电力系统、矿石经济(采矿车自动往返,可手动指定矿点或一键恢复采矿)、生产队列(连点排队·一键取消·×N 计数)、毗邻建造半径、集结点(可视集结线)、修理/出售;战斗采武器→弹头→装甲百分比矩阵 + 弹道/溅射/防御塔;战争迷雾。
个体 AI 与操作手感:目标智能(自发集火补刀、先打威胁而非最近)、四种作战姿态(进攻/警戒/坚守/不还火)、攻击移动(沿途逐个停下歼敌再续行)、巡逻、编队散开不挤一坨;指令反馈光圈、双击选同类、一键找空闲兵、基地受击警笛 + 小地图红圈定位、小地图视野框、结算战报(用时/最大兵力/歼敌/损失)、操作帮助面板(?);键位 A 攻击移动 · P 巡逻 · G 切姿态 · E 找空闲 · S 停止 · Ctrl+数字编队。
兵种与科技:步兵 / 主战坦克 / 防空 / 攻城车 / 采矿车 + 反装甲步兵(克坦克)、军犬(秒步兵);科技建筑「作战实验室」解锁高级单位 光棱坦克 / 天启坦克;老兵系统(击杀晋升老兵/精英、伤害递增、军衔标记)。
对手 AI:三种打法风格(钢铁防线 / 攻守均衡 / 全力进攻,每局随机抽取、开局「敌情简报」揭示,区别在防御投入与经济规模);统一节奏「攒够约 15 个兵才成波出击、不够就守家积蓄,绝不一个一个送」,出击时留守一支守家、不被反偷;会侦察反制(你坦克多 → 转出反坦克兵);不作弊——双方起始资源一致,难度只改行为(出击门槛 / 是否反应),不给经济优势。难度三档。
模式:单机遭遇战(难度/起始资金/地图大小可选),多人联机锁步对战(大厅/房间/聊天/准备)。
平台:PC(鼠标键盘+边缘滚屏+小地图跳转)与手机(触控手势:点选/拖框选/单指下令/双指平移缩放,PWA 全屏)。
美术与音效:自备红警2/泰伯利亚之日文件、或浏览器一键下载 EA 免费素材时,渲染真实 SHP 建筑步兵 + VXL 体素载具 + TMP 地形 + 真实 C&C 音效与单位语音(仅本地解析,不分发);无文件时回退原创占位美术 + 程序合成音效。对战全程配乐 + 空间化音效(声像/距离衰减)+ EVA 战场播报;工程师可修复己方 / 占领敌方建筑。
- M0 工程脚手架 · M1 资源解析(MIX/INI/PAL/SHP/CSF)· M2 地图与等距地形
- M3 确定性模拟内核 · M4 基地经济 · M5 战斗 · M6 体素载具(VXL/HVA)
- M7 多人联机锁步 · M8 手机触控+PWA · M9 音频 · M11 部署上线
- 产品级打磨:真实地形、集结点/修理/出售、攻城车、战争迷雾、压力/模糊/AI对战测试等
- 2.0 玩法深化:个体 AI(集火/姿态/编队/攻击移动·巡逻)、反装甲步兵 / 军犬 / 科技层(光棱·天启)、老兵系统、爆炸震屏、指令反馈/找空闲兵/受击告警/结算战报/操作帮助
- 2.0 沉浸 & 手感续作:浏览器一键下载真实美术与音效;对战全程配乐 + 空间化音效 + EVA 战场播报 + 仪式「点击进入」开场;工程师修复/占领;触控编队/选中构成/「点建筑选建筑· 点空地移动」操作模型;对手 AI 重做为三风格「攒够成波出击 + 留守守家」(不作弊);邀请链接联机
测试 174 个全绿(含确定性压力测试 + 锁步/回放确定性、AI 各打法对阵收敛与「攒够才成波」、工程师修复/占领、解析器健壮性、端到端联机同步)。
packages/game 是锁步联机的根基,必须做到所有客户端逐 tick 算出完全相同的世界状态:
- 坐标用整数 lepton(1 格 = 256 lepton),沿用红警2 原版坐标系
- 角度用 256 级二进制角 + 查表三角,禁用
Math.sin/cos/sqrt/atan2 - 随机数只用 sim 内的种子 PRNG,禁用
Math.random - 禁止读取真实时间(
Date/performance.now) - 以上由 ESLint 规则强制 + 跨环境状态哈希测试兜底
# 终端 1:启动对战服务器(默认 7301)
pnpm dev:server
# 终端 2:启动客户端
pnpm dev:client浏览器开两个标签 → 首页「🌐 联机对战」→ 填同一房间名 → 双方点准备 → 自动开局。 本机/局域网即可对战;架构为确定性锁步(命令经服务器中继,各端同序执行)。
生产模式下,服务器在同一端口托管构建好的客户端与 WebSocket(同源、无跨域), 玩家只需访问一个网址即可联机:
# 本地按生产模式跑
pnpm --filter @ra2web/client build
PORT=8080 pnpm --filter @ra2web/server start # 打开 http://localhost:8080
# 或用 Docker(云平台一键部署)
docker build -t ra2web .
docker run -p 8080:8080 ra2web部署到任意支持 Docker + WebSocket 的平台(Fly.io、Render、Railway、自有 VPS 等)即可
公网对战。客户端在生产环境自动以同源 ws/wss 连接服务器,无需额外配置。
游戏文件:联机仅同步指令、不传素材;每位玩家在自己设备本地导入红警2文件 (见 game-data/README.md)。当前占位美术版无需文件即可游玩。
这个项目由 Claude(Fable 5) 在一个晚上、从一句提示词开始、自主规划并实现—— 当年红色警戒是一家公司数十人耗时两年的经典,如今一个 AI 一晚从零写就。 它也是「用 AI 从零造开源项目」这件事的一个起点。
代码以 MIT 许可开源,见 LICENSE。
注意:MIT 仅覆盖本仓库的代码。游戏美术/音效/字体等版权素材不在本仓库内、不随本项目分发; 玩家需自备原版游戏文件,或使用 EA 官方免费开放的素材。本项目与 EA 无关。