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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。$ v" Z, ^" G1 E; ?
看了一下scummvm的代码,看懂了大致的流程。
: Q3 i  i, N: d& x
% G% ^6 g' G0 y/ n, U断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。- j7 A% y: N/ l  l4 E1 H3 H
我下面先解说一下字体资源文件。0 U6 r% ~+ ?4 i: n" v6 C

0 k. ]( |; Z) C经过仔细观察源代码,我发现了一个资源文件的导出函数。# Y; @6 Z/ Y' ]! j( m
void ResMan::dumpRes(uint32 id) {0 v  H$ l" D5 a9 n
    char outn[30];4 G% A3 v$ [; R. |
    sprintf(outn, "DUMP%08X.BIN", id);5 f1 \. j# V8 ~: R# }" b" c! ?
    Common::DumpFile outf;
4 s1 V2 W  z) \6 W3 H    if (outf.open(outn)) {
+ }( {% U. f& Q' e        resOpen(id);3 \2 I/ h6 @5 v- i' [5 B% ~: x
        MemHandle *memHandle = resHandle(id);3 Q9 w. [: X3 A  G3 u3 P3 a5 B* f
        outf.write(memHandle->data, memHandle->size);0 @+ V/ ]% N  {8 w
        outf.close();
( O. C  h3 ~( B7 |% f6 p, }' W" ?        resClose(id);7 A+ C+ B" c, ^: X
    }
. w0 a- z% E! I7 U4 L}
2 j5 D2 a5 Q) }% ?% e
7 s& ?% i: R( {6 Z) Y. g我又找到了一些各种语言的资源文件的ID- D% H/ U* d3 T6 I+ v/ v/ x
#define GAME_FONT            0x040000009 g2 m. t6 P, @8 p/ c4 G/ `
#define OTHER_SR_FONT         0x04000001
; j  e# m% B) h9 c#define OTHER_SR_REDFONT         0x04000002: ^7 t( y0 Q$ a: V
#define SR_DEATHFONT        0x04000003
( K, \# S9 d# |$ `#define CZECH_GAME_FONT        0x04000004
% F4 q5 X. r# P#define CZECH_SR_FONT        0x04000005+ y0 k% X) f9 d  u/ G
#define CZECH_SR_REDFONT         0x040000069 V( ^* e# Q9 u' [, F' i+ D
#define CZECH_SR_DEATHFONT         0x04000007
8 _$ A5 r8 s4 Q" c4 V2 p
6 m! z6 y' c: d% G' e; e这样,我在调试模式下顺利导出了一个字体资源文件。6 F$ Y, J5 m7 S) M) I% U
接下去,我分析了一下字体资源文件的格式,制作了一个资料。
# {) \# R: V+ {6 W% i: o( I; q看了这个资料很容易就能明白。
+ \0 m8 t  T$ d" ~6 }1 g/ Q1 \- \( M
1 B, G. R% `; w9 i$ l1 e
$ I* ]' W. n; a  w5 p从源代码里面找到的资源文件头和每个桢的头的结构定义如下,: Q  v" a% e* Q7 _
可以和上面的图一起对照起来看。
6 M/ n, l" R% q0 a! ?
" n% @& t) X1 S8 istruct Header {0 |; c% n% s6 H; U1 f9 s/ E; o
    char type[6];; @2 o5 R/ J1 ?
    uint16 version;7 ~; k0 p) G2 O: z
    uint32    comp_length;
6 N( L  I( d0 i, a+ J; U% t    char    compression[4];! Q2 u' q1 R' F( F( O9 K
    uint32    decomp_length;
" [; v& b7 x2 r4 P# q% q2 m! ]} PACKED_STRUCT;
1 ^7 W7 B! b4 F- h; m4 I
: l- e8 _) y- a; X$ \struct FrameHeader {
0 i8 U* ~& u! Z8 S    uint8 runTimeComp[4];
1 A+ e8 M8 u& d* J# R$ G    uint32 compSize;. y' t+ H9 B# l# h6 I8 y
    uint16 width;* t/ I9 F) Z/ A/ e/ }& U; f6 B
    uint16 height;7 H* q; U7 m7 t
    int16 offsetX;
  o; V6 v' \: N    int16 offsetY;7 O- C4 |/ }, h
};
' j: c+ g- X& W( p1 R
. ?% R2 [2 ~  b6 ?- e# K8 s  |, ~# O字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。
3 N; c: C/ a: }( _2 n每个字模用一个字节来表示一个像素。
$ b# v6 u% _1 w# g; ?背景像素 0x000 A5 {' V% {6 b3 ^; B: n
边框像素 0xC8% i3 C+ m# U9 z, t+ O2 ~
字体像素 0xC1. H" a5 s3 a' V/ S/ T
# x( `6 y2 g% _2 E* x
下面这张图片可以使大家对字体的样子有个感性的认识。9 I+ F. ?3 P$ x8 ?
为了看得清楚,我把 0xC8替换为一个黑色的小方块。; E+ c3 N) J0 `) t: i

本帖子中包含更多资源

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

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

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