看了一下惊恐鬼屋Scratches这个游戏。5 r. `0 F! T4 P
包文件有2个,scratches.res和scream.res,
- o% F: c5 n$ I; H$ ]+ \包文件的格式如下,可以用Game Extractor来解开。5 Z( N2 A! {; u( g( q
http://wiki.xentax.com/index.php/Scratches_RES
% B. R: `$ B% q! T2 m# ~, |" ?从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。
- N% r- Z# I9 F* v: C0 e/ Escream.res里面也有一个字体文件,但是游戏好像没有用到。
. e. e3 E3 y; ~# O: y+ G6 {* g8 X- B6 a) `6 }8 D
用OD调试后,发现这是一个使用opengl API的游戏。: r1 Y- j: X7 b! Q2 O
在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。4 L4 `' ]) X8 {
- A# k- _) ]4 z# x2 W+ R$ A$ Q0040C5D0 /$ 53 push ebx, W( ?* T3 z* e# b9 _4 ]' z) o
0040C5D1 |. 51 push ecx5 @$ q4 b4 \& r: t/ ]: P" }" w
0040C5D2 |. 52 push edx) v, F1 c0 r' d4 `- }. ]
0040C5D3 |. 56 push esi& E& `% ^% }5 `+ @: J
0040C5D4 |. 57 push edi
! S2 x, t+ l) s' j D' B* d N0040C5D5 |. 55 push ebp' H- B4 f: L$ Z3 U" q5 K7 s4 n3 C
0040C5D6 |. 81EC 10010000 sub esp, 110
M/ F. }% U) i, h0 ?0040C5DC |. 89C6 mov esi, eax9 v2 L- Y; a5 Q
0040C5DE |. 89C7 mov edi, eax, `7 q. f3 K! J7 ~0 B
0040C5E0 |. 29C9 sub ecx, ecx
: |# y2 x& o, \' J/ Q! L1 o0040C5E2 |. 49 dec ecx6 z* i0 N! K A( n5 l5 X9 \: I$ W8 ~+ a
0040C5E3 |. 31C0 xor eax, eax& E4 Q# m' H) r2 d) ^* u4 m: k
0040C5E5 |. F2:AE repne scas byte ptr es:[edi]9 _7 o& d9 N+ I: p, e
0040C5E7 |. F7D1 not ecx" l( K. E* B8 {5 i3 `, u
0040C5E9 |. 49 dec ecx% Y. i* Q- l, ` m/ o" [# @. v
0040C5EA |. 31DB xor ebx, ebx
- @0 P& H& T' T% v- U+ J: a0040C5EC |. 31ED xor ebp, ebp
E0 M' i" T; {) ?0 u0040C5EE |. 81F9 00010000 cmp ecx, 1005 B3 J8 z" Y. s3 B
0040C5F4 |. 72 0D jb short 0040C603# ?" R& a7 `0 h! e
0040C5F6 |. 81C4 10010000 add esp, 110: l' e$ \) E$ o* K7 Q9 d. A
0040C5FC |. 5D pop ebp
4 ]5 S l m, |4 y7 U. @& x5 E0040C5FD |. 5F pop edi
- k* ^# G! |: ?5 H" x# V f! M$ ^0040C5FE |. 5E pop esi
0 k W1 P* |" m. |0040C5FF |. 5A pop edx0 L! S5 f, x0 q( }* w
0040C600 |. 59 pop ecx$ \/ L1 R, t1 e' S
0040C601 |. 5B pop ebx+ Q5 e% W0 i& ~8 v
0040C602 |. C3 retn$ `) E" a2 Z' e$ w
0040C603 |> 89E7 mov edi, esp
! ]( `8 I; ]8 ^/ q$ B% k1 ^0040C605 |. 57 push edi
% {! t! u2 o! y9 A0040C606 |> 8A06 /mov al, byte ptr [esi]
' k% g2 F2 z4 w- T- A' V0040C608 |. 8807 |mov byte ptr [edi], al
$ Z* n5 |; l9 ?/ d$ `% T9 F0040C60A |. 3C 00 |cmp al, 0
& V* \) t/ E- X8 Z+ U4 `& |0040C60C |. 74 10 |je short 0040C61E
/ e6 C- ?( N. V4 P0 |" R4 B, K7 \0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]! V8 s% ^9 a7 A" l4 G& C
0040C611 |. 83C6 02 |add esi, 2
. |+ U: \' U6 p# _0040C614 |. 8847 01 |mov byte ptr [edi+1], al
" |$ z8 o2 Q& B" f7 B* c& n0040C617 |. 83C7 02 |add edi, 2; o% Y, ~0 P+ a+ x7 `0 P
0040C61A |. 3C 00 |cmp al, 0
4 F6 V& _6 v# [" f0040C61C |.^ 75 E8 \jnz short 0040C606
/ n) L: j* O9 ?, j/ J/ B# n0040C61E |> 5F pop edi9 I4 w! L& @+ |. g, _
0040C61F |. 8A1424 mov dl, byte ptr [esp]
) K. V$ {6 ~, a: A0 k( D0040C622 |. 89E0 mov eax, esp
1 V6 ^) o. H& x+ G8 k/ m0040C624 |. 84D2 test dl, dl
5 @8 y5 H' S. x3 E6 {. @0040C626 |. 74 09 je short 0040C631
. F: L* o. H- W6 T0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]
p( _' o5 T1 L. j, b0040C62B |. 40 |inc eax1 l0 B- i; N$ Z1 u$ @
0040C62C |. 45 |inc ebp
+ J: h- ~. ^. }5 [! ] e0040C62D |. 84F6 |test dh, dh
8 `- |" u8 f( ]6 t0040C62F |.^ 75 F7 \jnz short 0040C628( R0 q' M- m/ x, |9 J7 h
0040C631 |> 81FD D2000000 cmp ebp, 0D2& v- N: Z3 e- R) @+ i
0040C637 |. 0F8E 61010000 jle 0040C79E& t8 ]& Q5 W# O, N
0040C63D |. 89EA mov edx, ebp$ [( w* ~+ a/ E1 ^
0040C63F |. 89E8 mov eax, ebp; g. Y6 `8 ?$ F& ~5 q
0040C641 |. C1FA 1F sar edx, 1F% Y: A: W' X6 r% W
0040C644 |. C1E2 02 shl edx, 2
7 F8 u) I3 i, r$ D, n7 @0040C647 |. 1BC2 sbb eax, edx) B: Z3 ~- L/ h& ]: j
0040C649 |. C1F8 02 sar eax, 23 p$ g( [( u1 F, w0 D+ Z
0040C64C |. 89C7 mov edi, eax$ f' d- C- N+ x% e+ s, [
0040C64E |. C78424 040100>mov dword ptr [esp+104], 36 T7 @* d9 O3 _$ s2 i
0040C659 |> 89E0 mov eax, esp& K5 X' J) a# @# f
0040C65B |. 31D2 xor edx, edx
& T" X* n; j- D' `0040C65D |. 8A0C24 mov cl, byte ptr [esp]0 f: R# w8 n" l$ S, `( g
0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx1 H8 Z# ]4 q- T" S$ I6 B- `! m3 n
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx! D6 Z/ |) t5 ?0 X; b
0040C66C |. 899424 080100>mov dword ptr [esp+108], edx4 T W; u' P, K
0040C673 |. 89E2 mov edx, esp
, v: H, E5 j/ m/ {5 K$ [0040C675 |. 84C9 test cl, cl
; I" O3 y( c$ s" L0040C677 |. 0F84 89000000 je 0040C706) o) ]4 h8 B5 y7 F3 f
0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]1 R+ Y/ I- [( _/ Q1 Z
0040C684 |. 4F dec edi( l8 }( o- {/ t' J) g, D! a' D6 A
0040C685 |. C1E1 02 shl ecx, 2
; a7 ?, L9 K. Q$ ]0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi8 p7 M# Y) e4 }1 X. D
0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx
2 |7 U7 g" k2 e. L0040C696 |> 8A0A mov cl, byte ptr [edx]
3 t3 j% U* P, Z g2 r2 Q0040C698 |. 80F9 20 cmp cl, 20
1 F8 N4 W9 G2 P, v; }0040C69B |. 0F85 6A010000 jnz 0040C80B
/ t! n- M3 k' X: w0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]. w: O" K z: n
0040C6A8 |. 7C 53 jl short 0040C6FD
% B, e5 ~4 R2 I6 h$ R. z8 c# N0 a0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
9 p6 d% w9 Z" p, o) C0040C6B1 |. C602 00 mov byte ptr [edx], 0
7 M2 z6 b- A# O" c- p1 z) W/ E4 X0040C6B4 |. 89C6 mov esi, eax
1 ?1 W' |8 }6 ]: m* H6 t0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]8 B9 \) A# l" ^. w
0040C6BC |. 31DB xor ebx, ebx/ y8 a' L" m0 Z5 k. }1 _
0040C6BE |. 57 push edi6 s! Y/ H4 Q' j3 B
0040C6BF |> 8A06 /mov al, byte ptr [esi]
$ k1 b* X0 l$ U0040C6C1 |. 8807 |mov byte ptr [edi], al
" }& v3 a) Z; N0040C6C3 |. 3C 00 |cmp al, 01 ~+ U3 U0 }! A2 U$ X4 q6 `# y. c7 h, `
0040C6C5 |. 74 10 |je short 0040C6D7
! a2 E8 [; K6 d$ j0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]
' F1 H" \- ^6 d0040C6CA |. 83C6 02 |add esi, 2) c O- v0 H, D e3 ?
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al
- Z' `& B7 o# r9 U. Q. R( x0040C6D0 |. 83C7 02 |add edi, 2
* C' T/ f. ^5 a4 D0040C6D3 |. 3C 00 |cmp al, 0- O% X& ?# R: N
0040C6D5 |.^ 75 E8 \jnz short 0040C6BF* ?& }1 Z4 Z6 u( K
0040C6D7 |> 5F pop edi
v9 W$ ]8 T7 d# p& Z0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
% |: S2 e1 I4 U, ~, f' I0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
a: }0 J+ f- _0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]1 S* P5 \& m+ V( F
0040C6E9 |. 83EF 04 sub edi, 41 I$ W7 G0 k7 Y8 |
0040C6EC |. 42 inc edx
% t& m1 R3 R1 Y% W, J" E4 x! G0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi
. g3 b% T6 E& P( Z) v7 |) t0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx% T0 v! s. a% J: @
0040C6FB |. 89C2 mov edx, eax1 H$ I$ G0 Z! O" }
0040C6FD |> 43 inc ebx! I- L7 c4 R. l) z
0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]5 \. f0 A9 n" X ^
0040C701 |. 42 inc edx
- A3 O3 F. D8 g# M! E5 u3 Y0040C702 |. 84ED test ch, ch V8 |) H1 }0 |4 b5 J
0040C704 |.^ 75 90 jnz short 0040C696
) {: g1 u* n# u' j0040C706 |> 83FD 10 cmp ebp, 10& W5 y$ {8 H! l8 }! q4 I
0040C709 |. 7F 05 jg short 0040C710
: | m/ p r3 ?6 a0040C70B |. BD 20000000 mov ebp, 20
' d! K1 C/ U$ U" U/ L5 v0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104] w9 O% B% Z, g2 z
0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]
3 l& a0 S7 a/ A) Z- n, l: v0040C71E |. 85D2 test edx, edx/ G3 \" w- x$ {: K
0040C720 |. 7C 23 jl short 0040C745
9 y+ J: a# _$ x; Z6 B, T' p0040C722 |. 89C6 mov esi, eax
4 H$ Q0 }* j5 g0 n, A0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]8 ]2 t& P+ t5 U$ w( l& x; p. w1 C
0040C72B |. 57 push edi) ^( H2 _6 _- V* X9 t- j5 d& F
0040C72C |> 8A06 /mov al, byte ptr [esi]
, ]* l. @% Y& j6 s0040C72E |. 8807 |mov byte ptr [edi], al
5 e. G, [# B Z: e: t9 c5 d0040C730 |. 3C 00 |cmp al, 0& f% h* l6 S; r( e" ~( [& {
0040C732 |. 74 10 |je short 0040C744
& B0 G5 D |8 }/ [0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]
# w: @" P: O1 K2 @0040C737 |. 83C6 02 |add esi, 2
! b5 d3 q7 G, h) ^, C0040C73A |. 8847 01 |mov byte ptr [edi+1], al
) Z; c4 \; v: k0040C73D |. 83C7 02 |add edi, 2, D! h8 s, ]5 e# u r. Y8 v4 i
0040C740 |. 3C 00 |cmp al, 0& `" O6 c4 r2 _4 c* G* a
0040C742 |.^ 75 E8 \jnz short 0040C72C
" d/ _9 q9 x; E4 H0040C744 |> 5F pop edi- a& A2 A: B; [; I0 i t5 l
0040C745 |> E8 E6500100 call 00421830- ?* L# W8 }1 V, q& ^3 J6 H6 x' I
0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax( u$ }5 r! M I9 n' j- p# n
0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]0 H6 k. E6 k/ c! n' w2 z
0040C756 |. 40 inc eax9 t( X, Z7 ^' ^1 |! o$ N5 k
0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax& k6 @4 {% L+ B& ^
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1
- \8 b, K- a; C( u. G* K* h) ]5 p0040C766 |. B8 64000000 mov eax, 64, ?* }6 J: @8 |4 Y
0040C76B |. 89C2 mov edx, eax. @2 F- z9 b) |" p/ z
0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]9 u/ ^& n0 h3 S
0040C773 |. C1FA 1F sar edx, 1F
" T9 e6 h. c2 Q. r7 h$ C0040C776 |. F7F9 idiv ecx% t2 Q- u. B& M7 \. w
0040C778 |. 89C3 mov ebx, eax
6 `0 P1 r- a; z6 M3 W3 {: r0040C77A |. 89EA mov edx, ebp, {6 r5 |( [* e$ `( q J
0040C77C |. 89E8 mov eax, ebp5 l7 g [5 H- K/ o
0040C77E |. C1FA 1F sar edx, 1F: \9 E) z7 p( |1 `9 Y8 N
0040C781 |. C1E2 04 shl edx, 4
2 o, O" r3 f V* l! u2 F Y3 X0040C784 |. 1BC2 sbb eax, edx: d8 o+ S9 @9 C* Q
0040C786 |. C1F8 04 sar eax, 4
) T7 T9 q7 R, A0040C789 |. 01C3 add ebx, eax
6 i! `, l x! D o w# j+ l, l! t0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx9 E2 H: u- y& Q' m% I: ^! j/ @
0040C791 |. 81C4 10010000 add esp, 110: F! T( a8 o/ o& _
0040C797 |. 5D pop ebp
O2 ?. c5 C- |0040C798 |. 5F pop edi" P. e4 z+ Z% _% S3 t% M3 Z
0040C799 |. 5E pop esi
3 q; O5 Z2 T, ]6 ~0040C79A |. 5A pop edx
. g9 V& @% ]5 x& K& l3 n0040C79B |. 59 pop ecx9 v- [1 A# N7 }; Y/ v
0040C79C |. 5B pop ebx
5 ^% s5 j0 O+ t: o7 X0040C79D |. C3 retn
4 c7 f8 m7 K. A7 T2 A0040C79E |> 81FD 8C000000 cmp ebp, 8C
@4 L- e, @4 p0040C7A4 |. 7C 28 jl short 0040C7CE
a- s* l& G3 r \! `2 u, |0040C7A6 |. 81FD D2000000 cmp ebp, 0D2
% x1 _6 Z! z1 {5 i3 y8 B0040C7AC |. 7F 20 jg short 0040C7CE
" M# o4 w2 J! Q; p; O0040C7AE |. B9 03000000 mov ecx, 30 Y8 p3 B$ O( M/ V! ]% _
0040C7B3 |. 89EA mov edx, ebp
; p7 f# @+ M. z( H! y, c0040C7B5 |. 89E8 mov eax, ebp8 U2 E& h/ \0 X6 f, K1 Y
0040C7B7 |. C1FA 1F sar edx, 1F
( e* U$ F) F; ^$ f0040C7BA |. F7F9 idiv ecx( A& G, `0 U* X
0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2
$ A% u( u l$ f/ Q% y3 h0040C7C7 |. 89C7 mov edi, eax9 {! b2 e# z4 J! K( t
0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659
! I8 p/ I6 N7 A1 r0040C7CE |> 83FD 46 cmp ebp, 46* I+ E4 x8 o& j0 {# q
0040C7D1 |. 7C 25 jl short 0040C7F88 X6 s$ I% H& I% C" D
0040C7D3 |. 81FD 8C000000 cmp ebp, 8C
0 Z" V+ `9 S9 e2 \+ ?3 p0040C7D9 |. 7F 1D jg short 0040C7F88 o8 M/ x. f: y9 G4 I
0040C7DB |. 89EA mov edx, ebp
$ G, @* G$ g! U3 m$ F9 O0040C7DD |. 89E8 mov eax, ebp8 ~6 b/ a* ~) m
0040C7DF |. C1FA 1F sar edx, 1F! [1 Z. T6 ^. P5 X( ~ H1 C
0040C7E2 |. 2BC2 sub eax, edx
" V+ ~% ], b3 x. C/ C' w0040C7E4 |. D1F8 sar eax, 1
4 u7 N+ c) m+ o2 C- B) M M0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1
3 J$ C& v0 M! [9 N0 |0040C7F1 |. 89C7 mov edi, eax- I, Z; L# c7 g0 X
0040C7F3 |.^ E9 61FEFFFF jmp 0040C659
; V3 o0 L' e/ G A) d$ q. }: ?0040C7F8 |> 31D2 xor edx, edx8 M3 T( S; e) ?
0040C7FA |. BF 46000000 mov edi, 46
8 e: _% Z" l/ \6 P4 l$ G0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx
1 z. P' Y2 B0 q8 S, o, c A0040C806 |.^ E9 4EFEFFFF jmp 0040C659
$ x1 F! x" c9 H7 X9 }7 ^. D0040C80B |> 80F9 7C cmp cl, 7C# u- | Q; T1 g3 f3 {
0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD
8 @" j+ G$ M4 @/ q0040C814 |. C602 20 mov byte ptr [edx], 202 `9 D/ [3 u* w* q
0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD# |7 x3 a3 _+ e8 ]) p9 s$ ?6 @
( D! M: ?% B+ w) Y# L在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
/ w% {- _# V; ~. M0 U5 ]6 q估计要汉化就要在上面的代码段下功夫了,以后继续研究。
' o c/ D% J: H0 d8 k5 ], Q$ \$ h5 E# D7 }2 g. f: F5 }
找到2个俄文的补丁,也许对以后研究有用。
f$ A8 T9 i( T2 k. Nhttp://www.megaupload.com/?d=EZH6X672
. k* v+ A3 Z3 }- khttp://rapidshare.com/files/94227080/ScratchesDC.7z |