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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。* |2 \! s6 H! V5 ^$ X
看了一下scummvm的代码,看懂了大致的流程。
. o: P. Z5 m+ f6 o! o% H. F+ ^( U; J( I. D
断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。
. Y& J( e7 Y/ L( R  S; Q. g; |我下面先解说一下字体资源文件。
$ y. Z' m/ B3 ^) a$ q4 W) a9 R: V: Z# n9 ?
经过仔细观察源代码,我发现了一个资源文件的导出函数。) a1 C' l1 z2 u; G* D% l
void ResMan::dumpRes(uint32 id) {
6 c; I8 b! l$ V: z' w  g  s    char outn[30];* F( n" S. M* R; A' H# J
    sprintf(outn, "DUMP%08X.BIN", id);
. f* z. A& v5 h  ?    Common::DumpFile outf;
! Q0 A( X- u" h+ \+ j    if (outf.open(outn)) {3 z+ v- g: ^  U# K& X- _
        resOpen(id);4 ^6 o# B( v1 D. d
        MemHandle *memHandle = resHandle(id);8 R  j# b; n! w( h
        outf.write(memHandle->data, memHandle->size);$ \5 F3 d& r+ J; \/ I/ @
        outf.close();7 V  K% x3 L, Z4 j0 k
        resClose(id);
/ T7 S' x) m+ ^4 t+ n5 y( U    }0 a- X1 v# i+ p/ y: k
}
. F& Z$ h$ Y6 E) g' \
+ s( C6 l) T) x1 ]1 ^- x我又找到了一些各种语言的资源文件的ID4 v4 o$ J  S2 `* T8 I
#define GAME_FONT            0x04000000; Y: P  p6 ?6 P
#define OTHER_SR_FONT         0x04000001
* d, D( L8 N0 K9 x: J& h9 p#define OTHER_SR_REDFONT         0x04000002: N/ F  D7 s/ S& W3 G- R
#define SR_DEATHFONT        0x04000003& {% i9 C7 g2 B- n+ F( u8 [
#define CZECH_GAME_FONT        0x04000004
, }1 W1 w5 H% g) ?6 C& Y#define CZECH_SR_FONT        0x04000005
( Z/ q, ?9 M  W( r8 G#define CZECH_SR_REDFONT         0x040000065 [4 |: |, L6 t% i( }
#define CZECH_SR_DEATHFONT         0x04000007# U- L- J' E/ }. E$ ~/ t( q
) H, ~8 @. c( T* m  z
这样,我在调试模式下顺利导出了一个字体资源文件。1 x3 y0 p! w8 q( Q
接下去,我分析了一下字体资源文件的格式,制作了一个资料。5 ]8 Q$ B8 d% n8 R
看了这个资料很容易就能明白。
2 K& c0 j8 `/ p4 U/ A, z - U* B/ V  S/ b4 C

9 i6 R. M+ }2 I4 P6 s7 \从源代码里面找到的资源文件头和每个桢的头的结构定义如下,3 ?8 g: X6 c) e  i
可以和上面的图一起对照起来看。
, X$ u8 |& D8 F+ Q
; i" h7 M) f$ mstruct Header {/ f3 f' q0 s. ]) X" h+ s# l, }
    char type[6];5 p, _/ ?2 Y1 \- p2 E
    uint16 version;$ |! m$ X" ~# G) m" u
    uint32    comp_length;
2 s- \, a" Y7 q; Q/ i    char    compression[4];7 j0 G5 X( l8 ?; ^1 E5 G/ i; S" U
    uint32    decomp_length;
1 I% Z# A& b# C" f} PACKED_STRUCT;
5 w. M4 W! I9 F: m+ e0 i4 G! G4 i, s/ K, ~+ q
struct FrameHeader {
: O+ P& x' D; @! \# f# G6 ]% I& o    uint8 runTimeComp[4];
* `9 d) Z: v, C9 T5 b# x5 R0 o    uint32 compSize;6 h; }3 z: G- w+ s/ Z! z. I
    uint16 width;3 c. m. f/ f  z9 W* f& X. [
    uint16 height;
3 L  K' ^4 V" l2 W; R. n    int16 offsetX;& m3 m7 u  z& z5 i+ A
    int16 offsetY;
9 z' C' t: }" A2 a+ D* G; k6 Y};/ `8 C1 r' ?2 r% J9 y
) H2 X5 j, [' [6 R3 k& Z
字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。5 ?) g2 B' g/ s& Q
每个字模用一个字节来表示一个像素。
, T5 d! h0 Y" }! ?背景像素 0x00/ h0 }1 C* x* M) l
边框像素 0xC8# z7 X( y. @8 R
字体像素 0xC1
! n; i% a4 r5 S. ]# _, z+ A! i0 |$ u) i  e) p
下面这张图片可以使大家对字体的样子有个感性的认识。8 X2 m# g6 B6 ?% f$ {% H: A
为了看得清楚,我把 0xC8替换为一个黑色的小方块。
" o' Y7 w1 L( ?! {+ B5 z* e0 G5 h

本帖子中包含更多资源

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

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

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