看了一下惊恐鬼屋Scratches这个游戏。
$ P6 h# C+ |: e6 Y. a, j8 }# v包文件有2个,scratches.res和scream.res,- g: V7 I% e4 D" U
包文件的格式如下,可以用Game Extractor来解开。
/ f7 e4 K3 q4 Z' a: {5 j- `0 }http://wiki.xentax.com/index.php/Scratches_RES9 T7 U. B; U1 `5 M h: Q6 \( X/ y, }
从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。% h; V4 F$ g1 x7 K0 J, @/ J
scream.res里面也有一个字体文件,但是游戏好像没有用到。
# q! }3 p9 D9 j7 R2 Q8 I& ~$ t& @9 Y. X( I
用OD调试后,发现这是一个使用opengl API的游戏。
. o5 o0 U8 N ]. Y' [在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。
. I4 d# k( u7 m* l' i/ @
& s: l, j, J& `6 x% y: D9 X0040C5D0 /$ 53 push ebx# o1 e) G% o" E' @" z4 E
0040C5D1 |. 51 push ecx) v" ^7 |7 Y K/ q2 N
0040C5D2 |. 52 push edx/ a; k3 d$ D4 }/ v8 [# p- V
0040C5D3 |. 56 push esi
9 V+ m4 n: G' A! W0040C5D4 |. 57 push edi
% L( D. [: _+ @# P4 e' s% H* g0040C5D5 |. 55 push ebp
. U# t1 j4 w- ^( i: ^* a0040C5D6 |. 81EC 10010000 sub esp, 110
$ p& \- c9 X% r0040C5DC |. 89C6 mov esi, eax
7 N3 r0 b0 E" _+ G4 E0040C5DE |. 89C7 mov edi, eax
/ I/ Q% d7 o M) R5 q0040C5E0 |. 29C9 sub ecx, ecx6 e. ]: {1 T5 H G
0040C5E2 |. 49 dec ecx3 O! m) n2 G8 p& L, |1 ~# r% K1 K- c
0040C5E3 |. 31C0 xor eax, eax d3 s( R, \, {4 I- N0 I# Q
0040C5E5 |. F2:AE repne scas byte ptr es:[edi]# L( `5 D" {1 r1 @9 p
0040C5E7 |. F7D1 not ecx; G5 g G% T; N& N) t0 S8 v9 y
0040C5E9 |. 49 dec ecx
& Y& z) t$ ~4 z! j3 p0040C5EA |. 31DB xor ebx, ebx
8 U! J% t E( O% D0 B) D p0040C5EC |. 31ED xor ebp, ebp& d$ T( `* W' E4 [2 C* f( M
0040C5EE |. 81F9 00010000 cmp ecx, 100
2 J* R+ l# e7 \7 Z7 @0040C5F4 |. 72 0D jb short 0040C603; v4 V0 A7 c- ?5 M& ^, ]
0040C5F6 |. 81C4 10010000 add esp, 110
' c$ `! h/ C7 ]( ~9 ?0040C5FC |. 5D pop ebp
! X, }; `8 s$ |3 Q- k0040C5FD |. 5F pop edi
4 r1 k( T2 M* L1 a( T* G0040C5FE |. 5E pop esi
/ U6 l% b. D6 |6 X. h0040C5FF |. 5A pop edx
3 U9 @ s7 t* Q" ^5 h0040C600 |. 59 pop ecx- G [0 M7 H7 M) J
0040C601 |. 5B pop ebx4 B+ F; k% N" `+ D
0040C602 |. C3 retn
. j1 Z8 F. p0 w; t) E0040C603 |> 89E7 mov edi, esp
* H. L2 p3 m6 y# e0040C605 |. 57 push edi- [7 ^3 x' x$ ?6 }: n2 @
0040C606 |> 8A06 /mov al, byte ptr [esi]) `' Y n+ @$ y' [& i5 ]* \" H& K
0040C608 |. 8807 |mov byte ptr [edi], al
! @8 b% n( j& ?6 E0040C60A |. 3C 00 |cmp al, 0
- o3 m4 e; B* e0040C60C |. 74 10 |je short 0040C61E
" F2 f( v- L' B2 c0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]. w% n8 V) y+ c( b. T' w" B
0040C611 |. 83C6 02 |add esi, 2
- X( h+ `( `6 _" @1 y- \# I0040C614 |. 8847 01 |mov byte ptr [edi+1], al
9 ]' ` M% o F: G; f( V, _ I0040C617 |. 83C7 02 |add edi, 2
, J0 {3 c' {" F5 z. F$ k0040C61A |. 3C 00 |cmp al, 04 h4 r% a* p% r0 F9 f% Z- h
0040C61C |.^ 75 E8 \jnz short 0040C606
8 ^+ ^' I+ ?! ]+ J9 `' |$ O0040C61E |> 5F pop edi* ~7 N9 I1 E- ~- f7 e$ m1 I
0040C61F |. 8A1424 mov dl, byte ptr [esp]3 e' @0 T2 ^4 S) ]
0040C622 |. 89E0 mov eax, esp
1 z4 ~( B% E- @* g) f& B0040C624 |. 84D2 test dl, dl. ]5 T, O1 V( D$ f" I
0040C626 |. 74 09 je short 0040C631
. J7 g$ M& `3 \2 a- b: u8 e5 h0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1] N5 Y- a9 n" [$ M% @
0040C62B |. 40 |inc eax
! y$ G: d9 y3 B1 C n4 f o0040C62C |. 45 |inc ebp" V! ~ r/ _) ~! X- e0 Z! O; p" d
0040C62D |. 84F6 |test dh, dh
# a' u' [6 ?; O; V4 T. Y0040C62F |.^ 75 F7 \jnz short 0040C628
_- R9 ~, L+ _; m% c% g3 `1 h/ {4 |0040C631 |> 81FD D2000000 cmp ebp, 0D2
8 a0 C" _0 j0 i+ Z0040C637 |. 0F8E 61010000 jle 0040C79E3 s) b0 ^) o0 \
0040C63D |. 89EA mov edx, ebp( i4 y x- J# t
0040C63F |. 89E8 mov eax, ebp2 L" ?. q. D1 Z
0040C641 |. C1FA 1F sar edx, 1F y. D) v8 l+ {7 P+ z5 H" _6 M
0040C644 |. C1E2 02 shl edx, 20 z5 y' {2 F! T% a' m% m/ z" v. {* \
0040C647 |. 1BC2 sbb eax, edx
* s: O. \% ^5 X' O) h$ `$ u& n! S0040C649 |. C1F8 02 sar eax, 2
: u' }: Z# |5 M" g! U0 j; d0040C64C |. 89C7 mov edi, eax
; E) v% J7 D: c0 y0040C64E |. C78424 040100>mov dword ptr [esp+104], 3$ X6 w' u9 l1 e
0040C659 |> 89E0 mov eax, esp
. s: F% j4 S0 F/ n6 V% u9 v0040C65B |. 31D2 xor edx, edx
% }. i( C& b" S# K/ |0040C65D |. 8A0C24 mov cl, byte ptr [esp]
" T+ \# f5 x+ I$ Y7 u0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx% v+ ]: a" f7 N! f
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx
$ e* \$ ~2 x# E0040C66C |. 899424 080100>mov dword ptr [esp+108], edx7 v) j7 i! z3 a3 H
0040C673 |. 89E2 mov edx, esp
+ o) ]! o7 {$ m& b/ a& z0040C675 |. 84C9 test cl, cl. A& t. ]9 ?( S5 P/ z! G: ], Z
0040C677 |. 0F84 89000000 je 0040C7064 { A3 e( t: c, Y3 @& J
0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]5 D2 Z# r& {9 X* F
0040C684 |. 4F dec edi9 w( m; N( C8 e4 o( G1 t8 b
0040C685 |. C1E1 02 shl ecx, 2
8 a- C) \" L9 l) H# G3 u0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi
6 n+ P4 j; }2 s0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx) @* w' h0 i6 w- d3 u& ^& n9 t0 {
0040C696 |> 8A0A mov cl, byte ptr [edx]) ^; ]- ?; l8 B* d; r! H
0040C698 |. 80F9 20 cmp cl, 20
' n: }. r: S+ ~# F0040C69B |. 0F85 6A010000 jnz 0040C80B& L0 S& \5 ~; \! L/ s
0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]
S- Z- L J/ N, \ [! L+ ~0040C6A8 |. 7C 53 jl short 0040C6FD
% J% X' [% C {; ?+ Y9 O0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
T7 C$ B f2 J0 C0040C6B1 |. C602 00 mov byte ptr [edx], 0* E7 \, v$ E8 U7 _! W& r
0040C6B4 |. 89C6 mov esi, eax( m6 Y3 Q% M( R- E1 J: Q
0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]
+ Y) c) A3 l2 n. d. `6 D0040C6BC |. 31DB xor ebx, ebx9 M& Q1 {. }# l4 m
0040C6BE |. 57 push edi
/ U1 N: j/ Z6 [4 x0040C6BF |> 8A06 /mov al, byte ptr [esi]
% `1 r* }, Q; G1 c0040C6C1 |. 8807 |mov byte ptr [edi], al
% W# S# j2 d& E4 }- n0040C6C3 |. 3C 00 |cmp al, 0
/ e9 w/ Z6 }! n0 _ P7 z) {0040C6C5 |. 74 10 |je short 0040C6D7/ M+ h- k( p- q& E
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]1 E% ~; v+ ~' ]" @9 @
0040C6CA |. 83C6 02 |add esi, 2
! g# ]/ A {2 ^6 Y6 I1 Q0040C6CD |. 8847 01 |mov byte ptr [edi+1], al% e+ x2 a) j F x/ ?
0040C6D0 |. 83C7 02 |add edi, 2
5 `) Y, z# _6 S; `/ _7 e0040C6D3 |. 3C 00 |cmp al, 0
$ c [2 ~ I2 e+ {7 [& E0040C6D5 |.^ 75 E8 \jnz short 0040C6BF
- L | n# I) \$ ~0040C6D7 |> 5F pop edi1 Y% B% y7 K, {+ t3 Q& A6 y* N4 a
0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]% \8 t" K& q- }& E9 X
0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
( K( W, D. h/ _& T4 F5 m7 `9 R0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]( ]9 Z. O) d0 V; Q. H- a4 j# t* H3 e# ]
0040C6E9 |. 83EF 04 sub edi, 42 [8 ]- \1 P1 ~( A$ n. I
0040C6EC |. 42 inc edx4 |$ K' I/ o% ?, t2 G+ @% f$ K
0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi
, s5 `1 K4 _7 C$ J) o. {5 F0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx" E: m* b: @/ b/ C" m _" f/ `
0040C6FB |. 89C2 mov edx, eax
) O5 i' f1 o6 p; m/ H- G. e0040C6FD |> 43 inc ebx3 ?! J) z% m9 P3 L- T
0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]1 c4 @" Y- K8 f
0040C701 |. 42 inc edx4 h, F0 m& y2 l3 q% \
0040C702 |. 84ED test ch, ch9 E% e7 l$ t5 j3 Q: O% ~; q
0040C704 |.^ 75 90 jnz short 0040C696
; D7 t B/ p1 M0040C706 |> 83FD 10 cmp ebp, 10# J, Y, Q7 t) V" o, p1 o( e# ]7 }' w' Y
0040C709 |. 7F 05 jg short 0040C710
( ]4 D/ r/ o: j6 _9 v5 e% J0040C70B |. BD 20000000 mov ebp, 20
% F0 t6 A0 G* |; `, h0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]
' A h5 P, J) J& D( C) n0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]' I6 v; `$ P8 _ L5 d6 ~* u# f
0040C71E |. 85D2 test edx, edx& @: S5 z3 i1 H' r0 \3 c5 z) l
0040C720 |. 7C 23 jl short 0040C745
7 L/ F% a, T1 T0040C722 |. 89C6 mov esi, eax
. N# R# {0 A* |$ `4 a. K/ Y0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]
h- k7 X% n0 I4 h0040C72B |. 57 push edi" Y& ~1 U! E' @* q: h, T* o
0040C72C |> 8A06 /mov al, byte ptr [esi]) L2 s! `: m+ R# l
0040C72E |. 8807 |mov byte ptr [edi], al
% ]' u( ]2 p3 c* @! @6 ~0040C730 |. 3C 00 |cmp al, 0
- R# F' [& [ A( N- H0040C732 |. 74 10 |je short 0040C744# ^; T% B6 `7 s
0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]
1 N, h; s/ R8 ~1 [, E) X0040C737 |. 83C6 02 |add esi, 2
( }4 q3 w2 a$ n' h, |0040C73A |. 8847 01 |mov byte ptr [edi+1], al
$ V6 T7 Z4 W0 T% Z0040C73D |. 83C7 02 |add edi, 2# I& u g7 M/ R! q/ I6 g
0040C740 |. 3C 00 |cmp al, 06 \* ?) G1 I ~0 d7 g5 Q
0040C742 |.^ 75 E8 \jnz short 0040C72C
7 p1 d2 m( {3 y! u! g0040C744 |> 5F pop edi
7 I# T1 w8 b4 Z/ i5 D. Z0040C745 |> E8 E6500100 call 00421830
4 l; s5 G5 w+ I! \0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax/ s/ L" g& Z1 S8 t
0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]
, f0 M' w* F& f. {3 e0040C756 |. 40 inc eax
' A0 o D W, f6 x( t& I0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax( Q! ~$ @" R2 {& ~- D N! G* s
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 14 i% ?" ^ f& W3 M" N* H
0040C766 |. B8 64000000 mov eax, 64- Q! z+ {5 q( f& x1 N+ o
0040C76B |. 89C2 mov edx, eax: ^) g) `+ F! h7 z* H- {7 l1 u
0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]
: W7 i# n% d9 T) A) ^* Y7 u0040C773 |. C1FA 1F sar edx, 1F% }% |- ~5 ?' I1 g! f1 E
0040C776 |. F7F9 idiv ecx
/ E% ?& g( n- ^ s0 l0040C778 |. 89C3 mov ebx, eax9 i+ { i! U' Q' k- B! C
0040C77A |. 89EA mov edx, ebp
5 z0 C1 Z. x2 b" t6 Q2 G/ n" f& j0040C77C |. 89E8 mov eax, ebp
6 y/ W5 U" n" u K3 p% }7 \* W0040C77E |. C1FA 1F sar edx, 1F' @. d: f* j4 C/ P
0040C781 |. C1E2 04 shl edx, 4. g. o, m0 P- K/ m0 I1 C: c
0040C784 |. 1BC2 sbb eax, edx& P; S3 a, g9 @* B
0040C786 |. C1F8 04 sar eax, 4
; |- e5 w( ?) ~6 w0040C789 |. 01C3 add ebx, eax0 ` Q- U' @, P, U4 Z' R0 |' m+ A
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx
, G3 C1 |' h. Y: w5 \8 p8 S! n: l8 z0040C791 |. 81C4 10010000 add esp, 110
+ K; g! L$ R! m: s# \0040C797 |. 5D pop ebp
+ ^5 O3 D( R8 q8 d: m- A0040C798 |. 5F pop edi3 ^4 e" L$ [! J
0040C799 |. 5E pop esi
. C* @+ K( ~! O) s# C4 D2 O0040C79A |. 5A pop edx& t4 i0 Z, a2 O" O; F1 a) ]. P
0040C79B |. 59 pop ecx" C; [+ ^) h8 }9 ^; y1 g# _ @
0040C79C |. 5B pop ebx8 L1 D: C6 U! S/ g8 e, v
0040C79D |. C3 retn
6 o" A* `. w2 a, s |) o# B0040C79E |> 81FD 8C000000 cmp ebp, 8C4 x6 j/ C! O/ i6 w& S7 H: i
0040C7A4 |. 7C 28 jl short 0040C7CE
Z, e7 v: K0 k* z! i; Y0040C7A6 |. 81FD D2000000 cmp ebp, 0D28 N# |- N5 ?+ `
0040C7AC |. 7F 20 jg short 0040C7CE
, w9 U% x6 D9 q0 z- R0040C7AE |. B9 03000000 mov ecx, 37 q+ l+ C) S0 ?
0040C7B3 |. 89EA mov edx, ebp; f9 b e, V& M
0040C7B5 |. 89E8 mov eax, ebp( A3 T1 x9 C2 K- n$ e R& Z' y
0040C7B7 |. C1FA 1F sar edx, 1F3 s, K' e2 Z; w, w( F8 l! C. M7 X* K
0040C7BA |. F7F9 idiv ecx
4 c$ q+ A( B% S1 F0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2
4 M$ Z$ L# s. F# ]6 V8 G0040C7C7 |. 89C7 mov edi, eax: [: L+ D6 x2 R& v
0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659; N' r$ e( o* q3 |7 D; I; j
0040C7CE |> 83FD 46 cmp ebp, 46% b' W( L4 I- _* O
0040C7D1 |. 7C 25 jl short 0040C7F8. w; q3 T- G+ s
0040C7D3 |. 81FD 8C000000 cmp ebp, 8C
2 n r4 }; p) A5 O: q: Q! Y0040C7D9 |. 7F 1D jg short 0040C7F8
3 l# `7 F+ o& ]0040C7DB |. 89EA mov edx, ebp7 i7 K/ f% G+ k
0040C7DD |. 89E8 mov eax, ebp
! d0 x: [8 b8 S; q6 A% I0040C7DF |. C1FA 1F sar edx, 1F
5 x4 F+ [& V! Y& Y0040C7E2 |. 2BC2 sub eax, edx; Y. t0 A7 f# O% ?0 p
0040C7E4 |. D1F8 sar eax, 1* Y4 D- p- ~ T! F- v/ C; `8 E, c
0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1
1 h' ?4 J9 K# |* z6 B0040C7F1 |. 89C7 mov edi, eax3 I- c6 a6 K6 R
0040C7F3 |.^ E9 61FEFFFF jmp 0040C6595 x. U' H9 A* U' [
0040C7F8 |> 31D2 xor edx, edx
& `% d2 a7 R* @0040C7FA |. BF 46000000 mov edi, 464 `* n: F2 r2 U: k
0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx. F6 c1 W0 e1 M0 D+ c
0040C806 |.^ E9 4EFEFFFF jmp 0040C659
8 Q) Q3 \8 x( }6 M" A7 B0 L" o0040C80B |> 80F9 7C cmp cl, 7C C2 N! F* H! r/ M7 } {' D' z
0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD4 H' V! ?$ S# I4 [
0040C814 |. C602 20 mov byte ptr [edx], 20
) D- E2 `2 s! ]1 j0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD
9 Z1 T! q) m( e) O6 r& e6 r! D5 r- a5 i6 H! f* U( y4 N$ @
在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
/ W( x9 ]" u- F0 g; `" q估计要汉化就要在上面的代码段下功夫了,以后继续研究。
~# c6 d7 X! `9 j9 ]. [3 h* O6 k7 d$ z* r
找到2个俄文的补丁,也许对以后研究有用。, b1 o- I2 z9 g$ q/ u. L
http://www.megaupload.com/?d=EZH6X672
* y( F. {! x h' ahttp://rapidshare.com/files/94227080/ScratchesDC.7z |