看了一下惊恐鬼屋Scratches这个游戏。, d ]9 {; D$ I# O4 J4 ~" ?
包文件有2个,scratches.res和scream.res,
5 ]1 Z# ^' D) e9 o0 b包文件的格式如下,可以用Game Extractor来解开。
4 y- J) J6 w zhttp://wiki.xentax.com/index.php/Scratches_RES
7 q; o) x0 L/ u* Y: c( `/ W从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。; w* B6 C0 n. g! g9 M
scream.res里面也有一个字体文件,但是游戏好像没有用到。2 X+ y& L O" x$ s2 P
6 B$ n* [* s, @- q4 T1 f用OD调试后,发现这是一个使用opengl API的游戏。9 v0 o! w0 C$ J4 D d
在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。* E" Q) w: G3 b( t8 O4 r+ O0 A
& _. f+ ` J c7 z# O) l1 M
0040C5D0 /$ 53 push ebx
9 Q% W6 @3 l4 t! B0040C5D1 |. 51 push ecx1 t7 g1 z: g# V% i) l
0040C5D2 |. 52 push edx
4 J1 t6 i8 K# Y& E7 P9 n0040C5D3 |. 56 push esi( Z: ^4 _* F+ x+ c& N/ H) o$ r
0040C5D4 |. 57 push edi
% f! {+ X( Y- N0040C5D5 |. 55 push ebp
6 E$ \4 h+ d9 L& S0040C5D6 |. 81EC 10010000 sub esp, 1104 C+ Q3 H! @; }: X' J
0040C5DC |. 89C6 mov esi, eax
8 X, G* M0 ?+ l! M0 B. Y2 J0040C5DE |. 89C7 mov edi, eax
# y% }2 e3 ^/ T" t0040C5E0 |. 29C9 sub ecx, ecx
/ v, A3 ~0 J1 Z6 ]1 V2 [/ i0040C5E2 |. 49 dec ecx. Q' v1 m6 ]: b4 a$ p! D0 c
0040C5E3 |. 31C0 xor eax, eax
+ J& T6 Z6 B& l7 S1 V4 p: a0040C5E5 |. F2:AE repne scas byte ptr es:[edi]% M$ e" S8 t4 F0 W4 q
0040C5E7 |. F7D1 not ecx
; e$ C2 d9 M5 n+ ?& I0040C5E9 |. 49 dec ecx
1 e$ {: B8 l N& V3 G6 E0040C5EA |. 31DB xor ebx, ebx
: w+ R* }; d; L0040C5EC |. 31ED xor ebp, ebp
5 C5 S/ M6 ?! X) \0040C5EE |. 81F9 00010000 cmp ecx, 1008 i/ K9 M8 ] h/ e$ c
0040C5F4 |. 72 0D jb short 0040C603
9 h S9 S0 ~2 r" ]: P2 R$ `% D0040C5F6 |. 81C4 10010000 add esp, 110
7 P% F9 C# ]. R; t- B: w0040C5FC |. 5D pop ebp8 b; A7 X8 f1 w4 [; E
0040C5FD |. 5F pop edi; K; f9 I5 ]! t
0040C5FE |. 5E pop esi
4 F3 X3 ^# t. n* |9 D( R: f0040C5FF |. 5A pop edx
?$ |0 A' n7 N6 {1 ?0040C600 |. 59 pop ecx) u# P* f/ q- f* b; z
0040C601 |. 5B pop ebx
, I5 A. i0 P+ h! Q: r7 v8 ?: q0040C602 |. C3 retn
" e: I2 \3 n, T) v5 |/ j+ v0040C603 |> 89E7 mov edi, esp
- p9 i3 s" @; A& _$ K- v0040C605 |. 57 push edi
% U0 d7 {0 |+ ?* D2 |0040C606 |> 8A06 /mov al, byte ptr [esi]
4 @7 N+ u% L9 \4 E1 K/ s0040C608 |. 8807 |mov byte ptr [edi], al
3 `/ H1 a9 _; R6 b, k/ _9 j3 z/ }0040C60A |. 3C 00 |cmp al, 0: M7 u+ n) g5 H3 n0 `+ Z* O2 @/ C
0040C60C |. 74 10 |je short 0040C61E
# s" j. `% i. J+ h$ `0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]) ]1 [& _& J! h
0040C611 |. 83C6 02 |add esi, 2
9 u/ y b* F E4 I3 A; X0040C614 |. 8847 01 |mov byte ptr [edi+1], al# E" X* B* M/ h
0040C617 |. 83C7 02 |add edi, 2
- M& Q7 i) K6 J7 w0040C61A |. 3C 00 |cmp al, 0
0 B5 W1 [! D; i, z0040C61C |.^ 75 E8 \jnz short 0040C606
1 @. n* h' A/ I+ ?0040C61E |> 5F pop edi6 p( a8 F' r; D9 c6 s2 J; N
0040C61F |. 8A1424 mov dl, byte ptr [esp]. x4 {8 i+ P8 F% ^ M
0040C622 |. 89E0 mov eax, esp+ Z# V% q* q1 M, B1 n/ \+ s
0040C624 |. 84D2 test dl, dl
/ b+ l, @' M1 t8 H, n+ `0 B2 R# g0040C626 |. 74 09 je short 0040C631
: u* h |1 F! N) f0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]! U- J; U' g! H& P0 E5 T4 R# x
0040C62B |. 40 |inc eax% m: [/ l2 T8 E* V" M( i
0040C62C |. 45 |inc ebp
, x4 c; P( g# b" X4 t/ x6 [0040C62D |. 84F6 |test dh, dh
7 I+ c6 L0 ]. X% }8 ~# u1 r0040C62F |.^ 75 F7 \jnz short 0040C628 `6 ~/ R: k& `, u9 x% y
0040C631 |> 81FD D2000000 cmp ebp, 0D2. M+ A m& e3 q1 m
0040C637 |. 0F8E 61010000 jle 0040C79E
: w( V5 x. z, F2 c3 O0040C63D |. 89EA mov edx, ebp% x* f9 n, M, ^# i" p. b
0040C63F |. 89E8 mov eax, ebp
' n j: h: Q- b7 Z7 x' o0040C641 |. C1FA 1F sar edx, 1F
) p* |6 R( }% z; b/ }0040C644 |. C1E2 02 shl edx, 2; f% a) W; V0 s( i: W* v
0040C647 |. 1BC2 sbb eax, edx( d1 X' t7 C5 ~+ X H
0040C649 |. C1F8 02 sar eax, 21 t# N) p9 N; f" j9 e
0040C64C |. 89C7 mov edi, eax
# b: H1 i! B M0 E& u0 U9 W5 t0040C64E |. C78424 040100>mov dword ptr [esp+104], 3
T# U' Y( J) }. K; e, X) i0040C659 |> 89E0 mov eax, esp! o+ f. W! f" r) |; G0 W
0040C65B |. 31D2 xor edx, edx
: e+ _6 F0 n2 k2 U, \" U0040C65D |. 8A0C24 mov cl, byte ptr [esp]0 r% Y: K# \+ u1 @/ B
0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx* W* I& M- B/ O! @7 P( K3 f( m
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx6 Y' h; ] [& C; ?+ B
0040C66C |. 899424 080100>mov dword ptr [esp+108], edx" ?8 s$ A2 R, k& f. s" q
0040C673 |. 89E2 mov edx, esp2 K4 m/ R d5 J7 g8 S. M- F. l
0040C675 |. 84C9 test cl, cl
% b: d0 M2 \4 R0040C677 |. 0F84 89000000 je 0040C706) _1 W8 A+ }& M |
0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]& B5 n' P7 e$ H3 o+ {2 t
0040C684 |. 4F dec edi
, A6 l9 z( Q7 M3 M0040C685 |. C1E1 02 shl ecx, 2
9 s x/ c5 N% P" s4 ]; k0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi
5 e J) D- K+ u- q( C% y0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx! f" v+ {4 @: F; I u& ?3 O7 {
0040C696 |> 8A0A mov cl, byte ptr [edx]
6 j7 Z3 Y) P: s4 c0040C698 |. 80F9 20 cmp cl, 20
- V7 Q3 R% l) ~. f J( E W0040C69B |. 0F85 6A010000 jnz 0040C80B1 n* V" [; }( A' T$ z
0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]
: x1 D* i4 E# j5 O0040C6A8 |. 7C 53 jl short 0040C6FD1 w0 a9 M, z; G
0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]' J! u7 y9 p2 Q
0040C6B1 |. C602 00 mov byte ptr [edx], 0$ v" h* J: _- m
0040C6B4 |. 89C6 mov esi, eax
. W- Q6 b4 J5 t) [# C$ \0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]
4 A$ q% [, Q k0040C6BC |. 31DB xor ebx, ebx
) J* e: B# X( P; R0040C6BE |. 57 push edi0 [: J0 B9 `6 |
0040C6BF |> 8A06 /mov al, byte ptr [esi]& |, f+ q7 O: ?+ e: W% N( \
0040C6C1 |. 8807 |mov byte ptr [edi], al
* F) |) q- _) T0 w0040C6C3 |. 3C 00 |cmp al, 0
; F! q1 f" z, i+ D0040C6C5 |. 74 10 |je short 0040C6D7
1 l$ b4 X7 z5 O$ R8 ~0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]" n2 v H$ d& D
0040C6CA |. 83C6 02 |add esi, 27 M: Y) H- ?2 Q
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al4 O( |; x2 U; w# X7 z, d' O& s2 S
0040C6D0 |. 83C7 02 |add edi, 24 g7 Z9 K6 T4 [
0040C6D3 |. 3C 00 |cmp al, 0
6 U/ r# C T( E) o% U0040C6D5 |.^ 75 E8 \jnz short 0040C6BF
. {( T3 m7 Q j! M4 _0040C6D7 |> 5F pop edi
6 p3 O8 N1 R# H! H. o$ G: M0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
- H7 J4 O) e5 u8 F0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]0 Q1 }3 A* p, ~! ~! Z$ V* Q# v( F
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]
7 y* Q! y# t9 E" j% g& k, B& h( b" y0040C6E9 |. 83EF 04 sub edi, 4
; Q4 j6 r8 s: g1 d- M+ c* H5 c* W0040C6EC |. 42 inc edx
' g: b( t' h/ V$ Y- ?9 \0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi5 J7 X% g o) @" D* \- h% d7 ~1 \# z
0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx$ L4 D' p. i" Q* o
0040C6FB |. 89C2 mov edx, eax( G, x' D3 s1 y' N q R) f K
0040C6FD |> 43 inc ebx
' d$ i/ L2 w, ]0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]
* b! H( m2 g0 i' ?% W0 `4 b0040C701 |. 42 inc edx
$ N+ p3 N+ w; [/ X% {: {0040C702 |. 84ED test ch, ch
B2 v4 D% u( B4 W d* w0040C704 |.^ 75 90 jnz short 0040C696) v2 n+ q; O' J' h
0040C706 |> 83FD 10 cmp ebp, 10
2 z c/ w3 ]- L0040C709 |. 7F 05 jg short 0040C7104 U/ q' R8 ]1 x, R' q" {9 K
0040C70B |. BD 20000000 mov ebp, 20) A" ]7 F" H, ~% ^& \
0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]
6 r) Z- V) d% h" ]- V. M" H0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]
9 q+ p; D; k1 F& I0040C71E |. 85D2 test edx, edx
+ S7 ^1 [* x% v U/ {0040C720 |. 7C 23 jl short 0040C745
0 D: i$ `5 `8 |( D0040C722 |. 89C6 mov esi, eax
( T+ c/ |& n$ b0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]
5 v! S" J% C/ M& X& V% A0040C72B |. 57 push edi( U7 R% ]5 x, n1 ]/ w
0040C72C |> 8A06 /mov al, byte ptr [esi]. O- d7 g6 l I' p! X
0040C72E |. 8807 |mov byte ptr [edi], al% l$ m4 l: [3 | c9 A N2 _
0040C730 |. 3C 00 |cmp al, 0
( x# ]. v# s" V- V- P" n9 D( B! B k0040C732 |. 74 10 |je short 0040C744" D+ Z! e1 U2 }& C0 C
0040C734 |. 8A46 01 |mov al, byte ptr [esi+1], Y& B( C8 j! Q
0040C737 |. 83C6 02 |add esi, 2! T3 K+ ^8 ^: b, k1 o6 O! P3 b! U
0040C73A |. 8847 01 |mov byte ptr [edi+1], al; `- V c3 o3 O, x, V
0040C73D |. 83C7 02 |add edi, 2
; e! N2 q3 j7 I! `* G) n; a0040C740 |. 3C 00 |cmp al, 0
! A; {* d: i$ \3 n. |% K0040C742 |.^ 75 E8 \jnz short 0040C72C v8 ~; K( X- J8 \
0040C744 |> 5F pop edi
- H5 i) R5 b6 O6 p: U4 u0040C745 |> E8 E6500100 call 00421830
/ V5 Q$ V$ l3 H2 j$ l( Y0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax- i" k' B. i `: W
0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]& k* P- s' G, C2 t v8 H
0040C756 |. 40 inc eax4 c+ i; A4 d7 ?2 e
0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax
0 A9 U) g+ p! Z0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 10 l5 \9 N: u: e6 ~* F
0040C766 |. B8 64000000 mov eax, 64
3 l- k1 j, V r0040C76B |. 89C2 mov edx, eax7 s+ M$ m6 [( n9 W2 |
0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]
* l; n" H- ], U; @3 v# h; b0040C773 |. C1FA 1F sar edx, 1F, j& C! L' ?* A! [" G
0040C776 |. F7F9 idiv ecx
4 v8 z, R1 O% v0 B. V0040C778 |. 89C3 mov ebx, eax
( G4 ^/ ^( C. @% d9 U. _0040C77A |. 89EA mov edx, ebp
, E4 m8 S1 r6 E! S; t0040C77C |. 89E8 mov eax, ebp
- ?9 i% d0 w0 X; c. e/ ]0 U0040C77E |. C1FA 1F sar edx, 1F9 l- n5 K3 X, O$ O9 K# H
0040C781 |. C1E2 04 shl edx, 46 m6 k" t- h7 A7 `) Y
0040C784 |. 1BC2 sbb eax, edx
2 f6 L" E7 g1 f; X% m0 T3 r0040C786 |. C1F8 04 sar eax, 4
) a" ^* p" I1 O& A0040C789 |. 01C3 add ebx, eax" q& H/ M& ?/ c. a. x7 P
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx
1 `& R" e/ I' n0040C791 |. 81C4 10010000 add esp, 110( x! v6 H& {) S* T; H1 L9 \! k
0040C797 |. 5D pop ebp+ }) K; F( u2 t/ @6 c% ^3 G! f
0040C798 |. 5F pop edi
) S4 `) S7 n/ q9 |& o2 Z0040C799 |. 5E pop esi: N u a7 r& T5 P1 x" z
0040C79A |. 5A pop edx
7 Q' H" T2 j5 b& w5 v0040C79B |. 59 pop ecx) p- H* E' B" }, \2 k8 n
0040C79C |. 5B pop ebx
9 m- O M0 K, P0040C79D |. C3 retn
; I- D n) b& R1 k4 t q/ V0040C79E |> 81FD 8C000000 cmp ebp, 8C
, v$ B- e% \! y" C$ K) w1 H0040C7A4 |. 7C 28 jl short 0040C7CE
. Y0 @+ Y9 y$ U; D2 | b0 H0040C7A6 |. 81FD D2000000 cmp ebp, 0D23 N9 Z7 M* V. o% ?9 t# @. P5 ^9 w
0040C7AC |. 7F 20 jg short 0040C7CE
% G' R, y. U: o$ O. @) D F5 c0040C7AE |. B9 03000000 mov ecx, 3& e3 a# X0 S0 s. {" q# y% z
0040C7B3 |. 89EA mov edx, ebp. d' q h% W! E; u/ W
0040C7B5 |. 89E8 mov eax, ebp4 Y) \5 r3 r/ |
0040C7B7 |. C1FA 1F sar edx, 1F p" e' A4 u" `# g, L
0040C7BA |. F7F9 idiv ecx
" `% m: U* X: {0 S0040C7BC |. C78424 040100>mov dword ptr [esp+104], 20 z7 `! q) @* t- n
0040C7C7 |. 89C7 mov edi, eax% V* a* U! v* T& J0 G1 x7 ]+ s
0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659
2 a4 a5 J, C' ~0040C7CE |> 83FD 46 cmp ebp, 46- e- ]3 \, ?- C$ t+ f, P
0040C7D1 |. 7C 25 jl short 0040C7F8
. I- ]& m5 ^9 }( o' R. Y* M( z0040C7D3 |. 81FD 8C000000 cmp ebp, 8C
& V: c5 P( u. B' r8 i% O: n0 X t0040C7D9 |. 7F 1D jg short 0040C7F8# b9 a) K, a1 C/ u
0040C7DB |. 89EA mov edx, ebp( O" g3 W; ]) Q4 v' [2 e
0040C7DD |. 89E8 mov eax, ebp0 f7 ?; ]( \' g5 _4 o, D
0040C7DF |. C1FA 1F sar edx, 1F: m# f9 B2 n% G1 y, b
0040C7E2 |. 2BC2 sub eax, edx1 ]6 C" q" D8 I1 Y" \- E2 D
0040C7E4 |. D1F8 sar eax, 1" \ F( j" f5 E7 r
0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1( E. ]4 v I# O7 I+ Z9 e. Q; o
0040C7F1 |. 89C7 mov edi, eax( y% m$ a: u; s
0040C7F3 |.^ E9 61FEFFFF jmp 0040C659* p# m! L) W5 j: x! e) H9 ?& L
0040C7F8 |> 31D2 xor edx, edx
! G2 x( _9 e* E- G0040C7FA |. BF 46000000 mov edi, 46. R6 l4 E1 M9 Q( W; o5 h
0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx
) l$ q+ X6 S: Y4 ]* j) ^' p/ c0040C806 |.^ E9 4EFEFFFF jmp 0040C659
8 _1 a% z$ V4 `' s0040C80B |> 80F9 7C cmp cl, 7C' {" Z1 g3 U% R/ Z* ~1 i6 ?
0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD
* ?' W5 `) Z7 {3 i6 I n* m; ]0040C814 |. C602 20 mov byte ptr [edx], 20; Z" T+ q% c; x3 U4 Q! I" N# N
0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD( a* d5 m2 | I1 `: t+ G0 I
- h, [5 ~4 @8 R/ K
在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。# ]/ T: ~, W; [3 G
估计要汉化就要在上面的代码段下功夫了,以后继续研究。+ ]7 q- [& K1 o3 A
; `4 c- b% T& x4 m
找到2个俄文的补丁,也许对以后研究有用。
n; M9 L3 j4 S, D% W" F) ehttp://www.megaupload.com/?d=EZH6X672
C# }( y7 p5 Y* @7 ahttp://rapidshare.com/files/94227080/ScratchesDC.7z |