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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。
- Z0 {7 W. j  v$ n看了一下scummvm的代码,看懂了大致的流程。
( d! n* q6 a; H, p( x3 t
0 `# B+ r& X' D: y: m断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。: C$ O- r  M9 {" V; D' f& }
我下面先解说一下字体资源文件。% ?+ b. d2 L# `) a
- v4 A1 E! ?: w9 C! [/ ^  c
经过仔细观察源代码,我发现了一个资源文件的导出函数。" O7 a. `# [* ^- b
void ResMan::dumpRes(uint32 id) {$ c. j0 \/ I& `! M: m4 P' x
    char outn[30];1 }' s  Q% @6 Z4 i
    sprintf(outn, "DUMP%08X.BIN", id);
' p3 S, O: o/ R8 d9 S) U    Common::DumpFile outf;
$ H6 O# X5 m8 J! r6 r    if (outf.open(outn)) {
# u. ]/ F0 a$ f        resOpen(id);# Q. ~; Y: O2 H8 [5 `. w
        MemHandle *memHandle = resHandle(id);  K& N3 K# K2 ^  o
        outf.write(memHandle->data, memHandle->size);
% ^* G8 |$ R% Q        outf.close();: Y. L7 F8 i- x& B$ i# _
        resClose(id);$ b7 ~& P& n; d/ {$ c( j3 n
    }
4 b* z7 H. }2 h}# p4 i2 S% U! W0 b: @4 p

6 c1 @- x$ I" M9 b我又找到了一些各种语言的资源文件的ID
) F) d+ H* v0 a$ `2 N' F#define GAME_FONT            0x04000000
, k3 P6 z5 W1 P' D8 S* q3 u#define OTHER_SR_FONT         0x04000001
: O' }6 X- |6 ]/ V" x#define OTHER_SR_REDFONT         0x04000002
( I6 t! u' e- v- l3 m! E#define SR_DEATHFONT        0x04000003+ U1 k2 E: D* D- S. s  K9 E! s& z2 M
#define CZECH_GAME_FONT        0x04000004; @. E7 p3 i2 p5 u, z2 r. K) n
#define CZECH_SR_FONT        0x04000005! z; S0 }& F# l& q% q! b0 ]& r
#define CZECH_SR_REDFONT         0x04000006
8 \4 ^* e3 \( r. l3 f2 ?#define CZECH_SR_DEATHFONT         0x04000007
8 _' m6 R5 K4 l4 E+ ]0 }4 U
4 v* n- o2 P: X6 J% v" b3 k4 ]# j3 D这样,我在调试模式下顺利导出了一个字体资源文件。
4 }$ {2 ~  |3 ?0 s' D接下去,我分析了一下字体资源文件的格式,制作了一个资料。5 b  k6 |: r& @7 ?! H: L& p# Q, u! `
看了这个资料很容易就能明白。
: |6 p! p8 X- D/ x: D/ ? 3 N/ V0 G5 d( ^& B! `

! \$ O# N+ T2 c3 q7 b从源代码里面找到的资源文件头和每个桢的头的结构定义如下,
- _8 i( _: ~. _0 h0 H' T7 O" s可以和上面的图一起对照起来看。8 F( b2 F- u- ~# P
9 Y* z4 `2 z1 o* p( t
struct Header {$ w# f; d! K) T$ t
    char type[6];
% s* x6 y9 l; d* s# s    uint16 version;, t* \! l8 _# q
    uint32    comp_length;
) }' [$ @  f1 T9 B/ c    char    compression[4];3 y) e1 s( R/ [9 @% J
    uint32    decomp_length;+ ^; F" M( D0 R7 M! B  @' g
} PACKED_STRUCT;. B! a; N/ U* y( c( y2 x' N

8 e& O; u+ t. H# b; d8 sstruct FrameHeader {( h: W" i  Q9 f
    uint8 runTimeComp[4];: p. q. d) E. \" I5 m# _
    uint32 compSize;
! M* y' `& h) @, b' K$ O    uint16 width;
: \5 g9 }. @1 L    uint16 height;5 e  H+ a# Y4 K" V
    int16 offsetX;) g- B! @& y6 O. @$ G; i
    int16 offsetY;* u% R# s& v! F# h4 r. d+ D
};
2 R. a) H  v3 q  S- P6 @
0 x6 k# k# B* u, |# l. b2 S字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。5 L2 j& q5 N- T; I8 i% a5 ^
每个字模用一个字节来表示一个像素。4 S7 T' ]1 ^0 z# i
背景像素 0x00
3 z' s& g( C, v" x) B; N# n& U边框像素 0xC8* c" O2 L$ C6 z/ n( g; M
字体像素 0xC1
; n& m+ c$ }$ I. R4 m- D+ ~7 F: ?6 E% }9 a  M
下面这张图片可以使大家对字体的样子有个感性的认识。# G; G+ f# s0 j+ K+ e1 i: r1 X" C
为了看得清楚,我把 0xC8替换为一个黑色的小方块。5 v9 o6 ]/ ]7 q7 i1 n. 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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