在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
: w! [) w. S: Z; D1 {& s分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
' J5 ?: k' @! L5 s% e1 `+ `& H6 X形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。 ) B+ E0 |# `7 u d6 c
& J& U: v u! N6 n9 v
本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 - Q/ |/ x! q, ]
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话,
* C, t0 P: S3 j( v9 X/ f/ H在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。 + x! ~- \0 P4 o2 y; D; R/ u
(当然,都是以4个字节的16进制数的形式存在的) $ I4 [% T: R4 |3 x
我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 " K$ L& B/ v/ A: O4 H
如果找到的话,就在画面上表示出来。
, X4 K) @5 C, a表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
! S' h+ F1 U+ `9 w就在相应的位置画上一条纵向的竖线。
8 F5 ^% m7 R" z7 D+ [' y7 }3 H如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。 + f, x$ R3 K4 ?4 P+ I3 |! g' o
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是 0 k9 u3 }' H. |" a* N
由于这些数据是分散,非均匀分布的所以可以很直观地排除。
8 `9 v `$ ^# a$ h+ S5 |4 \* ?0 S这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。
8 f0 d2 \" q2 `9 S- I9 D8 S) s有了这个工具,可以大大加快寻找图片字库定义的过程。
' Z- D$ B l. }1 V2 X! P# }7 V另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
2 @/ A) b. q' \8 ^* Q对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。
9 V) a2 K" \- C& F
$ I V4 l8 x! {4 F+ [0 O9 o4 U不知道有没有懂技术的热心朋友来完成这个工具? ( j, i }0 o3 L% _2 k& J' A& d8 s
+ U( T+ u# [1 Q) Z( u3 {( m: Q
---------------------------------------------------------- 8 I# X! f0 O$ [
2010.4.15 更新 0 h, Q1 [8 `2 N3 l) U# x
scgame,你好,想把这个任务安排给你来作。
- r; B/ `0 n! V! h( [9 K2 q最近如果事情比较多的话,可以等有空的时候再做,不着急。 * A* _3 ]9 i- q0 y8 s
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
- O* O d" Z& S- z+ x1 i有不懂的话,请提问。 1 }# Q z% H p# `& g4 \; H" B
! F3 v/ e% P$ r! N% @7 P
|