在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
2 t3 l0 j) h6 n* S+ p; R, k) W1 D分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的 8 j# Y3 }9 u! T, y: o! z
形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。
$ p3 \# g; Y3 ^# e( r. a! _- `. K' g$ F+ h; d, p% C5 g9 C
本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 ' ?! C. Z6 ^ m6 r4 b
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话, # O- S! x' Y& b
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
4 v, p9 W% X1 q(当然,都是以4个字节的16进制数的形式存在的)
3 O* C4 R7 y3 a% M+ |2 g8 a3 {+ S我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 % {. c* h( }) t! U) u4 C
如果找到的话,就在画面上表示出来。 . x5 C$ z+ O( m- G/ o% b% i
表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
@/ }0 v, O, c6 G3 r) O就在相应的位置画上一条纵向的竖线。 ) o* Z! v$ @) K+ {0 d
如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。
) Z0 _$ ?" o2 ^6 w7 u5 _9 q用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是 8 w- i4 i; I1 ]0 D- A3 J: V$ B/ u
由于这些数据是分散,非均匀分布的所以可以很直观地排除。
- n% ?9 l" E8 i这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 7 I" b2 S8 I, z
有了这个工具,可以大大加快寻找图片字库定义的过程。 * N* H2 V. A! r( d" V
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
/ A) }; F2 G2 m3 T7 \7 v对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。 7 g5 y& v) F5 h$ L! z, W/ b
& ]) X! p Y Z6 o2 _不知道有没有懂技术的热心朋友来完成这个工具? $ n" q. ?8 G8 z
3 h" B4 Y3 h8 h! V
----------------------------------------------------------
& |% z' H ^: I4 n. U& ~2010.4.15 更新 7 h2 U. P" d2 [4 d5 }6 {
scgame,你好,想把这个任务安排给你来作。
+ e& b6 d1 n7 @) r7 A0 n! }4 A最近如果事情比较多的话,可以等有空的时候再做,不着急。 % m& U5 e" O; {! E7 w
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
- n( s( h! J1 l* ]2 e: ^有不懂的话,请提问。 k9 T# F0 A* U$ h ]
5 b) o7 v% }) Y0 ]) K; x |