有关SCUMM引擎的故事

图片

SCUMM可以简单地视为视频游戏引擎中的“一个”,但此引擎所产生的感觉几乎与基于其的游戏一样多。

说到LucasArts冒险的黄金时代,您不能忽视SCUMM引擎“ Maniac Mansion的脚本创建实用程序”(“ Maniac Mansion的脚本创建实用程序”),该引擎在有史以来最著名的游戏中得到了使用,例如《 全油门》《触手的一天》。Sam和Max上路了 ,当然还有Maniac Mansion了

SCUMM由Aric Wilmunder和著名的游戏设计师Ron Gilbert共同编写,因此提供了创建这些游戏的机会。 Wilmunder和记者Mike Bevan最近通过电子邮件互相联系,讨论了SCUMM及其周围的故事。 本文介绍了这段对话的部分片段,这些片段记录自Wilmunder的话。

我们认为传达Wilmunder的话很重要,因为SCUMM不仅是引擎或技术。 对于许多开发人员而言,这是在视频游戏历史上最令人难忘的时期之一中,将其艺术视野传播给数千人的一种方式。

引擎发展


使LucasArts与其他大多数开发人员区分开的功能之一是,我们许多人来自大型机,因此我们在Sun工作站上开发了工具和编译器,然后创建了允许我们将代码和数据下载到所需平台的设备。 一切始于Atari 800,然后聘请Ron [Gilbert]与C64一起使用,因此为此平台创建了一个类似的系统。

最重要的优点是我们可以用C开发工具,或者像SCUMM一样,使用YACC来处理和标记代码。 大多数开发人员使用同一台机器来编写和执行代码,因此他们的工具仅使用一个平台的功能。

在为PC开发产品的最初几年之后,PC本身就变得和我们的第一个工作站一样强大,因此我们逐步迁移工具并逐渐放弃了Sun工作站。

机会的演变很早就开始了。 我是第一个在PC上工作的内部开发人员,当时的工具和编译器很粗鲁。 例如,如果有错误,C编译器会生成非常“详细”的描述。 在PC上,您可能会收到诸如“文件:walk.c行:409错误:4004”之类的消息,然后您必须进入代码中找出问题所在,或者获取手册并将错误代码变成更易于理解的内容。 有时错误描述也令人困惑。 由于我们没有好的编辑器可以在PC上编写代码,因此我在Sun上使用了编辑器,然后传输了文件。 当PC上发生错误时,我在Sun工作站上重新编译并调试了代码。 这鼓励我从一开始就编写可以在两台非常不同的计算机上运行的更简洁的代码。

PC上还有许多其他困难,因为控件,声音和图形完全不同。 例如,鼠标并非始终是标准设备,因此控件是为鼠标,操纵杆或键盘设计的。 这简化了游戏引擎到其他平台的转移,因为管理已经模块化。 对于声音,我们支持内部扬声器,它似乎也是CMS声卡(Adlib的前身),以及用于Tandy计算机的声音系统。 这些图形也是模块化的,因为我们支持Hercules黑白显示器,四色CGA图形,16色EGA,16色模式下的VGA和另一种图形模式下的Tandy图形。 为实现此目的,所有图形均渲染到内存缓冲区中,然后非常专门的过程将缓冲区复制到视频卡。 我们使用了所谓的“脏矩形”系统,该系统跟踪更新的区域,因此我们仅复制了屏幕的必要部分。


阿里克·威尔蒙德(Arik Wilmunder)

SCUMM上的通讯


SCUMM是一种编译语言。 例如,将walk dr-fred移至实验室门命令将Walk命令转换为单字节命令。 下一个字节确定该命令用于哪个演员或角色,然后将实验室门对象转换为双字节数字,即,整个命令缩减为四个字节的数据。 如果您不知道,字节就是一块计算机内存,可以包含0到255之间的数值。如我们所见,标记语言非常有效。 口译员从不知道哪个演员是弗雷德博士。 它只是演员的人数,所以我们总是试图避免直接在解释器中完成有关游戏的任何特定信息的艰巨任务。

Maniac中 ,此规则的唯一例外是演员显示文本的颜色...

在开发Maniac时 ,我们有两个例外,那就是解释器永远不应编码游戏值。 在其中,我必须指定用于演员的颜色以及他们的短语显示的颜色。 源代码将这些值嵌入解释器中。 在将Maniac移植到PC以及Zak McKracken发行之前,添加了两个新命令,以便可以从脚本控制这些值。 “设定角色对话颜色”和“设定角色颜色”从解释器中删除了特定的游戏命令,以便脚本可以控制所有内容。

我说的是口译员,所以让我们仔细看一下。 解释器是最终用户启动的程序。 它初始化图形和声音,从磁盘读取文件,并解释这些文件中的脚本以执行游戏。 发布游戏时,我们将解释器重命名为“ Monkey.exe”或“ Dig.exe”,但是在开发过程中,此工具称为SPUTM,代表“ SCUMM Presentation Utility(tm)”。 该名称实际上并不是商标(TM),但我们只是想将其命名为另一种体液。

SCUMM或Maniac Mansion的脚本创建实用程序是一种用于标记脚本并将所有游戏资源组合到我们在磁盘上释放的文件的工具。 用于Maniac的SCUMM版本必须包含大约80%的后续游戏(例如Full Throttle)中使用的团队。 在完成语言开发之后,最重要的命令再也没有改变。 “步行到时钟的伯纳德”和“步行到摩托车的本伯纳”基本上是相同的。

SCUMM多任务


SCUMM最突出的部分可能是多任务处理。 这意味着可以同时执行多个脚本。 您可以在Zach McCracken的办公室中创建一个挂钟并对其进行动画处理。 有一个专门用于时钟的简单,非常简单的脚本,该脚本告诉动画引擎将一个时钟图像更改为下一个时钟图像,指示声音引擎重现滴答作响的声音,然后命令脚本“睡眠一秒钟”,并重复操作。 “睡眠”命令是看似简单的命令,它们告诉系统脚本已完成,并且您需要在一段时间后返回并从执行输出的位置继续执行脚本。 睡眠需要指定的时间。

还有“等待”功能。 当命令演员去某个物体或朝正确的方向旋转时,通常会使用它。 脚本只是指示演员去,然后发出命令“ waiting for actor”,这使脚本进入睡眠状态,直到演员到达所需的位置或朝正确的方向转动。 这使我们能够以非常线性的方式编写脚本,以反映演员必须执行的动作顺序。

各种有用的工具,名称令人作呕


除了SCUMM和SPUTM,我们还开发了许多其他工具来创建游戏。 SPIT是一个简单的字体编辑器,用于为界面的不同部分创建不同的文本格式。 屏幕顶部的对话框可以使用一种字体,另一种可以用于保存游戏屏幕,而第三种用于屏幕底部界面的动词命令(Walk-To,Pick-Up,Look At等)。 FLEM是用于管理房间的图形工具。 可以标记房间中的对象,它们的状态(关闭或打开的门),从而创建定义可用于移动演员的位置的区域。 FLEM还允许您查看剪切平面,这些平面是隐藏了超出对象或曲面的actor的层。 在《 疯狂》中 ,只有一个表面,但在随后的游戏中,最多可能有三架飞机,演员可以躲在后面。


疯狂的豪宅

MMUCUS是FLEM的助手。 MMUCUS接收了房间的图像以及对象的数据,剪切平面的数据以及您可以在其中行走的区域,并将数据压缩到包含所有这些信息的“房间”文件中。 这一点很重要,因为将压缩数据连接在一起可以使脚本创建者对脚本进行快速更改,然后才需要对其进行编译以使更改生效。 房间文件保持不变,仅在添加对象或更改可移动区域时才更改。

BYLE是我们最初的动画工具,用于绘制和设置演员动画。 BYLE有一个简单的动画引擎,可以对它进行编程,以将动画从一帧循环到另一帧。 此外,他了解“方向”,即可以改变演员的转身方向。 可以以多种方式压缩演员,这使我们能够制作非常简单和快速的动画,例如在触手之日开始时占用很少的空间,而对于多色角色(例如Ben Throttle)仅需要16或32种颜色的压缩方法。 随着时间的流逝,我们需要更复杂的动画,因此开发了一种新的CYST工具,该工具使用相同的数据格式,但是大大简化了大型图像的管理。

在很短的时间内,我们有了一个名为SMEGMA的工具。 其中一个程序员有一个婴儿,他告诉我们婴儿的第一次肠道排泄物就是这种物质。 原来,他弄错了,这种物质叫麦康姆(meconium)。 我们没有发现Smegma是什么,我们只是喜欢这个名字。 但是,一旦他们检查了单词的含义,几天后便改了名字。 您可能会想到,站在餐厅旁边的我们非常不愉快,我们讨论了SCUMM,BYLE,MMUCUS,FLEM等。 [注意 反式:浮渣值之一是种子,胆汁是胆汁,粘液是粘液,FLEM与痰是辅音是痰。]

SCUMM更新


SCUMM被批评没有做出革命性的改变,而是逐渐得到了改进。 图形就是一个明显的例子。 我们首先支持分辨率为320x200的16色图形。 随着图形卡数量的增加,我们切换到256色和640x480的分辨率。 在声音系统中,我们从IBM的内部扬声器开始,然后切换到多通道流立体声。 以前只有几个像素高的字符现在可以增长到几乎整个屏幕高度。 界面也得到了发展:从带有动词命令的初始界面到基于类似于现代Mac风格图标的复杂UI。

重要步骤之一是集成INSANE引擎,这是为Rebel Assault开发的视频系统。 我最初聘请文斯·李(Vince Lee)为Amiga开发一款SCUMM游戏的版本,但他很快在各种平台上证明了自己的编程技能。 在研究SCUMM时,他看到我从事隔离系统主要机器相关部分的工作,以简化向其他计算机的可移植性。 在开发INSANE时,他尝试将这种方法提高到一个新的水平,并增加了流和分支视频的功能,因此我们认为在SCUMM中实现此系统非常重要。 全油门是此过程的第一步。 多亏了Gone Jackals的摇滚声带,当有人在隔壁房间开始游戏时,其他人很快注意到了它。 油门发动机显然是不完善的:当INSANE启动时,必须停止SCUMM系统。 因此,在Throttle和Monkey 3之间我尝试将这两个系统完全集成。 我放弃了原始的视频和光标系统,甚至是字体系统,因此SPUTM实际上运行在INSANE之上。 原来,我们在一个篮子里放了越来越多的鸡蛋,但是好处却是巨大的。 例如,如果我增加了对日语或韩语的支持,那么Rebel Assault引擎上的产品和SCUMM上的产品都可以支持日语和韩语。

令人印象深刻的多平台


由于易于移植,SCUMM游戏可以在十几种系统和大约十二种语言上运行。 我们从Commodore 64开始,然后是一台IBM PC,Atari ST,Amiga,一个八位Nintendo控制台,Fujitsu Towns,[Fujitsu] FM Marty,Sega CD,CDTV,Mac,最近还添加了带iPad的iPhone。 对于25年前开发的系统来说还不错。

通过SCUMM解释器的支持者编写的ScummVM等项目,可以支持新平台。 史密森尼美国艺术博物馆展出的五款游戏之一就是猴岛,这证明了好故事通常比一日游戏的新技术更重要。

并非所有人都知道SCUMM也是许多流行教育游戏(例如Putt-PuttFreddi FishSpy Fox )以及Humongous Entertainment开发的Backyard Baseball / Football / Soccer系列的基础。 如果您向里看,您会发现与他们的LucasArts兄弟相同的团队和几乎相同的代码。

学习SCUMM


那时,所有设计师都是程序员,因此SCUMM尽管在很多方面都是独一无二的,但学习和编码都非常简单。 在ManiacZak期间,引擎没有手册,但是在Monkey之前,雇用了6至8名新脚本创建者。 为他们编写了指南,并进行了每周培训(Scumm大学,“ Scumm大学”)。 对于课程,Ron选择了最新的游戏,从其中删除了除一个房间以外的所有内容,并在其中放置了显示引擎功能的对象。

新的脚本创作者(“ stilettos”)从这个房间开始学习了基础知识。 几天来,他们被教导如何添加新房间,创建活动区域。 一些人具有艺术技巧并创建了自己的动画,其他人则参与编写对话。 通常,到一周结束时,我们已经对“骗子”的技能有了很好的了解,然后,各个项目的负责人选择了他们中哪些人可以从事其项目。

在我看来,第一个“ Scumm大学”或“ Scumm U”始于带动词的标准接口。 界面的分析一直是第一个项目。 因此,通常只有一两个脚本制作者从使系统正常工作开始。 说到训练“经验”,我记得它曾经在牧场[George Lucas Ranch]举行过。 每个人都聚集在主楼三楼。 乔治的办公室在二楼,因此他们必须表现得很好。


猴子岛的秘密

SCUMM的优势


SCUMM最大的优势之一是其高原型制作速度。 设计师提出了有关房间和位置的想法,然后这位主要的背景画家开始制作草图。 准备好足够数量的草图后,将对其进行扫描,快速添加并使用SCUMM进行连接。 通常,在设计过程开始后的几周内,已经有几十个房间,有时它们只是铅笔素描。 我们从另一场比赛中挑选了演员,并开始将他们放在一起。 有时结果是,如果房间不太适合,则需要翻开房间或重新绘制房间,但是您仍然可以制作游戏很大一部分的原型。

脚本创作者现在可以创建活动的初步区域,以便演员可以在房间中四处移动,背景美术人员可以开始将草图转换为最终图形,并且动画师开始进行角色动画制作。 由于最终角色仍处于创作过程中,因此在此开发阶段,可以在Full Throttle的铅笔画室中徘徊,但Monkey Island游戏的Guybrush可以代替主要角色。 这样的替换使设计师能够以极低的人工成本进行试验并进行更改和改进。

使用寿命长


我认为我们谁也不会认为SCUMM游戏会持续很长时间。 我在该系统上工作了大约十二年,并且一直在努力准备长期使用的代码,并在尽可能多的平台上对其进行测试。 在Windows下进行开发时,即使它不是我们的目标平台之一,我也在Windows NT上对其进行了测试。 但是NT需要更严格的代码标准。 因此,如果游戏在NT上运行,则很有可能在将来的Windows操作系统上运行。

我还尝试避免代码中过于频繁的技巧,这些技巧可能会导致将来的计算机崩溃。 例如,您可以编写自动更改的代码,但是使用某些大小和类型的处理器缓存,将导致失败。因此,我改写了一个过程的五到六个稍微不同的变体,每种变体都针对特定情况进行了优化。例如,actor渲染代码有很多版本。如果actor处于全屏模式并且没有隐藏在其他对象后面,那么我将使用一种版本的代码。如果演员超出了屏幕的左边缘或右边缘,则我制作了一个不同的版本。缩放演员是另一个版本。似乎演员的外观有八种变化,并且我有八个版本的代码,每个版本都针对最快地执行任务进行了优化。另外,我最初使用C语言编写代码以使其工作和优化。然后,我用汇编语言重写了代码以实现最大速度。 C代码很方便当我们为其他计算机开发SCUMM时,因为开发人员可以运行此代码并且它可以正常工作,之后就可以对其进行优化。

Scumm 2.0被称为Zak的系统疯狂中使用的1.0版本扎克 - 2.0我们这样做,在 - 3.0,并在印第安纳您琼斯和最后的十字军扩张 -像3.0或3.1。我需要花点时间才能找到确切的版本号。此外,还有许多特殊问题。第一个256色版本的Indiana Jones是一个图形卡制造商的广告。我编写了代码,但当时市场上只有256色卡,因此我们达成了协议,并向游戏提供了视频卡。

口译语言的好处


罗恩与口译员合作了一段时间。他开发了可以添加到Commodore Basic中的新团队,因此他对该系统进行了反向工程。在创建Maniac时,他认为这将是最好的方法,Chip Morningstar具有与语言编译器合作的经验,因此主要是由于他们的合作而开发了该语言。具有讽刺意味的是,奇普当时正在从事人居项目。,其中不支持汇编程序代码6502的已解释代码片段,而是将其更改并移动到了内存中。这些碎片中的任何一个的故障都会导致整个系统的故障。另一方面,SCUMM仅使用大约80条命令,并且这些命令以字节为单位打包,值从0到255。如果命令值大于80,则系统报告错误,因此SCUMM可以非常迅速地清楚地表明它正在执行不正确的命令。 。而人居中心只是“落空”,很难追踪其中的错误。我认为,回想起来,Chip会决定使用一种解释语言。



解释语言的另一个优点是易于在不同的硬件平台之间迁移。解释器是用方便移植的C代码编写的,并且非常容易通过一组命令标记进行解析。另一个巨大的优势是整个游戏都是数据。在为新机器进行开发时,我们知道所有数据都是正确的,因此我们只需要很少的代码就可以工作并查找错误。

与无与伦比的罗恩·吉尔伯特(Ron Gilbert)合作


与罗恩一起工作非常有趣。这里有两个故事...

我们早期的大多数图形都是由传统艺术技术创建的。用Exacto刀校正了铅笔,钢笔,纸和随机错误。罗恩(Ron)拔下一把剑,在他的办公桌上玩了几天。在编写代码时,他过去经常用刀从嘴里伸出来,用刀把牙齿夹住。有一天,我听到一声大声的叹息,转过身,看见血液从罗恩的手滴到地板上。在我帮助绑扎手臂后,我们开始担心破伤风的可能性,所以我打电话给妻子,并要求罗恩打针。罗恩的头发垂在脸上,他忘记了自己的牙齿间有刀刃,用手作了伸直头发的动作,然后将刀刃紧贴在手掌中。在那之后,刀具没有离开美术部门。

***

还有一次,Ron和我晚上在Kerner Boulevard的Industrial Light&Magic旁边的一栋大楼里工作,我们在如何实现代码片段方面存在严重分歧。罗恩和我经常工作到晚上十点到十一点,所以我们很了解清洁工。其中一位甚至后来成为电影编辑。好吧,那天晚上我确信我对问题的解决方法是正确的,罗恩确信他的方法更好,由于某种原因,争执逐渐加剧并在激烈的竞争中结束了。最终,罗恩站起来,似乎在骂我,走了出来,全力以赴。我想我以为我摆脱了它,然后回到编写代码。大约五分钟后,罗恩回过头来,平静地说:“好的,我们已经完成了。现在让我们找出解决这个问题的方法。”几分钟之内,我们已经回到董事会并致力于解决方案,彼此之间进行了更加认真的倾听。结果,我们创建了一个混合解决方案,该方案借鉴了我们两个想法中的最好之处。罗恩是一位真正的协作大师。

***

同样在开发初期,我们的一名员工应该在伯克利的计算机俱乐部作演讲。我们没有任何严格的截止日期,所以我们爬上了一辆汽车,穿过里士满-圣拉斐尔大桥,观看表演。罗恩在岗亭中间看到一辆汽车站在紧急停车站,所以我停了下来。是我们的员工,他轮胎flat了。他没有备用轮胎,我的也不合适,但他不想离开汽车,所以他给了我们两盒软盘,然后要求他介绍一下。

我们没有性能计划,只有CD。因此,当他们介绍我们时,我才刚开始拉出磁盘并将所有可以找到的内容下载到计算机上,而罗恩则发表了即兴演讲。在大学期间,罗恩(Ron)从事广播工作,并在“早晨团队”工作,所以他觉得自己像水里的鱼。我从来不喜欢公开演讲,但是我擅长演示程序演示。演讲获得了很好的好评,我们受到了启发。第二天早上,直到十点,直到我们的员工出现,我们的心情都很好。他很生气,我们不明白为什么。我们遮住了他的屁股,听众很高兴。原来,在大厅里是我们员工的朋友。当被问及是否显示了任何特定零件的演示时,结果没有显示。我们不知道磁盘上有什么,并且可能错过了。员工没有感谢我们,而是以为我们故意破坏了他的演示。

***


罗恩·吉尔伯格(Ron Gilberg),阿里克·威尔蒙德(Arik Wilmunder),诺亚·法斯坦(Noah Falstein,大约1985年(照片来自Mobygames

洛马普里特地震的当晚,罗恩和我不得不去旧金山寻找他的女友。桥梁被堵住了,我们看到码头区四分之一的大火被吞没了,我们需要找到它。我的妻子非常震惊,但我不想让罗恩一个人呆着。我们正要离开家,但电话响了。这是罗恩(Ron)的朋友,她乘公共汽车去了圣拉斐尔(San Rafael),她需要被带走。

***

某个时候,罗恩(Ron)离开卢卡斯艺术公司(LucasArts),因为他的女友不得不离开去中国教书。这时候我在做疯狂大厦对于PC,因此当我遇到Ron编写的我不理解的部分代码时,我将6502汇编程序代码直接转换为C,这样即使我不知道它在做什么,系统也能正常工作。此代码是罗恩回来以后重写,但即使经过多年的代码系统有关隐藏传闻6502

***

离开时,罗恩将他的新马自达RX7借给了另一位同事。不幸的是,当他晚上回到家中时,一只鹿越过马路,汽车驶下马路,滚到铁丝网围栏上。身体被划伤,天窗坠毁。在罗恩到达之前,一位同事修理了整个车身并重新粉刷了汽车。罗恩不知道这起事故,感到惊讶,因为屋顶上的天窗对他来说似乎不一样。然后一位同事告诉他发生了什么,罗恩平静下来,没有生气。

我的朋友SCUMM


25年是很长的时间。我认为没有所有使用SCUMM的游戏的总清单,但LucasArts和Humongous之间可能有30-40种不同的游戏。我知道-一些设计师认为SCUMM限制了他们的功能。其中一位说,使用SCUMM就像尝试用橡皮擦移动大象一样。

但是我认为该设计师最受欢迎的游戏是在SCUMM上编写的。有时,工作的局限导致工作的集中。 SCUMM旨在做一件事,如果您的目标是创建出色的广告,那么SCUMM绝对是最佳选择。

从开始到结束,我都玩过许多SCUMM游戏,尽管在The Dig中似乎我从一开始就错过了一些东西,没有玩。令我感到失望的是,无论是在开发过程中,还是在艺术家和剧本作者进行创作时,我都提前看到了大多数最佳难题的解决方案。我完全错过了一些难题,因为我事先知道了解决方案,因此不需要寻找线索。另外,我负责多种版本和跨平台的游戏,因为我负责国际版本和跨平台开发。

图片

关于我在SCUMM上最喜欢的游戏的问题,我的答案多年来一直保持不变。我一直很喜欢它,我为我们正在开发的最新游戏而感到自豪。在每一款新游戏中,我们都力图突破极限,做我们之前没有做过的事情。我一直想:如果不在艺术或技术上迈出新的步伐,为什么还要工作呢?我喜欢最喜欢的时刻,例如触手节的初始动画Sam和Max的幽默Full Throttle音乐或移动所有三个Maniac角色的能力每个成就都是特殊的,但是所有这些成就,就像土生土长的孩子一样,在心脏中占据着特殊的位置。

Source: https://habr.com/ru/post/zh-CN404395/


All Articles