DecalRegistry
阅读
2024-04-03更新
最新编辑:分隔符个awa
阅读:
更新日期:2024-04-03
最新编辑:分隔符个awa
在制图过程中,想必大家经常碰到类似于这样的问题:
为什么在别人的地图中,装饰可以附着在机关上?
为什么别人的装饰可以摆动,但是在文件中却没有相应的动画?
为什么有些装饰能发光?为什么有些装饰能变化?诸如此类的问题。
这些问题的答案,全部都是因为mapper赋予了这些装饰物特殊的属性,而为了实现这些属性,本文将会介绍一个神奇的工具,装饰物注册表(Decal Registry)。
注册表文件建立
如果需要在你的地图中开启装饰物注册表,只需要在你的Mod文件夹(Celeste/Mods/你的Mod文件夹名)内,everest.yaml旁边新建一个文本文档,之后将创建的这个文本文档xxx.txt的名字改为DecalRegistry.xml(注意大小写)即可。
注册表书写示例
装饰物注册表为xml格式,但是在windows系统中可以使用系统自带“记事本”打开。
下面提供一个装饰物注册表,即上述创建的DecalRegistry.xml文件的示例:
<decals>
<decal path="path1">
<function parameter1="value1" parameter2="value2" parameter3="value3"/>
</decal>
<decal path="path2">
<function parameter="value"/>
</decal>
<decal path="path3">
<function parameter="value"/>
</decal>
......
</decals>
下面将针对上述内容进行解析。
xml基本结构
<decals>
......(此处插入:装饰的xml录入语句)
</decals>
两行构成装饰物注册表的基本结构,<decals>置顶,</decals>置底。
装饰的xml录入语句
在上述xml基本结构的中间省略号处,可以插入装饰的xml录入语句。
针对一个装饰的xml录入语句如下:
<decal path="path">
<function parameter="value"/>
</decal>
path :此处填写装饰文件相对于Celeste/Mods/你的Mod文件夹名/Graphics/Atlases/Gameplay/decals的位置
举例 :你的装饰文件如果放在Celeste/Mods/yourMap/Graphics/Atlases/Gameplay/decals/yourName/yourMap文件夹内,文件名叫做flower.png
此处的写法就应该是:
<decal path="yourName/yourMap/flower">
function :属性名称,下一节介绍。
parameter :针对需要的function底下的参数进行设置,下一节会做介绍。
特别注意:每一行function的末尾一定是以/>结尾。
装饰注册表属性函数
这一节我们将会展开讲述所有可用的装饰注册表属性函数,对应前文的function部分。
animation 和 animationSpeed
<animation frames="帧数"/>
<animationSpeed value="整数"/>
动画控制器, 可以控制你的decal动画播放.
frames中的帧数对应动画的数字序号, 假设你的动画有60帧, 你的文件命名应当是name00.png一直到name59.png, 而这里面每一帧的序号就分别是0到59.
frames书写是每个数字使用英文逗号隔开, 同时可以使用如下符号:
m-n, 表示从序号为m的帧播放到序号为n的帧.
m*n, 表示将序号为m的帧播放n次.
value单位为帧/秒.
banner
<banner speed="小数" amplitude="小数" sliceSize="整数" sliceSinIncrement="小数" easeDown="true或者false" offset="小数" onlyIfWindy="true或者false"/>
拟合函数图像 f(x)=amplitude*sin(sliceSinIncrement*speed+offset)
等价于 f(x)=Asin(wt+p)
floaty 和 smoke
<floaty/>
<smoke offsetX="小数" offsetY="小数" inbg="true或者false"/>
offsetX和offsetY都是基于装饰的画布中心来计算的
parallax
<parallax amount="小数"/>
这个参数可以让装饰有视差, 和bg一样, amount参数可正可负的, 相当于bg从scroll=1开始计算
sound
<sound event=""/>
event里面填event名字
bloom
<bloom offsetX="小数" offsetY="小数" alpha="小数" radius="小数"/>
发光
offset 从画布中心开始计算
light 与 lightOcclude
<light offsetX="小数" offsetY="小数" color="hex" alpha="小数" startFade="整数" endFade="整数"/>
光源 >>>alpha<<< startFade >>>alpha衰减到0<<< endFade
<lightOcclude x="整数" y="整数" width="整数" height="整数" alpha="小数"/>
overlay
<overlay/>
让装饰变成类似于材质贴图的作用
scale
<scale multiply="小数" multiplyY="小数"/>
装饰放缩
randomizeFrame
<randomizeFrame/>
装饰会从随机的一帧开始
coreSwap
<coreSwap coldPath="" hotPath=""/>
装饰可以根据8a的冷热模式来变化
flagSwap
<flagSwap flag="" offPath="" onPath=""/>
path从Gameplay往后填写
mirror
<mirror keepOffsetsClose="true或者false"/>
给装饰添加一个镜面反射效果, decals/modname/mytexture.png 对应的镜面贴图是 mirrormasks/modname/mytexture.png
用彩色图像来定义镜面的远近, 红色值=X方向偏移, 绿色值=Y方向偏移
白色(颜色值为255)表示最近, 黑色(颜色值为0)表示最远
staticMover
<staticMover x="整数" y="整数" width="整数" height="整数"/>
装饰连接于实体的判定箱, +Y 方向向下
scared
<scared hideRange="整数" showRange="整数" hideFrames="帧数" showFrames="帧数" idleFrames="帧数" hiddenFrames="帧数" />
物体 >>> hideFrames <<< hideRange --- showRange >>> showFrames <<< 远处
solid
<solid x="小数" y="小数" width="小数" height="小数" index="整数" blockWaterfalls="true或者false" safe="true或者false"/>
给装饰加一个可以交互的碰撞箱, 但是不能和container起作用
x和y从装饰中间开始计算, +Y方向向下
index是交互的材质音效
safe用于判定草莓能否被收集
index: None = 0, Asphalt = 1 ,Car = 2 ,Dirt = 3 ,Snow = 4 ,Wood = 5 ,Bridge = 6 ,Girder = 7 ,Brick = 8 ,Zip Mover = 9 ,Space Jam (Inactive) = 11 ,Space Jam (Active) = 12 ,Resort Wood = 13 ,Resort Roof = 14 ,Resort Platform = 15 ,Resort Basement = 16 ,Resort Laundry = 17 ,Resort Boxes = 18 ,Resort Books = 19 ,Resort Forcefield = 20 ,Resort Clutterswitch = 21 ,Resort Elevator = 22 ,Cliffside Snow = 23 ,Cliffside Grass = 25 ,Cliffside Whiteblock = 27 ,Gondola = 28 ,Glass = 32 ,Grass = 33 ,Cassette Block = 35 ,Core Ice = 36 ,Core Rock = 37 ,Glitch = 40 ,Internet Café = 42 ,Cloud = 43 ,Moon = 44
depth
<depth value="整数"/>
可以规定装饰的层级
values: BGTerrain = 10000 ,BGMirrors = 9500 ,BGDecals = 9000 ,BGParticles = 8000 ,SolidsBelow = 5000 ,Below = 2000 ,NPCs = 1000 ,TheoCrystal = 100 ,Player = 0 ,Dust = -50 ,Pickups = -100 ,Seeker = -200 ,Particles = -8000 ,Above = -8500 ,Spinners = -8500 ,Solids = -9000 ,FGTerrain = -10000 ,FGDecals = -10500 ,DreamBlocks = -11000 ,PlayerDreamDashing = -12000 ,Enemy = -12500 ,FakeWalls = -13000 ,FGParticles = -50000 ,Top = -1000000 ,FormationSequences = -2000000