冒险解谜游戏中文网 ChinaAVG
标题:
【Directx9游戏汉化 #9】来世(nextlife) 字幕显示函数
[打印本页]
作者:
shane007
时间:
2023-8-27 13:22
标题:
【Directx9游戏汉化 #9】来世(nextlife) 字幕显示函数
本帖最后由 shane007 于 2023-8-27 13:23 编辑
! Z* B' a& l6 b
9 V/ K }( _1 x3 j# v0 j" R$ p
本游戏采用了CEGUI,该组件能采用directx和opengl。
@" c9 s6 l- Z0 S0 d! {
经过我的小方块测试,游戏屏幕显示了小方块,因此确认是directx9的游戏。
" y- N: b& H( o4 i
游戏自带一个EngineSetup.exe程序,设置为窗口模式后就能用cheatengine调式。
" W( C! f' B/ R2 o! P( t- Y, e
(由于游戏窗口较大,我将游戏屏幕和cheatengine分别显示到2个显示器上即可。)
3 {; t* c; x& v9 k5 h+ R! Q. t
8 F. O- \2 o5 P- q, d$ L
j- G2 |0 \) j2 J
在游戏中找一个字幕,在以下地方断下。
& _1 N( f1 a) D8 W2 i' P
由于该游戏基本都是显示在屏幕固定位置(上或者下,居中),
! B" ?( k% Y5 _ H4 J3 O
因此暂时认为此处就是游戏的字幕函数,该函数被20处左右地方调用。
8 O- O! X; B9 z! ~0 x. K& D( n
- C q3 V8 h! D, i% b
NextLife.exe+11C5 - 42 - inc edx
7 I: p4 }1 t- V6 i; S, p) a2 j: g# h
004011C5
复制代码
8 E" U q8 _ `9 n
! R( ]. Z- }' T) @4 N
该地方的伪代码
1 G9 d. E3 [# `9 h
void __thiscall sub_401160(char **this, const char *a2)
) q" ?" I+ ^8 G1 U
{
- o* h+ C1 b6 U9 P
char **v2; // esi
6 i' c0 ~5 B, I% m
char *v3; // eax
+ R; \+ u; h7 d! I
char *v4; // eax
6 V+ }& y4 m' {9 N" K
& P, `/ y( I$ v
v2 = this;
& E4 }* o; t* l! R) Q
if ( a2 )
7 i# a% b! h6 e" u/ l% X7 D
{
5 q- I+ U A, |8 k1 _6 S' F
v3 = *this;
5 W( o& F g% }+ J
if ( a2 != *this )
/ j n6 k0 H; v2 c9 h& y
{
( o( ~+ X" f1 M7 V
if ( *a2 )
# V. u0 R. V! i3 w
{
! O4 c i: E$ K- i9 y1 _" _8 ^7 L: ^( G& w
sub_401030(strlen(a2));
& R* y# M' k8 q. {* D$ [7 q% R
strcpy(*v2, a2);
4 W' R; z- L6 N z) {% Z( a
}
: r4 q. g6 y$ e3 r' _
else
# l$ ~0 Q5 c' }0 `$ D
{
$ T( X7 z0 ~' v. s3 n- J) u
this[1] = (char *)1;
- Q- m* | ]2 X& Y% T- I; O: V8 u( B
if ( v3 )
( k5 l6 o# r4 k4 {: T# Q
operator delete[](v3);
. O: y8 _ H S3 P
v4 = (char *)operator new(6u);
1 f8 S5 v4 H2 t4 {" X$ `: o
*v2 = v4;
! [9 N5 y% E* j3 N* q+ O& g3 k
*(_DWORD *)v4 = 0;
7 p" f3 i; v) R, s1 p5 m' P
}
( v7 ]$ H, s3 m2 I) m
}
$ u/ g# [0 ]& i( Z v$ ~
}
5 R1 j9 W8 E4 \2 ]$ d
}
复制代码
/ ~( p$ {0 O9 X5 E3 R8 u+ I/ ^4 V% P- a
汇编代码
; `/ Y2 R, g5 v/ l2 F% J( X
.text:004010F0
1 E9 J1 U! a& G, ]% h
.text:004010F0 ; =============== S U B R O U T I N E =======================================
+ z; e( y: m. w7 e
.text:004010F0
2 t; ?; R$ ^; }0 c5 x; \) d. m/ N
.text:004010F0
* e$ u- n! P- N: v7 B- k+ s; I
.text:004010F0 sub_4010F0 proc near ; CODE XREF: _main+139↓p
5 J" L& F$ K: w3 j% ^* V# U; F
.text:004010F0 ; sub_403240+97E↓p ...
' D. N) b' I2 O- j2 Z, S; K
.text:004010F0
: l) ?: l- z1 n. Q) W
.text:004010F0 arg_0 = dword ptr 4
0 ], z$ \- d# O6 Z: R
.text:004010F0
7 j+ Y( i \+ }: q
.text:004010F0 mov eax, [ecx]
1 f5 A6 K& `' m9 W
.text:004010F2 test eax, eax
; U( M: ~ ^' W6 y6 X
.text:004010F4 mov edx, [esp+arg_0]
$ f( U: v' O, E) Q
.text:004010F8 jz short loc_401147
8 @. H( A6 b3 r- r# J
.text:004010FA test edx, edx
, [! J6 c% \- \8 b! K2 F
.text:004010FC jz short loc_401147
5 j+ ~4 z% @' U. ^& M
.text:004010FE mov cl, [eax]
( y9 u8 ~) P7 q6 u. a
.text:00401100 test cl, cl
. Y: i0 A" f( ?+ Y2 c8 t1 B
.text:00401102 jnz short loc_401116
% C; R. ~" k3 \0 _; L
.text:00401104 cmp byte ptr [edx], 0
6 L) Q$ g- ^$ V5 D9 M
.text:00401107 setz al
0 v/ O' _2 |0 n+ k+ {
.text:0040110A xor edx, edx
, s/ O s" E; n. _) v
.text:0040110C test al, al
: B' a& |1 \& [" x
.text:0040110E setz dl
* T: b6 g( c( f6 ^0 B5 @
.text:00401111 mov al, dl
; D5 x* e( M; r% z3 i# [# r
.text:00401113 retn 4
4 w- J% g. u' w/ m$ b% T
.text:00401116 ; ---------------------------------------------------------------------------
6 |. [* l" i- i/ K
.text:00401116
; d _+ l) y B$ _( Y! c8 E% V1 R( `
.text:00401116 loc_401116: ; CODE XREF: sub_4010F0+12↑j
`6 N( Y9 [& |5 N/ y g
.text:00401116 cmp byte ptr [edx], 0
' N i! [3 e& [, F5 }- t
.text:00401119 jz short loc_401147
# t1 b: Q2 H- \; h& q
.text:0040111B jmp short loc_401120
+ G' N6 [* L( a; t, ]2 Z. z4 F, i5 w/ ^9 k
.text:0040111B ; ---------------------------------------------------------------------------
" ?' E) f1 z2 ^ N8 g- l$ r k
.text:0040111D align 10h
( B3 R, f3 |4 e% I$ D5 r9 N
.text:00401120
8 \$ a+ w4 D* [$ S
.text:00401120 loc_401120: ; CODE XREF: sub_4010F0+2B↑j
% F2 D) u! B- h
.text:00401120 ; sub_4010F0+3B↓j
5 ~: T2 q% o3 x H5 l7 f% j
.text:00401120 cmp cl, [edx]
( S; D( \8 F7 I9 _" k
.text:00401122 jnz short loc_40112D
( X- F$ f1 B( X( ^6 t! w( S. P
.text:00401124 mov cl, [eax+1]
5 i% I( Y0 u4 K. u/ b3 N. _
.text:00401127 inc eax
( {3 N2 ~! X4 f+ H& d
.text:00401128 inc edx
. y/ } Q% h: ^7 Q& e+ Y' {& w( S
.text:00401129 test cl, cl
! v! `+ q/ f4 [, I
.text:0040112B jnz short loc_401120
8 d: Q1 T B2 D. w5 _+ U! x! q
.text:0040112D
3 O' l T! V1 A; a7 q9 z
.text:0040112D loc_40112D: ; CODE XREF: sub_4010F0+32↑j
& v$ r' o" P y& z3 g+ b
.text:0040112D movzx eax, byte ptr [eax]
- i& v( Z: A6 \' m; C. e) F
.text:00401130 movzx ecx, byte ptr [edx]
$ }5 Z. @ f$ I5 F, i! A
.text:00401133 sub eax, ecx
9 ^' v: G& w, {* n/ Q# i G
.text:00401135 neg eax
* e j5 K* m' \
.text:00401137 sbb al, al
$ } u7 e5 V! f6 Z! U
.text:00401139 inc al
* [+ s5 C2 q( [
.text:0040113B xor edx, edx
' ]( m+ |( q: ~1 K$ Z' V
.text:0040113D test al, al
1 ^' h3 ^8 H8 j4 j$ i
.text:0040113F setz dl
" v2 t; z/ Q9 B- C5 r2 x
.text:00401142 mov al, dl
8 R+ r% {0 E$ b8 ]+ v( C. E& Z+ P
.text:00401144 retn 4
$ @0 M7 ]/ V$ j. } R
.text:00401147 ; ---------------------------------------------------------------------------
7 L! v. |3 V$ b! W. W2 ^0 n
.text:00401147
5 x/ p9 d! w3 f3 ^. o
.text:00401147 loc_401147: ; CODE XREF: sub_4010F0+8↑j
5 A: V; _" H7 ?2 j# l
.text:00401147 ; sub_4010F0+C↑j ...
! @, q6 o' f& T- \/ ?. u. D
.text:00401147 xor al, al
) M& I% z4 w2 M
.text:00401149 xor edx, edx
$ W1 n4 k; F" {3 z3 ^2 M
.text:0040114B test al, al
- t( j7 Y# {3 s* O: W! b; b# n A
.text:0040114D setz dl
7 b- M3 ?; r( j5 z. @' t
.text:00401150 mov al, dl
5 b& p1 h& D c' r- U
.text:00401152 retn 4
_9 H3 T7 A1 N' G0 c8 }
.text:00401152 sub_4010F0 endp
" _) t7 a" T. A& `
.text:00401152
% I: q# u3 W1 X5 M! e8 V2 n, @! U
.text:00401152 ; ---------------------------------------------------------------------------
* Q- X H. H' D! f* h* t: W# @$ ]
.text:00401155 align 10h
# y2 T9 s. F2 i% I$ U4 Y- m o; U: w
.text:00401160
" O& S; t; _6 D4 i; Y
.text:00401160 ; =============== S U B R O U T I N E =======================================
9 G3 \* H3 D, E+ f! v7 H
.text:00401160
; Y0 `3 W2 M7 x/ d- K7 A' s
.text:00401160
5 e8 c; t8 X# c5 ~
.text:00401160 sub_401160 proc near ; CODE XREF: sub_4013D0+15↓p
1 c) m2 B- X! o0 f/ q3 |: x2 Q
.text:00401160 ; sub_4013F0+C↓p ...
' D2 x* T, h' l. x1 [
.text:00401160
( e+ c1 V1 x; s$ e+ q t
.text:00401160 arg_0 = dword ptr 4
2 i @2 ], h+ c% C9 z4 \
.text:00401160
" g9 ] E4 r& r5 D' N+ q% _ M+ D
.text:00401160 push esi
7 ^& b- b* ^6 A+ h8 b+ ^
.text:00401161 push edi
! q$ C4 U+ c, k- ]7 s: `* E
.text:00401162 mov edi, [esp+8+arg_0]
1 w' w" Z6 v1 P: m# P, l( `5 l8 x
.text:00401166 test edi, edi
4 S/ H% l3 H0 V* b, m8 }
.text:00401168 mov esi, ecx
# Z) u+ a) s f: I+ j- e2 |8 [
.text:0040116A jz short loc_4011CA
6 f. }, S4 I: g! k
.text:0040116C mov eax, [esi]
9 I; [' f2 N$ h( M
.text:0040116E cmp edi, eax
. D {. Y0 q& K! h
.text:00401170 jz short loc_4011CA
! ]8 `, L { @9 O/ q T1 m
.text:00401172 cmp byte ptr [edi], 0
! [ V, d9 ^5 K! r B1 g
.text:00401175 jnz short loc_4011A2
6 u5 j7 J2 [9 @: S0 k
.text:00401177 test eax, eax
$ S" |* m( K0 d( d3 [4 }
.text:00401179 mov dword ptr [esi+4], 1
3 i% U: r0 o$ n
.text:00401180 jz short loc_40118B
8 g6 C$ ~' u( B( R$ v D
.text:00401182 push eax ; void *
' v8 q% o6 ? H, W
.text:00401183 call ??_V@YAXPAX@Z ; operator delete[](void *)
& R1 f7 S6 N* a& b0 O
.text:00401188 add esp, 4
! z6 N% d& _2 @- J8 l. f* {
.text:0040118B
$ a# w+ A9 F7 [- s* A7 f
.text:0040118B loc_40118B: ; CODE XREF: sub_401160+20↑j
! }5 N5 ?. M5 R; k2 m+ W
.text:0040118B push 6 ; Size
* A8 x# O2 c$ [: I, f) `
.text:0040118D call j_??2@YAPAXI@Z ; operator new(uint)
' M8 E2 \ k) y2 a2 N. ]: j, Q0 D# }
.text:00401192 add esp, 4
8 ^7 m# ?" J2 Y/ c7 s
.text:00401195 mov [esi], eax
& k, x4 p. ~3 G
.text:00401197 pop edi
% E2 |' `$ ]3 D$ C
.text:00401198 mov dword ptr [eax], 0
c& A0 G& D1 [7 ~
.text:0040119E pop esi
8 i( }: z/ d! d. u
.text:0040119F retn 4
9 N# L0 i# T7 J. Y
.text:004011A2 ; ---------------------------------------------------------------------------
/ Q8 S3 B* o" S L. H) b8 ^3 L
.text:004011A2
( u. |! i% q# T1 P" m3 x
.text:004011A2 loc_4011A2: ; CODE XREF: sub_401160+15↑j
5 _2 J% [2 T8 }) m5 o
.text:004011A2 mov eax, edi
~, Y2 {. T% \( B6 B
.text:004011A4 lea edx, [eax+1]
4 c8 U/ S' [$ v
.text:004011A7
* o; I# O. Q, |' z- ?5 L
.text:004011A7 loc_4011A7: ; CODE XREF: sub_401160+4C↓j
& N# s3 r3 {; o$ f
.text:004011A7 mov cl, [eax]
2 _# T* X0 |% C1 [; H' ^2 Z' L( Q
.text:004011A9 inc eax
% {5 H% w9 ~3 X! p5 X5 y
.text:004011AA test cl, cl
" K* F T# L0 T* {1 d0 `6 m
.text:004011AC jnz short loc_4011A7
# g6 T2 S! Y! D9 L) e9 ?% E
.text:004011AE sub eax, edx
+ q, o$ P2 F ~: s6 X( X2 p3 h" R
.text:004011B0 push eax
4 o. m6 }& W d3 n
.text:004011B1 mov ecx, esi
! r& E# y" ~! j V& E: {3 A
.text:004011B3 call sub_401030
9 W& D4 j, s2 Y' ^% ` C& _
.text:004011B8 mov edx, [esi]
( \& q0 Z. u# Y
.text:004011BA mov ecx, edi
3 I+ O0 D: o2 t! G" R$ n' E$ e
.text:004011BC lea esp, [esp+0]
6 Y p/ C! R3 g* e5 _
.text:004011C0
) N* z- t; Z& ?5 B& T
.text:004011C0 loc_4011C0: ; CODE XREF: sub_401160+68↓j
# m1 t( i; P% }" t1 {
.text:004011C0 mov al, [ecx]
% R3 i/ R5 y2 | z; \2 N
.text:004011C2 inc ecx
# G; E9 F0 O) Q2 U
.text:004011C3 mov [edx], al
8 X$ v K7 c7 N) K0 r: { s; H
.text:004011C5 inc edx
: s+ o6 {' L' v7 J; G- W* y: Y7 _
.text:004011C6 test al, al
( _0 L$ K M! @' b
.text:004011C8 jnz short loc_4011C0
) v+ d; S; K8 B! x, \9 N
.text:004011CA
/ K7 D* Q; H2 t3 ]6 q$ s+ f. y
.text:004011CA loc_4011CA: ; CODE XREF: sub_401160+A↑j
6 o( k4 K# X- h5 @ e/ Y3 O
.text:004011CA ; sub_401160+10↑j
% o1 b$ C( F1 R! ?
.text:004011CA pop edi
& }- j$ ]. r: M
.text:004011CB pop esi
a. l8 E1 b* e( o) x; M+ z
.text:004011CC retn 4
5 i0 Q% c; x' p5 F) j0 J
.text:004011CC sub_401160 endp
0 N% I# N" C* c7 _8 {% b, Z
.text:004011CC
7 G8 G+ v7 m' C' ]# ]- q
.text:004011CC ; ---------------------------------------------------------------------------
复制代码
3 |( D) j- |: L6 t! k, y
5 y- c4 u6 b T; {2 G$ B. C
" O6 r% b7 F# X( N
作者:
星之韶华
时间:
2025-4-14 09:43
学习学习一下
欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/)
Powered by Discuz! X3.2