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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-27 13:23 编辑 % S* a( j% k3 V8 k) B- t5 }: _

) C  d, e6 ^7 u- x. X& Y本游戏采用了CEGUI,该组件能采用directx和opengl。" {8 W( I. g( P5 M# u2 f
经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。% H  V8 g8 J0 y$ F! q; G) g
游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。8 m" _: ^" p5 o- @+ [+ q
(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)
. L, m+ a6 C6 x" N( v# f  r
3 w3 C8 Z% r9 l( h- S
) Q0 [2 F+ L2 n# C1 ~- m在游戏中找一个字幕,在以下地方断下。6 |$ k5 _/ @) P# b* ?. {' U
由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
( h1 u& X6 p6 |9 Q因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。
! Z" u1 P2 ^  ]8 ~: [7 k
: e! e$ c! x8 i/ z* _) V% B
  1. NextLife.exe+11C5 - 42                    - inc edx
      z4 I( K4 V* h5 @
  2. 004011C5
复制代码

( n/ T$ Q! E( Q  k0 A4 G  O5 B
该地方的伪代码
+ w+ S; t" }. ]2 P
  1. void __thiscall sub_401160(char **this, const char *a2)* ]1 Z# p# }. v# v
  2. {
    5 Q2 K  S1 ]" Y) J/ f
  3.   char **v2; // esi4 `  W2 l% o/ S5 z3 Q; \; {
  4.   char *v3; // eax' X  Z# A2 l8 }& Q
  5.   char *v4; // eax
    2 i$ h6 U) F: l  r9 C2 H

  6. * j2 T2 @2 v" f) W9 k4 \
  7.   v2 = this;
    + ?/ P) r1 p) s& D8 f& a
  8.   if ( a2 )# i2 u& }' N4 Y
  9.   {4 Y0 ~. l3 P' N
  10.     v3 = *this;. I: W% \; x5 J2 ^
  11.     if ( a2 != *this )9 e- z/ I1 n$ l/ G  `- K
  12.     {6 t9 S5 C9 i  M4 x" |
  13.       if ( *a2 )
    8 k$ T9 S7 ?8 p# x* o, K' t
  14.       {6 r4 I, q* Z1 c! f; n
  15.         sub_401030(strlen(a2));! Q! p5 e5 i; y8 v& L: E7 H
  16.         strcpy(*v2, a2);
    5 n: `: u2 R' {; o/ y! u' ^
  17.       }
    . ~5 C; o+ d' M, ~$ e
  18.       else6 K. U. U3 A5 F4 `7 @# B
  19.       {
    ; d" [  c" r/ x" E- w- n
  20.         this[1] = (char *)1;
    ) \0 k3 T# U, E
  21.         if ( v3 )2 F6 n# |+ o' Y; i/ @& S2 Z4 S- z
  22.           operator delete[](v3);
    4 [, l- t8 C7 x* Q/ \0 e/ f
  23.         v4 = (char *)operator new(6u);
    9 w4 k+ U0 y* V  i
  24.         *v2 = v4;  X" ]7 I" |, x% M
  25.         *(_DWORD *)v4 = 0;
    - I( P4 I& s$ B
  26.       }
    / N% e% t% j5 f9 h8 O
  27.     }
    - x# i' U, R8 H
  28.   }
    - l! R$ g6 z" z* {
  29. }
复制代码
4 S& }7 I$ Z) n2 ~; s- E$ k6 S' F( P
汇编代码# G1 ?( U& R% l/ u9 c$ ]+ B
  1. .text:004010F0* h- D4 h+ @& Q6 ?! V9 v2 M
  2. .text:004010F0 ; =============== S U B R O U T I N E =======================================) G  p3 }' H6 J$ q. k! @
  3. .text:004010F0$ M; x0 Z0 o. r; d
  4. .text:004010F0* n  j. D, l) K: z
  5. .text:004010F0 sub_4010F0      proc near               ; CODE XREF: _main+139↓p
    3 G* L2 b  A* K6 S( [
  6. .text:004010F0                                         ; sub_403240+97E↓p ...
    ) L4 j4 X/ q1 C) y5 s' X! f. ]
  7. .text:004010F0$ a$ t: d- `% N0 L
  8. .text:004010F0 arg_0           = dword ptr  48 {! Q3 G. Q7 m
  9. .text:004010F0+ ]! L9 I/ X! P0 S& A9 Z! D$ p& N
  10. .text:004010F0                 mov     eax, [ecx]
    ( S6 s( W4 p" n" z
  11. .text:004010F2                 test    eax, eax/ N: N' Q, I) A3 Q
  12. .text:004010F4                 mov     edx, [esp+arg_0]
    & R4 `9 a: e* P# H% V
  13. .text:004010F8                 jz      short loc_401147
    4 _* f1 S4 i+ J% p9 R8 Y7 L# `
  14. .text:004010FA                 test    edx, edx
    * p3 N; i! T0 P+ W
  15. .text:004010FC                 jz      short loc_401147  K) d4 {! r, n
  16. .text:004010FE                 mov     cl, [eax]& a; l9 ?; f. M0 P
  17. .text:00401100                 test    cl, cl
    ( Q# v  U& O! R& h3 f: p) \+ l
  18. .text:00401102                 jnz     short loc_401116
    5 J& _/ ?1 j$ @1 q4 w$ H  h
  19. .text:00401104                 cmp     byte ptr [edx], 08 T4 h$ W! E' a! P  N# L
  20. .text:00401107                 setz    al* X  n( H, }; @& P9 _
  21. .text:0040110A                 xor     edx, edx
    ' V% V4 a" \, V
  22. .text:0040110C                 test    al, al
    " ?+ _' C* u! H5 t2 r6 k  @
  23. .text:0040110E                 setz    dl
    0 x* e7 s- D; }( ~, ~+ m
  24. .text:00401111                 mov     al, dl
    9 c6 H8 N) w0 q/ M5 a0 k- e  Z
  25. .text:00401113                 retn    42 h6 h* W7 ^$ A' B+ P# T
  26. .text:00401116 ; ---------------------------------------------------------------------------
    2 L9 e  A; u" @8 M' l# ~" C4 Y
  27. .text:00401116- b, O( w- |: R- W7 Z
  28. .text:00401116 loc_401116:                             ; CODE XREF: sub_4010F0+12↑j; |* N( {7 V4 Y: \  B
  29. .text:00401116                 cmp     byte ptr [edx], 0
    $ X6 Y* ?! m7 g' U' U
  30. .text:00401119                 jz      short loc_4011470 `' Y6 S) G* M  q
  31. .text:0040111B                 jmp     short loc_401120
    3 T8 q4 b0 u& B# N+ R* U
  32. .text:0040111B ; ---------------------------------------------------------------------------
    " n. U- I% q; ~. c2 ^' H$ p
  33. .text:0040111D                 align 10h- N( y! n  s) g: q  e
  34. .text:00401120
    - a. U% m4 B$ p
  35. .text:00401120 loc_401120:                             ; CODE XREF: sub_4010F0+2B↑j) d2 y+ Y. b, t7 a% K/ E
  36. .text:00401120                                         ; sub_4010F0+3B↓j3 I# l$ o4 T- f& @8 v
  37. .text:00401120                 cmp     cl, [edx]; W1 x' z% W- O# [  g& I
  38. .text:00401122                 jnz     short loc_40112D
    * r2 G% @$ I3 Q" G7 o
  39. .text:00401124                 mov     cl, [eax+1]
    0 O! f, J, ]" c
  40. .text:00401127                 inc     eax+ s# k/ V4 L1 q1 f5 ^
  41. .text:00401128                 inc     edx& \  g: |8 m! b  c
  42. .text:00401129                 test    cl, cl
    3 ~, B9 J& b0 Q/ t# A) \
  43. .text:0040112B                 jnz     short loc_401120% o2 {( `7 A  b" I- q4 \
  44. .text:0040112D! e9 Q$ {; H+ r3 n2 @# e
  45. .text:0040112D loc_40112D:                             ; CODE XREF: sub_4010F0+32↑j; ~9 Y0 H% X$ R, R7 i: v: h
  46. .text:0040112D                 movzx   eax, byte ptr [eax]% D, l  r+ h6 f0 v, h
  47. .text:00401130                 movzx   ecx, byte ptr [edx]( z2 I  p2 P, Q0 a/ m
  48. .text:00401133                 sub     eax, ecx
    . E! B2 Y- N" j6 z# f
  49. .text:00401135                 neg     eax
    9 N6 v1 v2 G* m& J1 L
  50. .text:00401137                 sbb     al, al
    0 W3 J* X4 b0 L" g1 t9 P
  51. .text:00401139                 inc     al
    # }4 g+ ?$ j- B: w
  52. .text:0040113B                 xor     edx, edx
    ' N$ ~$ X7 X+ Y8 q& h
  53. .text:0040113D                 test    al, al5 |. u  ^- Z5 V: ^8 {/ I
  54. .text:0040113F                 setz    dl
    ' w3 f! @! l* m: b
  55. .text:00401142                 mov     al, dl( b9 c) ~# t2 y9 _
  56. .text:00401144                 retn    40 A4 _/ b4 Z- @4 q  Y$ I
  57. .text:00401147 ; ---------------------------------------------------------------------------4 E2 W* V" a9 q/ J# x7 C" W
  58. .text:00401147
    % b/ `7 D9 h% Q8 ?7 s% i
  59. .text:00401147 loc_401147:                             ; CODE XREF: sub_4010F0+8↑j# u* y) E; u7 A; {/ P% c
  60. .text:00401147                                         ; sub_4010F0+C↑j ...2 U! V1 h% N1 \$ e$ Q6 {. x& p. w' m
  61. .text:00401147                 xor     al, al
    % p4 z& F* K3 n
  62. .text:00401149                 xor     edx, edx& @# T9 X5 J3 m% }4 y0 j
  63. .text:0040114B                 test    al, al) b2 y9 S5 d8 y! Q
  64. .text:0040114D                 setz    dl
    9 {  w  X7 |: C
  65. .text:00401150                 mov     al, dl. @1 _5 c" h8 n( `
  66. .text:00401152                 retn    4
    / b1 I5 Y3 f% G
  67. .text:00401152 sub_4010F0      endp" N8 m  h% v; o! Y) P1 Y
  68. .text:00401152
    # K: a& Y! o8 r6 ^
  69. .text:00401152 ; ---------------------------------------------------------------------------
    " @; U2 z! S2 I' y* _: m5 V, ]
  70. .text:00401155                 align 10h, S( u" S& p8 S) d
  71. .text:00401160
    . {5 k) H  x4 l' R, j( [! X5 x
  72. .text:00401160 ; =============== S U B R O U T I N E =======================================7 J  d" V% W* y6 ?& q) y3 s3 K
  73. .text:00401160
    - o* g, T" f, ]/ G! ^
  74. .text:004011609 u) N9 K) u: [) x. w9 ?* j
  75. .text:00401160 sub_401160      proc near               ; CODE XREF: sub_4013D0+15↓p) e, M8 F: `& ?! F" D6 g3 ]& }. W
  76. .text:00401160                                         ; sub_4013F0+C↓p ...
    + {* S. ?) S$ ^
  77. .text:00401160
    . z0 |1 Q/ k3 M9 {0 F: m4 F) r' o
  78. .text:00401160 arg_0           = dword ptr  4
    ( _- y) r# l5 }. X0 @, u
  79. .text:00401160
      @5 _8 T9 W* z% y2 l: `2 r  W
  80. .text:00401160                 push    esi
    ) i- y( r$ x' V' t+ |8 \8 ]
  81. .text:00401161                 push    edi
    $ }: P& h: g1 @  d1 Y
  82. .text:00401162                 mov     edi, [esp+8+arg_0]
    / E# _9 z* Z5 `: z1 h4 N
  83. .text:00401166                 test    edi, edi
    - |' P+ v5 z( j: ?5 f/ k9 |/ o& S
  84. .text:00401168                 mov     esi, ecx
    ) {, ^" o9 e# l
  85. .text:0040116A                 jz      short loc_4011CA5 n$ i7 |; V: e. ~
  86. .text:0040116C                 mov     eax, [esi]7 P" m* y- K" B: V1 e7 h
  87. .text:0040116E                 cmp     edi, eax. R& o4 S* I7 x! L: ~
  88. .text:00401170                 jz      short loc_4011CA. [7 D+ {; ^4 s$ k! V2 s: X4 b' D
  89. .text:00401172                 cmp     byte ptr [edi], 0, [% t  Q( m) o6 V2 Q6 U% Q
  90. .text:00401175                 jnz     short loc_4011A2+ W' z1 w9 O/ |
  91. .text:00401177                 test    eax, eax
    0 h: A& [8 F6 i0 |4 u& {( d( |
  92. .text:00401179                 mov     dword ptr [esi+4], 16 X7 I6 b, g7 [% U
  93. .text:00401180                 jz      short loc_40118B, l+ r& h# o( ~. B5 ], a
  94. .text:00401182                 push    eax             ; void *1 t2 O! K# A! z9 ^& _% s4 w
  95. .text:00401183                 call    ??_V@YAXPAX@Z   ; operator delete[](void *)
    1 J/ S) a2 j/ O8 C
  96. .text:00401188                 add     esp, 4/ W; P( o0 ^! F' v
  97. .text:0040118B
    % ~$ V! x2 I1 t* u" {& n
  98. .text:0040118B loc_40118B:                             ; CODE XREF: sub_401160+20↑j/ j6 v) V, l$ }4 e9 q3 u
  99. .text:0040118B                 push    6               ; Size
    ( s2 I/ x* X9 @) U2 B; N
  100. .text:0040118D                 call    j_??2@YAPAXI@Z  ; operator new(uint)  e) v" x7 @& F
  101. .text:00401192                 add     esp, 4' E" _1 |2 v; p/ {  S
  102. .text:00401195                 mov     [esi], eax
    ! Z4 Z& `+ Z! \9 `9 P
  103. .text:00401197                 pop     edi
    $ K! i  ^% a9 O: Q( P5 l
  104. .text:00401198                 mov     dword ptr [eax], 03 ]4 J/ [3 U0 E3 B( E/ x+ N
  105. .text:0040119E                 pop     esi% Q4 c$ A8 i$ L! A. A- v" Q
  106. .text:0040119F                 retn    4
    . W1 E, R% l. P- w% |/ h! l
  107. .text:004011A2 ; ---------------------------------------------------------------------------
    5 g$ e1 i! N  a) b# C+ t
  108. .text:004011A2
    ; S3 G3 a' ?/ V" E" p& y: A& L$ G
  109. .text:004011A2 loc_4011A2:                             ; CODE XREF: sub_401160+15↑j! R4 E3 A9 D- w. R1 W$ i
  110. .text:004011A2                 mov     eax, edi
    . Z3 O4 v( Z4 s7 T, `' w
  111. .text:004011A4                 lea     edx, [eax+1]7 v2 x9 Z3 H9 X+ m0 {! }
  112. .text:004011A7: x- t4 S. R' |
  113. .text:004011A7 loc_4011A7:                             ; CODE XREF: sub_401160+4C↓j
    * _8 u, I4 z1 {' g! ^8 W2 U
  114. .text:004011A7                 mov     cl, [eax]
    ' t# y1 Z' x& n! u
  115. .text:004011A9                 inc     eax  @. t' k, r# X! C
  116. .text:004011AA                 test    cl, cl
    ( ?2 G  e$ A: y
  117. .text:004011AC                 jnz     short loc_4011A7
    : Y2 Q/ k" q9 |
  118. .text:004011AE                 sub     eax, edx
    0 F- I- e1 l  {- x. H
  119. .text:004011B0                 push    eax1 m! E1 _1 `* w9 L2 x) X
  120. .text:004011B1                 mov     ecx, esi
    : y. y+ H1 L: Q0 I5 ]7 j6 [( p
  121. .text:004011B3                 call    sub_401030
    1 ^5 Y* @* \* ~8 b6 |
  122. .text:004011B8                 mov     edx, [esi]! H. j0 o; N! H+ U- o
  123. .text:004011BA                 mov     ecx, edi
    9 n8 E5 x3 Y: h% C( I$ A$ ?/ n
  124. .text:004011BC                 lea     esp, [esp+0]6 Y: M9 J) a) h7 U
  125. .text:004011C0- [0 _- k- x) c8 c1 l: w% ^
  126. .text:004011C0 loc_4011C0:                             ; CODE XREF: sub_401160+68↓j( N2 k# @( q2 }! T$ M/ i6 e+ h
  127. .text:004011C0                 mov     al, [ecx]
    # A/ _1 x% P  e6 Q; [
  128. .text:004011C2                 inc     ecx" D7 m' [) A- U/ P: H
  129. .text:004011C3                 mov     [edx], al
    " }6 O; @, o/ F1 n- R
  130. .text:004011C5                 inc     edx
    1 Y, [. ?+ h& ]) i# d
  131. .text:004011C6                 test    al, al) `/ w0 ]: R8 V2 A0 l2 t
  132. .text:004011C8                 jnz     short loc_4011C0
    3 X$ M4 N9 P7 N
  133. .text:004011CA
    0 D# A) |+ o6 E! m& E0 ?9 ?) k
  134. .text:004011CA loc_4011CA:                             ; CODE XREF: sub_401160+A↑j
    8 I6 Q; g7 j! F( z' y! `
  135. .text:004011CA                                         ; sub_401160+10↑j9 U9 B# h7 X, k# E- Y
  136. .text:004011CA                 pop     edi: l" `/ O. {+ k/ F4 j
  137. .text:004011CB                 pop     esi
    ( F, ^1 f- k; l  }# U
  138. .text:004011CC                 retn    4
    7 L/ O1 `/ T* R% {* u- ?% _0 }; Q' ]
  139. .text:004011CC sub_401160      endp
    8 R( a7 Y& M* t
  140. .text:004011CC
    ! N3 i! }6 v5 |3 C
  141. .text:004011CC ; ---------------------------------------------------------------------------
复制代码

' d  I! G  e8 g. |, B2 i$ a/ W3 ^: _  A8 D8 ]4 S
' j+ d/ Q" 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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