看了一下惊恐鬼屋Scratches这个游戏。$ w/ K* G" r( \9 B3 b& N
包文件有2个,scratches.res和scream.res,+ D. O( S* @8 I! h3 ?- n* e
包文件的格式如下,可以用Game Extractor来解开。
% [) C! y1 R( dhttp://wiki.xentax.com/index.php/Scratches_RES
' C( r' a5 m ?2 |9 {& Q从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。8 U( {. o8 H; Q
scream.res里面也有一个字体文件,但是游戏好像没有用到。
/ E0 c" X3 h( F( [( T# D& N* O7 ^% M8 j; k6 u, B
用OD调试后,发现这是一个使用opengl API的游戏。
$ |& I0 }! J/ n2 A在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。: r9 F9 N- V8 p+ y1 L( H
8 f/ D- X% }! h. K! X* z) Z0040C5D0 /$ 53 push ebx8 t2 |, j$ z- z3 ^8 y
0040C5D1 |. 51 push ecx! h2 O) t( W# m* R4 ]
0040C5D2 |. 52 push edx1 I4 q1 s6 g+ \' d) x
0040C5D3 |. 56 push esi
% M+ a6 o. G7 K5 s5 [' `0040C5D4 |. 57 push edi& k% u( v5 Y D1 m! Y% K6 J. A; ^
0040C5D5 |. 55 push ebp
; \2 v' P7 j/ K4 r0040C5D6 |. 81EC 10010000 sub esp, 110
, ~4 x5 W# {: y- y; R1 [) ?& r1 Q0040C5DC |. 89C6 mov esi, eax' w4 s: p! x9 s( {: \
0040C5DE |. 89C7 mov edi, eax
' t. @8 k7 ]" c$ x# }1 h0040C5E0 |. 29C9 sub ecx, ecx: n$ T" r( b; L3 H
0040C5E2 |. 49 dec ecx
9 [- |: |% l1 X8 [8 E0040C5E3 |. 31C0 xor eax, eax6 O8 N, @% ^6 Q. D3 f. N, Q
0040C5E5 |. F2:AE repne scas byte ptr es:[edi]
5 t. v* m3 X4 }* q1 Q0040C5E7 |. F7D1 not ecx: Y9 _" |7 \2 ]% l8 V5 ^0 y
0040C5E9 |. 49 dec ecx% h1 p' U# x2 I# R4 O6 S
0040C5EA |. 31DB xor ebx, ebx
8 o! [+ K2 B m- ^8 C# K% Q3 Q0040C5EC |. 31ED xor ebp, ebp
$ u* h4 }0 U8 {& V A0040C5EE |. 81F9 00010000 cmp ecx, 1005 x/ x( E: J1 q: N% {! J1 {' C
0040C5F4 |. 72 0D jb short 0040C603! M. }2 P; d: u# l5 L/ F' ?
0040C5F6 |. 81C4 10010000 add esp, 110+ `! `# D! F) _% H9 ?
0040C5FC |. 5D pop ebp
# e& ?& D5 F3 }3 `3 L- z& ~9 c2 x0040C5FD |. 5F pop edi! X4 U, y. E/ j7 i4 C( u
0040C5FE |. 5E pop esi4 h6 m+ Y- O$ {# L
0040C5FF |. 5A pop edx
, ^ {0 t) [7 u/ O0040C600 |. 59 pop ecx
' ]; B( m) T9 W2 L! s# I4 i3 g0040C601 |. 5B pop ebx
# E [. r8 X8 g7 ?+ T @0040C602 |. C3 retn0 e2 G6 v6 W% t Z
0040C603 |> 89E7 mov edi, esp
1 K0 l( ^' e6 g; y* w3 v0040C605 |. 57 push edi
! P, W% s- `4 ?# F- R0040C606 |> 8A06 /mov al, byte ptr [esi]
4 ~& S# ]+ J* Z+ y- `/ W# U0040C608 |. 8807 |mov byte ptr [edi], al3 |6 \! M' ]( h; k
0040C60A |. 3C 00 |cmp al, 0& C% m% s5 l/ [4 N! g5 r
0040C60C |. 74 10 |je short 0040C61E3 O; [0 _3 n# k, n% [1 v
0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]; v0 e- ?9 d/ ]* ^8 R. f
0040C611 |. 83C6 02 |add esi, 2
9 f, S i: V: H: ^, i: P0040C614 |. 8847 01 |mov byte ptr [edi+1], al
! P9 [- j+ M# K0040C617 |. 83C7 02 |add edi, 29 J) b) v6 x: k1 b, X
0040C61A |. 3C 00 |cmp al, 0' O5 @5 I; F& Y. ^
0040C61C |.^ 75 E8 \jnz short 0040C6060 c8 }6 H) @3 r( r) ^1 }# q- s
0040C61E |> 5F pop edi
, K2 ?; M5 l9 {) k% `- T' ?0040C61F |. 8A1424 mov dl, byte ptr [esp]; k3 @6 {) [: X
0040C622 |. 89E0 mov eax, esp
' x0 V" j8 v* j+ o4 G: B0040C624 |. 84D2 test dl, dl; g! f9 T- [5 @1 ]4 H/ x
0040C626 |. 74 09 je short 0040C631, n8 [2 q$ R- d7 j
0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]
4 t' c6 M) E- p$ Q0040C62B |. 40 |inc eax- k1 \5 a' y2 ~ x/ ^
0040C62C |. 45 |inc ebp
$ ]8 S/ d( S3 z8 `* @7 ?/ Z0040C62D |. 84F6 |test dh, dh
8 j0 R6 {0 [# u: ?0 ~+ Q q0040C62F |.^ 75 F7 \jnz short 0040C6283 M0 z& M" b% s. K
0040C631 |> 81FD D2000000 cmp ebp, 0D2+ S! _0 } c# t% Z7 D
0040C637 |. 0F8E 61010000 jle 0040C79E
& m& H1 X" E$ L! z6 p" u0040C63D |. 89EA mov edx, ebp
6 ] Z; v6 W7 K0040C63F |. 89E8 mov eax, ebp9 ]* ^% T8 h# f2 O
0040C641 |. C1FA 1F sar edx, 1F, v) v' V* g* P4 D, s
0040C644 |. C1E2 02 shl edx, 2
0 `# k1 Y; g8 o9 M* m% A0040C647 |. 1BC2 sbb eax, edx5 V6 n Y, o0 i0 B2 V
0040C649 |. C1F8 02 sar eax, 2
9 B$ ], s! i2 |0040C64C |. 89C7 mov edi, eax4 U: ~$ u2 | h" c/ V$ Q" Q
0040C64E |. C78424 040100>mov dword ptr [esp+104], 3
, e5 ^, ^8 ?7 |6 \- [0040C659 |> 89E0 mov eax, esp; d" B8 E0 I# `) g+ V1 W/ K
0040C65B |. 31D2 xor edx, edx: [% g9 `# U8 m: T
0040C65D |. 8A0C24 mov cl, byte ptr [esp]& S. p1 H. g/ V. `9 F
0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx2 c4 ?' h' a* u6 Z, r2 h
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx* S- |( \' u( y, Q
0040C66C |. 899424 080100>mov dword ptr [esp+108], edx& k% q, o8 N# { {
0040C673 |. 89E2 mov edx, esp
* }- m) w! O# p7 |0040C675 |. 84C9 test cl, cl1 c m& {+ h0 G7 [
0040C677 |. 0F84 89000000 je 0040C706+ g B+ [8 U" W9 t: s! u
0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]5 C7 G+ V7 [, z2 _. f
0040C684 |. 4F dec edi, X2 J( |) _) f3 m' c" _' K. n
0040C685 |. C1E1 02 shl ecx, 2; z1 O3 S1 Y2 J% m9 _ C
0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi
5 J2 V0 h, r- U0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx9 u3 s# Z7 b. b3 s! h
0040C696 |> 8A0A mov cl, byte ptr [edx]
3 q; `* ]! \2 c3 ^0040C698 |. 80F9 20 cmp cl, 202 d8 m6 D7 _1 s& s
0040C69B |. 0F85 6A010000 jnz 0040C80B
N1 G+ d/ k+ |) _- J7 n- _& \( G0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]% H( W9 v5 W; P0 [0 Z l: [4 f
0040C6A8 |. 7C 53 jl short 0040C6FD* m2 f; @9 s. X7 \" v7 O+ @
0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
2 ^( O7 n( g' Z' e0040C6B1 |. C602 00 mov byte ptr [edx], 0
; o- O4 q: g* |# W9 i* l) J6 s0040C6B4 |. 89C6 mov esi, eax
! c( w3 n& ?! V- ~5 ?) b/ x: y0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]
. v$ I9 E% q7 @' X. s0040C6BC |. 31DB xor ebx, ebx) u% L1 d6 y" v+ Z3 V
0040C6BE |. 57 push edi# u s5 o, Y6 I }
0040C6BF |> 8A06 /mov al, byte ptr [esi]
8 V+ U% H( K; l/ m0040C6C1 |. 8807 |mov byte ptr [edi], al
3 P8 E) @' s5 _7 n0040C6C3 |. 3C 00 |cmp al, 03 l2 Q: ?$ P; g; p2 f2 u7 d
0040C6C5 |. 74 10 |je short 0040C6D7
: w( R$ A' G. e n- N0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]
6 @' \1 {8 y- j& ~" s4 t0040C6CA |. 83C6 02 |add esi, 2: B' K3 y# T* J) g& o8 w% q$ N! e
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al
1 n3 c' \3 L$ j: f% ?7 D- v, }0040C6D0 |. 83C7 02 |add edi, 20 f& K/ e- J! Z/ q; p
0040C6D3 |. 3C 00 |cmp al, 0
7 o: }6 ]: V$ C/ o" v0040C6D5 |.^ 75 E8 \jnz short 0040C6BF
- }* X- I- m3 x }+ P4 d T0040C6D7 |> 5F pop edi/ W; r0 P# z; ~1 ^# H* V' k5 f2 C" }
0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
8 F- v' s1 g) Z' E; |( M8 m9 C0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
# X' Y' a# a. U4 e1 ?! a1 K% |0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]6 Y. ^6 Z7 B1 t( x9 V# h
0040C6E9 |. 83EF 04 sub edi, 4$ b% C6 F6 t# B
0040C6EC |. 42 inc edx( l# M' }& I3 i
0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi
/ @4 I6 X o$ w" }0 g0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx( G: v) E _' X: {7 v; s
0040C6FB |. 89C2 mov edx, eax+ u9 F6 |) A$ l f
0040C6FD |> 43 inc ebx
6 `: s5 D. S* I; k" j0 w0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]
& T3 |. P+ Y+ X0040C701 |. 42 inc edx) n/ E# s; G& `
0040C702 |. 84ED test ch, ch# E x; Y- ^$ b3 T/ C6 f" c t
0040C704 |.^ 75 90 jnz short 0040C6965 Y I% u1 {- w( n/ ?% O& {: | u
0040C706 |> 83FD 10 cmp ebp, 10! T- @1 I, @5 P
0040C709 |. 7F 05 jg short 0040C710
9 f3 _+ V* K8 c# c' Q4 c: V% b$ W0040C70B |. BD 20000000 mov ebp, 20. A& c$ d* y& U( I
0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]
9 X% a5 L6 T. b/ V0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]. @9 C- O8 }; O+ B( C
0040C71E |. 85D2 test edx, edx6 k# W* L% }' j3 p, s+ ?! ^. A- ^0 I
0040C720 |. 7C 23 jl short 0040C745; r7 }2 M+ S! y1 i0 A2 v8 [! F
0040C722 |. 89C6 mov esi, eax/ o1 H" I! f3 G N" P
0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]
, _- a$ O. G" s Y; K0040C72B |. 57 push edi
! o5 l% e5 e$ f4 Z! P0040C72C |> 8A06 /mov al, byte ptr [esi]) `2 Z5 N* T4 X0 ?/ I! `
0040C72E |. 8807 |mov byte ptr [edi], al
( I1 h7 v: y! d, T7 [! X0040C730 |. 3C 00 |cmp al, 0
4 i) h/ X0 f; h3 P7 Q* f0040C732 |. 74 10 |je short 0040C7449 k, D0 K. E. w9 o+ h
0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]
- B) m* w0 }' K/ x8 k0040C737 |. 83C6 02 |add esi, 2
) O5 y* u, p/ K$ y% d b8 ?0040C73A |. 8847 01 |mov byte ptr [edi+1], al
; [+ q- c1 r/ Q2 ]. a0040C73D |. 83C7 02 |add edi, 2
3 V2 U' \" v: v! T+ x6 H+ P$ g0040C740 |. 3C 00 |cmp al, 0
4 ? Q- g+ @ N1 o0 \0 U0040C742 |.^ 75 E8 \jnz short 0040C72C. Q; v: c: ] }' N
0040C744 |> 5F pop edi& M6 E6 m8 S' Q1 W& `% Y9 N* G" j
0040C745 |> E8 E6500100 call 00421830- m0 x% ^8 h: {4 L1 d6 N
0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax
0 u0 l0 B; Q6 ?) H0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]3 w( _5 f" [+ y/ }# x
0040C756 |. 40 inc eax: P' D" F; V% Z. m
0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax3 \* |$ V; P9 F
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1) k3 _7 G3 W) B
0040C766 |. B8 64000000 mov eax, 64& e2 n/ o* v3 Z% R3 z
0040C76B |. 89C2 mov edx, eax N! ^" i) h8 Y$ \' V
0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]: E; s- P5 H t
0040C773 |. C1FA 1F sar edx, 1F
7 ~5 Z+ D2 V* D. J p/ a0 L6 E8 c0040C776 |. F7F9 idiv ecx
) j6 Z$ v& Z6 W4 t4 }. P) d0040C778 |. 89C3 mov ebx, eax+ ^. F- I5 }. v/ o
0040C77A |. 89EA mov edx, ebp! y/ t& q t& a5 R6 a$ N' Y
0040C77C |. 89E8 mov eax, ebp' J; O# @! O/ h7 n5 m/ R
0040C77E |. C1FA 1F sar edx, 1F; t, w) F9 m! P, f# z
0040C781 |. C1E2 04 shl edx, 4* q& k7 X8 i3 B
0040C784 |. 1BC2 sbb eax, edx: k6 i& `7 c5 B/ x! Q
0040C786 |. C1F8 04 sar eax, 4/ v W3 s, Z Y
0040C789 |. 01C3 add ebx, eax5 d n& M7 b% N: i" Z8 M, [
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx
3 H7 }) s U/ v% X0040C791 |. 81C4 10010000 add esp, 1100 O9 C8 s8 l8 x1 x% R& y
0040C797 |. 5D pop ebp
- e3 W, }/ K' w! K$ Q6 J& `0040C798 |. 5F pop edi
. N$ R/ \0 V5 X- z$ n2 y0040C799 |. 5E pop esi
|9 p, P K+ v6 A+ W- p1 ^0040C79A |. 5A pop edx1 ]: w/ I3 u3 d
0040C79B |. 59 pop ecx
/ R- m H" }; W0 c0040C79C |. 5B pop ebx
5 m0 h N5 n7 L! N9 q0040C79D |. C3 retn' M1 H% n0 M' x) Y5 H
0040C79E |> 81FD 8C000000 cmp ebp, 8C: h% Q0 z# T+ t! W, H/ \
0040C7A4 |. 7C 28 jl short 0040C7CE/ I7 o* B: r7 ^5 `" f1 B1 q7 ^
0040C7A6 |. 81FD D2000000 cmp ebp, 0D2
; c6 ` }0 [6 F. a5 A0040C7AC |. 7F 20 jg short 0040C7CE1 u& T7 F! @6 d( L3 Q* c
0040C7AE |. B9 03000000 mov ecx, 33 s. z4 A3 m+ s0 j. R2 v3 c
0040C7B3 |. 89EA mov edx, ebp" m7 e8 ~2 ~! h$ W) o3 {+ L. L/ t6 ?
0040C7B5 |. 89E8 mov eax, ebp
) X$ P2 _: Q" @5 f \( L3 |8 v' P' C0040C7B7 |. C1FA 1F sar edx, 1F
; U6 `2 p) `+ _0040C7BA |. F7F9 idiv ecx
4 u6 G9 n" t( T5 h3 {( e0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2! U6 }& x" O/ i# l
0040C7C7 |. 89C7 mov edi, eax
. e6 Z7 N4 b/ b: P2 K" W0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659/ W7 ^; V4 b0 E' V
0040C7CE |> 83FD 46 cmp ebp, 46
; d/ F$ W5 ]2 E! p4 H d0040C7D1 |. 7C 25 jl short 0040C7F8
7 V- J( S0 `& p1 G# r0040C7D3 |. 81FD 8C000000 cmp ebp, 8C
& a6 B) V' Q: x9 H4 t% w) s0040C7D9 |. 7F 1D jg short 0040C7F8
# J7 O8 z4 _! e( L" }0 K0 Z* D0040C7DB |. 89EA mov edx, ebp
0 C# ~7 E% ?$ Q' x. i0 t+ s0040C7DD |. 89E8 mov eax, ebp
5 a# D4 R. }+ \4 {0 t0040C7DF |. C1FA 1F sar edx, 1F& |* L4 j- l8 q+ f; |' K
0040C7E2 |. 2BC2 sub eax, edx
' a4 A6 |; {2 c; f0040C7E4 |. D1F8 sar eax, 1
% ~+ ^- ~/ N: R) @0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1
4 M% M. A' t7 @3 C1 m _0040C7F1 |. 89C7 mov edi, eax
, k; a6 G6 A% T/ b0040C7F3 |.^ E9 61FEFFFF jmp 0040C659
8 i. m" L- F" S9 K' |; L% w0040C7F8 |> 31D2 xor edx, edx
+ y6 E5 n. f3 ?- ^3 g0040C7FA |. BF 46000000 mov edi, 46* n$ Z- o8 M! h8 T- D5 D4 ^
0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx$ \0 `) A- r& r8 v0 V
0040C806 |.^ E9 4EFEFFFF jmp 0040C659
; q# ^4 i. g) ?: Y% u2 Y4 c0040C80B |> 80F9 7C cmp cl, 7C
, b" k* h N3 y& e: @8 y4 F0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD+ C; t% o: ?) H1 g# {3 Z
0040C814 |. C602 20 mov byte ptr [edx], 207 d& U/ i8 }/ n# G) D0 v
0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD2 y% Z9 x' x+ Y$ B
$ t5 c% p7 L( L+ q2 i在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
" `' R% ]0 [0 b估计要汉化就要在上面的代码段下功夫了,以后继续研究。; a9 Y. ~0 R% ], A, ~2 [
3 n9 G+ Z! a: D: [8 j; X6 b3 y2 H3 m7 ]找到2个俄文的补丁,也许对以后研究有用。% R7 I( c# h: d! v' i- a- O8 t
http://www.megaupload.com/?d=EZH6X672
2 m/ ]5 y, D8 w V" Ahttp://rapidshare.com/files/94227080/ScratchesDC.7z |