看了一下惊恐鬼屋Scratches这个游戏。
: E7 P5 t5 r/ m! U$ U包文件有2个,scratches.res和scream.res,5 b6 Y, w, Q% y9 G6 Q; Y1 W* Y6 \
包文件的格式如下,可以用Game Extractor来解开。
+ K7 b# _/ S. W6 d9 I" hhttp://wiki.xentax.com/index.php/Scratches_RES
G. M e1 e" W+ \, P2 z从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。
9 u, K) w( q7 K0 O$ Q) n) G* nscream.res里面也有一个字体文件,但是游戏好像没有用到。+ K6 c' N4 C/ m) E7 s+ h
$ b4 n+ S8 d' F# B" e4 d
用OD调试后,发现这是一个使用opengl API的游戏。" r* ?( I5 {4 M. b+ o
在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。
8 i: X6 m' i0 M( y/ S+ U
$ g, S& x* n% y6 d1 N. d0040C5D0 /$ 53 push ebx
5 ]& ^0 f4 a9 |6 `# y0040C5D1 |. 51 push ecx
+ U5 d7 \ Q/ i7 g* H/ Z: X% N7 J" ?0040C5D2 |. 52 push edx' u# g( c. Q6 y+ T5 A5 ?' {
0040C5D3 |. 56 push esi
& i8 o6 d2 R0 \3 R0040C5D4 |. 57 push edi
, F/ f, w4 v1 m: r/ ~% c0040C5D5 |. 55 push ebp
; S/ j5 d' v% i. r0040C5D6 |. 81EC 10010000 sub esp, 110
1 R" E# T3 F* z5 V# b: g* D0040C5DC |. 89C6 mov esi, eax7 O. F& i! M/ }+ Z4 p
0040C5DE |. 89C7 mov edi, eax9 ~# i( u I# y3 s/ J1 k2 k- s
0040C5E0 |. 29C9 sub ecx, ecx
9 y/ U: y, q* a, H& a; i; c* u0040C5E2 |. 49 dec ecx
; o# x3 x* K( k5 t& d0040C5E3 |. 31C0 xor eax, eax
1 M9 K# u! j1 B* H9 b0040C5E5 |. F2:AE repne scas byte ptr es:[edi]
6 h5 y3 g) @" }2 E6 ?$ g0040C5E7 |. F7D1 not ecx
" Y: J. K& b( B: ^6 ~: n" r0040C5E9 |. 49 dec ecx
q' b& I0 K6 j; f4 \) U' ?0040C5EA |. 31DB xor ebx, ebx7 M# T z- D* v5 u, c
0040C5EC |. 31ED xor ebp, ebp
* B1 @' u3 x# Y. O% Y- @" j' a0040C5EE |. 81F9 00010000 cmp ecx, 1002 k: \3 S3 B$ x
0040C5F4 |. 72 0D jb short 0040C603( ]! F- J! @7 [# k! O+ H
0040C5F6 |. 81C4 10010000 add esp, 1107 H5 C1 K' r. b9 U
0040C5FC |. 5D pop ebp
( E2 u& O+ Q; h+ T) R6 q, Y9 l E0040C5FD |. 5F pop edi8 o, N$ ^0 P' k/ v. b0 c# F
0040C5FE |. 5E pop esi% ^- p/ p& m& V) l! H. g
0040C5FF |. 5A pop edx1 v4 w/ ^! B, ^! z$ R
0040C600 |. 59 pop ecx8 h; [) ]6 }- w M* D9 e% Q; S
0040C601 |. 5B pop ebx" j$ G+ k' u8 Y# b# z% A
0040C602 |. C3 retn1 Q! l& C! R. F2 G8 H5 ]" Z
0040C603 |> 89E7 mov edi, esp1 |9 W* t# w9 f+ c
0040C605 |. 57 push edi( [; q' q3 E9 N7 A! v9 T
0040C606 |> 8A06 /mov al, byte ptr [esi]
/ r u1 f- @. _0040C608 |. 8807 |mov byte ptr [edi], al9 G# |8 c, g. t
0040C60A |. 3C 00 |cmp al, 0
3 _! R$ E" L2 i4 v3 Z0040C60C |. 74 10 |je short 0040C61E
4 d4 L, p6 [9 A* g1 D! V$ A. Q" f$ ? T0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]
7 B; F% A. T$ V; B! d" J- P0040C611 |. 83C6 02 |add esi, 2
; b- c* W" p6 Q1 w* F% H3 S( a" U0040C614 |. 8847 01 |mov byte ptr [edi+1], al; B* y/ {# K0 q ~3 |" s; K+ L
0040C617 |. 83C7 02 |add edi, 2
' B! a/ y$ j9 z: D+ A0 O, j0040C61A |. 3C 00 |cmp al, 0* Z7 w" Y% N& L
0040C61C |.^ 75 E8 \jnz short 0040C606
. \* j9 D: z, l7 H0040C61E |> 5F pop edi
3 u/ u$ [# n1 y- g x9 R& Q" }0040C61F |. 8A1424 mov dl, byte ptr [esp]) F4 `) t4 ~& G4 n, e; g% U
0040C622 |. 89E0 mov eax, esp
" e# W3 D8 L B- d7 f0040C624 |. 84D2 test dl, dl% Z# R7 c8 I- N+ b) m R- X
0040C626 |. 74 09 je short 0040C6315 f/ D7 L; {1 Y7 S2 w! p
0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]
( n; j% Q8 h y- f2 z9 T0040C62B |. 40 |inc eax4 P% r# H. N! b" M! E# O/ H1 s* B
0040C62C |. 45 |inc ebp& l% w3 ~' Q! ^# a7 F
0040C62D |. 84F6 |test dh, dh
3 t6 f" E- D9 U( j6 m" [$ _0040C62F |.^ 75 F7 \jnz short 0040C6287 O- W, |& j/ f. D
0040C631 |> 81FD D2000000 cmp ebp, 0D25 }. T6 M6 Z; i6 M
0040C637 |. 0F8E 61010000 jle 0040C79E: i1 R0 ~$ I$ f, I) \2 x
0040C63D |. 89EA mov edx, ebp
8 q7 F4 y0 ?( z3 }1 C* ]- @0040C63F |. 89E8 mov eax, ebp
0 I9 u( A2 l1 J( }' F. L" l8 d' ]0040C641 |. C1FA 1F sar edx, 1F P1 I( J5 ^: P9 Q
0040C644 |. C1E2 02 shl edx, 27 @* i1 q# I5 @" v! u' ~! g
0040C647 |. 1BC2 sbb eax, edx0 n/ I1 y1 O9 h3 W2 E+ ~
0040C649 |. C1F8 02 sar eax, 2 j; [8 D; ?& q' h
0040C64C |. 89C7 mov edi, eax. }4 m: z. ]* g4 V: R
0040C64E |. C78424 040100>mov dword ptr [esp+104], 3
- c* b5 b" H0 C2 m4 x4 a0 a0040C659 |> 89E0 mov eax, esp4 b; _+ n, U' H/ D. u
0040C65B |. 31D2 xor edx, edx
3 U$ |; u+ l8 Z* x! n) _0040C65D |. 8A0C24 mov cl, byte ptr [esp]2 O3 F7 z; ]* N1 u
0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx( ^7 [4 n! ]0 d5 I( \
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx& L* V; v/ L" A; Y
0040C66C |. 899424 080100>mov dword ptr [esp+108], edx# U! {6 P6 n' P1 ^
0040C673 |. 89E2 mov edx, esp
( o& Z5 [0 |' j0040C675 |. 84C9 test cl, cl
: |5 m+ {; K( M M' n& D+ H0040C677 |. 0F84 89000000 je 0040C706. Y- P: ]* G y8 {
0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]
2 |/ z; S7 j/ w% s4 O0040C684 |. 4F dec edi
/ C$ q$ u6 {) n$ j1 G7 l X9 C0040C685 |. C1E1 02 shl ecx, 2: J1 ?; O1 B$ f& k7 y- [# p
0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi
# _3 d+ f. Z# I0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx& ?5 @! D7 ~* X* t5 X# h" H
0040C696 |> 8A0A mov cl, byte ptr [edx]! @% T2 Q& W# Y7 `# ^& G9 }
0040C698 |. 80F9 20 cmp cl, 20
' h6 k" Y, J6 C- s* E' G% J0040C69B |. 0F85 6A010000 jnz 0040C80B) P- p& a$ y( h0 l
0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]6 M/ |, g% }: P- c) H: P
0040C6A8 |. 7C 53 jl short 0040C6FD
* F* F9 a6 P& Y0 {8 _9 T: @8 ^0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
" W0 e$ q' F1 F% \/ ~0040C6B1 |. C602 00 mov byte ptr [edx], 0
5 K$ P- r% B' g+ c0040C6B4 |. 89C6 mov esi, eax3 X' \0 v. x. x0 v: |/ F
0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]
$ ?0 T: z; ]0 ` W" S0040C6BC |. 31DB xor ebx, ebx, r+ Z6 X9 L) k
0040C6BE |. 57 push edi; q, R+ P6 `( }$ F
0040C6BF |> 8A06 /mov al, byte ptr [esi]
! l0 `5 @" [# a6 A2 Q0040C6C1 |. 8807 |mov byte ptr [edi], al
$ O7 g4 U' C0 h6 ]. ^8 s0040C6C3 |. 3C 00 |cmp al, 04 O0 H0 B+ F+ H- c0 p
0040C6C5 |. 74 10 |je short 0040C6D77 D& ~- N1 `) q5 W9 p" H
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]9 b* G( L1 D0 E" b
0040C6CA |. 83C6 02 |add esi, 21 B0 U1 ?, A3 ~& e( Y; m
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al
& c7 a I1 z; }9 G/ ^6 Y+ b0040C6D0 |. 83C7 02 |add edi, 2# g0 E, Q3 S7 f$ Q+ \
0040C6D3 |. 3C 00 |cmp al, 02 T( h, f' [; p& I* A* u+ W+ L
0040C6D5 |.^ 75 E8 \jnz short 0040C6BF, E# ^6 t% _9 }9 S
0040C6D7 |> 5F pop edi
- h% e9 ]4 M2 l0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]' }5 w6 k a) R2 {: g
0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]. y& F" H( a# y% t7 ^
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]
$ Z. l) u/ k4 _1 c9 S, t; A. s0040C6E9 |. 83EF 04 sub edi, 4& i: w- R0 f/ f* I5 l8 I
0040C6EC |. 42 inc edx
% V- j2 W c! W. ^$ g7 D0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi6 _$ L7 h& V: {& Y
0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx# T/ m; h0 e! Z0 K2 f* ]
0040C6FB |. 89C2 mov edx, eax
( h/ n9 @6 K* {: S3 w8 o+ u7 ?0040C6FD |> 43 inc ebx. F( v8 q% ^ l8 q8 x6 e5 j7 l* c
0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]: o' s; t# a# h: K5 r
0040C701 |. 42 inc edx' _9 j( L* w2 f
0040C702 |. 84ED test ch, ch
) ~5 p/ Q3 j# S+ \0040C704 |.^ 75 90 jnz short 0040C6968 ^) e. @) N% z: s8 c
0040C706 |> 83FD 10 cmp ebp, 10
+ U, b! r. j9 Q4 B( ^0040C709 |. 7F 05 jg short 0040C710
# ~% t6 `% Z' I8 S0 D" d+ G0040C70B |. BD 20000000 mov ebp, 206 e% g9 S8 {* a+ d; h5 @1 {
0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]: j* M7 w* L R- f7 g% i
0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]$ V. _! Z5 R6 s0 G% l8 l
0040C71E |. 85D2 test edx, edx
8 X9 y# p2 d g- q5 R) X6 }( T0040C720 |. 7C 23 jl short 0040C7457 E6 ^1 @7 H1 K, Y% }) Q. r5 I
0040C722 |. 89C6 mov esi, eax
7 N3 T7 @* y; k% w; j0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]
+ W- O' y! h, Y9 x0040C72B |. 57 push edi- ~4 u% U0 S0 f1 ?1 P3 Y4 ~( n" I- l
0040C72C |> 8A06 /mov al, byte ptr [esi]
9 a! x4 x: W: m: J1 i0 z7 e0040C72E |. 8807 |mov byte ptr [edi], al
% t9 n5 B2 l% l0040C730 |. 3C 00 |cmp al, 09 ?' j0 X- {! o9 |$ H
0040C732 |. 74 10 |je short 0040C744- x& C3 l1 R5 {* e- w' g
0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]+ Y% N& N/ z/ C5 l+ |; r
0040C737 |. 83C6 02 |add esi, 24 j9 r# z) V0 v# U, o
0040C73A |. 8847 01 |mov byte ptr [edi+1], al
* C C. w5 Q' x$ r1 C6 z8 t0040C73D |. 83C7 02 |add edi, 26 ?5 D- ]4 e* q$ |
0040C740 |. 3C 00 |cmp al, 00 q1 M" y- L: g+ G$ e
0040C742 |.^ 75 E8 \jnz short 0040C72C+ \: i. o0 Y* P
0040C744 |> 5F pop edi
% x! {- S) U; V k% n0040C745 |> E8 E6500100 call 00421830
0 q% C, e! E2 E$ M( H m3 Y1 q0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax
" ^$ p% C: Z' }: |0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]3 ^* c; [5 m' `% O0 ^$ V2 j
0040C756 |. 40 inc eax, m, s6 V& ?/ R9 p
0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax, `" x' T% {: _- @5 ^0 |& L
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1, l$ z- K# q8 l0 ~8 i) T' `! H
0040C766 |. B8 64000000 mov eax, 64
2 I) T" A2 c/ |. ~8 s0040C76B |. 89C2 mov edx, eax. _0 f1 b& n( B9 J: _9 x
0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]" W C$ J" l7 ~8 O& t
0040C773 |. C1FA 1F sar edx, 1F. `+ n7 D) M2 v7 ~
0040C776 |. F7F9 idiv ecx0 y0 J* A4 H- a/ C# m% m) a* S
0040C778 |. 89C3 mov ebx, eax
s' C+ e- b- c/ G" \" E0040C77A |. 89EA mov edx, ebp
( |) ]7 _ I3 u7 _. t! p0040C77C |. 89E8 mov eax, ebp3 ]3 ~0 V& v8 k; A
0040C77E |. C1FA 1F sar edx, 1F" c7 E Z0 F4 \. R
0040C781 |. C1E2 04 shl edx, 4
: p' _5 @) d, t0040C784 |. 1BC2 sbb eax, edx- [6 B8 f2 k' l _
0040C786 |. C1F8 04 sar eax, 4! S, c8 n1 Z9 [$ O( G; a
0040C789 |. 01C3 add ebx, eax' k0 @5 D0 v. l+ k4 Q0 M
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx
% M3 K+ M4 a8 X0 o2 s' \ s+ X. c8 p0040C791 |. 81C4 10010000 add esp, 110- Y' @7 V! a- o, z ]: f F
0040C797 |. 5D pop ebp
/ y) r5 u, n* @1 f0040C798 |. 5F pop edi
# z0 `8 F4 W+ A/ H. v! l0040C799 |. 5E pop esi
8 P5 B8 C. [5 Y9 W' I' u# F l% |0040C79A |. 5A pop edx
9 D' N g1 `* R4 `7 h' ?0040C79B |. 59 pop ecx3 M& s7 h: M# F; s$ F& u
0040C79C |. 5B pop ebx
; D8 i3 T. ^+ @; S# {0040C79D |. C3 retn
, Z" \: N' f) v' B! u# g7 K1 m0040C79E |> 81FD 8C000000 cmp ebp, 8C7 b1 b: p: c, ?9 Y
0040C7A4 |. 7C 28 jl short 0040C7CE
; j+ W5 K( y1 |0 a* ]; X0040C7A6 |. 81FD D2000000 cmp ebp, 0D29 m) S; p) c2 q( a2 p) u
0040C7AC |. 7F 20 jg short 0040C7CE
" K+ v. |+ H# K e( ]! }6 ?0040C7AE |. B9 03000000 mov ecx, 3
8 e' ~) X' }" h9 R5 D% N0040C7B3 |. 89EA mov edx, ebp, Z: y" F- |/ s6 ~/ @! V4 ?
0040C7B5 |. 89E8 mov eax, ebp% s( R7 z% ~8 L* c. P
0040C7B7 |. C1FA 1F sar edx, 1F9 H% h! P& @# g9 y6 G: T
0040C7BA |. F7F9 idiv ecx; u/ G4 M* |' Z$ j7 F
0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2$ u% m: |$ y4 F
0040C7C7 |. 89C7 mov edi, eax
8 O1 t# \* W" S8 K0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659( Y8 [ S; t$ N/ W
0040C7CE |> 83FD 46 cmp ebp, 46; w+ C3 e4 ]$ B$ Y4 }9 b( q0 f9 Q
0040C7D1 |. 7C 25 jl short 0040C7F8" z- ]; c5 ?) ~0 e6 I5 ` f! h1 ~3 V
0040C7D3 |. 81FD 8C000000 cmp ebp, 8C$ q! [( V t$ \8 N8 L" M
0040C7D9 |. 7F 1D jg short 0040C7F8
( U6 n2 l1 `# D3 ^- Y2 T( I0040C7DB |. 89EA mov edx, ebp
3 e! ~" M7 w+ u0 i f9 C0040C7DD |. 89E8 mov eax, ebp1 ~. l0 N" o2 ]8 z
0040C7DF |. C1FA 1F sar edx, 1F5 n9 l: ?& E* ?. Z8 @
0040C7E2 |. 2BC2 sub eax, edx# J; k" [" I8 y! F6 ~% [8 q. U: N
0040C7E4 |. D1F8 sar eax, 1
4 z0 |+ z1 S9 \3 a& Q+ t0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1- `( p3 _! y; B/ Z
0040C7F1 |. 89C7 mov edi, eax" t& n+ }! y a# F% j5 I
0040C7F3 |.^ E9 61FEFFFF jmp 0040C659+ L% _1 ~6 o- u* T) l4 ~, |
0040C7F8 |> 31D2 xor edx, edx. `. `- I+ t- I* s0 E- R
0040C7FA |. BF 46000000 mov edi, 46, K, e. O# t, E2 M( W; A5 o
0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx
' U* G3 O* C2 H, T; o0040C806 |.^ E9 4EFEFFFF jmp 0040C6596 [* U( Q( ]7 m6 Y3 e3 y$ m! X$ u
0040C80B |> 80F9 7C cmp cl, 7C" m1 J0 ]4 t% U# K: N
0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD
6 ^. V6 S* y( B& ? c0040C814 |. C602 20 mov byte ptr [edx], 20
) z# N0 T% z/ N1 _- n5 L0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD
1 s/ b V# ~6 C9 k. o2 @, }. f0 g
在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
% b$ e: [9 C" }, n2 ]4 R0 h, g估计要汉化就要在上面的代码段下功夫了,以后继续研究。
0 Y5 Z( a N7 N6 B; S; B! p. w
# q1 F4 S R0 E e3 [; T! L4 X7 a5 O0 E8 x4 r找到2个俄文的补丁,也许对以后研究有用。
1 Z1 D W R* Q! Ghttp://www.megaupload.com/?d=EZH6X672
2 L# S6 a$ t( u1 [http://rapidshare.com/files/94227080/ScratchesDC.7z |