冒险解谜游戏中文网 ChinaAVG
标题:
UV坐标暴力扫描工具(scgame请进)
[打印本页]
作者:
shane007
时间:
2010-1-22 11:31
标题:
UV坐标暴力扫描工具(scgame请进)
在很多游戏里都采用UV坐标来保存每个字符的坐标,如果字体定义文件是一个单独的文件,
+ h5 \% l( F" s8 J# a
分析起来还是比较容易的,比如神秘岛4和福尔摩斯觉醒等等。但是如果字体定义是以数组的
9 D/ r( d0 w2 [$ |2 C
形式编译到exe文件或存在于其他数据文件里面的话,寻找起来就比较麻烦了。
" g/ X. {8 a3 H, h4 \6 k; \
0 m) y+ F% v" o6 b/ p
本工具就是我设计的暴力扫描文件里的疑似UV坐标的工具。
7 u) z0 @0 `% D; [3 E* w j
我们假设有一张256X256大小的图片,如果字库定义采用UV坐标的话,
& S. L# D( o. G q$ w
在字库定义文件中肯定会存在1/256-256/256这样的UV坐标。
4 i% Y5 f0 z1 X. r7 `3 {: z8 R- {
(当然,都是以4个字节的16进制数的形式存在的)
6 d* [& W) I- h- V6 I
我们的工具就是来个256次的循环扫描在文件中寻找是否存在1/256-256/256的16进制数。
$ b1 I d) |8 c2 o6 O+ g
如果找到的话,就在画面上表示出来。
& D {7 |% e& V$ q* g
表现形式是这样的在屏幕上画一个很长的矩形,代表一个文件,扫描到疑似UV坐标的话,
$ ^4 A- P$ H$ D2 N
就在相应的位置画上一条纵向的竖线。
. r* C6 W% [* R0 Q+ E: o
如果这个文件里存在图片字库的UV坐标的话,将会在某一个区域集中且均匀地画上很多竖线。
3 d5 k3 e) P, y+ l1 g* l! M
用肉眼就可以很直观地看出来。当然,我们可能会扫描到一些其实并不是UV坐标的数据,但是
$ s5 q4 F# g& y( Q5 p F
由于这些数据是分散,非均匀分布的所以可以很直观地排除。
8 V8 T$ L# t% N; T" Z( i
这个工具主要是针对exe和其他数据文件的,但是基本上来说,可以扫描任意文件。
4 B. m; y' Z- @
有了这个工具,可以大大加快寻找图片字库定义的过程。
" s3 n/ ^* H: O( N, c
另外,不是所有图片字库都使用UV坐标的,有个小技巧,如果在游戏中发现使用不同大小的同一种字体,但是找到的图片字库只有1种大小的话,就很可能是使用了UV坐标。
/ Y1 m/ W& J6 o+ o2 R- |' ^
对于非UV坐标图片字库,我以后会设计另一个暴力扫描工具。
% ^; [+ }8 d$ [! Q& D {+ T. }% |
9 N V z1 p+ ]* o7 h f# h. ^1 P- s
不知道有没有懂技术的热心朋友来完成这个工具?
* X7 A: X. B0 k" k0 U1 l
8 F, k3 D5 l2 h' k
----------------------------------------------------------
0 }- a, C6 V. e$ p& {( Z; \& c |
2010.4.15 更新
) ~* \( l8 x+ i8 M- A( C
scgame,你好,想把这个任务安排给你来作。
& O' Q* G8 ^. F' S, t
最近如果事情比较多的话,可以等有空的时候再做,不着急。
8 d# R1 i# O, ^0 I1 Q ~$ I* r
我把工具的设计再修改一下,就是依次扫描字体定义文件,步长1个字节,如果每4个字节转化为浮点数再乘以2048是一个整数的话。 就输出1行log,要求有这四个字节的第1个字节的offset,和乘以2048后的结果。
8 ?8 A- }/ d% _" c3 v3 M
有不懂的话,请提问。
( i4 s) d% S# d$ i3 C8 _6 A7 Y$ o
2 C, N5 c* M6 ~1 t' v1 o7 P& n
作者:
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发表的 :
8 P7 o% I) M9 c9 h" d0 r! W
为什么是乘2048
0 R# t+ x. D' S R, u. k
因为乘256为整数的话,乘2048 也必为整数,反过来则不成立。
) T( }, K' I+ A; [) `* u$ E9 d3 Q( ^% e
所以我们要选较大的1个,就选2048吧,游戏里面的图片字库的宽度一般没有更大的了。
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2