设为首页收藏本站官方微博

建议 【Directx9游戏汉化 #4】 记忆过载 (Overclocked) 寻找CreateDevice

  [复制链接]
查看: 453|回复: 1
打印 上一主题 下一主题

[建议] 【Directx9游戏汉化 #4】 记忆过载 (Overclocked) 寻找CreateDevice

跳转到指定楼层
楼主
发表于 2023-8-25 17:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【Directx9游戏汉化 #4】 记忆过载 (Overclocked) 寻找CreateDevice

本帖最后由 shane007 于 2023-8-26 16:32 编辑 7 z7 p. [4 U4 b- ?( Y" t9 P

1 _) G+ y6 l! _# I$ {! r这个游戏以前分析过,这次再写仔细些,! y6 Z& R: W& K' }
CreateDevice应该就是以下这处了,我用ida pro的F5功能看了一下伪代码,更确定了。2 m) H- h5 P9 v6 A, }
这游戏构造比较简单,CreateDevice是在exe文件内完成的。dxwnd窗口化成功。
+ X! P* o1 D2 g# @: r6 ~* w3 F! l  d% o
  1. .text:0041641A                 push    ecx
    , r& a3 ^% m0 v+ O2 R
  2. .text:0041641B                 mov     [esi+90Dh], dl
    0 W' e- A# u/ e' S! @
  3. .text:00416421                 mov     ecx, hWnd& F0 y9 B8 u- k1 `
  4. .text:00416427                 mov     edx, [eax], N" \1 B. z& L9 U1 {6 y: R% v
  5. .text:00416429                 mov     edx, [edx+40h]7 O0 G* _4 e  Z7 q7 Y8 o* Y
  6. .text:0041642C                 push    40h
    5 G6 n3 L# P. H2 o2 g" c+ e3 T' x
  7. .text:0041642E                 push    ecx
    ' g4 p" S  X1 M5 c
  8. .text:0041642F                 push    1
    7 [8 j: F6 E  \7 a  M! E7 U
  9. .text:00416431                 push    ebx0 z: T; e) r" ~) }( W
  10. .text:00416432                 push    eax: ?: Z. a4 K8 |) y$ V
  11. .text:00416433                 call    edx
复制代码
  1. 6 P: j4 U' s: \. s0 z1 n- s
  2. int __thiscall sub_415FF0(char *this)
    $ J+ r3 K$ V; ?: n' w0 a% W, ^% G
  3. {9 H$ g. k* [& o; U; W8 ]7 e
  4.   char *v1; // esi
    % P  T9 H5 ^8 N" C$ W2 G0 W
  5.   FILE *v2; // eax
    ' h9 i3 c( v4 a' ^- d: g
  6.   IDirect3D9 *v3; // eax0 u( S* u, A' H
  7.   const char *v4; // ecx. V6 t: \/ _+ a# T
  8.   const char *v5; // edi
    - D* w# ]2 U) E' ]( M
  9.   const char *v6; // edx
    2 ^, y" q' C+ ^: K2 N& x5 \- {
  10.   const char *v7; // eax+ o) e  U/ t) E# H$ V' x
  11.   FILE *v8; // eax
    1 |+ v% Q/ i: w  h& a8 Z: P' q; ^
  12.   signed int v9; // ebp
    3 P2 T- I* N& ^% u  z. M+ y! A
  13.   const char **v10; // eax& r- c& R& M5 s6 m. T; D
  14.   double v11; // st7
    8 @4 z1 i" G2 _' L3 v0 Q
  15.   double v12; // st62 V# T+ @0 u0 K
  16.   const char *v13; // ecx$ F1 q- e3 k" B( h# q: c8 v
  17.   FILE *v14; // eax# f; f0 E/ n; F0 s: h, \$ X) I' H
  18.   unsigned int v15; // eax7 ~) w9 }% B6 t8 h- E
  19.   int v16; // ecx+ ^# \$ W  d) P% Y
  20.   FILE *v17; // eax" @: w. F. X" A. p  Q
  21.   int v18; // eax
    . E' l9 u) @1 j6 @$ m) y
  22.   bool v19; // zf
    % E  P9 s. Y% s0 ]3 O- I
  23.   int v20; // eax
    9 e2 f' [5 M7 H, L' f' D4 A
  24.   unsigned int v21; // edx
    8 [2 C% t% U! }+ l$ B. E
  25.   bool v22; // sf9 [) O& V8 Q; g+ X6 j4 ^- q
  26.   int v23; // eax
    ' i& {4 [6 I' S5 F0 `. r7 U6 I; g9 [
  27.   int v24; // eax
    9 G! |. h" E5 b' u3 f  V2 l) m
  28.   int v25; // ecx
    - m) x4 j( l- M( {, v, X
  29.   int v26; // eax. k  Q! N2 h2 w! J  g/ q
  30.   int v27; // ecx
    0 V# c5 W; R- i7 t- N
  31.   const char *v28; // eax
    0 v) u( }6 x0 ~' k
  32.   const char *v29; // edx
    & n1 @/ ~/ ?; R2 E+ Z9 O
  33.   FILE *v30; // eax
    & N6 w6 F9 i3 v: j; x
  34.   void *v31; // eax
    9 Q7 X5 `- Q' w& G+ M' N
  35.   double v32; // st7
    - m1 n% X! G0 W
  36.   _DWORD *v33; // esi
    9 H6 q3 |$ t% h* u5 C
  37.   float *v34; // eax
    5 V/ ]& s1 }' I* E1 L/ c
  38.   float v35; // ecx2 r/ K9 [; r( ]$ E
  39.   float v36; // edx
    $ G( E/ C' M# z* M
  40.   float v37; // ecx8 }9 V! |7 B9 m* E0 E( h! e4 m
  41.   float v38; // edx$ r7 ]0 n) |0 |) S
  42.   float v39; // ecx) G8 T; o3 y, ^8 C4 H! k
  43.   float *v40; // eax( }; G" o: |5 D# t  ^7 `. T" }5 N
  44.   float v41; // edx
    # p6 X3 B/ L# ]" i! R* Z5 |
  45.   float v42; // ecx/ j8 @, f* J. p6 ^& ?4 X( j7 {
  46.   float v43; // edx# g/ ?& M: p; o' ?
  47.   float *v44; // eax
    ' _% `& ~5 ]) B  Y, a" v' ?  c
  48.   float v45; // ecx: s0 P! Y& i8 p1 ]3 B. j
  49.   const char *v47; // ecx
    5 D  p! [, H: J
  50.   const char *v48; // ecx
    4 S# h0 L# ]! J: ?, S
  51.   signed int v49; // [esp+A0h] [ebp-5Ch]) C$ p9 c. f; k3 y% V# j
  52.   const char *v50; // [esp+A4h] [ebp-58h]
    ! ]0 k; s/ O: `  Y# P* k8 ~8 v- X
  53.   const char *v51; // [esp+A8h] [ebp-54h]* {2 F9 q; J, }& c4 h. D
  54.   const char *v52; // [esp+ACh] [ebp-50h]
    # H& |  E) G% A! O2 A$ d! e
  55.   _DWORD *v53; // [esp+C4h] [ebp-38h]
    # I2 M4 [. m* A; T7 g  m0 P- q
  56.   const char **v54; // [esp+C8h] [ebp-34h]
    , j* }+ X$ b4 Q( F
  57.   float v55; // [esp+CCh] [ebp-30h]
    ; L1 s" B, @/ f" {/ _
  58.   const char *v56; // [esp+D0h] [ebp-2Ch]
    - B% G2 R0 @7 E: |- q! G
  59.   float v57; // [esp+D4h] [ebp-28h]& q4 h9 Q* t4 ^6 u4 x; {! F
  60.   float v58; // [esp+D8h] [ebp-24h]
    8 q: e' ^9 _' |8 h" V0 g  U
  61.   float v59; // [esp+DCh] [ebp-20h]  x9 V: i- v% t5 O
  62.   char v60; // [esp+E0h] [ebp-1Ch]
    ) @/ A; X  {+ \* B- b
  63.   int v61; // [esp+ECh] [ebp-10h]6 L  U; y( |7 ]1 I2 f: {. f3 e8 H
  64.   int v62; // [esp+F8h] [ebp-4h]/ ]3 m8 z4 q( G: j

  65. & P4 _0 u! y& P  R, i( |0 i4 D
  66.   v1 = this;
    $ y) u( m% |" Q
  67.   v2 = (FILE *)sub_4D7E8F("Initializing graphics...\n");
    5 I8 n/ C; F- E; ]
  68.   fprintf(v2 + 1, v52);
    ; f3 w1 H' E7 i! Z1 X, N, f- y
  69.   *((_DWORD *)v1 + 492) = 0;
    # p* e8 e* x. O  o
  70.   *((_DWORD *)v1 + 609) = 0;% N: P' U. }6 t' G- y: W0 K5 q
  71.   *((_DWORD *)v1 + 611) = 0;( L! C# s7 H- \0 g, ]4 C" \
  72.   *((_DWORD *)v1 + 610) = 0;
    7 Q6 X: H8 e1 k& {/ e
  73.   *((_DWORD *)v1 + 613) = 0;+ e0 g/ \0 D9 ?
  74.   *((_DWORD *)v1 + 612) = 0;; h" X0 q' d: ^, A% q6 Y
  75.   *((_DWORD *)v1 + 614) = 0;6 }. h5 c: c  q' J0 f
  76.   *((_DWORD *)v1 + 601) = 0;
    $ |; @( U* R3 R  o) i
  77.   *((_DWORD *)v1 + 600) = 0;9 \( h' r& X5 n) z
  78.   *((_DWORD *)v1 + 615) = 0;- E- T! E. v8 [: ?' k* \
  79.   *((_DWORD *)v1 + 395) = 0;
    $ v( q) o3 h9 [0 B: {+ v* X
  80.   *((_DWORD *)v1 + 488) = 0;4 }0 G3 R( R; f
  81.   *((_DWORD *)v1 + 486) = 0;$ f- h* b' a/ r/ n! R, c$ c$ [' k
  82.   *((_DWORD *)v1 + 487) = 0;
    3 M2 p0 ~3 ~* K0 g$ \
  83.   *((_DWORD *)v1 + 489) = 0;) L8 G6 }( ~4 K* |% ]0 M
  84.   *((_DWORD *)v1 + 491) = 0;/ D& d0 m0 |. f* b/ I4 P5 ~, x
  85.   *((_DWORD *)v1 + 514) = 0;
    7 \3 f. D7 J! m
  86.   *((_DWORD *)v1 + 597) = 0;8 L; R  P! f2 y. B  p. U
  87.   v53 = v1 + 1968;' o6 Y: ]2 c3 U  u# W1 w
  88.   *((_DWORD *)v1 + 498) = 0;& |8 y- r' E* p) W: r0 p! H
  89.   *((_DWORD *)v1 + 499) = 0;/ D' ]# U6 @' t1 {( V/ p
  90.   *((_DWORD *)v1 + 500) = 0;$ U1 z7 e' B9 D- Z% a# U
  91.   *((_DWORD *)v1 + 501) = 0;
    3 V7 G+ n- f- I: h; p5 J
  92.   *((_DWORD *)v1 + 502) = 0;. V' Y) _0 ]% }) N9 }9 l
  93.   v52 = (const char *)32;
    6 t3 x* ?  J' `$ H) R- A: }
  94.   *((_DWORD *)v1 + 578) = 0;
    ) _$ [. e( q2 U9 R9 h& o
  95.   v1[2316] = 1;
    : V" r5 p' `3 |
  96.   v1[2476] = 0;: j; i. `6 O  f" Q/ j- ^, p
  97.   v3 = Direct3DCreate9((UINT)v52);
    8 p1 T5 A2 W1 o+ a7 f9 p8 _
  98.   *((_DWORD *)v1 + 384) = v3;, @& a  y/ a, w4 e  T6 P$ p+ L. |
  99.   if ( !v3 )
    5 z5 j! l( `( p. z0 X) n, F& q" X/ c0 J
  100.   {
    # _6 h" _: p6 Y8 h2 @& I) p! \) S
  101.     v5 = v56;) I# \, Q& [3 K# ?
  102.     goto LABEL_27;
    5 I& a1 m; H) R4 h  a5 `8 F, j+ A
  103.   }
    + T2 j6 O- X( c) w0 Y2 t- Y  c
  104.   v5 = (const char *)v3->lpVtbl->GetAdapterDisplayMode(v3, 0, (D3DDISPLAYMODE *)&v60);3 R0 Z# n- R* d
  105.   if ( (signed int)v5 < 0 )
    $ P8 z: e; s* b$ ]2 U
  106.     goto LABEL_27;5 y5 ?/ L" v$ N( f# U
  107.   (*(void (__stdcall **)(_DWORD, _DWORD, signed int, char *))(**((_DWORD **)v1 + 384) + 56))(( U/ h. ]% |3 u  D( O4 ]3 I1 q
  108.     *((_DWORD *)v1 + 384),; V) U) [0 p+ y
  109.     0,7 O! U3 f4 f$ L; Z# O6 [9 p, V
  110.     1,' Z  |9 L: d3 T
  111.     v1 + 1640);  }% P8 T% r1 C  [% m$ U  }* g
  112.   memset(v1 + 1584, 0, 0x38u);
    9 L" e& J2 E2 F! Z1 R
  113.   *((_DWORD *)v1 + 404) = 0;
    # Q4 G' |( z9 t* f
  114.   *((_DWORD *)v1 + 402) = 1;8 r7 u/ M5 \1 ?" k$ v; w- |$ ^
  115.   *((_DWORD *)v1 + 403) = hWnd;
    9 H$ @9 y7 ~9 t# @5 b2 h9 p
  116.   *((_DWORD *)v1 + 407) = 0;
    ' a, K# A! R& w5 r2 p8 g
  117.   *((_DWORD *)v1 + 399) = 1;5 k# q: C5 U( F) y' M
  118.   *((_DWORD *)v1 + 398) = 21;9 k; L0 t* e2 p3 j! [& p- }
  119.   *((_DWORD *)v1 + 405) = 0;
    7 X* i* [0 r# W
  120.   *((_DWORD *)v1 + 522) = (unsigned __int16)word_558176;
    ' V% x# ^' ], r7 c
  121.   v6 = (const char *)word_558174;4 j5 [! X5 P4 D: X$ f" @
  122.   *((_DWORD *)v1 + 523) = word_558174;
    5 n1 b, i' D2 ]) F% G* d
  123.   v7 = (const char *)*((_DWORD *)v1 + 522);
    ' T! f- |% Q( F2 A- E: _
  124.   v52 = v6;
    - h$ T4 K4 _: |+ o7 x" L' f
  125.   v51 = v7;2 _2 K, Z4 o! h! G7 L9 d
  126.   v50 = "Screen resolution is %d x %d.\n";
    2 m$ T$ k1 [3 y
  127.   v1[2076] = *(_DWORD *)&word_558174 == 67109632;6 u8 V% P$ R0 ^$ B
  128.   v8 = (FILE *)sub_4D7E8F(v50);. f. Y( E( U: F# J0 O; W
  129.   fprintf(v8 + 1, v50);) ]+ V' D" w8 M7 ^" _& ?9 o
  130.   v9 = *((_DWORD *)v1 + 522);
    $ b) ~2 [. p9 m0 g6 K( I# c8 @
  131.   v54 = (const char **)*((_DWORD *)v1 + 523);) z" k7 C7 n% T1 @) u
  132.   v10 = v54;6 V6 h" c% p: Z" h+ o: `1 r
  133.   *((_DWORD *)v1 + 396) = v9;, o* W& c* f6 S0 P/ [" j
  134.   *((_DWORD *)v1 + 397) = v10;
    : a8 V- M6 D! D, \/ M" y
  135.   v55 = (double)v9 * 0.0009765625;
    6 C9 W5 p7 f! t/ A  S, ?
  136.   v11 = v55;% ?/ T; Q; ^0 V3 v# m4 n
  137.   *((float *)v1 + 520) = v55;5 N7 S/ F2 @2 n: r. |
  138.   v55 = (double)(signed int)v54 / 768.0;9 i9 X* {3 }$ M. m# I! Y
  139.   v12 = v55;
    - M& T2 p% B+ G# H- o' Q
  140.   *((float *)v1 + 521) = v55;/ w( @8 e6 m- x3 L- c1 C
  141.   *((_DWORD *)v1 + 524) = (signed int)(v11 * 1024.0);
    " p* W, u/ Z# J
  142.   v52 = (const char *)1;
    ! N9 N9 W, Q" S) S7 s. X) I
  143.   v51 = (const char *)(v54 + 11);
    / @. u4 O8 g0 L0 t9 B$ Y( w
  144.   v50 = (const char *)(v9 + 6);9 a2 o0 n- \% ~3 o; a
  145.   *((_DWORD *)v1 + 525) = (signed int)(v12 * 512.0);
    , j% S( O8 D5 _0 a
  146.   *((_DWORD *)v1 + 515) = 0;" u* L* `0 }+ B$ N; P" t% ~* `
  147.   *((_DWORD *)v1 + 517) = 1024;
    ! u& n- p! {1 r& R
  148.   *((_DWORD *)v1 + 516) = 128;
      i: P8 v# F3 z' `9 k8 T" T
  149.   *((_DWORD *)v1 + 518) = 640;9 E/ T+ A( o6 p
  150.   MoveWindow(hWnd, 0, 0, (int)v50, (int)v51, (BOOL)v52);3 }5 G7 z* u3 ~
  151.   if ( (*(int (__stdcall **)(_DWORD, _DWORD, signed int, int, signed int, signed int))(**((_DWORD **)v1 + 384) + 48))(
      l' z1 b( \$ C, s+ h4 @$ [# s
  152.          *((_DWORD *)v1 + 384),; t. \( ~5 |8 Q
  153.          0,
    2 n- G' i: `! _3 W+ u2 R/ E$ m  v
  154.          1,
    & y$ R% z  u: K; G6 j" j
  155.          v61,
      p5 D) M2 A5 U% {  H
  156.          21,+ N& O! P5 ?2 n$ V
  157.          75) < 0 )9 h; w: D) ^" E2 {9 ?2 d( Q
  158.   {
    ' y- A1 A: q% m+ f) J5 W/ e/ ~
  159.     v52 = v5;
    9 w* G  C7 e4 H
  160.     v51 = v13;
    3 w/ F1 ]) o- C$ {3 {) D  P. ?
  161.     v55 = COERCE_FLOAT(&v51);2 Y, j, L. F1 g; S
  162.     sub_456DD0("Direct3D initialization failed. No appropriate Depth/Stencil-Buffer-Format found.");5 t+ c1 ]! C+ N6 G  e: O1 I, q4 }- M
  163.     v50 = v47;
    # D$ a# {7 k7 _. O' u5 K
  164.     v54 = &v50;/ H2 K+ ~. O& x. J! }
  165.     v62 = 0;
    / i" u8 ]2 G2 l8 W% I
  166.     sub_456DD0("cCougarGraphics::cCougarGraphics");% A, r. v) }% J, ?3 G: Q
  167.     v49 = 118;8 i- G  z- B0 M) v' K- |: S7 U5 X+ n$ n
  168.     goto LABEL_28;
    . y( `' S$ o+ T/ f; U
  169.   }4 i1 B1 K1 `0 O7 r8 }5 \  O
  170.   v52 = "Depth/Stencil Buffer is D24S8.\n";( ?5 g; t; G2 E; E# a  v. W
  171.   *((_DWORD *)v1 + 576) = 24;
    , F3 L4 S# H, {4 a6 {' A* Q! m$ v( s
  172.   *((_DWORD *)v1 + 577) = 8;) I6 `4 ~( J* i8 ]& S1 d/ P+ T
  173.   *((_DWORD *)v1 + 406) = 75;, O& E+ L+ q/ x" K& S" h
  174.   v14 = (FILE *)sub_4D7E8F(v52);2 ]+ J5 J; G. h1 J8 u4 y
  175.   fprintf(v14 + 1, v52);- g1 l9 a  o5 Y6 v( r* h4 C
  176.   *((_DWORD *)v1 + 409) = 1;) ~8 C% S' G( R! b$ d
  177.   if ( dword_558178 != 4* d. W( s* i& t) j& H, M8 ^' K
  178.     || (*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, _DWORD))(**((_DWORD **)v1 + 384), Y9 Y: e( c) b/ k% {
  179.                                                                                                 + 44))(4 b) S7 A! l8 L/ R5 E9 K
  180.          *((_DWORD *)v1 + 384),% R% D' c! |& t( s
  181.          0,# ?. f: n# u7 h  R
  182.          1,
    3 e5 E, q) G# |& _  v6 N
  183.          21,0 I1 H# Z& x( X6 p6 X3 U
  184.          *((_DWORD *)v1 + 404),
    6 K6 L0 F( J( V; X% X
  185.          4,
    4 D) ^* x) w! l8 c/ M: y  [# m8 N
  186.          0) )
    ! o5 j( X$ C* v8 I1 @' f, C# T
  187.   {( C/ A4 ~$ @2 a. h1 R1 }
  188.     if ( dword_558178 != 2- M! x8 }: o4 B- `! n( h) z
  189.       || (*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, _DWORD))(**((_DWORD **)v1 + 384)" R7 O4 K, a  G5 W4 G, \
  190.                                                                                                   + 44))(
    : [& t* v& W. |  i2 o8 e2 M
  191.            *((_DWORD *)v1 + 384),
    ! Z4 {- n6 S" D
  192.            0,
    7 K2 ~; ?$ M) z8 h9 \% `; n7 m
  193.            1,
    - M. W( |0 O+ L/ ^, d- O+ D
  194.            21,
    / B. b+ n/ [; ^8 Q5 \% [" J- G0 A6 ]
  195.            *((_DWORD *)v1 + 404),
    2 O2 D" [4 q& g- M' G3 A
  196.            2,
    7 C- W& n( u0 b, z! w8 U3 D
  197.            0) ): t! t# x. H. r& }# |' I: |
  198.     {
    5 d9 \4 ^4 }3 z# F5 R: L4 I
  199.       if ( (unsigned int)dword_558178 > 0
    % C; d4 M3 \2 O' x, h  u# s
  200.         && !(*(int (__stdcall **)(_DWORD, _DWORD, signed int, signed int, _DWORD, signed int, const char **))(**((_DWORD **)v1 + 384) + 44))(% c8 q! ~/ y' E4 g* R
  201.               *((_DWORD *)v1 + 384),
    , s+ j$ [' [6 r5 v+ e/ s0 P
  202.               0,
    - m" g, j' R6 {# b4 N2 W) d% {
  203.               1,7 y- t! i6 p8 l, Q; G/ W1 i/ ?+ `
  204.               21,% W/ i& g8 v- P$ u5 q, I) A
  205.               *((_DWORD *)v1 + 404),
    - H5 \: [/ o1 o2 r8 r; h  M1 y
  206.               1," Q9 ]8 @5 [+ t$ k
  207.               &v56) )( W3 V6 a+ s# j9 P6 M# n$ t! ^
  208.       {
    # Z$ C0 u1 h- U4 }1 w
  209.         v15 = (unsigned int)v56;
    ; l; O  k% k/ w+ U7 X" E( t
  210.         *((_DWORD *)v1 + 400) = 1;1 M2 W+ n( `2 z, }
  211.         v16 = dword_558178;
    ! U0 q1 ?5 b: q
  212.         if ( dword_558178 >= v15 )1 n2 J( P5 i1 B6 J( e* \
  213.           v16 = v15;; X. V, b" c1 D; Q
  214.         *((_DWORD *)v1 + 401) = v16 - 1;
    4 j) E3 {7 c% ^6 e6 o
  215.         if ( dword_558178 < v15 )
    ( ?8 {* K. {2 g9 o$ T9 A* i
  216.           v15 = dword_558178;, A: o, p  W9 i" u
  217.         *((_DWORD *)v1 + 578) = v15;" H8 D3 t& I* k9 G! }
  218.       }5 ?- F7 {3 q$ X$ N7 h9 S
  219.     }
    5 C) l& V  Z0 h5 W1 C$ Q& o$ i
  220.     else' v, i# T* u" F- B' t# f
  221.     {, v# X4 Q) R0 U
  222.       *((_DWORD *)v1 + 400) = 2;
    ' v8 d0 C* T& y7 u8 Q  T
  223.       *((_DWORD *)v1 + 578) = 2;
      s5 ?* g4 V) e  W2 Y. N. J
  224.     }, J$ T: O. L, C$ K2 c$ F
  225.   }( \* ]/ ^2 ~% a! v% q9 Q) c/ N5 d
  226.   else
    4 [8 _9 I& c) a7 T
  227.   {
    ( M( T* f; T& u, e
  228.     *((_DWORD *)v1 + 400) = 4;, N0 S& |5 W+ j8 S  a
  229.     *((_DWORD *)v1 + 578) = 4;
    . j! k. C) }) N$ z$ b! B
  230.   }0 k# L" ?  ?, F% J& ]  J' c& b
  231.   v52 = (const char *)*((_DWORD *)v1 + 578);
    0 Q8 d. ?7 l& C/ T. f; I
  232.   v17 = (FILE *)sub_4D7E8F("AntiAliasing is %d.\n");
    1 \# Y- B6 T* c
  233.   fprintf(v17 + 1, v51);
    ( A: ]" T3 \1 Q3 \" m( G
  234.   v18 = *((_DWORD *)v1 + 384);, Z3 \1 @8 H2 q, O% T# O
  235.   v19 = *((_DWORD *)v1 + 578) == 0;
    , W* [/ c: A% M4 Q
  236.   v52 = (const char *)827611204;# H2 u! G( X! W
  237.   v51 = (const char *)3;" G- P2 W5 Q/ x9 i; ]
  238.   v50 = 0;
      Y1 K$ a& y) {, e0 S2 O" z
  239.   *((_DWORD *)v1 + 402) = 2 * v19 + 1;
    * E( a( e/ q  h& y2 _
  240.   v20 = (*(int (__stdcall **)(int, _DWORD, signed int, int, const char *, const char *, const char *))(*(_DWORD *)v18 + 40))(
    : p9 z# P0 B/ q! H% q% c/ r
  241.           v18,
    5 C# c9 J5 h0 X+ w1 U" h/ n
  242.           0,
    3 h8 b8 V3 ]3 g( K' T% F5 @
  243.           1,* e* F6 B5 f" S( H, @
  244.           v61,
    % [9 |6 U, P7 _% ?6 g/ s/ W0 i* u- A
  245.           v50,
    . [+ _+ z+ t' F( M
  246.           v51,
    ) T) U) O9 l& V) i% Y
  247.           v52);
    4 r* E* z' O% N3 h. ?: A$ \4 c
  248.   v21 = *((_DWORD *)v1 + 425);
    + t$ `* @' x: Y6 W
  249.   v22 = v20 < 0;
    $ w1 [5 I8 L, P/ J" e' l  g7 p0 l! S
  250.   v23 = *((_DWORD *)v1 + 384);
    . J  h1 G5 }, B6 `; a
  251.   v1[2316] = !v22;
    , u% o. C- }% q# I
  252.   v52 = v1 + 1540;
    " G  j1 y. J# n( V2 R1 C* \6 a4 `
  253.   v51 = v1 + 1584;
    ; M2 A/ [8 ?; u( [" i
  254.   v1[2317] = (v21 >> 14) & 1;9 S. A- z/ W, o, p
  255.   v5 = (const char *)(*(int (__stdcall **)(int, _DWORD, signed int, HWND, signed int, const char *, const char *))(*(_DWORD *)v23 + 64))(
    , b, f  x, A4 T8 a
  256.                        v23,$ e. @; [8 R- l. F, \
  257.                        0,
    5 E1 N( m4 U  I( Z. H) u6 b6 O
  258.                        1,
    4 \% W3 C' }3 w5 h% z% N( F
  259.                        hWnd,
    , ~0 d* a$ p$ i) M0 d, p
  260.                        64,
    : |  b  N; }- ?; l/ f: U5 j0 D
  261.                        v51,: z$ Q' I  Y% s$ E$ H- K' [
  262.                        v52);
    $ k" @! a* E$ Q0 F; O" Q: T7 l$ m3 h
  263.   if ( (signed int)v5 < 0 )- O; e" r5 _6 E) j* l0 y7 b* x
  264.     goto LABEL_27;
    # `5 {; {: B+ r3 s/ E1 R/ O+ p
  265.   if ( dword_558180 && ((v24 = *((_DWORD *)v1 + 425), v24 & 2) || v24 & 0x100) )& s* I+ E' `: n. B
  266.   {
    ; n! \: }) Y/ |  V7 I5 N
  267.     v25 = *((_DWORD *)v1 + 609);
    , L5 C- S; B; M( m
  268.     v26 = sub_418670(*((_DWORD *)v1 + 522));
      R+ E5 t: \4 d( `: ^
  269.     v52 = (const char *)*((_DWORD *)v1 + 523);
    6 Q" a9 s, a8 I' t0 U" q  |$ v" W
  270.     v27 = *((_DWORD *)v1 + 609);
    $ w6 ?0 S4 b5 R* ?
  271.     *((_DWORD *)v1 + 496) = v26;" u/ g2 W. Y3 e( n8 I
  272.     v28 = (const char *)sub_418670(v52);
    2 ^/ B1 u0 n0 o! l9 F' K
  273.   }  ?8 U" ^1 Q0 Y0 Z, U- y" z
  274.   else0 M3 A( @+ Y- c2 E$ R4 n) Y' R+ K/ S
  275.   {
    * c, R& A! q* X7 \! A1 I
  276.     v28 = (const char *)*((_DWORD *)v1 + 523);
    / \# @+ Q% P8 Z5 c, u
  277.     *((_DWORD *)v1 + 496) = *((_DWORD *)v1 + 522);
    . w0 f7 a& S' @& L7 \* P3 ^# w
  278.   }8 O9 [( T: k/ z1 W! p8 X
  279.   v29 = (const char *)*((_DWORD *)v1 + 496);7 x; \& M  ?* _; ~
  280.   v52 = v28;
    + B; q, V5 R, a* B. {% n
  281.   v51 = v29;7 t( P% \, Q6 o7 H2 a) F: N
  282.   v50 = "PostProcess Surface is %d x %d.\n";# V) M1 |: Z" Y2 f
  283.   *((_DWORD *)v1 + 497) = v28;9 \9 }  S2 J' H7 R! h
  284.   v30 = (FILE *)sub_4D7E8F(v50);" K) ^0 j% h& c  J6 i9 {
  285.   fprintf(v30 + 1, v50);
    ' N4 i, w& p$ D' \( h$ y
  286.   (*(void (__stdcall **)(_DWORD, _DWORD, char *))(**((_DWORD **)v1 + 385) + 88))(*((_DWORD *)v1 + 385), 0, v1);
    8 ?, x3 G; \, g* i$ {* M
  287.   sub_413100(v1);
    9 ~+ n4 W: a1 l# s, v
  288.   sub_411D60(v1);9 A" V6 P* s" l8 K' [. \  g
  289.   v31 = malloc(0x78u);5 I( t$ y. q: j: x; |5 Z" W3 E# J
  290.   v32 = -0.5 / (double)*((signed int *)v1 + 522);+ ]/ q3 G9 i  g6 E! b$ u( b
  291.   *((_DWORD *)v1 + 599) = v31;
    6 m' h- d) g- N. q, Z$ @# A% t; C
  292.   *((_DWORD *)v1 + 600) = 0;% ]- v) ~9 k  [; ^% q. }. S' p
  293.   *((float *)v1 + 526) = v32;
    6 M( |, U* Q% D
  294.   *((float *)v1 + 527) = -0.5 / (double)*((signed int *)v1 + 523);, e3 q# X% W+ o! m) c: M' W
  295.   sub_411CC0(v1);! ~2 `$ W( H* X; e/ |% W
  296.   v33 = v53;! {0 q) I* W& f5 Y. v( }9 m
  297.   v5 = (const char *)(*(int (__stdcall **)(int, signed int, signed int, signed int, signed int, _DWORD *, _DWORD))(*(_DWORD *)dword_559B7C + 104))(# E- i: B8 `+ H0 _7 t4 u0 }
  298.                        dword_559B7C,
    : F* L! k, L2 a7 a8 e& p& b
  299.                        80,/ w" Z/ ^4 U2 B  q0 [
  300.                        8,* L( j# }! F, t6 @+ b
  301.                        258,+ T' M" q( x( ], N
  302.                        1,
    % q# t# B9 {. p3 {. @0 X
  303.                        v53,, w1 u. k. d' V4 |9 u& T: a
  304.                        0);6 A  U5 U! w: {& A$ p; K8 g8 Q2 V
  305.   if ( (signed int)v5 < 0 )/ K2 X% Z$ f6 T, M5 l9 n' S7 |
  306.   {1 N5 P" {( q3 F. v/ h+ ]% u" `
  307. LABEL_27:
    , O0 U8 v1 `& J9 }+ H; B& X
  308.     v52 = v5;; }' n7 R- n$ P, m$ ]! O/ A" {3 `
  309.     v51 = v4;
    / U) e4 ^+ u- v2 G' M* u* C
  310.     v55 = COERCE_FLOAT(&v51);! J1 h; G0 ~6 L; r+ O
  311.     sub_456DD0("Direct3D initialization failed.");3 r, q' j/ E; [3 L' }8 g1 r" R- W. M
  312.     v50 = v48;, n9 K+ |7 s. s. }' J* o
  313.     v54 = &v50;# \, G& G2 L/ l2 J2 v
  314.     v62 = 1;. M7 M& R# a* Z4 O; Z! k
  315.     sub_456DD0("cCougarGraphics::cCougarGraphics");  o: @7 N' R4 w' l% l# ^
  316.     v49 = 205;
    8 a! b1 z" O5 T: a8 y& T9 f7 R
  317. LABEL_28:3 R. h' a% m: L; a+ i
  318.     v62 = -1;
    / m- ?% b% e" }' h$ w: S
  319.     sub_40CB30(1, ".\\source\\class_graphics.cpp", v49, (char)v50, (char)v51, v52);# Y# n7 ]& X- r) g& @+ u7 q8 W
  320.   }# a) s' H, l6 r4 d+ O
  321.   (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD, _DWORD **, _DWORD))(*(_DWORD *)*v53 + 44))(*v53, 0, 0, &v53, 0);# i# A$ s2 l, T, a
  322.   v58 = -1.0;2 g0 y4 V3 Y# b7 E  |4 t1 b
  323.   *(float *)v53 = -1.0;/ l& j$ Q) {+ ?! q6 {! G
  324.   v59 = 1.0;
    + b6 p$ T4 F8 f8 x
  325.   *((float *)v53 + 1) = v58;
    2 z) _2 P) x* r! q
  326.   v57 = -1.0;. s: _9 |+ i2 l: n5 l$ a2 N3 @
  327.   v58 = 1.0;
    ! \. S* @- h/ _9 p4 m$ ~
  328.   *((float *)v53 + 2) = v59;& W" {# f' B, |. M
  329.   v59 = 1.0;
    6 \: X9 {7 c- P- s
  330.   v34 = (float *)v53;
    * ]% \; f! j, {6 _$ v' O
  331.   v35 = v57;
    % X( \! W! `! A2 k: ?) b$ X$ `
  332.   v57 = 1.0;1 S$ [( h/ Z6 m+ p: W( E
  333.   v36 = v58;
    + _% J5 \; \2 i- f
  334.   *((float *)v53 + 5) = v35;# D3 f$ ?9 w" A+ P. ~1 G' a
  335.   v37 = v59;& R; w/ ~! G8 g( \" x! k
  336.   v59 = 1.0;1 I- J6 e7 _6 _: {9 J! ^" b' v
  337.   v34[6] = v36;
    : q! F5 O7 ~6 N! S7 ^" e" O
  338.   v38 = v57;
    , w5 p  n; f! E: ^+ w
  339.   v58 = -1.0;
    . x$ _. n- y# e2 w! N/ ^' F; o
  340.   v34[7] = v37;$ T2 h9 y5 b/ B* H& j6 A
  341.   v39 = v58;: _( K0 i+ o3 _- E+ D% [
  342.   v57 = 1.0;! w3 u# d- v. t, \* v7 B+ U
  343.   v58 = 1.0;( a0 o2 M4 @+ B
  344.   v40 = (float *)v53;
    : T7 E8 V- z5 U: F- ?3 F' j/ U7 j4 _
  345.   *((float *)v53 + 10) = v38;
    ; s( B) a  S% {, l# a
  346.   v41 = v59;8 s: p. X# w& H  Q" N
  347.   v59 = 1.0;. i) a& s0 P, X
  348.   v40[11] = v39;
    / ~( t2 H6 |3 j+ _4 e3 U
  349.   v42 = v57;
    + [! `8 q- `4 O% ^; `/ q6 Y9 d1 ~4 V
  350.   v40[12] = v41;
    / n  d* |- f( a0 a, O. _( K, e
  351.   v43 = v58;
    # ~* V, [9 E9 `, o
  352.   v44 = (float *)v53;
    ; u  [6 {" c! |0 r6 T
  353.   *((float *)v53 + 15) = v42;
    + V9 z' I* O$ B8 r$ @9 k
  354.   v45 = v59;
    4 x+ C9 h2 a, d% X0 \# ?
  355.   v44[16] = v43;+ a0 R% J" A( q( a/ M; [
  356.   v44[17] = v45;7 [6 r  B# r7 v% V: D- q5 ]5 [
  357.   *((float *)v53 + 3) = 0.000099999997;
    . w- }) S. |( B
  358.   *((float *)v53 + 4) = 1.0001;
    " t2 m  P, b9 `! ]8 [+ x
  359.   *((float *)v53 + 8) = 0.000099999997;
    & F# k8 c  u. F" n1 _; v+ Z4 y
  360.   *((float *)v53 + 9) = 0.000099999997;  r2 @/ S7 W( Z8 {
  361.   *((float *)v53 + 13) = 1.0001;0 u" H; Z1 v" _+ [
  362.   *((float *)v53 + 14) = 1.0001;
    ; e' l" y! n8 j) i0 `1 Y
  363.   *((float *)v53 + 18) = 1.0001;* v+ |7 r* z5 |" s" D
  364.   *((float *)v53 + 19) = 0.000099999997;7 H: \/ D! r! n: z% i0 @0 O; j
  365.   (*(void (__stdcall **)(_DWORD))(*(_DWORD *)*v33 + 48))(*v33);
    ) x( s) K* J9 A$ {$ j6 ?, x
  366.   return 0;
    9 l6 }2 c" {$ L$ H2 S- f
  367. }
复制代码

: O  \1 B3 H* _6 @, p6 ^' q' S; D用Cheatengin寻找一个字幕之后,在以下地方断下
/ H$ X7 A4 y3 {" M
  1. <div>ocd.exe+425B9 - 0FB6 D9               - movzx ebx,cl</div><div>004425B9</div>
复制代码
7 W( z2 r+ r+ R
9 c. p& H, Q. [: y6 r2 @7 @
在ida pro下查看,是这个函数,从代码看a2字符像是索引号。
# s8 k4 V+ c$ H; J' a$ y3 Y稍后需要仔细分析。字幕显示函数应该在本函数上下。
/ d" K3 ?7 J# c9 ~) e
  1. int __thiscall sub_442510(unsigned __int8 **this, int a2)
复制代码

0 m6 G. {- v  I% N: E$ G# ?1 I/ G$ h/ `" w1 _9 O& O
( i, U' G: F. D) z* o5 Q2 p1 c# \  N
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好1 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2025-4-14 09:38 | 只看该作者
学习学习一下
回复 支持 反对

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表