我想看看自己能否通过 vibe coding 完成通常需要深入了解的 demoscene 知识。最终,我完成了一个小型 FPS,能在 16 KB 内存中运行。使用 Fable 5 High 进行初始规划,Opus 5.5 High 进行实现、打磨和优化。
游戏:你是盲人,处于地下。你的扫描器向三种频率发射声波脉冲。脉冲会暂时使墙壁和敌人发光,然后地图会恢复到一个淡淡的痕迹。每个脉冲也会产生噪音,下面的一切都通过声音来追踪。有 3 个关卡,3 个敌人类型(包括一个boss),有坑洞和桥梁,具有生成音乐的功能。
优化技术:
- 关卡是 64×64 个单元格的网格,通过片段着色器(2D DDA)进行射线投射。这释放了约 430 个字节,之后用来实现脉冲阴影、伪 AO 和程序化墙壁模式。
- 每帧 CPU 都会重写一个 64×90 RGBA32F 的浮点纹理。它包含单元格、敌人列表、脉冲、灯、HUD 文本和甚至字体位元。
- 相机的 yaw、pitch 和 aspect ratio 位于单个
glRects的纹理坐标上。零 uniforms、零矩阵,一次绘制调用。 - 敌人是由部分构建的符号距离场(圆形盒子和“肢体”段,7 个字节/部分),平滑合并并使用球面追踪。爬行者有六个连接的腿,实际上会走路。近距离拍摄较慢,所以每个部分都有一个可让着色器跳过的包围球。
- 使用 x87 代替 SSE2,stdcall 代替 cdecl,内联函数关闭,并使用 300 MB 的 Crinkler 哈希表代替 100 MB。
- 音乐是生成的。每个小节,一个小的线性共轭算法(LCG)会选择一个从调式进展中挑选的和弦,然后伴奏、低音和琶音会通过相同的合成器播放它的音效。
源代码和可执行文件:https://github.com/zTrojan/blind-sector
评论 (0)