重生马老弟(2)关键
很快的,我来到了
script-key-4K.mui
的编写。“4.0真的是一个奇怪的版本。”我如是道。因为文件名其中4K的K必须大写,否则会造成皮肤无法正常使用的问题。“开源啊开源,你真的是让人又爱又恨。”我无奈地叹了口气,继续进入编写状态。
script-key-4K.mui
UTF-8*
1║
#
Original Author:
2║
#
Ported by iTristan/Mr-Mania
3║
@version
4.0.0 4║
@include
skin.ini.mui
没啥好说,跳
5║_mania-stage-left
6║ anchor=8
7║ szie=0,480
8║ pos=
Nᴾᶜᵉ₁
,0
9║ zindex=1
10║ tex=mania-stage-left.png
11║_mania-stage-right
12║ anchor=6
13║ size=0,480
14║ pos=
Nᴾᶜᵉ₁
+{4xColumnWidth}+{3xColumnSpacing}
15║_mania-stage-bottom
16║ anchor=6
17║ size={4xCloumnWidth}+{3xColumnWidth},0
18║ pos=
Nᴾᶜᵉ₁
,0
19║ zindex=0
20║ tex=mania-stage-bottom.png
21║_mania-stage-hint
22║ anchor=3
23║ size={4xColumnWidth}+{3xColumnSpacing},0
24║ pos=
Nᴾᶜᵉ₁
,{HitPosition}
25║ zindex=8
26║ tex=mania-stage-hint.png
这一部分是皮肤修饰元件,跟着下面两个也是,但下面需要小小讲解一下
上一章要求计算的百分比数字就是这个Nᴾᶜᵉ₁,后面所有出现的地方我都会标红111
27║_mania-stage-play_bg-[1-4]
28║ anchor=6
29║ size={ColumnWidth},480
30║ pos=
Nᴾᶜᵉ₁
${ColumnWidth}+{ColumnSpacing},0
31║ zindex=0
32║ tex=texture₁.png
33║# fix=1
34║_mania-stage-background
35║ anchor=6
36║ size={4xColumnWidth}+{3xColumnSpacing},480
37║ pos=
Nᴾᶜᵉ₁
,0
38║ zindex=0
39║ tex=texture₁.png
这里是轨道背景,两个元件其实是二选一的情况:当ColumnSpacing=0时,play_bg-[1-4]不选;当ColumnSpacing>0时,background不选。两个元件的核心是texture₁.png。首先这张png图的像素为1x1;回到OSU侧skin.ini文件并找到Colour#:[R,G,B(,a)],通过简单的染色,我们便可以将这4个值用一张png图片表示出来(不知道a是什么的笨蛋,a是透明度,取值也是0-255),在mui里将图片进行拉伸,就能还原OSU侧的效果。
大部分OM皮都不会改这个东西,而是默认全黑,如果你在skin.ini里找不到Colour#属性,用black.png就行了
噢噢对了,OSU皮肤如果素材缺少会使用默认皮肤的素材,使用模板时如果发现这种情况去原皮里面找
fix这种UIS手册没有的东西好像不太稳定,所以需要background元件
接下来是功能性元件
40║note-[1-4]
41║ anchor=4
42║ size={ColumnWidth},
Nₑ
43║ pos=
Nᴾᶜᵉ₁
+{Half_ColumnWidth}${ColumnWidth}+{ColumnSpacing},480+{Half_ColumnWidth}
44║ pos2=
Nᴾᶜᵉ₁
+{Half_ColumnWidth}${ColumnWidth}+{ColumnSpacing},{HitPosition}+{Half_ColumnWidth}
45║ tex=
46║ tex2=
47║ tex3=
48║ tex5=
49║ type=2
50║ type2=0
51║ toggle=1
52-66║
#留空,若有需要则分别填入note2-4 tex1-5对应图片
为什么toggle=1呢?因为要还原OM长条摁下时吸附到判定点的特效。这里我还是喜欢MaV里可选的编辑,开源这里你做得好啊
size中的Nₑ不能为0,因为需要保证tex3(即面尾)的正常显示
tex3与tex的长宽比必须一致,否则会导致显示问题。一般来讲note的宽高比都是1:1,这个时候Nₑ处直接填写{ColumnWidth}即可
若note图片长宽比不是1:1或WidthForNoteHeightScale与Columnwidth不一样,则需要对面尾进行修改。前者具体修改方法为新建图片,使图片长宽比与note图片相同,然后修改OM侧的面尾图(上下翻转),将面尾图下切线与新建图片的中线对齐,并将面尾图上调一个像素的距离(若直接对齐中线会导致面身与面尾有1像素的重叠,当然如果面尾是长方形的就没关系了),具体见下图1
小tip:如果你想面短一点,图2是一种效果一般但是比较简单的做法。
(两图绿色部分表示透明)
67║key-[1-4]
68║ anchor=3
69║ size={ColumnWidth},0
70║ pos=
Nᴾᶜᵉ₁
${ColumnWidth}+{ColumnSpacing},{HitPosition}+{Half_ColumnWidth}
71║ zindex=
#7 or 11 //取决于skin.ini里KeysUnderNote取值
72║ tex=
73-78║
#留空,同note元件
79║press-[1-4]
80║ anchor=3
81║ size={ColumnWidth},0
82║ pos=
Nᴾᶜᵉ₁
${ColumnWidth}+{ColumnSpacing},{HitPosition}+{Half_ColumnWidth}
83║ zindex=
#8 or 13 //同key元件
84║ frame=
85║ frame2=
86║ interval=128
87-96║
#留空 //同上
这里我将OM的key拆成了两个元件来写。众所周知,OM在你按下按键后,无论你按下的时长,key总是会持续一段时间的按下显示。这种情况下连续键入不受影响,但视觉效果就是key似乎没有抬起过一样。我觉得很有特色,而且通过press元件的frame2(松手动效)刚好可以还原,于是就做了。
仅限于OM皮有press或key其中一个的情况,如果两个都有,那还是牺牲还原度key写key,press写press(可以看我往期作品)
这方面还是MaV做得好,献上爱心❤
注意,OM侧key的拉伸十分诡异,规律似乎仍没有完全摸清,基本上都是改一点进游戏看一下,移植的时候建议先看看OM侧的key在游戏里大概长什么样子,再直接编辑图片拉伸成对应的形状,最后Ma的等比例缩放会解决剩下的东西
97║bar
98║ anchor=6
99║ size={4xColumnWidth}+{3xColumnSpacing},N₆
100║ pos=
Nᴾᶜᵉ₁
,{HitPosition}
101║ pos2=
Nᴾᶜᵉ₁
,{HitPosition}
102║ zindex=
#9 or 14 //唉好傻逼噢这个keysundernote
103║ tex=bar.png
bar.png的绘制跟前面texture₁.png的绘制大差不差,OM侧对应的属性是ColourBarline: [R,G,B(,a)]
104║judge-1
105║ anchor=4
106║ size=
107║ pos=
Nᴾᶜᵉ₁
+{2xColumnWidth}+{1.5xColumnSapcing},{ScorePosition}
108║ zindex=15
109║ frame=mania-hit/0-3
110║ interval=24
111║ type=1
judge元件
讲个冷知识,主播曾经试图手搓序列帧还原OM侧的判定跳动效果,当时的笔记如下:一至三级判定:第一帧:原图;第二帧:原图大小x0.95;第三帧:原图大小x0.9;第四帧:原图大小x0.85;第五帧至第七帧:原图大小x0.8;;四级判定(miss):第一帧:原图旋转-5°;第二帧:原图不旋转,大小x0.9;第三帧:原图旋转5°,大小x0.7;第四到第五帧:原图大小x0.7
有大佬有OSU判定序列帧的工程(小hundred),我最后还是找了他帮忙(人很好说话很善良)
唉我那时好蠢
112║score-combo
113║ anchor=4
114║ fsize=
115║ pos=
Nᴾᶜᵉ₁
+{2xColumnWidth}+{1.5xColumnSpacing},{ComboPosition}
116║ pos2=N₇px,0
117║ zindex=16
#是的判定和combo的覆盖关系就是combo在上,这个我也研究过
118║ frame=combo/0-9
119║hit-[1-4]
120║ anchor=4
121║ size={ColumnWidth},0
122║ pos=
Nᴾᶜᵉ₁
+{Half_ColumnWidth}${ColumnWidth}+{ColumnSpacing},{HitPosition}+{Half_ColumnWidth}
123║ zindex=12
124║ frame=0/0-0
125║ frame2=h1/0-0
126║ frame3=h1/0-0
127║ interval=64
128-139║
#留空,同
这里是模板的一个重点:通过hit元件来还原OM侧长条吸附效果。这种方法并不是我原创,而是我通过学习一位前辈的作品复现出来的(忘了在哪)
在hitposition比较高的皮肤里不太好用,例如我的bojii转皮(新一点的那个)
如果OM皮有hit那就要做出取舍,保留效果还是hit二选一
我曾经用过hit来还原press,但效果不太一样,见仁见智吧。你如果想也可以试着做一下
!!!h1-0.png绘制要点!!!
若KeysUnderNote取值为0,则
新建空白图片。检查note图片与key图片宽多少像素,选择较大的那一个数值作为图片的宽,高留出足够的空间
将note图片居中放置在原来的图片中,保持note的宽高比不变
新建图层,使新图层在原图层下面
在新图层中绘制一个矩形,颜色与轨道背景相同(轨道不能透明,如果透明效果会很影响观感),宽度与图片相同,高度为图片一半
将矩形上切线与图片中线对齐
保存图片
若KeysUnderNote取值为1,则需新建图层,使新图层位于矩形图层与note图层之间,再在新图层里放置按下后key的图片
140║_scorebar-bg
141║ anchor=0
142║ size=
143║ pos=
Nᴾᶜᵉ₁
+{4xColumnWidth}+{3xColumnSpacing},0
144║ zindex=11
145║ tex=scorebar-bg.png
146║ rotate=-90
147║score-hp
148║ anchor=0
149║ size=
150║ pos=
Nᴾᶜᵉ₁
+{4xColumnWidth}+{3xColumnSpacing}+
Y
,
X
151║ zindex=12
152║ tex=scorebar-colour.png
153║ type=0
154║ rotate=-90
这个
XY
看下面注释
首先hp与hp背景的大小为它们的像素乘以三分之一,得到的数值为元件size属性数值
然后打开图片编辑器,选中hp背景
插入hp图片,手动对齐hp与hp背景
查看hp图片左上角坐标,分别记录XY的值
将两个值分别乘以三分之一,得到
XY
得到的这两个就是模板hp元件里pos属性的
XY
155║score-score
156║ anchor=2
157║ fsize=26
158║ pos=100%-5,100%
159║
# pos2一般来讲这一行不用写
160║ zindex=12
161║ frame=score/0-9
162║ interval=256
163║score-acc
164║ anchor=5
165║ fsize=14
166║ pos=100%-5,100%-35.75
167║
#Pos2同
168║ xindex=12
169║ frame=score/0-11
170║ interval=150
171║@define 1 N₇
172║_progress1
173║ anchor=4
174║ tex=hitcircle.png
175║ size=2.66,2.66
176║ pos=100%-{1},100%-35.75
177║progress
178║ anchor=4
179║ type=0
180║ opacity=30
181║ tex=s0-0.png
182║ size=22.66,22.66
183║ pos=100%-{1},100%-35.75
184║ zindex=12
185║_progress
186║ anchor=4
187║ tex=approachcircle.png
188║ size=20,20
189║ pos=100%-{1},100%-35.75
190║ zindex=12
这里N₇是圆饼进度条中心离屏幕最右侧的距离,打开游戏一边看一边改数值吧,这样反而比计算来的快。
“终于完成了!”我这样喊道。“虽然还没有优化到极致,但对于这个时代来说已经是非常超前的作品了。倘若我将模板公布出去,必定会迎来整个skin圈子的动荡。”
接下来我进行了一些操作:先是绘制出我原本作为经典的头像,其次输入了记忆中的各个皮肤交流群群号,有的已经发出了申请,有的却还没建群。不由得让我感慨那时UIS的冷清。打包好模板,我不禁心想:pc皮在我模板制作好后就已经被我预定下了半壁江山,那么下一个目标就是连隐世后的幻灭都露面赞叹的自4k用改皮了。
我向未来张开双臂,感受属于我独有的机缘,不禁笑容绽放。