看了一下惊恐鬼屋Scratches这个游戏。
0 R% T7 u1 w% f) u) o. u包文件有2个,scratches.res和scream.res,% p/ p+ h/ U7 D) E p% O! {" y7 ~
包文件的格式如下,可以用Game Extractor来解开。
g/ [( C' _- B* Thttp://wiki.xentax.com/index.php/Scratches_RES
. s* ^0 j: I3 ~" _0 j1 z从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。1 {/ L5 B3 v" A& J0 x4 {) P0 J0 _
scream.res里面也有一个字体文件,但是游戏好像没有用到。
3 ^9 c* }+ {* T4 q
) I) z6 L- }" V, S6 ~2 \用OD调试后,发现这是一个使用opengl API的游戏。
: a2 w, B- ?/ B- q在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。' L+ X: k6 p$ U( p. |+ M9 S
% K* c; P- Q& F0 ?, N# ^/ V
0040C5D0 /$ 53 push ebx
$ C! z; C& Z3 |% ]0040C5D1 |. 51 push ecx) F8 A) o/ h/ n w* |
0040C5D2 |. 52 push edx4 ^; D6 Q. e% D" k% Q
0040C5D3 |. 56 push esi
. C6 m: g7 W0 }; L- c: z* e0040C5D4 |. 57 push edi
. Q% q7 u& G2 C" f0040C5D5 |. 55 push ebp2 {" k$ U% r( v
0040C5D6 |. 81EC 10010000 sub esp, 110
; K% i. ]3 g: Z1 y- ^: ? s7 o0040C5DC |. 89C6 mov esi, eax8 c: I9 W0 I0 X
0040C5DE |. 89C7 mov edi, eax
) i: P' o$ \. k: l0 i2 ~* h0040C5E0 |. 29C9 sub ecx, ecx: A. D7 i" R- p, [( [
0040C5E2 |. 49 dec ecx0 ~' v# i% i$ F0 F2 K6 I
0040C5E3 |. 31C0 xor eax, eax
2 N6 \# M Q. [$ R0040C5E5 |. F2:AE repne scas byte ptr es:[edi]: ~7 O& r+ x' T/ ~& U5 m
0040C5E7 |. F7D1 not ecx- |- u+ @ j$ G* T
0040C5E9 |. 49 dec ecx
% z$ R3 c5 h$ @( p& Y0040C5EA |. 31DB xor ebx, ebx
4 ]* }2 g- l6 v0 n0040C5EC |. 31ED xor ebp, ebp( L9 q0 J! u) }6 J* N& D( ?
0040C5EE |. 81F9 00010000 cmp ecx, 100& w |3 A. e" Z2 D% N9 i! A3 w
0040C5F4 |. 72 0D jb short 0040C603! d+ O' x7 c$ z5 y/ F
0040C5F6 |. 81C4 10010000 add esp, 110! i1 N- }/ ?4 q: Y
0040C5FC |. 5D pop ebp: W! N7 P9 l4 L0 L5 D
0040C5FD |. 5F pop edi9 R1 x+ ]% T0 v( Y
0040C5FE |. 5E pop esi' T& w! D; V* Q V4 N0 d( q
0040C5FF |. 5A pop edx3 \6 o+ t! m( E% f
0040C600 |. 59 pop ecx. z: I" Q- ~( e0 L$ Q: T
0040C601 |. 5B pop ebx
6 j( Y6 T) C7 v+ h% Q& F0040C602 |. C3 retn
4 d0 I! q, `+ b1 A# f0040C603 |> 89E7 mov edi, esp( t6 ~: o$ w0 D G
0040C605 |. 57 push edi
& o7 A( X4 ^9 n5 Y" U0040C606 |> 8A06 /mov al, byte ptr [esi]
/ H8 b. l# B3 W0 ]; Q# R8 O9 k. x0040C608 |. 8807 |mov byte ptr [edi], al) Q: T; y7 ]! }( P$ a
0040C60A |. 3C 00 |cmp al, 0/ n0 C- h- f( D2 J0 Z5 o: H
0040C60C |. 74 10 |je short 0040C61E' \7 D& H) G9 A/ h( f
0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]
, O Z1 k; t- V/ p0040C611 |. 83C6 02 |add esi, 29 c4 T+ X/ i( X: z# ]( f3 W
0040C614 |. 8847 01 |mov byte ptr [edi+1], al( F1 q; n" o8 M/ o/ N4 U- ]# i
0040C617 |. 83C7 02 |add edi, 2
6 G: z3 E2 F6 n$ \0040C61A |. 3C 00 |cmp al, 03 u- z3 K. t% M0 ^, |/ s
0040C61C |.^ 75 E8 \jnz short 0040C6062 T0 V1 W/ I0 ?5 S- _
0040C61E |> 5F pop edi# l+ b* K6 F I) d j$ c+ K# o
0040C61F |. 8A1424 mov dl, byte ptr [esp]" t5 { M& X j5 M/ J
0040C622 |. 89E0 mov eax, esp
/ K- M( }+ K- N; h8 f! r2 k0040C624 |. 84D2 test dl, dl, d' R$ N% ~: z; Z2 @) D
0040C626 |. 74 09 je short 0040C631
. b! ~ s3 A" o0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]) I2 k' q' a8 l, l. u
0040C62B |. 40 |inc eax3 ^& T5 F, e4 l1 |
0040C62C |. 45 |inc ebp' u& z2 H8 B- K/ A$ E
0040C62D |. 84F6 |test dh, dh
# ]4 f; k: ?; {+ j A# K0040C62F |.^ 75 F7 \jnz short 0040C628: w4 H2 b( Q* _! K" Y
0040C631 |> 81FD D2000000 cmp ebp, 0D2
" ~! V! @, ?" ~$ z0040C637 |. 0F8E 61010000 jle 0040C79E( x" s. E/ V" _7 I7 c
0040C63D |. 89EA mov edx, ebp: k x8 S1 U. E3 M, h( A
0040C63F |. 89E8 mov eax, ebp
* u b0 N8 w8 |, n" Q( A0040C641 |. C1FA 1F sar edx, 1F: `4 O/ \: g9 f- w# Z
0040C644 |. C1E2 02 shl edx, 2
' {5 l* t. _- B+ n* X% o7 R& n0040C647 |. 1BC2 sbb eax, edx* e' u9 c- I& z% V
0040C649 |. C1F8 02 sar eax, 2+ S4 ~0 M7 ^- J: t( n: y5 O/ q
0040C64C |. 89C7 mov edi, eax! _6 n2 v* z0 j; O, C0 G
0040C64E |. C78424 040100>mov dword ptr [esp+104], 3
9 r `* d7 L& K. s9 f0040C659 |> 89E0 mov eax, esp
. h' S3 h) n1 A/ S' ]0040C65B |. 31D2 xor edx, edx
7 `4 N; ^# y+ p0040C65D |. 8A0C24 mov cl, byte ptr [esp]- D( b" I" _; _; z# y
0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx6 D- K+ G& O& C- C, G
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx) J$ o! `( e, V+ ~) G
0040C66C |. 899424 080100>mov dword ptr [esp+108], edx' Q9 n3 R) ~& ?' `& o
0040C673 |. 89E2 mov edx, esp. t5 @1 @$ ?( X L4 z8 }7 _0 o
0040C675 |. 84C9 test cl, cl5 v# u! u. u" m+ X! @8 D |
0040C677 |. 0F84 89000000 je 0040C706
9 Y. N5 N) @! j; ~$ B0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]
. k9 A! V$ u! A) [) U2 E0040C684 |. 4F dec edi
; B" r! C( ? U" f: X* }0040C685 |. C1E1 02 shl ecx, 2( P0 A2 `' e7 R4 p* l$ J; W
0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi
+ h8 I8 n6 R5 P+ J3 \0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx
4 I6 S6 f, |. \+ m0040C696 |> 8A0A mov cl, byte ptr [edx]
) j( i5 H t9 W6 V# L A: ^) W9 h' i& Q' G0040C698 |. 80F9 20 cmp cl, 20; Z, B9 X+ S2 S1 q
0040C69B |. 0F85 6A010000 jnz 0040C80B
0 U8 K- K- l, S; j0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]5 ^, e3 ?$ l' o, Q7 U1 x, w
0040C6A8 |. 7C 53 jl short 0040C6FD' i- u5 y5 @" K6 s$ \
0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
9 v6 m% R6 P; L# d+ F0040C6B1 |. C602 00 mov byte ptr [edx], 0
) `; `( G$ V/ N2 _6 O7 o' R. t0040C6B4 |. 89C6 mov esi, eax
1 C6 f" y- V! ~3 f7 h- o4 W: z V0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]
4 Z' y, \/ Y- H& B0040C6BC |. 31DB xor ebx, ebx
+ e' ^, p$ I H+ X" F& j0040C6BE |. 57 push edi- r7 C, j( |/ O$ d5 T
0040C6BF |> 8A06 /mov al, byte ptr [esi]9 n& `6 G6 n! z7 p9 L" W/ S
0040C6C1 |. 8807 |mov byte ptr [edi], al) D A$ c: J9 K: w3 S' N/ S
0040C6C3 |. 3C 00 |cmp al, 0
\. {! F; P. G a: p0 g0040C6C5 |. 74 10 |je short 0040C6D7- m4 j5 K4 H! b0 d5 A) M3 d: @
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]
, a8 v" \8 p8 g0040C6CA |. 83C6 02 |add esi, 2
U- b; I( s. Z6 g L; i0040C6CD |. 8847 01 |mov byte ptr [edi+1], al
% o: U: Y$ r- N: k: \" `0040C6D0 |. 83C7 02 |add edi, 25 e3 t3 q8 M& k2 I( U% Y2 L* L4 I
0040C6D3 |. 3C 00 |cmp al, 0
' J9 ]' X1 \9 I. h) m3 x5 g3 Q0040C6D5 |.^ 75 E8 \jnz short 0040C6BF; }. L4 A2 c6 E7 w
0040C6D7 |> 5F pop edi
" q! ~: c9 h* {& k" ?0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]7 n' B7 e3 C9 i. b
0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]' H p, u0 j! K/ D+ |- p2 t
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]
8 ~7 Q# M9 |8 K, W! n9 u) \0040C6E9 |. 83EF 04 sub edi, 4( p7 F2 X! ^4 ]5 n4 R
0040C6EC |. 42 inc edx
2 V( N- `) l4 o5 F; }0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi' t# |# C" X$ B5 G
0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx" c0 p; M' W$ }$ R+ H
0040C6FB |. 89C2 mov edx, eax( ^+ r& W, _% Q' ~( z9 E
0040C6FD |> 43 inc ebx0 i* L7 y6 Y, ` e3 E
0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]* {+ q t( ]; {% C+ |, j0 b
0040C701 |. 42 inc edx3 m8 u9 C1 G0 u
0040C702 |. 84ED test ch, ch
, J* f, N) v8 j- { g- m6 e0040C704 |.^ 75 90 jnz short 0040C696
# M0 [: O" o$ i( H: X( H0040C706 |> 83FD 10 cmp ebp, 10
2 V5 b& N! ~& }2 l5 u0040C709 |. 7F 05 jg short 0040C710+ s8 J- a% |+ [+ |$ j
0040C70B |. BD 20000000 mov ebp, 20$ t: ]# \3 C" u, s6 l+ W
0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]& C1 g W) G7 M1 E7 s. h
0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]- g( |7 R& p2 T7 P% V
0040C71E |. 85D2 test edx, edx5 P: v! b# _ C; c
0040C720 |. 7C 23 jl short 0040C745
0 S8 a ~% `: e9 {/ q/ Q0 r0040C722 |. 89C6 mov esi, eax
& n6 ?7 O9 W& F0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]2 q& h: p' ?0 V0 @: Q+ C \
0040C72B |. 57 push edi" N! k9 w( j7 J- T% \8 i4 Y
0040C72C |> 8A06 /mov al, byte ptr [esi]* E) s9 \* l, C" {# ]
0040C72E |. 8807 |mov byte ptr [edi], al3 O1 X F2 s1 r4 q1 h, r* d0 r
0040C730 |. 3C 00 |cmp al, 0( n9 O4 R6 N; p0 R/ R
0040C732 |. 74 10 |je short 0040C7445 I) z/ B) C9 S3 P* D
0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]
) Y, G$ i# ?0 P0040C737 |. 83C6 02 |add esi, 28 K7 W |: d' i6 Z
0040C73A |. 8847 01 |mov byte ptr [edi+1], al
! f7 e3 \4 `3 [2 M3 V0040C73D |. 83C7 02 |add edi, 2. D5 m9 H' V6 a" y; v0 ~
0040C740 |. 3C 00 |cmp al, 0$ w$ f. d" S4 z3 `! S; z8 U3 R
0040C742 |.^ 75 E8 \jnz short 0040C72C
+ O2 {/ `) \$ {( a0040C744 |> 5F pop edi
2 E3 ? J9 Z+ d0040C745 |> E8 E6500100 call 00421830
% n* k1 m5 i, _1 H A0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax
5 U% ^ Y n6 S8 q' o0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]
9 ~) ?, s3 z5 W2 H7 s; T0040C756 |. 40 inc eax& w. C& A6 T/ w( W$ b+ B! A9 Y! E
0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax
$ j' e6 f- f7 r0 r; t0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1
z! ~7 a! A: _& p0040C766 |. B8 64000000 mov eax, 64' k, b4 C6 a) B- [9 c
0040C76B |. 89C2 mov edx, eax
2 N; U& j1 g" k6 p$ y0 r+ X' v3 G% C0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]
) {9 O( U8 C; ~6 m* Q% R& m/ ?0040C773 |. C1FA 1F sar edx, 1F% q4 Y+ U4 c) J$ c5 Q# _, f1 W) H C
0040C776 |. F7F9 idiv ecx
" G) K$ g2 p1 Y* F0040C778 |. 89C3 mov ebx, eax
0 i+ m. {: f7 R. n3 @# M0040C77A |. 89EA mov edx, ebp
( e$ G$ ?# O* u' T! s0040C77C |. 89E8 mov eax, ebp# H- ^8 G# C* K& k6 A7 G# F0 R
0040C77E |. C1FA 1F sar edx, 1F
2 h7 B+ e5 @6 u& t3 `0040C781 |. C1E2 04 shl edx, 4
& n: o" s' ]9 Z! u `& A7 q0040C784 |. 1BC2 sbb eax, edx7 @* y& x% W) i5 W* {
0040C786 |. C1F8 04 sar eax, 4
/ P* Q9 {( x5 X1 V0040C789 |. 01C3 add ebx, eax0 f0 M- O& N$ q- b8 C. o, C9 A9 b
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx
+ D2 ~1 |, L2 X: p. M3 e- W* Q2 e0040C791 |. 81C4 10010000 add esp, 110
" U3 `' {4 p: `0 S0 `0040C797 |. 5D pop ebp
( g8 V% p: L1 F0040C798 |. 5F pop edi
2 h! d6 W& {. P4 {- g0040C799 |. 5E pop esi9 t' u+ u5 k; C
0040C79A |. 5A pop edx
7 R$ M9 i1 Z! p: i6 t0040C79B |. 59 pop ecx, M1 @' s2 h+ ?: g' @" s% B' K
0040C79C |. 5B pop ebx
) o' q% ^# g$ n6 o. ~% N% m# d4 C0040C79D |. C3 retn
6 ]* A% `7 H# q0040C79E |> 81FD 8C000000 cmp ebp, 8C' ^* L- A0 ]: l- D+ W
0040C7A4 |. 7C 28 jl short 0040C7CE% O( P3 {! K# N0 N" m( F
0040C7A6 |. 81FD D2000000 cmp ebp, 0D2
7 f D# c/ @; S7 g' }( f% r0040C7AC |. 7F 20 jg short 0040C7CE
6 s8 d% O. O" p+ D B( }6 _7 U, ~0040C7AE |. B9 03000000 mov ecx, 3
/ `4 w5 V% q5 N& G0040C7B3 |. 89EA mov edx, ebp1 B8 k* B1 @" V$ y. q, @3 M
0040C7B5 |. 89E8 mov eax, ebp7 k6 G2 H; l( p0 \
0040C7B7 |. C1FA 1F sar edx, 1F4 t) p8 W; D+ C9 E: v0 w' e; e W& d& f) p
0040C7BA |. F7F9 idiv ecx
' T; W+ o+ o6 v; n0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2
: |8 J) E& l8 Q' Y3 }0040C7C7 |. 89C7 mov edi, eax
1 m: f$ f- O, ^$ B0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659
& V0 m7 L% [6 u2 L% L9 l' W1 b0040C7CE |> 83FD 46 cmp ebp, 46+ o. B- l* W! y; e8 f8 Q
0040C7D1 |. 7C 25 jl short 0040C7F83 ]/ c/ l# C- ^( c2 o
0040C7D3 |. 81FD 8C000000 cmp ebp, 8C9 f9 J4 z) y7 E9 `6 L% P* J' [3 I
0040C7D9 |. 7F 1D jg short 0040C7F8
) W" [4 ~9 Z; [" M G0040C7DB |. 89EA mov edx, ebp: B' a' o0 w; C0 E
0040C7DD |. 89E8 mov eax, ebp; X3 F4 F" l( j8 j2 V
0040C7DF |. C1FA 1F sar edx, 1F4 n% x2 p/ g5 X
0040C7E2 |. 2BC2 sub eax, edx
4 G& e5 g! p% l& u! l0040C7E4 |. D1F8 sar eax, 1( Y; x7 w) \& y' ^
0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 19 j. o# P4 T/ ?8 F( e" B
0040C7F1 |. 89C7 mov edi, eax- [% b& q; E( s3 A6 }9 I/ \- Q
0040C7F3 |.^ E9 61FEFFFF jmp 0040C659
' d. L) U5 W1 ^. w0 |0040C7F8 |> 31D2 xor edx, edx
& X9 l" Y, c9 U4 U- ~0040C7FA |. BF 46000000 mov edi, 46
: b$ _, u$ _& E7 y$ z& w0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx
/ L( T6 o6 {; p( t4 g; N( }, X% l0040C806 |.^ E9 4EFEFFFF jmp 0040C659: S: @- x9 t6 F6 A. m4 N
0040C80B |> 80F9 7C cmp cl, 7C7 j* G# j* \5 F
0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD' l6 k8 I; F8 b. ]1 d
0040C814 |. C602 20 mov byte ptr [edx], 20
: t$ o3 ]/ T0 F# a) h" |0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD
3 l! W) y8 ?8 J6 }
4 b- Q& j: `6 k7 r% N在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。1 ^3 }! d: p9 K& y; u _4 s
估计要汉化就要在上面的代码段下功夫了,以后继续研究。/ ]6 z! ~; ^( H$ x6 [
d/ X/ p* b7 f$ v* q+ O- {
找到2个俄文的补丁,也许对以后研究有用。+ A! `/ Z+ B, {% h( z" X
http://www.megaupload.com/?d=EZH6X672& x- ]& d9 n; f) s, J
http://rapidshare.com/files/94227080/ScratchesDC.7z |