冒险解谜游戏中文网 ChinaAVG

标题: 【Directx9游戏汉化 #9】来世(nextlife) 字幕显示函数 [打印本页]

作者: shane007    时间: 2023-8-27 13:22
标题: 【Directx9游戏汉化 #9】来世(nextlife) 字幕显示函数
本帖最后由 shane007 于 2023-8-27 13:23 编辑
! Z* B' a& l6 b
9 V/ K  }( _1 x3 j# v0 j" R$ p本游戏采用了CEGUI,该组件能采用directx和opengl。  @" c9 s6 l- Z0 S0 d! {
经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。
" y- N: b& H( o4 i游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。
" W( C! f' B/ R2 o! P( t- Y, e(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)3 {; t* c; x& v9 k5 h+ R! Q. t
8 F. O- \2 o5 P- q, d$ L

  j- G2 |0 \) j2 J在游戏中找一个字幕,在以下地方断下。
& _1 N( f1 a) D8 W2 i' P由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
! B" ?( k% Y5 _  H4 J3 O因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。
8 O- O! X; B9 z! ~0 x. K& D( n
- C  q3 V8 h! D, i% b
  1. NextLife.exe+11C5 - 42                    - inc edx
    7 I: p4 }1 t- V6 i; S, p) a2 j: g# h
  2. 004011C5
复制代码

8 E" U  q8 _  `9 n! R( ]. Z- }' T) @4 N
该地方的伪代码
1 G9 d. E3 [# `9 h
  1. void __thiscall sub_401160(char **this, const char *a2)
    ) q" ?" I+ ^8 G1 U
  2. {- o* h+ C1 b6 U9 P
  3.   char **v2; // esi6 i' c0 ~5 B, I% m
  4.   char *v3; // eax
    + R; \+ u; h7 d! I
  5.   char *v4; // eax6 V+ }& y4 m' {9 N" K
  6. & P, `/ y( I$ v
  7.   v2 = this;
    & E4 }* o; t* l! R) Q
  8.   if ( a2 )7 i# a% b! h6 e" u/ l% X7 D
  9.   {5 q- I+ U  A, |8 k1 _6 S' F
  10.     v3 = *this;
    5 W( o& F  g% }+ J
  11.     if ( a2 != *this )/ j  n6 k0 H; v2 c9 h& y
  12.     {( o( ~+ X" f1 M7 V
  13.       if ( *a2 )
    # V. u0 R. V! i3 w
  14.       {! O4 c  i: E$ K- i9 y1 _" _8 ^7 L: ^( G& w
  15.         sub_401030(strlen(a2));& R* y# M' k8 q. {* D$ [7 q% R
  16.         strcpy(*v2, a2);
    4 W' R; z- L6 N  z) {% Z( a
  17.       }
    : r4 q. g6 y$ e3 r' _
  18.       else
    # l$ ~0 Q5 c' }0 `$ D
  19.       {
    $ T( X7 z0 ~' v. s3 n- J) u
  20.         this[1] = (char *)1;
    - Q- m* |  ]2 X& Y% T- I; O: V8 u( B
  21.         if ( v3 )
    ( k5 l6 o# r4 k4 {: T# Q
  22.           operator delete[](v3);
    . O: y8 _  H  S3 P
  23.         v4 = (char *)operator new(6u);
    1 f8 S5 v4 H2 t4 {" X$ `: o
  24.         *v2 = v4;
    ! [9 N5 y% E* j3 N* q+ O& g3 k
  25.         *(_DWORD *)v4 = 0;
    7 p" f3 i; v) R, s1 p5 m' P
  26.       }( v7 ]$ H, s3 m2 I) m
  27.     }
    $ u/ g# [0 ]& i( Z  v$ ~
  28.   }5 R1 j9 W8 E4 \2 ]$ d
  29. }
复制代码
/ ~( p$ {0 O9 X5 E3 R8 u+ I/ ^4 V% P- a
汇编代码; `/ Y2 R, g5 v/ l2 F% J( X
  1. .text:004010F01 E9 J1 U! a& G, ]% h
  2. .text:004010F0 ; =============== S U B R O U T I N E =======================================+ z; e( y: m. w7 e
  3. .text:004010F0
    2 t; ?; R$ ^; }0 c5 x; \) d. m/ N
  4. .text:004010F0* e$ u- n! P- N: v7 B- k+ s; I
  5. .text:004010F0 sub_4010F0      proc near               ; CODE XREF: _main+139↓p5 J" L& F$ K: w3 j% ^* V# U; F
  6. .text:004010F0                                         ; sub_403240+97E↓p ...' D. N) b' I2 O- j2 Z, S; K
  7. .text:004010F0: l) ?: l- z1 n. Q) W
  8. .text:004010F0 arg_0           = dword ptr  4
    0 ], z$ \- d# O6 Z: R
  9. .text:004010F0
    7 j+ Y( i  \+ }: q
  10. .text:004010F0                 mov     eax, [ecx]1 f5 A6 K& `' m9 W
  11. .text:004010F2                 test    eax, eax
    ; U( M: ~  ^' W6 y6 X
  12. .text:004010F4                 mov     edx, [esp+arg_0]$ f( U: v' O, E) Q
  13. .text:004010F8                 jz      short loc_401147
    8 @. H( A6 b3 r- r# J
  14. .text:004010FA                 test    edx, edx, [! J6 c% \- \8 b! K2 F
  15. .text:004010FC                 jz      short loc_4011475 j+ ~4 z% @' U. ^& M
  16. .text:004010FE                 mov     cl, [eax]( y9 u8 ~) P7 q6 u. a
  17. .text:00401100                 test    cl, cl
    . Y: i0 A" f( ?+ Y2 c8 t1 B
  18. .text:00401102                 jnz     short loc_401116% C; R. ~" k3 \0 _; L
  19. .text:00401104                 cmp     byte ptr [edx], 06 L) Q$ g- ^$ V5 D9 M
  20. .text:00401107                 setz    al0 v/ O' _2 |0 n+ k+ {
  21. .text:0040110A                 xor     edx, edx, s/ O  s" E; n. _) v
  22. .text:0040110C                 test    al, al
    : B' a& |1 \& [" x
  23. .text:0040110E                 setz    dl
    * T: b6 g( c( f6 ^0 B5 @
  24. .text:00401111                 mov     al, dl
    ; D5 x* e( M; r% z3 i# [# r
  25. .text:00401113                 retn    4
    4 w- J% g. u' w/ m$ b% T
  26. .text:00401116 ; ---------------------------------------------------------------------------6 |. [* l" i- i/ K
  27. .text:00401116; d  _+ l) y  B$ _( Y! c8 E% V1 R( `
  28. .text:00401116 loc_401116:                             ; CODE XREF: sub_4010F0+12↑j  `6 N( Y9 [& |5 N/ y  g
  29. .text:00401116                 cmp     byte ptr [edx], 0
    ' N  i! [3 e& [, F5 }- t
  30. .text:00401119                 jz      short loc_401147# t1 b: Q2 H- \; h& q
  31. .text:0040111B                 jmp     short loc_401120
    + G' N6 [* L( a; t, ]2 Z. z4 F, i5 w/ ^9 k
  32. .text:0040111B ; ---------------------------------------------------------------------------" ?' E) f1 z2 ^  N8 g- l$ r  k
  33. .text:0040111D                 align 10h( B3 R, f3 |4 e% I$ D5 r9 N
  34. .text:004011208 \$ a+ w4 D* [$ S
  35. .text:00401120 loc_401120:                             ; CODE XREF: sub_4010F0+2B↑j
    % F2 D) u! B- h
  36. .text:00401120                                         ; sub_4010F0+3B↓j
    5 ~: T2 q% o3 x  H5 l7 f% j
  37. .text:00401120                 cmp     cl, [edx]( S; D( \8 F7 I9 _" k
  38. .text:00401122                 jnz     short loc_40112D( X- F$ f1 B( X( ^6 t! w( S. P
  39. .text:00401124                 mov     cl, [eax+1]
    5 i% I( Y0 u4 K. u/ b3 N. _
  40. .text:00401127                 inc     eax
    ( {3 N2 ~! X4 f+ H& d
  41. .text:00401128                 inc     edx. y/ }  Q% h: ^7 Q& e+ Y' {& w( S
  42. .text:00401129                 test    cl, cl
    ! v! `+ q/ f4 [, I
  43. .text:0040112B                 jnz     short loc_4011208 d: Q1 T  B2 D. w5 _+ U! x! q
  44. .text:0040112D3 O' l  T! V1 A; a7 q9 z
  45. .text:0040112D loc_40112D:                             ; CODE XREF: sub_4010F0+32↑j
    & v$ r' o" P  y& z3 g+ b
  46. .text:0040112D                 movzx   eax, byte ptr [eax]- i& v( Z: A6 \' m; C. e) F
  47. .text:00401130                 movzx   ecx, byte ptr [edx]$ }5 Z. @  f$ I5 F, i! A
  48. .text:00401133                 sub     eax, ecx
    9 ^' v: G& w, {* n/ Q# i  G
  49. .text:00401135                 neg     eax* e  j5 K* m' \
  50. .text:00401137                 sbb     al, al
    $ }  u7 e5 V! f6 Z! U
  51. .text:00401139                 inc     al* [+ s5 C2 q( [
  52. .text:0040113B                 xor     edx, edx' ]( m+ |( q: ~1 K$ Z' V
  53. .text:0040113D                 test    al, al
    1 ^' h3 ^8 H8 j4 j$ i
  54. .text:0040113F                 setz    dl
    " v2 t; z/ Q9 B- C5 r2 x
  55. .text:00401142                 mov     al, dl
    8 R+ r% {0 E$ b8 ]+ v( C. E& Z+ P
  56. .text:00401144                 retn    4
    $ @0 M7 ]/ V$ j. }  R
  57. .text:00401147 ; ---------------------------------------------------------------------------7 L! v. |3 V$ b! W. W2 ^0 n
  58. .text:004011475 x/ p9 d! w3 f3 ^. o
  59. .text:00401147 loc_401147:                             ; CODE XREF: sub_4010F0+8↑j5 A: V; _" H7 ?2 j# l
  60. .text:00401147                                         ; sub_4010F0+C↑j ...
    ! @, q6 o' f& T- \/ ?. u. D
  61. .text:00401147                 xor     al, al
    ) M& I% z4 w2 M
  62. .text:00401149                 xor     edx, edx
    $ W1 n4 k; F" {3 z3 ^2 M
  63. .text:0040114B                 test    al, al
    - t( j7 Y# {3 s* O: W! b; b# n  A
  64. .text:0040114D                 setz    dl7 b- M3 ?; r( j5 z. @' t
  65. .text:00401150                 mov     al, dl5 b& p1 h& D  c' r- U
  66. .text:00401152                 retn    4
      _9 H3 T7 A1 N' G0 c8 }
  67. .text:00401152 sub_4010F0      endp
    " _) t7 a" T. A& `
  68. .text:00401152% I: q# u3 W1 X5 M! e8 V2 n, @! U
  69. .text:00401152 ; ---------------------------------------------------------------------------
    * Q- X  H. H' D! f* h* t: W# @$ ]
  70. .text:00401155                 align 10h# y2 T9 s. F2 i% I$ U4 Y- m  o; U: w
  71. .text:00401160" O& S; t; _6 D4 i; Y
  72. .text:00401160 ; =============== S U B R O U T I N E =======================================
    9 G3 \* H3 D, E+ f! v7 H
  73. .text:00401160
    ; Y0 `3 W2 M7 x/ d- K7 A' s
  74. .text:00401160
    5 e8 c; t8 X# c5 ~
  75. .text:00401160 sub_401160      proc near               ; CODE XREF: sub_4013D0+15↓p
    1 c) m2 B- X! o0 f/ q3 |: x2 Q
  76. .text:00401160                                         ; sub_4013F0+C↓p ...
    ' D2 x* T, h' l. x1 [
  77. .text:00401160
    ( e+ c1 V1 x; s$ e+ q  t
  78. .text:00401160 arg_0           = dword ptr  42 i  @2 ], h+ c% C9 z4 \
  79. .text:00401160" g9 ]  E4 r& r5 D' N+ q% _  M+ D
  80. .text:00401160                 push    esi7 ^& b- b* ^6 A+ h8 b+ ^
  81. .text:00401161                 push    edi
    ! q$ C4 U+ c, k- ]7 s: `* E
  82. .text:00401162                 mov     edi, [esp+8+arg_0]
    1 w' w" Z6 v1 P: m# P, l( `5 l8 x
  83. .text:00401166                 test    edi, edi
    4 S/ H% l3 H0 V* b, m8 }
  84. .text:00401168                 mov     esi, ecx
    # Z) u+ a) s  f: I+ j- e2 |8 [
  85. .text:0040116A                 jz      short loc_4011CA
    6 f. }, S4 I: g! k
  86. .text:0040116C                 mov     eax, [esi]
    9 I; [' f2 N$ h( M
  87. .text:0040116E                 cmp     edi, eax. D  {. Y0 q& K! h
  88. .text:00401170                 jz      short loc_4011CA! ]8 `, L  {  @9 O/ q  T1 m
  89. .text:00401172                 cmp     byte ptr [edi], 0
    ! [  V, d9 ^5 K! r  B1 g
  90. .text:00401175                 jnz     short loc_4011A2
    6 u5 j7 J2 [9 @: S0 k
  91. .text:00401177                 test    eax, eax$ S" |* m( K0 d( d3 [4 }
  92. .text:00401179                 mov     dword ptr [esi+4], 1
    3 i% U: r0 o$ n
  93. .text:00401180                 jz      short loc_40118B8 g6 C$ ~' u( B( R$ v  D
  94. .text:00401182                 push    eax             ; void *
    ' v8 q% o6 ?  H, W
  95. .text:00401183                 call    ??_V@YAXPAX@Z   ; operator delete[](void *)& R1 f7 S6 N* a& b0 O
  96. .text:00401188                 add     esp, 4
    ! z6 N% d& _2 @- J8 l. f* {
  97. .text:0040118B
    $ a# w+ A9 F7 [- s* A7 f
  98. .text:0040118B loc_40118B:                             ; CODE XREF: sub_401160+20↑j! }5 N5 ?. M5 R; k2 m+ W
  99. .text:0040118B                 push    6               ; Size
    * A8 x# O2 c$ [: I, f) `
  100. .text:0040118D                 call    j_??2@YAPAXI@Z  ; operator new(uint)' M8 E2 \  k) y2 a2 N. ]: j, Q0 D# }
  101. .text:00401192                 add     esp, 4
    8 ^7 m# ?" J2 Y/ c7 s
  102. .text:00401195                 mov     [esi], eax& k, x4 p. ~3 G
  103. .text:00401197                 pop     edi
    % E2 |' `$ ]3 D$ C
  104. .text:00401198                 mov     dword ptr [eax], 0
      c& A0 G& D1 [7 ~
  105. .text:0040119E                 pop     esi
    8 i( }: z/ d! d. u
  106. .text:0040119F                 retn    4
    9 N# L0 i# T7 J. Y
  107. .text:004011A2 ; ---------------------------------------------------------------------------/ Q8 S3 B* o" S  L. H) b8 ^3 L
  108. .text:004011A2
    ( u. |! i% q# T1 P" m3 x
  109. .text:004011A2 loc_4011A2:                             ; CODE XREF: sub_401160+15↑j
    5 _2 J% [2 T8 }) m5 o
  110. .text:004011A2                 mov     eax, edi
      ~, Y2 {. T% \( B6 B
  111. .text:004011A4                 lea     edx, [eax+1]4 c8 U/ S' [$ v
  112. .text:004011A7* o; I# O. Q, |' z- ?5 L
  113. .text:004011A7 loc_4011A7:                             ; CODE XREF: sub_401160+4C↓j& N# s3 r3 {; o$ f
  114. .text:004011A7                 mov     cl, [eax]2 _# T* X0 |% C1 [; H' ^2 Z' L( Q
  115. .text:004011A9                 inc     eax% {5 H% w9 ~3 X! p5 X5 y
  116. .text:004011AA                 test    cl, cl" K* F  T# L0 T* {1 d0 `6 m
  117. .text:004011AC                 jnz     short loc_4011A7# g6 T2 S! Y! D9 L) e9 ?% E
  118. .text:004011AE                 sub     eax, edx
    + q, o$ P2 F  ~: s6 X( X2 p3 h" R
  119. .text:004011B0                 push    eax4 o. m6 }& W  d3 n
  120. .text:004011B1                 mov     ecx, esi! r& E# y" ~! j  V& E: {3 A
  121. .text:004011B3                 call    sub_4010309 W& D4 j, s2 Y' ^% `  C& _
  122. .text:004011B8                 mov     edx, [esi]( \& q0 Z. u# Y
  123. .text:004011BA                 mov     ecx, edi3 I+ O0 D: o2 t! G" R$ n' E$ e
  124. .text:004011BC                 lea     esp, [esp+0]
    6 Y  p/ C! R3 g* e5 _
  125. .text:004011C0) N* z- t; Z& ?5 B& T
  126. .text:004011C0 loc_4011C0:                             ; CODE XREF: sub_401160+68↓j
    # m1 t( i; P% }" t1 {
  127. .text:004011C0                 mov     al, [ecx]
    % R3 i/ R5 y2 |  z; \2 N
  128. .text:004011C2                 inc     ecx# G; E9 F0 O) Q2 U
  129. .text:004011C3                 mov     [edx], al8 X$ v  K7 c7 N) K0 r: {  s; H
  130. .text:004011C5                 inc     edx: s+ o6 {' L' v7 J; G- W* y: Y7 _
  131. .text:004011C6                 test    al, al
    ( _0 L$ K  M! @' b
  132. .text:004011C8                 jnz     short loc_4011C0
    ) v+ d; S; K8 B! x, \9 N
  133. .text:004011CA/ K7 D* Q; H2 t3 ]6 q$ s+ f. y
  134. .text:004011CA loc_4011CA:                             ; CODE XREF: sub_401160+A↑j6 o( k4 K# X- h5 @  e/ Y3 O
  135. .text:004011CA                                         ; sub_401160+10↑j% o1 b$ C( F1 R! ?
  136. .text:004011CA                 pop     edi
    & }- j$ ]. r: M
  137. .text:004011CB                 pop     esi
      a. l8 E1 b* e( o) x; M+ z
  138. .text:004011CC                 retn    4
    5 i0 Q% c; x' p5 F) j0 J
  139. .text:004011CC sub_401160      endp
    0 N% I# N" C* c7 _8 {% b, Z
  140. .text:004011CC
    7 G8 G+ v7 m' C' ]# ]- q
  141. .text:004011CC ; ---------------------------------------------------------------------------
复制代码
3 |( D) j- |: L6 t! k, y

5 y- c4 u6 b  T; {2 G$ B. C" O6 r% b7 F# X( N

作者: 星之韶华    时间: 2025-4-14 09:43
学习学习一下




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2