M.U.G.E.N的主程序官方版本只有dos、win、1.0、1.1beta,其余版本皆为民间改造或编造

3. 创建一个基本场景

在这一章中,我们为了获得一份马里奥场景的框架,要开始对stage0进行修改。我会对像如何用FF将素材放入Sff文件之类的基本步骤进行解释,另外还有像如何在Def文件中写代码来生成场景装饰或多层背景之类的,总之本章教程就和大部分人刚开始制作场景时的步骤一样。

- 假设stage0还没有被放入mugen,那么我们从将stage0安装到mugen中开始。(完整版或干净版都OK;干净版在之后会另外标明)
- 用记事本打开stage0的Def文件,将Debugbg参数调为1,保存文件。
- 启动FF,点击“图形 -> 打开”来打开stage0的Sff文件。
blob.png
- 浏览找到正确的Sff文件路径,然后载入。
blob.png

- 在FF界面中,你可以看到素材已成功载入。接下来,我会对在FF中常见的图形功能区进行说明,使你可以对素材进行改动。

以下是我们在场景制作过程中会用到的重要功能,其他的功能请在平时使用FF时自行摸索。

blob.png


1. 这个按键定义了你当前正在处理的文件对象。以现在来说,就是图形(Sff文件)。还有其他和Air、Snd、Cns以及Def文件相连的按键。不过,我们暂时用不上。
2. 素材显示区域。中心的十字准心为0,0起始坐标,你可以对其进行移动已获得更好的视图效果,你还可以直接在这里移动素材图片来改变它的坐标位置。
3. 这个按键可以让你在Sff内添加图片。新加入的图片会出现在当前图片之后。
4. 这个按键允许你对当前的图片用另一张图进行替换。
5. 点击这个按键可以将目标图片进行保存,通常用来备份。
6. 点击这个按键可以对当前的Sff文件进度进行保存。
7. 这个按键允许你对图片进行复制。在场景制作中不太会用到,大多用于人物中。
8. 和 9. 分别允许你删除单张图片和图片组

10. 这一动态条允许你对所有素材进行浏览,在动态条下方你可以看见自己所处的图片进度位置和Sff文件中的图片总量。
11. 这三块文本框分别对应当前图片的说明、组别和编号信息。你可以将图片分为任意组别和编号,但千万注意别出现两个拥有相同组别与编号的图片。传统方法是先把所有类似的图片放到一个组中,然后把图片从0到其图片数量进行编号排列。举个例子来说,从图片Mario006到Mario009都是碧奇公主的图片,我们可以将这些图片放到3号图组中,然后定义图片编号为0到3。在教程中,类似 “图片123,45” 的信息便是指第123组的第45张图。
12. 这两块文本框定义了当前图片的XY轴位置信息,你可以与准心进行比较,然后在2号区域调整图片位置。
13. 你可以在这一块看到图片的尺寸。这个信息会在你进行校准计算时派上用场。
14. 这两块放大镜图标允许你对2号区域进行放大与缩小,使用后可获得更详细的图片视图信息。

现在,我们将要开始制作新场景,首先要对原场景的Sff和Def文件进行修改。

   3.1 – 设置地面

- 浏览至Sff的第二张图(图片0,1), 然后点击“更改”按键(说明图中的“4”按键)。
blob.png

- 找到场景地板用图Mario000.pcx,找到后点击“打开”。
blob.png

- 你会看见替换上去的地板图片0,1出现在0,0坐标处。 个人推荐在Sff中对图片进行整理,至少还可以调整坐标,比到Def里去调整更方便。在FF左下角,你可以看到图片的尺寸:768X37 (单位:像素)。接下来要做的便是将图片的横向中点定位到坐标准心上,这样过会儿就可以直接在Def里使用初始坐标了。计算十分简单,只需要把图片的宽除以2即可获得中点:768/2 = 384。然后,我们将图片的X轴设定为384就能将它定位到中间。你可以直接在2号区域用鼠标进行移动,也可以在X轴框中输入数值实现移动。后一个步骤完成后,你在2号区域并不能马上看见效果。别担心,只是出了点小Bug,用查看条(10号动态条)拖到图片0,0,然后再拖回图片0,1。你就可以看到已定位好的图片了。
blob.png
- 点击“保存”按键(图解中的6号按键),然后启动Mugen来看看当前的效果:
blob.png

- 如你所见,问题还很多。底部区域出现了洋红色(DebugBG效果),所以我们必须对地板的Y轴进行调整。人物也没有恰当地站在地面上,当地板位置确定后,也得对其进行更改。因此,我们得打开Def文件来改写一些数值。

现在,我们来处理地板图片。在场景Def中,搜索以下代码片段。

代码:

[BG 1]
type  = normal
spriteno = 0, 1
start = 0, 185
delta = 1, 1
mask = 0
velocity = 0, 0
tile = 1, 0
tilespacing = 0, 0

稍稍分析下这些代码
- type = normal 是某常用代码,之后再进行解释。
- spriteno 是图片编号:组别和图号。0,1就代表地板图片。
- start 定义了图片在战斗开始时的位置。第一个值是横坐标X轴(0),第二个值则是纵坐标Y轴(185)
- delta 允许你通过给场景装饰设置不同的移动速度来给场景增加立体感,有些装饰离战斗地点比较近,而有些则非常远。就地板来说,Delta在低分场景中应该设定为1,1,在高分场景中则为2,2。假如你不这么设定,人物就会在地板上呈滑行状移动,极不协调。场景中的装饰越远,则Delta值越低,这样才显得自然且真实。
- Velocity 允许你对场景装饰进行动态位移。

- Tile tilespacing 允许你对图片进行平铺。后两个参数的详细说明会在之后才涉及到,目前先把Tile参数设置为0,0。

代码:

tile = 0, 0


-
现在,我们来调整地板的纵坐标。要调好坐标,你只需要不断改变start 参数的第二个值,直到找到合适的值即可。在多次尝试后,203被证明是最完美的值。低于203,会有洋红色显示,高于203,则会有一部分图片内容丢失在镜头外。因此,将代码如下改写。

代码:

start = 0, 203

- 不过,就算地板已被妥当放置了,人物现在依然飘在空中:

blob.png

- 就像第二章中提到那样,与人物所站高度对应的参数是[StageInfo]中的zoffset。用数值测试直到你找到认为比较适合的值。个人将该值设定为204,不过 205也可以。

代码:

zoffset = 204

 

- 我还把影子强度改为了0,因为这个场景中不会出现影子。我们会获得以下图示效果:
blob.png


   3.2 – 设置天空

我们会重复以上的步骤将场景的背景贴图换为天空。这次,我不会每件事都解释,不明白的话请参考地板制作步骤。
- 在FF里,拉至图片0,0。
- 点击“更改”按键。
- 浏览找到图片mario001.pcx (天空素材),然后点击“打开”。
- 图片被定位于坐标0,25处,我们要将图重新以横向中点进行定位。这张图片的宽也是768像素,中点为384。为了方便,我将纵坐标的值设定为0。如果一切都处置妥当,那么你会在FF里看到下图效果:
blob.png

- 保存Sff文件并打开MUGEN,你就能看见以下画面:
blob.png

虽然现在场景看上去即完整又协调,但还没有达到我们的预期效果。你可以看出来现在界面的顶端与图片0纵坐标是对应的,我们现在需要重新设定天空的纵坐标以便能充分利用整张图。
再次打开Def文件,找到与天空图片0,0相关联的代码:

代码:

[BG 0]
type  = normal
spriteno = 0, 0
layerno = 0
start = 0, 0
delta = 1, 1
trans = none
mask  = 0
tile  = 1, 0
tilespacing = 0,0
window = 0,0, 319, 239

- 先从清理那些无用代码开始(之后会进行说明):移除trans,tile,tilespacingwindow这几行。
- 我们现在要对天空图片的纵坐标进行更改。随便写几个数然后进MUGEN看看效果。标明一下,纵坐标的数值是从上到下变大的,所以如果你想让图片上移,就必须放入一个负数值。例如,我把这个值设定为-220: "start = 0, -220", 就会导致场景出现这个效果:
blob.png

- 如你所见,我把天空放太高了,导致一块区域因没有图片内容进行覆盖而出现Debug用的洋红色。我将纵坐标重新设定为-190后,一部分的天空图片会被地板所覆盖,但个人认为这高度刚好。

重要:你可能注意到了,天空的代码在位置顺序上是先于地板代码写的。这么写是有意而为,因为MUGEN是按照从上往下的顺序解析代码的,第一批显示的图片就是写在开头的那一批,最后一批同理。结论:合理排序代码 -> 远的装饰写在开头处,近的写在结尾处。

   3.3 – 设置边界
   
现在,你可能会问“靠,怎么会这样,明明地板和天空都很大,怎么场景这么小?!” 这就是接下来我们要修改的,我指设定正确的边界:左边界,右边界和高度边界。我们在设置高度边界前,先设置左/右边界。

- 在Def文件中,拉至[Camera]代码区,将boundleft和boundright的数值调高(保持两个值的绝对值对等)。举个例子,我设置成了+/- 300。
- 然后,保存,进入Mugen,让两个人物移动至一个场景的某个墙角。你可以看到,场景变大了,甚至,有些过大了:
blob.png

- 这就是为什么检查墙角很重要的原因,毕竟漏过1像素点宽的空白纵列区什么的时有发生,尤其是在debugbg没有设定为1时。当然,在示例中,我把值设高了,只是为了引出这个注意点。给boundleft和boundright设定一个你觉得适合场景宽度的值就可以了,我个人选了+/- 220。
Q:如何算出左&右的边界(假设是对等的尺寸大小)
要找到正确的值,计算公式应为(图片宽度 – Mugen屏幕宽度)/2。比如,有一张608像素宽的图,当Mugen 的屏幕尺寸为320时,它的左右边界就是(608-320)/2=144。

接下来,我们要按照类似的步骤,对boundhigh参数进行设置。然而,你想靠一般的人物来检查高度边界是不现实的,因为他们跳不到这么高。解决这个难题,有两个方法,选个你喜欢的吧:
1) 在Mugen对战界面按Ctrl+D激活Debug模式。当一个人物跳跃至空中的时候,迅速按下Ctrl+I,他便会站立在空中。重复这个步骤直到这个人物到达了场景的顶端。
2) 选择一个你想用来当做长期测试用的人物(假如你有个测试用Mugen,这个方法更好)。打开人物的Cns文件,找到文件开头的[Movement]区域。把airjump.num的数值调到很高很高:

代码:

[Movement]
airjump.num = 999      ; Number of air jumps allowed (opt)

你的人物现在跳起来和疯狗一样,可以达到场景的极点高度!

一旦你选定了自己喜欢的方式,就可以开始重复blundleft和boundright的步骤,将boundhigh的数值调高了。比如,设置成-220就会出现下图现象:
blob.png

- 在测试后,我将值设置为了-185。最后,[Camera]部分的数值确定为以下:

代码:

boundleft = -220
boundright = 220
boundhigh = -185


完成至今为止的步骤后,我们就有了一个最基本的场景——包含有地板和背景的场景。 边界都准确设置后,镜头便不会因为人物跳动之类而移出场景。
实际上,我们已经比大部分初学者要深入了许多。如果你想的话,现在就已经可以遵循以上步骤去制作一份单图背景了(初学者通常都这么做)

为了完成这个章节,让我们把场景的名字改掉,并放入新作者的名字,毕竟这怎么看都不是“练习场景”,我把它叫做“Mario Tutorial - Basic Stage”并在作者处写入了我自己的名字。自然,你可以随便自己写。
你可以在此下载这份场景(到目前为止制成的场景):network.mugenguild.com/cybaster/stage_tutorial/stage_part_%203.rar


你,确定要这么做吗?
正在处理中...