直升机突击队再次亮相

2020-07-15 13:01:47

直升机258是直升机突击队的一个港口,这是一款由马克·柯里在1990年用Turbo Pascal编写的DOS游戏。

大约30年后,也就是2020年,我重新拾起了旧代码,给它注入了一些新的活力。我已经将其移植到C语言,并使其与SDL2一起工作,现在它可以在现代环境中本地运行。

遗憾的是,您的浏览器似乎不兼容。由于使用了某些低级功能,这款游戏目前只能在桌面Chrome上运行。

感谢Mark Currie允许我发表他的游戏的这个翻译版本。除了发布源代码、可播放版本、可播放版本之外,我还在为该项目撰写一系列文章,其中第一部分包括在下面。

我还制作了一些动画和互动部分,你可以随意操作,比如后面的调色板选取器。

我选择重访“直升机突击队”有几个原因。最大的问题之一就是怀旧。我记得小时候很喜欢玩这个游戏,在我的电脑上和其他人一起玩,对一些新奇的机制感到惊讶。我还记得我笑得很开心。这是我玩的第一个游戏,你可以离开汽车,四处奔跑,步行做事情,然后回到里面继续前进。我认为这太酷了,这是我今天喜欢的沙盒游戏的早期先驱。我对这样的卧室编码工作情有独钟,游戏的核心和灵魂不会被许多层的润色所掩盖。想象一个15岁的马克·柯里在他的286上为自己写一个游戏,并从中获得真正的乐趣,这并不是太难想象的。作为一个年轻的有抱负的游戏程序员,这样的游戏对我来说是相当重要的。不像像“超级马里奥”这样的东西,在当时我似乎拿不到,我可以玩这个,并开始研究如何制作类似的东西,即使用我现有的简单工具也是如此。这比我之前的作品“太空入侵者”更小,也更直接。这个项目花了大约3个月的日历时间,总共花了大约200个小时。由于这个游戏的源代码是可用的,尽管是用Pascal编写的,所以不需要太多的逆向工程。大部分工作都花在了从C语言到C语言的转换,以及构建新的代码来为Turbo Pascal API提供类似的工作。我最后做的部分之一,声音,也是最难的部分之一。最初的游戏以一种动态的方式使用PC扬声器的声音,我不得不为它编写一个合成器。这是相当费力的时间,并使其听起来像原来的。在第二部分中将详细介绍这一点。原来的代码大约有5500行Pascal,全部是游戏逻辑代码,新的C版本大约有5500行游戏逻辑,1500行支持代码和400行注释。与上一个项目相比,这个项目中没有太多未发布的代码。我写了几个小片断来帮助翻译,一些脚本来构建字体数据,还有一些原型来帮助弄清楚声音代码。我最终还是写了一点Pascal代码,主要是作为原始游戏源代码的临时mod来帮助我弄清楚原始系统在做什么。有关编译旧代码的更多详细信息将在后面的文章中提供。我在这个项目上做的第一件事就是找出原始游戏的帧缓冲区格式,然后开始破解,让它在现代系统上显示出来。帧缓冲器是CGA,这意味着它是320像素宽,200行高,有2位调色板颜色,一次在屏幕上总共有四种可能的颜色。下面是游戏中所有CGA荣耀的屏幕截图精选。

仔细一看,即使每个屏幕只能显示四种颜色,也可以看到总共有四种以上的颜色。这是托帕莱特的应收款。在CGA方案中,有四个基色调色板可用,并且每个调色板都有16种可能颜色的不同排列。作为一个额外的调整,调色板中的第一种颜色(通常是背景色)可以从十六种颜色中自由选择,从而提供了稍微多一点的灵活性。这意味着四个基本调色板中的每一个都有十六个变体,总共有六十四个调色板。要使用颜色组合,请单击下面第一个面板中的彩色区域。您可以选择调色板和背景色,效果将使用其中一个屏幕截图显示在第二个面板中。使用“上一张”和“下一张”可以切换到不同的屏幕截图。在旧系统中,帧缓冲区和调色板设置是存储在显卡上的小块内存,由游戏直接操作。在新系统中,这些驻留在主机内存中,每帧都必须动态转换为现代纹理格式,以便GPU使用。由于只有64个可能的调色板,可以使用一个巧妙的技巧来简化和加速帧缓冲区转换。在比赛开始前,所有可能的组合