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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。
, I8 Z8 O' ?& V8 |$ E看了一下scummvm的代码,看懂了大致的流程。7 Z0 i/ ]4 g$ s
) u, `% {  g5 L( J
断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。
4 `5 y* h6 a# n% E" H4 O. {我下面先解说一下字体资源文件。
! N3 F0 ]7 \7 l" c" x
1 I5 u* F$ H" m7 K+ [经过仔细观察源代码,我发现了一个资源文件的导出函数。) j* W: z3 d# p
void ResMan::dumpRes(uint32 id) {
* p7 @# E7 J1 D6 w; _    char outn[30];% N& t1 y' U: o
    sprintf(outn, "DUMP%08X.BIN", id);
2 d) g* |, ^, l$ `    Common::DumpFile outf;
! v+ f2 i2 b8 Q+ x/ t/ h8 a( q    if (outf.open(outn)) {; ^$ N$ z; B' a3 N4 G7 G2 M2 \
        resOpen(id);
% q7 x+ i3 E4 p  \        MemHandle *memHandle = resHandle(id);6 S$ [/ ~/ r$ N/ m
        outf.write(memHandle->data, memHandle->size);( {' l+ a7 z' k. ]
        outf.close();
8 D# H) z9 K) X# K' _. D  e        resClose(id);
9 ~" F" H6 L- G* P* o; w( t; q    }
4 Q2 }2 u$ A3 ?" h}
/ ]' d/ X8 @+ x" a$ m  Z- @
* n' A1 U4 u5 r& a我又找到了一些各种语言的资源文件的ID
( j: j0 t6 e& q#define GAME_FONT            0x04000000) P$ R6 E& `4 s; D
#define OTHER_SR_FONT         0x04000001
5 J& D7 }" Z* g' e( W8 ^4 D& P#define OTHER_SR_REDFONT         0x04000002
5 u; V* h3 J7 h" n: {+ |; Y2 T9 c#define SR_DEATHFONT        0x04000003
3 P$ f: o+ c" u4 o8 o- I" A#define CZECH_GAME_FONT        0x040000049 \, C  d% ]( r3 g
#define CZECH_SR_FONT        0x04000005
& P& W+ d; w) M; H#define CZECH_SR_REDFONT         0x04000006' q0 L' j5 ~# b* p* U$ K6 Z; l
#define CZECH_SR_DEATHFONT         0x04000007
0 U- b* v0 m4 \5 Z% q
9 K  S& L$ v) t( }$ q% j6 t8 I这样,我在调试模式下顺利导出了一个字体资源文件。9 O, }& h7 i  ?  m7 w0 I
接下去,我分析了一下字体资源文件的格式,制作了一个资料。
6 A/ I* L8 T* d: a* P看了这个资料很容易就能明白。0 Q  q( c% r' R

7 a5 x! T7 R. G, B: ~. s" M2 d. q7 S
从源代码里面找到的资源文件头和每个桢的头的结构定义如下,
" ^+ H) W  ^4 t" ~/ n可以和上面的图一起对照起来看。1 o, [7 g3 i1 j* a

; t  K8 L) Y8 V, a2 p* k1 n8 Istruct Header {
4 s1 d! O5 o) t1 Y) ~5 t    char type[6];' d  O" R2 I+ q
    uint16 version;( p  Q3 J9 N: M( L0 \
    uint32    comp_length;
4 I! w' B4 |. V) ^5 P: D  _+ |' `    char    compression[4];
- N  R: z4 d4 n: o/ `6 p    uint32    decomp_length;
: {7 C! F9 b2 i6 u$ ^  W} PACKED_STRUCT;
! W4 H8 w, R$ @' L6 ?# h) F
6 S2 q1 l/ R( u6 s$ @( m) q5 Vstruct FrameHeader {
9 w0 E, d7 H# E+ U  z; O' K: F    uint8 runTimeComp[4];
2 k8 q$ V7 [5 P7 X; k6 ~( ~    uint32 compSize;& v) n7 o% P6 j/ M; J
    uint16 width;; e; q' ?; H$ _2 q
    uint16 height;. a5 b: B3 {) S6 g' i
    int16 offsetX;
- E  W: i% ~6 b7 W# r# X    int16 offsetY;
4 n; \- f5 f, U2 |$ E( Z' F6 S# W* h};
$ ~7 x: k- X2 T5 y# f$ {
. \( e5 }4 g% U% V, w9 N字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。0 J+ z+ o2 V: |/ d: I) T* _# i
每个字模用一个字节来表示一个像素。8 M# e/ h+ Y$ t5 i+ y
背景像素 0x00
8 N2 N& Y! n3 w5 X边框像素 0xC8) s' q5 m$ v8 H! f2 w# f7 S9 R' P) A. x
字体像素 0xC1
# s+ }) j( B3 _) @3 A6 \6 r( N, x! ]! o- ]0 a2 Q
下面这张图片可以使大家对字体的样子有个感性的认识。
, x) a7 L$ E2 |为了看得清楚,我把 0xC8替换为一个黑色的小方块。
8 h6 }" O1 g% E) s  z

本帖子中包含更多资源

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

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

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