在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
7 Y0 Y" O6 E0 N0 r4 I% n: t) t2 Q分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的 $ c* b* c- s6 @% m. }9 n( ~7 t- t
形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。 # d2 V3 k0 D+ K( n7 {
3 S: j1 [" W4 Z: T- a本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 / B3 }5 I* C$ c) b+ p
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话, $ r' a" P+ b! K9 O2 l; q
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
( g; N& ]' k. P% u$ N$ z- w1 H5 B(当然,都是以4个字节的16进制数的形式存在的) / _! R; W9 v8 ?( J# _" V
我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 " {, B) b9 h9 m/ X/ ]
如果找到的话,就在画面上表示出来。
2 W Y7 J3 j; _$ J2 O1 v表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话, 0 [8 o2 C8 m$ N3 C
就在相应的位置画上一条纵向的竖线。 H4 j6 u) x* b( ?- ^
如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。 2 q) Q- x3 [+ R
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是
9 E9 T* R3 T4 {6 c由于这些数据是分散,非均匀分布的所以可以很直观地排除。
/ O" @2 Z1 j p) K' I6 E3 l这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 ! s b7 `" \& w. A; L. s: u% V
有了这个工具,可以大大加快寻找图片字库定义的过程。 % e* K% y2 [" p9 C/ G/ O+ ]
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。 - r8 J$ P Y0 U( b3 k3 q
对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。
% m" J& q3 ^& b7 b; B2 U6 r$ L
3 m: g. Q* |) U' {: S: d不知道有没有懂技术的热心朋友来完成这个工具?
2 z0 o1 o$ O( r f7 y
# D9 ]) j1 m2 O0 x6 S' m----------------------------------------------------------
9 D$ H/ w5 r) H' c! A- }% q2010.4.15 更新 ) m* G/ J' Y" m' ~- H/ c
scgame,你好,想把这个任务安排给你来作。
! s( E. S& q6 [ O2 [" X" Q6 }7 ?3 R最近如果事情比较多的话,可以等有空的时候再做,不着急。 9 I4 D u4 s7 C2 u1 y+ _1 k; Y/ w
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。 1 k. r* J/ b1 S, B
有不懂的话,请提问。 & U$ H' B; U* V
( l+ V- ]! Q9 S7 y( x |