看了一下惊恐鬼屋Scratches这个游戏。& y* D4 f6 K; _3 F
包文件有2个,scratches.res和scream.res,
9 r9 k7 v! ^) d包文件的格式如下,可以用Game Extractor来解开。
. C! i9 ^4 i$ v3 Bhttp://wiki.xentax.com/index.php/Scratches_RES
. J! y* ]7 B3 s; H# z从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。3 C e5 U; w( K$ O2 d# W# O( o
scream.res里面也有一个字体文件,但是游戏好像没有用到。
' l/ w' m+ r- h: \5 ]0 h9 Q: r, }; S r
用OD调试后,发现这是一个使用opengl API的游戏。- f) e& `- H8 f& G( ?
在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。
. h! j" Z7 n7 x6 F4 [7 Q z0 c* J; j ]' K
0040C5D0 /$ 53 push ebx7 m$ e) f5 x# i* E/ \$ J2 Y( _2 B2 |
0040C5D1 |. 51 push ecx
. s- O' g' [- F+ f0 h9 v0040C5D2 |. 52 push edx+ R! J, k$ y% g
0040C5D3 |. 56 push esi
, W2 I2 S, w: X& O6 g C4 m0040C5D4 |. 57 push edi( ?6 }, g+ p- R4 h: \4 |1 i. C
0040C5D5 |. 55 push ebp, `0 B( t( s6 B3 B' J5 ]+ |
0040C5D6 |. 81EC 10010000 sub esp, 110: ]+ O6 S- z1 |1 o, ^
0040C5DC |. 89C6 mov esi, eax
, j/ ?6 L |3 R' \0040C5DE |. 89C7 mov edi, eax
! a1 Z8 f5 W" d0040C5E0 |. 29C9 sub ecx, ecx$ d: ]- S& D' ]" G4 A) O ]
0040C5E2 |. 49 dec ecx
/ Q: W" |, q& u+ y4 l0 ~1 B0040C5E3 |. 31C0 xor eax, eax
' ~) `, g1 u) [8 Y V4 b8 e) i0040C5E5 |. F2:AE repne scas byte ptr es:[edi]! v _" x; W. L% x
0040C5E7 |. F7D1 not ecx: |2 _8 ?8 L: S6 i/ [
0040C5E9 |. 49 dec ecx
: d& y" R) Y! U9 A0040C5EA |. 31DB xor ebx, ebx6 R* |; G T2 S
0040C5EC |. 31ED xor ebp, ebp. U) n$ W% A& B2 G, l
0040C5EE |. 81F9 00010000 cmp ecx, 100) ~4 |& `( ]% H$ n* ?. U* s
0040C5F4 |. 72 0D jb short 0040C603
0 v3 c# @# S+ }( e4 P. m0040C5F6 |. 81C4 10010000 add esp, 1102 F' I G3 ^: j2 M
0040C5FC |. 5D pop ebp
5 Z2 ?9 i- E' j% e5 u0040C5FD |. 5F pop edi$ r# D& x' d: h0 }7 x, c, ]9 m
0040C5FE |. 5E pop esi
& a7 } c7 g) q0 \. {& N# B4 D0040C5FF |. 5A pop edx6 g, r5 |6 T1 v" U& [/ D j2 ~
0040C600 |. 59 pop ecx; h6 N+ a* N; D
0040C601 |. 5B pop ebx
, T& R0 n" u/ X+ H! v0040C602 |. C3 retn! E4 F3 L9 @# r6 G$ n+ p6 V |
0040C603 |> 89E7 mov edi, esp
! K* [; s# q4 o% _# Y0040C605 |. 57 push edi
( M G8 t/ L. {/ j0040C606 |> 8A06 /mov al, byte ptr [esi]! o. z9 e+ I4 Z/ A" \ f
0040C608 |. 8807 |mov byte ptr [edi], al
; n H5 C4 t( O0040C60A |. 3C 00 |cmp al, 0
" U7 T4 ]1 e+ W0040C60C |. 74 10 |je short 0040C61E/ Q% _6 a' l6 d# X# |. A
0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]
: s4 Z' b K N1 t( i0040C611 |. 83C6 02 |add esi, 2
; S: ]" d% |! l4 N0040C614 |. 8847 01 |mov byte ptr [edi+1], al! o' R2 l6 ?+ Y$ p/ |
0040C617 |. 83C7 02 |add edi, 2; x0 s/ U+ \4 ]; ~/ H
0040C61A |. 3C 00 |cmp al, 03 Z; D7 ?' P' M; C9 _9 k
0040C61C |.^ 75 E8 \jnz short 0040C606
" D( E2 W1 N$ X1 B3 W, T& k( \0040C61E |> 5F pop edi/ L# K- @( t B; {5 F( R
0040C61F |. 8A1424 mov dl, byte ptr [esp], M# ]) c$ O' t, i
0040C622 |. 89E0 mov eax, esp- Z3 |! R. \7 o) }
0040C624 |. 84D2 test dl, dl
. P5 w+ \8 K+ Q4 z0040C626 |. 74 09 je short 0040C631' O1 ]9 P* C; m f' K8 b/ M! U
0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]. H( u4 M' ^( q2 T
0040C62B |. 40 |inc eax
. X+ _, f$ w/ ^+ s9 O7 s0040C62C |. 45 |inc ebp6 a4 O4 l0 v0 T7 N
0040C62D |. 84F6 |test dh, dh
! m' W4 [8 e' Q0040C62F |.^ 75 F7 \jnz short 0040C628. ]1 g0 [$ [+ m' z$ B% H
0040C631 |> 81FD D2000000 cmp ebp, 0D2! L) c# \7 u: A8 L& E& i
0040C637 |. 0F8E 61010000 jle 0040C79E; w9 ~- I- y) O% {0 G2 R2 v
0040C63D |. 89EA mov edx, ebp8 k0 G* a. j2 y
0040C63F |. 89E8 mov eax, ebp
7 J* H7 Y8 }4 A! T7 z' a4 T5 N0040C641 |. C1FA 1F sar edx, 1F
) q3 b" n1 n, \3 r# K! m1 P0040C644 |. C1E2 02 shl edx, 2/ S' s& M) z) y% B4 {" S, D& ?
0040C647 |. 1BC2 sbb eax, edx
- n4 q4 @( `7 Z! c/ ^( K/ ^0040C649 |. C1F8 02 sar eax, 2
, @, p+ G6 Q0 j/ \9 R4 S0 C4 G/ i* c$ T0040C64C |. 89C7 mov edi, eax0 Y: E# w1 z# [9 \( l$ H Z
0040C64E |. C78424 040100>mov dword ptr [esp+104], 3
1 G9 M+ E+ G$ X( l6 p9 P0040C659 |> 89E0 mov eax, esp
$ ~1 Y6 k3 C% S! I4 l2 {0040C65B |. 31D2 xor edx, edx
4 n/ a8 a4 W1 |( j3 h0040C65D |. 8A0C24 mov cl, byte ptr [esp]
- D6 d' ~# U- D' o; P) Y% d5 c0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx
. S0 ~# _: n1 j* I4 ^( c8 O# e: q0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx4 Q g2 @, V' ^0 G5 y
0040C66C |. 899424 080100>mov dword ptr [esp+108], edx9 v8 w5 R1 Z. `/ H
0040C673 |. 89E2 mov edx, esp9 q. B' o: o) D' h4 \' M& s
0040C675 |. 84C9 test cl, cl
: w3 y+ Q) g% K2 ^; ?+ }0040C677 |. 0F84 89000000 je 0040C7066 v9 z7 h1 u1 X& A8 i# a6 s
0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]9 y+ X: F6 Z' w W
0040C684 |. 4F dec edi
5 \2 S- y/ [, b& R3 L7 a0040C685 |. C1E1 02 shl ecx, 2+ d( C4 q# G- k
0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi
; ?2 |3 l! H# ^0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx
; l( q2 }7 ~& K4 z$ [ l0040C696 |> 8A0A mov cl, byte ptr [edx]+ ]) d# X+ _: g' `
0040C698 |. 80F9 20 cmp cl, 20
' ]! v% @3 l5 e- ?! `: f, \" L0040C69B |. 0F85 6A010000 jnz 0040C80B0 J% R2 `3 \* r R5 c
0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]# M7 Q+ B& b/ ]2 J9 [% X' _0 m3 }) w
0040C6A8 |. 7C 53 jl short 0040C6FD
* l/ {: H L3 H+ V5 z" i! H0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
8 n j; K0 p8 ]8 G0040C6B1 |. C602 00 mov byte ptr [edx], 07 Z4 Z5 f6 f4 v! }1 v7 J4 u$ h/ \
0040C6B4 |. 89C6 mov esi, eax5 A/ e9 S% }+ g6 l" \! P" Y N
0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]7 r9 K$ J# m# C" u
0040C6BC |. 31DB xor ebx, ebx
9 n5 G7 |; `( I7 A( F7 P2 p: h! M5 n0040C6BE |. 57 push edi, {. D1 e3 E) s2 Q6 x+ Y# l9 `1 L3 I
0040C6BF |> 8A06 /mov al, byte ptr [esi]( }# \0 E" P+ M/ M; ~
0040C6C1 |. 8807 |mov byte ptr [edi], al
6 s/ |# `2 j W1 h7 D" X- d) X6 [0040C6C3 |. 3C 00 |cmp al, 0
9 o, P+ v$ _' n: ^! v6 [* z0040C6C5 |. 74 10 |je short 0040C6D7
8 V% u" t0 q S2 M0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]
8 I, L" _" l1 U s5 {7 ]# ]; U" W0040C6CA |. 83C6 02 |add esi, 23 z0 x {& C8 T G
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al
, x e. v8 _+ w0040C6D0 |. 83C7 02 |add edi, 23 G4 l% P) N: _7 V& m: @5 j: l
0040C6D3 |. 3C 00 |cmp al, 0+ K W. k+ g! z2 Z7 L i0 l6 R
0040C6D5 |.^ 75 E8 \jnz short 0040C6BF* O7 o. _6 U* ]! t" l
0040C6D7 |> 5F pop edi
; R j1 G5 e$ G0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
/ S- y$ F; S! p0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]4 ?; \2 [& Z _! v/ q
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]" B) c' `( V3 r0 [, _7 Y
0040C6E9 |. 83EF 04 sub edi, 4
; [: L, Z, C* T* J0040C6EC |. 42 inc edx
2 g9 J$ H$ ?$ h4 f0 s1 \0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi
3 u/ o: V: z3 l8 f1 O9 {0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx3 ]0 [9 A' ~. X; m0 o1 V& Q: o8 k
0040C6FB |. 89C2 mov edx, eax w2 }" q, W3 d; h, e* p
0040C6FD |> 43 inc ebx
- U+ K: c! s3 r0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]
k5 O! {9 a. |# r& l) Z5 F0040C701 |. 42 inc edx
5 s/ U# t. ?5 i" _' F* `% e/ t0 D0040C702 |. 84ED test ch, ch
* E1 {- n9 r; \2 ~1 Q0040C704 |.^ 75 90 jnz short 0040C696$ R5 R( O3 P* o+ P E+ U/ I
0040C706 |> 83FD 10 cmp ebp, 10) u) w* c5 q; k# F& ^
0040C709 |. 7F 05 jg short 0040C710; r7 D. s+ H- Z8 y* z
0040C70B |. BD 20000000 mov ebp, 20
& ?3 W! z/ g, f3 n# Q+ I0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]
! y5 F0 A: U! `. f% E% f& j7 _0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]
+ ~# T. z# Q7 [; o0040C71E |. 85D2 test edx, edx& }1 ]2 j9 N7 `) A, i
0040C720 |. 7C 23 jl short 0040C745
* ~ }& J' a2 [- |8 t0040C722 |. 89C6 mov esi, eax) n, Z; {! y1 C8 o( k
0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]
% h( f/ v3 Y' h9 ]4 U0040C72B |. 57 push edi
8 n5 c1 e! c/ r, \. K+ [" m0040C72C |> 8A06 /mov al, byte ptr [esi]4 i; ~( m" k0 X7 m' Z) H
0040C72E |. 8807 |mov byte ptr [edi], al, N/ @0 V1 Y6 X; d! B! u$ d
0040C730 |. 3C 00 |cmp al, 0
9 Q* J/ M+ L9 \0040C732 |. 74 10 |je short 0040C7448 k: e) j0 A2 V6 w( }, d1 w
0040C734 |. 8A46 01 |mov al, byte ptr [esi+1] E! Y+ v8 h6 J) N5 ]
0040C737 |. 83C6 02 |add esi, 2' i# ?" k. I. B: x
0040C73A |. 8847 01 |mov byte ptr [edi+1], al) [& G0 b6 t2 z! ]6 E- M8 c2 W7 }$ T( e
0040C73D |. 83C7 02 |add edi, 2! U5 k2 Z) b! l/ a, B9 t" l
0040C740 |. 3C 00 |cmp al, 0
I5 Z2 Q {. B' n- t0040C742 |.^ 75 E8 \jnz short 0040C72C
: t! k8 S y9 J u0040C744 |> 5F pop edi
/ [8 R. \% U# z* `8 |' ~0040C745 |> E8 E6500100 call 00421830# Z- U' m. E P8 `, s
0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax5 n" s5 p6 J' h5 V5 W
0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]2 I- w' Y& H. c# ~
0040C756 |. 40 inc eax {1 l- c# Z+ G- R
0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax T5 L- Z, X& V$ m- g D/ n
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 18 m+ ^, q5 M0 W; S9 `4 |5 A
0040C766 |. B8 64000000 mov eax, 64
* `6 m. ?$ p- R: A1 k$ Y- t3 r5 L: t0040C76B |. 89C2 mov edx, eax
! ]4 _' b. r% S0 B. V0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]
4 `6 m& ]0 d4 `# ?9 D$ A$ ~$ H- h0040C773 |. C1FA 1F sar edx, 1F# N6 k' d. S: s' z! y7 ?
0040C776 |. F7F9 idiv ecx
" o( l1 N2 N; w$ |+ ]0040C778 |. 89C3 mov ebx, eax4 X3 n N" T' k. I
0040C77A |. 89EA mov edx, ebp
$ u Q( ^* `" D. R& F/ r) \- u0040C77C |. 89E8 mov eax, ebp9 e8 w/ ]- w# a0 q
0040C77E |. C1FA 1F sar edx, 1F; d# E5 ^, P+ d- D- g
0040C781 |. C1E2 04 shl edx, 4
; Z' P* _+ e1 M4 D7 M0040C784 |. 1BC2 sbb eax, edx
5 j- O9 ~% H* k6 b' h+ j' Q: K* H0040C786 |. C1F8 04 sar eax, 4. k# ]' t& ~, e- R; |9 s( K" n. Q3 t: Q
0040C789 |. 01C3 add ebx, eax4 T @. I$ m9 c9 {8 d( c/ b0 _
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx1 u. `+ W& d: N' t# w
0040C791 |. 81C4 10010000 add esp, 1101 C* j5 l- H% U9 [
0040C797 |. 5D pop ebp8 v) b; E) O0 @# J, j6 h; y2 o' U( [
0040C798 |. 5F pop edi
2 s3 o* ?' M7 o' M. g8 R1 i0040C799 |. 5E pop esi
$ s2 u4 ~1 a3 r' _0040C79A |. 5A pop edx
* B% `1 U2 O% ^: w0040C79B |. 59 pop ecx6 u2 b* Q- X- X, ` x! s$ u
0040C79C |. 5B pop ebx
- H2 Q1 L7 p* t) I3 A/ y7 D0040C79D |. C3 retn
" a' t+ ?" R0 i& c; E( E$ [( c Z( I0040C79E |> 81FD 8C000000 cmp ebp, 8C3 b+ w& Z2 W, p8 }
0040C7A4 |. 7C 28 jl short 0040C7CE
; ] d3 `0 s. b( f% ?# |0040C7A6 |. 81FD D2000000 cmp ebp, 0D2) D$ G$ k' s: j+ C+ H
0040C7AC |. 7F 20 jg short 0040C7CE
2 y, m, R: Y* u1 I" M' z0040C7AE |. B9 03000000 mov ecx, 3) }2 R' t1 c% b3 i2 \. H$ p
0040C7B3 |. 89EA mov edx, ebp
+ @+ r8 A6 \& Z2 ?; b9 \1 H, Z& h: C% w0040C7B5 |. 89E8 mov eax, ebp
1 P% ^, G; |# s% l2 `0040C7B7 |. C1FA 1F sar edx, 1F' r/ ~; e! o+ r7 j5 h" n
0040C7BA |. F7F9 idiv ecx9 g' P+ K0 w$ v3 d; n5 {
0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2
R. t" D( }3 u: H2 N0040C7C7 |. 89C7 mov edi, eax: Z) Z# @- x; ^/ K3 y& X
0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659
0 n2 h# K/ C- w/ |' l- e! S# P. {0040C7CE |> 83FD 46 cmp ebp, 46
1 Z2 n% j% ^. b: a8 C( t4 i, ]0040C7D1 |. 7C 25 jl short 0040C7F8
; T8 t; R: f+ ?3 Y \7 j1 `0040C7D3 |. 81FD 8C000000 cmp ebp, 8C
9 T) f% i; t4 J B- N! b) E% M0040C7D9 |. 7F 1D jg short 0040C7F8
( E- h2 U+ ~+ A! R- a k8 n- K0040C7DB |. 89EA mov edx, ebp6 o+ n8 }6 _ `) B | T G
0040C7DD |. 89E8 mov eax, ebp
+ N+ u8 z1 I7 F6 n' V3 T; I0040C7DF |. C1FA 1F sar edx, 1F- H" h' w9 T( R6 N9 M$ U
0040C7E2 |. 2BC2 sub eax, edx t! N+ d; q( B/ J7 G7 J
0040C7E4 |. D1F8 sar eax, 1
2 c1 Y" ^! r8 A8 f4 p0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1
& l1 D, W( ?4 Q ?& J0040C7F1 |. 89C7 mov edi, eax4 c6 [% G/ Z- m( W. p$ F% J
0040C7F3 |.^ E9 61FEFFFF jmp 0040C659
% \ C9 F: ^- z" X$ ~0040C7F8 |> 31D2 xor edx, edx
8 _% f; B6 ?# i" \ k8 U; h' Q0040C7FA |. BF 46000000 mov edi, 46
8 _& J( D& j g/ q0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx
8 M% o( q0 \# g8 |/ b" K5 e4 i. W' R0040C806 |.^ E9 4EFEFFFF jmp 0040C659
0 P7 K# N9 w, Z2 z0040C80B |> 80F9 7C cmp cl, 7C
+ y$ }7 q0 N! y7 {" c0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD4 Z! n- q9 W6 E5 ?& F
0040C814 |. C602 20 mov byte ptr [edx], 20: b0 ?" t5 O9 W2 N3 V: v5 ^
0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD
& d; d, @( `( s; p4 K, O/ q- V" \) N. F7 U+ ]
在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
9 @% V0 D9 ~. r+ e: u估计要汉化就要在上面的代码段下功夫了,以后继续研究。% v/ S8 O% e# q% N
& n8 U4 Y9 ~ q' B5 F+ ?
找到2个俄文的补丁,也许对以后研究有用。5 r3 ?$ n9 v/ I
http://www.megaupload.com/?d=EZH6X672
m$ U6 h5 k1 Nhttp://rapidshare.com/files/94227080/ScratchesDC.7z |