全站通知:

DecalRegistry

阅读

    

2024-04-03更新

    

最新编辑:分隔符个awa

阅读:

  

更新日期:2024-04-03

  

最新编辑:分隔符个awa

来自蔚蓝WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索
页面贡献者 :
-UnderDragon-
Myn_Gen

在制图过程中,想必大家经常碰到类似于这样的问题:

为什么在别人的地图中,装饰可以附着在机关上?

为什么别人的装饰可以摆动,但是在文件中却没有相应的动画?

为什么有些装饰能发光?为什么有些装饰能变化?诸如此类的问题。

这些问题的答案,全部都是因为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 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