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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。9 F; O7 n& {# U4 c9 M: t6 X
看了一下scummvm的代码,看懂了大致的流程。& r7 ?4 |2 o  f9 S. \
& n4 _1 G3 P4 ~5 s+ |2 k% Y
断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。
1 p( w# f9 e9 P) C6 f$ L1 ?我下面先解说一下字体资源文件。0 }$ y: F; H8 ^7 g7 V7 a" ]

$ I/ M# O5 q6 [) V: ?0 r经过仔细观察源代码,我发现了一个资源文件的导出函数。  P: i5 T/ P4 ?. g; I
void ResMan::dumpRes(uint32 id) {4 B) u2 K  X5 {/ z0 `
    char outn[30];
9 M3 G& I0 V) z/ d8 x4 `    sprintf(outn, "DUMP%08X.BIN", id);
5 M/ U4 j, _, u; W: d    Common::DumpFile outf;
! a; a8 R3 a' q    if (outf.open(outn)) {
( V% S# _) t; u4 d! s$ T        resOpen(id);
3 [  n9 l6 o3 _5 e0 t6 h1 R; T. K        MemHandle *memHandle = resHandle(id);
; d' N. R& y8 e        outf.write(memHandle->data, memHandle->size);
3 T: f+ T# s. q4 G        outf.close();5 b+ ?8 K" r) c* n( T
        resClose(id);$ W- S  f4 A( r( o  Y( g2 q
    }
( B) b/ ?9 b3 f7 N. j# i' e}  n! M; P/ Y7 x4 t, d3 d2 }
2 N6 z& d' a4 u+ d' r7 N+ u: z" u" n
我又找到了一些各种语言的资源文件的ID
& k4 t+ j3 v3 {- [# m+ W. [#define GAME_FONT            0x04000000' P" ^% X& n/ {: ?/ l5 ]6 _: }
#define OTHER_SR_FONT         0x040000015 v# c. @$ {3 P6 F
#define OTHER_SR_REDFONT         0x04000002% d9 l) P9 N- X1 E+ p
#define SR_DEATHFONT        0x04000003
9 p$ k! ?+ K; Z+ r0 c#define CZECH_GAME_FONT        0x04000004
( V' _/ S, Z" u; Q7 z4 z4 z* C#define CZECH_SR_FONT        0x04000005
. l0 M$ |+ l$ z, C' \: D7 m#define CZECH_SR_REDFONT         0x04000006
6 M. n. R! P3 I8 t% I( U  t#define CZECH_SR_DEATHFONT         0x04000007
7 F. Y# V6 a5 z! k% C/ R3 X( W( Y1 u  X5 u* V9 `7 U
这样,我在调试模式下顺利导出了一个字体资源文件。
& `, T0 I$ R  d6 x1 y- J接下去,我分析了一下字体资源文件的格式,制作了一个资料。. a: s; m% }2 }0 j
看了这个资料很容易就能明白。, c8 R9 e8 T3 \) A2 F: z, T. d/ H
0 `- j5 E- d0 w, @6 o

; Z$ ~) ]3 }9 ]2 _+ ]从源代码里面找到的资源文件头和每个桢的头的结构定义如下,- y5 S/ {2 V  [" c9 ?
可以和上面的图一起对照起来看。3 c) X) N& Y  {% t
# \) U$ [3 u( ]! [% Q, p8 [: ?
struct Header {+ R8 H( Y" V! w* V. ^2 S& r9 u2 ^; f
    char type[6];
$ h4 f" w) @. }    uint16 version;
& H8 l( }0 p4 p1 M6 G3 W5 p, D" Q    uint32    comp_length;0 Z+ R( L8 {- ~8 y6 X
    char    compression[4];
0 D; b/ e6 j5 W# s    uint32    decomp_length;' r+ e& w! E# h- V* _5 @7 T, A
} PACKED_STRUCT;
8 @/ n6 I7 |8 F  n' J. M  A: s/ V3 q" i4 d3 n
struct FrameHeader {
% P. U: E1 I( _2 r5 c5 O    uint8 runTimeComp[4];' h. O, g+ B0 g7 B0 K6 v
    uint32 compSize;+ w9 N6 E4 j" i5 u  {+ u! O/ L, G
    uint16 width;+ P% r. N! \% L" J: ]
    uint16 height;
" A' s/ M- |. u) g7 ]; K    int16 offsetX;
/ |- T4 J0 V1 _9 }    int16 offsetY;
4 W/ L7 a& P7 S* O# `};
1 |- T) x, @5 f3 Z6 x9 }4 @1 j
4 S+ }) @/ B4 _" U字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。
: O% u" q; g! J0 I1 y) i! N3 f: M每个字模用一个字节来表示一个像素。0 i! T+ p& `9 c6 g" J* p9 p
背景像素 0x00
' o1 G1 T  K3 W9 `3 t+ H边框像素 0xC8
! N/ G% ?* B9 q字体像素 0xC1
4 F0 A9 Q' d$ M5 F- C% D+ k/ l- r$ Q( L' S. D
下面这张图片可以使大家对字体的样子有个感性的认识。0 f5 y0 J* ]$ o5 f
为了看得清楚,我把 0xC8替换为一个黑色的小方块。
0 }, d0 _6 \' r

本帖子中包含更多资源

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

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

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