在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
' G4 }: u. @ c3 B分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
) d% O% w1 e6 B3 x, R8 g1 {形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。
k0 M9 A% B& J+ E* ]8 i8 H2 A" O2 E- h6 i9 n) Y/ X
本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。 ! N9 ^+ c$ ~: L# W
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话,
. B( r$ E6 V: @- n9 p* X6 ]在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
; _7 t3 Y" x; ?* L(当然,都是以4个字节的16进制数的形式存在的)
/ e) g& O# z6 j) k; m4 k我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。
2 ]" ^( ~) E6 |' q M3 c! B- k如果找到的话,就在画面上表示出来。
) W( i' e3 P2 V4 E0 I& B# j表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
; M" t. C4 }4 S4 K就在相应的位置画上一条纵向的竖线。
. c: I* R, m5 K$ W/ R, ]9 S% C如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。
: X2 @; q0 E& i* v. [用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是
! X5 U/ Q* d# d2 c6 B由于这些数据是分散,非均匀分布的所以可以很直观地排除。
# X$ I8 K, m+ z+ s4 ~这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。
1 J+ l5 S+ @% b# o有了这个工具,可以大大加快寻找图片字库定义的过程。
6 L' u% U# R5 M2 I8 x, q9 h2 A另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
2 w/ p$ B6 U# F) X对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。 7 [2 R) |8 ~3 \. d% K8 b# A
* X2 c' [9 B) J/ u0 p+ K& `7 A( M不知道有没有懂技术的热心朋友来完成这个工具?
3 O( Y) V% ]* {6 O1 B
1 L' m% h+ F- G1 W& K8 Y& W---------------------------------------------------------- / ]3 H) h, ^& H( S; h
2010.4.15 更新 " g0 j8 s) S; G* b! J" I6 r1 t& z% s
scgame,你好,想把这个任务安排给你来作。 1 A- h& D* B6 }. f$ ~
最近如果事情比较多的话,可以等有空的时候再做,不着急。 7 N9 g) {" P! K' k: u. ]
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
7 w" n9 A2 O: I; ~0 [. _有不懂的话,请提问。 ) u U+ T6 h, O: x+ {, R Y$ q3 S' @
% P3 P/ ]4 h& _; ]8 {7 b |