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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-27 13:23 编辑
2 o; b! r3 Z- s; P% }1 e: V+ J; J1 @5 E4 ^8 S8 G
本游戏采用了CEGUI,该组件能采用directx和opengl。
% M7 k6 _/ T$ W! S经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。
( |# G# c3 S, J7 B6 v游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。. |& w4 K* K  @% l1 v' s. ~9 W
(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)
6 e: c, w- `1 }2 u) t
8 n! Q$ W5 P$ M# F# Y1 n7 ]% Q$ z
在游戏中找一个字幕,在以下地方断下。
' z+ L- f% Z" H) n" j/ H由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
+ t; j) {* b0 o' d因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。( M& B& i0 [( \5 G% F

* v! l+ U. a* e+ O6 b; A! s
  1. NextLife.exe+11C5 - 42                    - inc edx; b  O# {5 L4 ^- }7 R' f
  2. 004011C5
复制代码
0 o; q/ N. @# g6 U, A4 C8 B
4 N" N0 T. [( m) [3 w
该地方的伪代码
, A9 A) \: K2 [5 C# P: r% h" `+ @0 Z
  1. void __thiscall sub_401160(char **this, const char *a2)( ~4 Y+ ^# z/ Z" u8 U
  2. {* E$ W, Z" q+ g+ F  i$ D
  3.   char **v2; // esi/ I  b, n9 N2 M% k% J  e$ L
  4.   char *v3; // eax4 `( c3 ?, i. n0 ?# B: O& F9 A
  5.   char *v4; // eax" S0 t1 @1 u+ B0 x; [

  6. 9 S3 |( x% m3 V7 l
  7.   v2 = this;: w; F1 P( H- |- `6 Q" F3 R
  8.   if ( a2 )
    ; y& e0 F$ L$ e, h# D6 W
  9.   {
    6 K) K* W  m: S- M" e6 v+ t
  10.     v3 = *this;
    - `6 Y& p2 b( H9 _, r) }( ?
  11.     if ( a2 != *this )
      O: `! L# R+ \# l
  12.     {  ^, Q9 K# b$ I  g8 q, d" n
  13.       if ( *a2 )" d2 _1 m& K* D' `/ `1 P/ N
  14.       {( A, Q( e- W; |: \% J8 g
  15.         sub_401030(strlen(a2));" G* t- \) T( j* P" r
  16.         strcpy(*v2, a2);/ R! v5 j* P, Y" j& {
  17.       }
    ' a) _* X; k+ C( N4 x" Y5 V. r) O! g
  18.       else8 e3 M/ n9 M; ?  A
  19.       {
    $ a% _- t$ O1 D3 F% p6 i
  20.         this[1] = (char *)1;
    / o: Q+ x4 i4 q) s8 a; b* `" F: F6 A  G
  21.         if ( v3 )& Y5 x! ?- h" U! {. [- i+ w: e
  22.           operator delete[](v3);
    # A0 O& g4 \% L. U" |  N5 U
  23.         v4 = (char *)operator new(6u);" x7 l& r1 F8 q. p
  24.         *v2 = v4;
    4 b% \5 m" n1 M2 H
  25.         *(_DWORD *)v4 = 0;5 q$ y  ~8 N( x& [! B0 L1 {+ a" N
  26.       }
    - l. [( e: K% Q& L. r% \# `% j2 f
  27.     }8 g+ W& L; |6 D7 o2 w
  28.   }
    ) H! ^- W0 u& a& P$ b
  29. }
复制代码

$ h4 d" S) r  H* q) L汇编代码8 G4 P6 N( F  H- A0 y4 t9 `
  1. .text:004010F0
    ) u# t" P1 u4 B3 A
  2. .text:004010F0 ; =============== S U B R O U T I N E =======================================
    " S1 a: E# J$ y' @, i# f+ L; C- |
  3. .text:004010F0
    " A0 n* u5 b; e1 K  {/ ~
  4. .text:004010F0
    0 D1 B5 x; P2 D+ b+ m) @# k! I+ d
  5. .text:004010F0 sub_4010F0      proc near               ; CODE XREF: _main+139↓p/ H9 [* [, z6 q( j' g
  6. .text:004010F0                                         ; sub_403240+97E↓p ..., g, o1 E) C: ]: v
  7. .text:004010F0
    6 X3 N8 f3 ^, N3 Q% A/ W6 S( u( o
  8. .text:004010F0 arg_0           = dword ptr  4
    2 L: [! S, P/ P" l
  9. .text:004010F0
    8 x5 b6 P# {' Q7 |
  10. .text:004010F0                 mov     eax, [ecx]
    % V, S# ^& @9 L8 K
  11. .text:004010F2                 test    eax, eax0 y8 {+ Z' Q7 X8 E' X1 P9 G, D
  12. .text:004010F4                 mov     edx, [esp+arg_0]
    * z1 j. k+ o$ u! z
  13. .text:004010F8                 jz      short loc_401147; i5 c, r. _' y3 n3 H1 `3 b8 V
  14. .text:004010FA                 test    edx, edx- d5 K1 A/ a" d
  15. .text:004010FC                 jz      short loc_4011472 y1 b5 ?# \/ y: g4 M
  16. .text:004010FE                 mov     cl, [eax]/ y: x' a! `' D1 s# q% c4 S' i
  17. .text:00401100                 test    cl, cl
    : P1 \5 U/ s, ?0 T
  18. .text:00401102                 jnz     short loc_401116
    - W8 }. X) U+ _+ J8 g, o4 N0 W
  19. .text:00401104                 cmp     byte ptr [edx], 0
    % b, M! U( B9 Z* o' O' A
  20. .text:00401107                 setz    al
    # M1 Q7 a8 j/ X' A( ]; U
  21. .text:0040110A                 xor     edx, edx6 H0 \( U8 q- X$ w' q" S5 K1 X0 K; N
  22. .text:0040110C                 test    al, al% o* b5 ~! l* Q8 N( D, D
  23. .text:0040110E                 setz    dl' _5 N& s% F$ C+ ?3 Z
  24. .text:00401111                 mov     al, dl
      Z* d+ W; v; T2 c1 W
  25. .text:00401113                 retn    4
    . l# u, p3 K7 |
  26. .text:00401116 ; ---------------------------------------------------------------------------
    : N2 z9 Q* U8 y
  27. .text:00401116
    8 t6 S/ d+ l. `5 o
  28. .text:00401116 loc_401116:                             ; CODE XREF: sub_4010F0+12↑j7 y4 Y0 u2 k3 e6 O( O4 r* I) v
  29. .text:00401116                 cmp     byte ptr [edx], 0
    0 i; u% Q/ \9 C9 ^- B
  30. .text:00401119                 jz      short loc_401147
    $ z' m; `9 T: ]* w& |' j9 k2 k
  31. .text:0040111B                 jmp     short loc_4011205 d4 I. O) s6 `( _) u: ~* \% o% q. J
  32. .text:0040111B ; ---------------------------------------------------------------------------
    + s, q9 Q" g6 a2 P/ n( Q
  33. .text:0040111D                 align 10h
      O; M, J2 q7 k+ w6 X
  34. .text:00401120
      q9 ]# f' Z! \' j: ^5 @
  35. .text:00401120 loc_401120:                             ; CODE XREF: sub_4010F0+2B↑j! D7 x  h: |: V9 J4 G& F; O
  36. .text:00401120                                         ; sub_4010F0+3B↓j
    5 K3 j3 U/ e' x- ^6 e2 c4 V% s
  37. .text:00401120                 cmp     cl, [edx]
    " f5 i( F7 `: B( a1 u9 q
  38. .text:00401122                 jnz     short loc_40112D) u) C4 I3 E( }; M% `5 ?& Y' d/ Q, T
  39. .text:00401124                 mov     cl, [eax+1], O" w" b; ~# Q5 F6 E% V  d6 d: B
  40. .text:00401127                 inc     eax
    # c/ d/ k" X- a/ [( N
  41. .text:00401128                 inc     edx% g- r8 ?& s: O/ I' r7 v7 \! f
  42. .text:00401129                 test    cl, cl' L  U5 z; o. }) N, o
  43. .text:0040112B                 jnz     short loc_401120
    0 ~1 U4 w% h; [6 k1 q
  44. .text:0040112D
    9 O4 ~. h6 ?5 @# ]
  45. .text:0040112D loc_40112D:                             ; CODE XREF: sub_4010F0+32↑j( K  V7 d5 V+ h" f" D- B& ^
  46. .text:0040112D                 movzx   eax, byte ptr [eax]
    4 T/ u! \- j! w+ \
  47. .text:00401130                 movzx   ecx, byte ptr [edx]7 B) \8 ?8 ~) Z6 k3 H
  48. .text:00401133                 sub     eax, ecx6 f2 q* l: Y$ M+ j) F! j
  49. .text:00401135                 neg     eax+ V1 Q% d6 {$ a" k* H' z5 N
  50. .text:00401137                 sbb     al, al  G$ p- B/ ~, J$ ^
  51. .text:00401139                 inc     al6 S6 x; B: S( j8 u
  52. .text:0040113B                 xor     edx, edx
    - z7 t* W- Z/ R! q( E
  53. .text:0040113D                 test    al, al
    % e' B1 M' Y6 K) \7 b0 `
  54. .text:0040113F                 setz    dl
    . x/ d) e: z7 {
  55. .text:00401142                 mov     al, dl; s9 H3 k2 b. U3 i; H! b
  56. .text:00401144                 retn    40 O, t, a- W" v& K+ b: w4 ^8 e
  57. .text:00401147 ; ---------------------------------------------------------------------------# O3 E& |- c0 E' |% Z" W+ k# P% x
  58. .text:004011475 ^4 z' }; a" j+ N) @; w
  59. .text:00401147 loc_401147:                             ; CODE XREF: sub_4010F0+8↑j
    5 D* o5 s5 P! P% v
  60. .text:00401147                                         ; sub_4010F0+C↑j ...
    : |- z/ s& j/ A) y" ~  ~9 g3 @
  61. .text:00401147                 xor     al, al6 C. M" o; s# |! H( G  ]
  62. .text:00401149                 xor     edx, edx
    % ^( \9 Q! ]* F2 |; t+ J8 w+ o2 {5 E. B
  63. .text:0040114B                 test    al, al
    * ]& D+ O/ y4 `" j8 ~
  64. .text:0040114D                 setz    dl2 x0 ?  u, Q6 N! F) J
  65. .text:00401150                 mov     al, dl- ~) W, F( q: q1 E: U% q% A5 s% c
  66. .text:00401152                 retn    4
    , r0 I3 h& @6 t
  67. .text:00401152 sub_4010F0      endp
    4 @3 Q6 U! s  z% s7 m5 R4 y
  68. .text:00401152
    ' }: {/ M+ W3 B9 O/ x4 ?0 _) t
  69. .text:00401152 ; ---------------------------------------------------------------------------$ Y- t) s" e8 J0 j7 ~, x
  70. .text:00401155                 align 10h2 C2 _; a( u$ U# Y2 _9 o  y- @
  71. .text:00401160
    3 ~4 P# B' e: i$ b
  72. .text:00401160 ; =============== S U B R O U T I N E =======================================' @2 e7 F$ a) H: K
  73. .text:004011603 a/ z  w7 S1 o8 S2 h3 D& s
  74. .text:00401160: B4 o/ `( @4 F3 r/ x3 c
  75. .text:00401160 sub_401160      proc near               ; CODE XREF: sub_4013D0+15↓p
    # x3 V; F- R% q1 c6 M/ E
  76. .text:00401160                                         ; sub_4013F0+C↓p ...
    ' s9 R8 C: ]- ^. H( W8 {
  77. .text:00401160
    * u/ H/ g3 }+ r6 ]4 `
  78. .text:00401160 arg_0           = dword ptr  4+ ?& x7 F# T& J
  79. .text:00401160" n5 _) ~. A. y7 u5 F
  80. .text:00401160                 push    esi
    4 ]' J( O* L  M8 P( J
  81. .text:00401161                 push    edi
    " k) t, P) m; w) }
  82. .text:00401162                 mov     edi, [esp+8+arg_0]2 q3 x$ W8 E7 r
  83. .text:00401166                 test    edi, edi
    % t, T1 j3 d" E! y" L/ r* u6 ?
  84. .text:00401168                 mov     esi, ecx3 c- g! {) Q/ r0 |/ q
  85. .text:0040116A                 jz      short loc_4011CA% p6 ?% u% a5 Y7 M/ l; g
  86. .text:0040116C                 mov     eax, [esi]
    $ z# B. D. G) V( x  n% Y) K
  87. .text:0040116E                 cmp     edi, eax
    7 |% Q/ h# w3 q7 F8 G1 y
  88. .text:00401170                 jz      short loc_4011CA
    & p7 u. E0 I, ]/ [* W9 E
  89. .text:00401172                 cmp     byte ptr [edi], 01 f4 b: H% |, g# G. t
  90. .text:00401175                 jnz     short loc_4011A2; G- r# H6 r7 n( }
  91. .text:00401177                 test    eax, eax1 E& O0 Y. x; c% {- M# Y# U- s$ t
  92. .text:00401179                 mov     dword ptr [esi+4], 1# ], {7 U& g2 b. q( c# I$ Y
  93. .text:00401180                 jz      short loc_40118B6 z' s: M5 C. [; N) z
  94. .text:00401182                 push    eax             ; void *
    + b; f( Z$ T% E- g6 G1 A
  95. .text:00401183                 call    ??_V@YAXPAX@Z   ; operator delete[](void *)& J5 R, w' X. |- j4 n% a% g' v
  96. .text:00401188                 add     esp, 45 i* l9 J+ ?: D; d8 H& R* s
  97. .text:0040118B
    # z: ]$ O5 Q6 e7 s
  98. .text:0040118B loc_40118B:                             ; CODE XREF: sub_401160+20↑j
    7 J2 Y: y4 Q1 }4 A  ]0 C8 F
  99. .text:0040118B                 push    6               ; Size
    - a$ W. ?7 l6 T: B7 L5 p9 ?9 n+ C
  100. .text:0040118D                 call    j_??2@YAPAXI@Z  ; operator new(uint)% W! a+ k2 [8 E! Z  v
  101. .text:00401192                 add     esp, 4% w2 H2 C+ Z9 c1 c, G0 x5 r
  102. .text:00401195                 mov     [esi], eax0 W" U! Y: q+ F; \
  103. .text:00401197                 pop     edi. N( ?/ U9 [( @
  104. .text:00401198                 mov     dword ptr [eax], 00 C0 X! x0 T& e6 f- `0 C5 [) y
  105. .text:0040119E                 pop     esi
    $ c" S: J: ^: W
  106. .text:0040119F                 retn    46 ?2 d" J  M8 [' I4 w$ r" Y
  107. .text:004011A2 ; ---------------------------------------------------------------------------5 r3 }: b1 x: r4 S7 \% S0 N
  108. .text:004011A2
    % a0 [7 I6 f& {- H( z  n
  109. .text:004011A2 loc_4011A2:                             ; CODE XREF: sub_401160+15↑j
    & q$ t. I  |& `: H. O
  110. .text:004011A2                 mov     eax, edi' u) E0 H" ]2 |2 `( E9 o! r
  111. .text:004011A4                 lea     edx, [eax+1]2 ^4 O$ H, R1 \/ v9 u
  112. .text:004011A7/ K  R# c7 x; p
  113. .text:004011A7 loc_4011A7:                             ; CODE XREF: sub_401160+4C↓j4 X9 C+ z& _' E( t0 V
  114. .text:004011A7                 mov     cl, [eax]
    5 t  ]2 s. ?, Y& n3 O: {. K
  115. .text:004011A9                 inc     eax- x8 F3 w) b2 Q! P
  116. .text:004011AA                 test    cl, cl
    6 f6 B: N0 W! ?) l
  117. .text:004011AC                 jnz     short loc_4011A7" F) J! g1 m7 q
  118. .text:004011AE                 sub     eax, edx3 p: ?) t$ {! M. W, k" Y$ q" p+ O
  119. .text:004011B0                 push    eax
    . C5 @: S; v  \% i+ I0 _
  120. .text:004011B1                 mov     ecx, esi
    . Z) x1 J3 |9 H: T+ M$ \* q
  121. .text:004011B3                 call    sub_401030. x( F7 t- N$ f& C- R$ w7 Z; E
  122. .text:004011B8                 mov     edx, [esi]5 W  E- Y; @2 E- E2 y: z
  123. .text:004011BA                 mov     ecx, edi
    6 ^( S/ ]7 N0 u+ x' ~2 b
  124. .text:004011BC                 lea     esp, [esp+0]6 C1 L+ R# V- D, G9 G& f6 M$ W
  125. .text:004011C0
    ; a0 f+ |! t0 K, {/ v! g9 \, L
  126. .text:004011C0 loc_4011C0:                             ; CODE XREF: sub_401160+68↓j
    ! `% }* ^5 }( L1 e: W& G* }+ ^/ o) P# E
  127. .text:004011C0                 mov     al, [ecx]" E+ g3 I+ r, x8 E- f5 A  {- z
  128. .text:004011C2                 inc     ecx& L. ~( I" }3 \$ P8 N
  129. .text:004011C3                 mov     [edx], al
    ; i1 N5 h' R; C- C) c
  130. .text:004011C5                 inc     edx1 c. \5 e0 n) I; s
  131. .text:004011C6                 test    al, al
    . v0 n  Z& B: y: \
  132. .text:004011C8                 jnz     short loc_4011C0
    . P* _+ Y4 [/ u3 X% Q0 S# s& C
  133. .text:004011CA5 g3 X8 O/ `. J$ I% K# |
  134. .text:004011CA loc_4011CA:                             ; CODE XREF: sub_401160+A↑j
    1 p1 Z8 M" \. r7 }
  135. .text:004011CA                                         ; sub_401160+10↑j
    4 D4 q+ C) j$ U
  136. .text:004011CA                 pop     edi
    . S* R6 i& k$ a. F4 W
  137. .text:004011CB                 pop     esi
    # [/ ^, |: b- R. @- ?9 _: _( A9 r2 r
  138. .text:004011CC                 retn    4
    8 L9 i* ~8 l" k; Z4 v
  139. .text:004011CC sub_401160      endp; x6 M1 |/ {2 {1 w4 d) ~* R
  140. .text:004011CC) L* v7 t0 V7 ?, F
  141. .text:004011CC ; ---------------------------------------------------------------------------
复制代码

! r1 G  L$ u" P; ^0 f% q' n" C3 \2 e8 A) J( D
- f$ ]/ i! j' e3 j& y
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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