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

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

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

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

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

林登布鲁克的冒险解包器

林登布鲁克的冒险 Adventures of Natalie Brooks  解包器   C) l8 ~. r7 {- C8 }
要配合QuickBMS使用。 " R& i- g" {8 w) `

$ t  V5 u. N6 [& N) ^-----------------------------------------------------------------
& ?. Y1 c2 b/ D% b2009.1.11 第1次更新
( }6 Z2 T+ T% G% r1 J6 b
; f# ^  @$ L) r# G我大致看了一下,觉得肥牛分析的还有些问题。
# m3 O, D' w4 ^" B我先纠正第1个问题。文件的结构应该是这样的: - O( }2 B3 t  U2 d5 u$ x2 R+ \
字体文件名长度 4bytse $ P$ ?5 B8 R: X& Q: `$ p
字体文件名 nbytes ! Z/ Z, R. a# ^
字体高度 4bytse $ o: N! [- n9 z0 ]9 K4 S# \
字体数 4bytse 7 O7 t5 V; s  y! Z$ R- q
字模数据 字体数X24 bytes
) f* A" M! @" `+ h( b9 [尾部未知数据 nbytes
$ ~* K) x7 O, p% i$ R/ U( n- g/ |4 [
7 v! B# ]: Y& E' \) Z肥牛可能只分析了1个字体文件,正好那个文件的字体高度是0x18. 所以误认为那是每条记录的字节数。其实再看看其他文件,应该会发现那是字体高度的可能性最大。
$ `7 R: p3 p6 D' T* q3 B
  l; J8 _& n! A- m4 m# `- C" U5 t------------------------------------------------------------------ 4 ~% p% U3 R6 [; b
2009.1.11 第2次更新 7 `  S  [: p4 T5 l- {2 _1 Q
肥牛说字符是按照ASCII码的顺序排列。我不知道是怎样看出来的?
7 `* c; a7 b* d: M. S. |据我观察字符并不是按照ASCII码的顺序排列。 ' {# K5 n, L" d, B* r9 t6 K& p
4 d$ K" W+ |: X# |* y
首先,我们估计在每条记录的24个字节中,有4个字节记录了这个字符的编码。
' D) E# B$ I& _3 H: q9 C我们知道A这个字幕,ascii码和utf-8是0x41,utf-16码是0x41 0x00.
0 K5 ~3 C, k4 w, B$ Z4 _( |/ L! x如果A-Z按顺序排列的话,我们会在字体定义文件中发现等间距(24byts)的
& U0 b: {; g( p* H/ H0x41,0x42....这样的数据。但是实际上文件中并没有发现, + w3 P5 \* c3 G& o6 h
所以字符应该不是按照ASCII码的顺序排列。
/ o2 [8 C" W8 @5 i' [; \1 `/ ]. ?& M6 y; \
另外,肥牛说索引文件会长度由26K变成了1M以上。
% E) _1 m5 |1 Y& X- D* V我不知道肥牛是如何算出来的,每条记录24bytes,汉字算它9000个字。7 e0 Q' p( z3 H" j% x
算下来也就216K左右。远小于1M。

本帖子中包含更多资源

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

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

使用道具 举报

沙发
 楼主| 发表于 2010-1-11 00:27 | 只看该作者
顶上来,此游戏下载7 o6 ?2 ?; n8 T- z
https://www.chinaavg.com/read.php?tid=19777
回复 支持 反对

使用道具 举报

板凳
发表于 2010-1-11 08:42 | 只看该作者
没看到楼顶这个帖子,从网上搜了一个解包器,估计跟楼顶的这个一样。. \$ v% C) o# [

# e7 d/ l4 E/ B$ _9 r7 a0 u解包Localization后,会出现三个目录, xml、texture、font
: x+ I8 p$ q; j0 J其中,texture目录中的保存的是PNG格式的字库图片,font目录中保存的是字库的索引文件,xml中就是可翻译的字符串了。
) O# {" E7 l* R& E' A3 n" Z( V- ?7 O6 T& b
PNG的图片就不用说了,我们经常遇见。下面说说font目录中的字库索引文件。(解包后的东西在家里的电脑上,现在凭印象写这个东西,有什么不对的晚上回去以后再更正。)+ r4 c0 q6 x, i# @* `' F% R3 \/ K
在font目录中,简单看了一下,文件的第一个字节表示每个字符由几个字节组成。比如0B就是11个字节,16就是24个字节。以24个字节的为例,文件头部有对应的图片文件名,然后是表示此索引包含多少个字符。后面就是每个字的数据内容了。字符是按照ASCII码的顺序排列。每个字符占24个字节,左、上、右、下各占4字节,然后是8个字节的0X00。如果此ASCII码的字符在字库中没有,那么它对应的24个字节全为0X00(好像就是为了占位)。
% x; o$ B3 R; ?& L% A9 ~9 P: }4 z
+ j# r0 |  {4 }1 }) r- w$ C7 h疑问:1 Y2 X8 Z+ E1 x9 l4 ]+ X
1、索引文件末尾的几个字节不知道是做什么用的。
* U) }+ \5 z$ ], n' t2、按照我的想法,将汉字的双字节作为ASCII码,依照顺序写入索引文件。同时修改索引文件头部表示字符数的部分。这样却导致进入游戏后文字都不显示了。不知道是什么原因。
9 e8 g! a6 {- V3、在字库的图片中,我看到了俄文。在字库的索引文件中找到对应的位置,发现与该俄文的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不相信我的分析,那我就用实例来说明吧。9 t8 W% P' Z* d. ?3 g( U
以font目录中的font_game_menu_buttons为例,用16进制工具打开它,我们就能看到:# C1 d9 U5 \. O3 z
Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
. I: _9 O, ?. Q; j# t2 }( W  {9 m; u" x
00000000   16 00 00 00 66 6F 6E 74  5F 67 61 6D 65 5F 6D 65   ....font_game_me
3 S6 r# t8 q' a' b* u2 i6 z, ]00000010   6E 75 5F 62 75 74 74 6F  6E 73 21 00 00 00 50 04   nu_buttons!...P.0 D2 m* O% b) S3 y) U* H" ?. f
00000020   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................& i+ [# p  f5 Y! [$ r; F4 ^
00000030   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................+ j: \. ?9 O, L$ x: O

1 _# M3 g! p' N第一个字节0x16表示每个字符的占位是24个字节,偏移量0x1e开始的4个字节0x0450代表这个索引表一共有这么多个字符。$ l: w* w% k/ q/ c) P; L) D

4 b2 U' O; z8 f4 ^再跳到数据部分:$ O: h# {9 v8 ~4 m7 p5 w/ J

1 f' ?: a& M- k! q0 W; DOffset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F
1 |& s2 S/ B( x, ~# K: T& o, {) t" M0 Q: Q
00000320   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
' q5 L9 y& d4 t+ V9 {00000330   00 00 00 00 00 00 00 00  00 00 6A 01 00 00 AE 00   ..........j...?; C0 q' a/ b  }. w4 m
00000340   00 00 6F 01 00 00 CF 00  00 00 00 00 00 00 00 00   ..o...?........
( Z! l: v7 Y; x! j9 a; }" ^/ O00000350   00 00 EF 01 00 00 AE 00  00 00 F5 01 00 00 CF 00   ..?..?..?..?
( }4 y( C7 v* \00000360   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
7 M0 `" ~) o$ c; [: H  l- `00000370   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
* L: G- J+ [. Z7 t7 F2 b- W5 N5 L$ a+ U# W0 n* Z
0x016A, 0x00AE,0x016F,0x00CF分别是左上角的横纵坐标,右下角的横纵坐标,我们看看这个范围在对应的图片中是什么:
& b5 j9 c+ S: E+ f
6 s9 R% K8 O- P& j  ! [  k- b' J$ v( \- O: F
从图中可以看出,这个范围对应的是字符"!"。同样,跳过8个字节的00后,0x01EF, 0x00AE, 0x01F5, 0x00CF也能对应出相应的字符。
% e* Z: F: i8 l- k
" |! j; w9 K/ U; h! {为此,我专门写了一个小工具来查看显示顺序与图片之间的关系。这个工具只能证明字符的存储是按照ASCII顺序,而不能说明是从哪个字符开始的。
  ^+ \+ k* s; N/ y/ o4 {  
! F7 h, T' p) {3 I3 t9 ~当然,这个工具中我做了一些处理。因为第一个显示的字符是"!",所以我将它的ASCII码定为33了。( j0 z2 e, t* M& n% [! u
我们点击SPIN的上下箭头,调整ASCII码,就可以看到该顺序在索引中取出的是什么字符图片。

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

使用道具 举报

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发表的  :
& N, P/ k" ]( \# m0 @# j! J4 Y突然想到,007下载的游戏是不是跟我的版本不一样?我是从Reflexive网站上直接下载的。其中Localization文件4.60 MB (4,826,852 字节)。

/ Y' |! x3 ~3 U. R: t先回答这个,我用的也是这个版本。文件大小一样。
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2010-1-11 20:55 | 只看该作者
引用第6楼肥牛于2010-01-11 19:39发表的  :
2 }- U9 J, E5 ?) c/ I, @; M另外,说一下汉字导致文件长度增长的问题。
: v4 q2 ?! p; U3 }2 H4 ]- p并不是说我们有9000个汉字,就多了9000*24这么多个字节。因为汉字占的双字节与单字节字符是不连续的。以第一个汉字"啊"字为例,双字节是B0 A1,换成10进制就是45217,也就是说,在这个“啊”字前面,至少有45000个24个00的空占位。所以才导致这个字库的索引文件超过1M。  R$ ?) w- I; u& j9 A6 J
当然,我这样说的前提是基于索引表是连续的这个假设的前提下,如果能找到俄文字符的对应关系,可能就不会有这么大了。
0 ]0 c8 B9 D( P/ w
你的意思我明白了。7 i+ C9 U- m) a6 N* e. t# E- `
你是说在字体索引文件里包含了所有的码位。) ~" H% ^9 D0 H/ a
我的疑惑是,如果是这样的话,码位的数量在定义文件头部有定义,% l4 N0 C: M( s: n2 t" E: t
但是起始码和终止码在何处定义的呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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