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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。) {! R- |- q* [" F
看了一下scummvm的代码,看懂了大致的流程。
+ F2 A2 a; D/ |- Q2 ~, V
) S' v9 j% l; g- I! \/ r  A断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。
: E8 O7 `$ ^( c( d我下面先解说一下字体资源文件。
9 O2 j0 B9 _1 ]! S8 L& G0 ~: ^* q
$ m7 E# ]+ R. @, R经过仔细观察源代码,我发现了一个资源文件的导出函数。
7 s3 q. @! k+ U, J- ~void ResMan::dumpRes(uint32 id) {1 s! f: ~3 j- s8 g$ p( J* N+ {
    char outn[30];
0 ?: D3 n  E# H8 w6 d% `8 g3 [6 u; w    sprintf(outn, "DUMP%08X.BIN", id);
1 g' z) p  b1 Y% f    Common::DumpFile outf;8 D$ b9 m" q  m: F) P* D
    if (outf.open(outn)) {# v; ~( a3 W- t8 d, t5 \! }5 |; _
        resOpen(id);. ~4 M/ a" G6 z) b- p. f
        MemHandle *memHandle = resHandle(id);) J3 m: V) U0 Z- N7 o6 d# g3 p* b8 E
        outf.write(memHandle->data, memHandle->size);
9 ]+ |: E# r- S: D* e0 w        outf.close();
5 }) o7 j& ?4 @  d        resClose(id);& n4 T/ S% I7 l3 x6 Y# Q
    }
8 R( U# q- p! {5 I}0 k0 l6 v+ N2 y. I
. W0 g: U1 u( Q8 Q4 H
我又找到了一些各种语言的资源文件的ID
  m# M* |. e# Q! x# ^: k% J#define GAME_FONT            0x040000008 o4 A1 a8 ]  H. U
#define OTHER_SR_FONT         0x04000001
* m' W/ P1 O" Y- L8 b+ E#define OTHER_SR_REDFONT         0x04000002
; \( F8 I9 Y4 F$ f; B8 {9 @6 J#define SR_DEATHFONT        0x04000003
: Q- j# t& ~# C' c#define CZECH_GAME_FONT        0x04000004
0 u' f4 |( g; V1 e+ ^+ i/ T2 u1 A#define CZECH_SR_FONT        0x04000005
- C# p: I7 Z/ e#define CZECH_SR_REDFONT         0x04000006- b0 D; l1 h2 e" {/ i* g
#define CZECH_SR_DEATHFONT         0x04000007
; v8 L. q5 [2 O% c" h3 \  ~  h7 m
- P% o; I8 n" T- K' B这样,我在调试模式下顺利导出了一个字体资源文件。! e; a: p/ Q' s) N! V8 l" p5 x
接下去,我分析了一下字体资源文件的格式,制作了一个资料。9 H+ K& I+ y3 i, _* O
看了这个资料很容易就能明白。
2 X. d( H7 b, m9 O/ B " Q4 E( T9 D) V" G

* ?9 e5 Z+ f5 B: ]从源代码里面找到的资源文件头和每个桢的头的结构定义如下,
; |! q$ G2 r  a可以和上面的图一起对照起来看。/ }8 r1 W5 d3 a0 E/ k5 Y% m

: g0 w3 ]% y+ d5 R2 Pstruct Header {
! ^6 B4 O  p5 k2 w) m( |! U    char type[6];# Y  R& B8 ~* H+ F# o9 @5 Q
    uint16 version;+ r1 `+ _6 e3 {6 p0 r0 M
    uint32    comp_length;+ j  [, U8 r, k6 }/ w
    char    compression[4];
, p( y# z$ z1 |1 l    uint32    decomp_length;' {! `- f! Y1 C4 V& d0 i
} PACKED_STRUCT;
7 D  W; G# [4 j5 [, C' F2 w( `, L3 H
struct FrameHeader {6 s8 q. e8 D6 w2 O4 U7 S
    uint8 runTimeComp[4];$ V6 b" k( Q% ?' e& B. V. h" o
    uint32 compSize;2 y% r" \( c4 M: y
    uint16 width;: f' z- {9 b- K3 n# X  ?* E" E7 C
    uint16 height;- L! Y- S5 b9 f  ]' D5 y& `
    int16 offsetX;
# h; c/ e' P5 i    int16 offsetY;
- Q2 S: J5 W7 h5 B% \};
9 Y' |, p" ?: w$ U8 Z/ Y
4 g, I* G# F+ T0 j% P. Z字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。, \% U! m9 l/ j9 G: P
每个字模用一个字节来表示一个像素。
+ [" C5 ^+ H( s) j$ s$ Q& F背景像素 0x00
+ i: B% s: J$ L1 b边框像素 0xC8
; E6 z5 F  q" `4 `字体像素 0xC1) l( N6 d# L7 G5 ?& R3 }

6 Y2 u  \' @; M& R- [8 M$ `下面这张图片可以使大家对字体的样子有个感性的认识。
( f8 L% Q# \: c6 v为了看得清楚,我把 0xC8替换为一个黑色的小方块。
8 Q. e2 l7 e+ u( K7 G

本帖子中包含更多资源

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

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

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