主要观点:
- 前两款《毁灭公爵》游戏不以突破性、改变行业的视觉效果闻名,但有一些巧妙效果,此次重点关注 Duke Nukem 1 的镜面地板和 Duke Nukem 2 的水下及半透明效果。
- 介绍了 Duke Nukem 1 中镜面地板效果的实现方式,包括在关卡文件中通过特定演员编号指定镜面区域,高度硬编码为 16×30 像素,效果通过将视频内存中的像素复制到视频内存来实现,且使用了 EGA 锁存写模式以减少 ISA 总线流量,代码用汇编语言编写并进行了优化。
- 指出原始 Duke Nukem 1 存在一个视觉故障,即当镜子靠近屏幕顶部时可能会复制到不该复制的视频内存,在 Evercade 游戏重制版中已修复。
关键信息:
- Duke Nukem 1 的镜面地板效果通过特定方式在关卡文件中指定,高度固定,利用像素复制实现,代码优化包括使用寄存器、巧妙计算指针等。
- 原始游戏的故障及重制版的修复方式。
重要细节:
- 镜面效果实现时,主循环遍历关卡中的镜面演员,调用低级例程复制屏幕上可见的镜子像素,垂直压缩镜像并每帧应用 1 像素垂直源偏移以创建动画闪烁效果。
- 汇编代码中通过各种寄存器操作和指令优化来提高效率,如使用
MOVSB
指令实现像素复制,通过巧妙计算指针避免重复计算,使用REPT
宏展开循环等。 - 原始故障是代码未检查特殊情况导致复制到不该复制的内存,可能显示为黑色,重制版通过只复制屏幕上的行来修复。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。