如何在karma里载入html文件进行测试

因为要测试代码在iframe里的运行情况,必须载入一个html文件,然后判断该文件里的js执行情况,在karma里无法直接载入一个html文件,同时由于路径的变更,测试同样跑不过,下面是详述原因和解决办法

需要测试的场景

当前工程的目录结构如下

.
├── Gruntfile.js
├── karma.conf.js
├── package.json
├── src
│   ├── source.js
├── test
│   ├── iframes
│   │   ├── hello.html
│   ├── lib
│   ├── mainSpec.js
│   └── runner.html

在mainSpec.js里写入一个iframe到当前document下,路径为iframes/hello.html, hello.html里会引入souce.js,然后进行一些操作,mainSpec.js 再对写入iframe进行检测,判断执行结果

问题

有两个问题需要解决

  • karma会把html文件当作js载入,也就是它会使用一个script标签把文件载入
  • karma对于html文件使用html-js预处理,页面中输出的是一个hello.html.js

在karma.conf.js里配置一下files对象解决问题1, served默认是true,也可以不加的,详细可以官方文档

   files: [
                'test/lib/**/*.js',
                'src/source.js',
                'test/mainSpec.js',
                { pattern: 'test/iframes/*', included: false, served: true }
   ]

在karma.conf.js里覆盖掉默认的html-js预处理

    preprocessors: {
        'test/iframes/*': ['']
    }

路径的问题

看样子是正常了,运行一下karma run,还是报错,我们写入的路径是./iframes/hello.html, 这是由于karma默认的执行路径是http://localhost:9876/debug.html,写入的路径会变成http://localhost:9876/iframes/hello.html,而karma会把当前目录放在/base/下(这里介绍过),很明显会404。

可以很直接的把写入的路径变成/base/test/iframes/hello.html,但是这样,这个测试就严重依赖karma了,你可能注意到test目录下还有一个runner.html,这个文件我们可以手工运行,如果写成了前面的这个路径,手工运行就完全不行。为了保证runner.html的正常工作,我们必须使用相对路径。

改造一下mainSpec.js,区别对待karma环境和普通环境中载入的iframe的路径

function getPath(path) {
       if (window.__karma__) {
           return path.replace(/\.\//, '/base/test/')
       } else {
           return path
       }
}

//写入文件的时候
...
iframe.src = getPath('./iframes/hello.html')
...

这样之后我们的代码就可以正常的在karma和普通环境中跑测试了。


文章来源: 如何在karma里载入html文件进行测试
文章的标签: 测试 karma

如果对于这个文章有什么看法,欢迎到来往与我交流↓↓↓↓↓

install and configure nginx with node on centos

I wanna deploy several apps on my linode vps with nodejs, even ruby/php environment. Now I think nginx should handle all the static assets while nodejs should handle other dynamic requests. Here is what I have done: ### First, install nginx: cd /tmp wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm yum install nginx ### Second, start nginx: chkconfig nginx on service nginx start service nginx stop service nginx restart service nginx status service nginx reload ## Second, configure nginx: vi /etc/nginx/nginx.conf upstream app_yourdomain { server 127.0.0.1:3000; } worker_processes 2; gzip on; http { #include mime.types; default_type application/octet-stream; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; } vi /etc/nginx/conf.d/default.conf # the IP(s) on which your node server is running. I chose port 3000. server { listen 80; server_name localhost; # pass the request to the node.js server with the correct headers and much more can be added, see nginx config options location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://localhost/; proxy_redirect off; } location ~* ^.+\.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|pdf|txt|tar|wav|bmp|rtf|js|flv|swf|html|htm)$ { root public; } } Done!

repair and boot mongodb on centos

When I somehow login and logout my linode vps where I start the service of mongodb for some times, then I got these errors:

# service mongod start
Starting mongod: Wed Oct 30 01:28:42.557
Wed Oct 30 01:28:42.558 warning: 32-bit servers don't have journaling enabled by default. Please use --journal if you want durability.
Wed Oct 30 01:28:42.558
about to fork child process, waiting until server is ready for connections.
forked process: 6873
all output going to: /var/log/mongo/mongod.log
ERROR: child process failed, exited with error number 100
                                                       [FAILED]

So, after googling, I find the reason:

Unclean shutdown detected.
Please visit http://dochub.mongodb.org/core/repair for recovery instructions.

How to resolve it?

First, kill the process if it exists

ps -ef | grep mongo*
ps -ef | grep mongod
kill -9 pid

Second, remove the lock file for mongodb

rm -rf /var/lib/mongo/mongod.lock

Third, boot it with repair mode

mongod -f /etc/mongod.conf --repair

Forth, boot again without repair mode

mongod -f /etc/mongod.conf

Now we can check if the mongodb process is running:

ps -ef | grep mongo*
ps -ef | grep mongod

And try it: mongo

Done!

attachStyle 代码评审

小组内首次代码评审,解释 cc/templets/meta 模块中,.attachStyle() 方法的变迁,评审 黄龙的最新版代码。

heredoc

var css = heredoc(function(){/*
    .frames {
        width: 200px;
        height: 80px;
    }
*/})

用法如上,好处是声明长字符串时非常方便,不需要考虑引号的转义和字符串拼接。

原理

在 JavaScript 里我们可以将 function 体变成字符串:

function foo(name) {
    console.log(name)
    /* comments remains */
}

console.log(foo + '')

// 将输出:
// "function foo(name) {
//     console.log(name)
//     /* comments remains */
// }"

所以对于文首的 function,我们可以将其转为字符串,并使用字符串替换去掉多余的 function(){/**/}

掌故

heredoc 名字来源于 Bash 中的长文本声明方式,叫做 here document

COMMAND <<InputComesFromHERE
...
...
...
InputComesFromHERE

strip

这个时候拿到的字符串,将是:

    .frames {
        width: 200px;
        height: 80px;
    }

行首的空格很讨厌,但是如何拿捏到底有多少个空格是不必要的会很微妙。在 Ruby 世界里,Rails 中的 ActiveSupport 中包含了一个 .strip_heredoc 方法,使用这个方法定义的字符串:

if options[:usage]
  puts <<-USAGE.strip_heredoc
    This command does such and such.

    Supported options are:
      -h         This message
      ...
  USAGE
end

输出的字符串将是:

This command does such and such.

Supported options are:
  -h         This message
  ...

逻辑是,分析每一行行首的空格长度,以最短的为准,将每行行首的空格替换掉。

attachStyle

在创意中经常需要添加一段 CSS 到宿主页面,添加的 CSS 得减少对宿主页面的影响,并且最理想的, 这些 CSS 的选择器应该有些特殊,以保证创意不被 iframe 保护时,也能不受宿主页面的影响。

所以,现在的创意中心里使用的 attachStyle 处理方式是,要求创意中元素的选择器都加上 uid 前缀,而样式声明的时候要求都用 .class 选择器,然后再 attachStyle 方法中统一替换, 为这些选择器加上 uid 前缀,变成 .{uid}-class

scoped

<div class="democontain">
    <style scoped>
        div { border: 1px solid green; margin-bottom: 20px; min-height: 40px; }
        .democontain { background: #f8f8f8; }
    </style>
    <div></div>
    <div style="border-color: pink;">
        <style scoped>
            div { background: lightblue; border: 1px solid blue; }
        </style>
        <div></div>
    </div>
    <div></div>
</div>

<style scoped> 中的样式将仅在父节点内生效,不过,它并不能保证区块不受外部样式干扰。

polyfill

讨论了 scoped 属性的 polyfill 思路,可以人肉用 JavaScript 取到页面中的 style[scoped] 节点和它们的位置信息,然后将它们移除,解析其中的样式,把样式规则再人肉挨个应用一下。

已经有人写啦

站内接入

这部分的问题则和公司技术模式关系比较大,这里只记录比较问题,解决方案,得在接下来的实践中摸索。

迭代成本

区块发布非常麻烦,如果接入单个区块,需要:

  • 到创意中心获取创意代码
  • 更新 TMS 区块
  • 等待宿主页面更新

如果接入多个,则还需要:

  • 选择需要发的创意,合并
  • 获取代码
  • 更新 TMS 区块
  • 等待宿主页面更新

整个过程非常机械,并且有多次等待,都将中断工作状态。因为这些麻烦处,导致迭代过程让人身心俱疲。

代码混乱

影响迭代过程的另一个主要原因,就是接入代码已经变得膨胀、混乱,业务逻辑不清楚,业务代码陈旧, 创意接口封装不佳,都是问题。

如何改进?

Setting up Mac OS X


9 月份的时候把电脑升级到了 Mavericks 的测试版,为了体验一下 iBooks。结果一路稳定直到 DP8 版本,Google Chrome 看 Flash 视频开始频繁五国,我就把系统全盘格式化重装了。配置新系统是个麻烦的事情,我自己也是想起一点配置一点,所以在基本做的差不多了之后就准备写这么一篇东西,给我自己以后参考。如果你有类似的问题,也希望能够在这里找到一些信息。

在写这篇东西的时候,刚好 Mavericks 在上一周发布了正式版。所以,接下去讲到的内容,有一部分是我在 Mountain Lion 里面操作的,还有一些是升级到 Mavericks 之后配置的,不过两者应该区别不大,都是适用的。

内容有点长,主要包括:

  • 聊天记录的手动备份和恢复

  • 网络恢复

  • 一些我习惯的系统偏好

  • SSD 和 HDD 的相关配置

  • 我的常用软件

  • Apache、PHP 和 MySQL 的配置

  • Ruby 的安装

  • 各种游戏模拟器的相关下载和配置

 

Backup

如果你一直在用 Time Machine 备份系统的话,其实不需要像我这么操作的,这里我说的 Backup 是因为我因为没有额外的大硬盘,就从来没用过 Time Machine 做备份,所以我只是手动备份点聊天记录。

我的机器是 2011 年秋的 Macbook Pro MC700。我自己把光驱拆了,把原来的硬盘放到了光驱位,在硬盘位换了一个 ADATA SX900 256GB 的 SSD。所以我把 SSD 全盘格式化,并把一些资料直接复制到 HDD 上做备份。

我原来的配置是 home 目录下有一部分内容直接存放在 HDD 上的,所以我只是把我的 SSD 上的 Sites 文件夹整个复制过去,桌面上的东西也留一份,剩下的就只有旺旺和 QQ 的聊天记录和自定义表情了。

QQ 的表情和聊天记录都在这个地方:

~/Library/Containers/com.tencent.qq/Data/Library/Application Support/QQ

类似的,旺旺的表情和聊天记录都在这个地方:

~/Library/Containers/com.taobao.aliwangwang/Data/Library/Application Support/AliWangwang

直接把整个文件夹拷贝出来,在安装完新系统和 QQ 之后再粘贴回去就可以了。

 

Recovery

IMPORTANT: 如果你有外接显示器,在恢复或升级系统前,请先移除,否则很可能会出现安装对话框的位置算错位了,导致看不到安装进度条以及部分按钮。

OK,我需要备份的东西比较少,因为我的照片和音乐之类的都放在 HDD 上,所以格式化 SSD 是不影响的。因为我的系统当时是 10.9 版本,所以恢复分区也是 10.9 的,但是当时这一版系统还没有正式发布,所以我首先选择使用 U 盘恢复 Mountain Lion。

结果我就悲剧在这里了。我的启动 U 盘不知道发生了什么问题,在我进入到安装界面格式化完磁盘,准备开始安装的时候发现校验通不过。


现在磁盘已经格式化了,10.9 的恢复分区也没有了,好在 Apple 还提供联网恢复功能。开机的时候按住 Command + R 键,这样会联网下载这个机器买过来的时候所附带的那个版本的系统,对我的机子来说就是 Lion。

因为中国大陆的特殊网络环境,如果需要,请提前到 V2EX 查看适合你的 DNS,给路由器配上,否则整个下载过程在持续一个星期之后都可能不会结束。

那如何判断是否需要配 DNS 呢?

在刚开始恢复的时候会看到这个界面:


稍等一会进度条下面就会显示剩余时间。如果剩余时间少于 5 分钟,那就还算正常(这里不是在下载系统,而是下载让你能够进入安装界面的东西)。但是我在安装的时候剩余时间是 100 多分钟,于是强制关机,配置路由器,再重新来一次。

在上面这个界面完成之后,会看到安装界面,继续之后就会开始下载并安装操作系统。这个过程是全自动的,把机子开着让它自己安装就行了。我直接开了一个通宵,早上起床的时候就看到 Lion 的界面了。

啥都不做,继续到 App Store 里面更新到 Mountain Lion。当然如果在你看到这篇文章之后做了这个事情,就直接更新到 Mavericks 吧。

 

System Preferences

升级完成之后先给系统偏好做一些简单的配置。这里只是我的习惯。下面的操作都在 System Preferences 里面进行。

Keyboard

在 Keyboard 标签下把 Key Repeat 和 Delay Until Repeat 都拖到最右边,即 Fast。把 Use all F1, F2, etc. keys as standard function keys 勾上。


如果是中文版的系统,默认的 Spotlight 快捷键应该是 Control + Space,这没有问题。但是我的是英文版的,这个快捷键默认是 Command + Space,所以切换到 Shortcuts 标签,在左边找到 Spotlight,把快捷键修改一下。因为一旦有中文输入法,Command + Space 就是切换输入法的热键了。


另外,Photoshop 里面临时的放大和缩小快捷键也是 Command + Space 和 Command + Option + Space。如果你也用 PS 并且习惯这个快捷键,可能还需要再调整一下。

我还会把 Dock 的显示和关闭改成 Command + Control + D,Launchpad 改为 Option + F11。

顺便提一下,简单的键盘操作:

Control + F2:把焦点定位到全局菜单

Control + F3:把焦点定位到 Dock

Control + F4:和 Windows 下面按一次 Alt + Tab 比较像,把焦点定位到下一个窗口。

Control + F8:把焦点定位到全局状态栏

(fn) + Shift + Option + F11/F12:更加精确地调节系统声音

所以当蓝牙鼠标没电的时候,除了按电源键,还可以通过 Control + F2 来关机。

Mouse

主要就根据习惯调一下 Tracking speed。我用的是罗技的 V470,所以还要安装一下官网的驱动,不然水平滚动会让人很郁闷的。

Trackpad

开启除了 Swipe between pages 之外的所有功能,大爱 natural scroll。

Mission Control

不喜欢 Dashboard as a Space,所以我关掉了。触发角根据个人习惯配吧。还有 Show Desktop 和 Show Dashboard 我分别给了 Control + F11 和 Option + F12,默认的是 F11 和 F12,我喜欢把 F 数字键都留给应用程序。Mission Control 和 Application windows 的快捷键我禁用了,不知道原来的 Control + Up/Down Arrow 是不是默认的,主要是这个快捷键和 Sublime Text 2 里面的快速创建多光标(Control + Shift + Up/Down Arrow)冲突了。


 

SSD and HDD

Trim

我买的 ADATA SSD 不是 Apple 用的牌子,所以默认会显示 No Support for Trim。到这里下载一个最新的 Trim Enabler,免费版就可以了,只要把 Trim 打开。

http://www.groths.org/software/trimenabler/

收费版就是提供额外的一点小功能,自己在终端都能做的。开启后重启系统。

Hibernation

我不知道有多少人会用到休眠,至少我不会把机器放那睡眠一整个星期直到电池耗尽进入休眠。所以我就把休眠禁用了。在终端使用下面的命令:

sudo pmset -a hibernatemode 0

默认休眠是打开的,在每次睡眠的时候会写入硬盘一定的数据量,防止电池耗尽导致数据丢失,所以有一个和你内存一样尺寸的 sleepimage 文件。既然我把休眠禁用了,那这 8GB 的文件也就不需要了,直接移除:

sudo rm /var/vm/sleepimage

noatime

Unix 默认会记录最后一次访问某个文件的时间,即使是打开一个文本文件,什么都不做,再关掉,那么最后访问时间还是会更新的。感觉这功能对我来说没有任何用处,所以我把它关了。新建一个名为 com.nullvision.noatime.plist 的文件,写入以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" 
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.nullvision.noatime</string>
        <key>ProgramArguments</key>
        <array>
            <string>mount</string>
            <string>-vuwo</string>
            <string>noatime</string>
            <string>/</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

保存,并存放到 /Library/LaunchDaemons 目录下。

接着,在终端执行:

sudo chown root:wheel /Library/LaunchDaemons/com.nullvision.noatime.plist

重启后生效。

上面那个文件名是你可以自行更改的,因为这一条最初是来自于 blogs.nullvision.com,所以才创建的这么个名称。

Move directories to HDD

毕竟 SSD 空间有限,所以在双硬盘的情况下,我用 symbolic link 的方式把一部分 home 目录下的内容移到了 HDD 上。先说一下我移走了哪些内容。

~/Downloads/
~/Movies/
~/Music/iTunes/iTunes Media
~/Pictures

这里也是根据个人使用需要来做的。如果你经常处理视频,那么就不应该把整个 Movies 挪过去。只要挪走你认为不常用的,并且会占用大量空间的目录就可以了。

转移的方式是这样的,以 Downloads 为例。

  1. 在 HDD 上的某个位置,新建上述目录结构,类似这样。


  2. 把原 home 目录下对应的目录下的文件都移到 HDD 的相应位置,例如把 ~/Downloads 里面已有的下载内容全选(Command + A),拷贝(Command + C),再到 HDD 的 Downloads 目录下按 Command + Option + V 移动过来。

  3. 把 ~/Downloads 目录删掉

  4. 到终端里新建一个 symbolic link,以上述 Downloads 目录为例:

cd ~
ln -s /Volumes/DATA/yehao/Downloads/ Downloads

这里需要根据你的宗卷名称和目录结构,对上面的路径做适当的调整。另外像 iTunes 这种的话最好在没有运行之前就做完上面的迁移。

 

Softwares

下面主要说几个我自己在开发过程中常用的软件,和一点简单的配置。

XCode

反正是免费的,即使你不做 iOS 开发或者不需要用 iOS Simulator,也可以装一下。在 XCode 5 的偏好里是找不到 Command Line Tools 的,所以在装完 XCode 之后,还需要自己去 Apple 的 Developer 页面下载命令行工具。

iTerm2

可以理解为 Terminal 的加强版。就说一个最简单的增强功能,在 iTerm2 里面按住 Command 键点击目录地址,会直接在 Finder 里面打开。其他功能可以查看一下文档。

之前有同事问过我的终端配色,以默认的 bash shell 为例,在刚装完 iTerm2 的时候,默认是这样子黑白的显示。


这里有一个 profile 文件,注意我改了 PS1 喔,其他都是颜色相关的。

if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then export TERM=gnome-256color
elif infocmp xterm-256color >/dev/null 2>&1; then export TERM=xterm-256color
fi
                                                                                 
if tput setaf 1 &> /dev/null; then
    tput sgr0
    if [[ $(tput colors) -ge 256 ]] 2>/dev/null; then
      MAGENTA=$(tput setaf 9)
      ORANGE=$(tput setaf 172)
      GREEN=$(tput setaf 190)
      PURPLE=$(tput setaf 141)
      WHITE=$(tput setaf 256)
    else
      MAGENTA=$(tput setaf 5)
      ORANGE=$(tput setaf 4)
      GREEN=$(tput setaf 2)
      PURPLE=$(tput setaf 1)
      WHITE=$(tput setaf 7)
    fi
    BOLD=$(tput bold)
    RESET=$(tput sgr0)
else
    MAGENTA="\033[1;31m"
    ORANGE="\033[1;33m"
    GREEN="\033[1;32m"
    PURPLE="\033[1;35m"
    WHITE="\033[1;37m"
    BOLD=""
    RESET="\033[m"
fi
                                                                                 
parse_git_dirty () {
    [[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*"
}
parse_git_branch() {
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1$(parse_git_dirty)/"
}
                                                                                 
PS1="\[${BOLD}${MAGENTA}\]\u \[$WHITE\]at \[$ORANGE\]\h \[$WHITE\]in \[$GREEN\]\w\[$WHITE\]\$([[ -n \$(git branch 2> /dev/null ]] && echo \" on \")\[$PURPLE\]\$(parse_git_branch)\[$WHITE\]\n\$ \[$RESET\]"
                                                                                 
# Always use color output for `ls`
if [[ "$OSTYPE" =~ ^darwin ]]; then
  alias ls="command ls -G"
else
        alias ls="command ls --color"
        export LS_COLORS='no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:'
fi

把这个内容拷贝到 ~/.bash_profile 里边,重启一下终端应该就有颜色输出了。可能需要再到偏好里调一下对比度。


Mou

写 Markdown 用的。

DiffMerge

用 SVN 的时候我喜欢配合这个免费的工具来做 diff。

Homebrew

正如官网说的,The missing package manager for OS X。

后面说到配置 Ruby 环境的时候也是用 Homebrew 的。

这里装完 Homebrew 之后可以接着用它来装一下 git,Node.js,Redis,MongoDB 之类的。记得每次装完一个 package 之后关注一下配置说明,不然像我一样 Redis 装完之后忘了根据提示配置了,结果导致 Redis 没自动启动,在开发过程中卡在某个奇葩的 bug 上。

Better Touch Tool

有触控板的话可以关注一下这个工具,提供比系统偏好设置里面多的多的配置。

Sublime Text 2

这个编辑器最吸引我的就是 Command + D 和 Command + Control + G。多光标真是太方便了。装完之后得去安装一下 Package Control

至于常用的 Package 那都是因人而异,我的话常用 Sass,Emmet,AdvancedNewFile,SideBarEnhancements,SublimeLinter。

要在终端用 subl 命令启动 Sublime Text,可以这么做:

sudo ln -s "/Applications/Sublime Text 2.app/Contents/SharedSupport/bin/subl" /bin/subl

另外我习惯使用亮色系的高亮和主题,Soda 就是个很不错的选择。

 

Apache,PHP and MySQL

Apache

在 Mountain Lion 之前的版本里边,能够在系统偏好的 Sharing 里面找到 Web Sharing,打开即可。但是 Mountain Lion 以后的系统里把这个选项去掉了,所以得手动开启。

在 Terminal 里面启动 apache:

sudo apachectl start

执行之后应该就能通过浏览器访问 localhost 了。

如果此时访问 localhost 的速度特别慢,可以试试把 ipv6 禁用。

在终端里输入:

networksetup -listallnetworkservices

会看到系统里的所有网络服务,结果类似这样:

An asterisk (*) denotes that a network service is disabled.
Bluetooth DUN
Ethernet
FireWire
Wi-Fi
Bluetooth PAN

我们要找的服务是 Ethernet。

下面在终端里面禁用 ipv6:

sudo networksetup setv6off Ethernet

成功之后(终端不会报错也不会给出任何反馈),重启一下apache:

sudo apachectl stop
sudo apachectl start

默认的全局站点路径是

/Library/WebServer/Documents

Personal Sites

当然这是全局的,一般本地开发的时候,还会配置一个个人站点目录,也就是之前版本的 OS X 在打开了 Web Sharing 之后,在个人 home 目录下新增的那个 Sites 目录。但是在 ML 里面,这一步得自己来做。

首先到个人 home 目录下新建一个目录,按照 Lion 的惯例,我喜欢把它叫做 Sites。确认之后你会发现,如果这个文件夹名字是 Sites 的话,默认就会有一个特殊的 icon。


在 Sites 目录下,创建一个 index.html,内容随便自己填吧。

接着到终端里,切换到 /etc/apache2/users 目录下,创建一个以你的用户名(不是全名)为文件名的 conf 文件。这里我的用户名是 haoye,全名是 Hao Ye。所以我需要创建的文件为 haoye.conf。

用你喜欢的编辑器打开这个文件,写入下面的内容:

<Directory "/Users/haoye/Sites">
Options Indexes MultiViews
AllowOverride All
Order allow,deny
Allow from all
</Directory>

记得把上面 haoye 这个名字换成你的用户名。

保存之后,重启一下 apache。

sudo apachectl restart

现在就能通过 http://localhost/~haoye/ 来访问个人站点了,默认就是展现 ~/Sites/index.html 这个文件里的内容。

PHP

首先用一个编辑器打开 /etc/apache2/httpd.conf 文件,需要 sudo。搜索 php,应该会看到类似这样一行

#LoadModule php5_module libexec/apache2/libphp5.so

把前面的注释 # 号删去后保存。

下面要进入到 /private/etc 目录下,创建一个 php.ini 文件。

默认应该有一个 php.ini.default 文件的,所以直接复制一份,把文件名改成 php.ini 就可以了。

为了开发的时候方便 debug,还得把错误信息 log 出来,所以打开 php.ini,搜索display_errors,应该在第二次匹配的时候就会看到

display_errors = Off

把 Off 改成 On 之后保存,再重启 apache。

MySQL

直接去这里下载安装就可以了。

http://dev.mysql.com/downloads/mysql/

 

Ruby

这一次重装系统,我选了 rbenv 来代替之前使用的 rvm 来安装和管理 Ruby。在进行下面的操作前,需要确认 XCode 以及相应的 Command Line Tools 和 Git 都已经安装好。

首先使用 Homebrew 安装 rbenv 和 ruby-build。

brew update
brew install rbenv ruby-build

完成之后,把下面这一句加到 profile 里面,这里我还是用的 ~/.bash_profile。

eval "$(rbenv init -)"

接着,可以通过下面这个命令查看所有可安装的 Ruby 版本:

rbenv install --list

然后挑选一个版本就能安装了,例如:

rbenv install 2.0.0-p247

完成之后,运行:

rbenv rehash

在安装了好几个 Ruby 版本之后,可以通过 rbenv global 命令来切换版本,例如:

rbenv global 2.0.0-p247

某个项目如果需要特定版本的 Ruby,可以进入到这个项目目录,然后执行 rbenv local VERSION 命令,这样会在当前项目目录下生成一个 .ruby-version 文件。

另外,可以通过 rbenv version 命令来查看当前运行的 Ruby 版本。

下面,创建一个 ~/.gemrc 文件,往里边写入如下内容:

install: --no-ri --no-rdoc
update:  --no-ri --no-rdoc

这样,在 gem install 的时候就不会安装文档到本地了。我几乎一直都是看在线文档的。

最后,安装 bundler。

gem install bundler
rbenv rehash

注意如果有多个版本的 Ruby,需要分别对每个版本运行一次 gem install bundler。

 

Emulators

我比较复古,还折腾 FC 模拟器,Gens 模拟器之类的东西。不要问我为什么这个年代了我还玩这种东西,我最近也刚预定了 PS4。

先说简单的,FC,SFC 和 SEGA Gens 之类的,直接到下面这个地址,下载安装就能玩了。

http://www.emulator-zone.com/doc.php/mac/

一般你看到 date 一栏里是 2012 年的话,那个模拟器就非常有希望在 Mavericks 上面运行了。

下面主要讲 2 个稍微复杂一点的模拟器配置。

MAME (Arcade)

Mac 下面有一个 MAME OS X 的 app,图形界面,能够玩一部分 MAME 游戏,可以在这个地址下载到。

http://mameosx.sourceforge.net/

但是这个东西很久没有更新过了,最后的更新日期是 2009 年 9 月,而且很多游戏在这个版本上也不能跑。不过你也可以先下载过来试试,就是最普通的 Mac 软件安装方式,直接拖到 Applications 文件夹就可以了。首次启动后到 Preferences 里面配置一下 Rom 目录。

下面我要说的 MAME 版本叫做 SDLMAME,这个东西是免费开源的,具体可以参见这个地址(包括下载)。

http://sdlmame.lngn.net/

我在写这篇文章的时候,可以下载到的最新版本是 SDLMAME v0.150 64-bit,最后更新日期是 2013-09-17,可见非常新。

在上面的 MAME 站点,注意一句话:

Please make sure you have installed the SDL runtime library first!

所以还需要点击这个 SDL runtime library 的链接,下载 Mac OS X 版本的 Runtime Library。

至此,我们下载到下面这两个文件。


首先打开后面这个 dmg 文件,里边有一个 SDL.framework 文件,把这个文件拷贝到 /Library/Frameworks 目录下。

下面解压缩前面这个 zip 文件,并在终端里进入到解压后的目录中。


执行:

./mame64

如果你看到下面这个界面,说明前面的操作都成功了。


接下去就只要配一下游戏路径就可以了。

如果你在 Windows 上玩过 MAME 的话,就知道默认的 rom 文件夹是要和这个 mame64 程序放在同一个目录下的。如果你把自己的游戏 rom 都复制到这里,再运行程序,就能看到游戏选择界面了。

当然,这里我的 rom 都存在另一个文件夹中,所以我给那个文件夹创建个替身,把替身重命名为 roms,并拷贝到 mame64 所在的目录即可。


这个时候再运行 ./mame64 就能看到所有的游戏了,如下图。


按 Return 进入游戏后,可以通过 Tab 键配置按键,按 Esc 退出,这些操作都和 Windows 下面是一样的。

PCSX2 (PlayStation 2)

PCSX2 是 PS2 的模拟器,Windows 版本已经非常成熟了,Mac OS X 版本的话只能运行部分游戏,而且流畅度没有 Windows 高。所以这里纯粹是说明一下如何在 Mavericks 下面配置 PS2 模拟器,如果想要玩游戏,建议还是 Bootcamp 到 Windows 下面吧。

首先,需要下载安装 XQuartz。完成之后根据提示,注销后重新登录一次。如果你的 Mac 很古老,装不了 XQuartz,那就可以安装 x11。当然如果是这种机子,其实可以放弃安装了,因为新款的机器也不一定能流畅地跑游戏。

不管怎么说(这里最合适的词是 Anyway,我不知道中文应该怎么说),我们还需要下载 PCSX2PS2 的 Bios 文件。(左边的 PCSX2 连接是 mediafire 的,如果不能下载,请用下面的官网地址)

PCSX2 的官网上,软件的版本是 0.9.7,而且写着 Lion Only。这个版本我没有尝试,上面的那个 mediafire 的链接下载到的是 0.9.6 版本的,在 Mavericks 上也能用。

如果你下载的是官网的版本,那么还需要下载这个工具:

https://developer.nvidia.com/cg-toolkit

如果是 mediafire 上的那个文件,那么压缩包里面已经包含上面这个 cg-toolkit 了,如下图。


以 mediafire 这个压缩包的内容为例。首先安装 plugins 里面的 cg-toolkit。然后安装 programs 下面的两个 pkg 文件。完成后启动 pcsx。如果此时在配置里边,默认的手柄插件认不出游戏手柄,或者按键认的不全,那么可以试试安装 plugins 里面的 Onepad 插件。ZZOglPG 是另一个版本的视频插件,有需要的话可以安装试试。 这两个插件在 PCSX2 官网也都能够下载到。

然后把 bios 解压缩,在 pcsx 里面进入到 Config - Configure 对话框里面。


点击左下角的 Select Bios Dir 选择 bios 路径,确认后就能在右下角选择 bios 了。


运行游戏的话,可以选择 File - Run Iso Image 来选择游戏镜像,也可以先到 Config - Cdvdrom 里面配置光盘镜像的路径,然后选择 File - Run CD/DVD。之后就看你选择的游戏模拟器是否支持了,顺利的话,就能看到游戏画面了。


Wrap-up

好长的一篇 OS X 基本配置。重装系统本身不麻烦,但是装完后的软件安装和配置实在是吃不消。下次还是再买一块硬盘,做个 Time Machine 备份吧。

纽约记行

2013年10月11日,平生头一次踏出国门,目的地美帝国主义,纽约,参加 Velocity 纽约 2013。 会议纪要另开一篇,请猛击此处

准备

从暑期得知此次机会伊始,我就非常低调,因为我很紧张,会觉得前期的显摆成事不足败事有余, 万一说出去了又没去成,就糗大发了。这是典型的屌丝心态,得治。

幸运的是我的老大李牧早有经验,指点同去的诸位准备签证,准备面签材料,最终带到上海美领馆的有:

  • 护照
  • 邀请函
  • 收入证明(带收入说明的在职证明)
  • 行程单
  • 简历
  • 房产证
  • 学位证
  • 毕业证
  • 工牌

很多吧?同去上海面签的同事连结婚证、驾驶证都带了。但实际上面试官只看了护照和邀请函, 因为面试规则是,面试官没要,就不要递,于是前期准备的风风火火的其余文件全部躺在文件袋, 原封不动回了杭州。

护照

没出过国,连护照也没办过,档案还在人才市场,还挂在前东家名下,还好时间充沛,离大会还有些时间, 7、8月份三伏天,江浙提前实现了集中供暖,我骑着车到人才市场弄户籍证明。幸亏三年前从前东家离职 时开的离职证明还在。

过程还算顺利,只是档案管理费之类的东东有点莫名其妙和贵,要事在身,不敢计较。

拿着户籍证明、身份证,到西湖区行政服务中心,拍了照片,拿了护照和港澳通行证的单子开始填, 材料齐备之后,方可拿号排队,挑了个工作日,人比较少。

也有个类似面试的过程,身着警服的工作人员问去美帝干啥,我说出差云云,于是在“申请事由”一栏给我 勾了“商务”,顿显高端洋气上档次。

至此弄完,一两周内会有短信通知,拿着办理时给的回单和身份证去取即可。

邀请函

邀请函由在美国的公司、个人出具,我是在8月前后给 O'Reilly 的大会组织者写信申请的。一般他们 会让你卖完票再说,不过言辞恳切、强调阿里是 Velocity 好伙伴之类的,也可以先收信后补票。

DS-160

去面签之前,要先在线提交 DS-160 表,填写个人信息,教育、工作、家庭之类,和以前在线填简历 差不多,具体过程见 ustraveldocs

提交后,还要缴纳签证费,可以通过中信银行的在线支付,用其他银行的卡也可,需要报销的话, 打印支付成功后中信发到邮箱的信,和护照一起拿到中信银行,让他们给打印正式的付款凭证即可。

顺便吐槽中信银行的客服系统,95518 打过去,费了半天劲、听了半天自动语音,愣是没能接通人工服务, 第二次终于成功,问完付款凭证如何搞之后,顺便吐槽,客服小哥一听,说教我个办法,先到另外的菜单, 再随便按任意数字即可。

是个好办法吗?我不知道,我已经忘记了。

付完钱,打印确认页,到美领馆面签时需要;DS-160 表格无需打印。

面签

丑媳妇终要见公婆,9月中约了在杭的一位同事,到城站坐车往上海虹桥,前往梅龙镇广场,结果这梅龙镇 广场和华星时代广场是一个货色,其实是个大楼,百货商店,而且卖的东西高贵冷艳,在里头绕了许久, 终于寻得美国领事馆。

外围都是保安和其他工作人员,很认真地维持秩序,让陪同人员散去,让来面签的排队,让初哥如我自检, 比如包要寄存,要到楼下入口拿进馆单。于是转而下楼,到附近小店存包,10块钱,还能接受。

然后入馆、安检、排队、排队、排队……

轮到了,遇到的是白人面试官,说普通话,整个面试过程大致是:

  • 去美国干什么
  • 参加 O'Reilly 举办的 Velocity 纽约 2013 Web 性能与运维大会
  • 邀请函给我
  • (递邀请函)
  • 在哪里上班
  • 杭州,阿里巴巴,在职证明要么?
  • (不鸟我,打字)工作多久了?
  • 5年差不多
  • (看 DS-160 表)你是浙大的?
  • 是的
  • (继续打字)
  • (忐忑)
  • 通过了
  • !!!

自此,办护照、弄材料、面签,告一段落。

踏出国门

李牧在北京,于是和他一块坐国航的国际航班,一同参加 Velocity 的杭州同事,则选择到上海坐东方 航空。我得先飞到北京再转机。

首都机场宾馆

久闻宇宙中心堵车、空气差的名声,尽管亲身体会过数次,觉得杭州虽不及,亦不远矣,但是宅属性发作, 还是选择在首都国际机场附近找地方住下,省得次日起早赶路(其实就是4点起床和5点起床的区别)。

找的住处叫首都机场宾馆,更像是一个统称而非特指,竟然还是三星级。打车前往,的哥不知道地方在哪, 让我心里咯噔一下,到了之后,令人失望,那些宾馆地处机场配套设施所在的区域,有国航的大楼,有 提供航空视频的,有维护飞机起落架轮胎的,而那宾馆和这些设施一样,都很有些旧了。

某处

楼下两家店,分别供应西餐、中餐,挑了西餐,因为中餐看上去很贵的样子,结果西餐不遑多让,供应的 也是饭和面,¥68 的牛腩饭,还没有发票。

林荫大道

含泪吃完,回房间上网,看了几部电影,准备提前倒时差。此宾馆唯一的亮点是网络还算不错, 有到航站楼的班车,在房间里顺便换了酒店,因为发现提前订反而没有临时订便宜,当然前提是房间还有。

当时取消了 Park Central Hotel 的预订,改成了 Holiday Inn,前者的预订规则是,提前一天即可, 如果是离入住当天下午4点的时间在24小时之内,则要收一天的房钱,取消预订时,是北京时间下午4点36, 纽约时间凌晨4点36,10月10日,因为这一点小差别,Park Central Hotel 搞出了误会,认为我没能 提前一天退房,扣了我 $364 ,这是到了纽约之后的事情。

登机

因为是国际航班+有行李托运,于是也是平生头一回,拿护照到值机台取票、托运行李,之前飞的那些次, 都是先行打印或者到机场后刷身份证打印的。

说到这需要聊聊行李箱,在前期准备时,就考虑了行李箱的问题,在杭州安定多年后行李箱没了,一般拿 老婆的20寸行李箱凑合,短途旅行什么的,足够了。但这次路途比较远,而且很有可能会从美帝带东西, 得准备个大的,于是到淘宝、亚马逊和联华超市都看了看,去联华是迫不得已,在亚马逊买的箱子没能在 我前往北京之前送到,只好当晚又去超市看了看,然而超市价钱比较贵,最终悻悻而返,把行李都塞进了 20寸的那个里头。

但是这个小行李箱不适合托运,金利来的皮质箱子,颇贵重。所幸这次托运没有对它造成太大伤害,只是 漆皮的提手被托运的单子粘下来不少皮,毕竟这箱子也有些年头了。

基本上,托运物件不贵,也抗摔抗压的话,可以选择帆布箱子,如果担心行李被压,则最好选择骨架结实, 外壳抗压一些的,比如使用 PVC 的贵些的牌子。对这种话题,知乎上也是众说纷纭,有人推荐 Rimowa,高端洋气上档次的牌子,当然也 有人黑 ,看到几千、上万块的箱子被摔坏, 和看到几百块的便宜箱子变形,心情自然是不同的。

不管怎么说,托运皮箱子都是最差的选择。外表容易被划伤,又保护不了内容,只剩下箱子骨架撑着。

另外,随身携带的行李箱,最好注意一下重量,国内可能一般不差,但国际航班经常需要称重,尤其是 返航时,一般5公斤之内,原则上不让超过8公斤,所以假如买了个铝制外壳的行李箱,比如 Rimowa、 新秀丽啥的,基本上里头只能放些衣服裤子之类的轻便物品了。

安检与平常差别不大,倒是登机得坐摆渡车,比较新鲜。

飞行

北京往纽约的航线需要经过北极,这听起来很不可思议,但解释了为何北京到洛杉矶要12个小时, 到纽约要13个小时,纽约到洛杉矶却要6个小时

这种航线叫做北极航线,或者大圆航线(great circle track),因为地球是圆的,能够节省飞行时间。 于是,虽然没有撒泡尿、写个到此一游,我也算到过北极啦。

李牧给了个建议,因为飞行时间很长,不妨等空姐发饮料的时候要两罐啤酒,喝下去呼呼一睡, 醒来就到了。好提议,实践之,效果尚可,睡不安稳,醒来就盯着航线图发呆,偶尔看看窗外,起飞时是 北京时间上午9点,但北极一片漆黑。

有段时间醒着,看着航路显示屏,舱外温度是零下五十多度,正在地球北端,就想,要是在这迫降, 就算成功落地,也活不了多久吧……

幸好发改委近来还算高抬贵手。

纽约・纽约

落地

落地啦,降落在肯尼迪(JFK)机场,肯尼迪是个很神奇的总统,和苏联掰手腕,搞定古巴导弹危机, 据说按西洋人标准,长得非常帅气,万民景仰,又很神秘地被人刺杀,等等。本科时看过一部电影, 就叫 JFK,中文名叫《刺杀肯尼迪》, 拍得非常好,算是了解该事件另一面的好电影。

落地之后,首先看到的是通道里成都的招贴画,很有趣。然后,就是入关啦;印象最新鲜的,自然是 《北京遇到西雅图》里面汤唯和海关人员的对话。不过我的行程单写明了待一周,他给我多少时间已经 无所谓啦,别把我打回去说美帝不需要温州偷渡客就行。

还有个小插曲,同行的乘客里,有许多是大陆过去看子女的,不会英文,排我前面的女士就是如此, 海关同志没辙,转过头问后面排队的有没有英文、汉语都懂的来翻译下,我排在最前面,自然当仁不让啦。 原来是来看女儿的,而且女儿会来机场接她。

然后去打车,工作人员递过来一张纸,上面写着说明,从肯尼迪机场到曼哈顿是统一收费 $58,过路费与 小费另计。到布鲁克林、皇后区等类似,都是统一收费,不打表。

真好,不用担心被绕路了。

小费是个贯穿此次纽约之行的困扰,我脸皮薄,给少了怕被鄙视,给多了怕被说乱花钱,亚历山大。 先说经验,一般小费比率是 15% - 20%,10% 也能接受,大多会凑个整,如果服务差,还能不给小费。 对于小卖部、超市之类,没有专门给你出人工的,不需要给小费。像星巴克、面包房之类的店, 把找零当小费即可,有专门的匣子让你投的。

可我还是搞不清楚。

言归正传,乘着出租,观察马路上美帝的车,车辆新旧程度迥异,可以看到许多古董款式,也能看到 热门车型的最新款,最让我惊讶的是好多皮卡和长鼻子卡车头,后者让人马上想起 擎天柱

到了曼哈顿,发现城里仍然可以看到好多大车,各种拖车、卡车,在中午时间和别的车一起堵在路上。 还好纽约不是宇宙中心,只是“车流量有点大”。

酒店

最终我们选择入住的是57街的 Holiday Inn,价钱比 Park Central Hotel 稍微便宜一些些, 而且提供免费的无线网络,出门在外,不能强调网络更多了,比起后者近 $15/小时 的上网费,免费网络 是个福祉。

Holiday Inn

另外我们还选择了 $25/天 的早餐,不算是个好决定。自助早餐味道不错,但是性价比不太高,何况还 少了接触当地早餐的机会。

入住的时候还发生了误会,也让我发现自己的口语在碰到未曾耳闻的场景时能够摆烂到什么程度。 工作人员把房间价格搞错了,直接拿第一晚的价格乘以七,而实际上价格并不是这样的,每晚都有不同, 周五、六晚上的比较贵,寻常日子则相对便宜很多。10月11日是星期五, 正是贵的时候,于是七天房费 多出 $700 左右来。

连上网,打开订单,再跑去交涉,言语加比划,总算说明问题,经理跑过来,修正了价格。

酒店大堂还有 bell boy,即行李员,帮你搬行李的,要给小费的,我们来时东西不多,自己动手。

到了房间,发现一个与国内酒店迥异的事情,不提供拖鞋、牙刷,牙刷忘了带还可以问前台要,拖鞋是真没有。 只好到外头买,于是搜附近的超市,结果又发现个囧事,城区只有一个大型超市,在东北端,不像国内联华、 物美、家乐福、大润发、沃尔玛俯拾皆是。遍地可见的是各类 phamacy,一般兼售药品与生活杂物。

街与道

放下行李,落街赏玩曼哈顿。曼哈顿的街道很周正,是个经典的栅格规划( grid plan,不知道可不可以这么翻译), 这份规划叫做 Commissioners' Plan of 1811, 是纽约发展史上最重要的文档,没有之一。

大致上的规划是,南北向的叫道,有十二条主干道,从东往西依次是第一至第十二大道,东西向的叫街, 从南往北总共有155条街,分别对应英文 Avenue 与 Street。

先去办了 SIM 卡,T-Mobile 提供多种价位的包月,还有给 iPad 提供的七天合约,但是后者流量包 不大,不如适合 iPhone 用的实惠。事实证明办个电话卡很管用,应该每个人都换上,方便联系。

找到了此次 Velocity 的会场,在 Hilton Midtown,54街与第六大道的交叉口,该路口据说有纽约 最美味的接头小吃 Chicken over Rice,翻译过来就是鸡肉盖浇饭,鸡肉是烤的,饭是炒过的, 没汤头,只是加上一些沙拉酱、蔬菜什么的,头一次吃比较有新鲜感。

不过当天我们不晓得此处,没去吃,而是转赴时代广场,算是到此一游。时代广场在百老汇与第七大道的 交汇处。百老汇是条历史悠久的路,在街道规划之前就已存在,但没有出现在初始规划中,幸好生命力 顽强,最终加到里头。影响那份规划的还有中央公园和哥伦比亚大学,都是后加上的。

时代广场

接着到了布莱恩特公园,不是科比·布莱恩特,想在公园里的餐吧叫两份外卖,结果人说不做外卖,于是 点了个蛋糕,齁甜,又要了一份可乐,因为除了可乐就是酒,实在不想喝酒……

布莱恩特公园

付钱的时候我问吧台服务员,在这吃是不是要给小费,我是从中国来的,我们那没小费这一说的,服务员 说小费要得,于是我多付了 $1。

再往前走,路过中央车站,进去之后叹为观止,地面建筑漂亮,地下通道流畅,Apple 竟然在这开了家 Apple Store,不得不说太有品了。恰逢中央车站一百周年。

中央车站

到处看得到米国国旗。

纽约的教堂有很多,地图上还会标注所属教派,这些教堂都无比精致。

走着走着看到一家饺子店,叫人力车,饺子味道还不错,吃完回家。

下城

次日前往下城,先从最南端的自由女神像开始。坐1号线到 South Ferry。

South Ferry 地铁站里的装帧

记得电影 海上钢琴师 里有个情节,1900 一辈子都没下去过的那条船驶入哈德逊河,在一片迷雾中,有乘客看到了自由女神像,一船的人都跑去看, 众人激动万分,他们历经险阻,终于踏上了自由的土地。

不过很不巧,美国政府关门了:

关张告示

据说乘 Staten Island Ferry 还是可以上自由女神像所在的岛看看的,不过我们乘的是 South Ferry,就是开到左近,凑近了看看。

Staten Island Ferry

终于接近女神了!女神长得像汉子。

自由女神像

其实,在很多年前的宇宙中心,我们也曾有过一尊女神像的。坐 South Ferry 的好处是路线非常适合拍 各种照片,渡轮在行进过程中都会有所停顿,可以很方便地拍到埃利斯岛、自由女神像、布鲁克林大桥和 南部的各个建筑。沿途有英文解说,可惜喇叭离我们稍远,听不分明。

南部全景

最高的那个楼叫 One World Trade Center,9·11 后在世贸中心双塔遗址附近建的,是目前纽约最高 的建筑,其次是帝国大厦,再次是克莱斯勒大厦。帝国大厦有两层观景台可以让游客上,自然是收费的。 许多电影里都有帝国大厦的观景台,比如前面说的《北京遇到西雅图》,比如差不多新的汤姆·克鲁斯的 电影《遗落战境》。

同样的,许多电影、电视剧里有布鲁克林大桥,比如比较受欢迎的美剧《破产姐妹》的片头。

布鲁克林大桥

不想坐船,还有直升机可以坐:

观光直升机

右边那条船,叫做北京号

北京号

码头有黑人歌手卖唱,非常好听,会问你的名字然后现编歌词,听完给小费即可。

黑人歌手

华尔街自然也不乏以之为题的电影,绿色票子谁不爱呢。我印象最近的有《华尔街:金钱永不眠》,稍显 一般,另一部《利益风暴》则是上佳之作,有我很喜欢的演员凯文·史派西和扎克瑞·昆图。我生性冥顽, 从小没有经世济民的觉悟,长大后觉得这里的功课落下好多,摸摸金牛的蛋蛋聊表安慰。

金牛

金牛两侧,都叫 Broadway,这天恰好有好多玩滑板的,在冲坡,浩浩荡荡,边上停一辆警车,俩配枪 的警察看着,算是维持秩序。

Skater Girl

一群人喊着 Broadway Rock! 有个别家伙还上去调戏警察,问 You guys having a great time?

警察

沿百老汇往北走,可以到三一教堂。在电影《国家宝藏》还是《达芬奇密码》里,有这个教堂出场。

三一教堂

三一教堂正对的那条街,就是华尔街了,我们一行只有两人,占领不了华尔街,就到纽约证交所外头看看, 留个念想。

纽约证交所

前面提到了帝国大厦,和帝国大厦有关的电影其实不胜枚举,之前说的两部特点是都有观景台的镜头, 以整幢楼出镜知名的自然是《金刚》,彼得·杰克逊的翻拍得很好,有我很喜欢的娜奥米·沃茨。

大堂影壁

观景台有两层,平民款在86楼,还有个在100多楼的高贵冷艳版本,没去。想要登高远眺的人很多,从 进门开始就得排队,排队买票,排队过安检,排队乘电梯,电梯是先直达80楼,再80到86楼的,有人到 80楼后选择爬楼梯。

在86楼俯瞰百老汇和第五大道的交叉口:

百老汇

坐地铁回家:

地铁

离开纽约那天,在 Park Central Hotel 的大堂,和一个来自 Illinois 的老头聊起来,问他对 纽约的评价,说是一个神奇的城市,地铁尤其令人印象深刻。

上城

上城有中央公园,中央公园的东西两侧分别有大都会博物馆(简称 Met)和自然历史博物馆,时间有限, 我们到了中央公园西侧之后,跳过自然历史博物馆,直接从中央公园里的 Jacqueline Kennedy Onassis 水库旁穿过, 来到东侧的 Met。

水库

公园里跑步的人很多,因为历史悠久,并不如西湖边的太子湾、杭州花圃之类精致,没有那种芳草萋萋 的感觉,但随处可见大树和跑步的人,更有生活气息一点。

Met 真的好大,我在里头踟蹰一整天,直到下午5点零5人家闭馆。

埃及区

埃及某个国王的头

国王的头

美国区

建筑风格

武器与盔甲(Arm and Amor)展览区是我印象最深的,比如某个小孩,好像是个王子,的盔甲:

小孩的盔甲

比如意大利产的头盔:

头盔

在这里拍的照片实在太多,以后慢慢整理把。

Outlets

三天 Velocity 大会结束之后,还有一天空闲,我们租车去了 Outlets,据说是全美最大的。 这是我头一次去,感觉和庆春路那个折扣店很像,不过是放大很多倍的版本,折扣更厉害,尺码更全。 在高速公路旁开辟了很大一块地,大牌子独占一栋房子,要拿着地图去逛。

其中一家店

地方太大,保安巡逻得靠 Segway:

Segway

买了不少东西,为此还买了个行李箱。

因为不乏 Gucci、Coach、Calvin Klein 之类的牌子,个别折扣还非常给力,于是不难猜到这里也 快被中国人攻占了,在 Coach 店里看的时候,60% 是中国人。

在 CK 时,还碰到一个女人问我讲不讲中文,然后说她想给男人带个包,问我哪款合适,三十多岁云云, 我不谙此道,爱莫能助。

Outlets 自然对债主表示欢迎,不难看到银联的广告,这里的 ATM 上也大多有银联标识。招商银行 还提醒广大用户出示招行 Visa 信用卡,有折上折。

招行

重返天朝

次日起早,收拾行李准备返家。因为和 Park Central Hotel 还有财务纠纷,李牧也还有别的事情, 我们先在大堂寄存了行李,出发办事去。bell boy 见我们行李多,很热情地帮我们搬,不知小费几何, 只给了 $1,感觉少了。

还帮我们叫了车,不是出租,后来走的时候还纠结了会,毕竟国内能够合法运营的只有出租车。万一上了 黑车,人还坐地起价,回家前被黑一笔,那就晚节不保了。

退款

Park Central Hotel 的位置很好,基本上在中城的正中间,到哪都近,四星级的酒店,大堂很气派。 待了6、7天之后,我的嘴皮子总算利索了些,和柜台把问题说清楚了。接待员确认了这笔扣款,我解释了 北京和纽约的时差,然后他就联系财务,结果财务小子 Juan 在开会,说 10:30 结束,问我能不能在 大厅等会,我只好答应。

正等着,旁边坐了一对老夫妻,老头和我聊起来,问我哪里人,我说中国的,他很惊讶。从聊天里得知, 他来自伊利诺伊州一个小镇,来这里看小孩,顺便逛这个大都会的。

Isn't New York an amazing city? 他说。

都快11点了,那个接待员还不回来,我又去问,这次是位女士,结果得知,刚才那接待老头吃饭去了, 于是又只好跟她把问题再重复一趟,还好这位大姐很给力,给财务打电话,跟财务重申我在大厅里候着 不走,终于把 $364 刀给退了来。

China Airline

回到酒店后,出发去 JFK,快到机场时,司机问我们是哪个航空公司,我们一下子想不起来国航的英文 名字是啥了,于是拿 CA 去猜,觉得应该是 China Airlines,于是奔往4号航站楼。

结果国航的英文名字是 Air China,在1号航站楼。国航作弊啊,这名字排名靠前多了。还好各个航站楼 之间有轻轨连接。

轨道交通

我们即将乘坐的飞机,波音 777。

777

前几日看知乎,发现 China Airlines 名声很差,成为过去三十年事故最多的航空公司,幸好我们没去坐。中华航空你要加油啊。

另外,想看 China Airlines 与 Air China 的八卦请 猛击这里

飞行途中,此处应该是西伯利亚上空:

西伯利亚

入夜,月亮升起来了:

初升的月亮

转机

到了机场,赶紧开电脑定北京往杭州的机票,不懂实现规划的后果就是事情来了之后手忙脚乱,入了海关, 找到无线热点,通过公司的报销系统订票,结果默认的淘宝服务不给出票,说离起飞时间2个小时之内的 票不能购买。我想淘宝旅行的产品经理想破脑袋也没想到还有我这样的,到了机场再通过网络买转机机票 的奇葩。

改用携程,还好人家没做这一限制。

飞到萧山已是10月20日了。

萧山机场

Velocity New York 2013 小记

2013年10月11日,首次踏出国门,前往纽约参加 Velocity New York 2013,时间计划得比较充裕, 因此有幸玩了两三天,感兴趣的同学可以看专门的准备工作与游记

先说总体印象,Velocity 技术大会的副标题是 Web 性能与运维,议题重点关注是性能优化与系统 运行、维护的部分,本次大会的议题,性能方面专注于移动设备上 HTML5 的优化,运维方面,则有大多 是关于系统检测与自动化测试的。

Day I

比起后两日早上的密集分享, 首日的议题 要少很多,相应的,时间都比较长。

图片加载

先去听了《What Your Browser Does When You Aren't Looking》,即当你不注意的时候你的 浏览器都做了啥。看标题很有点阴谋论之类的意思,其实主要是讲浏览器在资源加载上的各种意外行为。 在此之前,有过一个在线版的测试,request-quest

Jake Archibald

演讲者叫 Jake Archibald,看推特是个很风趣的人,说到了纽约在街上走,又被人当成某个色情明星 给“认”出来了,应该是光头+黑色上装的效果。

他的演讲过程很有趣,在自己的电脑上跑了一个 Web 服务,让在场的人访问,然后在演讲过程中, 会冒出一个个小测验,让大家真切地考考自己,因此互动效果特别好。这些测验都很难,答错要扣分, 说是按平均分为零的标准出题的。

第一道题目都很有欺骗性:

<div src="foo.jpg"></div>

这段 HTML 会不会导致浏览器下载 foo.jpg?

接触过 XHTML 的同学可能觉得会下载,事实上 XHTML2 里确实是这样规定的,任何元素都可以有 src 与 href 属性。src 会导致该元素下载该资源,href 则将它变成可点击的。不过,现代浏览器认的 标准是 HTML5 而非 XHTML2,后者被放弃了。

WebPagetest

WebPagetest 是个网页速度测试工具,起初是 AOL 开发,在 2008 年开源,现在由 Google 支持,是 Google Make the Web Faster 运动的一部分。

演讲者叫 Patrick Meenan,是此项目的负责人。在演讲过程中有个小插曲,他电脑上的 IM 工具没 关掉,女?朋友发来一条消息,问他在干嘛,是不是已经开始演讲了。

他以一个虚拟项目为例,讲述如何建立分布式的综合测试,要求:

  • 能从多地访问
  • 模拟实际网络条件,而不是数据中心或者机房之内的访问
  • 统计正确的加载数据,而不仅仅依靠 onload 事件
  • 模拟单点故障
  • 等等

第三点非常有趣,是本次 Velocity 常被提起的话题,很多时候 onload 事件并不意味着页面加载完毕, 尤其是单页应用等大量异步化的网站。相应的,Patrick 提出了一个 Speed Index 的东东,即 页面速度指数,大致是网页大部分像素变化完成所需时间以及这个过程是如何变化的,详细可看 WebPagetest 的文档

次日 Patrick 还有议题,和另外两位一起,讲述 onload 之外的网页加载速度测试。

响应式设计

英文标题是《Responsive Responsive Design》,这个词被重复太多遍,有点 hype 的意思, 但实际上它一点也不,尤其是在敝厂现在才发现自己落下太多无线功课的时候。

演讲者叫 Tim Kadlec,是《[响应式 Web 设计与实践](http://book.douban.com/subject/21263576/》 一书的作者。本书挺有料,是补课的首选。

演讲内容与书差不多,强调 Mobile First,以及小屏版本不应该想着如何把桌面版本塞进去,而是如何 从内容到形式都能更符合小屏幕,减少资源加载,有必要则减少内容。

另一个话题是如何给不同 PPI 的设备提供图片,我们有 @srcset 与 <picture>,然而这两个方案 都不能算成熟。他只好吐槽,三年过去了,我们仍然停留着几乎什么都没有的阶段,最好的解决方案, 仍然是自行用 <span> 配合 JS 解决。

<picture width="500" height="500">
  <source media="(min-width: 45em)" src="large.jpg">
  <source media="(min-width: 18em)" src="med.jpg">
  <source src="small.jpg">
  <img src="small.jpg">
</picture>

有没有觉得和 <video> 标签很像?但因为标准支持很慢,这段标记被展开成 <span>

<span data-picture data-alt="A giant stone face at The Bayon Temple in Angkor
    Thom, Cambodia">
  <span data-src="small.jpg"></span>
  <span data-src="medium.jpg" data-media="(min-width: 400em)"></span>
  <span data-src="large.jpg" data-media="(min-width: 800px)"></span>
  <!-- fallback for browsers with JavaScript disabled. -->
  <noscript>
    <img src="small.jpg" alt="A giant stone face at The Bayon Temple">
  </noscript>
</span>

相比之下,@srcset 的语法则要干练很多:

<img src="fallback.jpg"
     alt=""
     srcset="small.jpg 640w 1x, small-hd.jpg 640w 2x, med.jpg 1x, med-hd.jpg 2x">

除了人肉提供多个尺寸的图片以供不同设备展示之外,Tim 还提到一个近似黑魔法的东西,叫做 Compressive Image, 大致意思是,把一张 JPEG 放大 1.5 或者两倍存储,但是劣质。在图像处理软件中导出过 JPEG 的同学都知道,有个 quality 选项,选择 10 甚至 0。因为劣质,虽然图片很大,但文件大小与 原来的高质量小图差不多。然后在浏览器中用 img 的 width、height 属性,或者用样式,将图片缩小 到实际需要的尺寸,你会发现那个放大的、质量很差的图片,经过浏览器缩小之后质量很不错,不管实在 普通屏幕还是视网膜屏幕上。

这么做的坏处其实不少:

  1. 占用浏览器更多内存,因为会被展开成位图,后者占用的内存将是原图的四倍。
  2. 用户保存的图片质量很差,因为右键保存的是放大后的劣质版本。
  3. 缩放图片比较大时将使浏览器卡顿

所以,尽管初看这种做法很棒,帅得让人难以置信,但它的坏处使得它难以取代其他图片解决方案。

另外 Tim 还分享了一些移动设备上的特殊做法,有些在其他演讲者那儿也有提及,比如将不重要的内容 异步化:

<!-- 原先 -->
<h2>Reviews</h2>
<div class="reviews"><!-- 很多内容 --></div>

<!-- 现在 -->
<h2><a href="reviews.html" data-target="reviews">Reviews</a></h2>

在桌面电脑、iPad 等强力些的设备上,可以在页面加载完毕之后加入异步请求,载入 Reviews 部分。

为移动应用打造性能实验室

英文标题《Building a Performace Lab for Mobile Apps In a Day》,演讲者是三个人:

前两个是印度人,第三个则是华人,很牛哦。他们都来自 Salsforce

但是真的要原谅我,听不习惯印度英语,只能是一知半解。大致上,介绍了一些用来性能检测、 测试自动化的工具:

Susie 同学的口音还是有点重,她讲了安卓应用的自动化测试:

Web ChromeDrvier2 AndroidDriver Kylie Loglines
Native/Hybrid Selendroid Customized Loglines

还有个优化资源加载的小窍门,因为:

  1. 在移动设备上输密码是很花时间的,因为密码通常都比较复杂,而键盘又很小,通常需要切换
  2. 图片与 CSS 是并行下载的,而 JS 是单线程(存疑,应该可以用 async 属性并行下载)

这其中,还有分析 Dalvik 虚拟机的日志,取得 GC 信息,查内存泄露等等,但不太明白他们最终的 产品是什么。

Day II

次日议程 很多,上午都在 Grand Ballroom,希尔顿酒店的这些会场都是可分割的,上午是一整个,没有隔开。

Grand Ballroom

议题都很短,只有10到20分钟不等,基本上以广告为主,比如 Keynote 公司(不是 Apple 的幻灯片 软件)做得 KITE 与 MITE:

Keynote 的 KITE 与 MITE

  • KITE, Keynote Internet Testing Environment
  • MITE, Mobile Internet Testing Environment

KITE 是个用户操作记录与回放工具,并记录操作过程中产生的信息,例如资源加载瀑布流等。感觉是个 商业味道比较浓的公司做出来的工具。

KITE 有个亮点是,可以把录下来的操作放到不同地方的服务器上回放,因此可以用来做实时监测。

MITE 大同小异,只是针对移动 Web 的,演讲者说,会做一些特别处理:

  • 根据最佳实践计算 Mobile Score,告诉你网页的评分
  • 模拟 JavaScript 环境,把实际环境中不可用的对象隐藏掉
  • 模拟 geolocation 等 API

后来在他们的展位,我还跑过去问了一把,问他们是怎么记录的,因为听的时候以为是直接生成 JavaScript。实际上是,操作记录的格式是 XML,JavaScript 作为补充,当操作记录不好用的时候, 改用 JavaScript 手写操作。据说那份 XML 格式还申请专利了,我说过这家公司商业味道很浓的吧?

复杂系统是如何产生故障的

演讲者 Richard Cook,来自斯德哥尔摩皇家技术学院,演讲标题很长长长,叫:Resilience In Complex Adaptive Systems: Operating At The Edge Of Failure。

在我听他的演讲之前,刚好看过他的研究报告, 的中文翻译

他这里的复杂系统是广泛概念,电力系统,民用航空系统,交通系统,股票交易系统等等,都在其中。

运维人员每天都在:

  • 监测系统的某些部分
  • 抓住机会
  • 预估离故障还有多远
  • 应对风险
  • 预期未来的情况
  • 学习系统特性

这些都不是离散的行为,它们是有内在联系、相互影响的。接着 Richard 老师介绍了一个模型:

Rasmussen's System Model

右上和右下分别是财务故障边界和忍无可忍的劳动力边界,通常在系统运维中会优先做相应的事情以将 运维状态,即中间的那个点,推离高财务和高劳动力,所以通常不会因此而导致系统故障。但是,这些 努力都将运维状态推向第三个边界,即意外边界。

更少的钱,更少的人手,也通常意味着更大可能的意外。

但是,自21世纪以来,人们更加惊讶的不是系统为何产生故障,而是为何系统不会产生故障。因为随着 监测技术成熟,和愈发被重视,人们对系统中的不足其实非常清楚,往往因为系统规模太大,修改成本 太高而作罢。于是问题来了,既然有这么多的问题,为何系统仍然可以运转无虞?

于是回到议题,复杂自调节系统的弹性。我们运维在失败的悬崖边,而系统安全正是关于:

  • 会发生什么
  • 当前的运维状态究竟如何
  • 意外的边界究竟在哪儿
  • 在压力下,我们做什么:
    • 监测
    • 反应
    • 预料
    • 学习

不止是平均

来自 AppNeta 的小哥介绍数据展示与解读,说普通的曲线图虽然看起来只管但是砍掉了太多信息。

  • perecentile
  • histogram
  • heatmap

他重点推荐的就是 heatmap,用颜色深浅将信息表示出来,从而更直观地看到隐藏在曲线图之后的内容。

Web 性能工作组

Web 性能工作组给大家带来:

  • 浏览与资源计时:.redirectStart.domainLookupStart
  • 用户行为计时:.mark().measure()
  • 文档是否可视:document.hidden
  • .requestAnimationFrame
  • 高精度计时:.now()

在今后,还将带来 prerender:

<a href="..." rel="prerender"></a>
<!-- 浏览器将在加载完当前页面之后开始加载注明 prerender 的链接并渲染之 -->

同时还可以设置资源优先级:

<img src="foo.jpg" lazyload>
<img src="bar.jpg" postpone>

lazyload 与网络有关,会等到网络空闲时再加载;postpone 则与元素是否可视有关,会等到元素可见 时才加载资源。这俩还有对应的 CSS 声明:

video {
    resource-priorities: postpone;
}

如果是在 script 标签上,算上已有的 defer 与 async,去掉无关的 postpone(等可见时再加载 某段 script?),script 一共有三个控制加载顺序的属性:

  • defer
  • async
  • lazyload

基本上,lazyload 的优先级在 async 之后,而 lazyload 与 defer 一块用时只有后者会生效。 或许等浏览器那天弄明白这些规则,把它们都实现了,再去了解也不迟吧。

接下来这个或许会更有意义一点,叫做 beacon,即在页面 unload 时有个叫做 beacon 的函数, 用来发起请求,确保等请求发送完毕后才销毁页面。

function unload() {
    beacon('POST', '/log', analyticsData)
}

因为如果在 unload 里发起 XMLHttpRequest,会被取消掉。而浏览器会保证 beacon 的请求。

其他还有让第三方可以注入脚本,但避免影响实际页面的:

Preflight-Cookie: /monitoring.js

用处是可以让 CDN 等服务商加入监控脚本,但不影响实际页面,据说 Akamai 就有这需求。

不过,这个想法被喷的可能性很大,不要抱太大希望。

其他小议题

其他还有 HttpWatch 移动版,我还没用过,希望以后可以有机会使用, Available on the App Store

以及使用 Chrome Dev Tools 分析内存占用,即 Timeline 面板中的 Memory 标签,等视频看吧。

以上,为上午在 Grand Ballroom 的所有演讲。

Bing 的前端优化

他的观点是,不要只看页面加载速度,而是看如何帮助用户更快地完成他要做的事情。

有几点有趣的地方:

  • 内联样式反而比放在外部来得更有效率,他们做了个开关用来切换样式是内联还是引用外部
  • 内联 JavaScript 事件句柄非常影响性能,去掉它们减少了 20% 的页面加载时间
  • 恶意软件影响了 5% 的用户,开启 HTTPS 也没用

另外,尽管用得非常保守,开启搜索结果中点击率比较高的项目的 prerender,大大提高用户响应速度。 在之后的问答环节中,他也讲到 Bing 里头的脚本组织方式是以区块重要程度而定的,对于用户看到后 可能马上要用的,相关功能代码可能就直接内联在该区块后面了。对于相对不重要些的,则放到 onload 或者 ondomready 之后。

Rendering Without Lumpy Bits

还是 Jake Archibald 的演讲,这次将渲染速度优化,提到了不少概念,和 Chrome 中的调试技巧。

首先是 FPS 的概念,知道的同学可能都觉得老生常谈了,Frames Per Second,在 FPS(First Person Shooting,第一人称射击游戏)中常有的概念,玩过 CS 的同学应该知道的。所以,我们的 桌上型电脑如此强劲,玩各种 3D 游戏毫无压力,却在渲染 2D 网页会卡?实在是太不可理喻了。

先说明 Chrome 里网页是如何渲染的,你可以在 Chrome Dev Tools 里地 Timeline 标签中实践 一把,点记录按钮,打开网页,即可。

  1. 解析 HTML
  2. 计算样式
  3. 计算布局,生成 RenderObject 树
  4. 绘制

计算布局比较耗时,所以在循环中要避开触发布局计算的属性,比如:

  • offsetWidth
  • offsetHeight
  • ...

绘制自然也会影响页面渲染速度,有几项很容易拖慢绘制速度的东西:

  • 渐变背景
  • 圆角边框
  • 盒子阴影,阴影越大越卡
  • 模糊滤镜
  • 固定定位的背景图片

但是,有个很重要的观点,什么慢、什么快是时刻变化的,永远都记得先评估再下判断,现在的最佳实践, 将来可能变成陈腐观点。

接着,为了更好地解释渲染,Jake 以 Windows 为例,Windows XP 时代,整个屏幕当做一个画布, 窗口拖动时,其他打开的窗口也要响应重绘事件,以清除掉焦点窗口被拖走之后的废弃画面。但假如 这里是子窗口与父窗口的关系,因为整个程序卡顿,子窗口拖动时,父窗口没法响应重绘,于是就导致了 经典的残影。

到了 Windows Vista,屏幕是层次化的,类似 PS 中的图层概念,背景、各个程序都有各自的图层, 此时,窗口拖动时,其他程序不需要响应重绘,只需要让屏幕绘制程序自行处理即可。

Chrome 中的绘制也是如此,网页绘制是层次化的。

所以 Jake 也猜测,固定定位的背景图片因为还不是层次化渲染的,所以目前还会卡,但是在将来, 很有能会弄成层次化,那时就不会成为瓶颈了。

人眼期望的最高 FPS 是 60,即每秒六十帧画面,反过来说,即每帧得在 16.67 毫秒之内就算出来。 我们还知道,setTimeout 与 setInterval 纪律性不好,并不一定准时,所以 Web 性能小组搞出来 一个 requestAnimationFrame,确保动画的计时控制。

另外,Jake 还提到了移动设备里的 tap 实践,因为移动设备需要响应 double tap,所以 tap 事件 的触发会被延迟,需要等一会看看到底是双击还是单击,时间是 300ms。这导致普通的点击事件给人 卡顿的感觉。

替代方案有很多,可以改用 touchend 事件,但是滚动时也可能触发 touchend,所以 IE 中加了新的 事件,叫做 pointerup,比较管用。

pointerup 支持还不算好,着急优化这个点击的同学,还可以尝试 FastClick 封装。

还有个办法是,索性禁用掉放大:

<meta name="viewport" content="width=device-width, initial-scale=1, max-sacle=1
">

这样,在 Chrome 中将不响应 double tap 放大的效果,不过并不是所有浏览器都这么聪明,而且 禁用掉放大有点太狠了。

SCSS

接下来是下午的内容。

英文标题 Stylesheet Wrangling with SCSS,是个妹子讲的,叫做 Sarah Forst。

妹子很紧张,说话声音都发抖,讲的内容一般,就是演示一下 SCSS 的特性,变量、嵌套、mixin, 诸如此类,中间妹子还深情告白,说这是她头一次当中演讲,起点太高,吾等难望项背。

sass-lang.com

onload 之外

英文标题:Going Beyond Onload - How Fast Does It Feel? 三个人合讲,WebPagetest 的作者 Patrick Meenan,微软的哥们 Chao Feng,和 Mike Petrovich。

Patrick 讲的是前一天的补充,即 WebPagetest 里的 Speed Index 概念sass。介绍概念之前, 监测 onload 并不靠谱,举了两个例子,老版本的 Twitter onload 触发得很早,但是实际上页面是 空白的,因为绝大部分工作都被推迟到 onload 之后了,相反的例子是 Engadget,onload 触发要 很久,但是页面主要内容很早就出来了。

Speed Index, 就是用数值表现页面内容展示速度的。

WebPagetest 计算页面加载完成的时间并不是靠 onload 事件,而是观察首屏(AFT,Above The Fold)像素变化。

来自微软的 Chao Feng 同学,则分享了另一个思路,他的想法是计算页面像素变化区域占首屏的百分比, 进而算出变化的速度,从而将页面变化区分成多个阶段。

同时,会将包含黄金分割区域像素变化的阶段当做关键阶段。

PPT(Page Phase Time)的网址 http://ppt.msn-dev.com,感兴趣的同学都去试一下吧。

Mike 的思路,则是人肉将页面加载程度标记出来,放弃自动识别,利用 window.performance 提供 的计时接口,暴露 Page.setUserReady 方法,然后前端在合适的时机调用此方法,以标记页面加载 完毕。

Google in the Cloud

演讲者 Brad Adams 是 Google 云的产品经理,演讲也偏 Google 云的产品介绍而非技术细节。提到的产品有:

  • Google Compute Engine
  • Google App Engine
  • Google Cloud Storage

Google 云平台现已支持 PHP 与 MySQL,因此你完全可以在 App Engine 里跑一个 wordpress。

有个小段子,说 Google 甚至得保护自己的基础设施不被鲨鱼破坏。鲨鱼?原来鲨鱼会破坏布置在海里 的线路。他们的解决办法是布置监控,鲨鱼出没注意。

他说的有一点我很赞同,我们仍处在云计算的襁褓阶段,许多东西都才刚上路呢。

使用 Raspberry Pi 搭建信息化工作间

这个比较有趣,NewRelic 的两位工程师讲的,他们用 Raspberry Pi 搭建了一个监控面板,实时显示 应用状态。去过 Alipay 大厅的同学应该看到过类似的。不过我肯定后者用的主机要强劲很多。 监控面板的好处是:

  • 显示团队状态
  • 显示项目状态
  • 显示日程

第一位工程师 Chris Hansen 讲了面板信息的采集与显示方式,他们采用了 Java 与 AngularJS, 利用 Google Feed API 聚合团队成员的博客,使用 Masonry 布局区块。

第二位工程师 Jonathan Thurman 比较风趣,主要讲硬件,Pi 的好处与限制大家都很清楚了,便宜, 但是硬件限制比较大,倒是很适合明确不需要强计算能力的任务。

另外,就是如何展示信息,他管这个叫 Information Radiator,小型的液晶显示屏,大型的显示器, 都在此类。最终选择的是27寸的显示器。

然后是 Feedback Device,反馈设备,Pi 有 GPIO 接口,因此可以很容易地扩展它, 接上支持 GPIO 的设备。好几个类型可供选择:

  • 听觉反馈
  • 视觉反馈
  • 暴力反馈

暴力反馈

最终选择了视觉反馈。

Prebrowsing

Steve Souders 讲 Prebrowsing。Steve 是 Velocity 标志人物, Velocity 首页上常年都是他。感觉他的讲话风格非常像我之前的 大老板。

  1. <link rel="dns-prefetch">
  2. <link rel="prefetch">
  3. <link rel="prerender">
  4. DNS 预解析
  5. TCP 预连接
  6. prefresh
  7. preloader

前端工程师可以利用前三者优化业务流程。比如搜索结果页中点击概率比较高的条目可以开启 prerender,让浏览器预先加载;比如门户网站的子站点(sports.163.com)可以开启 DNS 预加载, 早点解析好域名,如果用户点击体育,就能打开得快一点。

浏览器支持度

浏览器内部可以优化4到6项,其实 Chrome 已经这么做了,打开新标签页的时候他会预先解析常访问 页面的域名,不管你是否打开这些域名。OmniBox 里如果输入结果比较确定了,它也将预先解析域名。

prefresh 是指,在页面刷新的时候,浏览器直接使用存好的静态文件,而不是重新请求,从而跳过一堆 200 或者 302 请求。

所以4到6都是浏览器内部优化项目,看起来与我们无关,但要知道,浏览器资源加载规则的改动,对前端 的影响其实很大。

另外还推荐了一本书,叫做 《High Performance Browser Networking》。

Day III

第三日议程 仍然不少,早上的议题仍然都很短,而且还有 Patrick Meenan,这哥们每天都有议题啊。这次是演示 WebPagetest,功能确实强大,新加上了测试对比功能。

Appurify

来自 Akamai.com 的 Guy Podjarny 分享移动平台测试工具 Appurify,也很强大,而且已经集成 到了 WebPagetest 里面,令人印象深刻。这种跨平台的整合应该很有难度才对,Guy 同学说得跟吃饭 一样。

Appurify 是在真实设备上跑这些测试的,目前只支持 iOS 设备,可以配置跑测试时的网络情况,是用 Safari 还是 Chrome)浏览等等。

模拟网络情况的选项非常细致,可以选运营商,还可以选信号具体是多少格。

MLBAM

Velocity 和我一样,都是头一次来纽约,于是请了当地的公司,负责研发、运维美国大联盟的媒体与 网络的 MLBAM, Major League Baseball Advanced Media。

他们的主要挑战是 MLB.com 要提供的流媒体服务,不是我的领域,不明觉厉啊。

Dropbox

Dropbox 的工程师 Kun Do 分享了 Dropbox 的云计算经历。

2008 年前,他们用的是亚马逊的 EC2,跑 MySQL,文件数据存储则使用亚马逊 S3。使用 EC2 的 坏处是:

  • 服务不稳定,曾经平均每天一台服务挂掉
  • 热切换对于创业公司来说太过昂贵
  • 服务挂掉之后束手无策,只能不停刷新控制台面板
  • 可定制性差

于是换到了数据中心,尽管它也有其问题,尤其是团队没有自行维护硬件的经验。而且还遇到奇葩情况, 机房的 HVAC 会喷洒不明液体到他们的服务器上。

但是好处也很明显:

  • 带宽费用降低 50%
  • 稳定性、控制度都有提高
  • 数据库性能更优秀(因为更容易调整)
  • 更多硬件选择

不过,尽管已经有了自己的服务器,Dropbox 仍然用了许多亚马逊的服务,文件数据存在 S3,用 EC2 跑离线任务与文件数据服务等等。用 EC2 跑离线任务这一点,Dropbox 玩得很高级。例如生成照片 的缩略图,如果加上了新的缩略图尺寸,则要把所有照片的缩略图都生成一遍,利用 EC2 的特性,可以 很容易地开启数以千计个服务器,跑上几个星期,然后关掉,避免产生不必要的费用。

Dropbox

响应式图片与视频

英文标题 Responsive Images and Videos,Jason Grigsby 演讲。讲了移动设备的重要和特殊, 更多人在用手机上网,但是网络情况各异。

首先要说的是现在的响应式都是纸老虎,思路仍然是讲网站的桌面版本做些变形与变换,塞进小屏幕。 网页的实际大小并没有优化。有的网站的移动版甚至比桌面版还要肥大。

要解决这一问题,Jason 提出了五个原则:

  1. 移动设备优先(和 Tim Kadlec 同学想一块去了)
  2. CSS 图片要妥善处理
  3. 根据设备尺寸与能力按需加载 JavaScript
  4. 给不同尺寸的设备提供不同尺寸的图片
  5. 小心处理高分辨率图片

移动设备优先看上去很简单,把那些 media query 顺序调转一下即可。不过,现实比较骨感,改变 做法之后需要注意的问题是,老版本的 IE 不响应 media query,改用条件注释与单独的 CSS 文件 即可。

如果你不需要这张图片,最好不要在父节点上 display: none,因为节点里面的 <img src="foo.jpg"> 仍然会被下载。

演讲者还列了一些测试:

  • media query 里头的 background-image 会各自下载,不会两个都下
  • 父节点 display: none,子节点的 background-image 将不会下载
  • 外部的 background-image 不会被 media query 中的 background-image 覆盖,仍会下载

按需加载 JavaScript 这一点,Jason 举了一个反例,有个网站要做移动版,做好后发现很慢,结果 原因是网页里嵌入了 Google Maps,在移动版上只是通过 display: none 去掉了。但实际上, 这些 JS 仍然会下载。

在 JS 里,可以使用 mediaMatch() 方法测试当前多媒体设备,与 CSS 中的 media query 是 一样的。判断之后,按需加载脚本。

提供多种尺寸的方式前一天 Tim Kadlec 也讲过了,有两个还在进化中的方案,@srcset<picture>,所以还是用 <span> 版本 吧。

哦对,还有个新的,叫做 @src-n,在最近几周才出现的。

不过还提到了图片缩放的技巧,除了直接等比缩放,其实还可以作适当裁剪,将主要部分突出,使得 小图也能分辨图片想要传达的信息,这种裁剪、缩放方式,可以翻译作艺术指导。

然后是响应式视频,浏览器支持的视频格式仍未统一,Mark Pilgrim 在 Dive Into HTML5 里也 曾预言,在可以看见的未来是不能统一的。不过,一个 mp4 一个 ogg,还算能接受。

另外,HTTP Live Streaming 目前仅在 Safari 与 iOS 中实现,所以暂时仍无法用它实现分辨率的 实时切换。

理想的图片解决方案是怎样的呢?

  1. 尽量使用矢量图与字体
  2. 鼓励用户上传尽可能高质量的照片
  3. 提供图片缩放与压缩服务
  4. 将缩放参数放入 URL

第一点,我想广告一下敝团队的字体图标;第二点,我们做得并不好, 甚至现在还有图片上传服务要求用户自己压缩图片,以要求的符合文件尺寸;第三点,比公司的图片服务 做得非常好,我们现在有非常详尽的尺寸可用。

最后,记得确保你的图片解决方案容易切换,因为不管是 @srcset 还是其他做法,都有可能在将来 不被提倡。

Topcoat

Adobe 的前端工程师 Brian LeRoux 分享 Topcoat,一个适用于移动设备的样式库。

Brian

Topcoat 是个样式库,初看亮点不多,除了感觉 Adobe 的设计师比较 有品位,按钮啥的弄得很高大上之外。后来我去看了它的代码仓库, 发现做了许多配套的工作,包括使用 Chrome Telementry 进行 性能测试。对此测试感兴趣的同学,可以看看 grunt-telementry

Brian 演示的是使用 PhoneGap 与 Topcoat 快速创建应用程序。

在后来的问答环节中,有听众问到 Topcoat 的 Demo 是怎么 做的,Brian 说是专门写了个文档转换工具,叫做 topdoc

这个做法挺有趣,有点像 @lepture 同学做的 nico

另外,还提到当初开始做 Topcoat 时,是用 CodePen 编写了初始稿,放到 Twitter 之后, 各种大拿冒出来,纷纷 fork。

Evernote

同样是分享运维经验,与 Dropbox 大同小异。亮点是 Evernote 在中国也设立了数据中心,还曾经 不断电换机房,关掉几台,运到新机房,开起来,回到旧机房,再关掉几台,再运过去。

移动 Web 性能的五项迷思

演讲者来自 Sencha,Michael Mullany,CEO,承玉老师的偶像。

Michael Mullany

五项迷思在早前 Sencha 的博客中就发过了,那会 Facebook 放弃了 HTML5,客户端改用原生方式 编写,Mark Zuckerberg 认为 HTML5 还没有好,太慢了。

Sencha 表示反对, 做了个 Fastbook对比当时的 Facebook 客户端,前者能够达到 60 fps 无压力,而原生应用 Facebook 却只有二三十。

博文的中文翻译

要达到这般高性能,需要注意的事情很多,随着五项迷思的披露一一阐述。这五项是:

  1. 移动 Web 性能 == JavaScript 速度
  2. 移动 Web 性能只是依靠 CPU 提速而有所改进
  3. 在将来,再好的 CPU 也不能提高移动 Web 性能
  4. 移动设备上的浏览器已经高度优化
  5. 因为用了带有垃圾回收的动态语言,JavaScript 注定性能堪忧

这些自然都不是真的,至少以偏概全了。

  1. Web 性能不止是关于 JavaScript 速度,也和 DOM 访问速度、Canvas 速度、SVG 速度、CSS transform 性能……等等
  2. Web 性能改进依靠硬件与软件起头并进,iOS、Windows Phone 与 Android 各个版本以来都有 长足进步
  3. 同上,更好的硬件当然能更好地提高性能
  4. 从 Canvas、SVG、核心 DOM 功能一直以来的性能改进看,仍然有不少优化空间
  5. GC 确实很影响性能,因为 JS 是单线程的,不过,浏览器在进步,而且也可以通过重用 DOM 元素 减少触发 GC。而且 60 fps 在任何平台上都是个不小的挑战,GC 只是其中一个小问题。

讲到第四点的时候提到一个例子,SVG 中的 <path> 绘制,iOS7 比 iOS6 要快200倍,算法从 O(n) 变成了 O(1)。耶,算法拯救世界。

优化 HTML5 中的 video

用过 <video> 标签的同学可能觉得是老生常谈了,要在页面中放视频,准备好 .mp4 和 .ogv 文件,在页面里丢这么一段 HTML:

<video>
  <source src="velocity.mp4">
  <source src="velocity.ogv">
  <object ...><!-- 不支持 <video> 的浏览器 --></object>
</video>

就行了。不过,没那么简单,魔鬼都在细节里。来自 Akamai 的 Will Law 分享 Optimizing the Black Box of HTML <video>

首先,页面上视频比较多,或者比较大,的时候,直接把它放在页面上其实非常有风险,Chrome 会自动 加载视频,如果用户只是看了看页面,没有播放这些视频,带宽就等于是白白浪费了。

可以用 @preload="none"<video> 预加载关掉,但是,这个属性在 iOS 上不管用。所以, Will 提供了更彻底的办法,在视频位置放一张图片,点击图片时再创建 <video> 标签。

在 iOS 上,在 onclick 事件句柄里是能够调用 video.play() 的,不在句柄内就不行啦。

另外,在中间穿插的问答环节中,有个听众提到一件事情,<video> 内部,其实是将视频、流媒体 交给操作系统处理的,所以这里可以通过前端优化的东西比较少。

留念

谢谢公司给的机会,确实是一次大开眼界的经历。

如何写好一篇技术文章

概述

最近总是想写很多东西,真正敲下第一个字的时候又觉得没什么可写的,不知道怎么写,鉴于这种情形发生较多,同时我又坚信万事总是有窍门的,决定总结和思考一下其中的套路。

万事开头难

有些人在写之前会想很多问题,比如应该搭建一个blog还是在一个已经有的blog上写?文章的字体应该用哪种,字号应该选多大?这些问题我也曾经深深的陷入过思考。 曾经为了写blog,我自己写了个blog程序,当我发现写作的工具不够好的时候,又写了Mahua。 因为走过弯路,所以我知道什么才是重点,内容内容!有内容的前提下,保证内容的可阅读性,就够了!

你可以选择一个博客平台,可以使用已经流行过了的轻博客(点点Lofter),甚至QQ空间,人人网的日志,百度空间等等这些都可以。

一颗坚持的心

虽然标题是《如何定好一篇》,但是写东西和其它任何可以掌握的技能都是一样的,需要练习。 写文章,更准确来说写技术文章的好处远远大于它有可能浪费你的那一丁点时间,它可以强迫你总结,巩固自己的知识, 学会观察和思考,学会自律,同时由于放到网上,在被搜索引擎索引后,更能帮助很多和你遇到同样问题的陌生人。 最最重要的是,作为一个IT从业者,你的简历上有一个写了大量技术文章的Blog链接,会加分很多!也会给你带来更多的机会

学人之长

任何学习都是从模仿开始,明确了模仿对象的特征,进步之路就会加速,我们来看看好的文章有哪些共同点。

非常合适的标题

标题往往是读者最先看到的东西,简明扼要的通过标题把文章内容传达出来,让读者第一时间知道,这个东西对自己有没有用, 会不会感兴趣。技术文章标题的套路非常简单。

  • 解决问题类的 :XXX的解决办法、XXX的排查过程
  • 怎么做 : 如何XXX、怎么XXX
  • 介绍东西类: 什么是XXX、XXX简明介绍

比如我要介绍npm,就可以以这样的标题: 《npm:nodejs模块管理程序》

不要试图搞一些太花哨的标题,简单、快速传达出文章内容最重要,如果取了一个很花哨的标题,读者被诱导点进来了,内容干货多还好, 过于平实就容易消耗读者对你的信任。

思路清晰、结构清晰、重点清晰

对于主体的内容,还是分三类来说明

  • 解决问题:问题是怎么发现的,排查问题详细过程,总结反思,是否可以更快发现问题,如何再次避免问题。
  • 怎么做的文章: 为什么要这么做?怎么做?做的过程会遇到哪些问题?分步说明,写详细。总结。
  • 介绍类: 什么是?为什么是它?它的优点?它的缺点?它的原理?同类对比,总结。

主体内容之前可以有一小段的概要,简明补充一下标题概括的内容。 文章内容需要注意:

  • 重点内容重复
  • 尽量把有用信息提前,因为有人可能没有耐心读完全文
  • 简单的、普度的方案放在复杂的、少见的方案之前
  • 操作类的,写明命令或者怎么操作,什么环境操作,明确指出预期结果
  • 合理找点小图片,一图胜千言

图

经常翻看,标点符号、错别字、代码错误、语病、文章样式这些都要注意, 但也不要害怕观点错误或者技术错误,大胆的写,能写清楚,如果有人帮你指正,查资料核实,再改正,会提高很快, 你看我写《如何写好技术文章》,这里面也有很多问题,但我还是厚着脸皮写下去了,:)。

学而时习之

古人云:『少成若天性,习惯如自然』, 古人还云:『学而时习之,不亦说乎』, 不懈的努力,养成多读、多写和多改的好习惯,配合上套路,写文章的能力一定会快速的提高的。


文章来源: 如何写好一篇技术文章
文章的标签: 写作

如果对于这个文章有什么看法,欢迎到来往与我交流↓↓↓↓↓

利用github的api显示当前文章的历史记录

利用github放blog也有一段时间了,一直想做一个小功能,就是展示某个文章的历史纪录,简单来说就是git log 某个文章

两种思路

  • 写一个jekyll的插件
  • js利用github的api

思路1

由于github上的jekyll生成网站时是不允许使用的自定义插件的,这个思路暂时忽略。事实上,可以在本地生成静态网站,然后上传到github上,直接使用gh-pages分支来展示,因为不太想重新建一个repo,这个思路暂时忽略吧。

思路2

利用github的commits api,比如一个文章的commits可以用下面的请求获取, 指定path参数就可以获取特定文件的提交纪录。

$.getJSON('https://api.github.com/repos/jserme/jserme.github.io/commits?path=_posts%2F2013-07-29-lion%E4%B8%8B%E7%9A%84safari6%E5%AF%B9%E7%BA%AF%E6%95%B0%E5%AD%97%E4%BD%BF%E7%94%A8toString%E6%8A%A5%E9%94%99.md',function(data){console.log(data)})

返回的数据格式是一个数组,在每个文章页面加上下面一个id为history的div,然后通过下面的js渲染出对应html,展示效果见每个文章的下方

//获取脚本函数
function loadJs(src, callback){
    var doc = document;
    var head = doc.getElementsByTagName('head')[0];
    var script = doc.createElement('script');
    var re = /^(?:loaded|complete|undefined)$/;

    script.onreadystatechange = script.onload = script.onerror = function() {
        if (re.test(script.readyState)) {
            callback();
            script.onload = script.onerror = script.onreadystatechange = null;
            script = null;
        }
    }

    script.src = src;
    script.async = true;

    head.insertBefore(script, head.firstChild);
}

loadJs('/js/jquery-1.7.2.min.js', function(){
    loadJs('/js/md5.min.js', function(){
        //取到文章的路径,追加到请求地址上
        var articlePath =location.href.match(/[^\/]\/([^\/].*?)$/)[1].replace(/\//g, '-').replace(/html$/,'md');
        var api = 'https://api.github.com/repos/jserme/jserme.github.io/commits?path=_posts%2F';
        var tmpl = '<div class="article">\
                        <span class="datetime">{date}</span>\
                        <span>\
                            <image src="{src}" title="{author}">\
                            {message}\
                        </span>\
                    </div>'
            var gravstarurl = 'https://1.gravatar.com/avatar/{md5hash}?s=16'; 
            $.getJSON(api + articlePath,function(data){
                if( data.length == 0 ){
                    $('#history').html('暂无历史纪录 :)');
                return false;
            }

            var history = '';
            $.each(data, function(i, v){
                var avatar = gravstarurl.replace('{md5hash}', md5(v.commit.author.email));
                history += tmpl.replace('{src}', avatar)
                               .replace('{date}', v.commit.author.date.replace(/T.*Z/,''))
                               .replace('{message}', v.commit.message);
                });

            $('#history').html(history);
        })
    });
});

详细的文件可以查看这里


文章来源: 利用github的api显示当前文章的历史记录
文章的标签: github

如果对于这个文章有什么看法,欢迎到来往与我交流↓↓↓↓↓

如何设计出色的 JavaScript API

原文:Secrets of Awesome JavaScript API Design, YouTube, PDF其他翻译版本

设计是一个具有普遍性的概念。正如牛津英语字典中所定义的“拟定执行计划或执行方案”,设计是将艺术、体系结构、硬件等结合到一起的一条主线。软件设计,特别是 API 设计,也是如此。然而在软件开发中,往往很少有人会注意到 API 设计,这是因为相比于设计应用程序的 UI 或设计终端用户体验,为其他开发人员编写代码似乎没那么重要。

但是 API 设计—库所提供的公共接口,向开发人员暴漏功能和特性—与 UI 设计一样重要。事实上,两者都是改善应用程序的用户体验的主要方式。应用程序的 UI 关注的是终端用户的体验,应用程序的 API 关注的则是开发人员的体验。因此,应该对 API 设计和 UI 设计给予同等程度的照顾和关注。就像我们重视 UI 的实用、简洁和优雅,我们也应该追求 API 的实用、简洁和优雅。

API 设计,以及本文所述的 JavaScript API 设计,向所有开发人员提出了一个独特的挑战,无论是构建公开库还是内部库。JavaScript 的动态特性,库使用者的匿名制,以及不明确的需求,对于 API 设计者来说都是艰巨的挑战。虽然好用的 API 设计没有捷径可走,但是我们可以从当下流行的 JavaScript 库中提取一些设计原则。

API 设计:善恶之争

对于使用 API 的开发人员和你自己,差劲的 JavaScript API 设计的代价是昂贵的。差劲的设计会导致浪费:浪费开发人员的时间,因为他们很难弄懂一个接口;浪费 API 作者的时间,因为她需要处理开发混乱带来的额外支持和返工。几乎所有的 API 在设计之初都是为了抽象通用功能以简化使用,从而节省时间,而一个差劲的 API 则会使你自己和你的用户怀疑这个库究竟是否是一个好主意。

另一方面,良好的 API 设计可以实现抽象这一目标,同时也应该是自描述的。如果一个 API 被良好地设计,用户可以快速直观地利用你的工作成果,而且不需要经常参考手册和文档,不需要频繁访问技术支持和问答网站。对于需要开发人员花费大量时间来开发的特性,你也可以把它们封装起来以节省开发人员的时间。良好的设计不仅可以节省开发人员的时间,也让他们看起来更加聪明和可靠。通过让你的用户看起来聪明能干、感觉良好,也让你看起来更加牛逼。

在 JavaScript 中,API 设计尤为重要

不管是什么编程语言或框架,API 设计都非常重要,而且对于 JavaScript,API 设计的风险要比许多其他语言更高。首先,JavaScript 作为一门动态的、延迟绑定的编程语言,没有编译器来充当安全网的角色,也没有基本的单元测试来发现代码中的错误。这时,Linting 或验证框架(例如 JSLintJSHint)可以帮助我们。这些工具可以帮助发现 JavaScript 代码中的常见错误,但是当开发人员使用 API 时,这些工具无法捕获可能出现的错误。

如何构建一个有设计感的 API,帮助库用户掉进俗话所说的“pit of success”,这一切都取决于你。这意味着你的库对于开发人员是舒适和友好的,当开发人员与你的代码交互时,还需要提供积极的支持并建立信任。

“falling into the pit of success” 最好的例子之一是 jQuery 用 CSS 选择器语法来获取 DOM 元素。例如,如果我想要获取所有包含了类样式 blogPostarticle 元素,我可以在 jQuery 中这么做:

$("article.blogPost").fadeIn();

CSS 选择器 article.blogPost 使用了完全相同的语法,如下所示,这并非巧合:

article.blogPost {
  border-radius: 10px;
  background-color: salmon;
  box-shadow: 0px 0px 10px 2px #ccc;
}

jQuery 选择器引擎的设计,使像我这样的开发人员可以把对 CSS 选择器的既有理解映射到与引擎的基本交互。因此,我可以立即明显地提高生产力,反之如果 jQuery 要求我使用一种全新的、特定用途的语法,显然不会有这种效果。

我们可以从像 jQuery 这样的库获得灵感,并应用到我们自己的设计中。然而,灵感不等于全盘复制,如果仅仅基于他人的某个灵感来设计 API 的话,将不分好坏全盘继承。反之,如果我们能用好的 JavaScript API 设计作为例子,来证明那些其他领域中发现的原则,我们就可以建立一套适用于任何场景的 API 设计框架。

出色 JavaScript API 的秘诀

虽然软件不能像绘画或建筑那样从视觉的角度来评估质量,但我们仍倾向于使用与物理介质一样的形容词来描述软件。例如我们经常听到有人用“优雅”或“漂亮”来称赞某个 API。既然原本用于描述视觉媒体的术语可以用于描述 API,那么视觉媒体的原则也可以应用于软件设计。

在本节中,我将介绍艺术领域中常用的的 4 项设计原则,并把它们应用到 API 设计中:

  • 一致 & 协调
  • 平衡
  • 相衬
  • 重点突出

相衬:犹相称。配合得当;相配合适。

对于每个设计原则,我将列出一个或多个示例来说明,示例均来自于流行的 JavaScript 库的 API。

原则1:一致 & 协调

在艺术上,一致性是一件作品背后不可或缺的概念,使得设计者可以把各种事物汇集成一个连贯的整体。另一方面,协调性则是指作品中相似元素的布局,使得作品从整体上产生一种简洁的感觉。

对于 API 设计师来说,这些原则可以应用在库中相似或一致的元素上。以 Kendo UI 为例,一个用于创建富 WEB 应用的 JavaScript 框架。Kendo UI 提供了一系列 UI 组件,它们都可以使用相似的语法来初始化。例如,如果我想从一个无序列表创建一个 TreeView,只需调用以下方法:

$("ul.tree").kendoTreeView({ /* Configuration goes here */ });

Kendo UI TreeView Widget

另外,如果我想从一个列表创建一个 PanelBar,只需调用另一个稍有不同的方法。

$("ul.panel").kendoPanelBar({ /* Configuration goes here */ });

Kendo UI PanelBar

Kendo UI 的组件通过使用一致的 kendoX 语法,提升了一致性和协调性。更重要的是,它依赖于封装了 DOM 元素的 jQuery 对象,并基于 jQuery 对象扩展了额外的、协调的附加层,这样一来,任何已经熟悉 jQuery 的开发人员都将从中获益。通过使用数百万开发者所熟悉的“方言”,Kendo UI 促进了跨库协调性。

另一个关于协调性的案例是 Backbone 的 [object].extend 语法,该语法用于创建新对象,继承和扩展 Backbone Backbone ModelsViewsCollectionsRouters 的功能。为了创建一个新的 Backbone Model,可以像下面这样实现,创建一个 Backbone 完全支持的 Model 对象,同时还可以按照应用程序的需求自定义实现:

var Book = Backbone.Model.extend({
  initialize: function() { ... },
  author: function() { ... },
  pubDate: function() { ... },
});

一致性和协调性的目的在于向 API 新手传达友好和舒适的感觉。虽然 API 的功能不同,但是通过相同或相似的“方言”,可以大大降低开发人员采用新工具的门槛。

原则2:平衡

第二个原则是平衡,布置元素时要不能让作品的某个部分过于出彩而是其他部分黯然失色,或者让人感觉作品不稳定。在艺术上,平衡与视觉权重(吸引力)有关。即使作品是不对称的,然而只要这种不对称遵循了某种模式,作品仍然会给人以平衡的感觉。在 API 设计中,平衡特指代码的视觉权重和可预测性。

平衡的 API 让人觉得其组成部分不分彼此、浑然一体,因为它们或者行为相同,或者互补地帮助用户完成目标。以此类推,用户籍由一个小示例就可以推断出 API 的用法。例如 Modernizr功能测试项。该库通过以下方式实现了平衡:a) 使用与 HTML5 和 CSS 一致的概念和 API;b) 每个测试项统一返回 true 或 false:

// All of these properties will be 'true' or 'false' for a given browser
  Modernizr.geolocation
  Modernizr.localstorage
  Modernizr.webworkers
  Modernizr.canvas
  Modernizr.borderradius
  Modernizr.boxshadow
  Modernizr.flexbox 

Modernizr

通过访问一个测试项,开发人员就可以知道访问其他测试项所需的全部知识,Modernizr 的强大之处正在于它的简单。并且,每次编写或阅读与 Modernizr 交互的代码时,都有着同样的视觉权重。不管在什么场景下,当我使用 Modernizr 时,外观和感觉都是一致的。另一方面,如果 Modernizr 要增加一个 API 来检测是否支持 Canvas,也不会失去平衡性。不仅新 API 不会影响 Modernizr 的视觉权重,即使现在 Modernizr 的功能和适用范围已经扩大,也不会阻碍我和 API 交互时的可预测性。

另一种开实现平衡性、可预测性的方式是,依靠发人员已经熟悉的概念。一个明显的例子是 jQuery 的选择器语法,它的 DOM 选择器引擎直接映射了 CSS1-3 选择器:

$("#grid") // Selects by ID
$("ul.nav > li") // All LIs for the UL with class "nav"
$("ul li:nth-child(2)") // Second item in each list

通过使用熟悉的概念并映射到自己的库中,jQuery 避免了创建一套新的选择器语法,同时也创建了一种机制,让新用户可以利用这些可预测的 API 立即提高生产力。

原则3:相衬

第三个原则是相衬,它用来衡量作品中元素的大小和数量。并不是说小 API 就是好 API,相衬性所衡量的大小与 API 的用途(功能)有关。一个具备相衬性的 API,它的外观应该与它的能力范围相匹配。

例如 Moment.js,一个流行的日期解析和格式化库,可以认为是相衬的,因为它的 API 很简洁,它的用途(功能)简单明确,两者相辅相成。Moment.js 用于处理日期,因此,它的 API 被设计为一系列可以处理 JavaScript Date 对象的便捷函数:

moment().format('dddd');
moment().startOf('hour').fromNow();

Moment.js

对于像 Moment.js 这样有针对性的库,保持 API 专注和小巧很重要。对于更大、更磅礴的库,API 的大小则应该反映库自身的功能。

就拿 Underscore 来说,作为一个通用工具库,Underscore 提供了大量的便捷函数,用以帮助开发人员处理 JavaScript 集合、数据、函数和对象。它的 API 比 Moment.js 这样的库更多,但 Underscore 仍然是相衬的,因为每个函数都在协助库实现目标。考虑一下下面的例子,前两个演示了如何用 Underscore 处理数组,最后一个演示了如何处理字符串:

_.each(["Todd", "Burke", "Derick"], function(name){ 
  alert(name); 
});

_.map([1, 2, 3], function(num){ 
  return num * 3; 
});

_.isNumber("ten"); // False

Underscore.js

随着库的成长,保持相衬性变得愈发重要。必须确保添加到库中的每个特性和函数都是在加强库的目标。像 Kendo UI 这样庞大的库,一个庞大的目标并不意味着需要添加每个特性。即使是通用的对象和特性也应该证明其价值,才能被包含到库中。例如,Kendo UI数据源组件(DataSource)可以用于查询和处理远程数据:

var dataSource = new kendo.data.DataSource({
  transport: {
    read: {
      url: "http://search.twitter.com/search.json",
        dataType: "jsonp",
        data: { q: "API Design" }
      }
    },
  schema: { data: "results" }
});

乍看之下,上面的代码似乎是一个自定义的数据源,已经超出了库目标的范围。然而,今天的 Web 组件中普遍存在动态数据,通过引入数据源(DataSource),Kendo UI 得以用一致的、舒适的范式(方式)来处理远程数据。

让 API 成为名副其实的杂货铺,对库的成长是一种危害,但这还不是唯一的危害。如果掉入不利于库成长的陷阱,或者限制库的范围,同样会危害库的成。

不控制 API 成长的最佳反面示例,是 jQuery 的入口方法 jQuery()。无数像我一样的开发人员喜欢 jQuery,但是这个入口方法实在是有些混乱,从 DOM 查找到封装 DOM 元素为 jQuery 对象,提供了不下于 11 种独立的处理分支(重载 overload)。

译注:jQuery 1.7.1,构造函数 jQuery() 的 7 种用法12 个有效分支

For the most part, these are loosely related features that have been stuffed into one API. Taken on the whole, jQuery is a large library and can be considered reasonably proportional. The jQuery method, on the other hand, represents what can happen when we attempt to force functionality into a single interface, without care for proportion. 塞入 jQuery() 的大多数特性(功能)是松散的,但 jQuery 作为一个大型库,应该考虑适度的相衬性。另一方面,如果我们尝试把 jQuery() 分解为独立的接口,就能清晰的描述可能发生的行为,不必再担心相衬性。

译注:从设计的角度看,把多个功能塞入 jQuery() 确实相当丑陋,维护和阅读都不容易,但是对使用者非常方便和友好。

如果你发现自己正在把一个不相干的特性塞入一个既有方法,或者正在考虑把一个感觉不自然的函数重载合理化,那么你可能需要松开皮带让库透透气了。这样一来,你的用户会比较容易适应一个可自描述的新函数,否则的话,他们将不得适应对既有方法的再次重载。

原则4:突出重点

在艺术上,突出重点是指通过使用对比,使作品的某个方面凸显出来成为焦点。在许多 API 中,焦点可能是锚定库的入口方法或主方法。突出重点的另一个示例可能是“链式”或流式 API,它可以突出库所使用的中心对象。jQuery 倾向于让它的众多函数返回一个 jQuery 对象,下面的例子演示了 jQuery 是如何用这种方式突出重点的:

译注:锚定_百度百科

$('ul.first').find('.overdue')
  .css('background-color','red')
  .end()
  .find('.due-soon')
  .css('background-color', 'yellow');

对于许多现代库来说,关于突出重点的另一个极佳例子是可扩展性:对于库所缺失的功能,库作者通过提供一个工具,让你可以自行添加功能。

一个典型的例子是 命名空间 jQuery.fn ,它是无数插件和补充库的通用扩展点:

(function($) {
  $.fn.kittehfy = function() {
    return this.each(function(idx, el) {        
      var width = el.width,
        height = el.height;
      var src= "http://placekitten.com/";
      el.src= src + width + "/" + height;
    });
  };
})(jQuery);

可扩展性的另一个例子是 Backbone 的 “extend” 函数,我们已经在这边文章看过了:

var DocumentRow = Backbone.View.extend({
  tagName: "li",
  className: "row",
  events: {
    "click .icon": "open",
    "click .button.edit": "openEditDialog"
  },
  render: function() { ... }
});

Backbone.js

增强可扩展性可以突出重点,因为它使人们意识到这样一个事实:既有的库并不意味已经万事俱备,同时它也鼓励人们向库中添加符合自身需求的功能。一旦库开始鼓励扩展,不仅会开启新的功能,原有的功能也将受益。最好的例子之一是 Backbone.Marionette 框架,一个扩展自 Backbone 的库,旨在“简化大型 JavaScript 应用程序”。若不是 Backbone 的可扩展性,Marionette 将很难实现。因此,如果有可能的话,请尽量增强可扩展性。

API 设计:不仅仅适用于库作者

如果你不是某个 JavaScript 库的作者,而是 JavaScript 应用开发人员,是库的实施者,你可能会觉得本文中的原则并不适用于你。毕竟我们在听到“API”时,常常想到的是第三方库,就像我在本文中提到的那些例子。

然而事实上,API,顾名思义,不过是封装一些功能以供他人使用的一个接口。在这里,我要用一句概括性的话强调一个重要观点:编写模块化的 JavaScript 代码是为了实用,与使用者的数量无关。

你自己的 JavaScript 代码暴露接口给其他人,这种行为与本文中提到的库没有什么不同。你无须成为一名公开库的作者,就可以考虑 API 设计并应用本文中的原则,即使你的代码的用户数很小,而且仅限于团队内部,或者即使你构建的是一个私有库。这种刻意的 API 设计只要能使一个用户受益,就能使无数人受益。

因为 API 设计代表着开发人员的用户体验,所以它和面向终端用户的 UI 设计同样重要。我们通过学习原则,以及好的和坏的界面示例,逐渐学会了 UI 设计,我们也可以通过同样的方式,深入学习如何设计好的 API。通过应用本文的四个原则和你发现的其他原则,可以设计出出色 API 来取悦你的用户,并且可以帮助你的用户实现出现的终端用户体验。

比别人多做一点点

译注:原文标题是“GOING THE EXTRA MILE”,源出《圣经·马太福音》第五章“山顶布道”,耶稣劝告门徒:“Whosoever shall compel thee to go a mile, go with him twain.”(有人强逼你走一里路,你就同他走二里。)

对于我们学习 API 设计来说,本文所列出的原则仅仅是一个开始。在物理介质领域,尚有许多其他的原则和方法,可以启发我们如何设计 API,我鼓励你去学习这些原则,并且从流行的 JavaScript 库中寻找例证,例如本文前面提到的那些。

三省吾身 谓予无愆

原文标题是“PITFALLS TO AVOID”,可直译为“避免失误”。

  • 设计 API 时不要只考虑你自己的需求。为其他开发人员设计 API 的最佳方式是与他们一起进行设计。尽早公开你的作品,并且经常要基于其他人的反馈重复修改(迭代)。
  • 为你的库考虑新接口时,要留心观察那些导致可能库失去平衡性的接口,它们可能在行为上与其他接口不一致,或者在目标上超出了库的范围。
  • 为接口设计太多的重载是引入不相衬性的最快方式。留心观察入口方法,以及在方法重载背后隐藏了功能的接口。

上士闻道 勤而勉之

原文标题是“THINGS TO DO”,可直译为“要做的事情”。

  • 为了培养一致性和协调性,向你的用户提供友好和舒适的感觉,需要考虑把相同或相似的元素放在一起。
  • 为了保持平衡性,需要确保库中每个接口的行为保持一致,或者有着一致的目标。
  • 随时留意 API 的相衬性,确保库中的每个接口符合预期的目标,并且没有冗余元素存在。
  • 考虑使用(适当范围的)入口方法、链式或流式 API,以及可扩展性,以突出库的重点。

扩展阅读

你还见过那些好的(或坏的)API 设计例子?请告诉我们,或者看看别人怎么所

Reading Color


中秋的时候我们小组在杭州的 Central Perk 做了一次分享,大家说说自己最近的动态以及感兴趣的东西,最后提到了色彩相关的内容。这一篇东西主要是我自己 YY 的,关于如何从 16 进制或者 RGB 表示的颜色值大致推其表示的色彩。

Format

首先简单说明一下颜色的表示方式。在 web 前端 CSS 代码里边,过去流行使用 hexadecimal color notation (HEX,16进制颜色) 或者是 RGB 的方式。例如对于绿色,多数情况我们会写成 #00FF00 或者 rgb(0, 255, 0)。在 CSS3 里边,新增了以 HSL (hue, saturation, lightness) 表示颜色的方式,刚才的绿色就可以写成 hsl(120, 100%, 50%)。在 Photoshop 或者 Illustrator 里边,可以使用 HSB 方式来描述颜色。HSB 和 HSL 是类似的表示方式,这里的 B 指的是 Brightness。

至于 HSB 和 HSL 两者的区别,引用维基百科的解释(HSB 和 HSV 模式的在数值上是一样的):

二者在数学上都是圆柱,但 HSV(色相,饱和度,色调)在概念上可以被认为是颜色的倒圆锥体(黑点在下顶点,白色在上底面圆心),HSL 在概念上表示了一个双圆锥体和圆球体(白色在上顶点,黑色在下顶点,最大横切面的圆心是半程灰色)。注意尽管在 HSL 和 HSV 中“色相”指称相同的性质,它们的“饱和度”的定义是明显不同的。


fig.1 HSV and HSL color model from Wikipedia

 

至于 HSB 和 HSL 哪种更“好”,估计就跟讨论 Mac OS X 和 Windows 哪个更好一样吧。继续引用维基百科:

对于一些人,HSL 更好的反映了“饱和度”和“亮度”作为两个独立参数的直觉观念,但是对于另一些人,它的饱和度定义是错误的,因为非常柔和的几乎白色的颜色在 HSL 可以被定义为是完全饱和的。对于 HSV 还是 HSL 更适合于人类用户界面是有争议的。

就我个人而言,我更习惯 HSB。所以后面的部分内容是专门针对 HSB 来写的。

 

Conversion

虽然 HSB 和 HSL 两种表示方法有些区别,但是它们的值都是 RGB 的简单变换。在维基百科上有详细的转换规则,包括 RGB to HSB,RGB to HSL,HSB to RGB,HSL to RGB。为了方便后面的说明,把这里需要的 RGB to HSB 的转换公式贴一下。

注意,在 CSS 里边用 rgb(0, 255, 0) 描述颜色时,这三个数值范围是 0-255 之间的整数。但在下面的公式里,把这三个值转成了 0-1 之间的实数。 设 max 是 r,g,b 中最大的,min 则是它们当中最小的。


fig.2 RGB to HSV formula

 

计算结果里边 h 的范围是 0(含)-360(不含),s 和 v(b) 的范围是 0-1,包括 0 和 1。

 

Color Wheel

上面的转换结果得到的 h(Hue) 值是 0-360 之间的一个数,刚好是一个圆周。人眼可见光谱所包含的色彩就可以使用这样一个颜色轮盘来展现。


fig.3 color wheel

 

0° 为红色,顺时针为正向,120° 为绿色,240° 为蓝色,再转过 120° 回归到 0°。在 180° 位置上的青色是红色的反色。正向旋转 120° 到达 300° 为洋红,它是绿色的反色。继续正向旋转,过 360° 回归之后到达 60° 为黄色,它是蓝色的反色。

也就是说,青色是吸收了红色,反射绿色和蓝色的结果色;洋红是吸收了绿色,反射红色和蓝色的结果色;黄色是吸收了蓝色,反射红色和绿色的结果色。

如果在 Photoshop 里边打开上面这个颜色轮盘,给它加一个 Hue/Saturation 调整图层,把 Hue 滑块拖到 -60,那么上面这个轮盘的颜色就会顺时针移动 60°,图像上的黄色会变成红色,绿色变成黄色,青色变成绿色,蓝色变成青色,洋红变成蓝色,红色变成洋红。


fig.4 color wheel rotated -60 degrees using hue/saturation in Photoshop

 

Inferring the Color

如果你数学足够好,心算足够快,那么按照上面的公式,一眼分辨出 16 进制颜色值表示的具体色彩完全是没有问题的。

下面稍微慢一点,随便写一个颜色来分析一下,例如 #AE35D4。

这里红色值为 AE,A0 是160,那么第一反应红色会在 170 左右;绿色值为 35,转成 10 进制大约是 50,蓝色值最大,为 D4,大概是 210。

因此蓝色值非常大,比最小的绿色值大得多,那么绿色和蓝色的比值很小,因此饱和度就会比较高。蓝色和红色的叠加会比较明显,但偏向蓝色。之前说了蓝色和红色叠加出现的是洋红,往蓝色方向偏转,那么会是一个紫红色。RGB 三者的最大值为 D4,说明 Brightness 值很高,是一个明亮的紫红色。

 

Wrapping Up

上面的分析部分可以当成是个无聊的人闲着没事做,大半夜的一个人 YY 个东西 happy 一下哈。随便写个颜色,自己猜猜,再找个工具贴进去核对,发现居然差不多诶,就跟读书时候对上了所有的答案一样。

不过想熟练地使用类似 Hue/Saturation 这种调整工具的话,一点点对于色彩的基础知识还是有很大帮助的。

最后给个快捷键。在 Photoshop 的偏好设置里边 (CS5+),General 选项卡下有一个选项叫做 HUD Color Picker,默认的选项应该是 Hue Strip,我喜欢调成 Hue Wheel。


fig.5 HUD color picker options

 

这个选项的作用是,当你选中任何一个绘图工具的时候,在 Mac 上按住 Command + Option + Control,单击鼠标左键,在 Windows 上按住 Shift + Alt,单击鼠标右键,可以出来这个颜色选择轮盘,在用大屏幕画图的时候快速调整颜色比较方便。


fig.6 HUD color picker

CSS Flexbox Intro


Intro

最近看东西比较拖沓,这个 Flexbox 应该已经有很多类似的文章了,只是我拖了几个月才断断续续把基本的内容学完,还是要记录一下的。

 

Overview

网页的布局从只有 HTML 代码,到 CSS 盒模型和浮动,再后来有了绝对(absolute)和固定(fixed)定位。对于大多数的设计稿,使用浮动或者绝对定位基本能够实现效果。不过后续要调换某些区块的位置,或者把布局从两列变成三列之类的,很可能就要重新调整 HTML 结构了。

在 flex 布局模型里,若父容器是一个 flex container (伸缩容器),它的第一级子元素能够方便地在水平或竖直两个轴向调整位置和相对尺寸。flex 伸缩容器的嵌套则为创建复杂的布局提供更多的灵活性。

使用 Flexbox 的方法也很简单。首先选定一个父元素,将其设为 flex container (伸缩容器),那么它的第一级子元素就成为了 flex items (伸缩项目)。此时,就可以在父元素上设置各种属性,来控制子元素的排列方向和位置,尺寸和间距,也可以在子元素上单独调整展现顺序,和位置尺寸属性。

这里说的比较笼统,后面的例子会讲的比较明确。

Flexbox 先后出现过 3 种语法,Chris Coyier一篇文章讲述了相关的内容。下面的例子是在新版的 Chrome 里面运行的,相应的代码只写了最新的不带任何 vender prefix 的属性。

IE 是在 11 版本开始支持最新的语法,IE10 使用的还是 2011 年的语法,也被称为 “tweener” 语法,关于这个语法的更多内容,可以在 MSDN 上查到详细的说明。

Can I Use 网站上能够查到当前的兼容情况。

 

Getting Started

假设当前的父容器下有 4 个子容器,HTML 结构如下:

<section class="flex-container">
  <div class="box"><h3>one</h3></div>
  <div class="box"><h3>two</h3></div>
  <div class="box"><h3>three</h3></div>
  <div class="box"><h3>four</h3></div>
</section>

设置上述 section 元素为 flex container 的方法很简单,将其 display 属性设置为 flex 即可。

.flex-container {
  display: flex;
}


fig.1 flexbox

 

首先需要说明两个概念,main axis (主轴) 和 cross axis (侧轴)。影响这两个轴的属性是 flex-direction,可选的值有 row (default),row-reverse,column,column-reverse。

当选择 row 相关的属性值时,main axis (主轴)是横向的,cross axis (侧轴)是纵向的;


fig.2 main axis set to horizontal

 

当选择 column 相关的属性值时, main axis (主轴) 主轴是纵向的,cross axis (侧轴)是横向的。


fig.3 main axis set to vertical

 

就上述代码而言,section 元素的 flex-direction 属性值为默认的 row,因此这 4 个 div 的排布是水平的。假设将其设为 column,那么 4 个 div 的则是竖向分布的。

.flex-container {
  display: flex;
  flex-direction: column;
}


fig.4 flex-direction set to column

 

在前面横向展现的例子里边,父容器的宽度是确定的,如果容器下包含更多的元素,那么默认将会溢出父容器。


fig.5 overflow

 

flex-wrap 属性的 wrap 值可以实现超出尺寸换行的效果。

.flex-container {
  display: flex;
  flex-direction: row;
  flex-wrap: wrap;
}


fig.6 flex-wrap set to wrap


对于 flex-direction 和 flex-wrap 这两个属性,可以合并到 flex-flow 里面。

.flex-container {
  display: flex;
  flex-flow: row wrap;
}

 

Flexibility

对于父容器下的 flex items,它们之间相互的尺寸和间距关系可以通过 flex 属性来设定。基本格式如下:

.flex-item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

flex-grow 的值是一个数字,标准里面是这么写的:

Represents how much the flex item will grow relative to the rest of the flex items in the container once positive space has been distributed. If left out, it defaults to ‘1’.

flex-shrink 的值也是一个数字,标准里边的描述就是把上面的 positive space 改为 negative space.

flex-basis 默认是0,可以指定为一个宽度,或者设为 auto。标准里的定义是这样的:

Represents the initial main size of a flex item, before free space is distributed.

看定义感觉不是很直观,下面的代码展现了 flex-grow 和 flex-basis 的作用。至于 flex-shrink,用的会比较少一些。

还是之前的HTML结构,但是 4 个 div 新增了相应的 flex1 和 flex2 属性。

<section class="flex-container">
  <div class="box flex1"><h3>one</h3></div>
  <div class="box flex1"><h3>two</h3></div>
  <div class="box flex2"><h3>three</h3></div>
  <div class="box flex1"><h3>four</h3></div>
</section>

对于 flex-grow,这里设置第三个 div 的值为 2,其他为 1,那么在父容器的可用空间里面,这 4 个子元素的整体宽度将是 1:1:2:1 的关系。

.flex-container { display: flex; }
.flex1 { flex: 1 1 0; }
.flex2 { flex: 2 1 0; }


fig.7 flex-grow

 

如果在上述基础上,把 flex 属性的最后一项,即 flex-basis 设置为 auto,那么浏览器将会在扣除元素内的文字宽度(即 initial main size)之后,把剩余的部分进行 1:1:2:1 的分割,下面这个图应该会解释的比较清除。

.flex-container { display: flex; }
.flex1 { flex: 1 1 auto; }
.flex2 { flex: 2 1 auto; }


fig.8 flex-basis

 

Alignment

涉及元素的排列时,之前提到的 main axis (主轴)和 cross axis (侧轴)的概念就比较有用了。这里讲到的几个属性会因为主侧轴的方向不同,而形成不同的效果。

justify-content

这个属性用在 flex container 上,控制 main axis (主轴)方向的子元素分布。可选的值有 flex-start (default),flex-end,center,space-between,space-around。

当 main axis(主轴)方向是水平向,用 w3.org 标准里边的图片来说明一下这 5 个值的区别。


fig.9 justify-content

 

进一步解释一下 space-between 和 space-around 在展现上的区别。

假设这里继续使用 Getting Started 里边的那个 HTML 结构,给 flex container 设置 justify-content 属性值为 space-between,是这个效果。

.flex-container {
  display: flex;
  justify-content: space-between;
}


fig.10 justify-content set to space-between

 

可以看到中间的间距是平分的。若设置为 space-around 的话,在左右两侧分别会有长度为一半中间间距的留白。

.flex-container {
  display: flex;
  justify-content: space-around;
}


fig.11 justify-content set to space-around

 

如果把主轴改为纵向,即设置 flex-direction 为 column,那么 justify-content 属性就是控制子元素的纵向分布。这里展示一个效果,就是我所在部门的产品经理非常喜欢的垂直居中。

.flex-container {
  display: flex;
  height: 500px;
  flex-direction: column;
  justify-content: center;
}


fig.12 justify-content center with flex-direction column

 

align-items

控制 flex container 的 cross axis (侧轴)方向子元素分布,要用 align-items 这个属性。可选的值有 flex-start,flex-end,center,baseline,stretch (default)。

当 cross axis (侧轴)方向是竖直方向,用 w3.org 标准里边的图片来说明一下这 5 个值的区别。


fig13. align-items

 

这里默认的属性值是 stretch。这也是为什么之前把 flex-direction 设置为 column 时,观察所有截图里的子元素,会撑满整个父容器宽度的原因。

此外 baseline 是个很有意思的属性,对于不同字号的内容,可以按它们的文本基线对齐。

作为对比,这里仍然把主轴改为纵向,调整父容器高度值为 auto,不改变其 justify-content 属性,但把 align-items 设为 center,关注一下和 fig.12 的区别。

.flex-container {
  display: flex;
  flex-direction: column;
  align-items: center;
}


fig.14 align-items center with flex-direction column

 

align-self

上述两个属性都是设置在 flex container 上面的,对于子元素 flex items,也有一个 align-self 的属性,它的可选取值和 align-items 是相同的,但多出一个默认值 auto。也就是说对于子元素,可以覆盖其对父容器侧轴对齐属性的继承,单独设置其对齐方式。

这里继续沿用上面最后一个例子,给文字为 Three 的这个 div 元素新增一个 class,self。如果设置其 align-self 属性为 stretch,将得到这个效果。

.flex-container {
  display: flex;
  flex-direction: column;
  align-items: center;
}
                                             
.self {
  align-self: stretch;
}


fig.15 align-self

 

margins

在 flex 布局里面,所有方向的 margin 都不会融合。

The margins of adjacent flex items DO NOT COLLAPSE.

下面这个示例,每个子元素的上下方向 margin 都是相互接触的,但是它们没有融合。

.flex-container {
  display: flex;
  height: 500px;
  flex-direction: column;
}
                                          
.box {
  margin: 20px;
}


fig.16 margins do not collapse

 

另外 margin 的 auto 值的效果很有意思,当 margin: auto; 和 justify-content 或者 align-self 同时使用的时候,所有可用的自由空间都会优先分配给对应方向的 auto margin。

下面这个示例使用 Getting Started 里边相同的 HTML 结构,但是给最后一个内容为 Four 的 div 元素添加一个值为 right 的 class。

.flex-container { display: flex; }
.box { margin: 20px; }
.right { margin-left: auto; }


fig.17 margin auto

 

align-content

之前提到过,当父容器的宽度或高度有限,子元素又比较多,并且设置了 flex-wrap 属性位 wrap 时,将会出现换行的效果。这时如果要控制多行的排布,就要用到 align-content。它的可选值有:flex-start, flex-end, center, space-between, space-around, stretch (default)。

下面的示例继续使用文章一开始 Getting Started 里边的HTML结构,但是把子元素增加到 9 个,同时限制父元素宽度,以达到多行的效果。默认的展现是这样的 stretch 效果。

.flex-container {
  display: flex;
  width: 380px;
  height: 500px;
  flex-flow: row wrap;
  justify-content: space-around;
}


fig.18 multiple lines

 

如果想要所有的内容向上靠,则需要设置 align-content 为 flex-start。

.flex-container {
  display: flex;
  width: 380px;
  height: 500px;
  flex-flow: row wrap;
  justify-content: space-around;
  align-content: flex-start;
}


fig.19 align-content set to flex-start

 

只有在出现多行的时候,align-content 才会起作用。效果和 align-items 肯定是有区别的,下面对比一下上述情况若 align-items 为 flex-start 的效果。

.flex-container {
  display: flex;
  width: 380px;
  height: 500px;
  flex-flow: row wrap;
  justify-content: space-around;
  /*align-content: flex-start;*/
  align-items: flex-start;
}


fig. 20 align-items set to flex-start

 

Order

单纯用 flex-direction 达到的排列效果有限,对于多个子元素的展现顺序,可以通过 order 属性来调整。默认 flex items 的 order 值为 0,正负数都是合法的属性值。

下面的 HTML 结构默认的排列是从左到右依次为 one,two,three,four。

<section class="flex-container">
  <div class="box one"><h3>one</h3></div>
  <div class="box two"><h3>two</h3></div>
  <div class="box three"><h3>three</h3></div>
  <div class="box four"><h3>four</h3></div>
</section>
.flex-container {
  display: flex;
}


fig. 21 default order

 

如果想要按照 three,four,two,one 的顺序展现,就可以这么调整 order。

.one { order: 3; }
.two { order: 1; }
.three { order: -2; }
.four { order: 0; }


fig. 22 custom order

 

order 的用法很简单,但有一点需要注意,就是如果和 flex-flow 以及 justify-content 同时使用的话,最终的效果是叠加的。

例如下面的示例,用了好几个属性来调整展现顺序,最后的效果就跟不写这些属性是一样的。

.flex-container {
  display: flex;
  flex-flow: row-reverse;
  justify-content: flex-end;
}
                  
.one { order: 3; }
.two { order: 2; }
.three { order: 1; }
.four { order: 0; }


fig. 23 flex-flow, justify-content and orders

 

Nesting

上面所有的示例都是简单的父容器设置为 flex container,子元素成为 flex items 的单层关系。flex items 可以继续被设置为 flex container,实现 flex 嵌套。嵌套应该很容易理解,并且每一个 flex container 的 order 都是独立的。

在实际应用中,把整个 body 元素设为一个 flex container,内部又有其他 flex 元素嵌套,是完全可行的,并能够用这样的嵌套实现各种布局。

 

Resources

  1. CSS Flexible Box Layout Module

  2. Flexbox - Fast Track to Layout Nirvana?

  3. A Complete Guide to Flexbox

面向切面编程简介

面向切面编程(AOP)是一种增强对象和方法的行为的技术,可以无侵入地增加功能。AOP 允许你从“外部”增加新行为,以及合并和修改既有的行为。

虽然有多项技术可以用于增加或合并行为,例如继承、组合和代码,但是 AOP 在许多情况下被证明更具灵活性和低侵入性,可以是你技术工具箱的一项有益补充。

让我们用一个简单的例子来看看它是如何工作的。

假设我们的代码中含有下面的简单对象。

function Thing() {}

Thing.prototype.doSomething = function(x, y) {
    var result;

    // compute some result using x and y

    return result;
};

假设我们像下面这样,在应用程序中通过编码使用了上面对象的许多实例。

var thing = new Thing();

// some time later, and possibly even in
// another part of the application
var result = thing.doSomething(x, y);

增加行为

现在,假设我们怀疑 Thing.prototype.doSomething 是性能问题的根源,我们想要记录它的输入 xy,计算 result 所花费的时间,以及 result 的值。

修改所有的调用点

有一种方式可以在调用 Thing.prototype.doSomething 的每个场景记录数据:

var start = Date.now();

var result = thing.doSomething(x, y);

console.log((Date.now() - start) + 'ms', x, y, result);

显然,如果在应用程序中多次调用了 Thing.prototype.doSomething,那么上面的做法将会导致大量的剪切和粘贴。你可以会错过一些地方,或者更糟的是,在收集完数据之后你可能忘了移除某些代码。

修改源代码

另一种方式是修改 Thing 的源代码:

Thing.prototype.doSomething = function(x, y) {
    var result;

    var start = Date.now();

    // compute some result using x and y

    console.log((Date.now() - start) + 'ms', x, y, result);

    return result;
};

虽然这种方式集中了变化,但具有相当的侵入性:需要改变 Thing 的源代码。假设 Thing.prototype.doSomething 是一个更复杂些的方法,含有多个 return 点,以及一些 try/catch/finally 块。此时,为了收集需要的数据而且不改变方法的行为,修改源代码并不容易。

如果你还想以类似的方式来分析其他的方法,你仍然需要改变它们的源代码。

使用继承

还有一种方式可以避免修改 Thing 的源代码,即使用继承来:

function ProfiledThing() {
    Thing.apply(this, arguments);
}

ProfiledThing.prototype = Object.create(Thing.prototype);

ProfiledThing.prototype.doSomething = function() {
    var start = Date.now();

    var result = Thing.prototype.doSomething.apply(this, arguments);

    console.log((Date.now() - start) + 'ms', x, y, result);

    return result;
}

这种方式避免了修改 Thing 的源代码,但是有一个重要问题:需要改变代码中调用构造函数 new Thing() 的每个点,使它们转而调用构造函数 new ProfiledThing()

虽然有其他办法可以缓解这个问题,但是到目前为止,我们应该清晰的意识到,需要一种更好的方式来引入这种分析行为。

分离关注点

这种分析行为有一个有趣的特性,它与 Thing 的主要或首要功能无关。它是一个(额外的)附属功能。

创建 Thing 很可能是为了在特定的领域下解决特定的问题。而上面的方案则试图为 Thing 的领域引入与之无关的行为,而 Thing 的领域对于分析行为一无所知。

Thing 不需要知道任何有关分析行为的事情来完成其工作,但是上面的的方法却强制使 Thing 的领域关注分析行为。

我们需要的技术是,以一种可控的、无侵入的方式引入这类行为。不仅可以有力的保留 Thing 的行为,而且不需要修改 Thing 的源代码,或者修改任何创建或消费 Thing 的代码。

引入 AOP

正如前文所述,AOP 是一项可以无侵入地增加行为的技术。在 JavaScript 中,实现这项技术非常简单。甚至不需要借助任何工具或库就可以实现,尽管工具或库会有所帮助(建立一种可复用的模式)。

如果你曾经实现过下面所示的代码,那么你已经在 JavaScript 中实现了 AOP:

var origDoSomething = thing.doSomething;

// Method replacement is a simple form of AOP
thing.doSomething = function() {
    doSomethingElseFirst();

    return origDoSomething.apply(this, arguments);
}

上面的代码为 thing.doSomething 有效地增加了行为。现在,当 thing.doSomething 被调用时,doSomethingElseFirst 将先被执行,然后再执行原来的行为。

从 AOP 的角度,我们可以说 doSomethingElseFirst 是应用于 thing.doSomething 的一个行为切面。明确地讲,doSomethingElseFirst 称作“before advice”...也就是说,我们建议 thing.doSomething 应该在执行它本来的任务之前先执行 doSomethingElseFirst。AOP 实现通常会提供多种 advice 类型,例如 before、after、afterReturning、afterThrowing 以及 around。

译注:advice 表示具体要执行的操作,通过 before、after、afterReturning、afterThrowing 来区别是在之前、之后、返回之后还是异常之后执行 advice,通过 around 代替(之前+之后,或模拟)原来的操作。

关于上面的简单例子,有几个重要的事情需要注意:

  • Thing 的源代码没有被改变。
  • thing 的消费者不需要改变。
  • doSomething 的行为得以保留,例如它的上下文和参数
  • ThingdoSomethingElseFirst 一无所知,并且不依赖它。因此 Thing 的单元测试也不需要更新。当然,我们需要为 doSomethingElseFirst 编写单元测试,但除此之外,再没有新的代码需要测试用例。

AOP 应用示例

让我们以 AOP 的方式来为 Thing 增加分析行为。

var origDoSomething = Thing.prototype.doSomething;

Thing.prototype.doSomething = function() {
    var start = Date.now();

    var result = origDoSomething.apply(this, arguments);

    console.log((Date.now() - start) + 'ms', x, y, result);

    return result;
}

我们再次使用了方法替换技术,但是这次替换的是 Thing 原型上的一个方法。所有的 Thing 示例将使用这个新的、具备分析行为的 doSomething。这类切面称为“around advice”,因为是同时在原始方法的之前和之后执行了某些额外的行为。

尽管这看起来与前面的继承示例非常类似,但是有一个非常重要的区别:我们没有引入新的构造函数,因此 Thing 的消费者不需要改变。

AOP 实践

通过无侵入地为单个原型的单个方法添加分析行为,简单地演示了 AOP 在 JavaScript 中是如何实现的,不知如此,该技术还可以用于执行更复杂和更有趣的事情,例如:

  • 收集整个引用的分析数据
  • 跟踪程序执行过程来可视化调用树(栈)
  • 自动重新执行失败的异步 I/O,例如 XHR 或数据库请求
  • 在应用程序中以松耦合的方式连接合作组件(协同工作),而不是使用事件或 Pub/Sub。

在后面的教程中,我们将看到更多的关于如何实现 AOP 的例子,以及它的适用场景。

译注:

  1. AOP 的适用场景包括但不限于日志记录、性能统计、安全控制、事务处理、异常处理等等。
  2. JBoss AOP 1.3 Javadoc

原文:Intro to Aspect Oriented Programming

在 JavaScript 中保护对象

这篇博客旨在快速复习如何在 JavaScript 中保护对象。有 3 种程度的保护:

  1. 最弱的是阻止扩展,
  2. 稍强的是封闭对象,
  3. 最强的是冻结对象。

阻止扩展

Object.preventExtensions(obj)

使对象不能再添加属性。例如

var obj = { foo: 'a' };
Object.preventExtensions(obj);

现在,在宽松模式下添加属性会静默失败:

> obj.bar = 'b';
> obj.bar
undefined

而在严格模式[1]下会抛出一个错误,我们通过一个 IIFE[2] 使用严格模式。

> (function () { 'use strict'; obj.bar = 'b' }());
TypeError: Can't add property bar, object is not extensible

但是,仍然可以删除属性。

> delete obj.foo
true
> obj.foo
undefined

检查对象是否可扩展

Object.isExtensible(obj)

检查 obj 是否可扩展:

> Object.isExtensible(obj)
false

封闭对象

Object.seal(obj)

阻止扩展,并使所有属性“不可配置”。后者意味着属性的特性不可修改。只读的属性保持只读,可枚举的属性仍可枚举,等等。

(顺便说一句,因为历史原因,JavaScript 允许把不可配置的属性从可写改为只读。)

下面的例子演示了封闭使所有属性不可配置。

> var obj = { foo: 'a' };

> Object.getOwnPropertyDescriptor(obj, 'foo')  // before sealing
{ value: 'a',
  writable: true,
  enumerable: true,
  configurable: true }

> Object.seal(obj)

> Object.getOwnPropertyDescriptor(obj, 'foo')  // after sealing
{ value: 'a',
  writable: true,
  enumerable: true,
  configurable: false }

你仍然可以改变属性 foo:

> obj.foo = 'b';
'b'
> obj.foo
'b'

但是你不能改变它的特性:

> Object.defineProperty(obj, 'foo', { enumerable: false });
TypeError: Cannot redefine property: foo

Additionally, obj is not extensible, any more. 此外,obj 不再可扩展。

检查对象是否是封闭的

Object.isSealed(obj)

检查 obj 是否是封闭的:

> Object.isSealed(obj)
true

冻结对象

Object.freeze(obj)

是所有属性不可写,并封闭对象。也就是说,对象不可扩展,所有属性为只读并不可修改。

var point = { x: 17, y: -5 };
Object.freeze(point);

在宽松模式中,将再次静默失败:

> point.x = 2;  // no effect, point.x is read-only
> point.x
17

> point.z = 123;  // no effect, point is not extensible
> point
{ x: 17, y: -5 }

在严格模式中则抛出一个错误:

> (function () { 'use strict'; point.x = 2 }());
TypeError: Cannot assign to read-only property 'x'

> (function () { 'use strict'; point.z = 123 }());
TypeError: Can't add property z, object is not extensible

检查对象是否是冻结的

Object.isFrozen(obj)

检查 obj 是否是冻结的:

> Object.isFrozen(point)
true

参考文献

  1. JavaScript’s strict mode: a summary
  2. JavaScript variable scoping and its pitfalls
  3. Object properties in JavaScript

原文:Protecting objects in JavaScript

DOOM 启示录

中文书名:DOOM启世录

英文书名:Masters of DOOM: How Two Guys Created an Empire and Transformed Pop Culture

著者:David Kushner

译者:孙振南

~~~序~~~

两位约翰

游戏分两种,一种是在生活中玩的,另一种是生活在其中的。这两个世界相互矛盾,而两位约翰就分别属于这不同的世界。

2000年4月的一个下午,达拉斯市中心,电子竞技职业联盟(CPL: Cyber-athlete Professional League)正在举办一届总奖金为十万美元的锦标赛。这个组织希望能成为电子游戏界的NBA,当然,比赛的项目不是篮球,而是一个计算机游戏:《雷神竞技场》(Quake III Arena)。一千多名玩家带着显示器和键盘鼠标赶到了这里,他们中,近的来自佛罗里达,远的来自芬兰——由此可见他们是多么狂热。这成百上千台计算机在赫亚特宾馆的地下室里连成一片,大屏幕上显示着游戏画面:火箭弹在虚拟竞技场里划出一道道尾烟,咬着雪茄的战士、顶着花翎的赤膊女武士、浑身血污的莽汉、他们拿着火箭筒和离子枪互相追逐射击。目标很简单:杀敌最多的人胜出。在接下来的七十二小时里,玩家们就在这虚拟世界中忘我地鏖战,直到筋疲力尽睡去,有的趴在计算机旁,而有的则头枕着比萨饼盒子蜷缩在桌子下。一对夫妇还得意地带来了他们那开裆裤上印着雷神标记的小宝宝。另外两个年轻人则把后脑勺修剪成雷神环,在会场里四处炫耀,他们的女朋友还挥舞着剃刀问有没有人也想来一个这样的发型。

作为暴力游戏的首都,达拉斯见惯了这样的热闹场面。《毁灭战士》(Doom)和《雷神之锤》(Quake),是以第一人称视角的方式来模拟现实世界里彩弹射击游戏的计算机程序。它们开创了一种被称为“主视角射击”的计算机游戏类型,它们在美国每年108亿美元消费额的电子娱乐业里属于最好卖的游戏。不光如此,它们还推动着计算机处理能力的提高,驱动着计算机三维图像技术的发展,它们定义了什么是在线游戏和玩家社群,它们在社会上掀起巨大的波澜,在一些国家,它们被禁止发行,在美国,它们被指责为煽动了1999年的科隆比纳(Columbine)中学校园枪击案。由此,它们形成了一种独特的非主流文化,一种高科技高回报的文化,一个让身怀技艺和抱负的年轻玩家们为之心驰神往的圣地。而在这个世界上,最成功的玩家无疑是《毁灭战士》和《雷神之锤》的创作者:约翰·卡马克(John Carmack)和约翰·罗梅洛(John Romero),或者叫——两位约翰,就像他们以前被称呼的那样。

作为年轻一代,卡马克和罗梅洛是“美国梦”的样板:他们是自我塑造的个体,他们用自己的热情点燃了一种新的艺术形式、一种文化现象,并在商业上获得巨大成功。他们的经历使他们成为叛逆的偶像,他们既是计算机黑客,同时也名列《财富》杂志(Fortune)评选的500佳企业管理者;他们被誉为游戏界的列侬(Lennon)和麦卡特尼(McCartney),尽管他们更乐于被看做金属乐队(Metallica)。他们在少年时逃出他们各自破碎的家庭,制作出了历史上最有影响力的游戏,最终,也正是这些游戏,使得他们分道扬镳。而在接下来的几分钟里,在作别多年之后,他们又要一起出现在玩家们的面前了。

卡马克和罗梅洛要跟玩家们谈论一下他们各自刚完成的作品:卡马克的《雷神竞技场》,这个游戏出自他合伙创建的id软件公司;罗梅洛的《大刀》(Daikatana),这个姗姗来迟的史诗般的游戏出自他新创建的离子风暴(Ion Storm)公司。这两个游戏也正暗示出了他们两人截然相反的个性,暗示出了那使他们在早期合作得亲密无间而又使他们现在各自为阵的不同性格,那仿佛烙在掌纹上的宿命。

29岁的卡马克是一个计算机程序员,一个清心寡欲并且乐善好施的人,一个在业余时间里建造高能火箭的人,比尔·盖茨(Bill Gates)心目中为数不多的天才之一。程序代码的优雅清晰是他的追求,也是他的游戏。32岁的罗梅洛是个自大的游戏设计师,他那坏孩子般的形象使他成为了游戏界的明星,为了实现他心目中那些狂野的幻景,他愿意付出一切代价,甚至是他的名望。卡马克在他们分手时有过一句简短的描述:“罗梅洛想建立一个帝国,而我只想写出优秀的程序。”

那一刻,当他们一起在这里现身时,玩家们的目光暂时离开了屏幕上的对抗,转向了现实中这两个曾经拍档之间的对抗。外面的停车场里,卡马克和罗梅洛在他们最辉煌时一起买的两辆法拉利(Ferrari)紧挨着停在一起。卡马克快速穿过人群走了进来,他留着黄棕色的短发,戴着眼睛,T恤上印着个毛茸茸的大眼睛卡通。罗梅洛也挽着女友逛了进来,他的女友斯狄薇·凯丝(Stevie Case)既是一个敏锐的玩家,也曾上过《花花公子》(Playboy)的封面。罗梅洛穿着紧身的黑色牛仔甲克和搭配得很好的衬衣,他那出了名的黑色长发垂至腰际。当这两位约翰在大厅里碰上时,他们礼节性地互相点了点头,然后走向各自的讲台。

好戏,就要上演了。

第一章:摇滚明星

1979年夏天的一个午后,美国加州的罗克林镇,11岁的罗梅洛跨上他的脚踏车,穿过镇里漂亮的街道,朝着圆桌比萨店骑去。这个身体纤瘦,带着厚厚眼镜的孩子知道他不该去那里,去那里只会给他带来麻烦,但他顾不了那么多,因为那里有游戏机,尤其是他最喜欢的《行星撞击》(Asteroid)。在他看来,没有什么感觉能比站在那些街机前更好了:他拍打着按钮,控制着屏幕上的三叉戟飞船在无数小行星中间左躲右闪,嘴里还模仿着喧闹的音乐背景:“咚,咚咚,咚!”就像别的孩子模仿电视明星说话一样。为了这样的快乐时光,罗梅洛愿意花掉他送报纸赚到的钱,愿意冒着被继父打骂的危险,因为无论吃什么样的苦,他总可以回到这里,回到游戏中——这是他的避风港。

罗梅洛的父亲在5年前抛下了这个家,他的母亲忙于抚养他和他的弟弟拉尔夫(Ralph),没有时间来管他。他的继父,约翰·斯库德曼(John Schuneman),从前是一个训练教官,现在为政府从事一项高度机密的工作:从世界各地收回间谍飞机坠毁后的黑匣子。这个继父曾三番五次告诫过他不要去玩游戏,那会让他变成个小阿飞,会毁了他的学业和人生。他继父前几天才跟他说:“嘿,小子,我警告过你了哦!”

罗梅洛听从了继父的警告,所以今天他和朋友们没再去平时常去的那家蒂莫西比萨店,他们去了离家更近的圆桌比萨店。他的全名阿方索·约翰·罗梅洛(Alfonso John Romero)的首字母缩写AJR占据着那里《行星撞击》游戏高分榜的榜首,镇上所有其他店里的这种游戏机也都一样。他不光是榜首,他占据了所有前十名。“看看这个,”他向朋友炫耀道,然后投入硬币,又开始玩了。

但他没能玩太久,当一局快结束的时候,一双大手抓住了他的肩膀,“干嘛?!”罗梅洛喊道,以为是他的朋友想跟他捣乱,接着,他的脸就被摁到了游戏机的屏幕上。罗梅洛的继父当着罗梅洛朋友的面,把他拖到了外面的货车里,并把他的脚踏车扔进了后车厢——罗梅洛的脚踏车藏得太不严实,被他继父下班回家路过的时候瞟到了。“小子,你这次真的是自找的了。”他继父一边把他带进家门一边说道,他的母亲和祖母站在厨房里,他继父掉过头去对她们说:“小约翰尼今天又去打街机了,你们知道他这算什么吗?!他这样就像是在跟我们说‘去你妈的’!”随后,罗梅洛被他继父打成了香肠嘴和熊猫眼,他躺了两个礼拜,然后又摸回了游戏厅。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

姬尼(Ginny)在1967年10月28号那天产下了罗梅洛,比预产期提前了6个星期。罗梅洛当时只有四点五磅重,体质非常虚弱。他的父母长久以来一直过着艰苦的生活,在他出生之前几个月才结的婚。姬尼是一个开朗随和的女孩,她在亚利桑那州的图森市邂逅了阿方索·安东尼奥·罗梅洛(Alfonso Antonio Romero),一个出生在美国的墨西哥移民后裔,他在一个空军基地做维修工作,整天忙于修理空调器和加热系统。他们在结婚后抱着对未来生活的期望,开着一辆1948年产的克莱斯勒来到了科罗拉多州,那时他们口袋里只有三百美元。尽管在那里他们的生活有了很大改善,但在罗梅洛出生后,安东尼奥为了一份铜矿上的工作,又带着家人回到了图森。他的工作很辛苦,薪水却很少。他开始变得夜不归宿,即使回家也是满身酒气,很快他们又有了第二个孩子,拉尔夫。

但罗梅洛的童年还是充满了快乐的回忆:野餐,遛马。他还记得有一次晚上十点钟被父亲叫醒:“快起来,我们去露营!”然后父亲开车带他到山上,一起睡在星光下。但是在一个午后,他父亲说要去买些杂货,然后就两年没有回来。在这期间,姬尼和一个大她十四岁的男人斯库德曼结了婚,这个继父努力尝试着和罗梅洛成为朋友。一个下午,他看见六岁的罗梅洛趴在厨房的桌子上画了一辆跑车,画的是如此之好,以至于他觉得罗梅洛肯定是照着什么照片临摹出来的,为了验证一下,他放了一辆小玩具车在桌子上,然后看着罗梅洛照着玩具车的样子又画了一幅,让他惊讶的是,后面这幅也是同样的完美。斯库德曼接下来就问罗梅洛他以后想成为什么样的人,“一个有钱的单身汉。”这个男孩回答道。

在相当长一段时间里,他们相处得很好,当斯库德曼发现罗梅洛喜欢打游戏机时,还会开车带他去和别人比试,罗梅洛一次没有输过。他在玩《吃豆子》(Pac-Man)的时候,甚至可以闭着眼睛带领屏幕上的小人穿过迷宫。但斯库德曼也很快发现游戏占用了罗梅洛太多的时间和精力,然后就有了先前那一幕。

1979年夏天,情况忽然有了些变化。一天,拉尔夫和一个朋友气喘吁吁地跑进家门,告诉罗梅洛一个大发现,他们刚从雪乐山(Sierra)大学回来,“那里有游戏机,不要钱的!”——他们说的是一些好心的大学生让他们使用的大型计算机。罗梅洛立即蹬上车,和他们奔向那计算机实验室。

在那时,使用计算机的人还很少,这个圈子里没有歧视,一个喜欢计算机的人就是一个喜欢计算机的人,不分什么男女老幼。罗梅洛他们可以自由地出入大学里的计算机实验室,这在那时很常见,学生们有机房的钥匙,只要教授们不在,就没有人会让这些孩子们滚走。罗梅洛在里面见到了他从未见过的景象:空调吹送着冷气,终端前坐满了学生,每个人都在玩一种由屏幕上的文字组成的游戏:“你站在路的尽头,前面是一幢小砖房,房子里流出一股泉水,汇入旁边的小溪。你周围是森林,隐隐约约的,你能看到远处一座发光的白塔。”

那是《洞穴深处的冒险》(Colossal Cave Adventure),当时最流行的一个游戏,罗梅洛知道它为什么会这么流行:因为它其实是计算机上的《龙与地下城》(D&D: Dungeons and Dragons),那原本是一种在纸上进行的基于玩家自己想像的角色扮演游戏,里面的故事大都发生在类似《魔戒》(Lord of the Rings)那样的世界里。很多成年人简单地把D&D看做是对现实的逃避,而如果你要理解一个像罗梅洛这样热爱D&D的孩子,你就需要先理解D&D。

D&D,或者是全称《龙与地下城》,于1972年由两个二十几岁的年轻人加里·盖克斯(Gary Gygax)和戴夫·阿纳森(Dave Arneson)创造,然后很快发展成一种地下文化现象,尤其是在大学校园里,人们的相互转告使它得以迅速传播。一个名为詹姆士·达拉斯·艾戈珀特(James Dallas Egbert)的学生还于某天消失在密歇根湖底的下水道里,据传是为了进行现实中的D&D冒险。汤姆·汉克斯(Tom Hanks)主演的一部名为《迷宫和妖怪》(Mazes and Monsters)的电影就取材于这个事件。这类游戏还带动了世界各地的家庭手工业,每年相关的小说、游戏、T恤、规则手册的销售额达到了2500万美元。

这类游戏的魅力是显而易见的。“在《龙与地下城》里,”盖克斯说,“一个普通人可以完成一些光荣的任务,可以在游戏里成长,最终成为英雄。在现实中,这些普通人,尤其是孩子们,他们没有权力,他们要按照别人的吩咐做这做那,他们无法控制人生的方向;但是,一旦他们进入地下城的世界,他们就可以成为无所不能的角色,可以呼风唤雨。”在《龙与地下城》的世界里,没有通常意义上的胜利。它更像是一本交互式的奇幻小说,参与者可以是两人或多人,另外还需要有一个地下城主,城主负责创作和带领整个冒险过程,此外就只需要规则手册,一些特殊的骰子,还有纸和笔。游戏开始的时候,除城主外,每个人都要在一些事先设定好的角色里选择一个,有矮人族(Dwarf)的,也有精灵族(Elf)的,或者是侏儒(Gnome)和人类(Human)。然后大家围坐在桌子边,城主缓缓打开规则手册,里面有各种妖怪、魔法、角色的描述,以及各种虚构的场景:“在这条河的河畔,有一座笼罩在迷雾中的城堡,远处穿来野兽们低沉的咆哮声,你下面怎么走?”如果玩家选择了去追踪那远处的声音,城主就抛下骰子,来决定他们即将面对的对手:或者是食人魔,或者是狮头羊身蛇尾的喷火女妖凯米拉,或者什么别的妖怪。不管玩家脑海中的景象是多么惊险刺激,他接下来的命运都将由掷骰子的结果来随机决定。所以,计算机程序员们喜欢这种游戏一点都不奇怪,他们编写的第一个计算机上的游戏,自然而然就是模仿《龙与地下城》的游戏:《洞穴深处的冒险》。

这个计算机版龙与地下城游戏的主要内容是在一个诡异的洞穴里杀敌和寻宝,可以输入一些命令来四处探索或者战斗,譬如“north”是往北,“attack”是攻击,这让罗梅洛感觉他就是这部小说的主角。随着角色在游戏里不断前进,他脑海中的景象也越来越真实,他忘记了自己是坐在大学的机房里,周围白色的墙壁仿佛变成了绿油油的树林,空调器吹出的不再是阵阵冷风,而是涌出汩汩清泉。在他看来,那屏幕上滚动的文字的的确确就是一个真实的世界。

更让他激动的是,他也可以建造一个这样的世界。20世纪70年代以来,电子娱乐业一直是被像《行星撞击》那样的街机或者是像雅达利(Atari)2600那样的家用游戏机所主宰,在这些机器上开发程序需要有那些大公司的支持,并购买昂贵的开发系统。而计算机不一样,它不是那么高高在上,它里面已经配备有了各种工具和开发系统,而且手握钥匙的人不是那些垄断的权贵,而是热爱计算机的自己人,他们是志同道合的伙伴。罗梅洛虽然年幼,但他觉得自己今后也可以成为他们中的一份子,他也可以在这个世界里谱写他的传奇。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

此后每个礼拜六的上午七点半,罗梅洛都会骑着脚踏车到学校机房去,在冰箱那么大的惠普大型机上跟那里的学生们学习编写程序,他们很喜欢罗梅洛身上那股好学的劲头。这些机器都是20世纪50年代研制出来的庞然大物,通过塞进打孔卡片来输入代码。IBM公司主宰了那时的主机和打卡器市场,它在60年代的销售额就已达到60亿美元。到了20世纪70年代,这些大型机和它们的弟弟——小型机逐渐进入了商业公司、政府部门、大学和科研机构,但还没有普及到人们家中。所以,像罗梅洛这样迷恋计算机的孩子们就游荡于大学的计算机实验室,只有在那里他们才可以使用到机器。晚上教授回家以后,学生们就聚在一起学习、游戏、摸索、钻研。计算机对他们来说是前所未有的工具,在这个天地里,一个人只要努力就肯定可以做到他想做的事情。这些程序员不去上课,取消约会,甚至连澡都不洗,就在这个天地里遨游。一旦他们有了足够的知识,他们要编写的程序就是——游戏。

第一个计算机游戏于1958年在一个听起来不太可能的地方出现——美国政府的核实验室。威利·海金博塞姆(Willy Higinbotham)是这个位于纽约长岛的美国能源部布鲁克海文(Brookhaven)国家实验室的头,为了打消周围农场主们对这个建在他们家门口的核实验室的担心,他得筹划一次巡回演说,所以他就琢磨着弄个什么东西来博得他们的好感。于是,他和同事一起用计算机在圆形的示波器上制作了一个非常简陋的网球模拟程序,他给这个游戏命名为《双人网球》(Tennis for 2),其实只不过是一个白色的圆点在一条白线两边跳来跳去。农场的人们对这个新鲜玩意惊讶不已,但威利他们回到实验室以后就把机器拆除了。

三年后的1961年,史蒂夫·斯拉格·拉塞尔(Steve "Slug" Russell)和其他麻省理工学院(MIT)的学生在第一台小型机PDP-1上创作了一个名为《空间战争》(Spacewar)的游戏,游戏里两个玩家在黑洞中漂移,同时用火箭弹互相射击。十年后的1971年,波士顿的一个程序员,同时也是一个洞穴探险爱好者,威尔·克劳瑟(Will Crowther),创作了一个模拟洞穴探险的文本游戏。一个在斯坦福大学的名叫唐·伍兹(Don Woods)的黑客看到了这个游戏后,向他询问是否可以在上面做一些改动,加入更多的神话元素,然后就有了《洞穴深处的冒险》。这个游戏引发了文本冒险游戏的热潮,全国各地计算机实验室里的学生们和黑客们不光是玩它,还修改它,制作出了各种各样新的故事,有的甚至跳出了《龙与地下城》的背景,譬如在《星际迷航》(Star Trek)的世界里展开探险。

罗梅洛是成长于20世纪80年代的第四代游戏黑客。第一代是五六十年代那些在小型机上做开发的麻省理工的学生们,七十年代硅谷和斯坦福的接力者们是第二代,八十年代早期的一些刚起步的小游戏公司算是第三代。为了进入这个领域,罗梅洛需要学习那时游戏开发者们必备的一种计算机语言:HP-BASIC。他是一个既有悟性又爱钻研的学生,缠着每一个人问问题,而且,他的问题变得越来越高深。与此同时,他在学校的学习成绩一落千丈,从A到B,然后又到C,最后是D。他的继父对他在游戏方面的热情起先是不以为然,但在他觉察罗梅洛成绩的退步后,认为罗梅洛的注意力太容易被分散了,尽管这个孩子很聪明,但游戏和计算机占用了他太多的精力。虽然当时正是电子游戏的黄金年代,每年街机的营销额是五十亿美元,甚至家用机都有十亿美元,但斯库德曼不认为做游戏开发是一种适当的职业,他总是跟罗梅洛说:“靠做游戏你是赚不到钱的,你要去做那些人们真正需要的东西,譬如商业应用程序。”

在滋长的不光是罗梅洛与继父的不和,还有罗梅洛脑海中的各种暴力场面,那不光是身体暴力,还有精神暴力。他是看着教育漫画公司(E.C Comic)的恐怖漫画和各种小电影,看着像《蜘蛛人》(Spider-Man)和《神奇四侠》(Fantastic Four)这类英雄主义漫画书长大的孩子。他需要一种途径来释放脑海里的胡思乱想。在十一岁的时候,他提起笔,画了一个故事,里面的主人翁是一条名叫橡皮糖的狗,它的主人叫它来一起玩棒球,一次猛掷后,球射入了橡皮糖的眼睛,它的脑袋被劈开,脑浆流了出来,“剧终”,罗梅洛写到,并在墓碑上题词:“噢,可怜的橡皮糖。”在学校里,他把一本自己画的名叫《诡异》的漫画册作为美术课的作业交了上去,其中一个章节的标题为《十种折磨人的方式》,包括“用针扎遍他的身子,过几天后……看他整个人变成一块大痂,”或者是“把他捆在椅子上,然后放火烧他的脚。”在另一个名为《如何让保姆抓狂》的章节里,他画道:“拿出一把非常尖锐的匕首,然后假装你扎到了自己。”或者是“把电线插到耳朵里,扮成收音机。”老师批注道:“这实在太粗俗了,你一定要画这些东西吗?”罗梅洛只得了一个B+,他的精力主要都放在编写计算机程序上了。

在第一次去了校园机房后几个星期,罗梅洛就完成了他的第一个游戏,一个文本方式的冒险游戏。因为那些大型机不能存储数据,所以编程都是通过在一张张薄薄的卡片上打孔来实现的,每张纸是一行代码,而通常一个游戏都需要上千行代码。每天放学后,罗梅洛就把一叠叠卡片捆在脚踏车后面,骑着车回家;当他下次去机房的时候,再从家里把卡片带到机房,让机器运行。一天在去校园的路上,他的车撞到了一块石头,车翻了,两百张卡片飞舞在空中,散落在了湿漉漉的地面上。罗梅洛觉得不能再这样下去了。 他很快就找到了新欢:苹果II型机(Apple II)。它的前身苹果机于1976年首次在一个加州的计算机俱乐部被介绍给世人,它一出现就受到了那些用不上大型机的黑客们的喜爱。作为在家里就可以使用的计算机,它尤其适合于用来玩游戏和制作游戏,这一切都得感谢苹果公司的两位创始人,史蒂夫·乔布斯(Steve Jobs)和史蒂芬·沃兹涅克(Stephen Wozniak),或者叫,两个史蒂夫。

乔布斯,一个大学辍学生,一个对佛教和哲学充满热情的人,于20世纪70年代中期在雅达利游戏公司开始了他的第一份工作。这家公司的传奇之处在于它的创建人,诺兰·布什内尔(Nolan Bushnell),他在1972年制作的街机游戏《乒乓》(Pong)取得了巨大成功,玩家在这个游戏里可以操控着两条白色的带子在屏幕上来回击打一个白点,他还模仿PDP-1上的《空间战争》做了个街机游戏,叫做《计算机空间》(Computer Space)。乔布斯和他的共同之处是果敢和自信,但乔布斯心里还有更大的梦想。

沃兹涅克,或者叫沃兹,是一个在数学和编程上都极有天赋的怪才,他喜欢搞各种恶作剧,旧金山海湾一带都知道他那个拨过去就能听到笑话的电话号码。他也喜欢打游戏,而编写游戏正好能融合他所有的这些兴趣。在他的游戏里,玩家输了一个回合以后,屏幕上会闪过“噢,该死!”之类有趣的字样。乔布斯召集了沃兹一起来设计游戏,那是个运行在雅达利2600家用游戏机上的游戏,名叫《打砖块》(Breakout)。随后,乔布斯对未来发展趋势的敏感和沃兹天才般的编程能力一起造就了他们自己的公司——苹果。第一代苹果机是在1976年给“家酿”(HomeBrew)计算机俱乐部会员们用的一个原型,价格高达666.66美元。接下来1977年出产的苹果II型机则是针对普通用户的,它带一个键盘,兼容BASIC语言,最重要的,它的图像是彩色的,尽管它没有硬盘驱动器,但它随机附送了两个在现在看起来很简陋的游戏手柄——它就是用来玩游戏的。

罗梅洛第一次见到苹果II型机也是在那所大学的机房里,在大型机顶多只能画出些白色的线条或方块的时候,这个时髦灰色外壳的盒子居然能显示许多带颜色的像素,它一下子就映入了罗梅洛的眼帘。他迫不及待地想了解关于这种机器的一切,那一天接下来的时间里,他就一直在机房里跑来跑去问人,后来只要他到了机房,他就坐在苹果II计算机前玩游戏,那上面的游戏各式各样,而且越来越多。

这些游戏中有一部分是模仿街机的,譬如《行星撞击》,或者是《太空入侵者》(Space Invaders)。但也有一部分显露出了各种革新的元素,譬如《创世纪》(Ultima),它的制作者是人称不列颠之王的理查德·盖略特(Richard Garriott),他是德克萨斯州一名宇航员的儿子,说中古英语的他创作了这一非常成功的图形角色扮演系列游戏。就像在《龙与地下城》里一样,玩家们可以选择是做巫师还是做精灵,可以和恶龙搏斗,可以在游戏中成长。游戏里的地形是由不同颜色的方块来表示的,譬如绿色是树,棕色是山,玩家的角色由几个简单的像素组成,而且没有战斗场面,玩家只能是走到龙——另外几个像素——面前,然后等着屏幕上出现一行字来告诉他们战斗的结果,但玩家们不在乎图像的粗糙和简陋,他们能感知到这背后的故事和世界。

《创世纪》还展示了新一代黑客们走上商业道路的可能性。盖略特通过他的奋斗在20世纪80年代早期取得了成功,和其他很多苹果机的程序员一样,他把游戏存放在磁盘上,然后放到拉链袋里交给计算机商店。肯(Ken)和罗伯塔·威廉姆斯(Roberta Williams)这对北卡罗来州的夫妇也采用了拉链袋的方式来销售他们自己在家里制作的图形角色扮演游戏,并发展成了一个年销售额三亿一千万美元的公司:雪乐山娱乐(Sierra On-Line),这家公司成了数字时代嬉皮士们展示自己的舞台。另外还有个六英尺九寸高三百二十磅重的传奇人物:希拉斯·华纳(Silas Warner),他创建了缪斯软件(Muse Software)公司,出品了一个罗梅洛很喜欢的游戏:阴沉紧张的《德军总部》(Castle Wolfenstein),玩家们要控制着小人穿过那些平面迷宫,沿途有各种纳粹的士兵,最终,玩家会面对希特勒本人。

罗梅洛花在游戏上的时间是如此之多,以至于他的继父觉得最好在家里也放上一台计算机,这样他们就可以随时盯着他点。苹果II送到家里来那天,斯库德曼一进门就看到姬尼迎上来,她对他恳求道:“答应我,不要发火。” 斯库德曼低头看到了地上放着的苹果机包装盒,里面空空如也。“约翰尼已经把它们都装到一起了。”姬尼小心翼翼地告诉斯库德曼。屋里这时传来了几声奇怪的嘟嘟声。斯库德曼的火一下就上来了,他冲过客厅一把推开罗梅洛房间的门,本以为里面会是乱七八糟的线板和零件,但是他看到的却是罗梅洛坐在一台完整的机器前敲打着。他楞在原地沉默了一会,然后走了进去,让罗梅洛调几个游戏出来给他看看。

那年圣诞节,罗梅洛要了两件礼物:一件是书,《苹果机图像编程教程》;还有一件也是书,《装配线》,这是一本讲解汇编语言的书,这种语言比起其他编程语言来更晦涩,但是执行得更快。他的继父不久被调到了英国皇家空军基地,他们举家搬迁到英国中部,这两本书就成了他在那里的生活伴侣。在那个名叫阿康拜(Alconbury)的小城里,罗梅洛通过写游戏提高了他的汇编语言水平,同时他还自己做美工。每做完一个游戏,他就把它带到学校里去出售,很快他就变得小有名气。一个模拟对苏空战训练的机要官员找到了斯库德曼,向他询问罗梅洛是否有空做份兼职,斯库德曼觉得这是件好事情。第二天,罗梅洛被带到一个冰冷的,放着大型计算机的房间,为了不让他看到,各种机密的地图、文档、机器都被黑色的窗帘遮得严严实实。然后官员们要求他把大型机上的一个程序转换到小型机上运行,当罗梅洛看到屏幕上那原始的飞行模拟界面时,他脱口而出:“没问题,游戏的东西我最在行了。”

信息时代的大潮在那时已经初露端睨,计算机成为了一种文化的象征,《时代》(Time)周刊甚至用计算机作为1982年的“年度人物”封面。计算机游戏显露出了它比家用游戏机更迷人的前景,雅达利主机在1983年的销售额下降了五亿三千六百万美元,而卡曼多(Commodore)VIC-20和64型家用计算机则卖出了十亿美元,甚至超过了苹果。这些计算机需要游戏,需要罗梅洛这样的游戏制作者。而想在这个朝阳产业里发布自己的作品,只有两条路,一是通过象雪乐山或者是电子艺界(Electronic Arts)那样的大出版商——罗梅洛发现他们太过于高高在上了;还有一条路就是通过计算机爱好者杂志,他们为了节省经费,通常是直接把游戏的代码印在杂志上,想玩的人只能一行行地把代码输入计算机。

在英格兰的罗梅洛几乎把所有时间都花在了苹果机上,他制作游戏,然后寄出去投稿。他学习成绩的下滑终于激怒了继父,曾经的冲突又再度出现在这对父子之间。罗梅洛的漫画新作《麦尔文》(Melvin)里的情节似乎正是这现实的翻版,只是多了暴力和血腥:一个名叫麦尔文的男孩总喜欢和他老爸唱反调,他老爸像罗梅洛继父一样是个带着墨镜的秃头,在漫画中,麦尔文要遭受各种花样迭出的惩罚。在一个故事里,麦尔文答应了洗碗但却不做,跑一边打游戏去了,他父亲知道后一言不发,直到他睡着后才冲进他的房间大骂:“你这个小杂碎!”然后把他的头在墙上砸得眼珠爆裂,血肉模糊。罗梅洛并不是惟一在暴力漫画里寻求释放的孩子,学校里的其他学生也会把他们脑海中麦尔文的各种悲惨下场悄悄告诉罗梅洛,而罗梅洛则把这些想法逐一付之笔墨,绝不放过任何一个展现血腥的机会,其他孩子们对罗梅洛佩服得五体投地。这种出众的感觉也使罗梅洛发生改变,他开始听重金属音乐——金属乐队,杂色人等(Mötley Crüe),犹大牧师(Judas Priest)。他约会了好几个女孩,其中他最喜欢的一个很快成了他的女朋友,她活泼随和,而且聪明伶俐,她父亲是一个受敬重的官员,她让罗梅洛穿上带领的衬衫和得体的牛仔裤,她带他结识新的朋友。在经历了父亲出走和继父打骂的这些岁月后,罗梅洛感觉终于找到了怀抱。

罗梅洛十六岁了,他渴望着通过他的游戏取得成功。在经过屡试无果的八个月投稿后,1984年3月5日,一个《苹果汁》(InCider,“内行”)杂志的编辑说他们决定要出版罗梅洛的一个名为《搜寻侦察兵》(Scout Search)的游戏。这是个低分辨率的迷宫游戏,玩家——游戏中的一个点,需要赶在灰熊——另一个点——的前面,把侦察兵们——若干个点——集合到一起。它看上去很普通,但很好玩。罗梅洛为此得到了一百美元的稿酬,而且这家杂志还有兴趣出版他的其他游戏,“我酒一醒就会开始着手和他联系的。”这个刚参加完斋月末狂欢节的编辑写到。

罗梅洛全身心地投入到了游戏制作中,他不但编程,还做美工。他甚至可以在半个小时里写出一个游戏。他给所有这些游戏都起了由两个首字母相同单词组成的名字,譬如《异形攻击》(Alien Attack)或者是《洞穴战士》(Cavern Crusader)。他变得越来越自大,在给一家杂志的信中,他写道“你们这次程序竞赛的冠军肯定是我,我的程序非常棒,不要再设什么五百美元的奖金了,直接把那五百美元给我就好了,还有那个年度奖,对,一千美元那个,都直接给我。”落款一如往常:“约翰·罗梅洛,王牌程序员”。然后他赢得了奖金。

罗梅洛迫不及待地想和他居住在犹他州的生父分享这些成功,他草草地做了张信纸,抬头是只有他自己一个人的所谓公司的名称:顶级思想软件(Capitol Idea Software),在信里,罗梅洛讲述了他发表的东西,他赢得的竞赛,“我现在已经学了四年半的计算机了,我的编程能力即将有一次新的突破。——约翰·罗梅洛,王牌程序员,竞赛冠军,未来富翁。”他已经上路了,他能感觉到,但想要真地成为未来的大富翁,他一定要离开英格兰回到美国,他急切地盼望着这一天的到来。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

罗梅洛在1986年和家人一起回到了美国加州,并在他曾经常去打游戏的雪乐山大学选修了课程,那时他还只念了两年高中。他的游戏越来越受欢迎,几乎每一个都能在杂志上发表,有的甚至还上了封面。此外,他于某天在汉堡王(Burger King)吃快餐的时候遇上了一个他心仪的女孩,凯俐·米切尔(Kelly Mitchell),她是那里的收银员,他们俩迅速坠入爱河。凯俐成长于一个中产阶级的摩门教家庭,住在城里小山上一座漂亮的房子里,尽管罗梅洛以前也约会过很多女孩,但没有哪一个像凯俐这么有趣,而且和他合得来,尽管她不喜欢游戏。十九岁的罗梅洛还从未真正体验过家庭的温馨,他渴望拥有一个自己的家庭,他向凯俐求婚,她答应了,他们的婚礼于1987年举行。

罗梅洛已经出版了十个游戏,他也即将高中毕业,还有了一个小家。他到了该找一份工作的时候了,还有什么样的工作能比制作游戏更让他神往呢?罗梅洛在计算机杂志上看到一个名叫“苹果节”(Applefest)的聚会将在1987年9月16日举行,参加的人不光是普通的苹果机爱好者,还有像维真(Origin)和雪乐山那样的大游戏出版商,以及那些发表他游戏的杂志社:《新时代》(Uptime)、《四位元》(Nibble)和《苹果汁》。

罗梅洛到达旧金山那个会议中心的时候,黑客和玩家们正在忙着组装机器。一张桌子上铺满了《四位元》杂志,那一期的封面上正是罗梅洛的游戏。在《新时代》这家以磁盘方式发行的杂志摊位,屏幕上演示着的也是罗梅洛的一个游戏。“哇,简直是我的个人游戏展嘛。”罗梅洛想道。就在《新时代》的摊位前,他遇到了杰伊·威尔伯(Jay Wilbur),这个编辑曾发表了每一个罗梅洛寄来的游戏,他是一个长着娃娃脸,但很魁梧的家伙,二十七岁的他以前在TGI星期五夜总会做酒保。在杰伊心目中,罗梅洛虽名气不大,但却是一个值得信赖的程序员,因为他懂得一个成功的游戏需要有哪些要素,这些东西学起来容易,但掌握起来很难。杰伊告诉罗梅洛自己有一份工作想请他来做,罗梅洛故做镇定地说他会考虑的。然后他心情愉快地走到旁边维真公司的摊位上,那里悬挂着一个条幅:“《创世纪5》,10月31日”,“噢,天啊!”罗梅洛嘀咕道:“新版的创世纪!”然后他在一台机器前坐下,插入他的磁盘,摊位上一个女士立即向他问道:“你在干什么?你想拷贝我们的游戏?!你怎么能做这种事!”罗梅洛敲了几下键盘,对她说:“来看!”——屏幕上显示着一个迷宫追踪游戏,这是他刚完成的图像分辨率增加了一倍的复杂程序,看上去非常精细和鲜活,这种所谓双倍分辨率的图像技术在当时是编程领域最顶尖的艺术。就面前这个消瘦的孩子,展示出来的图像比旁边屏幕上的《创世纪V》看上去还漂亮。这个女士只有一个问题:“你在找工作吗?”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

两个月后,1987年11月,罗梅洛驱车从西海岸穿过整个美国,奔赴位于东海岸新罕布什尔州的维真公司办公室开始他的第一份工作。他满怀憧憬但却囊中羞涩,一路上用支票垫付着各种费用。预产期在明年二月的凯俐和他一起,尽管想起那边寒冷的气候就让她害怕,但罗梅洛的热情感染了她。他作为王牌程序员和未来富翁的人生就要开始了,他保证道。

但罗梅洛的诺言并未兑现。尽管一开始在维真干得很成功,但罗梅洛跟随着他的上司离开维真,新创建了一家公司,这是一次赌博——而他是个运气不好的赌徒:新的公司拉不到业务,他失业了。二十一岁的罗梅洛已经有了个名叫迈克尔(Michael)的儿子,而且凯俐又怀上了第二个孩子,她觉得累了。罗梅洛对她的种种许诺都落了空,为了让第二个孩子离她的父母近些,她回到了加州。电话那头的罗梅洛仍然毫无起色,他在那边什么都没有,没有工作,没有房子,他睡在朋友的沙发上。

但罗梅洛不会就这么躺下等死,他心中装着梦想,他有一个他深爱着的家庭,他还要做一个他自己从来没拥有过的那种父亲,那种不光支持孩子们玩游戏,还和他们一起玩的那种父亲。他给杰伊打了个电话,询问《新时代》那里还有没有职位空缺,杰伊告诉他,他已经离开了《新时代》,加入了位于路易斯安那州什里夫波特(Shreveport)市的另外一家杂志:《软盘》(SoftDisk),他们也是以磁盘方式发行。杰伊建议罗梅洛也来这里试试。罗梅洛没有任何犹豫,他要去什里夫波特,那里有南方温暖的天气,那里有游戏。那里最好再有狂热的玩家,他期望着。

第二章:火箭科学家

约翰·卡马克是个很晚才开口说话的孩子,他父母亲的担心一直持续到1971的一天,这个15个月大的男孩拿着一块海绵蹒跚着走进客厅,说出不光是一个单词而是一个完整的句子:“爸爸,你的洗澡巾。”就好像他一直不屑于说单个的词,而非要等到能用它们组合出完整的句子才肯开口。“茵戈(Inga),”他父亲斯坦(Stan)对他母亲说道:“看上去我们家有了个很不一般的小家伙噢。”

卡马克家一直都有着自学成才的传统。约翰·卡马克的爷爷老约翰·卡马克只有二年级的教育程度,他的妻子也只有八年级。这个家庭主妇教会了她丈夫识字和写作,最终他成为一个电气工程师。他们在肯塔基州东部最贫穷的地区带大了他们的孩子斯坦,这个孩子学习非常勤奋,最终获得了一所大学的奖学金。斯坦在数学和工程学方面都表现得不同寻常,最终成为家里的第一个大学生,并进入一家电台工作。他妻子茵戈的父母是药剂师和理疗师,茵戈继承了他们在科学方面的兴趣,在研究核疗技术的同时还在攻读微生物学博士。茵戈和斯坦盼望着能把他们对学习的热爱传递给他们的孩子。

小约翰·卡马克出生于1970年8月20日,小名约迪。他父母工作都很勤奋,所以他们家境很好。斯坦还晋升为一家电视台的晚间新闻主播,这家电视台是密苏里州堪萨斯城最大的三家电视台之一,他们随后搬迁到了郊外的富人区。在那里,约翰有了个小弟弟,彼得。同年,约翰进了圣母玛利亚天主教小学,这是当地最好的学校之一。这个从一岁起就戴上眼镜,长着一头凌乱金发的瘦小男孩在学校里很快就显示出了与众不同。二年级的时候,只有七岁的他几乎在所有标准化测验里都得到了满分,这相当于九年级的水平。约翰还养成了一种很独特的口吃习惯:在每句话后面加上简短的类似机器人那样的嗡嗡声,就像一台计算机在处理数据一样:“12乘以12等于144……嗯嗯。”

在家的时候,约翰·卡马克像他的父母一样贪婪地阅读各种书籍,他喜欢托尔金的《魔戒》,或者类似那样的奇幻小说。他成打成打地看漫画书,他还喜欢科幻电影,但最让他觉得有意思的还是《龙与地下城》。乐于创作更甚于参与的他很快就成为了一个独特而且强大的地下城主,不像其他城主那样主要依赖于规则手册里刻板的规定,他抛开那些结构,创作了他自己的世界。每天放学后,他就把自己关在小屋里,埋头于成堆的图纸和表格中。那时他在念三年级。

尽管卡马克家境不错,学习成绩也很好,但他还是有他的烦恼。在一次作业里,他需要描述自己生活中最大的五个问题,而他两次提到了他父母对他过高的期望。他开始觉得他那严厉的母亲对他太过挑剔。在另一次作业里,他记述了母亲因为他拒绝做额外的功课而把漫画书都锁到了柜子里,他又是如何直接卸掉了那扇柜子的门。

卡马克开始憎恶学校——憎恶那些制度和教条,在他看来,那都是毫无理性的东西。他开始在每个礼拜三的圣餐集会后戏弄其他同学的信仰。记得有一次,一个孩子离开的时候,已经被他说得心中挂着问号,脸上挂着泪水。直到有一天老师推着一台苹果II型机走进教室,卡马克才算找到了一个能更有效地锻炼他思维能力的手段。尽管他还从没使用过计算机,但他自然而然地把这个东西当做了他自己身体延伸出去的一部分:它说着数学逻辑的语言,它能响应他输入的指令,而当他看到游戏的时候,他意识到原来这里面还有着丰富多彩的世界。

这时候的卡马克已经迷上了街机,他不是附近最好的玩家,但他喜欢《行星撞击》和《太空入侵者》里那快节奏的战斗和立即兑现的回报。还有《战区》(BattleZone),它不像其他游戏一样从高处或是侧面显示战斗状况,它从第一人称视角来展现战斗的画面,卡马克会觉得像是坐在一辆坦克里观望四周。尽管画面只是由简单的绿色线条组成,但它能给人一种三维的观感,这个游戏甚至引起了美国政府的注意,他们向制造商雅达利定制了一个版本用于军事训练。很快,卡马克也就想要定制属于他自己的游戏,有计算机在手,这不是不可能的。

卡马克念五年级了,他妈妈把他送到一家名叫“无线电屋”(Radio Shack)的全国连锁电子产品商店去参加一个TRS-80计算机的培训班。当他再回到学校时,手里已经多了一本程序设计的书,他开始自学所有他想知道的知识。百科全书里描述计算机的那个段落被他翻来覆去地看了十几遍。随着他视野的开阔和知识的增长,他给老师写信建议到:“现在比较合理的事情就是把我直接送到六年级。”在那里他才可以学到更多东西。第二年,卡马克被转到了肖尼市(Shawnee)教会公立学校的一个“天才班”,那是附近最早有计算机实验室的地方之一。

在这里,卡马克遇到了一些和他一样对苹果机着迷的聪明孩子。他们自学BASIC编程,他们一起玩游戏,很快他们就不满足于这种简单的玩乐,他们开始研究并动手修改游戏。一次,卡马克找到了他在《创世纪》里角色所对应的代码,他修改了那一段,给自己增加了一些额外的能力,这是他第一次体会到凭空创造东西的乐趣。而且,作为一名程序员,他不需要依赖于其他人,只要他的代码逻辑正确表述了他定义的规则,它就会工作得很好,一切都那么合理。

一切——但除了父母,卡马克想道。

卡马克的父母在他十二岁的时候忽然离婚了,他们在如何抚养孩子的事情上还闹的很紧张。茵戈觉得这给卡马克造成了无法弥补的创伤。就当卡马克开始在学校里找到点乐趣的时候,他和弟弟彼得又不得不在双亲之间来回轮换,不停地转学。卡马克不喜欢和父亲分开,更糟糕的是,当他和母亲住在一起的时候,他得自己照顾自己。

卡马克对计算机的兴趣越来越浓厚,但茵戈却觉得那些计算机游戏毫无意义,在她看来,如果一个孩子真的对计算机感兴趣,那他不应该只坐在那玩《创世纪》,而应该在学校努力学习,考个好成绩,然后进麻省理工那样的学校,这样才能在毕业以后进入像IBM那样的公司。她爱她的儿子们,她希望他们只做她认为是正确的事情。但卡马克不这么想,他只想有台他自己的计算机,在那个世界里翱翔。他变得越来越倔强,茵戈带卡马克去看了心理医生,想弄清楚为什么她这曾经乖顺的儿子现在变得如同脱缰的野马。

在茵戈决定前去西雅图开始一段新的感情的时候,卡马克的烦恼得到了缓解,他搬去和父亲、继母以及继母的两个孩子住在了一起。尽管斯坦还是有一份不错的工作,但家里忽然多了一倍的人,这使得他们无法再保持原来的生活水准,他们搬到了城郊的一个陈旧农场,那里是雷顿镇的蓝领阶层社区。

卡马克从未感到过如此的孤独,他和一个陌生的家庭一起住在一幢陌生的房子里,每天还要去一所陌生的学校,那里没有计算机,没有程序,没有伙伴。

直到有一天,他发现他其实并不孤单。

《黑客:计算机革命的英雄们》(Hackers: Heroes of the Computer Revolution)是卡马克的启示录。他以前也听说过“黑客”,譬如在1982年的一部名叫《电脑争霸》(Tron)的迪斯尼电影里,杰夫·布里奇斯(Jeff Bridges)扮演的一名游戏设计师进入了他自己设计的游戏。还有1983年的《战争游戏》(WarGames)里,马修·柏德利(Matthew Broderick)扮演的年轻玩家进入了政府的计算机系统,并险些触发了核按钮。但这本书和那些电影有个很大的区别——它讲述的都是真人真事。这本由史蒂文·利维(Steven Levy)于1984年撰写的书里探寻了所谓“改变了我们世界的神童们”,以及他们那二十五年欢腾的岁月,书里讲述的敢于破除常规的计算机爱好者们包括了20世纪50年代在麻省理工研制大型机的先驱,以及70年代硅谷的“家酿”俱乐部和80年代计算机游戏业的领跑者们。没有什么模板可以概括出这些黑客们的特性,他们的经历千姿百态:比尔·盖茨,一个哈佛大学的辍学生,实现了第一个在阿尔塔(Altair)个人计算机上运行的BASIC语言环境,然后缔造了世界上最大的软件公司。还有史蒂夫·斯拉格·拉塞尔,威廉姆斯夫妇这些游戏制作者,以及两位史蒂夫——苹果的创始人,等等,他们都是黑客。

“尽管‘黑客’这个词在一些人看来有嘲笑的意味,”利维在序言里写道:“仿佛那些人要么是脱离社会的书呆子,要么就是堆砌乱糟糟的‘不标准’代码的‘外行’程序员,而我觉得不尽如此。在他们不起眼的外表下,他们是开拓者,他们是幻想者,是冒险家,艺术家……他们才是清晰地洞察到计算机之所以是种革命性工具的人。”

这黑客伦理观就像是一份宣言,当卡马克一天晚上躺在床上看完这本书的最后一页时,他脑海只有一个念头:这才是我应该属于的世界!——没错,他是个技术神童,但他现在却被困在这莫名其妙的房子里,每天去那没有计算机,没有黑客文化的莫名其妙的学校。

卡马克很快就遇到了能和他这些恼怒产生共鸣的人。他发现雷顿镇的孩子们比他以前在堪萨斯城里的那些同学要有趣得多,这里的孩子更边缘,更叛逆。他们中的一些很能和卡马克分享对计算机和游戏的热爱。不久,卡马克就和这些孩子混熟了。他们一起发现了BBS(Bulletin Board System:电子公告牌系统)。这是网络社区的雏形,一个未名的空间,一个地下的世界。尽管在20世纪70年代时已经有了被称为因特网(Internet)的国际化计算机网络,但那只是政府以及国防部门和大学等科研机构才用得上的东西。而BBS正好和因特网相反,它是大众化的计算机俱乐部,它是给所有人的,尤其是像卡马克这样的计算机和游戏爱好者。

BBS大约诞生于1978年。沃德·克里斯滕森(Ward Christensen)和兰迪·瑟斯(Randy Seuss)这两名黑客编写了第一个能在两台计算机之间通过电话线传输数据的软件,从而一台计算机可以“呼叫”另外一台并进行信息交换。在20世纪80年代,BBS迅速传播开来,并形成了有史以来真正意义上的虚拟社区,在这里,人们可以对换或是交易软件,并通过在论坛里发布信息进行“交谈”。任何有微型计算机的人,加上一根电话线和一个调制解调器,就可以开一个BBS。这种方便廉价的系统迅速传遍了世界,在宿舍的房间内,在大楼的公寓里,在计算机实验室中。其中一些,譬如旧金山的WELL站(Whole Earth ‘Lectronic Link),成为了黑客和玩家们的温床。

卡马克上BBS不光为了游戏方面的东西,在这里他还可以领略到最令人激动的黑客文化,这里面也有些违法的东西,譬如他学到了如何盗用电话线路,从而可以免费使用长途服务。他还见到了MUD(Multi-User Dungeons),一种类似《龙与地下城》的文字冒险游戏。此外,他还见到了炸药。

对于卡马克而言,炸药不光是能让人觉得刺激的玩艺,他更把它看做一种化学工程,一种纯粹的科学实验。如果搭配得好的话,可以让东西砰砰嘭嘭地炸开。很快他就和朋友们按照BBS上的配方着手演练了起来,他们把火柴头刮下,混合上硝酸铵,从而得到硝酸钾,再加上食糖,就得到了烟雾弹。他们还通过学校里自然课上的原料制作了铝热剂,这是种强大的可塑炸药。他们曾在放学后跑到桥下把桥墩的混凝土砖头炸开过。终于有一天,他们觉得应该利用这些知识做点更实际的事情,譬如弄几台计算机。

那个晚上,卡马克和朋友们摸到附近的一所学校旁,他们知道那里面有苹果机。卡马克刚学到铝热剂可以用来融化玻璃,只要再加上一些粘性的物质譬如凡士林;他把这两样东西调配在一起,然后涂抹在玻璃上,玻璃随之融开一个个大洞,他们就从这里钻了进去。而他们中的一个小胖子则遇到了麻烦,洞对他来说小了一点,于是他直接从洞里伸手进去打开窗户,然后成功地触动了连接到附近警察局的警报器。他们很快就发现自己被包围了。

十四岁的卡马克被送去做精神评估,以便于测定他的口供。他走进房间,肩膀上挂着彩。面谈进行的很不顺利,卡马克后来得知了那些人对他的评价:“这个男孩就像是一副会走动的躯体……完全不知道如何体会其他人的感受。”面谈中,一个男人玩弄着铅笔,向卡马克问道:“如果你这次没有被抓到,你觉得你还会不会再做类似的事情?”

“如果我这次没有被抓到,”卡马克诚实地回答道:“是的,我想我应该还会再做。”

后来给卡马克做评估的精神医师告诉他:“你知道吧,像这样直白地告诉别人你还会明知故犯,并不是一个明智的做法。”

“我事先说了‘如果我这次没有被抓到’的呀!”卡马克无所适从。

他被处以一年的教养,进了城里的“少年之家”。那里大部分孩子都是因为毒品进去,而卡马克则是因为苹果机。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

和在“少年之家”的生活比起来,以前和母亲住一起的那种死板枯燥的生活根本不算什么。在这里,所有事情都按照时间表进行:吃饭、洗澡、休息、睡觉。每做完一件家务活给一朵小红花,每天早上,所有孩子们被装上一辆货车运到学校里上课,放学时再把他们拉回“少年之家”。卡马克的性格开始变得冷酷麻木,他越来越愤世嫉俗,而对钻研技术的渴望却与日俱增。他的父母答应了给他买一台苹果机,尽管他们不知道卡马克从这些钱里拿了一部分给另一个“少年之家”的孩子,只是为了听一个有趣的传闻。

卡马克发现他最喜欢的是图像编程:创造一些二进制的代码并看着它们给屏幕带来生气;这种直接的反馈所带来的满足是其他编程工作所不具备的。他读了一些关于3D图像的书,制作了一个简陋的仅由线条组成的MTV的标志,可以在屏幕上转来转去;他也意识到,如果他想进一步探索这个世界,他必须要制作游戏。他不是那种坐着等待灵感的人,他直接沿用了现有游戏中的构思。《造影》(Shadowforge)是他的第一个游戏,在很多方面都和《创世纪》很相像,但有几个很独特的创新,譬如角色可以朝任意方向攻击。主营电池的“夜鹰”(Nite Owl Productions)公司花一千美元购买了它,这是卡马克平生第一笔收入,他用这笔钱把他的苹果机升级到了苹果II GS。

在开发脑力的同时,卡马克也开始锻炼身体。他练习举重、柔道、摔跤。某天放学后,一个喜欢欺负人的家伙找上了卡马克邻居的麻烦,结果成了卡马克练习柔道的沙袋。而其他时候,卡马克则用他的机智来反击,某人在和卡马克组成了一个地球学小组后,要让卡马克独自完成所有的作业,卡马克同意了,他们最后得了个F,“你怎么可能只得个F?”那家伙气急败坏地说:“你是这儿最聪明的人!”——卡马克是故意的,他牺牲了自己的分数,为了不让那个呆头鹅得逞。

卡马克那越来越明显的自负使他在家里越来越格格不入,尤其是他继母那些神秘的信仰和素食主义经常让他受不了。随着他和继母之间关系的紧张,父亲给他们弟兄俩在外面租了一套公寓,以便他们中学毕业后可以离开家住。搬进去的第一天,卡马克就带上了他的苹果机,并把杂志上的硬盘广告贴到墙上,然后埋头写他的游戏。

1987年的一个晚上,卡马克见到了那终极的游戏,那个在《星际迷航:下一代》(Star Trek: The Next Generation)电视系列片一开始出现的名叫“全息成像台”(Holodeck)的设备,它可以模拟出令人沉浸其中的逼真环境,可以用来娱乐休息,也可用做训练。这一集里,当船长面前的那道门缓缓打开并呈现出一个天堂般的热带海滩景象时,卡马克被吸引住了。这,就是虚拟世界,需要考虑是如何才能实现它。

卡马克高中毕业了,他父亲曾告诉过他有一笔属于他的托管基金,当他十八岁的时候,他就可以把钱取出来。而当他到银行的时候才得知他的母亲已经把钱都转到了她在西雅图的另一个账户上,她还是那个观念:如果一个人要进入计算机业,那么首先应该是念大学——最好是麻省那样的,然后取得学位,然后进入公司——最好是IBM那样的。所以她不肯让她的儿子把这些钱用在一些在她看来很荒谬的事情上——尤其是制作游戏。卡马克给她写了一封措辞尖锐的信:“我已经不再需要你告诉我该做什么了,为什么你自己还没意识到这点?!”但她没有松口,她的答复是,既然你独立了,那你也应该自己理财了,这笔钱只能用于上大学——而且只有在卡马克的成绩让她觉得满意的前提下,她才会把钱还给他,在此之前的学费还是要卡马克自己承担。

1988年秋天,18岁的卡马克很不情愿地在堪萨斯大学报了名,他选修的课程全都是计算机。他在学校的日子过得很是凄凉,他和其他学生没有什么来往,也不参加什么聚会和联谊活动,更糟糕的是那些课程,全都是考死记硬背的能力,没有挑战,没有创造性,在卡马克看来,这不只是无趣,这是一种侮辱。卡马克在一次测验的试卷背后给教授写道:“为什么你不能给个项目让我们来做?你要我做什么我都能完成!”在忍受了两个学期之后,他退学了。

更让他母亲来气的是,卡马克在一家比萨店干起了计时工,并全身心地投入了他的第二个游戏——《鬼魂》(Wraith)。苹果II GS机和它的前身一样,没有硬盘,所以卡马克不得不频繁地更换软盘,光这个就把他折腾得够呛。游戏完成的时候,他精心制作了一份描述文件:

鬼魂 “恶魔的禅让”

长久以来,阿拉西亚岛一直沐浴在和平中,作为岛上塔洛特城里玛蒂里亚神庙的护使,你的工作简单而平静。但事情开始有了一些变化,一股不明的势力使一些玛蒂里亚神的信徒们动摇了。

腐化席卷了整个岛屿,传言说一个强大的不死鬼魂将会赋予那些效忠它的人以权力和金钱,人们依次臣服了,各种怪物开始游荡在岛屿的各个角落,玛蒂里亚神庙成了正义力量最后的壁垒,你,就是阿拉西亚岛复兴的最后希望。

你在夜晚祈求着力量与指引,玛蒂里亚神奇迹般地出现了。她庄严地赋予你消灭那不死鬼魂的任务,她还要你注意提防征途上的危险。那鬼魂的力量源自一个魔铃,通向那里的惟一通道是星火城堡的水晶门,鬼魂在那里驻守了大量的卫队。

星火城堡位于塔洛特城东北方的一个小岛上,尽管距离不远,但一些恐怖的暗礁使你无法用通常的方式到达那里。你只知道那里不断有恶魔到你现在这片土地上来,尽管它们已被不死鬼魂洗脑,但它们心里仍然充满了贪欲,如果你能付给他们足够多的金钱,他们甚至有可能帮助你完成任务。玛蒂里亚神微笑着遁去了,只有她的声音还在回荡:“不要害怕,要勇敢,我的祝福保佑着你。”

你开始为执行任务做准备,可是,城里的人们都不是很情愿帮助你,他们要你用金钱来换取装备和魔法卷轴。噢,金钱,那是你所没有的,但鬼魂的党羽们却不缺的东西……

卡马克把游戏寄给了夜鹰公司——他前一个游戏《造影》的出版商。他们被吸引住了,尽管《鬼魂》的图像不是多么出众,仍然是大块大块的颜色,但它的内容比其他游戏则是多了去了,它可以玩更长时间。虽然《鬼魂》和《造影》一样卖得不怎么样,但卡马克还是得到了两千美元。他把这些钱用于了他的另一项爱好:改装他那辆棕色的美洲豹(MGB)。

尽管还不能算是个真正的自由职业者,但卡马克已经喜欢上了这种生活方式。他可以自由地支配时间,想多晚睡就多晚睡,更棒的是,他不用听别人使唤或是回答别人的问题。他很乐意这一生就这么写写程序,改改汽车,玩玩《龙与地下城》——就这么简简单单。他只需要认真地做出更多的游戏。

不久后他在一份计算机杂志的背面看到了另一个出版商,一家在路易斯安那州什里夫波特市的《软盘》杂志。他寄去了一份网球游戏,里面球的各种飞行线路做得非常逼真,这个游戏立刻就被采用了,而且编辑让卡马克继续投稿给他们。而这时的卡马克已经是个很精明的商人了,受《创世纪》系列的启发,他向编辑建议,与其做一个单独的游戏,不如做一个三部曲——这样他就可以有三倍的收入。《软盘》杂志采纳了他的提议,和他签了个名叫《黑暗构思》(Dark Designs)的三部曲角色扮演游戏。

卡马克还发现了一个新的赚钱途径:把他那些苹果机上的游戏转换到一种名叫IBM-PC的机器上。他对这种新兴的系统几乎一无所知,但这对他而言正好是一个编程上的挑战。他驱车到一家商店拉回一台PC机,一个月后,他不光给《软盘》寄去了苹果机上的《黑暗构思》,还附了一份转换过的,或者说是“移植”过的PC版本。卡马克通宵达旦地工作,他已经可以很熟练地同时推出三个平台的版本:苹果、苹果II GS、PC,而《软盘》会买下所有这些版本。

每出一个新游戏,《软盘》的编辑就会请求卡马克去他们那里做一次面试,他们纳闷着这究竟是个什么样的孩子,居然可以用正常人一半的时间就自学完一门全新的编程语言?卡马克一开始毫不犹豫地把他们拒绝了——为什么要去公司上班呢?那只会把他的生活搞得乱糟糟。但最终,编辑的持之以恒打动了他,而且,他刚在美洲豹上加了些新设备,也算是出趟远门的一个理由吧。

第三章:侵犯版权的戴夫

早在计算机游戏这种新的模拟方式出现之前,什里夫波特就已经以模拟艺术而闻名于世。1864年美国内战中,特恩布尔堡的南方联盟军把烧焦的树干放在了四轮马车上来冒充加农炮,成功吓跑了北方联邦军的部队。南方联盟的一个将军在视察这个堡垒时,训斥这里的指挥官说他的防御“全是些唬人的玩意”,那个地方随后就被称为“唬人堡”。

一百二十年后,什里夫波特有了新的模拟武器——在《软盘》杂志发行的那些游戏里。这份杂志的经营者名叫艾尔·维科威尔斯(Al Vekovius),他以前是路易斯安那州立大学什里夫波特分校的数学教授。尽管他还只有四十多岁,但已经开始谢顶,幸存的头发里又有一些总是不安分地直立着,就像通了静电。他还和七十年代教书时一样,平时喜欢穿毛线衫,打一条不显眼的领带,走起路来三步并做两步,尽管他不高也不胖,但年轻人们都亲切地称呼他“老艾”。当黒客思潮在麻省和硅谷回荡时,作为计算机学院的头,艾尔从一开始就怀着使命感和热情参与其中。在这时代精神的鼓舞下,艾尔和学院里另一位数学家吉姆·曼格汉姆(Jim Mangham)于1981酝酿了一个商业计划:计算机软件订阅俱乐部。订户每个月只需要花不多的钱就可以收到一张全新的磁盘,上面装满各种各样的工具和娱乐程序,从理财软件到单人纸牌等。这个计划对他俩来说再自然不过了——和订户们一样,他们自己也都是计算机爱好者。

在那个年代,大型软件出版商的眼中几乎没有这些爱好者,他们只看重通过零售的方式来运作。尽管这些爱好者们可以聚集在BBS上交流,但早期调制解调器的速度太慢了,根本无法成为一种分发软件的方式。在这种情况下,每月一张的软盘自然而然地成为了软件发行的地下渠道。而且,对于那些没有其他途径发布软件的年轻程序员们,这里还是他们展现自己的舞台。总而言之,这种杂志就像音乐界的独立厂牌,把若干地下乐队的作品制作成一张合集出版。

《软盘》杂志于1981年发行了面向苹果机的创刊号,业务发展得很好,随后他们开始涉足卡曼多计算机的软件。1986年,他们开始发行IBM-PC及其兼容机的软件,所谓兼容机,就是指可以运行同样操作系统的机器。在经过那么多年的发展后,个人电脑的价格终于变得可以被普通用户接受,随之涌现了大量的新用户。到1987年的时候,《软盘》的发行量已经达到了十万份,每月订费是9.95美元。艾尔当选了1987年度什里夫波特杰出商务人士。

蒸蒸日上的业务也带来了更大的挑战,艾尔现在经营的是一个资产达1200万美元,员工总数120名的大公司了,还有很多竞争者们在后面追赶,其中包括新罕布什尔州的《新时代》,他开始觉得有点力不从心。1988年的冬天,艾尔给杰伊打了个电话,他们是在一次游戏业者大会上认识的,杰伊现在还在《新时代》做编辑,艾尔问杰伊愿不愿意到这边来帮忙,而杰伊在那里正觉得很不受老板赏识,而且他受够了那阴冷的气候,于是他答应加入《软盘》杂志社,负责经营苹果II软件部。杰伊还告诉艾尔,他认识两个游戏程序员也正在找工作,一个名叫雷恩·罗瑟(Lane Roathe)的前《新时代》雇员,另一个名叫约翰·罗梅洛。

艾尔听到这个消息后激动不已。尽管他也时不时地在《软盘》杂志里放一些游戏,但他已经意识到这远远不够,他能感觉到正在浮现的PC娱乐市场里所蕴藏的巨大商机,他看到了雪乐山娱乐、布罗德邦德(Broderbund)、电子艺界和维真这些成功的先例,《软盘》没有道理放弃这块大蛋糕。他让杰伊把那两个游戏程序员也带过来。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

对罗梅洛而言,这个机会真是再好不过了,他刚经历了一连串的失望,从新罕布什尔洲寒冷的冬天,到错误地离开了维真的好工作而加入他老板那注定失败的新公司,他和妻儿们相隔着整块大陆,她们正等着看他如何能重整旗鼓。尽管他一开始很成功,但他渴望的家庭生活又渐渐离他远去了。他期望着能在南方的路易斯安那州改变他的处境,开始新的生活。1989年夏天,罗梅洛、杰伊、雷恩三人动身前往什里夫波特。

光是旅途本身就已经让罗梅洛的心情好了很多。雷恩是一个和罗梅洛志趣相投的人,罗梅洛曾和他一起住了一个月。他比罗梅洛大五岁,但背景很相似:他的童年在科罗拉多度过,和罗梅洛出生的地方相隔不远,他也是听着重金属,看着地下漫画,玩着游戏长大的。现在的他是一个无拘无束的人,随意地把大手帕系在额前,裹住一头长发。他和罗梅洛相处得很好,尽管他没有罗梅洛的那种野心和似乎用不完的精力,但他们都热爱苹果机编程的微妙技巧及其所带来的欢欣。而且和罗梅洛一样,雷恩也只想做游戏,他自己的公司名叫蓝山科技(Blue Mountain Micro),和罗梅洛的“顶级思想”一样,雷恩是蓝山科技的光杆司令。在新罕布什尔的时候,他们合并为“深思软件”(Ideas from the Deep)。

杰伊也是个玩苹果机的家伙,但是属于另外一类,他自己也说,其实他不能算是个程序员,但他有两个特点让罗梅洛很在意:一是他对苹果机的代码理解得很透彻,二是他对游戏有着无比的狂热。杰伊已经三十岁了,比罗梅洛大七岁,他在罗德爱兰州长大,父亲是保险仲裁师,母亲是贺卡销售员,他高中的时候个子已经长得很高,但对体育却不在行,而是对机器很有一套,无论是打《行星撞击》还是拆他的摩托车。他在二十几岁的时候经历了一次交通事故,保险公司的赔款给他带来了一台苹果机。但很快杰伊就发现他其实并不喜欢程序员那种孤独的生活方式,他更喜欢和人唠唠嗑,打发一些好时光。于是他去了TGI星期五夜总会做酒保,他在那里很受欢迎,在汤姆·克鲁斯拍《鸡尾酒》(Cocktail)一片的时候,他甚至被选中了去教这位大明星如何调酒。杰伊的交际能力使他进入了酒店管理业。而随后在《新时代》的工作对他的能力发挥而言更是再适合不过:他既是个管理者,也是个狂热的玩家。现在,他就要去《软盘》了,他期待着能大展一番拳脚。

当这三人抵达什里夫波特的时候,他们已经熟得像老朋友一样了,他们路上还在迪斯尼乐园停下来玩了几天,这旅途对他们而言就像一次新鲜刺激的冒险一样。然而未来对他们来说却是一个问号,当他们的车开进什里夫波特城区的时候,他们甚至都不知道自己究竟到了没有。

什里夫波特位于路易斯安那州西北角,紧靠着德克萨斯州。1989年的时候,这个城市才刚刚起步,石油经济泡沫的破灭使这里陷入了一片萧条,四下蔓延的沼泽地使本就潮湿的空气益发凝重。城里到处是无家可归的人,为了躲避炎炎烈日,他们聚集在那些破旧的建筑后,这其中两幢就是《软盘》的办公室。《软盘》的行政管理部门建在一个柏油停车场旁,门口的马路延伸到小山脚下,在这里上班的人就像是被关在箱子里不见天日的蚂蚁一样。

艾尔激动地从房间里跑出来迎接他们,然后喋喋不休地向他们介绍公司发展得是如何迅速,而他又是多么期盼他们的加入。罗梅洛和雷恩给他看了《扎帕行星》(ZappaRoids)——他们自己做的类似《行星撞击》的游戏,艾尔很满意,不光是因为他们那显而易见的编程能力,更因为他们那年轻人所特有的热情。

罗梅洛一开始就把他的雄心告诉了艾尔:他没有任何兴趣去做那些工具软件,他只想做大型商业游戏。这和艾尔正好不谋而合,他告诉罗梅洛,能进入游戏领域是多么让他激动的事情,而罗梅洛和雷恩就是这个新成立的特殊项目部的开路人,这个部门将完全专注于游戏开发。走出房间的时候,艾尔拍了拍罗梅洛的背说:“噢,对了,如果你们需要租房子住的话就告诉我一声,我在城里有地方可以租给你们,我的副业是房东。”

罗梅洛、雷恩和杰伊离开了《软盘》的行政大楼,走向另外一幢楼,那里是程序员们或者说“聪明人们”工作的地方。作为一家软件公司,它看上去毫无乐趣可言:楼上楼下都是些保险经纪公司,每个程序员都有一间装着荧光灯的办公室,四下里一片静悄悄,没有音乐,没有欢笑,没有人玩游戏。这里就像是一口高压锅,每个月捂出那么几个程序。

罗梅洛向里面的人做了自我介绍,他们接下来就询问罗梅洛:“艾尔有没有要租房子给你们?”罗梅洛照实回答了他们,结果引来了一阵窃笑,其中一个人告诉他不要去租艾尔的房子:“我以前也跟你们一样,刚到他就说有房子给我,结果是一间地段很糟糕的小木屋,这还不算,等我住进去以后才知道什么叫‘脏乱差’,我刚在沙发上躺下,就看到一只大虫子从地板的一个破洞里探头探脑地爬了出来。”

但现在没有什么东西能让罗梅洛沮丧了,他已经回到了他的道路上,他有了一份制作游戏的工作,凯俐和两个孩子会喜欢上这个新环境的。这对他而言是一个全新的开始,一切都那么美好。他给凯俐打了电话,让她们赶快整理行囊搬到什里夫波特来。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

罗梅洛和雷恩立刻就在特殊项目部动手干了起来,这简直就是他们梦寐以求的工作。除了游戏之外,罗梅洛还有个当务之急的事情,那就是脱离苹果机,转向PC机。他就告诉艾尔,他觉得苹果机已经日暮西山了,主要是因为IBM-PC及其兼容机的兴起,而且苹果公司拒绝整合进IBM的软件标准,这直接使得用户在选择的时候更加偏向于IBM-PC机。但罗梅洛没有告诉艾尔,其实他自己感觉有点落伍了,他过去的一年里对苹果机太过于投入,以致他现在已经跟不上PC的潮流,如果他还想成为未来富翁和王牌程序员的话,他得赶快掌握PC机的编程,亡羊补牢,为时不晚。

“一个人不可能在同样的机器上一直做下去,”他对艾尔说道,“虽然我现在对PC不是很在行,但我学得快。”

艾尔告诉他没有关系:“尽管去做你想做的事。”

罗梅洛想做的事是学习一种很热门的叫做C的计算机语言。但他随后才发现他没法学习这门语言,因为公司里没有一个人会用它,罗梅洛觉得被绊住了。在改进《扎帕行星》的过程中,他开始啃起了书本,吸收一切他能接触到的关于PC编程的知识,譬如Pascal语言和8086汇编语言,很快他就把他以前一个叫做《埃及金字塔》(Pyramids of Egypt)的苹果机游戏移植到了PC上。第一个月,他的作品就被收录在《软盘》杂志针对PC的主要刊号“大蓝盘”上。他在PC上干得很漂亮,但麻烦也因此而起,PC部门被繁重的任务压得毫无生气,他们越来越依赖于罗梅洛的个人能力。第一个月结束的时候,罗梅洛帮别人重写PC程序的时间远远超出了他花在游戏制作上的时间。而且,他还没有察觉到,特殊项目部正面临着解散。

艾尔希望罗梅洛来制作PC上的工具软件。雷恩,尽管可以和罗梅洛到一个部门,却选择了继续编写苹果机的软件。罗梅洛后来回想道:这是第一次,他的朋友对未来的看法和他不一样。成功的机会在PC机——而不是苹果机——的游戏里。为了学习PC机编程,罗梅洛同意暂时加入PC部门,但他告诉艾尔,当时机成熟的时候,他还是希望能回到游戏制作上来。

但时机似乎永远不会成熟,罗梅洛开始对工作生厌。他几乎在一整年的时间里都在编写PC工具软件,尽管他想通过移植一些以前的苹果机游戏来提高PC编程的水平,但在那时候,PC机基本上只被看做是运行商业程序的平台,毕竟,它只能显示少数几种颜色,通过微小的扬声器来发出声音。罗梅洛离他想要的那种全职的游戏制作生活还很遥远。更糟糕的是,他的家庭也出现了问题。为了省钱,他让妻儿们搬到了附近霍顿城的一所房子里,和雷恩还有杰伊住在一起。罗梅洛总呆在公司工作,凯俐没有什么社交活动,整天看着孩子们在房间里跑来跑去,这样的生活对她而言简直苦闷至极。罗梅洛给了她各种许诺,但她只是缩在沙发里闷闷不乐,她开始觉得没有任何东西能比游戏对罗梅洛更重要了。

抛开了家里人并没有使罗梅洛的工作变得好多少。艾尔觉得这越做越大的生意给他带来了太多麻烦,为了维持纪律,他的管理手段开始变得强硬。罗梅洛和雷恩因为受不了荧光灯在屏幕上的反光把它们关了,艾尔为此训斥了他们一顿,罗梅洛还因为他那开得过大的音乐声而被批评,他只能不情愿地戴上了耳机。让罗梅洛不爽的还有那些同事,那些同事给他的第一印象就是毫无士气,而实际上他们比这更糟糕,从他们身上看不到任何积极性。一个做技术支持的家伙动不动就趴在桌子上睡着——甚至是在他接听客户电话的时候,罗梅洛养成了用重金属把他叫醒的习惯。还有苹果机部门里那个从山里出来的野人,他原本是在惠普(Hewlett Packard)工作,这个短路的家伙有一天不知道怎么回事就跑到山里住了一年,然后穿着一件短小的甲克,留着又长又乱的胡子来到《软盘》接管了苹果机部门,但罗梅洛没觉得他那禅宗般的哲学人生观对这个部门的发展有什么用。

忍无可忍的罗梅洛向艾尔发难了:“你跟我说过会有大型的商业游戏让我来做,但你看看我现在都在干些什么,我整天在帮PC部门的那帮人写工具软件。如果再这样下去,我就要离开这里去卢卡斯工作室(LucasArts)了。”罗梅洛指的是创造了《星球大战》(Star Wars)的乔治·卢卡斯(George Lucas)新开的一家游戏公司。老艾不希望这样,罗梅洛已经证明了他是这里最有价值的员工之一,艾尔很钦佩罗梅洛那种专注的劲头,不论什么时候他走过去检查,罗梅洛总是坐在他的机器前,眼睛紧盯着屏幕,几个小时不停歇地工作。艾尔对罗梅洛说,他不希望他离去。

罗梅洛告诉艾尔,他过去一年里都在关注各种PC游戏的事物,他觉得这里面有很大的发展空间,因为那个时候PC机还不如苹果机强劲,所以它上面的游戏毫无亮点——全都是些简陋的静态画面,跟苹果机上面那些丰富多彩的游戏根本没法比。现在正是出手的好时机。艾尔赞同罗梅洛的想法,他建议发行一份游戏特刊,每月一期。

“月刊?”罗梅洛吓了一跳:“不可能,一个月的时间绝对不够。”

“可是,我们的订户们已经习惯了每月一张盘了,”艾尔说:“或者我们可以暂时做成双月刊,但还是要尽快做到每个月一期。”

“我觉得这比较可行,尽管时间还不是太充裕,但我们还是可以做些拿得出手的东西来。我需要一个小组:一个美工,一两个程序员,一个项目经理,我可不想整天坐在那里为管理的事情操心,我要写程序。”

艾尔告诉罗梅洛不可能给他加一个全职的美工,他只能把工作转给现在的美工部门的员工来做,但他可以有一个项目经理和另一个程序员,而且艾尔让罗梅洛自己去找。

罗梅洛迫不及待地跑回苹果机部门的办公室,去告诉雷恩和杰伊这个好消息:“伙计们!我们就要开始做游戏啦!”

雷恩将会成为这个名为《玩家之刃》(Gamer’s Edge)的PC游戏双月刊编辑,现在只缺一个熟悉PC的程序员,而且,这个人必须是像雷恩和罗梅洛那样的玩家。杰伊说他倒是知道一个年轻人绝对适合这个位置,这个人寄来过不少精彩的游戏,他甚至知道如何把苹果机游戏移植到PC上。罗梅洛立刻被吸引住了:我不也正在学习移植游戏吗?他觉得杰伊可以试着把这个年轻人挖过来,但杰伊告诉他行不通,他早就试过,那个天才小子已经三次拒绝了《软盘》给他的工作,仅仅是因为他不喜欢在公司上班。罗梅洛恳求杰伊再试一次,虽然杰伊心里没抱什么希望,但他还是拿起电话,最后一次向卡马克伸出了橄榄枝。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

当卡马克开着棕色的美洲豹到《软盘》的时候,他根本没想着要接受这份工作。尽管作为自由职业者,手头总是比较拮据,经常要纠缠着杰伊和其他编辑赶快把支票寄过来买日用品,但他还是喜欢这样的生活方式,虽然说生活稳定一点也没有什么不好,但他并不急于用他的勤奋和聪明来换取一种稳定的生活,得有一些更能打动他的东西才行。

当艾尔见到卡马克的时候,他惊呆了,这就是他总听人提起的那个天才小子?这个穿着褪色的T恤和挂着一道道口子的牛仔裤,除了身上有点肌肉,不然看上去还没到青春期的孩子?!但当艾尔向他介绍起《玩家之刃》的计划时,卡马克说了一些独到的看法,在他看来,所谓很紧张的日程根本不是什么问题,他还毫不留情地评价了当时的游戏,包括《软盘》出版的那些。艾尔领着卡马克去参观另外一幢楼,罗梅洛和雷恩正在里面急切地等着他们过来。走道边的一大摞《多伯博士》(Dr. Dobb’s Journals)让卡马克对这里增添了不少好感,那是源于“家酿”俱乐部的黑客杂志。但给卡马克留下最深刻印象的还是与罗梅洛和雷恩的那一场交谈。

这三个程序员几乎是一见面就开始了关于游戏编程的热烈讨论,从苹果机上16位图像模式下的双倍分辨率,到8086汇编语言的技巧,他们一刻不停地谈论着,不光是计算机方面的东西,还有其他方面的共同爱好:《龙与地下城》、《行星撞击》、《魔戒》。卡马克讲到他小时候是多么渴望拥有一台计算机,罗梅洛听了后说:“伙计,我那时候要是能给你买一台就好了。”

卡马克完全没有预料到能遇上和他一样聪明的人,尤其是在编程方面。这两个家伙不光是能侃,他们的确知道比卡马克更多的东西。“他们不只是和我差不多,他们比我还要优秀。”卡马克想道。罗梅洛是个让人振奋的家伙,不光是他编程的水平,还有他其他方面的能力——他的艺术天分、他的设计创意。卡马克是个自负的人,但如果有人的确比他优秀,他也不会盲目自大,正相反,他会留下来虚心学习——他会接受《软盘》的这份工作。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

现在《玩家之刃》有了人手,公司把后面的一个小房间给他们作为办公室。但他们还缺一台重要的机器——电冰箱,因为做游戏开发需要有大量的垃圾食物储备,譬如苏打水和比萨饼。罗梅洛、卡马克和雷恩决定先自己凑180美元买一台二手货。当他们把这奢侈品搬进走道时,他们明显感觉到了其他同事嫉妒的目光。在接下来的一个星期里,他们还不断地往里面搬入各种东西:微波炉、音响、任天堂(Nintendo)。“罗梅洛这个家伙居然搬了台游戏机进来?!”同事们出离嫉妒了,罗梅洛只好跟他们解释说这是用于研究的。但同事们不吃他这套,更让他们受不了的是,接下来还有工人推着一批崭新的386PC走进了那个所谓的游戏部门,这可是当时最强大的机器,公司里其他员工的机器只有它四分之一快。

当《玩家之刃》一切就绪的时候,他们把比萨放入微波炉,插上电源,就在按下加热钮的一刹,办公室陷入了黑暗——保险丝跳闸了。其他员工们觉得无法再忍受下去,他们找到了老艾。而老艾告诉他们,这些游戏部门的人,不是来这里玩的,他们是来拯救公司的,“没错,拯救我们。”他还告诉这些员工,最近几年的兴旺快到头了,公司现在大部分资源都在苹果机部门,但苹果机已经是强弩之末,他最近甚至不得不在一天之内裁掉了二十五个人。他正告那些怨声载道的员工:“听着,不要发牢骚,如果游戏部门能跑出个本垒打,那对我们都是好事。但也不要担心,会好起来的。”

其实艾尔心里也吃不准。他走到《玩家之刃》的办公室前,推开门,里面漆黑一片,只有显示器微弱的亮光,他试着打开灯,但开关却没有反应。

“噢,我们把那些烦人的灯管都卸掉了。”罗梅洛告诉艾尔。

“嗯,荧光,对眼睛不好。”雷恩头都不抬地解释道。

艾尔抬头一看,只见灯管插座光秃秃地露在外面。他们显然已经把这里当做自己家了,艾尔再看向四周:微波炉、冰箱、快餐,音响里放着金属乐队,墙上贴着长发乐队沃伦兹(Warrant)的招贴画,卡马克和罗梅洛,还有雷恩,各坐在一台昂贵的机器前。艾尔来气了:“是这个样子的,我们不能过两个月才出第一期游戏盘,我们必须四个礼拜就拿出来,而且你们要有两个游戏放在里面,这样才能吸引用户。”

“一个月?!”他们叫道。原先两个月的期限已经够紧了,他们根本不可能再从头开始做出两个游戏,他们只能把现有的苹果机游戏移植到PC上来,这正是卡马克和罗梅洛都擅长的事情,他们甚至连移植什么都想好了,一个是《危险的戴夫》(Dangerous Dave),光从名字就能看出是出自罗梅洛之手,另一个是卡马克的《墓窖》(The Catacomb)。

《危险的戴夫》是罗梅洛在1989年给《新时代》做的,这是款简单的冒险类游戏,玩家在游戏里是一个穿着紫色紧身衣戴着绿帽的小人——屏幕上的几个像素,他需要连跑带跳地穿过各种迷宫,搜集珍宝,当然前提是保住性命。这和罗梅洛很欣赏的一个叫《大金刚》(Donkey Kong)的任天堂街机游戏很类似。

《墓窖》是卡马克继《造影》和《鬼魂》之后最新的一款角色扮演游戏,卡马克显然是受了街机游戏《金手套》(Gauntlet)的影响。在那个流行的游戏里,玩家要在迷宫里射击、施魔法,杀出一条血路,它就像是《龙与地下城》的动作版。这也是罗梅洛和卡马克的一个共同点:他们都喜欢动作类的街机游戏,他们渴望着自己也能做出那样的游戏,而且,他们对自己的能力充满自信。于是他们调大音响,着手工作。

罗梅洛愉快地把接下来的那段经历称为“压榨模式”,或者是“死亡进度”。他们自虐般地享受着通宵达旦的编程,伴随着大量的咖啡和轰鸣的音乐。出于纯粹的竞技精神,卡马克和罗梅洛开始比试谁能先把自己的苹果机游戏移植到PC上。很快,王牌程序员就领教到了天才小子的厉害,卡马克轻松地领先了罗梅洛。他们玩得很开心,罗梅洛对他的这个新朋友兼同事充满了敬佩。他们就这样每天编程到深夜。

但对罗梅洛,这自由生活的背后其实隐藏着难言的苦衷——他离婚了。

未来富翁这个目标对二十二岁的罗梅洛来说已经是一个不小的挑战,更别提同时还要做一个合格的丈夫和父亲。但凯俐对罗梅洛所热爱的游戏毫无兴趣,她的情绪变得愈发消沉,她想要家庭晚餐、到教堂做礼拜、周末野餐,而罗梅洛又对这些事情打不起精神。他也曾尝试着使事业和爱情能双丰收,他甚至在其他同事还在干活的时候就提前离开办公室。但家庭生活是个无底洞,罗梅洛不知道他有没有那么多的时间和精力,尽管他也想拥有一个他儿时没有的美满家庭,但他有时又觉得自己天生不是那样的好老公和好爸爸。最后他和凯俐都认为只有分手是对大家都好的办法,但凯俐不止要分手,她还要回到加州的家里,罗梅洛听到她这个决定后几近崩溃,他同时还得知孩子们也不会和他生活在一起。但他安慰自己说距离远一点没什么关系,只要有心,就算隔着几个州,孩子们和他之间的距离肯定能比他儿时和父亲之间的距离要近。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

罗梅洛没有在家庭事务上长吁短叹,而是全身心地投入了游戏制作。卡马克和罗梅洛在移植游戏的过程中完成了磨合,他们找到了最能互相取长补短的合作方式。卡马克最感兴趣的是编写游戏的核心部分——引擎,这个模块负责指示计算机如何在屏幕上显示图像。罗梅洛乐于做各种辅助工具,由此他们才能制作出游戏的角色、环境、地图,此外,罗梅洛还喜欢做游戏设计,譬如游戏是如何操作、打斗是什么样子、怎么个玩法最有意思。他们两人就像阴和阳那样和谐互补:卡马克编程很有天分,而罗梅洛则擅长设计以及美工和音效。卡马克很小就开始打游戏,而谈到游戏,没有人能和罗梅洛比。一个终极程序员和一个终极玩家——放在一起就是完美的组合。

但雷恩却不是很合拍。虽然他是《玩家之刃》的编辑,但和罗梅洛不一样,他不热心于PC,这使他和大家越来越疏远。在罗梅洛眼中,这个老朋友根本无法胜任进度如此急迫的工作,他只会是拖大家的后腿,而罗梅洛不希望有任何因素影响他们的绩效,就像他很快就和雷恩成为朋友一样,他也很快就觉得雷恩是个多余的家伙,在他看来,只要有卡马克加他自己,就足以应对一切挑战。一次雷恩不在办公室的时候,罗梅洛不停地在房间里踱来踱去,然后跟卡马克说:“我们把这个家伙弄走吧。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

与此同时,卡马克和罗梅洛,尤其是后者,心里已经有了另一个合适的人选:汤姆·霍尔(Tom Hall)。汤姆是个二十五岁的程序员,在罗梅洛加入《软盘》之前,他就一直在苹果机部门工作,在罗梅洛看来,他也是个“歇斯底里的家伙”。高大诙谐的汤姆就像是生活在另一个怪异的世界里,没有什么东西能跟上他脑海里不断涌出的各种奇思妙想,他的办公室里贴满了黄色的便签和涂鸦,他的屏幕上每天都会变换出一些莫名其妙的短句,譬如:“粘糊糊的冒险和神奇的布洛普”。当他遇到罗梅洛时,他总会扬一扬眉毛,然后发出一声不像是地球上生物有的声音。而且,他也是个玩家。

汤姆在威斯康星州出生和长大,他的父亲是工程师,母亲是记者。他母亲,用他的话说,是“密尔沃基的厄玛·卜穆贝克”(译注:Erma Bombeck,美国当代幽默作家,被誉为全美最有趣的母亲)。他不需要像罗梅洛或卡马克那样费劲周折才能玩到游戏,他的父母在发现了家里这个老幺对游戏的喜爱时,立刻给他买了所有东西:先是一台雅达利2600家用游戏机,然后是苹果II。

小汤姆是个精灵古怪的孩子,他会头上戴着绿湾包装工橄榄球队的头盔,脚上穿着匡威运动鞋,在房间里跑来跑去。在学校里,他的宝贝是一个棕色的杂货袋,里面塞满了各种涂鸦和八毫米胶片,他到哪都带着它,上课的时候则把它放在课桌边。后来他换了一个小书包来放那些东西,到他进高中的时候则变成了一个背包。

汤姆还是一个《星球大战》迷——他总共看了三十三遍。此外他还热爱各种花样运动,他是全州的飞盘高尔夫冠军,他喜欢纸艺,还喜欢搭建多米诺骨牌,譬如把房子周围摆的像一个迷宫,当其他孩子们崇拜各种流行歌星和体育明星的时候,汤姆的偶像是鲍勃·斯贝卡(Bob Speca)——职业骨牌选手。

当汤姆拿到苹果机的时候,一个无穷的世界在他面前展开了。与卡马克和罗梅洛一样,汤姆竭尽所能地自学了制作游戏的知识。在他进入威斯康星大学计算机系的时候,他已经做了快一百个游戏,其中大部分是模仿《大金刚》那样的街机游戏。但不同于卡马克和罗梅洛的是,汤姆很喜欢学生生活,他选修了各种各样的课程,从语言学到物理学,甚至是人类学。汤姆相信他可以通过计算机游戏这种独特的媒体把各种知识融合在一起派上用场,譬如他可以为游戏中的外星人创造一种新的语言,他可以编写出逼真的物理效果,他还可以撰写故事,创造角色。

汤姆积极地参与校园里的各种志愿者活动,后来他开始给学习能力有障碍的孩子们编写辅助教学软件。他喜欢做这件事,他喜欢看孩子们进入他创造的那个世界时的表情——他的游戏不再只是他自己一个人玩的了。尽管游戏还没有被认为是一种正统的表达方式,更不要说是艺术形式,但汤姆觉得那至少是一种不凡的沟通手段,就像电影和小说。

大学毕业的时候,汤姆发现他的梦想破灭了,他投往游戏公司的简历总是石沉大海。大部分毕业生都面临着梦想和现实的矛盾,汤姆和他们一样,选择了放弃,开始去寻找一份“真正的”工作。每当他穿上西装去参加面试,桌子对面的人都会问他一个同样的问题:“这份工作真的是你想要的吗?”汤姆清楚地知道答案,而且他会听从自己心里的声音:“不是”。几经挫折后,他在《软盘》谋得了一份职位。

一年多以后,罗梅洛来到《软盘》时,汤姆立刻就喜欢上了这个家伙,罗梅洛也喜欢汤姆最近的一个名叫《战斧星球的传说》(Legend of the Star Axe)的游戏。它显然取自于汤姆最喜欢的书《银河顺风车旅行指南》(A Hitchhiker’s Guild to the Galaxy):一本英国作家道格拉斯·亚当斯(Douglas Adams)的小说,里面融合了英国喜剧团体巨蟒(Monty Python)的幽默风格以及《星球大战》的科幻元素。汤姆在这个游戏里把一辆雪佛莱(Chevrolet)搬进了银河系,他还设计了许多有趣的种族,譬如喋喋族——这种长着两只大眼睛的绿色生物总喜欢围着别人不停地唧唧喳喳。

罗梅洛和卡马克的共同点在于他们都是程序员,而罗梅洛和汤姆的共同点则在于他们都是喜剧演员,他们总是能一唱一和,譬如聚在一起琢磨汤姆创作的外星人语言应该如何发音,当然他们最后的成果也无非就是“哔哔……嘟嘟……哔嘟哔嘟……”。他们还都喜欢黑色喜剧,互相讲黄色笑话,并乐此不疲。

当卡马克和罗梅洛忙于移植《墓窖》和《危险的戴夫》时,汤姆总会时不时地过来帮忙,而雷恩却越来越懈怠。罗梅洛终于决定正式招募汤姆为《玩家之刃》的主编,负责管理,而汤姆也和他们以前一样,渴望着全身心地投入到游戏制作中,并且,汤姆也意识到苹果机的好日子快到头了,PC游戏才是未来,他的未来。但老艾却不同意,他说汤姆已经是苹果机部门的主编,他还得留在那儿。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

尽管很失望,但卡马克和罗梅洛觉得暂时缺少汤姆也能继续下去,真正让他们无法进行下去的是缺少一个美工。虽然那个年代的程序员在美工方面大都是自力更生,但这显然不能满足卡马克和罗梅洛的雄心,如果他们想做更好的游戏,他们就还需要一个专业并且专注的美工,就像他们分别专注于编程和设计一样。罗梅洛以前那些苹果机游戏的美工都是他独立完成的,他自己在这方面已经很棒了,但他想把这项工作转交给其他人——二十一岁的艾德里安·卡马克(Adrian Carmack),《软盘》的临时工。

很凑巧,艾德里安和卡马克的姓氏一样,但他们没有任何血缘关系。从到《软盘》的那一刻起,垂至腰际的黑发就使艾德里安在死板严肃的美工部门显得格外与众不同。那个部门,在罗梅洛看来,和这个公司的其他部门一样,懒散得没救了。那些人不玩游戏,他们脑海里甚至都没有这种东西,他们每天上班就是给支票结算软件画一个个小图标,然后到点就走人。只有艾德里安看上去不是那么无趣,而且——他有好多重金属乐队的T恤。

但罗梅洛不知道,艾德里安其实也不算是个玩家,至少不再是了——尽管游戏曾经把他引上了艺术的道路。在什里夫波特长大的艾德里安也经历了街机的年代,整个下午都和朋友一起打《行星撞击》和《吃豆子》,他是如此喜欢那里面的美术图案,以至于他上课无聊的时候,就在笔记本上画下那些游戏的配图,有时候也画一些莫利哈切特(Molly Hatchet)这类金属乐队的唱片封套。还在青春期的他,已经沉入了艺术的世界,而把游戏抛在了身后。

小艾德里安的心灵还遭受着一些其他事情的冲击。他的父亲,本地一家餐饮公司的腊肠销售员,在艾德里安十三岁的时候因心脏病突发去世,这使得本就沉默敏感的艾德里安愈发的乖僻,尽管他那做信贷员的母亲和两个妹妹尝试过帮助他,但他还是逃避到绘画的世界里,他还养了一个蝎子作为宠物。对于这样的一个孩子,萦绕在他心头的自然都是一些黑暗的主题。

在艾德里安上大学的时候,他经历了更为真实的体验。为了挣钱念书,他在本地一家医院做起了助手,他的工作就是冲洗那些在急救室里拍下的病人照片,那全是疾病和惨祸——他看到严重的褥疮导致的皮肤脱落,他看到枪伤,他看到残肢断臂。有一次他甚至看到一根栅栏柱穿过一个农夫的腹股沟,照片质量很好,非常清晰,他拿了几张卖给朋友。

他的绘画变得更加阴暗,但也更具水准。他在大学的美术导师列莫恩斯·巴坦(Lemoins Batan)很赏识他的才能,尤其是他的准确和看似毫不费劲的精细。当列莫恩斯问他想做什么的时候,艾德里安说他以后就想从事美术行业,他正在积累这方面的经验,列莫恩斯告诉他,听说《软盘》正在招人。

而当艾德里安发现《软盘》做的原来是计算机上的美工时,他没兴趣了,他画画是用笔和纸,而不是键盘和打印机。但《软盘》给临时工的薪水比医院要高,于是艾德里安同意了,他开始日复一日地画那些中规中矩的小图标,直到有一天他走进办公室时发现他的老板正在和两个年轻的程序员大声争执着什么,另外一个美工凑到他面前问他:“你知道是怎么回事吧?”

艾德里安平静地回答他:“不知道,我一点头绪都没有。”

“他们正在谈论你。”

“噢,妈的,麻烦来了。”艾德里安觉得可能是出了什么事,譬如他被解雇了之类的。

当他们争执结束的时候,两个程序员走了过来,向艾德里安介绍说他们是罗梅洛和卡马克——他在《玩家之刃》的搭档。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

罗梅洛和卡马克向艾尔建议下一期《玩家之刃》最好只做一个游戏,一个全新的大型商业游戏,艾尔同意了,放手让他们去追逐他们的梦想。尽管两个月的时间对于一个这样的游戏来说仍然很紧,但现在他们人员都已各就各位——卡马克负责引擎,罗梅洛负责游戏设计以及制作辅助工具,艾德里安做美工,雷恩负责协调管理的同时也做一些零碎的编程,看起来他们可以做到。

下一个游戏的点子是卡马克提出来的。他正在尝试一项编程上的突破:让游戏的世界不再局限于屏幕的边界——所谓的“卷轴效果”。街机是这项技术的样板,早期街机游戏的移动也是局限在一个静态的屏幕内,譬如《乒乓》,用于把球击来击去的球拍只能在屏幕的底部和顶部之间移动,再譬如《吃豆子》里的迷宫,也是局限于屏幕那么大,还有《太空入侵者》,玩家控制的飞船只能在屏幕下方左右移动,外星飞船们则是从屏幕顶部涌现。所有这些游戏都把玩家局限在那一小方天地里,缺乏一种宽广的可延伸的感觉,这种状况一直持续到1980年,在那一年,威廉斯公司推出了一款名叫《防御者》(Defender)的街机游戏,这是第一个流行的卷轴游戏,在这个科幻射击游戏里,玩家不再受屏幕大小的限制,他操纵飞船在行星的表面水平移动,一路上击落敌机营救人质,屏幕上的一幅小地图显示着玩家在整个世界里的当前位置。如果把地图扩展为正常尺寸,这个世界大概有三个半屏幕那么大。与其他街机比起来,《防御者》显得宏大得多,玩家就像进入了一个更为广阔的虚拟空间。它很快变得和《太空入侵者》一样流行,还胜过《吃豆子》成为了业界的年度游戏。无数的卷轴游戏随之出现,到1989年的时候,卷轴技术已经是新游戏的一项必不可少的标准,这其中最成功的莫过于任天堂红白机上的《超级马里奥兄弟3》(Super Mario Brothers 3)。

但在那时,1990年9月,还没有人研究出如何在PC上实现卷轴效果,大家都用一些蹩脚的技巧来让玩家觉得游戏的世界比屏幕要大,譬如当玩家移动到屏幕最右边的时候,游戏会停顿一会,然后右边的场景出现在屏幕上。部分原因是PC的性能还很差,无论是街机还是苹果机,或是任天堂那样的家用机都比PC强不少。而卡马克下定决心要找出一种办法来在PC上实现像《防御者》或《超级马里奥》那样的平滑卷轴效果。

《玩家之刃》的下一个游戏就要朝着这个方向走。当大伙聚在一起讨论的时候,卡马克给他们演示了他最新的成果,他已经可以让屏幕上的内容平滑地往下方移动,和那些成熟的卷轴游戏比起来,这项技术还很粗糙,它就像是一条传送带,图像按照固定的速度和路线落下,玩家还不可能随心所欲地在里面畅游,那就像是拖动演员背后的舞台布景。

罗梅洛这个博览过几乎每一款PC游戏的玩家,没有见过这种效果。这对他们而言是一个成为先行者的好机会。他们给游戏命名为《搜捕》(Slordax),一个简单的飞船射击游戏,就像《太空入侵者》或《小蜜蜂》(Galaga)一样。

他们有四个星期的时间。从一开始他们就配合得非常默契:卡马克紧张地修改图像引擎的代码,罗梅洛编写制作角色和关卡的工具,当卡马克差不多的时候,罗梅洛也开始了游戏性的设计。汤姆经常摸进他们的办公室来做一些角色和背景。艾德里安也在屏幕上画出了飞船和行星的草图,罗梅洛看到后立刻就觉得这个沉默的临时工是个才华横溢的家伙。

尽管对计算机还不是很熟悉,但艾德里安很快就习惯了用键盘来做图。由于技术的限制,那个时候的美工基本上只能用“点画法”。那时的计算机图像卡(CGA)只支持四种颜色,更高级的增强图像卡(EGA)也只支持十六种颜色,这对一个画家来说远远不够。艾德里安能用的颜色就这么几种,但他还是得创造出一个有生气的世界,行话里把这叫做“挤像素”,艾德里安在这方面显得很是得心应手。

艾德里安在他们中间刻意地保持低调,不光是因为他性格本就如此,还有一个原因是因为他不知道如何和这些玩家们相处——卡马克简直就是一个机器人,说起话来简短扼要,但又总是加上奇怪的“嗯嗯”来结尾,他可以整天坐在那里写程序,一言不发地拿出让人惊叹的成果。罗梅洛,也是个怪异的家伙,就喜欢开些恶心的玩笑,有空的时候还接着画他的《麦尔文》。但艾德里安觉得他们都是挺有趣的人。

汤姆则是另外一个故事,艾德里安第一次见到他的时候,他正蹑手蹑脚地推开办公室的门,穿着蓝色的紧身衣和白色的汗衫,束着披肩,手里还握着一把塑料的长剑——这是他万圣节的装束,他站在门口,扬了扬眉毛,然后发出一声怪叫。罗梅洛笑得气都喘不过来,然后汤姆留下来帮着做工具和设计,而艾德里安则盼着他赶快离开。

几天后的一个晚上,汤姆在办公室里呆了很久,直到罗梅洛和艾德里安都先后走了,只剩下他和卡马克两人。《搜捕》已经很圆满地结束了,卡马克正开始研究新的东西,他是个天生的夜猫子;他喜欢在办公室里呆到凌晨,他喜欢那种宁静,那种孤寂;他喜欢那种可以让他更加融入到工作中的感觉,他很开心,他做着他一直以来想做的事情:编写游戏。在这种时候,他根本不会去想以后会怎么样,如果他能就这么编写游戏并且有足够的钱买比萨和书,他就很满足了。他很早就说过,只要给他一台计算机,一些比萨和可乐,哪怕把他锁到柜子里,他也可以过得很好。

当汤姆在卡马克身边坐下时,卡马克给他看了他正在做的东西,一种可以把动画应用于游戏背景的技术。计算机屏幕是由许多像素组成的,一组像素则可以构成一个图素(tile),美工们首先用像素来画出图素,然后再用创作好的图素来搭建整个世界,这就像是给厨房铺瓷砖(tile)。而卡马克刚找到了一种可以让这块瓷砖上的图像动起来的办法,“而且,”他对汤姆说,“我还可以在你们接触到某块图素的时候激活一些事件”。

“这个东西做起来简单么?”汤姆问道。

“当然,嗯”卡马克回答说,他只需要加一些代码来处理这个事件就行了。汤姆清楚地知道这会是多么惊人,因为《超级马里奥》之类的游戏靠的就是动画背景,而且,当玩家跳起来顶到某块闪烁着的砖头时,会触发一些事件,譬如落下若干金币。想到这里,汤姆来了精神。而卡马克要给他看的还不止这些。

卡马克在键盘上敲了几下,向汤姆展示了他的另一项成就:平滑的卷轴效果。这种由《防御者》和《超级马里奥》带来的技术,能够在玩家走到屏幕边缘的时候通过背景卷动让玩家体验到一个连续的世界。经过几个夜晚的尝试,卡马克终于在PC上也实现了这种效果。和往常一样,他用了一种独特的手段。很多人会一上来就试图走捷径,卡马克觉得这不是解决问题的方法。他一开始先试了最直接的途径,在整个屏幕上重新绘制图像,但行不通,因为那时的PC实在太慢了。然后他尝试着优化——可以通过多使用一些内存来换取性能的提高吗?他试了几次,发现这也是死路一条。

最终卡马克冷静了下来,从头开始考虑,“我要的是什么?——我要在玩家穿过游戏的时候图像能够平滑地移动。”他回想起他以前做的《墓窖》,在那个游戏里,当玩家走到屏幕上地牢边缘时,他会让背景做一次很大的调整,这种基于图素的卷动在当时是很常见的技术,而他现在要的是基于像素的卷动,哪怕玩家只移动了一点点,背景也要随之调整。问题是如此频繁地重绘远远超出了当时PC机的能力,但卡马克很快找到了突破口。

如果,卡马克想道,不是每次重绘整个屏幕,而是只重绘那些真正改变了的部分,会怎么样呢?那样的话,卷轴效果执行起来会快很多。他盯着屏幕,假想着一个由蓝天白云组成的背景,玩家跑向屏幕右边,如果它跑得足够远,那些云朵将会被它逐渐抛在身后,直到从屏幕上消失,尽管改变的只是一片白云,大部分蓝色的区域没有变化,但计算机不知道这些细节,它不知道其实有更快捷的办法,它只会笨拙地重绘每一个组成蓝天的像素,从屏幕的左上方开始,一个像素一个像素地往右,再一行行往下,直到完成整个屏幕。接下来卡马克就干了一件漂亮的事情,使得效率得到极大的提高。他写了一段代码,用来哄骗计算机,让它觉得譬如左数第七块图素其实是屏幕上的第一块,这样的话,卡马克就可以让计算机在他指定的地方开始绘制图像,计算机就可以直接绘制白云,而不需要再一个像素一个像素地填充蓝色的天空。为了确保玩家移动时感觉到平滑的效果,卡马克还想出了一个小技巧:让计算机在屏幕右边以外的地方画一块额外的天空,这其实是画在计算机的显存里,但当它们真正进入屏幕的时候,它就不再需要重新绘制,而是直接从显存里反映到屏幕上。卡马克把这个过程叫做“图素自动刷新”。

汤姆立刻感觉到了这技术的潜能:这意味着他们可以在PC上做出《超级马里奥》!还没有任何地方的任何人做过这样的事情,而他们现在就可以做出来,就在这里,就在现在,在PC上实现他们最喜欢的游戏。这简直是颠覆性的革新,汤姆想道,尤其是考虑到任天堂是一个如此封闭的系统,本来是绝不可能像翻录一盘磁带一样把任天堂的游戏翻录到PC机上,但他们可以把图素,甚至是像素,挨个地照抄下来,然后把马里奥在PC上彻底地重现!

“我们来做《超级马里奥》!”汤姆说,“就今晚,从第一关下手!”

他打开电视机,插入《超级马里奥》的卡,开始游戏并按下暂停,然后在电脑上打开图素编辑器,就像别人临摹名画一样,汤姆开始在PC上重画出《超级马里奥》第一关里的图素,一个不漏——金币、白云、水管……。他惟一没有照着原样画的东西是主角本身,他直接用了《危险的戴夫》里的人物图片,除此之外,他还不停把地在原版马里奥里发现的各种游戏功能一一告诉卡马克,然后卡马克迅速地在PC上逐个实现,与此同时,卡马克还在对卷轴效果进行优化。房间里多出十几个可乐瓶的时候,他们完成了第一关,时钟已经指向了凌晨五点五十分。卡马克和汤姆把工作保存在一张磁盘里,放在罗梅洛的桌子上,然后就回家睡觉了。

罗梅洛早上十点钟到了公司,看到了这张磁盘,还有一张便条,上面是汤姆的笔迹:“敲DAVE2”。罗梅洛把磁盘插入软驱,输入命令,屏幕暗了下来,然后浮现出一行字:

侵犯版权的戴夫

戴夫站在字的一旁,带着红色的棒球帽,穿着绿色的T恤。字的另一边是一个阴沉的法官,戴着白色的假发,手里挥舞着他的小锤子。罗梅洛满怀好奇地敲了下空格键,屏幕上出现了熟悉的《超级马里奥》场景:蓝色的天空,白色的云朵,绿油油的灌木丛,一个问号在一块砖头上转来转去。奇怪的是,站在里面的主角不是马里奥,而是他那危险的戴夫。罗梅洛按下方向键,戴夫开始沿着地面走动,就在背景开始平滑卷动的一刹,他整个人呆住了。

罗梅洛几乎喘不过气来,他简直无法相信屏幕上发生的事情,他就坐在那里用手指摁住键盘,控制着戴夫在场景里来回走动——这难道是真的?难道卡马克这小子原模原样地做出了任天堂的东西?难道我们实现了世界上每一个玩家都曾有过的想法?我们在PC上有了这样的突破?天哪,它将带给我们马里奥带给任天堂的那些东西——凭借着《超级马里奥》,任天堂就即将要取代本田(Toyota)成为日本最成功的公司,它每年的销售额达到了十亿美元。宫本茂(Shigeru Miyamoto),这个马里奥系列的创作者,本是个不名一文的乡下孩子,现在已经变成了游戏界的沃尔特·迪斯尼(Walt Disney),《超级马里奥兄弟3》卖出了一千七百万份拷贝,相当于十七白金的记录——这是迈克尔·杰克逊(Michael Jackson)那种流行巨星才能做到的事。

罗梅洛看到了他的未来,他们的未来。那明亮多彩的梦境漂浮在房间里,涌现在他眼前。PC机正是热门,每天都在进入更多的家庭,很快,它将不再是奢侈品,而是一台普通的家电,又有什么东西可以比精彩的游戏更能让PC成为生活的好伴侣呢?一旦有了那样的游戏,人们就不再需要买什么任天堂,而只需要买PC就够了。他现在只是坐在什里夫波特一个简陋的办公室里,但他眼前屏幕上所展现的技术却可以做出那样的精彩游戏。他看到了他们的前程,儿时未来富翁的梦想就快要变成现实。

罗梅洛被这突如其来的惊喜击溃了,他动弹不得,甚至都站不起来。直到卡马克几个小时后回到办公室,他才有力气说话。他只有一件事要告诉他这个朋友,这个编程天才,这个绝配般的搭档:

“不用想了,我们走人!”

第四章:买比萨的钱

罗梅洛和卡马克在性格上有一个很明显的不同,这个差异在他们合作的早期就已显现出来,那就是他们对待时光的态度。也正是类似这样的差异,使他们成为完美的搭档,也使他们无可挽回的决裂。

卡马克只活在他当前的时刻。专注,是他力量的源泉。他心中既没有对未来的憧憬,也没有怀旧的思绪,他的注意力全部集中于如何解决眼前错综复杂的问题:思考、编码。他不保留任何过去的东西:照片、记录、游戏、磁盘。他甚至连他的那些处女作——《鬼魂》和《造影》——都没有留一份拷贝。他没有学校的年鉴可唤起他学生时代的回忆,他也不保存刊登过他早期作品的杂志。他只有他在当下要用到的东西。他的卧室由一盏台灯、一个枕头、一条毯子和一堆书组成,甚至没有床垫。他什么都没从家里带出来,除了咪子(Mitzi),一只他继母送给他的猫。

罗梅洛则完全相反,他沉浸在所有的时光里:过去、现在、未来。他不光对这些时光都充满热情,而且还付诸行动:他收藏起曾经的事物、他陶醉于眼前的欢欣、他勾画着未来的蓝图。他记得每一个约会、每一个名字、每一个游戏,他保留着信件、杂志、磁盘、“汉堡王”的收据、照片、各种存根。他也抓住所有机会让每一天都开开心心,譬如开一个更逗的玩笑,或是讲一个更有趣的故事,或是做一个更夸张的鬼脸。但他这绝不是狂躁,他知道如何去专注,他只是过于情绪化而已,当他愉快的时候,他对所有的事物都充满热爱,而当他沮丧的时候,他又变得冷漠迟钝。汤姆管他这种情绪变动叫“像比特一样摇来摆去”,因为他就像计算机里存储数据的二进制比特一样,一会是开,一会是关。

1990年9月20号的那个宿命的早晨,罗梅洛的状态跳到了开,他会把这个早晨深深地烙在记忆里,而卡马克则没过多久就会把它忘了,但不管怎样,这个早晨对他们而言都同样的重要。卡马克用他非凡的专注解决了一个迫在眉睫的挑战:在PC上实现卷轴效果。罗梅洛则预见了卡马克的成果可能带来的事物。卡马卡制作了调色板,然后罗梅洛用这个调色板绘出了一个未来,很明显,这个未来不会和《软盘》有任何关系。

见到卡马克后,罗梅洛再也克制不住他的激动,他在办公室里四处找人过来看屏幕上的戴夫,然后向他们感慨:“噢,天哪,看看这个!这个星球上还有比它更酷的东西吗?”

“哦,”其中一个家伙应付道:“挺不错的。”

“挺不错的?”罗梅洛说道:“等一下,你好像还没搞清楚:这是有史以来最酷的东西!明白?”

那个家伙耸了耸肩:“随你怎么说。”然后就走回了办公室。

“这个白痴!”罗梅洛宣布道。

要不是大家很快都到了办公室,罗梅洛可能都要炸了。汤姆、杰伊、雷恩、艾德里安四人开心地围在罗梅洛身后,看着他继续摆弄戴夫,嘴里还不停地念叨着:“噢,天哪,这个有史以来最酷的东西!我们要走人!我们一定要做这个东西!我们要带着它离开这里,我们要开我们自己的公司!《软盘》跟这个没有任何关系!他们再也见不到它了!我们要自己做!放在这个公司做简直就是浪费!”

杰伊站在门口,手悬在门框上,咯咯地笑着说:“嗯,赶紧的,赶紧的!”——杰伊见识过罗梅洛的轻率,准确地说就是狂热再加上夸张,他甚至在赢了一把《吃豆子》的时候都会这样,他这个人本身就像是一个惊叹号。

罗梅洛挥舞着的双手停在了空中,他转头对杰伊正色道:“哥们,我是说真的。”

杰伊走了进来,关上身后的门。罗梅洛阐述了他的理由:首先,这是一个强大的十六色的游戏,而《软盘》为了满足低配置的用户,只对四色的游戏感兴趣。其次,这是一个PC上的任天堂式游戏,一个可以媲美家用机上最畅销的马里奥兄弟的游戏,这意味着它肯定会卖得很好,因为大家很快都要用上PC,很自然的,大家都想能在PC上玩到好游戏,这个计划非常完美。再次,他们已经有了一个梦幻般的团队:卡马克,天才小子和图像编程的领头羊,罗梅洛,游戏制作的多面手和公司的啦啦队长,艾德里安,沉迷于黑暗的艺术家,汤姆,游戏设计师和超现实主义漫画家,还有雷恩——尽管罗梅洛对他仍不是很满意,但还是想再给他一次机会。更重要的是,他们正好能互相取长补短:卡马克的沉静平衡了罗梅洛那四溢的热情,艾德里安那阴森的画风与汤姆那卡通般的喜剧风格正好相反。他们现在只缺一个人来处理商业事务——筹集经费、平衡账目以及日常管理。说到这里,每个人都看向了杰伊。“伙计,”罗梅洛说道:“你跑不掉了。”

杰伊露出他那酒保般的笑容,答应了:“好,我想我们接下来要做的是让任天堂知道我们有这个东西,就现在!”如果任天堂答应让他们来把《超级马里奥兄弟3》移植到PC上,那么他们的生意就来了,而且这绝不会是什么小打小闹。他们于是决定在周末制作一个完整的演示版,加几个关卡,并放入原版马里奥的图像,然后杰伊把它寄给任天堂。

但还有一个说大不大,说小也不小的问题:如果他们要把这个东西当做私活来做的话,他们就不能让《软盘》知道,那么,他们就不能在办公室里做,而只能在家里,但他们家里又没有计算机。想到这里,他们五人沉默了。只有屏幕上的戴夫还在欢快地走来走去。

卡马克和罗梅洛早在童年时就经历过没有计算机的困境,所以,这对他们来说算不上什么问题。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

礼拜五的晚上,《软盘》的职员们早已回家坐在了电视面前,几辆车静静地停到了《软盘》公司大楼的门口——罗梅洛和卡马克觉得他们可以趁没有人用这些机器的时候把它们借出来,这不能算是偷吧。

把《软盘》的计算机装上车后,罗梅洛和卡马克等一行六人驶出了市区,穿过道路两旁破败的大楼,开上高速公路,窗外的景色渐渐变成了湿地和低矮的树丛,夜归的渔船在黑暗中隐隐连成一条线,他们驶过一座桥,上了南湖干道,路旁就是什里夫波特市的休养度假区和主要水源:十字湖(Cross Lake)。

卡马克、雷恩和杰伊,还有一个《软盘》的苹果机程序员詹森·布罗克维奇(Jason Blochowiak)不久前在这湖滨意外地租到了一套有四个卧室的房子。杰伊随后买了一艘便宜的小快艇,他们就把它停在门口,经常乘它出去冲浪。房子背后有一个很大的后院和一个游泳池,还有一个烧烤台,为了烤肉方便,杰伊这个美食家在上面用燧石片铺出了一条条的格子。房子里四处都是窗户,可以方便地看到周围的景色。客厅也很大,更不用说那铺满瓷砖的洗浴房和里面那巨大的按摩浴缸,杰伊还在冰箱里装了个啤酒桶。在这样的地方做游戏简直再惬意不过了。

在做《超级马里奥》演示版的这个周末,他们就簇拥在这房子里。一张大桌子上架起了两台计算机,这桌子本是卡马克用来和他们通宵玩《龙与地下城》用的,罗梅洛和卡马克现在坐在这桌子边一起写程序,汤姆一人扛下了所有美工的活,雷恩负责做动画,譬如那些小海龟。他们已经事先把游戏的过程录制了下来,为了不错过任何一个细节,汤姆把录像带倒来倒去,不时按下暂停,好仔细地观察。

连续的七十二小时里,他们进入了压榨模式。没有人睡觉,他们喝掉了无数含咖啡因的苏打水,送比萨的小伙子每隔一段时间就来一次,杰伊烤了不少肉饼和热狗,但大部分都放在那里没人碰。他们分毫不差地复制出了这个游戏:马里奥蹲着走的时候的小碎步,他跳起来的动作,他踩到小海龟上以及把它们踢飞时的样子,那些掉下来的金币,那些云彩,以及——那平滑的卷动。当他们完成的时候,屏幕上的东西已经和那有史以来卖得最好的游戏毫无二致了,惟一有点不同的是开始画面,在任天堂的版权声明下方,多了一行制作公司的名称,那自然是罗梅洛和雷恩的“深思软件”。

杰伊起草了一封信,向任天堂介绍了一下他们是什么人,为什么要做这个演示,以及他们是如何地想得到PC移植版的制作许可,并解释了这对任天堂自己来说也是个空前的机遇。他们打好包裹,满怀希望地把它寄往了任天堂。几个星期后,他们得到了一个简短亲切的答复:“干得不错,”任天堂写道:“但我们对PC市场没有兴趣。”作为家用机市场的霸主,任天堂显然对现在的状况已经很满意了。

对比起他们在那几个不眠之夜后的兴高采烈,这无疑是一个不小的打击。但这绝不意味着事情就这么结束了,这世界上肯定会有人赏识他们的成果,罗梅洛就认识一个这样的人。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

不久前,已经到了《软盘》的罗梅洛收到了他的第一封支持者来信,虽然是用打字机打出来的,但字里行间洋溢着热诚:“亲爱的约翰,很喜欢你的游戏,只是想让你知道那是个非常棒的游戏,我认为你是个很有才华的人,你玩过《大金字塔》(The Greatest Pyramid)吗?它和你的游戏几乎一样,我在想那个游戏会不会也是你做的呢?或者你从它那里得到了灵感?如果你要的话,我可以寄一份《大金字塔》的拷贝给你。还有,你在你自己的游戏里得的最高分是多少啊?你编程很久了吗?你用的是什么语言?我也想做一个游戏,你的任何指点都会对我很有帮助。谢谢!你的支持者,——拜伦·穆勒(Byron Muller)”。

罗梅洛,这个博物收藏家,立刻就把这封信贴在了墙上展示给卡马克他们看。几个星期后,罗梅洛又收到了一封这样的来信,这次是手写的,语气更为激动:“亲爱的约翰,我喜欢你的《埃及金字塔》,它比前几期大蓝盘里的另一个金字塔游戏好多了,我昨晚一直玩到凌晨两点,直到打通关,它太好玩了!你在里面的最高分是多少?有可以直接进入下一关的秘技吗?你还知道有什么类似这样的游戏吗?你可以打这个由我付费的电话……或者你也可以写信给我。非常感谢!另:我想我发现了你游戏里的一个小问题(或许是一个未公开的特性?)——斯科特·穆列瑞(Scott Mulliere)”。

哇噢——罗梅洛笑得很开心:“又一个支持者!”他把信贴在上一封的旁边,再次向卡马克他们炫耀了一番,卡马克他们这次咂了咂舌。不久后,罗梅洛在一本PC游戏杂志上看到了一小则关于斯科特·米勒(Scott Miller)的报道,这是一个二十九岁的程序员,并已经成功地发行了他自己的游戏。罗梅洛饶有兴味地读完了整篇文章,在最下方,他看到了斯科特的通信地址:75043,德克萨斯州加兰市五月花大道4206号。

罗梅洛似乎想起了什么,加兰?德克萨斯?加兰?德克萨斯?他好像认识一个那儿的人,而且也是在五月花大道。他扔下杂志,走到墙边,那上面已经贴了好几封支持者的来信,让他吃惊的是,尽管所有这些信都有不同的署名,但每一封的回信地址都是同一个:75043,德克萨斯州加兰市五月花大道4206号。

罗梅洛怒了,这么说他以前给卡马克他们看的全都是些并不存在的支持者写来的信?!而实际上只是一个无聊的小子在拿他寻开心!这个斯科特·米勒以为他是谁?!罗梅洛冲到键盘前,怒不可遏地敲出一封火药味十足的信:“米勒先生,你,有很严重的精神问题,……你是坏了哪根筋?用那么多的名字给我发信?呵!拜伦·穆列瑞,布赖恩·艾伦,拜伦·穆勒?说真的,孩子,你多大了?满十五了没?”罗梅洛发泄了满满两页纸,然后把它们留在了桌上。第二天再回到办公室时,他已经冷静了下来,他又写了一小张便条:

“亲爱的米勒先生:我花了不少时间来回复你的最后一封信,因为我非常生气,我发现你曾经用不同的名字给我写过三到四次信,我压根没有想到会有这种事。我的那封回信太过于火暴,所以我没有过早地把它投递出去,但我还是把它发给你看看吧,你可以从那里了解到我是多么恼怒。我补上这个条子的目的是想减轻一点火药味,而且我对你做的事情多多少少有了点好奇。”

罗梅洛把两封信一起放进信封,寄往了加兰市。

几天后,罗梅洛家里的电话响了,是米勒,罗梅洛直接向他问起那些假信件的事情,但米勒有他的说法:“去他妈的信!”他激动地喊道:“我之所以写那些信,是因为只有那样我才能和你联系上。”

那时,游戏公司间的竞争非常激烈,而且很隐秘,尤其是对那些编程天才的争夺。当罗梅洛还是一个年轻的玩家的时候,理查德·盖略特和威廉姆斯夫妇已经很有名,游戏的盒子上会以很大的字体凸现出他们的名字。到了20世纪90年代早期,游戏公司开始互相挖墙脚,作为防范,很多出版商开始留意起职员跟外界的往来,譬如监听他们的电话,以确保这些有价值的人不被撬走。斯科特了解这种敏感性,不便直接给罗梅洛打电话,所以他想了个办法,让罗梅洛主动和他联系。有意思的是,尽管这个办法很奏效,但却完全违背了他的初衷,他没想要激怒罗梅洛,但既然现在已经引起了罗梅洛的注意,他自然也不会放过这个机会。

“我们要好好谈谈,”米勒在电话里急切地说:“我看过你的《埃及金字塔》,太棒了!你可以再多做几个关卡吗?我们可以赚到一大笔钱!”

“你都在说些什么啊?”

“我想出版你的游戏,”米勒解释道:“以共享软件的方式。”

共享软件?罗梅洛对这个词并不陌生。这要追溯到一个名叫安德鲁·弗鲁吉尔曼(Andrew Fluegelman)的人,《PC世界》(PC World)杂志的创办者,他于1980年的时候写了个名为《PC对话》(PC-Talk)的程序,当他在BBS发布这个程序的时候,他注明道,欢迎任何一个喜欢《PC对话》的人给他汇一些“感谢”费。很快,他就专门聘请了一个雇员来替他处理那雪片般涌来的支票。弗鲁吉尔曼把这种做法叫做“共享软件”(Shareware)、“一种经济学上的尝试”。八十年代里,其他黑客们纷纷开始效仿这种做法,开始出现了运行于PC机、苹果机以及其他各种平台的共享软件,他们都有同样的光荣口号:先免费试用,感觉满意再付钱,付费后可以得到技术支持和版本升级。

随后,出现了共享软件职业联盟,或者简称ASP (Association of Shareware Professionals)。它那时的业务还主要局限于美国国内,而且据估计,只有十分之一使用了共享软件的用户会为其付费,但ASP的年收入还是达到了一千万至两千万美元。《福布斯》(Forbes)杂志对它的成功大为惊奇,并于1988年写道:“如果你还认为这不是一种可靠的商业模式的话,你最好再考虑考虑。”因为,共享软件不需要高额的广告投入,它只靠人们口耳相传,或者像一个从业者所说的那样——“通过磁盘传播”。曾经是微软顶级程序员的罗伯特·华莱士(Robert Wallace),把他的名为《PC写作》(PC-Write)的程序以共享软件的形式销售,发展成了一个数百万美元的公司。然而,不是每个人都那么成功,大部分共享软件作者的年收入只在两万五千美元上下,能挣到十万美元的就已经很开心了。每年能卖出一千份就是很大的成功。共享软件还仍然被看做是一种新潮的做法,其中大部分都是类似理财和字处理那样的工具软件,还没有游戏采用这种商业模式。斯科特都在想些什么呢?

随着谈话的深入,罗梅洛渐渐发现斯科特其实清楚地知道他在做什么。和罗梅洛一样,斯科特也是玩着游戏长大的,他的父亲是美国国家航天局(NASA)的一名主管。斯科特留着黑色的短发,看上去有点古板。在加兰念高中的时候,他白天呆在计算机房,放学后则泡在街机厅。他甚至自己写了一本名为《开火》(Shootout: Zap the Video Game)的游戏攻略,里面详细讲解了1982年里各个热门游戏的技巧和诀窍,从《吃豆子》到《飞弹指挥官》(Missile Command)。自然而然的,他很快就开始制作起自己的游戏。

到要发行这些游戏的时候,斯科特花了很长时间对共享软件市场进行调研,结果让他满意:他可以自己处理所有的事,不需要任何零售商和出版商。于是他按照当时的做法,发布了两个完整的文本游戏,坐等着收钱,但汇款过来的玩家却少得可怜,几乎没有。他开始觉得:玩家,和那些真正购买工具软件的人是不尽相同的,他们大都只对可以直接得到的免费东西感兴趣。斯科特又观察了一段时间,发现像他这样快破产的游戏制作者还有很多,他们的共同之处是他们都把整个游戏一起作为共享软件发布。他意识到,玩家也许是诚实的,愿意购买他们喜欢的游戏,但同时他们也是怕麻烦的,既然已经玩到了整个游戏,他们也就懒得再去办付款的手续。要给他们一个付款的理由和动机。

于是他想出个点子:为什么要把整个游戏一起放出去呢?为什么不只发布其中的一小部分,然后让玩家们从他手里购买完整的游戏呢?没有人尝试过这种做法,但它看上去没有什么问题。斯科特在做的新游戏恰好很适合用这种方式来发行,因为这个游戏是由若干段情节,或者说是“关卡”组成的。他可以只发布其中的一部分,譬如十五个关卡,然后告诉玩家,如果他们想玩其余的三十个关卡,那么,请寄张支票过来。

1986年,在一家计算机顾问公司就职的斯科特开始出版自己的游戏,这个印第安纳·琼斯(Indiana Jones)式的冒险游戏名叫《克鲁兹王国》(Kingdom of Kroz)。斯科特把它的第一关发布到了BBS和共享软件杂志上,没有广告,没有市场推广,没有任何营销费用——除了一些磁盘和拉链袋,而且,没有任何中间环节,他每卖出一美元,就可以获利九十美分,从而他可以把价格定得很低,零售游戏卖三十到四十美元,他就可以只卖十五到二十美元。在他和罗梅洛联系的时候,他已经挣到了十五万美元。

斯科特告诉罗梅洛,生意是如此得好,以至于他都辞去工作,开了一家名叫“天极”(Apogee)的公司,专门出版共享软件游戏。他正在寻找更多这样的游戏,而罗梅洛虽然做出了非常适合以共享软件形式出版的游戏,但他自己却没有意识到。斯科特向罗梅洛解释道,一个理想的共享软件游戏应该具备这么几个要素:尺寸小,动作类,可以分成若干个关卡。因为共享软件大都通过BBS分发,所以它必须足够小,才能通过调制解调器下载。图像丰富的大型游戏,譬如雪乐山娱乐公司出版的那些,根本无法通过BBS传播。而且,它还得是有趣的快节奏游戏,类似街机那样能让人们的肾上腺分泌加速,这样才能吸引着玩家们来购买。如果罗梅洛把他的《埃及金字塔》交给斯科特发行的话,斯科特答应先给罗梅洛一笔预付款,以及35%的版税,这比任何大出版商给的版税都要高,而且,罗梅洛不需要为市场推广或者是订单处理而操心。

罗梅洛觉得这条件很不错,但是有个问题:“我们不能发行《埃及金字塔》,”他向斯科特解释道:“因为它的版权属于《软盘》。”电话里传来了斯科特失望的叹息声,罗梅洛立即补充道:“嘿!别惦记着那个游戏了,它和我们眼下在做的比起来简直就是垃圾!”

几天后,斯科特收到了从深思软件寄来的一个包裹,里面装着超级马里奥PC版的演示。当他进入游戏的时候,他完全被震住了,它看起来和家用机上的那个游戏一模一样。他抓起电话拨通了卡马克,一聊就聊了好几个小时,在斯科特看来,卡马克就是一个天才,考虑问题的时候总能比别人更周全、更深远。就在电话里聊着的时候,斯科特已经迫不及待地想把这笔生意敲定,电话那头的答复是,他们愿意用这项技术做一款共享软件游戏,并交给天极来发行。“太棒了!”斯科特激动地说:“就这么定了!”

出版商找到了,罗梅洛和卡马克他们剩下的事情就是把游戏做出来。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

在那次谈话后,罗梅洛请斯科特先汇一笔预付款过来表示诚意,斯科特毫不犹豫给他们汇去了两千美元——他手头上的一半现金,他只希望他们能在两个月后的圣诞节时完成这个游戏。

罗梅洛、卡马克、艾德里安、雷恩、汤姆和杰伊一起聚在《玩家之刃》的办公室里开始讨论这个游戏。汤姆一开始就指出,既然用的是类似家用机的技术,那么就应该做一个类似家用机的游戏,譬如《超级马里奥》,但要略做改动。他随即被自己这股劲头带动起来,开始自我膨胀:

“来吧,你们想做什么样的主题?跟我说,我可以做任何事情,科幻的,怎么样?”

他们觉得这个思路不错,“那我们开始动手吧,”卡马克说道:“类似小神通拯救世界那样的,嗯?”

“行!”汤姆接道:“我已经有了个类似那样的构思,很棒的!”

汤姆立刻跑出房间,回到他在苹果机部门的办公室,把门反锁起来,他感觉到脑海里的点子不断地奔涌而出。他从小就是华纳兄弟公司卡通片的忠实观众,《乐一通》(Looney Tunes)的作者查克·琼斯(Chuck Jones)简直就是他心目中的神,他还喜欢《铁面无私》(The Untouchables,1959-1963)里的爱略特·尼斯(Eliot Ness),以及喜剧演员丹·艾克罗伊德(Dan Aykroyd),还有乔治·卡林(George Carlin),以及剧中用月桂树叶放在腋下做除臭剂结果闻起来像是从肉汤里捞起来的豆子一样的人们。所有这些事物,以及马里奥,此刻正在他的脑海里翻腾……汤姆一口气写了三大段,然后从打印机里抓起纸,冲回了罗梅洛他们的办公室,他清了清嗓子,模仿着著名播音员沃尔特·温切尔(Walter Winchell)的声调宣读起来:

“比利·布雷兹(Billy Blaze),这个八岁的小天才,通过不懈的努力,在他家后院用罐头瓶、塑料管和胶水建造出了一艘宇宙飞船。当小妹妹在熟睡,家里其他人都进城去了的时候,比利悄悄地摸进后院他的工场里,戴上他哥哥的橄榄球头盔,然后变成了指挥官基恩(Commander Keen)——正义的守护者!凭借这装备了火箭炮的飞船,基恩不畏艰险地维护着世间的正义。

在这个故事里,沃蒂冈(Vorticon)六号星球上的异形们发现了这个八岁的小天才,并开始策划一个阴谋。当基恩在火星上登山的时候,异形们偷走了他的飞船,并把它弄得四分五裂,散落在银河系的各个角落。基恩能在父母回来之前找回所有的飞船碎片,并击退沃蒂冈的坏蛋们吗?不要换台……”

汤姆抬起头,周围一片沉默,然后,大伙爆发出一阵大笑,甚至不苟言笑的卡马克都乐得合不拢嘴,还不停地拍手叫好。

指挥官基恩出发了,这个小天才将把他们带向何方?他们还没有概念。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

这些玩家们不再只是《软盘》的人,他们管自己叫深思软件的人了。《软盘》在他们心目中变得更加无足轻重,但那毕竟是一份工作,而且他们需要这份工作,因为他们的深思还没有任何收入——以后也不一定就会有。他们决定还是继续为《玩家之刃》打工,晚上再回到湖畔的房子里制作《指挥官基恩》。

他们“借”机器的经验越来越丰富,每天下班后他们就把车停到公司门口,装上机器,第二天再起个大早把机器都放回去。他们甚至变得越来越得寸进尺,尽管他们的机器已经是当时的顶级配置,但他们还总想着加点新配件。杰伊开始频繁地出入于《软盘》的行政审批部门,老艾注意到了他们这些开支,但他没有往多里想,他一如既往地对PC游戏软件市场抱有热忱,并希望《玩家之刃》能帮助《软盘》进入这个市场,所以,无论那帮家伙们要什么,他们总能如愿以偿。

为了能在圣诞节前给斯科特拿出一个游戏,1990年的10月到12月的这段时间里,他们毫不停歇地赶制着基恩。而且,这将不止是一个游戏,它将是一个三部曲,名为《沃蒂冈的入侵》。在当时的游戏界,三部曲的做法已经很流行,这和小说以及电影里的三部曲是一个道理:这是一种最适合建立和延伸品牌的方式。汤姆这个创作总监已经制定出了详细的计划。

基恩不是马里奥,这个把父亲的机油悄悄拿来做火箭燃料的孩子,这个年仅八岁但少年老成的小英雄,比那个中年的水管工更容易让人找到认同。汤姆他们已经在不知不觉中遵循着一条格言:“不要乱吹你不懂的东西”。和比利·布雷兹一样,汤姆自己小时候也喜欢戴橄榄球帽;而且,从另外一个角度来看,他们就是比利·布雷兹:他们在别人眼中都是古怪的孩子,他们都把技术作为一种逃离的手段。基恩这个小黒客拯救了银河系,而无数像卡马克和罗梅洛这样的黒客们通过技术拯救了他们自己。

角色们各就各位:汤姆是主设计师——负责制定游戏的各种元素:情节、角色、武器。卡马克和罗梅洛这两个多年来一直独立制作游戏的老手很乐意把设计工作分给汤姆来做,因为他们现在完全被编程工作占据了。卡马克不断地完善着游戏的引擎,直到屏幕不光是可以平滑地左右卷动,而且还可以平滑地上下卷动。与此同时,罗梅洛制作好了关卡编辑器,其他制作者们可以通过这个编辑器把各种图像放到一起:主角、房间、敌人等,它就是设计师的工具箱。

但不是所有人都融入了这个集体。雷恩被正式地摒弃了,尽管罗梅洛很乐意和他成为朋友,但他觉得雷恩过于缺乏干劲。艾德里安也遇到了点问题,尽管他后来被邀请来帮助制作基恩,但他厌恶这个游戏,在艾德里安眼里,这个游戏太过于……矫柔。汤姆心目中对玩家的定位是:“孩子们,或者是有着童心的成年人们”。而艾德里安讨厌这些充满童趣的东西,他也讨厌矫揉造作,更不要说把这两样东西放到一起。但他现在却不得不整夜地坐在那里画比萨饼、汽水瓶、糖果。

汤姆还设计了一个名叫“唷扑”(Yorp)的角色,那是个肥肥的绿色小怪物,头上长着个像潜望镜一样的眼睛。通常,游戏里的角色死掉的时候,它们在屏幕上就消失了,而汤姆却提出了新的做法,他想融入更多的“哲学思想”,他读过一本弗洛伊德(Sigmund Freud)的著作《文明及其不满》(Civilization and Its Discontents),他按照书中的思想设计了角色,譬如一个护卫代表了某一种本能。他还想教给孩子们,不管是人还是异形死去的时候,都不会有什么奇特的转变,死了就是死了,只剩下尸体。于是他让游戏中的生物们死去的时候,被保留下来,没有血腥的画面,只是保留下来:一个死掉的“唷扑”——死掉了还仍然可爱动人的“唷扑”。

让艾德里安烦躁的还不止是那些角色的可爱,还有创作这些角色的那个人的可爱。汤姆的本性在这时展现得淋漓尽致,他在房间里跑来跑去,他会伸长脖子,发出各种声音,只是为了给艾德里安讲解游戏中的角色究竟应该是什么样,每当这时,罗梅洛都在一旁哈哈大笑。出于对重金属和黑色幽默的共同爱好,艾德里安还比较喜欢罗梅洛,而汤姆在他眼里只是个烦人的家伙。更糟的是,他还和汤姆共用一张桌子,精力过剩的汤姆喜欢抖腿,总是不经意地在艾德里安画画时碰到桌子,但艾德里安没得选择,如果他不和汤姆坐在一起,那么他就只能和卡马克的猫呆在一起,那是房子里的最后一块空地了。而汤姆根本不知道艾德里安的苦恼,他只觉得艾德里安这个小伙子话不多,挺安静的。

每一个晚上,伊基·波普(Iggy Pop)和多肯(Dokken)的乐声伴随着他们工作到凌晨,就像是不打烊的派对。偶尔他们也会歇一会,打打《超级马里奥》,或者是玩一会《龙与地下城》。卡马克这个老道的城主笔下的场景越来越宏大,他们在星期六的晚上会围聚到桌子边,一直玩到天蒙蒙亮。游戏变得越来越深入和复杂,并很快变成了卡马克制作过的最漫长最深邃的一个《龙与地下城》游戏,而且还没有任何结束的迹象。其他时候,他们会乘坐那艘小艇去湖面上兜风,杰伊那稳重的个性使得他驾驶起来又快又稳,他随即成为了专职的舵手,罗梅洛也试着掌过几次舵,但他太爱闹了,总把船开得倾过来斜过去。杰伊自己也很满意这个管理者的角色,或者叫兄弟会的老大,在其他人忙于工作的时候,他就在外面烤些肉,或者是再购进些饮料。在进度的压力之下,游戏制作者们需要方方面面的帮助。

但他们不需要任何帮助来调动他们的积极性。尤其是卡马克,他对于那些让他分心的事物具有超人般的免疫力。曾经有一次,杰伊为了测试卡马克的注意力,放了一盘色情片到录像机里,并把音量开到最大,罗梅洛和其他人很快就被那“噢……啊……”的声音吸引到了电视机旁,而卡马克,仍然无动于衷地坐在显示器前,直到过了一两分钟,他才察觉到那越来越激动的呻吟声,而他只是简单地“嗯”了一声,然后就继续埋头工作。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

在《软盘》,他们也正在制作一个新游戏,而老艾开始对这些养尊处优的游戏程序员们起了疑心。杰伊在不断地要求新的配件,其他的几个越来越敷衍了事、躲躲闪闪。

那是一个讲述忍者的名叫《影子武士》(Shadow Knights)的游戏,老艾还从来没在PC上见过卷轴效果,于是他顺口对卡马克说:“喔!你应该去申请个专利。”

卡马克听到这话后怒不可遏:“如果你再跟我提什么申请专利,我就立刻走人!”

在艾尔看来,卡马克可能是为了维护他自己的经济权益。艾尔并不知道,他已经触痛了这个年轻的理想主义程序员心里敏感的神经,这是为数不多可以真正让他愤怒的东西,这是自从他读了“黒客伦理”后就深深扎根于他骨子里的信条。

所有科学技术,以及文化、知识、理论,都是在前人的基础上发展起来的。去注册一项专利,就等于宣布说:“这个想法是我的想法,你不能使用或扩展它,因为,我‘拥有’这个想法。”在卡马克这样的黒客眼里,这听起来简直荒谬绝伦。专利制度威胁到了他生命的最重要的事情:编写代码去解决问题。如果这个世界上充斥着各种专利,以至于他连解决一个简单的问题都要侵犯到某项专利的话,那么这将不是一个他所乐意生活在其中的世界。

卡马克在其他方面也变得越来越直率和无礼,譬如他对于《软盘》其他职员的态度,他曾对艾尔说:“你手下都是些糟糕的程序员,废物似的。”他似乎根本不在乎这种态度会使他和其他员工们变得多么疏远。

为了探寻那些令他起疑的现象,艾尔开始频繁地出没于《玩家之刃》的办公室。有一次他进去的时候,看到卡马克、罗梅洛、汤姆三人围在罗梅洛的机器旁,背朝着门,当艾尔咳了一声后,他们匆匆地散开到了自己的座位上,艾尔走进去问他们发生了什么事,罗梅洛小心翼翼地回答道:“没什么,老艾,只是开些无聊的玩笑而已。”艾尔看向罗梅洛的显示器,上面漆黑一片,显然他们是在隐瞒着什么东西。老艾后来私下找到了卡马克,向他询问最近究竟发生了什么事,连罗梅洛这么勤奋的好员工也变得举止古怪,卡马克考虑了一秒钟,然后,还是像他一贯的那样,和盘托出了丝毫不加修饰的实话:“罗梅洛只是让你觉得他很友好,而当你背过身去的时候,他其实很讨厌你。”

感恩节临近了,他们在湖畔小屋里的工作也进入了白热状态,那是真正的废寝忘食:睡觉已经不算是件事情,洗澡也一样,只有吃饭是不能省略的,他们要不时地提醒自己。斯科特开始每个礼拜给他们汇一百美元“比萨奖金”,这可比他们在基恩的世界里制作的那些小香肠管用多了。比萨饼就是他们的能量块,就像卡马克喜欢说的那样,比萨简直就是一项伟大的发明,一种完美的食物:它方便快捷,但不像其他快餐,它不光有面饼,还有种类多样的配菜,而且还是热乎乎的。每当杰伊打开信封,拿出支票在空中挥舞时,他们就会一起欢呼:“买比萨的钱来啦!”

斯科特对他的这些投资充满信心,他开始运作起各种商业手段。他过去的成功使得他和全国各大BBS的站长以及共享软件杂志的编辑们关系很好。斯科特给他们挨个打了一通电话,告诉他们,一个革命性的游戏很快就要诞生了。不久后,当用户登录那些BBS的时候,就会看到一屏欢迎信息:“来自天极的《指挥官基恩》即将登场”。斯科特觉得他把信誉和名声都赌上了,而在湖畔的小屋里,没有人对《基恩》的按期完成报有一丝怀疑。

汤姆已经陷入了那个游戏中的世界,他不停地和罗梅洛交换着各种想法,如果罗梅洛比往常发出了更大的笑声,汤姆就知道这个点子不错。斯科特也给游戏提出了他自己的建议,他在一封信中写道:“马里奥兄弟之所以那么流行,其中一个很重要的因素是那些隐藏在游戏各个角落里的秘密和奖励,我很希望《基恩》里也有这些东西,这对游戏将是个非常有益的补充。”

“好主意!”他们回复道。他们自己就很喜欢在游戏里寻找各种秘密,这其实已经是一种在程序员中流行的亚文化。这些秘密有时是隐藏关卡,有时只是玩笑,或者是对游戏进行没什么影响的小花样,它们有个名字叫“复活节彩蛋”(Easter eggs)。所有这些蛋蛋都起源于1980年雅达利2600家用机上的一个名叫《冒险》(Adventure)的角色扮演游戏,当无畏的玩家们进入一个隐秘的房间时,他们会发现里面只有一行闪烁着的字:“沃伦·罗宾尼特”(Warren Robinett),一些玩家明知道不会有什么事发生,但也只能朝它放几枪,而剩下的玩家只是看着它,不得其解地挠头。其实罗宾尼特是一个制作者的名字,他不愿看到出自他手里的游戏只被标记上公司名称,于是他通过这种方式来获得认同。

汤姆想出了不少花招。在第一章里的加农炮旁边,如果玩家做出某几个连续的动作的话,他就可以进入一个隐藏的城市。汤姆还在游戏里放置了许多密文般的符号——沃蒂冈异形的语言,如果玩家能进入到某些秘密的角落,他就可以得到那些文字的翻译。

尽管他们还只是在做《基恩》的首部曲,但这些热心的制作者们已经迫不及待地在游戏里放入了两幅后续作品的预览图片,以及一个名叫《正义之战》(The Fight For Justice)的新游戏的文字描述。这个游戏里的角色和元素都取自卡马克那不断延伸的龙与地下城世界:“那是一个全新的魔幻冒险类游戏,与以往不同,游戏开始的时候,你不再只是个要为了下一顿饭去打拼的弱小战士,你一开始就是——雷神(Quake)!你是这片大陆上最强大也是最危险的人物,你的武器是雷神之锤(Hammer of Thunderbolts),以及再生指环和一个可以穿梭时空的月光宝盒……你路途上遇到的人都有各自的性格、职业、目标……《正义之战》将会是迄今为止最棒的PC游戏!”

在那湖畔的小屋里,没有什么事情看上去是不可能的。卡马克和罗梅洛也一天比一天更加默契。他们就像是两个网球选手,在独孤求败了那么多年后,终于找到个可以一较高下的对手。罗梅洛促使着卡马克成为一个更好的程序员,而卡马克也促使着罗梅洛成为一个更棒的设计师,而他们的共同之处,就是他们年轻的激情,对工作的热爱。在一个周末的晚上,卡马克无比深切地感受到了这一点。

那是一个下着大雨的夜晚,屋外电闪雷鸣,卡马克独自坐在那里编写程序,咪子懒洋洋地趴在他的显示器上,小爪子耷拉在屏幕前,她的身子很快就让显示器过热了,屏幕上的颜色变得紊乱,卡马克把她轻轻地推到一旁,她乖乖地跑开了。

天色阴暗,十字湖的湖水涨到了院子里,小快艇顶到了船屋的天花板,又黑又长的水蛇在船坞边游弋,这一切就像是什么恐怖片的序曲。通往南湖干道的那座桥已经被河水彻底淹没,当在外边跑了一天的杰伊来到桥边,他眼前根本无路可走,暴风雨还把河底的各种东西都卷了出来,“就像是个粪池一样”,他只好调头离开,等水位退下去再回家。

罗梅洛和他的一个朋友稍后也到了桥边,情况比先前还要糟糕,放眼望去,全是河水,而且,里面很可能还有各种水蛇和鳄鱼。

卡马克只能听天由命地坐在屋里独自工作,经过这么多天的共事,他越来越欣赏起罗梅洛,欣赏他那多年独立制作苹果机游戏所培养积累起来的包罗万象的才华。他不止是程序员,他还是艺术家、设计师、生意人,他不止是热爱游戏,从某种程度上来说,他本身就是一个精彩的游戏,似乎没有任何事物能让他这个会走、会说、会响、会动的游戏人陷入沮丧,就像游戏里的角色一样,他总能找到另一片新天地。

就在卡马克想着这些的时候,他听到了身后开门的声音,咪子吓了一跳,赶忙趴到了他脚边。卡马克转过头,映入他眼帘的是肩膀以下全部湿透了的罗梅洛,他站在门口,戴着厚厚的眼镜,脸上挂着大大的笑容,他身后,闪电正划过夜空。

卡马克不是一个多愁善感的人,他的记忆里没有多少感情方面的东西,但他记住了这个场景,记住了这不同寻常的一刻,以后的日子里,他愿意回想起:在一个暴雨滂沱的夜晚,罗梅洛趟过齐腰深的河水,只为了赶回来工作。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1990年12月14日下午,斯科特·米勒按下回车键,把《指挥官基恩》首部曲《火星放逐》(Marooned on Mars)传到了BBS上。如果玩家们想玩剩下的两部,他们就需要花三十美元购买,斯科特在收到支票后会给他们寄去装在拉链袋里的磁盘。在《基恩》之前,斯科特出版的所有共享软件每个月大概能卖出七千美元,而到了1990年圣诞节的时候,《基恩》已经卖出了三万美元。

不计其数的编辑和版主给斯科特打来了电话,显然,就像斯科特在电话里答复他们的那样,这个游戏是忽如其来的“一颗小型核弹”。没有人在PC上见过这样的东西——平滑的卷动、无处不在的幽默、精致的画面、流畅的操控、马里奥式的动作。“紧急通告!”一个编辑激动地写道:“准备迎接那铺天盖地的夸奖吧,还从来没有什么程序能让我们如此不吝赞美之词!”另一个编辑则说:“《基恩》重新定义了共享软件游戏的标准:紧张刺激、平滑流畅、街机式的动作游戏。”还有个编辑说道:“没有什么东西——没有任何东西,能比天极的《基恩》更棒了!”它毫不比任天堂的游戏逊色,事实是,它比任天堂的游戏更精彩。

遍布各地的玩家们对这个游戏爱不释手,斯科特收到了大量充满赞誉之词的信件,以及无数关于《基恩》系列下一款游戏的询问,各大BBS上布满了讨论《基恩》的帖子——技巧、秘密、战术。玩家们还对那些沃蒂冈文字充满了好奇,四下打探解码的办法。斯科特忙得喘不过气来了,他甚至动员了他的母亲,还招募了天极公司除他以外的第一名员工,一个名叫肖恩·格林(Shawn Green)的年轻程序员。当肖恩第一天去上班的时候,迎接他的是斯科特的母亲,她裹着浴袍,握着两个无绳电话,肖恩刚把其中一个从她手里接过来,它就开始响了。

1991年元旦前夜,罗梅洛、卡马克,还有其他的成员们在湖畔小屋举行了一个盛大的庆祝派对,烤肉的香味阵阵飘来,王子(Prince)的音乐回荡在四周,快艇在湖面上飞驰。罗梅洛平常是不怎么喝酒的,但今晚对他来说是个特殊的日子,刚过去的一年对他来说是如此美好,而又如此艰辛——他的妻儿都离开了他,当选择放在他面前的时候,他放弃了家庭生活,选择了游戏,尽管他可以随时去看望孩子们,他也经常这么做,但他现在实际上是生活在一个新的大家庭里——和这些热爱游戏的伙伴们,这个夜晚对他来说真是良宵苦短呵……

罗梅洛、汤姆和杰伊三人在厨房里喝得醉醺醺的,只有卡马克一个人神志清醒地站在角落里。罗梅洛看到了卡马克,于是举起手里那杯不知道是香槟还是白葡萄酒的东西,口齿不清地喊道:“卡马克,过来过来,马上就是1991年啦!你也要喝点,别像个孩子似的!”

卡马克不习惯这种交际——或者说是庆祝——的场合,他通常都希望自己能静静地消失,他更乐意去写点程序,或是看会书,但是今晚,他也不是那么得不近人情,他也充满喜悦,他为拥有了自己的事业、能享受制作游戏的乐趣、能和这些他所敬佩的伙伴们共事而感到开心,他只不过是不喜形于色罢了。出乎大家的意料,罗梅洛没费什么口舌就哄着卡马克喝下了好几杯酒,在他们印象中,低糖可乐是卡马克喝过的最烈的饮料。

晚些时候,罗梅洛看到卡马克独自站在厨房里,斜靠着墙,罗梅洛上前去对他说道:“嗨!哥们,喝醉了?是不是觉得头昏昏的?嘿!卡马克?”

“我迷糊了,”卡马克应道:“嗯嗯。”然后就蹒跚着回到了他的房间,这把罗梅洛给乐坏了。他剩下的整个晚上就不停地在每个人面前模仿着卡马克:“喔,我迷糊了……,我迷糊了。”

看到一贯严肃的卡马克放松下来真是一件有趣的事情。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

两个星期后的一天,杰伊像往常一样出门取信,然后挥舞着手里的一个信封冲了回来,那是天极公司寄来的第一笔提成,“啊,买比萨的钱又来啦!”他们欢呼道。杰伊打开信封,看到了支票上的数字:一万美元,这是几乎没有任何开支的纯利润,如果一直这样的话,他们在创业第一年就至少可以挣到十万美元,这样的收入已足以让他们辞去《软盘》的工作。

艾尔仍然对他们的第二职业一无所知,更不要说他们用的还是《软盘》的计算机。《玩家之刃》办得很好,他们最近的两个游戏《墓窖2》和《影子武士》博得了广泛好评,这份全年定价69.95美元的游戏期刊已经拥有了三千个订户,他们知道老艾就指望他们这几个做游戏的人了,他们也知道集体辞职对老艾来说意味着什么。

卡马克和罗梅洛明确地表示,他们不在乎《软盘》和艾尔会怎么样,毕竟这是他们成功的大好机会。而汤姆却有点紧张,他担心会被《软盘》起诉,这不仅会毁掉他们这个创业的机会,还会使他们无法尽情享受《基恩》带来的成功。他的担心被罗梅洛所不齿:“伙计,艾尔能告你什么?他能从你这里得到什么?你全部家当就是这张破床!”罗梅洛指着墙角的旧沙发说道:“你怎么回事啊?!你有什么东西好失去?”

杰伊也表示了他的担忧,恳求他们把事情处理得妥当一点:“不要弄的像扔颗炸弹在老艾面前一样。”

“不要操心啦,”罗梅洛一如既往地乐观:“不会有事的。”

与此同时,一个《软盘》的员工向艾尔透露了《玩家之刃》正在背地里做私活的消息。艾尔找到卡马克,他知道卡马克是最不善于撒谎的一个,向他发问就像在计算机上输入指令,或者是在计算器上按下数字——答案永远准确无误。“我承认,”卡马克回答他:“我们一直在用你的机器做我们自己的游戏,甚至是在上班时间里。”随后卡马克和罗梅洛宣布他们即将离开,而且,他们还要带走艾德里安。

艾尔觉得像是于某天回到家打开房门时,发现窗户被打破了,家里的电视机也不见了。但他很快就冷静了下来,试着扭转局面:“要么,我们看看能不能这样,我们再一起合作,我们开一家新的公司!我会全力支持你们,你们只管做你们想做的东西,我来负责销售,我们五五分成,绝不会有什么官司。”

这个提议大大出乎了罗梅洛和卡马克的意料,他们本以为艾尔会控告他们,哪知道艾尔居然反过来给他们提供经费,这简直是个绝佳的机会,毕竟他们想要的只是一份属于自己的事业,同时不必为各种商业上的事务烦心。和艾尔合作,或是和其他人合作,有什么区别呢?他们同意了。

但当艾尔回到《软盘》的办公室时,他眼前一片混乱,公司所有员工都聚到了一起,要艾尔给他们个说法。其中一个员工对艾尔说道:“卡马克和罗梅洛刚才回来吃午饭,大肆吹嘘他们谈妥了一笔多好多好的交易,这是怎么回事?这几个家伙用公司的机器做自己的私活,他们欺骗了公司!现在倒好,你居然还要开一个新公司,然后分一半给他们!他们凭什么?”

“因为,”艾尔回答他:“他们是优秀的人才,这是笔很好的交易,他们会为公司带来盈利,我们都会从中得益。”

但员工们不吃他这套,他们威胁道,要么那些做游戏的人离开,要么他们中的三十个人离开。艾尔深深地叹了口气,然后走到《玩家之刃》的办公室:“你们刚才把这件事情告诉了所有人,然后造成现在这个难堪的局面,你们知道你们都干了些什么吗?!”

“噢,”卡马克回答道:“我们只是想坦诚一点。”

“坦诚一点是没错,但如果由我来宣布,由我来处理,情况就不会是这个样子,”艾尔无奈地说:“我不能失去那些员工,我们无法合作了。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

经过了几个星期的谈判,间杂着《软盘》以起诉作为威胁,最终达成的协议是:他们以合同的形式继续为《玩家之刃》制作游戏,每两个月一个,持续一年。这个结果不光让《软盘》的员工们,也让艾尔觉得沮丧,尽管这些游戏制作者们不乏才华,但他们还只是些自行其是的孩子,如果有必要,他们不会在乎手段,而且,他们毫无负罪感,在他们眼里,这只是件好笑的事情,他们从不会为《软盘》的其他员工们考虑。在卡马克离开的时候,艾尔把他拽到一旁,问他:“你有没有为那些勤奋工作并一直支持你们的人们着想过?”

卡马克静静地听完了艾尔的话,浮现在他脑海里的却是那些过去的岁月,那些未酬的壮志,那些对他指手画脚的老学究。他一如既往地漠然:“我不在乎那些人。”在艾尔记忆里,卡马克当时的原话是:“我就算是回家卖比萨,也不会再呆在这个没用的地方。”

1991年2月1日,id Software成立了。

第五章:世外桃源

罗梅洛想把恶魔们召唤出来,或者,至少要找到召唤他们的办法。这是凌晨四点的湖畔小屋,空的饮料瓶散布在地上,咪子趴在卡马克的显示器上睡得正香,烤香肠的气味还在空气中萦绕,所有人都围在客厅的大桌子边,又一轮已经进行了好几个小时的《龙与地下城》游戏。自从离开《软盘》以后,他们就有了更多的时间来投入到这个世界里,这世界也在不断扩展,就像一本小说。他们在里面塑造着他们各自的角色,那承载了他们的希望和梦想,那不止是一个简单的游戏。

这个世界的庞大主要得自于卡马克。不像其他城主,只是制作些几个小时就结束的小故事,卡马克的世界是持续永恒的,不管玩家们如何重新编组,他们都是回到这个同样的世界。他们现在玩的这个故事,就是卡马克童年时在堪萨斯城开始制作的那个,这就像是音乐家们花若干年的时间来谱写一出宏大的歌剧一样。每次他们起夜时路过卡马克的房间,都会看到他趴在那些文档上,勾画着这个世界的细节。

卡马克以一己之力来创造的这个世界,是一部关于森林和魔法、时光隧道和怪兽的巨著,光是术语表就有五十页之多,涵盖了各种角色和物品,譬如“雷神”(Quake):一个头上悬浮着地狱魔方(Hellgate Cube)的斗士;“狂乱之杯”:如果你喝下其中的药水,你就会开始狂乱地攻击周围的每一个人;以及神器“大刀”(Daikatana),等等。作为城主,卡马克要随着游戏的深入不断创作出新的环境以及设定,然后由玩家们在其中探索,以及决定如何行事。他喜欢这种创作的感觉。

他们组建的队伍名叫“人见人爱”(Popular Demand),罗梅洛叫阿曼德,是一个喜欢摆弄魔法的战士。汤姆在里面叫巴迪,杰伊是一个叫里夫的神偷,艾德里安是一个名叫破石者的大块头,伴随着一次次的冒险,他们的能力和威望不断成长。他们这个探险团就是id的某种化身,就像卡马克说的那样,这个游戏能够让一个人展现出他真实的一面。而就在这个不同寻常的晚上,罗梅洛,准备和魔鬼们做笔交易。

卡马克在这个游戏里设定了阴阳两界,阳间就是他们的队伍所处的世界,阴间则是魔鬼们的天下。在阳间奔波了几个月后,罗梅洛厌倦了,为了找点刺激,他决定去夺取那最危险也是最强大的《魔界全书》(Demonicron),玩家可以通过它把魔鬼们召唤到阳间。卡马克查了查他的规则手册,然后告诉他们,如果使用得当的话,这本书可以给他们带来超凡的能力,他们将可以得到所有的财富和宝藏。听到这里,罗梅洛立刻想到了那终极武器——大刀。但是,这里面风险很大,如果这本书落到某个魔鬼手上,邪恶就会笼罩整个世界。尽管卡马克是游戏的创作者,但他尊重游戏的设定和限制,以及它的规律。如果一个玩家做了什么事情导致了世界的毁灭,那么游戏也只能就此结束。

罗梅洛他们讨论了一会,艾德里安和汤姆显得比较犹豫,但罗梅洛的热情再一次带动了他们:“来吧!我们不可能输的!”于是他们决定到神兽的宫殿里去夺取《魔界全书》。卡马克撒下骰子:玩家们赢了,他们得到了这本终极之书,接下来拿它做什么呢,他们还没想好。在这个时候,他们手上还有其他事情。现实世界里已经是深夜,他们要投入到id的游戏里去了。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

当他们给公司起名的时候,他们取了原来“深思软件”里Ideas和Deep这两个词的首字母,也有“销路好”(In Demand)的意思,他们也很乐意用汤姆的说法:在弗洛伊德的学说中,人格分为三个部分,本我(id)、自我(ego)、超我(superego),id就是使人按照唯乐原则(pleasure principle)行动的本能。

1991年里,他们那使人快乐的《基恩》销路的确很好,在共享软件排行榜上雄踞第一,这是第一个进入前十的游戏软件。《基恩》首个三部曲每月能给他们带来一万五到两万美元的收入,这不再只是“买比萨的钱”了,这是买计算机的钱:他们在湖畔的小屋里摆出一长排崭新的386PC机。

那一年,卡马克二十岁,罗梅洛二十三,他们已经有了自己的事业。

尽管罗梅洛、卡马克和艾德里安三人成功地离开了《软盘》,但汤姆和杰伊却选择了留下。汤姆只是暂时的,他不愿意在公司还需要他的时候就这么离开,他要等公司找到他的继任者。杰伊则觉得有责任尽到他在《软盘》的义务,现在他手上正有一个重要的苹果机项目,但他也还是id的伙伴,譬如偶尔来玩玩《龙与地下城》。

冬去春来,id的人们尽情享受着自由自在的时光。尽管他们还要为《软盘》制作游戏,但至少他们不需要再朝九晚五了,他们可以整天舒适地呆在湖畔小屋里。卡马克全身心地投入了他的下一个图像引擎,前一个引擎实现了卷轴效果的突破,而这次,他要创造一些更眩目的东西,在他系统地展开研究时,其他人正开始利用现有的技术为《软盘》制作游戏。

这自由,还有《基恩》的成功,激发出了更多制作游戏的灵感。《拯救罗瓦》(Rescure Rover)讲述的是一个男孩去寻找他那被外星人劫持的小狗罗瓦的故事。这是个精巧的迷宫游戏,在途中,玩家需要机智地转动一面面镜子,通过反射机制,利用或是避开外星机器人发射出的致命射线。id的风格初露雏形,那就是暴力加上幽默,表现越极端越好。《拯救罗瓦》的开始画面上,一只肥头大耳的狗摇着尾巴,上面一排枪口正顶住它的脑壳。

《罗瓦》朝黑色幽默的方向迈出了一步,他们三月份开始制作的新游戏——《鬼屋里的戴夫》(Dangerous Dave in the Haunted Mansion),则走得更远。这次,罗梅洛把他最钟爱的角色放到了险恶的环境里:戴夫驾着小货车来到了一幢破旧的大楼前——就像什里夫波特城里那些,他头戴猎帽,身穿牛仔服,手里挥舞着霰弹枪,楼里等待着他的是僵尸和鬼魂。

艾德里安是所有人里最喜欢这种恐怖主题的一个,在医院工作时的那些血腥镜头还萦绕在他心里,这对他而言是个释放的机会。他依然讨厌那假惺惺的《基恩》,只是他没有跟其他人说,在他看来,如果还要做这种低幼游戏的话,那最好是庸俗有趣的那种,就像当时的电视剧《龙兄鼠弟》(Ren and Stimpy)那样。而现在有了《鬼屋里的戴夫》,艾德里安总算找到了发泄的途径。当罗梅洛和汤姆坐在各自机器前忙碌的时候,艾德里安就悄悄地画起他所谓的“死亡动画”:三到四幅快速循环的画面,展现着戴夫痛苦的死亡过程。游戏里的角色死去时通常只是消失,汤姆在《基恩》里让尸体留下来,显然,艾德里安有他自己的想法。

不久后的一天晚上,罗梅洛看到了艾德里安的这个动画:戴夫被僵尸的拳头击中头部,然后眼珠随着一股血浆激射出来。罗梅洛笑得上气不接下气:“血!在游戏里面!太他妈的夸张了!”

暴力幻想有着源远流长的历史。一千多年前《贝奥武甫》(Beowulf)里的血腥描写使每一代读者为之着迷:“恶魔一把抓起熟睡的地主,把他撕成了碎片,然后喝下他的血,咽下他的肉,连每一根骨头都细细吮了一遍。”孩子们喜欢玩警察抓小偷的游戏,挥舞着玩具枪,装出被击中的样子,假想着鲜血从中弹的地方流出。在娱乐界,早期的恐怖片《德州电锯杀人狂》(The Texas Chain Saw Massacre)和《黑色星期五》(Friday the l3th)非常叫座,八十年代的动作片《第一滴血》(Rambo)、《终结者》(The Terminator)、《致命武器》(Lethal Weapon)也席卷了票房。

暴力在游戏里也不是什么新鲜事物——甚至在最早的计算机游戏《空间战争》里,玩家其实也是在不停地摧毁东西。但是,把暴力用图像展现在屏幕上的游戏还很少见,即使有,也很节制。这一方面是因为当时的技术无法渲染出逼真的图像,但更主要的原因还是制作者们不想去趟这浑水。1976年有过一个名为《死亡飞车》(Death Race)的街机游戏,它和《乒乓》之类的流行游戏大相径庭,在这个游戏里,玩家要开着车碾过散布在屏幕上的人——几根很粗糙的线条,在玩家的车碰到这些尖叫的人们时,他们就变成一个个的十字架,屏幕两旁的机箱上还画着勾魂使者和骷髅头。它是第一个被禁的电子游戏。

艾德里安那些死亡主题的作品是如此精彩,以至于大家都不舍得把它们从游戏里剔除出去。在罗梅洛的鼓舞下,艾德里安加入了更多血腥的细节,譬如当僵尸被霰弹枪击中时会飞溅出鲜血淋漓的肉块。当《软盘》的人们看到这些画面时,他们显然没有领会这其中的诙谐,他们坚持要id重新制作死亡的动画——不能有任何血迹。“也许会有那么一天,”艾德里安说:“我们可以随心所欲地去做血腥的游戏。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

其他人忙碌的时候,卡马克也没有闲着。他是个追求技术的人,程序员们心目中的圣殿:三维图像,自然成了他的下一个目标。严格地说,二维的计算机屏幕不可能装下真正三维的世界,程序员们只能是通过透视做图法,以第一人称的视角,让玩家“感觉”到自己处在一个三维的世界里。

卡马克并没有意识到,他正在试图去实现千百年来让无数人为之魂牵情系的梦想:一种逼真的、令人信服的、可交互的体验。在一部分人眼里,这甚至是人类最根本的愿望。法国南部拉斯考克(Lascaux)洞穴里那公元前一万五千年的壁画就是人类最早对“拟真环境”(Immersive Environments)的尝试,那些图画试图让置身其中的人们感觉像是进入了另外一个世界。

1932年,英国小说家奥尔德斯·赫胥黎(Aldous Huxley)在他的小说《美丽新世界》(Brave New World)里描绘了一种类似未来电影的多感媒介,在综合了三维图像、嗅觉、触觉等效果后,这种多感媒介“比日常生活感觉更和谐、更完美、更多姿多彩,远比现实世界真实。”美国文学家雷·布拉德伯里(Ray Bradbury)在他1950年的一个短篇《非洲草原》(The Veldt)里也写到了类似的事物,一户人家有一个特殊的房间,能把人们想像中的场景显现在四周的墙上,在书里,当一个非洲大草原无比逼真地出现在房间里时,麻烦也接踵而至。

很快,技术人员们就开始为把这些梦想变成现实而努力。1955年,好莱坞的一个名叫莫顿·海利希(Morton Heilig)的摄像师开始了他称做是“未来电影院”的工作:“它将会远远胜过赫胥黎笔下的多感媒介。”海利希通过他那名叫“体验剧场”(Sensorama)的新奇设备所带来的图像、声音、气味,营造出一个热闹的街市,他的目标是超过当时那些简陋的所谓三维电影,带给观众一种“真正身临其境的感觉”。

简单地把各种多媒体效果综合起来并不能建造出令人信服的拟真环境,交互性也是必不可少的一部分,而交互性正是计算机游戏的迷人之处。威斯康星大学的计算机艺术家麦恩·柯尤革(Myron Krueger)就把可交互的拟真环境作为一个至爱的项目来研究,20世纪70年代里,通过把参与者——甚至是身处异地的参与者——投影到一幅巨大的画面上,他创建出了布拉德伯里笔下的大草原。“这样的环境,暗示着一种新的艺术形式,它基于人和机器的实时交互……在这种人造现实的场景里,艺术家们可以完全控制各种因果关系……结果的差异性就是这门艺术的表现形式。”譬如,在其中一个实验里,观众们要试着在投影到墙壁上的迷宫里找到出路。

到1980年的时候,这种拟真环境有了一个新的称呼:虚拟现实(Virtual Reality)。威廉姆·吉布森(William Gibson)在他1984年的小说《神经漫游者》(Neuromancer)里提出了“电脑空间”(CyberSpace)这个名词,那是存在于计算机网络中的交互世界。20世纪80年代末期,美国航天局艾姆斯(Ames)研究中心的一名工程师,斯科特·费希尔(Scott Fisher),成功地通过数字手套和固定在头上的一个显示设备实现了虚拟现实的原型。通过这些工具,用户可以在以主视角三维图像展现的虚拟世界里操控各种物体。最后,费希尔在1989年写道:“将会诞生交互影院和交互游戏,里面既可以有日常生活中的物品,也可以有现实中没有的东西,人们的数字化身可以有不同的外貌。最终,电信网络上会出现可配置的虚拟现实服务器,用户们可以远程登入,和其他人的数字化身进行交互……虚拟世界将会和现实世界一样多姿多彩,在那里面,人们甚至可以通过一些传送门瞬间消失,进入另外一个虚拟世界。”

尽管卡马克也是一个科幻小说爱好者,着迷于《星际迷航》里的全息成像台,但他并没有去堆砌宏大的虚拟现实设计方案,他更专注于解决当前的技术问题,譬如如何在计算机上显示出三维图像。

卡马克很久以前在苹果机上制作那个MTV标志的时候就体验过三维图像编程。在那以后也出现过一些主视角的三维游戏。1980年,理查德·盖略特就在他的第一个角色扮演游戏《阿卡拉贝斯》(Akalabeth)里采用了透视做图法。两年后,天狼星软件(Sirius Software)出品了一个既叫好又叫座的主视角迷宫游戏:《出口》(Wayout),它是飞行模拟类的,玩家可以透过各种飞机的舷窗体验到在三维世界里飞行的感觉。1990年,理查德·盖略特的维真公司出品了一个太空主题的战机游戏:《银河飞将》(Wing Commander),它很快就在id的湖畔小屋里流行了起来。

卡马克觉得他可以做得更好。在他看来,飞行模拟类的三维游戏实在太慢了,繁复的图像让玩家们感觉自己像是一只在空中飞行的蜗牛。他和id的其他人都更偏爱类似街机的快节奏动作游戏,譬如《防御者》、《行星撞击》、《金手套》,在其他人忙于《拯救罗瓦》和《鬼屋里的戴夫》时,卡马克就开始尝试去做这没有人做过的东西:快节奏的三维动作游戏。

然而,他随即发现,PC机的性能还不足以运行那样的游戏。卡马克翻遍了各种书籍和期刊,但没发现什么有价值的东西。他又像当初做卷轴效果时一样:先尝试最直接的办法,如果不行,再拓宽思路。三维游戏之所以很慢的一个原因是要画的物体表面太多,但卡马克又想到,是不是可以让计算机每次少画些表面,就像给马儿戴上个眼罩,譬如,在绘制走道时,省略掉地板和天花板,只画出两侧的墙壁,用透视法的话,它们就是两个简单的梯形。此外,卡马克又独辟蹊径地使用了所谓的“射线追踪”算法(raycasting),在剔除掉玩家视角外的物体后,游戏的速度得到了极大的提高。这时,就只剩下最后一个挑战:在三维的世界里加入人物,解决的办法是简单地绘制出表现这些人物的图像和动画,《银河飞将》就已经可以根据玩家和目标之间的距离远近来动态缩放图像的大小。在综合了削减多边形、射线追踪、动态缩放这些技术后,卡马克已经可以做出一个流畅的三维世界了。

整个研究工作花费了卡马克六个星期,以前他顶多都只需要四个星期。当罗梅洛看到这成果时,他再次叹服于卡马克的天才。他们接下来讨论了应该制作个什么样的游戏,才能发挥出这个引擎的优势。他们最终决定制作一个未来核战后的世界,玩家在里面开着坦克营救幸存者。《气垫坦克》(Hovertank)于1991年4月发布——id创造了主视角射击类游戏。

尽管《气垫坦克》是一个创新的游戏,但它比不上《基恩》,它看上去过于简陋,尽是大块大块的单调颜色,抛去这些不足,它还是体现了id那益发血腥的风格。在那些核污染产生的异种死去时,艾德里安让它们变成了一团血胶;就像《基恩》里的唷扑一样,它们也继续逗留在这个世界里,于是当玩家回到他曾经屠戮过的地方时,还可以重新回味他给这里带来的不幸。

id不断地尝试着新的技术和游戏,很快就进入了五月,他们回到了最初的《基恩》。为了履行和《软盘》的协议,他们决定制作一章《基恩的梦想》(Keen Dreams),尽管他们已经在《气垫坦克》里试验了三维技术,但他们还是选择了继续在《基恩》世界里沿用平面卷轴的表现方式,当然,加入了一些新东西,譬如,把场景的移动做得更加逼真——让前景和背景以不同的速度卷动,这是所谓的“视差卷动”。在过去,当基恩经过一片森林时,树木和他以同样的速度在屏幕上移动,如果是“视差卷动”的话,背景上树木的移动会相对缓慢许多,这就产生了一种纵深的层次感,让人觉得更真实。

卡马克再一次被PC机的性能所局束,经过几次尝试后,他意识到没有任何简洁的办法可以实现“视差卷动”效果,PC机的速度根本无法同时处理背景和前景的更迭。卡马克决定凑合一下,他曾在程序里保存过屏幕上某块区域的缓存,这样就不需要每次都重新把画面计算出来,而为了表现出深度感,他想,他可以同时保存两块缓存,譬如前景里的一小段人行道和背景里的一小片树木,这样就可以快捷地移动它们。他再一次在PC上实现了无人能及的速度。《基恩的梦想》在五月底的时候完成了。

六月份的时候,id开始为天极制作《基恩》的第二个三部曲,也就是第四、五、六章,和以前一样,其中一章将作为共享软件免费发布,玩家们需要购买其余两章。天极的游戏这时已不光是共享游戏市场里的领头羊,而是整个共享软件市场的领头羊,《基恩》仍停留在排行榜的首位,每个月为天极带来约六万美元的进账。如果继续沿用以前的发行方式,斯科特向他们保证,收入只会比过去还多。

汤姆撰写了《再见,银河》(Goodbye Galaxy)这个三部曲的故事大纲。这次,基恩发现了一个试图摧毁银河系的阴谋,他必须立即乘坐他的飞船去拯救这个世界,在此之前,他还要照料好父母,他们被他不小心用眩弹枪击晕了。汤姆在游戏里加入了眩弹枪这个新玩意,因为在前一个三部曲发布后,忧心忡忡的家长们给id寄来了一些不满的信件,他们不喜欢游戏中角色死亡的方式,他们不喜欢死了以后还留在屏幕上的唷扑:“为什么这些角色不能直接消失呢?就像其他游戏里一样?”汤姆仍想坚持他的做法,但他也不愿去惹不必要的麻烦,他只好加入了这种新式武器,角色们不会死去,他们被击中的时候只会晕倒在原地,头顶上盘旋着一串金星。

八月份,他们完成了第四章《神谕的秘密》(Secret of the Oracle)的原型。就在这时候,罗梅洛接到了一个来自加拿大的电话,那是一个名叫马克·瑞恩(Mark Rein)的玩家,他是个狂热的基恩迷,也是个健谈的人,他问罗梅洛id是否需要游戏测试人员,罗梅洛随即把第四章寄给了他,游戏最后是下一章《末日机器》(Armageddon Machine)的诱人介绍,里面许诺到,那将会是“比现实更有趣的世界”!

瑞恩很快寄回了他发现的问题,那是一张详细的清单,这让罗梅洛颇为惊讶。瑞恩其实不止是一个玩家,他还是一个积极主动的生意人,他对id的游戏是如此有信心,以至于他自己买了张机票飞到了什里夫波特。而对罗梅洛,这个从第一眼看到戴夫行走在马里奥世界里时就开始不停寻找商业机会的人来说,瑞恩的到来填补了不少空白,“卡马克有领先的技术,公司里应该有个人来彻底发掘出这技术的价值。”而卡马克却没有立即附和罗梅洛的想法,就像他一贯乐于指出的那样,他只想制作精彩的游戏,而不想去经营一个很大的公司,但是他也知道,如果没有罗梅洛,他们就不会有这份事业,id从一开始就不会存在。卡马克最后同意让瑞恩作为试用经理加入id,试用期为六个月。

短短几个星期后,瑞恩就和一个叫做“造型”(FormGen)的公司谈妥了《基恩》零售版本的生意,他激昂地告诉id的人们,零售市场的前景将会多么美妙,他们反正是要做三部曲,只要拿出一部来交给零售渠道就可以了。对id来说,这个点子似乎不坏,毕竟这又是一条来钱的路子,除了试玩版那一章外,他们可以通过共享软件模式销售一章,再零售一章。

id和天极没有合同约束,但他们还是电话通知了斯科特。他们之间的关系很好,春夏之交的时候,在id的邀请下,斯科特还领着一些游戏制作者到湖畔来参观了一次,罗梅洛顺便主持了一个关于发放技术许可的会议。在罗梅洛看来,技术许可是一种不错的手段,既然卡马克的技术如此让人咋舌,那为什么不让其他人付些钱来得到它呢,然后他们可以用这技术做他们自己的游戏。在那个周末,id用《基恩》的引擎即兴制作了一个《吃豆子》的PC版给其他制作者们看。随后,他们花了一个晚上对引擎进行了处理,然后把id的第一份技术许可卖给了天极。

当他们告诉斯科特零售版本的事情时,斯科特乱了手脚。“这下麻烦大了,”他告诉id:“你们违背了三部曲的公式,如果你们以共享软件形式发布第一部,而不让玩家们以同样的形式买到剩下两部的话,它绝不会卖得像以前那么好。”但是id的人们告诉他,太迟了,他们已经和造型公司签订了合同。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

id的雄心在不断壮大,他们不光在研究着新的技术,做着新的游戏,开始新的销售手段,他们还在寻找一个新的家园。1991年8月,罗梅洛和汤姆提出要离开什里夫波特,尽管湖畔的小屋陪伴了他们许多快乐的时光,但他们厌倦了这周围压抑的环境,这里的人们为了下一顿饭甚至要到十字湖的桥上去钓鱼,罗梅洛不想再看到这样的场景,而且,还有个原因,他有了新的女朋友。贝丝·麦可儿(Beth McCall)来自新奥尔良,在《软盘》的物流部工作,她是个爱笑的女孩,罗梅洛的每一个无聊玩笑都可以把她逗乐,他们之间的关系轻松愉快,这正是离了婚的罗梅洛所需要的。尽管他还是可以经常去探望孩子,但他和前妻的关系依然很紧张,贝丝正好在这时出现在了他身边,更美的是,贝丝也想离开什里夫波特。

汤姆已经有了主意。他怀念他大学时那个小城的气氛,以及那四季分明的气候,他恳求他们搬到威斯康星。罗梅洛同意先和他去看看那一个大学城:麦迪逊。他们带回的消息是那个地方很不错。他们的室友詹森·布罗克维奇正好收到了那里一所学校的录取书,可以和他们一起过去,不过大家都觉得詹森是个缺乏动力的家伙,他曾在一次谈话中说编程赚到的钱太少,和他那些投资项目比起来差远了,他小货车的牌照上是一个单词:“独裁者”(autocrat),但卡马克觉得詹森是个聪明的人,一个很有天分的程序员,他不介意詹森和他们同去。

卡马克也不介意要去何方,大家都知道,他只要能继续写代码就行。但艾德里安则不愿意走,什里夫波特是他长大的地方,尽管他在工作中喜欢黑暗的世界,但在现实里,他更渴望稳定的生活。罗梅洛不停地哀求艾德里安,向他保证到了那边后只租最好的房子,在家里人和朋友的劝说下,艾德里安答应了。但让大家失望的是,杰伊决定要留下来,为了完成他手上那个《软盘》的苹果机软件,在创业的风险面前,他选择了退缩。

九月一个秋高气爽的早晨,id的人们永远地离开了湖畔小屋,他们的所有家当就是车上的那几台计算机。

第六章:阴郁的日子

这一次,罗梅洛的肥皂泡破灭了。

在一个阴沉的下午,id的人们抵达了麦迪逊,发现那里并没有像罗梅洛和汤姆所描述的那么有趣。他们的公寓在一片杂乱的建筑群中,每一幢房子看上去都差不多,和他们在什里夫波特的湖畔小屋比起来,这里简直是个垃圾场:没有院子、没有湖光、没有快艇。他们走进大厅的时候,路边不是绿树成荫的小道,而是两个面目狰狞的人在交易毒品。

他们有了个所谓的办公室:三室一厅的公寓,每个人都有了自己的住处,除了卡马克,他是最无所谓的一个,所以他同意就睡在办公室上面的阁楼里。最惨的要数艾德里安,在其他人只需要穿过一个停车场就可以回到住处的时候,本已很不情愿地离开了家乡的他,现在又只找到个在小区另一头的公寓,上下班都要开车。最开心的是罗梅洛,他有了个全新的开始:新的女朋友,新的游戏。汤姆也很高兴,他又回到了他长大的地方,他喜欢这里的学校环境。惟一让这两个满意的家伙觉得别扭的就是詹森,他看起来完全不合群,但他已经是卡马克的朋友,卡马克不想他离开。

尽管是几家欢喜几家愁,他们还是马上投入了《基恩》第二个三部曲的开发工作。经过这几个月的共事,他们配合得越来越默契。卡马克和罗梅洛的步调完全一致,一个在改进游戏的引擎,另一个忙于编辑器和工具,没有什么东西可以让他们分心。某个晚上,他们正在忙碌的时候,贝丝带了几个女伴到了id的办公室里,她竭尽全力地想吸引罗梅洛的注意力,但却激不起他一丝反应,贝丝气急败坏地问道:“为什么我们不能把我们的男人带回家做做爱呢?!”

“因为我们要工作。”罗梅洛回答道。卡马克在一旁笑。

汤姆也无比专注。《基恩》的成功让他感觉像是在坐过山车,这把他的想像力激发到了一个新的高度,他在游戏里加入了挎着枪的土豆人、结结巴巴的毒蘑菇,还有他最钟爱的小笨鱼——长着大门牙瞪着一双傻眼的绿色小家伙。

艾德里安仍和以前一样对这些可爱的角色毫不感冒,但他还是尽他所能地把这些无聊的角色画得栩栩如生。他的作品变得更加精细和多彩,丝毫不比外面最棒的游戏逊色。尽管他对汤姆、基恩、麦迪逊的怨气越积越多,但他现在找到了一个发泄的手段,譬如把基恩画成眼珠凸出喉咙撕裂的样子,在把那可爱的基恩和这痛苦的基恩来回切换的时候,他大笑了起来。

《基恩》的工作在顺利进行,支票也源源不断地到账。卡马克现在可以抽空出来继续研究三维主视角设计游戏了。最后的进展来自于他从罗梅洛口中听到的技术,这也是他和罗梅洛这对拍档互补互助的一个方面:卡马克精于图像编程,但他对游戏制作圈子里发生的事情没有兴趣,他从来不算是一个真正的玩家,他只是制作游戏,就像他只做《龙与地下城》的城主,但从不参与探险一样;罗梅洛恰好相反,他关注所有的事情、所有的游戏、所有的制作者,就是这其中的一个制作者,告诉了他这个新的概念:“材质贴图”(texture mapping)。

材质贴图指的是把一幅精细的纹理应用到屏幕里的某个物体表面,这样就可以画出一面有质地的砖墙,而不是一个棕色的方块。罗梅洛从保罗·纽拉斯(Paul Neurath)那里听说了这个词,纽拉斯的公司“蓝天制作”(Blue Sky Productions)正在开发一个叫做《地下创世纪》(Ultima Underworld)的游戏,这个游戏将由创世纪系列原作者盖略特的维真公司发行。纽拉斯告诉罗梅洛,他们正在把材质贴图应用于三维世界中的多边形上。罗梅洛的反应是:“酷!”他一挂掉电话,就挪到卡马克旁边告诉他:“保罗跟我说他们正在用材质贴图制作一个游戏。”

“材质贴图?”卡马克花了几秒钟在脑海里琢磨了一下这个概念,然后告诉罗梅洛:“我也可以做。”

然后就有了《墓窖3D》,这里面有灰色的墙,上面还有绿色的污迹,玩家穿行于迷宫中,手里可以发射出火球,这手绘制在屏幕下方的中间,玩家像低头看着自己的手臂伸入到了屏幕里一样,通过这样的手,id巧妙地给了玩家一个强烈的暗示:你不只是在玩这个游戏,你就在这个游戏里!

《墓窖3D》先于《地下创世纪》半年发布,由于盖略特的名气,那个角色扮演游戏吸引了更多的目光。但可以说是他们一起把三维游戏体验带到了一个更让人沉浸的新阶段。当斯科特·米勒看到《墓窖3D》时,他只有一个念头:“我们要做一个这样的共享游戏。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

感恩节前后,在麦迪逊的日子变得愈发难熬。警察破门而入,捕获了他们隔壁的两个毒贩子;有人用管子吸走了他们车里的汽油;倒霉的艾德里安弄丢了他水床的盖子,找不到任何东西可以替代,只好睡了几个月的地板;同样睡地板的还有卡马克,他是自己愿意,他没觉得有什么不舒服,罗梅洛最后看不下去了,给卡马克买了个床垫,并对他说:“哥们,你该睡个好觉了。”

麦迪逊进入了寒冬,真正的寒冬。大雪纷纷扬扬下个不停,停车场变成了溜冰场。每天下午艾德里安起床后,都要在驾驶室里坐二十分钟,才能打着火,而他又不得不开车才能到办公室。某天他们一起出去买比萨,下车没两步就纷纷冲回车里——实在是太冷了,没人愿意再出去,他们决定不吃比萨,开车回家。

最后他们只好成天呆在房间里,尽管在什里夫波特的时候他们也不怎么出门,但至少他们想出的时候是可以出去的,譬如到湖边散散步,不像在这里,完全是无奈。他们越来越频繁地聚集到《龙与地下城》的世界里,为了使游戏扩展得更大,他们在街上贴出了招募新人的海报。艾德里安在海报上方画了id每个人在游戏里对应的人物头像——长着胡须的汤姆握着大斧,罗梅洛则拿着长剑,艾德里安高高站着,系着腰带的衣服上印着“死亡”二字,卡马克穿着巫师的衣服,手里捧着规则手册,在他们的旁边,是一个黑色的头像轮廓,上面画着一个大大的问号,海报正中是字样:“征求:牧师或(和)盗贼。我们的战斗是由角色和事件推动的,引人入胜……刚把生意搬到这里,需要一至两个新玩家,你在战斗中会享受到:角色的交互、绝佳的平衡、意外的惊奇以及比萨。你绝无可能在战斗中做到的:主宰世界。”

气氛变得越来越紧张——不过不是关于谁能主宰世界,而是谁能主宰他们的办公室。艾德里安受够了汤姆和罗梅洛的胡闹,他们不光是用嘴模仿外星人的语言,还动起手脚来模仿《基恩》里的各个角色,甚至连卡马克都嫌烦了。更麻烦的还有詹森,虽然他已经完全是个多余的人,但卡马克仍然为他说话,没有办法,他们只好让詹森随便糊弄个简单的游戏给《软盘》,履行他们的合同。

《基恩》的第二个三部曲行将完工,id把注意力集中到了下一个给天极的游戏上。这个时候,他们各自的角色也更为清晰明确:卡马克是技术方面的头,负责制作出新的引擎用于接下来的游戏;汤姆是主设计师,负责构思游戏的情节和方方面面的内容;罗梅洛则恰好介于他们之间,既可以帮助卡马克编写工具,又可以和汤姆一起创造各种点子;艾德里安负责把他们的要求付诸于图画,并不时在里面添几道血污。

而当他们在某天晚上坐下来讨论新游戏的时候,角色发生了一点变动。

首先是汤姆,他被几个月前《基恩》第一个三部曲的巨大成功所激励,正憧憬着第三个三部曲,就像他心目中的英雄乔治·卢卡斯制作的《星球大战》一样。但卡马克的新技术却明显朝着另外一个方向:快节奏的主视角游戏。《基恩》既不够快,也不是主视角,它只是一个类似马里奥的卷轴冒险游戏,下一个游戏肯定不会再沿着这条路走。

汤姆很失望,但他接受了主视角这个现实,并立刻想出了个点子:“嘿,记得电影《怪形》(The Thing)里那个家伙吗?他从那个异形肆虐的地方跑出来以后,每个人都问他那里到底有什么东西,他只能回答,‘我不知道,但那里真的很怪异,让我很不爽’,这就像个游戏啊,因为在游戏里,你不知道你为什么要朝那些怪兽们开火,你只知道它们那绿汪汪的样子让你觉得很不爽,为什么不能做个这样的游戏呢?譬如关于从实验室里跑出来的突变异种们,你一个都不能把它们放跑。”汤姆接着就开始给游戏想名字,并很大声地读出来:“地狱异种!”“去死吧,异种!”“三维恶魔!”“材质贴图的特伦斯和其他乌七八糟……”,“或者,”他总结道,可以抛开这些花哨的词藻,直接叫:“让人不爽的东西”。

大家都笑了,罗梅洛喊道:“对啊!以后就会有玩家到店里对售货员说,嗯,对不起,请问你这里有没有让人不爽的东西?”尽管大家在叫好,但汤姆立刻收回了这个念头,他也发现这个名字过于荒谬了。

罗梅洛继续:“嗯,我不知道怎么说,不过那个念头听起来太老套了,已经出现过无数次:‘啊,怪物们布满了整个实验室,然后如何如何……’我们要做个别致的东西,譬如,如果我们制作个三维的《德军总部》,那他妈的该有多酷啊!”

《德军总部》!这个词立刻让卡马克和汤姆为之一振,就像罗梅洛一样,他们这些苹果机玩家就是玩着这个经典的动作游戏长大的,它是希拉斯·华纳这个传奇人物在20世纪80年代早期的一款杰作。他们立刻领会了罗梅洛的意思。《德军总部》这个主题非常适合卡马克的新技术,因为它本质上就是一个迷宫射击游戏,玩家们在其中和纳粹搏斗,寻找各种财宝,最后面对希特勒本人。尽管原作的画面很粗糙,但它能让玩家感觉到自己是在一个很大的世界里,这在那时是非常独特的。当时的计算机或街机游戏,譬如《乒乓》,都只在一个屏幕上进行,但在《德军总部》里,屏幕上显现的只是那个巨大的城堡里的一个房间,每一个房间都是由墙壁组成的一个迷宫。当玩家穿过某个迷宫后,他就可以进入下一个房间,屏幕上的画面随之改变,尽管没有平滑卷动,但玩家的确能感受到自己是在一个巨大的世界里探索,而且他不知道下一个房间里等待着他的将是什么:当然,通常是一个操着德语尖叫的纳粹士兵。

看到大家都对这个主意很赞成,罗梅洛就继续发挥起他的想像力:“在原作里,玩家可以从敌人的尸体身上扒下东西,如果这发生在一个三维的世界里该多酷啊!你可以走过去,把尸体拖到墙角,然后挨个搜他身上的口袋。”他嘴里模仿着那声音:“簌簌,簌簌……我们可以利用这个机会做个完全不同以往的游戏,快节奏的,带材质贴图的,如果我们可以把图像做得漂亮,声音做得逼真,让它玩起来无比有趣,那我们肯定能成功,尤其是配上这个主题。”

那时的计算机游戏业还是一片宁静祥和的景象:玩家们在《模拟城市》(SimCity)里建造并管理着虚拟的城镇,在《文明》(Civilization)里运用策略再现历史上的著名战役——但只是通过一些图标和数字,没有血色。《德军总部3D》将是他们从来没有见过的东西,“它会是震撼性的,极其震撼的游戏。”罗梅洛总结道。

卡马克再同意不过了,罗梅洛总是能够有如神助般地想出这些令人心悦诚服的点子。卡马克愈发地欣赏起罗梅洛的天才:他能用卡马克的技术创造出美妙的新世界,而卡马克自己永远也构思不出那样的世界。艾德里安对《德军总部》没什么了解,但他渴盼着制作任何新游戏,只要不是《基恩》,而且他对三维环境下的美工也跃跃欲试。汤姆,尽管还惦记着《基恩》,但他觉得等做完这个游戏后再回头继续第三个三部曲也可以,毕竟,他还是这个公司的设计师,而且他不是那种非要坚持己见的人,这次就跟着大伙走吧。

这个游戏将会比过去的更加令人惊叹——得自于卡马克的新技术;这个游戏还会给世界带来更大的冲击——因为,id的舵盘现在掌握在了罗梅洛手里。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

冬夜,卡马克系好鞋带,披上外套,迎着刺骨的严寒独自走进了麦迪逊的风雪中,他没有车,他的美洲豹早被他卖掉了。外面的世界被大雪盖得严严实实,四下里白茫茫一片,树上悬着冰柱。卡马克正要去办一件要紧的事,这种时候,他对恶劣的气候丝毫不以为然,就像在有必要的时候,对罗梅洛和汤姆在他身边的胡闹置若罔闻。

卡马克走进银行,请出纳员换了张一万一千美元的支票,他要用这些钱买台NeXT计算机,那是史蒂夫·乔布斯这个苹果的合伙创办人离开苹果后新开的一家公司的产品,它融合了NeXTSTEP操作系统的技术,远胜于史蒂夫以前的作品,是专门给软件开发人员定制的PC和游戏的市场正在壮大,它就是可以用来给越来越多的游戏平台开发更多姿多彩的游戏的工具。它,就是卡马克这个年轻的程序员送给自己的圣诞礼物。

除了新的NeXT计算机,id的办公室还有了其他改变。詹森终于被解雇了,现在他们是一个只有四个人的公司。外面的世界里,空气中也弥漫着一股新鲜的味道,里根-布什时代快走到了尽头,新的思潮正在涌动。首先是在西雅图,三人组合“涅槃”(Nirvana)乐队的唱片《无所谓》(Nevermind)赶下迈克尔·杰克逊,登上了排行榜的首位,很快,grunge和hip-hop这些音乐流派就以它们更严酷直白的主张席卷了世界。id就是游戏界的叛逆者,他们要做的事情也是:打破传统。那时,《马里奥》和《吃豆子》之类的游戏仍然主宰着游戏界,在这个领域,还从来没有像《德军总部3D》般颠覆主流的东西。

《德军总部3D》这个名字费了他们不少脑筋,因为一开始他们觉得不能直接用这个最早是由希拉斯·华纳的缪斯软件使用的名字,汤姆想出了一大串备用名单,从造作的《德意志第四帝国》或《德国深处》,到莫名其妙的《哈塞尔霍夫总部》(Castle Hasselhoff),搞笑的《用鲁格尔手枪射我吧》(Luger Me Now),他甚至想了些德文名字:《邪恶匕首》(Dolchteufel)、《怪味》(Geruchschlecht)。出乎意料的是,他们后来发现缪斯软件已在80年代中期破产,那个商标已经失效,他们可以放心地使用《德军总部3D》这个名字。

斯科特非常喜欢他们的这个计划,他已经花了几个月来恳求他们做一个三维共享游戏,而且他也玩过《德军总部》,他非常赞赏罗梅洛的那些想法:砰砰作响的枪声,快速地移动,把纳粹们一片一片地放倒。《基恩》的收入源源不断,第二个三部曲也已在共享软件市场发布,但销量让人失望,只有原作的三分之一,斯科特以前就指出过把其中一部通过零售渠道发售会影响共享市场的销量,他的担心变成了现实,因为现在他手上只有一部可以给共享游戏的玩家们。但不管怎样,id还是他的摇钱树,他对他们的技术和想像力没有一丝一毫的怀疑。至于《德军总部3D》,他向他们保证,至少会有十万美元的收入。

但id绝不只满足于这么多,瑞恩这个id的试用经理又和造型公司谈妥了两款零售游戏的单子。id的人们既高兴又担心,他们交给造型公司的《基恩:异形吃了我妹妹》(Alien Ate My Babysitter)卖得并不好,id认为是盒子上糟糕的封面造型毁了它,做设计的那家公司原本是给立顿红茶(Lipton)之类的产品做设计的。但id还是被诱人前景所吸引:这样他们就可以从零售和共享这两个市场上同时得利。没有其他公司这样做,甚至维真或雪乐山这样的大公司也没有。尽管瑞恩和造型公司的人对于游戏的主题满怀担忧,跟id不停念叨着“不要卷进二战相关题材”之类的话,但他们还是接受了《德军总部3D》的零售版。id再次得以按照自己的方式行事,他们越来越习惯于这样的感觉。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

咪子把NeXT机当做了她的新窝,她整天懒洋洋地趴在那黑色的大显示器上,两只小腿垂在屏幕前。卡马克、罗梅洛、汤姆以及艾德里安则坐在他们各自的机器旁,四周散落着空的比萨盒和可乐瓶,外面宁静的世界和他们屏幕上逐渐成形的《德军总部3D》世界形成了巨大的反差。这个游戏从在他们脑海中诞生的那一刻起就注定了是血腥的——像罗梅洛所期望的那样,而且是快速的——这就要靠卡马克来实现了。

得益于制作《墓窖3D》时射线追踪算法和材质贴图的结合,卡马克知道游戏的速度已经足够让人沉浸在其中了。对于《德军总部3D》,其实他没有什么太大的改进可做,无非就是完善已有的代码:修补各种小问题,做一些优化,使它们更整洁优雅。为了保持游戏的速度,里面的角色并不是三维的,而只是二维的图片,就像现实世界里纸板做的靶子。

罗梅洛心目中的这个游戏是:“如割草般消灭纳粹士兵”,为此,他尽情地发挥着他的想像力,不管多疯狂的念头这时都不算过分,他想让玩家感受到在一个布满党卫军的纳粹碉堡里战斗时的紧张、惊吓以及恐惧——那里面甚至有希特勒本人。艾德里安查阅了历史书籍,扫描下这个大独裁者的照片,这些头像将悬挂在游戏的各个关卡中。

这还不够,“我们是不是可以……”罗梅洛建议道:“放些军犬到游戏里,纯种德国牧羊犬!玩家可以用枪放倒它们。”艾德里安喜欢这个想法,他立刻勾画出了军犬的图案,以及它死去时哀鸣着躺倒在地的各种样子。“游戏里还要有血,”罗梅洛补充道:“大量的血,比现在任何游戏都要多。武器可以简单一点,只要致命就行,譬如匕首、手枪,或者再加上个格林机关枪(Gatling)。”艾德里安把罗梅洛这些想法一一付诸笔端。

汤姆则想出了各种游戏中可被搜集的物品。早期文本冒险游戏中,玩家的任务本质上就只是两件事情:杀敌和搜集物品。汤姆设计了散布在碉堡里的财宝。此外,还有个需要考虑的东西是补给,玩家在游戏开始的时候会有一百点生命值,当他被击中时,这个值就会减少,直到为零——被干掉,那么,游戏中得有东西让玩家补充生命值,汤姆想在补给物品上也玩点花样:“譬如……鸡腿?”

“不错,”罗梅洛赞同道:“或者,更离谱的,狗食?”

既然游戏里已经有了军犬,用狗食做补给也说得过去,汤姆想像着主角啧啧吃下狗食的样子,不由得乐了,“或者,”他又提议道:“当玩家的生命值非常低的时候,譬如只有十点,他就可以走到纳粹士兵的尸体边,然后……”罗梅洛立刻领会了汤姆的意思,“吧唧,吧唧。”他模仿着那声音,还擦了擦嘴唇:“哇噢,你不光可以吃鸡杂碎,现在还可以吃到人杂碎!”

他们就这样工作到一个个深夜。卡马克和罗梅洛把他们各自的角色发挥到了极致,一个在精益求精地改进引擎,另一个则不断地发掘引擎的能力,在工具中加入新的元素。卡马克那做工考究的吉他只有到了罗梅洛手里,才被谱出动人的音色。但他们之间的友谊和普通人之间的友谊不太一样,他们不讨论他们的生活,也不讨论他们的梦想。在一些夜晚,他们会坐在一起玩F-Zero赛车游戏,他们的友谊在很大程度上来说,是工作上的友谊,是他们对游戏的共同热爱,是他们为此不羁的追求。

他们对游戏的看法和别人都不一样。汤姆,仍然惦记着他可爱的《基恩》,对暴力内容惴惴不安,怕引起外界的不满,怕那太过血腥。而艾德里安喜欢血腥,他笔下的纳粹士兵们在被击毙后都是躺在一汪一汪的血水中,但他最喜欢的还是《鬼屋里的戴夫》,噢……那个哥特式的,让人毛骨悚然的世界。

而卡马克和罗梅洛在这一点上非常一致。只要有罗梅洛在热情十足地通过各种途径来展示引擎的能力,卡马克就很满足了,他不在乎游戏的题材是什么。他写出流畅、简洁、快速的引擎,罗梅洛心目中的游戏也正是流畅、简洁、快速。罗梅洛甚至已经开始试着玩还没什么内容的《德军总部3D》,只为了从一开始就贯彻这些原则。

一开始,他们让玩家可以在游戏里拖动并搜剥纳粹士兵的尸体,就像《德军总部》原作一样,但他们不喜欢最终的结果。当罗梅洛看到汤姆在屏幕上拖过一具尸体时,他叹息道:“呀……这样不会让游戏变得多吸引人,它减慢了游戏的速度,点子是不错,但当你在四处跑动,穿过厅堂,放倒每一个遇到的敌人时,会有人在乎能不能拖动那些尸体吗?我们最好把那些代码剔除掉,只要是减慢我们割草速度的东西——全去掉!”

凶残的感觉并不只关乎图像和设计,它还关乎音效。id已经和一个名叫博比·普林斯(Bobby Prince)的游戏音效师建立了良好的关系,他就住在麦迪逊附近,为天极工作。斯科特·米勒曾极力向id推荐他,他参与了一些《基恩》的音效制作。这次做《德军总部》,id比以前更需要他的帮助,譬如武器的声音要听起来有威力,为了达到这个效果,他们首次采用了数码音效,博比给了不少建议,譬如从影带里录制出机关枪的声音。

一天下午,罗梅洛准备到游戏里体验一下音效了,游戏已经基本成型,而且,卡马克在斯科特的建议下,把原本只支持16色EGA图像卡的引擎,改进为支持256色的VGA卡,颜色数的提升使艾德里安得以大展一番拳脚,他给士兵们戴上了钢盔,穿上了皮靴,当他们被击中时,会有一段精细的动画,先是从胸腔里喷涌出大股的鲜血,然后慢慢抽搐着倒下。

罗梅洛载入了测试关卡,当纳粹士兵们朝他围过来时,他沉静地盯着机关枪的枪管,然后,按下开火键,机枪咆哮着射出一串子弹,枪声从音箱里传出,纳粹士兵往后飞了出去。罗梅洛也双手离开键盘跳了起来,然后大笑着在地上打滚。这又是让他难忘的一刻,类似他第一眼看到戴夫行走在马里奥世界里的那一刻。

等罗梅洛终于笑够了的时候,他捂着肚子从地上站起来,喘着气说:“你们知道吗?还从来没有过这样的游戏。”

屏幕上,鲜血正从小纳粹士兵的身体里汩汩流出。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1992年2月的一个下午,罗伯塔·威廉姆斯和她的丈夫肯·威廉姆斯正坐在北卡城一间富丽堂皇的办公室里,他们的雪乐山娱乐已发展为一个庞大的游戏帝国,每年的销售收入从1980年的一个亿增长到了现在的十个亿,他们出版的游戏也从早期的图形角色扮演扩展到了各种类型,所有这些游戏都基于他们的企业文化:塑造出游戏设计师的品牌效应。这对夫妇就是游戏界的领导者。

现在,他们的面前放着一个邮包。

雪乐山一直都在接受游戏投稿,而今天的这个包裹让他们为之眼前一亮。里面的介绍信是一个名叫罗梅洛的程序员撰写的,他听说罗伯塔开始对少儿游戏感兴趣,于是寄来了这个他和他的伙伴们制作的游戏,它在共享软件市场里卖得很好,它叫《指挥官基恩:再见,银河》。

它给威廉姆斯夫妇留下了深刻的印象,他们接下来请这个罗梅洛和他的伙伴到雪乐山总部面谈一下。id的人们听到这个消息后受宠若惊——他们是玩着雪乐山的游戏长大的,而现在这对国王和王后在邀请他们去王宫面谈。而且,这时机也好得不能再好:《德军总部3D》已经初具雏形,如果雪乐山给他们开个好价钱,他们就可以拿下一笔大单子,于是他们决定做一个简短的演示给威廉姆斯夫妇看。

当他们到达雪乐山的办公楼时,不论什么人都可以一眼看出这帮家伙已经至少一个月没出过门了:罗梅洛的头发蓬乱不堪,汤姆的胡子也一样,卡马克的衣服上破了不少洞,而且他们是清一色破破烂烂的牛仔裤。在和威廉姆斯夫妇见面前,他们被引领着参观了雪乐山的办公室。对于罗梅洛和汤姆来说,这简直就是参观游戏名人堂。在一间烧录CD的房间里,他们遇到了沃伦·舒瓦德(Warren Schwader),罗梅洛和汤姆听到这个名字后,不由得面面相觑,然后充满敬意地弯下腰,深深地朝舒瓦德鞠了一躬,口里念道:“万岁,万岁。”舒瓦德——罗梅洛和汤姆知道,是苹果机游戏《极限》(Threshold)的设计者,他们非常喜欢这个游戏。罗梅洛兴奋地对舒瓦德说:“《极限》!你是我们的长辈啊!”

新鲜感一会就没了,卡马克在墙角和一个程序员搭上了话,罗梅洛、汤姆、艾德里安在旁边看着卡马克轻而易举地替那个家伙解决了几个问题,当他起身离开的时候,那个雪乐山的程序员还没回过神来,他已经彻底地被卡马克非凡的技艺所折服。走在路上时,罗梅洛轻轻拍了拍卡马克的背:“天哪,你把他们都震住了。”卡马克不好意思地耸了耸肩,罗梅洛为有这样的伙伴而感到骄傲。

威廉姆斯夫妇见惯了这样的年轻人,在他们眼里,这只不过是些非常聪明但又非常天真的孩子。当威廉姆斯夫妇带着他们来到一家名叫埃德娜的豪华饭店时,侍应生把威廉姆斯先生请到一旁,告诉他这些穿得跟流浪汉一样的人不能进来,威廉姆斯先生只能向他解释说这些都是非常重要的客人,然后他才得以把id的人们带到办公室里。

大家围坐在一张巨大的橡木桌边,壁炉里火光熊熊,菜很快就上来了,谈话也开始了。威廉姆斯夫妇曾发现和培养了许多年轻的天才,他们对此很是得意,但眼前的这几个人,看上去太没有经验了,而且很明显,缺少商业头脑。当他们得知id在共享软件市场上通过《基恩》赚到多少钱时,他们的脸色变了:“你是说,你们凭一个共享软件能每个月挣到五万美元?”

id给威廉姆斯夫妇看了那些数字:斯科特给id的版税提高到了45%,而且id基本上没有什么开支。他们向这两位游戏界的巨头解释道,通过共享软件模式,每收到一美元,天极公司就可以得到九十五美分,而且,罗梅洛自豪地告诉他们:“我们的作品是共享软件市场里最棒的东西,所以我们能赚到那么多的钱,如果你觉得那很惊人的话,看看这个……”汤姆取出一台便携式计算机放到桌上,请威廉姆斯先生过来敲下键盘,《德军总部3D》出现在了屏幕上,威廉姆斯先生面无表情地玩了一会,id的人们在旁边紧张地期待着,最后他说道:“啊,很漂亮。”然后退出了游戏,结束画面上是可爱的基恩和一个绿色的沃蒂冈怪物,中间一行很大的字样:“id软件:雪乐山家族的一份子?”

“你们介意把最后那个问号去掉吗?”威廉姆斯先生说道,然后他给id开出了250万美元的价钱。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

id的人们兴奋地回到他们冰天雪地的家里,讨论起这笔交易,250万是一个很大的数目,而且他们只有四五个人来分这笔巨款,但他们并没有急于答应,他们不想做这种股票交易,他们要一些现金。于是,就像最早和斯科特做生意时一样,罗梅洛建议道:“我们可以让他们先汇十万美元现金过来,如果他们答应,那我们就卖,如果他们没兴趣,就拉倒。”

这个请求被拒绝了,尽管威廉姆斯夫妇很是欣赏id,但他们对于一下子拿出那么多的现金毫无准备。在id看来,威廉姆斯夫妇显然没有领会id在做的事情,他们根本没有意识到《德军总部3D》的潜力,如果他们懂的话,他们应该毫不犹豫地把钱汇过来。id很失望,丢掉了这笔大生意固然是个原因,但更主要的,是因为他们觉得没有受到器重,尤其对方还是他们心目中的英雄人物。《德军总部3D》要改变这世界,id清楚地知道这一点,计算机上还从来没有过这样的游戏,去他妈的雪乐山和它的那些垃圾程序员吧,罗梅洛说道,id要继续保持独立,独立地去赢得更大胜利。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

尽管交易没有达成,雪乐山之行还是使他们更加自负,这自负也被带到了《龙与地下城》游戏里,那个可以反映出他们内在个性的世界。罗梅洛在最近几轮游戏里不停地摆弄着那本从神兽手中抢来的《魔界全书》,这是个不祥的征兆,那书既可以让他们得以统治这个世界,也可以让这个世界毁于一旦。卡马克对罗梅洛的鲁莽越来越担心,他不想看着这个倾注了他毕生心血的世界就这么被毁掉,不得已,他拨通了还在什里夫波特的杰伊,请他飞到麦迪逊来继续他的游戏角色,以阻止罗梅洛不顾后果的举动。但杰伊抽不开身。卡马克决定放手测试下罗梅洛的决心,看看他这个伙伴究竟要走多远。

一天深夜,城主卡马克告诉罗梅洛,游戏里的一个恶魔要跟他谈笔交易:用《魔戒全书》换取他要的任何东西。罗梅洛答复道:“如果我把书给他,那我一定要件非同寻常的宝贝。”卡马克向他保证那个恶魔可以拿出大刀(Daikanata)。罗梅洛的眼睛立刻亮了,大刀是游戏里最强大的武器,罗梅洛不顾其他人的反对,告诉卡马克,他愿意把书给那个恶魔。按照手册的规定,卡马克摇出骰子来决定恶魔接下来的举动——它用《魔界全书》召唤出了更多的恶魔。卡马克告诉他们,一场宏大的战役已无可避免,很快结果就出来了,“阳间已在魔鬼的蹂躏之下,”卡马克平静地说:“每个人都牺牲了,就是这样,结束了,嗯。”

死一般的寂静,没有人能接受这样的结果:这个游戏,这个在什里夫波特湖畔小屋里制造出无数欢声笑语的游戏,这个在麦迪逊陪伴他们度过一个个寒冷冬夜的游戏,就这么结束了?悲伤笼罩着房间的每一个角落。最终,罗梅洛开口对卡马克说道:“靠,那么好玩的游戏,就这么毁掉了?有什么办法能继续吗?”他其实知道这个问题的答案,卡马克是个实事求是的人,他的游戏也一样,他回答道:“没有,都结束了。”

这件事情的教训:罗梅洛走得太远了。

伴随着《龙与地下城》世界的终结,以及雪乐山的拒绝,再加上麦迪逊越来越冷的天气,id似乎陷入了前所未有的低潮。为了完成《德军总部3D》,他们需要帮助,他们清楚地知道这帮助将来自何方:凯文·克劳德(Kevin Cloud)。

凯文是《软盘》的编辑主任,在id离开什里夫波特后,他就是id和那里的联络人。凯文是个勤奋的、有组织能力和艺术家气质的人,他看上去是id最完美的补充。凯文于1966年出生于一个电工和一个教师的家庭,他在什里夫波特看着漫画书玩着街机长大,在攻读政治学学位期间,他在《软盘》找了一份工作,开始是从事美工,这份工作最终改变了他的人生。

《玩家之刃》成立之初,凯文就和他们成了朋友,在最后的离去风波里,凯文是他们为数不多的盟友之一。凯文操着慢吞吞的南方口音,喜欢穿成牛仔的样子,总是彬彬有礼,但有时也很有趣。像罗梅洛和汤姆一样,他也喜欢那些恶心的玩笑,但和他们不一样,凯文可以很快约束着自己进入专注状态。在id离开《软盘》后,凯文展现了他处理事务的老练——他巧妙地和《软盘》周旋,让id拥有最大限度的自由。

id给凯文打了电话,请他来加入这个队伍,只有一个条件,就是他必须搬到麦迪逊来。凯文没有一丝犹豫,他在《软盘》已经呆够了,而且他刚新婚不久,正想开始一段新的人生。于是他收拾起细软,和妻子一起驱车十九个小时,于天亮时分赶到了麦迪逊。

凯文敲响了id的门,几分钟后,卡马克穿着睡衣,顶着乱糟糟的头发出现在了门后,他睡眼惺忪地朝外面瞟了一眼,嘟囔道:“晚点再来。”然后他立刻关了门回到床上继续睡觉,留下凯文夫妇伫立在寒风中。

凯文只好对妻子说:“噢,我们去喝点咖啡吧。”晚些时候他们回到了id的办公室,并谈妥了加入id的具体事宜。凯文随即兴高采烈地告诉他们,他已经找到了一处不错的公寓,第二天上午就可以签租房协议。受凯文的启发,id的人们也觉得是时候换个地方了,于是罗梅洛和汤姆接下来的一天都在外面寻找新房子,晚上他们回到办公室向卡马克和艾德里安汇报说他们找到了一处很漂亮的小区,但是,罗梅洛的比特状态显然又跳到了关,他说道:“我们是可以搬到城的另一头,但是,我跟你们说,我他妈的受够了这冰天雪地的鸟地方,我讨厌这里!”

“我也是!”艾德里安立刻附和道。

罗梅洛继续说道:“我真的,真的,不想再呆在这了,我以前不知道威斯康星是这么糟糕,去加利福尼亚怎么样?那青山绿水的地方!在那里,一个人可以整年都呆在室外也不会怎么样,不像这里,呆在外面可以被活活冻死,我决定了,比起炎热和寒冷,我选择炎热,我宁可大汗淋漓,也不要像这样穿得鼓鼓囊囊,滑来滑去,手指都僵得动不了!我们是做游戏的,我们可以去任何地方!”他知道,无论他去哪里,他的女朋友贝丝都会很开心地一同前往。

午夜时分,他们围聚在地图边讨论着下一站的方向,“牙买加!”汤姆建议道,而艾德里安则建议:“达拉斯怎么样?”——达拉斯?——达拉斯!

去达拉斯的理由太多了:那里是南方,那里有温暖的气候,天极公司也在那里,斯科特·米勒已经催促了无数次让他们过去。斯科特告诉他们,那里有一个巨大的湖,就像什里夫波特一样,他们可以找一所房子,继续在湖面上飞驰。更棒的是,汤姆补充道,德克萨斯州没有州一级的所得税,他们可以赚到更多的钱。就是达拉斯了!

只有一个麻烦:凯文。天亮以后他就要去签订租房协议,那样id就得继续在这个鬼地方多呆至少六个月。一定要赶快告诉凯文,现在是凌晨三点,id的人们手忙脚乱地给凯文住的旅馆留了一条消息,凯文几个小时后醒来,收到了这条消息:“不要去签协议!马上给我们打电话!我们是风!我们是风!”

“噢,上帝,”凯文对妻子说:“那帮家伙肯定是发现预算不够,决定不雇我了。”等他拨通电话,他才放下心来,尽管刚开了十九个小时的车赶到这里,他还是答应和id一起继续前往达拉斯,那儿离他的家乡更近。“我们是风!我们是风!”电话那头还在重复着,这个词似乎蕴涵了他们所有的特质:他们的自发性、他们的速度、他们的无从琢磨。

几个星期后,一辆搬家大货车停到了id办公室的门口,他们站在车后看着司机打开货柜,就在门缓缓移开的时候,他们难以置信地瞪大了双眼,下巴都快掉到了地上:像是幻觉,像是天意,车箱里孤零零的放着一台——《吃豆子》!这是伴随着他们长大的街机,这是罗梅洛在萨克拉曼多城里四处留下最高分的游戏,这是他们在什里夫波特仿造着它做出PC卷轴版的那个游戏!罗梅洛咽了咽口水,向司机问道:“那是你的机器吗?”

“我想它现在是我的了,”司机回答道:“有人把它留在了我的卡车上,他不想把它搬进家门。”

id的人们互相看了看,不约而同地点了点头。罗梅洛开口对司机说:“嘿,伙计,可以把它卖给我们吗?”

司机看了看这些留着长发,穿着破牛仔的年轻人,他们看上去连理个发的钱都拿不出来,更别说是买这么棒的街机,他傲慢地回答罗梅洛:“当然!一百五十块。”

卡马克把手伸进口袋,“没问题,”他告诉司机,然后从一大把支票里翻出几张纸币:“把它留在车上。”

游戏就要在德克萨斯上演了。

第七章:命运之矛

在德克萨斯州,电子游戏一直不被认为是什么好东西。它是洪水猛兽,它把孩子们带坏,让他们把吃早饭的钱都换成币投进去。麦斯奎特城(Mesquite)是位于达拉斯东南方的一个小镇,那里保守的居民们把这些焦虑的想法诉之法庭,希望能够封杀电子游戏,官司一直打到了最高法院,原告最终被驳回——这是发生在1982年的事情,那时所谓的电子游戏只是诸如《吃豆子》那样的街机。

1992年愚人节,id带着一台《吃豆子》来到了麦斯奎特,成为当地的第一家游戏公司。

卡马克和罗梅洛无比开心,他们又回到了阳光明媚的南方。达拉斯的所有东西都是大号的,高速公路很宽,卡车很长,卖车的车行也无比宽敞,甚至连那的人也都是大号的,从魁梧挺拔的牛仔,到曲线分明的金发美女。id选择麦斯奎特是为了离斯科特·米勒近一点,他的天极总部就在加兰市,离这里只有几分钟车程,而且麦斯奎特——他们发现,也的确是一个非常适宜居住的地方。站在635号州际公路旁拉普拉达(La Prada)公寓的顶层,透过巨大的茶色玻璃,可以看到楼下的花园和碧蓝的游泳池,当id住进去的时候,悠闲的比基尼女郎们正徜徉在池里,水球越过球网,激起串串水花,浓辣的香味从附近的烤肉架上一阵阵飘来。他们到家了。

听到这些天才程序员们要和他成为邻居,斯科特欣喜若狂。他和搭档乔治·布拉萨德(George Broussard)立刻赶到拉普拉达,把id的人们带到一家墨西哥餐馆大吃了一顿异国风味的玉米煎饼和烤玉米片,然后又带他们去了一家巨大的游乐场:“极速地带”,他们在里面开着卡丁车互相追逐。id随后感慨于斯科特和乔治开来的真正的跑车,天极显然从《基恩》的成功里获利甚丰。罗梅洛对卡马克说道:“嘿,伙计,他们的车比我们的好太多了,接下来的日子里该我们表演表演了!”

成功就在眼前,无从躲闪。斯科特除了向他们保证十万美元的进账外,还把提成加到了50%——在这行里还从来没有过这么高的版税,斯科特只要这群年轻人开心,他甚至答应由天极来为《软盘》制作一个游戏,以履行id和《软盘》的合同,因为id讨厌为此分神,这样id就可以专注于《德军总部3D》的开发。《软盘》收到了《水下探险》(Scuba Venture),但却不知道这其实是天极做的,而不是id。

关于《德军总部3D》,斯科特心里还有更大的野心。一开始他只是想沿用通常的方式,发布一章试玩版,内含十个关卡,然后让玩家们来购买其余两章。但他随后从罗梅洛及汤姆那里了解到,原来他们只需要一天时间就可以做出一个关卡,沓沓!斯科特听到了钞票的声音。为什么只做三章呢?我们可以做六章,斯科特建议道:“如果你们可以多做三十关——只需要你们十五天,我们可以给前三章定价为三十五美元,六章一起买是五十美元,如果玩家先买了头三章,那么他只需要再花二十美元就可以得到其余三章,他怎么买都是划算的!”id考虑了一下,而后同意了斯科特的建议。

并不是所有事情都一帆风顺,当马克·瑞恩在某件事上和他们观点不一致时,id忽然炒掉了他们的这个经理人,用罗梅洛的话说就是:“太他妈的突然了,嘭!他就消失了。”id失去了他们正式的,也是惟一的商务人员。当然,尽管卡马克和罗梅洛是程序员,他们也不是没做过生意的人,他们还是孩子的时候就开始自己打理各种事务。卡马克在制作《鬼魂》期间,和朋友们创建过一个小组,后来还在很长一段时间里作为自由程序员向游戏杂志投稿;罗梅洛则一直都是个独行侠,自力更生地完成了十几个苹果机游戏,还把它们都卖给了出版商。但就像所有艺术家和程序员一样,他们不喜欢为生意上的事情烦心,他们更乐于专注于自己的领域。而且,他们越投入进游戏制作,他们就越厌烦那些堆积如山的例行公事:付账单、买杂货、守电话……公司需要有个新的负责人,这个人在生意上要能像他们做游戏时那样不拘一格、果敢自信。如果只是想随便找一个人的话,则事情再简单不过,那些乳臭未干的所谓职业经理人们从四面八方给id打来过电话,但id不想要这些人,他们心目中已经有了合适的人选——他们的老朋友,杰伊·威尔伯。

他们在电话里告诉杰伊,条件是这样的:作为id的CEO(首席执行官),他将得到公司5%的股份,并且在商业事务上有不受任何干扰的决定权,只要他说“行”,然后开着车到麦斯奎特来就可以了。杰伊正好厌倦了《软盘》的工作,而且觉得已经尽到了对老艾的义务。他告诉id的人们,快把烧烤用的东西准备好,他上路了。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“让你跑!杂种们!”罗梅洛叫道:“去死吧!哒哒,哒哒哒……”纳粹党卫军们无处不在:走廊里、大厅里、希特勒的肖像前、木桶的背后,罗梅洛现在就在那个世界里,他拿着机关枪席卷过一个个房间,纳粹士兵们如草芥般在他面前倒下,罗梅洛踏过他们血肉模糊的尸身,继续前进。

这是午夜时分的拉普拉达公寓顶层,罗梅洛在楼上阁楼里,他右边是艾德里安,背后是汤姆,左边是乱糟糟的网线和转接器,任天堂主机里插着双人对打游戏《街霸II》(Street Fighter II)的卡,这是id近来最喜欢的游戏。卡马克在楼下,坐在一大堆空的可乐瓶上面,周围到处是比萨盒,他面前是他心爱的NeXT计算机,右边是凯文,后面是杰伊。他们到这里没几天,但是很显然,他们已经安顿下来了。

罗梅洛越来越热心于《德军总部3D》的开发,这很容易感觉得到,你只要留意他叫喊起来的音量就可以了。大家都发现,这个游戏对罗梅洛来说已不只是工作的一部分,而是生活的一部分,他花在游戏测试上的时间越来越多,而当他不在测试的时候,他就在通过BBS寻找各地的玩家帮他测试。

“嘿!你们知道应该在这里加点什么吗?”罗梅洛暂停下游戏,向大家喊道:“嘘嘘!我们应该加上这个功能,这样在你放倒那些纳粹以后,就可以停下来,在他们身上撒泡尿!嚯嚯嚯!有意思!”

艾德里安和汤姆被罗梅洛逗得直笑,汤姆把手伸到桌子下面,揉起一团纸朝罗梅洛砸了过去,罗梅洛也有他的弹药库,他立刻回敬了汤姆三四个纸团,其中一个打偏了,到了阁楼另一头凯文那里,凯文毫不示弱地加入了战斗。卡马克,则尽力专注于他的工作。自从到了麦斯奎特,纸团大战、朝纳粹的叫喊、罗梅洛的各种异想天开,已经成了生活的一部分,但卡马克从不参与这些狂欢,也没有人指望他会参与。到目前为止,卡马克的专注力还足以应付这些干扰,当它们不存在,由此他才可以集中精力去优化引擎,让它更快,更稳定。

纸团大战对卡马克不算什么,让他烦恼的是可缩进的墙体。这些可以缩进的墙其实就是游戏里的密门,这墙可以朝里面缩进,然后横向滑动开来,展现出一个放着不少好东西的秘密房间。汤姆已经就这个功能缠了卡马克无数次了,向他游说道:“秘密,是任何一个精彩的游戏必不可少的组成部分,我们以前的游戏都一直有各种秘密给玩家以意外,譬如《基恩》里的沃蒂冈语言,还有当玩家长时间不移动基恩时,这个可爱的小家伙还会伸伸懒腰,打个哈欠,《德军总部3D》不能没有这样的功能,最自然的做法,就是把秘密房间隐藏到可活动的墙后。”

但卡马克不为所动,用他的话说,这是“一个丑陋的调整”,他不想为了这种额外的功能而把代码变得脏乱。对他而言,编写游戏,越来越成为一件关乎优雅的事情:如何用最整洁的方式来实现期望的效果。《德军总部3D》的引擎从设计之初就没有考虑过可以有缩进秘密房间的墙体,那里面只应该有可以滑动打开和关上的门,这门只是沿墙体的平面移动,它不需要缩进。功能越简洁,引擎就跑得越快,从而就更逼真,因此,卡马克的答复是:“不行,不会有可以缩进去的墙。”

汤姆也没有放弃,一有机会他就要提起这个事。很快罗梅洛也加入了汤姆一方,他向卡马克解释:“我们知道这个新引擎的编程工作已经让你不堪重负了,但能不能再加上这个功能?就一个功能。让墙可以缩进去吧,我们会很开心的,我们会把它放得到处都是。”卡马克还是拒绝了他们。这是id第一次在游戏设计上发生显著的分歧。

每天工作间歇,他们会到楼下游泳池里一起打球。一次卡马克也在的时候,罗梅洛再次向他恳求:“哥们,我们要墙能动起来!你不能只是跑过那些房间,杀光所有纳粹就完了,怎么也得有些隐秘的东西吧!你所做的事情都很棒,只要再加上这一个功能,我和汤姆就会高兴得不得了!这完全是出于设计的考虑。”

“忘了那墙吧!”卡马克厉声道。

压力越来越大,id的人们开始了每周七天,每天十六小时的奋战。凯文和杰伊帮上了不少忙。凯文协助艾德里安制作了一些游戏里的角色,还在包装和市场设计方面出了些力。作为公司的CEO,杰伊主要的工作并不是制定公司的战略规划或者是商务推广,他忙于其他事务,譬如打印纸还有没有?厕纸呢?磁盘用完了没?比萨订了?账单付了?杰伊之所以能得到这份工作,很大程度上就是因为他是id惟一可以保持个人账目平衡的人。

但有些事情是凯文和杰伊帮不上忙的,譬如去制止罗梅洛和汤姆的胡闹,这两个精力过剩的家伙以前就一直是跳来跳去、唧唧喳喳地模仿《基恩》里那些角色的声音,但现在——对其他人而言非常不幸——他们有了音响。博比·普林斯不时地会来id的公寓里驻扎,然后把这个变成一个小型的录音棚,那些调音器和麦克风让这两个家伙爱不释手,他们觉都不睡,通宵在那里狂乱地喋喋不休,并录制下来。

一天晚上,他们忽然想到了id的留言电话,他们可以录制个欢迎信息放到里面:开场是一段欢快的钢琴,然后罗梅洛的声音从背后响起:“id软件是由字母I和数字5带给你的……”他这是从电视剧《芝麻街》(Sesame Street)的结尾里学来的,然后是汤姆捏着嗓子唱的高音:“五呀五呀,那是五个草莓派呀!”随即响起雷鸣般的掌声和欢呼。在另一幕里,他们用调音器制作出了魔鬼般低沉的音调:“id软件现在没空,”然后魔鬼打了个饱嗝:“因为他们正是我的盘中餐!”第三个,汤姆讲述道,他正在id软件的石屋里,忽然,魔鬼出现了:“你跟id有什么关系?!”汤姆告诉魔鬼,他只是在这里帮id录制留言电话,魔鬼怒吼道:“去死吧,你这个笨蛋!”然后是一阵轰鸣声,夹杂着枪声,以及,最后,汤姆的一声惨叫。

艾德里安受够了,在那个录制留言电话的晚上,他一言不发地起身离去。而卡马克继续留在了办公室,他暂时还能忍受。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

不光是id的人感觉到有压力。一天,斯科特接到造型公司打来的电话,自从id决定让他们发行《德军总部3D》的零售版本后,斯科特就和这家公司有了联系。当他们和id沟通有问题的时候,他们就来找斯科特帮忙,这次,一个经理向斯科特表示了他们的焦虑:“我们觉得游戏里最好不要有血腥或是二战相关的东西,我们真的为此感到担心,它们看上去太真实了,从来没有过这样的游戏,它肯定会让很多人无法接受。”斯科特也考虑过这个问题:《德军总部3D》本质上只是个迷宫类游戏,就像是配了枪的《吃豆子》,但外面的人可不一定这么看。

“我试着去劝劝他们吧。”斯科特答复说。

他随即拨通了id的电话:“嗨,造型公司的人觉得这个游戏要规矩一点。”他清楚地听到了电话那头愤怒的喧嚣。对,id是该在暴力这个问题上做点什么了。最后斯科特妥协道:“那么,放开手脚干吧!”——id要的就是这种支持。

艾德里安在游戏里加入了各式各样令人毛骨悚然的细节:链条上挂着的骨架、牢房里靠着栅栏的尸首、墙上随处可见的血肉。而汤姆原先让他制作的只是些锅碗瓢盆之类的日常用品,艾德里安喜欢这样的改变,他渐渐觉得游戏就是游戏,它不需要去复制现实,他一直渴望着能制作这种黑暗的主题,现在有了机会。他恣意地挥洒着鲜血。

汤姆和罗梅洛则通过其他方式把游戏变得更加震撼,譬如尖叫声。他们在办公室里呆到很晚,操着凶狠的德语录制下各种命令:“小心!”、“来人啊!”以及纳粹临死时的:“妈妈……”给希特勒配音时,他们向他的妻子永别道:“伊娃,再见!”为了让整个游戏的气氛统一,他们录制下纳粹欢颂曲《德国至上》(Horst Wessel Lied),作为游戏的开场背景音乐。

他们还制作了所谓的“死亡视角”。当一章结尾的老怪被干掉时,屏幕上会出现字样:“我们来再看一遍”,然后是刚才玩家和老怪鏖战的慢镜头重放,直到老怪寿终正寝的那一刻。这可以说是由id制作的死亡记录影片。他们随后决定在游戏开始时加入一个画面,声明:“这款大屠杀游戏由id软件自我分级为PC-13(不适合13岁以下儿童)。”尽管这其实是在嘲讽那些畏惧暴力题材的人,但它的确使《德军总部3D》成为了首个自我评级的电子游戏。

随着游戏临近完工,可缩进的墙成了惟一的问题。罗梅洛和汤姆觉得还是要最后去找卡马克一次,出乎他们意料的是,卡马克转着椅子告诉他们,这个功能已经加进去了。卡马克最终同意了,这个功能,就像他喜欢用的说法一样:是正确的事情(the Right Thing)。秘密地点能给游戏带来额外的乐趣,汤姆和罗梅洛在这点上是对的。卡马克的这个转变让他们很吃惊,也让他们久久难以忘怀。没错,卡马克是个固执的人,但如果你和他坚持争论某个问题,并且有你的道理的话,他也很乐意被你说服。

罗梅洛和汤姆兴高采烈地把秘密房间加入到各个关卡里,当玩家走到一面这样的墙前,如果他按下开门键,这墙就会缩陷进去,并缓缓移开,在这个秘密房间里,通常摆满了各种财宝和补给,譬如鸡腿和弹药。他们甚至制作了一个秘密关卡,里面的敌人都是《吃豆子》里的角色。

游戏里的秘密可以归结为心理学和哲学的考虑,当玩家做出一些打破常规的事情时,譬如去推动一面看上去坚实的墙,他就会得到回报——宝藏和补给。此外还有作弊码,许多游戏都有这种短小的命令,玩家输入以后就会获得额外的生命值和武器,但他也要为此付出代价,那就是失去赢取高分的机会。所有这些,正如人生,有因有果。

1992年5月6号凌晨4点,《德军总部3D》试玩版完成了,收尾工作都已结束,汤姆录入了故事大纲:“你是威廉姆·J·布拉泽科维奇,一名协约国的特工,绰号B.J(William J. 'B.J.' Blazkowicz),负责侦察敌情,必要时予以敌人致命一击……你这次的任务……渗透入纳粹最后的要塞……”在通常的游戏里,玩家可以在开始时选择游戏的难度,譬如“简单”、“中等”、“困难”,而在id的这个游戏里,玩家进入游戏后看到的是个提问:“你有多强硬?”,一共有四个选择,每一个都有对应的头像,从头破血流的B.J——“我是死亡的化身”,到戴着童帽含着奶嘴的B.J——“爸爸,我可以玩吗?”;本着同样的做法,在玩家退出游戏时,他也会面临一个满带嘲弄的问题:“勇士请按N,懦夫请按Y”,或者是:“要杀戮和荣耀,请按N;要工作和焦虑,请按Y。”

天极公司去年已经建立了他们自己的BBS:“软件创作”(Software Creations)。在《德军总部3D》的细节润色、错误调试都完成后,id现在可以把它通过这个BBS发布出去了。无数对《基恩》着迷的玩家们正急切地等待着这个新游戏。“谁知道呢?”汤姆说:“如果玩家们喜欢它,它也许能比基恩卖得还好。”《基恩》那时仍停留在共享软件排行榜的首位。

卡马克、艾德里安、罗梅洛、杰伊、凯文、斯科特围在一台计算机旁,这台机器通过调制解调器连接到了BBS,初夏的蟋蟀在窗外欢快地歌唱,《吃豆子》安静地在墙角闪烁,键盘按下,《德军总部3D》的文件作为比特流调制成了模拟信号,然后进入电话线,从麦斯奎特启程,离开达拉斯,穿过德克萨斯,奔向了新英格兰城。

大功告成,大家一致同意可以回去睡觉了——明天会怎样?等它到来吧。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“买比萨的钱来啦!”杰伊喊道,这是《德军总部3D》的第一笔版税,他们心里对此还没有底,《基恩》每个月是三万美元,他们觉得这次顶多是《基恩》的一倍,毕竟,《德军总部3D》仍是通过相对地下的共享渠道和BBS发行,没有广告,顶多有些只言片语在BBS上流传,但他们无疑期望着能有个好的收成,毕竟这个游戏还是有成本的:房租和每人每月七百五十美元的工资,总共两万五千美元。

支票上的数字是,十万。这还只是第一个月,再加上《基恩》带来的进账,id的年收入肯定会达到一百万美元。玩家被第一章深深吸引,他们欲罢不能,这违背了通常的商业逻辑——免费发布反而带来了更多的销量,斯科特的计划再次获得了成功。

《德军总部3D》很快成了一种地下文化现象,在主流媒体注意到它之前,BBS上的玩家们早已开始讨论起它那让人身临其境的游戏感受,那前所未有的图像技术和紧张刺激的玩法——这分别得自于卡马克和罗梅洛的个人天才。不光各大BBS的版面上充斥着讨论《德军总部3D》的帖子,一些新兴的在线服务提供商——Prodigy、CompuServe、美国在线(AOL)——的论坛也被它占据,因特网的新闻组里,关于它的邮件铺天盖地。

一个爱好者写道:“它能成为BBS和新闻组里最热门的东西丝毫不让我觉得奇怪,我爱这个游戏。譬如你以迅雷不及掩耳之势转过墙角,放倒三个士兵和一个党卫军,然后敏捷地转身,把朝你身后扑来的那个家伙也干掉。这样的感觉太棒了!还有开每一扇门时的那种紧张不安,因为你不知道门后面会是什么情况。”一个微软的员工在网上激动地说:“德军总部在微软太流行了,我无论走到哪里,都可以听到那些德语的叫喊声。”他还提到他是多么希望id能够把这个游戏移植到微软新的视窗(Windows)操作系统上。

夏天到了,主流媒体也发出了赞誉之声。一家共享软件杂志写道:“与其把它比做一款街机游戏,倒不如把它比做一部交互式的电影。”另一家则是:“它以一己之力向世人展现了共享软件的精彩。”甚至《计算机游戏世界》(Computer Gaming World)这样的老牌杂志都加入了呐喊:“首次在技术上能够……让玩家感觉到身临其境的危险……展示了虚拟交互式娱乐的美好未来。”虚拟现实,这个主流媒体爱用的时髦词汇,被和《德军总部3D》应用到了一起,叫做虚拟现实游戏。肯塔基州还有人把游戏图像通过虚拟现实眼镜展现给玩家,然后在集会上出租,一天就赚到五百美元。

而玩家们其实不需要所谓的虚拟现实眼镜来使他们融入这个世界,事实上,他们的融入感已经过于真实,许多人出现了眩晕症状,一些玩家甚至在游戏时发生了呕吐。天极公司接到大量这样的电话,这样的故事在网上也不胜枚举,并出现了各种解释,一些玩家认为是游戏的画面太过于逼真了,以至于使大脑觉得那的确是一个真实的世界,但它又和大脑经历过的现实生活完全不一样;另有一些玩家认为是图像的“抖动”导致了生理上的不适;还有人则觉得这是因为人们不适应没有加速度的移动,就像速度从零直接跳到六十。玩家们甚至交流起心得——如何才能一直玩下去而又不会难受?

《德军总部3D》的暴力内容也引发出了各种争论。有评论者写道:“这个游戏里最不缺的东西就是番茄酱,当你击中敌人时,他们身上就喷涌出大量的红色的液体,如果你对游戏里的暴力很敏感,那你可要想办法尽量避开这个游戏。”大部分的人并不是很在意游戏里的人血,他们无法接受的是狗也可以被玩家射死,其实,能让他们觉得兴奋刺激的正是血腥的屠杀。一本杂志写道:“这个游戏的确没有什么正面的社会影响,但我们就是对它着迷不已。”

有一些人对暴力内容无所谓,但却对id把纳粹作为游戏里的敌人非常不满。杰伊收到一封反诽谤联合会(Anti-Defamation League)的来信,信中,他们对id在游戏里使用纳粹的万十字记号表示抗议。更大的麻烦发生在德国。《德军总部3D》通过网络传播,CompuServe是一家跨国运营商,德国的玩家自然也可以下载到它,很快,德国政府就注意到了这个游戏,这个国家在二战后禁止纳粹标记出现在大众娱乐媒介中,于是,《德军总部3D》被勒令封杀。天极公司开始收到原封不动退回的包裹,斯科特只好改用不注明内容的普通包装把游戏发往德国。

CompuServe很快得知了德国政府的禁令,并听从了德国律师的建议,把《德军总部3D》从服务中取消。这个举动引起了社会各界的注意,尤其是律师们,因为这是首个发生在网络空间里的法律纠纷:如果一个游戏——或者任何其他物品,譬如图像、书籍、电影——在某国上传到网上,但却违反了另一国的法律,应该怎么办?有律师就《德军总部3D》的这个案例发表了一篇文章,文章认为,仅仅是因为“电子空间里的纳粹”就把一个游戏从网络上取缔,是“违反直觉的错误举动”,作者还指出,电子空间应该是作为一个“独立的国度”而存在的,文章的插图里,像毒蛇一样鼠的标线缠绕着迎风飘扬的旗帜,旗帜上是醒目的标语:“不要来践踏我们的BBS!”

《德军总部3D》还激发出了玩家们的创造力,他们对游戏进行修改,制作出所谓的“游戏模式”(Mods)。和很多人一样,卡马克和罗梅洛本身就是修改游戏的老手。很多游戏甚至直接提供编辑器给玩家,让他们可以建造自己的关卡,譬如早在1983年的《淘金者》(Lode Runner)。也是在1983年,三个玩家在原版《德军总部》的基础上制作了《蓝精灵总部》(Castle Smurfenstein)——里面的纳粹被换成了可爱的蓝精灵。

id的《德军总部3D》要复杂得多,更难于修改,玩家要能够精准地替换游戏的数据。但游戏发布后没多久,id就收到了一个修改后的版本,它看上去和原来的一模一样,除了游戏里的音乐被替换成儿童剧《巴尼》的主题曲《我爱你,你爱我》,里面的党卫军老怪也被换成了笑眯眯的紫色小恐龙巴尼。卡马克和罗梅洛再高兴不过了,而其他人则和他们不一样。很有商业头脑的凯文表示了他的担心,玩家这样修改游戏内容显然侵犯了他们的版权,斯科特同意凯文的观点,如果有人制作出新的版本并拿出来卖怎么办?这会影响到id自己的盈利。但是,卡马克和罗梅洛全力赞成开放的、自由的、充满乐趣的游戏修改,于是,这个问题被暂时放到了一边。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

尽管游戏大获成功,id却没有得意忘形,工作的气氛变得更加紧张。就在试玩版发布后,他们立即开始制作剩下的五章。压力是很明显的:成千上万的玩家们寄来了支票,id要马上给他们拿出相应的商品。id的人们接连忙了几个礼拜才找到个机会歇一下:堪萨斯城正在举办一届苹果节。对他们而言,这样的怀旧之旅是最好的放松,罗梅洛就是在苹果节上认识了杰伊,现在经过了那么多年的奋斗,他们可以回到那里去展示他们取得的成就。他们挤进汤姆的丰田车,车厢里放着崭新的价值七千美元的便携式计算机,里面装好了他们的《德军总部3D》,十三个小时后,他们到达了堪萨斯城。

聚会在一家社区学院举行,远道而来的客人们都住在学生宿舍里。在签到的时候,id注意到了一个特别的名字:希拉斯·华纳,他们互相看了看,异口同声道:“不会吧!”——希拉斯是《德军总部》的创作者,就id所了解的情况,他还不知道有人重新制作了他的这款游戏。id的人们带着便携式计算机,列队进入了演讲厅,紧张地等待着希拉斯的到来。

希拉斯在台上踱步时看起来就像是个大金刚。他块头太大了,体重三百二十磅,随手一捏就可以把鼠标捏碎,但他也是个随和有趣的人,他今天的话题是他的创业史,他的缪斯软件。他以调侃的口气讲述了它的成功,也讲述了它的衰败。演讲结束后,他被崇拜者们团团围住,id站在一旁,等着轮到他们。终于,罗梅洛压制着内心的激动开口道:“嗨,希拉斯,我们是id软件,我们重新制作了你的《德军总部》,并已经在销售,今天我们把它带来了,请你看一看,然后在游戏手册上签个名。”希拉斯看了一眼这几个衣着普通的年轻程序员和他们手上那台昂贵的计算机,然后扬了扬眉毛,不紧不慢地说道:“噢,好的,有人好像在电话里告诉过我这个事。”罗梅洛迫不及待地运行起了游戏,让他们释然的是,希拉斯赞扬了一番他们的作品,然后给他们签了名。

晚些时候,他们回到了宿舍楼,那是个让人难以忘怀的夜晚,所有人都聚集在大厅里谈论着游戏,这里面甚至有一些苹果界的名人,譬如比尔汉堡(Burger Bill),传说他编程时可以在抽屉里放一个汉堡,不时地捏一小块送到嘴里,就这样一坐数天。但当人们围聚在id的计算机旁试玩《德军总部3D》时,比尔汉堡显然不再只是惟一的焦点。

一个月后,id有了公司成立以来的第一次正式度假,在这次度假期间,他们体验到了做名人的滋味。

完成了所有的关卡后,id决定周末每人花五千美元到迪斯尼乐园庆祝一番。他们坐了一遍又一遍过山车,还观看了各种表演,晚上,他们下榻在主题公园旁的佛罗里达大酒店。围坐在巨大的温泉浴缸里时,他们觉得生活是如此美好,他们决定回去以后给他们自己加薪到每年四万五千美元——这在那时是一笔不小的数字。

《德军总部3D》,他们庆祝道,给他们带来了成功。

“刚才谁提到德军总部吗?”旁边池子里有人问道,然后他拍了拍他的朋友:“我们爱死那个游戏了!”

id的人们半信半疑地看着他们,但是,玩家是装不出来的,他们跳进了id的池子,滔滔不绝地谈论起那个游戏。这是个激动人心的时刻,尤其对于罗梅洛,这么多年来,一直是他在崇拜别人,而现在,他坐在这温泉浴缸里,在巨大的棕榈树下,周围是灯火斑斓的主题公园,美元在眼前飞舞,他自己还被作为传奇人物般对待——这一刻,罗梅洛陶醉了。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

随着游戏的成功,卡马克和罗梅洛的个性也愈发鲜明地形成对照:卡马克更痴迷地融入技术,而罗梅洛更痴迷地融入游戏。汤姆在《德军总部3D》的一份帮助手册里描绘了他们的不同,他把罗梅洛刻画为一个终极玩家,而卡马克则是一个技术大师,就像他所写的:手术师约翰和引擎师约翰。

汤姆写道:“约翰·罗梅洛,是目前这个世界上最棒的《德军总部3D》玩家,他以中等难度打穿第一章的记录是五分二十秒,当然,这个记录里并没有杀光所有敌人,而只是以最短路线最快速度跑到关底。我们管他叫手术师,因为他能如同外科手术般精确果断地扫除路上的障碍。他欢迎大家来挑战这个记录,他给大家的建议:‘用鼠标和键盘操作,在大部分时间里按住右Shift键和向上箭头,那样前进速度最快,不要停下来等着敌人出现——要冲锋,在他们还没看到你的时候就把他们干掉,懦弱的人绝不可能成为世界级的《德军总部3D》玩家’。”

接下来,汤姆描绘起卡马克的工作:“引擎师约翰。我们把程序里负责在屏幕上显示图像的那一部分叫做‘引擎’,《德军总部3D》的这个强大的材质贴图引擎就是由我们id的技术天才约翰·卡马克制作的。但他觉得这个引擎已经过时了,他接下来带给我们的将是一个全息成像的世界。”

这是真的,和以前一样,卡马克已经把过去的成就抛到了脑后,他接下来要做的是实现一个更为逼真的虚拟世界。1992年5月,就在《德军总部3D》发布后,尼尔·斯蒂芬森(Neal Stephenson)的小说《雪崩》(Snow Crash)出版了,在书里,尼尔描写了一个名叫“变体”(Metaverse)的虚拟电子空间。但卡马克灵感的来源并不是科幻小说,而是科学本身。科技在进步,他的技艺也在提高。

在为造型公司制作零售版本时,卡马克有了试验新技术的机会。这个游戏名叫《命运之矛》(Spears of Destiny),这本是传说中杀死耶稣的那柄神秘长矛,后来希特勒得到了它,并试图通过它获得超人的能力,游戏里,B.J必须要把它从希特勒手里夺走。在《德军总部3D》的巨大成功面前,造型公司原先关于暴力的担心没有了,id继续在它血腥的道路上昂首前进。

《命运之矛》用的是《德军总部3D》的引擎,在其他人忙于制作游戏内容的时候,卡马克得以空下来研究新的技术。一开始,他用现有的美工资源做了不计其数的小实验,譬如他做了一个类似他和罗梅洛常玩的F-Zero赛车游戏,错综复杂的蓝色线条布满了他的屏幕,随后他加入图片,他只用了一幅德军总部里的希特勒头像,他把这图一张接一张地铺满了整个路面,造出了一条希特勒公路。卡马克会迷失在屏幕上的世界里,迷失在抽象的几何空间中,他思索着速度的感觉、位置的变换、旋转、斜坡……

不久后,卡马克的实验成果成为了游戏《造影者》(Shadowcaster)的一部分。这是一家名叫Raven的小公司制作的游戏,id在威斯康星州的时候认识了他们,因为他们那时是麦迪逊除id以外惟一的一家游戏公司,它的创始人是两兄弟:布赖恩·拉费尔(Brian Raffel)和史蒂文·拉费尔(Steven Raffel)。Raven最早是给阿米卡(Amiga)家用机开发游戏的,罗梅洛非常欣赏他们的作品,于是邀请他们一起为天极公司开发游戏,Raven拒绝了罗梅洛,理由是他们对PC市场不感兴趣。但id和Raven还保持着联系,随着PC市场的红火,最近Raven和电子艺界签署了一份PC游戏的合同,id建议他们使用卡马克的引擎,并让id抽取一部分利润。双方都觉得这笔交易不错,于是就有了《造影者》,卡马克也忙了起来。

id的其他人则不像卡马克那么投入,除了罗梅洛以外的所有人似乎都被《德军总部3D》弄得精疲力尽。艾德里安厌倦了那些现实主义的纳粹图像,开始不时地和凯文出去散心——凯文最近一直在和他合作,他们变得更要好了。汤姆则对游戏的设计方向越来越失望,在一些场合,他会把罗梅洛拽到一边,问他什么时候开始制作《基恩》的最后一个三部曲,罗梅洛总是回答他:那还没有提上议事日程,改天再说;而背地里,罗梅洛则对汤姆的纠缠不休感到厌烦。汤姆对《命运之矛》也越来越敷衍了事,罗梅洛竭尽所能地想调动他的积极性,跟他描绘赚到钱以后就可以去买漂亮的本田新款Acura,实在行不通,他们就抛开工作,到《街霸II》里互相踢打一番。

就这样,汤姆一觉得没劲,他们就调出游戏,而汤姆动不动就觉得没劲,什么时候都不想干活,于是他们就一天天晚上坐在电视机前玩《街霸II》。楼下,卡马克努力集中精神制作《造影者》的引擎,他已经要触到什么了,那正确的事情,它就在那里,一些前所未有的东西在他的屏幕上渐渐成型。尽管几个月来他忍受了纸团大战,忍受了录制留言电话,忍受了那扭曲的怪叫,但现在,楼上的喧闹终于让他忍无可忍。卡马克关上机器,站起来拔了电线,每个人都停下了手头上的事,看着卡马克,“我想我还是回到我房间里独自工作比较好。”卡马克说完就搬起他黑色的NeXT走出门,他接下来几个星期都没再回来。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

《命运之矛》于1992年9月18号发布,它进一步巩固了id的名望。他们再次赢得了最佳娱乐产品奖,媒体和同行一如既往地对id的这个新游戏大加赞誉。在计算机游戏开发者大会(CGDC: Computer Game Developers Conference)上,斯科特参加了一个市场营销讨论会,电子艺界的官员在会上称赞了《德军总部3D》在没有任何广告和市场推广的情况下取得的令人难以置信的成功。按照那时的经验,下载共享软件的用户里最多只有百分之一到二的人会付款购买,更糟的是,任何一个用户都可以在购买到完全版以后把它拷贝给朋友们。尽管是这样,《德军总部3D》以及其他id游戏的订单仍滚滚不断,销量持续上升,id现在每个月的收入达到了十五万美元。

还有公司向id抛出了橄榄枝,一个他们完全没有意料到的公司,最不可能的公司:任天堂。id当初想为它制作PC版马里奥的时候被它拒绝过,而现在,它的口气变了,它给id开价十万美元,要id把《德军总部3D》移植到超任家用机(Super Nintendo)上。而且,因为任天堂是一个家用系统,所以他们必须做一个合家欢版本,也就是说,去掉所有的血污。并且,任天堂不喜欢看到狼狗被玩家射死,它建议道,是不是可以换种动物呢?譬如老鼠?这是巨头任天堂,id答应了。

更有意思的是,一个制作宗教主题游戏的公司:智慧树(Wisdom Tree),也给id打来了电话,他们的代表向杰伊询问是否可以获得《德军总部3D》引擎的授权,他们想做一个关于诺亚方舟的主视角游戏,为了让船上的动物们乖乖听话,玩家要四处放置水果和蔬菜。杰伊听完他们的计划后大笑了一番,因为智慧树的这个游戏要运行在超任家用机上,而且不经过任天堂的许可。任天堂,杰伊知道,从不做任何有关宗教的游戏,不管是撒旦还是诺亚。杰伊答应了智慧树。

在这个时候,还有比生意更值得关心的事情:卡马克的技术。他带着在《造影者》引擎里取得的成果回到了id的办公室,大家立刻注意到,这是个相当大的飞跃。引擎里一眼就能看出来的新特性有:亮度衰减,带材质贴图的地板和天花板。

亮度衰减的意思是,就像在现实世界中,当你打着手电筒行走时,越远的物体就越陷入黑暗。在《德军总部3D》里,所有的房间,所有的角落,都是亮堂堂的,没有色调的变换,而画家们都知道,光的效果是使图画栩栩如生的关键一环。有了亮度衰减后,卡马克的虚拟世界更加鲜活了。

卡马克还学会了如何把材质贴图应用于地板和天花板,此外,他还摸索出了如何实现不等高的墙体。新引擎的执行速度大约是《德军总部3D》的一半,但《造影者》是一个冒险游戏,它是基于探索的,而不是战斗,所以速度慢一些没有关系。

这个飞跃对卡马克而言绝不是一件轻松的事情,他花了大量的时间才想出如何在屏幕上正确地绘制地面。他的勤奋和自律给他带来了回报,他现在甚至能够绘制出倾斜的地面,玩家可以感觉到自己在上坡还是在下坡,这简直让人难以置信——凯文在游戏里的一座小山上来来回回跑了二十分钟。而且,很明显,id该用新的技术去制作一个新的游戏了。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

《德军总部3D》完成了,《命运之矛》也完成了,大家跃跃欲试地要开始新的主题,尤其是汤姆,前面这两个游戏已经让他心力憔悴,迷宫射击游戏不是他喜爱的题材,他惦记着《基恩》,他渴盼着能马上开始最后一个三部曲的制作。让他高兴的是,卡马克和他的想法一样,他甚至开始琢磨起那些可爱的唷扑在三维世界里舞动的样子。

另一个被拿出来讨论的想法是:异形。id所有人都是这部科幻片的影迷,他们觉得这个题材很适合做游戏,杰伊做了一些调研,发现版权不是问题,id可以下手。但他们很快就放弃了这个念头,因为他们不想被那些大制片厂束缚着手脚做事。卡马克的新技术太惊人了,他们不需要向其他人做任何妥协。大伙继续冥思苦想。

让汤姆失望的是,关于《基恩》的讨论没有持续多久。他们一致认为,新引擎的速度感和所能带来的刺激不适合制作一个儿童题材的游戏。汤姆望向罗梅洛——他的朋友和伙伴,但罗梅洛也明确表示不想再做《基恩》。这不奇怪,毕竟,《德军总部3D》就得自于罗梅洛的想法,他显然更喜欢这样的血腥,胜过喜欢《基恩》的童趣。而艾德里安,汤姆不用问也知道他会怎么说。甚至连一开始赞同汤姆观点的卡马克也改变了主意,讨论开始转移到和基恩彻底相反的话题上——魔鬼。

卡马克和魔鬼的交情源远流长:在童年时的教会学校里、在《龙与地下城》的世界里——罗梅洛就是召唤出了这些魔鬼,才毁灭了那世界。现在,该让这些魔鬼们在游戏的世界里登场了。id现在有让人惊叹的技术,那为什么不做一个关于魔鬼和技术的游戏呢?卡马克说道,譬如玩家用高科技武器击退来自地狱的魔鬼们?罗梅洛喜欢这个想法,还没有人做过这样的题材。凯文和艾德里安也同意这样做,他们不止是同意,他们甚至为能够进行病态扭曲的艺术尝试而窃喜不已,他们可以把恐怖电影《鬼玩人》(Evil Dead II)里的场景活生生地搬到游戏里了。他们达成共识:这将是一个综合了《鬼玩人》和《异形》的游戏,主题就是高科技和地狱、鲜血和恐惧……

游戏还缺一个名字,卡马克已经有了主意。在导演马丁·斯科塞斯(Martin Scorsese)1986年的《金钱本色》(The Color of Money)中,汤姆·克鲁斯扮演一个年轻的桌球赌球手,某个场景里,他怀抱一个黑色的盒子坐在球桌旁,里面放着他那名贵的球杆。正在打球的一个本地高手问他:“你那里面装的什么东西?”

克鲁斯笑了,因为他知道眼前这个人接下来将面临什么。就像,卡马克想道,那id曾带给《软盘》的,或者,id的下一个游戏将要带给世界的:

“这里面?”克鲁斯打开盒子,回答道:“末日(Doom)”

第八章:召唤群魔

“嗷————”一声来自地狱的惨叫,嘶哑、绝望,是谁在濒死的边缘挣扎?或是一个小异形刚刚降生?还是有人在做气管切割手术?而且是一个牙医主刀?都不是,这叫声来自id的办公室。

这幢名叫镇东塔(Town East Tower)的办公楼共有六层,四四方方,外墙是黑色的玻璃,它坐落在麦斯奎特郊区,旁边是LBJ高速公路,公路两旁是当地的各种商铺:BBB二手车行、谢普勒西部商店,以及麦斯奎特的娱乐中心:牛仔表演场。在这一片乡间风光中,镇东塔这个黑色立方体就像是来自外太空的不祥之物,其实它里面只是些普通的律师或卡车驾校,但它看上去和周围环境格格不入,就像id的人们一样。

在决定要给这个世界点颜色看看后,id就搬到了这个阴暗的地方,这样的环境比较贴近他们正在制作的主题,id把他们的办公室命名为666套房。那声惨叫就来自这其中的一个房间,那声音是他们日常生活的一部分,对他们而言,那只是普通的背景音乐,毕竟,他们在做一个关于魔鬼的游戏,有什么声音能比这惨叫听起来更到位呢?

事实上,在1992年秋天,id的所有事情都很到位。计算机杂志和共享软件杂志上充斥着《德军总部3D》和《命运之矛》的报道,id和天极被誉为推动共享软件模式的英雄。他们垄断了排行榜的前四名:两款《基恩》、《德军总部3D》以及天极自己的《毁灭公爵》(Duke Nukem),那是个卷轴射击游戏,主角是个阿诺德·施瓦辛内格(Arnold Schwarzenegger)式的硬汉。媒体把天极称做:“娱乐软件业里最非凡的,甚至是史无先例的成功典范……已经可以和行业巨头们叫板。”

似乎所有人都对这些牛皮信以为真,以为天极公司多么多么了不起,除了id。在他们看来,尽管斯科特是朋友,但他在工作上没有尽职尽责。这消息来自天极的员工:肖恩·格林,自从《基恩》发布后,他就和罗梅洛成了好朋友。肖恩在加兰市长大,他既是个狂热的玩家,也是个满怀抱负的程序员,在那个保守的地方,喜欢摇滚乐的他无疑是一个异类,他曾因拒绝剪去长发而被送到夜校去聆听教诲。在天极工作时,如果有人打电话进来对《德军总部3D》里可以射杀狼狗表示不满,他的答复就是:“那你觉得杀人是应该的喽?”除了这些伪善的牢骚,他告诉罗梅洛,还有一些不满则很严重:有玩家无法通过天极购买到id的游戏。

斯科特曾在计算机商店门口贴过这样的招聘广告:“你喜欢玩游戏吗?你可以整天接电话和打游戏吗?如果可以的话,来吧,我们的薪水是每小时六美元。”来的自然大都是些年轻的学生,这些小堂倌们整天就沉迷于打弹弓之类的游戏。更糟的是,天极办公室里连计算机网络都没有,所有订单都记录在小纸片上,然后用大头针订在一起。凯文亲自给天极打了个电话,发现情况的确如此——他订不到id的游戏。

不能再这样下去了。尽管斯科特是他们的朋友,而且,是斯科特带领着id开始创业,但他现在是个多余的人了,出版共享软件这种事情id现在自己就可以做,为什么还要分一半给他?Doom只会比《德军总部3D》更成功。杰伊、汤姆、艾德里安一致同意摆脱天极,罗梅洛就更不用说了,最早提出离开《软盘》的就是他,他一直在想着把生意做大。惟一的反对意见来自卡马克。

和罗梅洛相反,卡马克对于公司的发展非常保守,他们在这一点上的矛盾正渐渐凸现。卡马克,就像他一再说的那样,他只希望能专心写程序,只要有钱买比萨和可乐来充饥解渴就够了,他对经营一个大公司没有丝毫兴趣,他认为,生意做得越大,处理订单以及市场推广之类的杂事就越多,他们就越容易分心,越容易忘掉他们的立身之本:制作精彩的游戏。

杰伊向卡马克保证,离开天极只会给id带来好处:“我们将真正地独立起来,我们不再依靠任何人,我们要给自己创造机会,我们不能坐在这里等着幸运女神来敲门,我们要打开门,揪着她的领子把她拽进来!”而且,卡马克可以继续心无旁骛地钻研技术。拗不过杰伊,卡马克最终同意了:斯科特出局。

斯科特平静地接受了id的离去,他很久前就怀疑id要自立门户。他们之间的合作能维持这么久,斯科特已经很满足了,id的游戏帮天极成为了共享游戏市场的领头羊,斯科特和布拉萨德都开上了名贵的跑车。而且,现在已经有了其他人在为天极制作优秀的游戏,譬如马里兰州的天才程序员提姆·斯威尼(Tim Sweeney),他的公司Epic MegaGames为天极制作了好几款流行游戏。此外还有天极自己的《毁灭公爵》,它的销量甚至超过《德军总部3D》,成为了第一名,它的续集也即将发布。的确,id对天极很重要,但斯科特相信,少了id他一样可以过得很好。

在Doom启航之前,斯科特不是惟一要离开id的人——还有咪子。卡马克的这只猫一直是id的心病,在湖畔小屋的时候,她就从来不安分地呆在窝里,现在脾气还更加古怪,整天在办公室里四处蹦跶,闲游乱逛,当她把卡马克新买的皮沙发尿得惨不忍睹后,卡马克向id的人们宣布了这个消息:

“咪子给我带来的只有麻烦,我要把她送到动物收养所去。”

“什么?”罗梅洛难以置信。咪子一直是卡马克密友,他们甚至已经把咪子作为卡马克的另一半列进了公司员工目录——现在,她就这么走了?“你知道你在做什么吗?”罗梅洛向卡马克问道:“没有人会要她,那些人会弄死她的!你这么做她就玩完了!”

卡马克不以为然地耸了耸肩,回到房间继续工作。

这样的规则适用于一只猫,或是一个程序,甚至,一个人:当它成为问题的时候,由它去,或者,必要的话,把它剔除掉。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

从踏入镇东塔的第一刻起,汤姆就不喜欢这里,比起以前充满创作气氛的湖畔小屋和公寓房间,这里让人觉得孤离隔绝,id工作的时候从来都是汇聚一堂,而现在,每个人都有了独立的办公室,每个人——只除了汤姆自己。

乔迁新居的第一天,每个人都在挑选自己的房间,卡马克和罗梅洛的靠在一起,艾德里安和凯文这对好朋友越来越亲密,他们决定共用一个办公室,汤姆则看上了大房间的一个角落。“这个地方做办公室不错啊,”他说:“只要再弄两道屏风围一下就好了。”其他人对他这个选择没有什么异议,但屏风过了很久还没有装好,每次汤姆问杰伊,杰伊都告诉他屏风已经在路上了,无奈的汤姆只好在地上贴了两条胶带来圈起他的创作天地。

无形的屏障还不止是那两条胶带。罗梅洛渐渐离汤姆远去,用汤姆的话说就是,罗梅洛的那个比特自从来到这里后就变了。汤姆时常坐在角落里看着罗梅洛和艾德里安以及凯文谈笑着走过,这孤立的感觉让汤姆伤心,他觉得这在一定程度上是因为他和罗梅洛关于游戏创作的分歧。罗梅洛为了配合卡马克的引擎而选择了快节奏的杀戮游戏,离开了基恩里那角色鲜明的世界,从那时起,技术和设计之间就慢慢形成了一道鸿沟。汤姆仍是id的主设计师,但他现在设计的东西并不是他想要的,他仍报有希望,也许,Doom的世界会有所不同呢?事情一开始的确如汤姆所愿。

巨大的黑木办公桌上满是比萨盒,窗外是LBJ高速公路,大家围聚在桌旁热烈地讨论着卡马克的提议:那些从地狱深处来的魔鬼们。基本的主题没有异议:那将是一个类似《异形》那样充满科幻和惊悚的世界,当然,再加上《鬼玩人》的恶魔和恐怖。但作为主设计师,汤姆心意已决,这不能再像《德军总部3D》那样毫无情节,不能再是没有情感的屠戮,他曾在《基恩》里通过唷扑来重新定义了什么是死亡,现在他要让Doom在主题的表现上能够走得更远,要像电影一样。

“来个这样的故事如何:科学家们对宇宙尽头一个奇怪的星球展开研究,然后它忽然爆裂了开来,涌出各种异形,但随着事件的进展,你才发现原来这些是从地狱里来的魔鬼,当你越深入这个世界,你就越发现它们的恐怖。你发现了那个星球上的神秘洞口后进去参观了一下地狱,当你出来的时候,地狱里的魔鬼们也随之来到了这个现实世界,并彻底颠覆了它。”

尽管罗梅洛一开始比较赞同这个想法,但卡马克却说:“游戏的故事背景,就好比色情片里的情节,虽然要有,但根本不是关键。”汤姆听得直咬牙。此外,卡马克补充道,这次的引擎有很大提高,他不想再做一个由章节和关卡组成的游戏,“我们要制作一个浑然一体的世界”,玩家不再是跑到什么门口,然后进入全新的一关,玩家将感觉到他是在一个巨大的世界里来回穿梭。

汤姆讨厌卡马克这个提议,这违背了他们一贯的做法,玩家喜欢把一关清扫完毕后再进入下一关,而不是什么浑然一体的世界。他的目光投向罗梅洛,而罗梅洛再次站到了卡马克一边。

汤姆独自回到他的角落里,继续等待屏风。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

不光是罗梅洛意识到了卡马克的重要。一天下午,杰伊和凯文聚到一块抽烟时聊起了所谓的“要员人身保险”,公司已经为卡马克购买了一份。凯文建议公司给除卡马克以外的所有人都买一份,杰伊的答复是:“除卡马克以外的所有人都是无关紧要的。”得自于他在技术上的不断革新,卡马克已成为掌管id的首领,他,仍是那怀抱规则手册的地下城主。

卡马克在制作《造影者》过程中的各种技术尝试已渐渐成熟,尤其是亮度衰减的效果。

编程这门学问是基于有限的资源而展开的,人们只能在当前的硬件和软件基础上进行开发。1992年秋天,卡马克还在使用着VGA显卡,也就是说,屏幕上最多只能同时显示256种颜色,而他要使Doom的世界能够由近及远平滑地过渡到黑暗中。

解决的办法是巧妙地组合这256种颜色,也就是利用所谓的“调色板”。比如,可以在里面放入16种红色,从亮红到暗红。然后,卡马克根据玩家在房间里所处的位置,把不同的颜色应用到不同距离的墙壁上。如果玩家走进一个大厅或是露天空地,程序会做一次简要计算,把最暗的颜色应用到最远的地方,当玩家继续往前走时,程序还会动态地调整附近的亮度。就这样,Doom的世界不但变得更加逼真,还更加阴森。

此外,卡马克和罗梅洛一直以来还盼望着能摆脱“图素”的限制:id以前的游戏世界,《基恩》和《德军总部3D》,都是像拼瓷砖一样建造出来的,譬如把一块块画着砖头的图素拼接起来组成一面墙,或是用一面面墙拼出一个房间。他们俩,尤其是罗梅洛,希望能够有更灵活多变的形式来创造游戏世界,譬如可以有让人觉得巨大、怪异、狰狞的房间。在《德军总部3D》里,墙的每个拐角都是九十度,而在Doom里,它们要是任意角度。

面对这些挑战,卡马克显得胸有成竹;计算机的性能越来越强大,他的技术也一样。他开始尝试着绘制任意形状大小的多边形,并且给天花板和地板加上材质贴图。当罗梅洛越过卡马克的肩膀看向他的屏幕时,一如往常,罗梅洛再次惊呆了。卡马克向罗梅洛介绍了关于光影和多边形的进展,并谈起了他的打算,譬如把游戏制作得更容易让玩家们修改,以及对网络的支持,那样的话,玩家们就可以互相对抗。

罗梅洛立刻看到了这些技术的潜能,这种能力是卡马克自己所不具备的,他对此也毫不讳言。而且,罗梅洛自己也是个程序员,他可以用程序员的语言和卡马克交流,罗梅洛可以把心中的蓝图描绘给卡马克,然后由他的代码来实现。罗梅洛看到亮度衰减时脑海里的第一个念头是:我们可以用这项技术来做什么?他向卡马克问道:“这么说你也可以改变灯光的亮度,可以把它做成动态的吗?还是必须预先计算好?”

“嗯,我可以把它做成动态的。”卡马克回答道。

“酷!那我们就可以有灯管了!你想想,你走在这个鸟房间里面,忽然——嗞啦、嗞啦——灯全灭了!”

罗梅洛冲回他的房间,调出地图编辑器——他和汤姆用来建造Doom世界的程序,和以前的关卡编辑器一样,使用它就像在做建筑设计师,屏幕上显示的是类似大楼平面图一样的线条,通过鼠标的点击和拖动就可以生成墙壁。编辑器还可以切换成游戏中的视角,罗梅洛可以方便地进入他正建造的房间里查看效果。艾德里安和凯文则负责绘制材质图片,也就是墙纸,关卡编辑师用它们来装点房间,乃至,整个世界。

有了地图编辑器后,罗梅洛就迫不及待要用卡马克的技术来打造他心目中的Doom,他知道卡马克的技术有多么了不起,这不光因为他也是个程序员,从而钦佩卡马克的才能;更重要的,他是一个玩家,他长这么大还从来没有在PC上,或者任何其他平台上玩过这样的游戏。他在房间里加入灯管,他尽情地让墙壁爬升、落下,他所有的念头都是为了能最大限度地展示卡马克那引擎的能力。

卡马克再高兴不过了,能有这样的伙伴赏识他的成果,并不遗余力地用其谱写美妙的乐章,夫复何求?

罗梅洛同样也满腔喜悦:卡马克的技术将会给他带来更大的成功。

而汤姆的心里只有沮丧。自从那次会议以后,他就在独自完成他的任务,描绘出Doom里的角色、背景、动机、故事大纲:也就是软件业所谓的“设计文档”。他写道:科学家们在一个星球上的实验惹出了麻烦,玩家被指派去那个遥远的地方收拾残局,然后发现是那些研究人员不小心打开了地狱的入口,放出了大量凶残的魔鬼——很大程度上就像罗梅洛在《龙与地下城》里所做的那样。游戏开始的时候,玩家正在和其他士兵打牌,忽然灯光一阵摇晃,魔鬼冲了进来,撕碎了玩家最要好的朋友。汤姆希望能通过这种忽如其来的惨剧让玩家立刻感觉到恐怖。他给这个走上不归路的主角命名为巴迪(Buddy)——他自己在《龙与地下城》里的名字。

但id没有人在意汤姆的工作。卡马克在一次会议上不经意地说起他不再惦记着那个浑然一体的世界,游戏还是像惯例那样,由独立的关卡来组成。“但是这份我花了两个月时间才完成的设计文档全部是按照一个前后贯通的世界来写的呀!这难道不是你要的吗?”汤姆失望地喊道,卡马克的这个改变把他的文档全变成了废纸。

“你这份Doom圣经对我们完成这个游戏没有帮助,”卡马克告诉汤姆,id从来没有写过什么设计文档,为什么现在要开始写这玩意?Doom不需要背景故事,它是一个关于追逐和战斗的游戏,只要让玩家随时觉得紧张刺激就好,玩家不需要知道屏幕上正在发生的这一切都是为什么。卡马克建议汤姆不要再为那文档操心,而应该像罗梅洛一样来体验新的引擎,“我还在做各种技术尝试,但是,请先体验一下现有的东西,再去考虑我们究竟能用它来做什么。”他还建议汤姆去图书馆翻翻关于军事基地的书,找找灵感。

罗梅洛同意卡马克的建议,尽管他非常欣赏汤姆的文档,但一个由故事驱动的游戏显然不适合卡马克的引擎,在那个世界里没人会有空坐下来打牌,Doom和《德军总部3D》一样,也是个快节奏的杀戮游戏,只是,Doom要比《德军总部3D》更快,更血腥。

汤姆彻底放弃了在游戏里加入情节的念头,而另有一段情节即将在现实中发生。

类似卡马克对待程序那样的思想模式——创新、优化、挪开所有绊脚石——已在id短暂的历史里不断闪现:在游戏中,《基恩》因为《德军总部3D》而被摒弃,地板和天花板因为性能而被去除,在生活中,艾尔、斯科特、甚至咪子,一一成为了这种模式的牺牲品。没有人知道谁会成为下一个。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

罗梅洛冲进id的厨房,手里挥舞着比尔汉堡的画像,比尔就是传说中那个把汉堡放在抽屉里然后一连几天不挪窝的程序员。汤姆、凯文、艾德里安欢呼着跟在罗梅洛后面,罗梅洛把画像钉在椅子上,然后操起一把餐刀。复仇就要开始了。

id不久前和这个比尔签订了一份协议,由他把《德军总部3D》移植到超任主机上,发布日期一天天临近,但比尔却没有拿出任何东西,他最终承认他不应该接手这件事情,他遇到了麻烦:他是游戏公司Interplay的员工,在他的工作合同里明确写道,雇员所有成果的版权都归公司所有,从而,他移植的《德军总部3D》现在落到了Interplay名下。

id的人们被激怒了。“看到了吧,”罗梅洛说:“当你依赖其他人的时候,就会有这种鸟事发生。”汤姆拿出铅笔,勾画了一个丑恶的比尔——贪婪的嘴角边挂着汉堡的肉渣,罗梅洛抓过画纸说,现在我们要让他付出代价。厨房里,他们轮流用刀朝那幅画像扎去,他们笑着、叫喊着、互相催促着,这还不足以发泄他们的怒火,椅子也跟着遭殃,被他们跺得稀烂。几天后比尔来到id的办公室时,厨房里还是一片狼藉,比尔看到写着他名字的纸挂在一把刀刃上,于是小心翼翼地问道:“噢,这是什么?”id给他的答复是中止合同。超任的移植将由卡马克亲自完成。

这样的恶作剧在id如同家常便饭。羞辱他人在这里是一项充满创造力和艺术美感的挑战和竞赛。艾德里安曾在罗梅洛机器上装过个程序,当罗梅洛开机的时候,屏幕上就会出现他在进行某种非常规性行为的图片。《德军总部3D》获得成功后,汤姆曾上了一些杂志的封面,这自然成了罗梅洛和艾德里安的创作素材,他们最成功的作品用到了一根小香肠、两个肉圆以及一小罐生奶油。

id这个大家庭甚至有了一个保姆:业务助理唐娜·杰克逊(Donna Jackson)。唐娜有着甜腻的南方口音和一头蓬松的长发,喜欢穿着粉色的职业装,抹同样颜色的口红。她很快就成为了id的管家,譬如购买快餐和苏打水,她要确保所有人都没饿着,都身体无恙,都开开心心。她以前的嗜好是在什里夫波特的赌场里赌博,到了id以后,她很快就成为了游戏里的神枪手。她称呼id这些二十出头的小伙子“我的孩子们”,id的人们也亲切地称她为id妈妈,或是唐娜小姐。

但是这个妈妈只是id的雇员,她不会去训斥别人,甚至是当那些孩子们疯狂地在办公室里搞破坏时也没事。为了发泄而搞破坏已经在id变成了一项运动,房间里到处是砸得稀烂的键盘、显示器、磁盘。譬如罗梅洛会走到凯文面前和他开玩笑:“嘿,凯文,那个垃圾筒说你是个可怜的鸟人。”凯文则会面无表情地应道:“噢,是吗?”然后一个飞腿把垃圾筒踢到墙角。

艾德里安和凯文的房间简直成了一个黑暗艺术的梦工场。Doom就是艾德里安长久以来渴望的那种游戏,他可以在其中尽情地释放他的噩梦。他俩和id其他人一起创作出了那些丑恶的生物:小鬼(Imp)——双眼血红的棕色怪物,体态像猩猩,但肩膀上满是突起的钢刺;恶魔(Demon)——像公牛一样长着两只角的家伙,满口血腥,通体泛红,令人作呕;还有就是最悲惨的机械恶魔(Cyber Demon)——它的一只膀子已经被改装成了机枪,而另外一只膀子,则不知道什么原因没有完工,只有半截血肉模糊的断臂晃来晃去。

《德军总部3D》里纳粹的动画需要艾德里安一帧帧地描绘,以展现出他们的各种站姿和步伐,而现在,得益于技术的进步,他们在制作Doom里的怪物动画时有了新的手段,并且效果更为逼真。他们首先制作出怪物的粘土模型,从不同的角度对它们进行录制,然后再把录像带读取到计算机里,进行着色,再使用卡马克编写的一个叫做“简易采样调色箱”(Fuzzy Pumper Palette Shop)的程序来制作出连贯的动画。“最终的效果相当失真,”凯文说:“但,这正是Doom。”

艾德里安和凯文玩得不亦乐乎,他们甚至试着把自己扫描到游戏里。一天,凯文捋起袖子站到摄像机后,把手从镜头下方伸出去,以录制下各种武器开火时的样子,譬如塑料霰弹枪、玩具手枪,以及汤姆从他女朋友那里借来的一把电锯,这个真家伙看上去和《鬼玩人》里主角用的那一把毫无二致。这些图像在游戏里将会出现在屏幕正下方,玩家就好像是看着自己的手——其实是凯文的手——伸到了那个世界里。艾德里安还扫描了他的蛇皮长筒鞋,用那斑驳陆离的花纹来作为游戏中的墙纸,而当凯文某天拖着受伤的膝盖来上班时,他们也不忘把那血淋淋的伤口扫描下来。在Doom的世界里,怎么玩都不算出格。

新的一年到来了,Doom的世界也已初具雏形,id决定向外界透露这个消息。汤姆在新闻稿里写道:“德克萨斯,达拉斯,1993年元旦——新一轮PC游戏的革命即将到来。id软件的Doom将让你重新认识什么是计算机……在这个世界里,你将迎战来自另一个时空的敌人!你本是驻守在一个科学实验室的士兵,整天面对各种文档、报告,就在你对工作厌烦至极的时候,生活有了小小的改变:潮水般的怪物涌现在你面前,整个基地的人不是被杀死,就是被附身,你茫然四顾,只看到尸横遍野,你能做什么?你该做什么?你要做什么?没有选择,你必须杀出一条血路!捣毁它们的老巢!而当你最终找出真相的时候,你忽然感到眼前的世界并非你所在,你曾经认为简单的事情现在全不明白……”

汤姆还大肆描绘了一番新引擎的若干技术突破,甚至,提到了多人游戏——他们还压根没有实现这个功能:“游戏支持两名玩家通过串口直连或是拨号对战,而如果是在局域网上,则可以有四名玩家加入到一起……我们衷心期望Doom成为全世界生产率大幅下降的罪魁祸首。”

话已经放出去了,Doom在id心目中也越来越清晰。玩家将穿行于巨大的迷宫中,眼前是霰弹枪的枪管,房间迂回曲折,阴森恐怖,周围的墙大都是黑色、灰色、棕色,偶尔会有一两道门是华丽的蓝色。id还刻意地把墙角做成除垂直外的各种形状,譬如八边形。此外,游戏里还将有楼梯、升降机。卡马克的引擎现在还支持墙体里的窗口,玩家可以透过它看到旁边的房间,但却不知道怎么才能过去。荧光灯也加入到了游戏里。最后,潜伏在各个角落里的妖魔鬼怪们让整个世界充满生气和杀机。

春天来临的时候,id挑了几个关卡制作出一个演示版,这只是个很不成熟的版本,也就是软件业所谓的α版。它被分发给一些朋友和测试玩家,以及几家被选中的媒体。《计算机游戏世界》随后发表了一篇热情洋溢的评介:“我们不知道德克萨斯州那个小镇的地下水源出了什么问题,但它显然给这些小伙子们带来了不少怪异的幻觉,更糟的是,它还神奇般地给他们带来了令人难以置信的图像编程技术,使得这些幻觉栩栩如生地出现在我们屏幕上,他们的这个游戏名叫:Doom。”

尽管外界对id非常看好,但在id内部,两个约翰还是对汤姆的工作很不满意。汤姆听从了卡马克的建议,翻阅了大量军事建筑的资料,他是如此认真,以至于他制作的关卡看上去都和真的军事基地一样,他甚至固执地把那份被否决的设计文档里的场景带到Doom里,譬如几个士兵围坐在桌子边打牌;他笔下的房间像极了现实中的办公室:灰色的墙壁、红棕色的地毯、办公椅、文件柜等等。这对罗梅洛而言是无法接受的,尽管汤姆是为了让卡马克满意,但Doom决不能是这个样子。罗梅洛要给大家看看什么才是游戏设计,什么才是Doom,即便卡马克的引擎还需要为此做很大改进。

罗梅洛回到他的房间,打开一罐可乐,投入工作,他一连几个小时坐在那里点击、拖拽着鼠标。他在地图编辑器里画出一条条线段,并不时地切换到主视角查看效果。他知道他要做什么,他要打破惯例,抛开常规,让那些毫无特色的军事掩体见鬼去吧,他要的是巨大宽广的、扭曲的、怪异的、抽象的空间。几天之后,罗梅洛做出了他想要的效果,他把id的人们带到他的办公室,给他们展现了这个世界。

一开始映入眼帘的是个灰色的小房间,朝着右边前进,迎面是一堵墙,透过墙缝可以看到外面的院子,但是没有门可以出去,旁边只有一个厅堂,里面竖着两个巨大的灯管,厅堂的尽头似乎延伸到了室外,可以看到阴沉的天空和迷朦的远山,但走进后才发现,那条路只是通向另外一个房间,里面的墙比前面那堵更高,就在你还没适应那闪烁的灯光时,一群被恶魔附体的傀儡士兵朝你冲了过来,顿时枪声大作,你只看到那些腐烂的身躯闪现在黑暗中。

罗梅洛停下来,看向围在显示器旁的人们,答案清晰地写在他们的脸上——汤姆的那些老套关卡出局,罗梅洛胜出:这才是游戏设计,这才是Doom。

从那时起,汤姆的境况由槽糕变成了凄凉。似乎任何他做的东西,任何他想做的东西,都被扔到了一边。汤姆不由得回想起念完六年级时的情形,有人成为了摆弄技术的人,有人在争当三好学生,而你,不知道何去何从,只知道自己似乎走上了错误的道路。罗梅洛现在几乎是当汤姆不存在:不再一起开玩笑、不再一起砸东西、不再有唧唧咕咕的外星语言。其他人也一样,汤姆提的任何关于游戏的建议都只会遭来一片反对。很快,汤姆就开始厌恶起那个办公室,那个只会让他伤心难过的地方,于是他找了个女朋友,没事就呆在外面。

没过多久,卡马克就找到了罗梅洛,建议解雇汤姆。罗梅洛知道这个决定意味什么,尽管迄今为止还没有一个创始人离开公司,但他们早已考虑过这样的可能性。就在id成立之初,他们就坐在一起讨论过,所有人都诚心地同意:id的命运——而不是他们任何人的命运——才是最重要的。在《软盘》的经历使他们懂得,无谓的内耗会给公司带来多么致命的伤害,他们不希望id毁于这样的事情。

他们达成了两点协议:首先,解雇一个持股人需要公司其他持股人的一致同意,在那时,艾德里安、罗梅洛、汤姆、卡马克是公司最主要的持股人,凯文和杰伊也拥有少量股份;其次,一旦被解雇,这个人就失去他所有的股份,公司的未来和他不会有任何关系。他们不希望某人的离开给公司的成功造成损害,也就是说,汤姆不会从Doom里得到哪怕是一个角子,更不要说《基恩》和《德军总部3D》了,他的今后只能靠他自己。

罗梅洛希望能再给汤姆一次机会,他说服了卡马克。他心里还惦记着其他事情——他又结婚了!他和贝丝日渐情浓,彼此都把对方看做了自己不可或缺的伴侣,贝丝给了罗梅洛足够的空间去为事业奋斗,她还喜欢做饭,会享受生活,尽管她对游戏没什么兴趣,但她也不会妨碍罗梅洛去做他想做的事情。

1993年7月4日,罗梅洛和贝丝去阿鲁巴岛(Aruba)度过了他们的蜜月,当他回来后,他比以往任何时候更加充满干劲。尽管在加利福尼亚的儿子和他一直保持着联系,那些单身的日子对他而言还是很难熬,而且他和前妻凯俐的关系愈发客套,但现在,他有了新的家庭,新的开始,《德军总部3D》每个月给id带来十万美元左右的收入,Doom演示版也博得一致好评,一切都那么美好:一切——罗梅洛很快发现——除了汤姆。没人能继续忍受他,所有人都要求马上解雇汤姆,拗不过大家,罗梅洛最终同意了。

罗梅洛希望能亲口把这个消息告诉他的老朋友,于是他邀请汤姆到家里来共进晚餐,由贝丝亲自下厨。汤姆很开心,他已经很久没和罗梅洛好好相处了。餐桌上,他们就像回到了从前,大声地开着玩笑,谈论着游戏、电影。这样的气氛里,罗梅洛开不了口。

第二天,全体持股人举行了一个会议,汤姆走进去的时候,发现大家都围坐在桌子边,低头看着地毯。“汤姆,”卡马克终于开口道:“公司显然不能再这样下去了,我们要求你辞职。”

汤姆以为他听错了,他才想起,罗梅洛头天晚上跟他聊起,有件事情想告诉他,但是说不出口。

汤姆愣在原地,他麻木地揭起桌面上的一块贴纸,放在手心里搓弄。尽管有过那么多次暗示和提醒,但他没料到真的有这么一天,沮丧和羞辱啃食着他的内心,他觉得这可能不只是因为游戏上的分歧,他一直以来都觉得大家不喜欢他,他不是来自一个破碎的家庭,也不是个叛逆的少年,他是个在父母的溺爱下长大的孩子,他是个大学毕业生。他开始小声为自己辩解,他谈起他可以为Doom做的种种事情,但大家的答复只是沉默,不一会,他自己的声音也渐渐微弱了下去。大家请他离开会议室,他们要再讨论一下。

当会议室的门在汤姆身后关上时,他的心情忽然有了转变,一股力量在他身体里苏醒。那么多天以来,他都那么的沮丧、那么的凄凉、感觉那么的可有可无,他从未正视过导致这些的原因,更没有考虑过怎么才能摆脱这样的处境。他回想起刚毕业时那些衣冠革履的面试人员问他这是不是他想要的工作,他那时的回答是:不,这不是我要的,我想做的是游戏;现在,五年过去了,他的回答还是:不,这不是我想做的游戏。

他走回办公室,告诉大家:“不用再讨论了,就这样,我辞职。”

汤姆在id的游戏结束了,其他人的则刚刚开始。

第九章:最酷的游戏

法拉利经销商的店铺里,卡马克用赞赏的目光打量着一辆樱桃红色的328型跑车,他心里琢磨着这玩意究竟能跑多快。作为一个搞技术的人,速度,是卡马克评估事物的一项重要标准。在工作中,他致力于在计算机上以更快的速度渲染出图像,跑车对他来说也一样——当他看着328那诱人的曲线时,他心里惦记着的其实是它那强大的引擎。使店家大吃一惊的是,眼前这个穿着T恤和牛仔裤,嗓音纤细的年轻人签出一张七万美元的支票,然后开走了这辆车。

22岁的卡马克拥有了他的第一辆法拉利,但没开多久,他就觉得328的速度还是不够快,他本能地想去打开引擎盖做点什么,就像他曾经对那辆美洲豹做过的那样,但是,这次不同,这次不是一辆普通的车,这次是法拉利,没有人捣鼓过法拉利。作为名牌的汽车制造商,法拉利公司对那些敢于随便在法拉利身上动手动脚的人从来都是持一种嗤之以鼻的态度。卡马克可不管那么多,对他来说,这只不过是又一台可以用来钻研的机器罢了。

在罗梅洛的帮助下,卡马克很快就找到了一个机车老手:鲍勃·诺伍德(Bob Norwood)——他13岁时就开始在堪萨斯州从事赛车运动以及赛车改装,他还在吉尼斯世界记录大全(The Guinness Book of World Records)里保持着一百多项记录,这些记录大都是基于各种古怪的车型,但也有法拉利。当罗梅洛在一本汽车杂志上看到诺伍德正在达拉斯经营一家车行的时候,他建议卡马克打个电话过去问问。

卡马克,就像他一贯的那样,对此半信半疑。因为当他跟附近其他玩车人谈起这辆法拉利时,那些家伙总是耸耸肩:“法拉利?噢,我们可以给它换一套排气装置。”卡马克知道,更换排气装置这种小打小闹对于他要解决的问题来说,只是隔靴搔痒,但他决定再试一次。当他把车开进诺伍德车行时,那个看上去脾气直率的老板满手机油地迎了上来。卡马克这次很谨慎:“我这有辆法拉利328,我想让它能跑得再快一点点,嗯。”诺伍德瞟了一眼卡马克的车,言语中仿佛这件事是手到擒来一般:“在它引擎上加个增压涡轮吧。”就这样,卡马克又交到了一个新朋友。

这改装花了卡马克一万五千美元,现在,当他把油门踩到底时,那套增压涡轮就会开始发挥作用,它的威力是如此强劲,以至于卡马克立刻对诺伍德这个经验丰富的赛车老手有了相见恨晚的感觉。改装完毕的那天,作为庆祝,卡马克计划开着这辆法拉利328去密苏里州参加他弟弟的毕业典礼,他此行还另有意味——尽管《基恩》系列和《德军总部3D》的成功已经使他和母亲之间的隔阂渐渐淡化,但要能开一辆这么漂亮的跑车回去见她,就可以冰释前嫌了。

卡马克来到诺伍德车行,他把行李袋扔进后备箱,踏上了回家的路。刚出达拉斯,高速公路就变得开阔起来,他踩着油门的脚开始慢慢地、一点一点地往下压,随着油门越来越低,他开始感觉到力量的积蓄,紧接着,就在触底的一刹那,车子以两倍的速度向前飚了出去,仪表盘快打到了140英里每小时。

人生最美好的事情莫过于是通过奋斗实现自己的梦想。就像现在的卡马克:他为自己工作,他彻夜不眠地写程序,他可以穿成自己喜欢的样子,那些漫长的、没有计算机、没有志同道合伙伴的艰苦岁月,都已如过往云烟般飘散在了身后……和大家想的不一样,卡马克其实也是个有喜怒哀乐的人,就在现在,当道路两旁向后飞驰的麦田和牛群变得模糊的时候,他觉得无比地开心,随后的路途中,他脸上一直挂着大大的笑容。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

法拉利的引擎只是卡马克试图使之变得更快的引擎之一,此外还有Doom。尽管Doom已经很快了,但以他的标准来看还是不够,这个游戏在速度上还面临着很大挑战,譬如那些带贴图的地面和天花板,以及那些高低不一的墙壁。在移植《德军总部3D》到超任的过程中,卡马克读到了一篇讲述二叉空间分割(BSP)算法的文章,贝尔实验室(Bell Labs)的一个程序员通过这种算法来更快地在屏幕上绘制出三维模型。用最简单的术语来说,这个算法就是把一个模型分割成大量的片断,每个片断的数据作为全局树状结构中的一个叶结点,然后程序就可以快速地筛选出需要绘制的多边形,避免无谓地重绘整个模型,从而提高了绘制的速度。当卡马克读到这里时,他忽然想到,如果用这个算法来绘制一个巨大的虚拟世界,而不是一个小模型的话,会是什么样?

没有人做过——甚至可能都没有人想到过——这种尝试,毕竟,没有多少人在试图建造虚拟世界。通过把Doom关卡的几何数据分割成一棵巨大的BSP树,计算机就不必在玩家每次改变视角或位置的时候重新绘制所有叶结点,而只需绘制玩家面对着的那些物体。当这个改动完成后,卡马克那已经很快的Doom,就可以起飞了。

为了使Doom进行下去,id还面临着一个迫切的问题:找人来填补汤姆留下的空缺。当然,作为朋友,汤姆是无可替代的,尤其是对于罗梅洛——再没人能像汤姆那样和他互相搞怪了,但在这残酷的离别面前,他俩只能就此疏远。不管怎样,汤姆也即将开始新的生活:同样是被id抛弃的斯科特给了汤姆一份在天极公司做游戏设计的工作,汤姆喜乐参半地接受了它,毕竟,他也许可以做他真正想做的游戏了。

id的人们开始翻看应聘简历,寻找汤姆的继任者,凯文留意到一个看上去很不错的家伙,也是一个玩家:桑迪·彼得森(Sandy Petersen)。比起id的人而言,37岁的桑迪就像是个老古董,但他在游戏领域有着令人敬佩的经验。他在20世纪80年代早期创作了一个名为《邪神召唤》(Call of Cthulhu)的纸上角色扮演游戏,里面有各种食人僵尸和毛腿异形,这个游戏曾风靡一时,总共卖出了十万多份。计算机游戏兴起后,桑迪进入了一家位于巴尔的摩的游戏公司:MicroProse,这家公司的创始人就是后来制作了历史策略类游戏《文明》的传奇人物:席德·梅尔(Sid Meier)。

但罗梅洛有一丝担心,在桑迪简历的最下方,他注明了他是一个摩门教徒。

“我说,哥们,”罗梅洛对凯文说:“我不想招募有宗教信仰的人,我们在做一个关于恶魔和地狱以及各种乌七八糟东西的游戏,这种人来了以后只会是跟我们作对。”

“不见得嘛,”凯文说:“我们先见见他,说不定他很酷呢。”

“随你,但我想我是不会录用他的。”罗梅洛叹气道。

几天以后,桑迪来了。他身材魁梧、秃头、戴着眼镜、穿着吊带裤,情绪很容易激动,尤其是在谈到游戏时,而他一激动,嗓门就变大。罗梅洛觉得这个家伙挺有意思,于是把他带到计算机前,让他试着做一个Doom关卡。没过几分钟,桑迪就在屏幕上画出一大堆乱糟糟的线条。

“嗯……”罗梅洛问桑迪:“你这是在做什么?”

“哦,我想要你走到这里,”桑迪指着屏幕急急忙忙地说:“然后你旁边那堵墙就会打开,怪物们涌出来,然后你只能顺着这条路往前,然后我再把你周围的灯都关掉,再然后……”

不错,罗梅洛非常满意。桑迪成为了id的游戏设计师,罗梅洛也得以腾出手来做各种各样他喜欢的事情,譬如编写程序,录制音效,建造关卡,打理生意。

桑迪有他的一份薪水,但他还需要更多的钱来养家。为此,他找到了id的行政主管杰伊,向他提出加薪的请求。巧的是,就在同一天晚些时候,卡马克走到桑迪面前跟他说:“你做的东西真的很棒,我喜欢你的作品,我觉得你对公司很有用。”然后就在第二天,卡马克又在门口拦住桑迪:“我昨天跟你说你做的东西很棒,那时我还不知道你向杰伊提出过加薪的要求,你不要觉得我称赞你的工作是想让你少要些钱,嗯。”说完卡马克就走开了,留下桑迪在那里丈二和尚摸不着头脑:“他难道觉得他夸奖了我几句,我就不要加薪了?天,这个家伙根本不知道别人在想什么。”

很快,桑迪的工作就赢得了罗梅洛的赏识,以他的速度、他的创意、还有他那包罗万象的游戏知识。譬如在用枪轰开怪物胸膛时玩家所得到的效果:“分好几步,先是开枪的声音,然后,那粗粗的枪管一下子竖起来,接着,怪物倒飞出去,或者是一声爆炸,等等。当玩家干得漂亮时,他就能通过这些效果感觉到快意。”

这些,以及从怪物身上奔涌而出的鲜血,正是罗梅洛心目中Doom的样子。笑声过后,罗梅洛决定试探着跟桑迪聊聊宗教信仰的问题。

“嗯……,你是个摩门教徒?”罗梅洛问道。

“那是。”

“哦?但你看起来不像啊,摩门教徒都会生一大堆小孩啊什么的。”罗梅洛坏笑着说。

正在敲打键盘的桑迪停了下来:“我的确有五个孩子。”

“噢,这个样子啊,”罗梅洛开始有点结巴:“也还好啦,你们有些教徒还生十几个呢,呃,怎么说呢,五个的确也不算少,但是,呃,至少你还不是那种随身带着教会卡的虔诚教徒嘛。”

“噢,我的卡在这。”桑迪把它从口袋里拿出来晃了晃。

“那……,那至少你没有穿那种教袍吧?”

“我的教袍在……”桑迪掀起外套:“这!”

“罢罢罢,我知道我该闭嘴了。”

“嘿嘿,其实你不用担心,我对游戏里那些血肉横飞的妖魔鬼怪啊什么的根本没意见,它们只是卡通而已啊,而且——”桑迪笑着说:“它们都是坏蛋嘛。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1993年,id还正在对Doom进行完善,斯伯堪(Spokane)一名传教士的两个儿子,雷德·斯科特(Rand Scott)和罗宾·斯科特(Robyn Scott),发布了《神秘岛》(Myst):一个以光盘(CD-ROM)为载体的探险解谜类游戏,它那老少皆宜的玩法和内容使它很快流行起来,并冲到销售排行榜的榜首,最终卖出了四百万份拷贝。它也使得还处在萌芽时期的光盘格式得以进入千家万户,这种相当于几百张软盘容量的存储介质随即成为了游戏开发者们眼中的首选,因为海量的存储空间可以带来更好的音效,另一个恐怖阴森的解谜类游戏《第七访客》(7th Guest)甚至利用光盘给玩家带来了动态视频,这个游戏也一度称雄榜首。

《神秘岛》通过直逼照片质量的画面,把玩家带到了一个神秘的荒岛上,在那里,玩家将经过各种奇怪的房间和机器,直到最终揭开阿特尤斯(Atrus)的秘密,那个人就是岛上所有这些谜题和机关的设计者。 和Doom类似,《神秘岛》也是以第一人称视角把世界展现给玩家,但在《神秘岛》里,玩家不能奔跑,甚至不能行走,而只能通过点击屏幕上的物品或区域来进入下一个位置,玩家的这种移动是通过屏幕上画面的淡入淡出来表现的。《连线》杂志(Wired)的编辑按捺不住激动地说:“它那经过精心设计和渲染的华丽画面,以及那些由迷宫和谜题组成的有趣世界,无疑将是探险类游戏的新标准。”

id的人们讨厌《神秘岛》,那里面没有任何他们喜欢的元素——没有实时的交互,没有快速的移动,没有恐惧,没有战斗。如果说《神秘岛》是莎士比亚(Shakespeare),那么Doom将会是斯蒂芬·金(Stephen King)。卡马克仍然在调整引擎,剩下的人们则把游戏中已做好的物品拿出来重新打磨。艾德里安和凯文那黑暗邪恶的艺术风格益发成熟,他们笔下的尸体被钉在尖桩上抽搐着(就像艾德里安多年前在医院里看到的那个农夫一样),或是被链子捆在墙上,血污四溅。怪物们的死亡动画也被精心制作得更为生动,有的先是踉跄几下,然后头盖骨从中间裂开,有的则是向前卧倒的同时把肠子弄的一地都是。

武器也各就各位:步枪、手枪、电锯、火箭筒,以及被亲切地命名为BFG的大家伙(Big f**king Gun)。在前作《德军总部3D》里,当玩家子弹用光时,他们还有缺省的小刀,但在Doom里,玩家要用肉拳杀出一条血路——他们让凯文到一块蓝色幕布前挥舞拳头,然后把录制下来的带子数字化,以便用到游戏里。这些致命的武器和怪物也要有致命的声音与之般配,他们再次请来了博比·普林斯。在罗梅洛的授意下,博比给Doom制作了一张金属风格的电子合成音轨,噢,那简直就是游戏中各种怪物呻吟声的大杂烩。

武器、怪物、血腥,都有了,桑迪和罗梅洛开始埋头于关卡的制作。

罗梅洛像是在Doom中找到了自我,他热爱这个游戏的方方面面,它的速度、它的紧张、它的恐惧,他要使所有这些元素在Doom中发挥到极致。他刻意地把关卡设计得很有节奏,作为关卡设计师,他不光要考虑地形、结构以及环境,他还要决定在哪里安插怪物,在哪里放置武器、奖品,这就像在做鬼屋设计师的同时还兼任导演。而罗梅洛就喜欢这行。在他的某个关卡里,当玩家进入其中一个房间时,他可以通过一扇窗户看到外面,但却不知道如何才能过去,于是他继续向前进,向前进……向前进……忽然!音乐适时响起,滑门打开,一个小鬼嚎叫着冲过来,小菜,放倒它,踌躇满志地继续行军,穿过一条污迹斑斑的走廊,打开另一道门,然后——嘭!怪物从门后潮水般涌出。罗梅洛对于这种把战斗分阶段进行的设计很有心得:先让玩家赢把小的,然后在玩家觉得不过如此的时候把他推到绝境中。

罗梅洛在这方面显得略为直白和残忍,而桑迪则比较精于算计。他在某个关卡里貌似随意地放置了一些绿色炸药筒,玩家想杀死怪物继续前进的话,只能是在某个精确的时刻朝其中一个炸药筒开枪,把它引爆。桑迪笔下的关卡从审美的角度来看大都比不上罗梅洛制作的,事实上,id一部分人认为桑迪的关卡只能用“丑陋”来形容,但是他们也不得不承认桑迪的关卡设计得很巧妙,玩起来很有意思,这正好和罗梅洛的关卡相得益彰。

1993年秋天,玩家们等不及了,他们嚷嚷着要Doom快点发布。尽管id付出了很大努力来防止用于宣传的演示版被泄露,但还是有一份拷贝出现在了因特网上。一些狂热的玩家开始通过电话和电子邮件不停地向id询问。而与此同时,主流媒体并不知道——也根本不在意——Doom即将来临。一个有线电视台播放了一些id员工打游戏和工作的镜头,但也就仅此而已。杰伊给一些大型报社和杂志社打过电话,但每次都徒劳无获。

不得已,就像他们在游戏里所做的那样,杰伊决定在商业模式上也做一些革新。他把精力转到了建立营销网络和市场开拓上。他先是申请了一个免税号来接受订单,然后他谈妥了一家提供商务服务的公司。这次他们将自己发行Doom,而不是像《德军总部3D》那样由天极来代理发行。所有那些中介环节会吃掉他们一半的收入:如果顾客在CompUSA购买一份游戏,那么,这家零售商要从中抽取利润,接下来是发行商,然后是出版商,最后才到游戏制作公司的手上。而如果直接采取共享软件的方式来发行,id就可以把他们全部绕开。Doom的售价大约是四十美元,而每卖出一美元,他们就可以收到八十五美分。杰伊同时还意识到,就像《德军总部3D》一样,玩家们之间的交流将会是Doom传播的主要途径。当任天堂等业界巨头花几百万美元大肆宣传的时候,id只需要在杂志上刊登一个小小的广告,真正要做的事情是通过共享软件的方式,把Doom送到尽可能多的人手上。

在那时,零售商还是以销售的形式来发行共享软件,因为软件的制作者要从中抽取版税。曾制作过若干成功共享软件的id,这次采取了新办法:免费把试玩版给零售商,不收取任何版税,全部的销售收入都归零售商所有。零售商卖得越多,潜在的用户也就越多。

“你们可以随意给试玩版定价,我们分文不取,”杰伊告诉零售商:“你只管卖,大把大把地卖,越多越好!”零售商们简直不敢相信自己的耳朵——还从来没有开发者不收取版税。但杰伊让他们放心:“就是这样,我免费把Doom给你们,所有利润归你们,我只要把这个东西分发出去,Doom将比《德军总部3D》还火爆,我要你把它尽可能多,尽可能广地散发出去,事实上,我希望你们能自己给它做广告,因为赚来的钱都是你们的,把那些交版税的钱用来做广告吧,把它当做你自己的东西来卖!”应者云起。

《德军总部3D》和Doom的声势也引出了一些从前的人物。艾尔问他们是否能以id的名义重新销售他们以前在《软盘》制作的游戏,他告诉id,那公司自从你们走了以后就一蹶不振了。但id婉拒了他。还有一个更特殊的人,罗梅洛的继父,约翰·斯库德曼。某次来达拉斯的时候,他找到罗梅洛,在一家牛排餐厅的桌边,斯库德曼对罗梅洛袒露心声:“你知道,我以前很粗暴,很固执。我曾经跟你说,如果你要成功的话,你必须去制作商用软件,但你看,我其实也不是那么的固执,我现在向你承认我错了,我觉得你现在做得很好,我希望你能知道我错了。”

罗梅洛接受了继父的道歉,毕竟,时光流逝,何必还为以前的事情耿耿于怀呢,Doom就快要完成了,更美好的事物还在前面。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1993年万圣节,罗梅洛独自站在一个昏暗的小房间里,手枪的枪管闪耀着寒光,四周墙壁上都是暗红色的污迹,令人不安的旋律在回响,一段嘈杂的和弦过后,迎来了短促如死的鼓点。正前方放着一把霰弹枪,罗梅洛上前拾起它,旋风般冲进一道闸门,低沉的声音从四面八方传来,像是什么东西的鼻息或打嗝,又像是不堪折磨的呻吟,忽然间,又大又红的火球向他袭来,爆炸在空气中掀起一波波热浪,他得动作快点才行!

罗梅洛闪躲的同时,用步枪击中了一个怪物的胸膛,怪物倒飞出去,一股鲜血溅出,但还是有一个火球击中了罗梅洛的侧面,他的眼前一片血红,然后他听到了自己困难的喘息声,又一个火球,罗梅洛试图闪开,但他几乎什么都看不见了,再次被击中,喘息变得愈发困难。阴影里又走出一个小妖,罗梅洛几乎已无力还击,但他忽然看到了前方两个绿色的炸药筒,小妖就快走到了它们旁边,千钧一发之际,罗梅洛击中炸药筒,小妖被炸得支离破碎,散落一地。

又一扇门开了——这次是罗梅洛办公室的门,卡马克走了进来,罗梅洛只抬头看了一眼,就继续专注于Doom的鏖战。卡马克走到罗梅洛身后,他对屏幕上的一切非常满意,罗梅洛的关卡在深度和高度上总是那么变化多端,让人不由得叹服于它的宏伟。是罗梅洛的关卡,使卡马克的引擎有了用武之地。

“怎么啦?”罗梅洛问道。

卡马克告诉他,引擎已基本定型,马上就可以着手制作Doom的联机部分了。是啊,连机,罗梅洛想道,我们一月份时就和别人说过的,Doom一定会有多人游戏部分,玩家们可以在里面互相对战。但后来一直太忙,都快忘了这码事了。卡马克和罗梅洛谈起技术上的一些挑战:“首先我要弄清楚如何正确地利用IPX协议来通信,还有通过串口,这也要花点时间……”

罗梅洛在卡马克说话时不住点头,但心里却想着Doom的联机对战将会是多么不可思议。那时已经有一些游戏可以在同一台计算机上对战,譬如《街霸II》,还有个刚出品的名叫《真人快打》(Mortal Kombat)的游戏,此外还有一些早期的多人游戏,譬如M.U.L.E,和一个基于《星际迷航》系列片的《网际迷航》(NetTrek),这些游戏通过调制解调器进行联机。但是,还没有一个像Doom这样的多人游戏——第一人称视角,快速的节奏,令人沉浸的效果,以及血腥。想到这里,罗梅洛的心跳加快了。

罗梅洛按着键盘在E1M7——第一章第七关——里穿行。他走到大厅的窗口旁,外面是一个浸在绿色血浆中的平台,他想像着两个玩家在这里手持火箭筒对射,火箭弹在屏幕上呼啸而过,噢,天哪,他想,没有人在游戏里见过这种场面。诚然,和怪物们厮杀也挺好玩,但那毕竟是由计算机控制的没有知觉的东西,现在,玩家将可以和另一个有意识的人类进行对抗,一个能思考,会运用策略,还会不时尖叫的对手。我们可以开始互相杀戮!

“如果,我们真的能做出来,”罗梅洛说道:“那么,这他妈的将会是这个叫做地球的行星上有史以来最牛B的游戏!”

这也是卡马克的心里话。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

接下来两个礼拜,卡马克在房间里放了两台联网的计算机,一台是他控制的玩家,另一台用来作为另一个玩家。一切就绪后,他通过键盘控制着他这个玩家向前移动,他心里假想着那些小数据包通过网线传输到对面那台计算机里,然后立即表现为一个屏幕上的太空战士。两台计算机就这样互相对话,而卡马克知道对话的结果。他扭过头去看另一台计算机屏幕,他看到了自己控制的玩家——在那台机器上是旁观视角——从屏幕上跑过。就这样,卡马克成功地创造了一个可以互相感知的虚拟世界。

罗梅洛走进来的时候险些跌个踉跄,“噢,天哪!”他叫道:“这太了不起了!”话没说完他就掉头往自己房间跑去。卡马克重新启动游戏,这次,罗梅洛用他的机器连了上来,罗梅洛瞪大双眼,看着太空战士卡马克从大厅里缓缓走出,他立即追上去朝卡马克开了一炮。嘭!卡马克飞了起来,伴随着惨叫和血花。“哈哈,吞了它!(Suck It Down)”罗梅洛乐不可支。

很快,id所有人都改打起多人游戏,他们互相追逐着开火,办公室里充满此起彼伏的喊叫,那不再是音箱里传出的怪物音效,那是真人原声。在这个竞技场里,他们搏斗、追赶、逃跑、杀戮。他们还互相单挑,并动手制作了一个记分板,看谁是冠军。但罗梅洛觉得这还不是全部,既然可以有四个玩家对战,为什么不可以让他们合作呢?譬如组成一支队伍来消灭怪物然后过关。卡马克告诉罗梅洛,这完全可以办到的,罗梅洛憋不住了:“不要告诉我你真的可以让四个人组成一队,互相掩护着从成群的怪物中杀出一条血路!”他气喘吁吁地说:“太完美了!”

罗梅洛在房间里来回踱步,“这次可是大件事!比侵犯版权的戴夫要大,比我见过的任何事情都要大!”他走到过道里,听到旁边房间传来艾德里安的叫喊声,他正在跟凯文、卡马克、杰伊在Doom里杀得昏天黑地,就看他在椅子上左摇右晃,上下抽搐。这像是什么呢?罗梅洛想道,一场比赛?一场拳击赛?但这个远不止是互相给对方几拳那么简单,这就像是,嗯,要取人性命一般!这是事关生死的比赛,这是——罗梅洛呆立在原地:死亡竞赛(deathmatch)。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1993年12月的第一个礼拜,id已经在忙于Doom的收尾工作,没有人回家,他们就睡在公司,睡在躺椅上,睡在地上,睡在桌子下。最有意思的是戴夫·泰勒(Dave Taylor),这个新来的程序员以经常昏倒在地而出了名。这不是因为太累的缘故,他说,而是因为Doom,这游戏对他像是有一种魔力,一种生理上的作用,他玩得时间越长,在那些迷宫里转得越快,他就越感到眩晕,然后过不了几分钟他就得躺倒在地上回回神,有时,他就这样睡了过去。其他人总是看到他四仰八叉地躺着,终于,在某天晚上,他们找来一卷胶带,沿着戴夫的身体在地上贴出一个轮廓。

Doom的制作正一步步逼近终点,压力也越来越大。一些玩家开始给他们打电话:“怎么样?好了没?”或者是:“动作快点啊,烂人们!”还有一些则开始对id的延期表示不满,因为id曾说过他们可以在第三季度发布Doom,一个玩家在网上的新闻组里写道:“你们几个月前就开始大吹大擂,让我们相信Doom将会是一个多么了不起的游戏,你们还和很多人说今年秋天就可以完成,而现在,所有那些期望都将变成针对你们的怒火和咆哮!”

还有一些帖子则表示能够理解id的延期。以前发布的Doom截屏显然是进入了一个玩家的梦境:“闹钟响的时候,我正在朝着一个由像素组成的魔鬼开枪,没错,我现在做起梦来就是一个一个像素的……,我想我该去看看精神科大夫了,不知道Doom真出来的时候,我会变成什么样子。”

有个玩家则写了一首名为《Doom前夜》的诗:

那是Doom来临的前夜 在这屋子的每个角落 我架起那对战用的网络 鼠标就是我们的枪托 绵延的网线呵 我会把它们细心照料 只希望那Doom啊 能快快进入我的怀抱

某计算机杂志则以阴暗的色调刊登了一篇介绍Doom的文章,题为《家长们的圣诞噩梦》,里面写道:“当你们以为孩子还在期盼着糖果时,他们很有可能已经在一个精彩的计算机游戏中得到了他们想要的……那个游戏就是:Doom。”

1993年12月10号,星期五,历史性的时刻到了。

连续测试三十小时后,id已经准备好把Doom上传到因特网上。一个名叫大卫·达特(David Datta)的好心人给id提供了文件服务器,他是威斯康星大学的系统管理员,这台服务器在他们校园网里。这事听起来很不错,因为大学总是带宽最充裕的地方,从而可以容纳更多的用户来下载。id就是这么想的:先上传,让玩家们来下载它,然后他们会再把它不断地传播出去,这比起其他花大价钱的分发方式好太多了,玩家们相当于是帮了id一个大忙。而杰伊已经于头一天在聊天室里向他们宣布了这个消息:Doom将在10号午夜钟声响起时放出。

午夜在不知不觉中来临了,id的人们都围聚到杰伊的计算机旁,Doom制作过程中的各种物品散布在办公室里;凯文和艾德里安做的粘土雕塑在书架上;破椅子和坏键盘扔了一地;那个被踢瘪的垃圾筒呆在墙角一言不发;戴夫的轮廓上覆盖着灰尘;Doom在杰伊的机器里,整装待发。

此时此刻,威斯康星大学的FTP(文件传输协议)服务器上已经挤满了急不可耐的玩家,那上面虽然没有聊天和留言系统,但他们聪明地想到了另一种办法来交流。FTP服务允许用户在上面建立新文件,这个文件名可以被其他用户看到,于是,玩家们开始新建文件,起名为:“Doom什么时候好啊”,或者是,“我们在等待”。此外还有几百人挂在杰伊昨天发布消息的那个聊天频道里。

终于,时钟指向午夜,不需要再等下去了。杰伊按下键盘,把Doom上传给世界,办公室里的人们开始互相庆祝,除了坐在屏幕前的杰伊,他沉默不语眉头紧蹙:有问题。威斯康星大学的FTP服务器最多只能同时容纳125个用户,很显然,已经有125个玩家挂在上面,id反而无法登录。

杰伊给大卫打电话,两人商量出一个办法,大卫在学校里调整服务器的人数限制,然后杰伊通过电话和他同步,他那边一改完,这边就登录,应该就可以进去了。大伙在一旁屏息静气地看着他俩商量,他们甚至可以听到电话另一头敲键盘的声音。不一会,大卫清了清嗓子,杰伊的指头轻轻地搭在了键盘上,“好!”David说:“就现在!”……杰伊还是没能登录上去。

杰伊冲进那个挤满玩家的聊天室,“是这个样子的,”他敲道:“很抱歉,你们必须离开威斯康星大学的FTP服务器,因为我没法上传,你们选吧,要么你们离开,我把Doom传上去,要么就不传了。”话声刚落,玩家们就一窝地散开了。杰伊最后一次按下键盘,Doom终于上路了。

id的人们兴高采烈而又筋疲力尽地互道晚安,回家睡觉,他们几个月来都没有睡过一个像样的觉了。只有杰伊还没走,他要等着上传结束。半小时后,Doom的最后一个字节抵达威斯康星大学,瞬间,上万名玩家涌向那台服务器,淹没了它,威斯康星大学的网络瘫痪了,大卫的服务器,崩溃了。

“天哪,”大卫在电话里结结巴巴地对杰伊说:“我还从没见过这种事。”

这世界也从没见过。

第十章:DOOM世代

和1993年的所有父母一样,比尔·安德森(Bill Andersen)知道他九岁的儿子想要什么圣诞礼物:《真人快打》。这款暴力街机游戏的家用机版是那时最热门的玩意,它以650万美元的销售额把《街霸II》远远抛在身后。安德森向上司表示了对这款游戏的忧虑,他的上司约瑟夫·列博曼(Joseph Lieberman)是来自康涅狄格的民主党参议员。这位志向远大的政治家在听取了参谋的汇报后,决定亲自体验一下这款游戏。

《真人快打》让列博曼哀叹于自己想像力的匮乏:游戏里的秘技可以让玩家把对手撕成两半,喷涌而出的鲜血溅满整个屏幕。更让列博曼惊慌的是,玩家们热爱这残忍的招式:任天堂要求《真人快打》的制作公司Acclaim在超任版里去掉那些有争议的必杀技和血腥画面,而世嘉(Sega)公司则毫无顾忌,最终,世嘉五代主机(Sega Genesis)上《真人快打》的销量远远超出了任天堂的合家欢版——是它的三倍,世嘉五代因此也成了玩家必备的主机之一,旋即卖出一千五百万台。神坛上的任天堂从此光环不再。

这远不是全部,列博曼议员随后看到了《暗夜陷阱》(Night Trap),在这款世嘉主机大作里,吸血鬼们的猎物是一些衣不蔽体的女孩,其中一位受害者甚至像极了电视剧《别样接触》(Diff’rent Stroked)里的童星达纳·柏拉图(Dana Plato)。充斥着暴力内容的电影,譬如《落水狗》(Reservoir Dogs)和《终结者2》(Terminator 2),已征服了好莱坞,游戏界也越来越杀机四伏。

1993年12月1日,列博曼议员为此召开记者招待会,吹响了清剿暴力游戏的号角。

坐在列博曼旁边的是赫伯·科尔(Herb Kohl),这位来自威斯康星州的民主党参议员同时还是青少年司法小组委员会的主席和政府信息管制小组委员会的要员。与会的还有儿童剧《袋鼠指挥官》的监制和主演:鲍勃·金塞恩(Bob Keeshan)。科尔指出:“玩弹珠和画片的时代”已经一去不复返了,现在孩子们都在玩着“充满尖叫和痛苦的电子游戏”,那些内容“足以让成年人从噩梦中惊醒”,金塞恩也警告说:“孩子们在暴力游戏里作为主动参与者所学到的东西 ……连成年人都会如见到洪水猛兽般畏之不及,而如果我们对这样的事情再听之任之,它的确会发展成为威胁到千家万户的洪水猛兽。”他督促游戏制作者们:“认清你们在社会教育中所扮演的角色。”

列博曼议员高瞻远瞩地总结道:“在看过这些暴力游戏后,我坚信,在游戏界中有那么一小撮极端不负责任的制作者,我希望政府可以革除他们。”

政客和卫道士们总是试图拯救下一代于水火之中,尽管他们不一定理解年轻人的文化,但这并不妨碍他们运用他们所把持的话语权和立法权。早在美国内战结束时,宗教领袖们就把艳情小说指为:“撒旦门下最能干的爪牙,它们毒害年轻人的心灵,以扩张它们邪恶的领地。”进入二十世纪后,电视和电影又成为了新的标靶,针对这些全新媒介的调查研究一连持续了几十年。五十年代,电视上的猫王(Elvis Aron Presley)只能出现上半身,《MAD》杂志的创办者威廉·盖恩斯(William Gaines)被国会传唤。七十年代,龙与地下城里的魔鬼与巫术被和撒旦崇拜(Satanism)联系到一起,尤其是在密歇根湖事件发生后,反对的声音更是一浪高过一浪。八十年代,重金属文艺工作者“犹大牧师”和“Ozzy Osbourne”被指控为教唆年轻听众自杀。九十年代,电子游戏成了新的“乐与怒”,也成了卫道士们心中更强烈、更无法抑制的痛。

这种敌视心理可以上溯至三十年代,那时的弹球厅一贯被视做是地痞流氓聚集的地方。纽约市长Fiorello La Guardia为此颁布了禁令,直到七十年代中期方才解除。接着被取缔的就是《死亡飞车》,这款碾压屏幕上像素点的游戏一度成为报纸头条。八十年代初是电子娱乐业的黄金时代,它的总产值达到六十亿美元。随着电子游戏的日益普及,一些人心中的担心也开始疯长,他们觉得这些游戏对孩子们有潜在的不良影响。

1982年,家庭-教师协会(PTA)发布了一份谴责街机游戏的声明:“遍地开花的电子游戏厅对经常光顾那里的年轻人是有害的,我们对此非常担心……初步调查表明,这些乌烟瘴气的场所大都集中在学校附近,许多游戏厅并不限制学生们在上课时间出入其中,这无疑是旷课和逃学的诱因。在这些几乎不受监管的场所,贩毒、吸毒、酗酒、赌博、帮派活动,以及其他不良行为得以孳生。”

一些城市,譬如德克萨斯州的麦斯奎特、伊利诺斯州的布拉得利、乔治亚州的斯乃尔维尔,开始限制或是取缔街机厅。1982年,布拉得利的市长看到“几百个青少年聚集在街机厅里抽大麻”,他随后得出结论:“孩子们把书费、午餐费,以及每一个能弄到的硬币都投进了那些花花绿绿的机器。”尽管美国最高法院驳回了麦斯奎特市试图取缔电子游戏的起诉,但其他国家,譬如马来西亚、新加坡、印度尼西亚,不光颁布了电子游戏的禁令,还强制关闭了街机厅。

媒体也不失时机地来火上浇油。《美国新闻与世界报道》(US News & World Report)用的标题是:“电子游戏——娱乐还是威胁?”《少儿健康》(Children’s Health):“数字一代的电子游戏热:福兮祸兮?”美国公共广播公司(PBS)的新闻评论员罗伯特·麦卡尼尔(Robert MacNeil)则说道:“这些电子游戏究竟是在教育孩子们成为未来的主人翁,还是在扭曲他们幼小的心灵?”

面对这一连串的问号,科学家和教育家等学术界人士展开了研究。时任美国公共卫生署署长的埃弗雷特·科普(C. Everett Koop)博士猛烈抨击道:“电子游戏会导致儿童行为失常,他们的身心会融入游戏模式:一切活动都是为了消灭敌人,从而,当他们看到其他孩子被欺负时,他们只会袖手旁观。”

《新闻周刊》(Newsweek)附和道:“尼古拉斯·波特(Nicholas Pott)博士在纽约市诺斯神经外科医院的两个病例显示:过度沉迷于游戏的年轻人会不顾一切地逃避现实生活和人际交往。门诊主任海尔·费什金(Hal Fishkin)博士表示了他对游戏中你死我活这种生存法则的反对:‘请(游戏界)不要再给已经很糟糕的暴力问题煽风点火’。还有一些人则担忧游戏这种娱乐形式会改变人们的潜意识,南加州大学的通讯学教授佛瑞德·威廉斯(Fred Williams)指出:‘一个人如果习惯于在电子游戏中寻求刺激和满足,那么他就会对生活中不是那么快节奏的事物变得缺乏宽容和耐心。’”

尽管这些人言之凿凿,但不是所有研究都得出了相同推断。《心理学月刊》(Journals of Psychology)的结论是:“没有证据显示电子游戏会助长社交隔离、易怒、反社会行为、强迫症等心理疾病。”这位麻省理工的社会学家雪利·特奇克(Sherry Turkic)还赞扬了电子游戏的正面影响,譬如它对患有弱智或情绪困扰的儿童能起到积极鼓励的作用,她写道:“许多孩子除了电子游戏外没有其他特长,而这种掌握事物的经验对他们而言非常重要。”但随着1983年过度膨胀的游戏业开始崩溃并陷入大萧条,这些口舌之争也沉寂了下去。

十年后,1993年12月9日,星期四,上午,列博曼议员就电子游戏中的暴力内容召开联邦听证会,战火重燃。

与会专家们就这场新的世纪瘟疫发表了热情洋溢的演说。《电子儿童:任天堂的产物》(Video Kids: making sense of Nintendo)一书的作者,大学教授尤金·普洛文佐(Eugene Provenzo)博士宣布:“电子游戏里泛滥着暴力、男权主义和种族歧视。”美国教育协会主席罗伯特·蔡斯(Robert Chase)表示,电子游戏正激起现实生活中的暴力举动,他解释道:“因为游戏需要玩家的主动参与,而不是被动观看,这会使孩子们对暴力变得麻木,并习以为常。不仅如此,当参与者在游戏中以最残忍的方式杀死对手时,他们还会得到奖励,这其实是在鼓励玩家动用暴力手段解决问题。”

稍后,任天堂美国的执行副总裁霍华德·林肯(Howard Lincoln)和世嘉美国市场部的副总裁威廉·怀特(William White)就两个公司不同版本的《真人快打》开始了争吵。林肯把任天堂描绘成一个为了在游戏界撑起一片纯净天空而殉道的烈士,怀特则反驳说游戏界已不再是儿童乐园,玩家中成年人的比例越来越大。林肯听到这话以后如同被通了电一般,他面对会场大声道:“我不能坐在这里任由他告诉你们说游戏业已经不再只是面向儿童而是面向成年人——这样的转变还没有发生!”

一番唇枪舌剑后,听证会于12月9日下午1点52分结束。列博曼议员宣布了听证会的结论:电子游戏业必须在接下来一年内建立起某种自我分级机制,否则,政府将成立专门委员会干预此事;明年二月份还将有一次会议,以观察游戏出版商和开发者们的表现。这次只是警告,马上改正还来得及。

第二天,id发布了Doom。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

德克萨斯州,华兹堡(Waxahachie),地下两百英尺的美国能源部超级超导对撞机实验室里,工程师鲍勃·马斯坦恩(Bob Mustaine)忽然被吓得跳了起来,他周围的同事也一样,都坐在椅子上扭动着,叫喊着。噢,这不是什么核事故,这只是他们午休时间的例行操练。这些政府雇员的日常工作是研究粒子物理,这里有价值几十亿美元的尖端实验设备,它们能让质子以极高的速度撞击,并激射出大量的亚原子簇,如此壮观的场景并非随处可见,但对于这些科学家们来说,更让他们觉得震惊和刺激的是计算机屏幕上喷薄而出的火球——Doom给他们展现了一个前所未有的世界,让他们心驰神迷的世界。

印第安那州,韦恩堡(Fort Wayne),泰勒大学计算机中心。这里的学生和几个州外的科学家们一样,坐在椅子上前俯后仰。机房管理员布赖恩·艾瑟罗(Brian Eiserloh)又一次在晚上打开机房门,放进了急不可耐的玩家们。大学里总有着最充裕、最顶级的计算机,从而,布赖恩和其他计算机爱好者们一拿到Doom后就开始以机房为家,没日没夜地鏖战。作为程序员,他们对Doom那三维的图像和令人咋舌的运行速度肃然起敬;此外,作为好孩子,他们还从未体验过手握霰弹枪互相追杀的快感。“噢!”布赖恩喊道:“天又亮了!”——Doom使他这个学期所有科目都只得到F,而他从前曾是一个颇有数学天分的A等生。

几千英里外,九寸钉(Nine Inch Nails)乐队的摇滚明星特伦特·雷佐(Trent Raznor)刚结束一场演唱会。就在警卫的簇拥下走向后台,疯狂的歌迷仍在朝他欢呼尖叫,特伦特也点头挥手作为回应,但他脚下丝毫没有放慢,他要赶快回到大房车里,房车里等待着他的不是啤酒大麻或女人,而是一台计算机——Doom成为了他现在的最爱。

自从12月10号Doom导致威斯康星大学的网络崩溃后,类似的场景就如野火般蔓延到了世界的各个角落。没有广告攻势,没有市场推广,没有吹吹打打,Doom一夜之间席卷了网络世界。而且,似乎是冥冥中的定数,一场因特网的革命也就在此时拉开序幕。

七十年代初,美国国防部先进研究计划机构(DARPA:Defense Advanced Research Projects Agency)连接起各地的计算机网络,组建了DARPAnet,它就是因特网的前身,但在那时,因特网对于普通大众而言还只是传说中的一个名词。1989年9月,欧洲一位名叫提姆·柏纳李(Tim Berners-Lee)的计算机研究人员编写了一个程序,用户可以通过“超级链接”在文档之间跳转,这样的信息链在因特网之上编织出了一张所谓的万维网(WWW: World Wild Web)。四年后的1993年,伊利诺斯大学的两名黒客,马克·安德森(Marc Andreessen)和埃里克·拜纳(Eric Bina),发布了第一个浏览器:Mosaic,它可以把万维网上不便于阅读的数据转换成类似杂志一样图文并茂的页面。随着用户界面变得友好,因特网的易用性也大大提高,并开始出现了类似美国在线和CompuServe这样面向公众的网络服务提供商,在BBS和新闻组里游荡了若干年的玩家们,自然成为最早一批上路的用户。然后,Doom发布了。

学校、企业、政府机关这些配备有计算机的地方现在都装上了调制解调器,也就是这些地方,有着许多懂得如何使用这些设备的人,他们无一例外被卷入了Doom狂潮。就在那个周末,大量的下载和玩家之间的对战导致因特网出现了前所未有的拥塞。玩家们争先恐后地连入美国在线。“那天晚上就像是一场暴动,”美国在线的游戏板块负责人德比·罗杰斯(Debbie Rogers)回忆道:“要不是中间隔着电话线,我肯定都被这些疯狂的人们踩扁了。”

Doom发布后几小时,卡内基梅隆大学(Carnegie-Mellon's)的计算机系统管理员发布了一份在线通知:“自从今天Doom发布后,学校的网络就出现了异常情况,经过分析,我们认为是这款游戏导致了网络过载……校方请所有Doom玩家们不要进行对战,那样会给网络带来很大流量,我们校园网的负载已经接近极限。我们可能会强行断开进行Doom对战的机器。再重复一遍:玩Doom时切勿使用对战模式。”

英特尔(Intel)公司在发现网络异常后立刻禁止员工在公司运行Doom。德克萨斯A&M公司把网络服务器上的Doom全部删除。路易斯维尔大学的机房管理员为了解决Doom带来的困扰甚至专门写了个软件,他介绍说:“学生们为了玩这个游戏在机房外排起长队,于是我们写了一个小程序,它会遍历每一台机器,并删除之上的Doom。”

关于Doom的各种评论也立刻见诸于报端。《PC周刊》(PC Week)把Doom称做“三维特技”。《计算》(Compute)杂志则认为Doom预示着计算机游戏新纪元的到来:“了无生气的PC机现在焕发出了青春……首次出现了堪于街机媲美的游戏……一个美丽的新世界呼之欲出。”一些人则被Doom里空前的暴力和血腥所震撼,伦敦《卫报》(The Guardian)的评论员莫衷一是地写道:“作为《德军总部3D》的续作,Doom比前作更加耀眼,也更加令人反胃,它不适合孩子,也不适合所有对暴力敏感的人。”另有评论员补充道:“这个游戏是如此逼真、如此紧张、如此恐怖,以至于你在那些昏暗的迷宫中走得越远,你的鼻子和显示器之间的距离就会越近——这意味着,你,作为一个玩家,正不可自拔地陷入那个虚拟世界。”尽管作者的妻子对他百般劝阻,但他已经对Doom上了瘾,这游戏就像是,他坦白道:“电子海洛因”。

此外,Doom还是一台印钞机。发布当天,id就看到了盈利。尽管在下载了试玩版的人中只有大约百分之一会购买完全版,但id每天的订单仍多达十万美元。id曾开玩笑说“我们衷心期望Doom成为全世界生产率大幅下降的罪魁祸首”,这个玩笑已变成现实:全世界似乎都陷入了Doom的漩涡——包括id自己。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“晚上好,土人!”罗梅洛喊道:“你他妈的就跑吧!干,烂人!吞了它!”

肖恩·格林坐在id的办公室里,他整个身子伏在屏幕前,满是汗水的手握着鼠标,隔壁房间里罗梅洛的叫骂声不绝于耳。肖恩本是id雇来做Doom技术支持的,但他很快就被另外一份差事压得喘不过气来——死亡竞赛。他的办公室和罗梅洛的紧挨着,罗梅洛这个终极玩家、汤姆笔下的手术师,自然不会放过他。肖恩很快就取代汤姆成为了罗梅洛最亲密的伙伴和游戏搭档。

“来啊!你这个死猴子!”罗梅洛敲着墙,冲肖恩不停喊道:“谁是老大?嗯?再来一把!”

肖恩看了看表,时针已经指向了晚上八点:糟!又浪费了一整天。和罗梅洛之间的游戏占据了肖恩所有的时间:工作、娱乐、吃饭、睡觉,现在的罗梅洛已经把死亡竞赛作为一项疯狂的运动,而且他还像个痞子运动员一样,比赛之余满口脏话。以前人们玩游戏时顶多是互相翻翻眼睛,但肖恩发现,这在Doom世界里实在是太过于绅士了。赢了罗梅洛一把后,肖恩也敲着墙壁回击道:“认栽吧!你个烂人!”

墙壁另一边的罗梅洛欣慰地笑了——对,游戏就应该是这么玩的。

id的打砸狂欢也在不断升级。键盘和旧显示器被砸到桌子和地上,软盘和声卡等小玩意则被用来像飞镖一样扔到墙上。甚至卡马克都加入了进来。

那天,罗梅洛不小心把自己锁在了房间里,卡马克听到他的求救声后,试着想把门从外面打开,发现行不通后,卡马克稍作迟疑,就决定采用最直接最简单的解决方案:“等一下,我房间里有把战斧,我马上过来。”那是卡马克不久前花五千美元定制的武器,一把锋利的短柄斧,就像他在《龙与地下城》世界里创作的那种。在大家 “战-斧!战-斧!”的欢呼声中,卡马克劈开门解救出罗梅洛。接下来几个月,这扇被砍得稀烂的门就一直半掩在那里。

id站在了云端。尽管Doom没有像《真人快打》或《神秘岛》那样成为主流市场的宠儿,但它是目前地下世界里最热门的游戏,甚至超过了以前的,嗯,《基恩》和《德军总部3D》。id现在是共享软件市场里无可争议的王者,年收入即将达到一百万美元,而且,他们很快发现,这还只是开始,在罗恩·柴莫威兹(Ron Chaimowitz)这位纽约人的帮助下,零售市场也要被id收入囊中。

已届不惑之年的罗恩看上去很精悍,他于八十年代在迈阿密创办了当时第一家西班牙风格唱片厂牌,从此进入娱乐业,他此生最聪明的决定就是签下了酒吧乐队“迈阿密音响机器”(Miami Sound Machine)及其灵魂人物葛洛丽雅·伊斯特芬(Gloria Estefan),他还把西班牙歌王胡里奥·伊格莱西亚斯(Julio Iglesias)介绍给了美国听众,随后,为进军正处于萌芽时期的家庭影视业,他成立了一家名为“快乐时光”(Good Times)的公司,并找到了简·方达(Jane Fonda)来主演一部长仅二十九分钟的健美操教学录影带。这部片子引起了沃尔玛连锁超市(Wal-Mart)一名经理的注意,他告诉罗恩还有一片无人涉足的处女地:低成本小制作的计算机软件,为此,罗恩成立了“快乐互动时光”(Good Times Interactive)公司,简称GTI。

GTI先是发行了理查德·席梦思(Richard Simmons)的一张减肥教程多媒体光盘和一个屏保程序,但这远不足以铺满沃尔玛的货架,于是罗恩把眼光投向游戏领域,他和电子艺界之类的大出版商达成协议,重新包装出版他们那些过气的老游戏,但他清醒地知道,如果想有所突破,一定要发掘新的游戏来自己出版,为此,他首先要能找到没有和任何大出版商签订卖身契的自由游戏制作者——譬如,那些制作共享游戏的人们。

如果把商业软件零售市场比做职业篮球联赛,那么共享软件作者就是大学篮球联赛里的璞玉。罗恩要做的就是挑出最有潜质的队伍。凭借着《德军总部3D》横扫共享软件市场的id自然成为了罗恩的首选,而且,他们的Doom比前作更为来势汹汹。让罗恩大吃一惊的是,Doom还没有零售版本,这对罗恩来说无疑是个天大的好消息:id就是他的下一个伊斯特芬。

罗恩立刻飞往德克萨斯,出乎他的意料,id这些百万富翁们只是一群留着长发,穿着大短裤的孩子,他们的办公室简直就是一个垃圾场,到处是破碎的计算机部件、几星期前的比萨盒,以及堆积如山的饮料瓶。但罗恩很快发现,在这些邋遢随意的外表背后,其实隐藏着极其精明的商业头脑。罗恩给id开了个大价钱,并向id夸耀说,GTI在沃尔玛的2200个店里都有专门货架。但id根本不屑一顾,他们知道,通过共享模式,他们可以绕开所有中间商,获得最大利润,而且,用《德军总部3D》引擎开发的《命运之矛》交给造型公司零售后,并没有卖得多好,所以他们还不打算放弃共享模式。为什么,他们不明白,我id需要你GTI?

罗恩不是一个轻易放弃的人:“也许你们可以通过共享模式卖出十万份Doom,但我相信,如果你们给我一个零售版本的Doom,譬如叫Doom2,那么我想我可以卖出五十万份,甚至更多。”id仍然不为所动,罗恩无功而返,但他回到纽约后不久,就又飞到德克萨斯来恳求id,再失望,再回去,再飞来,最后,id给罗恩开出条件:如果要做一个零售版本,那么,GTI绝不能像对待普通游戏制作公司那样对待id,首先,有权决定做什么游戏以及如何做游戏的人是id,而不是GTI;其次,零售版本的知识产权属于id,而不是GTI;并且,在所有的包装上都要有显著标识:这游戏是由id出品,而不是GTI。罗恩同意了所有条件,并承诺投入两百万美元用于Doom2的市场推广,两百万——id从诞生那天到现在的所有花费加起来都不够这个数,而且,尽管Doom在网络上四面凯歌,但它仍只是在地下世界里悄然蔓延的暗涌,接下来的Doom2零售版,将使主流社会上铺上id那血腥的红地毯。

对于id而言,Doom2也符合他们以前《基恩》和《德军总部3D》的一贯做法:在共享版本的基础上,再制作一个零售版本。这样才能使卡马克的引擎发挥出最大经济效益。Doom2将会是Doom引擎再加上新关卡,当设计师和美工们开始制作这款续集时,卡马克就得以空出时间为下一个图像引擎做技术准备。

有了Doom这台生钱机器,再加上Doom2的诱人前景,id的人们不想再把钞票捏在手里了,而且,他们都是充满爱心的人。艾德里安给他母亲在一个更安全舒适的地方买了栋新房子;罗梅洛把他那辆美洲狮(Cougar)送给了附近他常去的墨西哥餐馆里一个经理,他还给祖父母支付了到赌城度假的费用;卡马克买了3200美元的计算机设备,送给他在肖尼市教会公立学校念书时的计算机老师,“这样他们就可以在实践中学习知识,”卡马克说:“而不是死读书,读死书。”此外,他还花了十万美元把他高中时的一个朋友从监狱里保释出来。

他们最主要的开销还是——买车。凯文买了一辆雪佛莱的克尔维特(Corvette);艾德里安选了通用公司出品的特兰斯·艾姆(Trans Am)跑车,这可是他梦寐以求了很久的东西;戴夫·泰勒挑的是本田的Acura NSX——这个家伙还自己掏钱给公司买了一套皮沙发,这样,下次他再被Doom催眠时,就有比地板更舒适的地方来供他昏倒了;卡马克和罗梅洛两人则直奔法拉利专卖店而去。

陈列大厅里,他们看中了一辆流光溢彩的特斯坦罗萨(Testarossa),它的标价是九万美元。卡马克对待汽车就像对待游戏,他从不满足,他总是在追求更快的引擎,没错,这次就是特斯坦罗萨了。“噢,天哪,”罗梅洛说道:“太夸张了!你看到了?这他妈的才是跑车!它就停在那儿!哥们,我真不敢相信,你马上就可以把它开回家了!”卡马克这次用现金结账,为了和他现在那辆328般配,他挑了一辆红颜色的。罗梅洛则选了亮黄色。他们把这两辆终极跑车并排停放在id楼下——正对着他们的窗户,这样他们在工作时也可以注视着它们。

但卡马克的新法拉利并没有在楼下放太久,几天后他就把它开进了诺伍德的车行进行改装,他期望的功率是目前的一倍:四百马力。诺伍德,卡马克的机车导师,心中已经有了计划:为它安装一对涡轮系统,这样,它的马力就不只是翻倍,而是——三倍!为此,他们使用了计算机控制的自动装置,它可以在需要时喷射出大量一氧化二氮。法拉利那杰出的设计和工艺已足以让罗梅洛为之迷醉,但对于卡马克,这只是又一台可以用来钻研和改装的机器。

id的人们很快发现,卡马克并不是惟一喜欢改装引擎的人。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“嘿!”罗梅洛把卡马克叫到机器前:“你一定要看看这东西。”他启动了Doom——或者说,本应该是Doom的那个程序。《星球大战》的开场音乐响起,屏幕上不是他们所熟悉的Doom关卡,而是一个闪耀着金属光泽的小房间,罗梅洛按下空格键,一扇门开了,同时传来命令声:“停下飞船!”罗梅洛继续往前走,他们看到了嘟嘟作响的机器人,还有戴着白色头盔的帝国士兵,甚至那选择了黑暗原力的天行者——达斯·维德(Darth Vader)。一些黒客们已经把Doom完全改装成了《星球大战》。“哇……”卡马克想:“这真了不起,不管怎样,我们算是做了正确的事情。”

这所谓“正确的事情”,就是让Doom更便于玩家们修改,从而,他们就可以制作出类似眼前StarDoom这样的新模式。早在《德军总部3D》年代,卡马克就惊讶地发现,玩家们利用id的引擎制作出了自己的游戏。当然,卡马克自己也曾经修改过《创世纪》里主角的生命值,但那次,玩家们走得更远,他们从头到脚重新制作了游戏里的图片,他们创造了全新的角色,譬如——小恐龙巴尼。卡马克和罗梅洛觉得这很有意思,并受到不少启发。他们注意到,《德军总部3D》的模式制作是完全替换游戏本身的资源文件,譬如把纳粹的图片换成巴尼的图片,如果玩家想再换回到纳粹,就相当麻烦。于是,在Doom中,卡马克进一步抽象了引擎和数据文件之间的关系,他专门制作了一个资源管理子系统,把数据都放到所谓的WAD包中,这个名词是汤姆的点子,意为:数据都在哪?(Where’s All the Data?),从而,在每次主程序启动时,它载入的是一个包含了所有图片和音乐的WAD文件,这样,玩家就可以每次指定不同的WAD文件让引擎使用,而不必再像《德军总部3D》那样麻烦地备份和恢复数据。

此外,卡马克还公布了Doom关卡编辑器和其他辅助工具的源代码,以便玩家们定制自己的游戏。这不光在游戏领域是个非常激进的做法,就任何形式的媒介而言,它都算得上前卫。这就像是涅槃乐队的唱片里附带了工具以便让你用自己的声音替换科特·科本(Kurt Cobain),或是《洛奇》(Rocky)录像带允许你把费城的街景换成中世纪的日本。以前也有游戏发布过关卡编辑器,但还没有哪个公司的程序员——更不要说是老板本人——公开过如此核心的技术。尽管卡马克暂时没有放出引擎本身的源代码,但他提供给玩家们的工具已足以让他们对游戏进行彻底修改。这不只是慷慨大方,这关乎世界观——这体现了自由主义里授权予民从而削弱垄断控制的思想。卡马克已不再是那个在堪萨斯城家中向往着黑客文化的孩子了,二十三岁的他现在是一个百万美元公司的所有者,他可以做任何他想做的事,他可以身体力行地去铸就黒客文化的辉煌。

这并不是每个人都能理解的事。除了罗梅洛这个有着黒客思想的程序员以外,id所有人都被卡马克的慷慨弄得惊慌失措,尤其是像杰伊和凯文这样有商业头脑的人。“这做法太荒唐了,”凯文说:“没有人免费公布过制作工具,而且这里面还有法律问题,如果有人把他做的内容和我们的混在一起发布怎么办?如果有人把因特网上这些Doom模式拿到商店里出售怎么办?那样的话,我们一觉醒来,就会发现有人在用我们的游戏来和我们抢占市场份额!”

“嘿,他们根本没领会,”卡马克转了转眼珠,心里想:“因为他们不是程序员,所以他们没法领会这种黒客的乐趣。”他们甚至都不是真正的玩家,他们不是这玩家社群的一份子。让卡马克心存感激的是,罗梅洛站了出来,大声为他辩护:“我说,哥几个,我们不会有什么损失的,我们现在正财源滚滚,我就不相信外面的人能怎么样了!多大事啊!”

在Doom还没有发布时,的确就有玩家在热切期盼着这些方便他们修改制作的功能,其中一些等不及的玩家甚至直接拿泄漏的演示版开了刀。在正式版临近完工时,卡马克给一些《德军总部3D》的模式制作者们发了一封电子邮件,向他们透露了Doom里模式制作方面的一些增强特性。但卡马克自己也不知道他们能用这些功能制作出什么东西。Doom发布几个星期后,网上就出现了简陋的关卡编辑器,它们可以修改游戏中现有的地图,譬如调整墙壁、移动地板。

1994年1月26日,新西兰坎特伯雷大学一位名叫布瑞登·韦伯(Brendon Wyber)的黒客把他的“Doom编辑工具”(DEU: Doom Editor Utility)传到了网上。在这个程序的制作过程中,他得到了全球各地玩家的帮助。尽管卡马克公开了地图编辑器的源代码,但他并没有时间和精力去帮助玩家们理解它,而布瑞登则如同疱丁解牛般从源代码中分离出各种功能,DEU向玩家展示了如何从无到有地建造出一个关卡。2月16日,比利时学生拉斐尔·奎奈特(Raphael Quinet)协助布瑞登制作的DEU增强版发布,“你几乎可以在关卡里做任何事,”他们写道:“你可以移动、添加、删除各种怪物和宝物,改变墙的位置,或是改变它的墙纸,或是安置新的升降机、门、酸液池,你还可以调整天花板的高度……甚至,建造一个全新的关卡。”

DEU的发布是一道分水岭。从此,每一个热心的玩家都可以制作出自己的关卡,他不一定要是程序员,也不一定要是美工或什么其他专业人士,只要他愿意,他就可以动手修修改改。如果他再会制作图片或音效,他就可以建造出他心目中的世界,譬如Doom巴尼、Doom辛普森、Doom商场、Doom地铁。密歇根大学的学生格雷格·刘易斯(Greg Lewis)在这基础上更进一步,他编写了一个名叫DeHackEd的程序,这个免费软件所能修改的不只是包含图像、声音、关卡的外部WAD文件,而是游戏的核心——可执行文件,这里面包含了游戏运行的逻辑,譬如怪物们如何行动、武器如何开火、文字如何显示。

“DeHackEd可以彻底颠覆Doom的玩法,”刘易斯在文档里写道:“譬如使火球隐形、使火箭弹的伤害增加到2000点、使怪物们漂浮在空中、使你那水深火热中的太空战士拥有无限弹药,它还可以在游戏里加入全新物品,譬如离子地雷、超级连发武器、极速火箭,这样你就可以设计出全新的死亡竞赛规则,而且你可以把这些改动都放到一个补丁文件里发给朋友,WAD开发者们可以在关卡里加入新的怪物……一切的一切。”

这些黒客工具使游戏的“沉浸感”有了新的含义。Doom本身已使玩家沉浸于快节奏的三维世界,沉浸于可以互相对抗的死亡竞赛;而黒客工具则使他们沉浸于创作的乐趣,当玩家先勾画出整个世界的蓝图,然后设计出各种生命形态、并定义出这世界的物理规则时,他其实是在扮演上帝的角色。玩家们开始在因特网上互相免费交换自己创造的世界,这些因为死亡竞赛而离开课堂的玩家们现在找到了新的嗜好:创作。他们不分昼夜地忙碌,他们甚至赤膊上阵:泰勒大学的一些玩家定期举办“天体创作营”,在那期间,他们一个个都扒得精光坐在计算机面前。Doom不止是一个游戏,它是一种文化。

这文化使id内部本来就持怀疑态度的人们愈发不安。经过一番讨论后,杰伊获准发布一份针对Doom修改制作的法律声明:“你可以就你的作品向用户收费,id软件公司对此不收取任何版税,但你的作品必须在Doom注册版的基础上运行,而不能在Doom试玩版上运行。你必须在你的作品中标明这不是id软件的产品,id软件不会,也无法,为你的作品——或是安装了这作品后的Doom——提供技术支持。根据我们律师的要求,你可能还需要在你的作品中包含一份法律声明。以上只是我们目前能想到的,在最终成文之前可能还会有所变动。:) …… 很抱歉,我们必须发表这份声明,”他总结道:“因为……没有其他办法可以控制现在的状况。”

id将要发现,还有他们更无法控制的事。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1994年春天,id有了新的电话答录提示:“如果你打这个电话的目的是和我们进行商业合作,那么请按‘5’。”

随着Doom文化的普及,一些巨头们也留意到了这款成功的游戏。环球影片公司(Universe Pictures)获得Doom的电影版权,并把它交给了《捉鬼敢死队》(GhostBusters)和《杂牌军东征》(Stripes)的导演伊凡·雷特曼(Ivan Reitman)。其他一些公司,譬如卢卡斯工作室,开始制作类似Doom的游戏。甚至微软也发现Doom是用来展示他们下一代视窗操作系统里多媒体功能的最佳选择,为此,他们请卡马克为视窗系统制作个简单的Doom演示,随后他们在计算机游戏开发者大会上用这个版本大肆炫耀了一番,“微软致力于让用户通过视窗系统体验到顶级的多媒体技术,”微软个人操作系统部的经理布莱德·蔡斯(Brad Chase)如是说,而游戏,“就是最大、最重要的一类多媒体软件。”

不久之后,大家开始议论起微软或IBM那样的公司在id面前是如何陈腐不堪。id聪明地选择了通过共享模式发行,而Doom的试玩版让人欲罢不能,玩家像上了瘾一样,只能乖乖掏钱购买完全版,于是有人把Doom称之为“电子海洛因”。《福布斯》发表的文章题为“来自地下世界的利润”,作者热情地写道:“私营的id软件公司没有公布过它的财政报表,但从我掌握的情况来看,他们的收入大概在一千万美元上下,微软的盈利率在它面前黯然失色,相比id,微软就像一个二流的水泥厂……等到有了信息高速公路,id的这种商业模式将会是什么样子?……没有销售人员,没有库存,没有市场费用,没有广告费用,不需要员工停车位,不需要给任天堂或世嘉缴版税。这种激动人心的新型商业模式,不只适用于游戏,甚至不局限于软件,各种各样的产品或服务都可以通过电子方式来出售或提供。”

主流媒体拾起接力棒。《纽约时报》(The New York Times)、《今日美国》(USA Today)、权威电影杂志《综艺》(Variety),都就Doom新开创的商业文化潮流发表了文章。新闻记者们涌向达拉斯,想一睹id的真面目,他们看到了长发的玩家,也看到了整齐的法拉利。在他们眼中,这一切是如此新奇另类,这次,他们不用夸大其词就可以写出一篇动人的报道了。id不再只是一个制作出精彩游戏的公司,它现在是某种新事物的象征:富有、年轻、充满创意,不拘泥于传统的商业模式,而是通过那尚未成形、难以名状、人所不识的因特网取得了成功。“每个人都在谈论着信息高速公路将带来的巨变,”杰伊在《达拉斯晨报》(The Dallas Morning News)上自豪地说:“我们就是活生生的例子。”—— 他意识到,业界正需要一颗明星,而id恰逢其时。

任何明星都少不了有绯闻。由于游戏中的暴力场景,中国已经在考虑封杀Doom,而巴西则直接把Doom列为非法游戏,甚至即将成为Doom2零售商的沃尔玛也开始畏缩。一切情况都表明,Doom将是下一只被击落的出头鸟,但就在这紧要关头,事情出现了转机。

1993年12月列博曼议员召开的听证会一结束,业界就开始忙于给政府拿出满意答复,以免他们动粗。1994年春季的第二次会议后,大出版商们本着自我约束的目的成立了互动数字软件协会(IDSA:Interactive Digital Software Association),到了秋天,它属下的娱乐软件分级委员会(ESRB:Entertainment Software Rating Board)成立,这个委员会的运作方式类似电影业的分级制度:T表示适合青少年(Teen),M表示适合成年人(Mature)。Doom2自然是第一个被打上M标记的游戏。

这次风波不仅没能伤及id分毫,还给它那坏孩子般的形象添上了更耀眼的光环。政客们失望地发现,听证会的效果事与愿违,它实际上宣告了一个新纪元的诞生:有了分级制度后,游戏出版商们可以肆无忌惮地制作更暴力更血腥的内容。玩家们则大喜过望,世嘉的《暗夜陷阱》在全国各地都卖到脱销,甚至任天堂也一改往日的清纯形象,计划着制作《真人快打2》——加上血腥,或者不管其他什么东西。在这场暴力的狂欢中,没有哪个公司能与id争锋,现在,当媒体和游戏迷们如潮水般拍打过来时,id只缺少一张面孔,一张伫立在滩头供人膜拜的面孔,这个角色在id简直不做第二人想:当这支乐队需要一个主唱的时候,约翰·罗梅洛无疑是最完美的人选,而且,在id,也只有他想走上前台一展歌喉。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“万岁!万岁!万岁!”玩家欢呼着,并朝罗梅洛深深弯下腰。在一个炎热的下午,罗梅洛和肖恩来到了德克萨斯州奥斯汀市,他们现在站在一家游戏厅里,这家店坐落于德克萨斯大学门口的商业街,它楼下是一间咖啡馆。五个Doom瘾君子几个星期前租下了这个六百平方英尺的地方,他们有的是生物系动物专业的学生,有的是高科技公司的职员,他们觉得城里的Doom迷应该不止他们几个,于是他们架起计算机网络,摆出一排二十七英寸的显示器,开始了每小时八美元的死亡竞赛服务。今天是他们开业以来的第一届正式Doom比赛,而且,让到场的几十名玩家受宠若惊的是,罗梅洛——Doom的制作者——也亲临现场和他们一较高下。

尽管这些玩家中几乎没人见过罗梅洛的照片,但他们觉得身着黑色T恤的那家伙应该就是他,那T恤正面印着Doom的铁血标志,背面印着“制作者”(Wrote It)三个大字。没错,这件衣服就是罗梅洛设计的。不久前id制作Doom文化衫的时候,罗梅洛建议给id自己的那套T恤背后加上“制作者”三个字,他甚至给他妈妈寄了一件“我儿子是制作者”(My Son Wrote It)。卡马克喜欢的则是他自己那件印有黄色笑脸的T恤:笑脸的额头上,一个鲜血四溅的弹孔——典型的id风格:暴力加上幽默。

罗梅洛穿上那件T恤后就再不肯脱下,他在街上穿,参加游戏聚会时穿,甚至在办公室里也穿。这件衣服成了一个符号,玩家们会在人群中不经意看到它,然后欣喜若狂——制作者!一些胆大的甚至会追上前去请求和他握个手。罗梅洛第一次被象明星般对待是在CompUSA商店的停车场里,一个员工腼腆地跟着罗梅洛走到他那辆黄色的法拉利边,请求罗梅洛给他签个名。这样的场面后来越来越常见,尤其是在罗梅洛穿上“制作者”T恤后。玩家们不再只是请求签名,他们像《周末狂热》(Saturday Night Live)里的韦恩(Wayne)和加思(Garth)膜拜摇滚明星一样双膝跪倒在罗梅洛面前。id其他人简直无法相信自己的眼睛,而且,他们只感到窘迫:我们不是什么金属乐队,我们只是玩家。

关于id的传说越来越迷人,媒体和玩家们对id的好奇心也越来越浓厚——他们究竟是些什么人?作为回应,id开始利用UNIX操作系统的finger服务向外界发布信息,也就是所谓的“计划”(.plan),玩家们只需要通过网络发送一个请求,就可以从id的计算机上取到最新的内容。id的人们开始定期张贴一些技术文章,但很快,话题就延伸到了生活领域,譬如,最引人注目的,卡马克和罗梅洛的那两辆法拉利。

当玩家了解到id更真实更内在的一面时,他们心中对id的景仰变得愈发强烈。这不同于歌迷或影迷们对偶像的那种崇拜,这是杰伊所谓的“技术崇拜”(nerd worship)。而罗梅洛无疑是最乐于被崇拜的一个,他不仅随时穿着那件T恤,他还在改变着他的外表,他留起黑色长发,换上隐形眼镜,但无论他如何打扮,如何热衷于成为明星,他从来没有把朝他鞠躬欢呼的玩家们看做是不名一文的追星族,在罗梅洛眼中,他们是伙伴,是朋友;当他看着台下密密麻麻的人群时,他心里想的是:这些人,就是和我一样热爱游戏的玩家。Doom流行得越来越广,罗梅洛也和玩家们一样越来越沉迷于死亡竞赛,他和肖恩现在日复一日对战到深夜,而当他不玩Doom时,他就在谈论着Doom,他频繁地出入于因特网上的Doom聊天室、Doom论坛、Doom新闻组,他和玩家们一起讨论最新的游戏模式、比赛、趣闻。对于外面的世界而言,罗梅洛就是id。

这甚至变成了罗梅洛的日常工作,id其他人没有兴趣去陶醉于媒体或玩家的追捧。杰伊接受过一些采访,但他是id的商务主管,那是他的工作。媒体正试图找一个Doom上帝来作封面人物,他们发现,背上印着“制作者”字样的罗梅洛再合适不过了,而且,就像艾德里安和卡马克等人都乐于承认的那样,罗梅洛的确很擅长这个角色——他有趣、随和、精力充沛。自从看到戴夫行走在马里奥世界里的那一刻起,罗梅洛就是id的啦啦队长,现在,他四处奔走,为id造势,但他不是作为id的所有者,而是作为世界上最狂热的id迷。

罗梅洛造势时就像在玩死亡竞赛:自信是不够的,要自负,心细是不够的,要胆大。罗梅洛很快就让所有人意识到,君临天下般的id究竟是如何伟大,以及它还将变得多么伟大。“我们的计划就是,”他在网络上发表道:“让全世界的游戏制作者都用上NeXTSTEP,让所有人都连到因特网上,让每一个人都拥有一辆法拉利。”他还尖刻抨击了流行的或即将流行的操作系统:“DOS(磁盘操作系统:Disk Operation System)早该入土,那些什么DOS扩展系统无一不是开发者的噩梦,视窗更是垃圾。”

1994年的这个夏日,罗梅洛出现在奥斯汀这家游戏店里,此时的他正是如日中天的游戏上帝。在玩家的欢呼声中,一位记者挤到罗梅洛身边,问他为什么亲临这次比赛现场,罗梅洛不可一世地说:“我们是来夺冠的。”其他玩家的比赛开始了,他和肖恩也找到两台机器坐了下来。大厅里一片安静,只有选手敲击键盘的声音,但当id的家伙们上场时,气氛被打破了。

罗梅洛用霰弹枪击中对手,然后大喊道:“爽不爽?小杂种!”那个孩子怯生生地看了看罗梅洛,这样的眼神肖恩再熟悉不过了,他第一次被罗梅洛在对战中辱骂时也是这种眼神,这是从来没在对战中经受过口头攻击的玩家所特有的眼神。但现在肖恩已经成长起来了,他发射出一连串的炮弹,然后回应道:“吞了它!你这只死猴子!”玩家们面面相觑。但是,没有关系,他们也会成长起来的。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

罗梅洛开着法拉利一路高歌回到达拉斯。二十六岁的他,生活一片光明。父亲和继父曾让他身心破碎,但他找回了自我,经过这么些年的奋斗,他终于有了今天,他真正成为了王牌程序员、未来富翁。他和双亲的关系有了很大改善,他的父母也学会了重新看待罗梅洛儿时的任性和对街机的痴迷;他有一个他为之深爱着的妻子,贝丝;他也深爱着远在加利福尼亚的两个儿子:迈克尔和史蒂文(Steven),他们现在能以这位父亲为荣了。罗梅洛,实现了他的梦想。

一天晚上,在id的666套房里,罗梅洛决定找人一起分享心中的喜悦。他走进卡马克的房间,而他只看到这个拍档和往常一样坐在计算机前,手边放着罐低糖可乐。自从Doom发布后,卡马克就着手把Doom移植到其他游戏平台上,譬如雅达利的美洲虎(Jaguar)和世嘉的一款新机种,id将为此得到丰厚的回报,光是雅达利的开价就是二十五万美元。但让卡马克感兴趣的不是钱,而是这重新披挂上阵的机会。

这,才是卡马克的最爱:工作,忘我地工作,挑战自己的智力。忽如其来的财富和名望并不是对他毫无影响,他最近回了趟家看望父亲,他告诉这位堪萨斯城著名的新闻主编,他很快就会比他还出名;和罗梅洛一样,卡马克与双亲之间的关系也变得和睦宁静,他们现在尊重并支持他的事业,他母亲在闲暇时还会玩玩《基恩》;卡马克甚至和他常去的那家中餐馆老板的女儿开始了约会。但不管生活发生什么样的转变,卡马克在绝大部分时间里还是呆在id,没有任何事物能像底层编码那样让他愉悦,他潜心磨练着自己的技艺,他知道,到他开始创作下一个引擎时,这些积累都会派上用场的。

但是,当卡马克在办公室里忙碌时,他发现,罗梅洛不见了,他现在整天忙于死亡竞赛、访谈、和玩家在网上交流。某样东西正在无可挽回地悄然改变着。卡马克还发现,公司的项目已经受到了影响,Doom2比预定进度落后了许多。当罗梅洛作为公司的摇滚明星在外面交际应酬时,他答应制作的关卡还是一片空白,事实上,id已经在依赖于其他的关卡设计师——桑迪·彼得森和新员工:美利坚·麦基(American McGee),他们俩完成了Doom2的大部分关卡,在总共三十二个关卡中,卡马克注意到,只有六个出自罗梅洛之手。

罗梅洛自有解释:慢工出细活,他在每一个关卡上都花了大量的时间。但卡马克怀疑另有原因:罗梅洛失去了他的专注。除了那些访谈和死亡竞赛外,罗梅洛现在还是Raven公司下一个游戏的监制。他曾经告诉卡马克,他要把引擎的经济效益发挥到极致:“我们用这技术多做几个游戏吧,那样可以赚到更多的钱,把引擎授权给Raven,他们很棒,他们肯定可以制作出精彩的游戏,然后我们来发行。”卡马克同意了,却毫不热心:要把公司做到多大才算够?但罗梅洛不只是为了把公司做大,他还有其他动机——乐趣。罗梅洛热爱游戏,他活着就是为了玩游戏,而他现在找不到比Doom更好玩的游戏了,和Raven的合作将给他带来新的游戏。这天晚上,在卡马克的办公室里,罗梅洛向卡马克描绘了id的新生活:该是享受成功的时候了,不再有压榨模式,不再有加班熬夜,“不再有死亡进度。”他开心地说。

卡马克看着屏幕上闪烁的光标,一言不发。曾经有多少夜晚,罗梅洛就坐在他身边,和他一起完善引擎,和他一起调试排错,直到东方渐白;今夜,卡马克目送那印有“制作者”的背影消失在门口。

第十一章:雷神们

每个人都有无法实现的梦想。或许是那梦想需要太多时间和金钱,譬如开跑车驰骋,驾飞机翱翔;或许是那梦想太过于离谱,譬如与异形进行星球大战,与吸血鬼拼个刺刀见红;或许是那梦想会违反法律,譬如痛殴老板,夜半尾行。但不管能否实现,它们总盘旋在你脑海里,每一天,让你浮想连翩。这就是为什么会有一个上亿美元的产业来帮助人们实现各种光怪陆离的白日梦;这就是为什么,会有电子游戏。

当然,电子游戏并不能让人们真正进入那些梦境,它只能让玩家体验到游戏制作者模拟出来的梦境。这模拟是建立在各种数字设备之上的,譬如计算机、电视、掌机。虽然玩家只是通过眼睛、耳朵、手指来感受模拟的效果,但当他在太空中摧毁外星军事基地,或是在高速公路上左冲右撞时,他会觉得他的确就在那里,他仿佛冲破了皮囊的桎梏,抛开了凡尘的戒律,忘却了世俗的烦恼。我们本只是打不开天穿不过地的囚徒,是游戏,让我们进入了一个个美丽新世界;我们本只是时间老人掌心里渐渐消融的雪花,是游戏,让我们经历了一次次轮回与新生;我们不能没有游戏。

早在古希腊时,人们就已经意识到了游戏的重要性。柏拉图(Plato)说过:“每一个男人和女人都应该参与到高尚的游戏中来,以拥有一个不同于当前的心灵。”五十年代,人类学家胡安·津加(Johan Huizinga)写道:“游戏……是一项意义重大的活动,它超越了本能需求,它赋予行动以生存之外的意义。所有的游戏都有它的意义。”他还给人类下了新的定义:游戏的人(Homo Ludens: Man the Player)。马歇尔·麦克鲁汉(Mashall McLuhan)在六十年代写道:“没有游戏的社会就如同一群行尸走肉……游戏是大众艺术,是集体艺术,是人类各种文化背后源动力的社会表象……通过某种文化里的游戏,我们可以在很大程度上了解到这种文化背后的人……游戏就像是迪斯尼乐园或乌托邦幻境那样的人造天堂,我们通过它来表达与完善我们日常生活的意义。”

最迷人的乌托邦幻境无疑是“全息成像台”,这个《星际迷航》里的虚拟世界模拟器正慢慢从梦想变为现实。尼尔·斯蒂芬森在他1992年的小说《雪崩》里描绘了“变体”,类似威廉姆·吉布森在1984年的小说《神经漫游者》里提到的“电脑空间”。1994年,日渐成熟的因特网已可以把人们连接到那样的空间里。虚拟现实游戏的肥皂泡开始在学术界里飘舞,那是一些不成熟的机器,通过巨大笨拙的头盔和五美元,玩家可以进入到一个主视角的多边形世界。新一代程序员们开始致力于“全息成像台”的实现,他们为此牺牲了生活、牺牲了青春。就像卡马克说的那样:“这是一种使命感,我们必须实现它。”他的贡献将是Quake。

id每制作一个新游戏之前,卡马克都会先告诉大家下一个图像引擎能做些什么。这次,当他描述起他心目中Quake的技术时,罗梅洛的血液沸腾了:这个游戏他们已经谈论了好多年。Quake(雷神)源自于他们以前玩的《龙与地下城》游戏,卡马克笔下的这个角色持有一把威力巨大的雷神之锤,它可以轻易地把房屋夷为平地,此外,雷神头上还悬浮着一个超自然的地狱魔方。id早在《基恩》时代就尝试过制作关于雷神的游戏,但很快放弃了,因为他们觉得那时的技术还不够强大,做不出预想的效果。现在,卡马克说,时机已经成熟了,一个最令人信服的、最让人沉浸的三维世界已经在技术上成为可能,这将是第一个支持若干玩家在因特网上组队厮杀的快节奏主视角游戏。它不光是id,也将是世界,的一次巨大飞跃。

罗梅洛的灵感如山洪般爆发:“全三维的引擎?天!那里面可以有森林,还有……那个我们在做《基恩》时就提起过的——雷神之锤,它将是Quake的主力武器,还有地狱魔方,可以让你穿梭时空的那个!它就盘旋在你头上,而且,它是有灵气的!它有自己的思想和个性,你会觉得它是个特立独行的物品,譬如,它的快乐是建立在别人的痛苦之上,当你用它攻击敌人,给对方造成伤害和痛苦时,它就会很开心,从而,它就会帮助你,譬如为你疗伤,或是把你传送到另一个地方;但如果你忍气吞声、逃避战斗、苟且偷生的话,它就只能从你身上汲取它所需要的痛苦,并终将离你而去,不知何时才会重回到你身边。”

罗梅洛无法克制内心的激动,他一定得把这消息告诉id迷们。“我们的下一个游戏将把Doom轰到九霄云外,”他敲道:“比起《雷神:正义之战》(Quake: The Fight for Justice),Doom太差劲了,它就像《乒乓》一样,当然,比起《德军总部3D》,Doom是前进了一大步,但Quake将在Doom的基础上前进更大的一步。”罗梅洛按下回车,把消息发送到了因特网上。

但是,id现在连Doom2都还没有完成,像这样和别人谈论Quake显然为时过早。“罗梅洛在外面到处跟人说我们在做什么,”艾德里安向凯文和杰伊抱怨道:“而我们自己知道,其实这些想法都还不成熟,随时可能有改变,我们不应该让外人过早知道我们的计划。罗梅洛这么做只是因为他喜欢引人注目,这个家伙一贯如此。”

由于Doom的延期,杰伊曾在无数场合被玩家们责难,他完全理解艾德里安的担心,他找到罗梅洛,告诉他:“不要再跟别人谈论Quake,它还只是在我们脑海中,如果最终结果和你现在说的不一样,你这样做反而对我们不利。”罗梅洛立刻答应了,但他很快就把杰伊的话抛到脑后。“Quake不会只是一个游戏,”他告诉《计算机玩家》(Computer Player)杂志:“那将是一场运动。”——他该适可而止了。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1994年9月的一个晚上,Doom2已接近完工,罗梅洛正坐在计算机前对游戏最后的音效进行调整,游戏的最终老怪名叫“原罪化身”(Icon of Sin),它会从额头中央喷吐出各种妖魔鬼怪,玩家必须干掉它才能通关。

罗梅洛进入测试模式,这样他可以在地图里快速移动,而不受墙壁的阻碍。就当他穿过“原罪化身”时,他手足冰冷地停了下来:“我刚才是不是看到了我自己的脸?”啊,没关系,也许是太劳累了,应该是幻觉。罗梅洛耸耸肩,继续工作,但没过一会,当他再次来到老怪身后时,他觉得好像又看到了自己的脸,“真是怪异。”他慢慢的顺着来路往回走,让他震惊的画面出现了:一个鲜血淋漓的首级挂在木棍上痛苦地抽搐着,而那头像正是罗梅洛的照片。“去你妈的!”罗梅洛大怒。

他走到原罪化身的正面,用火箭筒朝它开火,炮弹穿过它,直奔向隐藏在它身后的一个小房间,正击中罗梅洛的头像——啊哈,罗梅洛知道这是什么意思了:玩家们以为他们在射杀原罪化身,而其实他们是在射杀罗梅洛。罗梅洛就是原罪的化身。

第二天早上,大家都知道罗梅洛已经发现了那个复活节彩蛋,而且他还又加了一个新的彩蛋在游戏里。艾德里安和凯文调出最后一关,开始朝老怪开火。忽然,一阵沉闷的声响传来,就像是犹大牧师某首歌的反转,含糊杂乱,但倒过来听的话,则清晰无比:“要赢得游戏,”它咆哮道:“你就要先干掉我——约翰·罗梅洛!”又一阵猛烈的炮火后,原罪化身死去了。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1994年10月10日,Doom2来到了聚光灯下。聚光灯(LimeLight)是用纽约市一幢旧教堂改建的夜总会,今晚,它更被装扮得哥特味十足,因为这里将要举行“世界末日”(Doomsday)新闻发布会。GTI雇了一家名为TSI的公关公司来把Doom2介绍给主流媒体,他们从两百万的市场推广预算里拿出很大一部分,用于把夜总会装点成一个布满恶魔和血腥的地狱府邸。正门旁的投影机照射出游戏中的妖魔鬼怪,冰冷刺骨的乐曲回荡在大厅,教堂正中布置好了一个巨大的竞技场,赶来参加发布会的玩家们已经投入了对战。

《华尔街日报》(The Wall Street Journal)和《乡村之声》(The Village Voice)等大牌媒体的记者们满怀敬畏和不解地鱼贯进入会场。近来,随着Mosaic作者成立的网景(Netscape)公司发布最新的万维网浏览器Navigator,计算机和因特网越来越频繁地见诸于报端。尽管很多这些记者都对网络世界有所了解,也听说过Doom,但他们从未如此真切地感受过Doom的奇妙。这样的阵势甚至连TSI里负责这次发布会的奥黛丽·曼恩(Audrey Mann)都没有见过,她的TSI长久来一直为高科技界的两家重量级公司:IBM和SONY做公关工作,但id的东西显然和他们完全不一样,id带来了各种新的公关术语:死亡竞赛、得分(frag)、模式,TSI还不得不为如何正确表达“牛B”展开讨论,或者是:“‘屠戮’这个词还有没有什么其他温和点的说法?”而当他们真正来到聚光灯夜总会时,他们意识到,这整件事情不像他们想的那么简单。“这不再是游戏的公关促销,”奥黛丽说:“这发布会本身就是一个游戏。”

在那个晚上,事态变得渐渐明了:Doom2不止是一个游戏,而是一场运动。那些曾对杰伊的电话置之不理的记者们现在想尽办法和id套近乎。来参加发布会的还有各种抗议者。就像《天生杀人狂》(Natural Born Killers)和《低俗小说》(Pulp Fiction)等暴力电影一样,Doom也被看做是毒害美国青少年的一大威胁。杰伊发表讲话时,一个男人站起来高喊道:“你们给孩子们玩暴力游戏,你们应该感到可耻!”会场立刻鸦雀无声,大家看向杰伊。

“这位先生,”杰伊冷静地告诉他:“我有两个孩子,我不会做任何伤害他们的事情。我们制作的游戏,在某种程度上来说,只是互动版的《三个臭皮匠》(Three Stooges),如果你不用那么狭隘的眼光来看待它,那么你会发现它里面的幽默成分远大于暴力成分。”但那个抗议者仍然在喋喋不休地叫嚷着暴力和撒旦如何如何,直到坐在杰伊旁边的肖恩凑到话筒前冲他喊道:“小子!吞了它!”会场里轰然大笑。看起来,所有人都站在id一边。

在这次首发式上,零售商们共购买了六十万份Doom2,这个数字已经使Doom2成为了有史以来卖得最好的游戏之一,而且,首季度的存货在第一个月就被抢购一空。随后,主流媒体开始了连篇累赘的Doom报道,那些错过了第一波Doom风潮的人这次集体赶起了时髦,而那些一开始就留意到Doom的人则忙不迭地把自己打扮成富有远见卓识的先驱者。

各路记者们一再重复谈论着Doom那令人沉醉的效果、营销模式、暴力血腥、以及id软件——美国梦的样板。“这是你能体验到的最逼真的虚拟现实环境。”——《芝加哥太阳报》(Chicago Sun-Times),“虚拟的屠杀和真实的盈利”——《纽约时报》的标题,“Doom经济学(Doomonomics)”——《经济学人》(Economist)的标题,这篇评论还从学术上分析了“那血淋淋的游戏是如何给它的作者带来巨大的财富……这个神话告诉我们,明天的信息经济将会给世界带来多么大的改变。”《红鲱鱼》(The Red Herring)杂志则对id大为惊叹:“巨额的风险资本和民间资本为了能从id的锅里分一勺羹而挤破脑袋。”——但id纹丝不动,独享所有利润。

当然,那几百万真正生活在Doom里的玩家根本不在乎这些门外汉如何东拉西扯,他们只想回敬这些记者几个大火球,玩家们清楚,Doom最吸引人的地方在于——死亡竞赛。而且,已经有人想到把死亡竞赛作为一项事业来经营,这个人的名字叫狄万戈·鲍勃(DWANGO Bob)。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

狄万戈·鲍勃,原名鲍勃·亨特利(Bob Huntley),这个三十四岁的德克萨斯人言行举止都像极了伍德斯托克摇滚音乐节(Woodstock)的主持人威维·格雷(Wavy Gravy)。鲍勃很早就进入了IT领域,他在休斯顿一带的加油站安装自助式柜员机,但这项业务只能做几年,他随后开始寻找新的经济增长点,这时,他看到了Doom。

1994年的头几个月,鲍勃的雇员们每天都在办公室呆到凌晨两三点,他们跟家人说是在加班,而其实他们是在玩Doom。鲍勃的拍档,金·吉姆布莱尔(Kee Kimbrell)也成了一个Doom瘾君子。一天晚上,鲍勃把金拖到一边,正色道:“如果明天我再发现办公室的机器里有Doom,你就卷铺盖走人。”金不敢造次,连忙把所有机器上的Doom都换了个名字,以为这样就可以瞒过老板。但当鲍勃发现真相的时候,他禁不住想:“他们居然对一个游戏如此着迷,也许,这里面的确有些不同寻常之处。”鲍勃坐下来玩了一圈,他的人生从此改变了。

那激动人心的东西,鲍勃发现,是面对面的战斗,是通过局域网和活生生的对手厮杀。在因特网上略加搜索,鲍勃就找到了不少志同道合者。Doom死亡竞赛主宰了人们的生活:玩家们用办公室的网络在周末对战;他们把小孩从地下室里撵走,以搭建起自己的竞技场;他们一玩就是几个小时,至少有一个玩家在某次马拉松式的对战中,仅靠小蛋糕维持体能,试图坚持不离开桌椅,他最终拉在了裤裆里。

如果有计算机服务器可以像社区篮球场那样让玩家们方便地和素不相识的人进行比赛,鲍勃和金思索道,而对手是在另一间屋子,另一个州,甚至另一个国家,那会是多么不可思议啊!但问题是,Doom只支持局域网,以及串口直连,或调制解调器互连,也就是说,如果两个分别坐在自己屋里的玩家想对战的话,他们中的一人必须要拨号连上另外一人的机器,连接建立后,他们就可以开始游戏。金看向鲍勃:“我想,我们可以做一个通过电话线连接的服务器。”

鲍勃知道这是个发财的好机会:“行,我给你六个礼拜,如果你能弄出来,那我来负责向id介绍我们的产品。”鲍勃在说大话,其实他和id八竿子打不着边,在他看来,id的小伙子们跟他是德克萨斯老乡,应该比较好说话。但是,id让他失望了:鲍勃打过去的电话和其他人一样,石沉大海。五个星期后,金骑着车赶来,他气喘吁吁地告诉鲍勃:“行了,你等十分钟。”

鲍勃坐在他的机器前,金在另外一个房间噼里啪啦敲着键盘,十分钟后,鲍勃启动程序,他看到,金做出了他们想要的东西:多人游戏的各种复杂设置都集中到了一个简洁的界面里,玩家可以拨号连到服务器上,进入聊天室,然后和其他拨号进来的用户开始Doom对战。金笑眯眯地说:“好了,我们可以去找id了。”

鲍勃皱了皱眉,告诉金:“id没有理我,天哪,他们根本不接电话。”他甚至还尝试了传真、邮件、电子邮件,但统统行不通。

就在他们觉得希望渺茫的时候,鲍勃看到了一篇文章,里面提到即将在纽约聚光灯夜总会举办的“世界末日”发布会。鲍勃立刻拨通了那家公关公司的电话:“我必须要参加这次活动,我有一个非常好的点子要告诉id。”电话那头TSI的人告诉鲍勃,四面八方的人都想参加这次活动:“忘了它吧。”但鲍勃好言好语跟他死缠烂磨,那人最终答应了他:“好吧,如果你能从休斯顿飞过来,我也许可以把你弄进去。”鲍勃挂上电话,告诉金:“出发!纽约!”

鲍勃和金预订了飞行常客打折票和新泽西一家廉价旅店的房间。他们的自助柜员机业务现在已经是奄奄一息,公司账面上的余额所剩无几,这次,为了所谓的狄万戈:广域网拨号游戏业务(DWANGO:Dial-up Wide Area Network Games Operation),他们押上了全部家当。发布会开始前几小时,他们终于赶到了聚光灯夜总会,在门口,TSI的人递过来两件黑色T恤:“快穿上!”

T恤正面印着Doom的铁血标志,背面是“参赛者”三个字,鲍勃和金勉强把它套到身上。TSI的人告诉他们,进入会场的惟一办法,就是扮做Doom比赛的选手。鲍勃和金往四下里一看,才发现周围全是穿这种T恤的人,只不过,其他人都是年纪只有他们一半大的孩子。鲍勃的喉咙动了动——没错,他和金也玩过Doom对战,但比起这些骨灰级的玩家,他俩只是稚嫩的菜鸟,而现在,他俩就要和这些摩拳擦掌的高手们在台上——在全国的媒体面前——过招?!

鲍勃和金谢过TSI的接待人员,然后立刻钻进了街对面的酒吧。一会后,他俩蹒跚着回到了夜总会的门口,TSI的人一看见他们就喊道:“快!别人都已经排好队啦,快进去!”鲍勃是第一批出场的,他在几分钟内就被修理得清洁溜溜,随后上阵的金也没比他好多少。游戏结束,该办正事了。鲍勃和金发现了id的CEO:杰伊,而他只是扫了一眼这两个满嘴酒气、身材发福的中年人,告诉他们:“没时间,没兴趣,请让一下。”然后就消失在了人群里。

鲍勃二人垂头丧气地往门口走去,就在这时,金看到了一个身穿“制作者”T恤,留着黑色长发的人——罗梅洛!他俩紧张地等待着时机,然后走近罗梅洛。“我们编写了这个软件!”金急切地说:“你可以拨号连入一台服务器,然后和其他玩家对战!给,这是惟一的拷贝,千万别弄丢了!”

派对结束后,罗梅洛跟杰伊讲了这张磁盘的事。狄万戈(DWANGO)并不是什么新点子,id自己也曾想到过类似的拨号服务器,但他们并没有去做,因为,Quake将内建对因特网多人游戏的支持,他们想通过一个新游戏来带动这次革新。但现在杰伊有了新的考虑,他不想看到这件事情被一些不知所谓的人拿去做,尤其是在现在——连美国在线和时代华纳这些大公司都在不断地找id合作。“那么,”罗梅洛说:“我回头花几分钟看一下这张盘上到底有什么东西。”

罗梅洛在德克萨斯的家中插入磁盘,程序连向一个休斯顿的号码,当调制解调器的嗡鸣声结束时,屏幕上出现了金发过来的消息:“来吧,我们试着玩一把。”接下来发生的事情就是,金在休斯顿,罗梅洛在达拉斯,两人在游戏里开始了厮杀。罗梅洛抓起电话就给金打了过去:“太他妈的酷了!我要的就是这种东西,我想在任何时候都可以找人对砍,不管多晚,但我又不想半夜三点把朋友吵醒,告诉他:‘嗨……想不想死两回?嘿嘿!’那样太傻了,我要一周七天一天二十四小时都可以找到人一起玩,我要的就是这个东西,我可以直接拨号,然后开火!”

卡马克和其他人对此都没兴趣。在卡马克看来,这只不过是罗梅洛的一项新娱乐——就像媒体的访谈、Raven的监制、没日没夜的对战一样,那只会使他更加分心,从而忘了他的本职工作:制作游戏。但罗梅洛认为,如果在线游戏得到普及,那么Doom社群将更加壮大,这对id只会是好事。

在杰伊和狄万戈·鲍勃谈妥20%的提成后,罗梅洛就把所有时间都投入到了狄万戈上,他计划在《Heretic》的试玩版里带上它,那是他为Raven监制的一个游戏。1994年12月23日,罗梅洛拨通了鲍勃和金的电话:“我马上就要把它传到网上了,你们确信能应付得了吗?因为一旦发布,它就会让你们无法招架。”罗梅洛这次说对了。

狄万戈的消息很快传遍了Doom世界。到1995年1月的时候,已经有一万名玩家使用了这项服务,他们每人每月付费8.95美元,然后就可以连接到鲍勃和金架设的服务器上展开厮杀,这些玩家有的来自意大利,有的甚至来自澳大利亚。按照这个比例,一台狄万戈服务器就可以带来一百万美元的进账,他们必须扩张,而且,对于这种业务,扩张并不是什么困难的事。狄万戈服务器其实就是一台计算机,带上几十个调制解调器,再拉上几十根电话线。他们要做的事情就是购买这些部件,然后到全国各地找人加盟,把机器放在他们办公室里或家里。

鲍勃、金、麦克·威尔逊(Mike Wilson)——艾德里安的儿时伙伴,开始了走遍美国的狂欢之旅:架设狄万戈网络。这是一场野火燎原般的运动,任何人只要付三万五千美元就能成为狄万戈的代理商,并拥有一台架设好的服务器,然后就可以等着数钱了。“那是,”麦克说:“万无一失的生钱机器。”

律师、程序员、音乐家,各种各样的人,甚至包括艾德里安·卡马克,都加入了狄万戈网络。它遍布全国各地:在纽约的某个阁楼里,在西雅图的某套公寓里,在圣何塞的某间仓库里。他们头四个月就架设了22台服务器。通常,他们先到车站卸下机架和线缆,再到某幢房子里把它们组装起来,然后走出门,怀揣三万五千美元——现金。一天晚上,他们在脱衣舞夜总会花掉了一万美元,舞娘们对这些出手阔绰的家伙大为好奇,据说这些人做的是“死亡竞赛”生意,不管那是什么粉,她们琢磨着,它一定很带劲。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

随着死亡竞赛的风靡和id知名度的提升,Doom2不止是打破了而是征服了零售市场。罗恩·柴莫威兹和GTI高兴地看着Doom2在销售排行榜上直线上升。Doom2面市几个月后,罗梅洛和杰伊到一家银行的临街柜台去存他们的第一笔版税,出纳员看到数字后几乎晕倒在地,那上面写着“五百万”,她回过神来后,不禁犯起了嘀咕:这两个开法拉利的家伙没准是什么黑帮里的。

当罗梅洛再次回到奥斯汀那家游戏厅时,玩家们都学会了互相大骂并且敲墙捶桌子。死亡竞赛现在是一种生活方式。人们互相喊着:“吞了它!”或者是:“干你个死猴子!”地上到处是砸碎的键盘,扯断的鼠标,一个输了的家伙甚至用拳头把墙砸得陷了进去。就在这届比赛里,罗梅洛首次在他自己制作的游戏中尝到了失败的滋味。

但那绝不是最后一次。狄万戈和Doom2的成功使罗梅洛热情高涨,他随时拖着肖恩一起鏖战。终于有一天,卡马克受够了,他烦透了罗梅洛整天这样浪费时间,他烦透了那些尖叫、辱骂、砸墙,和不时飞到他门口的破键盘。于是,背着罗梅洛,卡马克策划起他的报复。

第二天,肖恩雄赳赳气昂昂地走进罗梅洛房间,问他敢不敢来一把。“主耶稣啊,”罗梅洛说:“昨天我才把你打得满地找牙,你还那么神气?来啊!我随时奉陪!”

大家都围聚过来,罗梅洛打开可乐喝了一口后就进入游戏。他在地图里四处追逐肖恩,但每每差之毫厘,相反,肖恩却如有神助,他总能飞快地转到罗梅洛身后,然后朝他脑袋就是一枪。“去你妈的!”罗梅洛大骂道:“这个鸟鼠标怎么回事啊?!”他狠命在桌上拍着鼠标,结果不小心碰翻了可乐瓶。“噢!该死!”

大伙发出一片笑声。“怎么了?”罗梅洛一边忙着擦裤子,一边问。大伙告诉他,这是设计好的,卡马克在肖恩的机器上加了条秘技,只要敲几个字母,肖恩就能以十倍的速度在地图里飞奔。罗梅洛四处扫视,不出所料,他看到了卡马克,就站在走廊里。卡马克很少笑,但在这一刻,他看上去显然很开心。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

如果说死亡竞赛是对工作、家务、压力、劳累等事物的一种解脱,那么,这种解脱是卡马克所不需要的,甚至是无法理解的。事实上,他从未真正体会到所谓的娱乐休闲究竟有什么乐趣,他看到电视上人们出入酒吧、结伴郊游、度海滩周末,所有这些对他都毫无吸引力。显然,这世界上太多人并不喜欢自己从事的工作。

卡马克清楚地知道,他喜欢的事情就是——编程,他系统地安排着生活,以便把大部分时间都用于此。从制作Doom时起,他就决定开始调整生物钟,以达到一种更孤寂更专注的境界,以避开罗梅洛的尖叫,避开记者的电话,避开所有这些日常生活中使他分心的事物。他开始强迫自己每天睡觉前多熬一个小时夜,然后第二天再晚一个小时到办公室。到1995年初,他养成了他觉得最理想的作息规律:下午四点到公司,凌晨四点离开。为了Quake,他得全神贯注才行。

而卡马克很快就意识到,他所面临的挑战远比他所预料的艰难。他的目标是创造因特网上的真三维世界,项目之初,他和往常一样收集和阅读了大量的研究资料,他花了几千美元购买书籍和论文,但所有这些都只是纸上谈兵的东西,还从未有过计算机程序可以模拟出一个交互的、实时的、快速的、真三维的游戏世界,要实现这样的虚拟体验,不光要耗尽他的才能,还要榨干当前PC机的性能。更糟的是,在这紧要关头,卡马克发现,他一直以来的战友,罗梅洛,不见了踪影。

当然,这只是迟早的事,卡马克想。尽管他在《软盘》刚认识罗梅洛时认为他在编程方面更为优秀,但卡马克很快超过了他。后来,罗梅洛主动担负起了其他工作:编写他和汤姆用来建造关卡的外部工具,考虑游戏的设计,琢磨如何才能使id主宰世界。在Doom的制作过程中,他是卡马克最理想的合作者,他可以坐在卡马克身边,以内行的眼光试验新引擎,并提出各种建议。而Quake,卡马克知道,他既需要一个和他一道制作引擎的程序员,也需要一个能试验他早期成果的伙伴,换了以前,罗梅洛能同时胜任这两个角色,而现在,Doom在给id带来成功的同时,也给罗梅洛带来了各种分心的事务,在卡马克看来,他已无法胜任这其中任何一个角色。

卡马克心目中已经有了合适的人选。在编程方面,他首先想到的无疑是计算机图形学的泰斗级人物:迈克尔·亚伯拉什(Michael Abrash),正是他的书,指引着卡马克和罗梅洛完成了他们早期的游戏,从那时起,亚伯拉什就成为了程序员们为之仰止的神话。最近几年他在微软工作,协助视窗NT操作系统的开发。但就像所有其他致力于图形编程的程序员一样,他清楚地知道,最动人的成果只能是诞生于游戏领域,而在游戏中,最让他赞叹的无疑是Doom。

去西雅图看望母亲时,卡马克顺道请亚伯拉什共进午餐,并向他介绍了Quake的计划:那就是使传统的电脑空间成为一个永恒的网络世界,这世界将有着真三维的观感,而且,它将像现实世界一样客观存在,只等待着我们加入或退出。亚伯拉什的心跳加快了,和其他图形领域的程序员一样,他也经常在理论上描述虚拟世界,当他读到《雪崩》里的“变体”时,他想,我已经可以实现这里面的80%,至少在理论上。而现在,一个年仅二十四岁,但却充满信心的年轻人就坐在他面前,谈论着使它变为现实,亚伯拉什毫不怀疑他有这个能力。随后,亚伯拉什聊起说他在做完一个项目后总会怀疑自己是否还能百尺竿头更进一步,听到这话,卡马克皱了皱眉:“我从没怀疑过,嗯。”

但当卡马克邀请他加入id时,亚伯拉什说他还要再考虑一下,因为这会影响到他的家庭生活。几天后,亚伯拉什收到老板比尔·盖茨的电子邮件,盖茨听到了这件事情的风声,想和他谈谈。这让亚伯拉什颇为震惊。要知道,和盖茨谈话就相当于参见教皇一样,而id已经进入了这个教皇的视野——为了把id的游戏移植到视窗操作系统上,他麾下的微软程序员们曾和id打过交道。但id只是在德克萨斯的一个小公司,盖茨告诉亚伯拉什,他们能开出的条件跟微软根本没法比;而且,微软还将交给亚伯拉什一些有趣的计算机图形学研究项目;另外,曾经有个微软的员工跳槽去了IBM,结果八个月后又回到微软。“你也许不会喜欢那里的,”盖茨总结道。

在卡马克和盖茨之间,亚伯拉什选择了卡马克。在他看来,id的吸引力是微软根本没法比的。当一个三维的网络世界呼之欲出的时候,当虚拟现实技术即将有革命性突破的时候,他希望自己能置身其中,他希望自己能参与这历史性的事件。而且,卡马克的邀请触动了亚伯拉什:卡马克看上去很孤单,没有知音。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

卡马克继续扩充着他自己的队伍,他留意到了一个正为实现梦想而不懈努力的关卡设计师:美利坚·麦基。卡马克和麦基的友谊并不是通过游戏建立起来的,而是通过他们的另一项共同爱好:汽车。卡马克某天在他住处附近偶然结识了麦基,这个身材削瘦胡须零乱的大烟枪当时正弯着腰把头埋在引擎盖下。

麦基讲起话来如同飚车,呼的一下出去,然后又呼的一下回来。不光是言谈举止,麦基体内流淌的血液似乎也是某种奇怪的汽车燃料。他才二十一岁的时候,就经常和朋友开玩笑说要写本扭曲的自传,并一语双关地把它命名为《美利坚的成长》。出生在达拉斯的他不知道自己的父亲是谁,他母亲是一名刷墙工,脾气乖戾的她以一己之力把麦基抚养大。她这个独生子很早就表现出了惊人的创造力,当然,也可以说是古怪:他在学校里会眉飞色舞地和臆想出来的朋友聊天,他会在空气中比划出一道门,然后跨进去,假想自己由此进入了另一个世界,他在数学和自然方面也很有天赋,并很快对计算机编程产生了兴趣,最终他进入一所职业高中学习计算机专业。

这位母亲在给麦基走马灯般换了好几个继父后,终于和一个觉得自己是女人的男人建立了稳定的关系。麦基有一天放学后走进家门时,仿佛走进了一场噩梦:家里空空荡荡,只有他的床、书、衣服以及卡曼多64计算机还在原处——为了给男朋友做变性手术,麦基的母亲变卖了所有家产。那一年麦基十六岁,此后,为了养活自己,他只有从高中退学,打起各种各样的零工,直到进入大众汽车公司的维修部。在卡马克看来,麦基是个和他一样对计算机和汽车都感兴趣的朋友,当时Doom才发布不久,卡马克问麦基愿不愿意到id来做技术支持,麦基毫不犹豫地答应了。

当麦基走进id办公室时,他不由得被那里的气氛所震撼,他可以清晰地感受到一股动力:这些叛逆的年轻人就是这个时代的弄潮儿。尤其是罗梅洛,他的作品总是散发着一股魔力,他就好像是集建筑师、工程师、灯光师、设计师、艺术家于一体的全才,他似乎天生就知道如何才能给玩家以惊奇,如何使游戏峰回路转,然后再柳暗花明;不管怎么说,他就是酷——住着大房子,开着法拉利,总嘻嘻哈哈,不停开玩笑,并且,不像卡马克,他乐于享受名望和财富。麦基和罗梅洛很快也成了好朋友。在id,麦基就像游子找到了停泊的港湾。

Doom2开始时,罗梅洛和卡马克一致同意把麦基提拔为关卡设计师。麦基没有让他们失望,他既像卡马克一样工作起来不知疲倦,又像罗梅洛一样创作起来妙趣横生。随后,他成为了id最耀眼的新星,作为关卡设计师,他的作品不管是从审美性还是从娱乐性来衡量都令人赞叹。在Doom2一个名为Crusher的关卡里,麦基在房间正中放了一个机械恶魔,当玩家走近它时,屋顶上一大片天花板就会像锤子一样碾压下来;罗梅洛觉得这是个绝妙的点子。此外,麦基那不眠不休的劲头也给卡马克留下了深刻印象。Doom2完成时,麦基制作的关卡数量甚至超过了罗梅洛。

Quake项目启动后,麦基不再只是id的天才设计师,他还成为了卡马克最要好的朋友。当罗梅洛忙于他自己的那些杂事时,坐在卡马克身边的人是麦基,他和卡马克一起试验引擎,直到深夜。卡马克开始跟麦基谈起罗梅洛,他现在拿罗梅洛毫无办法,这个人的热情似乎已经从制作游戏上转移到了玩游戏上。

尽管麦基很理解罗梅洛,但为了调节气氛,麦基附和道:“说的是,我也觉得罗梅洛最近做事情很不上心。”但当卡马克听到这话时,他的情绪变了,“这个麦基以为他是什么人?”他绝不是罗梅洛,在卡马克看来,尽管罗梅洛有这样那样的不足,但他仍然是公司里最优秀的关卡设计师,Doom里最棒的关卡出自他的手,Doom2里也一样,没有道理他在Quake里会做不到最好。“罗梅洛是个雷厉风行的大师,”卡马克告诉麦基:“在你真正领教到他的厉害之前,你是不会明白的。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

罗梅洛了解卡马克。他知道,当卡马克在项目之初展开研究时,他没有什么事情好做,他可以去忙点别的,直到卡马克完成新引擎。而且罗梅洛也注意到,麦基已经接替了他的角色:每天陪卡马克坐到深夜。但他没有往多里想——就让麦基去做好了。

因为罗梅洛自己要忙于拓展Doom的版图,狄万戈和死亡竞赛的热潮正一浪高过一浪,Raven制作的《Heretic》大受欢迎,罗梅洛已经开始了续集《Hexen》的工作,他脑海里还有一个宏伟的计划:利用Doom的引擎再推出一款名为《Hecatomb》的续集,合成一个三部曲。此外,他还是另一个Doom类游戏《Strife》的监制,它的制作公司是Rogue Entertainment。

这些游戏都非常符合罗梅洛心目中id的发展方针:榨干引擎里的每一滴油水。卡马克的技术越来越复杂,研究周期越来越长,那为什么不趁这功夫去做些其他项目呢?id不该只是一家游戏制作公司,它可以是一个游戏帝国。尽管卡马克对此持怀疑态度,但罗梅洛觉得《Heretic》的成功已经说明了问题。在Doom成为流行文化的今天,扩展公司业务最快捷的方法就是发布更多的Doom产品,譬如:那不计其数的 Doom模式。

每一套公寓、每一间办公室、每一所学校,都有使用计算机的人,而他们中的许多,现在都在忙于制作Doom模式。成千上万的玩家开始在网上免费发布他们的作品,Doom迷们完全通过因特网互相协作,他们中的大部分都没有见过自己的合作伙伴,甚至没有通过电话。这些虚拟的团队有着自己的名称,譬如“TNT”,或者“无辜者”,成员们有具体的分工,各司其职。

从而,玩家们制作的模式越来越像模像样,出现了很多所谓的“全新”(Total Conversion)版本,譬如建造出电影《异形》中的飞船等等。新的对战模式也层出不穷,譬如在“速冻”(Freeze Tag)里,玩家要试图把敌方全部队员冰冻起来,同时要帮助队友解冻;还有“山大王”(King of the Mountain),最后的赢家是在地图中心的山顶上停留时间最长的人。玩家们把公寓、办公室、学校都搬到了Doom里,英格兰的一名学生制作了照片般精细的三一学院(Trinity College)关卡,还有一个玩家则直接把他的作品叫做“Doom校园”,他介绍道:“为什么,你最要好的朋友是你的计算机?没有人知道……那些人只会嘲弄你……你考虑过自杀,但你知道你不想这么做,应该受罪的是他们,而不是你自己!……你会把他们都干掉!你要把这学校从地球上抹去,就像它从未存在过……也许这就是生活,没有正确也没有过错,这就是你的命运,这就是你的地狱,这就是你的——Doom校园!”

这些模式的初衷仅仅是为了好玩——毕竟,它们只是游戏。但有些人觉得可以把游戏应用到现实生活中。1995年,维吉尼亚州昆蒂冈市,美国海军陆战队模拟训练部的项目员斯科特·巴内特(Scott Barnett)制作了一个名为“Doom陆战队”的模式,里面有穿着军服的敌人、布满铁丝网的战场,以及海军陆战队的标记。这个模式非常适合用来训练士兵们的团队配合,巴内特在征得上司同意后,联系了id。尽管id觉得拿他们的游戏去做真实的军事训练简直就是在开玩笑,但既然有人就是要这么干,那么,id告诉巴内特,他们很荣幸能够通过这种方式来支援国家建设。此后,“Doom陆战队”在网上风靡一时,而且还将被陆战队员们使用若干年。

明尼苏达州一家名叫Wizard-Works的出版商甚至收集起玩家们制作的九百多个Doom模式,在零售市场上推出了他们命名为《D!Zone》的扩展包,它以敢把皇帝拉下马的气势超过Doom2,跃升至排行榜首位,销售额高达几百万美元。这在id造成一阵惊慌,这无疑就是凯文和杰伊一直以来所担心的事情,但这样做并没有侵犯id的版权或许可,id只能以自己的产品作为反击。罗梅洛开始和一些模式制作者们联系,计划发行一部叫《关卡名作》(The Master Levels for Doom II)的官方任务包,此外,他还草草启动了《Doom结局》(Final Doom)的制作,接着,id又把最早共享模式下的注册版以《终极Doom》(Ultimate Doom)为名在零售市场上发行。

战线越拉越长,但一个问题始终盘旋在所有人的脑海里:Quake怎么样了?玩家们早被罗梅洛以前透露的信息撩拨得急不可耐,甚至连麦基、杰伊和戴夫都开始在网上和别人谈论起Quake,一个热心的玩家为此专门建立了名叫“Quake闲聊”(Quake Talk)的网页,里面搜集了所有id员工透露的只言片语。罗梅洛把游戏开发初期的图片放到网上,向玩家们展示这个世界会是什么样:“在图里你可以看到紫红色的天空,”罗梅洛写道:“你可以想像一下那清风拂耳的感觉……这就是游戏运行时的画面,你将在这片天空下战斗。:)”

1995年已经过了一半,而id的办公室里几乎见不到Quake的踪影,工作一片混乱:卡马克和亚伯拉什忙于编写引擎,罗梅洛则把越来越多的时间花到其他项目上,剩下的人群龙无首。新婚不久的艾德里安不愿就这么看着前进的路标左右摇晃,他和凯文,这个他最亲密的朋友和美工同事,开始绘制起各种中世纪哥特式的贴图,以用于游戏中的一段时空穿梭旅程。凯文还着手学习起如何制作三维角色,他们以前游戏里的角色都只是二维动画,艾德里安则被飞速发展的游戏技术弄得心灰意冷,决定不再参与角色制作,凯文肩上的担子更重了。

后来加入id的那些员工们也一样心灰意冷。麦基和其他人都认为Quake的工作已经变得步履维艰:罗梅洛这个项目领导看起来更乐于领导他自己的生活,而不是领导大家制作游戏。当罗梅洛被催促着写一份Quake的设计文档时,他大笔一挥,拿出一份两页纸的草稿,其他人觉得他这是偷工减料,但罗梅洛立刻告诉他们,id从来就不依赖于什么设计文档,id也从来没有过这玩意,id甚至从来没有写下任何东西,惟一干过这事的人叫汤姆,是他的好朋友,那人写完文档后不久就被炒掉了。

大伙开始怨恨起罗梅洛和卡马克。前者现在是一个摇滚之神,后者则是技术之神,其他人都被晾在一旁发愣。几个月过去了,卡马克的引擎依然遥遥无期,《德军总部3D》的引擎只花了他一两个月,Doom的是六个月,而这次已经进行了半年——还望不到头。更不要提他们还曾给玩家许诺过将于1995年圣诞节拿出Quake,都去它的吧,id决定,从现在开始,如果再有人问起下一个游戏什么时候发布,那么id的答复将是:等它完成的时候 (When it’s done)。

第十二章:审判日

亚力克斯·约翰(Alex St. John)是个满头红发、思维敏捷、随和开朗的人,他收到比尔·盖茨关于Doom的邮件时,正坐在他微软的办公室里。据说这世界上共有一千万台计算机安装了Doom的试玩版——这个数字比视窗95的装机量还多,微软花了上千万美元为它这款于1995年8月发布的新一代操作系统做地毯式市场轰炸,他们的广告遍布城乡各地,他们在每一个街角向路人打听:“你今天想去哪儿?®”(Where do you want to go today?®)。盖茨不明白,为什么啊为什么,为什么一个麦斯奎特的小公司,居然能从他手下挖走迈克尔·亚伯拉什,而且仅仅凭借几个游戏就胜过了自己的软件帝国。

在邮件里,盖茨向这位微软图像部门的首席决策师询问,他是不是应该直接把id买下来算了,看到这里,亚力克斯忍不住笑了起来:在1995年,似乎所有人都想染指id。

Doom类游戏充斥了货架,并高据销售榜前列。卢卡斯工作室推出了基于《星球大战》主题的一款射击游戏:《黑暗原力》(Dark Forces);Interplay则发行了一款主视角飞行射击游戏:《天旋地转》(Descent);一家名叫牛蛙(Bungie)的小公司制作了在苹果机上运行的《马拉松》(Marathon);甚至汤姆·霍尔,这个在id时一心想让游戏富有内涵的人,也在为斯科特·米勒的天极公司开发一款名叫《龙霸三合会》(Rise of the Triad)的射击游戏。

Doom已成为了一个文化名词,它出现在电视系列片《急诊室的故事》(ER)和《老友记》(Friends)里,它出现在黛米·摩尔(Demi Moore)主演的电影里,它还被记叙成若干本小说,好莱坞正在制作一部关于它的电影,海军陆战队用它来训练士兵,甚至业界里一贯抵制暴力题材的老祖母:任天堂,也计划把这部鲜血淋漓的大作移植到它们的新主机N64上。而这游戏背后的id拒绝了一切投资,卓尔不群地保持着独立。“我觉得你不大可能买下这家公司,”亚力克斯在给盖茨的回信中写道:“但Doom无疑对我们非常有用。”

自从1992年《德军总部3D》来到微软,亚力克斯就对id的游戏上了瘾。Doom在微软是如此流行,那就像是宗教狂热一般:员工们崇敬这个游戏,不光是因为那令人沉醉的效果,还因为那令人叹为观止的顶尖技术。现在计算机业里的热门词汇是“多媒体”,Doom无疑是这个领域的王者,既然微软想通过视窗95的多媒体特性来一统江山,亚力克斯想道,那么Doom显然可以助微软一臂之力。

但他也知道,在老板盖茨的眼里,多媒体意味着视频,而不是游戏。苹果公司的媒体播放软件QuickTime已经领先了一步,盖茨希望微软能拿出一个类似的产品与之抗衡。亚力克斯不同意盖茨的做法,他争辩道,游戏才是未来真正的多媒体软件,他还指出,英特尔,微软的另一个竞争对手,已经行动了起来,如果微软不想就这么一败涂地的话,它就必须要让世人相信,视窗95是最好的游戏平台。

而盖茨吃过游戏的苦头。1994年圣诞节时,微软发布了一款基于迪斯尼动画片的游戏:《狮子王》(The Lion King),它和视窗操作系统一起,预装到了一百万台康柏(Compaq)公司生产的PC机上。在最后时刻,康柏更换了机器的硬件配置,随后,一百万份游戏拷贝引发了一百万次系统崩溃。亚力克斯看出了问题的关键,那就是没有一种手段可以让游戏在千差万别的机器上安全高效地展现各种多媒体特性,从而,游戏开发者们更倾向于在微软试图废弃的DOS上,而不是微软试图推广的视窗上,进行开发。如果微软想让普通用户们升级到视窗系统,那它首先要做的事是把游戏开发者们赶上架。

于是,在1995年初,亚力克斯带领他的队伍开发了一种技术,使游戏能稳定可靠地在视窗系统上运行,而无需担心硬件改变带来像《狮子王》那样的滑铁卢,这项技术叫做DirectX。亚力克斯也知道,游戏开发者们是疑心很重的一群人,他们不会轻易移情别恋,他们不会马上转而效忠视窗系统。如果要说服他们,亚力克斯认为,最有效的手段莫过于给他们展示运行在视窗系统上并采用了DirectX技术的Doom。

但亚力克斯很快得到答复,id对此没有任何兴趣。不光是微软,他们还拒绝了苹果和IBM,因为卡马克现在没空,Doom在微软的DOS上运行得很好,已经被无数玩家所接受,干嘛去把它移植到同样出自微软的视窗系统上?那是没事找事。此外,为了让技术的进步能真正给人们带来美好的生活,卡马克一直以来都是开放源代码运动的支持者,而微软在这方面的表现如同葛朗台,卡马克对此只有蔑视。亚力克斯只好向他保证,id一根手指头都不用动,微软自己来把Doom移植到视窗系统上,卡马克同意了。

1995年3月,硅谷,Doom视窗版在游戏开发者大会(Game Developers Conference)上揭开面纱,微软为此不惜重金租下了大美利坚主题公园,当会场的灯光暗下时,观众中的玩家们有节奏地喊起:“DOS!DOS!DOS!”以抵制微软所谓的新一代游戏平台。但当Doom出现在大屏幕上时,所有人都安静了下来,会场里升起一股庄严的气氛。视窗和DirectX的时代由此拉开序幕。

但是,把视窗作为游戏平台推销给大众是一项更为艰巨的任务。尽管Doom进入了一千万台计算机,但在大部分人心目中,计算机还是个新鲜玩意,哪怕只是玩个游戏,也需要进行一大堆晦涩难懂的设置,任何小疏忽都会导致游戏无法运行。亚力克斯知道,这对微软而言是一个绝好的时机,DOS的那些缺陷能促使用户升级到视窗。而此前Doom视窗版的闪亮登场已帮助他征召到了几个公司用DirectX为视窗95系统制作游戏,接下来,他们只需要在圣诞旺季前举办一次空前的派对。既然Doom是个充满妖魔鬼怪和血腥的游戏,那么,最理想的日子无疑是万圣节前夜,也就是西方国家的鬼节,那将会吸引从游戏媒体到主流媒体的大批记者,它将向世人展示,在多媒体时代,微软究竟是个什么样的角色。这个成败在此一举的活动自然被命名为:审判日(Judgment Day)。

亚力克斯非常幸运,因为id刚多了一个喜欢热闹的家伙:麦克·威尔逊。这个二十四岁的小伙子刚结束和狄万戈·鲍勃的合作,因特网的普及使狄万戈狂欢之旅走到了尽头,玩家们现在不需要再每个月付钱给他们才可以进行网络死亡竞赛,但对麦克来说,这不算什么,生活就是永无冷场的派对。留着金色长发的他是个无拘无束、随遇而安的人,他经营过酒吧,在乡下卖过印着耶稣像的钱包,尽管他不是个狂热的玩家,但他知道,游戏就是新的摇滚乐,而id,就是新的摇滚明星。

麦克喜欢“审判日”这个点子。亚力克斯计划用微软的自助餐厅和车库来建造一幢巨大的鬼屋,三十余家著名的游戏制作公司和出版商,譬如Activision、卢卡斯工作室和id,将被邀请来参加派对并可以随意布置他们各自的展区。麦克听到这个消息后两眼放光:id可以利用这个机会大开杀戒啦,譬如……邀请世界各地的顶级Doom玩家们来一场面对面的角逐,怎么样?就在这次派对上,这将是前所未有的比赛!干嘛不呢?就这么定了!“现在正式宣布,”麦克在新闻稿里写道:“id接下来将带领微软直奔地狱而去。”

亚力克斯没觉得麦克的做法有什么不对,他也想活动越火爆越好。因为不管他花多少功夫在DirectX上,微软似乎总认为那是“混饭吃”的事情,曾经有一个主管拨通他的电话,开口就是:“给我一个继续留着你的理由。”而审判日,就是亚力克斯给他们的答复。但如果想要派对举办得成功,亚力克斯知道,光有Doom是不够的,还得有教皇本人:比尔·盖茨。

不出所料,亚力克斯的申请被驳了回来,他被告知:“还有更重要的事情等着盖茨。”但亚力克斯没有放弃,他苦苦劝说盖茨的一个跟班,希望至少能录一段演讲给到场的来宾,这个要求得到了满足。拍摄的那天,亚力克斯在微软的摄影棚里见到了老板,他周围簇拥着一群唧唧喳喳的公关顾问,这些导演和编剧们正在给盖茨讲戏,而这位男主角则留意到了站在一旁满脸沮丧的亚力克斯,于是他让侍从们禁声。

“你希望我怎么做?”盖茨问道。

亚力克斯深吸一口气,递给盖茨一支霰弹枪。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

派对于1995年10月30日晚上在微软如期举行,现场热闹非凡,一辆大花车在会场周围巡行,马戏团帐篷里提供啤酒和烤肉,红色的光芒从一个三层楼高的人造火山顶部喷薄而出,好莱坞著名脱口秀主持人杰伊·雷诺(Jay Leno)在台上握着麦克风娱乐来宾。但最刺激的活动在地下,在被改造成鬼屋一般的车库里——麦克·威尔逊组织的死亡竞赛正如火如荼。

二十位精英玩家参加了比赛,大屏幕上展现着他们战斗的场面。最后,两位顶尖选手——打法冷酷的美籍亚裔丹尼斯·Thresh·方(Dennis “Thresh” Fong)和来自佛罗里达的沙滩小子Merlock进入了决赛,比赛开始了,玩家们聚在他俩身后不停发出欢呼声和嘘声,结果Thresh赢得了胜利,他立刻被玩家和记者们团团包围。“噢,天哪,” 杰伊·威尔伯难以置信地说:“这简直是项竞技运动。”

打扮成撒旦的亚力克斯在炫目的灯光和烟雾中四处寻找麦克,最后他看到了打扮成《天生杀人狂》里那对嗜血鸳鸯杀手的麦克和他女友,和他们一起在角落里喝酒的两个玩家,一个扮成了耶稣,一个扮成了罗马主教。亚力克斯告诉麦克,他觉得id的展区很有创意,但是微软的公关顾问很不满意。不知道媒体们或者是微软高级主管们,看到id的鬼屋后会作何感想。

记者和主管们走进会场时,四下里一片歌舞升平,毫无越轨之处。Activision正在演示一个名为《彼得弗·哈里》(Pitfall Harry)的冒险游戏,他们搭建了一小片丛林,参观者们可以在其中的藤蔓上荡荡秋千;另一个房间里,Zombie公司安装了一个不断吐出蓝色泡泡的巨大的金属球;但id的东西略为与众不同:他们架起了一个八英尺高的阴道。

id请了一支粗鄙的摇滚乐队Gwar来参与展示会的创作,他们那臭名昭著的色情台风这次发挥到了极致:阴道壁上挂满阴茎模型,像是一排排利齿,辛普森的首级悬在上方,当参观者们走进阴道口时,Gwar的两个成员披着生鱼片和兽皮从黑暗中蹑近,然后手里挥舞着橡皮阴茎扑过来。微软的主管们愣在原地,就在其他人忐忑不安的时候,他们大笑了起来。

但不是所有人都这么有幽默感。麦克朋友们的一支乐队:“被诅咒的社会”(Society of the Damned)开始了表演,他们在台上声嘶力竭地演唱起一首工业摇滚风格的乐曲“诸神的恐惧”(Gods of Fear),这时,微软的公关顾问们无法忍受了。两个保安冲上台去,责令乐队立刻停止演出。亚力克斯看到了这一幕,他穿过拥挤的人群,脸憋得像他身上的撒旦装束一样通红:“他们是id软件的朋友!”他咆哮道:“id软件!制作了Doom的那家公司!id的朋友就是我们微软的朋友!”但保安听不懂他在说什么,他们粗暴地拔断了音响线。

主会场里,灯光缓缓暗下,正戏即将上演。大屏幕上出现了玩家们熟悉的Doom场景,现场一片欢呼,但在追杀恶魔的并不是大家熟悉的太空战士,而是……比尔·盖茨。微软这位大无畏的领袖身着黑色披风,手握霰弹枪,在游戏里奋勇杀敌。没过一会,他停了下来,站到镜头前,开始大谈特谈视窗95是一个多么非凡的游戏平台,它将给玩家带来最前沿的多媒体体验,譬如Doom。就在这时,游戏中的一个小鬼凑到盖茨身边向他索要签名,怒不可遏的盖茨一枪把它轰成肉酱:“我讲话的时候不要打断我!”短片的最后,血色铺满屏幕,微软的标志凸现,伴随着一行字:“你今天想处决谁?”(Who Do You Want to Execute Today?)

得,也不用去考虑去处决谁了,亚力克斯想,我自己马上就要被炒掉。他到后台去取带子,但发现微软的人已经捷足先登把它拿回去保存了,亚力克斯知道,这意味着他还可以保住工作。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

消息传得很快。

标题:罗梅洛去世

我在新闻组里听说约翰·罗梅洛发生了交通事故。 他还好吧?

这可能吗?约翰·罗梅洛——二十八岁的王牌程序员、未来富翁、死亡竞赛手术师——死了?在网上流传的故事里,他的法拉利在达拉斯附近的高速公路上侧翻出了护栏。厄运已经光顾过一次id的跑车:卡马克有辆保时捷(Porsche),诺伍德把它改装成了Doom赛车,并把游戏标志烙在了它火红的引擎盖上,几星期前,这辆价值五十万美元的车在停车场神秘失踪,也许,罗梅洛也陷入了某种诅咒。

而在现实里,罗梅洛依然生龙活虎。他刚巡视完他正在建造的都铎式(Tudor)豪宅,它总投资一百三十万美元,占地九千平方英尺,有一个六车位的车库、一个街机厅、两座镇守大门的怪兽雕像。现在罗梅洛正坐在666套房的窗户边,俯视着他那辆崭新如初的法拉利。网上流传的噩耗不过是使他成为游戏之王的加冕典礼罢了,就像披头四(Beatles)时代,歌迷们都为“保罗死了”的谣言而伤心欲绝。但罗梅洛要澄清一下,以免别人以为他是个冒失鬼:“噢,不,我没有死,”他在网上回应道:“我的车不会发生意外,更不用说我这个人了。”

但同事们可不这么认为。日历翻到了1995年11月,Quake依然没有头绪,大伙已经不是在心里,而是在嘴上,嘀咕着对罗梅洛的不满。卡马克还在埋头制作引擎,公司其他人觉得工作漫无目的。美工们,凯文和艾德里安,已经厌倦了在没有明确计划的情况下制作各种稀奇古怪的贴图;关卡设计师们,麦基和桑迪,已经玩够了那些早期的建筑预制件。他们只知道Quake将是一个神话游戏,里面有把大锤子,仅此。不管什么时候他们向罗梅洛询问下一步的方向,他总是那么几句话,然后就让他们自由发挥。这算哪门子项目主管?

但在罗梅洛看来,Quake进行得一帆风顺:卡马克正忙于研制下一代引擎,他知道那会是个了不起的游戏,现在根本没有必要去催促引擎师约翰,其他人只需要随时准备好拿出精彩的游戏设计。在这种时候,最好是去尝试些别的途径来给公司创造价值,罗梅洛选择了去监制其他游戏,他认为公司能直接从中获益。

罗梅洛能感觉得出来,其他人是怪他没有尽心尽力,没有让游戏开发正常进行。在他们眼里,罗梅洛的分心,罗梅洛那比特的波动,是一个信号,预示着id这位一直以来的摇滚明星正在——如果还没坠落的话——偏离轨道。他们这种态度让罗梅洛很不爽:我七点钟就离开又怎么样?我有妻子等着我,我在建造我的家,我在过我的生活,这些都是我努力的结果,是我应得的。现在id有了那么多可以挑大梁的员工,我自然可以轻松一点,如果公司在走下坡路,那你们的牢骚还情有可原,但问题是,现在公司势头正旺,而且这还都归功于我监制的那些游戏,如果我不去照看那些游戏,谁会去?

但罗梅洛并没有试图去博得他人的理解。一天晚上,桑迪·彼得森实在忍不下去了,他冲进卡马克的房间,关上门,说道:“我知道约翰的确是非常优秀的设计师,但我也知道他没有协调好Quake的开发工作。我在一家大公司干过,在那里,游戏开发被组织得井井有条,我知道那是怎么回事,而他没有这么做,他不是一个称职的项目经理,他不知道怎么做,除非他改变一下他自己,否则Quake会一直拖下去。”

卡马克点击了一下脑袋里的“回复”按钮,随即念出了他现在面对这种抱怨的标准答案:“在需要的时候,罗梅洛会玩命做事,Quake会顺利完成的。”说完他就转动着椅子回去继续工作了,没有再见,没有结束语,什么都没有。“又来了,”桑迪想道。卡马克一直以来都是这样:从不在意会话的礼节,从不在意和另一个人类交谈时该如何开始、进行、结束。只是他这怪脾气最近愈发严重了:一天下午,迈克尔·亚伯拉什告诉卡马克,他在费了一番周折后,终于把女儿送进了一所好学校。这件事情显然对亚伯拉什很重要,但卡马克的回答只是:“嗯嗯。”然后他就回到了计算机前继续工作。

卡马克觉得自己仿佛飘向了外太空,周围的人和事在他眼里渐行渐远,他无法和现实世界建立起任何联系,他根本无暇顾及什么人际关系、派对、MTV,等等。他的世界是Quake,他的工作是Quake,他的白天,他的黑夜,他的生活,是Quake。他现在昼夜颠倒地坐在屏幕前,他每周的工作时间都在八十个小时以上。id的人们会看到他进屋,拿起一瓶可乐,随即直线朝他的房间走去,此后,只有不时上门送比萨的小伙子才会让他们意识到卡马克的存在。

但是,不管卡马克付出多大努力,他有生以来第一次感到了束手无策。Quake逼着他彻底另起炉灶,几乎没有任何Doom里的技术可以沿用到Quake中来。Doom通过一些网络编程的小技巧来支持四个玩家对战,但Quake要支持十六个玩家通过因特网进入到同一个世界;Doom并不是真三维的视图,它是局促简陋的所谓“二点五维”,而Quake要展现一个真三维的世界,就像现实世界里一样,玩家的视线将可以转向任意角度,所有物品——包括玩家本身——都不再是二维动画,而是三维的多边形。这个虚拟世界将更加令人信服。但让人气馁的是,卡马克的引擎无法绘制出一个完整的世界,或者用更专业的说法,一个完整的可视集合。Quake的世界里布满了缝隙和漏洞,当卡马克穿行于一条过道中时,他只会失望地发现,过道的尽头不是期望中的墙壁,而是一片蓝色的虚空。它无处不在:地面上、墙上、天花板上,到处是蓝色的虚空。他的虚拟世界千疮百孔。

卡马克的思维完全陷入其中,他假想着各种几何体如何依照他的指令移动、旋转,他要把它们分解开,调整,再组装,再分解……,哪怕他在凌晨四点蹒跚着走进家门时,这些几何体仍在他脑海里飘来飘去、飘来飘去、没有尽头。同龄人会梦到一对男女在屋里的关系,而卡马克只会梦到一对多边形在三维空间中的关系。一天清晨,他坐在屋里,看着编码后的指令沿手臂传送,指导着它如何抬起、伸出、收回,他觉得奇怪,现实生活里手臂不是这样工作的呀,这肯定是个怪异的梦——他忽然惊醒,一身冷汗。他被困在了Quake的世界里,无处可逃,哪怕是在睡梦中。

尽管卡马克几乎从不曾感受到有压力,更不用说被压力弄得乱了手脚,但Quake已的确使他有点不堪重负。他开始苛责起其他人。一天,杰伊建议把id的游戏技术注册为专利,“一旦你们这些家伙去申请专利,”卡马克咆哮道:“我就走人,就这么简单,谈话结束!”所有的事情都让卡马克看不顺眼:商务上的杂事、人际关系、其他人的懒惰——至少在他看来。一天晚上桑迪离开办公室时,卡马克对他说:“你总是那么早就走。”桑迪简直不敢相信自己的耳朵,他每天至少工作十一个小时,只不过他是早上九点到公司,而卡马克是下午四点才来,“我没有早走,”他告诉卡马克:“只是我在这里的时候你没有看到。”

但卡马克不依不侥,他开始给职员们发送措辞严厉的整风邮件。他首先禁止了办公室里的死亡竞赛,然后,他制定了评级标准,每个人都根据自己的表现得到了一个字母:桑迪是D,罗梅洛是C。这还不够,卡马克一天晚上把他的桌子从房间里拖到门厅,他以后要在这里工作,以便随时盯着周围的人。大家开始生活在焦虑中,担心丢掉饭碗。为了跟上卡马克的步伐,他们在办公室里呆的时间越来越长。

压力让大家喘不过气,公司里也没有了任何乐趣。以自我为中心的人已不止是罗梅洛一个,卡马克也脱离群众,遁入了他自己的世界,人们开始连他一起抱怨。现在,没有任何事物,哪怕是最诱人的事物,能够使气氛活跃起来。一天,卡马克坐在自己房间里,听到一个女人的声音从外面传来,她问这里有没有人订了比萨,罗梅洛回答她:“没有,我没有订。”她又问了一遍:“那是你订的?”另一个人回答:“噢,我也没订。”然后卡马克听到房门打开的声音,“你订了比萨吗?”她问道,卡马克转过椅子,看到一个穿着露肩装的迷人女郎托着比萨盒子站在门口。这个舞女是麦克·威尔逊请来的,他想让大家开心一下。“不,”卡马克冷漠地告诉她:“我没有订比萨。”说完他就转身继续工作。“天哪!”舞女惊叹道:“你们这地方简直无聊透顶!”然后她扭头就往门外走去。

卡马克只想不受任何干扰地工作,或者,最好能像个隐士一样,乘风而去。在这时,似乎只有一个人能理解他,那就是罗梅洛。一天晚上,罗梅洛把卡马克拽到一旁,对他说:“哥们,你对自己的要求太高了,我都看在眼里,但你要知道,你不是超人。”

在卡马克看来,罗梅洛有他一定的道理,他们的确没有必要再让大家像以前那样玩命工作,但罗梅洛的这种心态还有其他背景。尽管共同奋斗了那么多年,尽管互相陪伴着在显示器前度过了那么多不眠之夜,但对浮名的追求已使罗梅洛脱离了编写代码的第一线。当卡马克需要他来一起工作、一起试验、一起探索时,他在哪里?他在盖他的大房子,他在四处充当名人!

卡马克知道下一步该做什么,他要证明罗梅洛的确在三天打鱼两天晒网,而且他知道怎么去做。他写了个程序,不管什么时候罗梅洛在机器上干活时,这个程序就会记录下时间信息。从结果来看,卡马克的这位拍档没做多少事情。当卡马克把数据放到罗梅洛面前时,后者震怒了:“你这么做就是想炒掉我!”

嘿,卡马克心想,耶!

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

卡马克有了证据,在怀疑许久后,他终于有了科学的数据:罗梅洛不只是没有好好工作,他甚至给公司带来了消极的影响。从而,卡马克在决定下一步怎么做的时候,心里没有念及一丝旧情。卡马克要正式警告罗梅洛:他和媒体打了太多的交道,和id迷们聊了太多的天,在办公室里玩了太多的死亡竞赛,以至于整个公司都被拖累。卡马克找到艾德里安和凯文:“我们要警告罗梅洛,他很有可能会被解雇。”尽管这两人知道卡马克有时候很突兀,但这次他们还是被吓了一跳。“不,不,不,”艾德里安说:“我不想这么做,罗梅洛是我的朋友和拍档,他很快就会重新投入的。”

但卡马克坚持如此,凯文和艾德里安只好答应了。这已经成了一种模式:在他们或者所有其他id员工看来,引擎师约翰就是公司的核心,麦克说得好:“如果他带上皮球回家,那么大家也只好散伙。”1995年11月,全体持股人召开了一次会议,大家严肃地围坐在黑色的会议桌旁,背后是黑色的玻璃幕墙,卡马克像往常一样坐在首席,“你仍然没有做好你的工作,”他对罗梅洛说:“你必须认真担负起你的职责,否则你将被解雇。”

罗梅洛愤怒地回答道:“我和其他人一样卖力,我整天都呆在公司。”

卡马克看向艾德里安和凯文,期待着他们的声援,但艾德里安只低头看着地板。“噢,”凯文替罗梅洛辩解道:“约翰的确经常在办公室,他做了他的事情。”

卡马克听到这话后目瞪口呆,因为艾德里安和凯文事先已经同意了他的决定。大家都知道,他无法凭一己之力就解雇罗梅洛,表决的时候要大多数人赞成才能通过。最后,大家同意削减罗梅洛的奖金,以提醒他马上把心思放到制作游戏上来。随你们怎么弄,罗梅洛想道,我现在手头又不缺现金,等游戏完成的时候,你们就会知道你们错了。

但到了感恩节时,情况仍没有任何改观。游戏的开发工作远没有进入正轨,卡马克又召集了一次会议,这次是公司全体人员,他开门见山:“游戏设计到现在还没有一个明确的概念。”大家点头,一致认为如果再这样毫无计划地走下去,游戏永远也完不成。麦基开口了,他建议放弃罗梅洛那个宏大的故事,不要去做什么短兵相接的神话游戏了,还是做个简单一点的:“我觉得如果做一个有火箭筒之类的游戏更好些。”

“对,”桑迪附和道:“我们来做Doom3吧,创新的点子留到下一个游戏。”

罗梅洛被激怒了,先是减少奖金,现在又来这套?这些家伙算什么东西?他们知道什么?他们从来没有自始至终做出哪怕是一个游戏!他们根本不知道id是怎么做游戏的。“id从前的每一个游戏都是这样的!”他说道:“卡马克先写出革命性的引擎,然后,我们再基于它拿出一个革命性的设计。我们先把引擎做好,接下来就可以做出个前所未有的精彩游戏。Quake将超过Doom,就算我们只是把Doom那些东西放到新引擎里,我们也会大获成功,但我们不能拘泥于此,我们要超越自己,我们要用新引擎制作一个全新的伟大游戏,就像Doom那时一样。”

时过境迁了,新人们就此和罗梅洛展开了激烈的争吵,他们觉得自己无法展现创造力,因为不知道要做什么。前面有两条路,一是以卡马克的技术为主导,在可预计的时间内做出一个简单紧凑的游戏,或者以罗梅洛的设计为主导,然后在天知道什么时候完成那个宏大复杂的游戏。

艾德里安和凯文看起来是站在罗梅洛一边的。“甭扯了,伙计们,”艾德里安开口道:“我们已经做了那么多事。”过去一年里,他和凯文都在忙于为一个中世纪神话游戏准备贴图,而不是为一个未来战士游戏,而且,他们最近刚刚熬出头,正开始做最有意思的部分:往墙上刷血,以及精雕细琢各种骇人的场景。“不能只因为你们什么都还没做,”艾德里安正色道:“就放弃这个项目。如果改变设计,那么我们要再花一年的时间才能做到现在的地步,我是说一年,不是几天或几个月。”

但其他人根本听不进去,他们继续反对着罗梅洛的设计方案。罗梅洛难以置信地看着卡马克,噢,天哪,他察觉到,卡马克同意他们的观点,他默许了这些人的反对。罗梅洛爆发了:“这个公司,一直以来都在被技术奴役,但至少我们可以在技术之上做我们想做的精彩游戏,譬如Doom,现在居然有人想再把Doom那套东西扔出去作为一个游戏?!我们可以继续我们的辉煌,只要我们肯下功夫,肯花时间。”

他们两边的说法卡马克都能理解,但罗梅洛的陈词中有个致命的缺陷:他的论点没有任何东西作为依据。现在惟一能运行的关卡出自麦基之手,它是Doom风格的。如果罗梅洛已经建造出了一个让人目眩的神话世界,那么事情就完全不一样了,但目前,在卡马克看来,罗梅洛说白了就是什么都没做,显然,他们长久以来谈论的那个Quake,那个从什里夫波特湖畔小屋里诞生的想法,将要走入歧途。

卡马克开口了:“做事情要给自己留后路,以便犯错后还可以弥补。如果假装胸有成竹,甚至在有很多凶兆的情况下还埋头向前冲,那么,这绝不是一件正确的事情,相反,这只会让人跌个大跟头。我们应该不断审时度势,譬如说,嗯,那听起来是个好主意,但它看上去不是很行的通,而我们现在有另一种选择,它看上去更行的通——那我们就按这个做。”

这,而不是什么警告或扣奖金,才是真正刺中罗梅洛的时刻:我们不再有默契了,我们不再所见略同了。罗梅洛无法相信卡马克的选择,他本以为卡马克会说:“冷静,伙计们,你们会看到,这将是一个最棒的游戏。”就像卡马克认为罗梅洛已不再是一个程序员那样,罗梅洛也认为卡马克不再是一个玩家,他听取那些人的观点,就说明他在担心,说明他对再做一个伟大的游戏已不抱信心,说明他对罗梅洛,已不抱信心。争论了几个小时后,罗梅洛放弃了:“行,我会按照Doom的风格重新设计整个游戏,我们就那样做。”但他心里却说了句完全相反的话,说了他在很久以前一个宿命的早晨对卡马克说的那句话,那句让他们拥有了今天的话。

就这样,罗梅洛告诉自己,我走人。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

尽管推翻从前的设计方案无疑将使Quake的发布日期延迟到1996年,但GTI在1995年已经赚了个盆满钵满。Doom2在美国本土卖到八千万美元,在欧洲卖到两千万美元,这其中有百分之三十来自禁止Doom2上架的德国。同时,id的那些老游戏依然势头不减,此外还有若干衍生作品,譬如《终极Doom》,光这款Doom共享软件的零售版就在美国卖到两千万美元。另外,Raven制作的《Hexen》和《Heretic》也卖到了接近两千万美元。

一夜暴富的GTI开始和更多的游戏制作者接触,譬如制作了《真人快打》系列的Midway公司,街机界的老大哥Williams娱乐公司,以及发行了《D!Zone》的Wizard-Works。在Doom2的帮助下,GTI的计算机软件销售额在两年之内从一千万飙升到了三亿四千万,当GTI于1996年上市时,它是该年度吸引了最多风险投资的新股,甚至超过出品了因特网浏览器的网景公司。“GTI这个无名小子一出场就横扫千军,”《纽约克莱恩商业周刊》(Crain’s New York Business)如是报道:“它成为全国第三大的互动娱乐公司。”它的市值达到六亿三千八百万美元。

但GTI的成功并没有使它在id眼中变得可爱,那年,GTI试图用一亿美元买下id,但它被告知,这是不可能的。id认为GTI是一家卑劣的出版商,他们不想把自己卖给根本信不过的人,而且,他们现在已经被内部的紧张气氛弄得焦头烂额,压根没有心思再去做什么商业决策,毕竟,钱不是问题,id在过去一年的收入比前年增加了一倍,达到一千五百六十万美元,而且他们的人数并没有怎么增加,几个持股人的腰包里都多了上百万美元。id还认为GTI过分强调了自己在Doom2的成功中所发挥的作用,id也不喜欢他们把大笔的钱扔给一些跑龙套的小公司。麦克这个商务助理现在越来越桀骜,在他的鼓动下,id决定利用Quake来踢飞GTI。

他们的武器就是:共享软件。1995年底,共享软件在所有人眼里都已经是一个古老的词汇,这种模式在过去还可以称之为精明,而放在游戏业如此成熟和壮大的今天,显得很不合时宜。所以,当id向罗恩·柴莫威兹提出保留发行共享版的权利时,罗恩毫不犹豫地答应了,他很快就会为这个决定而后悔的。麦克提出了一种新的市场策略,除了通过因特网发布试玩版外,他们还可以制作一张同时包含了试玩版和加密完全版的光盘,玩家可以花9.95美元购买试玩版,然后直接拨id的电话,付款50美元后得到完全版的解密口令,从而,没有零售权的id就直接把GTI扫出了局。

尽管卡马克对此持保留意见,但其他人甚至已经吵着要采用一种更夸张的商业模式:自行出版。最后,方案定了下来,就按麦克的建议做。罗恩在报纸上读到了这条消息,麦克·威尔逊——这个小阿飞!他恨恨地想道,这个毛头小子根本不知道怎么做人,怎么做生意!但id有这个权利,谁都没想到会发生这种事,不管怎样,GTI已经无法阻止id了。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1996年伊始,id不止是在和GTI开战,他们内部也是硝烟弥漫。由于抛弃了罗梅洛的设计而选择了卡马克的技术,办公室里的压力已逼近沸点。为了在三月份拿出一个Doom风格的射击游戏,整个公司都进入了毫无喘息机会的压榨模式。卡马克开始觉得公司像是一艘航行在惊涛骇浪中的舢船,而他是惟一的机师,然后他决定该给炉膛加点煤了,他要让火燃起来。过去几个星期他已经搬到了门厅工作,而现在,他要把墙都拆掉。

正巧,公司一直在说要扩大工作空间,于是他们买下了隔壁的一个套间,卡马克把这看做是推动改革的绝佳时机:他们可以立刻重新编组,都走出各自独立的办公室,融入一个大房间。大家很不情愿地接受了这个安排,他们把这个大房间叫做,作战室。

但他们没想到这回真的像是上前线一般。进去没几天,四周的墙皮就开始脱落,从而把作战室变成了一片沙场。他们沿着窗户修建出一排桌子,架起计算机,然后各就各位。卡马克现在和罗梅洛肩并肩坐在了一起,而座位之间的缝隙是如此狭小,以至于伸手拿一下饮料都会碰到邻座的肘子。为了架设网络,他们不得不把线缆从天花板上走,然后移开顶棚,让线缆垂到桌子边。灯光暗下,盘根错节的线路仿佛一个巨大的蛛网悬挂在房间里,他们不像是坐在计算机前,而是坐在计算机里。现在,想要做什么事而不被其他人看到是不太可能了。

没有了个人空间的私密性,气氛陡然紧张了起来。他们现在每周工作七天,每天十八个小时。如果这时有人来id,他将看到许多人挤在一个幽暗的房间里,每人都戴着耳机,沉默不语,只有敲打键盘和点击鼠标的声音密如雨点。罗梅洛最近喜欢上了游戏原声碟——大都是日本进口的,他拿起一张放进光驱,然后痛苦地把头塞到耳机中间。这不是过去的id了,他心想,过去的id是:“我们来做一个精彩的游戏吧!那多有意思啊!”现在的id是:“闭上嘴,专心干活。”

这样的环境无疑充满竞争,罗梅洛不再威风八面,麦基悄悄树立起了权威,但甚至这个id新星也遇到了挑战者:提姆·威利兹(Tim Willits)。提姆身材不高,秃顶,说话时偶尔会紧张得结结巴巴。提姆的独特之处在于他是id第一个从Doom玩家社群里招募来的员工,他在明尼苏达大学念书时发现了这个游戏。那时他刚二十三岁,主修计算机,和父母住在一起。他父亲是一位管道安装工,母亲是一位无线技师,家里人一个个都争强好胜,提姆经常和他那个主修图像设计的姐姐吵得面红耳赤,他事事不落人后,他不但加入了美国后备役军官训练队,还在学校举办橄榄球赛等活动时穿上戏服,扮演学校的吉祥物:金地鼠。

提姆也喜欢玩游戏,但没有任何游戏能让他觉得像是进入了另一个世界,直到某天,他无意中在网上看到Doom,这个同学们都在谈论着的东西。在Doom的世界里,他可以和周围的环境交互,譬如按下机关或打开门,他惊讶于这个空间的壮丽,惊讶于这个小宇宙的神奇。提姆随即用网上四处流传的黒客工具创作起自己的天地。制作并上传了几个关卡后,他博得了其他玩家的认可,包括麦斯奎特那几个——他收到了一封来自id的邮件。

麦基本是把提姆雇来协助制作《Strife》的,但当Quake启动后,提姆随即被征召进主力团队。在作战室里,他坐在罗梅洛的另一侧,他很快就和罗梅洛打成一片,并虚心学习起关卡设计艺术的方方面面,他不光技艺精湛,而且手脚麻利,他打破了关卡制作的最短时间记录。罗梅洛现在竭尽全力也只能是和提姆打个平手,卡马克立刻注意到了提姆的贡献,并表示了他对提姆的赞赏。尽管卡马克仍把麦基当做最亲密的朋友,但麦基却觉得自己被晾在了一旁。

一直憧憬于罗梅洛那种明星生活方式的麦基开始装点起他自己的生活。这都要从工业金属乐队九寸钉的灵魂人物特伦特·雷佐和id的一份协议谈起。这个摇滚明星兼死硬Doom迷愿意为id制作Quake的音乐及音效,而麦基则被指派为监制。在大明星的熏陶下,麦基开始改变自己的外表:修刮胡须、梳理发型、穿起黑装,他觉得他和卡马克之间的距离越来越远,尽管他负责的音乐工作还算让卡马克满意,但卡马克现在总是斥责他花在关卡制作上的时间不够多,这让麦基颇为不爽。别离的序幕正在上演,他在id最好的朋友,戴夫·泰勒,已经自立门户开了一家游戏公司。现在的麦基不再是叱咤id的神童麦基了,现在的麦基,是孤独的麦基。

那么,谁将取代麦基?甚至是,取代罗梅洛?谜底很快揭晓。卡马克于某天忽然宣布,Quake共享版的初始关卡将从提姆的作品中选出,那将是玩家对Quake的第一印象,那是每一个关卡设计师都觊觎已久的荣耀。听到这个消息后,大家陷入沉默,这太难以置信了,这简直是对罗梅洛的侮辱,他们本来全都以为罗梅洛将是这王冠的佩戴者。但这也是意料之外情理之中的事,毕竟,自从那次会议否决了罗梅洛的游戏设计后,他就越来越心不在焉了。

“什么?”罗梅洛说:“我才是首席设计师!”

“这是我的决定,”卡马克答复道:“提姆的关卡要更前后连贯一些。”罗梅洛像往常那样立刻把不快扔到一旁,并向提姆表示了祝贺。在所有人看来,这意味着卡马克已经指定了接班人,并转交了接力棒。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

元月的一个晚上,罗梅洛在他的豪宅里拿起电话,拨通老朋友汤姆的号码。他俩几个月前就已开始了联系。罗梅洛知道汤姆在天极公司干得也很不开心,他以前在id遇到的老问题又在天极重演,他依然空有各种充满创意的点子,却无法付诸实施。天极现在以3D Realms作为公司名字,显然,他们试图在三维主视角射击领域超过id,这个新公司的第一款游戏,《毁灭公爵3D》(Duke Nukem 3D),也的确让他们看到了希望。这款游戏就像是卡通版的Doom,里面的场景都取自现实世界,玩家们要从色情影院和脱衣舞夜总会里杀出一条血路,那里面甚至真的有脱衣舞娘。尽管卡马克对它颇为不屑,说它的引擎是“用口香糖糊出来的”,但玩家们却趋之若鹜,并称它为“Quake终结者”。而汤姆,则被困于另一个刚启动的项目:《掠夺》(Prey)。罗梅洛的电话来的正是时候。

“哥们,”罗梅洛说:“你以前遇到那些破事现在给我碰上了。”他接着向汤姆讲述了他是如何试图说服卡马克去创新,而卡马克又是如何地保守,并决定再做一个类似Doom的游戏。罗梅洛甚至还建议把公司分成两个部门,卡马克负责技术,他负责设计,但这个建议立刻就被否决了。“做完Quake我就要离开id,”罗梅洛总结道:“你觉得新开一家公司怎么样?在那个公司里,我们可以天马行空,我们本就是设计师,设计将决定一切,技术要服从我们的设计,而不是反过来,你想拥有一家这样的公司吗?”

汤姆的答复干净利落:“那,从来就是我的梦想。”

[idsoftware.com] 登录名:johnc 真实姓名:约翰·卡马克 主目录:/raid/nardo/johnc 命令行解释器:/bin/csh 从未登录 计划:

这是我的日常工作……

当我完成一件事情的时候,我就给它标上星号;当我发现一个错误或是某个尚未实现的功能时,我也会把它记在这里,一些问题在被解决之前可能会被多次提到。我会不时地整理这个列表,并在我已经修正好的问题前标上一个加号。

——约翰·卡马克

二月十八日: ―――――――――――――――― * 调页错误 * 拉伸控制台 * 加快水中移动速度 * 杀伤力的方向性 * 盔甲颜色闪烁 * 杀伤力足够大时的碎尸效果 * 调整榴弹 * 加亮玩家昵称 * 钉枪造成的延迟 * 一场游戏结束时服务器端异常终止

  • 记分牌
  • 可选的全尺寸
  • 平视键
  • 视频模式15时的异常
  • 状态栏上的弹药图标
  • 程序出错时允许“重启”
  • 重生时的血迹残影?
  • 火箭弹数量有时会出现负值
  • 玩家携带宝物时的发光效果

作战室里依然硝烟弥漫,卡马克觉得应该让玩家们知道,id真的是在Quake的道路上稳步前进着,于是他决定通过计划文件的方式来把他的工作日志发布到因特网上,计划文件原本只该用于开发者之间的互相沟通,而不是面向大众,但id迷们已经被罗梅洛早先的天花乱坠吊了太长时间的胃口,卡马克觉得,现在该给玩家们展示些过硬的数据了。

经过若干个礼拜的通宵苦战后,卡马克和他的良师益友迈克尔·亚伯拉什终于解决了那个恼人的蓝色虚空问题,屏幕上呈现出一个完整无暇的真三维虚拟世界。大功告成,卡马克会静静地盯着墙角,或是随意地在里面走动,他感受着这个世界的一致,这个世界的真实。1996年2月24日,Quake已经初具雏形,为了在玩家们各种不同的机器配置上进行测试,id上传了附带一个死亡竞赛关卡的演示版。为了一睹id新作的芳容,玩家们已经在网上嚷嚷了好几个月,各种猜测和期望沸沸扬扬,甚至已经有了专门的Quake新闻网站。

但是,演示版并没有博得一致好评。玩家们的确很向往在线死亡竞赛,同时,他们也抱怨说游戏太过于阴暗缓慢,不像Doom那么快节奏。这些批评并不是站不住脚,为了使真三维的引擎流畅运行,Doom的许多特色都被牺牲了。但玩家们可不管那么多,“尽管作为一个测试版,它还算过得去,”一个玩家在网上发表道:“但还有许多细节值得改进,想要成为一个伟大游戏的话,还有很多很多工作要做。”

看到反响平平,id的人们只好回过头来重新审视他们那风格各异的作品。这十六个月下来,关卡设计师和美工们都埋头在自己的世界里,现在的结果是:罗梅洛的关卡充满中世纪风味,麦基的是未来科幻派,桑迪的则是另类哥特流。尽管id特有的黑色幽默仍然无处不在——譬如僵尸们扔过来砸你的东西其实就是他们刚从自己屁股上掰下来的肉块,但显然,id还需要对所有这些元素进行整合和协调。

他们在Quake的帮助文件里草草写下故事背景:“你在凌晨四点接到一个紧急电话,五点半的时候,你赶到了秘密基地,指挥官简单地告诉你:‘都是那所谓的传送门,本来,只要造出这个设备,我们就可以把人和物品从一个地方瞬间传送到另一个地方,但一个叫雷神的敌人用它自己的传送门在我们基地里放置了许多死亡战士,他们四处烧杀抢夺,最糟糕的是,我们还不知道对手的底细,科学家们觉得它不像是地球上的生物,它应该来自另一个空间,他们说雷神正在调遣它的精锐部队,天知道是什么。’”

的确,天知道是什么——他们不在乎。但既然已经提到了传送门,那么就来吧,他们开始在关卡里到处放置这种灰色的小门,玩家走进去时,就会被送到关卡里的另一个地方。Quake开发的最后几个月都是在沉默和紧张中度过的,只是偶尔有键盘被砸到墙上——他们应对压力和苦闷的方式一如往常,不光是键盘,各种各样的计算机配件都可以用来发泄,甚至媒体的到来都无法让他们欢欣鼓舞。《连线》杂志给予了他们最高荣耀:一期关于id的封面故事,但id并不是很在意,他们拍照那天甚至迟到了三个小时。最后的封面上,罗梅洛和艾德里安各露出半张脸,正前方是卡马克,三人被笼罩在五颜六色的灯光里,他们头顶上是标题:“id的自负”(The Egos at id),Quake在正文里被称赞为:“最让人期盼的游戏”。

终于,辛苦的付出有了回报,Quake在六月份完工。但以前上传《德军总部3D》和Doom试玩版时的那份激动只存在于记忆中了。1996年6月22日,罗梅洛缓缓穿过666套房的走廊,他身旁是id曾获得的各种奖项,墙上挂着Doom海报,上面是类似恶鬼佛列迪·克鲁格(Freddy Krueger)一样的头像,角落里还放着塑料霰弹枪,罗梅洛就这样独自走了进来,没有卡马克,没有艾德里安,没有凯文。

罗梅洛上网,他进入一间满是id迷的聊天室;罗梅洛拨通马克·弗莱彻(Mark Fletcher),他们是通过Doom死亡竞赛认识的好朋友。罗梅洛只是不愿就这么孑然而来,又孑然而去,他希望在这个晚上,能有人与他作伴,能有人像他一样热爱游戏,能有人和他一起珍惜这一刻,记住这一刻。下午5点,他按下回车键,把Quake传给了外面的世界。这感觉真是说不上来,罗梅洛想道,id的其他人此刻都不见了踪影,但这其实也很正常,毕竟,他们变了,他们已不再是玩家,他们甚至都不玩游戏了。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“嗯,这不能再拖下去。”卡马克说,他正和凯文、艾德里安坐在一家名叫狄阿的墨西哥餐馆里吃午饭,Quake刚发布不久,罗梅洛在id的日子即将结束,他显然还是没有在工作上尽心尽力,该让他走人了。

卡马克的话让艾德里安一阵反胃,这次不是什么其他人,这次,他们在谈论的是罗梅洛。但艾德里安清楚地知道,现在摆在他面前的只有两条路,没有任何折衷方案:如果罗梅洛不走,那么卡马克就要走,然后id就不复存在。凯文答应了卡马克。让一个人离开从来就不是件容易的事,尤其这个人还是公司的创办者,而且,他在公司的成长道路上付出过那么多。但凯文和艾德里安没有选择。

卡马克和罗梅洛之间的分歧太大了。对于什么是制作游戏以及游戏该如何制作,他们都有各自的观点;卡马克认为罗梅洛已不再是程序员,罗梅洛认为卡马克已不再是玩家;卡马克只想有一个小公司,而罗梅洛想做大。这两个截然相反的头脑铸就了他们今天的成功,但也使他们无可挽回地决裂。尽管凯文和艾德里安曾在若干场合表示过对罗梅洛的理解,对一个游戏帝国的赞同,但今天,他们只能在两个约翰中选择一个。

而他们不知道,罗梅洛也在进行着他的计划。在那天早晨上班的路上,他给GTI的罗恩·柴莫威兹打了一个电话,他就要和汤姆成立一家游戏公司,他们需要先谈妥出版商。这将不同于以往任何一家游戏公司,罗梅洛告诉罗恩,这将是一家“大公司”,不受技术的束缚,设计决定一切。

第二天,罗梅洛被叫到会议室,卡马克、艾德里安、凯文已经坐在了里面。艾德里安低头盯着地板,凯文双唇紧闭,最终,卡马克开口了:“我们对公司现在的状况仍然很不满意,嗯,”他拿起一张纸,递给罗梅洛,“这是你的辞职书,你只需要签个字。”

尽管有过警告,而且他也正计划着自己的公司,但此时,罗梅洛心中只有震惊。“等一下,”他开口道:“我没有在干活?你是在翻一年前的旧账吗?因为,在过去这七个月里,我都快累死了!为了做Quake,我差点把命都搭进去了!”

“不,”卡马克说:“你没有完成你的工作!你没有尽到你的职责!你对项目无益,你对公司无益,你是公司的祸患,过去这几年里你给公司造成的损害大于你给公司的贡献,你本该做得更好,但是你没有,现在你必须离开!辞职书就是这一切的终结!你现在就签了它!”

我不要在这里,艾德里安把头低得更深了,他心里默念道,我不要在这里,我不要在这里。他知道卡马克和罗梅洛都有各自的道理,但他也知道,这是个解不开的死结。

时间忽然停止了,罗梅洛沉默下来,一如往常,他内心深处的比特又开始跳动:这不是什么过不去的坎,不管是他的父亲、他的继父、还是他那破碎的家庭、或是他这破碎的公司,都不曾,也不会让他倒下。反正我也在计划着和汤姆开一家新的公司,他提醒自己,就这样吧。他不是个败将,他是在开始新的人生。罗梅洛签下名字,把辞职书递给卡马克,然后昂首走出门。

当卡马克看着罗梅洛毅然转身离去时,他没有看到一丝留恋或悲伤,相反,他觉得这对罗梅洛似乎是一种解脱,也许,这一天已让罗梅洛等了很久,现在的id束缚了他的创造力,现在的id无法实现他心中宏伟的梦想,就在这四十英尺见方的会议室里,卡马克想,罗梅洛又踏上了新的征途。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

两天后,罗梅洛在id的办公室里告诉世界:“这什么计划文件的时髦我只赶这一次,我已经决定离开id软件,成立一家有着不同目标的游戏公司。我不会从id带走任何人。”

第二天,卡马克更新了他自己的计划文件:“罗梅洛已经离开了id,你将再也不会听到关于我们下一个项目的天花乱坠,我可以告诉你们我在想什么,以及我试图做什么,但我惟一能向你们保证的事情是:我会竭尽全力。”

一场死亡竞赛曲终人散,下一场正拉开帷幕。

第十三章:死亡竞赛

阴暗的房间里闪耀着血色,斯狄薇·Killcreek·凯丝正坐在她的计算机前不停抽搐,就好像她在故意把足尖伸到电源插座里。屏幕上,她的战士刚穿过一道传送门,让她突然一惊的是,她在游戏中的这个化身迸裂开来,如同血雨般散落一地,“嘿!”她喊道,用她的话说,这就叫:“被挤死了 (Tele-fragged) !”

现在是1997年1月,地下游戏世界里的超级杯决赛几分钟后就要上演。和其他十几人一样,二十岁的斯狄薇已经为此在堪萨斯大学一间大屋子里练习了两个不眠之夜。她是个热情洋溢的女孩,留着羊角辫,她同时也是“第九原力”(Impulse 9)的队员,他们决赛的对手是驱车八个小时从密歇根州赶来的“无情野种”(Ruthless Bastards)。这场决赛是“战队”(clan)文化的一个侧影——世界各地的玩家们不只是玩Quake,他们是生活在Quake中,从而,他们中的一些建立起组织,形成了所谓的战队。通常,他们的比赛都是在因特网上展开,但在这个阴云密布的下午,在堪萨斯州的劳伦斯城,这个国家最棒的两支战队就要面对面地一决高下。

从某种程度上来说,是Quake那动人的噩梦幻境造就了玩家们的热情。尽管id在制作Quake的过程中跌跌绊绊,但这款游戏还是以它那前所未有的图像给玩家带来了更沉醉的体验。《今日美国》给了Quake四星的满分,并把它称做“血淋淋的超凡成就”,《计算机游戏世界》的编辑也给了它十分的满分:“这款程序设计的杰作可以让你完全沉浸在一个战场中。”《娱乐周刊》(Entertainment Weekly)则预言道:“在Quake里,你可以肆意屠戮,而不用担心坐牢。毫无疑问,全国各地坐办公室的人们将会义无反顾地投身其中。”甚至演艺明星罗宾·威廉斯(Robin Williams)在大卫·莱特曼(David Letterman)的王牌脱口秀节目里都提到了这款计算机游戏。

当然,玩家们喜欢单人游戏模式:在曲折复杂的三维迷宫中猎杀怪物,但他们真正热爱的,还是死亡竞赛。作为首个专门为因特网组队作战而设计的游戏,Quake支持十六个玩家同时加入到这个类似现实世界里彩弹射击一样的游戏中,在这个世界里,生存的目的和手段达到了本质上的统一:为了活下去,你必须干掉对手,而你活着,也只是为了干掉对手。就像玩家里格莫迪斯(Rigormortis)说的那样:“这是佩枪的橄榄球赛”。除了在因特网上对战外,玩家还把他们那笨重的计算机搬到朋友家,架设起局域网,从而他们可以酣畅淋漓地过招,这所谓的“局域网派对”在Doom时代就早已有之,并逐渐成为网络玩家们在现实生活中的重要社交方式。

Quake发布后没几天,在线聊天室和新闻组里的玩家们就开始组建战队,他们的名称千奇百怪,譬如“早餐俱乐部”、“雄鸡”,以及“第九原力”和“无情野种”。到1996年8月,网上出现了二十多支这样的战队,每支队伍大概有二十几名队员。又过了两个月后,战队数目已逼近一千,其中一支名叫“寡妇连”(Clan Widows)的女子战队甚至有了自己的网站。这,就是电子竞技运动的破晓之初。

商人们自然不会对此视而不见,“电子游戏是脑力竞赛的极致,”一个企业主如是说,他的连锁游戏厅遍布纽约、芝加哥、悉尼,“那么,我们来建造个虚拟的竞技场,让它变成一项万众瞩目的竞技运动。”譬如,给Quake比赛加上大屏幕投影,以及啤酒和奖金,让玩家们成为职业选手。他甚至预言说会有类似耐克这样的大厂牌付钱给明星玩家,只为了把自己的商标图案纹到玩家手臂上。他的想法并非不着边际,一支名叫“黑暗安魂曲”的战队在他们主页上插入了一家游戏摇杆商的广告,“审判日”Doom比赛的冠军Thresh更是获得了来自微软的赞助,那些从不参加健身活动的孩子们现在有了成为迈克尔·乔丹(Michael Jordan)的可能,譬如_fo0k (发音为“fook”,就像“spook”)——“无情野种”战队这位二十七岁的队长。

蓄着胡须的fo0k带领队友们在战队联赛中一路凯歌,只有“第九原力”的战绩可以与他们媲美。自从Quake发布后,fo0k一到晚上就足不出户地呆在密歇根州东兰辛城一间不见天日的地下室里,这是他父母的房子,但房间里只有他的游戏手柄、键盘、低音炮,以及一大堆NBA游戏卡带,墙上挂着一幅黑色的耶稣像,因为_fo0k觉得那上面的耶稣鼻孔像极了Quake里的霰弹枪管。

早在《太空入侵者》时代,电子游戏就进入了fo0k的生活,就像他说的:“让我眼界大开。”在那时,fo0k还只是个名叫克林特·理查兹(Clint Richards)的孩子,争强好胜的他迷恋上了科幻小说和雅达利2600家用机,在看了十几遍《星球大战》后,他郑重写下自己的人生目标:“飞到外星球上和异形战斗”,和大多数人不一样,他对此从未放弃。他后来加入过一支名叫“香波”的迪斯科朋克乐队,但他知道,能成为摇滚明星的机会微乎其微,就在这时,他发现了一个更刺激、更符合他儿时梦想的世界:Quake。

克林特给自己起名为fo0k,里面的下划线以及混杂在一起的字母o和数字0是一些造作的黒客们惯用的写作习惯,fo0k此举也算是对这种陋习的嘲讽。_fo0k在现实中是有线电视线缆安装工,他给自己配备了高速网络接入设备,并和其他Doom瘾君子们一起创建了“无情野种”战队。尽管他和队友们是非常亲密的朋友,但他自己也承认,如果不是因为游戏,他是不会和这些孩子们打成一片的。而在残酷的死亡竞赛中建立起的友谊远非平淡如水的君子之交可比,当他从生与死的战斗中抽身出来看表时,六个小时已在不知不觉中过去了。

和绝大部分玩家一样,_fo0k几乎从不和这些“兄弟”们见面或是打电话,他更乐意于在因特网的聊天室或是Quake的世界里和他们胡侃一通,在任何时候,不管是白天还是黑夜,他都可以在网上找到他的战友们。“因特网才是我的家,”他说:“我在现实中并不是一个呆板的人,但我总是打不起精神,我厌倦了日常生活:工作、和一些无趣的人打交道、等等。只有回到家,上线,开始和那些家伙们互相放炮的时候,我才能进入兴奋状态。”

得自于他高超的技艺和多变的战术,fo0k在网上玩家社群中逐渐变得声名显赫,而他在现实生活中依然默默无闻,fo0k对此并不在意:“主流社会把游戏看做是微不足道的东西,我有时也会觉得我这是在浪费生命,但正是游戏,使我有机会成为场上明星——哪怕只是五分钟。没人愿意白来世上走一遭,电子游戏是我的专长,也许,我的名字可以因此而被人们记住。想想看,在未来的奥林匹克运动会上,”他开玩笑道:“那些大块头的举重队员们站在一起,旁边,是一群脸色灰暗眼圈乌黑的电子竞技选手。”

_fo0k并不是惟一抱有远大梦想的id迷,他们“无情野种”的死敌,“第九原力”的传奇女玩家,斯狄薇·凯丝,也正为Quake而改变着她的生活。新一代女玩家们已开始对男性所主宰的游戏世界发起挑战,斯狄薇正是她们中的佼佼者。她出生在堪萨斯州一个名叫俄拉瑟的小镇,父母亲分别是社会工作者和教师,她从小就养成了崇尚竞争的品性,并热衷于体育运动,她成为当地儿童棒球队里第一个也是惟一一个女队员,让那些男队员的老爸们沮丧的是,她总能把他们的宝贝儿子打得落花流水。进入高中,她被选为当地的年度运动员,接着成为学生会主席,并和全国各地的优秀学生一起飞到华盛顿,在白宫接受了克林顿(Bill Clinton)总统的接见。那时的她,只想成为一名政治家。

进入堪萨斯大学后,斯狄薇的表现更是突飞猛进,她在法学院的课程全部都得到A,她加入学生会,她成为门撒国际的会员,直到Quake进入她的生活。汤姆·Entropy·奇兹默(Tom “Entropy” Kizmey),她的男朋友,已经深陷到了这个游戏中,和大多数妇女不一样,斯狄薇没有哭着喊着要情郎回心转意,相反,她也热爱那紧张刺激的战斗。Quake本是打着男性烙印的事物:喧闹、血腥、暴力、充满创造力(id把它设计得比Doom更便于扩展,更易于制作出模式),而斯狄薇热爱所有这些Quake特质。很快,她就成为了她男朋友所属战队“第九原力”里不可或缺的主力队员,她和队友们在联赛里过五关斩六将,直到面临着最终的挑战:和“无情野种”的决赛。

屏幕上的倒计时开始,斯狄薇戴上耳机,紧张地点击着鼠标,“宝贝,你还好吧?” 奇兹默坐在斯狄薇旁边,显示器的荧光映在他脸上,使他看上去就像嗑了药的影星埃米里奥·埃斯泰威兹(Emilio Estevez),斯狄薇朝他伸出大拇指:“我没事,亲爱的。”另一个房间里,“无情野种”的_fo0k狠狠吸下最后一口烟,在键盘上敲道:“好了,弟兄们,来夺冠吧。”

尘埃落定,“第九原力”击败“无情野种”,成为了无可争议的冠军。斯狄薇取下耳机靠到椅背上,她把手指深深插到头发中,长舒了一口气:胜利的感觉真棒,她仿佛站在了世界之颠,似乎没有什么事情是不可能的,而且,她还有着遍布世界各地的玩家伙伴们,包括她心目中的英雄——约翰·罗梅洛。“我不是律师,也不是什么政客,”她听到了命运的召唤:“我是个玩家,我要去达拉斯。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1997年初,似乎全世界都被Quake死亡竞赛弄得神魂颠倒,除了一家德克萨斯州的小公司——id软件。风波过后,作战室又被重新分割成单独的办公室,台球桌卖掉了,足球桌也运走了,没有尖叫声,没有对骂声,没有四分五裂的键盘,什么都没有,四下里静悄悄。大家都知道这是为什么:约翰·罗梅洛——王牌程序员、现实富翁、死亡竞赛手术师——永远地离开了。

罗梅洛房间里的空椅子让美利坚·麦基黯然神伤。尽管罗梅洛有这样那样的毛病,但他却是把老板们与雇员们连接在一起的纽带,没有人能接替他的角色,卡马克更是一点可能性都没有,麦基心想,他不光使id失去了罗梅洛,他还使id失去了作为一家游戏公司所必不可少的氛围:乐趣。

让人沮丧的还不止是罗梅洛的离去。Quake的共享-零售模式也变成了一场灾难。在理论上,id可以通过销售共享版本,并让玩家拨打800免费电话来得到完全版的密码,从而绕过零售商,但玩家们几乎没费什么力气就破解了共享版的加密程序,从而免费得到了Quake的完全版。更糟的是,这些商业事务和订单处理使id手忙脚乱,最后没有办法,他们只好紧急停止共享版的制作,但是,太迟了,已经有十六万张光盘堆在了库房里。

麦克·威尔逊,id市场部员工,把担子扔给了出版商GTI,他不光要求GTI消化掉所有库存,还要GTI在发布Quake零售版之前提高付给id的版税。在GTI的罗恩看来,这个年轻人的脸皮无疑是越来越厚了。为了能从共享版中最大限度获益,id没有把游戏交给GTI,而是让他们等到暑期销售旺季过后再把零售版上架,到了那时,被破解的共享版已经进入无数玩家的机器。零售版最后卖出了二十五万份,这个数字不算差,但和Doom2比起来只能让人摇头叹气,id由此决定和GTI断绝商业关系。罗恩很失望,但天要下雨娘要嫁人,他也无可奈何,而且,Doom2已使GTI成为业界巨头,不就是少一个合作伙伴嘛,马照跑,舞照跳。

麦克和杰伊还有新的计划:把id变成一个出版公司,从他们的下一个游戏Quake2开始,“我们不需要GTI,”杰伊对几个持股人说:“我们不需要Activision,我们可以自己来,我们可以独享所有利润,我们只需要招募更多的人,建立起完善的组织体系,在各地成立分支机构,那可以是一家完全独立的公司,专门负责出版id的游戏。”

凯文和艾德里安对此非常心动,但他们知道,这要等卡马克点头才行。尽管他俩手里的股份加起来已经占了id全部股份的大半,但毫无疑问,真正做决定的人还是那个引擎师。卡马克的技术从来就是id的核心,罗梅洛走了以后,他的地位变得更加无法撼动,而他最不愿意做的事,就是把id变成个什么雄霸一方的帝国——那从来就只是罗梅洛的梦想,而不是他的。尽管他母亲以前保守的理财观念让卡马克颇为不满,但其实,他自己在生意上也是个保守的人。只要他还在这家公司,他告诉艾德里安和凯文,id就不会做大,让其他出版商,譬如Activision,来接手他们的下一个游戏吧。

罗梅洛的离去使卡马克的生活轻松了许多:不再有关于下一个项目的大吹大擂,不再有通宵达旦的死亡竞赛。当其他人用现有引擎制作Quake2时,卡马克开始了自由自在的研究——没有压力、没有进度表,只是全身心融入到学习中。

卡马克的第一个尝试是正处在萌芽时期的三维图像加速卡。在过去,只有街机具备专门的三维图像加速及改善功能,随着Doom和Quake等强大的三维引擎不断涌现,一些刚起步的公司看到了把三维加速带入普通家庭的商机,那些高速图像处理芯片可以被嵌入到显卡中,然后用户可以把这显卡插入他们的计算机。3Dfx公司推出了名为Voodoo的首批三维图像加速卡,他们还说服卡马克,请他把Quake引擎用OpenGL图像编程接口重写,以发挥出新硬件的优势。卡马克用一个周末完成了这项工作,并把OpenGL版本的Quake免费发布到了网上。

卡马克的成果让玩家们咋舌不已:游戏至少比原来流畅了20%,而且图像更为逼真。由简入奢易,由奢入简难,一旦他们看过了硬件加速下的Quake,他们就再也不想回到原来的软件渲染模式,他们毫不犹豫地把标价几百美元的Voodoo卡带回家升级爱机。其他程序员们也开始针对3Dfx加速卡编程,没错,跟随卡马克,这已经慢慢变成一种模式。其他显卡制造商也加入了三维加速市场的争夺,一个高科技的产业诞生了。伴随着GLQuake成功的,还有卡马克的另一个项目:Quakeworld,他写的这个免费程序把Quake的多人游戏带到了一个新的高度。随着OpenGL带来的图像改进,以及Quakeworld带来的网络改进,Quake达到了前所未有的完美。

但卡马克的勤奋工作并没能消除Quake开发阶段那沉闷气氛所带来的恶果,人才开始从id流失。首先是杰伊·威尔伯,一天,他那四岁的儿子向他问道:“为什么其他爸爸都带他们的孩子去看棒球比赛,而你从来不带我去?”随后是程序员迈克尔·亚伯拉什,他回到了软件巨人微软的怀抱;接下来是关卡设计师桑迪·彼得森,自从那次在Quake设计上发生冲突后,他就萌生去意,现在,他动身了;负责市场营销的麦克·威尔逊,以及负责技术支持的死亡竞赛能手肖恩·格林,放出话说他们要加入罗梅洛的公司。

玩家社群,在震惊于罗梅洛和卡马克的散伙后,推测出起各种各样的背景和原因,直到卡马克接受了一次深入冗长的电子邮件访谈,他写道:“许多人用他们自己的眼光来看待id最近发生的事,但我们的开发团队跟以前比没有丝毫颓势。罗梅洛被解雇的原因是他没有尽心尽力……我相信,哪怕只有三个程序员,加上三个美工和三个关卡设计师,我们仍然可以做出世界上最棒的游戏……我们削减了商务员工的数目,我们现在只是开发者,这一直以来就是我和罗梅洛的分歧——他想建立一个帝国,而我只想写出优秀的程序。现在,大家都开心了。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

站在德克萨斯商业中心大楼那金碧辉煌的电梯里,罗梅洛按下了最上方的按钮。这幢坐落在达拉斯市中心的五十五层大厦里全是律师所、银行、石油巨头,而现在,一个二十九岁的玩家就要凌驾于他们之上了:罗梅洛头天晚上忽然接到房产经纪人的电话,他告诉罗梅洛,你一定得来看看这里空中宫殿一般的顶层套房。罗梅洛对此半信半疑,自从离开id后,他已经看过了十几个地方,没有一个让他满意,因为,他接下来可是要大干一番的。

的确,罗梅洛的事业要彻底从头来过。id的其他持股人花几百万美元买下了他手里的股份(《时代》周刊对此的估计是一千万),这意味着id今后的游戏和版税将和罗梅洛没有任何关系——他将再也分不到Doom和Quake带来的收入。此外,这新的开始对罗梅洛而言还是一项使命,在被卡马克的技术束缚了那么多年后,他终于可以自由地去追逐他的梦想,追逐他心目中的游戏、他心目中的游戏公司,以及,他心目中的人生——去追逐那id软件所没有的一切。

“在id的时候,哪怕公司已经赚到了几百万美元,办公室里依然徒空四壁,”罗梅洛叹道:“那全是卡马克的主意,什么‘我的房间不需要任何装点,我只要有桌椅和计算机就够了’,他不会说‘啊,我们有了那么多钱,我们可以把办公室打扮得酷一点’。”罗梅洛的新公司将不止是一个能让玩家们开心工作的地方,它将是一个玩家们可以向媒体、朋友、家人炫耀的地方:看看,这就是游戏天堂!在这个天堂里,我们还要做出更多的游戏。

当电梯在顶层停下时,罗梅洛感觉就像走进了月宫,繁星点点,触手可及。这是个上下两层,共22500平方英尺的阁楼,它四周全是窗户,上方是一个六十英尺高的玻璃尖顶,不管罗梅洛走到哪里,他都能看到万花筒般的迷离光芒——包括月光和从楼下照射上来的灯光。这还是一片处女地,罗梅洛已经禁不住开始规划起他那梦幻般的游戏公司:在这个房间里堆满枕垫,在那个房间里放满街机,拐角那个房间用来当“发泄屋”,你可以在里面摧毁任何东西!

但经纪人告诉罗梅洛,这房子并不是十全十美,它的问题是那四周没有任何遮挡的巨大空间和窗户,在日光的照耀下,空调根本起不了作用。此外,它的价钱也不便宜:十五美元一平方英尺,也就是说,一个月的租金大概是三十五万美元,这让很多人望而却步。而且,这两层阁楼也不太适合做银行或者是石油巨头们的办公室,于是,它现在还空置在这里。但罗梅洛不这么看,“这里很棒,我想不出什么地方比这更合适,就它了,”罗梅洛兴奋地宣布:“这里,将是一家制作游戏的公司。”他给公司命名为“梦设计”(Dream Design)。

随着老友汤姆的加盟,罗梅洛开始着手把新公司介绍给兴趣十足的出版商们。他将不再依附于技术或是卡马克,事实上,他已经从id得到了Quake引擎的授权,他要在这基础上制作一个游戏,他将有三个游戏设计师,同时开发三个不同类型的游戏,他将给每个设计师配备足够的人手,以便他们尽快推出作品。这不只是一个游戏公司,这将是一个娱乐公司,而且,公司的宗旨从一开始就干脆明了:“设计决定一切,”罗梅洛说:“游戏将是我们设计的样子,我们决不会因为技术的局限或是某个程序员说无法实现而放弃我们的设计,你设计一个游戏,然后你做出它,就这么简单。决定一切的,是他妈的设计。”

罗梅洛给出版商开出的条件非常夸张:每个游戏三百万美元,再抽取四成版税,而且,他的公司还拥有游戏的所有知识产权和把游戏移植到其他平台上的权利。出版商们略微迟疑,但却没有放弃。在那时,游戏开发者的名气起着举足轻重的作用,席德·梅尔——《文明》系列的传奇设计师,有他自己的公司:Firaxis;威尔·赖特(Will Wright)——畅销游戏《模拟城市》的创造者,有他自己的公司:Maxis;理查德·盖略特——《创世纪》之王,有他自己的公司:维真;甚至盖略特的前雇员,克里斯·罗伯茨(Chris Roberts),也开办了自己的Digital Anvil公司。在《德军总部3D》、Doom、Quake这些巨大成功背后的罗梅洛,已不止是声名显赫,他简直是个金矿。出版商们为他和汤姆购买头等舱的机票,让他们住进比佛利山庄几千美元一夜的套房,给他们配备豪华轿车,带他们在美酒鲜花的簇拥下步入城里最顶级的餐馆。罗梅洛和汤姆被这忽如其来的改变弄得眼花缭乱,世界正在迎接他们的到来,机会仿佛无处不在,觥杯交错中,id已是陈年旧事。

罗梅洛计划制作一个射击游戏,汤姆则是一个角色扮演类的冒险游戏,只缺一个了。罗梅洛通过以前《软盘》杂志社的老朋友认识了托德·波特(Todd Porter),托德此前在达拉斯一家名为7th Level的游戏公司领导一支开发小组,他精力充沛、积极乐观,更重要的,他是一个玩家,一个真正的玩家,一个苹果机时代过来的老玩家,现年三十六岁的他曾就读于一家牧师学校,但他很快发现,讲道其实是一项商业活动,而不是传播福音,这让他很沮丧,而且,为了能在某间大教堂混个一官半职,他要在教会那复杂的人际关系中周旋,于是他退学了,并用省下来的学费买了台计算机。

父母离婚后,托德不得不为养家糊口而四处奔波,他到爱荷华州学习金融,手头拮据时,他甚至在一支名为“传教男孩”的艺术团里为观众表演过异国风情的舞蹈。略有积蓄后,托德潜心钻研起编程技术,他最终在奥斯汀城盖略特的维真公司谋得一份职位,没过多久,他就和美工杰尔·弗莱厄蒂(Jerry O'Flaherty)离开奥斯汀,前往达拉斯创办新公司,拥有自己的事业从来就是托德的梦想。但开张伊始,托德就陷入资金短缺的困境,他只好把公司卖给了7th Level,那梦想刚展开翅膀就被迫降落了。就在这时,罗梅洛向他伸出了橄榄枝。托德告诉罗梅洛,他的商业头脑能派上用场,罗梅洛也觉得托德在这方面的确很有一套,而且,和托德一起的杰尔可以担任美工部门的头。在麦当劳吃午餐时,他们四人决定开始合作,餐巾纸上写着他们的会议记录。

他们还需要一个响亮的名字,“梦设计”显然不行,罗梅洛需要一个更新颖、更简短有力、更带有技术气息的名字,汤姆的建议是:“离子”(Ion),某人接着汤姆的话打趣道:“外面那些游戏开发者们最好小心一点,否则他们就会被卷到离子风暴中。”啊,离子风暴(Ion Storm)!——这个名字不赖!

圣诞前夜,离子风暴和Eidos互动娱乐公司达成出版协议。Eidos是一家英国公司,它的原始资本来自南非的金矿,最近,它推出了一款射击探险游戏:《古墓丽影》(Tomb Raider),里面的主角是一个女性版的印第安纳·琼斯。Eidos计划着推出更多的大牌游戏,为此,它要先找到大牌的制作者,譬如:约翰·罗梅洛。他们答应了离子风暴提出的所有条件:每个游戏三百万,而且,为了能把游戏移植到其他平台上,他们愿意每个游戏再付一百万,他们还获得了离子风暴后续三个游戏的优先选择权,也就是说,总共可能是六个游戏,这样算下来,离子风暴在创立之初就已经价值一亿美元。

首批资金到账后,罗梅洛、汤姆、托德立刻开始勾画起他们梦幻般的游戏。汤姆的奇思妙想最终归结为一个宏大的银河探险传说:《异次元》(Anachronox);托德则计划制作一个策略游戏:《恶灵》(Doppelganger),而罗梅洛,则宣布了他的终极作品,一个史诗般的主视角射击游戏:《大刀》,这就是很久以前卡马克那《龙与地下城》游戏里的神秘宝物,罗梅洛为它牺牲了一切——整个游戏的命运,伙伴们的希冀,为了它,罗梅洛和恶魔们进行了一笔交易,那次,大刀毁灭了世界,这次,罗梅洛要用它去征服世界。

在《大刀》里,玩家扮演一位名叫宫本宏(Hiro Miyamoto)的生化学学生,那是二十五世纪的京都,一个名叫三岛纪(Kage Mishima)的邪恶科学家盗取了宫本宏导师炼制的大刀,这柄神物具有时空穿梭的超能力,三岛纪用它来满足私欲,并把世界带上了腐化糜烂的不归路,譬如,他挟持了艾滋病的治疗秘方。在接到宫本宏的警告后,三岛纪把这位年轻战士送进了时空漩涡,先是京都,然后是古希腊和中世纪的挪威,最后是末世时分的旧金山。为了展开情节,主角还有两个伙伴:飞人约翰逊(Superfly Johnson)和机智迷人的女英雄:美树子(Mikiko)。

游戏全名为《罗梅洛的大刀》。他的壮志现在展露无遗,这个浩瀚世界里的每一个多边形都将从头搭建,并能和玩家进行天衣无缝的交互,除了逼真的人工智能外,《大刀》的深度和广度也让人咋舌不已,它将有接近一百个关卡和一百种怪物——几乎是Quake的四倍!罗梅洛有着多年独立开发游戏的经验,但这次,尽管他乐意,但他显然无法,自己完成所有工作。为了这个终极游戏,他需要终极玩家的协助。麦克·威尔逊,终于可以试着去拓展海外市场,id从未给过他这种机会;肖恩·格林,罗梅洛的死亡竞赛拍档,愿意协助编程;当罗梅洛在因特网上放出话后,狂热的Doom和Quake迷们蜂拥而至,他们的简历和他们制作的模式塞满了离子风暴公司的电子邮件服务器,罗梅洛在其中挑选了一些他满意的:那些能让他眼前一亮的作品。毕竟,罗梅洛自己也是这么过来的:手边放着汉堡、困了就囫囵打个盹、不去教室、推掉约会,全身心制作游戏,也就是说,有没有真正在游戏公司里工作过并不是关键,只要有热情,有干劲,就足够了。

1997年初,这些终极玩家们从四面八方赶到离子风暴的临时办公室来上班,以及,和他们的精神领袖——罗梅洛,进行死亡竞赛。要知道,他们过去几年完全就是生活在罗梅洛创造的游戏世界里。布赖恩·爱瑟罗(Brian Eiserloh),那著名的天体创作营主办者,在寄来一篇中世纪风格的散文后获得录用;威尔·罗康托(Will Loconto)放弃他在工业金属乐队“信息社会”(Information Society)的演出,担任了离子风暴的音响师;斯维若·克维恩莫(Sverre Kvernmo),Doom社群里的明星作家,离开了故土挪威,成为罗梅洛麾下的首席关卡设计师。这无疑是他们人生道路上的一次重大抉择,但他们几乎不经考虑就做出了决定,毕竟,“我们是罗梅洛时代的产物。” 斯维若如是说。

斯狄薇·凯丝也是他们中的一员,她本是堪萨斯大学Quake战队“第九原力”的明星女玩家,在击败“无情野种”夺冠后,她来到达拉斯朝圣。手术师罗梅洛在第一场死亡竞赛中赢了她,但天性不服输的斯狄薇要求再战一场,她取得了胜利。心服口服的罗梅洛为此制作了一个网页,对斯狄薇的技艺大加赞赏,随后,他把斯狄薇招募进了离子风暴。

为之欢欣鼓舞的还不光是这些正式踏入游戏业界的玩家,媒体们也被离子风暴的美好前景所迷醉。每一个到临时办公室采访的记者都会看到,什么才是游戏公司所应该具备的精神。死亡竞赛不只是被允许,它根本就是企业文化,每时每刻,罗梅洛都在和十几个玩家们尖叫着追逐于Quake的世界中。在和纽约市的id前公关公司建立起合作关系后,麦克向媒体们宣布,等新的办公室建好后,它将是“游戏界的威利万卡巧克力工厂”(Willy Wonka the Chocolate Factory,1971年著名喜剧片):它将有一个影院,一个游戏房,和一个专门用于死亡竞赛的竞技场。《时代》把罗梅洛评选为当年度五十大“数字名人”之一,《财富》则把离子风暴列入二十五家全美“最酷的公司”。

Eidos带领离子风暴的几个首脑举行了新闻巡演,一路上极尽奢华之能事,满心欢喜的麦克还非得说这次活动是“推不掉”。不管怎样,他们现在已是箭在弦上了。麦克把离子风暴的队伍称做游戏界的“披头士”,这话让大家都听得满心欢喜,托德甚至建议模仿披头士乐队最后录制的那张唱片封面来张合影,那封面上是叱咤乐坛近十年的四位巨星正鱼贯穿过一条名叫Abbey Road的大道。在所有这些喧嚣的背后,每一个人都清楚,谁才是公司的灵魂人物,是谁给他们带来了出版商的投资和世人的关注:约翰·罗梅洛。

离子风暴把自己描绘成了自由与梦想的化身,而id,只是个毫无生气和生机的老顽固。这不只是两家公司的对比,这是两种世界观的对比:设计和技术,艺术和科学,狄俄尼索斯和阿波罗。“id是一家以技术为主导的公司,”麦克说:“而离子风暴则着重于艺术美感的自由发挥。在id,当图像引擎完成时,设计师和美工们已经没有多少时间来制作游戏本身了,我们认为这不是一个很好的做法,它没有合理地平衡技术和设计所占的比重。”

罗梅洛对此表示赞同,他告诉《连线》杂志:“在我离开后,id的气氛就变得阴郁压抑……没有扩张公司的计划,没有人和卡马克就一些重要的决定展开争论。我想做一个可以让我尽情发挥创造力的游戏,我想有足够多的人手来完成它,但这些id都没有,所以我离开了。”罗梅洛还告诉伦敦的《泰晤士报》(The Times),在两年之内,离子风暴将取代id成为游戏市场的领头羊,“这是必然的,”他说:“这也是让人振奋的。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

卡马克驾着法拉利F40驶进id黑色办公楼的停车场,忽然,他听到一声巨响。一辆敞篷货车撞到了F40的尾部,当卡马克下车时,货车已经一溜烟开上高速公路,汇入了滚滚车流。卡马克查看了一下被损坏的部位,然后怒气冲冲地上楼走进办公室,他在计划文件里宣泄道:“没有文字能表达我现在的感受,如果你们谁在达拉斯附近看到或认识一个穿红色长裤,开棕色货车,车上拉着碳化纤维的家伙,把他押上来!”

众多回复中,有罗梅洛的声音,他在网上发表道:“那辆F40被撞了?报应啊。”

这不是罗梅洛的第一次挑衅。最近一段时间,几乎是每天,id的人们都会看到罗梅洛向媒体大放厥词,他不停地嘲笑id,说它是一个只懂技术的过气公司,这还不算,在id的人们看来,罗梅洛正把id以前的成就全部归结为他一个人的功劳。在罗梅洛的正式新闻稿里,他被诩为“负责id游戏的编程、设计和项目管理”,而只图省事的记者们则直接称呼他为“id背后的创作天才”,或者是“那个制作了Doom和Quake等重量级游戏的人物”。

这些自然也成了id内部的谈资,尽管他们知道媒体总会犯傻,但显然,罗梅洛也没有主动地去纠正媒体的错误。很快,攻击罗梅洛和离子风暴就成了id日常生活的一部分。麦基发表了一份计划文件,对罗梅洛是id主心骨的说法大肆挖苦了一番;艾德里安和凯文则喃喃道他们一定要把罗梅洛的战舰击沉;而最终来火上浇油的,则是id的新美工,卡马克的新朋友:保罗·斯蒂德(Paul Steed)。

无论怎么看,保罗都不像是个搞计算机的人,他粗犷豪迈,肌肉强健,满是纹身。保罗的父亲很早以前就抛下了家庭,在东海岸度过短暂的童年后,保罗对计算机产生了兴趣,但他很快就放弃了,因为,“你要么整晚坐在那里和程序打交道,要么整晚出去和女孩们打交道,对于我,女孩的吸引力更大些。”不乏才智的保罗慢慢养成了火爆好斗的脾气,在军校的课堂上和别人大打出手后,他被开除了。他随后回到计算机行业,在维真公司担任美工。当他收到id的工作邀请函时,他简直不敢相信自己的眼睛,但他不知道,他这一去,就卷入了争斗。

罗梅洛?保罗没怎么听说过这个人,保罗只知道他是id的创始人,而且他在离开id之后还不断到666套房来扮演不速之客,就好像他根本没在外面说id的坏话,而且还想和大家继续做朋友一样。这让id的员工们颇为恼火,尤其是凯文和艾德里安:“这个杂碎没事干怎么老来我们这里闲逛?”这些抱怨保罗都听在耳里,直到有一天,他站出来说:“去他妈的罗梅洛和什么风暴!走!我们去他的公司,看看会怎么样!”

第二天,保罗、凯文和艾德里安一行三人来到了达拉斯城边的离子风暴临时办公地。罗梅洛尽管不知道他们葫芦里卖的什么药,但还是领着他们四处参观了一圈。保罗留意到一个美工制作动画时用的是一个老旧的软件,于是,他回到id后第一件事就是在计划文件里表示对离子风暴未来前景的质疑,这,就是后来所谓“计划文件大战”(.plan war)的导火索。id和离子风暴的员工们开始互相诋毁,你来我往,彼此都不甘示弱,这到后来变成了每天上班的例行公事。最后,罗梅洛也加入战团,他给保罗写了封邮件,在信里,他问保罗:想不想在《大刀》的盒子上留个名啊?保罗给艾德里安看了这封信,并向他讨教如何回敬罗梅洛,艾德里安开心地指点了保罗一番。“哥们!”保罗给罗梅洛写道:“不要跟我瞎搞,否则,我会揪起你的马尾巴,一脚把你踢回你最钟爱的Doom时代。”

卡马克一直保持着沉默,但办公室里的火药味越来越浓,这让他无法置身事外,最终,他决定体验一下放弃自控力的感觉,或者,用他的话说,做一次“情绪操控方面的试验”。他选择了一个大牌媒体来作为他首次参战的舞台:《时代》周刊。在那一期上,有篇两页多长的罗梅洛个人介绍,卡马克在接受访谈时,直言不讳地告诉公众,和罗梅洛的一贯说法相反:这位前任拍档的离去不是辞职,而是被解雇。“在变得有钱有名后,罗梅洛失去了工作的动力,然后公司把辞职书放到了他面前。”卡马克嘲弄了罗梅洛对于财富和名望的野心,“而我只想拥有几辆法拉利。”卡马克还补充道,罗梅洛“不可能”像他承诺的那样在圣诞节前拿出《大刀》。

同样在这篇报道里,罗梅洛把id指为“太束手束脚,太鼠目寸光”。两个约翰的正面交锋使得id和离子风暴之间的死亡竞赛愈演愈烈,而他们的决斗场,将是E3电子游戏大展(Electronic Entertainment Expo)。这是游戏界一年一度的盛会,各大公司都趁此机会把自己的最新最棒的游戏拿出来演示,id今年的王牌是Quake2,他们对此充满信心:《大刀》在它面前将不止是黯然失色,而是毫无生机。

Quake2的开发起始于1996年9月,它是id最新引擎的技术展示,也是id迄今为止风格最统一的游戏。它取材于1961年的二战电影《六壮士》(The Guns of Navarone)。在影片中,敌人在一个偏僻小岛上的堡垒里安装了两门火力超强的火炮,主角们的任务就是摧毁它。id觉得这是个绝妙的主题,在这样的军事背景下,玩家有了明确的目标和动机——这在id过去的游戏里还从未有过。在Quake2里,邪恶星球斯特罗格斯(Stroggos)上的异形们囤积起了大量的人类残肢断臂,用以生产威力强大的半机械战士,在地球人的反击过程中,玩家驾驶的战机被对方击落,为了逃出生天,为了阻止人类被它们征服,你要找到并摧毁斯特罗格斯异形建造的终极武器:巨炮(the Big Gun)。

Quake引擎里的真三维技术是一次质的飞跃,而Quake2,卡马克不觉得它在技术上有多大进步。尽管如此,新引擎仍然足以使人过目难忘,最显著的,就是Quake2能够以软件和硬件加速两种模式进行渲染,也就是说,拥有三维加速卡的玩家将看到前所未有的图像效果——彩色的光影、平滑的物体表面、等等,那是一种栩栩如生的、流畅的、影院般的游戏体验。

凯文从来就是id持股人中最有外交手腕和组织才干的一位,在他的带领下,id大军正步调一致地朝着目标进发。死亡竞赛销声匿迹了,在沉静紧张的气氛中,他们日以继夜地工作着。早年什里夫波特湖畔、麦迪逊公寓、拉普拉达顶楼里的一些身影已经消失:汤姆、罗梅洛、杰伊、肖恩……,取而代之的,是更符合卡马克务实作风的团队,包括新任CEO:托德·霍伦谢尔德(Todd Hollenshead)——前安达信公司的税务顾问,以及提姆——id现在的首席设计师。

一反往常,卡马克的喜悦之情溢于言表。1997年6月16号,就在id即将参加E3大展之前,他在计划文件里写道:“你们怎么也猜不到事情的进展是多么顺利,在外人看来,我们好像过气了,不行了,但是,我们要用事实来说话。最近,我会不时地欣然微笑,只因为想到我们的新游戏会有多酷(当然,也有可能是因为没睡够……)。现在的id是一支梦幻般的队伍,我们在按部就班地前进(绝不是胡扯!),我们在制作一个伟大的游戏,所有人小心了!”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1997年的E3不光是一个游戏大展,它本身就是一个游戏。从正门步入,参观者就像走进一台计算机的内部:闪耀的灯光、轰鸣的音响、年轻的玩家,以及,无处不在的展会小姐——女模特、女演员、舞女们,她们打扮成游戏中的各种角色,刺激着小伙子们的视觉。最耀眼的现场女星无疑是《古墓丽影》游戏里的女主角劳拉·克劳芙特(Lara Croft)。玩家们背囊里塞满了各种免费小礼品,他们在展台前排起长队试玩游戏,劳拉们四处游走,但她们无法企及这次E3上的真正明星:一个身着黑装的长发青年,他缓缓穿过大厅,所到之处,玩家们纷纷弯腰鞠躬,久久不起。

“万岁,万岁……”玩家们呢喃道,他们当然是指罗梅洛,或者说是“上帝”——就像他后来称呼自己那样,他在一份计划文件里半开玩笑地接受了这个神圣的绰号。但这不完全是个玩笑,就媒体或玩家所能看到的,他俨然就是一个摇滚之神,他无处不在:《计算机游戏世界》、《华尔街日报》、《财富》。他的大幅彩照如帝王般出现在封面上:在给一家游戏手柄公司做广告时,他身着红色长袍,头戴皇冠,背景字样是:“来自皇家封印的推荐”,以及罗梅洛的引语:“如果你想把对手们打得落花流水,那么,‘黑豹XL’就是你必备的武器。”在罗梅洛给媒体准备的特写照片中,他端坐在一张价值九千美元的宝座上。

此刻的罗梅洛比以往任何时候看上去都更为高贵。他的紧身衬衫上装点着珠宝,他黑亮的长发披散在身后。罗梅洛的长发现在是如此出名,甚至,在一次访谈中,他透露了他打理头发的十部曲:“我会先让头发从面前垂下,然后用梳子和吹风机慢慢梳理。我是从上往下梳,这可以使头发保持直顺,而把它完全吹干可以保证它不会打结。”

徜徉在五光十色的会场中,罗梅洛和周围的游戏一样欢快兴奋,但每一个与会者都知道,他不是来这里作秀的,他是来向世人展示《大刀》的。1997年3月项目启动时,罗梅洛就向大家保证在1997年圣诞节前发布游戏,这么说,游戏现在应该已经完成一半了。在罗梅洛看来,这个进度表完全是可行的,他拥有一支庞大的开发队伍,譬如,他有八个美工——而id只有两个。尽管卡马克曾公开对《大刀》能否按期发布表示过怀疑,但媒体和玩家仍满怀热情,直到他们看到离子风暴的一个广告后,所有人都觉得,罗梅洛做得太过分了。

有罗梅洛的显赫名声以及Eidos的巨额投资作为双保险,再加上麦克这个口无遮拦的经纪人,离子风暴做起广告来简直是肆无忌惮。1997年早些时候,在麦克的建议下,罗梅洛批准了一则模仿死亡竞赛时玩家对骂的广告,那本就是他和其他玩家一起创造的语言,但当他看到那句话变成铅字时,他略微犹豫了一下,“就这样?你确定?”他问麦克。

“当然!”麦克告诉罗梅洛:“别跟个娘们似的。”

罗梅洛同意了。随后,在四月份,这则广告覆盖了所有主流游戏出版物,那是红色背景上的一行黑色字样:“罗梅洛就要把你变成他的婊子”(John Romero’s About To Make You His Bitch),最下方是小字:“吞了它!”——麦克刚把这个短语注册成商标。广告的效果立竿见影,它不止是煽动起了玩家,它还激怒了玩家,他们感觉受到了侮辱:罗梅洛以为他是什么人?他真觉得自己那么牛?但玩家们愿意再给这位游戏之神一次机会,看看他的作品是不是真像他吹的那样,是地球上有史以来最酷的游戏,毕竟,它来自id的大师,来自制作了《德军总部3D》、Doom、Quake的罗梅洛。玩家们都准备在1997年E3上一睹《大刀》的尊容。

《大刀》的演示就在Eidos展台最前方的正中央,它旁边才是势头正劲的《古墓丽影》系列。游戏里的挪威关卡是专门为E3而制作的,玩家们围聚在大屏幕前,屏幕上不再是Doom或Quake里阴暗的迷宫,而是室外场景,村落里一幢幢挪威风格的小房屋,银装素裹,神秘幽远,此外,还有一段古希腊庙宇场景的视频展示。玩家们交口称赞,但却没有过于激动,当罗梅洛逛到id摊位前时,他知道这是为什么了。

罗梅洛穿过人群,走到近处观看Quake2的演示。淡黄色的光芒映在他脸上,映着他合不拢的嘴:彩色光影!罗梅洛无法相信屏幕上的画面:那是一个地牢似的军事基地关卡,当玩家开枪时,黄色的火光沿走道射出,两侧墙壁在它的照耀下泛出一阵阵黄色。尽管这效果不是很明显,但罗梅洛知道这意味着什么,他就像回到了许久以前的那个早晨,他就像看到了行走在马里奥世界里的戴夫:“天哪,”他嘟囔道,卡马克还是那个卡马克。

罗梅洛觉得Quake2是他在计算机屏幕上见到过最棒的东西,在硬件加速的帮助下,卡马克铸就了一个充满美感的虚拟世界,彩色光影使它无比逼真。这是下一波技术浪潮,罗梅洛知道,卡马克的游戏也是他《大刀》的竞争对手,唉,如果非要做个比较,那么,《大刀》只是一本书,而Quake2是一台彩色电视机,罗梅洛琢磨着,如果像这样下去,《大刀》根本没有任何机会。

罗梅洛和id的协议里有个条款:他可以获得id的下一个引擎,当然,他没想到这“下一个”原来是如此大的飞跃。他心意已定:为了利用起Quake2引擎,他不惜把《大刀》重头来过。但还有一个问题:协议里有专门规定,只有在id的游戏上架发售后,罗梅洛才可以获得新引擎的授权,也就是说,要到圣诞节后他才可以得到Quake2引擎,他必须用现有技术继续做下去,然后,花一个月,他估计,来把游戏转换到Quake2引擎下。

卡马克的技术再次迫使罗梅洛改变了计划。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

大展进行到尾声时,玩家们纷纷把注意力投向了另一项活动:id公司赞助的“赤色全歼”(Red Annihilation)死亡锦标赛。房间正中放着比赛的奖品——卡马克那辆红色的法拉利328跑车。“在《德军总部3D》获得成功后,我买了我的第一辆法拉利,”卡马克告诉媒体:“Doom和Quake又为我带来了三辆,我一个人开不了那么多,但我不想把它们卖掉或是停在车库里,我要把它送给玩家,说到底,id的成功离不开玩家们的支持,这次死亡竞赛的王者就将获得这顶桂冠。”

两千多名玩家已为十六张决赛入场券在网上鏖战了许久,胜出的选手们聚集到了最终一决高下的会场里。强中更有强中手,一轮轮淘汰后,台上最后只剩下汤姆·Entropy·奇兹默——堪萨斯大学“第九原力”的队员,和丹尼斯·Thresh·方——第一届官方死亡竞赛,微软“审判日”比赛的冠军。车牌为IDTEK1的法拉利已经停到会场中,大屏幕投影出决赛选手屏幕上的画面,人群开始欢呼。Thresh尽量让自己不去注意显示器上跑车的倒影,直到他完成最后一次得分——他以13比1取得胜利。

卡马克走上台,把车钥匙交到Thresh手中:“嗯,你准备怎么把它弄回家?”Thresh似乎面有难色:“我不知道,应该是把它托运回去吧。”半个小时后,卡马克带着五千美元现金回到会场,那是给Thresh的运费。

人潮退去后,罗梅洛逛了过来,他想看看id都到了些什么人,没错,他们是对手,但他们仍然可以做朋友。他看到卡马克和几个id的人坐在计算机边闲聊,他们谈论起这次比赛,然后有人提议说大家互相比试一下,罗梅洛过五关斩六将,直到只剩下他和卡马克。

两位约翰坐到了台上,决斗就在眼前。延绵骤变之后,物依旧而人已非。他们曾一起在什里夫波特玩《超级马里奥》,那时,世界还充满着未知和机遇, id还只是一个深处来的想法;他们曾一起在威斯康星玩气垫飞车F-Zero,寒冷的冬夜里,他们梦想着有朝一日可以拥有自己的跑车;他们曾一起在Doom的世界里追逐,在屏幕上看到对方的那一刹,他们看到了即将到来的名望与财富;现在,他们平生第一次在Quake——这个使他们走到决裂边缘的游戏——里碰面了:漫长的开发过程中,他们从未一起玩过。

比赛开始,火箭弹在厅堂中呼啸穿过,他们追逐着、躲避着,很快,引擎师约翰就败在了手术师约翰枪下。这场比赛结束了,而下一场即将在更加刺激动人的领域展开——那就是Quake2和《大刀》终将狭路相逢的地方。这世界永远充满竞争,和意外。

第十四章:硅堡

酒保老弟站在吧台旁调制出又一杯BFG鸡尾酒:先倒入朗姆,再加少许哈密瓜酒和蓝柑橘甜酒。这名字无疑是源自Doom里他最钟爱的武器。作为麦斯奎特城附近和id办公楼在同一条马路边的酒吧,BFG自然是他们最招牌的一道风味,这杯绿色汁液也可以算做是敬给达拉斯的祝酒——它现在成了电子游戏淘金热里的新兴首府。

1997年夏天的达拉斯之于游戏界,就像九十年代初的西雅图之于音乐界,而id软件就是涅槃乐队。自从五年前两位约翰带着《吃豆子》来到麦斯奎特后,这附近的游戏开发者数目已增长了两倍,在奥斯汀城理查德·盖略特的旗舰公司维真周围也涌现出了无数小型游戏公司。《时代》周刊把德克萨斯州的玩家们称为“新一代牛仔”,《连线》杂志把他们叫做:“Doom孩子们”,《波士顿环球报》(The Boston Globe)则把德克萨斯州的游戏复兴运动称做“新的好莱坞”。

一个更贴切的名称应该是“硅堡”(Silicon Alamo),因为这次热潮的浪尖是主视角射击游戏。以Doom、Quake、《毁灭公爵3D》为首,射击游戏已成为一个几百万美元的产业,它们雄霸于计算机游戏的销售排行榜前列。这正是id在《软盘》时就许下的梦想:让PC机成为一个真正的游戏平台。交互式娱乐软件在1996年的销售额总共是三十七亿美元,其中十七亿来自PC机游戏。《今日美国》把“整个PC产业重振生机”的推动力归结为“PC游戏的爆发”。

以id和离子风暴为领头羊,新一代游戏公司在达拉斯如雨后春笋般涌现,Rogue和Ritual,分别专注于制作id和3D Realms的游戏任务包,譬如Quake的新增关卡;有前id员工桑迪·彼得森加盟的Ensemble Studios出品了有史以来卖得最好的即时战略游戏:《帝国时代》(Age of Empires);前微软公司模拟飞行引擎的创作者和前天极员工创办了Terminal Reality公司,致力于推出跨平台的游戏产品;电子竞技职业联盟正凭借着死亡竞赛变成游戏世界里的NBA。

这欣欣向荣的景象背后,有id引擎技术授权的一份功劳。除离子风暴外,其他许多公司也采用起id的引擎,为此,他们需要先支付二十五万美元,并在游戏发布后让id提取版税,也就是说,id可以从竞争对手身上赚到钱。但铺天盖地的射击游戏已使媒体猜测起谁能扮演“Quake终结者”的角色,从而把id赶下神坛。《毁灭公爵3D》早已被认为是很有潜质的一部作品,而现在,一家由几个前微软职员在西雅图开设的公司:Valve,使用Quake的引擎制作了《半条命》(Half-Life),它在E3大展上博得玩家和媒体的一致称赞。斯科特·米勒前些年在北加州发现的一家名叫Epic的公司也制作了一款主视角射击游戏:《虚幻》(Unreal),它的演示版同样好评如潮;当然,还有《罗梅洛的大刀》。所有这些游戏都即将上市,包括id自己的Quake2。硅堡的决战必将是近几年最精彩纷呈的一出大戏,当然,前提是交战各方能先摆平自己的家务事,不要在战鼓声中传来后院失火的噩耗。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

比赛扣人心弦,卡马克坐在他的法拉利F40里,一辆保时捷911在他身后紧追不舍。卡马克租下了德克萨斯州艾尼斯镇的这条乡间跑道,以举办一次公司内部的飚车比赛。艳阳高照的午后,把游戏带给他们的高档跑车拉出来溜溜,再互相较量一下,真是件无比开心的事。最近工作压力太大了,他们时常举办这样的跑车大赛,前一次,卡马克甚至把电话打给了麦斯奎特的市长,请他把当地机场关闭一段时间以用于赛车,市长没有什么好考虑的——恭敬不如从命,因为,卡马克给当地警察局捐助过上万美元的装备和设施,其中包括绣着Doom标志的防弹服,他的请求自然应该得到满足。

要一较高下的不只是赛车,尽管id的Quake2在E3上一览众山小,但公司内部的压力丝毫没有减轻。卡马克已经从他所谓的“情绪操控试验”中抽身而出,因为他觉得那与他的天性和动机不符,但其他人可没那么容易善罢甘休。他们绝不放过任何奚落其他射击游戏的机会,甚至包括使用了id引擎的游戏。当《半条命》的第一个试玩版发布时,公司里许多人断言,它不会有明天。

和笔下作品Quake2一样,id也变得越来越军事化,越来越严肃。一些员工们觉得id已经是一口被抽干了幽默和乐趣的枯井。那些最有趣的人——罗梅洛、麦克、杰伊、肖恩——先后离去了,只剩下对抗《大刀》的紧张气氛,以及员工之间的竞争。麦基等人埋怨起卡马克:他整天把自己关在房间里,他的不作为实际上使各种矛盾更为激化。

最让员工们觉得无所适从的就是奖金制度。每个季度末,持股人们都会召开一次会议,决定给每个员工开多少薪水,其中多出合同金额的那一部分就算做奖金。某人在这个季度可能拿到十万,而下一个季度就只拿到两万。老板们自己也承认这种随心所欲的做法有很大缺陷,但这是他们惟一能想出来的办法。从而,员工们意识到,如果想得到更多薪水,他们就需要超过其他员工,要比其他人更聪明、更能干。这简直就是工作中的死亡竞赛。

随着罗梅洛这位全才的离去,员工间的竞争更加激烈。麦基在Quake开发之初作为id神童的日子早已结束,卡马克的冷漠让他怀疑起他们之间是否真的存在过友谊,而在卡马克看来,麦基只不过是又一个聪明反被聪明误的人,就像罗梅洛一样失去了专注和动力。而麦基的老对手,提姆,则不断巩固着他在公司中的地位。

越来越频繁地,卡马克会带上一台便携机离开公司,然后消失在不知何处的小旅社里,他只想专心写程序,他从来就只想专心写他的程序。id的问题,在他看来,无疑就是那种可以通过控制公司规模并使开发团队紧凑高效而避免的问题。“任何一个项目,”他在计划文件里聊道:“都有一个合适的人数上限,过了这个临界点,增加人手只会使项目延期,这是因为额外的人员需要额外的沟通,解决问题的速度随之降低,从而使效率恶化,而且,增加人手还必然会使产品质量下降。我相信,id的队伍再壮大,也不会有太多人。”

罗梅洛离开后,卡马克的生活方式就越来越和他的代码风格一致:简单、整洁、高效。这就是他如何领导一个公司,这就是他如何制作一个游戏,他不会屈服于内部的压力,他也不会被美妙的幻境所牵引,他不会因为任何因素使游戏开发一直拖延下去,他会按时拿出作品。1997年12月9日,id发布Quake2。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“噢,天哪,Quake2是我在计算机上玩过最带劲的游戏……你最近玩的游戏里有哪个可以与Quake2媲美?我的答案是:没有!”在大量热情洋溢的Quake2评论里,这一篇来自罗梅洛12月11日的计划文件,他四十八小时不停歇地一口气打穿整个游戏,你叫他怎能不兴奋。

通过采用Quake2引擎,罗梅洛现在确信,他曾想加入到《大刀》里的各种特性和效果都可以付诸实施了,有些特效甚至是他从来没有想到过——譬如彩色光影。他不只是在谱写游戏世界里最壮丽的乐章,他同时还使用着游戏世界里最强大的引擎,这是技术与设计的天造之合,这就是他在id时梦寐以求的事情,而且,更棒的是,现在没有任何人——不管是卡马克或谁谁谁——能阻止他的步伐,至少,罗梅洛自己是这么觉得的。

而离子风暴其他员工们却开始对公司表示出种种不满。四月份的“婊子”广告激起了玩家们的骚动,就在这时,公司进驻1997年的E3大展,很多员工都认为展会上的《大刀》演示版根本拿不出手,在他们看来,罗梅洛更喜欢玩游戏和接受媒体拍照采访,而不是告诉员工们如何去实现他的《大刀》,从而,游戏完成的日期变得越来越遥不可及。

和罗梅洛不一样,大多数员工认为升级到Quake2引擎不是一个好主意,事实上,他们憎恶这个做法:罗梅洛对这一改动将带来多少额外的工作量压根没有概念,他写了四百页纸的设计文档,他要在《大刀》里放入六十四种怪物!四个时空!那是Quake的四倍!“我们已经把发布日期推后到了1998年3月,就这样,我们也很难按期完成,而现在,居然还要升级引擎?!你让我们怎么办?”

E3后满怀疑心的还不止是员工们,离子风暴的东家,Eidos,在发现他们的旗舰游戏将错过圣诞旺季后也颇为不快。但这可是罗梅洛的公司,大资本家们没有过于失望,罗梅洛向他们和员工们保证,游戏只会晚几个月而已。“人多力量大,”他说,这就是成功之路。离子风暴已经有了八十名员工,这个数字还在增长,“有这么多人在做事,事情怎么可能做不完,在id的时候,我们只有十三个人,但你看看我们做出了什么样的游戏。”Eidos别无选择,只能相信罗梅洛的诺言,毕竟,是罗梅洛在负责管理游戏开发,他们无从插手,他们只知道,再过几个月,《大刀》就真的可以上架了,为此,他们不惜任何代价。

所谓的代价,就是资金。在不到一年的时间里,Eidos原本用于制作三个游戏的一千三百万美元投资已经被离子风暴用得所剩无几。光装修办公室就花了两百万美元,此外还有八十个员工的八十份薪水和一百六十台配备有二十一寸显示器的顶级计算机,这一切就像个无底洞,他们不能就这样下去,而麦克·威尔逊,离子风暴的市场小子,心中已经有了计划。

早在id时,麦克就梦想着能经营自己的出版公司,刚加入离子风暴,他就把这一点清楚地告诉了罗梅洛和其他合伙人。麦克计划着一旦完成Eidos的合同,就成立一家专门负责出版游戏的子公司,他们甚至已想好了公司的名字:离子冲击(Ion Strike)。但麦克怎么也想不到,罗梅洛背着他和Eidos签订了后续三个游戏的优先选择权,也就是说,离子风暴从头三个游戏里收到一千三百万美元,而当他们要再做三个游戏时,Eidos仍然有权决定是否继续接手这三个游戏,那么,越早完成前三个游戏,然后把下面的选择权放到Eidos面前,他们就能越早拿到下一笔投资,并越早踏上自行出版的光明大道。冲锋时刻到了。

第一波行动是买下托德在7th Level时开发的游戏:《领土》(Dominion)。在托德离开后,7th Level几乎就放弃了它,而托德觉得它非常适合离子风暴,他说服其他几位合伙人花一百八十万美元买下《领土》的半成品,他保证,只要六个星期,他就可以把《领土》推向市场,然后,他再回头继续原先计划好的项目:《恶灵》。他们和7th Level达成了交易,而这只是序幕。

1997年9月,罗梅洛在道上听说有位名叫沃伦·斯派科特(Warren Spector)的游戏设计师正在寻找职位。四十一岁的沃伦在游戏界的资历颇为丰富,他出生在纽约一个牙科医生和阅读教师的家庭,从小就是聪明勤奋的好学生,七十年代末,在奥斯汀的德克萨斯大学攻读电子传媒博士时,他对科幻小说和游戏产生了兴趣,并成为玩家和作家社群里的一员,最终,他加入理查德·盖略特的维真公司。游戏对他来说不仅仅是另一种娱乐,而是最适于模拟现实的事物。

“从来没有任何一种媒介或手段可以使人类真正进入另一个世界,”他说:“我们被困于此。”但是,一个平衡了技术和故事情节的游戏可以接近这目标。“这是惟一可以让普通人穿梭于其他世界中的媒介……我永远不可能去驾驶第一次世界大战时的双翼飞机,我永远不可能去造访空间站,但是,在游戏中,我就可以做到所有这些。”

在沃伦眼里,id那些大作都是些无聊浅薄的射击游戏,而他制作的游戏,是他所谓“让人沉浸的虚拟世界”,是更富内涵的主视角游戏,譬如《地下创世纪》、《神偷》(Thief)、《网络奇兵》(System Shock),它们不光考验玩家的准头,还需要玩家有机智的头脑和多变的战术。罗梅洛认为沃伦是个不可多得的人才,沃伦也接受了离子风暴的邀请,在奥斯汀创办了一支开发团队,他们的作品名叫《杀出重围》(Deus Ex)。当罗梅洛那家公关公司想拉沃伦下水时,他立刻表明了自己的立场:“我决不会说‘吞了它’这种话,我也从没想过要把谁变成我的婊子,”他告诉大家:“我这里的人会很注重形象,你们最好有点思想准备。”

而麦克则丝毫不在意他的举止。九月份于英格兰举行的一次游戏业贸易展上,他召集了一次和Eidos高层的会议,他在会议中展示了后续三个游戏的大致想法,“就这些,”他说:“一句话,要还是不要?”麦克以前就曾讹诈过出版商,譬如用Quake共享版绕过GTI和零售商,而这次,他没有得逞,Eidos的经理们根本都不屑跟他讨论下去,这个麦克以为他是谁?离子风暴的头三个游戏已经延期了,现在居然想谈后三个游戏?门都没有!

托德·波特在会后接到Eidos执行官的电话,他们威胁说要搞掉麦克。一贯反对尽快踢走Eidos的托德把话转给了其他合伙人,并向罗梅洛和汤姆抱怨了一番,但这两人只专注于制作他们手头的游戏,无暇顾及公司事务。那么,托德想,我来照看一下公司吧。翻看了各种文件后,托德发现了一个让他错愕的情况,在他看来,麦克和离子风暴的CEO鲍勃·赖特(Bob Wright)正在毫无节制地挥霍公司的现金,而且没有保留清楚的账目。

就在托德要针对麦克采取行动时,麦克也正要对托德下手。随和风趣的麦克从一开始就是离子风暴年轻雇员们心目中的老大,他们向麦克表露过对公司的失望和不满。托德及其《领土》团队让他们看不顺眼,杰尔那些美工们也一样。不同文化之间的冲突正在凸现,罗梅洛的队伍里大都是来自Doom社群的年轻玩家,托德和杰尔的手下则较为年长,缺乏热情;托德甚至雇了几个博士,而罗梅洛这边都是大学辍学生;更糟的是,托德的人甚至不知道那些使离子风暴能有今天的游戏,当一个美工看到屏幕上的Doom而叫不出名字时,玩家们震惊了。

每一天,麦克都会听到类似的抱怨,要他充耳不闻是不可能的。十月的一个下午,他在酒吧里把那些职员们不敢自己站出来说的话告诉了罗梅洛和汤姆:大家都厌恶托德,《领土》没有像他担保的那样六个礼拜就完工,而且那游戏看上去也很一般。托德不适合离子风暴,“他上班的时候居然都西装革履,这叫什么事嘛!”他提议解雇托德,罗梅洛和汤姆同意了。

一个星期后,他们已经走进电梯,准备向托德宣布这个消息,就在这时,罗梅洛犹豫了一下,“伙计,我办不到,”他告诉麦克:“我们根本没给过他机会。就因为其他人厌恶他,我们就要开除他?我们应该先跟他谈谈,给他个警告,并帮助他改进。”麦克万万没想到罗梅洛会临时变卦,他的比特显然又开始了跳动。接下来的事,就更出乎麦克的意料了。一个月后,麦克自己被叫到了会议室。合伙人们,尤其是托德,已经受够了他——麦克;Eidos几乎是每天一个电话,反复强调他们无法和麦克合作下去;合伙人们还发现,麦克背着他们用公司的钱给自己买了一辆宝马(BMW);而且,他那个自行出版的宏伟蓝图跟公司眼下的事情压根扯不上边;离子风暴不需要去出版游戏,罗梅洛说,它只需要专心做好游戏。既然你麦克不顾一切地想做出版商,那你只能离开这里。麦克走了。

少了搬弄是非的人,罗梅洛得以专心带领人们做好手边的工作。1998年2月,他拿到了他等待已久的Quake2源代码,有了它,《大刀》的完成就指日可待了。但当罗梅洛打开那些文件扫了几眼后,他呆住了。天哪,他嘀咕道,卡马克都干了些什么?

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“你带了阿司匹林没?”卡马克向朋友问道,他们正走进拉斯维加斯的一间赌场。

“你头疼?”

“还没,”卡马克说:“但马上就要疼了。”

这是1998年2月8日,卡马克就要对他的脑力进行一次挑战:在二十一点游戏中记牌。这是他的最新爱好。“作为一个略懂概率统计学,并从不相信运气、命运、因缘、上帝(或其他神)的人,惟一能使我感兴趣的赌博游戏就是二十一点。”卡马克在一份计划文件里写道:“玩二十一点可以算做是一种对自控力的考验,知道如何玩以及该如何记牌很简单,困难的地方在于,你必须从头到尾都表现得像个机器人一样,而不是屈从于所谓的‘直觉’。”在出发之前,卡马克进行了一些针对性训练,就像他学习其他事物一样,他先是买了一些书来看,然后在计算机上写出程序——当然,这次不是什么三维引擎,而是一个二十一点游戏的模拟程序。

研究工作很奏效,卡马克赢了两万美元,他随后把这笔钱捐给了自由软件基金会(Free Software Foundation):一个以“黒客伦理”为准则,在这个物欲世界里坚持着自己操守的组织。“我没想靠二十一点为生,”卡马克从赌城回来之后写道:“所以我不怎么担心被从赌场里劝退。”没过多久,在他第二次前往拉斯维加斯时,他体验到了这种经历:几个身着黑装的彪形大汉围到他身边,告诉他:“如果你不玩二十一点,而改玩其他游戏的话,我们将不胜感激。”

同桌的人们简直难以置信。“他们怎么能这样?”一个女人问道。

“他们认为我在记牌。”卡马克告诉她。

“他们认为你能记住所有这些牌?”

“嗯,差不多是这个意思。”

“哇噢,你是做什么的?”

“我是个计算机程序员。”说完他就被护送着走出赌场。

在那个二月里,卡马克还不只是去了赌场。他一直以来都向往着僧侣般与世隔绝的生活,终于有一天,他没有多加思索就离开公司,来到佛罗里达州一家不知名的小旅店。尽管Quake2既叫好又叫座,但在公司内部,员工的不满和牢骚,以及他们之间的争斗和抱怨却与日俱增,工作气氛的恶劣甚至延伸到了游戏里。在Quake2最后那个关卡中,提姆在一个秘密房间里放置了id各个员工的照片,并赋予它们不同的机关或动画——由此来表现出他们不同的个性,譬如,当任何人靠近卡马克的头像时,他就立刻消失无踪。

现实中的卡马克也是如此:他把自己关在那个旅店的小房间里整整一个礼拜。地上散布着比萨盒,没有电话进来,没有人敲门,只有在口渴得受不了时,他才会暂时把心思从编程上转移到生活中——起身去拿一罐可乐。为了这次隐居,卡马克甚至专门买了一台带标准PCI插槽的奔腾2(Pentium II)便携式计算机,从而他可以装上益世公司(Evans & Sutherland)的OpenGL加速卡。乍看起来,他是趁公司其他人制作Quake2任务包的时机,外出研究他称之为“三次元”(Trinity)的新引擎,但当他一个星期后回到麦斯奎特的办公室里更新计划文件时,他发现自己还想说说其他心情,这在卡马克而言是难得一见的:

姓名:约翰·卡马克 职务:程序员 项目:Quake2 最近更新:1998年2月4日03:06:55 (美国中部标准时间)

嗯,我太长时间没有更新计划文件了。

封闭研究进行得很顺利,在一个礼拜里,我除了买可乐外就没有出过旅店的门,这简直太安逸了,因为办公室里的杂事已经让我有点无法忍受。以后,在项目不紧时,我很可能会经常做这样的封闭式研究,每季度一次听起来比较合适。

现在要具体谈论三次元引擎还为时过早,Quake在架构完全成型之前走了不少弯路(光树、门洞、等等),所以我知道,现在研究的东西很可能会有变动,我不想说任何会被某些人当做是“承诺”的话。

我只能说,工作的进展很激动人心。

许多游戏开发者从事这一行是为了制作出最终的游戏,中间漫长的开发阶段只是不得不经历的过程,我尊重他们的工作态度,但我从事游戏开发的动机略有不同。

当然,我也为游戏的完成而自豪,但这途中所克服的各种困难却更加让我铭记。我已记不清我们那些老游戏发布时的情景,但我清楚地记得那些技术上的突破,早至《基恩》时的CRTC回绕,以实现平滑的卷轴效果(准确地说,早至理解苹果2汇编语言中并联数组里的结构体……),知识是需要积累的,学习是需要循序渐进的。

我的人生就是以知识的积累和学习的不断深入来分为不同阶段。

我启蒙阶段用的是学校里的苹果2型机,但当时的条件局限了我的学习速度和深度。今天的状况已经好多了,只要有一台便宜的二手PC机、一张Linux光盘和一个因特网的账号,你就拥有了足够的工具和资源,你就可以达到任何你期望的编程境界。

《软盘》的头六个月对我而言如同活在梦里,平生第一次,我身边有了比我更博识的程序员(罗梅洛和罗瑟),我手边有了大量的书籍和资料,而且我可以全身心投入到编程中,那真是一段好时光。

接下来的两年,直到Doom和几个家用机版本移植完成,我在稳步提高着我的知识面和技术水平,其中包括:更深入的图像编程、网络、Unix、编译原理、跨平台、RISC架构、等等。

Quake开发的第一年简直如同腾云驾雾,有迈克尔·亚伯拉什作为顾问,我尝试了大量新鲜课题。如果科班出身的图像程序员们知道我在写Doom时有多业余,他们肯定会大吃一惊,那时的我甚至不能正确地剪切墙体多边形(这就是为什么我用了那莫名其妙的极坐标系统),Quake逼着我踏上正轨,同时探索出新思路。

Quake开发的最后半年是在痛苦中度过的,那时我满脑子只想着把这该死的东西做完,当然,一切付出到后来都有了回报,但我绝不怀恋这段时光。

Quake2开发的过程中,我的学习经历又得到了进一步扩充:GLQuake、quakeworld、radiosity、OpenGL工具开发、Win32编程、等等,与此同时,我也有了不少关于下一步如何做的想法。

我认为接下来三位元引擎的开发将和Quake一样硕果累累。我在一些课题上已经有了非常深入的理解,我还正在尝试一些图像编程以外的全新领域,它们将会和我所有其他方面的工作产生积极互动。

末了,自然也会有一个精彩的游戏。:) ――――――――――――――――

卡马克的好心情没有持续多久,就像罗梅洛在离子风暴一样,他也意识到,几个好朋友在一起做游戏的愉快时光已经一去不复返了。站在现在的办公室里,他可以明显感觉到那苦闷和不协调的气氛。提姆、麦基以及其他关卡设计师之间已经是剑拔弩张,艾德里安及凯文也正和斯蒂德闹别扭。他们互相讨厌到不愿意和对方共事的地步。这一切,卡马克都看在眼里,怎么办?那就在这敌视的氛围中制作下一个游戏吧——Quake3将主要基于卡马克的三位元引擎,并且不再有单人过关模式,而只支持多人对战,从而,员工们就可以不相往来地完成他们各自的工作。

卡马克的提议并没有获得太多赞同。艾德里安明确表示他已经厌倦了太空战士加霰弹枪的射击游戏,这都已经做了多少年了!他要做点新鲜的玩意。对此,麦基表示支持,还有斯蒂德,他撰写了一份设计文档,里面有丰富的角色情节和创意,但卡马克毙了他的稿子,告诉他故事背景并不重要。这次,甚至一直以来的老队长,凯文,都表示出了失望,他告诉卡马克,如果一定要做这款游戏的话,他不愿意再担任项目经理,id要另请高明。没错,id一直以来都是卡马克说了算,但现在的id,已经彻底变成了卡马克的公司,Quake3,将是卡马克的游戏。

麦基在id的日子终于走到了尽头。一次持股人会议上,他被叫进会场,并得知他已被解雇,原因是他的表现不够好。卡马克认为麦基不乏才智和干劲,但他重蹈了罗梅洛的覆辙。当麦基要他们给个明确说法时,大家告诉他,因为id没有人喜欢他。不奇怪,麦基想道,自从罗梅洛离开后,公司迟早会走到今天的地步:一个缺乏制衡的id。

麦基不是惟一怀念罗梅洛的人,从未和罗梅洛共事过的斯蒂德也开始认为解雇罗梅洛是一个惨痛的错误。“罗梅洛是随意散漫,而卡马克是严肃认真,他们的搭配就像是一动一静的太极两仪,但如果他们分开,那是什么?”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

翠绿色的电梯门在德克萨斯商业中心大楼顶层缓缓打开,一个梦幻般的游戏天堂展现在罗梅洛眼前。1998年2月,离子风暴办公室的装修终于结束,罗梅洛期望的一切都各就各位:摆放大型街机的游戏房,足球桌和台球桌;橡木打造的吧廊上一圈二十一寸的显示器,那是死亡竞技场,另外还有十二台大彩电组成一面电视墙,就像游戏里某个关卡般用精钢打造的格间错落有致;厨房里满是糖果和快餐。置身在这宽敞明亮的玻璃宫殿里,罗梅洛就仿佛漫步在云端,但他脑海里只有一个念头:嘿!我们一定要做出几个惊人的游戏来!

他们当然要做出惊人的游戏,因为,罗梅洛知道,离子风暴的开支也是惊人的。办公室装修一共用了两百五十万美元,本来指望一个半月就完成的《领土》耗费了他们三百万美元,最初的一千三百万已经分文不剩,Eidos现在是每月给离子风暴批一笔款,而接近一百名员工的薪水,再加上日常开支,一个月总共要一百二十万美元。

还有一个问题,更严重的问题:Quake2的源代码。新引擎和罗梅洛的预测大相径庭。在《大刀》的开发过程中,程序员们一直以罗梅洛假想中的新引擎来开展工作,他本以为这会使升级引擎变得简单一些,但现在的情况是,卡马克完全抛弃了以前的做法,新的代码结构使罗梅洛措手不及。卡马克当然不是为了使《大刀》延期而刻意为难罗梅洛,这只是卡马克自然而然的一次技术飞跃——而这飞跃,再次使罗梅洛宏大的游戏设计方案陷入阵痛。

“这得花一段时间,”罗梅洛告诉Eidos和手下员工:“代码变动实在太大。”想在1998年3月完成《大刀》是不可能的了,罗梅洛觉得可能还需要几个月时间。但不是所有人都像他一样有信心,他们劝说罗梅洛忘了id的新技术,就发布采用Quake引擎的《大刀》好了。“你不可能跟上卡马克的,”主程序员说:“所以根本没必要去试。”但罗梅洛坚持己见,没有任何困难能打消他的雄心。

二月下旬,罗梅洛向游戏杂志宣布了《大刀2》的开发计划。与此同时,另外两个离子风暴的合伙人,托德和杰尔,正着手成立一个漫画部门。杰尔手下有几个美工曾在漫画界工作过。他们计划为公司的每一款游戏制作相应的漫画书,以博得玩家的好感并扩大游戏的知名度。尽管计划在离子风暴获得了批准,但Eidos一听到这个消息后就否决了它。“游戏才是你们的本行,”他们说:“我们干嘛要付钱给你们画漫画?”

头顶上的玻璃天花板也成了个大麻烦,准确地说,一个明亮的噩梦。因为,除了吸血鬼外,最畏惧光明的就要数玩家了,他们最无法忍受的事就是显示器周围过于强烈的光线。没有人能工作下去,装修设计师立刻被叫到现场,他给每个格子装上时髦雅致的挡板,但挑剔的玩家们还是嫌太亮。集体去家装市场采购归来后,他们掏出钉子枪,把所有格间都裹在黑毡布之中,这已不是阴暗,而是黑暗,他们现在走进格间之前需要先撩起门帘,就如同摄像师走进暗室冲洗胶卷一般。整个场景看上去滑稽无比:穿行在玻璃宫殿般的游戏天堂中,四下里到处是黑色的洞穴。

1998年春天,离子风暴的一切看起来都如同黑色的洞穴。尽管他们现在以每周六天每天十二小时的压榨模式拼命工作,但《大刀》似乎永远也做不完。很多人觉得项目已经完全失控:某人做的几个关卡无法正常载入;某美工画的箭头标记比预定尺寸大了一千倍;《大刀》项目内部也日渐不和。甚至罗梅洛最虔诚的拥趸者——威尔·罗康托、斯维若·克维恩莫和五六个其他玩家——也变得躲躲闪闪,他们开始瞒着大家整天沉醉于死亡竞赛,其他人自然看不下去,终于有一天,某个家伙在死亡竞赛中大喊大叫时被罗梅洛发现,他立刻就被解雇。

更让玩家们烦心的还有托德和杰尔,在他们眼里,这两人似乎越来越把自己当做公司的老大,而正是他俩,玩家们觉得,在把公司带上不归路。譬如,托德最近不停加入到《大刀》的会议中,提出各种不着头脑的修改建议,而他自己的《领土》,那个看了画面就让人觉得抱歉的游戏,却是一片混乱,真是哪壶不开提哪壶,玩家们想道,难道就用这破玩意作为离子风暴的处女作?——他们已经忍无可忍。

5月13日,斯维若、威尔和罗梅洛小组的其他六人找到鲍勃·赖特,他们觉得既然鲍勃和麦克那么熟,那么他应该也是盟友。一起吃午饭时,他们商定了向罗梅洛摊牌的条件:要么托德和杰尔走人,要么他们走人。在鲍勃的指点下,他们把各种理由和抱怨一一写到纸上。

会议的风声走漏到了汤姆耳里:鲍勃居然还说要给那几个家伙提供成立新公司的资金——如果他们辞职或是被解雇的话。汤姆立刻给罗梅洛打电话,但时机不巧,罗梅洛不在办公室,因为他还是一个好丈夫和好父亲:贝丝刚产下了他们的第一个女儿:莉拉(Lillia)。罗梅洛前阵子还说服了前妻凯俐,叫她搬到德克萨斯,从而他可以坐在两个儿子身边和他们一起打游戏。今天本是女儿的降生,本应该是个喜悦欢庆的日子,真是人有旦夕祸福……

“扯什么淡?!”罗梅洛听到汤姆的消息后咆哮道:“行!敢来我的组里作乱,那你滚吧。”鲍勃随后被解雇了,但这不足以解决离子风暴的所有问题。五月份举行的1998年度E3大展上,《大刀》的演示依然让人失望,其他射击游戏,譬如刚发布的《虚幻》和即将发布的《半条命》,以及id的Quake3,夺走了所有风头。离子风暴在E3后发布了《领土》,但销量惨不忍睹。同是即时战略游戏,比起一两个月以前发布并好评如潮的《星际争霸》(Starcraft),《领土》就像是一件陈年旧货,它不光是卖不出去,它还等于是向那些对离子风暴心怀不满的玩家们证实:罗梅洛的梦工场不一定能点石成金。尽管,从某种程度上来说,玩家社群的演变和发展都源自罗梅洛在id时制作的那些游戏,但现在,同样这些玩家,毫不留情地嘲讽和讥笑起那曾经的游戏之神。

在Evil Avatar、Shugashack,、Blue's News、Daily Radar等游戏网站上,玩家们尽情宣泄着怒火。醒目的头条大都是“光说不练”,或者“我拒绝购买《大刀》的理由”。某人绘制的四格讽刺漫画中,留着长发的罗梅洛在宣讲:“嗨……我是来告诉你们,《大刀》将是个精彩的游戏,你们知道的,我的游戏都很精彩,譬如Doom!记得Doom吗?我做的!还有Quake,记得?那也是我做的!设计决定一切!”最后一格里,他却在向一个卖热狗的摊主乞讨,“想得美啊,约翰,”老板告诉罗梅洛:“拿不出游戏,就别想有吃的。”

罗梅洛的死讯再度登场,这次更加绘声绘色:网上流传着一张罗梅洛躺在太平间里的照片,他的头上有个明显的弹眼。玩家们开玩笑说他在Quake死亡竞赛里输给卡马克后羞愤难当,只好自杀了事。一家网络游戏杂志确认了罗梅洛的死讯,还据称是“离子风暴内部消息”,但他们随后撤回了这则报道。尚未从“婊子广告”的余怒中平静下来,玩家们更加厌恨起这种自我炒作——而其实那张照片是泄漏自尚未出版的一期《德克萨斯月刊》(Texas Monthly)。

真正的大事发生在9月30日。一个自称Bitch X的人在“游戏内线”(Gaming Insider)网站透露了Eidos准备买下离子风暴的消息。几个月前,离子风暴的几位合伙人就开始和出版商策划紧急融资方案,五月份时,计划是用离子风暴净资产的19%和版税削减来换取Eidos的一千两百五十万美元,并免除先前的一千五百万美元债务。前任执行官鲍勃甚至要提出诉讼,因为他觉得离子风暴解聘他的目的是为了不让他从中得利。

方案一直商讨了几个月还没定下来,Bitch X从何得知?大家都一头雾水。这神秘人物在接下来几个礼拜又不断张贴了若干离子风暴的内部邮件,以及人事变动的消息。负责离子风暴公司网站的员工告诉老板们:“要么是已经离开公司的人还比我们这些呆在公司的人知道的事情多——多很多,要么,就是有内奸,希望公司能把这人揪出来。”

当然,没有人承认是自己干的,罗梅洛只好去翻查员工们过去的电子邮件记录,期望能找出究竟谁是内奸,但他一无所获。通常,亡羊补牢为时不晚,但这次,羊儿已所剩无几:猜疑和不满的气氛弥漫到公司的每个角落,员工们开始无所顾忌地表示出对公司财政前景的怀疑。在公司成立之初,他们本指望着能分到一些版税或者是红利,甚至是股份,而现在,谣言越传越玄,他们也越来越心如死灰。终于有一天,罗梅洛训斥起主程序员金·吉姆布莱尔,狄万戈网络的创始人之一,罗梅洛认为他花了太多时间玩游戏,而没有做好本职工作。这听起来是多么耳熟呵。

“伙计,你瞎搞什么呢?”罗梅洛说:“你怎么不干活?我们要做好这游戏,这不是闹着玩,你知道的。”金告诉罗梅洛他正在担心公司生意上的事,他看到了离子风暴的财务报表,他听说Eidos要关闭离子风暴。罗梅洛怒不可遏:“谣言!谣言!谣言!谣言!谣言!扯淡!你懂个屁的生意,这个不需要你操心,你根本不知道我们和Eidos的交易是怎么回事,你不懂的事情太多了。你就在这胡思乱想不好好做事,还搞得其他人也跟你一样,这都什么乌七八糟的!”但金不吃罗梅洛这一套,罗梅洛当场炒掉了他。

墙倒众人推,其他员工开始主动离开,再不回来。和Eidos的交易在签署合同前最后一刻谈崩了,这显然是因为那无限延期的游戏和公司一团乱麻的现况。为了支撑局面,也因为《领土》的失利,托德决定取消《恶灵》项目,转而把心思放到公司事务上来。托德知道他不能和罗梅洛正面较劲,于是他雇了一家审计事务所来理清公司那雪崩般的收支账目,托德也知道这种过于主动的态度会使他越来越孤立,但他必须要让《大刀》项目组重新振作起来,为此,他向罗梅洛建议削减《大刀》的内容,但罗梅洛不肯。员工们愈发憎恶起托德,因为他越来越频繁地当面斥责员工,譬如有一天,附近一幢楼被大火吞没,当他们围聚在玻璃幕墙边观看时,托德咆哮道:“你们拿薪水可不是为了站在这里看房子着火!”

秋天在不知不觉中来到了,离子风暴的后院也就要燃起大火。11月18日晚,罗梅洛和斯狄薇以及其他几名可靠的员工走进一家中餐馆。自从斯狄薇加入离子风暴,她就一直是罗梅洛忠实的伙伴,大风大浪中,她安慰着罗梅洛,并为他出谋划策。“我们听到一则消息,”她告诉罗梅洛:“你的整个《大刀》项目组会在明天集体辞职。”罗梅洛我自巍然不动:“滚他们的蛋!”

第二天,罗梅洛和汤姆被叫到会议室,《大刀》的组员们已坐在里面。“我们无法继续在这种条件下工作,” 威尔·罗康托开口道:“在我们看来,这游戏是永远也做不完的。所以我们要离开这里,成立一家新公司。”

穿过曲曲折折的走道,罗梅洛踱回办公室。他静静地坐在那里,他看着落日的余晖穿过玻璃穹顶,看着世界暗下,看着繁星升起。这都算什么?他问自己,我怎么会雇这些人?本来不必做这么大的,这太多的人,太多的钱。本来应该只是我和汤姆,以及几个能想到一块的伙伴;应该就像以前一样,那时,我们还不是什么生意人。我们只是玩家。

第十五章:源自DOOM

作为玩家,RebDoomer没什么特别,他喜欢主视角射击游戏,尤其是Doom和Quake,他整晚整晚地在因特网上和其他玩家进行死亡竞赛,他也制作过一些很业余的‘模式’:类似曲棍球场地的对战地图和模拟拳击比赛的格斗场,他还把它们放到网上给其他玩家分享。“你们最近怎么样啊?”他敲道:“我是REB,又给你们带来了一个精彩的任务包,这次花了好长时间才做完,所以,给我点掌声吧,伙计们!”

而在现实中,RebDoomer感觉不到任何友情。他在学校里四处碰壁,那些冷眼与拒绝,那些欺辱和恐吓,让他觉得自己是最最卑贱的人。他开始在日记里宣泄怒火,他要报复。终于有一天,他在地下室里架起一台摄像机,然后手里握着半瓶威士忌坐在躺椅里,膝上放着一柄短管霰弹枪,他向着镜头描绘了他的计划:血洗校园。“就像他妈的Doom一样,”他说道:“砰、砰、砰、哈!这霰弹枪就是源自Doom!”

1999年4月20日中午,埃里克·RebDoomer·哈里斯(Eric “RebDoomer” Harris)和他最要好的朋友迪伦·Vodka·克里波德(Dylan “Vodka” Klebold)浑身挂满弹药,冲进科罗拉多州利特尔顿城的科隆比纳中学,制造了死亡十五人——包括他们自己——的校园枪击案。这起通过电视直播的惨剧震惊了全美国,惶惶然的家长们、教师们、政客们,以及同学们怎么也想不通,为什么两名毫不起眼的中学生竟是冷血杀手?他们需要一个合理的解释,为此,他们要找件事物来加以责难。

1999年4月21日下午4点13分,Blue's News网站的编辑史蒂夫·西斯里普(Steve Heaslip)发布消息:“据几名网友反映,他们透过电视上装有嫌疑犯物品的塑料袋看到了Doom标记……到目前为止,还没有人把这些物品和案件联系起来。”但随着杀手的Doom游戏、Doom书籍、Doom影带被一一发现,这联系很快就建立了起来。

接下来一个礼拜里,Doom成了“媒介暴力会引发现实暴力”的典型样本。西蒙·威森塔尔研究中心(Simon Wiesenthal Center)发布了一篇报告,其中暗示说埃里克曾制作过一个Doom任务包,以演练这次大屠杀。同样,在没有真凭实据的情况下,有人报道说埃里克制作过一个以科隆比纳中学为背景的Doom模式。《华盛顿邮报》(The Washington Post)把喜欢Doom死亡竞赛的玩家世界形容为一个“黑暗、危险的地方”。《今日新闻》(Newsday)告诉读者,玩Doom能“使孩子的心智不健全”。一个名叫大卫·格罗斯曼(David Grossman)的前陆军突击队员成为了媒体的宠儿,因为以他的观点,游戏就是“训练谋杀的程序”,甚至克林顿总统在某次电视讲话时都引用了他的话,并补充道:“Doom……利特尔顿城那两个孩子为之痴迷的游戏,使我们的下一代越来越主动地参与到虚拟暴力中。”

暴力游戏,以及其他文化——黑色装扮、重金属、血腥电影,再一次成为被攻击的对象。丹佛市长请组织者取消了玛里琳·曼森(Marilyn Manson)的演唱会,原因很简单:据说这是埃里克和迪伦所喜欢的乐队;学生被禁止穿短大衣入校;迪斯尼乐园撤下暴力游戏的街机;但真正大动干戈的,仍是六年前首次向暴力游戏吹响号角的参议员:约瑟夫·列博曼。

在4月28日发表的一份声明中,列博曼议员号召大家再度对暴力游戏进行调查。“我希望,”他说:“能通过高层的推动,来促使大出版商们给虚拟暴力降温,不再发行那些暴力游戏、电影、音乐,那些美化和歌颂极端暴力的文化,那些告诉孩子们杀人很酷的媒介——尤其是其中一些……譬如Doom,那几个校园枪手就是模仿着它来选择武器和装束。”

在一边倒的声音中,媒体和政客们——绝大部分从未玩过这类游戏——不假思索地得出了他们自己的结论。艾伦·古德曼(Ellen Goodman)这位全国知名的专栏作家问道:“我们中的多少人已把那些电子游戏认为是‘普通’的孩童玩意?而我们现在知道了,它们其实还被用于军队里的耐抗性虚拟训练。”她似乎并不知道,也并不在乎,军队用电子游戏训练的是团队配合,而不是什么心理耐抗性。

《早安美国》(Good Morning America)节目摆布着一个埃里克和迪伦的朋友,带领观众进入Doom世界。“从埃里克·哈里斯玩的游戏里,我们可以发现更多的东西,”主持人感叹道:“仔细看,我们就要进入他建造的一个房间。”那些天花板上悬挂着尸体的图像,他暗示说,就是埃里克创作的,而实际上那是Doom自带的,而且,那在若干年前的恐怖电影里就已经很常见。“这就像是走入某人的噩梦幻境,”主持人继续引导着话题:“你有没有……为这些事情而感到过不安?我是说,嘿,不对劲,那俩家伙真的喜欢所有这些血腥、射击,以及暴力。”埃里克的朋友回答他:“从没有过。”他们只是玩家。

当然,他们只是玩家,游戏只是虚构,在真正玩过Doom和Quake的人眼里,这是明摆着的事,但其他人似乎总是不能理解这一点。在游戏里,没有人真的被枪弹击中。但说到暴力活动,人们长久以来就喜欢把幻想和现实联系起来,就像杰勒德·琼斯(Gerard Jones)在他的著作《与怪物血战:为什么孩子们需要幻想、英雄和虚拟暴力》(Killing Monsters: Why Children Need Fantansy, Super Heros, and Make-Believe Violence)里所揭示的那样。

琼斯在书里说道,1963年的一次影响力研究发现,在电视里观看过击打充气洋娃娃的孩子,比没有看过的孩子在面对洋娃娃时更具有攻击性,结论:通过媒介体验暴力会导致现实暴力。当然,在现实中,孩子们也只是在击打充气小丑娃娃,他们不会跑到马戏团里狠揍真的小丑。与怪罪暴力媒介相反,琼斯为此辩护道,成年人们需要理解虚拟暴力在人格发展中起到的重要作用:“想禁止人们在安全并可以控制的环境里冒险,是不可能的,也是很危险的……因为那对我们理解和接受现实的局限性有莫大助益。在游戏中发泄怒火是一种可取的手段。为了作一个文明的现代人,我们牺牲了原始的野性,在虚拟环境中扮演邪恶的角色,或是大肆破坏,就是对这种牺牲的补偿,这是至关紧要的。”

八十年代到现在的研究者们还发现了电子游戏的若干积极作用。《美国少儿精神治疗学报》(Journal of American Academic Child Psychiatry)的一片文章指出,游戏不止不会激发儿童的进攻性,游戏其实消解了进攻性。英国的一个研究项目发现,玩家们“似乎比常人更能把精力集中到手头的事情上,他们还有着更好的协调性。总之,这与顶尖的运动员非常相似。他们在计算机上学到的技能可以反映到现实中。”在芬兰,研究人员利用计算机游戏来协助治疗有阅读理解障碍的孩子。

尽管很多研究都试图把暴力媒介和暴力举动联系在一起,但结论依然值得怀疑。加利福尼亚州立大学位于洛杉矶市的媒介心理学实验室的创办者,斯图亚特·菲思霍夫(Stuart Fischoff),在1999年美国心理学协会(American Psychological Association)的一次会议上说道:“电影、电子游戏、歌词中的暴力内容使所有人不安,但如果只是两种现象都使人不安,而且时间间隔不远,并不能说明它们有什么必然联系……我敢说,没有任何一个研究成果可以,哪怕是粗略地,对类似科隆比纳大屠杀这样的惨剧提出预警。”

说到底,事实已经证明,杀人犯们可以从任何途径得到启发——披头四的“白色专辑”、《出租车司机》(Taxi Driver)、《麦田里的守望者》(Catcher in the Rye),等等。《圣经》里又描绘了多少暴力场景?但在科隆比纳事件后,几乎没有人有勇气和底气来为游戏辩护,而媒体却在一如往常地数落着玩家的不是。乔恩·凯茨(Jon Katz),《滚石》(Rolling Stone)杂志和技术社区网站Slashdot的撰稿人,发布了几篇短文回敬媒体。“这一切是如此荒谬,如此歇斯底里,”他告诉《旧金山纪事》(San Francisco Chronicle):“问题的根源在于那些青少年从何得到机关枪和炸弹,而不是他们上了某个网站或玩了某个游戏。”也有一些声音从其他角度进行了阐释,“暴力从来就是美国的一个大问题,”《时代》周刊写道:“游戏公司只是在制作好卖的游戏,宪法赋予了他们这个权利,我们不可能把暴力游戏从娱乐消费中剔除出去。只要我们还是乐于购买那些血腥的东西——为我们自己或是为我们的孩子,那么,游戏公司自然也就会给我们血腥的东西。”

然而,政客们可不会坐等人民来决定他们自己的事情。堪萨斯州的共和党人山姆·布朗贝克(Sam Brownback)在一次参议院会议上发言道:“电子游戏Quake是由……id软件制作的,就是那个制作了Doom的公司。在Quake里,孤单枪手要面对各种各样的怪物,每杀死一个,玩家都会得到奖励点数。随着游戏的深入,武器也变得越来越强大和血腥,玩家抛下霰弹枪,拾起机关枪,再后来,是一把电锯。玩家越熟练,他的武器就越血腥——四溢的鲜血就是给玩家的犒赏。”

1999年6月,最有头面的人也加入到讨伐暴力游戏的浪潮中。在白宫玫瑰园的一次新闻发布会上,阴沉着脸的克林顿总统手持一份游戏杂志,那上面的广告语是:“比杀邻居的猫更好玩”,总统开口了:“同志们,我们要三思啊,看看这些所谓‘主视角射击游戏’的广告吧,前几天我还看到一个游戏鼓励玩家——我照原文念——‘回归你冷血嗜杀的本性’。”

由此,总统先生启动了一项联邦调查活动,以决定游戏或其他娱乐公司是否需要为向儿童推销暴力产品而承担法律责任。业界人士声称游戏都是由成人制作,并且也是面向成人的,但这无法令人信服,克林顿总统补充道:“谁能毫不心虚地说,暴力游戏的初衷就是面向成人?”三天后,列博曼议员和约翰·麦肯(John McCain)颁布了解决方案:《二十一世纪媒体职责法案》(Twenty-first Century Media Responsibility Act),它的强大之处在于,它试图建立起一个涵盖电影、音乐、游戏的评定标准,如果它得以通过,那么,卖暴力游戏给未成年人的零售商就要面临一万美元的罚款。游戏业界一贯赞成分级系统,他们已经成立了自己的ESRB,只是政府的干预和建立所谓的标准让他们无法接受。但华盛顿方面的意思很强硬:你们再好好反省反省。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

科隆比纳事件几天后的一个凌晨,1点34分,卡马克坐在666套房的办公桌旁斟词酌句,他身边是漆黑的窗户漆黑的夜,光标在显示器上闪烁,等待着他输入。更新计划文件是一件越来越让卡马克费劲思量的事情,因为,他知道,几乎所有人都指望着能从他的字里行间读出些什么。“你们中的有些人,”他终于开始在键盘上敲道:“正迫不及待地要为这件事情而抓狂。”

卡马克说的是Quake3测试版,它将先在麦金塔机(Macintosh)上发布,随后才是视窗系统。这在游戏世界里一石激起千层浪,玩家们无法理解他这个决定,所以,卡马克要在计划文件里对此做进一步解释,列举出各个系统的优劣,但卡马克知道,他无法去平息另一波现实生活中的声浪。更新完文件,他起身到大厅里拿可乐和点心,经过守卫身边时,他问道:“嗨,你们要不要也来点?”

大厅里的警卫就是科隆比纳事件给id带来的最显著改变。声讨电话和恐吓邮件铺天盖地,他们只好雇佣了警卫守护在办公室里。起先,接待员兼id妈妈唐娜开始接到抗议者们愤怒的电话:“苍天在上,你们公司都做了些什么啊?!”随后,记者们游荡在附近,试图从这些开高档跑车的长发青年口中探出只言片语,但他们一无所获,直到,一个狂躁的抗议者出现在楼下并冲他们叫嚷。几个新员工没见过这种阵仗,他们请求公司在晚上加班时增强保安,卡马克和其他老板觉得没必要如此惊慌,但他们还是答应了。“噢,”他们安慰新员工:“这在id太常见了。”

而实际上,这只在1999年4月12日,科隆比纳事件八天前,出现过。1997年肯塔基州帕达卡校园枪击案中三名遇害学生的家长向游戏公司,包括id,提出诉讼,要求得到一亿三千万美元的赔偿,因为他们认为,迈克·卡尼尔(Michael Carneal)这位十四岁的枪手——Doom和Quake迷,是受了暴力游戏的鼓动。嚯,当然,别忘了还有1992年关于《德军总部3D》的争论,1993年关于《真人快打》的听证会,关于Doom的禁令,更不用提七十年代的《死亡飞车》和八十年代的《龙与地下城》游戏。

只要事件中的人玩过游戏,就免不了会有各种关于游戏的诽谤、起诉、炒作,而最近的帕达卡和科隆比纳事件只是把整个剧目推向高潮。id的律师正告员工们:祸从口出,有什么话都先憋着。他们做到了,但卡马克很郁闷,因为他无法把他的想法告诉外面的世界。从而,媒体更加来劲地兴风作浪,而真正制作了这些游戏的人却被迫沉默。不管怎样,卡马克心底的声音清晰无比。

“连续两起枪击事件并不能说明世界起了巨大的改变或是某种潮流开始抬头。这只是偶然,就像生活中所有其他事情一样,可以通过数学上的概率来解释。如果一件事情本身就有可能发生,那么,到一定时候,它就会连续发生两起。”卡马克丝毫不担心会忽然有什么发现能证明游戏和谋杀有潜在联系,心理失常的人就是心理失常的人,简单明了。

卡马克知道,id的游戏并不是真的要‘杀死’某人,它们只是儿时枪战游戏的翻版。“‘死亡竞赛’只是一个名词,”他说道:“Doom只是有着各种特效的牛仔-印第安游戏。我们制作我们认为好玩的游戏。所有我们喜欢的游戏,不管是《防御者》或是《机器金刚》(Robotron),都是在屏幕上来回奔走并四处开火。血腥的图像效果只是使这过程更加刺激,它可以使玩家时刻绷紧,手心冒汗,大呼小叫。如果一个游戏只是让你坐下来,然后说‘嗯,挺好玩’,那么,它只是个不错的游戏,而不是我们心目中的精彩游戏,我们的游戏要更使人投入,更让人兴奋。”

这些暴力游戏是面向未成年人的吗?“未成年人当然会喜欢上这些游戏,”卡马克毫不掩饰:“要说我们的游戏只面向十八岁及以上的人会显得很可笑。”但卡马克知道,人们所不了解的是,id从不面向任何人制作游戏。早在《软盘》时,他们就只为自己做游戏,做那些他们想玩但又没有人做的游戏,随着时间推移,他们才发现原来有成千上万的人同样喜欢这些游戏。卡马克回到书桌旁,继续id下一个游戏的开发,那将是id最欢快的射击游戏:《雷神竞技场》(Quake III Arena)。但是,在科隆比纳事件的阴影笼罩下,人们还想要他的或者罗梅洛的游戏吗?市场还允许吗?

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

当话题转移到Doom上时,约翰·斯库德曼把保龄球握得更紧了。他已步入花甲之年,自从退休后,他就每天早晨来打两局保龄,通常,他都可以度过一段快乐的时光,但今天不行。他旁边的人,和全国各族人民一样,在谈论着令人色变的科隆比纳事件:“现在的孩子,都被暴力游戏给腐蚀了。” 斯库德曼可以感觉到自己的心跳开始加速,他怒了:“我们可以到外面解决这事,任何时候。”说完他就把球砸进球道——他不想再听到别人对他小约翰尼的游戏唧唧歪歪。

而他的小约翰尼,罗梅洛自己,也无法相信人们居然又开始污蔑起Doom——那六年前的游戏。这只能说明台上的政客们已经蠢得无药可救,同样还是那帮人,同样还是那些陈词滥调,罗梅洛的耳朵都快听出了老茧。那些孩子出了问题,他想道,不要拿我的游戏当替罪羊,不要来责骂游戏,去责骂那些该死的爹妈,他们升官的升官!离婚的离婚!

以他自己的经历,罗梅洛毫无疑问知道糟糕的父母能如何摧毁孩子的人生。现在,他已经三十一岁,他自己也有了三个孩子,他更加清楚地意识到他游戏里的暴力来自何处,并能造成多大程度上的影响。他是个没救的孩子,做着些没救的游戏,而这一切只是为了逃避儿时经历的那些没救的心理和生理创伤。他喜欢游戏里的暴力,就像他喜欢漫画作品《麦尔文》里的暴力,这些暴力艺术对他不是没有影响:他喜欢大喊大叫,锤桌子,砸键盘,但他从未把虚拟和现实混淆在一起。在现实生活中,他甚至不知道如何开枪。

因为知道游戏中的暴力能产生一定影响,所以,罗梅洛认为,父母更应该担起责任。从而,就像其他同行一样,他一贯支持分级制度,毕竟,游戏制作者们和政客们不可能替谁去教育抚养孩子。父母们心里应该有数,孩子多大的时候才可以玩像Doom那样的游戏。罗梅洛一直憧憬着和他的两个儿子坐到一起,在他创造的天地里游戏。等到他们满八岁,罗梅洛早有打算,他们就可以进入Doom的世界了。

但在科隆比纳事件之后,罗梅洛没有向任何人吐露这些想法。尽管他没有像id一样被告上法庭,但干吗要多嘴呢?不管你跟记者说什么,他们总会按他们的意愿把你的话插入到整篇报道里适当的位置,然后你就等着挨骂吧。罗梅洛现在可不想再捅出什么篓子,甚至在科隆比纳事件之前,他就已经吃够了媒体的苦头。

1998年11月,后来的离子八人组(Ion Eight)集体出走的那一刻,离子风暴所有的泡沫都破灭了。没过几天,罗梅洛又得知那八个人的新公司,第三定律(Third Law),计划开发一个以摇滚乐队KISS为主角的射击游戏,他们还和开发者联盟(GoD: Gathering of Developers)建立起合作关系,而后者正是由前离子风暴市场部小子麦克·威尔逊成立的一家出版商。这对罗梅洛而言不啻为双重打击:麦克在暗中使绊,而使麦克得逞的却是他信任的手下。这就像是很多年前《软盘》的那次风波,只不过那次被扔下的光杆司令是艾尔,而这次是罗梅洛自己。

但罗梅洛从来就不是经不起挫折的人,更何况这次他还有个患难知己:斯狄薇·凯丝。在离子风暴短暂却多舛的旅程中,她就像是他黑暗中的火燫。她和他的过去很相似,在与现实世界发生错位后,他们都在游戏的奇幻世界里找到了归宿。而且,和罗梅洛一样,斯狄薇也如同脱胎换骨般重新塑造了自己。受公司那种创新气氛的引发,她决意改变自己那学校里的邻家女孩形象,她开始戒荤并参加体育运动,最终她减去了五十磅,她还染了头发,在上衣开口处堆出乳沟,并把肥大的牛仔裤换成紧身裤以突出曲线,她用做游戏挣来的钱给自己做了隆胸手术。在一年时间里,她就从毛头假小子变成了《花花公子》的模特——那家杂志在听说她的故事后,不惜重金把她请进摄影棚。离子八人组出走后,她成为了罗梅洛麾下的首席设计师。

她还成为了罗梅洛的女朋友。就在罗梅洛被公司事务弄得焦头烂额之时,刚产下女儿的贝丝和他分手了。罗梅洛再一次对婚姻感到了灰心,作为游戏之神和家庭支柱的他其实已经不堪重负。他一直以来都在告诉他生活中的人:他能行。在玩家和朋友面前,他的游戏不能让他们失望,在家人面前,他是个好丈夫好父亲。现在,他终于意识到,他不可能同时处理好事业和家庭。最明显的例证就是,他前妻凯俐带着孩子们搬回了加利福尼亚,这让罗梅洛手足无措,但他也只能面对现实:他,罗梅洛,娶了游戏作为终生伴侣。只有斯狄薇,他生命中遇到的第一个同样对游戏充满热情的女性,能使三者和谐相处。

告一段落后,罗梅洛把精力投入到了工作中,他要重新建立一支队伍,为此,他招募了几位老朋友,又从汤姆的项目里抽调了一些人。尽管现在的《大刀》满目疮痍,但它毕竟在渐渐成型,最终完成已是指日可待。1999年元月,他们宣布引擎更新换代结束,罗梅洛雇来协调项目工作的一位经理自豪地告诉媒体:“不管发生什么事,我们一定会在1999年2月15日拿出《大刀》。”

天有不测风云。就在几天后,媒体朝他们捅了最致命的一刀。当地的免费周刊《达拉斯观察报》(Dallas Observer)刊登了名为“风暴之境”(Stormy Weather)的封面文章,这篇七千字的稿子毫不留情地揭露了为什么说“所谓‘设计决定一切’的公司其实是个充斥着个人崇拜且鱼龙混杂的地方”,更让人震惊的是,这篇报道的素材是基于离子风暴的内部电子邮件,现在,通过网络和报纸,它们暴露在了全世界面前。

这对离子风暴而言如同灭顶之灾,和从前的劫难不一样,这次不只是公司的内部纠纷,这次,他们所有的丑事都暴露在了世人面前,包括麦克如何买了宝马,以及罗梅洛如何急着甩掉Eidos。故事在因特网上一传十,十传百,其速度丝毫不亚于当年的Doom试玩版,玩家们奔走相告:那个要把他们变成婊子的死亡竞赛手术师终于有了报应。罗梅洛试图找出泄漏的源头,他在公司里封锁了一些游戏站点,他甚至试图通过起诉《观察报》来挖出泄密者,但这一切都是徒劳的,罗梅洛最后只发现,合伙人托德曾意外地把电子邮件张贴到公司内部网络上,从而,公司里任何人都有可能取得一份拷贝。

几个月后,科隆比纳惨案发生。罗梅洛算是跌到了谷底,他的公司成为别人的笑柄,他的游戏再一次延期,2月15号是不可能了,什么时候能完成?大家心里都没底。id就要推出Quake3,《大刀》采用的Quake2引擎马上又要成为昨日黄花,它的多人连机试玩版在三月份发布后,玩家普遍认为它太过时。

现在看起来,罗梅洛心中所谓‘大公司’的梦想似乎走得太远了,他们太放纵、太浮躁、太自大,他那些卡马克曾斥责过的毛病 ——三心二意、盲目自信、人海战术——终于使他在残酷的现实面前撞得头破血流,但现在说什么都为时已晚。Eidos也看清了这点,在投入三千万美元后,他们给罗梅洛下达了最后通牒:你必须要立刻改变做事的态度。用Eidos总裁罗勃·狄尔(Rob Dyer)的话说就是:“闭上嘴巴把游戏做完。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

1999年5月,一年一度的E3大展在洛杉矶如期而至,id再次成为瞩目的中心,但这次是出于不同的原因。科隆比纳事件和帕达卡诉讼案才过去不到一个月,关于暴力游戏的报道正是连篇累赘,E3自然成了新闻界和游戏界正面接触的场合。而无论记者们在采访计划里列了多少公司,Doom和Quake的制作者无疑是他们眼中最肥的猎物。

这是个艰难的时刻,没有人愿意谈起那惨剧。互动数字软件协会(IDSA)主席道格·罗温斯坦(Doug Lowenstein)在致大会开幕词时就试图先定下基调——他所属的协会正是1993年在列博曼议员听证会的督促下所成立的业界组织。他指出,在已发布的五千个游戏中,只有7%的作品包含可以使它们被评定为成人级别的暴力内容,而且,游戏消费群的确在不断成熟,IDSA的数据显示,54%的玩家已年满十八岁,这其中有25%年满三十六岁,而计算机游戏玩家的年龄分布更为趋向大龄化:70%年满十八,这其中的40%年满三十六。他们每年在游戏软件上的消费额达到七十亿美元,这个数字已经超过了电影业的票房收入。“我想提醒那些为了暴力问题而赶来的记者,”他说道:“你们正在错过一个更精彩的故事,交互式娱乐正在成为整个娱乐产业里增长最快的领域。”

记者们以行动作为回答,他们涌向id的展台,期望能得到一些关于科隆比纳事件的素材,当然,没有人就此发表任何评论。当他们纠缠在id的玩家身边时,公关顾问会立刻打断他们的提问,然后告诉他们去找出版商询问此事,而id的出版商Activision只会说:无可奉告。id不是惟一一家低调处理此事的公司,他们在威斯康星的老朋友,Raven,也就要推出一款名为《命运战士》(Soldier of Fortune)的射击游戏,这次E3上,他们只在封闭的房间里做演示,另一款颇受期望的射击游戏《匪首》(Kingpin)也同样如此。而对于id,暴力题材的争论根本不是关键:Quake3,这款他们带到E3上展示的游戏,已经让他们伤透了脑筋。

一年前卡马克宣布Quake3将只有多人对战时,麻烦就开始了。《半条命》这个以故事线为卖点的射击游戏正大行其市,卡马克的计划就算不是异想天开,也可以称得上是叛经离道。玩家们还对这款据说是id最华丽的游戏所需的机器配置忿忿不满——它只能在有三维图像加速卡的机器上运行。

玩家总是不满的,但问题是id的内部也怨声载道,Quake2制作阶段的纷争使公司的士气一落千丈。卡马克不再只是面对罗梅洛,现在,他面对的是整个公司。《半条命》的成功鼓动了所有人,大家都想做一个波澜壮阔的游戏,但不管他们拿出什么方案,卡马克一概毙之。艾德里安已经习惯了:从什里夫波特湖畔小屋起家的id早已是卡马克一个人的公司,只不过越来越明显而已。他失望透顶,他想做点东西,不管是什么,只要不是炒冷饭。甚至玩家社群里都传出了批评id的声音:从不考虑故事性和游戏性的设计,把同样的主题做了一遍又一遍。但艾德里安只能接受现实,否则又能怎么样呢?他问自己,炒掉约翰·卡马克?

随着工作不断推进,公司越来越像是一盘散沙。卡马克选择多人游戏这条路本是为了使员工们可以互不纷扰地做事,但事实是,他们完全分崩离析。当卡马克完成早期版本的Quake3引擎时,关卡设计师和美工们觉得毫无方向可循,他们不知道到底要做什么,他们就自顾自地创造出一个个小世界,显然,这些世界之间不可能有什么联系,它们都自成一体。

卡马克自己同样陷入失望。现在的他,创作出了史上最强大的引擎,但似乎却没有人把此看做是一次契机,没有人来推动技术,没有人来推动设计,没有人来推动他。尽管卡马克从未公开表示过他怀念过去的id,怀念罗梅洛那令人眼花缭乱的构思和设计,但卡马克清楚地知道,现在的id已不再是那个id,现在的id已经没有了自发的动力。

1999年2月,员工们受够了,卡马克显然对公司的日常事务没有丝毫兴趣,他们需要一个项目经理,或者说是监制。于是,卡马克拨通了格雷默·狄维(Graeme Devine)的电话。格雷默在游戏界也是个响当当的人物,他十六岁在英格兰的时候被学校开除,因为他整天都在忙着编写雅达利主机上的游戏,后来他搬到美国,和别人一起成立Trilobyte公司,并于九十年代早期出品了《第七访客》这款光盘游戏,它在当时是个技术飞跃,它自然也是销量最大的游戏之一。格雷默和卡马克是作为程序员而建立起友谊的,他们之间的交流也大都是当前最新的技术话题,现在格雷默的公司辉煌不再,卡马克觉得正是请他来帮助制作Quake3的好时机。格雷默踌躇满志地答应了,但id的现状让他大吃一惊。

格雷默向员工们一一询问:你觉得这个项目的方向是什么?他从十四个人口中听到了十四个不同的答案。在id的第一天工作结束后,三名员工请他到麦斯奎特的一家星巴克(Starbucks)咖啡馆聊聊,他们告诉格雷默,你面前是刀山火海,“他们会跟你说你有权力,”其中一个解释道:“但其实你没有,他们也许会说这样做不错,但他们最终会凌驾于你的决定之上。”员工们提醒格雷默,有些人你不能相信,在id要提防着勾心斗角,提防着明枪暗箭。格雷默一笑了之:“情况肯定会好起来,”他拍胸脯道:“不要担心,会有新局面的。”

没有新局面,一切照旧。虽然来之前就有心理准备,但格雷默这次才终于领教到什么是“id的自负”:每个人都觉得工作没有方向,而每个人又都不愿听别人指挥。更糟的是,居然所有人都忘了游戏最基本的一个组成部分——机器人(bot),那是由计算机程序控制的死亡竞赛对手,它应该可以融入到比赛中和玩家交互,从而使场面更为丰富多彩。对于Quake3这个只有死亡竞赛的游戏来说,机器人是必不可少的,当然,这不是件简单的事情,因为它们要能表现得和人类玩家一样。

平生第一次,卡马克决定把这部分代码交给公司其他程序员来做,但他还是犯了个错误,他再次认为公司其他人都有他的技术,并像他一样积极主动。格雷默走马上任后就开始查看起项目的各个细节,这时他们才发现游戏里的机器人完全不合要求,它们的举止不像是人类玩家,而像是——机器。所有人都坐不住了,日历翻到1999年3月,他们也应该坐不住了。

在圣何塞市举办的年度游戏开发者大会上,id的人们看到了《虚幻竞技场》(Unreal Tournament),它的制作者就是在1998年出品了《虚幻》的Epic公司,这家公司已成为了id最强有力的竞争对手,其主程序员提姆·斯威尼也赢得了广泛尊敬,他们甚至还雇到了两位前id职员来做市场商务:杰伊·威尔伯和马克·瑞恩——《德军总部3D》时的“试用经理”。Epic的《虚幻》,和Valve的《半条命》类似,给主视角射击流派带来了更多的内涵,此外,它的图像引擎是自行开发的,这已经颇让id为之侧目,而他们这次的《虚幻竞技场》则更让id惊诧莫名——它是个只支持多人对战的游戏,和Quake3一样。

在id的一些人看来,Epic显然是偷取了id的点子,为此,他们对卡马克总是在计划文件里透露公司的开发方向而表示出不满。但Epic否认了外界的怀疑,他们声称,早在卡马克发布这消息之前,他们就已经开始考虑《虚幻竞技场》。敌意和竞争不会因此而消散,再加上Quake3项目开发的紊乱,以及科隆比纳事件的发生,紧张压抑的气氛没有得到丝毫缓解。

E3之后,尽管媒体和玩家们给予了Quake3不少正面评价,但id内部却又出现了问题:两名年轻能干的员工在失望中离开了,他们是关卡设计师布兰登·詹姆斯(Brandon James)和程序员布赖恩·霍克(Brian Hook)。艾德里安也和妻子分手了,他们是在Doom最辉煌时走到一起的。最能协调关系的凯文觉得不能再这样下去,于是他请卡马克从自己的办公室里搬出来,到他和艾德里安的房间里一起工作,以增进沟通,而此举却使其他员工们心里七上八下——老板们都呆在门后面谈什么呢?其实他们什么都没谈,他们一言不发地坐在各自机器前干活,惟一的响动就是艾德里安和凯文放他们喜欢的音乐,当然,是在卡马克离开后。

项目临近结束,格雷默已不是监制,他重操键盘写起了程序。机器人部分的代码也转包给了一名荷兰学生:曾为Quake和Quake2开发过机器人的Mr.Elusive,他奇迹般地赋予了Quake3机器人以生命。风格迥异的关卡在经过若干顺序调整后,已多少有了点连贯的感觉。1999年11月,就快要熬出头了,为了营造声势,几个员工参加了一场巴士巡回展,但最后草草了事,因为他们发现,老冤家Epic再次走到了id前面:十二月初,比Quake3早一个星期,《虚幻》上市。

前方依然疑云密布:玩家们会追随卡马克和Epic那毫无情节的网络对战世界,还是会选择罗梅洛,这个要用情节丰富的《大刀》来实现他所有梦想的设计师?在《福布斯》关于Quake3的一篇前瞻报道里,罗梅洛表达了他的观点:“在线游戏在整个市场里的份额依然很少,因特网上的玩家恰恰就是最善于在网上找到免费游戏下载的玩家。”两位约翰究竟谁能胜出?编辑有他自己的论断:“很有可能,id那偏向务实的作风会略胜一筹。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“啊嗷——!”这是离子风暴办公室,窗外是无边无际的夜,屋内是一个个阴暗的洞穴,肖恩·格林身着黑色T恤坐在里面。就像《2001太空漫游》(2001: A Space Odyssey)片首的那个猿人一样,罗梅洛的这位老友在狂怒中把键盘朝地面砸去。一个消瘦的程序员从另一个洞口探头瞟了瞟,然后漠不关心地继续工作。肖恩捋捋头发,把碎裂的键盘扔到一旁,无奈地笑道:“事情还是照样要做。”

包括肖恩在内的整个《大刀》项目组已经连轴转了好些天。罗梅洛早年曾向卡马克描绘过“不再有死亡进度”的日子,但他似乎已忘了这事,他现在要手下们周末也加班。越来越多的员工不回家睡觉,他们如同沙丁鱼般排在休息室,一些人直接蜷缩在黑色毡布围绕的小格间里,比萨盒就是枕头。一个叫布赖恩·艾瑟罗(Brian "Squirrel" Eiserloh)的家伙在最近九十天里有八十五天呆在公司。斯狄薇得了肾炎才回家卧床休息,罗梅洛甚至在公司里最受欢迎的街机上贴起警示:“《大刀》发布前谁也不许碰《铁拳3》(Tekken 3)!”

已经几个星期没喘口气的肖恩准备出去疯一下。他要到一家废弃的医院里去舒展神经,没错,他还是死亡金属乐队“终章”(Last Chapter)的一员,那是他们排练加狂欢的地方,他不能再每天喝下半箱威士忌而只坐在显示器前看代码,他要释放能量。他还跟罗梅洛开玩笑说去弄个真人大小的瓷偶来放到大厅里,并给它戴上棒球手套,言下之意是:你的性命就握在你自己手上。

1999年的离子风暴也一样。罗梅洛的这艘战舰不只是再三偏离了航线,它还一度搁浅在狂风巨浪中,只看到人们争相逃命——或是推别人下水。粗算起来就有离子八人组的出走、《达拉斯观察报》的风波、科隆比纳事件,而今年的E3大展再次使他们陷入麻烦。他们这回宣布的游戏发布日期是十二月,也就是说,如果他们还有机会扳回局面的话,那就是这次大展。压力空前,托德找到罗梅洛:“Eidos非常非常关注我们这次的表现,我们一定不能出差错,我要确保所有的事情都被安排妥当,万无一失。”他会把演示版准备好,然后发到E3会场。

罗梅洛和斯狄薇再次以明星形象出现在五月的展会现场,他身着黑丝衬衫和黑色皮裤,脖上系着长长的银链,她同样穿着黑色长裤,一席金发披散在蓝色紧身衫后。尽管有过无数负面报道,但他们还是被正值青春期的男性玩家们和索要签名的Doom迷包围了起来。《大刀》的演示盘送达后,让人尴尬的一幕出现了,程序里的纰漏使得屏幕上的游戏奇慢无比。罗梅洛立刻飞回达拉斯,他直接冲进约翰·卡瓦纳夫(John Kavanaugh)的办公室,这人是Eidos派驻离子风暴监督视察工作的。

“我他妈的干不下去了,”罗梅洛告诉卡瓦纳夫:“如果托德继续留在离子风暴,我就立马走人,我没法跟这个家伙共事,他尽添乱。” 卡瓦纳夫随即安排了一次会议,Eidos的老板查尔斯·科恩沃(Charles Cornwall)也会参加,“你所要做的,”他告诉罗梅洛:“就是点头。”

六月,离子风暴的四位合伙人一起飞到洛杉矶,表面上,他们是来和Eidos洽谈收购事宜——公司已经欠了Eidos三千万美元。但托德和杰尔很快就知道了此行的真正目的。“我他妈的受够了!”罗梅洛直奔主题:“要么托德滚蛋,要么我就走!”

卡瓦纳夫装出难以置信的样子:“别扯了,约翰,你就是离子风暴,在这个问题上没什么好讨论的。”

杰尔知道这一切都是为了什么——控制。罗梅洛想要《大刀》完全在他掌控之下。杰尔不报希望地提出个方案:“如果你只是不愿意托德插手你的项目,那么我们能不能给托德另外找点事做?大家觉得怎么样?”

“听好,”罗梅洛说:“在这家公司做事已经让我感觉不到任何乐趣,我想我们四个人最好能两两组合,从此井水不犯河水。”

就在杰尔要拿出下一个方案时,托德平静地开口了:“对,约翰,你是对的,我也感觉不到乐趣了,杰尔想必也一样。”杰尔惊讶于托德的妥协,但他没吭声,算是同意托德的说法,他俩就要离开离子风暴了。四个曾经的合伙人走出大楼,忽然迎面一阵闪光灯——好熟悉的感觉,但这次,娱记们是在拍站在门口的影星希瑟·格雷厄姆(Heather Graham)和罗伯·洛(Rob Lowe)。

最终,托德和杰尔很高兴看到步入末路的离子风暴被正常收购。罗梅洛和汤姆也松了一口气,这毕竟又是个新的开始,也许,接下来的游戏还可以拯救公司,不管怎样,他们最初的信念没有丝毫动摇:设计决定一切。问题的所在,罗梅洛说,只是做设计时没有把技术因素考虑进去,再加上设计师可能并不善于项目管理。

十月,在前后投入四千四百八十万美元后,Eidos宣布获得离子风暴51%的股份。罗梅洛整个秋天都投身到《大刀》的工作中,媒体访谈全部推掉,《铁拳3》再没插上电源。尽管怪物、关卡、音效和美工都基本就绪,但还有一项艰巨的工作:在承诺过的12月17日前排除程序中所有遗留问题——总共五百个。但Eidos不知哪来的信心,他们甚至不顾罗梅洛的反对,提前安排好了庆祝派对。

派对是如期举办了,但却没有游戏在那天发布。直到2000年4月21日,罗梅洛才觉得万事俱备。第二天,他坐到计算机前向因特网上的读者们发布了如下信息:“上帝啊,它终于完成了,我还曾经认为在一个游戏上花一年半的时间就叫漫长……哇噢。我希望大家都能冷静客观地看待它,不要把你的看法建立在以前各种报道之上,而是去审视它的可玩性,也就是我们制作过程中的目标:一次乐趣盎然的单人游戏体验。”罗梅洛知道,媒体和玩家们势必拿《大刀》和他前任公司的作品进行比较,他试图去平息这无谓之争:“我们没想过用《大刀》去对抗Quake3。”但那已是他所不能掌控的事。

第十六章:永恒的世界

2000年底,卡马克双喜临门,一是id发布了Quake3,二是他迎来了自己的婚礼。几年前,他收到加利福尼亚一位女商人兼Quake迷凯瑟琳·安娜·康(Katherine Anna Kang)的来信,她想举办一次女性Quake锦标赛。卡马克说那很棒啊,但是你恐怕只能找到二十五个人——她找来了一千五百个。卡马克对任何能证明他错误的人都抱有敬意:安娜?她是个什么样的人?

她是个自尊自爱自强的女性。作为在洛杉矶长大的美籍亚裔,安娜被称做“香蕉”——这个蔑称比喻她们虽然思想已经被白人社会所同化,但外表还是黄皮肤。他人的轻视并没有使安娜的信念有丝毫动摇,就像她所说的:“女人并不是男人的附属,跨种族的联姻不是什么孽缘,就好比,资本主义不是毒草,社会主义也不一定就是万金油。”美籍俄裔女作家艾·兰德(Ayn Rand)是安娜的精神偶像,她希望自己能像兰德笔下《源泉》(The Fountainhead)里的盖尔·威纳德(Gail Wynand)一样强大。在Quake的世界里,她做到了。

成功举办了那次锦标赛后,安娜继续和卡马克保持着联系。他的无私就是他的魅力——就像他与世界分享代码和知识那样。尽管她曾戏称他为呆子,但她相信他其实有深邃博大的心灵。卡马克同样被她所吸引,他们谈论艾·兰德,谈论世界观,谈论游戏,卡马克喜欢她争论的口气。

他们开始了天各一方的罗曼史,直到卡马克征得其他员工同意后在id给安娜找了个职位,以作为安娜搬到达拉斯来的一个理由。她来了,又很快走了,她在id的日子没有持续多久,但她和卡马克的关系会继续下去:他们在夏威夷完婚,只有家人和密友被邀请参加婚礼。这是卡马克平生第一次度假,就这次,他也没忘了随身带上便携式计算机。他有工作要做。

Quake3在卡马克眼中,就像他所有其他游戏一样,和他准备要做的事情比起来已是陈年往事。在线游戏日益普及,其中一些已经是永恒的网络世界,它们像现实世界一样客观存在,玩家随时可以造访其中,展开探险。中世纪风格的《无尽的任务》(EverQuest)和基于理查德·盖略特原作的《线上创世纪》(Ultima Online)卖出几百万份拷贝,造就了一类所谓“多人在线角色扮演(MMORPG: massively multiplayer online role-playing games)”的游戏,成千上万来自世界各地的玩家可以齐聚一堂,他们在数字时空中生活,他们每周花几十小时战斗、探索、升级。《无尽的任务》被玩家们称做《无法自拔》(EverCrack)。一些玩家甚至开始在Ebay等网站上用现实中的金钱交易起虚拟世界里的宝物,譬如武器或装备。

这场面就是早年“黒客伦理”时期最被广为传诵的图景,而今真实地发生了。“这使得我们可以拥有虚拟资源,”卡马克说:“从而我们可以从无到有创造出财富,并可以随意地复制这财富……不像现实世界中的物理实体,数字世界里的物品向我们展现了复制财富的可能性。世界将变得更富足。”

回到达拉斯后,卡马克决定把这些新想法告诉同事:“我们应该专注于建造一个通用的底层架构,然后在这之上制作一个游戏。这个底层架构将提供人们一直以来谈论和期待着的网络三维环境,我们现在就可以实现它。”这就是卡马克穷其一生为之奋斗的目标,这就是从奥尔德斯·赫胥黎到威廉姆·吉布森等小说家笔下的科幻梦境,这就是《星际迷航》里的全息成像台、《神经浪游者》里的电脑空间、《雪崩》里的变体,这就是虚拟现实,它有着众多的称谓,但人类所掌握的技术从未能把它变成现实——哪怕是一个原型。而现在,卡马克认为,时机成熟了。

他把目光投向会议室里的同事,期待着他们的赞同,而他得到的只有白眼。“我们可是一家游戏公司,”艾德里安说道:“我们做的是游戏。”卡马克发出一声叹息,他知道,不管他多么全能,不管他如何付出,不管他有多少威望,他不可能独自完成这目标,他需要有同伴用他的技术绘制出一个美丽新世界,他需要有人为此痴狂,为此投入,为此不惜一切,他需要有人理解:这是地球上有史以来最他妈的牛B的东西!——他需要罗梅洛。会议不欢而散。

那么,id接下来做什么?尽管没人愿意做“变体”,但大家都想尝试点新鲜玩意。格雷默的建议是:《任务》(Quest),一个多人角色扮演游戏,和主视角射击根本搭不上边的东西。艾德里安和凯文对此也颇为动心,毕竟这是id从未涉足过的领域。其他人也纷纷附和。玩家社群已经对id一再翻新旧题材不满了许久,这次,该搞搞新意思了,就像格雷默宣布的那样:“别了,火箭筒!”大家一致同意,《任务》将是id的下一款作品。

但很快卡马克就厌恶起这游戏,他感觉接下来三年的时间都要葬送在里面,这让他无法忍受。与此同时,还有一个声音,一个在所有人耳边回荡了若干年的声音:重新制作Doom。卡马克不是很喜欢这想法,但他也丝毫不讨厌它。在id的监制下,一家名叫Gray Matter的公司正在制作新版《德军总部3D》:《重返德军总部》(Return to Castle Wolfenstein),玩家们对它寄予了很高的期望。卡马克已经考虑了许多下一代图像引擎的特性,譬如完全动态的光影效果,如果做Doom3的话,它们就有了用武之地。而且,提姆·威利兹和保罗·斯蒂德等id第二代员工们之所以能进入游戏业,完全就是因为Doom,为这古老传奇谱写新的篇章让他们再激动不过了。卡马克甚至还向九寸钉的特伦特·雷佐征求了意见,问他如果做Doom3的话,他是否有兴趣继续为id编排和调制音效,参与过Quake制作的这位摇滚明星一口应承了下来。但其他人则竭力反对。

尤其是凯文、格雷默、艾德里安,他们不想再做Doom。“这就像一支乐队事隔多年后重新出版首张专辑,只不过因为他们觉得可以做得更好。”艾德里安说:“这有什么鸟意思?应该把时间用在有意义的事情上,而不是花两年功夫重新做一件你已经做过的事,为什么不试着在我们开辟的游戏领域做进一步拓展?”

为了把问题缓一缓,公司决定开始制作Quake3的任务包:《团队竞技场》(Team Arena)。id无疑是要回应外界关于Quake3没有足够组队模式的指责,当然也是对抗《虚幻竞技场》的成功。但任务包的开发工作逐渐变得拖拖拉拉,大家都在犯嘀咕——公司下面究竟要怎么走?卡马克越看《任务》越不顺眼,他想了个办法,他要一劳永逸地解决这问题。

一天晚上,卡马克走进保罗的房间:“特伦特·雷佐愿意为Doom3制作音效。”

“Doom3?”保罗惊讶道:“我们不做Doom3,我们要做《任务》。”

“嗯,我决定做Doom3,你来不来?”

“废话,当然!”保罗开心地喊道。提姆也答应了。

第二天,卡马克走进凯文和艾德里安的房间:“我想做Doom3,保罗想做Doom3,提姆想做Doom3,如果我们不做Doom3,我将离开公司。”话音一落他就转身走出门。

这让凯文和艾德里安难以置信,但他们又能怎么样?炒掉卡马克?没有了卡马克的id还是id吗?他们讨论了各种方案,包括把公司分为两个部门,或者,艾德里安想,散伙就散伙,卡马克再三用辞职作为要挟,艾德里安觉得这一天真的来到了,也许,卡马克就盼着这样。他后来向卡马克询问,如果公司现在开始新项目,而不是Doom3的话,怎样才能留住他。卡马克的回答是:“没有任何东西能留住我。”话已至此。第二天,卡马克把决定告诉了全世界。

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

“那辆悍马(Hummer)怎么样?” 那辆悍马怎么样?那辆悍马怎么样?满脸油腻留着平头的小男孩不停问道,他手里拿着几份墨西哥菜单,这家自称塔瓦科尼湖附近“最棒”的墨西哥餐馆位于达拉斯以东三十英里,其实,它是这惟一一家墨西哥餐馆。现在是2001年夏天,坐在小男孩面前的就是罗梅洛和斯狄薇。几个月以前躲到乡间后,他们就成为了这家小饭店的常客,他们明星般的装束固然吸引了邻里的目光,而那些高档车才是真正让乡亲们啧啧称羡的东西。从《大刀》的噩梦中醒来后,这环境让人无比舒坦。

那噩梦让人心有余悸,无论是看销售额,还是看媒体和玩家的评论:《大刀》在美国只卖出四万一千份。除了少量报道给予它正面评价外,游戏迷和媒体把它骂得狗血淋头。《娱乐周刊》把它比做“《水世界》(Waterworld)般的灾难”——那是凯文·科斯特纳(Kevin Costner)的一部电影巨制,和《大刀》一样既不叫好也不叫座;《PC玩家》(PC Gamer)认为它“只不过标志着一个偶像崇拜时代的结束”;《计算机游戏世界》则直截了当:“没错,它是垃圾。”

罗梅洛认为,真正投入地玩过《大刀》的人几乎不可能得出以上结论,而实际上,大部分人几乎不可能投入进去:游戏一开场就四处是污绿的池塘,里面成群腻滑的青蛙和嗡嗡作响的蚊虫,许多玩家不堪忍受,只好就此退出。罗梅洛是第一个在访谈里表示喜欢《大刀》的人——虽然开发过程极其痛苦,他还坚称这款游戏在技术许可和国外市场上能取得突破。与此同时,离子风暴奥斯汀分部在沃伦·斯派科特带领下制作的《杀出重围》却大获成功,被若干家出版机构评选为年度最佳游戏。在罗梅洛看来,不管《大刀》的下场如何,他最早的设想已被证实为是行之有效的:要建立一个同时制作多款游戏的帝国。

只不过,罗梅洛的热情现在已于事无补。《大刀》过后,他开始策划起续作的初始框架,并协助汤姆完成《异次元》,汤姆的项目组里也有许多人出于不满或失望而离去了。《异次元》就像《大刀》一样,将是史诗般的巨著,在这个科幻角色扮演游戏里,玩家是一名太空侦探,他必须要摧毁神秘异形的阴谋。游戏里有上百种生物,各式各样的武器,以及无数融合在大情节里的小游戏。2001年初,《异次元》漫长的开发过程就快走到头了。

其他一些事情也快走到头了。罗梅洛于某天听说Eidos将在《异次元》发布后解雇一批员工,他满怀好奇地走进财务办公室,他拿起桌上的单子一看,离子风暴达拉斯总部所有人的名字都赫然在目,包括汤姆和他自己,而沃伦的奥斯汀分部却毫发无损。罗梅洛回到自己办公室,窗外的高速公路上依然是一片车来车往的繁忙景象,他拿起电话,拨通斯狄薇:“一切都结束了。”罗梅洛从来没担心过会失去什么,但这次,他的心有点乱。都没了,他慨叹道,那设计、那梦想、都没能如他所愿,这简直让人……伤心。但他是罗梅洛,不会被悲伤缠身的罗梅洛。他再次拿起电话——斗转星移,这一幕就仿佛是几年前,还在id的罗梅洛拿起电话——拨通汤姆,过去的就留给过去,明天又有明天的游戏。

罗梅洛和汤姆、斯狄薇计划着成立一家新公司,他们甚至勾画起了接下来的游戏:一个十岁的孩子,不像指挥官基恩那样要拯救银河系,他要打理各种日常杂事,和家人搞好关系;或者是一个西部牛仔式的射击游戏,或者是,基于麦当娜(Madonna)的什么游戏。他们还讨论说要针对移动平台开发,譬如掌上电脑和手机,这是个有着巨大潜能的市场,预计到2006年时将达到六十亿美元的销售额。罗梅洛还想基于Quake的品牌制作一款游戏。一天下午,他驱车前往麦斯奎特和id商谈此事。

为了给员工们更大的空间,id早在几年前就搬出了那黑色的立方建筑。公司的新址,在罗梅洛看来,比原先还要平淡乏味:一幢夹在两家餐馆中间的普通办公楼。

从Quake结束到现在,五年过去了,尽管罗梅洛和卡马克也经常在各种场合见面,但这是罗梅洛第一次找卡马克谈一件生意上的事,一个创意,一款游戏。当罗梅洛走进房间时,卡马克一如往常坐在显示器前优化着下一代图像引擎。他的房间比以前大了不少,也更干净整洁,但仍然是那么简朴无华。他的显示器放在墙边的窗户旁,透过眼角的余光,他可以留意着停在楼下的法拉利。

“嗨,”罗梅洛说。 “嗨,”卡马克说。

罗梅洛谈起了此行的目的:“我想利用Quake的品牌制作一个新游戏,一个永恒的世界,你觉得怎么样?”

卡马克点头:“当然,没问题。”他自己也曾想过和最早的伙伴们——罗梅洛、汤姆、艾德里安——在任天堂的掌机Game Boy上制作新版的《指挥官基恩》。尽管他和罗梅洛都十分清楚他们不可能再在同一家公司共事,但这并不意味着他们就不能合作。

罗梅洛上路了,带着他跳动的比特,去迎接新的一幕,新的希望。他首先要解决的问题是——房子。他知道他心目中的新公司是什么样,那应该是一个大家庭——就像早年的id,为此,他要选择合适的环境,譬如,就像什里夫波特的湖畔小屋。斯狄薇在网上看到一间合适的宅邸。于是他们跳进悍马出发了,他们开过id的办公楼,开过洛克沃镇,开进一条乡间公路。两旁的景物逐渐变得陌生:门可罗雀的商铺、废弃的校车,一片空地中央居然还有个锈迹斑斑的飞碟状物体,当他们向当地人问起这汽车般大小的飞碟时,人们打趣说这玩意几年前忽然凭空冒了出来,现在有人正准备把它打扫打扫,然后开一间热狗店。

房子让他们喜出望外。它在一条石子路的尽头,旁边是一个池塘,里面有个二十孔喷泉,池塘边一排小屋,环礁、瀑布、温泉浴、孔雀园……,总而言之,完美。他们立刻决定买下它。罗梅洛随后给每只孔雀都起了个游戏名字——乒乓、猪小弟(Pooyan)、火凤凰(Phoenix),他把这里变成了孩子的天堂:堆积成山的游戏,随手可及的零食,不绝于耳的音乐,这就是他童年时的梦想。现在,他父亲做不到的,他做到了,当儿子们回家时,他们就坐到一起打游戏。罗梅洛甚至可以和生父阿方索·安东尼奥·罗梅洛坐到一起打游戏 ——在老人家表示出困难后,罗梅洛给他在附近买了套房子。

从墨西哥餐馆回去的路上,罗梅洛和斯狄薇商量着给新家最后落上点睛之笔:譬如在碎石路边立一个木制路牌,一边指向“死亡小屋”,一边指向“鬼魂庄园”;或者,更绝的,一个指向旁边树林的石碑,上书“我们不认识或不信任的人,请沿此前进”;他们还考虑在路中央建一道石门,横幅“德军总部”。

但这些都是过于宏伟的设计,而他们的新公司,Monkeystone,不会再走这条路了。这次他们不想着做大,他们只想有个充满乐趣的私人空间,“只是些好朋友,”罗梅洛把车开进家门,说道:“好朋友们聚到一起做做游戏。”

﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡﹡

卡马克做游戏的日子也快到头了。和凯文及艾德里安摊派后第二天,他发布了消息:“本不该这么早就说的,但是,不管那么多了 ——我们计划开发新的Doom,专注于单人游戏,并使用几乎是全新的图像技术。目前就这些,近期内我们不想接受访谈,因为没有什么东西可透露,等事情真正有点眉目时再说,以免造成不实的措词。做这决定没有经过太大阻碍,比期望中顺利,但就在昨天,凯文和艾德里安出于报复解雇了保罗·斯蒂德,不顾我的反对。”

Doom3的计划公开后,硅堡开始流传起猜测:这将是卡马克的最后一个游戏。越来越多的迹象表明,这并非空穴来风,譬如id几位当家人之间的不和,以及,更重要的,卡马克有了新目标:建造火箭——真正的火箭。

卡马克在Quake3开发阶段重新拾起了对火箭的爱好。在一次访谈中,卡马克被问起童年的经历,他讲述了一些关于火箭、炸弹、少年之家的故事,以及,他回想道,那时的他是一个多么“不识好歹的小子”。采访结束后,卡马克到网上浏览了一番业余火箭界的近况,展现在他眼前的是一片多姿多彩并充满竞争的景象,黒客们、工程师们、爱好者们,正在建造大型的高能载人火箭,他们要进入外太空。卡马克一下子就来了兴趣。

头几个礼拜,卡马克买了一些火箭模型回来,他看着它们呼啸爬升,他开始深入了解起业余火箭爱好者们的世界:这里的人们认为美国国家航天总署(NASA)只不过是一家载重货运公司,爱好者们的目标是一千万美元的“X大奖”——把三名乘客送到外太空。当然,让卡马克感兴趣的是技术上的挑战。

而现在正是一个好时机。尽管在Doom3的引擎里也有无数创新,但就像卡马克所说,他觉得自己已经“快达到图像编程的顶点”,自从他在Quake里实现了真三维环境后,剩下的工作无非就是不断改进和优化。初涉火箭领域的卡马克,就像回到了当初的《软盘》:他能结交到比他知识渊博的人,他可以学到更多的东西。建造火箭不需要考虑什么市场需要,也没有什么既定的条条框框,他只要遵循大自然的规则。卡马克所面临的挑战不再是计算机性能,而是地心引力。

卡马克动手了,他买了几千美元的相关书籍和文章,他在当地一家网站上发布广告,征求同伴一起来建造载人火箭飞船,或者用他的词——“垂直向上的跑车”。几个新手欢快上路了,他们给自己起名叫“犰狳航天”(Armadillo Aerospace)。卡马克的老友鲍勃·诺伍德贡献出自己的法拉利车行作为工作场地,他们很快就开始每周一聚。

开发着Doom3的同时,卡马克把越来越多的精力放到了火箭学上。他的屋子里到处是零件,他的法拉利后备箱里堆满各种引擎——火箭的引擎,现在的卡马克就是id第一款游戏里的比利·布雷兹 ——那个在自家后院组装飞船的小天才。曾经每周在计算机前度过一百个小时的他现在有一半时间在和机油及焊锡打交道。他按照自己的体格在火箭上安装了座椅,他有时在废弃的停车场给它试火,有时在几百名火箭爱好者参加的聚会活动上进行发射,有时,他就带上几个小模型出门,找个空无人烟的地方,就像他童年时一样——只为玩得开心。

2001年11月一个凉风习习的下午,卡马克带着他亮橙色的火箭模型出发了,他开出麦斯奎特,一路往东,房屋渐渐稀少,广袤的牧场出现在前方,他在一块专供业余无线航模和火箭爱好者试验的地方停下。几张野餐桌散布在这片棕色的泥地上,附近还有个蓝色的移动厕所,一面国旗在生锈的旗杆上飘舞,绿色的垃圾筒已破烂不堪——就像源自Doom的某个关卡。“有人觉得现实是可以模拟的,”卡马克说:“但我想还是有必要出来亲身体验一下这风的感觉。”

卡马克支起发射台:一个红黑相间的架子,配有一根指向天空的细长固定杆。他拿出火箭,这时他还要估计一下风力和风向。他以前在这玩的时候曾经被强风把火箭吹得不见了踪影,后来他想了个办法:由便携式计算机和无线调制解调器组成接收端,再给火箭配备上信号发射器,他就有了一个很实用的定位系统。这才是黒客干的事 ——独辟蹊径地解决问题。现在,当火箭落地时,它身上那个老式无线导航装置就能把它当前的位置反映到卡马克手边的计算机屏幕上。

卡马克把第一艘小家伙套到固定杆上安放好,并根据风向做了些许调整,再把挂在箭身上的线路轻轻夹到尾部。他退后几步,按下一个小塑料按钮,然后,咻——的一声,火箭拖着尾烟盘旋升起。到了三百英尺高时,它开始以抛物线落下,塑料管做的推进器已经爆裂开,但顶部还连在一起,看上去就像直升机的螺旋桨。卡马克一路小跑把它捡了回来。

“好,现在我们试试这个。”他旋开橙色火箭的底部——这模型是他自己动手做的,包括组装主箭身,插入尾翼,打磨上环氧保护层,最后再涂上亮橙色的颜料。他这次用的是G-80引擎,比前一个小家伙强劲十六倍,他把紫白相间的降落伞和无线信号发射器塞进箭身,再用三英尺长的销子把它们顶住,最后旋上底盖。

这些引擎都是过家家的玩具,卡马克介绍道,他的高能火箭和这完全是两码事,那引擎需要高纯度的双氧水(H2O2)作助燃剂,而这种危险的化工原料很难搞到,安全稽查人员要上门查看你是否有足够大的库房存放它,而且,它太昂贵了,一小桶就要一千两百美元。与其那么麻烦,不如,卡马克和伙伴们想道,我们可以买一些70%纯度的,然后蒸馏提纯到90%。这是个非常危险的过程,一不小心就会导致爆炸,卡马克最后决定还是以安全为重,不冒这个无谓的险。

“这次我们要多退后几步。”卡马克把火箭放好,拉出引线固定在底座上,然后按下发射钮。嘭!咻——嘭!它没有飞太高,而是扎进了旁边的树丛。“喔,伙计,希望我们还能找到它。”卡马克跑过去一看,发现它就挂在树梢,漆黑冒烟的塑料舱看上去就像是机器人的某根导管。卡马克站在旁边屏息静气听了一会,直到确认它不会再哧溜乱窜。

寒风呼啸着卷过旷野,但卡马克丝毫没有回家的意思,他正玩得带劲,他兴致勃勃地笑着,说着。车箱里还有一个两倍威力的引擎,他取下旧的,换上这个大家伙,然后再把发射架上的固定杆扳扳直。

卡马克厌恶那种貌似先哲圣贤般的夸夸其谈,但如果你一定坚持,他也会聊聊他的想法。“在信息时代,客观障碍已不复存在,”他说:“所谓障碍都是主观上的。如果你想动手开发什么全新的技术,你不需要几百万美元的资金,你只需要在冰箱里放满比萨和可乐,再有一台便宜的计算机,和为之献身的决心。我们在地板上睡过,我们从河水中趟过。”

他揿下按钮,一阵浓烟和爆炸声后,火箭高高飞扬在了秋日牧场的上空。

~~~跋~~~

从两位约翰相遇到现在,十多年过去了,游戏业也从幼苗长成了参天大树。在美国,一百零八亿美元的游戏软件销售额再次超过电影业的票房收入,潜力无限的移动游戏市场正破土而出,游戏业还必将超过唱片业。

玩家们也在不断成熟。他们不再只是青少年,他们的平均年龄是二十八岁。玩家群体的多样性反映了游戏本身的多样性:从棒球到桥牌,从古罗马到太空城,从米老鼠到大卫·保伊(David Bowie)。据估计,60%的美国人把电子游戏作为一项日常娱乐,那总共是1亿4500万人,其中6200万女性,包括美国总统(他自己承认每天都要玩几把单人纸牌)。在德国、韩国、日本等地,游戏已是国民生活中不可或缺的一部分。

随着游戏逐渐被主流社会所接受,关于主视角射击游戏的担心也在渐渐平息。列博曼议员赞扬了游戏公司在分级制度上的努力。但一些人仍在试图通过法律程序来抵制暴力游戏,在帕达卡及科隆比纳事件的诉讼案中,枪手被指为受了Doom影响,游戏公司因此被索赔上百万美元,法院以驳回原告表明了态度:“在这些惨痛的悲剧面前,任何理性分析都显得苍白无力,法院就更不能貌似公允地把罪责推到某件事物身上。”

一个时代也宣告结束。尤其是对于达拉斯的硅堡来说:数十个游戏公司曾满怀雄心地在这里启航,其中包括罗梅洛的离子风暴和麦克的开发者联盟,而今,它们中的许多已人去楼空。创业的黄金时代成为历史,白手起家一统江湖的故事很难再上演了,但它的一些精神仍在延续,甚至最大的几家游戏公司都在模仿id的做法(譬如网络对战、免费发放试玩版、鼓励玩家对游戏进行修改扩充),只不过他们把这叫做“自发式行销手段”(viral marketing)。移动设备在日益普及,也许,下一个伟大的游戏就会从中诞生。

id翻新了几款旧作,但外界对它们褒贬不一。用以对抗《虚幻竞技场》的《团队竞技场》没有被市场和媒体所接受,玩家们认为它缺乏新意平淡无奇;由id监制但由另一家公司开发的Game Boy版《指挥官基恩》也落得相同结果;与此同时,《重返德军总部》却广受好评,销量喜人——尽管它和原作几乎没有相似之处,除了餐桌上的鸡腿。

现在的卡马克已是业界传奇人物。《麻省技术学报》(MIT's Technology Review)曾说:“游戏是计算机进化的推动力”,卡马克在图像技术上的革新就是一个范例。而他对玩家和社会的回报——譬如免费发布源代码——更使他获得广泛尊敬。2001年,他入选互动科学艺术协会名人堂(Academy of Interactive Arts and Sciences' Hall of Fame),刚步入而立之年的卡马克是第四位获此终生荣誉的游戏界名人,他也是迄今为止最年轻的一位。颁奖当天,会场先放了一段卡马克生平成就的介绍片,片子最后是比尔·盖茨向卡马克表示祝贺,并开玩笑说他的代码比卡马克的更优雅紧凑。短片结束后,卡马克微笑着走上台,观众席上爆发出经久不息的掌声,不习惯这种场合的他面露窘态。这场面堪与首届颁奖典礼媲美,那次,获奖者是任天堂的宫本茂,他创作的马里奥系列就是若干年前卡马克在《软盘》的那个晚上复制的游戏。

玩家们都在猜测卡马克会不会在Doom3后告别游戏领域,他自己也不知道。id的游戏及技术授权给他带来了足够的财富,他经常给慈善事业捐款,他不需要那么多钱。在技术上,长年浸淫于图像编程中的他几乎达到了禅宗般的境界,浴室墙壁上的光斑在他眼里只不过是水龙头上镜面反射光产生的漫反射效果,但这种理解方式并没有使他与现实世界脱节,相反,这使他更加对世界心存感激:“这些就是摄人魂魄的景象,我不需要走到大峡谷边才能感叹于造物的神奇,我可以就坐在屋里,看光线反射的样子。”

卡马克现在投入了另一项技术挑战:火箭。每个周末,他都和同伴们一起动手打造他所谓的超能垂直起落火箭车,他设计了一个登月舱样式的飞行器,里面的座位刚好能容下他,或是他的妻子安娜。下一步?也许就是千万美元的X大奖,那需要把三个人送到离地一百公里的外太空,并安全返回,然后在两周内用同一艘飞行器再跑一趟。认识卡马克的人们都期望他能有一次漂亮的表演。

罗梅洛则乐意把心思都放到家里,他和斯狄薇愉快地享受着田园生活。他已决定重头来过,他说,回到自己的老本行:设计和制作游戏。尽管外界对《异次元》的评价都不错,但在看过几份传统的出版订单后,罗梅洛、斯狄薇、汤姆三人还是决定去探索未知的掌上电脑和手机等移动市场。作为第一个进军这新生产业的游戏名人,罗梅洛无疑又成了啦啦队长,只不过以前是为PC,而现在是为手持设备。

他们这次只想几个人一起在较短时间做出个小游戏,他们做到了。Monkeystone的第一款作品《太空小信使》(Hyperspace Delivery Boy)于公司成立几个月后即发布。与三名员工一道,在达拉斯附近的乡间,罗梅洛和汤姆设计并编写了整个游戏——就像再回到从前。游戏里,盖伊·卡灵通(Guy Carrington)这位小主角穿梭于星际之间,他的工作是“投递宇宙里最重要的包裹!”一篇游戏评论称赞它是为数不多值得购买的掌上游戏。下一步?也许是新版的基恩,他们已从id买到了版权,汤姆很高兴又和他笔下的小英雄比利·布雷兹重逢了。

对于罗梅洛,这不只是个全新的开始,这是个向过去说再见的机会。三十四岁生日后不久,他效仿汤姆,剪去了他从1991年留起的长发,清爽的短发就像他现在清爽的公司。从不浪费的他把断发捐给了“爱心簇”(Locks of Love)——专为贫穷或疾病儿童提供假发的非盈利组织。要挥别的不光是他标志般的长发,现在的他生活在卡车和乡间公路中,他一度为之着迷不已的法拉利——Doom带给他的法拉利,已派不上多大用场了。

他在院子里恋恋不舍地从各个角度拍下爱车的照片,然后在拍卖网站Ebay上发布了消息,标题是:“惊艳绝伦”。六万五的底价一点不贵,他解释道,光引擎和涡轮等改装他就花了不下十万。“这车的声音无比震撼,”他写道:“穿行于街道中,踩下油门时,你会觉得它就像一辆方程式赛车……你会乐得合不拢嘴,它太牛了!”罗梅洛还保证道:“这绝对是你见过最横的特斯坦罗萨。”最终出价八万两千六的买家觉得罗梅洛此言非虚。

另外那辆特斯坦罗萨则把两位约翰又带到了一起。那是在麦斯奎特附近举行的一次Quake3锦标赛,往年,两位约翰彼此互不搭理,而这次不一样。游戏结束,比分定格,还是朋友。停车场里,卡马克的法拉利怎么也打不着火,隆隆声中,一辆黄色悍马停在他身边,手拿跳线的罗梅洛走出车门。

凌乱的异步编程

异常和 try/catch

当执行可能失败的操作时,异常和 try/catch 是一种直观的操作。通过这种方式,我们可以从失败中恢复,也可以不捕获异常,或者明确地将异常再次抛出,让异常沿着调用栈向上传播到调用者。

下面是一个简单的例子:

function thisMightFail() {
    //...
    if(badThingsHappened) {
        throw new Error(...);
    }

    return theGoodResult;
}

function recoverFromFailure(e) {
    //...
    return recoveryValue;
}

function getTheResult() {

    var result;

    try {
        result = thisMightFail();
    } catch(e) {
        result = recoverFromFailure(e);
    }

    return result;
}

在这个例子中,当 thisMightFail 失败并抛出一个 Error 时,getTheResult 捕获抛出的 Error,并调用 recoverFromFailure(例如,可以返回某个默认结果)。这个例子之所以能够工作,是因为 thisMightFail 是同步的。

面向异步

如果 thisMightFail异步的会如何呢?例如,它可能执行一个异步的 XHR 来获取数据:

function thisMightFail(callback, errback) {
    xhrGet('/result', callback, errback);
}

现在使用 try/catch 是不可能的了,我们必须提供一个 callback 和 errback 来处理成功和失败的情况。这在 JavaScript 应用程序中相当常见,所以没什么大不了的,真是这样吗?先别急,现在 getTheResult 也需要改变:

function getTheResult(callback) {

    // Simulating the catch-and-recover behavior of try/catch
    thisMightFail(callback, function(e) {

        var result = recoverFromFalure(e);
        callback(result);

    });

}

现在,对最终执行结果感兴趣的调用方,必须至少为每个函数签名增加 callback(也可能是 errback,请继续往下读)。

更多异步

如果 recoverFromFailure 也是异步的,我们不得不再添加一层嵌套的回调函数:

function getTheResult(callback) {

    // Simulating the catch-and-recover behavior of try/catch
    thisMightFail(callback, function(e) {

        recoverFromFailure(callback, function(e) {
            // What do we do here?!?!
        });

    });
}

这就提出了另一个问题:如果 recoverFromFailure 失败了该如何处理呢?当使用同步的 try/catch 时,recoverFromFailure 可以简单的抛出一个 ErrorError 将传播到调用 getTheResult 的代码。为了处理异步失败,我们不得不引入另一个 errback,这就导致在从 recoverFromFailure 到调用方的路径上,callbackerrback 侵入了每个函数的签名,而且调用方必须提供它们。

这也可能意味着我们不得不检查是否真地提供了 callback 和 errback,以及它们是否会抛出异常:

function thisMightFail(callback, errback) {
    xhrGet('/result', callback, errback);
}

function recoverFromFailure(callback, errback) {
    recoverAsync(
        function(result) {
            if(callback) {
                try {
                    callback(result);
                } catch(e) {
                    // Ok, callback threw an exception, let's switch to errback
                    // At least this will let the caller know that something went wrong.
                    // But now, both the callback and errback will have been called, and
                    // and the developer may not have accounted for that!
                    errback(e);
                }
            }
        },
        function(error) {
            if(errback) {
                try {
                    errback(error);
                } catch(ohnoes) {
                    // What do we do now?!?
                    // We could re-throw or not catch at all, but no one can catch
                    // the exception because this is all asynchronous.
                    // And now console.error has infiltrated deep into our code, too!
                    console.error(ohnoes);
                }
            }
        }
    );
}

function getTheResult(callback, errback) {

    // Simulating the catch-and-recover behavior of try/catch
    thisMightFail(callback, function(e) {

        recoverFromFailure(callback, errback);

    });

}

这段代码已经从一个简答的 try/catch 变为深度嵌套的回调函数,每个函数的签名需要增加 callbackerrback,需要增加额外的逻辑来检查是否可以安全地调用它们,而且讽刺的是,需要用两个 try/catch 块来确保 recoverFromFailure 真的可以从失败中恢复。

如何处理 finally?

试想一下,如果我们再将 finally 引入这种混乱的实现方式,事情必然会变得更复杂。基本上有两种选择:1) 为所有方法的签名增加一个 alwaysback 回调函数,并做相应的检查以确保可以安全地调用它,或者 2) 在 callback/errback 的内部处理异常,并确保总是会调用 alwaysback。然后无论哪种选择都不如语言所提供的 finally 简单和优雅。

总结

在异步编程中使用回调函数改变了传统的编程模型,并且引发了下面的问题:

  1. 我们再也不能使用简单的调用-返回编程模型。
  2. 我们再也不能使用 try/catch/finally 来处理异常。
  3. 我们必须为可能执行异步操作的每个函数的签名增加 callback 和 errback 参数。

事实上我们可以做得更好。在 JavaScript 中,还有另一种异步编程模型,更接近于标准的调用-返回模型,非常类似于 try/catch/finally,并且不会强迫我们为大量的函数增加两个回调函数参数。

下一步,我们将看看 Promises,以及它们如何帮助异步编程回归到更简单、更友好的模型。


原文:Async Programming is Messy

用 Promises 简化异步编程

凌乱的异步编程 一文中,当为一组简单的函数调用引入回调函数时,我们看到的是一副尴尬的局面,即使是用这种方式来处理单个异步操作。

快速回顾一下,看看我们最初的代码、使用回调函数时的凌乱结果,以及我们为了回到正途而想要解决的几个问题:

  1. 我们再也不能使用简单的调用-返回编程模型。
  2. 我们再也不能使用 try/catch/finally 来处理异常。
  3. 我们必须为可能执行异步操作的每个函数的签名增加 callback 和 errback 参数。

Promises

一个 Promise(又名 Future, Delayed value, Deferred value)代表一个尚不可用的值,因为产生这个值的计算过程尚未完成。一个 Promise 是最终的成功结果或失败原因的占位符。

在《jQuery技术内幕》一书中,把 Deferred 称为“异步队列”,把 Promise 称为“异步队列的只读副本”。

Promises 还提供了一个简单的 API(见下文),用于在结果完成或故障发生时获取通知。

Promises 不是一个新概念,已经在许多语言中被实现。在 JavaScript 中,Promise 概念的实现已经有一段时间了,并且最近变得更加流行,因为我们开始构建更庞大、更复杂的系统,需要协调更多的异步任务。

(注意:虽然 Promise API 标准存在多个提案,但是 Promises/A+ 已经在多个主流框架中被实现,似乎正在成为事实上的标准。无论哪种提案,基本的概念是相同的:1) Promises 作为结果或错误的占位符,2) 提供了一种在结果完成或错误发生时的通知方式。)

典型的 XHR 示例

在 XHR Get 示例中,我们关注的是获取 url 的内容。我们知道 XHR 是一个异步操作,值不会立即可用。这种情况完全符合一个 Promise 的定义。

假设我们有一个 XHR 库,它立即返回一个 Promise 作为内容的占位符,而不是要求我们传入一个回调函数。我们可以重写 Part 1 中的异步函数 thisMightFail,就像这样:

function thisMightFail() {
    // Our XHR library returns a promise placeholder for the
    // content of the url.  The XHR itself will execute later.
    var promise = xhrGet('/result');

    // We can simply return the promise to our caller as if
    // it is the actual value.
    return promise;
}

(需要注意的是,一些流行的 JavaScript 库,包括 @bryanforbesDojo(请参考 great article on Dojo's Deferred) 和 jQuery,使用了 Promises 来实现 XHR 操作)

现在,我们可以返回 Promise 占位符,就像它是真正的结果,并且异步函数 thisMightFail 看起来非常像传统的同步操作和调用-返回操作。

调用栈

在一个没有回调函数的世界里,结果和错误沿着调用栈向上回传。这是一种符合预期和友好的模式。而在一个基于回调函数的世界里,正如我们已经看到的,结果和错误不再遵循这种熟悉的模式,回调函数必须*向下传递,深入调用栈。

通过使用 Promises,我们可以恢复到熟悉的调用-返回编程模型,并移除回调函数。

恢复调用-返回编程模型

为了看看它是如何工作的,让我们从 Part 1 简化版本的同步函数 getTheResult 开始,不使用 try/catch,这样异常将总是沿着调用栈向上传播。

function thisMightFail() {
    //...
    if(badThingsHappened) {
        throw new Error(...);
    }

    return theGoodResult;
}

function getTheResult() {
    // Return the result of thisMightFail, or let the exception
    // propagate.
    return thisMightFail();
}

现在,让我们为上面的代码引入异步的 thisMightFail,它使用了基于 Promise 的 XHR 库。

function thisMightFail() {
    // Our XHR library returns a promise placeholder for the
    // content of the url.  The XHR itself will execute later.
    var promise = xhrGet('/result');

    // We can simply return the promise to our caller as if
    // it is the actual value.
    return promise;
}

function getTheResult() {
    // Return the result of thisMightFail, which will be a Promise
    // representing a future value or failure
    return thisMightFail();
}

使用 Promises 时,getTheResult() 在同步和异步情况下是相同的!并且在这两种情况下,成功结果或失败将沿着调用栈传播到调用者。

移除回调函数

还要注意到的是,没有向调用栈传入回调函数或错误回调函数(或总是执行的回调函数!),也没有污染任何函数的签名。通过使用 Promises,现在我们的函数的外观和行为就像友好的、同步的调用-返回编程模型。

完成了吗?

我们已经使用 Promises 重构了简单的 getTheResult 函数,并且解决了在 Part 1 提出的的两个问题。我们已经:

  1. 恢复了调用-返回编程模型
  2. 移除了参数 callback/errback/alwaysback 的传播

但是,这对 getTheResult 的调用者意味着什么呢?别忘了,我们返回的是一个 Promise,并且,无论成功结果(XHR 的结果)或错误最终将落实到占位符 Promise,到那时,调用者将需要采取一些行动。

对调用者如何?

正如上面所提到的,Promises 提供了一个 API,用于在结果或错误可用时获取通知。例如,在 Promises/A 规范提案中,一个 Promise 含有一个 .then() 方法,而且许多 Promise 库提供了一个 when() 函数来实现同样的目标。

首先,让我们看看在使用基于回调函数的方式时,调用代码可能是什么样子:

// Callback-based getTheResult
getTheResult(
    function(theResult) {
        // theResult will be the XHR reponse content
        resultNode.innerHTML = theResult;
    },
    function(error) {
        // error will be an indication of why the XHR failed, whatever
        // the XHR lib chooses to supply.  For example, it could be
        // an Error.
        errorNode.innerHTML = error.message;
    }
);

现在,让我们看看调用者如何通过 Promises/A API .then() 使用 getTheResult 所返回的 Promise。

// Call promise-based getTheResult and get back a Promise
var promise = getTheResult();

promise.then(
    function(theResult) {
        // theResult will be the XHR reponse content
        resultNode.innerHTML = theResult;
    },
    function(error) {
        // error will be an indication of why the XHR failed, whatever
        // the XHR lib chooses to supply.  For example, it could be
        // an Error.
        errorNode.innerHTML = error.message;
    }
);

或者,更紧凑一些:

getTheResult().then(
    function(theResult) {
        // theResult will be the XHR reponse content
        resultNode.innerHTML = theResult;
    },
    function(error) {
        // error will be an indication of why the XHR failed, whatever
        // the XHR lib chooses to supply.  For example, it could be
        // an Error.
        errorNode.innerHTML = error.message;
    }
);

(Image from The Meta Picture)

这就是 Promises 用来避免使用回调函数的全部内容?我们就这么使用它们?!?

别着急

在 JavaScript 中,通过使用回调函数来实现 Promises,因为没有语言级的结构可以用于处理异步。回调函数是 Promises 必然的实现方式。如果 Javascript 已经提供或者未来可能提供其他的语言结构,那么 Promises 可能会以不同的方式实现。

然而,使用 Promises 解决(Part 1 中)模块之间传递深度回调函数的问题具备几个重要的优点。

首先,我们的函数签名是正常的。我们不再需要为从调用者到 XHR 库的每个函数签名添加 callback 和 errback 参数,并且只有对最终结果感兴趣的调用者才需要与回调函数厮混在一起。

其次,Promise API 标准化了回调函数的传递。所有库可能会把 callbacks 和 errbacks 参数放到函数签名的不同位置。某些库甚至不接受一个 errback 参数。大部分 不接受一个 alwaysback(即“finally”)。我们可以依赖 Promise API,而不是许多有着潜在差异的库 API

第三,Promise 保障了回调函数和错误回调函数被调用的方式和时机,以及如何处理返回值和回调函数抛出的异常。在没有 Promise 的世界里,如果库和函数签名支持许多不同的回调函数,便意味着许多不同的行为:

  1. 你的回调函数允许返回一个值吗?
  2. 如果允许返回会发生什么?
  3. 是否所有库都允许你的回调函数抛出一个异常?如果允许抛出会发生什么?悄悄的把它吞掉吗?
  4. 如果你的回调函数真的抛出一个异常,错误回调是否会被调用?

...等等...

所以,当考虑把 Promises 作为回调函数注册的标准 API 时,也为如何以及何时调用回调函数和处理异常提供了标准的、可预测的行为。

怎么处理 try/catch/finally?

现在,我们已经恢复了调用-返回编程模型,并从函数签名中移除了回调函数,我们还需要一种方式来处理失败的情况。理想情况下,我们希望使用 try/catch/finally,或者是至少在外观和行为上与它相似,并且在面对异步时可以正常工作。

用 Promises 控制异步错误处理 一文中,我们将把拼图的最后一块填到位,看看如何用 Promises 模仿 try/catch/finally。


原文:Simplifying Async with Promises

用 Promises 控制异步错误处理

正如我们在 凌乱的异步编程 一文中看到的,基于回调函数的异步代码很快变得混乱起来,并且大大降低了同步代码部分的质量,从而更容易导致错误。在 用 Promises 简化异步编程 一文中,我们引入了 Promises,看到了它们如何恢复调用-返回编程模型,并且提供一种更清晰方法来管理异步,特别是在处理错误时。

Try/catch/finally

在同步代码中,try/catch/finally 提供了一种简单友好但非常强大的惯用语法来执行任务、处理错误,并且总是确保稍后可以执行清理。

译注:idiom 习语

下面是一个简单的 try/catch/finally 示例,与 Part 1 中的原始 getTheResult() 一模一样:

// Sync
function getTheResult() {

    try {
        return thisMightFail();
    } catch(e) {
        return recoverFromFailure(e);
    } finally {
        alwaysCleanup();
    }

}

正如我们已经看到的那样,即使是试图以基于回调函数的方式来模拟 try/catch 也充满了陷阱。加入 finally 的概念后(即确保执行清理)只会使事情变得更糟。

使用 Promises,我们可以建立一种方法,类似于友好的惯用语法 try/catch/finally,并且没有深度回调结构。

Try/catch

让我们从上面示例的简单版本开始,只使用 try/catch,然后看看如何用 Promises 以同样的方式处理错误。

// Sync
function getTheResult() {

    try {
        return thisMightFail();
    } catch(e) {
        return recoverFromFailure(e);
    }

}

现在,就像在 Part 2 中一样,让我们假设 thisMightFail() 是异步的,并且返回一个 Promise。我们可以用 then() 来模拟 catch

// Async
function thisMightFail() {
    //...
    return promise;
}

function getTheResult() {

    return thisMightFail()
        .then(null, recoverFromFailure);

}

等等,比 try/catch代码甚至更少!这是怎么回事呢?

译注:Waitaminit, Wait a minute

传播成功状态

这个例子引入了两个关于 Promises 行为非常重要的事实。其中第一个是:

如果没有提供 onFulfilled 处理程序,结果值将原封不动地传播到返回的 Promise。

在调用 then() 时,我们没有提供 onFulfilled 处理程序。这意外着 thisMightFail() 返回的成功结果将简单地传播,并返回给调用者。

处理错误

另外一个重要的行为是:

处理程序可以通过返回一个值来产生一个成功结果,也可以通过抛出错误或返回一个被拒的 Promise 来产生一个错误。

我们提供了一个 onRejected 处理程序:recoverFromFailure。这意外着,thisMightFail 产生的任何错误将被传给 recoverFromFailure。就像同步例子中的 catch 语句,recoverFromFailure 可以处理传入的错误并 return 一个成功结果,也可以通过抛出错误或返回一个被拒的 Promise 来产生一个错误。

现在我们有一个完整的异步结构,它的行为就像是同步的模拟,并且也很容易编写。

添加一点语法糖

译注:Syntactic sugar 语法糖

嗯,但我们把 null 作为第一个参数传入是什么意思?在想要使用类似 try/catch 的异步结构的地方,我们为什么必须要键入 null?能不能做的更好点?

虽然遵循 Promises/A+ 规范的 Promise 的主要接口是 then() 方法,但是许多实现都(用很少的代码)以 then() 为基础构建和添加了便捷方法。例如,when.js Promises 提供了一个 otherwise() 方法,允许我们更直观、更紧凑地编写这个例子:

// Async: Using when.js promise.otherwise();
function getTheResult() {

    return thisMightFail()
        .otherwise(recoverFromFailure);

}

现在我们有了阅读起来很棒的异步结构!

添加 finally

让我们把 finally 添加到这种混合结构中,看看如何用 Promises 使异步操作达到同样的结果。

// Sync
function getTheResult() {

    try {
        return thisMightFail();
    } catch(e) {
        return recoverFromFailure(e);
    } finally {
        alwaysCleanup();
    }

}

首先让我们注意到的是,这个看似简单的 finally 块包含了一些有趣的东西:

  1. 总是在 thisMightFail 和/或 recoverFromFailure 之后执行
  2. 没有机会访问 thisMightFail 返回的值或抛出的异常 e,也没有机会访问 recoverFromFailure 返回的值^1
  3. 在这种情况下,不能把 recoverFromFailure 抛出的异常转换回成功结果^2
  4. 如果 alwaysCleanup 抛出一个异常,可以把成功结果(由 thisMightFailrecoverFromFailure)转换为一个失败。
  5. 可以用一个新异常替换掉 recoverFromFailure 抛出的异常。也就是说,如果 recoverFromFailurealwaysCleanup 都抛出了异常,alwaysCleanup 抛出的异常将传播到调用者,而由 recoverFromFailure 抛出的却不会

这似乎相当复杂。让我们回到异步的 getTheResult,看看如何用 Promises 实现同样的特性。

总是会执行

首先,让我们用 then() 确保 alwaysCleanup 在所有情况下都将会执行(为了简洁些,我们会保留 when.js 的 otherwise):

// Async
function getTheResult() {

    return thisMightFail()
        .otherwise(recoverFromFailure);
        .then(alwaysCleanup, alwaysCleanup);
}

这似乎很简单!现在,alwaysCleanup在所有情况下都将会被执行:

  1. 如果 thisMightFail 成功了,
  2. 如果 thisMightFail 失败了,而 recoverFromFailure 成功了,
  3. 如果 thisMightFailrecoverFromFailure 都失败了。

但等等,虽然我们已经确保了 alwaysCleanup 将总是会执行,但是也侵犯了其他两项特性:alwaysCleanup 收到成功结果或错误,因此有机会访问其中之一,或者两个,并且可以通过返回一个成功值把一个错误转换为一个成功结果。

不要访问结果/错误

我们可以引入一个包装函数,以防把结果或错误传给 alwaysCleanup

// Async
function alwaysCleanupWrapper(resultOrError) {
    // don't pass resultOrError through
    return alwaysCleanup();
}

function getTheResult() {

    return thisMightFail()
        .otherwise(recoverFromFailure);
        .then(alwaysCleanupWrapper, alwaysCleanupWrapper);
}

现在,我们已经实现了曾丢掉的两项特性中的一项:alwaysCleanup 不再可以访问结果或错误。不幸的是,我们不得不添加一些感觉没必要的代码。不过,让我们继续探索,看看是否可以实现剩下的特性。

不要改变结果

虽然 alwaysCleanupWrapper 阻止了 alwaysCleanup 访问结果或错误,但是它仍然允许 alwaysCleanup 把一个错误状态转换一个成功结果。例如,如果 recoverFromFailure 产生一个错误,它将被传给 alwaysCleanupWrapper,然后调用 alwaysCleanup。如果 alwaysCleanup 成功返回,返回值将传播到调用者,从而消除了之前的错误。

这与同步的 finally 之句的行为并不匹配,所以让我们重构它:

// Async
function alwaysCleanupOnSuccess(result) {
    // don't pass result through, *and ignore* the return value
    // of alwaysCleanup.  Instead, return original result to propagate it.
    alwaysCleanup();
    return result;
}

function alwaysCleanupOnFailure(error) {
    // don't pass result through, *and ignore* the result
    // of alwaysCleanup.  Instead, rethrow error to propagate the failure.
    alwaysCleanup();
    throw error;
}

function getTheResult() {

    return thisMightFail()
        .otherwise(recoverFromFailure);
        .then(alwaysCleanupOnSuccess, alwaysCleanupOnFailure);

}

在成功和失败状态下,我们已经保存了结果:alwaysCleanupOnSuccess 将执行 alwaysCleanup 但不允许它改变最终结果,alwaysCleanupOnFailure 也将执行 alwaysCleanup 并总是抛出原始的错误,从而传播错误,即使 alwaysCleanup 成功返回。

剩下的两项特性

看看上面的重构,我们还可以发现它涵盖了剩下的两项特性:

alwaysCleanupOnSuccess 中,如果 alwaysCleanup 抛出错误,return result 将永远不会被执行到 ,并且这个新错误将传播到调用者,从而把一个成功结果转换为一个失败结果。

alwaysCleanupOnFailure 中,如果 alwaysCleanup 抛出错误,throw error 将永远不会被执行到,并且这个由 alwaysCleanup 抛出的错误将传播到调用者,从而代之以一个新错误。

圆满了吗?

通过最新重构的代码,我们已经创建了这样一个异步结构,它的行为就像友好的同步 try/catch/finally 的模拟。

更多语法糖

一些 Promise 提供了类似 finally 行为的抽象。例如,when.js Promises 提供了一个 ensure() 方法,它具备我们前面实现的所有特性,但是更简洁:

// Async: Using when.js promise.ensure();
function getTheResult() {

    return thisMightFail()
        .otherwise(recoverFromFailure)
        .ensure(alwaysCleanup);

}

小结

我们一开始的目标是为异步操作寻找一种方式来模拟有用且好用的同步 try/catch/finally 的行为。下面是我们开始时的简单同步代码:

// Sync
function getTheResult() {

    try {
        return thisMightFail();
    } catch(e) {
        return recoverFromFailure(e);
    } finally {
        alwaysCleanup();
    }

}

然后,下面是最终的异步模拟,结构紧凑,而且易于阅读:

// Async
function getTheResult() {

    return thisMightFail()
        .otherwise(recoverFromFailure)
        .ensure(alwaysCleanup);

}

Try/finally

另一种常见的结构是 try/finally。在执行清理代码时它很有用,但是在这种没有恢复路径(catch)的情况下,它总是允许异常传播。例如:

// Sync
function getTheResult() {

    try {
        return thisMightFail();
    } finally {
        alwaysCleanup();
    }

}

现在,我们已经 Promises 完整地模拟了 try/catch/finally,模拟 try/finally 就小菜一碟了。就像上面简单地删除掉 catch 一样,我们可以在 Promise 版本中删去 otherwise()

// Async
function getTheResult() {

    return thisMightFail()
        .ensure(alwaysCleanup);

}

我们一直试图实现的制约(特性)仍然保留了下来——这个异步结构的行为类似于对应的同步 try/finally

应用异步结构

让我们来比较一下如何使用 getTheResult 的同步和异步版本。假设已经有下面两个用于展示结果和错误的函数。为了简单起见,我们还假设 showResult 可能会失败,而 showError 不会失败。

// Assume showResult might fail
function showResult(result) { /* Format and show the result */ }

// Assume showError will never fail
function showError(error) { /* Show the error, warn the user, etc. */ }

同步版本

首先是同步版本,我们可能会像这样使用:

// Sync
try {
    showResult(getTheResult());
} catch(e) {
    showError(e);
}

正如我们预料的,它相当简单。如果我们成功地得到结果,然后就展示结果。如果得到失败的结果(通过抛出一个异常),就展示错误。

同样需要重点注意的是,如果 showResult 失败了,将展示一个错误。这是同步异常的一个重要标志。我们写下的 catch 单句将处理来自 getTheResultshowResult 的错误。这种错误传播是自动的,不需要为之增加额外的代码。

异步版本

现在,让我们看看如何用异步版本完成同样的目标:

// Async
getTheResult().then(showResult)
    .otherwise(showError);

这里的功能是类似的,而且会惊讶于它看起来居然比同步版本更简单。我们得到了结果,或者更确切地说,是结果的一个 Promise,并且当真正的结果实现时(记住,一切都是异步的),我们将展示它。如果得到了失败的结果(通过拒绝 Promise),我们将展示错误。

由于 Promises 像传播异常一样传播错误,因此如果 showResult 失败了,我们也会展示一个错误。因此,这种自动的行为与同步版本是也是等价的:我们编写的 otherwise 单句调用将处理来自 getTheResultshowResult 的错误。

另一件需要注意的事情是,同样的 showResultshowError 函数也可以使用在同步版本中。我们不需要为了能在 Promises 中运行而人工改造特定函数的签名——与我们在任意地方编写的函数完全一样。

整合

我们已经重构了 getTheResult 的代码,使之以 Promises 来模拟 try/catch/finally,也使调用代码用返回的 Promise 来处理与同步版本相同的错误。让我们完整地看看代码基于 Promise 的异步版本:

// Using getTheResult()
getTheResult().then(showResult)
    .otherwise(showError);

function getTheResult() {
    return thisMightFail()
        .otherwise(recoverFromFailure)
        .ensure(alwaysCleanup);
}

function thisMightFail() {
    // Using the proposed Promises/A+ style API for promise creation
    return makePromise(function(resolve, reject) {
        var result, error;

        // Do work, then:

        if(error) {
            reject(error);
        } else {
            resolve(result);
        }
    });
}

结语

当然同步执行和异步执行之间总是有所差异,但是我们可以通过使用 Promises 缩小这种差异。同步版本和我们构建的基于 Promise 的版本不仅看起非常相似,而且它们的行为也相似。它们有着相似的固定格式。我们可以用相似的方式揣测它们。我们甚至能用相似的方式重构测试它们。

提供友好和可预测的错误处理模式,以及可组合的调用-返回语法,是 Promises 两个强大的特性,但是这仅仅是开始。基于 Promises 的异步结构,可以轻松地将许多其他功能完全异步化:高级功能(例如 map、reduce/fold)、并行和顺序的执行任务等等。


  1. 你可能会奇怪于为什么我们需要这个特性。在这篇文章中,我们选择尝试尽可能近似地模拟 finally。同步 finally 的意图是引发某种副作用,例如关闭一个文件或数据库连接,并不是执行一个函数来转换结果或错误。而且,向 alwaysCleanup 传入一个可能是结果或错误的参数,不告诉 alwaysCleanup 正在接受的参数什么类型,可能是一个危害源。事实上,finally 没有”参数“,不像 catch,这意外着开发人员需要承担授权访问结果或错误的烦扰,通常的做法是在进入 finally 之前把结果或错误存储到一个局部变量中。这种做法也可以应用在基于 Promise 的方式中。

  2. 需要注意的是,finally可以通过明确地返回一个值消除异常。但是在这种情况下,我们没有明确地返回任何东西。我从来没有在现实中见过需要用这种方式来消除异常的情况。


原文:Mastering Async Error Handling with Promises