铁壁行动

AI开发的单页3D游戏,体积不到300k,画面丰富体验流畅。开源项目看游戏介绍。

铁壁行动(Operation Ironhold)

一款完整的第一人称射击游戏,直接在浏览器标签页中运行。单个 HTML 文件,无需构建步骤, 无需包管理器,磁盘上没有任何图片、音频或模型文件。十名敌人据守 7 号扇区的集装箱堆场。你有三分钟时间肃清他们。

整个游戏——渲染器搭建、世界生成、武器操作、敌人 AI、音频合成、后处理和 HUD—— 约 6500 行 JavaScript 和 CSS,全部内联在一个 290 KB 的 index.html 里。唯一的外部 资源是从 CDN 加载的 three.js r128,其余一切都在运行时生成。

运行方式

点击页面开始游戏。点击是授予鼠标指针锁定的方式,所以游戏必须经你同意才能捕获鼠标。 按 Esc 释放指针并暂停,再点击遮罩层继续。

需要支持 WebGL 和指针锁定(Pointer Lock)的桌面浏览器。没有触屏输入,手机上无法游玩。

操作说明

输入

动作

W A S D

移动

鼠标

视角

左键

开火

右键

切换机瞄

R

装填

Shift

冲刺;开镜时屏住呼吸

Ctrl

下蹲

空格

跳跃;空中再按一次二段跳;贴近岩架时按住可攀爬

1 2 3 4

M4 卡宾枪 / KS-12 泵动霰弹枪 / P-9 手枪 / SR-7 长弓狙击枪

V

切换步枪的全自动 / 半自动

鼠标滚轮

循环切换武器

Esc

暂停

回合规则

在 3:00 内消灭全部十名敌人。初始生命 100、护甲 50,护甲会吸收一半受到的伤害, 耗尽后由生命承担。

敌人开局前 3 秒不会开火,让你有时间熟悉环境;战斗调度器把同一时刻向你射击的 敌人数量限制为两人,其余敌人继续机动。正是这一条约束让枪战保持清晰可读,而不是 陷入无法还手的交叉火力。

阵亡或时间耗尽即结束回合。结算界面显示消灭数、爆头数、命中率和存活时间。

武器

槽位

武器

弹匣

备弹

特性

1

M4 卡宾枪

30

210

760 发/分钟全自动,V 切换半自动

2

KS-12 泵动霰弹枪

8

48

每发弹 9 颗弹丸,射击间隔需上膛

3

P-9 手枪

15

90

430 发/分钟半自动,拔枪最快

4

SR-7 长弓狙击枪

5

25

栓动,一枪命中身体即可击毙

每把武器都有由几何体和戴手套的双手组成的枪械模型,会跟随鼠标移动产生晃动、随脚步 起伏、装填时垂下屏幕,并抛出会在地面弹跳的弹壳。枪口火焰是贴图配合真实点光源, 会被泛光通道捕捉。步枪的后坐力是固定弹道而非随机散布,所以压枪是可以练习的技巧。

瞄准

右键切换机瞄。每把武器切换进出都恰好 0.2 秒,切换期间散布收紧,持镜时移动速度 降低 40%。

武器

视场角

放大倍率

瞄具

M4 卡宾枪

75 → 38

2.2 倍

着色玻璃上的红点

KS-12 泵动霰弹枪

75 → 60

1.3 倍

隔热罩上方珠状准星

P-9 手枪

75 → 50

1.7 倍

三点式机械瞄具

SR-7 长弓狙击枪

75 → 15

5.8 倍

全屏狙击镜,密位分划板

狙击枪是改变画面观感的那一把。开镜时准星替换为全屏遮罩,武器隐藏在镜片之后, 合成着色器会像真实光学器件那样给镜片蒙上一层雾。视角随双正弦缓慢漂移;按住 Shift 可以稳定三秒钟,之后必须松开换一口气。鼠标灵敏度随放大倍率缩放,保证 屏幕上的手感一致。栓动上膛需要 1.5 秒,一发不中代价惨重。

移动

集装箱顶、木箱、油桶堆、报废平板卡车以及所有实体道具都可以站立。普通跳跃约 1.2 米, 二段跳再加 0.9 米。在空中贴近脚下方约 1.95 米以内的岩架边缘按住 空格 可以攀上去—— 这就是从平地直接上集装箱顶、不走坡道登上狙击台的技巧。

敌人

十名士兵沿路径点巡逻,用网格寻路器绕行掩体,寻路用的碰撞体和玩家完全一致。发现你 需要 300 到 800 毫秒的反应时间,发现后会通过无线电呼叫队友。

交战中他们会抢占掩体、侧移、包抄、装填,并且枪口被挡住时拒绝开火——即使能越过 掩体看到你。视线同时从玩家端和敌人端双向射线检测,保证两端判定一致:你打不到他们, 他们也打不到你。爆头造成双倍伤害,命中会让敌人畏缩,死亡时布娃娃倒地、武器脱手。

一切都在运行时生成

仓库里不存在任何图片、音频或模型文件。

混凝土、瓦楞钢、胶合板、铁锈、砖块和铁丝网都在加载时绘制到画布上,连集装箱侧面 的模板喷印货运标志也不例外。武器、双手和士兵由方块、圆柱和球体拼装。天空逐片段 求值,地平线上的工业天际线是实体几何。

所有音效都通过 Web Audio API 合成:每把武器由爆音、枪体声和胸腔低频叠加的枪声、 装填声、脚步声、区分墙面与血肉的命中声、低血量心跳,以及带远处金属吱呀声(随机 定时)的工业环境嗡鸣。还内置了一个由生成脉冲响应构建的卷积混响。

性能

动态分辨率缩放监控帧时间,自动调整渲染比例以维持目标帧率。重复道具按颜色分组用 InstancedMesh 绘制。静态景物合并为单个绘制调用。曳光弹、贴花、弹壳和粒子全部 对象池化。阴影投射按包围盒尺寸裁剪,砍掉了阴影通道中约三分之二的子像素垃圾。

开源地址

https://github.com/StarKnightt/operation-ironhold

留言评论