适用于RA2的CSF文件格式

舰队的偶像-岛风酱!.NetRA2.NetC#RA2大约 2 分钟约 625 字

适用于RA2的CSF文件格式

什么是CSF文件?

CSF是存储游戏所需要的所有字符串资源的文件。

它的结构是什么样子的?

根据现有的资料[1]描述,它分为两部分,文件头和主体部分。

文件头

CSF的文件头的长度是固定的,它有24个字节大小。

offsettype描述
0x00uint8[4]文件的标识符,它永远是 FSC
0x04uint32CSF文件的版本。通常情况下,它应该始终为3
0x08uint32标签数量。文件中包含的所有的标签的总数。
0x0Cuint32字符串数量。一般情况下,它应该与标签数相同。
0x10uint32保留。始终为0
0x14uint32使用的语言。这是一个枚举。

语言

0英语(美国)
1英语(英国)
2德语
3法语
4西班牙语
5意大利语
6日语
7Jabberwockie
8韩语
9中文

主体

CSF文件的主体由若干个标签构成

通常情况下,字符串标签由一个标签头和若干字符串主体构成。

标签头 字符串主体 ...

标签头(Label Header)

offsettype描述
0x00uint8[4]标签的标识符,它永远是 LBL
0x04uint32字符串数量。一般情况下,它应该为 1
0x08uint32标签名的长度。
0x0Cuint8[]标签名字符串。字符串不以\0结尾。

注意

虽然标签名中允许存在空格(0x20),但我不建议你这样做。

字符串值(Value)

offsettype描述
0x00uint8[4]字符串值的标识符,它应该为 RTSWRTS
0x04uint32字符串值长度。
0x0Cuint16[]字符串值字符串。字符串不以\0结尾。

提示

字符串值是经过特殊处理过的UTF-16(LE)编码的。

注意

当字符串值的标识符为WRTS时,表示这个字符串包含额外内容。

关于解码

通常情况下,您只需要按位取反即可。

以C#为例

unsafe void Decode(void* data, int dataSize)
{
    for (int i = 0; i < dataSize; i++)
        data[i] = ~data[i];
}
额外值(Extra)
offsettype描述
0x00uint32额外值长度。
0x04uint8[]额外值字符串。字符串不以\0结尾。

参考链接


  1. ModEnc ↩︎