看了一下惊恐鬼屋Scratches这个游戏。2 O8 r% c1 T! v4 `2 {
包文件有2个,scratches.res和scream.res,
" w& k3 t) u* B- R包文件的格式如下,可以用Game Extractor来解开。
4 ]7 z& Z g1 p$ X- Phttp://wiki.xentax.com/index.php/Scratches_RES
/ ^! E2 _* ^, B; \2 o& l从scratches.res里面解出一个font-michael.tga文件,就是在游戏利用的字体。8 A5 V& C% ?% }& W8 Z
scream.res里面也有一个字体文件,但是游戏好像没有用到。) t7 I: `9 I; S+ U1 U x
" _! P0 O) k- x3 X% @2 W3 v6 O' Y& F, k
用OD调试后,发现这是一个使用opengl API的游戏。
% N. _ H% e2 K# x% B9 E# n0 {在某句字幕上下了内存断点,断下来之后找到了和显示有关的代码段。1 c4 S0 R- k3 V# {8 ~: J( N
! u1 H q+ `/ q4 G* Y6 e0040C5D0 /$ 53 push ebx
4 f9 s3 D) ~ y4 f0040C5D1 |. 51 push ecx' d( G& l/ g8 E* I
0040C5D2 |. 52 push edx; H7 @: D8 s6 K8 @6 Q; ]
0040C5D3 |. 56 push esi
; \0 a# Q6 ^; z* q& D0040C5D4 |. 57 push edi
) {) G% S( |: J+ u- ]% l) L0040C5D5 |. 55 push ebp
- W. Q! C5 t0 u4 Y) l0 x0040C5D6 |. 81EC 10010000 sub esp, 110 w1 {' }; j: U7 k4 H& T
0040C5DC |. 89C6 mov esi, eax- q: O7 F$ A0 L
0040C5DE |. 89C7 mov edi, eax
; N' @& O% M2 W5 {; o' U4 T0040C5E0 |. 29C9 sub ecx, ecx
3 l* g, z8 U2 \" q' m$ ?7 V0040C5E2 |. 49 dec ecx
5 f. H, E2 D/ N" O, D/ ]0 v9 d, L0040C5E3 |. 31C0 xor eax, eax. A8 c5 W- v; ?* n2 L$ k. t7 i
0040C5E5 |. F2:AE repne scas byte ptr es:[edi]. F4 |7 B/ r+ S3 P
0040C5E7 |. F7D1 not ecx; A1 u+ T2 T4 U' S$ r. F" n y
0040C5E9 |. 49 dec ecx( R q' t" D* p7 M! V' |) L3 T
0040C5EA |. 31DB xor ebx, ebx6 ?, P- }' s9 ^& _4 r3 \. t
0040C5EC |. 31ED xor ebp, ebp
3 t/ c4 A ]5 Y" d" }+ c0040C5EE |. 81F9 00010000 cmp ecx, 100
* S1 A F! H) j( w/ ^. K0040C5F4 |. 72 0D jb short 0040C603
h$ @& P D+ }9 B# H0040C5F6 |. 81C4 10010000 add esp, 1108 k0 ]0 Z& Y/ v0 [: i0 q
0040C5FC |. 5D pop ebp
8 v$ ?8 F" w L: w7 [0040C5FD |. 5F pop edi6 W" P W1 Y- c
0040C5FE |. 5E pop esi
9 a" b; x F/ V g& j0040C5FF |. 5A pop edx6 d0 Y$ C7 s+ t; f. W
0040C600 |. 59 pop ecx$ {+ g: ], n- ~8 i! N a6 D/ x+ a
0040C601 |. 5B pop ebx( ~* k: B0 \$ {; [) Y& c0 S
0040C602 |. C3 retn& b, ^" U6 W8 ^7 q
0040C603 |> 89E7 mov edi, esp7 ^. E! w2 }) O) I1 u% ~
0040C605 |. 57 push edi& O$ D7 F0 P3 Z& T5 y
0040C606 |> 8A06 /mov al, byte ptr [esi]
' h0 e! q" U$ `. Q. J# I0040C608 |. 8807 |mov byte ptr [edi], al
1 }- F+ C+ ~7 ?1 b: J7 q0040C60A |. 3C 00 |cmp al, 0% e- S5 v- L2 f+ x: Q' z% h4 _
0040C60C |. 74 10 |je short 0040C61E
2 r0 F$ }! u- E3 G* ]0040C60E |. 8A46 01 |mov al, byte ptr [esi+1]
) N6 G0 K7 g0 i/ A, C8 W0040C611 |. 83C6 02 |add esi, 2
5 u4 V7 y' s ~" T$ I7 v7 v0040C614 |. 8847 01 |mov byte ptr [edi+1], al
6 G: K$ k; f: V! G% x0040C617 |. 83C7 02 |add edi, 2" T( }: e$ k9 G
0040C61A |. 3C 00 |cmp al, 07 C* o* h' @9 \8 Z9 g e, p0 ?
0040C61C |.^ 75 E8 \jnz short 0040C606" a# S7 J3 g0 Z3 I
0040C61E |> 5F pop edi! H( M/ `1 X: w" j4 V4 W. B. ~
0040C61F |. 8A1424 mov dl, byte ptr [esp]
* A' o) M9 Z8 d* f! M0040C622 |. 89E0 mov eax, esp9 {; T% Y' N6 v
0040C624 |. 84D2 test dl, dl
/ c% L/ v9 O' y8 G& R0040C626 |. 74 09 je short 0040C631
( w. b+ r6 U# F1 [; s6 d& T0040C628 |> 8A70 01 /mov dh, byte ptr [eax+1]
7 U9 h! X7 p3 @# P! Y0040C62B |. 40 |inc eax
) ]8 G: r2 E; t3 X& _6 t4 g0040C62C |. 45 |inc ebp
" ?: h+ W) u! |& W4 n0040C62D |. 84F6 |test dh, dh0 q: m0 B$ t3 i, l
0040C62F |.^ 75 F7 \jnz short 0040C628
* ~3 Q( c, F- {1 V/ J6 C0040C631 |> 81FD D2000000 cmp ebp, 0D28 l/ R. y. r, T
0040C637 |. 0F8E 61010000 jle 0040C79E
0 l" Q, N: ?+ v+ o9 Q0040C63D |. 89EA mov edx, ebp
7 h6 U( b( e3 x$ [2 H0040C63F |. 89E8 mov eax, ebp
3 f9 v8 u6 k" y& _0040C641 |. C1FA 1F sar edx, 1F
2 t( ~: }- L% P4 {$ G; ^- T9 w0040C644 |. C1E2 02 shl edx, 24 Y1 U9 L: i6 S. Q9 a0 g" @
0040C647 |. 1BC2 sbb eax, edx/ h( e! Z* l2 x2 @: R
0040C649 |. C1F8 02 sar eax, 2) Z; U# p. r7 ?2 X2 O8 W
0040C64C |. 89C7 mov edi, eax
S1 X! O& _8 b3 S0040C64E |. C78424 040100>mov dword ptr [esp+104], 35 d! z+ G7 d, H# i; \% |
0040C659 |> 89E0 mov eax, esp) \% H5 Z/ N9 T" Q9 V# f; J' \) {
0040C65B |. 31D2 xor edx, edx( S7 ?6 s- I5 B# F+ v; N/ d
0040C65D |. 8A0C24 mov cl, byte ptr [esp]
( { j7 C. B! n0040C660 |. 8915 8477EF02 mov dword ptr [2EF7784], edx4 X: f: J4 I" h, U& ~, U
0040C666 |. 8915 8C77EF02 mov dword ptr [2EF778C], edx
+ t6 `. d2 o% t4 f' O+ Q: G) C0 j0040C66C |. 899424 080100>mov dword ptr [esp+108], edx2 U+ w y7 P: [. \- C# y n: d$ j
0040C673 |. 89E2 mov edx, esp
, i2 o8 p. S) _! ^0040C675 |. 84C9 test cl, cl
0 x2 p, i0 y& d/ w# _0040C677 |. 0F84 89000000 je 0040C706
4 k* }! {# ]. d0040C67D |. 8B8C24 040100>mov ecx, dword ptr [esp+104]
6 e8 a( ?2 H+ V- R+ ~* @0040C684 |. 4F dec edi& `- Y' T: Z; b* W! h
0040C685 |. C1E1 02 shl ecx, 2
3 G* f. [2 u% @" u- {3 {0040C688 |. 89BC24 000100>mov dword ptr [esp+100], edi
9 i2 x. s3 p3 p4 Q0040C68F |. 898C24 0C0100>mov dword ptr [esp+10C], ecx
4 t2 W; \5 |: ~; y, e- p+ r0 Z/ |0040C696 |> 8A0A mov cl, byte ptr [edx]
7 c+ d1 J1 ~6 Y0040C698 |. 80F9 20 cmp cl, 20/ w5 M% x' r3 K& T( z5 Y3 d& |: p
0040C69B |. 0F85 6A010000 jnz 0040C80B
1 y( [0 ^3 S$ ^3 q p0040C6A1 |. 3B9C24 000100>cmp ebx, dword ptr [esp+100]
. Y" y4 S9 Y" a) h/ `4 `0040C6A8 |. 7C 53 jl short 0040C6FD' D9 }9 g- ?5 H6 ?: r
0040C6AA |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]( U% B$ \2 d' h1 w$ X4 R' Z1 v
0040C6B1 |. C602 00 mov byte ptr [edx], 0
2 w0 e; N+ q# F. {) C0040C6B4 |. 89C6 mov esi, eax
6 B2 L4 t) M; v! c P0040C6B6 |. 8BBF 7477EF02 mov edi, dword ptr [edi+2EF7774]
3 C. T2 @$ R* u1 W! g" @7 p6 @3 ]$ X0040C6BC |. 31DB xor ebx, ebx
2 N' |3 c$ b9 l2 ?1 s$ L, z+ D2 I0040C6BE |. 57 push edi1 K0 h c$ d% X2 v& N. @! X% X
0040C6BF |> 8A06 /mov al, byte ptr [esi]
$ L4 U1 ]: j/ Z+ l0040C6C1 |. 8807 |mov byte ptr [edi], al
% w& M- w+ N( I( |- z, o0040C6C3 |. 3C 00 |cmp al, 0$ H3 ]# L/ D, Z! @9 C
0040C6C5 |. 74 10 |je short 0040C6D7) o1 @% p5 c2 z. R% ?$ H! m. W
0040C6C7 |. 8A46 01 |mov al, byte ptr [esi+1]
: p) T4 [( r) z0040C6CA |. 83C6 02 |add esi, 21 _: Q/ {/ n! |8 K8 q: `
0040C6CD |. 8847 01 |mov byte ptr [edi+1], al
7 A9 L* M- }! a3 k0040C6D0 |. 83C7 02 |add edi, 2
$ r0 h3 ?7 q- m% F* d. W) |! C0040C6D3 |. 3C 00 |cmp al, 0
, t6 u& q ~- y: ]+ F- \0040C6D5 |.^ 75 E8 \jnz short 0040C6BF" D+ E" K! B5 J, A
0040C6D7 |> 5F pop edi
7 ~$ E& V# r2 I0 E( B3 C7 `0040C6D8 |. 8D42 01 lea eax, dword ptr [edx+1]
0 _% T$ }7 F( ^0040C6DB |. 8BBC24 0C0100>mov edi, dword ptr [esp+10C]/ C; K4 @, A* Y9 \" o" h
0040C6E2 |. 8B9424 080100>mov edx, dword ptr [esp+108]9 N1 O3 q5 E7 m9 g2 |1 o
0040C6E9 |. 83EF 04 sub edi, 4
. O- l/ k8 U6 I# q; K7 E9 _0 M4 W0040C6EC |. 42 inc edx
g- `" n, _1 A' f S2 D; ^* k* b( F0040C6ED |. 89BC24 0C0100>mov dword ptr [esp+10C], edi8 ^0 H. h6 C& d
0040C6F4 |. 899424 080100>mov dword ptr [esp+108], edx, o( n3 T# Q0 Q
0040C6FB |. 89C2 mov edx, eax# d' f- z& B/ I* N
0040C6FD |> 43 inc ebx
. G, _5 O8 E$ M) Q5 z. L( h, x0040C6FE |. 8A6A 01 mov ch, byte ptr [edx+1]
5 b* i" X/ w- j0 i8 Y. X2 F0040C701 |. 42 inc edx6 m/ s0 K5 R! K+ x5 O; o
0040C702 |. 84ED test ch, ch$ p6 V' ]1 [- K9 A5 l. @3 `" e( W" @
0040C704 |.^ 75 90 jnz short 0040C696
! i. |0 ]) i* B5 C2 I) W# n0040C706 |> 83FD 10 cmp ebp, 107 N+ ^" k# \6 o5 a n3 [5 }
0040C709 |. 7F 05 jg short 0040C710* _/ q! [1 M- C; X
0040C70B |. BD 20000000 mov ebp, 209 O) T* P, A x
0040C710 |> 8B9424 040100>mov edx, dword ptr [esp+104]' @7 R5 a2 a% U
0040C717 |. 2B9424 080100>sub edx, dword ptr [esp+108]
# g. P9 S5 f4 }% s0040C71E |. 85D2 test edx, edx
# Q0 i% }% f7 o0040C720 |. 7C 23 jl short 0040C745& r( {$ J. X. ?# w& M- [# Z" q7 n- ~) ]
0040C722 |. 89C6 mov esi, eax' Z& g, O- G; L6 D* M [) F o$ [
0040C724 |. 8B3C95 7477EF>mov edi, dword ptr [edx*4+2EF7774]: ]% u9 A& Q, G9 ]$ p
0040C72B |. 57 push edi. s) j- ]# A4 o* d8 u( a: }
0040C72C |> 8A06 /mov al, byte ptr [esi]; v P; U" z0 z! R
0040C72E |. 8807 |mov byte ptr [edi], al
$ J5 @4 `: Z' U8 U6 {' l0040C730 |. 3C 00 |cmp al, 0% ^8 ]- M8 \( j/ S6 |9 B
0040C732 |. 74 10 |je short 0040C744
0 Z9 `" g! V: \4 z4 Z+ [+ t( m0040C734 |. 8A46 01 |mov al, byte ptr [esi+1]
- a6 |, C% d9 ~& B7 M, A6 n0040C737 |. 83C6 02 |add esi, 2) W8 W$ U" x9 I' G- K
0040C73A |. 8847 01 |mov byte ptr [edi+1], al
" p' m1 a% B+ ?* x2 U3 W; W0040C73D |. 83C7 02 |add edi, 2- ?- ~+ w( S6 g3 i: C' Q
0040C740 |. 3C 00 |cmp al, 0
$ i$ h3 D) t: p: k) {# h, g, g0040C742 |.^ 75 E8 \jnz short 0040C72C* g$ ^$ C+ J% E9 [, \% e
0040C744 |> 5F pop edi3 G$ ?" F+ H7 D
0040C745 |> E8 E6500100 call 004218303 X, E. P! F# e
0040C74A |. A3 8877EF02 mov dword ptr [2EF7788], eax
& O& A, {+ C3 G, F( g/ Z9 |9 B% X' S0040C74F |. 8B8424 040100>mov eax, dword ptr [esp+104]
z) L; [+ o7 G0040C756 |. 40 inc eax: A7 n8 {. L1 D) x: K, x
0040C757 |. A3 8477EF02 mov dword ptr [2EF7784], eax4 k/ f0 f Z2 t: \2 M1 h# z
0040C75C |. C705 8C77EF02>mov dword ptr [2EF778C], 1
- h5 `: M0 T9 [( E8 i- c) i1 t! P0040C766 |. B8 64000000 mov eax, 64
2 U; y, D- V* z* ^' b& V# I0040C76B |. 89C2 mov edx, eax* |; U3 t* b( |: N
0040C76D |. 8B0D E880EF02 mov ecx, dword ptr [2EF80E8]5 s9 D/ I' `; a* g. R2 O6 M, l
0040C773 |. C1FA 1F sar edx, 1F% h4 b4 F5 j6 ]/ j5 x$ Y
0040C776 |. F7F9 idiv ecx
& u* h- ?& m$ E t: m9 g. H2 m0040C778 |. 89C3 mov ebx, eax% O2 |6 X% h3 Y/ f: M+ G
0040C77A |. 89EA mov edx, ebp
# S) |% L- v* n7 o0040C77C |. 89E8 mov eax, ebp K: M. B( p# o; b
0040C77E |. C1FA 1F sar edx, 1F2 d3 s6 F' P$ F3 {1 ?
0040C781 |. C1E2 04 shl edx, 4
* f. V4 e4 k) j7 T5 g8 v9 T0040C784 |. 1BC2 sbb eax, edx
# P& K+ z$ p# d; Y0040C786 |. C1F8 04 sar eax, 44 F( r& F: d( ^; v$ J
0040C789 |. 01C3 add ebx, eax2 F: p& C7 c( Z" o/ D
0040C78B |. 891D 9077EF02 mov dword ptr [2EF7790], ebx
. g1 A8 N* b6 \. F6 H0040C791 |. 81C4 10010000 add esp, 110/ E) A+ o. A6 j# V# z8 n; [
0040C797 |. 5D pop ebp4 H9 \! o# n- c
0040C798 |. 5F pop edi
2 S( W i/ B: {" f0 L( k0040C799 |. 5E pop esi
6 s8 S. ^* v& L. o/ _% {0040C79A |. 5A pop edx
8 {8 g% H8 c) \7 h; t7 L% e0040C79B |. 59 pop ecx
) \7 c. L- C) }0040C79C |. 5B pop ebx# _9 q8 d3 ?" h7 d
0040C79D |. C3 retn+ f& N* g, i' [. m9 s3 ~8 v1 l6 l
0040C79E |> 81FD 8C000000 cmp ebp, 8C. I% J8 c c# K/ P6 ]* J
0040C7A4 |. 7C 28 jl short 0040C7CE
% |% v1 Z) i& h0040C7A6 |. 81FD D2000000 cmp ebp, 0D2
& T$ |7 ?' C+ v& Q+ b/ {0040C7AC |. 7F 20 jg short 0040C7CE
8 Y# {$ Z; i: G0040C7AE |. B9 03000000 mov ecx, 3
' T. g0 [( C* D9 v1 E! r0040C7B3 |. 89EA mov edx, ebp' D" } L* F! W% q4 U/ e
0040C7B5 |. 89E8 mov eax, ebp
g5 w/ n7 W y: I! _# N M9 p0040C7B7 |. C1FA 1F sar edx, 1F1 k6 |% S! O% G7 i9 J4 E
0040C7BA |. F7F9 idiv ecx7 |. L( O/ @! J" ]3 {. p8 G7 V
0040C7BC |. C78424 040100>mov dword ptr [esp+104], 2; u* d# ^' C: j# i5 H
0040C7C7 |. 89C7 mov edi, eax
+ A1 z* w. U$ S+ r, N0040C7C9 |.^ E9 8BFEFFFF jmp 0040C659* M' v; z$ g- g* b# o
0040C7CE |> 83FD 46 cmp ebp, 46- \ D+ d# C: R9 z0 Y
0040C7D1 |. 7C 25 jl short 0040C7F8( `" v+ i, Z3 q5 H- y/ n
0040C7D3 |. 81FD 8C000000 cmp ebp, 8C7 b6 I. F9 V; G
0040C7D9 |. 7F 1D jg short 0040C7F8
7 C) H* {1 [ ]0040C7DB |. 89EA mov edx, ebp
2 {9 M: k6 o8 c% N1 T0 |0040C7DD |. 89E8 mov eax, ebp9 L9 W# ]3 _6 R, M
0040C7DF |. C1FA 1F sar edx, 1F
I( ?! }) c4 H7 o0040C7E2 |. 2BC2 sub eax, edx
^6 B3 q$ q2 g$ a7 r6 y- W$ ?0040C7E4 |. D1F8 sar eax, 1
. h6 v+ ?# `: I4 C; ^. P0040C7E6 |. C78424 040100>mov dword ptr [esp+104], 1" B: y5 x, ]! y2 V
0040C7F1 |. 89C7 mov edi, eax
' O1 \/ V. B) q- v0 i/ y0040C7F3 |.^ E9 61FEFFFF jmp 0040C659" |1 T3 Q6 v2 H6 Z" o( m
0040C7F8 |> 31D2 xor edx, edx) L8 j; B8 f# g
0040C7FA |. BF 46000000 mov edi, 46. F* c: m+ {' o" P
0040C7FF |. 899424 040100>mov dword ptr [esp+104], edx% Y1 B3 [. a F! U' E- t: ~/ N/ L
0040C806 |.^ E9 4EFEFFFF jmp 0040C659
& t: q$ ^* i: Q9 a0040C80B |> 80F9 7C cmp cl, 7C
! s: j/ H! r* A5 b l7 {, x0040C80E |.^ 0F85 E9FEFFFF jnz 0040C6FD3 J4 L6 N9 [7 X
0040C814 |. C602 20 mov byte ptr [edx], 20' J% G7 v- u. i& d+ y0 n K) j+ |
0040C817 \.^ E9 E1FEFFFF jmp 0040C6FD+ C# W8 J3 ^! ?4 k: l& R- Q
% N# o! c6 E( D( j! V
在scratches.sc和scream.sc里面有lua的脚本,保存有字体文件名。8 |# u2 L' F, s* o
估计要汉化就要在上面的代码段下功夫了,以后继续研究。
0 r! ~5 D; b2 I1 q* j( b- a; g- o
" ]2 Y/ X/ b$ x找到2个俄文的补丁,也许对以后研究有用。
) N. V, V% t1 {; G4 s, Chttp://www.megaupload.com/?d=EZH6X672" `! }3 h& s, {: j- x- b
http://rapidshare.com/files/94227080/ScratchesDC.7z |