在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
" H( g6 V7 X# A: ]分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的 9 U) \. M& ?1 `6 `7 o+ K
形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。 ( M3 V- J3 o( i+ A- K6 T
; I; \" j# [0 p, L& `本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。
1 E0 d& O5 s/ V: {# Z8 ]我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话,
' k9 f' M) [- b, z0 X2 J% Y在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
7 G" s* X, v5 A* p(当然,都是以4个字节的16进制数的形式存在的)
( u& G M. K H% o+ G, m F8 U我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 ( B0 f4 r4 p9 ~ U1 e
如果找到的话,就在画面上表示出来。
. N% L2 r& {! b" {表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
* s: `' d3 L/ C就在相应的位置画上一条纵向的竖线。
5 c' J& e. ]4 G- Z1 M, k如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。 7 ]; @: T5 W$ U% r) t& y, I3 w
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是
8 h1 T. Y- O& r+ l) i由于这些数据是分散,非均匀分布的所以可以很直观地排除。 # @' f' ]8 H7 u5 z+ E$ {+ D
这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 2 e3 a% }6 p- C; m! B1 i/ A
有了这个工具,可以大大加快寻找图片字库定义的过程。 0 J7 u9 }1 [# a: Y* I) i- u
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
! j9 v9 D0 f9 F) M6 T2 ?对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。 ( z8 P- J# }* l4 s5 X8 `
; y4 j* c9 M( k# Y( k# K不知道有没有懂技术的热心朋友来完成这个工具? " o1 d) h2 x, P/ Q7 h3 v4 E
- B# E6 o( r7 u( m6 V# Y---------------------------------------------------------- / v* n+ J; n3 K4 M% S
2010.4.15 更新 9 l, m- [% ?! Z* j
scgame,你好,想把这个任务安排给你来作。 8 l; ^ J- `) m9 C$ M# k- U
最近如果事情比较多的话,可以等有空的时候再做,不着急。 . X, P h3 M. L$ d3 y: r
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
% y5 Q4 |* @# z有不懂的话,请提问。
. Q. @# q9 Q. q9 d$ V% _+ P9 B, o" z
|