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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-27 13:23 编辑
. o3 v" {8 r% ?! W% T0 w' |& h. [+ K( |/ m3 O! T% k' Q
本游戏采用了CEGUI,该组件能采用directx和opengl。* E, ?* x: u; Q% X5 `- {
经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。
7 ~; v0 Q' p2 o游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。" _8 p9 a. \4 Z# |
(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)
2 o6 E4 \; L2 p
9 q2 V1 e. O* M5 |9 j* }: y  R6 V5 O# g. t
在游戏中找一个字幕,在以下地方断下。# W8 A( s$ W6 {( o
由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
6 r4 g  v: m9 n& v1 q3 i因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。$ t3 }+ j0 z. ?+ v- j) }+ k
! U2 ]) K7 r' D% m" D; x
  1. NextLife.exe+11C5 - 42                    - inc edx6 R: i* \4 f5 s: X$ m- q0 N
  2. 004011C5
复制代码

0 t" O1 N* F) |+ \; k8 y5 C5 C! f, m6 C8 Q" `' ?: z. H3 o4 J
该地方的伪代码
! Y% H: V% C3 ^& D! O1 x: _2 a# d
  1. void __thiscall sub_401160(char **this, const char *a2). ?( v6 ?2 ~+ X* h
  2. {- s3 {, k9 B! L$ [& g% B& Z
  3.   char **v2; // esi
    : V3 L1 a4 r# l6 u% B! T" n1 d' V
  4.   char *v3; // eax
    2 s  u- @! f, k2 D8 ~
  5.   char *v4; // eax% D0 R' ^3 g$ M) ^% v

  6. * m; [# C6 B# F( o  r7 v
  7.   v2 = this;
    6 G' ~, R6 i# l8 q9 W8 Z
  8.   if ( a2 )
    ! D0 k% K9 ]& {' G5 a; r' }4 w
  9.   {
    ! H' _: |2 o$ c$ k
  10.     v3 = *this;
    " Z, u. }* P/ X/ |6 n
  11.     if ( a2 != *this )
    ; T* w4 s% V; Y8 ?8 ~6 ]
  12.     {
    2 Q% t/ Y' h5 Q% `
  13.       if ( *a2 )
    ) A: V; {8 V2 H" f# A$ W5 e( `
  14.       {5 G/ K! n, _4 [; t2 P1 D2 r7 z+ L
  15.         sub_401030(strlen(a2));
    ! |6 ]& F' _6 \% g" Y- z
  16.         strcpy(*v2, a2);
    ! }0 ~8 o9 _( V  d
  17.       }
    / [2 w( R: W5 ^$ W
  18.       else
    # \  b! ~4 B2 z% ?! w0 C8 ^
  19.       {9 J, n/ e3 h7 ^2 R% f2 ?
  20.         this[1] = (char *)1;; C6 Q+ T& ?; h8 k# q
  21.         if ( v3 )/ f6 w( R" R2 X/ C( E
  22.           operator delete[](v3);
    " X) `. }) u6 R0 o: X
  23.         v4 = (char *)operator new(6u);
    5 D7 {+ S3 Q' c# P5 R
  24.         *v2 = v4;
    ! R$ r% l# [& R  v. Z- P
  25.         *(_DWORD *)v4 = 0;
    5 h- F: [" f" a
  26.       }+ S" E+ D7 w) L% a! H- E, \
  27.     }
    : m5 x* h/ K* {  H5 g( [8 q/ R
  28.   }
    ( I! L9 b% O3 `7 q) F1 l! O
  29. }
复制代码
9 X. S* C' g7 _9 y3 a* L7 T
汇编代码) w/ h: O4 A5 W# {0 Q& b; j
  1. .text:004010F01 P  O% o8 W( b* B7 ]0 b
  2. .text:004010F0 ; =============== S U B R O U T I N E =======================================
    5 l: F, d, r: r# q! H4 _5 s
  3. .text:004010F0% }4 |* u3 y6 S8 w# L, i
  4. .text:004010F0
    ( j( N* P/ H' Z5 M. h1 J1 z; A
  5. .text:004010F0 sub_4010F0      proc near               ; CODE XREF: _main+139↓p
      J+ a$ }3 E. A* F/ d
  6. .text:004010F0                                         ; sub_403240+97E↓p ...
    / R* z4 h4 b5 L$ T. p/ F5 H* P
  7. .text:004010F0- R8 }  t* ^& T3 }- E6 h( h9 [  j
  8. .text:004010F0 arg_0           = dword ptr  4
    , ]4 z4 Q* F" ?0 [
  9. .text:004010F0( l' {+ p$ g; f
  10. .text:004010F0                 mov     eax, [ecx]% Z5 b, t9 |/ Q5 e! u6 n- g6 U; K; @3 y
  11. .text:004010F2                 test    eax, eax
    ! M; W: ?* j/ S2 H" q
  12. .text:004010F4                 mov     edx, [esp+arg_0]
    # r: E4 l4 k! U0 I9 E0 F) e
  13. .text:004010F8                 jz      short loc_401147  y, H: f! m0 L# r! M
  14. .text:004010FA                 test    edx, edx+ g( b/ ~5 y+ }7 }( e8 M
  15. .text:004010FC                 jz      short loc_401147. _- B+ ?3 q0 J* R# h% P
  16. .text:004010FE                 mov     cl, [eax]0 i3 d  p& S) f6 g5 R+ I3 I
  17. .text:00401100                 test    cl, cl
    3 f3 l3 M3 `; z# U" A. w* N
  18. .text:00401102                 jnz     short loc_401116/ }( ?) m/ x7 G. _: W3 x0 U+ E
  19. .text:00401104                 cmp     byte ptr [edx], 0
    / O' T# I5 u+ {5 v8 V
  20. .text:00401107                 setz    al6 c; G8 w( i: y* w, B! D- }# D
  21. .text:0040110A                 xor     edx, edx
    : v. L, z0 ^5 T% [9 l$ s/ k5 X
  22. .text:0040110C                 test    al, al
    , \2 n$ e7 w& n# ]
  23. .text:0040110E                 setz    dl" a' r5 I/ y, E0 X: E/ g  Y: S0 q
  24. .text:00401111                 mov     al, dl
    6 D5 C- \) Q7 Y1 Q3 y) m! @9 |
  25. .text:00401113                 retn    4
    : a& A/ C2 ]2 [! E) L6 {
  26. .text:00401116 ; ---------------------------------------------------------------------------
      F% N1 L5 i1 _$ c+ C) K
  27. .text:00401116" e6 |- Y7 W7 Y7 j; r9 p
  28. .text:00401116 loc_401116:                             ; CODE XREF: sub_4010F0+12↑j
    , Q. I; c0 A  R- N+ `
  29. .text:00401116                 cmp     byte ptr [edx], 0" p9 r! X) r' E
  30. .text:00401119                 jz      short loc_401147
    # g, L6 D9 T5 T, r
  31. .text:0040111B                 jmp     short loc_401120$ T1 y6 B$ A2 {" C# N
  32. .text:0040111B ; ---------------------------------------------------------------------------
    / C% g" S& W# Y
  33. .text:0040111D                 align 10h7 u: W/ _1 K/ L! u
  34. .text:00401120
    # f" n! W/ ~# T/ T0 L* p' h8 t
  35. .text:00401120 loc_401120:                             ; CODE XREF: sub_4010F0+2B↑j
    , `- J5 e+ b  p4 B) V6 r5 K
  36. .text:00401120                                         ; sub_4010F0+3B↓j0 u. m. I. R6 z
  37. .text:00401120                 cmp     cl, [edx]' L2 W$ i1 g$ g+ ]
  38. .text:00401122                 jnz     short loc_40112D
    - e1 h0 O( G1 N  ], S
  39. .text:00401124                 mov     cl, [eax+1]4 t) h: C8 X/ S, g7 i9 p
  40. .text:00401127                 inc     eax
    " U- j- Y3 m( r! ]5 k& F
  41. .text:00401128                 inc     edx' f9 Y3 Q; B9 s( `  ]
  42. .text:00401129                 test    cl, cl! f- Q- ~6 u# {2 v  G' F( q
  43. .text:0040112B                 jnz     short loc_401120
    ) R) q1 S& k7 k' D  u
  44. .text:0040112D
    9 o' }& {, ]/ T! d/ z- J
  45. .text:0040112D loc_40112D:                             ; CODE XREF: sub_4010F0+32↑j
    1 ^! u+ _$ L$ c, Z. M* M
  46. .text:0040112D                 movzx   eax, byte ptr [eax]+ K$ y/ m1 B3 Q; [- o' J
  47. .text:00401130                 movzx   ecx, byte ptr [edx]
    5 R4 N$ j" J9 F$ q/ P2 L
  48. .text:00401133                 sub     eax, ecx
    ' Z7 K/ x/ R% P
  49. .text:00401135                 neg     eax
    ) b, n0 \2 O1 k, P. A
  50. .text:00401137                 sbb     al, al
    4 Z0 b; [5 P, V+ p
  51. .text:00401139                 inc     al) V/ r) f7 u" i( _/ F! d* w
  52. .text:0040113B                 xor     edx, edx0 E' M0 g& F  j6 k. S& k: v, c6 n
  53. .text:0040113D                 test    al, al
    2 y2 p/ y6 v' Y+ |/ T6 c
  54. .text:0040113F                 setz    dl0 u4 ]9 W( v5 d" P# l
  55. .text:00401142                 mov     al, dl4 Y6 O, p8 x1 `3 `9 Q- Y6 s2 {
  56. .text:00401144                 retn    4
    6 a1 V8 Z! I# i7 b
  57. .text:00401147 ; ---------------------------------------------------------------------------
    3 p7 B2 h6 v  [. b6 A
  58. .text:00401147) E: ~' L9 F6 I& U$ W" d
  59. .text:00401147 loc_401147:                             ; CODE XREF: sub_4010F0+8↑j
      G$ e9 N% q1 K2 F+ T$ [$ `
  60. .text:00401147                                         ; sub_4010F0+C↑j ...) k3 t0 v( ^; d% q
  61. .text:00401147                 xor     al, al
    0 s/ ]# E) m% c  e' c) Y- s
  62. .text:00401149                 xor     edx, edx
    + n! P. Y$ D8 G4 `( X: ~. [5 H
  63. .text:0040114B                 test    al, al
    2 r! C( r$ Y# z% A+ B3 ~
  64. .text:0040114D                 setz    dl
    ( B# D' c$ C; k: n1 q
  65. .text:00401150                 mov     al, dl; A; [/ h& ^( e1 q" n( h
  66. .text:00401152                 retn    4
    0 u! D- _' Z* U. M
  67. .text:00401152 sub_4010F0      endp8 Q+ j; g' R& a; y
  68. .text:00401152, m; j  D' G( V) Q$ D$ |# W
  69. .text:00401152 ; ---------------------------------------------------------------------------
    3 z5 S1 w% q5 z( N* q4 V
  70. .text:00401155                 align 10h1 \+ h  x- X" i. M; q6 X6 x5 N- X
  71. .text:00401160
    . l, ^  k! e7 t* U* e' ~4 D
  72. .text:00401160 ; =============== S U B R O U T I N E =======================================, P4 S% X. X4 O/ a" k
  73. .text:00401160, t8 A2 @( i  v8 j5 K
  74. .text:00401160
    - w' {/ b7 o! z# ]" |4 }* I: e" {
  75. .text:00401160 sub_401160      proc near               ; CODE XREF: sub_4013D0+15↓p
    , T  a* R0 H' W; U/ u% w
  76. .text:00401160                                         ; sub_4013F0+C↓p ...
    7 M$ ~/ \6 T. _# J, n, D- o
  77. .text:00401160! j& S8 c2 u. @+ [
  78. .text:00401160 arg_0           = dword ptr  47 ?4 f, S/ q2 G  P" `
  79. .text:00401160% L5 d9 M& v1 D" h" V  d' ~
  80. .text:00401160                 push    esi  M1 V9 }: Z8 x9 Y: M  u
  81. .text:00401161                 push    edi
    # g6 D4 Y, R0 O( ]$ B
  82. .text:00401162                 mov     edi, [esp+8+arg_0]  P! A/ C- i4 n! @. j5 ~
  83. .text:00401166                 test    edi, edi9 ~3 w% Z7 _7 ~# u( D- W
  84. .text:00401168                 mov     esi, ecx! k* Z5 J8 U6 h: B3 D" M( t
  85. .text:0040116A                 jz      short loc_4011CA; c8 f9 \# w+ Z8 @; {0 [
  86. .text:0040116C                 mov     eax, [esi]) d' D5 |) K! v2 y( S
  87. .text:0040116E                 cmp     edi, eax
    7 w/ p  x  f- A% h0 B$ k( k4 A
  88. .text:00401170                 jz      short loc_4011CA( |  v5 F6 ]0 s. X# N" _2 f
  89. .text:00401172                 cmp     byte ptr [edi], 0
    5 {# ?7 a- T! v: ~9 _1 F. u  [
  90. .text:00401175                 jnz     short loc_4011A2! j% ?9 I) ]1 `3 k: s+ r
  91. .text:00401177                 test    eax, eax
    ( d0 M1 \. f: @( g" c+ N5 S; L
  92. .text:00401179                 mov     dword ptr [esi+4], 1
    5 ~0 ^# _1 v" t* D$ F
  93. .text:00401180                 jz      short loc_40118B2 L4 W6 K1 i4 q- n
  94. .text:00401182                 push    eax             ; void *: w7 O* F+ M3 Z/ c: K$ E% `4 T% D
  95. .text:00401183                 call    ??_V@YAXPAX@Z   ; operator delete[](void *)  k8 F( @7 `& T, S
  96. .text:00401188                 add     esp, 4
    3 }9 A$ i9 j0 T& @3 q
  97. .text:0040118B
    3 k% o: C' A  s) a
  98. .text:0040118B loc_40118B:                             ; CODE XREF: sub_401160+20↑j
      k! k$ ]% F  |8 d" v/ r+ n8 F
  99. .text:0040118B                 push    6               ; Size& e$ Z( f, ^0 A2 R. p# l' g/ g
  100. .text:0040118D                 call    j_??2@YAPAXI@Z  ; operator new(uint)
    6 g* M) e) {; R7 X  U' U
  101. .text:00401192                 add     esp, 4& M8 V$ E* W6 l
  102. .text:00401195                 mov     [esi], eax
    8 t& Z/ k; }% l; \) n* |+ k) z' ~2 y6 K
  103. .text:00401197                 pop     edi
    1 I: }3 x3 @: r& ~! f  D3 b
  104. .text:00401198                 mov     dword ptr [eax], 0
    1 R5 B* W! [0 H- ~
  105. .text:0040119E                 pop     esi8 L8 [2 @" R' l) @
  106. .text:0040119F                 retn    4$ ^" }. _# l- A/ s9 X- W# n
  107. .text:004011A2 ; ---------------------------------------------------------------------------" |4 M  f6 ]+ X, a) j9 p
  108. .text:004011A2
    / A0 }9 g1 X& @! K$ m  m3 c" V2 M
  109. .text:004011A2 loc_4011A2:                             ; CODE XREF: sub_401160+15↑j- w1 }- ~2 f5 H/ f
  110. .text:004011A2                 mov     eax, edi
    ( H( p1 K+ C# m
  111. .text:004011A4                 lea     edx, [eax+1]* w& G3 O, l+ M  g, Y1 a8 l
  112. .text:004011A7
    9 x9 s/ I" E- h7 {3 }
  113. .text:004011A7 loc_4011A7:                             ; CODE XREF: sub_401160+4C↓j  ?  \2 A4 s3 h; `
  114. .text:004011A7                 mov     cl, [eax]( h+ N) L* u% }  i3 `: [4 O+ A5 M
  115. .text:004011A9                 inc     eax$ `! X) V& s8 l  T* D) U1 Y* y
  116. .text:004011AA                 test    cl, cl
    , j+ B7 B* K* m% e$ i/ ^" D/ Z
  117. .text:004011AC                 jnz     short loc_4011A78 O' v  l( \3 w8 i3 `+ h
  118. .text:004011AE                 sub     eax, edx
    ; z% h9 E( K7 Y" o
  119. .text:004011B0                 push    eax
    3 @/ v/ m1 Y; ?4 Q
  120. .text:004011B1                 mov     ecx, esi& N4 v" p6 z5 V# t
  121. .text:004011B3                 call    sub_401030
    ( y8 ~$ D7 e! U  `
  122. .text:004011B8                 mov     edx, [esi], H  U0 T# U% m  g) J
  123. .text:004011BA                 mov     ecx, edi: d# u  q! K9 s
  124. .text:004011BC                 lea     esp, [esp+0]
    , x5 g- V4 U/ E6 L  ]
  125. .text:004011C0
    " k, \& o; z7 W. ^& Z
  126. .text:004011C0 loc_4011C0:                             ; CODE XREF: sub_401160+68↓j
    * l9 A8 A+ |& h0 p' `9 C
  127. .text:004011C0                 mov     al, [ecx]. c% H2 ]+ d& P- b
  128. .text:004011C2                 inc     ecx& @, G9 I& l3 V' F: D6 o
  129. .text:004011C3                 mov     [edx], al
    ) U: V8 n; Y& p( h$ t
  130. .text:004011C5                 inc     edx
    " z( N4 e8 p& r) U/ U# ?
  131. .text:004011C6                 test    al, al
      A) A" v3 c% h: B
  132. .text:004011C8                 jnz     short loc_4011C0& E2 x. Z" a3 I8 W' ?$ d0 B
  133. .text:004011CA7 ~. ?# A" _2 H; _
  134. .text:004011CA loc_4011CA:                             ; CODE XREF: sub_401160+A↑j$ l9 W$ A) b8 i# n
  135. .text:004011CA                                         ; sub_401160+10↑j
      ]7 c* N1 a  p: `8 I- C
  136. .text:004011CA                 pop     edi
    2 k5 ^0 [0 T+ F; p
  137. .text:004011CB                 pop     esi% e8 f# k# [0 O( o6 r5 M' z
  138. .text:004011CC                 retn    4; w/ C5 z3 h2 P; @: B# w
  139. .text:004011CC sub_401160      endp& e6 H. x$ n, M! _, Y7 B+ Q& I
  140. .text:004011CC
    8 k' E. X8 B9 b2 x7 T) @/ w
  141. .text:004011CC ; ---------------------------------------------------------------------------
复制代码

) c; o) v2 q& |+ M
: I9 d# N, Y9 \' S  l
; }) o6 X1 [- Z; [" A
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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