在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件, 4 H+ X% y3 e. E; ]# P" |( |
分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
/ @! E, z% _: h9 |0 b) {形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。 ; U$ K0 [" v6 q, F! p* f
+ E/ Z( }# w6 `; C- Z本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。
; G8 |5 i/ K- Q" ?3 B4 j( B8 o我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话, ; @6 \5 P/ ]) Q0 S" h9 `
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
+ ~5 _: n. [- T* |; q9 o(当然,都是以4个字节的16进制数的形式存在的)
; n& D; O8 v% |$ _( ~$ q我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 ! w) `; B4 Q, f+ B3 m+ ?; }) x
如果找到的话,就在画面上表示出来。
& s& _! @, j$ |0 S表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
- m8 V8 l5 I( }1 i6 @就在相应的位置画上一条纵向的竖线。
1 }7 q& N1 l3 O) x2 T如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。
: z# e O1 g% w# _: _用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是
+ X8 S+ x( N7 Q, v; u# b由于这些数据是分散,非均匀分布的所以可以很直观地排除。
: k3 H+ C' L; l% U, V这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 : c' c; V' X: P' e' }; G
有了这个工具,可以大大加快寻找图片字库定义的过程。
) z; Z8 I+ J% A! v* q另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。 0 M( v8 O* }8 E- p' c1 r
对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。 % {8 P% ^2 v2 `/ o
v( E4 F$ [ v& ]9 V
不知道有没有懂技术的热心朋友来完成这个工具? - x2 S; z9 s, s0 X
$ u8 t" y2 a; ~; i+ F
----------------------------------------------------------
( Q6 g. i9 h4 ?+ h8 R4 B5 x6 N) T/ L2010.4.15 更新 # J# l: y" s w. e q
scgame,你好,想把这个任务安排给你来作。
/ v9 s' {' O {最近如果事情比较多的话,可以等有空的时候再做,不着急。 5 E0 f% \4 @4 p. a3 j; T
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
! R; c1 \& b( a" J6 o% t' O9 F! O有不懂的话,请提问。 $ ]4 M* H Y- F" h- I- i
$ X0 ?. W0 v# \! X( X$ O) y: f6 i |