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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-27 13:23 编辑
4 y& Y2 J6 r! M2 g) Z8 s
  I3 G8 K" h  y  H9 ?本游戏采用了CEGUI,该组件能采用directx和opengl。% q! D' |# T% A% C# I2 a  `
经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。/ A8 u. ~% o6 `, S  a* k$ X( |
游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。
4 S: t- z- v( M  @2 W(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)3 o$ q& r/ k" P. B/ ]5 j  p1 N" \! k
% C$ Y2 E+ }, @) T& p0 X9 D

1 i, W, w4 l! x: d3 H: S# ]在游戏中找一个字幕,在以下地方断下。$ E& Y. k' K$ E  E
由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
1 A2 b) V+ U$ ~因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。
9 A4 S) l; A9 X& N8 O4 H
- T% U& w: U; ?
  1. NextLife.exe+11C5 - 42                    - inc edx
    / X6 a* P0 a8 f
  2. 004011C5
复制代码
2 y, W2 _# Y, J1 x
3 N9 Y$ ?& N0 `1 }1 _
该地方的伪代码- R, g  y6 Z" t7 b! W" H
  1. void __thiscall sub_401160(char **this, const char *a2)
    ; B" T& m3 r4 g9 D, c
  2. {$ [; N: v1 f; u/ a8 D: S
  3.   char **v2; // esi9 \9 d9 f( {$ T; c4 V- j
  4.   char *v3; // eax5 Y* C" r( z: i; J8 ~& x- z, h
  5.   char *v4; // eax
    : S  c; _  q& p% l0 w$ w* b' N
  6. # i7 Y, g' w- X
  7.   v2 = this;
    1 ?' P7 P; N9 H7 }- ?$ T1 L2 s
  8.   if ( a2 )
    : g8 \' U+ i7 U. E, l( ^. e2 F
  9.   {; b. v! a* k% n/ P8 ^
  10.     v3 = *this;
    " c; [# u/ ?% _0 i/ d& l
  11.     if ( a2 != *this )
    & T! q( l5 z$ p  e3 m& m. `
  12.     {) K2 O2 w- N) ?0 V- m" v8 u( a# X1 _
  13.       if ( *a2 )
    ! N3 S, r- t& e( C
  14.       {0 M6 N; C) f7 Z6 z0 x3 E
  15.         sub_401030(strlen(a2));
    7 ~$ X  @3 h# d/ V- v+ I4 C
  16.         strcpy(*v2, a2);
    5 i2 J. I, L' i& F1 o
  17.       }
    % Z! L# z0 Y6 w3 W) D$ B4 ~# Q9 a
  18.       else
    ) m' h: A2 C# A# d% l6 J$ v
  19.       {
    " C! g- j, A7 m7 ^8 v) n% Q/ Y4 T
  20.         this[1] = (char *)1;' H! k6 v; n; @5 ^+ @3 a4 e
  21.         if ( v3 )& E; s- t4 ^( b( w% N7 N. w
  22.           operator delete[](v3);
    " B% }8 G! T0 Y/ [+ ?
  23.         v4 = (char *)operator new(6u);
    " `% l7 C4 j: T2 B1 x% U1 J
  24.         *v2 = v4;
    ! Z9 V' v4 L1 D& C
  25.         *(_DWORD *)v4 = 0;/ m  h0 X) _1 |/ J4 i/ U  N3 m# \
  26.       }( C, y; s6 d* }# V2 j2 Q% s
  27.     }3 u9 K5 T2 w! c, ]' g# H
  28.   }
    $ P: T( z8 V; I: Y: |
  29. }
复制代码
5 \9 K. n+ Z5 x$ M4 q$ J/ {& j# d
汇编代码
4 z# e# R8 h4 S( f
  1. .text:004010F0+ m# l% ^+ Z1 y0 R' z# i1 T& J
  2. .text:004010F0 ; =============== S U B R O U T I N E =======================================: y+ u0 z; M) p5 d  R
  3. .text:004010F0
    * ^5 y3 p3 [0 t! M
  4. .text:004010F0. \5 r& |4 \# u! D# G- p% A, @8 Z3 r+ e# u
  5. .text:004010F0 sub_4010F0      proc near               ; CODE XREF: _main+139↓p! W. A( A* H" v( M. ]0 n, [
  6. .text:004010F0                                         ; sub_403240+97E↓p ...- n9 R  y' g5 p5 K8 H) V
  7. .text:004010F0" |  d( ^# N$ l5 J; U/ P( [$ {
  8. .text:004010F0 arg_0           = dword ptr  4
    4 K+ x: W5 Y3 E+ g; P" e
  9. .text:004010F04 p7 |' N; {; s0 n
  10. .text:004010F0                 mov     eax, [ecx]
    : L9 c- T0 D! I; Q' @" ?; Q. f6 e9 Y
  11. .text:004010F2                 test    eax, eax' q9 v& s- t( s# ~
  12. .text:004010F4                 mov     edx, [esp+arg_0]5 C+ T* e; g1 z' k0 o1 D+ D3 \
  13. .text:004010F8                 jz      short loc_401147
    1 G$ n& K2 t  D8 G' a/ n! [+ d
  14. .text:004010FA                 test    edx, edx' V+ Q& S) X& z! z% m
  15. .text:004010FC                 jz      short loc_401147  z9 P- Q1 O* c+ w1 c* Q
  16. .text:004010FE                 mov     cl, [eax]" V8 O3 [& t+ D) F* Z" C
  17. .text:00401100                 test    cl, cl/ J5 n. Y/ @' O/ C
  18. .text:00401102                 jnz     short loc_4011162 A- s" k! S: H* P( q
  19. .text:00401104                 cmp     byte ptr [edx], 04 L3 q/ D; k! n3 m
  20. .text:00401107                 setz    al
    7 E( i" v+ z6 g/ p( Z3 R+ m
  21. .text:0040110A                 xor     edx, edx
    + H" A! T% L7 s/ \3 e/ ?
  22. .text:0040110C                 test    al, al
    # L5 ~/ [* c9 @# u, s$ E4 \
  23. .text:0040110E                 setz    dl
    % F; K- u+ t" K# [2 h
  24. .text:00401111                 mov     al, dl
    & \3 j7 i$ H/ ~/ t$ Y- e
  25. .text:00401113                 retn    4
    , y- R8 s6 ^% e( x+ p& j
  26. .text:00401116 ; ---------------------------------------------------------------------------
    6 [9 m) y# |/ L2 j! Z1 ?
  27. .text:00401116
    ) C$ J; E# h+ j, t* D
  28. .text:00401116 loc_401116:                             ; CODE XREF: sub_4010F0+12↑j
    # e8 N7 W8 [; s5 A1 K
  29. .text:00401116                 cmp     byte ptr [edx], 0, Q, j! w% n# W; \
  30. .text:00401119                 jz      short loc_401147
    9 R9 |5 L3 }1 a' C' G; N
  31. .text:0040111B                 jmp     short loc_4011204 W1 }7 D. g( w$ C# {
  32. .text:0040111B ; ---------------------------------------------------------------------------+ \4 y) \, Q5 w
  33. .text:0040111D                 align 10h/ l% Q) a- z9 c/ l: Z: }1 ~
  34. .text:00401120
    ( c4 l# [1 Y* `) s$ v' f" _. n
  35. .text:00401120 loc_401120:                             ; CODE XREF: sub_4010F0+2B↑j
    ; K9 l( A9 ?3 b, A
  36. .text:00401120                                         ; sub_4010F0+3B↓j0 A' O; I; T4 H# W% `
  37. .text:00401120                 cmp     cl, [edx]
    8 c5 a/ R0 w$ f# I! H
  38. .text:00401122                 jnz     short loc_40112D
    1 D3 S, b/ S5 g0 O' _2 w7 b' `
  39. .text:00401124                 mov     cl, [eax+1]  Y3 \! K4 j5 l! A5 X, O) \
  40. .text:00401127                 inc     eax
    7 j* c* O% g8 A, W9 A% k% r
  41. .text:00401128                 inc     edx1 _, M- [0 C, D$ }
  42. .text:00401129                 test    cl, cl# T- j& X7 F& w/ p: K0 V
  43. .text:0040112B                 jnz     short loc_401120
    8 w' l2 U+ x3 M4 V1 n
  44. .text:0040112D3 D+ W6 n* l6 n! h1 L
  45. .text:0040112D loc_40112D:                             ; CODE XREF: sub_4010F0+32↑j0 ?9 ^/ n7 u5 |
  46. .text:0040112D                 movzx   eax, byte ptr [eax]* i5 d) h9 s5 X+ S" s4 K
  47. .text:00401130                 movzx   ecx, byte ptr [edx]& G# O( o- u: p6 d0 z& w
  48. .text:00401133                 sub     eax, ecx$ [1 t2 z# `0 l/ ?( ^6 L7 ?
  49. .text:00401135                 neg     eax
    ' n1 X; D- W  S8 W! @; l; `0 ^0 L
  50. .text:00401137                 sbb     al, al7 D! z$ N2 @- F
  51. .text:00401139                 inc     al
    $ ~3 p# m7 j0 E6 j: d9 P) ?
  52. .text:0040113B                 xor     edx, edx
    ! L0 x& C* b0 }. z8 L' R1 F2 X
  53. .text:0040113D                 test    al, al
    . A9 p+ J, {' u# W: A
  54. .text:0040113F                 setz    dl
    & ?% m1 n7 \8 s3 H" _3 y
  55. .text:00401142                 mov     al, dl
    0 G# l% ^7 I2 Q/ U! I5 r
  56. .text:00401144                 retn    41 T. m# s; D0 y2 \2 P/ @- e. O7 w' G- E. r
  57. .text:00401147 ; ---------------------------------------------------------------------------
    ( k; p3 X# @3 l% z+ g
  58. .text:00401147# C8 p9 |  t5 W4 ]
  59. .text:00401147 loc_401147:                             ; CODE XREF: sub_4010F0+8↑j
      G" _7 Z2 Y9 D
  60. .text:00401147                                         ; sub_4010F0+C↑j ...
    # z/ w; d8 j6 P1 b9 ^
  61. .text:00401147                 xor     al, al% G7 y  E# Q! M
  62. .text:00401149                 xor     edx, edx
    0 S  A2 b3 O$ G
  63. .text:0040114B                 test    al, al
    ) q- d8 a  j5 u
  64. .text:0040114D                 setz    dl
    6 y3 N, V! b, [+ U0 {
  65. .text:00401150                 mov     al, dl3 V$ {5 [2 _& H
  66. .text:00401152                 retn    40 n% ^* X7 S# R) f
  67. .text:00401152 sub_4010F0      endp  g$ i% m) ]- Y& ?' F9 [& t  N
  68. .text:00401152& I% Y/ z# k" Q: j
  69. .text:00401152 ; ---------------------------------------------------------------------------
      p. P! k6 n8 |9 K2 ]7 V' V4 e
  70. .text:00401155                 align 10h( K8 U9 }. c- v/ n
  71. .text:00401160
    ) j6 @! G# s7 h* X* c: Y/ [% p2 X( O
  72. .text:00401160 ; =============== S U B R O U T I N E =======================================
    * H9 Y) J8 \1 ?2 c7 D
  73. .text:00401160
    ) c" m0 h; A$ B; L
  74. .text:004011600 n" O) Q; L: _3 w1 O+ }
  75. .text:00401160 sub_401160      proc near               ; CODE XREF: sub_4013D0+15↓p
    : i& G( y! X( n" c
  76. .text:00401160                                         ; sub_4013F0+C↓p ...
    + S; }1 Z# u2 w0 h! s* B
  77. .text:004011609 X! ~" e- s. c8 r
  78. .text:00401160 arg_0           = dword ptr  4
    ) R. k; q' N" V3 p9 A$ c$ Q
  79. .text:00401160
    + Q$ Y2 Y6 S- P
  80. .text:00401160                 push    esi
    % B. ^9 Y; _8 X) F
  81. .text:00401161                 push    edi, P) n4 S8 h( D) J/ A! s
  82. .text:00401162                 mov     edi, [esp+8+arg_0]
    ) m8 U5 T* b6 G2 f9 x* G: C2 f9 f- T
  83. .text:00401166                 test    edi, edi
    5 E2 S6 x' Z. h/ _) I* Z
  84. .text:00401168                 mov     esi, ecx
    $ {/ U/ V( ^+ X+ P
  85. .text:0040116A                 jz      short loc_4011CA
    2 L7 ?/ N4 A) D' y* D- Y
  86. .text:0040116C                 mov     eax, [esi]' h) ~( a+ j* R) R9 w
  87. .text:0040116E                 cmp     edi, eax
    1 W# t2 W* r, d+ [
  88. .text:00401170                 jz      short loc_4011CA
    9 E8 s6 B; O1 A) D) e& `
  89. .text:00401172                 cmp     byte ptr [edi], 0$ a7 s, j4 V( p! j( V- p
  90. .text:00401175                 jnz     short loc_4011A21 Q5 A' j+ x( W4 u; ^  p/ ^# A
  91. .text:00401177                 test    eax, eax
    1 j# m5 E( h# s5 K7 F5 {0 b8 ~
  92. .text:00401179                 mov     dword ptr [esi+4], 1
    . j/ C( j2 @1 R  j
  93. .text:00401180                 jz      short loc_40118B
    , J. {  Q3 P# a6 Y4 [- a& U
  94. .text:00401182                 push    eax             ; void *( ?' u5 @/ n; l5 D! J! j
  95. .text:00401183                 call    ??_V@YAXPAX@Z   ; operator delete[](void *)
    9 H* L5 C7 t8 B! T' J* t
  96. .text:00401188                 add     esp, 4
    3 P+ o! R& l% m4 W. e4 G$ S
  97. .text:0040118B
    , O* l# J0 M/ P2 K) V
  98. .text:0040118B loc_40118B:                             ; CODE XREF: sub_401160+20↑j
    ) u: h* A; r6 s2 i' f2 G% ~
  99. .text:0040118B                 push    6               ; Size$ I" s4 x4 g1 d# l* n- r8 w& B2 E' X
  100. .text:0040118D                 call    j_??2@YAPAXI@Z  ; operator new(uint)
    7 a* Q( B. w, B  e( G* }2 u
  101. .text:00401192                 add     esp, 4# z+ ?: F$ m6 N; ?
  102. .text:00401195                 mov     [esi], eax
    % y; d. O( K5 m* g: i  F
  103. .text:00401197                 pop     edi
    8 @) a& V2 {# o& h+ w: [- n
  104. .text:00401198                 mov     dword ptr [eax], 0: k! T* F9 p+ ?0 E( J$ y& V
  105. .text:0040119E                 pop     esi* b- `7 A# c9 [' P
  106. .text:0040119F                 retn    46 f' q, J) @% B/ }2 L9 _
  107. .text:004011A2 ; ---------------------------------------------------------------------------
    2 }: B$ C( i* h( n! L& j" [* Q
  108. .text:004011A2+ C7 q) Q7 V; S1 D! z- m
  109. .text:004011A2 loc_4011A2:                             ; CODE XREF: sub_401160+15↑j8 b: g2 ^& V# L" c
  110. .text:004011A2                 mov     eax, edi: o! b$ |! D0 s
  111. .text:004011A4                 lea     edx, [eax+1]
    & C& I! n3 i6 V1 c" F6 R
  112. .text:004011A7
    7 S0 D6 X# v* z. a% n1 k
  113. .text:004011A7 loc_4011A7:                             ; CODE XREF: sub_401160+4C↓j
    1 t, |/ a! q2 U2 u, w
  114. .text:004011A7                 mov     cl, [eax]/ o, I0 Z( h% g7 w3 J
  115. .text:004011A9                 inc     eax
    8 |" y/ i' s7 D! @6 O" C+ |1 u
  116. .text:004011AA                 test    cl, cl
    5 x! P% {+ c% V: m: e
  117. .text:004011AC                 jnz     short loc_4011A7
    2 N& {# p9 ~# e
  118. .text:004011AE                 sub     eax, edx# @, D6 P7 s2 O! F. m
  119. .text:004011B0                 push    eax- u# Z" I2 |/ l- I$ i9 c
  120. .text:004011B1                 mov     ecx, esi/ P0 ^7 c! h1 J* |! Z: U8 D5 C
  121. .text:004011B3                 call    sub_401030
    2 \2 K; S7 R% J5 b
  122. .text:004011B8                 mov     edx, [esi]9 U& |' |, G2 |' Z
  123. .text:004011BA                 mov     ecx, edi
    & r( o* V7 s: |" K9 [' L
  124. .text:004011BC                 lea     esp, [esp+0]- k+ J& p3 E1 ?! `1 i! Y
  125. .text:004011C0
    : \5 H/ {* N0 J, ?) Y5 ?9 s4 v
  126. .text:004011C0 loc_4011C0:                             ; CODE XREF: sub_401160+68↓j
    - H) {$ d; p) t  j8 @
  127. .text:004011C0                 mov     al, [ecx]
    0 Z( w$ }5 ^8 X8 I
  128. .text:004011C2                 inc     ecx2 S6 ?; k& K- T- `9 O
  129. .text:004011C3                 mov     [edx], al0 s9 |9 U2 J/ n" ^. y
  130. .text:004011C5                 inc     edx# P+ n8 |# ~+ d/ k$ [
  131. .text:004011C6                 test    al, al1 \% O  G' Z# {5 u
  132. .text:004011C8                 jnz     short loc_4011C0
    3 D2 m) N4 @( g* m' s" A
  133. .text:004011CA: H1 q8 Z6 l; {' h# Z. ~/ v
  134. .text:004011CA loc_4011CA:                             ; CODE XREF: sub_401160+A↑j
    ; W1 I2 l1 `2 _3 }' |$ O
  135. .text:004011CA                                         ; sub_401160+10↑j1 t$ H% W! V- t  r) c' G
  136. .text:004011CA                 pop     edi6 }9 j( n0 w* T1 L1 H$ i
  137. .text:004011CB                 pop     esi
    3 ?0 M1 y' Y  H4 O6 t2 N$ J
  138. .text:004011CC                 retn    4" H3 F0 Y( K! a/ j* o8 f
  139. .text:004011CC sub_401160      endp
    6 ^. T+ X! M7 b1 `
  140. .text:004011CC- R; O% o+ w# O+ Z0 l; l& z( u
  141. .text:004011CC ; ---------------------------------------------------------------------------
复制代码
$ }' h9 q. R' B: \' Z# c, N1 w! q! U9 ]

# o2 j6 R! x$ L& Q7 y! k% I) h5 k& T8 N* m
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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