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

汉化工具 林登布鲁克的冒险解包器

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

[汉化工具] 林登布鲁克的冒险解包器

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

林登布鲁克的冒险解包器

林登布鲁克的冒险 Adventures of Natalie Brooks  解包器 ( |# i. y# K2 _' w  T
要配合QuickBMS使用。
; Y" d1 s0 {. A2 r
% K- x# m( |8 c-----------------------------------------------------------------
; q( h6 q3 T1 ~* V2009.1.11 第1次更新
) q$ x5 S- _9 t  ~& z
% Z: Z  m7 ?& W% I* P我大致看了一下,觉得肥牛分析的还有些问题。 8 G! \* H1 b' c$ b% l# r+ e2 H
我先纠正第1个问题。文件的结构应该是这样的:
1 T$ G% b6 k( x7 `字体文件名长度 4bytse
+ `0 _, _6 q3 x4 q0 G# Z- c7 C字体文件名 nbytes
% Z) S. f% f' M( l7 t字体高度 4bytse ( C0 x6 X1 U$ I, z3 W/ `, p0 V) p
字体数 4bytse / f2 t6 C2 N3 e, j
字模数据 字体数X24 bytes
/ g- d; g5 U& N7 c尾部未知数据 nbytes
5 i4 R* ]2 F+ K0 Y' u2 C$ Z0 @$ y2 h: r! [* ?1 }- ]2 B$ h
肥牛可能只分析了1个字体文件,正好那个文件的字体高度是0x18. 所以误认为那是每条记录的字节数。其实再看看其他文件,应该会发现那是字体高度的可能性最大。
* Z, @/ @4 o1 W4 [8 e% I
3 u% p+ |! H3 ?. h------------------------------------------------------------------ 1 `  R! q8 h" f9 \5 A! L
2009.1.11 第2次更新 / ^( i/ U" U1 k' u6 n# M
肥牛说字符是按照ASCII码的顺序排列。我不知道是怎样看出来的? $ @7 L! J6 Q; E) M0 Z: b1 T8 M
据我观察字符并不是按照ASCII码的顺序排列。 / Y/ T( b7 F' a9 o. Q, f3 G

4 g" d' l  k+ k* d! I首先,我们估计在每条记录的24个字节中,有4个字节记录了这个字符的编码。
7 Q( F6 W- }' @% O/ S4 m+ K3 `  Y3 g我们知道A这个字幕,ascii码和utf-8是0x41,utf-16码是0x41 0x00. 8 \( D) N8 e6 j( W* n8 y) T
如果A-Z按顺序排列的话,我们会在字体定义文件中发现等间距(24byts)的 : p0 ~* W2 m4 w9 N" h
0x41,0x42....这样的数据。但是实际上文件中并没有发现,
1 Z& h/ {% c3 Y+ y# L6 N9 z% x所以字符应该不是按照ASCII码的顺序排列。
; E. O" P% ~( f  M  M, E9 a' d
$ t1 v1 p$ i$ s$ }5 W" ~7 R另外,肥牛说索引文件会长度由26K变成了1M以上。
$ d- m! p( U7 C) M我不知道肥牛是如何算出来的,每条记录24bytes,汉字算它9000个字。9 K! `2 _( m8 b5 A( A' r% ]7 @7 l# ?
算下来也就216K左右。远小于1M。

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
 楼主| 发表于 2010-1-11 00:27 | 只看该作者
顶上来,此游戏下载' z2 f! x8 C* ~/ t4 `8 r
https://www.chinaavg.com/read.php?tid=19777
回复 支持 反对

使用道具 举报

板凳
发表于 2010-1-11 08:42 | 只看该作者
没看到楼顶这个帖子,从网上搜了一个解包器,估计跟楼顶的这个一样。, o# w$ q! d/ L- |  v; j; E
! Z4 Z4 v+ Q, q4 _2 C9 Y( c& P) _. N
解包Localization后,会出现三个目录, xml、texture、font1 Y) ]$ f8 w* K( c" ?% @
其中,texture目录中的保存的是PNG格式的字库图片,font目录中保存的是字库的索引文件,xml中就是可翻译的字符串了。# k" ]+ ~! e. A& R  w, ?/ V4 k$ q
9 ^6 d' c0 Q/ p; z' k) ^3 j
PNG的图片就不用说了,我们经常遇见。下面说说font目录中的字库索引文件。(解包后的东西在家里的电脑上,现在凭印象写这个东西,有什么不对的晚上回去以后再更正。)
' P. d: U6 R9 U  ?: [在font目录中,简单看了一下,文件的第一个字节表示每个字符由几个字节组成。比如0B就是11个字节,16就是24个字节。以24个字节的为例,文件头部有对应的图片文件名,然后是表示此索引包含多少个字符。后面就是每个字的数据内容了。字符是按照ASCII码的顺序排列。每个字符占24个字节,左、上、右、下各占4字节,然后是8个字节的0X00。如果此ASCII码的字符在字库中没有,那么它对应的24个字节全为0X00(好像就是为了占位)。
# O# H5 ?, _( v0 h" }; H3 v
7 c7 P  F# Q* u" r疑问:
; O. {& @- O1 ]; y# e; d4 B1、索引文件末尾的几个字节不知道是做什么用的。
6 M* Y% Y( G3 j2、按照我的想法,将汉字的双字节作为ASCII码,依照顺序写入索引文件。同时修改索引文件头部表示字符数的部分。这样却导致进入游戏后文字都不显示了。不知道是什么原因。
) l, o' E! c% E2 \9 ~3、在字库的图片中,我看到了俄文。在字库的索引文件中找到对应的位置,发现与该俄文的ASCII码对应不上。不知道这个对应关系的话,汉字的索引就不知道怎么加进去。以汉字双字节的方式写入索引文件,只按二级字库就是几千个。导致索引文件长度由26K变成了1M以上。而xml目录中保存的文件是UTF8格式的,汉字将占三个字节。如果真的是按照UTF8的编码写入,那这个索引文件就太大了。所以,如果能知道俄文的索引对照关系,也许这个文件就解决了。
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2010-1-11 12:49 | 只看该作者
2009.1.11 第1次更新
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2010-1-11 13:03 | 只看该作者
2009.1.11 第2次更新
回复 支持 反对

使用道具 举报

6#
发表于 2010-1-11 19:29 | 只看该作者
好吧,既然007不相信我的分析,那我就用实例来说明吧。) O7 U, O' n: K( X- t& k: @
以font目录中的font_game_menu_buttons为例,用16进制工具打开它,我们就能看到:
- {) P4 e9 Y. {# b+ \; y; V' |; mOffset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F3 i5 {. K6 F/ T: ~9 R7 d! g

# S" L1 j. i% N. k7 r00000000   16 00 00 00 66 6F 6E 74  5F 67 61 6D 65 5F 6D 65   ....font_game_me* \' m1 x1 V6 G, u
00000010   6E 75 5F 62 75 74 74 6F  6E 73 21 00 00 00 50 04   nu_buttons!...P.
, g  \8 A! I% i+ M" I# }3 y00000020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................/ F7 m. |% x. M+ E2 t' _6 U' e
00000030   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................6 f, ~' j% Z% ?5 c3 P9 c4 T

8 {: ?! {5 Z8 A- h第一个字节0x16表示每个字符的占位是24个字节,偏移量0x1e开始的4个字节0x0450代表这个索引表一共有这么多个字符。
/ R9 i0 P+ H* ?  @6 C' B$ m" c: J) O1 E4 h, C9 n4 j6 |# _7 U) y
再跳到数据部分:0 c# O: E3 X8 B$ l# O0 y5 F  u
, F, |  Y& z! w' R! G: B
Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
. E! A2 f& q5 N& I( t! ?. @! _: H4 i9 W1 S$ o
00000320   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
" n; ?5 u% b) V8 i00000330   00 00 00 00 00 00 00 00  00 00 6A 01 00 00 AE 00   ..........j...?
  S9 K/ s. u! V: f% [00000340   00 00 6F 01 00 00 CF 00  00 00 00 00 00 00 00 00   ..o...?........
0 j- O; {% B; e% Q7 w00000350   00 00 EF 01 00 00 AE 00  00 00 F5 01 00 00 CF 00   ..?..?..?..?+ Z& B4 M1 V! C+ M
00000360   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
1 K2 m4 R& ^# b& \* M' C00000370   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................9 X) V  K% f& ]5 @# B4 r. A
6 X4 |+ ?# i; H; K' y* X* C: q
0x016A, 0x00AE,0x016F,0x00CF分别是左上角的横纵坐标,右下角的横纵坐标,我们看看这个范围在对应的图片中是什么:
) S: u* {2 B( c2 g% w. ?  a
9 L$ R3 p& X9 }+ ~' e  & t$ ~) w% E3 L+ ~7 h) u! s% ?* q! \$ e1 J
从图中可以看出,这个范围对应的是字符"!"。同样,跳过8个字节的00后,0x01EF, 0x00AE, 0x01F5, 0x00CF也能对应出相应的字符。
( n7 V( O/ I" F+ d7 u/ k  X2 `% i- m% K* Z1 `& T1 P" Z
为此,我专门写了一个小工具来查看显示顺序与图片之间的关系。这个工具只能证明字符的存储是按照ASCII顺序,而不能说明是从哪个字符开始的。3 T# C8 P: a; _4 T, w6 C
  
! |9 m; s" k: s: k当然,这个工具中我做了一些处理。因为第一个显示的字符是"!",所以我将它的ASCII码定为33了。0 D! \$ M) o' }3 ~2 {5 U' b7 l
我们点击SPIN的上下箭头,调整ASCII码,就可以看到该顺序在索引中取出的是什么字符图片。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

7#
发表于 2010-1-11 19:39 | 只看该作者
另外,说一下汉字导致文件长度增长的问题。
' E8 W' w  H, |7 v, T) c- X并不是说我们有9000个汉字,就多了9000*24这么多个字节。因为汉字占的双字节与单字节字符是不连续的。以第一个汉字"啊"字为例,双字节是B0 A1,换成10进制就是45217,也就是说,在这个“啊”字前面,至少有45000个24个00的空占位。所以才导致这个字库的索引文件超过1M。
' \: q# G& C- f8 z6 N, J& ?当然,我这样说的前提是基于索引表是连续的这个假设的前提下,如果能找到俄文字符的对应关系,可能就不会有这么大了。
回复 支持 反对

使用道具 举报

8#
发表于 2010-1-11 19:42 | 只看该作者
突然想到,007下载的游戏是不是跟我的版本不一样?我是从Reflexive网站上直接下载的。其中Localization文件4.60 MB (4,826,852 字节)。
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2010-1-11 20:46 | 只看该作者
引用第7楼肥牛于2010-01-11 19:42发表的  :" ^4 W% |9 |4 n8 [4 [5 q+ m# K7 ^/ ^
突然想到,007下载的游戏是不是跟我的版本不一样?我是从Reflexive网站上直接下载的。其中Localization文件4.60 MB (4,826,852 字节)。

8 o6 k. j- r$ l: b先回答这个,我用的也是这个版本。文件大小一样。
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2010-1-11 20:55 | 只看该作者
引用第6楼肥牛于2010-01-11 19:39发表的  :
& z9 R/ j* o; E; q另外,说一下汉字导致文件长度增长的问题。
; |) x( ~% ]. s& _" n2 `并不是说我们有9000个汉字,就多了9000*24这么多个字节。因为汉字占的双字节与单字节字符是不连续的。以第一个汉字"啊"字为例,双字节是B0 A1,换成10进制就是45217,也就是说,在这个“啊”字前面,至少有45000个24个00的空占位。所以才导致这个字库的索引文件超过1M。
2 y; g* L% S: o& W- q4 u. ~) x: x0 [# A当然,我这样说的前提是基于索引表是连续的这个假设的前提下,如果能找到俄文字符的对应关系,可能就不会有这么大了。

/ j1 K' ~- }( h& [% R你的意思我明白了。1 k9 e9 @4 z5 ^! n. ]" S
你是说在字体索引文件里包含了所有的码位。
- r( p$ R# v% o) Y" J! r2 X) p我的疑惑是,如果是这样的话,码位的数量在定义文件头部有定义,
. R2 c- o7 ^3 }0 l2 U7 |但是起始码和终止码在何处定义的呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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