毁灭公爵 1 和 2 中的图形效果,第 1 部分

主要观点:

  • 前两款《毁灭公爵》游戏不以突破性、改变行业的视觉效果闻名,但有一些巧妙效果,此次重点关注 Duke Nukem 1 的镜面地板和 Duke Nukem 2 的水下及半透明效果。
  • 介绍了 Duke Nukem 1 中镜面地板效果的实现方式,包括在关卡文件中通过特定演员编号指定镜面区域,高度硬编码为 16×30 像素,效果通过将视频内存中的像素复制到视频内存来实现,且使用了 EGA 锁存写模式以减少 ISA 总线流量,代码用汇编语言编写并进行了优化。
  • 指出原始 Duke Nukem 1 存在一个视觉故障,即当镜子靠近屏幕顶部时可能会复制到不该复制的视频内存,在 Evercade 游戏重制版中已修复。

关键信息:

  • Duke Nukem 1 的镜面地板效果通过特定方式在关卡文件中指定,高度固定,利用像素复制实现,代码优化包括使用寄存器、巧妙计算指针等。
  • 原始游戏的故障及重制版的修复方式。

重要细节:

  • 镜面效果实现时,主循环遍历关卡中的镜面演员,调用低级例程复制屏幕上可见的镜子像素,垂直压缩镜像并每帧应用 1 像素垂直源偏移以创建动画闪烁效果。
  • 汇编代码中通过各种寄存器操作和指令优化来提高效率,如使用 MOVSB 指令实现像素复制,通过巧妙计算指针避免重复计算,使用 REPT 宏展开循环等。
  • 原始故障是代码未检查特殊情况导致复制到不该复制的内存,可能显示为黑色,重制版通过只复制屏幕上的行来修复。
阅读 12
0 条评论