文章摘要
文章介绍了作者经过10年断断续续的努力,成功逆向工程了1998年《网络创世纪》的演示服务器,将约5000个MSVC x86汇编函数转换为可移植的C99代码,并与原始二进制文件逐指令对比验证。该演示版包含完整服务器代码和数据,是研究早期MMORPG的重要资料。
文章总结
逆向工程1998年《网络创世纪》演示服务器
经过10年断断续续的工作,我完成了对1998年《网络创世纪》(Ultima Online)演示服务器的完整逆向工程,并将成果发布在GitHub上。该项目包含约5000个从MSVC x86反汇编并转换为可移植C99代码的函数,每个函数都与原始二进制文件进行逐指令比对。
项目背景
《网络创世纪》是1997年由Origin Systems公司开发的MMORPG游戏,作为首批商业成功的多人在线角色扮演游戏之一。1998年10月发布的资料片《第二纪元》附带了一个独立演示版(UoDemo.exe),其中包含了完整的服务器代码和数据。
这个演示版虽然移除了部分功能并将可玩地图缩小至Ocllo岛,但其余代码都是1998年中期实际运营服务器的真实代码。演示版采用Microsoft Visual C++ 5.0编译,使用C++98标准之前的C++方言。
技术方法
- 使用radare2进行反汇编
- 通过带有C++符号的UO客户端实验性Linux版推导符号名称
- 手工将每个函数转换为C99代码,保持相同的控制流、结构布局和分支
- 通过重新反汇编C语言构建结果进行验证
- 重点还原了类继承体系:CEntity→CResourceEntity→CItem→CContainer→CMobile→CPlayer
重要发现
- 修复了原始代码中的稳定性问题(崩溃、溢出、未初始化变量等)和游戏性问题
- 恢复了演示版中被禁用的功能,如生成系统和衰变系统
- 意外发现著名的生态系统的代码仍然存在,虽然相关函数未被调用
- 添加了1999年官方加入的新技能支持
- 重新实现了账户系统
- 扩展支持从1.25.30到5.0.9.1的所有客户端版本
- 默认构建目标改为64位,同时保持与32位原始二进制兼容
项目还包含完整的工具套件,用于操作服务器数据格式,并重建了游戏中缺失的门、标志、装饰品等内容。
作者呼吁《网络创世纪》社区提供1997-2003年间的原始服务器文件(如dynamic0.mul、regions.txt等),以帮助更准确地重现游戏世界内容。
该项目代码和资源已开源,并设有测试中心供用户体验这个高度还原的1998年《网络创世纪》服务器。
评论总结
《网络创世纪》(Ultima Online)相关评论总结:
怀旧与情感共鸣
- 多位用户表达了对UO的美好回忆,认为其游戏机制和社区氛围独特
- "sooo many memories...was there ever a working port of the client for OSX ?" (snickmy)
- "The human engagement was more genuine...than current MMORPGs" (klvino)
游戏设计赞赏
- 用户称赞UO的开放式游戏机制和经济系统优于现代3D MMO
- "never seen an online game capture so many emergent gameplay mechanics" (kev009)
- "very harsh in comparison to today's MMOs...can lose your stuff" (helloplanets)
技术影响
- UO启发了许多人的编程兴趣,包括网络编程和脚本编写
- "got me into network programming" (kev009)
- "first real programming achievement was building a website for UO shard" (curioussquirrel)
MOD与模拟器社区
- 活跃的第三方服务器和MOD开发社区持续存在
- "UO Outlands...2500+ players logged in" (helloplanets)
- "enjoyed scripting for TazUO game client in Python" (IChrisI)
历史保护价值
- 用户肯定协议考古和游戏历史保护工作的意义
- "protocol archaeology is half software history" (shutterkiller)
- 寻找原始游戏文件的呼吁显示出历史复原需求(raymond_goo)
系列作品评价
- 对Ultima系列不同作品的比较和评价
- "Ultima 7 most praised but combat was easier in 6" (shevy-java)
- 希望看到Ultima 4移动重制版的请求(IG_Semmelweiss)
AI工具应用
- LLM在代码反编译项目中的实用价值
- "insane how useful LLMs are for decompilation" (skerit)
开发精神赞赏
- 对长期项目坚持的敬意
- "10 years of on-and-off work...truly honorable perseverance" (ckbkr10)
注:所有评论均无评分数据,故未包含认可度分析。原始评论保留中英文关键引用,不同观点保持平衡呈现。