看了一下惊恐鬼屋Scratches这个游戏。
% T7 y5 i* Q7 c" g1 i" d包文件有2个,scratches.res和scream.res,, F# k' m2 h* }* h5 u
包文件的格式如下,可以用Game Extractor来解开。
/ [1 a) c, `# z( R; lhttp://wiki.xentax.com/index.php/Scratches_RES
8 a, J' |, Q S- ~+ I从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。3 r. x, P" b8 y
scream.res里面也有一个字体文件,但是游戏好像没有用到。
+ R! ~ C! m# Q' Q& h
- }5 N/ \! H9 R8 r用OD调试后,发现这是一个使用opengl API的游戏。
. u! V7 m. N4 s2 x: l# |在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。- i; z% l+ ^) |
\% F: d+ Y) d4 k$ V' V S0040C5D0 /$ 53 push ebx
4 G% i3 Y& \0 b' k8 R* S; p3 J5 N0040C5D1 |. 51 push ecx, E. V1 ]: F: p" P' }0 n; m
0040C5D2 |. 52 push edx
, [9 Q* y" E% E& W0040C5D3 |. 56 push esi6 f- d% P( u2 `+ j
0040C5D4 |. 57 push edi
/ l8 p; u& q6 ^9 X8 l* c* r0040C5D5 |. 55 push ebp
' Q( [8 @! I) w0 b0040C5D6 |. 81EC 10010000 sub esp, 1109 ?4 t4 @6 e4 f( ]( W* j
0040C5DC |. 89C6 mov esi, eax
$ H4 L7 z5 w' v, G# d6 _* A2 ]0040C5DE |. 89C7 mov edi, eax9 z! {3 E2 z) `
0040C5E0 |. 29C9 sub ecx, ecx" m0 }# O( _# E3 U+ h! E6 d' E
0040C5E2 |. 49 dec ecx2 i% z5 A, {% t+ b$ s7 D
0040C5E3 |. 31C0 xor eax, eax
. T6 `, K: X4 ]0 ?6 e0040C5E5 |. F2:AE repne scas byte ptr es:[edi]# ?5 ?$ _/ T& Z- N7 f2 `1 \# o. U3 u
0040C5E7 |. F7D1 not ecx
' N% A, P2 V+ m/ U/ e0040C5E9 |. 49 dec ecx8 m; @& i; W0 e' d# }5 p+ x+ F3 J" Q
0040C5EA |. 31DB xor ebx, ebx' t: |* T }0 @4 L- I$ D1 f
0040C5EC |. 31ED xor ebp, ebp+ \- T1 }' M% v" Y S/ p& j
0040C5EE |. 81F9 00010000 cmp ecx, 100
4 S+ N9 Y& G, v1 ]5 s& W0040C5F4 |. 72 0D jb short 0040C603
0 {! f0 `' I+ n" J$ T- L0040C5F6 |. 81C4 10010000 add esp, 110
5 C8 x. C7 U" {0040C5FC |. 5D pop ebp$ @$ \ t. N3 ?( E( `; c2 v7 X
0040C5FD |. 5F pop edi$ T8 |4 f- X3 P5 r# D; G
0040C5FE |. 5E pop esi
" ?5 M* V% \4 `( Q1 s# C8 g' H0040C5FF |. 5A pop edx" b* N7 z& i& G* C" H
0040C600 |. 59 pop ecx
% f$ X* N8 J2 c8 p9 L6 Y( b0040C601 |. 5B pop ebx& S4 s5 ?# {/ C6 y0 N9 i/ T
0040C602 |. C3 retn
/ S8 D2 v/ Q8 C7 T4 d0040C603 |> 89E7 mov edi, esp
( _2 F4 M( P: \8 ~0040C605 |. 57 push edi9 q9 S$ z( V- b. D
0040C606 |> 8A06 /mov al, byte ptr [esi]! `6 Z, r5 {0 y7 g! _) i
0040C608 |. 8807 |mov byte ptr [edi], al7 c( t. Q G0 m9 g1 t
0040C60A |. 3C 00 |cmp al, 0( l Z# b: s6 ]: w
0040C60C |. 74 10 |je short 0040C61E! S& b7 M* J: g* h. Q- Z
0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]2 G) }2 w' T, u6 E9 A, X# o6 S
0040C611 |. 83C6 02 |add esi, 2, S: ~ r. K1 L/ O" }* V
0040C614 |. 8847 01 |mov byte ptr [edi+1], al
; A( v v# ^4 }9 w: d7 P0040C617 |. 83C7 02 |add edi, 2
V3 g6 f& ]+ B6 E& r0040C61A |. 3C 00 |cmp al, 0
1 v; D: M9 H) B* _0040C61C |.^ 75 E8 \jnz short 0040C606- z& s6 }. O: Z" L P
0040C61E |> 5F pop edi
# d( F4 y; l5 h/ d e* O0040C61F |. 8A1424 mov dl, byte ptr [esp]; W' S8 W! @9 b2 A, |
0040C622 |. 89E0 mov eax, esp! K5 ~6 r$ u7 J% T6 g
0040C624 |. 84D2 test dl, dl
3 ~0 ]# c1 @* u Z0040C626 |. 74 09 je short 0040C631$ t) U% w! i \) u4 k8 j
0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]
4 i( X2 t( b) C- h/ Y/ y0040C62B |. 40 |inc eax
) o' l9 c1 Z: o# S( X0040C62C |. 45 |inc ebp# w" b3 W1 z. T2 Z! a
0040C62D |. 84F6 |test dh, dh2 M# V2 N( y4 x/ x
0040C62F |.^ 75 F7 \jnz short 0040C628; T; B5 ?5 k- N j
0040C631 |> 81FD D2000000 cmp ebp, 0D29 I9 K" X r# ^7 k
0040C637 |. 0F8E 61010000 jle 0040C79E% a! H" U. h7 r/ D
0040C63D |. 89EA mov edx, ebp
( U0 W! X% N- f, f* w- E% {3 o0040C63F |. 89E8 mov eax, ebp
1 K2 ^2 F6 a: C4 B& F- S9 W+ ?( m0 P0040C641 |. C1FA 1F sar edx, 1F) A- V& \5 g, J
0040C644 |. C1E2 02 shl edx, 22 ^( b' L5 Z2 I( o" U% p+ H; ~
0040C647 |. 1BC2 sbb eax, edx
# k4 V- v3 F' \7 w% Y( ]* t5 T0040C649 |. C1F8 02 sar eax, 2
2 O3 p& {" }1 E" p" X2 F9 [0040C64C |. 89C7 mov edi, eax2 D. v8 |) ^& v: T/ J- {
0040C64E |. C78424 040100>mov dword ptr [esp+104], 3
' m* `" q" p* i% x, |3 _0040C659 |> 89E0 mov eax, esp
: [/ p# C$ _6 u. @8 x$ m0040C65B |. 31D2 xor edx, edx
3 ?. e( R/ J$ R+ F; S3 }- {0040C65D |. 8A0C24 mov cl, byte ptr [esp]
/ @7 y- A5 l4 E7 O3 \; ?$ x) I& D0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx
& v$ b' j5 X& v0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx
# K. B" e0 I( j x+ I1 x0040C66C |. 899424 080100>mov dword ptr [esp+108], edx
( X# V5 x" c0 }" w0040C673 |. 89E2 mov edx, esp
% `2 `$ M) i6 I7 l! } y0 h0040C675 |. 84C9 test cl, cl
9 i* C, D3 f( n( _' R5 k- l0040C677 |. 0F84 89000000 je 0040C706
' i# ?1 q/ ]; Y8 k; C* P6 o* J' P. h0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]
3 A. V8 ]! |/ i* {" C$ j0040C684 |. 4F dec edi
8 u/ @$ ~4 U' Z) ?8 `. V+ O' h0040C685 |. C1E1 02 shl ecx, 2 }$ \, D3 c$ e4 w. m
0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi& V7 W4 R; E' o
0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx2 `8 v# X; I6 V; G9 e
0040C696 |> 8A0A mov cl, byte ptr [edx]
4 w% u+ n4 i* P# R0040C698 |. 80F9 20 cmp cl, 20
! F; }5 ?7 [6 P- ^4 ?6 s1 w G0040C69B |. 0F85 6A010000 jnz 0040C80B- C( `( N+ ^2 @' L- _0 s% ~2 t
0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]. Y1 w! l' @6 r2 l. ]0 N; z
0040C6A8 |. 7C 53 jl short 0040C6FD; E2 X, C6 |$ ]. c' N. n
0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]# e7 p9 u; H5 s- n) Y- P
0040C6B1 |. C602 00 mov byte ptr [edx], 0
$ \7 p$ i2 a& e2 e0040C6B4 |. 89C6 mov esi, eax9 e/ j- G& k, L" m2 R% G* @/ }
0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]) F- |$ e' q ~, R" [! T' `
0040C6BC |. 31DB xor ebx, ebx
$ I( F) }, `' F' \' _6 O7 |1 y0040C6BE |. 57 push edi" B" H/ N7 o; K2 E
0040C6BF |> 8A06 /mov al, byte ptr [esi], S5 ~5 P. ^$ |, K" W$ N+ u
0040C6C1 |. 8807 |mov byte ptr [edi], al; l* R) B0 M$ J0 x. R W4 h) b
0040C6C3 |. 3C 00 |cmp al, 07 C+ Y, O. o4 y+ C0 i+ e4 x
0040C6C5 |. 74 10 |je short 0040C6D7 e# a J" Y/ c
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]
1 T. _7 R4 e8 Q0 [$ @! J7 h0040C6CA |. 83C6 02 |add esi, 2! S3 A+ Y- n, L z g1 a9 c# S
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al) u$ A. k7 d( N" v; g) }, I$ K* q
0040C6D0 |. 83C7 02 |add edi, 2 H8 t, ~) g5 T
0040C6D3 |. 3C 00 |cmp al, 0
; a! P: Q4 P- |' A0040C6D5 |.^ 75 E8 \jnz short 0040C6BF
9 S, c2 b0 z3 ]* K: N) z0040C6D7 |> 5F pop edi _) \( g" b% p: G$ M
0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
; K O. a- J% l3 Q0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]9 m4 G1 G' A) v2 ~, e
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]- U$ B( Z1 l/ W% C* E( |
0040C6E9 |. 83EF 04 sub edi, 46 u5 f! U4 B5 l, x# a& K
0040C6EC |. 42 inc edx! Z2 j2 F& _3 S- c6 k
0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi6 z0 C6 }3 r5 d; ^; Y9 w7 ^
0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx# F' n7 I" _- U2 a+ h7 I/ y' o
0040C6FB |. 89C2 mov edx, eax
5 u4 |/ g. q, r4 X% s0040C6FD |> 43 inc ebx% t8 a: \3 T ^7 C
0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]
( Z6 w1 A- h$ _4 D j) ]) r& t0040C701 |. 42 inc edx
9 D2 [) j6 A5 u; p/ ~! B" J8 V0040C702 |. 84ED test ch, ch, n: x' A5 V& @$ {: g6 n, a
0040C704 |.^ 75 90 jnz short 0040C696
5 ^8 t; V; M2 t* B, r- b0040C706 |> 83FD 10 cmp ebp, 10) ~) g. U. f- a9 `* q- Y. t
0040C709 |. 7F 05 jg short 0040C710
% R2 \5 d6 L7 Q/ E5 F8 M0040C70B |. BD 20000000 mov ebp, 20
4 f5 V8 w7 O8 l+ l2 P% ]0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]
1 y# ]6 u/ H8 X4 S3 K |0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]/ N: i( K7 |6 L& u( ~' e
0040C71E |. 85D2 test edx, edx
& |1 `! v+ P8 [0040C720 |. 7C 23 jl short 0040C745
1 Q6 k% k; I4 _1 H2 _0040C722 |. 89C6 mov esi, eax
3 s; D$ Z0 M! Q& a3 R0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]
, ~7 I4 a5 F- n0040C72B |. 57 push edi3 @. Q6 u8 g# h+ M" W8 d8 C
0040C72C |> 8A06 /mov al, byte ptr [esi]
; \4 W; _0 |" W4 q0040C72E |. 8807 |mov byte ptr [edi], al
5 S" @7 p O, C/ E6 c0040C730 |. 3C 00 |cmp al, 0
. M8 G" x" M" k; H/ g0040C732 |. 74 10 |je short 0040C744
- T/ w9 u8 Y3 B0 E# y; A0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]+ U4 ~3 ?. y9 ?, G9 T
0040C737 |. 83C6 02 |add esi, 2/ p$ w$ B/ _" g6 S
0040C73A |. 8847 01 |mov byte ptr [edi+1], al
; x' `4 x% d7 a5 P+ M0040C73D |. 83C7 02 |add edi, 25 E" x: ~' M; ?4 |% A1 G$ \; H, K1 S
0040C740 |. 3C 00 |cmp al, 0
0 X3 R+ n i" \: U+ a0040C742 |.^ 75 E8 \jnz short 0040C72C9 c \( | W2 g( {- C
0040C744 |> 5F pop edi
3 @) s; O! Q8 c6 i$ V0040C745 |> E8 E6500100 call 00421830
" }5 `* Z1 _0 @1 c; r) B0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax! E$ N$ W+ O, B6 K$ {
0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]' ?$ s, _4 F# o% N1 U) a' V( I2 |7 ^4 H
0040C756 |. 40 inc eax
$ R1 I4 _4 ~* J( O0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax$ y2 c& Z; P2 ?$ L8 p6 ~; X
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1, p& `2 g1 \+ q1 u, i6 L$ R
0040C766 |. B8 64000000 mov eax, 64
* Y. W4 u, N8 J2 A. D5 P0040C76B |. 89C2 mov edx, eax: d3 W8 v- C+ L7 q
0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]
s& W- W3 x+ Q& J5 v1 N0040C773 |. C1FA 1F sar edx, 1F X. x- J7 i( _4 r# L& z0 @ t y$ a
0040C776 |. F7F9 idiv ecx
: H- O3 g; e; I5 p h2 u7 F0040C778 |. 89C3 mov ebx, eax7 b8 z# r- M6 I* N" _6 K3 `
0040C77A |. 89EA mov edx, ebp
; d4 q3 ^ a# r7 u) z, v. F9 f0 c. p( M0040C77C |. 89E8 mov eax, ebp% t7 e5 w* l+ @
0040C77E |. C1FA 1F sar edx, 1F6 C- a# K( F4 j
0040C781 |. C1E2 04 shl edx, 4
+ ] H) j3 i! ^1 S$ y0040C784 |. 1BC2 sbb eax, edx% _7 T0 V O/ Q/ V1 h
0040C786 |. C1F8 04 sar eax, 4
' T) i1 C* J/ O# C0040C789 |. 01C3 add ebx, eax6 P6 b- H+ ^- f% y' c
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx
; z$ {3 S% _$ {6 P( t' B0040C791 |. 81C4 10010000 add esp, 1100 @; d' p* X2 i+ _
0040C797 |. 5D pop ebp$ Z% ? H; ?1 O* {5 M. A
0040C798 |. 5F pop edi' m7 b6 G/ [1 N: I4 r
0040C799 |. 5E pop esi
3 u7 u' ^3 ^& |& \( |0040C79A |. 5A pop edx
* X) s9 h1 V! c' i! x' W O% }0040C79B |. 59 pop ecx$ X" j5 D$ S4 m+ q
0040C79C |. 5B pop ebx' L# i, H- N+ G; w+ x6 P. u$ J) J( {
0040C79D |. C3 retn3 ^$ W9 A& e% L) m f' o
0040C79E |> 81FD 8C000000 cmp ebp, 8C0 b0 c2 X! e1 Z3 B( ]
0040C7A4 |. 7C 28 jl short 0040C7CE
9 ], U# W7 g% ^; l0 r0040C7A6 |. 81FD D2000000 cmp ebp, 0D27 H7 L* x4 f4 f+ s! b! r
0040C7AC |. 7F 20 jg short 0040C7CE0 P! U, h& Y0 T" o
0040C7AE |. B9 03000000 mov ecx, 3 X1 Q! ]) }# j8 }! B. y; C0 S
0040C7B3 |. 89EA mov edx, ebp
" X+ a" V2 |9 {0 K) h0040C7B5 |. 89E8 mov eax, ebp0 v4 C8 _6 i5 k* P# e& e
0040C7B7 |. C1FA 1F sar edx, 1F, A8 j/ ^" X H
0040C7BA |. F7F9 idiv ecx5 g1 y; ^: Q4 z5 ^. n
0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2
2 [( [# ]% x" o2 D( ]0040C7C7 |. 89C7 mov edi, eax
5 a- L; ]$ i2 S& A7 M. u0 Y3 M/ t0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659% I3 |, Z4 J& X
0040C7CE |> 83FD 46 cmp ebp, 463 n' ?- m5 o9 M( q9 V* @9 X6 _
0040C7D1 |. 7C 25 jl short 0040C7F8
9 N/ j+ |2 }$ a0 m0040C7D3 |. 81FD 8C000000 cmp ebp, 8C% c+ P, E9 {* Q% ^2 H+ T2 X* l
0040C7D9 |. 7F 1D jg short 0040C7F82 M6 e* ^8 H0 ~ w9 A5 \
0040C7DB |. 89EA mov edx, ebp4 k5 ^, O) X: V9 w2 o- H) a
0040C7DD |. 89E8 mov eax, ebp
3 f8 \) d* d; M0040C7DF |. C1FA 1F sar edx, 1F
& b, z( {+ R Z3 u) v0040C7E2 |. 2BC2 sub eax, edx. Q, a M5 ~$ U- i% E6 Z0 @5 x
0040C7E4 |. D1F8 sar eax, 1" y1 \9 T5 H* u% w8 h( {! R3 O
0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1
7 t7 N- v+ d4 v9 C0040C7F1 |. 89C7 mov edi, eax* x/ Q# T4 b, ]( ~
0040C7F3 |.^ E9 61FEFFFF jmp 0040C659
& q( o! q5 X0 U3 d2 A% r0040C7F8 |> 31D2 xor edx, edx
2 b: n/ Y% v' q) Q9 a0040C7FA |. BF 46000000 mov edi, 46
5 p! f, E, [3 e, ~+ L# ?' ~0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx
* e) D. B8 q% T* S3 m0040C806 |.^ E9 4EFEFFFF jmp 0040C659
1 C: @+ P ^8 P' q! C0040C80B |> 80F9 7C cmp cl, 7C
3 L9 r; r4 R& h4 a: m7 D: E& Q0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD8 R; k4 }( i! y* f8 g
0040C814 |. C602 20 mov byte ptr [edx], 20
1 y6 f- ~6 `) e* g f) O0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD
$ D7 A, F5 C) @( I) ~
9 x6 J" p' _; {2 o在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。- S m( `$ c: p% O+ |
估计要汉化就要在上面的代码段下功夫了,以后继续研究。! q) X b" m! m7 [9 S
# W) Z- Q: O4 c) \" E) S$ C找到2个俄文的补丁,也许对以后研究有用。0 A! L) Y$ ]4 ]; ^5 f: Z
http://www.megaupload.com/?d=EZH6X6726 F9 e1 t/ t, F4 k6 u7 G
http://rapidshare.com/files/94227080/ScratchesDC.7z |