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

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

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

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

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

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

最近应C版的要求开始研究断剑1的汉化。2 j( c+ J% Q( K6 ?
看了一下scummvm的代码,看懂了大致的流程。7 V# L. Q" U. O& V5 @8 K. i* F
! s. w% H1 e7 ^
断剑的包文件是由多层的结构组成的。简单的说就是大包套小包。, ]$ E7 Y* P" w8 a: g. v/ H
我下面先解说一下字体资源文件。
0 I( p/ y! b- t7 W3 R
/ g$ l$ M! a- o, z$ f0 b$ s: Y经过仔细观察源代码,我发现了一个资源文件的导出函数。
! a* P8 D/ n+ b8 i! Evoid ResMan::dumpRes(uint32 id) {
) j, A" K* }. a8 H9 o  j) F    char outn[30];
8 J4 f- S: ~$ r$ H9 @    sprintf(outn, "DUMP%08X.BIN", id);
6 O2 N' D9 y! L4 k) {. Z    Common::DumpFile outf;
  P5 M5 G* d0 u- b' _# O  N) W    if (outf.open(outn)) {
& O7 z3 w- @# e' a6 H        resOpen(id);" F4 c2 T  e$ O1 }9 s' p
        MemHandle *memHandle = resHandle(id);( i+ l1 K7 F2 R8 @2 U( `! t& @
        outf.write(memHandle->data, memHandle->size);4 N! N9 T/ ^8 e( X0 o/ X( @
        outf.close();  n! [4 z$ o1 O
        resClose(id);
* {" c7 v& Q* a7 P    }
8 e9 k5 J) `/ b3 e3 a}1 g3 ~& R& Q5 D

5 e2 X7 d9 B; S' g/ n* I8 k我又找到了一些各种语言的资源文件的ID, m) q1 R( ?' y0 v0 k' ^% i6 [( r8 s
#define GAME_FONT            0x04000000" l9 g) U: A2 m6 z
#define OTHER_SR_FONT         0x04000001
& q* W' {) t* c#define OTHER_SR_REDFONT         0x04000002: n- ?) v4 _- b) J! a! m
#define SR_DEATHFONT        0x04000003
3 U/ b( |: V8 [2 @4 s#define CZECH_GAME_FONT        0x04000004
+ a9 R+ m. |5 u5 v5 U#define CZECH_SR_FONT        0x04000005
- M8 J. m, v% e5 E: a#define CZECH_SR_REDFONT         0x04000006, P, @' P8 E0 ?/ z( U- O2 V# z
#define CZECH_SR_DEATHFONT         0x04000007
& ?. ~) i. l- [+ N! B
4 W; ]% @" @9 ?& A9 R这样,我在调试模式下顺利导出了一个字体资源文件。" V' X3 `* J1 k( C: |! t3 w+ W
接下去,我分析了一下字体资源文件的格式,制作了一个资料。3 e4 b3 e' p) p
看了这个资料很容易就能明白。8 X) k# r2 x( e; _0 s8 h
; j4 q, Q' }' I1 U( x- b. G

& g3 z; J8 v, r# C6 T从源代码里面找到的资源文件头和每个桢的头的结构定义如下,
5 H: ]) Y  a* v5 \可以和上面的图一起对照起来看。
5 Q  o: E7 s4 n5 y
. d/ o1 F$ e7 i# |- @: b* ostruct Header {
, ]4 ?$ a  E6 e; _6 t. b" t    char type[6];' A4 e- P9 K/ w- a; R$ b: o9 K7 y% [
    uint16 version;/ j+ D# b' O# M
    uint32    comp_length;
1 l1 [0 R5 z# C    char    compression[4];' _- D* q) e5 W9 h
    uint32    decomp_length;
# b' E# {, L- {5 X9 Y5 \4 z} PACKED_STRUCT;: P1 w. O; n1 w3 F' ?- ~; |; A

" W% a" V# i  d; M6 z0 R7 Pstruct FrameHeader {
$ o1 |" h. h3 v  |    uint8 runTimeComp[4];
& A$ S6 B) y, x+ u  b6 d' |2 C    uint32 compSize;& G- \" Q* |8 R# y8 W
    uint16 width;% s* T2 `8 f# Y6 `5 P( G5 d- |% P
    uint16 height;1 I$ ]& p# C) V0 e
    int16 offsetX;
. _: i, \( `2 i! Q% m$ _    int16 offsetY;
- [8 m, d  g5 d$ F  i};8 V+ Z9 ]2 U' `% p1 z2 ?
# `! p- p' o- E0 B
字体文件的每一个桢都定义了一个字母的字模,根据字模就可以在屏幕上画出每个字母的样子。
" h4 n: J4 j' I( z3 m( r7 @每个字模用一个字节来表示一个像素。
* p2 t: C% W; C  Z背景像素 0x00, \- ]" p% N* e  {6 t4 t8 D
边框像素 0xC8' F4 [/ n+ P( L$ g
字体像素 0xC1
8 Y3 y1 ?! c* Z! k0 s, W" Y& p
! V* F* i$ l5 C下面这张图片可以使大家对字体的样子有个感性的认识。
  p7 Y8 x6 Y. h  r1 D为了看得清楚,我把 0xC8替换为一个黑色的小方块。6 Z/ W( m! r2 N8 p( M

本帖子中包含更多资源

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

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

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