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

建议 【Directx9游戏汉化 #9】来世(nextlife) 字幕显示函数

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

[建议] 【Directx9游戏汉化 #9】来世(nextlife) 字幕显示函数

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

【Directx9游戏汉化 #9】来世(nextlife) 字幕显示函数

本帖最后由 shane007 于 2023-8-27 13:23 编辑
8 q0 m9 o8 v8 u3 _4 t
& F, r# e' S9 Z7 E9 w( r1 S本游戏采用了CEGUI,该组件能采用directx和opengl。
4 p$ u$ v& V8 B经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。1 k9 M6 w6 @/ M. C0 T! f- |6 c
游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。1 F4 J5 R3 ~+ u( R: r2 C; V2 b7 }( G1 x
(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)1 y$ T" j" O) P" c

9 H; g+ t; A( E4 c" K; K4 H$ {8 ~2 T9 ?6 x. B& n1 {* }
在游戏中找一个字幕,在以下地方断下。1 m* a! R; W# q$ f2 g6 r
由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
" ~% b. _2 \- Q, h0 s' e因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。1 r' c  Y! k- B

3 ^# B' m9 R5 S/ M) ~
  1. NextLife.exe+11C5 - 42                    - inc edx
    + ]" X7 l" u2 y8 {& c, ]
  2. 004011C5
复制代码

# u& _% M* [) D3 N4 W* y: h+ N1 }7 j+ k8 I& e7 }
该地方的伪代码0 l5 R% c, d2 k1 l; _9 R2 H
  1. void __thiscall sub_401160(char **this, const char *a2)6 |  r5 ]5 b5 a0 J4 K; m
  2. {" B' b5 X1 \2 d* O! ^
  3.   char **v2; // esi
    # ?' x6 n! A& h
  4.   char *v3; // eax
    % j! ^$ Q. Y' `/ P
  5.   char *v4; // eax
    , o+ R% V. k7 I% j

  6. - f# J0 _% A# V2 M* d8 T; Q4 s
  7.   v2 = this;- G9 v" [/ I- ]9 j
  8.   if ( a2 )' o: D1 I' |- t' N5 L) d. v
  9.   {
    3 \# h$ ~0 G  J+ g' \' S
  10.     v3 = *this;
    ' p- q* `3 o) e# t* [! I
  11.     if ( a2 != *this )
    5 J6 z2 k; g7 Q0 {4 i1 d
  12.     {
    + ~/ S% [9 Y7 p  l0 l/ t: b! s0 Q
  13.       if ( *a2 )) b& V. e. x: t7 ~+ R5 v7 N1 H, q
  14.       {
    " e4 |9 y  o, g+ D3 N9 R
  15.         sub_401030(strlen(a2));! U/ ^- ^& ~0 ^4 w5 H6 Y7 [
  16.         strcpy(*v2, a2);2 n3 H1 }3 B6 \% c8 l8 \5 }& ?
  17.       }& }2 w1 S4 J/ T% M4 x3 t
  18.       else
    " }5 i6 H7 [$ B2 g4 b- @7 B
  19.       {
    * H2 |4 y6 N6 O$ t  s- a
  20.         this[1] = (char *)1;
    8 H$ ]+ h( W5 n6 ]0 t& u5 O: [
  21.         if ( v3 ); s- t6 X# q  n" C' e
  22.           operator delete[](v3);
    8 d* k$ T: q7 m3 c
  23.         v4 = (char *)operator new(6u);8 M7 g/ }% w# v" C" x
  24.         *v2 = v4;
    4 a4 Z; O5 I5 x3 w- \% u% x2 T
  25.         *(_DWORD *)v4 = 0;
    , s8 Y/ n# r+ I) E2 b" C! T! T
  26.       }' ]  o* J) F( I& h+ I+ {
  27.     }, b6 Y4 W8 R6 C5 p5 H* l7 e
  28.   }
    9 f" n* }  q4 t6 l7 z. E& S$ _
  29. }
复制代码
9 Z5 i: x$ D5 A0 f- Z; @
汇编代码
" T- X4 O& j/ H# o6 e6 a  h
  1. .text:004010F0
    7 M9 N+ _* t' w! n/ S: q/ k2 P
  2. .text:004010F0 ; =============== S U B R O U T I N E =======================================
    3 \- J+ [1 M$ H1 X9 V. w$ D; {
  3. .text:004010F0- K- r7 a2 e3 w0 x/ r
  4. .text:004010F0
    ' J3 q# {3 s) R9 |; t
  5. .text:004010F0 sub_4010F0      proc near               ; CODE XREF: _main+139↓p
    ) C/ _, J/ z. f1 h6 `8 X
  6. .text:004010F0                                         ; sub_403240+97E↓p ...
    . R( w) J" ^1 w1 J5 h  t
  7. .text:004010F0; B4 V- q5 d: C. m5 @
  8. .text:004010F0 arg_0           = dword ptr  4
    ( E  m; }! K8 L% X
  9. .text:004010F0* h, \. E) _6 u2 r  P9 q( v
  10. .text:004010F0                 mov     eax, [ecx]
    7 h9 l( S2 m/ M
  11. .text:004010F2                 test    eax, eax) v4 y1 f% v# x2 y) e9 ?
  12. .text:004010F4                 mov     edx, [esp+arg_0]; M" a7 M" k2 ?
  13. .text:004010F8                 jz      short loc_401147
    5 O& L% D8 X( o
  14. .text:004010FA                 test    edx, edx! n/ C: G$ u$ V, U3 z# W2 {' V/ V
  15. .text:004010FC                 jz      short loc_401147
    & e5 p: b! |* y5 R2 d: T
  16. .text:004010FE                 mov     cl, [eax]
    ! X+ M& O; o3 |
  17. .text:00401100                 test    cl, cl8 O% W9 S; I4 p$ w6 s/ d8 x
  18. .text:00401102                 jnz     short loc_4011169 q9 r% |2 J& O" ], S2 e
  19. .text:00401104                 cmp     byte ptr [edx], 09 R9 }, \8 A1 H/ }7 g, h3 }0 R
  20. .text:00401107                 setz    al
    ' g8 L* [! ?: {$ w( F
  21. .text:0040110A                 xor     edx, edx
    ! g3 @6 [) X  C4 A
  22. .text:0040110C                 test    al, al
    4 [, G8 b$ s. q" l
  23. .text:0040110E                 setz    dl
    & v$ e/ Y- m" R  Z% |
  24. .text:00401111                 mov     al, dl
    , c; h6 F& u4 Z( O/ T
  25. .text:00401113                 retn    42 w7 Q- x; L/ {8 f) S5 x
  26. .text:00401116 ; ---------------------------------------------------------------------------6 R- [8 w$ [8 k; n
  27. .text:00401116: k) `9 W  x' {( A
  28. .text:00401116 loc_401116:                             ; CODE XREF: sub_4010F0+12↑j. P8 a1 W( f" V/ O/ o  {
  29. .text:00401116                 cmp     byte ptr [edx], 0+ h# S2 {' C/ [( [: n& y/ k8 j& ?  H
  30. .text:00401119                 jz      short loc_401147
    # L% ?+ x/ N4 {4 ^8 F* p
  31. .text:0040111B                 jmp     short loc_401120
    0 ?( H4 H8 W4 h$ A+ o
  32. .text:0040111B ; ---------------------------------------------------------------------------
    ' M2 j/ }) j, G+ D! q( Y
  33. .text:0040111D                 align 10h3 x# U/ I! _* \
  34. .text:00401120
    % t. s5 N8 D& o
  35. .text:00401120 loc_401120:                             ; CODE XREF: sub_4010F0+2B↑j
    ' Q4 ?* Z) j" N5 U
  36. .text:00401120                                         ; sub_4010F0+3B↓j
    7 k/ o7 x, \  @5 j2 o' }1 R
  37. .text:00401120                 cmp     cl, [edx]! s; N/ o& K; d! w
  38. .text:00401122                 jnz     short loc_40112D# Y, `/ _6 h) }3 r. ^' I
  39. .text:00401124                 mov     cl, [eax+1]
    " d5 f( ^# `- Y% B
  40. .text:00401127                 inc     eax- v$ I( o1 `5 F, s  u
  41. .text:00401128                 inc     edx% ^/ U( [) X. P- P2 C
  42. .text:00401129                 test    cl, cl4 U) S% ~6 l2 a5 R  {2 ?
  43. .text:0040112B                 jnz     short loc_401120
    2 F& l$ L$ N& e) C( {% H: Q
  44. .text:0040112D
    2 T( P( Z" Z$ A, K) {- T3 _2 Z
  45. .text:0040112D loc_40112D:                             ; CODE XREF: sub_4010F0+32↑j
    - {2 {$ L, w) t+ Y% y( ~
  46. .text:0040112D                 movzx   eax, byte ptr [eax]; d- F; d/ c2 W8 w7 g. y
  47. .text:00401130                 movzx   ecx, byte ptr [edx]6 F# g2 d- C- z$ E' m: b
  48. .text:00401133                 sub     eax, ecx$ |/ x) p. s4 R
  49. .text:00401135                 neg     eax9 n4 l( Z. r5 k/ h! _$ R
  50. .text:00401137                 sbb     al, al/ T% \$ N8 l  f* ?% F
  51. .text:00401139                 inc     al2 q5 g. w! S+ f) H; c) Q& Q
  52. .text:0040113B                 xor     edx, edx" z! ?/ z* B9 o  p% L
  53. .text:0040113D                 test    al, al4 `9 s) V: H$ d" y& s8 x
  54. .text:0040113F                 setz    dl
    ! _1 _0 m( t6 f) q3 T& S4 ^
  55. .text:00401142                 mov     al, dl
    ! F. _; i, V" b1 ]0 W
  56. .text:00401144                 retn    4
    3 K% R5 p/ R/ i( F* ^+ _! S
  57. .text:00401147 ; ---------------------------------------------------------------------------1 U% }& ?6 a- s* z0 z
  58. .text:00401147: U/ r5 M9 w, B4 F  m
  59. .text:00401147 loc_401147:                             ; CODE XREF: sub_4010F0+8↑j
    6 t( V  G/ b( M* f9 e7 ]' n/ b
  60. .text:00401147                                         ; sub_4010F0+C↑j ...4 ~3 }1 d: l* d: v' `
  61. .text:00401147                 xor     al, al& r# g$ Z: w4 Q  ]4 S' V6 q, V: |( L) n
  62. .text:00401149                 xor     edx, edx
    : O/ h# p- t4 f1 t! V
  63. .text:0040114B                 test    al, al
    # D$ @; i  ~. I0 f8 L  y6 s
  64. .text:0040114D                 setz    dl
    + ^# [" p6 ]4 i$ ]( t
  65. .text:00401150                 mov     al, dl
    7 k0 _) |0 P  ^$ \6 Q
  66. .text:00401152                 retn    4$ G, b3 A* f/ q9 R5 ]5 J+ l
  67. .text:00401152 sub_4010F0      endp
    ! W, F3 b- h6 C# Z& ^+ A5 [
  68. .text:00401152% ]7 x2 L1 `2 G5 m  ~
  69. .text:00401152 ; ---------------------------------------------------------------------------
    4 z3 Y$ Q: @% O) }
  70. .text:00401155                 align 10h
    . T0 B* U8 u2 @7 F
  71. .text:00401160
    * K6 _7 Y; ~) w' e2 O
  72. .text:00401160 ; =============== S U B R O U T I N E =======================================5 H( j) K: J& ?6 Z* O' M: e/ C1 {
  73. .text:00401160
    ) T/ `9 W8 I' K5 j
  74. .text:00401160
    ' b/ `5 {* ^8 _7 @
  75. .text:00401160 sub_401160      proc near               ; CODE XREF: sub_4013D0+15↓p5 W  |- Q7 d" H! b
  76. .text:00401160                                         ; sub_4013F0+C↓p ...3 {6 I. Z1 A7 ]/ e2 ~
  77. .text:00401160
    : G4 q7 ]/ T2 g' |9 t4 v$ f8 C
  78. .text:00401160 arg_0           = dword ptr  4
    + @! S5 I! C9 T6 Z, E, y
  79. .text:00401160
    0 Q) K) L" u% q! ?) i% ?3 e
  80. .text:00401160                 push    esi5 b: `3 @" E& E  [3 ^
  81. .text:00401161                 push    edi
    " a! W: s3 W% M# `/ M. J- N5 x/ ~8 ~- F
  82. .text:00401162                 mov     edi, [esp+8+arg_0]
    9 D, ~" C* j. a9 W# q% A
  83. .text:00401166                 test    edi, edi8 ~2 l% {2 N/ J0 |9 k, J9 t
  84. .text:00401168                 mov     esi, ecx9 d( R1 a( {2 F' ~1 O% B
  85. .text:0040116A                 jz      short loc_4011CA; C+ f" ]9 o) V2 e. d: a
  86. .text:0040116C                 mov     eax, [esi]
    2 X4 H3 {; O: W0 S: f3 V: t
  87. .text:0040116E                 cmp     edi, eax* E& O( U/ w" Z- o* p' l2 Z7 B
  88. .text:00401170                 jz      short loc_4011CA
    4 O2 H6 C2 O% m$ p
  89. .text:00401172                 cmp     byte ptr [edi], 0
    5 N; ?: p# ~  K, O0 b  G5 Q
  90. .text:00401175                 jnz     short loc_4011A2
    . j' e2 a3 K7 I2 `0 @: [+ f
  91. .text:00401177                 test    eax, eax0 v- J* V9 q; l/ G( F
  92. .text:00401179                 mov     dword ptr [esi+4], 16 @' H' Q8 [" ]6 b+ K
  93. .text:00401180                 jz      short loc_40118B  Q( ]; A3 N% G7 u& n+ S7 s
  94. .text:00401182                 push    eax             ; void *4 H& u& L- p0 @
  95. .text:00401183                 call    ??_V@YAXPAX@Z   ; operator delete[](void *)- F4 h+ z' z! w+ l
  96. .text:00401188                 add     esp, 4' B8 Q: Q5 V' D9 k6 A7 i  |
  97. .text:0040118B" |) x6 e2 O( f" R/ I; Z
  98. .text:0040118B loc_40118B:                             ; CODE XREF: sub_401160+20↑j# x2 C" m. v0 \
  99. .text:0040118B                 push    6               ; Size
    8 ?" z/ U% K. ~7 E9 ^0 T5 e7 D) S8 u  `
  100. .text:0040118D                 call    j_??2@YAPAXI@Z  ; operator new(uint)
    ! ~6 W  z. U! [7 w
  101. .text:00401192                 add     esp, 4
    9 k9 s2 ?; \. x& I# {3 Z; s% x0 {6 y
  102. .text:00401195                 mov     [esi], eax4 C1 o; |5 c' Q7 O1 K/ w
  103. .text:00401197                 pop     edi8 ]6 ~$ T3 g' T. {
  104. .text:00401198                 mov     dword ptr [eax], 0
    " h+ a1 h! [7 ]3 t  Y( @
  105. .text:0040119E                 pop     esi" B! B, T7 \, ]. C, C/ O9 H
  106. .text:0040119F                 retn    4/ }7 U. }* O' i- n
  107. .text:004011A2 ; ---------------------------------------------------------------------------$ z  x4 k9 I" W: e, a+ P
  108. .text:004011A2* L+ |; s) }7 x2 K: h
  109. .text:004011A2 loc_4011A2:                             ; CODE XREF: sub_401160+15↑j
    * q7 @7 U; e  K( J4 Y6 @
  110. .text:004011A2                 mov     eax, edi6 t  I, z/ I' @; @
  111. .text:004011A4                 lea     edx, [eax+1]/ f+ ^/ E5 r, l+ V0 d. I
  112. .text:004011A7$ d3 N3 i/ O3 Q
  113. .text:004011A7 loc_4011A7:                             ; CODE XREF: sub_401160+4C↓j
    % d7 ]+ t$ N& G$ ^$ U: \
  114. .text:004011A7                 mov     cl, [eax]4 e. }1 V/ H. b; O. D  d
  115. .text:004011A9                 inc     eax, i' j" {( r/ w. s+ z
  116. .text:004011AA                 test    cl, cl
    ) u0 E% a  x8 y: k# {, A' Y7 b
  117. .text:004011AC                 jnz     short loc_4011A7
    8 R+ t% v6 D3 ~9 c. E* I
  118. .text:004011AE                 sub     eax, edx
    2 i7 b9 m/ ]3 g( t* S
  119. .text:004011B0                 push    eax
    ) G* l. j  e. v# \, U
  120. .text:004011B1                 mov     ecx, esi
    $ |+ ?2 A+ C2 @
  121. .text:004011B3                 call    sub_401030
    7 d. E, [0 X# `2 Q3 v
  122. .text:004011B8                 mov     edx, [esi]
    ' z' {% B  z2 B4 z( f; Y' P
  123. .text:004011BA                 mov     ecx, edi
    ) n9 w) O/ g/ i
  124. .text:004011BC                 lea     esp, [esp+0]$ x3 x# h7 F5 X
  125. .text:004011C06 U! `( R6 t1 R* r; U" K# V4 W
  126. .text:004011C0 loc_4011C0:                             ; CODE XREF: sub_401160+68↓j( O- C9 c! H; l* C$ a
  127. .text:004011C0                 mov     al, [ecx]
    ; @2 Y! G5 g& I* p6 k) z5 H* Z
  128. .text:004011C2                 inc     ecx0 C, d4 x$ |* L! j6 a% l9 O2 `
  129. .text:004011C3                 mov     [edx], al
    2 Q+ N& s2 W  J# ?& o- c% [* i
  130. .text:004011C5                 inc     edx
    2 m) V& v; M& Q! F% X! \5 z
  131. .text:004011C6                 test    al, al' V- @7 M' Z! \) t/ J3 r
  132. .text:004011C8                 jnz     short loc_4011C0
    . \' s0 m: G6 i1 c) b
  133. .text:004011CA1 ^9 |1 n$ ^8 a! I& s8 T
  134. .text:004011CA loc_4011CA:                             ; CODE XREF: sub_401160+A↑j; }. e& X, n& g- N1 v& I/ a5 H6 h
  135. .text:004011CA                                         ; sub_401160+10↑j
    2 I4 _/ ~9 P  \2 l4 q
  136. .text:004011CA                 pop     edi$ k. g0 n* j6 Y$ Z& E7 v% [
  137. .text:004011CB                 pop     esi+ b' a8 g5 A. ~% S# L9 z# h
  138. .text:004011CC                 retn    4; P1 X' D4 Q9 O& o" ~" N
  139. .text:004011CC sub_401160      endp
    ( a4 a2 j7 r5 j$ N2 z0 f/ D
  140. .text:004011CC
    3 `7 |/ T. @3 }+ V. D0 q; o
  141. .text:004011CC ; ---------------------------------------------------------------------------
复制代码

5 c9 |0 D% [2 C) W. G0 `( Y' K$ M0 D9 F6 }* R- G
' i1 Q' v/ m$ X! p& ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

高级模式
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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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