冒险解谜游戏中文网 ChinaAVG

标题: UV坐标暴力扫描工具(scgame请进) [打印本页]

作者: shane007    时间: 2010-1-22 11:31
标题: UV坐标暴力扫描工具(scgame请进)
在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
  m. N- h3 h7 m# f: D6 i& j& O分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
7 W9 U* b2 v! r6 r: u- e形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。
$ {) g4 T) d9 d2 a9 q* M+ o4 x
8 g8 |& t  H5 g" l% y本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。
6 R5 X: n8 T$ }* j我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话, ' A6 ]. M9 M# j
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
# Y3 h# C+ M7 _& _0 H$ a(当然,都是以4个字节的16进制数的形式存在的) 9 p, A" x2 T6 u
我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。 " e# Q) V. K# H- K# l9 ^. o9 x) s
如果找到的话,就在画面上表示出来。
0 z( t( ]6 \; d2 _+ ]5 k0 ?表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话, 2 V: q0 O% Q0 M9 j# Q
就在相应的位置画上一条纵向的竖线。
! u, y5 M1 s* ^1 S* x如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。 0 |3 c* E, W! X+ i/ [. S
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是 4 F$ p2 Q3 e" S) _
由于这些数据是分散,非均匀分布的所以可以很直观地排除。 4 P, H/ r- j( b
这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。 # m2 e6 f: L1 y# B6 k# ^# I( i
有了这个工具,可以大大加快寻找图片字库定义的过程。 . |- T6 d/ N$ A1 a& i6 |. D
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
$ Z4 d, \/ H1 \, G7 f+ Z8 h对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。 6 W3 z- d  n( \3 o: A  T; ]

' l% j* r  l! m6 O. @不知道有没有懂技术的热心朋友来完成这个工具?
/ b' z, V8 W: B1 h. L$ J. R6 \; _2 i1 z+ M6 @
----------------------------------------------------------
. a' Z; M. p7 V& Y  P+ i; D2010.4.15  更新 # F7 @* k; ^. R2 q4 O  J2 m0 l
scgame,你好,想把这个任务安排给你来作。 : \# l) {/ S+ \8 ~. @% D! @+ Q$ a) y9 |
最近如果事情比较多的话,可以等有空的时候再做,不着急。 * B" g) F) d* R
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
" c: C9 n5 }( Q3 z1 q有不懂的话,请提问。 ( P- U5 K6 s. B, z. o2 \$ a$ n

7 x" H4 m0 a" U* v" g/ `% B
作者: shane007    时间: 2010-4-15 22:26
2010.4.15  更新
作者: scgame    时间: 2010-4-17 09:58
哦,我知道了,好多任务啊,哈哈,先把第一个做掉再慢慢来
作者: scgame    时间: 2010-4-17 10:14
为什么是乘2048
作者: shane007    时间: 2010-4-17 10:26
引用第3楼scgame于2010-04-17 10:14发表的  :, r; ?. y, d: R4 G' h3 S* g) v5 a
为什么是乘2048

$ r$ [9 o0 I3 c; h) [1 @$ o# b因为乘256为整数的话,乘2048 也必为整数,反过来则不成立。- `2 ]' ]1 u; X# v, ~& T; G/ i. [
所以我们要选较大的1个,就选2048吧,游戏里面的图片字库的宽度一般没有更大的了。




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2