在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件, * U1 Q$ ]# ]6 E. x, X$ `( G, ^6 q% ]0 i
分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的 5 R5 O4 E( P, A! N/ k- `5 l
形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。
, ~1 \ l5 `/ e, D* j
. c! i$ f3 Q* p' V: j9 V( B本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 1 _5 M* v# E( X. B$ ~- p# _3 s
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话, , L" s" }; J/ R' G" e/ H' ^( B
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
! H: r# R. P7 O' ^$ O(当然,都是以4个字节的16进制数的形式存在的)
. [0 v6 I! ]2 m; B我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 ( x( s9 c7 T( G, ?; Q
如果找到的话,就在画面上表示出来。
0 i9 B6 [1 l+ ^. p: D表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
~5 Q# `1 D$ J2 A( ?就在相应的位置画上一条纵向的竖线。 ) m! l8 a4 O% ]4 |* h/ _" x, ]; c
如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。
. |% U7 _$ M( j% C2 _用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是
" f0 o- u7 Q a, F5 z' `; L+ C7 ?7 W Z由于这些数据是分散,非均匀分布的所以可以很直观地排除。 2 S" P* |0 L# s$ U- m- m( J3 T) x4 N
这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 ! j) N% f! o+ G. A
有了这个工具,可以大大加快寻找图片字库定义的过程。 ' M: ^3 ~& H! `' k) K/ U
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。 1 A; D3 G/ E" [, w3 z9 D
对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。 6 f* {! E3 ?' d1 O( ^# T0 X
9 _: k4 y. k6 b8 l+ _' C
不知道有没有懂技术的热心朋友来完成这个工具?
& j( s3 p8 K2 G9 @# U
7 o t, a" Q' C$ E5 o5 P! x---------------------------------------------------------- $ N( T1 O1 e8 R# e
2010.4.15 更新 . J. @4 W: U) z R9 w: K ]8 G
scgame,你好,想把这个任务安排给你来作。
$ T+ p/ r# j5 E' L8 {最近如果事情比较多的话,可以等有空的时候再做,不着急。
; T! a( e- F6 z我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。 4 k* A& S' e; G1 X3 u' t
有不懂的话,请提问。
* H9 x* X! C1 K5 k) ^6 q* r* d/ S, g: e7 ?
|