MUGEN-关于人物变色

本人对于人物P数变色的相关研究的整理(其中部分内容纯属猜测,如有错误,望指教)

Def中的pal定义

在人物Def文件中,Files下允许定义

pal{1,2,3,4,5,6,7,8,9,10,11,12}=actFileName

通过外部色表文件(act),人物可自由按照Palno变色,具体的规则:

对于WinMugen:

若存在图像0,0,则图像0,0强制变色,而对于其他图像,若此图像原色表(即在SFF内部储存的色表)与图像0,0的原色表相同,则变色,变色的图像不会应用原色表而是应用外部色表。若图像0,0不存在,此时所有图像都不变色,当然有一特例:
在WinMugen中,图像9000,0强制应用外部色表文件,即任何情况小头像都会变色。

2019-5-25:添加:若图像原色表与图像9000,0原色表相同,则变色

关于SFF内部储存的色表,一般情况下图像0,0都被建议为独立色表,这一点无论在FF,还是在VSMan都是共识,但是有部分人物的图像0,0是共享色表,则对于此类人物最后依旧是以0,0所共享的色表为准。用FF打开此类人物的SFF,再次保存时图像0,0都会被处理为独立色表(使用第一张色表),在FF显示时同理。

值得注意的是,在FF显示人物图像时,会附带读取人物目录下的外部色表文件(act),实际上右侧色表栏的色表并不是实际SFF内存所储存的色表。若要观察实际的内部色表应用时的图像,请使用VSMan-FileReader。

对于1.X:

若人物SFF为V1.01,则与WinMugen相同,但9000,0此时一般化处理。
若人物SFF为V2.00或者V2.01,则人物Def内定义的外部色表文件(act)会被读取到SFF内部色表(色表组号为1,索引号为pal后的序号),若SFF内部已经存在此序号,则不覆盖。除此之外,mugen不会做任何其他处理。

那么问题来了,1.X如何做到人物变色呢?

对于使用V2.00或者V2.01的人物,mugen仅将act读取到SFF内部,而不会像Win那样进行变色,实际上这时变色由控制器RemapPal来完成。自动变色的代码存在于人物的公共状态文件中,即stcommon,此文件不指定则默认为主程序自带的common1.cns:

[State 5900, 3] ;Change palette
type = RemapPal
trigger1 = 1
source = 1,1
dest = 1,palno

关于控制器RemapPal的相关说明请看千寻Sctrl词典,代码中的palno即当前人物的P数,它由选人时的按键决定,在1.X中按键与P数的映射并不是一成不变的,它允许被自定义在人物Def内:

[Palette Keymap]
x = 1 ;Press button X to select palette 1, etc.
y = 2
z = 3
a = 4
b = 5
c = 6
;x2 = 7 ;Hold Start and press button X for palette 7, etc.
;y2 = 8
;z2 = 9
;a2 = 10
;b2 = 11
;c2 = 12

即由Palette Keymap定义什么键对应什么P数,上面提到的外部色表被读取到SFF内部后,通过按键对应的Palno与stcommon中的RemapPal控制器,人物便实现了变色。

当然不同的Player并不能具备相同的palno。

关于RemapPal

通过上面的研究可以知道,1.X中人物的变色更加开放,人物作者可以通过控制器RemapPal自由变色,色表的数量和时间不再受限,唯一的限制也仅有RemapPal映射的数量。