在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
7 X2 k2 e [5 j! V1 w3 u7 ]分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的 - O5 u5 y/ j5 u, N9 @9 B
形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。
7 }$ X" s2 O3 k1 o3 |/ F
5 h6 V2 `4 ^; Q. c4 G% p7 t本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。
2 X' K/ J* o" f7 X. L1 M我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话,
0 T* C, k# Q C% S在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。 # G/ j0 I) H5 O( [
(当然,都是以4个字节的16进制数的形式存在的)
) \% {- q% Z* B4 \, N: ]我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 9 ~0 L( @$ C! c, T5 R w. [
如果找到的话,就在画面上表示出来。
) f8 ?" i0 y, C+ [/ c; x/ h1 N表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话, 8 I; G1 m' A8 [* w o
就在相应的位置画上一条纵向的竖线。 4 f# Y/ l5 F! w# t1 [; l
如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。 3 W! U) Q# y2 s j
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是 ; j. C- D& Y- \$ D( s% s# B
由于这些数据是分散,非均匀分布的所以可以很直观地排除。
. Y9 t% f5 Q# k这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 7 h" P! u' r& R m o
有了这个工具,可以大大加快寻找图片字库定义的过程。 5 [" S& d u+ g. Q& K
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
9 Y3 i0 D2 g; V0 p" t# A# Y1 }, R对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。
& X, P: [: B+ Y$ ^
9 ^- H# _4 K) U1 w' {* ~不知道有没有懂技术的热心朋友来完成这个工具?
3 W1 j( P8 [& J/ h0 R$ f( L, I2 `* }6 n. T. F P. y
----------------------------------------------------------
5 n4 G2 {$ K4 V! V( `% T2010.4.15 更新 - \2 q {9 ^ e' u4 T6 m x! n
scgame,你好,想把这个任务安排给你来作。
K( p% @+ b% g9 B) K9 c最近如果事情比较多的话,可以等有空的时候再做,不着急。 6 T' H: C+ ?! j
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。 ]6 T3 C0 U: g* Y. f% h, ?% f
有不懂的话,请提问。
% e, P7 e# Y. T# u5 C! h, J5 K9 w3 \1 V2 y! j, @- q7 Q
|