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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。
: S0 I, _: u+ I% m" a4 x: P看了一下scummvm的代码,看懂了大致的流程。3 n, ^. R. D: ]% M

8 [7 Q4 L3 p9 y8 P断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。
' R" k, a# B6 ]我下面先解说一下字体资源文件。7 w* ^7 |  }. F* o3 d
1 R6 V* R  }) d7 t& [- |8 V
经过仔细观察源代码,我发现了一个资源文件的导出函数。# _& q1 e/ w0 f% Y& w. J. D
void ResMan::dumpRes(uint32 id) {
; w3 h% s$ c0 l5 r9 t) P7 U    char outn[30];# A0 ]2 O3 `; y$ m2 h3 E9 p
    sprintf(outn, "DUMP%08X.BIN", id);* H4 A( \! E8 S. I8 z" o9 s8 t
    Common::DumpFile outf;- Z/ A" S$ }. `7 [6 p. X6 k$ W
    if (outf.open(outn)) {
2 k. x: C" e' K& f# ?5 h( Z3 [        resOpen(id);
, L3 F5 V# L0 M/ R' E        MemHandle *memHandle = resHandle(id);8 f# Q  w) l$ s
        outf.write(memHandle->data, memHandle->size);
/ }: K; k  A+ b" a2 D+ f* z! R  K        outf.close();
& ~8 ^- A& d1 S$ ~/ ]7 k        resClose(id);
% m) R. q* C7 c    }
* N, y, d/ _& T- b' Y; O1 j}% ~: v" c! \1 v7 w5 X
8 W. u' Q; |9 F- H) d2 Q4 v  C' K
我又找到了一些各种语言的资源文件的ID
6 ?+ s* q" \& P! `#define GAME_FONT            0x04000000
0 Y) j+ n5 h$ z4 H) ~7 J9 q- Q1 W0 c: @#define OTHER_SR_FONT         0x04000001
8 P) |9 v  a' c& \7 O, ?#define OTHER_SR_REDFONT         0x04000002, D& w- J. G8 O4 a2 n, w. l
#define SR_DEATHFONT        0x04000003/ S% Z1 S7 r* h! R5 G
#define CZECH_GAME_FONT        0x04000004$ i* Q4 r1 P+ i+ {& ?
#define CZECH_SR_FONT        0x04000005
  v: {: u; b0 d: X#define CZECH_SR_REDFONT         0x04000006
) ], r; Z6 b# b* z1 A- ?#define CZECH_SR_DEATHFONT         0x04000007( u" X. i, Y: O

" M& V( P' _/ _; Z. R这样,我在调试模式下顺利导出了一个字体资源文件。+ }, d" y( ]$ M/ e9 k1 r
接下去,我分析了一下字体资源文件的格式,制作了一个资料。8 y, h9 V2 ~0 m
看了这个资料很容易就能明白。
$ N$ h6 _  a$ ]' I' S- ] ; l4 r  V$ j& t6 n5 @* r
5 S; i4 A) w+ D0 n4 W
从源代码里面找到的资源文件头和每个桢的头的结构定义如下,
$ v8 M& m1 ?6 r& q0 }可以和上面的图一起对照起来看。
1 T1 I: }7 A  v. F5 T, m* }# }* ?  ]/ i
struct Header {# v- V0 Y6 @- l  y4 r
    char type[6];
1 [8 N; G  F, W* \! l    uint16 version;
, i  p9 k! H# l) `    uint32    comp_length;; V& B/ l" _; i/ v# J
    char    compression[4];
! Z2 [' K- d) H  n* J    uint32    decomp_length;; X! i$ F" X3 `* K# Z) d4 p" g
} PACKED_STRUCT;( }( A, D! ], z0 I4 I  L$ O3 U

; R  o( L8 R: T) K9 e2 f4 {8 ~struct FrameHeader {
  }; Q! Y, Y' W& ~- h6 C    uint8 runTimeComp[4];
& @  n! j3 g$ S8 D4 r* Q3 C    uint32 compSize;
2 C6 o; b, H" r6 p    uint16 width;, L0 O$ a& i  F$ W3 s+ X
    uint16 height;
, m: f2 M( x/ L: t) s    int16 offsetX;6 ]; _; b+ w4 [  q$ T' i
    int16 offsetY;1 G% ~9 D7 Q  w4 C0 W6 r/ N
};
% t: e1 p2 ]+ k2 g% H$ K
/ l: C  D' `6 U' c字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。$ y6 e3 s$ \; |! t, Q
每个字模用一个字节来表示一个像素。0 T' G: s: p4 m8 ~! O0 N, _6 o
背景像素 0x00+ l4 j2 T- h/ B" j
边框像素 0xC8
) s; l* T7 [" o7 m+ n, s字体像素 0xC1
1 K6 {' z, b7 X" K& h6 a/ M2 Z% ~$ ^5 C' j9 X' U: Y. Y% C
下面这张图片可以使大家对字体的样子有个感性的认识。6 Y8 o( `" ^# B, z0 R2 J
为了看得清楚,我把 0xC8替换为一个黑色的小方块。$ j& l/ T, f4 ~& e2 }6 h4 t7 E

本帖子中包含更多资源

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

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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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