TooLongLink Video Watcher AI
Watch:
العربية - Arabic
Bahasa Indonesia
বাংলা - Bengali
български - Bulgarian
简体中文 - Chinese Simplified
繁體中文 - Chinese Traditional
Hrvatski - Croatian
Čeština - Czech
Dansk - Danish
Nederlands - Dutch
English
Eesti - Estonian
فارسی - Farsi
Suomi - Finnish
Français - French
Deutsch - German
Ελληνικά - Greek
ગુજરાતી - Gujarati
עברית - Hebrew
हिन्दी - Hindi
Magyar - Hungarian
Italiano - Italian
日本語 - Japanese
ಕನ್ನಡ - Kannada
한국어 - Korean
Latviešu - Latvian
Lietuvių - Lithuanian
മലയാളം - Malayalam
मराठी - Marathi
Norsk - Norwegian
Polski - Polish
Português - Portuguese
Română - Romanian
Русский - Russian
Српски - Serbian
Slovenčina - Slovak
Slovenščina - Slovenian
Español - Spanish
Kiswahili - Swahili
Svenska - Swedish
தமிழ் - Tamil
తెలుగు - Telugu
ไทย - Thai
Türkçe - Turkish
Українська - Ukrainian
اردو - Urdu
Tiếng Việt - Vietnamese
Submit
Timothy Cain移除署名游戏的幕后故事:面对丢失的补丁源码,如何逆向工程重塑一款游戏
Timothy Cain
总结:
Tim Cain在视频中分享了他职业生涯中一款特殊的游戏,他主动要求将自己的名字从制作人员名单中移除。
这款游戏在90年代发布并打了两个补丁后,公司希望进行重大更新,包括新的游戏机制、美术和图形分辨率。
然而,公司丢失了补丁的源代码,只保留了基础游戏的源代码,且没有bug列表,他需根据公开的补丁说明进行推断。
Tim提出手动编辑已打补丁的可执行文件,利用他擅长的十六进制编辑器和8086汇编语言知识。
他面临的巨大挑战是原始美术转换工具的丢失。他通过逆向工程游戏专有的压缩算法,并自制了工具来压缩和加载新的美术资源,以适应软盘容量限制。
在两周内,他成功展示了带有新分辨率和美术的游戏,赢得了公司的信任。
尽管对自己的技术成就(在不写一行高级语言代码的情况下完成游戏重制)感到自豪,但他个人不喜欢这款游戏的整体设计,认为它“很糟糕”。
最终,他手动移除了自己在可执行文件中的署名,并要求在新的游戏手册中也省略他的名字,从而这款游戏成为了他职业生涯中“未署名”的杰作。
引言:未署名游戏的故事 [
0:00
]
个人选择移除姓名 [
0:05
]
Tim Cain分享了他职业生涯中一款特殊的游戏经历。
他主动要求将自己的名字从这款游戏的制作人员名单中移除。
他表示对自己的工作感到自豪,但并不对游戏本身感到自豪。
背景设定:90年代的项目 [
0:33
]
故事发生在90年代,一家公司已经发行了一款游戏,并发布了两个补丁。
Cain与这款游戏的最初设计、编码和测试无关。
项目挑战:丢失的源代码 [
1:33
]
公司需求:新机制、美术和分辨率 [
1:01
]
大约一年后,公司希望对游戏进行重大修改。
具体需求包括:
新的游戏机制。
新的美术素材。
支持新的图形分辨率(从CGA到EGA和VGA),这意味着需要更多颜色和针对不同分辨率的独特美术。
公司计划将此作为一款全新的游戏发布。
关键问题:补丁源代码丢失,仅有基础游戏源代码 [
1:40
]
公司发现了一个核心问题:他们丢失了之前两个补丁的源代码。
他们只保存了基础游戏的源代码。
Cain被要求使用基础游戏的源代码,重新实现所有补丁中修复的bug。
无漏洞列表,需根据补丁说明逆向 [
1:57
]
公司没有提供任何已修复bug的列表。
Cain必须根据面向用户发布的补丁说明,推断出并修复这些bug。
解决方案:二进制逆向工程 [
2:17
]
Cain的提议:手动编辑可执行文件 [
2:17
]
Cain提出了一个替代方案:手动编辑已打补丁的游戏可执行文件(.exe文件)。
这意味着他将直接修改二进制文件。
工具与技能:Emacs十六进制编辑器和8086汇编语言 [
3:00
]
公司起初对他的能力和所需时间表示怀疑。
Cain解释他将使用一个Emacs风格的十六进制二进制编辑器进行操作。
他精通8086汇编语言,这为直接修改二进制代码提供了基础。
他认为这种方法可以让他专注于新功能开发,而不是重新修复旧bug。
初步工作:代码结构分析 [
3:53
]
公司同意给他几周时间进行尝试。
Cain首先花了几天时间分析汇编代码,标记出关键的游戏机制、菜单设置、选项和游戏启动点等。
核心工作:图形与艺术重构 [
4:38
]
分辨率适配与UI改造 [
4:38
]
他首先尝试实现新的分辨率支持,这涉及:
设置新的图形模式(如CGA、EGA、VGA)。
针对不同分辨率加载和显示不同的美术素材。
修改用户界面,包括游戏选项菜单,以包含图形分辨率选项并设置默认值。
开发或调整不同的位图传输程序(blitters)来处理像素渲染。
最大的难题:美术加载与压缩工具丢失 [
5:46
]
最棘手的问题是美术素材的加载。
公司丢失了用于将艺术家提供的美术格式转换为游戏使用格式的工具。
他们也未存档这个工具的源代码。
逆向工程定制压缩算法并自制工具 [
7:02
]
Cain意识到游戏从磁盘加载美术时会进行解压缩。
他深入分析了汇编解压缩例程,精确地搞清楚了它的工作原理。
他逆向工程出游戏的专有压缩算法(一种行程编码,RLE)。
随后,他编写了自己的工具,能够读取新的美术素材(例如LBMS格式),并将其压缩成游戏所需的特定格式。
这样做是为了满足软盘容量的限制,因为未压缩的多个分辨率美术将无法装下。
项目成果与个人决定 [
7:39
]
成功实现新游戏特性:新标题、菜单、分辨率与美术 [
7:49
]
Cain回到游戏代码中,设置了根据分辨率加载和显示新美术的功能,并取得了成功。
游戏现在有了新的标题画面、菜单,并且可以切换分辨率,显示更多更好的彩色美术。
这一视觉上的巨大改进迅速改变了公司的看法,让他们相信这确实是一个“不同的游戏”。
公司认可与后续开发 [
8:20
]
公司批准了Cain的工作,他随后又花了数周时间进行其他必要的修改。
在修改过程中,他有时会直接用十六进制编辑器覆盖代码,或者通过从旧代码块跳到可执行文件末尾写入新汇编代码,再跳回原点的方式,避免清理“死代码”以节省时间。
游戏经过QA测试,确认所有bug都已修复,并修复了他引入的少量新bug。
为何不愿署名:对游戏设计的不满 [
9:31
]
尽管为自己的技术成就感到非常自豪,但Cain在实际玩游戏时,发现自己并不喜欢这款游戏。
他与游戏的设计无关,认为这款游戏“很糟糕”。
这款游戏的类型也并非他通常所涉足的领域。
坚持移除姓名 [
9:51
]
因为他持有可执行文件,他没有修改制作人员名单以包含自己的名字,只添加了公司要求的新制作人和QA人员的名字。
他还明确要求公司不要在新的游戏手册中列出他的名字。
尽管公司副总裁询问他是否确定,并表示愿意给他署名,但他坚决拒绝了。
回顾与总结 [
10:39
]
对技术成就的自豪 [
10:39
]
Cain回顾说,他仍然时常想起那款游戏,并为自己所做的技术工作感到自豪。
这是一次独特的经历,在不编写一行高级语言代码的情况下,完全用汇编语言重制了一款游戏。
避免与游戏内容挂钩 [
10:54
]
他很高兴这款游戏不在他的作品集里。
游戏成功发布并发挥了作用,但他不希望以此作为自己的代表作。
这段经历的隐秘性 [
11:04
]
在他职业生涯的其余时间里,除了当时公司的少数几个人,没有人知道他做了这项工作。
他之前也从未公开谈论过这件事。
尽管不为游戏本身自豪,但他为自己的技术贡献感到自豪,因此决定在视频中分享这个故事。
Copied!
Why didn’t you like it?
Inaccurate / wrong facts
Missing important points
Took too much time to load
Article too long / verbose
Article too short / not enough detail
Article hard to read / bad formatting
Images irrelevant / broken
Language / translation issues
Offensive / inappropriate
Other
Submit
Thank you for your feedback!
×