给Fable一个提示:“构建一个.kkrieger的Linux致敬版本。”它在一个C文件中交付了一个51KB的程序化FPS——然后通过截取其无头渲染的截图并实际查看来进行调试
摘要
一位开发者用单个C文件创建了一个完全程序化生成的致敬.kkrieger的第一人称射击游戏,生成了一个51KB的二进制文件,在运行时合成所有资产,并通过无头截图进行了验证。
查看缓存全文
缓存时间: 2026/06/12 06:51
pinguy/murkk
来源:https://github.com/pinguy/murkk
.murkk
一个向 .kkrieger(.theprodukkt, Breakpoint 2004)致敬的 96K 精神续作。原生 Linux, 单个 C 文件,无引擎,无资源。你所见所闻的一切均在启动时或运行时合成:纹理、关卡、怪物、枪械、音效、字体。
剥离后的二进制:51,336 字节。 预算:98,304。剩余空间:约 46 KB。
构建
Arch / CachyOS:
sudo pacman -S --needed sdl2 mesa gcc
./build.sh
Debian / Ubuntu:
sudo apt install libsdl2-dev libgl1-mesa-dev gcc
./build.sh
或者直接:gcc -Os murkk.c -o murkk -lSDL2 -lGL -lm
运行
./murkk # 固定种子 —— 这是一个演示,每次运行世界相同
./murkk --seed 1982 # 不同的建筑群
./murkk --smoke # 无头自测试:渲染、截屏、退出返回 0
WASD 移动,鼠标视角,左键开火,ESC 退出。怪物位置偏低——瞄准下方射击,与原版蜘蛛相同。寻找绿色信标。红色方块回血,黄色方块补充弹药。
各部分合成位置
- 纹理(启动时,约 260 毫秒):基于可平铺值噪声 fBm 的幂次方网格 → 高度场(砖块倒角、板状凹陷、螺栓凸起、拉丝纹理)→ 通过 Sobel 算子导出切线空间法线贴图 + 带有逐砖哈希抖动、污垢和锈蚀阈值的漫反射渐变。四张 256² 贴图,零文件。
- 关卡(启动时,<1 毫秒):基于种子的 xorshift 算法生成房间,通过 L 形走廊连接,放置灯光(交替的暖色钠灯/冷色汞灯——kkrieger 式的昏暗光影)、物品、怪物、出口。几何体批量打包成交错客户端数组;切向量框架根据轴对齐法线在 C 和 GLSL 中相同计算,从而使凹凸映射在结构上对齐。
- 光照:GLSL 120,每帧最近的八个点光源,二次衰减,所有关卡表面逐像素法线映射,距离雾,枪口闪光和击中光作为临时光源注入,平方根伽马校正输出。
- 怪物:盒体组装的四足动物,每帧通过列主序 mat3 组合摆出姿势——追逐时摆动腿部,扑击前直立蓄力,击杀后挤压并保持死亡姿态。发光眼睛。
- 音效:单个 SDL 浮点回调,将失谐 55 Hz 的嗡鸣与滤波后的隆隆声混合,叠加一次性合成声音——带音高滑降重击的噪声爆发枪声,击中滴答声,下降锯齿波死亡声,脚步声,拾取哔哔声。无样本。
- 字体:37 个字形,5×7,手工打包的位数组,259 字节。
验证
--smoke 在 Xvfb + llvmpipe 下无头运行:合成所有内容,渲染标题和一场设想的交火,将两帧写入 PPM 文件,退出返回 0。本构建即通过此方式验证——此文件夹中的截图即为实际输出,软件光栅化。
与真实 96K 实践的诚实差异
kkrieger 的 96 KB 是通过本致敬项目刻意放弃的工具实现的,因此这里的 51 KB 是“君子协定”式的体积编码,而非参赛等级:
- 无打包器。kkrieger 通过 kkrunchy(ryg 的可执行压缩器)交付。Linux 的等效工具——
sstrip、基于 xz/zstd 的vondehi风格存根——可将此二进制压到 20 KB 以下。 - 无
-nostartfiles/自定义_start,无着色器缩减,无符号精简。所有这些都作为余量舍弃。 - 动态链接系统 SDL2/libGL/libc,这些不记入预算,与 kkrieger 依赖 d3d9.dll 和 MSVC 运行时相同。
- kkrieger 的关卡是在 werkkzeug(他们的操作符栈工具)中手工制作的;我的关卡是生成的。不同取舍,相同理念:关卡是运行时生成的数据,而非磁盘上的字节。
- 内存取舍忠实再现:kkrieger 著名的从 96 KB 解压到数百兆字节的 2004 年 RAM 中。磁盘是唯一预算。这里同样如此。
CC0 / 公有领域。向 farbrausch 和 .theprodukkt 致敬。
相似文章
无头截图循环使得本地30B智能体用纯C完成光线追踪FPS演示
一个使用300亿参数模型的AI智能体利用无头截图循环,自主完成了一个用C语言编写的光线追踪第一人称射击演示,展示了先进的自主编程和调试能力。
@mattshumer_: 对于所有认为这是假的人... 以下是生成这个的仓库和提示(在下方讨论串中),一次性完成...
Matt Shumer 分享了 'Claude of Duty' 的 GitHub 仓库,这是一款完全在浏览器中使用 Three.js 和 WebGL2 构建的第一人称射击游戏,所有资源均由 AI 代理在加载时程序化生成。
像1993年那样制作图形
一位开发者详细介绍了如何构建《Catlantean 3D》——一款采用1993年时代图形技术(256色、320x240分辨率、手工制作资产、无人工智能)的第一人称射击游戏,计划在Steam上发布,重点讲解调色板渲染和资产创建。
FPS.cob: 用COBOL实现的第一人称射击游戏
一款用COBOL实现的第一人称射击游戏,支持Wolf3D风格和类似DOOM的关卡。
@mattshumer_: 对于所有抱怨速度慢的人,我运行了提示词‘make it faster, without losing quality’,然后瞧见:
Matt Shumer 展示了 Fable,一个基于 ThreeJs 的自定义 3D 世界构建工具,在浏览器中运行,通过提示词调优来加速性能,以回应速度抱怨。