看了一下惊恐鬼屋Scratches这个游戏。) t8 n. z5 x! h! L: n1 }
包文件有2个,scratches.res和scream.res,
3 f; t9 |1 Z5 ^9 `$ W包文件的格式如下,可以用Game Extractor来解开。
) F* ], h- s/ Z8 i6 I# rhttp://wiki.xentax.com/index.php/Scratches_RES$ R% J6 t( J; ]$ e
从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。
( j+ q" o# ]+ g' Xscream.res里面也有一个字体文件,但是游戏好像没有用到。0 \2 i, c b- e7 L' g& q
2 o3 @) G; y! y1 s J2 s: Q6 G用OD调试后,发现这是一个使用opengl API的游戏。
+ X X9 U+ Z: q3 ]) k9 h8 {0 k( U在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。3 c$ L) K5 ?+ u% j
- x! P2 u- |0 M( @
0040C5D0 /$ 53 push ebx
- {9 t$ {: h: {5 A4 I1 k0040C5D1 |. 51 push ecx# a2 z( k. R- O# i3 c
0040C5D2 |. 52 push edx
. H8 D3 e4 G: U; T! {2 g$ `2 Z/ `+ O0040C5D3 |. 56 push esi
' h$ c! V' `1 _8 q& J0040C5D4 |. 57 push edi6 p7 [- k. I1 G3 P9 Q) N+ a: p- A
0040C5D5 |. 55 push ebp+ P2 f7 S+ D) F8 h# k' r, v' r
0040C5D6 |. 81EC 10010000 sub esp, 110- g( G1 F. b6 ^* Z5 Y3 \" H3 X
0040C5DC |. 89C6 mov esi, eax
- I0 k3 @5 [5 c; U3 c9 j# ?9 [0040C5DE |. 89C7 mov edi, eax
, N- p K$ W, c0040C5E0 |. 29C9 sub ecx, ecx
# _* X* s( x+ ` p0040C5E2 |. 49 dec ecx/ c/ \2 z- {$ k( I
0040C5E3 |. 31C0 xor eax, eax( C3 B( V2 ?; u* n6 V! J- r7 h2 |
0040C5E5 |. F2:AE repne scas byte ptr es:[edi]9 z) m& p8 V: y$ ~
0040C5E7 |. F7D1 not ecx. P; I2 W2 A3 F# R$ Q
0040C5E9 |. 49 dec ecx# q- s' F2 w4 [ _2 \
0040C5EA |. 31DB xor ebx, ebx) r; n0 N5 P7 o' G) F& {$ r' N- h
0040C5EC |. 31ED xor ebp, ebp
' a7 G9 q6 @" Y/ D5 { ~0040C5EE |. 81F9 00010000 cmp ecx, 100
( f# B7 w/ U4 G! c- j* a$ K0040C5F4 |. 72 0D jb short 0040C6038 h$ O4 o/ E7 E
0040C5F6 |. 81C4 10010000 add esp, 110. k6 ]6 q2 w! z, H& c2 P
0040C5FC |. 5D pop ebp& w1 ~; ^2 K* p
0040C5FD |. 5F pop edi# ^+ F5 E% w9 `$ e/ {' V
0040C5FE |. 5E pop esi
2 f- {: \0 K8 Z {3 D0040C5FF |. 5A pop edx
: a4 {" m8 o3 l0040C600 |. 59 pop ecx
& D/ K9 ?- G6 L7 \0040C601 |. 5B pop ebx
' N+ r* X9 I9 m) z$ a: {0040C602 |. C3 retn
4 I: j$ j) }: `% H1 U0040C603 |> 89E7 mov edi, esp
3 U( W) e/ i/ m5 m0 y( g5 J0040C605 |. 57 push edi) K( L5 ~" b7 g3 P7 j
0040C606 |> 8A06 /mov al, byte ptr [esi]
9 y7 M6 t. p) l" |0040C608 |. 8807 |mov byte ptr [edi], al0 W" c7 h+ k/ O9 m$ M a- K
0040C60A |. 3C 00 |cmp al, 01 o, d* N% G4 s6 a& d
0040C60C |. 74 10 |je short 0040C61E! e% V( A$ \4 P: F; n" M$ G" G
0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]
1 n% ^+ A8 W% L7 y2 _1 O0040C611 |. 83C6 02 |add esi, 2
, p+ \6 u+ U# E0 c- |0040C614 |. 8847 01 |mov byte ptr [edi+1], al$ l. s( ^2 r" G( h- b8 U" \
0040C617 |. 83C7 02 |add edi, 2/ |+ q: W( i5 c4 |! M% R) s
0040C61A |. 3C 00 |cmp al, 0 k7 j; _1 }3 z) P+ f
0040C61C |.^ 75 E8 \jnz short 0040C606
3 P$ N& K9 P w" \* o% [( X0040C61E |> 5F pop edi
: h9 D. z. e4 H3 |5 s5 z c0040C61F |. 8A1424 mov dl, byte ptr [esp]# B8 h8 c* D& p* W, H. R
0040C622 |. 89E0 mov eax, esp
$ z4 R1 J1 C9 l' K' ?7 A0040C624 |. 84D2 test dl, dl1 r4 M) O- G: I
0040C626 |. 74 09 je short 0040C631) o) q7 E& B& D. Z- G4 K8 K$ ~
0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]
' E# q8 r; K& t% C" b1 r1 C; T3 v0040C62B |. 40 |inc eax
, G" _; F. r/ p6 U' x" e1 e% g9 _0040C62C |. 45 |inc ebp
& B7 o. U' c2 l- ?# M0040C62D |. 84F6 |test dh, dh# ?2 L3 S# g- r! O
0040C62F |.^ 75 F7 \jnz short 0040C628
& W" g' c0 r, W0040C631 |> 81FD D2000000 cmp ebp, 0D22 D! }! ?1 s! q3 Z! q8 d
0040C637 |. 0F8E 61010000 jle 0040C79E1 ~$ N* Q' M% G4 G& l2 p0 T7 l: {4 S
0040C63D |. 89EA mov edx, ebp7 H9 _$ X/ x6 Z
0040C63F |. 89E8 mov eax, ebp8 m( b7 k4 v; u7 _! S
0040C641 |. C1FA 1F sar edx, 1F
; K* |4 g- U1 L: F5 w5 Y( C% h0040C644 |. C1E2 02 shl edx, 2+ n& j/ r# e, i5 `6 K( M; G& e4 S
0040C647 |. 1BC2 sbb eax, edx$ A" }1 C( o& `4 r$ E! t% E
0040C649 |. C1F8 02 sar eax, 2
/ z, Z& s# n0 D% ? T0040C64C |. 89C7 mov edi, eax
! {3 w9 i! G( s- C* j0040C64E |. C78424 040100>mov dword ptr [esp+104], 3
8 U% W- m& s1 T2 T2 [$ D; c0040C659 |> 89E0 mov eax, esp3 u7 |: O2 |3 G& z
0040C65B |. 31D2 xor edx, edx
6 m, a+ C1 N& G x2 v9 t3 @ V- h0040C65D |. 8A0C24 mov cl, byte ptr [esp]
' j! C0 j) X( a" g, D+ W0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx3 g9 T# f, x/ s1 A, O
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx
. ~: T: z4 _% ]5 d$ u0 U0040C66C |. 899424 080100>mov dword ptr [esp+108], edx6 a$ W! j: B$ `) i# m$ x; w
0040C673 |. 89E2 mov edx, esp. _. R: c& \+ Z* g( G+ o+ }, N
0040C675 |. 84C9 test cl, cl4 r0 B; ^$ C' W% W
0040C677 |. 0F84 89000000 je 0040C706
: s# E- E7 _+ c# o$ P$ n$ A0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]
* h- _1 {" w% u, Z; c* c0040C684 |. 4F dec edi
l2 I+ l U# \) a, b0040C685 |. C1E1 02 shl ecx, 2
4 u, r! Z9 x" k3 e6 H0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi& x: e: a7 r8 o$ w9 ^
0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx
# S9 \& {) T3 d u9 s0040C696 |> 8A0A mov cl, byte ptr [edx]' s6 [8 c4 m5 ]% X$ Q
0040C698 |. 80F9 20 cmp cl, 20" h! C' i: v9 l
0040C69B |. 0F85 6A010000 jnz 0040C80B1 `9 u* t) {5 y; W* j: B5 x
0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]
4 H- t8 { ~0 t* E: r8 n0040C6A8 |. 7C 53 jl short 0040C6FD5 l6 S* g$ e4 N- X: P
0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
* w9 c: d2 E8 j0 [0040C6B1 |. C602 00 mov byte ptr [edx], 0
0 _' E( D* I M6 I) C/ t: a* R0040C6B4 |. 89C6 mov esi, eax
6 R% F$ j. C' K/ t% o$ G0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]
8 W, ]& ^/ f9 ]( M0040C6BC |. 31DB xor ebx, ebx
) m! O O1 K) G4 T% ]$ `0040C6BE |. 57 push edi
& ]5 ~" A1 e# S3 ?; ^0 N7 f- \- V. D0040C6BF |> 8A06 /mov al, byte ptr [esi]7 ~/ g; Y/ E3 V% @
0040C6C1 |. 8807 |mov byte ptr [edi], al" {% u2 A- a! S3 ^
0040C6C3 |. 3C 00 |cmp al, 0
, `, {7 B) T7 @. T0040C6C5 |. 74 10 |je short 0040C6D73 u7 p1 S' @4 y# a
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]
# o& Y8 b9 r9 {2 J0040C6CA |. 83C6 02 |add esi, 2" r. X8 J, Q* z, w, e! p
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al# n0 Y: ~$ e- M$ Q
0040C6D0 |. 83C7 02 |add edi, 2
2 {: w; v$ y6 F; L0040C6D3 |. 3C 00 |cmp al, 03 i0 k3 Z. B. P& }
0040C6D5 |.^ 75 E8 \jnz short 0040C6BF) u; ^7 P. q! q) K' o3 C z, V! Y, ?
0040C6D7 |> 5F pop edi
6 V0 l6 o9 N# e+ s% v0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
9 x/ v/ c' _. J- z0 N0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]
: N5 f$ W4 O0 [2 Y, c2 e8 A0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]
- S; z' T2 t" X- l0040C6E9 |. 83EF 04 sub edi, 4( w# J- P7 J1 \6 q" t- A8 s/ |7 u: X
0040C6EC |. 42 inc edx
+ _" q/ |) u7 d* J+ X0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi
, p' n5 V9 a! b4 Y# z4 C0 Q- Z0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx
( k0 x7 U: r7 H8 _6 Y0040C6FB |. 89C2 mov edx, eax
' n: |: ~7 E" Q$ m0040C6FD |> 43 inc ebx
( ~7 d) ~( x$ _: K2 k; G/ o% u0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1], V% k. u+ i6 N' L9 X+ i W0 a+ M
0040C701 |. 42 inc edx
1 R/ n8 f1 P0 ]8 o0040C702 |. 84ED test ch, ch$ U8 V9 y. e0 S4 k( }
0040C704 |.^ 75 90 jnz short 0040C696
+ V$ |( Y7 e' {, y7 `0040C706 |> 83FD 10 cmp ebp, 10
' u5 y; A! E4 D, B& \) n0040C709 |. 7F 05 jg short 0040C7105 z) ?( I1 w8 ~) x6 q
0040C70B |. BD 20000000 mov ebp, 209 F" v% h* r- b$ r0 Q
0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]
- x% Z9 l; b$ W: O; z8 z! }$ [0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]
8 B$ f, I2 o# C, U( |8 a5 `0040C71E |. 85D2 test edx, edx7 [" e) V1 Q% V- Q8 V" M
0040C720 |. 7C 23 jl short 0040C745
% ^# x6 E; R$ H% w0040C722 |. 89C6 mov esi, eax# M- F) E3 Y- z% w* ~4 o o
0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]! e: k4 N* Q! O0 b: d& \% i
0040C72B |. 57 push edi
! p; e7 d% W( u. Q+ w' V H6 {0040C72C |> 8A06 /mov al, byte ptr [esi]
6 e. P7 ^' J) ^7 T9 G3 J4 q0040C72E |. 8807 |mov byte ptr [edi], al
, Y- B+ C3 I5 ^) G8 q0040C730 |. 3C 00 |cmp al, 0
0 |* F2 Y3 w, X* l* Y5 Y7 x0040C732 |. 74 10 |je short 0040C744
& I% n0 e' c$ F3 z2 u: X0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]
; y5 Z5 K! ]6 v* b9 ^, \0040C737 |. 83C6 02 |add esi, 27 F' X% \% u& y. b0 v
0040C73A |. 8847 01 |mov byte ptr [edi+1], al' k# q9 {. A- W3 p( P: e" T% @8 A
0040C73D |. 83C7 02 |add edi, 2' G# B$ I$ x$ n6 b5 }7 s. I' J
0040C740 |. 3C 00 |cmp al, 03 e: _7 F: R3 N8 ^7 f$ A3 a
0040C742 |.^ 75 E8 \jnz short 0040C72C
I! f S3 o2 i; U& K0040C744 |> 5F pop edi$ h7 ?9 v5 t% u+ `0 z5 H
0040C745 |> E8 E6500100 call 004218303 f6 ]% k* ?7 A
0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax
" y5 }. B6 S7 t7 K" w. R( P r0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]1 u* f/ n0 V: i$ H
0040C756 |. 40 inc eax2 T1 M; y1 G8 N/ s" w& c6 f# T: c; D
0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax
# C e1 H8 c' u, Q& M0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 11 q# \% E+ J6 R8 U/ s
0040C766 |. B8 64000000 mov eax, 64) `4 Z0 P/ O0 A# n
0040C76B |. 89C2 mov edx, eax
7 P3 Q) t2 J3 x1 V$ o$ ` z0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]; j" D4 @$ T! g0 f e
0040C773 |. C1FA 1F sar edx, 1F
; s# R3 [# b" i$ R0040C776 |. F7F9 idiv ecx3 |% E; `; U. \* @
0040C778 |. 89C3 mov ebx, eax
i, O& i8 |/ R M# W) k0040C77A |. 89EA mov edx, ebp+ c( \% L0 A7 m. O$ Q
0040C77C |. 89E8 mov eax, ebp
( M1 {6 ? G/ p1 x* i# T# w& Z0040C77E |. C1FA 1F sar edx, 1F* s/ i- H6 U. l* h
0040C781 |. C1E2 04 shl edx, 44 P F" `) E* `* G, X5 E
0040C784 |. 1BC2 sbb eax, edx
$ v% Z( P, t7 B' j0040C786 |. C1F8 04 sar eax, 4
6 r0 z4 D* j* q1 w0040C789 |. 01C3 add ebx, eax0 V$ K: V b& Z8 D# j, M
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx, t2 b5 P) a2 @% q
0040C791 |. 81C4 10010000 add esp, 110* P0 M+ Q! g$ s5 [- w
0040C797 |. 5D pop ebp
/ ^8 [; {7 D5 g0 M2 B0040C798 |. 5F pop edi
, t3 b: }; C- m! w/ l8 Q9 W& h0040C799 |. 5E pop esi) E" ]4 S& q# w2 p1 F
0040C79A |. 5A pop edx
: w* q5 L" j5 y7 f f" c0040C79B |. 59 pop ecx
6 X) C! K2 e2 j! Y" c& y* p0040C79C |. 5B pop ebx" Z" P$ w) C& {) j
0040C79D |. C3 retn
4 ]" P' h, H& T' Q* c0040C79E |> 81FD 8C000000 cmp ebp, 8C
% u4 A/ r% z' c' J# E0040C7A4 |. 7C 28 jl short 0040C7CE
3 s' ~; W' x# z2 Y& z7 ~8 y) ]0040C7A6 |. 81FD D2000000 cmp ebp, 0D26 D/ ?- V4 a3 L( e
0040C7AC |. 7F 20 jg short 0040C7CE& I( Z2 c; C N2 w+ `2 }) x
0040C7AE |. B9 03000000 mov ecx, 3
7 g$ S/ c( }! p& [: t# {6 i* y0040C7B3 |. 89EA mov edx, ebp
* ^! @4 s* H. K) g0040C7B5 |. 89E8 mov eax, ebp
2 y: G2 `! E" m: Q) S: k% v0040C7B7 |. C1FA 1F sar edx, 1F
5 I/ d7 o4 T8 N. U0040C7BA |. F7F9 idiv ecx1 ]% f z, p1 D/ f1 m
0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2
0 T: Z/ V( m$ O. [. }$ z0040C7C7 |. 89C7 mov edi, eax3 w9 ]9 J- H* I3 s4 ? ~
0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659 W9 r4 n1 X' ?' e
0040C7CE |> 83FD 46 cmp ebp, 46
) [0 z3 T) }, v4 T0040C7D1 |. 7C 25 jl short 0040C7F8" u! O/ t% t6 D
0040C7D3 |. 81FD 8C000000 cmp ebp, 8C
4 ]6 r' s6 x) ?' V0040C7D9 |. 7F 1D jg short 0040C7F8
% K2 a9 ~9 `# N6 d5 R* c6 h( a0040C7DB |. 89EA mov edx, ebp
, N( \ A0 R& Q7 K0040C7DD |. 89E8 mov eax, ebp! q' V' G/ C) |( z
0040C7DF |. C1FA 1F sar edx, 1F |' Y& p+ w6 Z
0040C7E2 |. 2BC2 sub eax, edx0 j+ d6 D% y: L: W5 L) W6 F
0040C7E4 |. D1F8 sar eax, 1
5 S9 B: l- @$ B* ^6 ~8 r- L0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 18 u4 O9 ~' U* w) g' e0 e
0040C7F1 |. 89C7 mov edi, eax6 {, u8 Z5 T/ ^! P
0040C7F3 |.^ E9 61FEFFFF jmp 0040C659
1 e! {2 W; C' b$ N3 g- q Q0040C7F8 |> 31D2 xor edx, edx
1 t, j: O1 }+ d0040C7FA |. BF 46000000 mov edi, 46' h; G0 {4 \& O# l' k/ J+ h
0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx1 |: y3 |/ Z3 N( d |
0040C806 |.^ E9 4EFEFFFF jmp 0040C659( J6 c+ U1 m) ?2 u
0040C80B |> 80F9 7C cmp cl, 7C- ?5 B' S6 A6 u# ^/ |1 ]
0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD
! L8 k7 C9 {: T+ L! k% R a; N/ E0040C814 |. C602 20 mov byte ptr [edx], 20+ c) h" A% B8 ?/ W4 k
0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD) [7 H$ @4 P. |- N
& ^1 r3 ^, Q! H
在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
# o7 p" W+ A/ p- e9 I估计要汉化就要在上面的代码段下功夫了,以后继续研究。
( g0 \5 w. h+ H/ \% V5 }2 B1 X, d+ d3 \ l: t0 y
找到2个俄文的补丁,也许对以后研究有用。
$ A; v2 |, L( g0 ~* h" K- r, l6 Ihttp://www.megaupload.com/?d=EZH6X672
% j5 T+ ^: H7 R, i% Xhttp://rapidshare.com/files/94227080/ScratchesDC.7z |