基于文本的 VR:探索 MUSHes 的开创性世界

是否有可能仅通过文字来创造一个虚拟现实(VR)体验呢? MUSH 的爱好者们认为这是完全可行的!MUSH 游戏,一个已经存在了三十年的在线平台,允许玩家们通过合作的方式,纯粹依靠文字来构建在线世界,让他们的想象力得以无限地驰骋。

让我们一起来探索一下 MUSH 的奥妙吧!

MUD 与 MUSH 的起源

在图形界面主导互联网,带宽还很有限,调制解调器发出刺耳噪音的时代之前,人们玩的是一种名为“多用户地下城”(MUD)的纯文字在线游戏。

MUD 是一种网络多人游戏,通常以角色扮演游戏(RPG)风格的奇幻战斗为核心。MUD 后来演变成了“大型多人在线角色扮演游戏”(MMORPG),比如《网络创世纪》(Ultima Online)和《魔兽世界》(World of Warcraft)。

但与这些游戏不同的是,MUD 完全依赖文字来描述玩家、敌人、动作以及所处环境。

在 20 世纪 70 年代末期,文字冒险游戏《Zork》(当时被称为“地下城”)的早期大型机版本的粉丝们希望创建一个多人可以通过网络同时玩的游戏。 于是,第一个 MUD 于 1978 年诞生,并在 埃塞克斯大学的 DEC PDP-10 大型机上运行。

随着 MUD 在 20 世纪 80 年代越来越受欢迎,游戏风格和代码库(托管 MUD 的服务器软件)也出现了多种变体。 很快,一些 MUD 逐渐偏离了战斗主题,演变成了纯粹的聊天和实验性的社交平台。

1989 年,Jim Aspnes 创建了第一个以社交为中心的 MUD,名为 TinyMUD。 次年,开发者 Larry Foard 基于 TinyMUD 的代码,创建了自己的服务器。 他添加了一种世界编程语言,并将其命名为“TinyMUSH”,至此,MUSH 诞生了。

“MUSH”这个词本身就是一个文字游戏,除了是“MUD”的谐音外,并没有固定的含义。 后来有人创造了 反向首字母缩略词“Multi-User Shared Hallucination”(多用户共享幻觉),但这个解释并没有被广泛接受。

MUSH 的基本概念

大约 1995 年的 MUSH。

与 MUD 一样,MUSH 完全基于文本。 然而,MUSH 的一个显著特点是,玩家可以在游戏环境中进行扩展和编程。 在此之前,MUD 的房间结构要么使用 C 语言等编译语言硬编码,要么通过编辑配置文件并重启服务器来完成。

在 MUSH 中,玩家可以建造房间并将它们连接在一起。他们可以通过使用游戏中的命令(比如 “@dig” 来建造房间)来实现。 另一种方法是使用一种名为 “MUSHcode” 的内部脚本语言进行编程。这种语言在游戏环境中实时运行。

从结构上看,MUSH 分为房间、物体、玩家和出口。 房间是拥有自身描述的基本地点。 物体可以在房间和其他物体内移动。 玩家是指与游戏互动的人(本质上是活生生的人物)。 出口是连接所有元素的链接。

当你第一次连接到 MUSH 时,你会看到环境的描述以及该位置的物体或玩家列表。 你可以使用内置的命令(例如 “look” 或 “say”)或者其他玩家编写的自定义命令来进行互动。

为什么今天仍然有人玩 MUSH?

运行 MUSH 的管理员被称为向导。 每个 MUSH 服务器(或游戏)都是你想象的虚拟游乐场。 它们通常有特定的主题,比如变形金刚、托尔金的小说或者吸血鬼题材。 一些玩家在场景中扮演角色,过着他们所选择的幻想生活。

其他 MUSH 游戏则更加开放和具有实验性。 在社交/编码 MUSH 中,你可以自由地构建你想要的任何东西。 社区非常重视创造力和良好的对话。

我喜欢玩 MUSH(这个词也被用作动词),因为它代表着一种语言创造性表达的极致形式。 这是一个可编程的纯文字环境,我可以在其中构建任何我想象的地方——我的想象力就是渲染引擎,就像我读书时一样。

这也是一种深入的社交体验。 我第一次接触 MUSH 是在 1994 年秋天。 那时,我结交了一些至今仍然是好朋友的朋友。 我们几乎每天都在 CaveMUSH 上相互问候。 这是我从 2000 年 3 月开始运营的 MUSH。 现在,我们使用它的方式和大家使用 Slack 或 Discord 的方式类似。

欢迎你来 CaveMUSH 参观体验一下! 让我们一起看看如何开始。

如何使用 Web 客户端访问 MUSH

MUSH 传统上使用 Telnet 协议来进行通信。 你可以使用你选择的 Telnet 客户端连接到几乎所有的 MUSH。 如果你比较有经验,可以直接访问我的 CaveMUSH:cavemush.com,端口 6116。

然而,对于大多数人来说,寻找并设置一个合适的 Telnet 客户端可能是一项令人望而却步的任务。 Telnet 通常被 SSH 替代,因此很难找到一个能支持良好 MUSH 体验的客户端。

所以,我们会使用一个名为 MudPortal 的便捷 Telnet 客户端来连接 CaveMUSH。它适用于任何网络浏览器,包括 Safari、Firefox、Edge 或 Chrome。

首先,通过 MudPortal 自动连接到 CaveMUSH;你将看到类似这样的屏幕。

在使用 MUSH 之前,你必须创建一个玩家账户。 大多数 MUSH 都是完全免费的,你可以匿名地玩,没有任何附加条件——这与现在的很多游戏形成了鲜明的对比。

想想你希望你的用户名是什么。 在 CaveMUSH 上,人们倾向于选择简短而异想天开的名字,比如 Dream 或 Mad(我的名字是 RedWolf)。

确定名称后,点击页面底部附近的“输入命令”。

输入以下内容,其中 [username] 是你想要的名字,[password] 是你选择的密码,然后按 Enter:

create [username] [password]

请务必记下你的密码,以免忘记。文本框是今后你与 MUSH 互动的方式。你只需输入命令,然后按 Enter。

接下来,一堆文字会在屏幕上快速滚动。最新的输出显示在屏幕底部,而较旧的信息会向上滚动并离开屏幕。

首先,你会看到一个名为 “Old Well” 的房间的灰色文字描述。

要查看 MUSH 的颜色,请输入 @set me=ansi,然后按 Enter。你会看到消息 “Set”,确认命令成功。

现在,你可以输入 look(或快捷键 l)并按回车键来查看房间。

就像多萝西在奥兹国睁开眼睛一样,MUSH 现在变得色彩斑斓了。 恭喜你,你已经成功进入 MUSH 的世界!

在基本的房间布局中,你会在顶部看到房间名称、房间描述、房间内容列表(房间中的所有对象和玩家),以及通往其他房间的出口列表。

下次连接到 MUSH 时,使用你刚才创建的用户名和密码,输入以下内容:

connect [username] [password]

这样,你在 MUSH 上所做或构建的所有内容都将保存到你的帐户中。

MUSH 世界的第一步

现在你已经看到了你的第一个房间,让我们试着说声 “hello” 吧。 在文本框中输入 say hello,然后按 Enter。

你会看到屏幕上显示了结果。如果房间里有活跃的玩家,他们可能会回复你。通常,只有同一房间的玩家才能看到你 “say” 命令的结果。

不过,你也可以在 MUSH 的公共频道中聊天。要这样做,请输入以下命令,其中 [message] 是你想要说的话:

pub [message]

每个房间的玩家都会看到这条消息。

你还可以使用 look 命令来查看房间中对象的描述。 要这样做,请输入以下命令:

look [object name]

要在 MUSH 中移动,请使用出口。在 CaveMUSH 上,几乎每个出口都在其名称后面的尖括号 () 中包含了快捷方式。当你输入快捷方式并按 Enter 时,你将通过出口移动到另一个位置。

要穿过 “hole (h)” 出口并进入另一个房间,请输入 “h” 并按 Enter。

你进入了洞穴 Nexus (#3),这是整个 MUSH 的中心枢纽。

从这里开始,你可以自由地探索 MUSH,与其他人交谈(输入 WHO 查看在线玩家列表),并使用出口探索其他人所建造的世界。 不要忘记使用 pub 命令在公共频道上向 RedWolf 说 “hello”。

CaveMUSH 有来自世界各地的玩家。 虽然他们可能不会同时在线,但他们倾向于保持 24 小时在线,这样他们就可以随时查看自己可能错过的消息。

以下是一些其他你可以使用的基本命令:

输入 i 查看你的库存。
输入 get [object] 来拾取你所在位置的物品(如果物品未被锁定)。
输入 drop [object] 来放下你所在位置的物品(如果物品未被锁定)。

常用 MUSH 命令备忘单

我们无法在这里涵盖所有的 MUSH 命令,但我们已经整理了一份最重要的命令列表。同样,要发送以下任何命令,只需输入它们并按 Enter:

查看颜色:@set me=ansi。 创建角色后,只需执行一次。
访问帮助菜单:help 或 help [subject]。 你可以请求几乎任何命令或主题的帮助。
查看周围环境:look
查看特定的物体或玩家:look [object]
拾取一个未锁定的物体:get [object]
放下一个未锁定的物体:drop [object]
查看你携带的物品:i 或 inventory
查看在线玩家列表:WHO
与同一房间的人交谈:say 或用双引号 (“) 开头,后面跟着要说的话。
向其他玩家发送私信:page [player]=[message]
如果你遇到困难,传送回家:home。(在 CaveMUSH 上,你还可以输入 @home 来传送回主枢纽房间 Nexus。)
传送到特定的房间或物体:@tel [number]。 目的地必须归你所有或者设置为 JUMP_OK。
设置你的玩家描述:@desc me=[描述]。这是其他人在查看你时所看到的内容。
穿过出口:你可以输入完整的出口名称或其快捷方式(位于名称后面的尖括号 () 中)。
断开连接:输入 QUIT 来优雅地退出 MUSH。

一些 MUSH 构建技巧

MUSH 上的每个对象、房间、玩家或出口都有一个唯一的数据库参考号,称为 “dbref”。 这允许你从 MUSH 上的任何位置引用任何内容——即使你不在同一个房间。 在你拥有的任何对象的名称之后,你会看到它的编号。

你在构建时会使用此信息。 你建造的每个房间或物品需要花费 10 个游戏货币,而删除它们需要花费 1 个。 这些费用旨在防止过度建设。 在 90 年代,计算机内存有限,MUSH 实际上会占用主机的资源。 现在,如果你需要更多的资金来建造,只需在公共频道上询问即可。

同样,关于如何在 MUSH 中进行构建的完整指南超出了本文的范围。 请记住,你也可以输入 help [subject] 来获取关于每个命令如何运作的更详细说明。

输入以下任何基本命令,然后按 Enter:

创建一个对象:@create [object name]。 每个对象需要花费 10 个宝石来建造。
创建一个房间:@dig [room name]。 记下 MUSH 给你的房间编号 (dbref),这样你就可以去那里了。 最初,它将被取消链接,并漂浮在一个未知的地方。每个房间需要花费 10 个宝石。
访问你刚刚创建的房间:@tel [room number],使用你在建造后记下的数字。
描述一个房间:@desc here=[描述]。在 CaveMUSH 中,我们使用 @ldesc=[描述],这与我们自定义的房间格式相匹配。
从当前位置打开通往房间的单向出口:@open 出口名称 ;en=[room number]。 你必须拥有你要去的房间,或者房间必须设置为 LINK_OK。 出口稍微复杂一些,所以请输入 help @open 来获取更多详细信息。
设置对象的描述:@desc [object]=[描述]。 这是其他人在查看你的对象时所看到的内容。
了解标志:help flags。 这些标志控制玩家如何与物体、房间、出口以及彼此互动。
设置标志:@set。 输入 help @set 获取更多信息。
了解如何锁定对象和出口:help locking。 如果你不希望其他人拿走你的物品或使用你的出口,锁定功能可以防止这种情况发生。

关于 MUSH 编程的简述

在 MUSH 上进行编程是可选的。 很多人都会避开它,这也是有充分理由的。 现代的 MUSHcode 编程在语法上有点像 LISP。 熟悉 C 或 JavaScript 等编程语言的人通常会觉得 MUSHcode 难以使用。 学习起来可能会让人望而生畏,阅读起来会让人头疼,但一旦你适应了它,它就非常适合实时环境。

MUSHcode 使用嵌套函数来计算列表。 玩家通常将代码存储在对象的自定义属性中,并使用自定义命令来触发它。 代码也可以被嵌入到描述中,以便在玩家查看对象时生成动态结果。

为了让你了解它的样子,下面一行简单的代码使用函数来生成当前房间中每个对象的列表并显示它们的名称。 @emit 命令会对代码进行计算,并将结果显示给房间里的每个人。

代码如下所示:

@emit [iter([lcon(here)],[name(##)]%r)]

如果你有兴趣了解更多关于编程的信息,请输入 help functions、help user commands 和 help &。

要查看函数式 MUSHcode 程序的一个更大型示例,只需在登录 CaveMUSH 后输入检查 #9802 即可。 你会看到一个对象的代码,这个对象允许两个人玩西洋跳棋游戏。

更多 MUSH 资源

Mud Connector 目前在网上列出了近 100 个 MUSH,供大家探索。 每个列表都有一个链接,因此你可以像上面那样通过网络浏览器连接和玩游戏。 你在这里学到的大多数命令都可以在其他 MUSH 中使用。

但是,当你访问其他服务器时,请记住,每个系统都是一个独立运营的游乐场,拥有自己的文化和习俗。 运行它的是它的向导(管理员)。 所以,在你安顿下来之前,把自己想象成一个外国游客——保持开放的心态,并且永远友善地对待当地人。

祝你玩 MUSH 愉快!