冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2023-8-23 14:57
标题: 【Directx9游戏汉化 #1】 修道院:导演剪辑版(The Abbey: Director's cut) 字幕...
以下这个本论坛的下载贴中,由于有个字符串在中文系统中不能正常显示,导致游戏不能正常 运行。
$ B- z: }: o3 G' f2 `% P, y# M修道院:导演剪辑版(The Abbey: Director's cut)4 d6 ?. h& s& m! W  {
https://www.chinaavg.com/forum.php?mod=viewthread&tid=147967
  o+ {+ C$ t! J, H
( k3 Y# t5 |# N, H$ D( h: {具体信息可以参考Messages.log。修改正确后的字符串为Tomas。( y! @8 w$ H+ x$ F
修改处7 }6 }; v- H6 X5 o4 X9 G, L4 x6 f9 Z. C$ g
《1》以下文件的内容
+ o8 C; c8 R+ A% K% w& q$ t' L5 b6 O' m\The Abbey Directors Cut\English\Data\Game\Game.xmb1 m% e% r2 u& f2 b! L' T
《2》所有游戏的文件和目录名,只要含有那个字符串的都要修改为Tomas
1 H9 z& B$ |9 f; w    比如\English\Data\Models\Tomas5 H/ g+ C& G8 v8 ]! w

  X& r5 y6 C$ m1 k用ida pro 进行简单分析后,确定游戏是directx9的游戏,
, a2 Z% g' Z8 Z& @/ n# B
  1. .text:004F8D3B                 push    20h             ; SDKVersion" R' i& e% u  J9 Z* {8 I
  2. .text:004F8D3D                 mov     esi, ecx- K- j# i. B  {0 G1 X, ^1 a
  3. .text:004F8D3F                 call    Direct3DCreate9
复制代码
1 W# _; f7 ^9 V, M; e5 B2 D: V- Q! q

3 a% s  e6 {  V, A6 J
- I, g( j& x( `3 r7 `播放动画的时候,好像用了direct draw
* ?  b- u5 n* X; i4 b! X
  1. .text:004F4200 ; int __thiscall CVideo::Create(CVideo *__hidden this)/ S5 Q! w$ y! j% J+ O6 M
  2. .text:004F4200                 public ?Create@CVideo@@QAEHXZ
    4 z! v% Q5 s" L) t1 m, x. @6 A) z! y
  3. .text:004F4200 ?Create@CVideo@@QAEHXZ proc near        ; CODE XREF: CSystem::Create(HINSTANCE__ *,int,char *,char *,CWorld *,char const *)+380↑p, e' ~9 x0 M  Z& B4 v
  4. .text:004F4200                                         ; DATA XREF: .rdata:off_5C6668↓o9 d- Q# |1 r2 Q  t  S& b( o0 J7 Y
  5. .text:004F4200                 push    esi
    1 I% y1 O3 [4 Z! J
  6. .text:004F4201                 push    edi$ y$ D6 V# k5 b, I2 `: G8 G4 G2 M
  7. .text:004F4202                 mov     esi, ecx; }1 k1 p* X# S- `2 j
  8. .text:004F4204                 push    0               ; pUnkOuter
    # i5 h2 E0 Y5 c: [/ P6 |4 A
  9. .text:004F4206                 lea     edi, [esi+54h]; l+ e6 s6 E5 r# k5 L
  10. .text:004F4209                 push    edi             ; lplpDD# f- K9 ?( w7 q4 l# h' c
  11. .text:004F420A                 push    0               ; lpGUID, E1 ]$ b) S4 l( b, C
  12. .text:004F420C                 mov     byte ptr [esi+79h], 0  U) \5 |! K7 C# F/ v: M' a
  13. .text:004F4210                 call    DirectDrawCreate
复制代码

/ V; o( {6 g2 u1 B6 j% L
( n. I$ ^, X% K/ W# |- M  `; {+ ^! i& g  b
本游戏可以窗口化,比较容易调试。' y; q+ V! E7 i  {2 x
找一句画面有的字符串the son of ,找到显示函数。
/ L, l& r# Q0 Q以后我们用自己的函数替换它即可。
% r4 `; w% q7 H% i
/ w( q/ f& ]8 S) [7 `/ H$ m% q对话字幕断点处* J) G3 c% }# p6 h
004B5AF3  |> /8A08          /mov     cl, byte ptr [eax]; B% Z" b0 R# ]! @
# [0 f1 a$ l. {1 `
6 |/ l8 ]0 V5 o( x  x( {: I
char __thiscall CFadingText::Set
7 v  @+ j- o3 f6 L) v" Q8 L& }(CFadingText *this, char *a2, int a3, int a4, bool a5, bool a6). K' @# l7 G- _, g* s$ ?+ U; ?9 z
  r: ?$ L# a( I, |0 a" |& p; @
查了以下调用它的地方,有10多个,看来这个游戏所有地方的字幕应该都是调用这个显示函数了,
2 j6 L6 `/ H! b" u3 p9 A, I7 r- _* b$ B
以下是一部分7 @9 h* u8 g" F0 {4 y" Y
  1. CGLCLayer::Render+97,
    5 k1 b. I. p+ C5 m3 `
  2. CGameInterface::ShowSentence+2C,
    - V4 t1 f5 x5 ]# d
  3. CGameInterface::CloseDiary+1A, % J4 t: z6 b8 n* ?4 Y( r' j
  4. CGameInterface::SetDiaryText+6A, + R' r9 T( d' x/ N+ l
  5. CGameInterface::OpenMainMenu+17, " t7 [% t+ W# Y! a
  6. CGameInterface::AddMenu+67,
    - u* Z, q+ j( D1 l& U" S  t* u
  7. CGameInterface::OnMenuPressed+0AB, M)- ~2 m# H7 L$ D6 G! a% g6 Y3 X. s! ?
  8. TheAbbey.CFadingText::Set
复制代码

! p8 X4 F  o! p. I7 [
7 v6 g0 M. G! f) s, a$ N' ^8 }% P/ S
; U' [/ {4 g0 x/ p- M+ T  f8 A

) Q# E  c7 w- M+ d8 J/ V, ]




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