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

汉化资料 关于静物2的分析

[复制链接]
楼主: jinxin8866
打印 上一主题 下一主题

[汉化资料] 关于静物2的分析

11#
发表于 2010-4-2 11:09 | 只看该作者
如果是矢量字库的话,看来用内挂就不太合适了。
6 s" ~, K% Q3 K8 e6 i7 e# U1 q, Z必须要把字库结构分析清楚,然后在外面把字库修改好。
回复 支持 反对

使用道具 举报

12#
 楼主| 发表于 2010-4-9 15:11 | 只看该作者

静物2的解压算法

发现一段可疑的算法:# D/ m* Q+ O& F' T: I
1008A43F   .  66:AD       lods word ptr ds:[esi]                     ;  esi:原文件数据缓冲区
4 M! M2 ?2 F( d* ?4 J  Q1008A441   .  8ACB        mov cl,bl
! @# L" J5 @3 j9 V! I- G1008A443   .  80C3 10     add bl,10* h: k8 T* G$ p: X/ T
1008A446   .  D3E0        shl eax,cl
- ^5 Y9 p4 g% C) \7 o1008A448   .  0BE8        or ebp,eax6 v2 {$ Z' M& r% E" a) L7 ^$ T
1008A44A   >  8B1424      mov edx,dword ptr ss:[esp]
& Q+ z% t0 v4 p3 U- u6 q  _6 w9 }1008A44D   .  8B4C24 08   mov ecx,dword ptr ss:[esp+8]3 F# i" P3 b  X* B/ e% H6 t& T
1008A451   .  23D5        and edx,ebp
- m: B! i9 P. y0 Y5 ]* m" f1008A453   .  8B0491      mov eax,dword ptr ds:[ecx+edx*4]3 K, X# a) t$ l( R
1008A456   >  8ACC        mov cl,ah) T# B0 B2 t& H' Z
1008A458   .  2ADC        sub bl,ah
. Y. p( _$ s. K% V1 W: d$ p1008A45A   .  D3ED        shr ebp,cl; O6 W7 W  w5 H# j1 J8 @# [8 p* I4 O
1008A45C   .  84C0        test al,al
0 o1 a' V- r* Q2 b6 d/ G) c9 r8 `4 g1008A45E   .  75 19       jnz short xcEngine.1008A479
" @5 i2 q8 _8 ]! b) v1008A460   .  C1E8 10     shr eax,10
& D" \# J, T$ L% U! [1008A463   .  AA          stos byte ptr es:[edi]                    ;  edi:解压后文件数据缓冲区
, P" K; l9 _, `原文件数据缓冲区经跟踪就是Sl2fnt.dat异或后的数据,解压后的部分数据如下:

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

13#
发表于 2010-4-9 17:11 | 只看该作者
收到,感觉逐渐接近中。。。
回复 支持 反对

使用道具 举报

14#
发表于 2010-4-9 18:46 | 只看该作者
对了,jinxin8866 你说这个游戏是矢量字库。$ e( |$ z  G! d$ l
我又仔细想了一下,觉得不是。+ L- D2 p8 b$ C0 Q  q7 K
理由是这个游戏的字体,每种语言都有不同大小字号的多个。
2 L6 R; B$ {% r% U( i, p! |如果是矢量字库的话,1种字体只要1种就行了,因为可以自由缩放嘛。
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2010-4-13 13:42 | 只看该作者
字体Yellowjacket 18.EN占39B7个字节,解压后得到3个文件详见附件,其中dump3是索引表

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

16#
发表于 2010-4-13 17:13 | 只看该作者
内存dump下来的东西?
( M& |8 D, G: C$ Q/ q! X$ r怎么会有3个文件呢? ! W/ S3 h6 a& D
猜测:% _6 q- R( Z" r6 h! c2 f& `  ~. K4 z
第1个好象是字库,第2个应该是字库定义文件的位置部分,第3应该是字库定义文件的索引部分
回复 支持 反对

使用道具 举报

17#
 楼主| 发表于 2010-4-13 21:10 | 只看该作者
是的,又发现了以下数据,可能是对第二个文件格式的解析,继续研究中。。。。。。。。。。。
  r* r) ?; |  D6 A034EA490                           6E 61 6D 65 13 00 00 00          name.../ n* K: i+ i6 j5 E# F, J
034EA4A0   59 65 6C 6C 6F 77 6A 61 63 6B 65 74 31 38 77 34  Yellowjacket18w4: U% X* H* Z5 y! @6 O8 V- v
034EA4B0   30 30 00 66 6C 61 67 04 00 00 00 00 00 00 00 77  00.flag.......w
9 p0 i* D& B" r' m7 w/ i( h. L8 o034EA4C0   64 74 68 04 00 00 00 00 01 00 00 68 67 74 68 04  dth......hgth
' f' A8 r# r* x8 W# M6 h+ w. N" a034EA4D0   00 00 00 00 01 00 00 66 6D 74 20 04 00 00 00 15  ......fmt ...
) K% E7 `% I  g5 T$ f: o034EA4E0   00 00 00 6D 69 70 63 04 00 00 00 01 00 00 00 58  ...mipc......X& S' N8 o( T, L7 h0 d
034EA4F0   43 54 47 8B 26 00 00 6E 61 6D 65 13 00 00 00 59  CTG?..name...Y# [( t- ?3 D1 j7 e2 {; K
034EA500   65 6C 6C 6F 77 6A 61 63 6B 65 74 31 38 77 34 30  ellowjacket18w40$ h' N2 A0 F, q6 A; \! b* R" S
034EA510   30 00 62 6D 61 70 04 00 00 00 01 00 00 00 68 67  0.bmap......hg8 M7 [( l+ _3 G" a. F
034EA520   68 74 04 00 00 00 00 00 B8 41 74 6F 70 20 04 00  ht.....窤top ., }' s; A6 a$ f
034EA530   00 00 00 00 88 41 62 74 6F 6D 04 00 00 00 00 00  ....圓btom.....
% n' E  O; _5 p8 e8 I7 C& x034EA540   C0 C0 63 74 65 72 04 00 00 00 00 00 B0 40 63 6C  览cter.....癅cl( b3 g% y2 J, j7 V0 P( Z+ t
034EA550   73 74 24 24 00 00 00 00 00 BB 00 00 00 BB 00 00  st$$.....?..?.
6 x* v* \7 h7 ?% R* n. M034EA560   00 3B 00 00 00 3B 00 00 80 BF 00 00 80 BF 00 00  .;...;..
回复 支持 反对

使用道具 举报

18#
发表于 2010-4-13 21:28 | 只看该作者
第一个文件估计是256个32x32点的rawdata点阵字库。
8 Q/ {# k) c/ Y8 w# F2 Q! D; P* S正在想找个能查看的工具。
回复 支持 反对

使用道具 举报

19#
发表于 2010-4-23 15:21 | 只看该作者

殊途同归

接上,一点点来,先把写屏函数分析完: 4 d& m$ R6 |; X% I. Y* N# S. A3 a
写屏函数:
  1. 02A2EA4C  |> /8B00              |/mov eax,dword ptr ds:[eax]
  2. 02A2EA4E  |. |0FB70450          ||movzx eax,word ptr ds:[eax+edx*2]                         ;  //取出第edx个字符
  3. 02A2EA52  |. |8B7C24 14         ||mov edi,dword ptr ss:[esp+14]
  4. 02A2EA56  |. |8B7F 2C           ||mov edi,dword ptr ds:[edi+2C]                             ;  //003E69F0
  5. 02A2EA59  |. |8D04C0            ||lea eax,dword ptr ds:[eax+eax*8]
  6. 02A2EA5C  |. |8D0487            ||lea eax,dword ptr ds:[edi+eax*4]                          ;  //eax存放的就是字库的地址(实际上是单个字符的坐标)
  7. 02A2EA5F  |. |8B7C24 0C         ||mov edi,dword ptr ss:[esp+C]                              ;  //129CE000
  8. 02A2EA63  |. |8D7C39 14         ||lea edi,dword ptr ds:[ecx+edi+14]
  9. 02A2EA67  |. |D940 04           ||fld dword ptr ds:[eax+4]
  10. 02A2EA6A  |. |83C2 01           ||add edx,1                                                 ;  //多少个需要渲染的字符
  11. 02A2EA6D  |. |D95C24 30         ||fstp dword ptr ss:[esp+30]
  12. 02A2EA71  |. |D900              ||fld dword ptr ds:[eax]
  13. 02A2EA73  |. |D91F              ||fstp dword ptr ds:[edi]
  14. 02A2EA75  |. |D94424 30         ||fld dword ptr ss:[esp+30]
  15. 02A2EA79  |. |D95F 04           ||fstp dword ptr ds:[edi+4]
  16. 02A2EA7C  |. |8B7C24 0C         ||mov edi,dword ptr ss:[esp+C]
  17. 02A2EA80  |. |D940 04           ||fld dword ptr ds:[eax+4]
  18. 02A2EA83  |. |8D7C39 30         ||lea edi,dword ptr ds:[ecx+edi+30]                         ;  // 14 + X,Y + 14 ==30
  19. 02A2EA87  |. |D95C24 30         ||fstp dword ptr ss:[esp+30]
  20. 02A2EA8B  |. |D940 08           ||fld dword ptr ds:[eax+8]
  21. 02A2EA8E  |. |D91F              ||fstp dword ptr ds:[edi]
  22. 02A2EA90  |. |D94424 30         ||fld dword ptr ss:[esp+30]
  23. 02A2EA94  |. |D95F 04           ||fstp dword ptr ds:[edi+4]
  24. 02A2EA97  |. |8B7C24 0C         ||mov edi,dword ptr ss:[esp+C]
  25. 02A2EA9B  |. |D940 0C           ||fld dword ptr ds:[eax+C]
  26. 02A2EA9E  |. |8D7C39 4C         ||lea edi,dword ptr ds:[ecx+edi+4C]
  27. 02A2EAA2  |. |D95C24 30         ||fstp dword ptr ss:[esp+30]
  28. 02A2EAA6  |. |D900              ||fld dword ptr ds:[eax]
  29. 02A2EAA8  |. |D91F              ||fstp dword ptr ds:[edi]
  30. 02A2EAAA  |. |D94424 30         ||fld dword ptr ss:[esp+30]
  31. 02A2EAAE  |. |D95F 04           ||fstp dword ptr ds:[edi+4]
  32. 02A2EAB1  |. |8B7C24 0C         ||mov edi,dword ptr ss:[esp+C]
  33. 02A2EAB5  |. |D940 0C           ||fld dword ptr ds:[eax+C]
  34. 02A2EAB8  |. |8D7C39 68         ||lea edi,dword ptr ds:[ecx+edi+68]
  35. 02A2EABC  |. |D95C24 30         ||fstp dword ptr ss:[esp+30]
  36. 02A2EAC0  |. |83C1 70           ||add ecx,70                                                ;  //每70一个顶点结构
  37. 02A2EAC3  |. |D940 08           ||fld dword ptr ds:[eax+8]
  38. 02A2EAC6  |. |D91F              ||fstp dword ptr ds:[edi]
  39. 02A2EAC8  |. |D94424 30         ||fld dword ptr ss:[esp+30]
  40. 02A2EACC  |. |D95F 04           ||fstp dword ptr ds:[edi+4]
  41. 02A2EACF  |. |8B46 58           ||mov eax,dword ptr ds:[esi+58]
  42. 02A2EAD2  |. |03C3              ||add eax,ebx
  43. 02A2EAD4  |. |3B50 08           ||cmp edx,dword ptr ds:[eax+8]
  44. 02A2EAD7  |.^\\0F8C 6FFFFFFF     |\\jl xcDxShad.02A2EA4C
复制代码

; j8 z3 }" U% _( V7 e5 s实际上这里是定义了一个顶点结构,那一串浮点运算就是根据003E69F0处的字符在字库中的坐标信息建来赋值自己定义的顶点结构
( `2 ^% Y' C# `5 U1 v- ]6 s* n  TLVertex vertices[] = 1 }& V. [, S% q$ Y: Q9 h! c! [
  { 9 b! e! D) {% M, c4 r1 n
   { 248.6f, 222.2f, 0.5f, 1.0f, 0xffffff00, a, b },
8 R, P6 g/ ]0 A: g   { 262.6f, 222.2f, 0.5f, 1.0f, 0xffffff00, c, b }, 7 w- z4 B2 r; b# |  D+ N
   { 248.6f, 240.2f, 0.5f, 1.0f, 0xffffff00, a, d }, 6 c# w. I" W, @  @. x
   { 262.6f, 240.2f, 0.5f, 1.0f, 0xffffff00, c, d }
% U8 [$ p, M4 T9 _0 g& i  }; //129CE000 指向vertices,0xffffff00表示颜色,这里应该是白色
3 c* _; D! Z  Y8 z" Y$ {
$ O1 q% w! G4 V  W# _. v; Z" X [a,b,c,d] = {0.02929688, 0.5410156, 0.08398438, 0.6113281}; //003E69F0
5 s& q# m# a; V# l0 [
( o8 f# m$ O+ t2 d2 ~0 bPS:“每个字符占1C个字节,最后的四个字节都是一样的,可以认为是结束标志”
- `! Q6 Z( o& x5 f其实是每个字符占0x70个字节,每个字符有4个顶点信息,你可以把它想像成那个字符的四个角,: S+ \" m; u# G+ f0 t* D
每1C个字节就是一个顶点信息,倒数第三个字节表示颜色,他们之间的颜色渐变是由DXD来实现的
+ Q& u( T7 E; t2 u这是一张DDS格式的图片字库
回复 支持 反对

使用道具 举报

20#
发表于 2010-4-23 18:54 | 只看该作者
  1. 00401AC0 . 81C7 0C010000 add edi,10C ; //单个字体文件结构长度
  2. 00401AC6 . 3BD8 cmp ebx,eax
  3. 00401AC8 .^ 72 C9 jb short SL2.00401A93
  4. 00401ACA . 8B7C24 1C mov edi,dword ptr ss:[esp+1C]
  5. 00401ACE > 8B9424 3C110000 mov edx,dword ptr ss:[esp+113C]
  6. 00401AD5 . 33DB xor ebx,ebx
  7. 00401AD7 . 85C0 test eax,eax
  8. 00401AD9 . 76 24 jbe short SL2.00401AFF
  9. 00401ADB . 8B06 mov eax,dword ptr ds:[esi]
  10. 00401ADD . 33C9 xor ecx,ecx
  11. 00401ADF . 90 nop
  12. 00401AE0 > > 899401 08010000 mov dword ptr ds:[ecx+eax+108],edx ; aD3dErrorD3dHea
  13. 00401AE7 . 8B06 mov eax,dword ptr ds:[esi]
  14. 00401AE9 . 039401 04010000 add edx,dword ptr ds:[ecx+eax+104]
  15. 00401AF0 . 83C3 01 add ebx,1
  16. 00401AF3 . 81C1 0C010000 add ecx,10C
  17. 00401AF9 . 3B5C24 14 cmp ebx,dword ptr ss:[esp+14]
  18. 00401AFD .^ 72 E1 jb short <SL2.aD3dErrorD3dHea>
  19. 00401AFF > 8BC5 mov eax,ebp ; //算出文件长度EDX
  20. 00401B01 . 8D50 01 lea edx,dword ptr ds:[eax+1]
  21. 00401B04 > 8A08 mov cl,byte ptr ds:[eax]
  22. 00401B06 . 83C0 01 add eax,1
  23. 00401B09 . 84C9 test cl,cl
  24. 00401B0B .^ 75 F7 jnz short SL2.00401B04
  25. 00401B0D . 2BC2 sub eax,edx
  26. 00401B0F . 8D3428 lea esi,dword ptr ds:[eax+ebp] ; //算出文件名长度EAX
复制代码

% p, \" a3 W! Q( M7 J) c) `$ I
8 i! R$ B7 c/ f2 Y2 g( `: L0 w8 u这一段解压代码拦不到,不知是不是因为我是DEMO版的原因?4 ?; l2 }( b9 N/ Y
1008A43F . 66:AD lods word ptr ds:[esi] ; esi:原文件数据缓冲区
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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