冒险解谜游戏中文网 ChinaAVG

标题: 【Directx9游戏汉化 #1】 修道院:导演剪辑版(The Abbey: Director's cut) 字幕... [打印本页]

作者: shane007    时间: 2023-8-23 14:57
标题: 【Directx9游戏汉化 #1】 修道院:导演剪辑版(The Abbey: Director's cut) 字幕...
以下这个本论坛的下载贴中,由于有个字符串在中文系统中不能正常显示,导致游戏不能正常 运行。
# Z+ u" m! b4 O9 d+ C4 e) B  R/ {% z& `2 b修道院:导演剪辑版(The Abbey: Director's cut)  |9 k3 M4 t6 s
https://www.chinaavg.com/forum.php?mod=viewthread&tid=1479679 S2 p6 C% J% G& i$ O6 t
" K( {* b# `, V4 ~  {% c7 _6 A
具体信息可以参考Messages.log。修改正确后的字符串为Tomas。# t( |! P6 ^, H; Q% h, C8 u
修改处
7 B. n# s" h6 e; T《1》以下文件的内容$ u  B" E$ o& v- _9 P  c
\The Abbey Directors Cut\English\Data\Game\Game.xmb
% N" b) p0 g& p  ^  k8 Z1 q《2》所有游戏的文件和目录名,只要含有那个字符串的都要修改为Tomas
0 p# @' {8 y, L9 H2 u4 y: ^    比如\English\Data\Models\Tomas
5 T" g0 v+ G, Y, k7 ?
5 n1 C) x$ m$ v& U用ida pro 进行简单分析后,确定游戏是directx9的游戏,  ]/ m3 x% R* X9 i
  1. .text:004F8D3B                 push    20h             ; SDKVersion
    $ q. C6 u0 \7 l9 t; d5 i8 x
  2. .text:004F8D3D                 mov     esi, ecx+ N  C" G. p2 n4 w( O/ F
  3. .text:004F8D3F                 call    Direct3DCreate9
复制代码

& z7 B) E8 w+ Y. R7 X
- k7 K0 k, Z5 j# D0 }9 A
) f# u; H& w$ X2 Q  `8 K播放动画的时候,好像用了direct draw
4 l! t, |) l4 i. p
  1. .text:004F4200 ; int __thiscall CVideo::Create(CVideo *__hidden this)7 ~  c$ k- I6 j7 F. P0 V3 ^4 I) r
  2. .text:004F4200                 public ?Create@CVideo@@QAEHXZ/ |- v8 I' \% Y; D+ h4 w
  3. .text:004F4200 ?Create@CVideo@@QAEHXZ proc near        ; CODE XREF: CSystem::Create(HINSTANCE__ *,int,char *,char *,CWorld *,char const *)+380↑p( {; ^5 W: x. ?2 \0 P. S9 _
  4. .text:004F4200                                         ; DATA XREF: .rdata:off_5C6668↓o
    $ P" V& Y6 D& q4 B: Y# S3 [8 C" J
  5. .text:004F4200                 push    esi
    5 o1 T$ a7 h+ e! H$ a
  6. .text:004F4201                 push    edi& C; A) Q: W. j" ~3 {7 g6 T1 C
  7. .text:004F4202                 mov     esi, ecx* i# c) r5 V9 O& M4 n: a
  8. .text:004F4204                 push    0               ; pUnkOuter9 R' K" E5 ?/ X6 M
  9. .text:004F4206                 lea     edi, [esi+54h]
    0 D0 b' y! N# ~$ o8 J1 l
  10. .text:004F4209                 push    edi             ; lplpDD2 y+ O: H  w0 ]) w2 k* _* ?, K7 j
  11. .text:004F420A                 push    0               ; lpGUID
    ( m2 l; S" z& Z9 F& g
  12. .text:004F420C                 mov     byte ptr [esi+79h], 02 n* S) ~3 D$ H, B" m
  13. .text:004F4210                 call    DirectDrawCreate
复制代码

6 N& Z+ j% t8 p/ S" m  k3 w# ~3 e* \  v$ J! E& G
1 y9 v0 D2 W' [- K
本游戏可以窗口化,比较容易调试。9 g1 M! Z$ H! |4 C$ F, s7 u3 p
找一句画面有的字符串the son of ,找到显示函数。( k4 X* w8 d. v: A
以后我们用自己的函数替换它即可。6 Y* }+ j8 }* S% B
8 _# G7 w  D. M& d9 Y& F
对话字幕断点处( w; y  O) i  I7 F, r
004B5AF3  |> /8A08          /mov     cl, byte ptr [eax]1 _  m* W. N' j) `7 G/ P" `/ W7 \

" j  I4 i9 r, j. ~5 z9 [1 h& z* W8 @* R' E* b9 |. U9 v
char __thiscall CFadingText::Set
, I( ]* _2 c8 n& O" _2 j(CFadingText *this, char *a2, int a3, int a4, bool a5, bool a6)4 v- S" D2 E4 n7 T3 v% {4 u
  U6 Q, T4 l; g3 h6 W/ @; N2 |
查了以下调用它的地方,有10多个,看来这个游戏所有地方的字幕应该都是调用这个显示函数了,
" \' c' R  \1 F/ g/ f% a5 c
  R2 K; X' h4 O$ K以下是一部分, w* e/ I1 ~8 f' C- Z
  1. CGLCLayer::Render+97, * r1 R  h6 w- h0 h
  2. CGameInterface::ShowSentence+2C,
    4 m& |( Q0 q& d, l" E  F$ _
  3. CGameInterface::CloseDiary+1A,
    2 c; A1 D- e/ ~& R  C/ h
  4. CGameInterface::SetDiaryText+6A,
    ( @. E. G( `4 k' `+ z9 n, q; r! ]' T
  5. CGameInterface::OpenMainMenu+17,
    ( ?6 ^6 T0 `2 y1 C
  6. CGameInterface::AddMenu+67, $ f# T5 a8 a$ [0 q% }1 u% g
  7. CGameInterface::OnMenuPressed+0AB, M)
    " S3 c# T) p* U
  8. TheAbbey.CFadingText::Set
复制代码
. i$ g7 X+ D4 }' f# y0 O
5 S. x; N( n/ A# Z8 J

; ]8 b  p" E, v  n: m3 o( X! S8 b' ]7 S5 j) A5 H) Z  G

1 k# F6 j6 R# @" j/ `) v% v




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2