在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
2 N: W' y/ l* j) W分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的 % Y8 a3 q3 h8 f! ~6 W
形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。
+ i; ?6 F2 H0 _! m+ @9 D$ ?2 C
# g- l1 P3 U0 f( p& R+ H# C* d; O本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 ! o0 _: |/ X7 h- ]1 J
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话, " E8 _. }; e+ U; B4 W: `
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
2 |- D9 Y |- i* g3 T. D(当然,都是以4个字节的16进制数的形式存在的)
! c! |. w# O. f+ u D O我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。
) Z; u& A" a" y* o如果找到的话,就在画面上表示出来。
0 L& t+ l+ `# o6 ?- i, o/ O! z表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
+ X( q S! B/ l5 @就在相应的位置画上一条纵向的竖线。
- e0 p! h9 w1 e, v6 {- M如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。
6 n/ x8 k [$ y, N用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是 5 J8 Q2 J: a* u6 \. m
由于这些数据是分散,非均匀分布的所以可以很直观地排除。 6 L* x" o! Y7 ]* ?$ O* M
这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 . }) P# v6 w7 `" C8 G2 c$ z. m
有了这个工具,可以大大加快寻找图片字库定义的过程。
2 ~2 z' x7 l1 r, P另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
4 T0 \1 H c/ f1 q4 Z) c; F对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。
% D- }( {$ S% n5 ~% ?& {! v7 M2 \/ i: P4 z0 y3 O
不知道有没有懂技术的热心朋友来完成这个工具?
0 i' B# _+ ?) X, O% ]1 l7 y, }0 D6 P0 C$ v3 O7 o
----------------------------------------------------------
& o8 g G0 Q$ H' R2010.4.15 更新 ' i7 v" }- \ k5 k7 A/ } Z
scgame,你好,想把这个任务安排给你来作。
$ L$ ^2 d; e* N& ]& |3 x1 t) \最近如果事情比较多的话,可以等有空的时候再做,不着急。
+ Z: C! A) J S& T6 ~我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
' J9 E1 S+ W' S }( q+ A7 Y有不懂的话,请提问。
. \8 J3 s% Y% b+ O
2 j" \. h. j& V% m, B |