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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。* \( h/ N1 f4 `3 h7 F
看了一下scummvm的代码,看懂了大致的流程。
; c& r9 r3 q% P) K3 Q# {; N- U3 P; N; o; L7 R: M
断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。. a- a! _' k. N! x' u+ ]& A
我下面先解说一下字体资源文件。8 k0 P0 N2 H5 B7 T2 L6 e

1 ~# z! b% W( ]经过仔细观察源代码,我发现了一个资源文件的导出函数。' \5 A- N: C* [" f1 B+ N0 I
void ResMan::dumpRes(uint32 id) {) `, A6 y8 P) I3 p
    char outn[30];
- {( R1 \6 Y) W) w+ K; ^    sprintf(outn, "DUMP%08X.BIN", id);: K, i' p) b7 F1 u+ r, T9 f
    Common::DumpFile outf;
1 p# M" I0 U$ c% N0 y" z    if (outf.open(outn)) {
  ~+ f% w2 t8 ^2 \; p  B6 g: e        resOpen(id);
8 z6 g6 [$ w5 s  n8 S# ^: x9 u8 }" {7 H        MemHandle *memHandle = resHandle(id);
; u% H0 r1 F8 X6 S5 Z        outf.write(memHandle->data, memHandle->size);) q5 T3 v" z7 T4 i
        outf.close();
' l6 t4 `, c! P5 f        resClose(id);
" i7 N' W' F7 ]    }
1 y9 Y1 P$ u* ~}* f- k9 D1 n4 z6 u

4 Y4 r  Y2 C# y4 ?' ^5 e% }) U. C我又找到了一些各种语言的资源文件的ID
3 R7 ~' C6 Y. j" R) u#define GAME_FONT            0x04000000
7 I& b' h- J. h0 X! o  x#define OTHER_SR_FONT         0x040000015 ]5 j. X" z3 L7 B  h$ h6 P( Z
#define OTHER_SR_REDFONT         0x04000002
7 \0 n( K$ N5 `" U9 h7 G" {' j8 E#define SR_DEATHFONT        0x04000003( _1 I# I( J" v+ A- q: I' h, j
#define CZECH_GAME_FONT        0x04000004
- o8 J; _2 t& c( Z2 p#define CZECH_SR_FONT        0x04000005
7 `. ~( c/ R3 l* F' v1 ^#define CZECH_SR_REDFONT         0x04000006! k1 Z% A' G; P/ f
#define CZECH_SR_DEATHFONT         0x04000007) a$ f7 k0 u& g4 Y
, F1 d+ j: r( R2 m! Q& i% |
这样,我在调试模式下顺利导出了一个字体资源文件。6 Q% P3 l6 x, q& V: T
接下去,我分析了一下字体资源文件的格式,制作了一个资料。2 j$ ^( t( k6 f, G
看了这个资料很容易就能明白。" Q. T' M5 |: H/ b) s( J% ]

) C! o& ^! q, V2 H
% n, X( Q( Q) `7 h; K从源代码里面找到的资源文件头和每个桢的头的结构定义如下,
! p% }7 V" ?; r" M9 L' i可以和上面的图一起对照起来看。: `+ b5 x$ ^( [
( x) v) b1 ^& b& S# g5 [0 N0 _
struct Header {
* a! g0 w/ G1 k; A8 f    char type[6];" v6 M9 G2 ^" X, _/ ]
    uint16 version;5 j; ~- v% O3 ]
    uint32    comp_length;
- ]- g* C, O- A$ m    char    compression[4];
" S* ]- j: v/ i- X* S2 X    uint32    decomp_length;
* r! K0 a( W: b0 Q( r} PACKED_STRUCT;
" d6 |  z3 E% Y# B3 A: C
8 e. m4 l6 e, q2 `struct FrameHeader {
/ W; O0 ]9 \$ |' R* L    uint8 runTimeComp[4];
" L, s  w' A% _, [6 R: ?+ q3 B; M    uint32 compSize;
4 P- d. g* g- Q0 H: G+ H    uint16 width;9 P- T" w* ?% r# w
    uint16 height;
# X( i9 I# Z9 e8 u    int16 offsetX;4 I. k9 Q1 M$ d; d6 r
    int16 offsetY;
0 p( P! w1 |3 Y2 E; z};& e* D( T- s# F; |7 P7 u7 p/ V

; G3 G- L0 R9 _2 I  [8 h字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。
8 l: E3 F, ?: t! r每个字模用一个字节来表示一个像素。; D3 f/ J  s& y
背景像素 0x004 n* C% F  {( v0 f8 `' h0 d5 t
边框像素 0xC87 a! `+ k8 a- h2 v- r: v
字体像素 0xC1
( M% W7 j" N0 ^; \! ]* V; i# b9 D3 u" A$ k' n: d- B2 o
下面这张图片可以使大家对字体的样子有个感性的认识。
, }7 o% f3 @: L! G1 h为了看得清楚,我把 0xC8替换为一个黑色的小方块。9 y% _, |! B  Y, ]( c. Z

本帖子中包含更多资源

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

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

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