看了一下惊恐鬼屋Scratches这个游戏。
- _" Z& \7 S2 B1 p, B" ~4 K包文件有2个,scratches.res和scream.res,
; L3 T* b: H- |* e( D U; d% R包文件的格式如下,可以用Game Extractor来解开。# R i6 v: E$ |% k, _: }6 g" ~
http://wiki.xentax.com/index.php/Scratches_RES' t8 t7 ?5 W. e1 m5 Z, D
从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。
( B$ u @2 F) \$ _$ u9 Kscream.res里面也有一个字体文件,但是游戏好像没有用到。
' }0 w; }8 q6 i
( o3 c+ L2 d3 B8 y: |用OD调试后,发现这是一个使用opengl API的游戏。
0 t% L2 r$ a3 N5 z! i/ T& q, o4 ^在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。1 d# e2 k' [$ C# n
7 n0 a1 p5 x" n" M. A
0040C5D0 /$ 53 push ebx
+ A( f' H6 g: E0 r0040C5D1 |. 51 push ecx
4 P D: ? z) P; W% c* @3 t0040C5D2 |. 52 push edx
0 ?% F3 Y( t% ^6 f0040C5D3 |. 56 push esi% e! Y; d6 s$ F
0040C5D4 |. 57 push edi
1 }1 I9 A& ~2 u0040C5D5 |. 55 push ebp
9 p8 M: S0 l; x% o, {0040C5D6 |. 81EC 10010000 sub esp, 110, O2 F; C0 r' U+ K& r
0040C5DC |. 89C6 mov esi, eax
- {; y9 r7 P% a9 D6 Y0040C5DE |. 89C7 mov edi, eax
7 _5 r( Y. T1 f( [$ a: F0040C5E0 |. 29C9 sub ecx, ecx
3 w2 x! s* f9 m6 y( X# E0040C5E2 |. 49 dec ecx
$ @8 E, j0 }) N* V) y% z* \0040C5E3 |. 31C0 xor eax, eax
' f- h; w2 X( H9 f: U0040C5E5 |. F2:AE repne scas byte ptr es:[edi]' R" K4 i7 T6 h6 |, N8 A
0040C5E7 |. F7D1 not ecx3 @' U, `6 _8 v* n
0040C5E9 |. 49 dec ecx
\3 m+ s! r7 g' |$ D6 ?, O1 S0040C5EA |. 31DB xor ebx, ebx
: h8 S, {5 K# H1 U+ q0040C5EC |. 31ED xor ebp, ebp/ E' {$ Q6 U; j3 V* D+ T S/ G
0040C5EE |. 81F9 00010000 cmp ecx, 100
9 W% N) S3 V: U+ J0040C5F4 |. 72 0D jb short 0040C603* _, A" s! E% P% f% N" O3 D1 X' L
0040C5F6 |. 81C4 10010000 add esp, 110
% i- ?7 v5 J& l7 u: n/ O! l0040C5FC |. 5D pop ebp
# b: s3 L9 R' k' @8 S j0040C5FD |. 5F pop edi& R- A4 p3 F, m4 S; L
0040C5FE |. 5E pop esi5 O: U3 Z/ W8 H3 s. Y/ T
0040C5FF |. 5A pop edx
8 ]7 b# O) v( m/ h8 g" B6 ?+ I0040C600 |. 59 pop ecx8 K1 T# p) G% F3 ^$ [ W9 l
0040C601 |. 5B pop ebx# M0 v4 S1 y& S& F: u1 c; u& m
0040C602 |. C3 retn$ {% D) i) o0 L0 p e
0040C603 |> 89E7 mov edi, esp A3 ]7 L9 z: q
0040C605 |. 57 push edi2 k" k9 [8 s- [, q
0040C606 |> 8A06 /mov al, byte ptr [esi]
/ @* D/ D: e3 t$ E: H# Z0040C608 |. 8807 |mov byte ptr [edi], al
3 v; I2 R0 Y3 n0040C60A |. 3C 00 |cmp al, 0
. P& d3 W" @" U9 N2 X/ I0040C60C |. 74 10 |je short 0040C61E
' `- L6 _8 {& u& {! {' E0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]
7 y$ k. A6 F, V: p% m0040C611 |. 83C6 02 |add esi, 2
( l6 W5 c% K0 Y: F: b! \6 D. n: A0040C614 |. 8847 01 |mov byte ptr [edi+1], al6 u. Z' I7 j t- O- r& \
0040C617 |. 83C7 02 |add edi, 2; [" k( r6 j6 Q7 e0 Q/ t. l# o
0040C61A |. 3C 00 |cmp al, 0
# K: i A1 U7 n' [5 c) f& U0040C61C |.^ 75 E8 \jnz short 0040C606
- y) F2 A$ y4 `) N0040C61E |> 5F pop edi
# B! L! l x; s. K2 j0 t; [6 c) E/ F0040C61F |. 8A1424 mov dl, byte ptr [esp]
- M( O. |' V# V! I' u5 {* A0040C622 |. 89E0 mov eax, esp
, `6 W! K2 H$ Z6 M0040C624 |. 84D2 test dl, dl: U6 J0 L5 O) ?: m
0040C626 |. 74 09 je short 0040C631 b' I) ]- v L1 x% Q2 N: D
0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]! @( S. \/ @6 h" L
0040C62B |. 40 |inc eax' }( ?' N4 d/ r! k/ ~9 |/ @
0040C62C |. 45 |inc ebp
9 I) K5 G7 _4 R1 c0040C62D |. 84F6 |test dh, dh: p( r" }4 M1 j- e# x5 K6 r4 N) _
0040C62F |.^ 75 F7 \jnz short 0040C628
( b0 i& T$ s& e. D+ k) o0040C631 |> 81FD D2000000 cmp ebp, 0D2
# E5 R' k- I3 y5 X F) r7 D, t2 N0040C637 |. 0F8E 61010000 jle 0040C79E9 B P0 J8 D3 u! u( @- `" [& L
0040C63D |. 89EA mov edx, ebp5 w* X/ B2 s: s7 z9 R6 i# |, O/ a
0040C63F |. 89E8 mov eax, ebp# {' ?9 C3 _' ?. {$ h
0040C641 |. C1FA 1F sar edx, 1F6 F( H% N: O4 K0 U- q
0040C644 |. C1E2 02 shl edx, 2) J6 H- @, I( G
0040C647 |. 1BC2 sbb eax, edx: ] N) V; x7 D
0040C649 |. C1F8 02 sar eax, 28 ^' W# I. q" h% \4 z
0040C64C |. 89C7 mov edi, eax" c1 `; P# E" T$ {4 T% q2 Q9 m- R
0040C64E |. C78424 040100>mov dword ptr [esp+104], 3
' P# G, Y/ C# d0040C659 |> 89E0 mov eax, esp
. n* E( F: a# A+ u0040C65B |. 31D2 xor edx, edx4 L2 C, D/ Z1 |! N7 M
0040C65D |. 8A0C24 mov cl, byte ptr [esp]
- L! I# W" u5 E$ x0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx' n8 k4 R% M) K$ K, u! B
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx
! F! O) C- K0 F3 A+ P0040C66C |. 899424 080100>mov dword ptr [esp+108], edx
2 r$ u: v9 h) x$ I3 J0040C673 |. 89E2 mov edx, esp
" F) k y5 R. ^& P) H0 M2 X0040C675 |. 84C9 test cl, cl
$ {( ^8 v- f" i* i+ _0040C677 |. 0F84 89000000 je 0040C7064 O6 X s, e7 o, m) O5 v
0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]8 O% n* ~! q; b6 p) {% b( f/ T, [( Y
0040C684 |. 4F dec edi
7 T9 z' s* R% s% V) j) v0040C685 |. C1E1 02 shl ecx, 2
' m! u3 I( g _0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi
8 R* W# |' W8 R# |0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx: E4 p# W* r/ o& V3 ^8 B* i( c
0040C696 |> 8A0A mov cl, byte ptr [edx]
; p; a+ A0 w; j% O# f, t3 R0040C698 |. 80F9 20 cmp cl, 20
' E9 J- |& `" V0040C69B |. 0F85 6A010000 jnz 0040C80B1 @" e- H$ H( m6 R5 Z
0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]: ?# R9 k' f! }* }3 u. b; y7 H
0040C6A8 |. 7C 53 jl short 0040C6FD& N4 V2 h7 V! I
0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
- @1 [& a; f0 P* W0040C6B1 |. C602 00 mov byte ptr [edx], 0* w6 z1 P b8 K# g0 Q' E; J
0040C6B4 |. 89C6 mov esi, eax
6 t4 V: O7 d. P) w8 ~0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]/ o/ t" V, D0 L8 U, E! C
0040C6BC |. 31DB xor ebx, ebx* L; X5 |3 q1 V. Z# \3 {. R
0040C6BE |. 57 push edi
$ M2 c2 e n }; |0040C6BF |> 8A06 /mov al, byte ptr [esi]
! }" x4 F) w. ]0040C6C1 |. 8807 |mov byte ptr [edi], al( \* A+ `- \* I: C' e3 N3 l9 @- G
0040C6C3 |. 3C 00 |cmp al, 0
9 i4 N5 z- G9 v0040C6C5 |. 74 10 |je short 0040C6D73 R0 K% ]" Q7 c
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]
* g$ m* u4 F; T+ z- ~, a, V& v0040C6CA |. 83C6 02 |add esi, 2
! R7 K. T- ^! Y3 T* `. t0040C6CD |. 8847 01 |mov byte ptr [edi+1], al7 J) U; l! B( G! w
0040C6D0 |. 83C7 02 |add edi, 2
' }( ]( F& l, W' I: C8 w3 |0040C6D3 |. 3C 00 |cmp al, 0
1 ]9 y( q+ s# X" q t0040C6D5 |.^ 75 E8 \jnz short 0040C6BF: b$ J$ _5 L' f: Q! ]: X
0040C6D7 |> 5F pop edi
9 E5 `/ a1 y7 q. b0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
7 p. c9 u, |4 F4 a( u( w! L( y$ Y0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]$ F+ m" q2 D# F+ l7 Z; q
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]' w2 e# ]$ w2 C( w, y2 G$ g" R H
0040C6E9 |. 83EF 04 sub edi, 4
- S# x/ r* _3 v0040C6EC |. 42 inc edx
/ J5 S" t8 Q* ?5 X8 u' Z9 v7 b0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi
. Y( S0 v6 E" }- q" n$ X6 G u0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx
& x: `+ C! c# X% x0040C6FB |. 89C2 mov edx, eax' J' F9 o6 x" G$ O8 V, u+ K
0040C6FD |> 43 inc ebx" v4 z7 A9 Y4 k1 l
0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]
4 n( G0 u4 Y4 F. c! F% z: n- k0040C701 |. 42 inc edx4 j8 f! A: q. u: ]& x0 [4 H
0040C702 |. 84ED test ch, ch
[2 ]7 Q1 i# Z5 g$ L* S" c" ~- ?0040C704 |.^ 75 90 jnz short 0040C696
4 ^9 X3 E0 B O0040C706 |> 83FD 10 cmp ebp, 10
b! F" l# v; l' n3 Q0040C709 |. 7F 05 jg short 0040C710$ s: T7 V y" H: J
0040C70B |. BD 20000000 mov ebp, 20; O" p% e# Z; S7 U, _. m& q3 Z
0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]- H* g2 A- A: ]. n# `- \8 C( ~
0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]+ L4 b' \* X* n: t" w$ y/ l5 y ^
0040C71E |. 85D2 test edx, edx
4 P8 E2 \' k# v3 L0040C720 |. 7C 23 jl short 0040C745. Z) C! W1 L3 s: J8 c- a
0040C722 |. 89C6 mov esi, eax
$ b5 ~+ S" n2 G2 {" S0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]8 X9 v$ S" K1 ?) ~! W* W, `
0040C72B |. 57 push edi
) \! W* R1 V3 U4 D5 {! l+ ^! w0040C72C |> 8A06 /mov al, byte ptr [esi]
7 J& F( l) ^( [; Q; T8 k7 X' ~0040C72E |. 8807 |mov byte ptr [edi], al0 F' ]9 z" N' C7 A3 C( o
0040C730 |. 3C 00 |cmp al, 0
$ m, [% r3 r8 c+ B* c0040C732 |. 74 10 |je short 0040C744 V; V$ ]8 @% w; ^( D% i
0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]
& r" d5 M( q( J P0040C737 |. 83C6 02 |add esi, 2% V+ R' j3 l# ]) K& i
0040C73A |. 8847 01 |mov byte ptr [edi+1], al2 a) Y3 q+ i7 l7 I: y
0040C73D |. 83C7 02 |add edi, 2; t/ e- I8 w) N. Q1 g9 y$ i
0040C740 |. 3C 00 |cmp al, 0- l5 V$ D/ Z. e) O
0040C742 |.^ 75 E8 \jnz short 0040C72C
- ^- N7 |/ x1 C; J' C7 o$ r9 ]0040C744 |> 5F pop edi
. m. \; f6 X6 q" f1 C% z @+ q0040C745 |> E8 E6500100 call 00421830- V% D8 m3 a% q' v8 z) z7 Y0 e4 n
0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax6 X: q2 J/ D+ D* |% T; c0 |
0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]
+ b2 b1 `, o' t3 T9 p; U& O. x0040C756 |. 40 inc eax
! D) u5 h& x1 o# V _5 A3 W' M0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax1 L: }+ N" G- T, e
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1
/ H1 r* g& ?! |7 J7 i" t0040C766 |. B8 64000000 mov eax, 64
6 [' f. x8 p Q: ]2 ?5 j0040C76B |. 89C2 mov edx, eax! {4 q+ R- i" ^, R/ m! W" x5 r8 c
0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]7 Z. x4 u# P. b6 F7 G( E: Q& e
0040C773 |. C1FA 1F sar edx, 1F/ x$ z9 o6 s V3 l6 O+ }
0040C776 |. F7F9 idiv ecx9 x5 N* ]& l5 P; S' x4 ?" K
0040C778 |. 89C3 mov ebx, eax
5 @" G3 P2 L! t Q2 u0040C77A |. 89EA mov edx, ebp
% U o" |( ]- Y' G3 t7 f8 {6 N0040C77C |. 89E8 mov eax, ebp+ a% P4 n E% J! `) q# O
0040C77E |. C1FA 1F sar edx, 1F: {7 j$ V7 r/ ]; D& c2 {0 @
0040C781 |. C1E2 04 shl edx, 4
( {/ X: S b1 F% {" Y0040C784 |. 1BC2 sbb eax, edx
# W) H$ I. k- ^2 w0040C786 |. C1F8 04 sar eax, 4
7 V- _4 ?! h2 g7 L8 K0040C789 |. 01C3 add ebx, eax
5 |& I. M& y4 W& r: R2 q0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx# _) D# k: k( t/ b2 Z4 h: d
0040C791 |. 81C4 10010000 add esp, 110, p n' X7 }& Y1 X) b4 L$ H7 D7 J- K
0040C797 |. 5D pop ebp6 M! ?0 V0 u* M6 ?6 p# o
0040C798 |. 5F pop edi( ^: V' h# M% D: {- X
0040C799 |. 5E pop esi9 S1 f( r& j) @: v$ X
0040C79A |. 5A pop edx u$ N0 x& `9 Y# L2 y' U
0040C79B |. 59 pop ecx
5 U4 @/ p- G% F! u \! A' c0040C79C |. 5B pop ebx9 w8 |$ p( Y8 J5 K: w
0040C79D |. C3 retn
) p* O b7 g( d0040C79E |> 81FD 8C000000 cmp ebp, 8C% {; Z: e6 V3 v* s9 f0 Z8 ~$ A
0040C7A4 |. 7C 28 jl short 0040C7CE
; N( @! l4 R' I" O# H' Y+ b2 y0040C7A6 |. 81FD D2000000 cmp ebp, 0D2
- ^1 g# ?8 i z4 y% d7 \; Q) ?0040C7AC |. 7F 20 jg short 0040C7CE
" ^! y( {9 B; t" b0040C7AE |. B9 03000000 mov ecx, 39 ]" b+ V7 y3 e
0040C7B3 |. 89EA mov edx, ebp
- e2 W' m E) ~. x8 v5 L0040C7B5 |. 89E8 mov eax, ebp
& }, d2 Q# g2 O. t0040C7B7 |. C1FA 1F sar edx, 1F
5 D3 s5 `! v- |# S# ^; W1 K9 x; S0040C7BA |. F7F9 idiv ecx$ c9 x3 a, [3 U
0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2
( `* F! g' m3 v# u2 a0040C7C7 |. 89C7 mov edi, eax
) |9 u/ s7 F5 n4 W0 h* h: W2 S6 {0040C7C9 |.^ E9 8BFEFFFF jmp 0040C6596 X+ U) L8 L& }4 X! Z9 Q* e
0040C7CE |> 83FD 46 cmp ebp, 468 A7 o" U4 G1 R" V8 E
0040C7D1 |. 7C 25 jl short 0040C7F83 i+ N: f. x% g( D9 T
0040C7D3 |. 81FD 8C000000 cmp ebp, 8C% N( H O5 \2 v: q/ }/ t
0040C7D9 |. 7F 1D jg short 0040C7F8
( Y6 n( t) t( u) d% k) m( F0040C7DB |. 89EA mov edx, ebp+ S6 s1 O! Y/ k
0040C7DD |. 89E8 mov eax, ebp
4 i' N; W- X* i+ a0040C7DF |. C1FA 1F sar edx, 1F
$ p1 M9 k2 j* T/ n* F4 m1 D; O3 [4 l0040C7E2 |. 2BC2 sub eax, edx+ q( |: {3 X' i: E% F' Y" o
0040C7E4 |. D1F8 sar eax, 1
, R6 K& k# P& L0 q8 U `0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1
+ b' D! F' s' r. P, u0040C7F1 |. 89C7 mov edi, eax
8 L- p& c. [# Z' |# q0040C7F3 |.^ E9 61FEFFFF jmp 0040C659
; ^ R1 i8 w$ O/ A8 w) w! f0040C7F8 |> 31D2 xor edx, edx: _1 M$ R8 j% H# J4 K& a) A; }
0040C7FA |. BF 46000000 mov edi, 46. r% e6 j6 }1 U' Z8 S8 @0 |- o+ c
0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx
. @ V! p5 \& {0040C806 |.^ E9 4EFEFFFF jmp 0040C659& }( v! {3 u6 W8 J8 |$ C0 F
0040C80B |> 80F9 7C cmp cl, 7C `/ S" m7 @8 {( l
0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD) Z; n4 x7 M3 s. \9 @* P6 ^9 W9 [
0040C814 |. C602 20 mov byte ptr [edx], 20
f# q5 ~; ?( z5 P) r6 {) _( u, H0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD& O4 p- o/ \% l/ j' p) Z/ x, x
, @% X) w- g8 n/ D' o
在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
( z# ~# T8 Z6 E% ?0 ^2 r; @估计要汉化就要在上面的代码段下功夫了,以后继续研究。
. F2 I" ?# m+ q2 h) G9 D) }# e. }7 @& _: L0 k- Z
找到2个俄文的补丁,也许对以后研究有用。0 K* n6 ^, R9 U# O
http://www.megaupload.com/?d=EZH6X672# h6 D1 m) K: {' |$ m* k `
http://rapidshare.com/files/94227080/ScratchesDC.7z |