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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。* L1 x) z3 _2 ~1 i. E, G9 b7 R
看了一下scummvm的代码,看懂了大致的流程。) b$ {; q! ^. X2 w* S0 ?8 Z

8 s8 |. k' \0 h! t断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。9 \; \# X9 ~* s
我下面先解说一下字体资源文件。
' e" L/ m9 I7 X
4 y! V0 x. L/ E  A: ~4 U经过仔细观察源代码,我发现了一个资源文件的导出函数。
. P) c: ~$ g1 A; e: q# y9 _2 O3 Q- Zvoid ResMan::dumpRes(uint32 id) {
8 T- o# U! q7 i$ v& b$ `: V7 b    char outn[30];
" V5 w7 I! i  m, Z! d    sprintf(outn, "DUMP%08X.BIN", id);
, `' r; _* ^: s; f1 q) [: t, M    Common::DumpFile outf;5 ?) t" f' p; j
    if (outf.open(outn)) {
$ v  Y: I* n9 w! X        resOpen(id);
  D( s( j4 e# S! l' w+ e; l        MemHandle *memHandle = resHandle(id);# o' s+ W  r4 V" S! K) P
        outf.write(memHandle->data, memHandle->size);
9 {, Y. U  p: }) w0 v        outf.close();* N7 c3 k- U! H6 \; Y2 `
        resClose(id);
" _1 K6 i& v2 ?9 f% p# n    }$ P4 K; M" a8 i$ [/ T/ S9 {+ f/ ^
}2 A/ B4 ^) D6 Q  p! A: u3 y. \+ B. L
; Z" [* d3 n" H; T8 x
我又找到了一些各种语言的资源文件的ID
6 K' r, q- l) r9 E6 H% P#define GAME_FONT            0x04000000& x- ]; b; |$ E9 }
#define OTHER_SR_FONT         0x040000018 t7 _" R2 j# _
#define OTHER_SR_REDFONT         0x040000022 H  u6 ?5 ?8 }0 F7 T& p# q
#define SR_DEATHFONT        0x04000003& C1 ?3 j4 m$ j, y/ w
#define CZECH_GAME_FONT        0x04000004
' Y2 _, a" O9 V) [8 R#define CZECH_SR_FONT        0x04000005# h1 A# ?2 G; k1 X3 B
#define CZECH_SR_REDFONT         0x04000006
6 g( X, Q6 s" _; m#define CZECH_SR_DEATHFONT         0x04000007
9 N# B. k8 ~7 s5 L! Q- Y( x1 O# r4 K: Z5 {
这样,我在调试模式下顺利导出了一个字体资源文件。  W# @, u5 C: ~, f
接下去,我分析了一下字体资源文件的格式,制作了一个资料。$ E3 a8 ?: T* b* j" t
看了这个资料很容易就能明白。
1 U7 n) i2 n- W5 s/ ^
  K1 u' R+ o7 J% Y# W5 c4 }! X$ G
从源代码里面找到的资源文件头和每个桢的头的结构定义如下,
0 `0 Z7 e9 q/ L2 }7 k可以和上面的图一起对照起来看。
% |! b7 w* M, b  g9 [. H& g0 e) Q/ C5 O" |  ~2 P4 P
struct Header {; ~, a' Z( ]& b0 F! W9 O
    char type[6];
6 D' d7 @; v4 s6 q    uint16 version;
  x+ k& m( G) g; M$ @    uint32    comp_length;0 S+ w0 c" U4 u% J7 ]
    char    compression[4];
' Q% x" s$ m3 L5 x) Q) W    uint32    decomp_length;; U- q, R# [" V
} PACKED_STRUCT;% m3 h" H$ J6 E! S$ `
/ q1 J: x: I/ @
struct FrameHeader {7 |8 l7 ~3 y* |+ e
    uint8 runTimeComp[4];
* `/ p" v7 u$ S; ?3 N$ {! r    uint32 compSize;
- J* G/ R4 T" y$ L6 O    uint16 width;
2 h/ z; S7 Q, L* w1 C( K' f    uint16 height;
2 `. P, M, q/ ^+ e' c    int16 offsetX;
, i/ S- N7 W& O2 }4 }# p" a, ?2 j    int16 offsetY;& G% o5 V, H1 F5 a- _
};
4 @# }4 Y$ I" Y) K& D: H3 U3 C6 q. ?/ C; Y
字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。
1 r$ i8 E. d" d每个字模用一个字节来表示一个像素。
/ p  x) y9 s% r) f$ K5 |背景像素 0x00: F+ p: @# W4 J0 O6 V8 |
边框像素 0xC8
: x! R, U- V& o字体像素 0xC1
9 A, @( Z* k0 {6 j7 S4 a& \3 i/ p6 T' W* d) ^  v2 L
下面这张图片可以使大家对字体的样子有个感性的认识。: g, s+ F7 V: u9 g4 B) j8 L/ @, U
为了看得清楚,我把 0xC8替换为一个黑色的小方块。
; o+ ?1 c% v- F. e" r% 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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