基岩牢笼/创建主题
此页面将告诉你如何创造一个基岩牢笼主题。
准备
首先,我们需要准备一些必要的东西:
- 安装了基岩牢笼整合包的Minecraft。
- 基岩牢笼主题包模板(Release里的
Bedrock.Cage.Pack.Template.zip
)。 - 好用的文本编辑器。
构成
基岩牢笼的主题由三部分组成:主题(theme)、地图(map)和下一个抽取池(next pool)。
主题,严格来说应该叫主题索引,用于告诉游戏应该启用哪个主题,以及起始地图应该是哪一个。
地图用于加载游玩区域,同时用于存放仅该游玩区域使用的函数。
下一个抽取池用于决定如何挑选下一个地图。它是连接各个地图的桥梁。
使用创作者模式搭建地图
为了便于创作地图,基岩牢笼提供了创作者模式。
启用创作者模式
要启用创作者模式,在创建地图时将游戏模式设置为创造模式即可。其他因素不影响创作者模式的启用。
为了提供更好的创作体验,这里推荐将世界类型设为“基岩牢笼(创作者模式)”。如果使用普通类型,因为那个类型主要用于游玩,整个世界会有那么一点暗……
各区域介绍
你应该注意到了,在正常游戏中存在的天花板被拆掉了,墙壁上的基岩被替换成了混凝土,地面多出了两个结构方块。
为方便创作,我们将正常游戏中存在的天花板移除了。如果要添加天花板,请运行/function _ct:ceiling_close
。如果要移除天花板,请运行/function _ct:ceiling_open
。它们都是创作者函数,仅限于创作者手动执行,不会也不应在任何地方调用。
地面上的两个结构方块框定了游戏区域,同时用于在完工时保存结构。周围是橙色混凝土的结构方块是小型结构方块,其储存的结构用于小型地图;周围是紫色混凝土的结构方块是大型结构方块,其储存的结构用于大型地图。
墙壁上的混凝土主要用于区分游戏区域的垂直层。从下到上,游戏区域的垂直层被分为地下层、地表层和天空层,每个层占16格。垂直层对实际游戏没有影响,这仅是为了便利而诞生的。
思考一下目标
在正式搭建之前,请先考虑一下:你要怎么完成这个地图?
无论是什么地图,其唯一的通关方式是:走进末地折跃门。
而末地折跃门的限制条件有:
- 无:无限制。
- 在此基础上,
exit_state
决定了是否默认开启折跃门。- 如果默认关闭了折跃门,你需要想办法运行函数
brc:game_command/open_gateway
来打开它。否则,你的地图就成一个死局了。
- 如果默认关闭了折跃门,你需要想办法运行函数
- 在此基础上,
- 目标:杀死所有目标实体后,折跃门开启。
所以,在搭建地图时,你要想一下:
- 我应该把折跃门放在哪?
- 我应该让玩家怎么打开折跃门?
- 我应该让玩家怎么进入折跃门?
搭建地图
……没什么好说的。怎么搭建是你的自由。
不过,这里可以提供一些信息:
- 基岩牢笼整合包包含WorldEdit模组。它应该对一些人有用。
- 你可以使用创作者函数来让一些事情简单一点。
- 屏障上面的火不会熄灭。
- 虽然现在你看得一清二楚,但在正常游戏时,天花板是封死的,而且没有环境光照。记得添加光源。
- 在处理地图时,生物的
NoAI
标签会设为false
。
特殊标记
在建好地图后,我们有必要添加一些必要的东西:我们需要起始点来标记玩家的位置;我们需要目标点来标记折跃门的位置;如果你设定了目标或Boss的存在,你还需要标记被视作目标或Boss的生物。
特殊标记工具
运行/function _ct:tools
即可获得用于添加特殊标记的工具。请注意,这个操作会清空你的物品栏。
然后,介绍一下你在运行命令后获得的四个物品:
- 位于快捷栏7的物品展示框:用于放置目标点。
- 位于快捷栏8的盔甲架:用于放置起始点。
- 位于快捷栏9的命名牌:用于标记目标。
特殊标记的本质是记分板标签
如题,特殊标记的本质是记分板标签。这意味着只要拥有指定的记分板标签,对应的实体就会表现出相应特征,而与其他因素无关。
因此,你可以通过使用/tag
添加记分板标签。
这可以用于避免命名牌导致的极其恼人的命名问题;无法用工具添加的特殊标记也可以由此添加。[注 1]
特殊标记的作用
- Goal(目标点):目标点所在的位置会生成折跃门。若有多个目标点,这些目标点所在的位置会同时生成折跃门。
- Start(起始点):进入地图时,玩家会在起始点所在的位置出生。若有多个起始点,游戏会随机选择一个起始点作为游戏的最终出生点。
- Target(目标):用于判定折跃门的开启。
- Player(玩家):此实体被视作玩家,会在进入下一个地图时随玩家一同传送至起始点,并且在进入命运大厅时不会被清除。
- Keep(保留):进入下一个地图时,对应实体不会被清除。但在进入命运大厅时仍会被清除。
保存结构
如前所述,地面上的两个结构方块用于在完工时保存结构。
右击对应的结构方块,填写结构名称,点击“保存”,就行了。
但结构方块被埋在地下了!
不用担心。
不知道你有没有注意到,基岩地板的下面是空的。这也是特意挖空的:在正常游戏中这里的确是填满了基岩。如果在上面碰不到结构方块,那就去下面吧。
你可以开旁观者模式溜到下面,也可以使用命令/function _ct:tp_floor
,
编写主题数据包
在准备完用于主题的地图后,我们就要正式着手于主题数据包的编写。
在接下来的说明中,我们假设你已经下载了主题包模板。
导入结构文件
把你刚刚保存的结构文件[注 2]复制到主题包模板的data\<命名空间>\structure
里。
虽然brc
命名空间里有一个structure
文件夹,原则上你也可以用那个命名空间,但基于避免混淆的原则,我们还是推荐您选择其他命名空间。
新建主题
首先我们需要新建主题。
在data\brc\function\theme
文件夹里有一个名为theme.mcfunction
的模板文件,其内容如下:
# id:当前主题的id。需要额外为地图信息指定主题id。
data modify storage brc:theme_info id set value "theme"
data modify storage brc:map_info theme set value "theme"
# title:主题标题。应当为文本组件。
data modify storage brc:theme_info title set value '"title"'
# summary:主题摘要。应当为文本组件。
data modify storage brc:theme_info summary set value '"summary"'
# desc:主题描述。应当为文本组件。
data modify storage brc:theme_info desc set value '"desc"'
# start_map:此主题的起始地图。起始地图的路径为map/<id>/<start_map>。
data modify storage brc:theme_info start_map set value "map"
# 返回值用于验证
return 1
照着备注一个个修改最后一个参数就可以了。
在修改完成后,记得重命名theme.mcfunction
。游戏通过文件名称来区分不同主题。
新建地图
然后是新建地图。地图存储于data\brc\function\map\<主题ID>
文件夹下。
通常而言,这个文件夹并不存在。你首先需要在data\brc\function\map
下新建一个名称为主题ID的文件夹,然后在这个文件夹下新建一个函数文件,其名称为上文中填写的起始地图ID。
其内容可以参考在data\brc\function\map\theme
文件夹下的map.mcfunction
模板文件,其内容如下:
# id:当前地图的id。建议与函数名称一致。
data modify storage brc:map_info id set value "map"
# title:地图标题。会在载入地图时用作标题。
data modify storage brc:map_info title set value "title"
# summary:地图摘要。会在载入地图时用作副标题。
data modify storage brc:map_info summary set value "summary"
# desc:地图描述。
data modify storage brc:map_info desc set value "some description"
# content:要加载的模板的命名空间ID。
data modify storage brc:map_info content set value "brc:"
# large:地图是否占4个区块。 (true——4个 false——1个)
data modify storage brc:map_info large set value false
# next_pool:地图使用的下一个抽取池。用于决定下一个地图。
data modify storage brc:map_info next_pool set value "next_pool"
# exit_state:是否默认开启出口。(true-目标点变为折跃门;false-不处理)
data modify storage brc:map_info exit_state set value false
# exit_condition:开启出口的条件(clear-杀死所有目标实体;none-无)
data modify storage brc:map_info exit_condition set value "clear"
# death_result:死亡后的处理方式(none-无;quit:死亡后退出游戏)
data modify storage brc:map_info death_result set value "none"
# gamemode:玩家使用的游戏模式(adventure-冒险模式;survival-生存模式。不推荐填写为其他游戏模式)
data modify storage brc:map_info gamemode set value "survival"
# enable_tick:是否启用地图内游戏每刻函数(true-启用;false-不启用)
data modify storage brc:map_info enable_tick set value false
在创建完初始地图后,试着按照相同的格式创建其他地图信息函数。
地图用函数
仅用于指定地图的函数应当放置于data\brc\function\map\<地图ID>
文件夹中。
这不仅是为了方便管理,在此文件夹下的特殊函数会在游戏中自动加载:
load.mcfunction
:在处理地图时加载。tick.mcfunction
:在当前地图内每刻加载。仅在启用相关配置时生效。
新建抽取池
下一个抽取池存储于data\brc\function\next_pool
文件夹下。
下一个抽取池函数可以自由填写,只需保证执行过地图信息函数(例如brc:map/theme/map
)即可。
如果你不知道怎么写,这里提供了一个最简单的写法:直接执行地图信息函数。其位于data\brc\function\next_pool\next_pool.mcfunction
,内容如下:
#在结束此函数时必须运行一个地图信息函数
function brc:map/theme/map
最后一个抽取池怎么办?
凡是游戏,一定会有一个结局。而到了这个结局地图,你依然需要填写抽取池。这时候该怎么办呢?
这里建议将最后一个抽取池连接到命运大厅。使用游戏函数menu
即可。
此外,请记得提醒玩家这是结局地图:如果他们在不知情的情况下回到了大厅,他们可能会以为哪里出错了。
导入并测试
在完成一切工作后,你需要测试主题包能否正常使用。
如同正常游戏一样,进入大厅,享受游戏即可。如果一切正常,你可能会遇到意想不到的Bug,在你耗尽心思修完Bug后,你的工作就宣告完成了。
注释
主要页面 | |||
---|---|---|---|
创作者指南 | |||
数据包 |
|