冒险解谜游戏中文网 ChinaAVG
标题:
【Directx9游戏汉化 #4】 记忆过载 (Overclocked) 寻找CreateDevice
[打印本页]
作者:
shane007
时间:
2023-8-25 17:45
标题:
【Directx9游戏汉化 #4】 记忆过载 (Overclocked) 寻找CreateDevice
本帖最后由 shane007 于 2023-8-26 16:32 编辑
1 I( |$ q$ q* ?8 z, W
1 M7 l/ c4 D! U3 d. m& k
这个游戏以前分析过,这次再写仔细些,
3 v2 k( N1 D) O1 c( s5 t E
CreateDevice应该就是以下这处了,我用ida pro的F5功能看了一下伪代码,更确定了。
1 d. }- r5 {8 U. J: ^/ Z6 l* v$ U
这游戏构造比较简单,CreateDevice是在exe文件内完成的。dxwnd窗口化成功。
! C% z( b" D b
2 ?- }9 M0 c' H1 {$ y+ M! \' c5 G+ q
.text:0041641A push ecx
2 {4 E$ g% k8 }0 s0 p* ]- A, z3 W# [
.text:0041641B mov [esi+90Dh], dl
$ T. ^" N, m& x" l: ]5 b a
.text:00416421 mov ecx, hWnd
( X" @4 L% E4 @6 f, M
.text:00416427 mov edx, [eax]
X* { \8 C1 N N3 }( {$ I
.text:00416429 mov edx, [edx+40h]
$ S, I& p& R: s: Y( k; s$ \
.text:0041642C push 40h
0 b) ^6 q, y! C3 R4 F2 n- {; K
.text:0041642E push ecx
9 `- [0 }% a2 P" U/ o2 Q
.text:0041642F push 1
$ H' F: u; u2 A' t) v$ ] d0 h0 ?
.text:00416431 push ebx
' ^& I0 u2 P8 q4 Y: P
.text:00416432 push eax
; W4 l: c6 |8 J! S! n
.text:00416433 call edx
复制代码
1 o9 a o5 X1 \: Y* K. y; C
int __thiscall sub_415FF0(char *this)
" M( N: X; `8 Y* M: g) E
{
% p* T$ z& ?, b
char *v1; // esi
3 [' ]% Q: V( n9 [4 u6 t+ c
FILE *v2; // eax
! [: J- ^2 u# _0 ^9 x
IDirect3D9 *v3; // eax
( M, R' D. F4 E9 I f
const char *v4; // ecx
7 \( E+ v! F4 M! a' N) ~$ l
const char *v5; // edi
0 j: v) @+ \: _2 V
const char *v6; // edx
7 _( A+ R% n% i5 y5 A: w* Z2 J- T
const char *v7; // eax
9 [! W8 z5 A q6 N
FILE *v8; // eax
. x( s. o" y o0 o
signed int v9; // ebp
2 w' X6 ?7 Y$ U9 j( O+ C
const char **v10; // eax
; c( h5 o! A$ a. _0 [, l( C: ]2 l
double v11; // st7
' R& j* x( u3 {/ V
double v12; // st6
+ x9 m2 p+ t" E1 @' w S
const char *v13; // ecx
0 j# G# [ C2 q7 ?7 g) M
FILE *v14; // eax
, Y* V1 G; ]3 G: y9 X0 e. p* N
unsigned int v15; // eax
- c* C4 T# X2 m1 N$ A: a; ~
int v16; // ecx
( k- R" U2 Q! D* y1 l
FILE *v17; // eax
6 S& O0 Y: y2 i' |$ `$ i
int v18; // eax
" Q7 e# x: f7 z- ~7 M" d
bool v19; // zf
: ~- |! ]3 I4 x! N! s4 V4 a i# b
int v20; // eax
4 n) M7 \2 k; V
unsigned int v21; // edx
5 R) s- R2 S& h+ n; A& H1 \2 V
bool v22; // sf
& u6 _1 k% B" w6 B( Z
int v23; // eax
* g9 ~9 e$ s6 f8 c, i2 B
int v24; // eax
& N0 P0 A/ U7 m, M3 o$ R
int v25; // ecx
. [! d8 I* m& m3 B7 m
int v26; // eax
8 B& \5 s2 t2 w$ z8 Q% W
int v27; // ecx
4 d/ j. Z4 k; u' F9 k
const char *v28; // eax
! V8 @* J. u4 { u
const char *v29; // edx
4 d5 ?; s6 f4 m. ]! G
FILE *v30; // eax
+ m3 W( V! N7 P/ G( G7 K
void *v31; // eax
, Q+ o, C& @4 F2 ?
double v32; // st7
$ y# z2 z7 a* I- I5 c5 C
_DWORD *v33; // esi
6 [2 P8 `, C# j. i2 f7 }% v1 m- Q
float *v34; // eax
O+ B! e- ?- @2 C' L. g/ _+ B
float v35; // ecx
" v- j6 Y0 v, J% W% S% \
float v36; // edx
& i2 S/ A( \$ Z! S6 F. A' J% G
float v37; // ecx
/ K& m: z( n% g7 u/ H
float v38; // edx
! o& F1 B7 m7 o% q! _
float v39; // ecx
1 v6 v3 f* s c8 ~
float *v40; // eax
6 U7 R4 I r7 x r8 f y1 g+ m. L
float v41; // edx
3 s% Z0 l# B) K: {
float v42; // ecx
1 z9 y& f2 y( G
float v43; // edx
1 c# J5 i7 ?$ T7 |1 `
float *v44; // eax
1 A Y4 J- k! j0 i) f! P. I, p2 \
float v45; // ecx
- O6 y: [* k/ \% T
const char *v47; // ecx
- D( ~. X$ @8 h! } C; ]
const char *v48; // ecx
$ |& t1 n+ q/ \' W& p
signed int v49; // [esp+A0h] [ebp-5Ch]
+ v9 X9 D) C( U/ P. @. e' h
const char *v50; // [esp+A4h] [ebp-58h]
( U' G* q8 _2 y# E+ t
const char *v51; // [esp+A8h] [ebp-54h]
% f$ U: q+ w9 v/ `/ ~+ \
const char *v52; // [esp+ACh] [ebp-50h]
4 x' j% z7 S) o2 f
_DWORD *v53; // [esp+C4h] [ebp-38h]
% c8 ]4 Y. b, y& V g5 s6 W$ v! ~
const char **v54; // [esp+C8h] [ebp-34h]
8 Y" _+ P7 B5 f: n f" \7 N
float v55; // [esp+CCh] [ebp-30h]
" E- s% w& B, P) v$ Y$ W. @! r1 n
const char *v56; // [esp+D0h] [ebp-2Ch]
& C$ O( [& _, s3 A
float v57; // [esp+D4h] [ebp-28h]
! [; d7 j6 c1 |0 V+ h$ C
float v58; // [esp+D8h] [ebp-24h]
: g$ m$ f( ]6 W" L/ Z6 |
float v59; // [esp+DCh] [ebp-20h]
2 Q* d& ]2 j& p9 w" K
char v60; // [esp+E0h] [ebp-1Ch]
8 @; {9 G# O; r
int v61; // [esp+ECh] [ebp-10h]
% d7 i6 ~' k% X6 ?- b
int v62; // [esp+F8h] [ebp-4h]
! V7 u. K5 R: s+ }
& O! l* v% Q- ~6 U5 {, b& K2 A
v1 = this;
4 L8 W" I, A# ? r: ?. b# n
v2 = (FILE *)sub_4D7E8F("Initializing graphics...\n");
# v1 p" Z' Z: k" q+ F$ O( `" N. n* w
fprintf(v2 + 1, v52);
1 Y2 X. h5 d7 T, E
*((_DWORD *)v1 + 492) = 0;
$ B+ }/ f9 n4 X6 {0 Y0 T3 v2 H. }
*((_DWORD *)v1 + 609) = 0;
" |: R' ?1 B. [2 \7 g0 X
*((_DWORD *)v1 + 611) = 0;
- z# Y) X- d: a
*((_DWORD *)v1 + 610) = 0;
, Z6 U/ A2 p# w/ l1 M+ F( D9 m
*((_DWORD *)v1 + 613) = 0;
3 M1 k0 s8 V' n1 @. R/ @- l
*((_DWORD *)v1 + 612) = 0;
4 ?& F% n4 [- C8 V
*((_DWORD *)v1 + 614) = 0;
( ?; s# h [1 {" q$ o3 W6 u
*((_DWORD *)v1 + 601) = 0;
" c+ M6 A2 i9 y+ V% K# y( p
*((_DWORD *)v1 + 600) = 0;
2 q! B+ L# U/ R6 R7 [. g( h. b
*((_DWORD *)v1 + 615) = 0;
6 Z+ Y# v, d; H. N6 z8 }; P# D
*((_DWORD *)v1 + 395) = 0;
U- ^% b! b2 F" V4 t2 p) U. @# O
*((_DWORD *)v1 + 488) = 0;
" _0 e, w2 S3 c, E1 e
*((_DWORD *)v1 + 486) = 0;
; q/ g! H, E9 p
*((_DWORD *)v1 + 487) = 0;
1 c4 F$ k, E- \4 d- J4 A
*((_DWORD *)v1 + 489) = 0;
1 I5 j0 |; L& Z/ G* y$ G
*((_DWORD *)v1 + 491) = 0;
, H5 Z0 r& o* l# A
*((_DWORD *)v1 + 514) = 0;
& A" B* ^ O# Y
*((_DWORD *)v1 + 597) = 0;
4 w P, m1 b7 T% `! {2 _% A
v53 = v1 + 1968;
9 z/ F9 l$ d! y% f
*((_DWORD *)v1 + 498) = 0;
: l0 a' Z- y7 V6 w
*((_DWORD *)v1 + 499) = 0;
8 x% A7 C$ z% W. n, h/ p! H
*((_DWORD *)v1 + 500) = 0;
# ]1 O E( e$ e
*((_DWORD *)v1 + 501) = 0;
! G1 @" T6 e9 `% a5 G5 |3 k/ E
*((_DWORD *)v1 + 502) = 0;
, {* ^) Q. N! w: X5 j& k
v52 = (const char *)32;
- P$ G. s. S# J& K4 g2 p) K+ b
*((_DWORD *)v1 + 578) = 0;
9 D$ V9 l# T+ q6 s# y
v1[2316] = 1;
2 p& o& X) ?! b) b {5 R
v1[2476] = 0;
1 _2 n4 r2 w% J. e# p
v3 = Direct3DCreate9((UINT)v52);
: ~( ?1 _4 ?) L8 z/ [$ K9 e- F
*((_DWORD *)v1 + 384) = v3;
$ E* u, V/ P8 O
if ( !v3 )
7 D: y! f# l5 m1 [: n
{
+ ?4 w& e+ [+ _" x- X3 H
v5 = v56;
& i Y0 [% {3 g0 w a& Q
goto LABEL_27;
& t2 ?' y6 J% |/ b5 P0 ]& y/ p& C
}
5 @6 Q* {+ z7 x6 N3 z8 p! Z
v5 = (const char *)v3->lpVtbl->GetAdapterDisplayMode(v3, 0, (D3DDISPLAYMODE *)&v60);
% N0 t. S6 z- \; G
if ( (signed int)v5 < 0 )
1 k7 s a' H% W R- [+ d& A
goto LABEL_27;
4 x5 ~0 ~! H8 F+ ?
(*(void (__stdcall **)(_DWORD, _DWORD, signed int, char *))(**((_DWORD **)v1 + 384) + 56))(
: S5 d1 y6 w6 t& o9 i/ A
*((_DWORD *)v1 + 384),
3 h- H' }1 c' k
0,
& _; C: O5 P9 `* f
1,
+ `9 d) ]+ \- _8 Y* N, O0 T
v1 + 1640);
; y# b3 W* l" T# a/ o: i
memset(v1 + 1584, 0, 0x38u);
8 w' Y2 n( X% T( e F2 }
*((_DWORD *)v1 + 404) = 0;
$ q; Q6 N. ^ A8 }# g) x1 p% T
*((_DWORD *)v1 + 402) = 1;
# N" v; }2 J K; W8 `
*((_DWORD *)v1 + 403) = hWnd;
3 M+ F$ r5 f' ?% C; k
*((_DWORD *)v1 + 407) = 0;
5 v7 o: x8 p" ?) E$ C' }
*((_DWORD *)v1 + 399) = 1;
$ ]. A$ u7 S" x
*((_DWORD *)v1 + 398) = 21;
4 t5 T# }7 H# \! M$ ?2 u9 A
*((_DWORD *)v1 + 405) = 0;
/ ]8 g; b# U: |$ Z
*((_DWORD *)v1 + 522) = (unsigned __int16)word_558176;
: N! c' I& g- h: s6 N' C% V* N
v6 = (const char *)word_558174;
9 |# Y4 d% l3 }. e- [$ a
*((_DWORD *)v1 + 523) = word_558174;
$ Y7 @6 G3 j' {! }. J
v7 = (const char *)*((_DWORD *)v1 + 522);
, G; {9 N6 @% ~" x( T* {& F
v52 = v6;
' u6 ]# |4 J0 c
v51 = v7;
; V. i. \* l- K0 Z* c
v50 = "Screen resolution is %d x %d.\n";
. \7 ?; @ a* S2 X, S+ q
v1[2076] = *(_DWORD *)&word_558174 == 67109632;
0 \' Z S! x9 K0 v% y0 l& }/ |7 W
v8 = (FILE *)sub_4D7E8F(v50);
. Q' r U- r' C- L0 I0 a
fprintf(v8 + 1, v50);
! u. s2 r: ]1 Y4 [+ s" r
v9 = *((_DWORD *)v1 + 522);
! J' T' E$ q) c; B( ^
v54 = (const char **)*((_DWORD *)v1 + 523);
7 x p' H6 g6 {! r! x9 H/ `8 U; A
v10 = v54;
9 S% k5 m) u2 D6 h. ^6 t
*((_DWORD *)v1 + 396) = v9;
: z% F0 F- J; t: i' @+ n, O
*((_DWORD *)v1 + 397) = v10;
7 r! P- B" W" K: F; G/ m
v55 = (double)v9 * 0.0009765625;
- t q" E* J- k
v11 = v55;
6 ]5 E! I. H- g1 o
*((float *)v1 + 520) = v55;
& f& C2 A! M8 N' N% {+ P
v55 = (double)(signed int)v54 / 768.0;
m3 B2 {& C- f ?! d) I
v12 = v55;
. g a2 n8 l/ B
*((float *)v1 + 521) = v55;
4 I. M) W% Q/ e/ J1 o
*((_DWORD *)v1 + 524) = (signed int)(v11 * 1024.0);
5 e! x; H( u: [- y
v52 = (const char *)1;
1 o0 I4 ?. |+ k8 ]
v51 = (const char *)(v54 + 11);
2 I9 J( N5 E: Z3 I2 n1 D
v50 = (const char *)(v9 + 6);
7 y. N" t" U2 H
*((_DWORD *)v1 + 525) = (signed int)(v12 * 512.0);
7 s7 M+ ~2 I+ P5 v
*((_DWORD *)v1 + 515) = 0;
" ?, y! R* f- k- D3 |; f) ?
*((_DWORD *)v1 + 517) = 1024;
3 C- `4 F) n/ K* P- f
*((_DWORD *)v1 + 516) = 128;
" L/ u9 s' O! n' _2 z
*((_DWORD *)v1 + 518) = 640;
( V* t! G i( t+ O9 v9 c
MoveWindow(hWnd, 0, 0, (int)v50, (int)v51, (BOOL)v52);
' E! U7 D& f# W+ B$ U2 Z8 e* K3 g
if ( (*(int (__stdcall **)(_DWORD, _DWORD, signed int, int, signed int, signed int))(**((_DWORD **)v1 + 384) + 48))(
+ L, a; M0 @# x4 _0 {4 G
*((_DWORD *)v1 + 384),
5 F5 M- U0 u* ` d$ ^0 y7 l7 b- ~- C
0,
- s% O: u2 b' ]; M3 z
1,
7 d1 a& A" l/ v/ b+ N5 W. m
v61,
; _% Q, N3 q, v" c7 E; v
21,
( j" t) ?5 t. [0 |2 ?
75) < 0 )
6 V- N8 C) W& b6 g8 d1 e0 q$ \
{
. ?. c; j) R. D
v52 = v5;
- q+ n) d( |& c! U4 f! T l
v51 = v13;
- I6 R- s8 |" `' S
v55 = COERCE_FLOAT(&v51);
5 o/ c& S' J5 f
sub_456DD0("Direct3D initialization failed. No appropriate Depth/Stencil-Buffer-Format found.");
$ h/ U/ w5 { `% N: ~
v50 = v47;
9 x7 P* q; q/ z. i0 \
v54 = &v50;
5 ^$ \$ V* S1 O0 w0 Y( A; q
v62 = 0;
. W+ p/ k' |: p5 @* w
sub_456DD0("cCougarGraphics::cCougarGraphics");
4 a3 ?1 d1 H1 ?" h3 y9 |9 a
v49 = 118;
u8 K$ h# M, n8 y
goto LABEL_28;
) q: s1 j0 C7 i* w
}
: a3 i0 t& H3 U& X0 |) [0 _, o$ C
v52 = "Depth/Stencil Buffer is D24S8.\n";
# |( S3 K' f7 V; s1 h5 X
*((_DWORD *)v1 + 576) = 24;
6 T7 A3 [9 }, N; L& q# N
*((_DWORD *)v1 + 577) = 8;
( x: ]0 t& e/ i6 u* c" E
*((_DWORD *)v1 + 406) = 75;
9 m; D& e6 J- f5 h
v14 = (FILE *)sub_4D7E8F(v52);
" R" k7 Y! {2 J( D* Q
fprintf(v14 + 1, v52);
, O/ d0 M) ?+ q, Z7 u* Y
*((_DWORD *)v1 + 409) = 1;
2 X. r1 W+ Q8 i# F+ C D) ?) ~
if ( dword_558178 != 4
" ~' h% w4 o6 Y6 U( Z5 ?( u
|| (*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, _DWORD))(**((_DWORD **)v1 + 384)
\! d+ s9 r @1 w) t0 @$ i- b) [
+ 44))(
# b. _" i3 r I' j8 [% e
*((_DWORD *)v1 + 384),
7 J% g% h3 O% G9 A+ v. g/ ^% @
0,
. ^% Z: L2 K% H
1,
9 M+ c: V/ H* l/ j0 c
21,
0 Q6 s/ [! ?# Z" Z9 L- D% C/ j
*((_DWORD *)v1 + 404),
' u8 p, f0 S4 v' e2 t4 j
4,
& v8 a& x5 T4 G7 U% P& K
0) )
- s; s4 w8 k+ z
{
9 t( |) {8 D: @
if ( dword_558178 != 2
t" d' s/ V( `
|| (*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, _DWORD))(**((_DWORD **)v1 + 384)
/ u* Y8 u) \. w! _
+ 44))(
9 C& d+ Q2 S. ?1 Q' e, n
*((_DWORD *)v1 + 384),
H3 @" Z# G+ \8 O7 u4 R7 F' A) K4 n
0,
( k8 T# c1 F8 | G$ n( U
1,
% X1 U" U7 e5 l7 e
21,
& L* ~3 P, I U4 Y: ~
*((_DWORD *)v1 + 404),
! Z9 Y( y, `: j, y4 \
2,
& v9 l1 K) `2 u8 h G% U
0) )
. v5 f& e1 q$ X$ l# @# i4 Q4 n( V1 ]
{
( @% P# i- P9 w# [# P/ X; C
if ( (unsigned int)dword_558178 > 0
. V+ M" G- G- D) ^7 k; _) [
&& !(*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, const char **))(**((_DWORD **)v1 + 384) + 44))(
) I# y1 H% s& O* Z: k* S% A
*((_DWORD *)v1 + 384),
1 K7 K5 l3 {0 G* }
0,
4 _( b2 @& }+ I7 O' w4 @
1,
2 T9 O# ]" W, E% a+ i- B
21,
2 M) ^( |" R4 c, c9 P0 u! W
*((_DWORD *)v1 + 404),
! u/ y% N( A+ ]3 g* W7 A8 C! ^
1,
: p. e9 j: l/ `/ O
&v56) )
$ l& b J+ H; ]
{
- \. X2 y Y$ V7 q5 f1 k
v15 = (unsigned int)v56;
, ` j% Y, c2 }, V
*((_DWORD *)v1 + 400) = 1;
6 U! u P7 w4 G5 h9 k3 |
v16 = dword_558178;
% x/ i+ w& Q) Z! C
if ( dword_558178 >= v15 )
; E8 \- V; e* L6 p3 }$ J8 F/ S5 u# W
v16 = v15;
+ u3 v! C% a; }/ m
*((_DWORD *)v1 + 401) = v16 - 1;
& ]5 n- E: S. p' ?: D6 z
if ( dword_558178 < v15 )
" x+ }. u) R) c+ Z, I, D+ v
v15 = dword_558178;
' e' y1 t+ b" s6 n \
*((_DWORD *)v1 + 578) = v15;
+ O& Z+ h3 x& h5 e' L3 ^4 Z
}
$ u" m. F& M. o8 k- J. [ I
}
% Y/ j6 K. c- v! @; u
else
0 m) l* X# z. D! ?6 n# W) l
{
0 g0 x, ^% r7 t
*((_DWORD *)v1 + 400) = 2;
8 Q7 i3 S% Q+ O8 X# o
*((_DWORD *)v1 + 578) = 2;
8 i( }9 r/ c7 |% R) K$ n
}
3 m" t5 b, ^; _# f; |- ^
}
) b( x" G+ Y0 r. y8 @2 K1 o
else
) V, g1 i* G, q% @
{
" B& D' g$ K5 g
*((_DWORD *)v1 + 400) = 4;
* Q, a% }' A) f4 A
*((_DWORD *)v1 + 578) = 4;
( o9 U8 Y# s' t; D7 U
}
/ }* h5 W/ N. m W1 e2 u
v52 = (const char *)*((_DWORD *)v1 + 578);
# P3 S& z S3 E
v17 = (FILE *)sub_4D7E8F("AntiAliasing is %d.\n");
( @% I0 q; Y& k5 r4 S
fprintf(v17 + 1, v51);
" O& Y% Q4 o8 Y& Y/ E
v18 = *((_DWORD *)v1 + 384);
4 ]! h7 X# P. z9 t% Y% W
v19 = *((_DWORD *)v1 + 578) == 0;
8 T+ J1 A. D; N$ e2 ^3 k; z X
v52 = (const char *)827611204;
. W$ A0 o! T6 F) U% ?
v51 = (const char *)3;
1 ^0 K8 S8 H# v' R* U
v50 = 0;
& I1 f" Y0 ?- n) P e
*((_DWORD *)v1 + 402) = 2 * v19 + 1;
/ c, j" R5 C5 V4 x2 h
v20 = (*(int (__stdcall **)(int, _DWORD, signed int, int, const char *, const char *, const char *))(*(_DWORD *)v18 + 40))(
$ p* j& i, @. q5 J6 k
v18,
3 [: M- k/ z' E5 d/ z
0,
7 F; t2 A. N, l3 q# f/ f! I
1,
2 z4 a" k1 G$ K& H1 C( d7 Q
v61,
% { X+ ~6 ~! Z5 z- K5 e d
v50,
: o j, i, I) Z4 B
v51,
2 P' R& a2 u& S7 N* q
v52);
$ }4 e+ ]9 V8 v7 z
v21 = *((_DWORD *)v1 + 425);
3 v9 h1 V6 ^3 W6 m$ ?5 d
v22 = v20 < 0;
/ ^, n1 G. f% w* @: z/ M& ^
v23 = *((_DWORD *)v1 + 384);
9 e# V8 } S0 a5 u @
v1[2316] = !v22;
0 w1 v/ E7 b$ ~/ k
v52 = v1 + 1540;
2 s& I; @: a4 R2 R& F# J! v
v51 = v1 + 1584;
5 p9 G" }# E8 |' d2 f# k( @& p
v1[2317] = (v21 >> 14) & 1;
P* Q4 ]' t3 G! S: C, f
v5 = (const char *)(*(int (__stdcall **)(int, _DWORD, signed int, HWND, signed int, const char *, const char *))(*(_DWORD *)v23 + 64))(
% M6 u# m# ]6 A( Q
v23,
! h5 l( D* ^( h% \' m, _
0,
2 u: \; w! |3 F$ z' w+ J+ x9 P/ z
1,
) {% C. _" K7 E1 a3 x" c
hWnd,
6 u2 O/ y: y$ n g" p& l9 G Y- Z4 ]3 _
64,
. [' l; ?# w! x, L: ?3 A
v51,
0 o) t/ y- `6 t; @' `
v52);
& u) |9 E" f* R& o
if ( (signed int)v5 < 0 )
/ p' ^- C( Q% W7 ?5 E
goto LABEL_27;
' L, y2 G7 K s& _+ u5 ~! q# A% a
if ( dword_558180 && ((v24 = *((_DWORD *)v1 + 425), v24 & 2) || v24 & 0x100) )
6 ^/ p. i, D( d6 s
{
: S8 C& b+ n5 P6 O8 q* h8 g
v25 = *((_DWORD *)v1 + 609);
0 }. d5 L% u4 @2 A: u9 Z
v26 = sub_418670(*((_DWORD *)v1 + 522));
# g6 h5 l) P3 ~4 j6 K
v52 = (const char *)*((_DWORD *)v1 + 523);
4 f, r: ?$ b2 L/ }
v27 = *((_DWORD *)v1 + 609);
) p9 R( L7 T9 W, ]' |
*((_DWORD *)v1 + 496) = v26;
% f0 `* \4 D) K O: r* Z/ P
v28 = (const char *)sub_418670(v52);
- H; _% X/ F; c! A
}
: t5 p1 i8 Q O, e5 z% S' A
else
; @. s6 x( ^4 s2 H; g2 A7 N: h
{
]2 i( V& E+ @, ?4 M2 G, V9 O
v28 = (const char *)*((_DWORD *)v1 + 523);
9 ^4 j) r2 g I5 y
*((_DWORD *)v1 + 496) = *((_DWORD *)v1 + 522);
0 q# g- C2 L6 M# P( S
}
* |/ X! `$ W: k
v29 = (const char *)*((_DWORD *)v1 + 496);
3 A- {9 y, Y) r6 I! M
v52 = v28;
/ U' d& l& i7 \$ X1 N
v51 = v29;
8 R2 J E7 w0 d$ B* n f H
v50 = "PostProcess Surface is %d x %d.\n";
0 T3 b4 I+ \3 S8 e0 h7 L' \
*((_DWORD *)v1 + 497) = v28;
: t: h: q+ c4 D' X; o" h
v30 = (FILE *)sub_4D7E8F(v50);
( u: s$ ?2 R! U7 \. I( T
fprintf(v30 + 1, v50);
1 a. J, B+ l, j3 _+ Q* ~9 H
(*(void (__stdcall **)(_DWORD, _DWORD, char *))(**((_DWORD **)v1 + 385) + 88))(*((_DWORD *)v1 + 385), 0, v1);
6 p$ h1 X- |* k* R' \1 K
sub_413100(v1);
A4 D# B W1 g9 I) E2 A6 P
sub_411D60(v1);
/ y# r, R& W" r% _. h
v31 = malloc(0x78u);
# }7 o( [6 U1 |4 X! N
v32 = -0.5 / (double)*((signed int *)v1 + 522);
# ^, _- r0 h& V3 C; ` d! t8 R
*((_DWORD *)v1 + 599) = v31;
5 a% ?* K4 e$ Q2 @
*((_DWORD *)v1 + 600) = 0;
. g- a, O, K$ r( B3 C( _& C7 M
*((float *)v1 + 526) = v32;
7 b% Q _0 b$ Q1 m- w/ v: M* Q! W# v
*((float *)v1 + 527) = -0.5 / (double)*((signed int *)v1 + 523);
: {. r5 q3 y) g" G; F H2 S
sub_411CC0(v1);
, q1 h+ ]" M& D; m: ?, K9 F1 p
v33 = v53;
3 o z3 h1 o0 c
v5 = (const char *)(*(int (__stdcall **)(int, signed int, signed int, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)dword_559B7C + 104))(
# _0 `5 W, E4 T& n* k
dword_559B7C,
1 W$ ?+ I# ~$ S, q
80,
Z; s: D7 ] u" X. }3 B
8,
+ K9 C' c* C0 g9 N, z# t
258,
# u4 j& Y# ~/ l. k! }5 y3 t& @
1,
% }9 W8 C/ E' p
v53,
. u. f5 A/ G7 a4 ?/ l
0);
4 F: F8 f ?$ g3 N
if ( (signed int)v5 < 0 )
; |. P# w7 u. }4 [9 O0 a) S
{
/ H+ }# f' Y$ G9 }9 f) J$ q% _; h9 h
LABEL_27:
; H4 ^6 ~! d `$ T0 q
v52 = v5;
$ u- ^) g- m5 P9 \! k
v51 = v4;
' U2 {8 K" P- k3 N4 }
v55 = COERCE_FLOAT(&v51);
( y- a# z3 ]5 L. @+ w
sub_456DD0("Direct3D initialization failed.");
( \/ H( {8 E: ?" k q
v50 = v48;
; M. D. j6 F- R, {/ B
v54 = &v50;
V2 a5 x# _& w8 Q# L' |7 @3 S
v62 = 1;
; f7 `. v! k7 k8 X
sub_456DD0("cCougarGraphics::cCougarGraphics");
" a- Q& I, w7 O! W7 b/ F
v49 = 205;
& M' ]" g: ~$ v3 v1 c$ J2 U
LABEL_28:
) y8 U+ R/ @, f+ ^
v62 = -1;
: R% z4 d" q9 f- f. @! f
sub_40CB30(1, ".\\source\\class_graphics.cpp", v49, (char)v50, (char)v51, v52);
8 S# f; h$ a* B7 c. s: {6 @
}
2 R+ l I/ K' _+ g, j
(*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD **, _DWORD))(*(_DWORD *)*v53 + 44))(*v53, 0, 0, &v53, 0);
5 M) Z0 I7 v! R
v58 = -1.0;
% O0 w2 Q& ^5 Z# ~ m2 J1 k& O
*(float *)v53 = -1.0;
i1 T( ?, a; p' a/ ]
v59 = 1.0;
1 q- D+ o; \) f4 g0 l/ ]% u
*((float *)v53 + 1) = v58;
4 v( Y0 p2 G1 ?: z9 f1 `
v57 = -1.0;
6 e, D) p+ I2 P B. q4 S
v58 = 1.0;
: D* g* _" } M5 p8 T
*((float *)v53 + 2) = v59;
! u/ P$ e- [& S6 B- P% @
v59 = 1.0;
9 W" a. @" m) Y' T- M3 S! k, a
v34 = (float *)v53;
X; B! {4 E6 Z+ T& Q
v35 = v57;
4 Z# R4 d: l. g0 N
v57 = 1.0;
: L* m f' C9 d* G h, ?
v36 = v58;
7 l ^* }0 C" j$ j7 p
*((float *)v53 + 5) = v35;
9 `8 Q% A+ U" g* O
v37 = v59;
( M# y, ^9 M. I, g/ A B5 }5 S
v59 = 1.0;
- q- H8 d1 N! r" C) y6 ~9 C
v34[6] = v36;
1 ]% o+ L- k6 q
v38 = v57;
) Y" B$ M" t, I" e
v58 = -1.0;
% d4 g1 u# ]; I G7 O: R6 Y
v34[7] = v37;
! r8 t0 t1 z" k3 b" f2 T
v39 = v58;
0 D2 a1 r5 a) b; @3 |1 U0 `
v57 = 1.0;
/ |# E1 a4 |1 W: S/ K( a
v58 = 1.0;
% A+ t, ]! s. z3 n! G& A0 a
v40 = (float *)v53;
6 r% t9 q: ~* f2 [* ~6 k) O6 A
*((float *)v53 + 10) = v38;
" v6 l' Y5 p1 O6 E* B
v41 = v59;
3 `' c. a1 B5 v% J5 ~+ N
v59 = 1.0;
% {& _! E' u+ |3 P4 H7 v
v40[11] = v39;
h8 l9 e4 D5 W6 ]& g K
v42 = v57;
8 g7 M6 d% E1 f4 _
v40[12] = v41;
$ H/ P# ^" j+ K
v43 = v58;
9 l5 a$ s6 [0 Q
v44 = (float *)v53;
0 \7 r! g) V. r5 G$ \. y( Y- }
*((float *)v53 + 15) = v42;
# W8 N2 z5 O+ E# Q' ~( P
v45 = v59;
* e c! H: h3 s! L6 I
v44[16] = v43;
5 f& z, |( P: E |4 ^
v44[17] = v45;
! C2 x8 P5 ^$ s7 A7 |4 q; q
*((float *)v53 + 3) = 0.000099999997;
! c4 t9 ?- f) }
*((float *)v53 + 4) = 1.0001;
C+ v3 ^& i) q9 e v1 `2 g
*((float *)v53 + 8) = 0.000099999997;
- V4 Q# I! x$ {1 ^+ ^, F, m
*((float *)v53 + 9) = 0.000099999997;
& r. h+ g3 z5 @$ r5 a2 n! u
*((float *)v53 + 13) = 1.0001;
7 t0 n$ ]* `" F; w* \( {
*((float *)v53 + 14) = 1.0001;
& W5 ~/ z3 ]; ^2 |* Q V
*((float *)v53 + 18) = 1.0001;
4 o1 U5 b \7 Y6 a
*((float *)v53 + 19) = 0.000099999997;
. o! j" M& |5 p6 N# F
(*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v33 + 48))(*v33);
( \, B4 F! L1 ~3 R& P0 c# F4 v
return 0;
; T2 G# W" d; j9 q% \6 [' Z
}
复制代码
3 M& H. B! U/ ?7 I% i( j6 T0 F `
用Cheatengin寻找一个字幕之后,在以下地方断下
0 [8 k* ]9 R( ^7 p, A# \) x( t
<div>ocd.exe+425B9 - 0FB6 D9 - movzx ebx,cl</div><div>004425B9</div>
复制代码
: j @; q% H/ L2 Y" V3 h
% |$ |6 J( ?# }( ~
在ida pro下查看,是这个函数,从代码看a2字符像是索引号。
4 z- t5 S5 A+ ^3 m) K8 V8 Y8 v' f
稍后需要仔细分析。字幕显示函数应该在本函数上下。
* A8 Y( L. W9 p; g- C: {/ b
int __thiscall sub_442510(unsigned __int8 **this, int a2)
复制代码
* j. q7 Z. Q+ Z: T
. T/ X: y8 p* s& }% Q$ e1 E
6 a2 o+ ]/ g$ S7 E5 h
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2