《巴巴是你》关卡编辑器全面概述
全新的、不再隐藏的关卡编辑器综合介绍,包括入门指南、各种实用设置以及内置模组支持说明。
简介
关卡包可以恰当地描述为“自定义战役”。全新的关卡编辑器允许你创建一个关卡包,其中几乎包含了主游戏本身使用的所有功能。
在本指南中,我将概述编辑器的工作原理,并记录下我所能想到的每一个不规范或未公开的功能。例如,我不会深入探讨如何制作“优秀”的谜题。我会重点介绍关卡包,但如果你只是制作单个关卡,这里也有大量关于编辑器的通用信息。
如果有任何令人困惑或缺失的内容,请在评论中告诉我。注意:为保证内容完整性,本指南包含部分游戏后期剧透内容,这些内容已用剧透标签标注。
注意:本指南适用于游戏的桌面版本,其中提到的许多功能在任天堂Switch版本中并不具备。
我该去哪里?
以下是常见问题和问题的目录。此列表并不完整:如果某些内容未在此处列出,可能会在下文提及。
制作你的第一个关卡包:请参阅“开始制作关卡包”。这也可作为编辑器的通用入门介绍。
分享关卡包:请参阅“分享关卡包”。
制作你的第一个关卡包模组:请参阅“开始使用自定义代码”。
在你的关卡中设置类似“Level Lake-1”的名称:请参阅“更改关卡元数据 > 更改关卡的地图地址”。例如,【Baba Is You】(第0关)是主线游戏的第一关,而【地图】是世界地图。
点击【设置首关】,然后点击你的第一关。你会看到它被标记上了S。同样地,点击【设置世界地图】,然后点击你的世界地图,将其标记为M。
找到Data文件夹
最后,在我们测试这个关卡包之前,让我们快速退出游戏并前往游戏的Data文件夹。Data文件夹是存放所有游戏文件的重要位置。不同操作系统的查找步骤略有不同。
Windows/Linux系统
在你的库中右键点击游戏,然后依次进入【管理】>【浏览本地文件】。从那里进入Data文件夹。
Mac系统
在你的库中右键点击游戏,然后依次进入【管理】>【浏览本地文件】。从那里右键点击Baba Is You右键点击应用程序并选择“显示包内容”,然后进入Contents/Resources/Data目录。
我们进入Data/Worlds目录,这里存放着所有的关卡包。在该目录中,你的新关卡包文件夹名称可能类似“76world”。
为确保找到正确的文件夹,打开该文件夹并查看其中的world_data.txt文件。name=和author=字段应分别包含你之前指定的关卡包名称和作者名称。确认无误后,将关卡包文件夹重命名为更独特的名称。
注意:文件夹名称用于将你的关卡包与存档文件关联。因此,如果你在游玩后重命名关卡包文件夹,游戏下次运行时将为该关卡包创建新的存档。所以,重命名你的关卡包文件夹是没问题的,除非你要将其发布到网上。
测试关卡包
现在完成上述操作后,回到游戏中。从主菜单选择【游玩关卡】>【游玩关卡包】,然后从列表中选择你的关卡包。
如果一切顺利,你应该会从第一关开始。通关后会进入世界地图,路径会自行显示。你还会看到【区域完成】的提示信息。
太棒了!你成功了。基础关卡包教程到此结束。
编辑关卡
在编辑器中,物体被放置在关卡里。你还可以使用各种不同的物体放置工具和菜单。为关卡添加背景图片:请参阅【更改关卡元数据】>【为关卡添加背景图片】。
创建标牌:请参阅【使用特殊放置模式】。
将关卡放入物体中:请参阅【使用特殊放置模式】。
为关卡包添加100%标记:请参阅【更改关卡包元数据】>【为关卡包添加100%标记】。
为关卡包添加自定义完成图标:请参阅【更改关卡包元数据】>【为关卡包添加自定义完成图标】。
在物体列表中找不到某个词汇:确保已启用【关卡编辑器】>【帮助和常规设置】>【启用高级词汇】。注意:这将显示一些后期游戏词汇,请注意剧透。
关卡包模组完全无法运行:确保您的关卡包的模组设置已开启(请参阅【自定义代码入门】>【为关卡包启用模组】)。开始制作关卡包
以下是开始创建简单关卡包的方法。
创建关卡包
从主菜单进入关卡编辑器。
选择编辑关卡包…。如果该选项呈灰色,请先进入帮助与通用设置,确保已启用扩展功能。
点击创建新关卡包。系统会提示你输入新关卡包的名称。之后,从列表中选择你的新关卡包。
这里是关卡列表,你可以在此添加关卡和更改关卡包的常规设置。目前没有任何关卡,所以列表为空。
制作关卡前,点击更改作者确保作者名称正确。
创建第一个关卡
设置第一个关卡
让我们创建玩家首次开始关卡包时看到的关卡。点击创建新关卡。
选择名称后,会出现提示“是否要为此关卡加载主题?”,暂时选择否。
关卡编辑器会显示出来。我们开始放置物体吧。
在底部,点击“物体”进入物体菜单。在这里,你会看到一个网格,其中包含关卡使用的物体库,这就是物体面板。点击一个物体即可选择它进行绘制。
接下来编写一条有用的规则,比如“ Baba Is You”。确保你的关卡可以通关,之后你需要测试它是否正常运行。
添加装饰:我们来添加一个装饰物体。
在物体菜单中,点击“添加物体”按钮,就是那个标有Baba和加号的按钮。
点击“编辑搜索”,然后输入你想要的物体名称。例如,你可以添加一片草地、一片花田或一块砖地。但为了清晰起见,我假设你选择了草地。
搜索后,会出现草地物体和草地文本。点击其中任意一个,将草地添加到物体面板中。
选择草地后,你几乎肯定会想把它放在一些现有物体的下方。要做到这一点,你需要选择另一个图层。
点击屏幕右上角的L2,选择图层2。其他物体将会变淡,表示它们不在当前选中的图层上。
在你想要的位置放置一些草地,然后点击底部的保存。
现在点击菜单 > 返回关卡列表。太棒了,你的关卡现在已经在列表中了。
创建世界地图设置地图现在让我们来制作世界地图。点击创建新关卡。这次,进入底部的设置。这里有一堆针对该关卡的不同设置。
你可能想要更改音乐。可以通过【更改音乐>地图】来使用地图主题音乐。
如果你愿意,也可以更改关卡大小。进入【更改关卡大小】,调整大小后点击【应用新大小】。(顺便说一下,33x18是主游戏中所有世界地图的尺寸。)
接下来,进入【地图设置】来处理与世界地图相关的设置。
在【选择关卡类型】下,你需要选择【地图】。这会在屏幕角落添加蒲公英计数器,并跳过选择关卡时出现的常规关卡介绍画面。
好了,现在退出设置菜单。
放置关卡
现在进入【对象】菜单。到目前为止,我们只使用过【对象放置模式】。不过,关卡、路径和特殊元素还有其他放置模式。点击“关卡”即可选择关卡放置模式。
你的光标会变成一个方块,这表示你正在放置关卡。点击即可放置一个关卡。
此时会弹出一系列设置,但我们只需更改“此关卡通向哪个关卡”和“初始状态”这两项。
点击“此关卡通向哪个关卡”下方的按钮,然后从之前创建的关卡中选择你的第一个关卡。
接着,将关卡的初始状态设置为“已开启”。我们这样做是因为可能会有人在尚未完成关卡时就“返回地图”。如果关卡未解锁,就很可能导致游戏软锁,所以我们希望这个关卡从一开始就是开放的。
点击“返回”以确认这些设置。如果你想更改关卡设置,请确保在“物体”菜单中选中“关卡放置模式”,然后点击你想要更改的关卡。
放置光标:对于世界地图,你需要将“光标”添加到你的物体面板中。在“物体”菜单中,点击“物体”按钮返回“物体放置模式”。将“光标”添加到物体面板,然后在关卡上方放置一个光标,以设置光标的默认位置。(关卡实际上位于它们自己的图层上。)
放置路径:你还需要路径。将名为“线条”的物体添加到物体面板中。
在“物体”菜单中,点击“路径”按钮旁边的小齿轮按钮,查看你将要放置的路径的设置。
设置中很可能显示“路径物体:text_is”。我们需要将“路径物体”更改为“线条”。前往并按下回车键,然后点击【路径】以切换到路径放置模式。
现在,在路径放置模式下,点击对象面板中的【线条】。这会将路径对象从“text_is”更改为“line”。
注意:要更改路径对象,必须在选中路径放置模式的同时选择一个对象。它不会记住你之前在对象放置模式中选择的对象。
在关卡旁边绘制一些路径。与关卡类似,你可以通过选择路径放置模式并点击要编辑的路径来编辑单个路径。
点击【保存】,然后退出回到关卡列表。
设置首关和世界地图
在这里,你会找到两个名为【设置首关】和【设置世界地图】的按钮。它们用于指定关卡包的两个入口关卡。使用对象放置工具
工具列于编辑器屏幕右侧。
绘制工具:点击并拖动以自由放置对象。
直线工具:点击并拖动以直线形式放置对象。
空心矩形工具:点击并拖动以空心矩形形式放置对象。
实心矩形工具:点击并拖动以实心矩形形式放置对象。
选择工具:点击并拖动以选取矩形区域的对象,然后点击可将该区域的副本覆盖到另一区域。空白区域也会覆盖目标区域。
填充工具:点击以替换相连区域内的所有对象。
橡皮擦:点击并拖动以移除对象。此外,选择空白区域的效果与橡皮擦相同。
在不同图层上绘制
图层允许对象彼此独立放置。要选择图层,请点击编辑器中标有L1、L2和L3的按钮。其他图层上的对象会变淡,以显示它们不在当前选中的图层上。
注意:关卡对象位于其自身的图层,因此它们不在1、2或3图层上。在选中关卡放置模式时切换图层,会切换到对象放置模式。
从快速栏选择对象:点击快速栏中的对象即可选择它。或者,也可以滚动鼠标滚轮进行选择。
锁定快速栏中的对象:通常,从对象面板选择对象会将其添加到快速栏,并将其他对象向右推挤。要防止某个对象被推出快速栏,右键点击该对象即可将其锁定到位。从快捷栏中清除物体:鼠标中键点击快捷栏中的物体即可将其移除。
移动单个物体:按住Ctrl键并拖动物体进行移动。松开鼠标时,物体会保持被握持状态,直到放置在空闲位置。
一次性移动所有物体:使用WASD键可一次性移动所有物体。超出边界的物体会从另一侧重新出现。
使用编辑器控制:屏幕底部会列出相关控制方式。
测试:游玩关卡。若要返回,可暂停并选择【返回编辑器】。
切换:选择当前选中物体对应的文本部分。
撤销:撤销更改。
保存:保存更改。若未保存就尝试离开关卡,会收到提示。
使用物体菜单:物体菜单可用于访问物体面板和物体放置模式。要打开【物体菜单】,请点击编辑器中的【物体】按钮。或者,也可以按【Tab】键来切换【物体菜单】的显示与隐藏。选择对象
点击对象面板中的对象以选择进行绘制。
添加对象到对象面板
点击带有巴巴和加号图标的按钮以打开对象列表。在列表中点击任意对象即可将其添加到对象面板。点击一个对象时,其对应的文字对象也会被添加(反之亦然),某些对象组合(如【热】和【融化】)会同时被添加。
从对象面板移除对象
点击带有划掉的巴巴图标的按钮,然后点击对象以将其从对象面板中移除。或者,你可以按住Ctrl键并右键点击对象进行移除。
重新排列对象面板
按住Ctrl键并点击拖动对象面板中的对象即可移动它们。建议将对象从默认位置移开。请记住,【对象面板】的布局在不同的显示模式下有所不同。
自定义对象:点击带有巴巴和abc图标的按钮,然后点击一个对象以打开其设置。或者,你也可以右键点击对象来快速打开其设置。
更改精灵:更改对象的外观。点击【更改精灵...】会显示一长串白色图像!建议使用搜索来缩小列表范围。
更改名称:更改此对象的名称。
注意:更改对象的名称也会更改其对应文本的名称,反之亦然。这是因为对象必须与文本对象共享名称才能正常工作。此外,文本对象的名称必须以“text_”为前缀。请确保已开启【特殊放置模式】,然后点击特殊物体以更改其数据字段。如果刚刚放置了特殊物体,可能需要先将鼠标移开,然后再移回该物体上。
数据字段是改变特殊物体运作方式的重要部分。以下是不同种类特殊物体的说明:
创建控制符号:控制类特殊物体会在地图上放置一个不可交互的控制符号。控制类特殊物体的数据格式如下:
controls,<控制符号名称>
其中<控制符号名称>可以是:
up、down、left、right(对应玩家1的控制),
up2、down2、left2、right2(对应玩家2的控制),
pause、undo、idle(其他控制)。向下、向下2、暂停、撤销和闲置图标下方将分别标注“移动”“移动2”“暂停”“撤销”或“等待”。
使物体成为告示牌:告示牌特效置于物体之上可将其转变为告示牌。当“你”物体足够靠近告示牌时,告示牌会显示信息。告示牌特效的数据格式如下:sign=<第一行>=<第二行>=<第三行>注意:分隔各值的等号并非输入错误。使用等号分隔各行,以便在告示牌上书写逗号。
使物体能够转变为关卡:关卡特效置于普通物体之上,可使其能够转变为关卡。这些特殊内容的数据格式如下:
关卡,<目标关卡>,<关卡符号样式>,<关卡符号>,<关卡初始解锁状态>,<颜色x>,<颜色y>,<清除颜色x>,<清除颜色y>
其中:
<目标关卡>的格式类似76level
<关卡符号样式>为0表示数字,1表示文本,2表示奖励点
<关卡符号>是0到99之间的数字,表示关卡编号
<关卡初始解锁状态>是0到3之间的数字(建议保持为1)
<颜色x>、<颜色y>、<清除颜色x>和<清除颜色y>是调色板上的坐标(实际上,这并不像我预期的那样工作)添加这些数值会使关卡始终保持其之前的物体颜色;若不添加,关卡将默认显示为蓝色。创建装饰性花朵:花朵特殊项会在地图上放置一个不可交互的花朵。这些特殊项的数据格式如下:flower,<颜色x>,<颜色y>,<环数>,其中<颜色x>和<颜色y>是调色板上的坐标。手动设置数据字段:或者,你可以手动编辑关卡的.ld文件,该文件位于Data/Worlds/<关卡包>/<关卡文件名>.ld(参见查找数据文件夹)。注意:修改任何文件前请关闭游戏!注意:确保在文件浏览器中显示隐藏的文件扩展名,以免意外编辑.tmp文件!在关卡的.在ld文件中,【specials】标题下包含每个特殊元素的数据,而【general】标题下的specials=字段则记录特殊元素的数量。例如:
【general】
specials=1
(……更多字段……)
【specials】
0X=10
0Y=5
0Z=4
0data=sign=第一行=第二行=第三行
X和Y字段从屏幕左上角开始计数,起始值为1。Z字段没有实际作用,特殊元素会影响同一格子上的所有物体(在适用情况下),无论它们处于哪个层级。
更改关卡设置
设置菜单可用于调整关卡名称、尺寸等基本信息,以及音乐、调色板等主题相关内容。要打开设置菜单,点击编辑器中的“设置”按钮。
若要更改地图上某个关卡的设置,请参阅“使用关卡放置模式”。
更改主要设置
名称:更改关卡名称作者:设置关卡创作者的名称。
副标题:为关卡介绍界面添加副标题(例如:欢迎来到 Baba Is You)。
音乐:更改关卡音乐。
效果:添加在关卡中扩散的效果。
调色板:更改关卡颜色。
关卡尺寸:调整关卡大小。同时提供主游戏使用的预定义选项。
禁用粒子效果:关闭所有物体的粒子效果。
禁用规则效果:关闭由规则激活产生的声音和粒子效果。
禁用屏幕震动:关闭物体销毁时引起的屏幕震动。
“Level Is Auto”延迟:当规则“Level Is Auto”生效时,更改回合之间自动间隔的时长。
更改地图设置:在设置菜单中选择地图设置以打开地图设置。选择关卡类型:将关卡类型设置为普通关卡或世界地图。世界地图的角落会有蒲公英计数器,跳过普通关卡的介绍界面,且不显示地图地址。
需要通关的关卡数:更改从该世界获得花朵所需的已通关关卡数量。数值为零意味着永远无法从该世界获得花朵。
地图图标设置:定义自定义关卡符号样式所使用的精灵图。在主游戏中,这用于在世界地图的关卡上放置图形符号。
通关后返回的关卡:选择此关卡获胜后会发生什么。
父关卡:通常的设置;返回关卡树中的上一个关卡。
胜利:播放关卡包的制作人员名单。选择关卡:绕过关卡树,直接前往指定关卡。当你想要在主世界地图中获胜时非常有用。请注意,这可能会扰乱关卡树。
修改关卡元数据
存在一些无法通过编辑器访问的额外关卡属性。修改这些属性需要编辑关卡的.ld文件,该文件位于Data/Worlds/<关卡包>/<关卡文件名>.ld(请参阅查找Data文件夹)。
注意:修改任何文件前请关闭游戏!
注意:确保在文件浏览器中显示隐藏的文件扩展名,以免不小心编辑.tmp文件!
修改关卡的地图地址
地图地址会显示在关卡介绍屏幕和暂停菜单中。这里所说的地图地址,指的是类似“Level Lake-1”这样的内容。关卡的地图地址格式如下:
Level <父关卡地图ID>-<当前关卡地图ID>
例如,“湖泊”关卡的地图ID为“Lake”,而“冰水”关卡会自动分配到地图ID“1”。两者组合形成地图地址“Level Lake-1”。
通常,关卡的地图ID会在游戏内打开时根据地图上关卡的符号样式自动确定。以“冰水”关卡为例,由于其使用“数字”符号样式,因此自动确定地图ID为“1”。若要获得“Extra 1”这类地图ID,只需使用“点”符号样式。
对于“Lake”这类自定义地图ID,请打开地图的。ld文件,并在[general]标题下添加以下值:mapid=<自定义地图ID>此外,地图ID设为"<empty>"将完全移除该关卡的地图ID。自定义地图ID也可应用于关卡本身(不仅仅是世界地图)。这就是某些关卡拥有诸如“Level ???-Secret”这类地图地址的原因。世界地图确实有地图ID,但不使用地图地址。因此在暂停菜单中,你只会看到世界地图的名称,而没有前缀的地图地址。注意:奇怪的是,关卡列表中设置的世界地图的地图ID无法更改。它默认为空,但在某些错误情况下可能会改变。当该区域被清除时显示区域清除过场动画在主游戏中,清除一个区域会触发一段短过场动画。类型选择:如果是普通物体,请选择【物体】;如果是文本物体,请选择【文本】。自定义物体类型输入(...)仅在特殊情况下需要。
物体颜色选项:对于“物体”类型的物体,你会看到【更改颜色】选项。为物体选择一种颜色。
对于“文本”类型的物体,你会看到【基础颜色】和【激活颜色】。基础颜色是未激活文本的颜色;激活颜色是亮起的、正在使用的文本的颜色。
动画风格:更改精灵使用其各个帧的方式。动画风格及物体示例如下:
无:旗帜
方向:幽灵
动画:蝙蝠
动画方向:传送带
角色: Baba
平铺:墙壁
有关更详细的说明,请参阅【创建自定义精灵 > 精灵状态】。
文本类型:更改此文本的解析方式。已通关的区域会显示在主地图上,并且会从中获得一朵花。在自定义关卡包中,默认不会设置此功能,但可以启用。
在你的地图.ld文件中,在[general]标题下添加以下值:
unlocklevels=<要前往的地图ID>
其中<要前往的地图ID>类似于76level。
强制返回地图以打开特定关卡
无论当前关卡树如何,强制返回地图以打开特定关卡可能会很有用。在你的关卡.ld文件中,在[general]标题下添加以下值:
customreturn=<要返回的地图ID>
其中<要返回的地图ID>类似于76level。或者,可以使用_NONE_来禁用“返回地图”按钮。强制规则列表仅使用一个单词
可以将规则列表中的每个单词都替换为单个单词。例如,如果该单词是“oioioi”,那么规则“Baba Is You”在规则列表中会显示为“oioioi oioioi oioioi”。
在你的关卡.ld文件中,在[general]标题下,添加以下值:
customruleword=<规则列表中使用的单词>
为关卡添加背景图片
在主游戏中,世界地图使用背景图片。此功能也适用于自定义关卡包。
背景图片是一系列三个.png文件,尺寸为(24×关卡宽度)×(24×关卡高度)。单个帧命名为:
<图片名称>_<晃动帧>.png,其中<晃动帧>的范围是1到3。你的关卡包的Images文件夹中的任何图片都将被游戏识别。
图片可用于关卡中。在关卡的.ld文件中,在[images]标题下,将total=的值改为1。然后,添加以下值:0=<图片名称>。可以通过增加total=的设置并添加相应条目来添加更多图片。编号较高的图片将显示在上方。
更改关卡的随机种子类型:你可以通过固定随机种子来更改关卡中随机性的处理方式。在关卡的.在ld文件的[general]标题下,添加以下值:
seeding=<播种类型>
其中<播种类型>为:
0:默认行为,完全随机,撤销和重做时结果不同
1:一致,撤销和重做时结果相同,关卡重启时生成新的随机种子
2:完全一致,即使关卡重启,撤销和重做时结果也相同
注意:播种设置在编辑器中可能不起作用;你可能需要进入“游玩关卡”才能使其生效。这是一个漏洞。
修改关卡包元数据
与关卡一样,有些关卡包设置只能通过文件编辑访问。你的关卡包位于Data/Worlds/<关卡包>(请参阅“查找Data文件夹”)。
注意:修改任何文件前请记得关闭游戏!注意:请确保在文件浏览器中显示隐藏的文件扩展名,以免意外编辑.tmp文件!
为关卡包添加图标
关卡包的图标会显示在“游玩关卡包”菜单的列表中。
图标是一个名为icon.png的文件,尺寸为48x48。要为关卡包添加图标,请将图标放置在关卡包文件夹的根目录下。
为关卡包添加制作人员名单
完成关卡包后,游戏可能会从credits.txt文件中滚动显示制作人员名单。此外,当触发“一切皆完成”结局时,将使用credits_done.txt文件。
更改制作人员名单文本颜色
要更改文本颜色,请使用颜色标签:
$<x>,<y>,其中<x>和<y>是调色板坐标。例如,$0,3会将文本颜色重置为白色。颜色标签会为其之后的所有文本设置颜色。不过,文本颜色会在换行时自动重置。
空行的写法:连续的多个换行符会被忽略。若要在两行之间留出空白,需在空行中添加一个空格。
为关卡包添加100%完成标记:关卡包可以设置100%完成标记,当达成该标记时,会在【游玩关卡包】菜单的关卡包上添加一个星星印章。
要启用此关卡包设置,请打开关卡包的world_data.txt文件。在【常规】标题下,添加以下数值:
prize_max=<可获胜关卡数量>
clear_max=<可解锁世界地图数量>
bonus_max=<可获得奖励数量>
为关卡包添加自定义完成图标
关卡包可以拥有自己的完成图标,当通过自定义代码触发时,这些图标会显示在【游玩关卡包】菜单中。一个完成图标包含一个完成图标图像、world_data.txt文件中【completion_icons】标题下的条目,以及用于激活图标的模组脚本。
添加完成图标图像
完成图标图像是一个.png文件,名称不限,尺寸为24x24。要将其添加到你的关卡包中,请将其放入关卡包的Sprites文件夹。
在【completion_icons】下添加条目
接下来,打开你的关卡包的world_data.txt文件。你需要确定一个独特的存档数据标志名称,该标志将触发此完成图标。它几乎可以是任何名称,但建议使用类似“customicon_”的前缀,以确保不会覆盖任何其他存档数据。
如果尚未添加[completion_icons]标题,请添加该标题,并添加以下值:
count=1
1_flag=<存档数据标志名称>
1_file=<图标图像名称(不带.png扩展名)>
可以通过增加count=设置并添加相应条目来添加更多图标。
添加激活自定义代码
最后,你需要编写激活完成图标的自定义代码。游戏会检查你的关卡包主存档数据标题下的存档数据标志是否为1。因此,可通过以下代码片段实现:
MF_store("save", generaldata.strings[WORLD], "<保存数据标志名称>", "1")
有关更多信息,请参阅自定义代码入门。
为关卡包启用模组
请参阅下文,自定义代码入门 > 为关卡包启用模组。
找到Data文件夹
Data文件夹是存放游戏所有文件的位置,包括关卡包文件。你很可能需要经常访问此处,因此创建快捷方式是个不错的主意。
注意:修改任何文件前请记得关闭游戏!
注意:确保在文件浏览器中显示隐藏的文件扩展名,以免意外编辑.tmp文件!
不同操作系统下找到Data文件夹的步骤略有不同。Windows/Linux系统:在库中右键点击游戏,然后依次选择【管理】>【浏览本地文件】。接着进入【Data】文件夹。
Mac系统:在库中右键点击游戏,然后依次选择【管理】>【浏览本地文件】。接着右键点击【Baba Is You.app】并选择【显示包内容】,然后进入【Contents/Resources/Data】。
分享关卡包
以下是准备分享关卡包的方法。
找到你的关卡包文件夹
你的关卡包位于【Data/Worlds/<关卡包名称>】(参见【找到Data文件夹】)。要确认关卡包文件夹是否正确,请在其中查找【world_data.txt】文件,并检查【name=】和【author=】字段是否分别包含关卡包名称和作者名称。Baba:一个物件
Is:一个动词或动作
You:一种属性或特质
Lonely:前缀条件
On:中缀条件
Ba:一个字母
Z轴层级:更改精灵的图层顺序。Z轴层级越高,显示越靠前。文本物件的标准Z轴层级为20。
使用关卡放置模式
关卡放置模式用于在地图上放置关卡。它的功能与物件放置模式不同:不允许使用物件放置工具,且关卡始终放置在主三层之外的独立图层上。要使用关卡放置模式,请打开物件菜单并选择关卡。在关卡放置模式下,光标会变为方形。
在地图上设置关卡
点击画布会创建一个关卡并打开关卡设置对话框。重命名你的关卡包文件夹
关卡包文件夹的名称用于将关卡包与其存档文件相匹配。如果尚未重命名,你应将其从类似“76world”这样的通用名称更改为更独特的名称。
注意:如果你在游玩关卡包后重命名其文件夹,下次游玩时游戏将为该关卡包创建新的存档。因此,在将关卡包发布到线上之前,重命名文件夹是没有问题的。
删除不必要的文件
此步骤为可选操作,但建议执行以帮助减小关卡包的文件大小。
.tmp 文件:游戏在修改 ini 文件格式的文件(如 world_data.txt 或 .ld 文件)时会创建临时文件。建议删除 .tmp 文件。注意:确保在文件浏览器中显示隐藏的文件扩展名,这样你就能分辨哪些是.tmp文件。
关卡缩略图:这甚至更可选。像76level.png这样的文件是关卡缩略图,仅在关卡编辑器中显示。它们不是游玩关卡包所必需的,但可以帮助你在关卡列表中识别关卡。因此,当你分享关卡包时,可以创建一个删除了关卡缩略图的关卡包文件夹副本。
分享:游戏内没有关卡包分享功能,你需要使用一些第三方文件共享服务。不过,这意味着与上传关卡不同,你可以删除或修改关卡包,而无需重新上传整个文件。
开始使用自定义代码:自定义代码是最酷的自定义内容。该游戏使用Lua语言,因此你无需任何编译器。此外,游戏内置了自定义代码系统,所以你也不需要下载任何模组加载器。
游戏在两个位置支持自定义Lua:Data/Lua文件夹用于全局模组,而Data/Worlds/<关卡包>/Lua则用于关卡包专属模组。本指南将重点介绍关卡包模组制作,这对于自定义对象和新行为来说更为适用。
让我们快速开始为关卡包创建Lua模组。
为关卡包启用模组:游戏内置了向关卡包添加自定义代码的系统。当某个关卡包启用模组后,游戏会检查该关卡包的Lua文件夹中的内容。不过,模组默认处于禁用状态。
模组必须按关卡包分别启用。要启用此关卡包设置,请确保在修改文件前已关闭游戏,然后打开关卡包的world_data.txt文件。在[general]标题下,添加数值mods=1。
下次加载关卡包时,它将加载关卡包Lua文件夹中的所有.lua文件。
注意:启用模组仅影响Lua文件夹;使用音乐等其他文件夹无需启用模组。
注意:游戏不会检查Lua文件夹中的任何子文件夹。
创建Lua文件:在关卡包文件夹的根目录下新建一个名为Lua的文件夹,用于存放关卡包中的所有Lua文件。
进入该文件夹,创建一个类似tesset.lua的文件。在该文件中,写入:table.insert(mod_hook_functions.level_start,
function()
MF_playsound("winner2")
end
)这里我们正在为level_start模组钩子添加一个新函数(参见“使用模组钩子”)。
现在打开游戏并启动你的关卡包。每当你进入一个关卡时,你会听到难忘的胜利音效。不过,最好快点删除那段代码,免得那超棒的音效听腻了。
创建自定义代码
以下是一些你可以用来编写Lua模组的实用技巧。
使用模组钩子
在《 Baba Is You 》的模组制作中,复制粘贴游戏代码中的整个函数来对其进行修改是一种常见做法。但你不应该这样做,主要原因如下:
随着游戏更新和源代码变更,维护会变得困难。
你需要重新分发部分源代码。这是相当违法的。虽然我们目前还没有工具能在不复制代码的情况下在任意位置注入代码,但仍然有很多无需该工具就能编写Lua模组的方法。其中一种方法就是模组钩子。
模组钩子提供了将自定义代码注入游戏的切入点。模组钩子本质上是一个包含函数的Lua表。游戏中存在多个模组钩子,它们会在代码中的特定位置被“调用”。
在Data/modsupport.lua文件中,你可以找到一个名为mod_hook_functions的表,该表列出了所有模组钩子及其用途。
要向模组钩子添加函数,请编写以下代码:
table.insert(mod_hook_functions.<模组钩子名称>,
function(args)
-- 此处编写自定义内容...
end)其中<mod hook name>是mod_hook_functions列表中mod钩子表的名称,args是包含传递给函数的任何额外数据的表。
即使你需要更改的函数内部没有mod钩子,你仍然可以对其进行猴子补丁。你可以轻松地在现有函数的开头或结尾添加新功能。
如果你想更改一个名为blah()的函数,你可以这样写:
local oldblah = blah
function blah()
oldblah()
end
首先,通过编写local oldblah = blah来保存旧函数的副本。然后重新定义旧函数blah(),并在其中调用该函数的旧副本。完成后,你可以在这个新函数中添加任何其他内容。如果blah()带有参数,请确保考虑到这一点:
local oldblah = blah
function blah(arg1, arg2, arg3)
oldblah(arg1, arg2, arg3)
end
如果blah()返回一个值,确保新函数也返回一个值:
local oldblah = blah
function blah()
return oldblah()
end
使用MF函数
前缀为"MF_"的函数在MMF端定义,因此它们不在前端Lua文件中。所有MF函数都记录在Data/MF_documentation.txt中。
通过命令行打开游戏
你可以通过命令行打开游戏以获取print()输出。
为避免Steam云冲突,我们来设置steam_appid.txt。找到【 Baba Is You】的可执行文件(Windows上是Baba Is You.exe,Mac/Linux上是Chowdren)。在该文件旁边,创建一个名为steam_appid的文件。你还应确保在打开游戏前,Steam正在后台运行。
Windows
PowerShell
$BabaAppDir = "${env:programfiles(x86)} Steam steamapps common 巴巴是你"
$BabaExeDir = "$BabaAppDir 巴巴是你.exe"
# 导航到可执行文件以运行它
$TerminalDir = Get-Location
cd $BabaAppDir
# 打开游戏
& $BabaExeDir | echo
# 返回原位置
cd $TerminalDir
Mac
bash
#!/usr/bin/env bash
BABAAPPDIR=~/Library/Application Support/Steam/steamapps/common/巴巴是你/巴巴是你.app
BABABINDIR="$BABAAPPDIR"/Contents/MacOS/Chowdren
# 打开游戏
"$BABABINDIR"
zsh
与bash相同,但将#!/usr/bin/env bash替换为#!/usr/bin/env zsh
替换MF_alert()
MF_alert()在游戏开发过程中用作一种打印函数。不过,它在游戏的正式版本中没有任何作用。要接收MF_alert()消息,你可以将其替换为一个调用print()的函数:
function MF_alert(message)
print("(alert) "..message)
end
创建自定义精灵
精灵是一组.png文件,通常尺寸为24x24。单个图像的命名方式为:
<精灵名称>_<状态>_<晃动帧>.png
你的关卡包的Sprites文件夹中的任何精灵都会被游戏识别,并出现在对象自定义菜单的精灵列表中。
允许使用大于或小于24x24的精灵,它们会在格子上居中显示。
精灵名称
精灵名称在其所有单个图像中保持一致。
对象列表中的对象会自动与同名的精灵匹配。该关卡通向何处:更改在游戏中选择此关卡时打开的关卡。
图标颜色:选择设置颜色或设置透明颜色,然后点击调色板选择颜色。不选择任何选项直接点击调色板将同时设置两者。
初始状态:关卡在尚未完成或通过完成相邻关卡解锁前的状态。
隐藏:完全不可见。当相邻关卡或路径被完成或解锁时显示。
普通:可见,但无法用光标选择。当相邻关卡或路径被完成或解锁时解锁。适用于大多数关卡。
已开启:默认可见且可通过光标选择。最适合无法通过完成相邻关卡或路径来解锁的关卡。不过,精灵名称不必与对象名称匹配。例如,“星星”对象的水下精灵名为“海星”,而该对象仍命名为“星星”。
精灵状态
精灵状态是一个0到31之间的数字。它取决于精灵所使用的动画风格类型。这包括世界地图上的第一关,以及通过光标以不同方式到达的关卡。符号样式:更改关卡图标的类型。如果未被覆盖,这也会设置关卡的地图ID(参见更改关卡元数据>更改关卡的地图地址)
无:关卡为空白。
数字:关卡有常规数字。
文字:关卡有一个字母。通常用于偏离主路径的关卡。
圆点:关卡为点状。用于额外关卡。
……:关卡有自定义精灵。通常用于世界地图。自定义精灵通过地图图标设置选择(参见更改关卡设置>更改地图设置)。符号:更改关卡的图标。
移除:从地图上删除关卡。修改关卡设置
确保已开启关卡放置模式,然后点击关卡即可更改其设置。
在地图上打开关卡编辑器
要直接进入地图上某个关卡的编辑器,将鼠标悬停在该关卡上并按E键。(目前没有返回的快捷键。)
使用路径放置模式
路径用于在地图上连接各个关卡。路径放置模式与关卡放置模式相比更为常规:你可以再次使用不同的对象放置工具,且路径会回到三个主图层上。(遗憾的是,路径不像常规对象那样在未处于当前选中图层时会淡化。)
要使用路径放置模式,请打开对象菜单并选择路径。在路径放置模式下,你的光标会变为倒置的光标形状。设置路径对象
最后,路径实际上只是具有一些额外功能的普通对象。用于路径的主要对象是线条,而闸门用于锁定路径。
默认情况下,路径对象是“文本是”。要设置路径对象,请在选中“路径放置模式”时点击对象面板中的某个对象。
注意:如果您之前在“对象放置模式”中选择了该对象,然后切换到“路径放置模式”,此操作将无法生效。理想情况下应该可以,但目前您必须确保先选中“路径放置模式”。如果您碰巧见到Hempuli,请礼貌地请他再看一下这个问题。
更改要放置的路径的路径设置
您可以更改放置路径时将应用于路径的设置。打开物件菜单,选择路径旁的小齿轮按钮。
路径物件:(见上文,设置路径物件)
隐藏/可见:设置路径的初始可见性。隐藏的路径无法被光标通过,且必须连接到已完成的关卡或已解锁的路径才能显示。
此路径是否锁定?:设置该路径是否需要满足特定条件才能被光标通过。数字指定解锁该路径所需的物品数量。
否:只要路径可见,光标始终可以通过。
关卡通关数:该路径需要整个关卡包中一定数量的关卡被通关。
地图通关数:该路径需要一定数量的花朵。
宝珠:该路径需要一定数量的奖励。本地通关:该路径要求在当前地图中通关一定数量的关卡。
修改路径设置:确保已开启路径放置模式并处于正确图层,然后点击路径即可更改其设置。如果刚放置好路径,可能需要先将鼠标移开路径,再移回路径上。
使用特殊放置模式:特殊放置模式用于放置非物体实体(如控制符号),并为现有物体添加元数据。
要使用特殊放置模式,请打开物体菜单并选择【特殊】。在特殊放置模式下,光标会变为反转的光标形状。
设置特殊项的数据字段:要让特殊项发挥作用,必须编辑其数据字段。静态:状态永不改变
方向型:状态会根据物体的朝向发生改变
动画型:状态每回合都会进行动画,在0-3之间循环切换
方向动画型:状态既会反映物体的方向,也会每回合进行动画
角色型:与方向动画型类似。状态仅在物体移动时进行动画;并且还会根据物体是否处于睡眠状态发生改变
平铺型:通过检查正交相邻的同类物体来选择状态
精灵抖动帧:精灵抖动帧是1到3之间的数字。对于每个精灵状态,始终存在三个抖动帧。
创建自定义音乐:一首歌曲是一个循环的.ogg文件。关卡包的Music文件夹中的所有歌曲都会被游戏识别。《 Baba Is You 》的音乐项目文件可供你研究。
引用自 Baba Is You 的推文:许多人请求《 Baba Is You 》的音乐项目文件,现在它来了!
使用这些文件或制作混音时请注明出处!
创建自定义调色板
调色板决定了游戏中物体和其他元素的颜色。调色板是一个尺寸为7x5的.png文件。你关卡包的 Palettes 文件夹中的任何调色板都会被游戏识别。一些常见颜色考虑包括:
颜色元素0,4
关卡背景1,0
关卡边框;重新开始云朵3,2;3,1;1,3
按钮4,1
选中按钮0,1
禁用按钮