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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-27 13:23 编辑
! l- H( y5 D3 ^2 ]- F) u7 @6 T% H# O8 R% P5 l; K% C! L1 ^
本游戏采用了CEGUI,该组件能采用directx和opengl。
) _" X% X; t8 B  u4 {' a% \1 S8 \经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。
1 c* j/ o: Y, U游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。0 N$ M* W' d# w4 v$ ?
(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)
5 |5 f, f. m5 E! r  t" o2 [  J% T. J4 ]/ z2 {  Q& |- S

. z0 x" i" H% }: j4 k; k在游戏中找一个字幕,在以下地方断下。
6 m, l2 _; D, |0 N由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),9 u/ u- n4 A4 ^6 U, e$ y. }# \8 i
因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。
3 \' _* W1 O9 P/ z3 F2 |9 h- T/ c( n+ r1 M
  1. NextLife.exe+11C5 - 42                    - inc edx
    " ]9 d: ~% @0 h' y
  2. 004011C5
复制代码
) h& v" ~5 H1 Y0 N) N2 R) A
; R, s, w* z5 h$ |8 s. C/ k# f
该地方的伪代码
6 q; I, ?& T7 a2 F: ]6 Z5 }
  1. void __thiscall sub_401160(char **this, const char *a2)
    2 w: I* B8 e, X& `
  2. {+ d3 x2 x2 W$ U9 ]. D
  3.   char **v2; // esi
    0 P4 n0 N; e+ t. _9 J! I& H
  4.   char *v3; // eax
    ' \1 E. i/ @; V3 w$ y
  5.   char *v4; // eax
    ' \5 q' F* F  X  C- D" P; y

  6. . ^* M4 x2 x- S& b+ U- R" T7 F
  7.   v2 = this;* A8 u$ r' K, S% o$ N" \
  8.   if ( a2 )
    # a. K) {  h  {, Z+ N& f
  9.   {
    $ v7 ~( L, ]2 ]. p$ V
  10.     v3 = *this;9 J# L2 Y+ A/ ]6 o2 f- n" ?9 U
  11.     if ( a2 != *this )
    0 V1 j  d# O# p  U- G& A" K
  12.     {, h  g( Z6 }3 t+ I" f* j
  13.       if ( *a2 )+ A& k. G6 b; k6 p. D' K
  14.       {3 J# `8 K( \! ~" E! q
  15.         sub_401030(strlen(a2));, D$ N) g; K  w
  16.         strcpy(*v2, a2);' J3 Z& o4 z; \% F
  17.       }; Q5 ^! h0 `0 w2 l
  18.       else
    / I6 @6 z& v# R/ J0 a: r  D4 Z8 @$ Q, ~
  19.       {
    , l& ^; Y, k9 {5 E* l. K
  20.         this[1] = (char *)1;. G0 G0 j2 ]+ h, u
  21.         if ( v3 ): }1 g# m0 b4 @5 H0 w4 I
  22.           operator delete[](v3);
    , a1 \) f) X3 Z# C
  23.         v4 = (char *)operator new(6u);
    ) H, [+ c; i. p: ^, C# Z
  24.         *v2 = v4;  k$ B8 u4 C! ~% ]
  25.         *(_DWORD *)v4 = 0;
    ' |* r) J7 Z. ^( T5 H5 O/ u" ^
  26.       }
    , T1 a% {8 E9 F* ^1 g1 n
  27.     }$ J% y) s; X6 a* n
  28.   }- O9 M$ w" N2 \% w
  29. }
复制代码

: b( Z  e8 [" q2 J( _) r汇编代码
6 S; z2 N) N$ A- J& ~9 Y9 [) e- X
  1. .text:004010F0. Q3 M( h9 e9 Q
  2. .text:004010F0 ; =============== S U B R O U T I N E =======================================9 Z" V9 G8 p; S* b& y
  3. .text:004010F0
    % X! m2 }! p/ h) P; B# u
  4. .text:004010F0
    1 w$ g1 D# d+ D* u
  5. .text:004010F0 sub_4010F0      proc near               ; CODE XREF: _main+139↓p
    3 C& h3 o) L7 T; y9 X% w  I5 m+ o
  6. .text:004010F0                                         ; sub_403240+97E↓p ...
      f& q1 Y# d0 \" O: @: A
  7. .text:004010F0$ I3 b; e! `7 [$ I; H) K
  8. .text:004010F0 arg_0           = dword ptr  4
    $ f; o$ C# f9 T
  9. .text:004010F0
    ) M9 {# ^2 ?; l; P: B, j  M- G: D
  10. .text:004010F0                 mov     eax, [ecx]+ h4 O  S2 }# b" k
  11. .text:004010F2                 test    eax, eax
    , x: ?; X  A  g7 n
  12. .text:004010F4                 mov     edx, [esp+arg_0]
    - x1 x0 n8 {4 \% a) p0 O
  13. .text:004010F8                 jz      short loc_401147( z/ Q: s2 F% U/ F9 g
  14. .text:004010FA                 test    edx, edx: b. s5 L+ H# I3 d* L
  15. .text:004010FC                 jz      short loc_401147
    - D) E- q8 H: {' T9 s- h
  16. .text:004010FE                 mov     cl, [eax]" n: d- D- ~" m
  17. .text:00401100                 test    cl, cl
    + Y) A# u$ ?0 B
  18. .text:00401102                 jnz     short loc_401116
    6 U+ g1 m# m: V$ W- M% l
  19. .text:00401104                 cmp     byte ptr [edx], 0
    5 p& a0 D: X. t! K- h, v
  20. .text:00401107                 setz    al
    ( V% K* N9 n1 d0 H* {% `. g
  21. .text:0040110A                 xor     edx, edx, s# ^+ g& u6 u
  22. .text:0040110C                 test    al, al% X, w; O* _. K& ^$ B% K
  23. .text:0040110E                 setz    dl9 D* N  U; S. H- i, i8 i
  24. .text:00401111                 mov     al, dl
    2 c" c7 [+ [' I: Y2 `
  25. .text:00401113                 retn    4: i( ]0 s* o* h) |; H2 e) _' }) ]: B& t
  26. .text:00401116 ; ---------------------------------------------------------------------------
    * ~$ r1 j# O5 q# R; G4 E
  27. .text:00401116% O0 \! D) L0 O  |; n3 m- O3 }, v
  28. .text:00401116 loc_401116:                             ; CODE XREF: sub_4010F0+12↑j( s9 X* ^, m4 c* g
  29. .text:00401116                 cmp     byte ptr [edx], 0) M- T6 Y* o; k# Z/ @; }. y
  30. .text:00401119                 jz      short loc_401147
    0 {/ G5 {! C6 ~6 N
  31. .text:0040111B                 jmp     short loc_401120% x  Z  U0 `/ T, x; J
  32. .text:0040111B ; ---------------------------------------------------------------------------
    / M9 B; L0 Z8 e! h' F) G4 \' w
  33. .text:0040111D                 align 10h, t8 L, B6 }0 r2 o% y
  34. .text:00401120
    : A; B0 ?4 z% {7 X' z$ g7 [% B
  35. .text:00401120 loc_401120:                             ; CODE XREF: sub_4010F0+2B↑j
    9 J6 l4 c$ O' o' P: c1 T
  36. .text:00401120                                         ; sub_4010F0+3B↓j$ S) ~" d7 i8 g6 j2 `9 H
  37. .text:00401120                 cmp     cl, [edx]
    ( h2 c7 Y( ]! Q( r( o% B
  38. .text:00401122                 jnz     short loc_40112D5 ?8 P: |5 t0 n8 g( P+ Z+ N; A& h
  39. .text:00401124                 mov     cl, [eax+1]
    ) A& X( @( ^/ J2 @' s1 ^
  40. .text:00401127                 inc     eax
    2 t3 W% E. w" x: \: q
  41. .text:00401128                 inc     edx
    " E8 F/ O1 E0 q
  42. .text:00401129                 test    cl, cl8 `5 W  e. _+ x7 m; o
  43. .text:0040112B                 jnz     short loc_401120
    : v& `3 d. i  R+ N! a% r5 h& w1 K8 W
  44. .text:0040112D9 R% h& b8 t/ W2 {0 e- n3 t) D9 O! y
  45. .text:0040112D loc_40112D:                             ; CODE XREF: sub_4010F0+32↑j5 X, @/ D7 q+ w+ x
  46. .text:0040112D                 movzx   eax, byte ptr [eax]
    ( |8 y/ @, `; k9 `
  47. .text:00401130                 movzx   ecx, byte ptr [edx]3 j+ n& \. @5 Y" J* x
  48. .text:00401133                 sub     eax, ecx
    0 ^/ X: _: A5 T4 S
  49. .text:00401135                 neg     eax
    3 U  J4 D. J  r& L/ l: ]
  50. .text:00401137                 sbb     al, al" l4 k: U$ H4 x
  51. .text:00401139                 inc     al$ [  R& f7 u+ o% z" F
  52. .text:0040113B                 xor     edx, edx" D. J# w* [2 R5 T0 g
  53. .text:0040113D                 test    al, al
    6 V1 F9 c5 ]3 O% \( Z0 Y8 l" a
  54. .text:0040113F                 setz    dl
    3 S8 `: O' s% n' o
  55. .text:00401142                 mov     al, dl5 S  Y* C! B1 T+ b) L* f6 U; {8 l+ O
  56. .text:00401144                 retn    4: }5 e+ h$ J* `" Q' H" [
  57. .text:00401147 ; ---------------------------------------------------------------------------
    ) j( O: g8 N0 m) r# D
  58. .text:00401147# \; f4 m3 ^. C$ a
  59. .text:00401147 loc_401147:                             ; CODE XREF: sub_4010F0+8↑j# t% D' i* O% G8 w5 J, o
  60. .text:00401147                                         ; sub_4010F0+C↑j ...% o9 \; ]4 v4 u% z% k* c% |
  61. .text:00401147                 xor     al, al
    + N" ]) D1 \' y0 D
  62. .text:00401149                 xor     edx, edx
    . C  Z' H' g6 O6 H; s
  63. .text:0040114B                 test    al, al
    - n; w' P# ^8 F* D0 h
  64. .text:0040114D                 setz    dl* U* O0 k* _1 i/ b' z$ ^( V) w
  65. .text:00401150                 mov     al, dl
    8 b) ~! s: ?1 B8 g/ D: j
  66. .text:00401152                 retn    4
    4 [! M. e6 z3 N) V% ^
  67. .text:00401152 sub_4010F0      endp
    ( k& a1 T2 @; a2 ?
  68. .text:00401152
    2 m; Z% B: V! k- s) F
  69. .text:00401152 ; ---------------------------------------------------------------------------
    ( n/ Z  d2 q3 }- h* X/ C
  70. .text:00401155                 align 10h
    % f* w5 ?( C7 b# q% z0 @1 _0 O
  71. .text:00401160
    - J$ g! p3 f6 h+ p2 j9 Q3 Q
  72. .text:00401160 ; =============== S U B R O U T I N E =======================================  F& m9 V- B2 `# u4 o
  73. .text:00401160
    . `* V2 y5 y, j  N
  74. .text:00401160) Z& c# k$ G$ n
  75. .text:00401160 sub_401160      proc near               ; CODE XREF: sub_4013D0+15↓p
    1 N. Y! s; s/ z" e: R
  76. .text:00401160                                         ; sub_4013F0+C↓p ...
    * `. R3 f' x+ D- W7 b* R5 \. Q
  77. .text:00401160
    # N4 H7 Y9 ?1 \
  78. .text:00401160 arg_0           = dword ptr  4
    ) J9 i% B. o: w6 O$ W/ b) i$ t# L
  79. .text:00401160, O/ ]! T6 E, i% `4 F
  80. .text:00401160                 push    esi
    $ s0 Y5 O/ A( a6 I
  81. .text:00401161                 push    edi: \! R! X4 Z" _( z- u# ]# B! Z
  82. .text:00401162                 mov     edi, [esp+8+arg_0]
    * D! `# k6 ~6 V+ x2 c) ^4 g
  83. .text:00401166                 test    edi, edi
    , U7 S6 U# {  P- N% ~! j; ?! H' }
  84. .text:00401168                 mov     esi, ecx
    - J; ~6 D; o5 R% A' K4 S3 {
  85. .text:0040116A                 jz      short loc_4011CA
    # n9 ^, c" U% |% M- t. @3 p0 b
  86. .text:0040116C                 mov     eax, [esi]
    5 e) A0 L1 [/ s" I
  87. .text:0040116E                 cmp     edi, eax7 A& ]9 N. m  N0 T* l
  88. .text:00401170                 jz      short loc_4011CA
    : c# @' e: z8 @2 c
  89. .text:00401172                 cmp     byte ptr [edi], 0) k1 M4 F% g" ^2 l4 X3 l* r
  90. .text:00401175                 jnz     short loc_4011A22 s. N  \% D( b; l0 ?
  91. .text:00401177                 test    eax, eax
    1 Q3 J% n0 z" r! {
  92. .text:00401179                 mov     dword ptr [esi+4], 1
    " {1 V7 d9 \& a# G- U
  93. .text:00401180                 jz      short loc_40118B
    ) J# _4 Z% O" e% [
  94. .text:00401182                 push    eax             ; void *! U% M% K* h( J) i* v
  95. .text:00401183                 call    ??_V@YAXPAX@Z   ; operator delete[](void *)1 O8 Q5 m$ N$ y* B5 E' u# h
  96. .text:00401188                 add     esp, 4% m2 u/ `) O* X
  97. .text:0040118B
    5 I" C1 v7 g* D$ ]. b, P+ t
  98. .text:0040118B loc_40118B:                             ; CODE XREF: sub_401160+20↑j
    & Q# ~. Q# L8 V; i
  99. .text:0040118B                 push    6               ; Size4 z) i+ m/ G& X
  100. .text:0040118D                 call    j_??2@YAPAXI@Z  ; operator new(uint)& t0 w- [" \5 ~& K+ E0 T# W: h/ q
  101. .text:00401192                 add     esp, 4
    # L! r+ K" ^/ p8 c8 _0 U( J( ^; H
  102. .text:00401195                 mov     [esi], eax3 @8 h3 h  n2 C
  103. .text:00401197                 pop     edi; T/ q! f' U1 |( y
  104. .text:00401198                 mov     dword ptr [eax], 0
    8 [8 M& ~) o+ {# s* j; D; r
  105. .text:0040119E                 pop     esi
    * I0 K2 T- I9 t6 ]0 Q( ^) V+ b
  106. .text:0040119F                 retn    4
    ( g/ A9 m" O( ^. G+ o4 u1 e
  107. .text:004011A2 ; ---------------------------------------------------------------------------2 K1 K7 p+ [" V2 t. A8 H
  108. .text:004011A2
    ; P( p) c+ S# X% @6 G; p) o. y
  109. .text:004011A2 loc_4011A2:                             ; CODE XREF: sub_401160+15↑j
    % t( D# W# j. `& ^
  110. .text:004011A2                 mov     eax, edi
    $ l+ W9 H3 S4 L% ^) j( v7 p  F
  111. .text:004011A4                 lea     edx, [eax+1]
    + q& K3 w# r. I3 H2 `' o* v9 t
  112. .text:004011A72 I$ J7 e1 ^5 ~" P# B: Z
  113. .text:004011A7 loc_4011A7:                             ; CODE XREF: sub_401160+4C↓j! [  o% a2 i& J6 q2 F! U0 z
  114. .text:004011A7                 mov     cl, [eax]
    9 S9 q4 ]! v% r1 }/ s
  115. .text:004011A9                 inc     eax
    : v  ?' ]. R* h! O) O( U
  116. .text:004011AA                 test    cl, cl; c/ E$ W$ L+ K. B
  117. .text:004011AC                 jnz     short loc_4011A7
    / K! ~8 @+ y% s( G1 G+ b0 O9 m
  118. .text:004011AE                 sub     eax, edx0 @9 ]6 z: ~/ ?" E
  119. .text:004011B0                 push    eax
    6 j8 \8 G& @0 C5 z
  120. .text:004011B1                 mov     ecx, esi0 O" t3 v: ~2 c5 L# B& G
  121. .text:004011B3                 call    sub_4010307 y7 w8 R; g6 d
  122. .text:004011B8                 mov     edx, [esi]
    / G/ y$ L$ e8 A( ]4 H1 \; U- C9 I
  123. .text:004011BA                 mov     ecx, edi
    ! a" L2 F- F7 f5 e/ y* X
  124. .text:004011BC                 lea     esp, [esp+0]
    1 q! }) y0 S6 d( y8 r) o  {
  125. .text:004011C0. w1 }! K* B2 u
  126. .text:004011C0 loc_4011C0:                             ; CODE XREF: sub_401160+68↓j
    - J0 t2 d( w+ ^* D0 g
  127. .text:004011C0                 mov     al, [ecx]
    - u4 B0 Y, U- T) l/ J; H
  128. .text:004011C2                 inc     ecx7 Q$ B8 r1 S) c; V
  129. .text:004011C3                 mov     [edx], al
    % A! F+ s& T3 B$ p; f, l6 a- e
  130. .text:004011C5                 inc     edx
    / X' y0 R8 r7 a# R) u
  131. .text:004011C6                 test    al, al* A: J. o& Q  s  x  ~* @
  132. .text:004011C8                 jnz     short loc_4011C0
    ! s9 U% O' R( f4 u
  133. .text:004011CA
    , k/ P. ~2 I" s
  134. .text:004011CA loc_4011CA:                             ; CODE XREF: sub_401160+A↑j8 ?& W% D) y& k. T* U2 t; b! @
  135. .text:004011CA                                         ; sub_401160+10↑j
    ! Z# H, ^. G4 Q% N; Q
  136. .text:004011CA                 pop     edi
    # J% J2 W3 f0 B0 a! |$ p$ l+ @
  137. .text:004011CB                 pop     esi5 H+ k3 ~( ^1 ]9 ?
  138. .text:004011CC                 retn    4
    . b, P9 {* ~7 p7 x0 j- `, _% K
  139. .text:004011CC sub_401160      endp
    & _* G' p+ a# J( M3 @4 P' U
  140. .text:004011CC( ?8 Q( G) S0 T7 e! r4 z
  141. .text:004011CC ; ---------------------------------------------------------------------------
复制代码

2 Y1 @  p8 r+ m) ?7 v9 P6 D- _7 B) Z0 z4 f* F1 f

# `2 W' V1 H3 k7 I# _0 E
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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