看了一下惊恐鬼屋Scratches这个游戏。( [2 o1 s) e" g# D& P1 C& N; o
包文件有2个,scratches.res和scream.res,
# K h0 p6 X( u3 h包文件的格式如下,可以用Game Extractor来解开。( z) M6 s( J; w3 c
http://wiki.xentax.com/index.php/Scratches_RES& h/ J# D8 `, e. Q
从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。
+ O: @2 i" j$ l" ]0 |0 U fscream.res里面也有一个字体文件,但是游戏好像没有用到。
6 b; q+ ]) C: B2 E. [3 v( p* Y0 G3 b; r
用OD调试后,发现这是一个使用opengl API的游戏。
1 ^9 Z% ?, I& R# v1 F# m在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。& t! x. u$ o. Q& X
$ z0 ^" j8 G& \- R" g3 Z; d
0040C5D0 /$ 53 push ebx
5 P" A0 ?1 p; b$ D0040C5D1 |. 51 push ecx, _# @, _, O# F- R# ~- j3 E; c
0040C5D2 |. 52 push edx! D2 |! V$ c4 y b* u* K
0040C5D3 |. 56 push esi1 e; A. h' o6 c( h
0040C5D4 |. 57 push edi
( z1 Z/ N3 M6 Y: ? S" W0040C5D5 |. 55 push ebp! T: a9 a6 c3 Z1 w h
0040C5D6 |. 81EC 10010000 sub esp, 1101 q* B6 x, `, H; k
0040C5DC |. 89C6 mov esi, eax! d; B7 |$ v* k7 n9 h; A* \) g2 c
0040C5DE |. 89C7 mov edi, eax
) [* l' ]$ {) T0040C5E0 |. 29C9 sub ecx, ecx
" v9 ]- j. E/ A/ I: L7 G0040C5E2 |. 49 dec ecx0 N# t& H7 B) D# J" ~
0040C5E3 |. 31C0 xor eax, eax, t1 U& |1 Q K8 a( w! a
0040C5E5 |. F2:AE repne scas byte ptr es:[edi]
* @+ M1 R7 K1 t, j8 d0040C5E7 |. F7D1 not ecx
# b" ]5 U/ C: U0040C5E9 |. 49 dec ecx$ }# z6 t3 M; r' k
0040C5EA |. 31DB xor ebx, ebx
7 | j% R5 P) z: Q# R6 I% u0 s6 t0040C5EC |. 31ED xor ebp, ebp
3 E9 S C! X' ^0040C5EE |. 81F9 00010000 cmp ecx, 100
! }' |% Z) [, i5 p" v% {( O1 t1 d# |: c0040C5F4 |. 72 0D jb short 0040C603/ t, w$ m4 Z1 N6 ~; O# r: K
0040C5F6 |. 81C4 10010000 add esp, 110
; b% J! H/ ^0 N% V* n* P0040C5FC |. 5D pop ebp" b j# X) d# v! [- d& O
0040C5FD |. 5F pop edi! m8 g8 f7 r( G& X' U T4 q
0040C5FE |. 5E pop esi) p0 f' @( W0 L2 |; \/ }
0040C5FF |. 5A pop edx/ m- M- U/ L3 W: e
0040C600 |. 59 pop ecx& A8 \' ?0 J5 h0 S1 P7 T
0040C601 |. 5B pop ebx9 z5 {1 D' y% r" H
0040C602 |. C3 retn
% Y% d5 [0 H' A4 L0040C603 |> 89E7 mov edi, esp$ V- S* _# P% t) K
0040C605 |. 57 push edi$ E; j" e( f3 |. V2 {$ e9 k
0040C606 |> 8A06 /mov al, byte ptr [esi]
2 F, V6 H% [& r Y' W8 {( G0040C608 |. 8807 |mov byte ptr [edi], al
; j' ]- w$ }, d0040C60A |. 3C 00 |cmp al, 09 @( M1 X2 H% ^! m. s2 o& a
0040C60C |. 74 10 |je short 0040C61E4 B. M' ]4 a0 w8 T y" V
0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]! ~( ]1 n8 X: P- W$ b- b) f
0040C611 |. 83C6 02 |add esi, 2
+ W# ~: W' @; o0040C614 |. 8847 01 |mov byte ptr [edi+1], al
, d( _5 X5 g' M% S( i1 _6 t* _$ z0040C617 |. 83C7 02 |add edi, 2
, ~3 q5 a r5 C0040C61A |. 3C 00 |cmp al, 0
9 }" k, H2 e( \' _% ]- M0040C61C |.^ 75 E8 \jnz short 0040C606
l# d) b" X( \ p) I0040C61E |> 5F pop edi
/ S" d3 h- l9 g- [ A5 Z4 U: E0040C61F |. 8A1424 mov dl, byte ptr [esp]
, @% h* D) g7 [0 v z9 X0040C622 |. 89E0 mov eax, esp2 c3 K2 f# }. t {6 ~& D
0040C624 |. 84D2 test dl, dl: Z5 p$ P7 u" K* c. i
0040C626 |. 74 09 je short 0040C631+ @6 Z) b; P8 b2 C7 V3 J
0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]
/ b4 t8 f) K' x% K! |0040C62B |. 40 |inc eax
Z; j& x( K" _, G3 z! E9 ~0040C62C |. 45 |inc ebp& z0 e) N4 ?% A7 {& F o
0040C62D |. 84F6 |test dh, dh
- q% k6 o& k$ T. w3 S( ?/ z0040C62F |.^ 75 F7 \jnz short 0040C628+ C5 {. F; `4 F! O+ V/ _
0040C631 |> 81FD D2000000 cmp ebp, 0D24 S# I" {+ D: ~7 Z( N! h7 j4 b
0040C637 |. 0F8E 61010000 jle 0040C79E P: H2 N$ e4 f+ p- P) G6 b& `
0040C63D |. 89EA mov edx, ebp
" W" o0 `& _' A' a! j5 x w0040C63F |. 89E8 mov eax, ebp
+ ]# e: d7 _: i0040C641 |. C1FA 1F sar edx, 1F
; U7 R9 p2 a6 w% K" _# B0040C644 |. C1E2 02 shl edx, 2
* Z. M( {2 H, G8 e: u0040C647 |. 1BC2 sbb eax, edx& @% x: l2 Y: E9 o4 f
0040C649 |. C1F8 02 sar eax, 23 l- g& k ~0 r, j; g: ?
0040C64C |. 89C7 mov edi, eax
; B5 E( f+ S, u: ?0040C64E |. C78424 040100>mov dword ptr [esp+104], 32 d ?: a7 i7 D; m9 n! a6 g4 T
0040C659 |> 89E0 mov eax, esp6 B) B- @( G" Q$ Y/ P
0040C65B |. 31D2 xor edx, edx* F4 z+ x, r" B: c! w; ?0 K0 }
0040C65D |. 8A0C24 mov cl, byte ptr [esp]1 f, e) s5 }5 x5 [" \' o; C9 @1 L
0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx
) q% ~$ v6 S$ i% a: ~' y4 n3 E0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx- R0 r2 C/ f- \% X% ^
0040C66C |. 899424 080100>mov dword ptr [esp+108], edx4 W, o( x. U2 |$ K) [1 J9 J) [
0040C673 |. 89E2 mov edx, esp x9 S( x+ p- J+ b& |% B, [/ z
0040C675 |. 84C9 test cl, cl! A' Y" }' q8 I. b3 u
0040C677 |. 0F84 89000000 je 0040C706
; l7 W% H8 L' A0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]$ M$ J5 J. O6 X
0040C684 |. 4F dec edi" `; C* t/ G/ B% v) B1 M; S
0040C685 |. C1E1 02 shl ecx, 22 d9 |3 D3 v" J9 X' {
0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi6 F4 X- X; @0 P, P; v& h* z1 c- t
0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx
1 |: m- [& l4 S4 X2 H- P0040C696 |> 8A0A mov cl, byte ptr [edx]
* i4 `& ?4 g5 Z# V: j0040C698 |. 80F9 20 cmp cl, 20
! x$ j |" K& v9 P+ F0040C69B |. 0F85 6A010000 jnz 0040C80B
. {) T: R' F2 o* x6 ~0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]
/ E% X- Y) `) M; t9 l0040C6A8 |. 7C 53 jl short 0040C6FD+ u6 A- K* y6 P
0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C] g: }% {6 E# [& B, ~+ M
0040C6B1 |. C602 00 mov byte ptr [edx], 0* F9 g! c7 Q" j# ]" f4 U3 }
0040C6B4 |. 89C6 mov esi, eax
1 [4 P: H1 u$ u2 _; ]! h, N0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]* c1 y0 Z% O1 j1 m$ V! ?7 n
0040C6BC |. 31DB xor ebx, ebx" c1 |7 e0 e8 R1 J4 ~
0040C6BE |. 57 push edi! q! o/ d- C3 d7 X" { u$ O
0040C6BF |> 8A06 /mov al, byte ptr [esi]- @, M8 i) l6 L
0040C6C1 |. 8807 |mov byte ptr [edi], al3 ?* ] [4 n" r. Q$ M: v
0040C6C3 |. 3C 00 |cmp al, 0
* B% K9 d1 o8 a0040C6C5 |. 74 10 |je short 0040C6D7) u3 o; _% u- O8 k: ?7 w
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]
4 p" E) b' g T/ ?% M; [ ]$ e0040C6CA |. 83C6 02 |add esi, 20 g5 E; T& }2 M# u; R! h5 I* R- H- U
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al( h0 e8 ~3 d7 L, g
0040C6D0 |. 83C7 02 |add edi, 2
& G: q+ H+ k6 i! r: W7 m0040C6D3 |. 3C 00 |cmp al, 0. V# N! F5 l2 { ?
0040C6D5 |.^ 75 E8 \jnz short 0040C6BF! b9 u/ ^/ j3 z B6 l( T0 R
0040C6D7 |> 5F pop edi
* e9 H" o7 q3 H4 D" m, R0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
( J: ?7 S* {0 ?2 O6 Q" I" [! K. C* ^0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]0 M# E9 ^! ?9 l. [
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108], |5 P) B' G) Z9 V# G( m1 k
0040C6E9 |. 83EF 04 sub edi, 45 Y% @: R$ B! T$ |
0040C6EC |. 42 inc edx" j+ B# \/ a( r/ x
0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi
- Z% ^6 P5 r e7 \ ]0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx
8 A# k& d# ]3 [3 l6 X- ~0040C6FB |. 89C2 mov edx, eax. m0 ]6 V" n5 o: _
0040C6FD |> 43 inc ebx5 d# F$ T7 R, Q: s4 ^) ~
0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]& q$ a+ g4 D: T) s$ q
0040C701 |. 42 inc edx
/ Y9 Z. `% X* ]9 {0040C702 |. 84ED test ch, ch: q# l. ^( A% J
0040C704 |.^ 75 90 jnz short 0040C696
) K+ Z0 K* y; W7 {4 U, Y/ {0040C706 |> 83FD 10 cmp ebp, 10
: x' o1 U: ^9 c$ R0040C709 |. 7F 05 jg short 0040C710) d6 @8 |* w; u' j% [( R
0040C70B |. BD 20000000 mov ebp, 207 [0 Y: j$ y: f$ D3 R
0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]: y3 W0 A( |7 m2 ^# g
0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]1 M5 h& i3 b$ t8 v
0040C71E |. 85D2 test edx, edx" v# \+ u9 B( a) k+ o
0040C720 |. 7C 23 jl short 0040C745
3 a9 e" O" z! Y9 b0040C722 |. 89C6 mov esi, eax
% h4 S" S' j0 F: U0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]
7 [% U) S$ c( D& G; l) Y0040C72B |. 57 push edi
: [; r6 L1 ?" L6 M0040C72C |> 8A06 /mov al, byte ptr [esi]- G8 F7 e0 m8 H# G$ h
0040C72E |. 8807 |mov byte ptr [edi], al, T6 f w# Z. B D7 \( E5 F% D# B% Q
0040C730 |. 3C 00 |cmp al, 0) P# o3 P$ T5 u+ w
0040C732 |. 74 10 |je short 0040C744
4 K! L+ T4 x; Y3 K, | B8 g0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]5 r1 r- F9 a2 y7 ^
0040C737 |. 83C6 02 |add esi, 23 \: [6 x1 S1 v: J/ q. Y9 P
0040C73A |. 8847 01 |mov byte ptr [edi+1], al
$ B2 Q; i3 w. {* [0040C73D |. 83C7 02 |add edi, 2
+ F+ n. y8 U1 j. s6 r! X0040C740 |. 3C 00 |cmp al, 0
; e+ y$ h5 Q; ~1 v+ |0040C742 |.^ 75 E8 \jnz short 0040C72C
3 d" B2 i r. ^8 x& P/ N- i M0040C744 |> 5F pop edi- r5 W$ O* e( C4 z
0040C745 |> E8 E6500100 call 00421830/ i, ^& h/ r% X E8 q* @& d# h
0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax# d) j8 F, P$ G' r6 u1 k; p
0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]
$ z$ N- k5 y7 s' ~0040C756 |. 40 inc eax: v. q6 _6 b1 ]$ I& G" v3 G
0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax+ }' }: ?2 B8 I# j) L2 w6 H
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1- [$ w' T4 d) I7 Q
0040C766 |. B8 64000000 mov eax, 648 S% Y( _4 \& Q
0040C76B |. 89C2 mov edx, eax
* N) y' _9 `6 f0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]1 q G0 t4 z& ?# }+ K
0040C773 |. C1FA 1F sar edx, 1F7 U: V9 x" Q- d4 }. d
0040C776 |. F7F9 idiv ecx+ M: J4 b2 r9 U o) T
0040C778 |. 89C3 mov ebx, eax
# B- P8 K7 k7 T8 t/ w0040C77A |. 89EA mov edx, ebp
0 G6 Z9 J% a M+ }( [- {* e0040C77C |. 89E8 mov eax, ebp
: M5 Y; B( p1 _& }0 m( o0040C77E |. C1FA 1F sar edx, 1F; N v z3 ?' E; B7 ~
0040C781 |. C1E2 04 shl edx, 40 b: N7 N+ `) \% g3 z7 z
0040C784 |. 1BC2 sbb eax, edx
& d# N9 {# s0 z0040C786 |. C1F8 04 sar eax, 4
" ]! E% e% v3 b- l0040C789 |. 01C3 add ebx, eax
2 Z- f( x/ Z: O2 L% N( O2 e0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx
5 ?1 K* Y2 Q2 r$ F) @* F0040C791 |. 81C4 10010000 add esp, 1102 \# K( t$ B2 a
0040C797 |. 5D pop ebp# {& {* [2 |( ~- Z$ D% S
0040C798 |. 5F pop edi' k3 P) d/ W- v6 i% z; ~3 Q
0040C799 |. 5E pop esi
. k8 ~& i- e* d. N( P K- Y/ b0040C79A |. 5A pop edx2 m6 B% P2 B( I2 e
0040C79B |. 59 pop ecx; j, h( A+ q- ~6 E( _
0040C79C |. 5B pop ebx
2 b- C: M8 h; X3 H! u0040C79D |. C3 retn+ r* j& y* F4 |0 l3 K
0040C79E |> 81FD 8C000000 cmp ebp, 8C' x. _( z( |& A! k* O/ D c$ x
0040C7A4 |. 7C 28 jl short 0040C7CE
# R, w3 L6 W9 T7 `! R7 X8 l0040C7A6 |. 81FD D2000000 cmp ebp, 0D2
4 @" `$ X" Y) x0040C7AC |. 7F 20 jg short 0040C7CE2 C- d6 I& T5 B5 w+ e& j6 E |1 H% A7 H
0040C7AE |. B9 03000000 mov ecx, 3
- t- d5 T/ y+ T( O d0040C7B3 |. 89EA mov edx, ebp
, @ K% x0 V- b( R; J2 D0040C7B5 |. 89E8 mov eax, ebp S9 `( q# R6 i$ C
0040C7B7 |. C1FA 1F sar edx, 1F
, b( { s- {# m" W0040C7BA |. F7F9 idiv ecx
+ F$ i: {1 w3 E' ?0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2
3 d E5 C0 W# I9 r. ?) w0040C7C7 |. 89C7 mov edi, eax* z( B& Q3 z/ g9 w4 f6 b# b
0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659) r* q$ p, j8 G; s& U; f5 Z2 ~" i
0040C7CE |> 83FD 46 cmp ebp, 464 T0 ~% E; |; k6 D# U- @
0040C7D1 |. 7C 25 jl short 0040C7F8
9 I: @ G8 ^) {# n4 b' c6 J5 F5 a( K1 j0040C7D3 |. 81FD 8C000000 cmp ebp, 8C
; }8 A2 c6 N# o0040C7D9 |. 7F 1D jg short 0040C7F83 A4 v1 Q6 S" i; g$ X7 n
0040C7DB |. 89EA mov edx, ebp
! ]* v, s4 f# ?6 q" k0040C7DD |. 89E8 mov eax, ebp' M, D' t5 |$ ?5 s" B' c
0040C7DF |. C1FA 1F sar edx, 1F
& T1 ]9 m( d- b0040C7E2 |. 2BC2 sub eax, edx& g9 U" }3 Z' e0 ^) K. l9 U: J; p
0040C7E4 |. D1F8 sar eax, 1$ |4 s3 [+ C7 n0 d2 _
0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 18 e# K5 m8 J5 i$ L% ~; c7 b
0040C7F1 |. 89C7 mov edi, eax
. i0 H2 N: s4 G" o6 k& d- b# t0040C7F3 |.^ E9 61FEFFFF jmp 0040C659
- _5 `5 n! m8 w% t7 m0040C7F8 |> 31D2 xor edx, edx. \# N2 b7 G" V& }4 ]& X
0040C7FA |. BF 46000000 mov edi, 46
* }7 W2 B7 | W# |) @$ r4 ^, z0 o7 S0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx/ L2 D& K- i, O7 g0 Z
0040C806 |.^ E9 4EFEFFFF jmp 0040C659' r- [( R/ q) G7 ?1 t; @; D) ~
0040C80B |> 80F9 7C cmp cl, 7C, a4 b1 Q' I; [
0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD
3 p2 Q6 r! j) ?0040C814 |. C602 20 mov byte ptr [edx], 20: G, s, b. p/ G1 P$ E6 d6 `2 d
0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD
- q( A& p1 ` P
; a& u5 k2 l' G3 _/ d8 \2 S在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
( e# C! d/ _: a: E7 i6 H估计要汉化就要在上面的代码段下功夫了,以后继续研究。. W6 R# _; i; J- M X9 L7 k9 C
. V* h4 V( y9 z& Y$ \/ r
找到2个俄文的补丁,也许对以后研究有用。8 B; i, W- j; ~. U _
http://www.megaupload.com/?d=EZH6X672
5 c& S& U% x7 ^1 ^http://rapidshare.com/files/94227080/ScratchesDC.7z |