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

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

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

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

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

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

本帖最后由 shane007 于 2023-8-27 13:23 编辑
: P: `* Z' C0 p: c1 R8 I4 W% O- R' f! X
本游戏采用了CEGUI,该组件能采用directx和opengl。
% C: O8 W, K3 `经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。
4 w( u- A$ V! c7 R! d" K游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。
+ B8 Y5 A4 k. d(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)
* Y4 T, V. }3 I& M# t8 n0 _; x/ V- T/ c8 v: ~
7 p) i% F8 z+ i' I1 n
在游戏中找一个字幕,在以下地方断下。
3 s3 Z" i2 _% T4 n' ~( b7 S/ Z由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
: v0 h1 j! b- Q0 d. B! C因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。
7 Y5 E/ J1 x1 _4 P% b  H- Q# R
9 b1 U8 L" f, ~+ {( I2 E9 E5 M5 V) P1 m
  1. NextLife.exe+11C5 - 42                    - inc edx; n4 j9 Y% a" _  w+ e6 p9 V
  2. 004011C5
复制代码
* i$ d: n  ~0 i3 u4 z
* G9 m) ]; B% E& P: N  k
该地方的伪代码
1 z1 G8 J3 h% y$ R
  1. void __thiscall sub_401160(char **this, const char *a2)9 c: \9 X' P9 l" j( j6 x' ^
  2. {4 S1 Z7 R' i' V; n7 ^; Q! x
  3.   char **v2; // esi
    * E9 d# V* I" P3 x2 |9 \
  4.   char *v3; // eax
    4 V3 c( Q% l3 }4 C8 L& D
  5.   char *v4; // eax) L/ [) f" H+ O! j; T  R
  6. 8 T" |/ g$ W) Q1 Z9 B6 C. V
  7.   v2 = this;% S# ^) O; _( S% A0 j+ S6 t4 L
  8.   if ( a2 )8 V" O+ i7 `- q
  9.   {
    + w2 T, N* o- G* G
  10.     v3 = *this;
    0 H) }% _1 ?+ v+ a  v; f- Z+ c
  11.     if ( a2 != *this )
    # j, h4 Z& T) z1 D, K+ a4 S
  12.     {8 j4 h( G3 S  F
  13.       if ( *a2 )
    1 T1 R: p% G: q$ e8 I
  14.       {
    $ s$ o- ?+ [+ k3 T3 W* l
  15.         sub_401030(strlen(a2));4 @: `1 \9 @0 _5 s6 z; K3 Q
  16.         strcpy(*v2, a2);
    1 M3 Z3 \% T& K0 a$ Y0 M7 l* W2 C
  17.       }
    + [2 ^) k' l! c$ X
  18.       else
    ! n0 j# v( R6 d" `7 S: \
  19.       {! e: z5 ?: Z3 ?; z
  20.         this[1] = (char *)1;) P% M! i! V: z$ G$ J0 C
  21.         if ( v3 )
    ! x* V+ R) p# M7 p; W; m
  22.           operator delete[](v3);
    / W9 j8 w0 _$ b
  23.         v4 = (char *)operator new(6u);
    6 j; `% s; `$ V& ~, f# q
  24.         *v2 = v4;
    , a9 i* U" l7 [' A- Z% A
  25.         *(_DWORD *)v4 = 0;& z4 X  w8 ~, _  D
  26.       }3 ^! N$ @5 j' C, d9 o: G
  27.     }
    0 ]' O+ T2 C, F/ Z" t2 F' F
  28.   }  N, }- S$ L6 Z. K6 S& b5 B" O4 q$ B
  29. }
复制代码

9 R" ~* A  S" x, b汇编代码
( i( }1 L# k$ _4 g% D
  1. .text:004010F0' ]# i0 i/ H% L7 J
  2. .text:004010F0 ; =============== S U B R O U T I N E =======================================, v' V" D7 C) P) F0 y
  3. .text:004010F0
    3 g9 z" o$ C$ B. l% j2 P; o& A
  4. .text:004010F0' b( c" L7 p: W; ]# H7 M/ N- v7 ?
  5. .text:004010F0 sub_4010F0      proc near               ; CODE XREF: _main+139↓p
    ) ^0 @) a# O& s; w# @
  6. .text:004010F0                                         ; sub_403240+97E↓p ...
    ! U& O3 \% d0 q+ Z. u
  7. .text:004010F0" S( q1 k) b1 m% O) [# |2 {2 v
  8. .text:004010F0 arg_0           = dword ptr  4) u6 ?$ y6 L$ c3 y! w- t' x0 Y! E8 Y
  9. .text:004010F0* u% j' D5 h2 ^
  10. .text:004010F0                 mov     eax, [ecx]; b/ x$ W: C6 O7 L) M
  11. .text:004010F2                 test    eax, eax
    , d+ i  r( s, l5 |0 T
  12. .text:004010F4                 mov     edx, [esp+arg_0]! n' I, h* M' ~& b4 H
  13. .text:004010F8                 jz      short loc_4011479 s$ {2 h  ^4 G% q1 r5 j) A  C
  14. .text:004010FA                 test    edx, edx
    8 k1 N+ D) Z- _+ t# E. \4 Z* @
  15. .text:004010FC                 jz      short loc_4011478 A" u2 v* U" E! V3 Z
  16. .text:004010FE                 mov     cl, [eax]
    % w4 W" S" z. M; V# g. n! b0 @7 u& k
  17. .text:00401100                 test    cl, cl' t% i, |. @6 I1 O
  18. .text:00401102                 jnz     short loc_401116
    $ w& h% ]2 C" N. z
  19. .text:00401104                 cmp     byte ptr [edx], 0
    $ c8 I/ ]  h7 [$ j1 ^/ h7 }
  20. .text:00401107                 setz    al8 M, v6 O9 q$ R! [) N
  21. .text:0040110A                 xor     edx, edx( P3 b! ~0 l+ T! h; r
  22. .text:0040110C                 test    al, al3 |$ X- @0 t- u
  23. .text:0040110E                 setz    dl. T4 |8 V9 \& X' {
  24. .text:00401111                 mov     al, dl. |2 ~  O! P* `
  25. .text:00401113                 retn    4* c. z% U* n9 d
  26. .text:00401116 ; ---------------------------------------------------------------------------
    ( ?) A' H* I. J1 N
  27. .text:00401116
    % U. h$ c. k7 i3 q- p; M. n
  28. .text:00401116 loc_401116:                             ; CODE XREF: sub_4010F0+12↑j  _' m0 Q, K7 K8 I
  29. .text:00401116                 cmp     byte ptr [edx], 02 {! h, [0 u8 Y9 g
  30. .text:00401119                 jz      short loc_401147( \- t1 s1 h5 [1 [: e0 S
  31. .text:0040111B                 jmp     short loc_401120( [) W6 t' O' |" h
  32. .text:0040111B ; ---------------------------------------------------------------------------9 K( `' R. X0 ~& O' O, x4 _
  33. .text:0040111D                 align 10h
    $ P: w4 J! p" i* I( C/ j( e) F
  34. .text:00401120
    / n7 I1 ^6 G3 N! N5 l" l
  35. .text:00401120 loc_401120:                             ; CODE XREF: sub_4010F0+2B↑j
    ! a/ f0 l* }6 b, R7 E
  36. .text:00401120                                         ; sub_4010F0+3B↓j, P0 W8 r3 D* x; y8 t2 V$ c% V9 T0 [1 o
  37. .text:00401120                 cmp     cl, [edx]
    3 a, ?" n: c! u0 w( `
  38. .text:00401122                 jnz     short loc_40112D/ }$ e5 s4 D' r6 {
  39. .text:00401124                 mov     cl, [eax+1]  Q( P8 Z% U/ _& o5 c
  40. .text:00401127                 inc     eax; h! f: T3 \& r
  41. .text:00401128                 inc     edx0 y8 t! P8 P  ]3 K7 @: n; f& y9 m
  42. .text:00401129                 test    cl, cl
    / J4 B! ~) M9 W0 G5 l  p
  43. .text:0040112B                 jnz     short loc_401120! l5 g* @( q  S$ [# G
  44. .text:0040112D  O( ^$ L( U  v
  45. .text:0040112D loc_40112D:                             ; CODE XREF: sub_4010F0+32↑j5 o  f& {: r3 \6 l) @& R4 R
  46. .text:0040112D                 movzx   eax, byte ptr [eax]
    + ~$ A7 [! ^2 y
  47. .text:00401130                 movzx   ecx, byte ptr [edx]
    ! z" W+ Q' m1 U( ?, r" W! Z' w5 ^
  48. .text:00401133                 sub     eax, ecx
    + n) K& X  N5 J
  49. .text:00401135                 neg     eax3 h' u1 k( ~% r( a
  50. .text:00401137                 sbb     al, al
    & H/ Z; `$ g, r' B
  51. .text:00401139                 inc     al: x% T" H- u; D* s  H
  52. .text:0040113B                 xor     edx, edx
    $ Z% P  ]9 j. U6 K5 g
  53. .text:0040113D                 test    al, al; d* Y- O1 A( R# B
  54. .text:0040113F                 setz    dl2 s' }( T$ ~7 b
  55. .text:00401142                 mov     al, dl
    4 }& H9 m& [* R4 \+ X
  56. .text:00401144                 retn    4
    ! B+ \+ f, P; [( |1 C# u; M
  57. .text:00401147 ; ---------------------------------------------------------------------------4 l" B/ X" f8 I6 `& W
  58. .text:00401147( z) C% M$ I5 R+ [4 X. v
  59. .text:00401147 loc_401147:                             ; CODE XREF: sub_4010F0+8↑j5 u6 `( |4 X$ D% \$ @+ {4 M" R! r
  60. .text:00401147                                         ; sub_4010F0+C↑j ...4 \- l. t. o' C/ u
  61. .text:00401147                 xor     al, al* h0 H. n: L/ }  q, B5 W% F0 i: j2 F
  62. .text:00401149                 xor     edx, edx
    # b; l" R" K) e/ ~1 B
  63. .text:0040114B                 test    al, al0 y; A; U0 ?3 T6 r( R! D, @  O
  64. .text:0040114D                 setz    dl
    * @. _& H' i. M2 u3 r, o
  65. .text:00401150                 mov     al, dl9 x8 n3 V& n; T% I' I
  66. .text:00401152                 retn    4
    3 {! b, T4 @% J) y# `7 \
  67. .text:00401152 sub_4010F0      endp& Q) y" T2 [3 e  V- j
  68. .text:00401152
    $ B4 Q* ~$ _; M. ]' n
  69. .text:00401152 ; ---------------------------------------------------------------------------
    ; p* t, Z- b3 }5 y3 y
  70. .text:00401155                 align 10h
    + }" \0 X8 Y& }! J2 u; _! u
  71. .text:00401160
    , o6 u% d; N' i, ~5 q
  72. .text:00401160 ; =============== S U B R O U T I N E =======================================
      r% @8 s* G$ D5 P
  73. .text:00401160
    % d! t; S/ j8 J6 A
  74. .text:00401160# d  P; A. W7 g; W) D+ D
  75. .text:00401160 sub_401160      proc near               ; CODE XREF: sub_4013D0+15↓p
    : Y& s0 j# D- O. i9 i
  76. .text:00401160                                         ; sub_4013F0+C↓p ...
    " H  n! P/ D. b! u$ I
  77. .text:004011605 e3 A% v# k) x# k- I1 ?' ]
  78. .text:00401160 arg_0           = dword ptr  4
    6 i. r6 `0 K- A& v8 E/ V
  79. .text:00401160
    9 e$ g9 o- L3 h; f
  80. .text:00401160                 push    esi
    ) c) d8 p- E( i  a* l/ U! D9 X+ h& s& _
  81. .text:00401161                 push    edi1 P2 s8 n9 _. N8 l4 P! |
  82. .text:00401162                 mov     edi, [esp+8+arg_0], |- Y3 P6 A9 j* y  n/ w, H
  83. .text:00401166                 test    edi, edi" C2 k" W( k" b# O5 n' F$ W0 ~
  84. .text:00401168                 mov     esi, ecx
    + ?3 E3 L+ D, q5 a  Y# _% ]1 t, ^
  85. .text:0040116A                 jz      short loc_4011CA
    * {; r6 _* T. ~; o$ P" U) Y: A. K
  86. .text:0040116C                 mov     eax, [esi]0 ~* m! @% a, q2 G& q
  87. .text:0040116E                 cmp     edi, eax
    4 l: |1 j- ~8 }3 y
  88. .text:00401170                 jz      short loc_4011CA
    # n' y$ W; C7 Q  `' H% b
  89. .text:00401172                 cmp     byte ptr [edi], 0
    ! z% H0 o7 t) q' Z1 d: [- d2 H
  90. .text:00401175                 jnz     short loc_4011A2( o* D* l  V% z# W/ u7 e! p; M3 {
  91. .text:00401177                 test    eax, eax9 }+ y: Q: V7 L% H
  92. .text:00401179                 mov     dword ptr [esi+4], 1
    8 T  x4 W# M" y) ~; Z, x) a0 g- I
  93. .text:00401180                 jz      short loc_40118B; K& ?, @: p/ s0 c- q
  94. .text:00401182                 push    eax             ; void *; ^3 P* |6 w( J; @8 `: j* ]
  95. .text:00401183                 call    ??_V@YAXPAX@Z   ; operator delete[](void *)( E3 Q& @, q. r  H0 {
  96. .text:00401188                 add     esp, 48 r5 u& k) k$ U$ ?3 b6 H
  97. .text:0040118B
    ' {* d7 f6 R7 E9 f% I
  98. .text:0040118B loc_40118B:                             ; CODE XREF: sub_401160+20↑j
    2 |3 Z+ J" o2 v7 P3 ^4 N/ A* S
  99. .text:0040118B                 push    6               ; Size2 `7 j7 A! p8 X+ D! l, F9 A* c
  100. .text:0040118D                 call    j_??2@YAPAXI@Z  ; operator new(uint)
    , l8 k" d+ m7 |! M- b
  101. .text:00401192                 add     esp, 4) B0 B  J  w5 z/ }
  102. .text:00401195                 mov     [esi], eax
    5 _8 |) T$ J3 A5 E
  103. .text:00401197                 pop     edi
    4 c: U# a. E$ j
  104. .text:00401198                 mov     dword ptr [eax], 0
    7 X7 W2 a$ a4 W4 U( p
  105. .text:0040119E                 pop     esi& \# C6 ?( G' n; U
  106. .text:0040119F                 retn    40 q4 ?2 d9 N& X" L" J$ [5 S
  107. .text:004011A2 ; ---------------------------------------------------------------------------
    & D1 o0 }0 p) v+ g9 [1 X( {
  108. .text:004011A2
    " r+ y4 t$ ~& H& J* q. D
  109. .text:004011A2 loc_4011A2:                             ; CODE XREF: sub_401160+15↑j3 d  Q. t2 {1 o( S
  110. .text:004011A2                 mov     eax, edi
    * Y/ W: ]) {/ v" H
  111. .text:004011A4                 lea     edx, [eax+1]) S# i/ V8 t( t5 C$ T
  112. .text:004011A75 I/ G! D9 }* S# l3 `+ v5 `
  113. .text:004011A7 loc_4011A7:                             ; CODE XREF: sub_401160+4C↓j# O. \" J. S+ J  ?
  114. .text:004011A7                 mov     cl, [eax]# l" h9 U5 W; I5 E
  115. .text:004011A9                 inc     eax
    ; U8 s1 s" a# S0 H5 W! E6 w
  116. .text:004011AA                 test    cl, cl, H& `9 s5 A& N3 c; f$ f8 w1 i
  117. .text:004011AC                 jnz     short loc_4011A7
    & V  ^$ C4 r- M3 y+ N
  118. .text:004011AE                 sub     eax, edx
    - ?2 P5 a4 M  r" e0 ^+ h
  119. .text:004011B0                 push    eax
    2 C2 H  h) k- O1 r* Y) Y
  120. .text:004011B1                 mov     ecx, esi
    . t+ O% `, P# H/ J
  121. .text:004011B3                 call    sub_401030' ]; v5 {# w' o/ X) c  A
  122. .text:004011B8                 mov     edx, [esi]% Z8 }; E# U8 r# P5 F) A2 p2 {3 J
  123. .text:004011BA                 mov     ecx, edi
    # n: D7 X6 Q6 s, A/ U
  124. .text:004011BC                 lea     esp, [esp+0]
    8 @) j7 ~* }2 o0 ?3 ^: C% q
  125. .text:004011C0
    / q( Z& P' o! z' ~3 a# j& k
  126. .text:004011C0 loc_4011C0:                             ; CODE XREF: sub_401160+68↓j
    / s4 ~& O/ x$ I- F( ~" u! |$ G
  127. .text:004011C0                 mov     al, [ecx]( ], G8 i0 l7 T- L
  128. .text:004011C2                 inc     ecx( t, m1 x7 m. h- [
  129. .text:004011C3                 mov     [edx], al
    # y3 ]( n1 x" b% ]' L
  130. .text:004011C5                 inc     edx: B  b: b0 _6 h  @1 ]) y" K7 v
  131. .text:004011C6                 test    al, al
    % }5 e- S2 Q) U
  132. .text:004011C8                 jnz     short loc_4011C06 i6 J  I) }# b2 Q& E2 B
  133. .text:004011CA
    ) E" j( h; N9 s, v; [2 D& }
  134. .text:004011CA loc_4011CA:                             ; CODE XREF: sub_401160+A↑j" c, K9 R: \& X9 R$ p
  135. .text:004011CA                                         ; sub_401160+10↑j$ }/ [( b8 @8 [
  136. .text:004011CA                 pop     edi7 Y. T8 r: |, _/ p
  137. .text:004011CB                 pop     esi
    ) g0 @2 T9 q: z  k9 M
  138. .text:004011CC                 retn    4
    8 _0 Y" f" v6 k8 U2 o) s# r* [
  139. .text:004011CC sub_401160      endp
    7 r( j5 [: z' F, \: D* p9 F% k
  140. .text:004011CC
    9 p+ F4 l" }$ F9 _; ?6 U
  141. .text:004011CC ; ---------------------------------------------------------------------------
复制代码
; E% q$ U' x  M$ Z# P

; N* s3 N3 U! X. x  ?. m' H
2 T$ P4 t4 {, X
分享到:  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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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