Table of Contents
金色弧引擎:可移动性基金会
半生的跨平台旅程始于它的引擎GoldSrc。 Valve的工程团队从一个从id Software获得许可的巨型Quake引擎中衍生出来,早期认识到一个单一的平台支架代码库会阻碍未来的扩展。 GoldSrc是围绕一组将游戏逻辑与系统界面分离的核心抽象构建的。 这种模块化意味着平台特有的代码 — — 用于渲染、输入、声音和网络化 — — 存在于定义明确的层中,使得移植这些层成为重写而非整个游戏的问题。
Valve决定使用C(引擎工具使用一些C++)也促进了可移植性. C编译器几乎在时代的每一个平台上都可以使用,语言的低级性质使得工程师可以精细控制内存和性能,而无需依赖平台特定的运行时库. 引擎的动态链接库系统(游戏逻辑的DLL模型)从硬件和OS修改中进一步隔热游戏游戏游戏代码.
图形抽象: 渲染管道
DirectX, OpenGL, 和软件退缩
1998年,当Windows游戏生态系统以DirectX 5和6. 然而,Valve从一开始就为Linux和macOS端口规划了设计。渲染引擎是围绕一个抽象的“登陆器”接口建造的,可以由Direct3D(后来的DirectX),OpenGL,或者纯软件渲染器支持。这种架构使得游戏可以在硬件上运行,而无需3D加速——在办公室和早期Linux机器中常见——同时也利用了每个平台上最好的API。
OpenGL 渲染器对于Linux和macOS尤其重要,因为那里不存在DirectX. Valve采用了类似GLQuake的技术,但纹理管理和详细程度有了很大的改进. 软件渲染器虽然按现代标准的速度缓慢,但确保了游戏甚至可以启动不支持的硬件,这是跨平台测试的关键考虑.
阴影和图形特性可移植性
在可编程的遮蔽器成为标准之前,GoldSrc依赖于固定功能的管道特性。 阀门抽象的纹理混合、多文字和可配置回调器背后的环境影响。 这意味着一个端口到一个具有不同固定功能管道(如PlayStation 2的GS或Sega Dreamcast的PowerVR)的平台可以重新执行这些回调器,而无需重写整个渲染路径。 同样的抽象性后来为移动努力缓解了向OpenGL ES的过渡。
输入和音频:通用接口
输入摘要
半生输入系统被设计为民意抽象层。 游戏询问键盘、鼠标和乐杆数据的通用“输入状态”结构,而平台专用代码则填补了DirectInput、Linux evdev或macOS HID管理器的构造。 这种设计允许同一玩家动作和武器代码与USB键盘、游戏板甚至屏幕上的触摸屏虚拟键盘工作(见后来的社区端口 ) 。
音频可移植性
半生音频使用迈尔斯声音系统,这是抽象于DirectSoud,OSS(Open Sound System),ALSA,以及Core Audio的中件产品. Miles为3D位置音频,流线和样本回放提供了一致的API. Valve选择中件可以减轻每个平台重写音频后端的负担. 稍后,GoldSrc SDK的开源发布允许社区开发者用OpenAL或SDL mixer替换迈尔斯,进一步扩大了平台支持.
网络代码和多人游戏: 保持电线协议常数
半生的多人游戏依赖于基于UDP的客户端-服务器模式. 关键是,网络协议- packet格式,delta压缩,状态同步- 定义独立于基础传输层. 这意味着一个Linux客户端可以连接到一个Windows服务器,反之亦然,只要双方都理解同一个协议版本. Valve甚至发布了半生SDK中的协议规格,允许第三方服务器和客户端执行.
网络抽象化也处理过内向和包对齐. GoldSrc使用一个宏系统(例如] LittleLong[ BigFloat),在需要时将数据转换为网络字节顺序,确保不同CPU架构(x86,PowerPC,ARM)的兼容性. 这种对字节序正确性的注意对于Dreamcast(小-endian SH-4)和PS2(小-endian EE)等端口控制器来说至关重要.
历史港号: 从Dreamcast 到 Xbox
世嘉梦想播客(2000)
半生之梦播报端口是最雄心勃勃的,它使游戏进入了有限的RAM(16 MB系统,8 MB视频)的控制台. Valve和移植伙伴Gearbox Software重制了渲染器使用PowerVR系列2硬件抽象层,这提供了优越的纹理压缩(VQ),但需要小心的资产分解. Dreamcast版本还引入了"Half-Life: Blue Shift"扩展,尽管性能挑战,它还是证明了GoldSrc可以缩放到嵌入式硬件.
PlayStation 2 (2001) 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版 游戏版
半生的PS2端口(Half-Life: Decay)只在日本发运,但技术上仍很好奇。它利用情感引擎的矢量单位来加速世界多边形的排序和软件的转换和照明。Valve不得不用索尼的专有GSKit取代OpenGL的呼叫,同时保留同样的渲染逻辑。音频后端被重写为索尼的SPU2音源处理器。这个端口强调了模块化音源和渲染器抽象层的重要性。
Xbox (2001年)
对于最初的Xbox,半生运行在一个高度定制的GoldSrc上,它充分利用了NV2A GPU(一个GeForce 3衍生). Valve使用DirectX 8遮蔽器进行凸凸出映射和光谱效果,标志着引擎首次使用可编程像素遮蔽器. Xbox端口需要修改内存管理器(容纳48 MB)和输入系统(支持双模拟棒). 这个端口的成功证明了引擎可以扩展到下一代图形而无需重写核心游戏.
源代码发布和社区端口
2004年,Valve发布了允许修改但不允许再分配的"半生SDK"许可证,然而2013年,GoldSrc源代码在GitHub上以开源许可证公开发布,这解锁了一波社区驱动端口. Xash3D 和 FreeHL]从地面重新执行GoldSrc等项目,增加了对包括Android,iOS甚至任天堂Switch在内的现代平台的支持.
比如,Xash3D引擎用SDL2和OpenGL ES 2.0取代了原来的DirectX/OpenGL后端,使得半生可以在没有GPU驱动器的设备上运行。 这些社区端口经常在Valve的最初抽象上改进,增加了Vulkan支持和未封装帧率。它们还用音频延迟和输入投票来固定长期存在的问题,证明了原设计在它上行走时的强度。
现代可移动性:逆向工程和遗产
如今,半生机仍然可以在Windows 10/11,macOS(通过Steam Play)和Linux(通过Steam Linux运行时间)上播放. GoldSrc引擎已经移植到64位架构,Valve自己的"Half-Life:Source"将渲染器替换为Source引擎,但由于脚印较轻,原版仍然获得更广泛的支持.
半生游戏的跨平台努力的工程教训在现代游戏引擎中依然存在。 不真实的引擎、团结和哥多特都采用了硬件抽象层、音频和输入的中间软件以及GoldSrc开创或完善的网络协议版本概念。 Valve选择开放SDK源码也激励了一代开发者从项目开始就考虑可移植性。
结论
半生的跨平台兼容性并非偶然;而是故意的建筑决定的结果:模块化引擎、抽象的渲染和输入系统、音频的中间软件和精心版网络协议。 这些选择使得游戏能够运行在Windows PC到Dreamcast的所有游戏上,并且继续支持社区端口进入现代。 对于任何旨在构建一个游戏的开发者来说,GoldSrc游戏本仍然是宝贵的参考。
进一步读作:]