在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
: b* t+ h1 Q+ k7 ?; {2 T/ n分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
6 w) G( a" V! B1 p9 M形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。 4 M: `3 u) v u+ X& O* ^
: ]5 R$ M* X, X6 U本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 8 K& u6 z3 q7 Q% T
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话, # ?# m+ ?/ ]0 n9 w4 u
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。 # i" R9 B6 S/ I2 G. }" y
(当然,都是以4个字节的16进制数的形式存在的) $ E0 ^% {" w: X1 Z: s% P
我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。
D/ E# u# C* j& J8 U6 L( `7 A0 J4 }7 D如果找到的话,就在画面上表示出来。
. D# o! l6 U; x表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
A, K( [6 L% W1 Q2 ?就在相应的位置画上一条纵向的竖线。
, L$ B8 Q w8 r. A! l如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。
7 H/ g" U" J( K. x+ ]# Z用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是
. f( x/ C' d3 l/ w, C由于这些数据是分散,非均匀分布的所以可以很直观地排除。
! O3 {) q+ p" W8 u9 b7 u这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 # G. l! d: y$ i% l
有了这个工具,可以大大加快寻找图片字库定义的过程。
0 V" W" @$ S6 b7 [' l另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
' j5 P. d) J2 n. v4 _* f/ r对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。
6 K( \$ {5 c0 t# @* r4 I7 |, @+ K* O: E
不知道有没有懂技术的热心朋友来完成这个工具?
: I) j3 Y% O* F6 w7 n! [2 R: D4 x; r- u( g$ l
----------------------------------------------------------
! J4 }3 x! |7 l0 x8 P' ^( {2010.4.15 更新 + p+ @ Y+ P) @; d* F) n
scgame,你好,想把这个任务安排给你来作。 " j2 @$ E& |; v. X- K+ Z
最近如果事情比较多的话,可以等有空的时候再做,不着急。 ; Y1 z7 Z: s6 a( ?. l- q
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
! P% r% X9 X* U% R4 ~: w0 j有不懂的话,请提问。
$ v1 |2 Z1 g1 X) N
+ w" ?# l/ z$ V F$ [# r |