一、DOOM游戏的高手玩法
这个画质一般,场景粗糙的游戏,为什么能风行三十年前 而不衰败?其原因缘于如前所述的一个情节,那就是游戏在获得成功后,游戏的设计者公布了游戏设计的全部细节,甚至后来连源代码也一起公开。这就给软件设计者有了深度介入的机会。
最初的游戏分为两部分,一部分叫做程序,即exe的部分;另一部分叫做数据,即wad的部分。对于玩家来说,只要运行exe,程序就会自动打开或查找相应的wad部分,或者给出一个列表,让用户来选择使用哪个wad。这样的设计无疑是一种上佳的设计思路。游戏的设计者可以分为各自独立的两部分,一部分维护程序,一部分专注于游戏场景的设计,无论是修改了旧场景的BUG,还是设计了新场景,只要更新wad,程序就不用做任何修改就可以直接使用,更重要的是wad的个数是无限的,增加再多,只要在玩家玩的时候,调入合适的wad就可以使用,不受内存、速度的限制。
当更多高手介入以后,上面的分类虽然没有发生太大的变化,但分组肯定是进行了详化。
| 命令 | 关注点 | 描述 | 实例 |
| 程序设计 | 原有程序的维护、升级 | 修改BUG、增加功能。 | Skulltag、GZDoom |
| 制作全新的程序 | 替代原有程序,使之具有更多的功能、更快的速度。 | 这类可统称为port | |
| 制作新的渲染效果 | 不关注程序,但制作更漂亮的绘画效果,使原来的程序看上去更完美。 | / | |
| 编写能设计WAD的程序 | DoomBuilder、SLANG | ||
| 对脚本进行编译 | ACC | ||
| WAD设计 | 设计标准WAD | 原公司设计和维护自有的WAD文件。 | doom1.wad,doom2.wad |
| 增加自己的WAD文件 | 用户可以根据需要,设计自己的场景。比如把自己的村子设计成游戏。 | 目前已有约4万多个。 | |
| 在原有WAD上增加功能 | 比如增加一些新的功能和特效,增加新武器、新地设计格式。 | 比如支持了hexen | |
| 改变原有设计方式 | 如为了让游戏更灵活,增加新的运行方式。如支持脚本。 | 增加了AScript | |
| 导航 | 制作介绍文字 | 通过网站提供上述内容的介绍、下载。 | www.doomworld.com |
| 提供交流 | 让各级玩家,甚至是设计者可以进行实时交流,促进共同发展。 | doomwiki.org | |
| 制作游戏玩法 | 介绍游戏的玩法教程(比如本网站) | / |
二、认识wad文件
一个游戏素材会包括大量信息,比如游戏角色、武器、地图、地图里的怪物、山、海、楼、桌椅板凳、门、树,还有音乐。这些素材如果丢失,游戏程序检测不出来,但在玩的时候有时会出现无法预测的异常。为了避免这种问题出现,游戏的设计者就把所有需要的东西全部汇集到一个wad文件中。这意味着只要wad文件在,游戏就能正常使用。
试想你要设计一个房子,通常是在地上划出一条一条的线(Line)。这些线或平行、或相连、相交于交点(Vetex),最终形成一个封闭的区域(Map),内部又会隔成一个一个小区域(Sector)。然后在这个基础上向上盖墙。到了共同的高度后封顶。如果这个房子设计的更复杂一些,那有些房间往地下还可以挖出地下室,或整个房间采用下沉式设计,每一面墙的正反面(Side)还可以分别设计,这个整个房子已没有了公共的地板和天花板,而是不同的小房间(Sector)都有各自的天花板(Celing)和地板(Floor)。在房间之间,需要设计一些门(Door)。
用工具打开一个wad文件,会看到里边会至少有如下的项。
| 项 | 描述 |
| Vetex | 点,就是屏幕上每一条线段的头端。一个单独的点是没有任何意义的,但2个点就可以构成一条线。有些地方会有多条线相关,所以设置点可以将其统一起来。 |
| Line | 线。这是游戏中最核心的东西。一根线段由2个Vetex组成,并且有两个Side。虽然名字叫Line,但很显然这不是数学意义上的线,首先这根线有两个端点,所以实际上这看上去更象是一根“线段”。其实,这也不是一根线段,而是一个有边的面,这个面的高度是无限的,宽度是有限的(就是两个顶点的距离),当以上帝视角从正方往下看的时候,这个面就退化成了线段。 |
| Side | 边。这是线的附属物,在现实中并不存在,只是为了详化Line而创造的概念。一个线实际上是高度无限,宽度恒定的面,这个面还可以分为正面和反面,所以一个Side就是Line其中的一个面,或正面,或反面。每个边都可以定义3张图片。 |
| Sector |
区域。一组首尾相连,并且内部没有与边上点相连的线段,那么这就是一个Sector。比如“口”字型的4根Line,组成了一个Sector,如果从中间用一条Line分开,变成了“日”字,那么原有的Sector就不复存在,进而变成了上下两个Sector,因为大框内部有了与边上相连的线段了。如果是“回”字形内,因为其内部没有与边上相连的线段,所以这是大小两个Secotr,但外边的Sector不包括内部的Sector,而是一个环形的Sector。 一个Sector有个顶部,叫ceiling(天花板),还有一个Floor(地板)。还有一个Tag(标签)。 很显然,Sector不是有人刻意创造的概念,而是不断画线,这些线每组成一个封闭的区域,就自动多出一个Sector。 |
| Thing | 物品。包括怪物、树、灯等装饰物。以及这些物品的衍生物,比如大部分怪物会发射武器(如火球),这些火球在碰到线(Line)、物品(Thing)或超过指定距离或指定时间后就会自动消失。 |
有了上面的概念,大体就可以构成游戏的关键因素了。玩家一开始,就处于地图(Map)的某一个位置。在他面前有大量的由线Line隔开的路,由于每条Line上有边(Side),每个边单独定义,所以玩家看到的不是线本身,而是边上定义的图片(就是玩家看到的墙)。刚才说了,这些线(Line)首位相连,又形成了个区域(Sector),后得有天花板和地板,所以这个时候抬头看就是天花板,低头看就是地板,面前无论向哪看,都是一面一面的墙中朝向自己的那个边(Side)。这个区域Sector中,除了玩家,还有物品(Thing)。
(有空了再续。。。。。)