看了一下惊恐鬼屋Scratches这个游戏。
/ h7 o9 k) ?0 w. U包文件有2个,scratches.res和scream.res,, v3 C0 n9 X, z+ x3 j0 v+ C2 F
包文件的格式如下,可以用Game Extractor来解开。
' U f! o# S- |5 z: H Ohttp://wiki.xentax.com/index.php/Scratches_RES& B1 S4 \- ~5 s9 E7 v6 l
从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。
9 I' w' `9 I8 k. Tscream.res里面也有一个字体文件,但是游戏好像没有用到。6 l2 |# S% X+ n3 W r
1 O( \3 B& w% U; e# i) q6 y8 K" p用OD调试后,发现这是一个使用opengl API的游戏。
4 r. R9 i% `7 N! N6 f在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。
7 d3 B) J3 \ R7 j) k; E3 P9 U0 m4 J% q! W) R- _
0040C5D0 /$ 53 push ebx# y7 z) W5 K& ]" `. P9 Q( s
0040C5D1 |. 51 push ecx$ x8 O1 W0 o) [: |
0040C5D2 |. 52 push edx
& D6 Q0 T+ G/ p) u( ^0040C5D3 |. 56 push esi
7 c9 D1 h/ L( L" T# C8 [0040C5D4 |. 57 push edi5 i! h* u$ T5 A: b' c
0040C5D5 |. 55 push ebp8 w8 T6 m7 J6 x0 t$ R
0040C5D6 |. 81EC 10010000 sub esp, 110' A `' [" @% b# B% P
0040C5DC |. 89C6 mov esi, eax
$ c" y. @% O# E/ N0040C5DE |. 89C7 mov edi, eax7 N; ~+ ?: K2 U+ z/ Y" U
0040C5E0 |. 29C9 sub ecx, ecx2 D" ~( q3 i3 d0 _& U. j7 t- J
0040C5E2 |. 49 dec ecx* r* @$ e9 b8 Y2 O
0040C5E3 |. 31C0 xor eax, eax4 a) A* ~$ P! y2 g" `2 } q: `
0040C5E5 |. F2:AE repne scas byte ptr es:[edi]
! Z9 S1 j3 H" D4 y! L! T9 ?! f0040C5E7 |. F7D1 not ecx
) Y) j* z7 g$ W$ _0040C5E9 |. 49 dec ecx
! D' Z/ B7 `" q' {, @' w, [6 Y0040C5EA |. 31DB xor ebx, ebx
, z* I' ?* W# [0040C5EC |. 31ED xor ebp, ebp
0 W1 p" ]. d5 L, S8 g5 m8 ~0040C5EE |. 81F9 00010000 cmp ecx, 100, w: K. }* @2 R' q% |4 i
0040C5F4 |. 72 0D jb short 0040C603! [+ v t, Y8 c
0040C5F6 |. 81C4 10010000 add esp, 110
3 B! O6 b: F4 V, { V) D9 O z6 U0040C5FC |. 5D pop ebp% m ?3 Q. Y; k, X, y* @
0040C5FD |. 5F pop edi
/ w) s7 T; U2 v$ d- o/ F/ X/ w0040C5FE |. 5E pop esi/ S( I) Y( v5 h0 L: L% v: d- M
0040C5FF |. 5A pop edx
' S5 m6 G9 A' T0040C600 |. 59 pop ecx+ t( ^( o0 ]+ |3 Q B4 Q
0040C601 |. 5B pop ebx. u2 P3 o2 l& o' ^# d
0040C602 |. C3 retn
4 K) k: Z1 @) T$ k/ M' r0040C603 |> 89E7 mov edi, esp+ n, ^1 W$ k1 y, u. V+ V. }; x
0040C605 |. 57 push edi& G# }+ k% t" N2 e" b
0040C606 |> 8A06 /mov al, byte ptr [esi]
* t: v( T" P3 `8 V0040C608 |. 8807 |mov byte ptr [edi], al
! D8 C2 N7 _/ O9 d* ^) i0040C60A |. 3C 00 |cmp al, 06 X5 v% E. y8 k2 {( k3 f
0040C60C |. 74 10 |je short 0040C61E. c, T( ^9 E" }
0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]$ d. p0 k( n- n8 L1 F1 R
0040C611 |. 83C6 02 |add esi, 2
; k% b& [) `" S! X0040C614 |. 8847 01 |mov byte ptr [edi+1], al
. K: T3 s: ^0 A0040C617 |. 83C7 02 |add edi, 2
+ R& V4 d+ f K6 Z+ ]0040C61A |. 3C 00 |cmp al, 0( a& f4 y: Q: e5 l. B: o& v
0040C61C |.^ 75 E8 \jnz short 0040C606; m! @! E1 a8 [; o4 t9 d/ p
0040C61E |> 5F pop edi
: J( Q( ^* E% B4 f3 Z0040C61F |. 8A1424 mov dl, byte ptr [esp]# u- I8 V+ L; n: [
0040C622 |. 89E0 mov eax, esp/ V1 D9 k6 H5 @: U7 C0 `
0040C624 |. 84D2 test dl, dl1 m8 [! b0 [' m- x
0040C626 |. 74 09 je short 0040C631& ]: Q7 M6 F) j, k8 I R. J
0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]* A1 z/ M& ]: c3 T" Y% O, Z7 ~4 b Q
0040C62B |. 40 |inc eax
* t5 w3 ~8 G# r( J. k: V: m) f0040C62C |. 45 |inc ebp8 i3 d& Z( {. H# S% l5 M
0040C62D |. 84F6 |test dh, dh
+ {- l, c3 V. h2 }! b- r8 R0040C62F |.^ 75 F7 \jnz short 0040C628; M. P5 W5 X1 A) b
0040C631 |> 81FD D2000000 cmp ebp, 0D2
R( k0 i( [) {0040C637 |. 0F8E 61010000 jle 0040C79E
; {9 T# J d) ]5 q0040C63D |. 89EA mov edx, ebp* Z1 Z" r ^1 a$ o0 G
0040C63F |. 89E8 mov eax, ebp
: s! u4 m6 B, A- _) s0 C" U. U, e0040C641 |. C1FA 1F sar edx, 1F
' n& m+ ^" N- ]; n0040C644 |. C1E2 02 shl edx, 2
) v) Y4 Z% }$ F. h, }3 u0040C647 |. 1BC2 sbb eax, edx
. j' ~. g! Q; q, k, ^$ U0040C649 |. C1F8 02 sar eax, 2( s2 b( T. H' z* t3 _1 V
0040C64C |. 89C7 mov edi, eax
+ j" U' w2 V3 r7 ]9 Q- \: w0040C64E |. C78424 040100>mov dword ptr [esp+104], 3
9 p1 [0 N, k% L0 X3 ~0040C659 |> 89E0 mov eax, esp
7 \2 D3 Z+ N' |0040C65B |. 31D2 xor edx, edx
! t& K( `# Z9 X3 q0040C65D |. 8A0C24 mov cl, byte ptr [esp]
8 d) x+ G* d4 |" E0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx$ {( G9 W5 U5 i6 ?6 k
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx# Q4 H1 a, i/ v! k, {
0040C66C |. 899424 080100>mov dword ptr [esp+108], edx
, P% z0 `* G+ e* T+ Y: I3 j0040C673 |. 89E2 mov edx, esp) y9 e/ p/ w. G8 W' M0 f7 U
0040C675 |. 84C9 test cl, cl7 ?0 Q/ E* I7 z4 \9 c
0040C677 |. 0F84 89000000 je 0040C706! F2 o7 M5 q0 P) O9 I
0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]
) C7 ^, e7 H# K \: L0040C684 |. 4F dec edi3 n, x- Q$ G) J$ [3 O
0040C685 |. C1E1 02 shl ecx, 2
: x8 Q5 D8 d3 b0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi3 [) g8 j0 Q' @
0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx
z& v4 d% E9 {; P, P# h6 Z& o0040C696 |> 8A0A mov cl, byte ptr [edx]
5 y3 G; @- P) J$ P0040C698 |. 80F9 20 cmp cl, 20( t8 |+ L+ a) b1 W. g5 b4 R. s0 W
0040C69B |. 0F85 6A010000 jnz 0040C80B
" D0 L" E) V) s, ?: f% z9 q0 H0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]% M1 v, f( a& N6 n# b# G/ X E5 X8 s4 d
0040C6A8 |. 7C 53 jl short 0040C6FD$ ]" ?- @! k) \4 O" W
0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]3 F- _* d0 z9 R. k
0040C6B1 |. C602 00 mov byte ptr [edx], 03 T# O( P. r! A" B/ |
0040C6B4 |. 89C6 mov esi, eax
& ~0 {# q' m% ]0 ^) P! O, ~0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]
/ I% `; `& u$ s/ b$ b0040C6BC |. 31DB xor ebx, ebx! m7 X& f j3 h h5 a
0040C6BE |. 57 push edi
4 F0 o! D8 z5 x' N) a3 b! D4 N0040C6BF |> 8A06 /mov al, byte ptr [esi]% N+ L( G6 B/ | y; q
0040C6C1 |. 8807 |mov byte ptr [edi], al% x3 H6 C4 u/ Z! E' j- R9 F
0040C6C3 |. 3C 00 |cmp al, 0, |7 G# l$ X+ K) D! O; F
0040C6C5 |. 74 10 |je short 0040C6D7+ |2 M( |4 F9 V4 Q6 M
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]( E1 x" `9 d- G! I
0040C6CA |. 83C6 02 |add esi, 2
( F8 ?( [2 M& c. V% h2 I- h0040C6CD |. 8847 01 |mov byte ptr [edi+1], al/ m8 ^+ B- V: R4 s1 L; `
0040C6D0 |. 83C7 02 |add edi, 2
, W7 _- K) L# M" J/ \0040C6D3 |. 3C 00 |cmp al, 06 b* Y$ x" {2 k. _( n* C, B9 x# |
0040C6D5 |.^ 75 E8 \jnz short 0040C6BF6 e2 d. i0 B8 L4 j) |
0040C6D7 |> 5F pop edi% q5 H9 P4 g9 Y& q) k$ ?
0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]& z. N" v6 r% ?; v
0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]" R: q9 a" ~; @6 E* l: ~$ m& H
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]( B, C* w. m& E$ g) Q; S) P F/ f; A
0040C6E9 |. 83EF 04 sub edi, 4
' h8 L* k6 k, c. K% W2 q% d, v0040C6EC |. 42 inc edx
2 V: S: p+ R6 L2 W& Q% v, [+ [0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi
# @. g: R) l) J$ \% F' L9 R8 ~0 k0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx6 G; f+ m/ v! J: j2 e# M S
0040C6FB |. 89C2 mov edx, eax
, E6 e/ F4 t" _; Q& ]7 u* M0040C6FD |> 43 inc ebx
$ z, @8 [+ c; w0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]' {. D1 c; a, k9 A2 a* d
0040C701 |. 42 inc edx* _, j/ D" C* j- r0 @
0040C702 |. 84ED test ch, ch' ?) a$ W, E; i8 o& {! P8 _- [ ~
0040C704 |.^ 75 90 jnz short 0040C696' a* U) u2 p7 m( n( R
0040C706 |> 83FD 10 cmp ebp, 100 `3 \3 B( v/ y* }% b4 B0 Y
0040C709 |. 7F 05 jg short 0040C710 N: N9 f$ ?7 Y( _: x
0040C70B |. BD 20000000 mov ebp, 20
& B* f; F0 ]* N7 `( F0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]( n) V8 x& }, `
0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]
! @ Y9 ^/ X0 k9 e$ T: g) K0040C71E |. 85D2 test edx, edx9 W# d, l5 |( j& C9 Q# s
0040C720 |. 7C 23 jl short 0040C745
, [: H3 Y- F, o& Z0040C722 |. 89C6 mov esi, eax: p% b1 m4 X' m; p3 k% O
0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]
3 ^3 [1 I9 ~3 ? r V0040C72B |. 57 push edi2 K/ g# `: g9 ~- o
0040C72C |> 8A06 /mov al, byte ptr [esi]9 b+ A4 s* n+ u/ \# s. a A; ?
0040C72E |. 8807 |mov byte ptr [edi], al( D: A9 I5 ~: {0 n6 Z
0040C730 |. 3C 00 |cmp al, 0
$ V6 z) z3 F5 {: x' J' K# q0040C732 |. 74 10 |je short 0040C744
o* U/ n) B4 E0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]- y1 m( N. f$ v
0040C737 |. 83C6 02 |add esi, 2
+ P4 {8 r/ v8 A0040C73A |. 8847 01 |mov byte ptr [edi+1], al* ]/ D) H% i. J8 E0 V) u7 H- D
0040C73D |. 83C7 02 |add edi, 2, e- @3 @* e/ m4 a# j# v# e
0040C740 |. 3C 00 |cmp al, 0
2 l5 ~% P f7 t! l' s) f6 ~3 R0040C742 |.^ 75 E8 \jnz short 0040C72C; e3 [2 Q( e* n3 u" A0 U
0040C744 |> 5F pop edi
! N# I5 K2 d9 Y0040C745 |> E8 E6500100 call 00421830
* C/ F9 [4 S( c/ {, M# u! ]" F1 `0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax
; K8 N0 _8 t$ Q' e8 k. h, @0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]
7 T& Z V1 B- s0 }/ f( C: K+ |0040C756 |. 40 inc eax
8 B* q$ s) \5 W9 y; B9 @/ N0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax4 ?6 H: y1 b$ d+ A
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1
& j7 l& \) M) s" U6 w" `0040C766 |. B8 64000000 mov eax, 642 @ |4 G$ ]( t! U
0040C76B |. 89C2 mov edx, eax
; k+ }5 M0 r* f) w' m( K, Z; N0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]
5 _. k5 v7 |$ S9 C1 N0040C773 |. C1FA 1F sar edx, 1F( S% d' R8 p! F
0040C776 |. F7F9 idiv ecx
% f' R( T0 K4 Z% Z: ^: c% V, p3 ]* z0040C778 |. 89C3 mov ebx, eax
" T" ~1 |2 [! v+ C% m( h0040C77A |. 89EA mov edx, ebp% }+ ~- s: j8 \- U
0040C77C |. 89E8 mov eax, ebp
1 w* d5 n; O3 F. [ p! `9 T0040C77E |. C1FA 1F sar edx, 1F" A" H+ |9 o5 j) U
0040C781 |. C1E2 04 shl edx, 44 ~' H; ?. Q4 _$ H/ G9 n1 N4 ^8 z
0040C784 |. 1BC2 sbb eax, edx4 q' }8 i6 F. s0 h# a/ e
0040C786 |. C1F8 04 sar eax, 4
& H! x! t" u0 k/ u+ \0040C789 |. 01C3 add ebx, eax y, X( r! K4 ~7 ^% q8 u0 t
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx! J$ S: S- Y/ @: Z0 \* M
0040C791 |. 81C4 10010000 add esp, 110
' m9 y) {" g8 w$ h* [ [0040C797 |. 5D pop ebp; D4 x9 D" q# k( A* E k% _
0040C798 |. 5F pop edi
2 m2 F% V- X1 W8 L+ S% e0040C799 |. 5E pop esi* c G( j" a( J5 M# P8 M8 {
0040C79A |. 5A pop edx
+ f* L& ?' A+ l, q8 r2 I- v0040C79B |. 59 pop ecx
( [ u7 G: _( L% c- w# O& A+ o0040C79C |. 5B pop ebx: D3 n9 D4 _5 p. W
0040C79D |. C3 retn
4 K1 ^/ e1 F7 T9 _ R0 E0040C79E |> 81FD 8C000000 cmp ebp, 8C
# w0 L; I E" V: T2 @0040C7A4 |. 7C 28 jl short 0040C7CE
/ Y/ \- A5 o; v( @0040C7A6 |. 81FD D2000000 cmp ebp, 0D2
5 y; W3 u: i+ R: g0040C7AC |. 7F 20 jg short 0040C7CE8 w# L, B; n" l2 j* M; `' D9 H
0040C7AE |. B9 03000000 mov ecx, 3/ _: @. P0 r& f8 N, L& \' V
0040C7B3 |. 89EA mov edx, ebp2 a h b) R# x3 q
0040C7B5 |. 89E8 mov eax, ebp
; U6 Z6 ?" D# I. R2 B) u0040C7B7 |. C1FA 1F sar edx, 1F
' h! J- J) G7 ~" }0040C7BA |. F7F9 idiv ecx5 P# A! |9 C! F* i$ P6 N
0040C7BC |. C78424 040100>mov dword ptr [esp+104], 29 h$ D" a& d" X. v
0040C7C7 |. 89C7 mov edi, eax
$ a. v9 x+ I. L5 t6 v# W9 p3 Z0040C7C9 |.^ E9 8BFEFFFF jmp 0040C6594 ]& ]6 v; V( U
0040C7CE |> 83FD 46 cmp ebp, 46
; k8 |+ c; i5 [0 t, Q' v0040C7D1 |. 7C 25 jl short 0040C7F8, v; `. @2 e2 m: [6 j6 _" _
0040C7D3 |. 81FD 8C000000 cmp ebp, 8C: Z, v+ z6 W0 j6 f, }4 I; V
0040C7D9 |. 7F 1D jg short 0040C7F8
* l+ _1 V7 z: i$ h/ m" w8 b* l0040C7DB |. 89EA mov edx, ebp: ]" _% Z# ?' g- l w
0040C7DD |. 89E8 mov eax, ebp, G4 |% E0 Q8 X! g6 e
0040C7DF |. C1FA 1F sar edx, 1F9 |& I9 h4 o5 ], a& S$ I5 Z) h8 X
0040C7E2 |. 2BC2 sub eax, edx
- j' G) ?& u% l. v0040C7E4 |. D1F8 sar eax, 1- q: n" X; e; W$ M/ K' J n: O9 e. r
0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1
( s9 v, F! B, u0040C7F1 |. 89C7 mov edi, eax/ J' h# E1 H( ]9 }2 T
0040C7F3 |.^ E9 61FEFFFF jmp 0040C6594 U- K4 G: u8 x. e) F, K
0040C7F8 |> 31D2 xor edx, edx
7 P3 m$ ]1 o# ?$ Q. @% U0040C7FA |. BF 46000000 mov edi, 460 w" @, w" N' T" {9 G) u# i
0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx
7 W1 ~" C) d+ W: }. ]. B" D% U0040C806 |.^ E9 4EFEFFFF jmp 0040C659
% L' y- R6 Y- T9 N1 ]+ O# m' b0040C80B |> 80F9 7C cmp cl, 7C
) M/ ]" E( ^1 Y2 W( o0 a0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD' L. _! A9 A. O8 ?( k
0040C814 |. C602 20 mov byte ptr [edx], 20
( k, `& u4 N7 }4 Z: P9 Y k0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD
5 y; x% A$ J# t; ^- [/ d' I, c( n" W3 S; L7 Q
在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。
, C8 L% T7 U1 ~# M% H6 ?1 {估计要汉化就要在上面的代码段下功夫了,以后继续研究。
) q; x6 e4 P5 L3 ~$ _8 |$ U( H8 R1 ]7 P! m2 v2 x/ @+ i
找到2个俄文的补丁,也许对以后研究有用。6 b# O S* i2 O8 p3 O
http://www.megaupload.com/?d=EZH6X672/ e* _3 a0 [) A
http://rapidshare.com/files/94227080/ScratchesDC.7z |