制作者:麦克·米菲得(Mike Mayfield),鲍勃·李登(Bob Leedom)
发行日期:未发行的原版(1971);《STTR1》(HP, 1973);《SPACWR》 (EDU, 1973);李登的版本(1974);《超级星际迷航》 (《创意计算》, 1975)
编码语言:BASIC
平台:SDS Sigma 7
1963 年 6 月 3 号,《星际迷航》 的终集播出,而它的超级粉丝麦克·米菲得 (Mike Mayfield) 恰好刚刚高二毕业。 最后一集的名字是 ”逆转侵袭“,拍的并不怎么好。《星际迷航》 曾险遭腰斩,只不过因为粉丝持续不断的请愿才得以幸存,但这一回看起来是彻底回天无力了。该剧的第三季整体上毫无创意,奄奄一息。 连《卧底侦缉队》(The Mod Squad)重映版的观众都是它的两倍。下一部全新制作的 《星际迷航》 电视剧都得在十年之后了。在那之前,粉丝们只能靠自己让《星际迷航》保持活力。
和其他懂得技术的星际迷一样,米菲得从微型计算机日渐强大的算力上看到了让剧集精神延续的方法。而像其它早期游戏一样,复杂度各异的《星际迷航》游戏在 60 年代末,70 年代初就已经出现在主机系统上,被复制、分享和各种改进。如今已经很难去拼凑起这么多早期游戏的传承关系,一是它们很少会标明出处,甚至不会署名,二是它们很多都是重名的,都简单的取名为《星际迷航》。在游戏中很难模拟出电视剧中有些剧集展现的精髓(比如 “永恒边缘的城市”一集),但是战舰之间的战斗策略倒是比较容易模仿,比如第一季中广受粉丝喜爱的 “恐怖平衡”这集里面,柯克和罗慕伦指挥官的那场猫捉老鼠的把戏。《星际迷航》还为游戏提供了现成的世界观,这样制作者就不必往本已捉襟见肘的存储空间中塞进全新的设定。这一切对米菲得来说是其实是一个学术问题,真的,因为在当时所有的计算机都是宝贵的资源,它们都被锁在大学的实验室里,一个 16 岁的小屁孩哪有机会得到一台计算机啊。
在电视剧完结后不久,米菲得在他高中旁边的加州大学尔湾分校看到了《SpaceWar!》的宣传 (《SpaceWar!》 是早期另一个极具影响力的太空战斗游戏)。《SpaceWar!》 用当时领先的 CRT 显示器来绘制战舰的矢量图,玩家们在几乎空无一物的屏幕上驾驶着战舰闪转腾挪,一边向其他人发射鱼雷,一边试图抵消中心恒星的引力。《SpaceWar!》 有趣,令人上瘾,未来感强烈:当时大多数的计算机还使用着电传打字机,可以想象,一个能实时更新的屏幕该多么令人兴奋啊,简直堪比神迹。米菲得大受震撼,从此便心心念念地渴望获得一台他自己的计算机。他清楚,用电传打字机连接一台远端的计算机对他而言还是有点可能的,因为全国很多学校都在这么做,但要用一台显示器去连接电脑就难于登天了,所以他一开始也只能白日做梦:
我和我高中的极客朋友们花了很长时间去脑暴在没有一个图形终端的情况下,我们能干些什么事情。我是当时唯一一个有点计算机知识的人(知道的也不多),我们最终想出了很多根本无法实现的点子。其中一个点子我一直记着,就是打印一幅星系地图和星图,然后用它们来帮助玩家射击。
最终,米菲得向加州大学尔湾分校的一个学生借了一个账号(严格来说这种行为是被禁止的)才获得了 Sigma 7 的远程登录权限。他慢慢地跟着教科书,用电传打字机一行一行地自学 BASIC。因为他的账号没有永久存储权限,所以每次结束时,他都要把程序写在打孔纸带上,想修改的时候,需要小心翼翼地重新加载。尽管进展缓慢, 但在 1971 年高三的夏天结束之时,米菲得做出了一部在游戏性和复杂度之间保持了恰好平衡的 《星际迷航》游戏。
米菲得的游戏最初只被简单地称作《星际迷航》,它让玩家担任企业号 的指挥官,奉命在全宇宙追击克林贡人。游戏的地形 8 乘 8 地分成 64 个扇区,每个扇区包含 64 个正方形的星区,整个地图因此有近四千种不同的位置。每个扇区拥有若干恒星,它们是克林贡人的掩体,也是阻挡玩家前进的阻碍。有些扇区存在一个星空基地,在那里企业号可以重新装填光子鱼雷,并恢复用于迁跃和护盾的能量。玩家的目标就是在三十个星际日内找到并打败所有的克林贡人。在地图中,符号 * 代表恒星,<*> 代表玩家的飞船。
[注: 以下所有的脚本都来自于 1974 年米菲得和李登联合发表的那版游戏。米菲得自己的那版大同小异,但排版不太一样,并且语言更简陋。我移除了一些水平空格来减少文字被换行的可能。]
《星际迷航》游戏中的地图是被后来称之为 ASCII 图形的早期案例,它将文字按一定方式排列,在电传打字机上形成简单的图形。许多年以后,roguelike 类型的游戏还将这种艺术发展成了一种颇具辨识度的风格。但本质上,米菲得的游戏设计有更多的突发事件 ,比其他同期的作品更加扣人心弦,同时提供了更大的空间去容纳不同的策略。玩家可以使用八种不同的命令分别控制引擎,护盾,光炮,光子鱼雷,短距/长距探测器,损止系统以及百科电脑。许多命令可以接受额外的参数:转移到护盾的能量值,需要获取的电脑指令或者迁跃的速度以及方向(使用数字标注的罗盘)。因为支持浮点数,所以玩家可以精确地控制飞船在扇区进出:如果足够精确,玩家可以迁跃过大半个宇宙,恰好到达一个发起攻击的完美位置。游戏命令的组合明显比 《登月舱》 或者 《狩猎旺普斯》丰富,为了追击敌人,玩家必须探索地形网格,这让游戏气氛十分紧张,并且带来许多发现的乐趣。敌人的火力或者过度使用迁跃引擎都会损伤飞船,玩家要根据各种不同的损伤去权衡是否要继续追击敌人,还是花点时间去找星空基地来修复战舰。
要在游戏中完成计划通常需要执行很多步骤,这给了玩家一种他指挥的是一艘复杂的星际飞船、而不是一个星号字符的幻觉。如果玩家想找到克林贡人,就得动用他的百科电脑以及两种探测器。长距探测器会将周边的扇区标记上一个三位数的数字,玩家必须学着去解密它们:114 表示这个扇区有一个克林贡人,一个星空基地以及四颗恒星。如果玩家迁跃进了一个有敌人的扇区,那么在将一部分能量用于展开护盾之后,玩家就得开始思考是用光炮还是鱼雷,二者各自有各自的战略得失。光炮可以无视距离攻击多个敌人,但是这些敌人必须处于玩家的视野中,这就意味着玩家必须机动绕过一颗恒星,在看见敌人之时也将自身暴露在敌人的反击火力下。而要发射鱼雷,玩家必须计算出一条合适的弹道,或者学会使用百科电脑来帮忙计算轨道,并手动输入百科电脑提供的数值。玩米菲得的 《星际迷航》 要求玩家全神贯注。它展露的严肃性和对细节的追求是此前很多游戏无法做到的。
游戏的代码使用了各种奇淫巧技来克服早期 BASIC 语言的严重限制。光存储游戏中的 4096 个网格位置就已经超出了当时绝大多数机器的能力,所以与其用一个二维数组来一次性存储每个网格对应的内容,不如将这部分信息“压缩”成长距探测器会使用的那种三位数编码。只有在玩家进入一个扇区后,游戏才会根据编码提供的信息,将一定数量的敌人和恒星随机分布在地图中。因为玩家几乎没有理由重复进出同一个扇区,所以这种取巧的方式才能成功。即使玩家确实需要重新进入扇区,那也是因为他需要逃离敌人,那这时候,扇区里的敌人处在不同的位置也情有可原。大多数玩家基本上都不会注意到恒星其实也跟着变了位置。
同时,游戏的代码也暴露了它是一个边学边做的产物,比如像是抱着试试的心态,用了一两次就不再使用的 HP2000C BASIC 语言特性。整个程序仅仅定义了一个函数(在当时的 BASIC 中还相对是一个新概念),但也就只用了两次而已,绝大部分都还是依赖传统的 GOSUB/RETURN 来重复使用代码。游戏里,作者用一个三位数的编码来代表某个扇区里有何物,并将所有扇区的编码都存在了一个 8 x 8 的数组里。在具体描述某个扇区里的东西的分布情况时,作者本可以再次使用数组来记录,但他却选择了使用字符串这种更加刁钻的方法,表明很可能这种方法是作者早期不懂数组时实现的。在当时,每个字符串最长为 72 个字符,而每个扇面上有 64 个星区,每个星区长度为 3,所以至少需要三个字符串才能完全表示这 192 个空间,作者将这三个字符串变量命名为 Q$, R$, S$ 。如果要查询或者更新地图上的某一个地方,那么得首先根据坐标信息找到这个地方是记录在哪个变量上的。下面是算法的部分代码,根据 Z1 和 Z2 两个坐标信息,从 Q$, R$, S$ 中找到具体的内容信息,并存在变量 A$ 中:
5520 S8=Z1*24+Z2*3-26
5530 IF S8>72 THEN 5560
5540 Q$[S8,S8+2]=A$
5550 GOTO 5600
5560 IF S8>144 THEN 5590
5570 R$[S8-72,S8-70]=A$
5580 GOTO 5600
5590 S$[S8-144,S8-142]=A$
5600 RETURN
上述的代码代表了在上世纪70年代早期使用 BASIC 语言来写复杂程序时会遇到的各种挑战。变量名称只能由单个字母加额外的数字组成,没有全局变量和本地变量的区别,也不能为一段代码块赋予一个有意义的名称。尽管 BASIC 相比其他早期的语言已是一大进步,但搞明白一段不熟悉的代码到底是干嘛的依旧是个挑战。这也恰是早期极客的乐趣之一,他们就喜欢拿着一堆有趣的程序,坐在那儿逐行分析它到底是怎么运作的。
随着在 1970 年代早期被多次转手,米菲得的 《星际迷航》 升级使用了最新版本的 BASIC 语言,有时各种特性也被加强。最著名的改版来自于鲍勃·李登(Bob Leedom),他是职业程序员,就职于威斯汀屋(Westinghouse),负责研发通用数据超新星(Data General Nova)系列微机。李登在 1974 年断断续续地对《星际迷航》行进改进,保留了米菲得的核心系统和游戏流程,同时增加了一些让游戏更加完善、更具动感的改动。他的版本将原版中的指令全部换成了三个字母的代号(比如 LRS 代表长距探测,NAV 代表启动引擎),令人想起阿波罗登月计划中,宇航员使用过的机载计算机上的那些按钮。李登添加了更有趣的指示以及消息:当鱼雷的路线穿过恒星时,米菲得的版本会提示——“傻瓜,你不能摧毁一颗恒星”,李登的版本则替换成了更成熟和更有沉浸感的语言—— “星区 7 ,3,鱼雷被恒星消解”。原版中,如果一个星空基地被摧毁,那么代表它的符号只会无声无息地从地图上消失。而在李登的版本中,星际舰队则会考虑对玩家展开军事审判。更令人印象深刻的还有许多被重写的状态报告和错误消息,仿佛他们真的就是剧中舰桥的船员在传递消息一般。当玩家试图迁跃出地图的边缘时,李登的版本则会提示:
李登给游戏的扇区设定了更易联想的名字,比如参宿四;给百科电脑新增了实用的函数;让克林贡人在被攻击后随机移动到新的方位(而非像原著一样坐以待毙,恭候玩家的鱼雷)。这些改编不仅成功保留了原作的精髓,同时也让游戏更加好玩了。
李登改进的程序发行于 David H.Ahl 的 《创意计算》 杂志上,为了和其他版本区分开,它用名《超级星际迷航》(Super Star Trek)。再后来,它被收录于发行超百万册的 《BASIC电脑游戏》 一书中,这让它成了那个年代最为著名的 《星际迷航》 游戏。接着涌现出了无数的衍生和改进版本,但都几乎都没有提到原作者是谁。一个叫做 WAR 的双人版本演变成了多人游戏的 DECWAR,再然后变成了 CompuServe 平台上流行的 MegaWars 系列策略游戏。在苹果二代电脑上出现了一个叫做 《苹果迷航》(Apple Trek)的版本。Radio Shack 为 Trandy 发型了一版 "Space Trek"。1979 年,《星际奇兵》(Star Raider)登上了雅达利平台,这个版本更先进,能以 3D 形式在动态的星域中进行战斗。《星际奇兵》作为雅达利平台早期的现象级作品,直接影响了以后出现的 《Elite》 和 《Wing Commander》,后两者则直接塑造了那个年代的太空战斗模拟游戏。尽管在当时派拉蒙也后知后觉地发布了几部官方授权的《星际迷航》游戏,但它们和其他游戏相比几乎没激起任何水花。
《超级星际迷航》 不是那个年代最有文学性或者最复杂的《星际迷航》游戏。1973 年 Willian K. Char 推出的一版迷航里有大量舰桥船员的对话,数十种命令,玩家可以紧急抛弃迁跃核心,或者尝试类似 Kirk 在原剧“Corbomite Maneuer”一集中所使用的策略。除此之外,当然还有非常多无人问津的《星际迷航》游戏。米菲得和李登的程序能成为典范,就在于它们有趣且不过于复杂,代码足够精简,可以被打印在杂志或者书本上。在那个年代,人们认为书本或者杂志才是获取程序的最好途径。作为 《BASIC电脑游戏》 上最长的一个程序(除去指令大概有500行代码),《星际迷航》 需要用比其他程序更小一号的字体,更紧密的间距来打印。还好它能挤得下,假如它的代码再多一点点,那恐怕就很难被打印出来,更别说被大众口耳相传了。
一直以来,技术的不足总会限制文字游戏的上限。然而对于上世纪的作者而言,页数和字体大小也会成为游戏开发的限制,《超级星际迷航》就是一个例子,但它也是最后一个。因为从那之后,游戏的发展将远超任何图书印刷商的想象。
可以在这里试试《超级星际迷航》,和原来的版本音效和色彩都不太一样,但已经是最接近的版本了。要是有BASIC电脑的话,源码在这里。在Internet Archive上可以继续阅读由Maury Markowitz撰写的本游戏发展历史。如果你感兴趣的话,去年我还研究过这份源码。 本文作者:Aaron A. Reed,撰稿人,推特@aaronareed,已取得翻译转载授权,原文链接
评论区
共 2 条评论热门最新