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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-27 13:23 编辑
$ D4 X9 R. l) y4 v- n5 l( \1 P
/ E( u7 B; {+ S" {本游戏采用了CEGUI,该组件能采用directx和opengl。
& |+ \2 a( r* m经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。6 q7 B8 l- X. D) X/ ]* s
游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。
4 c) Q! A# ]) Z  j- A! E0 `(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)3 \" D5 ?% L5 @5 W4 C6 d

  `0 g! Q/ y! ~. H! ^* l1 x' c
8 ?: }" a4 ^$ x/ k2 e6 y7 }- t3 g在游戏中找一个字幕,在以下地方断下。4 i0 O& \' f1 |. g
由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),: H% j' k4 e, @9 e+ m+ w, X" ~% n
因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。- z& a. Z/ o! s' Z) u

4 x/ U& Y3 v0 G5 N( o
  1. NextLife.exe+11C5 - 42                    - inc edx
    2 `( L2 c. J5 ~( v; K0 B  J1 Y
  2. 004011C5
复制代码

4 Q/ c$ M3 F+ M, L5 r" ]0 h
( l* b- }2 N2 t该地方的伪代码
; p- W+ D0 A& u5 E
  1. void __thiscall sub_401160(char **this, const char *a2)
    $ M' f2 Q/ [: f5 w5 U5 Y2 m
  2. {
    3 X6 l( T7 Q! U3 g! o$ `) u% E
  3.   char **v2; // esi
    5 K5 @, r7 \" a. `5 j
  4.   char *v3; // eax, d5 F  n( \( k4 s, S8 s
  5.   char *v4; // eax3 P/ j' E- e: ]# I5 j
  6. : Z3 }2 q4 s% k( r; \+ B
  7.   v2 = this;9 Y' m  x- i. @* i6 U- x
  8.   if ( a2 )
    1 z& A  S! `4 S3 F) _
  9.   {
      G: O5 j) K4 W' V- C
  10.     v3 = *this;8 Z6 p( I8 ~7 g' e
  11.     if ( a2 != *this )
    4 t/ ?' L6 Z6 ]: V: D2 h
  12.     {% L* B- v1 M+ Q- r
  13.       if ( *a2 )& K  [1 A  v5 t7 p
  14.       {$ O$ x0 G( v9 j1 R1 i8 K! o! u
  15.         sub_401030(strlen(a2));+ J3 e, z5 T; F8 }5 k
  16.         strcpy(*v2, a2);; p- l) o: v- W8 b
  17.       }0 R7 n* ^- f& O  M6 x
  18.       else
    # Y/ f" Z- d. E2 T. {
  19.       {
    4 |8 v/ V( d0 N
  20.         this[1] = (char *)1;: Z+ M& r, }! Y" {9 p: O0 h
  21.         if ( v3 )9 b2 D1 z0 G0 e* X7 O2 u/ y+ Q+ Y( p" \
  22.           operator delete[](v3);+ \; ^, ?$ T+ C1 g% m
  23.         v4 = (char *)operator new(6u);' S3 w$ H, k, h: H$ M
  24.         *v2 = v4;
    , e- X4 R2 `) ?) _7 i# X) c/ `
  25.         *(_DWORD *)v4 = 0;& ?$ e; z: Q; z/ i' l) x" a0 d  F: r
  26.       }
    3 H, l7 Z# Y. Y0 b& Z# p8 y; M; K
  27.     }
    * D" y" r# ~- B" H# b0 m6 a& [" X) y
  28.   }
    5 t. l; _3 @# Z7 A
  29. }
复制代码
8 d; N0 q4 q( ^; B
汇编代码
4 I( U$ ?& p  x% X+ x: I
  1. .text:004010F03 Y/ [5 l. F$ [/ c7 e9 R% D; i
  2. .text:004010F0 ; =============== S U B R O U T I N E =======================================
    - \- i* R( }, w. J5 _, L+ H7 n  p
  3. .text:004010F0& A; o# F5 `! P- i5 i* y6 [
  4. .text:004010F0; x* J( O1 S5 v( [- j9 p; F
  5. .text:004010F0 sub_4010F0      proc near               ; CODE XREF: _main+139↓p- S1 e( d) q0 @& A
  6. .text:004010F0                                         ; sub_403240+97E↓p ...2 a2 o4 ?  \/ ?* {4 f& W; W
  7. .text:004010F0
    8 o. a+ n. ~% p5 ~
  8. .text:004010F0 arg_0           = dword ptr  49 X" V/ _5 Q& x) e
  9. .text:004010F0
    2 \# |: v/ s! [( r  E0 a
  10. .text:004010F0                 mov     eax, [ecx]' j: [, B' u" {( j3 R! X
  11. .text:004010F2                 test    eax, eax
    : H9 z* F/ n0 b9 c
  12. .text:004010F4                 mov     edx, [esp+arg_0]2 ~/ ]. \8 p) M
  13. .text:004010F8                 jz      short loc_401147
    - R4 O  x$ ^% `  U2 @( J
  14. .text:004010FA                 test    edx, edx6 J1 c& [7 W) V; K( |+ c1 s
  15. .text:004010FC                 jz      short loc_401147
    # N- d& M# B: e% m" b3 R
  16. .text:004010FE                 mov     cl, [eax]
    . B6 f3 d5 }4 g7 r) j2 ~
  17. .text:00401100                 test    cl, cl5 k" z/ ~* ~5 |. M  \( K5 W
  18. .text:00401102                 jnz     short loc_401116
    , X3 j0 R, y, w" J8 I
  19. .text:00401104                 cmp     byte ptr [edx], 0
    6 k8 B; K( I, x/ q
  20. .text:00401107                 setz    al
    ! l8 t& B$ R9 _* k5 }* _
  21. .text:0040110A                 xor     edx, edx$ K1 A0 O! t- r; G: D
  22. .text:0040110C                 test    al, al4 A4 W! T! I) z2 Z- g
  23. .text:0040110E                 setz    dl7 y1 c6 T) ], j
  24. .text:00401111                 mov     al, dl
    9 L7 t5 k% N" j$ g
  25. .text:00401113                 retn    48 k2 g6 a( h( [6 f- M& u" `) O+ ?: S
  26. .text:00401116 ; ---------------------------------------------------------------------------& B. e! i3 e: G/ p7 Y) h: y
  27. .text:00401116
    ) t0 m9 g, }' U; h' Y- F* k
  28. .text:00401116 loc_401116:                             ; CODE XREF: sub_4010F0+12↑j  |$ Z' L3 h6 p
  29. .text:00401116                 cmp     byte ptr [edx], 0) j- a4 x  J9 i$ [
  30. .text:00401119                 jz      short loc_401147
    . @  D  ~9 @4 Q1 }# a3 x
  31. .text:0040111B                 jmp     short loc_401120) K5 o8 m: r) g# W
  32. .text:0040111B ; ---------------------------------------------------------------------------$ f% q$ D" o; @9 e& M
  33. .text:0040111D                 align 10h: ^$ P1 s  p4 d! N- R' I, V
  34. .text:00401120$ t3 u. r& ?  i8 B3 T( |: l
  35. .text:00401120 loc_401120:                             ; CODE XREF: sub_4010F0+2B↑j
    " j" t1 f8 B- r/ m3 R# N6 M
  36. .text:00401120                                         ; sub_4010F0+3B↓j2 m+ h+ F' |/ S) B% N! e5 f* _; s8 \/ Q
  37. .text:00401120                 cmp     cl, [edx]
    ) W5 _. B/ `% V+ v4 x4 z; Q
  38. .text:00401122                 jnz     short loc_40112D
    : j: L, I+ Y# I$ @; L- d
  39. .text:00401124                 mov     cl, [eax+1]
    ) g9 `8 \( e, O5 k9 O* {
  40. .text:00401127                 inc     eax; D) ?; G' w* ^2 m6 H2 f( R% F3 T
  41. .text:00401128                 inc     edx. y9 V5 z, ]& w3 a  @/ H
  42. .text:00401129                 test    cl, cl+ c/ F( O8 P6 y! `7 G* u$ P
  43. .text:0040112B                 jnz     short loc_4011205 ?* i+ \4 `! w; [' c* p! c
  44. .text:0040112D! g7 B+ p0 o0 H4 p) m, r: x
  45. .text:0040112D loc_40112D:                             ; CODE XREF: sub_4010F0+32↑j
    ! {% ]" e' f- g" }7 l
  46. .text:0040112D                 movzx   eax, byte ptr [eax]" A  j; z* D. M# D& E
  47. .text:00401130                 movzx   ecx, byte ptr [edx]
    ( |# v; L) X& S8 i
  48. .text:00401133                 sub     eax, ecx8 d7 A( g( [0 U5 @$ p1 X6 J! q1 U9 L
  49. .text:00401135                 neg     eax9 M. h, U0 C( S5 ~# N
  50. .text:00401137                 sbb     al, al6 ^: m- }. K1 ^  w& k" z
  51. .text:00401139                 inc     al
    % C. ]& t( w( y, ]/ b
  52. .text:0040113B                 xor     edx, edx
    7 y/ z3 T' J* ]5 ~4 ]1 Z3 |, g, Z
  53. .text:0040113D                 test    al, al) ?$ }" X' ~7 }" z/ M1 f
  54. .text:0040113F                 setz    dl
    ' e: F  f9 i5 c" a3 }5 V
  55. .text:00401142                 mov     al, dl
    ; i) v5 l4 B, w
  56. .text:00401144                 retn    4
    8 {2 v# ]2 @$ r7 N+ R
  57. .text:00401147 ; ---------------------------------------------------------------------------
    # U( L8 n: d8 ]% @1 V0 e
  58. .text:00401147
    6 p( v' ?! g* |; n. I
  59. .text:00401147 loc_401147:                             ; CODE XREF: sub_4010F0+8↑j
    3 q( w. ]6 ^; f/ M5 K( p" `
  60. .text:00401147                                         ; sub_4010F0+C↑j ...
    - S2 F, t& `. ]- M* p
  61. .text:00401147                 xor     al, al+ p7 z' W. X" X) U; D" D$ c1 G+ G
  62. .text:00401149                 xor     edx, edx
    ; \4 r5 z5 s1 k  y  u7 F
  63. .text:0040114B                 test    al, al
    ) w* Q4 X- H. _
  64. .text:0040114D                 setz    dl4 L/ r, O7 g2 X5 t! }! z: L4 C' }
  65. .text:00401150                 mov     al, dl, `# u+ r! _- B6 U- Y
  66. .text:00401152                 retn    4
    8 [! c; P+ ]8 E. k  N
  67. .text:00401152 sub_4010F0      endp
    ! i2 Y- k3 r1 R8 ~
  68. .text:00401152
    7 G6 z! q; j; E
  69. .text:00401152 ; ---------------------------------------------------------------------------
    7 S  O3 H, ?  _3 M& H
  70. .text:00401155                 align 10h
    ( c# D8 k+ ]4 ?: H% E
  71. .text:004011609 Y4 d+ v4 n$ W5 R9 O) f
  72. .text:00401160 ; =============== S U B R O U T I N E =======================================! s+ t6 W6 A% j3 t
  73. .text:00401160
    5 V9 I5 }$ {5 I$ m( |9 Z& \% T$ k
  74. .text:00401160& Q* |' @' R: c% n
  75. .text:00401160 sub_401160      proc near               ; CODE XREF: sub_4013D0+15↓p: {- `3 Y; m9 ^
  76. .text:00401160                                         ; sub_4013F0+C↓p ...
    6 }7 L, Z$ f6 S
  77. .text:004011607 S% ^" @$ p/ J1 U2 R# s6 J' O
  78. .text:00401160 arg_0           = dword ptr  4
    5 ~$ X6 e4 M' g' B2 {- D3 L
  79. .text:00401160
    ' B( d) h4 h. @
  80. .text:00401160                 push    esi
    0 K$ B+ i# T% m9 B9 J+ C
  81. .text:00401161                 push    edi
    ' m4 [' b# `: f% g+ H0 l- Q9 A+ o0 I6 v
  82. .text:00401162                 mov     edi, [esp+8+arg_0]
    # ?3 u$ [" K8 u6 w9 o
  83. .text:00401166                 test    edi, edi
    # B6 F* g" D4 H& ~+ G
  84. .text:00401168                 mov     esi, ecx
    , x8 T' K3 x4 ^# O$ V) Y4 C
  85. .text:0040116A                 jz      short loc_4011CA
    4 B- |/ \, R! q+ e% f0 r; b
  86. .text:0040116C                 mov     eax, [esi]. H5 n: b5 A$ e$ U# k
  87. .text:0040116E                 cmp     edi, eax
    : i* T1 U* q3 i. ?/ Z4 \+ [
  88. .text:00401170                 jz      short loc_4011CA
    4 t4 _9 {/ N$ D8 Q& u! S! |9 K
  89. .text:00401172                 cmp     byte ptr [edi], 0
    7 a5 G2 x! [, K
  90. .text:00401175                 jnz     short loc_4011A2, f! }( X4 u, e6 q1 Z5 f' x& s
  91. .text:00401177                 test    eax, eax
    % G0 c8 h6 I6 A5 w
  92. .text:00401179                 mov     dword ptr [esi+4], 1
    0 e+ V3 w6 `( |0 E! V
  93. .text:00401180                 jz      short loc_40118B* {( i$ l" t6 e1 t1 |1 Z2 n
  94. .text:00401182                 push    eax             ; void *3 x  \2 D5 F9 H7 u: K7 T1 ^- ?
  95. .text:00401183                 call    ??_V@YAXPAX@Z   ; operator delete[](void *); N' Z3 `" q& N2 Y9 `5 l" j' d2 A
  96. .text:00401188                 add     esp, 43 H! ^# U0 [5 Q( t2 n, B/ q
  97. .text:0040118B
    8 _. z% k3 V9 o
  98. .text:0040118B loc_40118B:                             ; CODE XREF: sub_401160+20↑j
    6 `& e" P8 O0 ?+ N8 ?
  99. .text:0040118B                 push    6               ; Size3 ?0 k7 f. q8 H9 j0 R
  100. .text:0040118D                 call    j_??2@YAPAXI@Z  ; operator new(uint)) u7 k  w; k& g$ U4 O% c4 y" ~* |9 H  e
  101. .text:00401192                 add     esp, 4
    6 ?* v+ L6 C8 g8 d
  102. .text:00401195                 mov     [esi], eax
    ; N; z, M5 k( J* f5 x
  103. .text:00401197                 pop     edi
    6 V& r7 e! C" I2 V
  104. .text:00401198                 mov     dword ptr [eax], 0  k% x0 E+ I4 r; x1 t
  105. .text:0040119E                 pop     esi
    % {! ~0 i+ D$ V3 q( ^$ C( T
  106. .text:0040119F                 retn    4: J( u6 N+ M3 \' x( V6 ~7 v  l  u
  107. .text:004011A2 ; ---------------------------------------------------------------------------
    ) F( ]3 o9 A5 {) A  j) G, b
  108. .text:004011A2
    ! m' v$ E1 M- ~6 |
  109. .text:004011A2 loc_4011A2:                             ; CODE XREF: sub_401160+15↑j; c4 p" G  _8 S
  110. .text:004011A2                 mov     eax, edi6 h1 i9 |5 V1 R. S) w& _
  111. .text:004011A4                 lea     edx, [eax+1]
    8 \3 n: b4 }- O, [5 c
  112. .text:004011A7
    . @6 F0 X( T$ h" j9 a
  113. .text:004011A7 loc_4011A7:                             ; CODE XREF: sub_401160+4C↓j
    6 u% h) r. P9 G4 j
  114. .text:004011A7                 mov     cl, [eax]
    / @( J5 R: Z# S3 J4 o
  115. .text:004011A9                 inc     eax
    6 Q% n! x+ U4 O
  116. .text:004011AA                 test    cl, cl
    0 q$ u+ p$ o) o& T- n
  117. .text:004011AC                 jnz     short loc_4011A7
    ! G. K) ]: u4 w: Q
  118. .text:004011AE                 sub     eax, edx
    % k- L; `& b$ H2 p9 p
  119. .text:004011B0                 push    eax, X, Q# ]9 S) Z7 n% N
  120. .text:004011B1                 mov     ecx, esi
    ! L3 f7 V: K* g2 K, @7 U
  121. .text:004011B3                 call    sub_401030- Z: u- u% H7 c1 j
  122. .text:004011B8                 mov     edx, [esi]
    # ~& ^# _1 [+ E! J; l. p3 D
  123. .text:004011BA                 mov     ecx, edi2 L7 g% L: r, b* F# {
  124. .text:004011BC                 lea     esp, [esp+0]
    6 {% O0 C+ p# O& ^$ L; F$ a  p: }  v
  125. .text:004011C00 _8 L' r3 {4 o3 g4 U
  126. .text:004011C0 loc_4011C0:                             ; CODE XREF: sub_401160+68↓j
    . j  [+ }; N  I: k7 w7 ?
  127. .text:004011C0                 mov     al, [ecx]
    6 F6 D: Z1 |* b6 p* X: m
  128. .text:004011C2                 inc     ecx& R) a0 A  P, ?0 n( D4 z9 ]% N9 ]+ A
  129. .text:004011C3                 mov     [edx], al8 v" p  x9 d; a+ ~/ a1 H3 ~- l
  130. .text:004011C5                 inc     edx: H8 Z+ J. [  {
  131. .text:004011C6                 test    al, al
    : H  q% G8 U( C6 u' W. a3 N
  132. .text:004011C8                 jnz     short loc_4011C0
    2 v5 @2 K3 F4 b; ]$ D' t
  133. .text:004011CA
    $ D, e# j! ~8 k+ j+ o, v, e
  134. .text:004011CA loc_4011CA:                             ; CODE XREF: sub_401160+A↑j: U1 ^! N7 c, w- x1 U& ^# e
  135. .text:004011CA                                         ; sub_401160+10↑j2 @& s" I& b8 A1 x
  136. .text:004011CA                 pop     edi
    $ O6 x, K: u7 u- w, X. u
  137. .text:004011CB                 pop     esi
    ! M4 r0 t0 K; d1 ^
  138. .text:004011CC                 retn    4) f# l4 f8 }. S$ M
  139. .text:004011CC sub_401160      endp' E' V) @& x& f5 ?: |
  140. .text:004011CC1 L5 S, X) O, A. R
  141. .text:004011CC ; ---------------------------------------------------------------------------
复制代码

2 L; A1 z- C9 k. b8 `5 B1 z1 ]0 R
' ]5 a7 B" h$ R5 B
* B3 u6 y; C! m: g/ 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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