看了一下惊恐鬼屋Scratches这个游戏。8 ]* b* ~# ^" w5 N$ t$ p3 I/ [
包文件有2个,scratches.res和scream.res,
/ \) E; f, i& L, @$ n+ \包文件的格式如下,可以用Game Extractor来解开。
( B) R* `9 [" mhttp://wiki.xentax.com/index.php/Scratches_RES% @, }/ N6 g# b: W8 B2 f! J4 D9 Y
从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。
( V* E! Q0 x! ]( yscream.res里面也有一个字体文件,但是游戏好像没有用到。9 O! F4 B. G. T* `2 s
* `% |' O v+ }$ H( E% b' T用OD调试后,发现这是一个使用opengl API的游戏。7 {3 I( @' Q/ U( z
在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。
0 m! U- X$ H! P" C
+ H! X! d2 K( q& ?: k0040C5D0 /$ 53 push ebx3 I1 \2 v; g8 z
0040C5D1 |. 51 push ecx
2 t1 R3 g0 O0 |1 G0040C5D2 |. 52 push edx
! a# v! t& H+ ~& F. s7 i3 Q0040C5D3 |. 56 push esi1 n- z7 g! \* _6 b
0040C5D4 |. 57 push edi
8 J, k1 ~% B+ c0040C5D5 |. 55 push ebp3 o! V2 n' z* g; d" G* J2 Z
0040C5D6 |. 81EC 10010000 sub esp, 110
, o. Q; p& v3 G5 R, t0040C5DC |. 89C6 mov esi, eax3 d) k- m5 n9 w
0040C5DE |. 89C7 mov edi, eax3 F- G2 M T# Y4 F9 f
0040C5E0 |. 29C9 sub ecx, ecx
: C, T& }5 ~# u9 d/ \& O0040C5E2 |. 49 dec ecx
" q% S- S# W/ I: v, j9 G0040C5E3 |. 31C0 xor eax, eax: M* @" V# u: M% E2 r- g: A8 L
0040C5E5 |. F2:AE repne scas byte ptr es:[edi]' U+ S3 y2 k2 o S
0040C5E7 |. F7D1 not ecx3 a2 o1 r* {6 f! p1 e6 c5 O+ S
0040C5E9 |. 49 dec ecx, }- E( k- X. s" n" n7 B
0040C5EA |. 31DB xor ebx, ebx! I( n; i2 {) y$ B
0040C5EC |. 31ED xor ebp, ebp
2 `2 {; M, h s% d8 e0040C5EE |. 81F9 00010000 cmp ecx, 100
3 v8 D U/ g* G: x: f( G3 S* ^+ _0040C5F4 |. 72 0D jb short 0040C603
$ a, u ?- o0 M0040C5F6 |. 81C4 10010000 add esp, 110
: m. w) L( U$ p0040C5FC |. 5D pop ebp: _& s5 _, |' k2 V! r7 ~. k
0040C5FD |. 5F pop edi+ m, J$ {" {2 u- m- _
0040C5FE |. 5E pop esi
4 p: }% f# T* z' N, u; _0040C5FF |. 5A pop edx$ J" v6 \) u2 q! l( `
0040C600 |. 59 pop ecx# \# H$ Z$ M; y' u, a) H
0040C601 |. 5B pop ebx
j3 Y3 f) p Q8 v& O3 I0040C602 |. C3 retn
, _6 ^) o) A2 M& }/ e+ ?4 t" F% ^0040C603 |> 89E7 mov edi, esp
$ V% b2 g( W2 F" R5 d4 A0040C605 |. 57 push edi
9 |( @0 b* K/ P0040C606 |> 8A06 /mov al, byte ptr [esi], P0 E$ t, J6 V' N
0040C608 |. 8807 |mov byte ptr [edi], al, r0 @- F+ U! s8 t6 f! K
0040C60A |. 3C 00 |cmp al, 0
- n' @( w5 ^- R s0040C60C |. 74 10 |je short 0040C61E
7 P! r8 a* f# e4 O; u: ^0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]
. n8 y( r, d5 ^6 @5 ^0040C611 |. 83C6 02 |add esi, 2
- D1 E, ^- `. `& w0 W {0040C614 |. 8847 01 |mov byte ptr [edi+1], al6 W; F- G2 p$ f0 v. K T
0040C617 |. 83C7 02 |add edi, 2
5 J( [! j+ {% Y9 o* O0040C61A |. 3C 00 |cmp al, 08 a3 F, q% S5 O
0040C61C |.^ 75 E8 \jnz short 0040C606
5 F9 U1 E0 G$ y0040C61E |> 5F pop edi# S. g. D. K$ Q# u; F" O& Q- n0 T
0040C61F |. 8A1424 mov dl, byte ptr [esp]0 T( B4 G2 r6 F% n) y
0040C622 |. 89E0 mov eax, esp1 h) k7 k) `6 j' j$ ~
0040C624 |. 84D2 test dl, dl& J, K; ~8 X5 D
0040C626 |. 74 09 je short 0040C631
- t+ V& r1 q! ~" N0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]8 n/ X3 ?4 a1 W5 [5 {0 O
0040C62B |. 40 |inc eax( u/ g! _3 C! ~/ G- ?8 B+ C: P' d
0040C62C |. 45 |inc ebp5 X8 P% g0 X [' u1 [' h% I
0040C62D |. 84F6 |test dh, dh/ [. L7 W! C! p+ u& p
0040C62F |.^ 75 F7 \jnz short 0040C628" t- j( f6 B- |+ Y6 R% p! ]
0040C631 |> 81FD D2000000 cmp ebp, 0D2% {/ P# ^6 a- `! x5 Z
0040C637 |. 0F8E 61010000 jle 0040C79E
+ k; q! H+ c T# I+ r0040C63D |. 89EA mov edx, ebp
! b* o9 Y# G9 O' u& J3 H6 g0040C63F |. 89E8 mov eax, ebp
2 b: b2 e( W- T$ X% v0040C641 |. C1FA 1F sar edx, 1F
/ [. g: N2 ^, l$ x% `6 s0040C644 |. C1E2 02 shl edx, 2
, ^& r8 v2 Y0 O6 N# _) F0040C647 |. 1BC2 sbb eax, edx: Y7 R) U5 w6 r& J- Y
0040C649 |. C1F8 02 sar eax, 20 R, D! {9 D4 |% r+ @
0040C64C |. 89C7 mov edi, eax# @8 o6 v/ } G* G! B! H/ }8 q2 U
0040C64E |. C78424 040100>mov dword ptr [esp+104], 3# v: M4 P/ q/ _ u7 }
0040C659 |> 89E0 mov eax, esp+ \: }! A8 o) o' G. E2 O! B4 T8 J
0040C65B |. 31D2 xor edx, edx
, v9 a9 i4 G! U' k; E# }# q0040C65D |. 8A0C24 mov cl, byte ptr [esp]
/ C! P1 `4 P6 b( u8 E0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx, A8 K* p. N( `% O4 x' K
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx: ?9 i( a6 t/ m; N- ^& R9 f3 g
0040C66C |. 899424 080100>mov dword ptr [esp+108], edx! j' G X1 \$ T% {+ j5 I) T; \/ C
0040C673 |. 89E2 mov edx, esp! i, B: o {% j% s
0040C675 |. 84C9 test cl, cl; k) O4 ]! x" D1 h H6 U
0040C677 |. 0F84 89000000 je 0040C706
/ E. u- _7 r, z$ E0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]1 L1 _2 T; i; Y! d' @% K
0040C684 |. 4F dec edi
* [$ A% @& H% E7 S, c0040C685 |. C1E1 02 shl ecx, 2
0 K* p. t0 m: h4 G! @1 d0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi# I( e' J9 o) A4 E( A
0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx
8 W6 T2 e# Z' r* j i0040C696 |> 8A0A mov cl, byte ptr [edx]
5 r* T1 `7 ]. l( J! i0040C698 |. 80F9 20 cmp cl, 20
- ?, L/ g! w& j* c0040C69B |. 0F85 6A010000 jnz 0040C80B' }# E4 j$ k9 e. H
0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]
! T. S! I- [2 b0040C6A8 |. 7C 53 jl short 0040C6FD
1 \* ~0 k6 q- Q- X0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
$ k3 j3 a: [ n" `/ O ]: j! i0040C6B1 |. C602 00 mov byte ptr [edx], 0
, M p7 o' R, l! p c. }7 b0040C6B4 |. 89C6 mov esi, eax$ f6 j( w$ X2 O6 Z0 k e
0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]
) t9 M ^# |6 {# P5 p0040C6BC |. 31DB xor ebx, ebx
) x1 a, q: _8 G+ I( N9 m/ z5 ~! K0040C6BE |. 57 push edi& _9 i8 Q0 U0 k
0040C6BF |> 8A06 /mov al, byte ptr [esi]9 Z; b+ t4 q, ~" {
0040C6C1 |. 8807 |mov byte ptr [edi], al
. O, Z" w% p2 \4 C I, K+ b8 o/ ~ E0040C6C3 |. 3C 00 |cmp al, 01 f4 J0 K) X5 t& |9 e e2 n
0040C6C5 |. 74 10 |je short 0040C6D7' I% D) ^$ e7 x' A5 L# t
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]5 f I. V, h- _ t0 l
0040C6CA |. 83C6 02 |add esi, 24 D' q& t$ b6 b0 O4 w, m* p
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al0 X$ i3 M. E T2 ^7 p- U1 C
0040C6D0 |. 83C7 02 |add edi, 2# W; T, v% a' X: \1 Y) S( H
0040C6D3 |. 3C 00 |cmp al, 04 n3 h9 w( B: o9 T4 _1 n. I: m2 p
0040C6D5 |.^ 75 E8 \jnz short 0040C6BF
( u. k5 @6 {5 g; E/ H5 p( m0040C6D7 |> 5F pop edi
5 X) P' P+ `6 M M0 N, P0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
$ J, e8 ~$ {# @; y0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]$ [7 c$ Z& f+ V- T+ D
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]
- t, s/ _ s, G7 s$ |9 k! `: l0040C6E9 |. 83EF 04 sub edi, 46 U) v2 a+ Q' Y6 E6 g+ o2 f0 D9 U
0040C6EC |. 42 inc edx9 v$ H/ @' i: {4 W+ f
0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi
$ W* N( @ ]' j- r$ Z0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx
, V }) h% W$ T* k# c+ D0040C6FB |. 89C2 mov edx, eax
) V1 D5 g, X; [7 t t! ]- P c3 A0040C6FD |> 43 inc ebx7 g4 J; d' z7 n/ \2 F& K
0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]) T* B: m+ K3 U- |0 |
0040C701 |. 42 inc edx9 k5 R# n: l4 g: ]+ G
0040C702 |. 84ED test ch, ch
8 ~* X1 D$ J! V( Q7 j; r: n0040C704 |.^ 75 90 jnz short 0040C696
2 x! F( j a; d2 t0040C706 |> 83FD 10 cmp ebp, 10' R$ T t, R1 b1 d8 V3 b7 c
0040C709 |. 7F 05 jg short 0040C710
2 L6 _. z" e. s ^0040C70B |. BD 20000000 mov ebp, 20
2 S% J) i5 M0 G) a$ h! _# A0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]
! E4 Z2 w% U: v0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]
' F: P$ s. ^8 p8 Q) s3 R0040C71E |. 85D2 test edx, edx
# x( w2 ]) P5 Q" ]& F0040C720 |. 7C 23 jl short 0040C745! Y) D5 G. ~. z# e H
0040C722 |. 89C6 mov esi, eax M( Z6 v5 N5 H
0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]
8 f* @) u! M' D: T% Q0040C72B |. 57 push edi
0 |+ v! Z% x& c: O0040C72C |> 8A06 /mov al, byte ptr [esi]" V! \- O" n# @ D4 Z
0040C72E |. 8807 |mov byte ptr [edi], al- G' u! r5 S# Z
0040C730 |. 3C 00 |cmp al, 0
5 V4 Z6 q8 y6 j: i$ a0 [0040C732 |. 74 10 |je short 0040C744
- l: w ], e3 ^9 p2 X0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]1 K) o& E' }7 o* t( W. @
0040C737 |. 83C6 02 |add esi, 2
+ J, Y9 Z. Z; q% G! P7 J& U5 ~$ t( v0040C73A |. 8847 01 |mov byte ptr [edi+1], al
. f0 M7 \; m. n' ~8 C# `) @0040C73D |. 83C7 02 |add edi, 2 j* S& V, g# C
0040C740 |. 3C 00 |cmp al, 0, v# _' ^) ]; N; R
0040C742 |.^ 75 E8 \jnz short 0040C72C
# P9 m2 [& [ v; ~3 @1 M1 n0040C744 |> 5F pop edi, E% b/ I( E$ H1 g5 i3 ^6 D
0040C745 |> E8 E6500100 call 004218304 ]/ `6 W; k: U: }% N( ^, n
0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax! C$ T3 `' a8 \: ]/ c
0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]/ i/ y# B1 J, z, u9 R) k3 M* n, J
0040C756 |. 40 inc eax
% b( k7 E6 f+ C' ` r8 B1 L0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax
/ t4 i5 n: X( L' R* S0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1
3 m( [( U: B6 H' C0 [( y0040C766 |. B8 64000000 mov eax, 64
4 Q0 X$ s# K+ I) C6 h0040C76B |. 89C2 mov edx, eax7 Y/ W8 q: ]' x0 r" J+ Z# ]: O
0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]
9 Q. [; k- c2 e% H3 |: R! l0040C773 |. C1FA 1F sar edx, 1F1 E, {' X8 V5 q. @# z) b, R
0040C776 |. F7F9 idiv ecx
& ?! {1 |4 I+ F- x3 U; {2 ]( j0040C778 |. 89C3 mov ebx, eax( q; U; \( L* e; ]( @! n j' i
0040C77A |. 89EA mov edx, ebp' `: l+ s% {" Q# g- s3 U& `( H
0040C77C |. 89E8 mov eax, ebp1 I0 d, Q" k2 c0 x5 c7 H" k5 Y
0040C77E |. C1FA 1F sar edx, 1F
9 ?/ G! F' ] a9 ?0040C781 |. C1E2 04 shl edx, 4* z, t% ?. y/ Y/ R4 w/ c* @: R
0040C784 |. 1BC2 sbb eax, edx# p6 F7 A# E2 O/ i4 P9 K! X
0040C786 |. C1F8 04 sar eax, 4
% U' L0 M2 S' L% z6 \0040C789 |. 01C3 add ebx, eax) C) k- a0 w6 |" k) ^6 F; u
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx' x4 E$ F& A! l
0040C791 |. 81C4 10010000 add esp, 110 c5 b, y$ ?0 K) P/ A
0040C797 |. 5D pop ebp. M) H) S6 i5 }4 k# Z
0040C798 |. 5F pop edi
: J! b% m! }7 H( |" n$ Y% g0040C799 |. 5E pop esi
/ M: Z$ K3 K- s `0040C79A |. 5A pop edx
6 H$ W2 N/ D% s) E! g5 z3 Z) A( f0040C79B |. 59 pop ecx
3 m! A# k6 Z7 r) J. J7 E0040C79C |. 5B pop ebx9 b4 Y- l, D7 f2 l
0040C79D |. C3 retn# |7 f; T/ ~* L) i; ]
0040C79E |> 81FD 8C000000 cmp ebp, 8C% P/ g8 w( z% n; M
0040C7A4 |. 7C 28 jl short 0040C7CE
4 z, D# Q- z3 f3 K' v0040C7A6 |. 81FD D2000000 cmp ebp, 0D2) h7 l: z4 t2 i0 Y, i
0040C7AC |. 7F 20 jg short 0040C7CE
6 Y/ Q( M7 R* O7 \) a0040C7AE |. B9 03000000 mov ecx, 3/ [2 f6 O: t* U \
0040C7B3 |. 89EA mov edx, ebp( R/ F& p" k, D6 B5 e7 K
0040C7B5 |. 89E8 mov eax, ebp
1 Z2 R- _2 X, i0040C7B7 |. C1FA 1F sar edx, 1F6 \' f j- Z! \
0040C7BA |. F7F9 idiv ecx
9 w" f7 v7 ^. _4 r0 d7 C0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2
# ]9 R* z1 ~& R) s: \1 y; ?2 q. y0 k0040C7C7 |. 89C7 mov edi, eax% q( m, T- w( j
0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659. t& m8 X- |- l4 {% R* _: d0 ?
0040C7CE |> 83FD 46 cmp ebp, 46! w' j1 |& ?6 w& x0 P2 T
0040C7D1 |. 7C 25 jl short 0040C7F8
) Q6 i$ ~) q9 F+ F2 }1 g0040C7D3 |. 81FD 8C000000 cmp ebp, 8C( |! p, `" s; U5 S7 _* M- N
0040C7D9 |. 7F 1D jg short 0040C7F8
0 I0 N! B: k8 U7 b3 A# a! f0040C7DB |. 89EA mov edx, ebp
/ Y3 W6 i |. { ^1 P8 i0040C7DD |. 89E8 mov eax, ebp1 l J9 @% c# R s. X% d9 y' X. ]8 a. F( P
0040C7DF |. C1FA 1F sar edx, 1F
1 N8 `" e$ T$ y0040C7E2 |. 2BC2 sub eax, edx
2 ]2 ]" S. Z N& [+ p: q0 N0040C7E4 |. D1F8 sar eax, 15 [5 D( u, O/ k; R
0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1& m9 t! A( |# T6 X- P" R
0040C7F1 |. 89C7 mov edi, eax& J/ p5 N! z/ k! Q+ Z/ x' m
0040C7F3 |.^ E9 61FEFFFF jmp 0040C659
+ ]1 T1 i; Y! Q6 A0040C7F8 |> 31D2 xor edx, edx
+ @) S* ~ c: ~/ c/ F0040C7FA |. BF 46000000 mov edi, 46- M! m! u# c4 D3 v
0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx
9 M% q, S7 b+ Q' Q6 ?# G0040C806 |.^ E9 4EFEFFFF jmp 0040C6595 K3 K# X# }! j* b
0040C80B |> 80F9 7C cmp cl, 7C
2 B& p0 |* n" e* u% C0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD+ F$ U$ I) Q4 N: u5 G7 z4 `
0040C814 |. C602 20 mov byte ptr [edx], 20 ?5 ~+ `2 p' ]. v6 n4 u
0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD0 v/ f/ S6 K" o( G- _3 h% a6 w, d
0 L* m6 i$ y3 h
在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
7 q- Z* f( |& [* e估计要汉化就要在上面的代码段下功夫了,以后继续研究。
, w6 d6 z2 w* N7 W/ | D2 w8 |* u% Y+ U6 N7 n1 F2 {
找到2个俄文的补丁,也许对以后研究有用。 [' [& W* w* Q2 O) U
http://www.megaupload.com/?d=EZH6X672
& d! p: V9 p: B% u# {8 |9 ]http://rapidshare.com/files/94227080/ScratchesDC.7z |