设为首页收藏本站官方微博

汉化资料 【断剑1汉化项目】字体资源文件彻底解说

[复制链接]
查看: 2006|回复: 0
打印 上一主题 下一主题

[汉化资料] 【断剑1汉化项目】字体资源文件彻底解说

跳转到指定楼层
楼主
发表于 2009-9-12 15:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【断剑1汉化项目】字体资源文件彻底解说

最近应C版的要求开始研究断剑1的汉化。& F/ W2 m" M1 Z: R4 B, m5 x
看了一下scummvm的代码,看懂了大致的流程。
! C# C8 {6 t: W7 |. G4 b, ?) Y
, t' Z8 G& C* W6 S2 Q* r  y: ]$ y断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。4 _8 E3 h' P; i: _- I
我下面先解说一下字体资源文件。
5 S; h% R) {0 e6 P; R1 ^9 W4 [; C# c$ q# q; D- D! I2 a5 {4 q5 J7 d& v
经过仔细观察源代码,我发现了一个资源文件的导出函数。4 O% n: N2 a$ i  ?
void ResMan::dumpRes(uint32 id) {
  n( N, Z+ T$ W2 G    char outn[30];
7 \0 b9 Z" P8 b1 N    sprintf(outn, "DUMP%08X.BIN", id);8 V  a; ?( W9 ~* _/ _6 J
    Common::DumpFile outf;9 b5 V0 _" w: S
    if (outf.open(outn)) {/ q: z) \: D: K& ]% w" z
        resOpen(id);
6 }, q8 J0 a- k        MemHandle *memHandle = resHandle(id);
4 w4 O1 c4 @+ j1 r  X% t& G        outf.write(memHandle->data, memHandle->size);! u7 ]; q8 y  V$ X  C' K' ~
        outf.close();
" D$ V# b. @& M; q, _( l* P! c        resClose(id);
7 Z; |& m$ d' c. @, F" z1 y) {    }5 d" ~2 I3 ~7 v4 j1 i8 D
}
7 X; x  P) M. G4 P2 h  p' y) \# O+ y
我又找到了一些各种语言的资源文件的ID& {- F3 ?1 y& u$ n9 J, p
#define GAME_FONT            0x04000000
: e" n3 |; m0 Y0 E/ N" E# B#define OTHER_SR_FONT         0x04000001
3 z$ ^3 X- v) H, e#define OTHER_SR_REDFONT         0x04000002
2 S" Z+ ]$ |7 L#define SR_DEATHFONT        0x04000003
* \+ y( F+ f. M7 R, }1 d% V5 X#define CZECH_GAME_FONT        0x04000004! V- P/ @  Z# z; E+ o
#define CZECH_SR_FONT        0x040000058 t" c" z* d' z$ n. k) V. `; P. W
#define CZECH_SR_REDFONT         0x04000006
" O4 \0 _$ R$ c$ D% y#define CZECH_SR_DEATHFONT         0x04000007
- R8 G; `! @7 F9 X4 C
9 @* _" Z( A9 T  e4 [这样,我在调试模式下顺利导出了一个字体资源文件。
& L, i% z# X7 x+ T! l& J  t接下去,我分析了一下字体资源文件的格式,制作了一个资料。
/ a. Q8 x2 ]" Q$ T" @8 `( o% X: s看了这个资料很容易就能明白。$ f' O7 u% M3 V* }

( ^. k8 W8 [( s
5 E9 `5 d8 x3 h- v  V从源代码里面找到的资源文件头和每个桢的头的结构定义如下,
) M1 C  Z! c- l0 H' s$ {: R2 H可以和上面的图一起对照起来看。
1 h* m& s# ^' r6 B" r7 H9 k4 y( U1 U3 W
struct Header {
7 o/ v+ U6 L; q9 S% X/ I% d8 Q    char type[6];
$ y  ^) `6 j: i4 ~    uint16 version;! V% T% A9 [6 Y" u
    uint32    comp_length;
9 `: V2 p/ y# B6 S- f7 I0 E    char    compression[4];
1 o: K2 w4 n0 @  d9 s    uint32    decomp_length;
' S. x8 N: w$ }3 T+ K* {1 o2 _6 g} PACKED_STRUCT;
+ s- O0 Z' j  W# L, S8 @' x* k0 v* y" j. p
struct FrameHeader {
! n$ D! D& c$ W4 R: f. [3 p: w    uint8 runTimeComp[4];* n6 G& ~3 \, M
    uint32 compSize;
, V9 K! S; B7 _/ ~    uint16 width;
/ t8 W& z! f; r    uint16 height;4 z: R! U; C; Y. i& k8 @, g
    int16 offsetX;6 s' h& X& L9 s
    int16 offsetY;- b# P# T. e! t& Z9 t8 n
};; Z, ?. @$ N/ d. k3 `
: X2 b( e% ]4 V% z$ d2 M! v
字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。
3 F; A" b. x. H( E每个字模用一个字节来表示一个像素。% f0 r( I  B# h- A  ~: B+ Z# R/ E
背景像素 0x003 `- [4 F, q1 l) j4 f; R
边框像素 0xC8
9 ?0 c2 R' c7 u; e字体像素 0xC19 `6 X6 V  q% |7 D# ?

; f" z: U) K- ]$ V2 m下面这张图片可以使大家对字体的样子有个感性的认识。
( `) a7 z, @1 u为了看得清楚,我把 0xC8替换为一个黑色的小方块。, B) c& o/ B) H, W

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表