冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2023-8-23 14:57
标题: 【Directx9游戏汉化 #1】 修道院:导演剪辑版(The Abbey: Director's cut) 字幕...
以下这个本论坛的下载贴中,由于有个字符串在中文系统中不能正常显示,导致游戏不能正常 运行。0 e# l5 |$ N+ I# p% E# h' [' g$ n
修道院:导演剪辑版(The Abbey: Director's cut), b( s$ L) g6 y+ @; u
https://www.chinaavg.com/forum.php?mod=viewthread&tid=147967
9 V6 D, F" o# O
4 f/ }/ Y, C1 {- {1 h5 v具体信息可以参考Messages.log。修改正确后的字符串为Tomas。& Z! i# u' X/ ?8 h4 P( i& w% c
修改处
1 c  Y" c; Q$ y: d, ~( T  y) G: r《1》以下文件的内容( f) b! ~, d- J' z
\The Abbey Directors Cut\English\Data\Game\Game.xmb! s5 f& Q, \) J; |$ F0 D; Q
《2》所有游戏的文件和目录名,只要含有那个字符串的都要修改为Tomas
8 X. K- ?9 I5 H1 ]0 O$ T  b% F    比如\English\Data\Models\Tomas$ p. @# W$ t" l  G& A' _# [9 ~
; F- r, c6 r& Z) o" @9 }
用ida pro 进行简单分析后,确定游戏是directx9的游戏,
  U% a. |4 O6 a4 M- T: V. B0 i/ \$ F
  1. .text:004F8D3B                 push    20h             ; SDKVersion
    . _, B. R; i( j1 a, ^4 O
  2. .text:004F8D3D                 mov     esi, ecx
    8 Z0 x+ M. w, y3 j  W
  3. .text:004F8D3F                 call    Direct3DCreate9
复制代码
# u4 R, \+ M+ i# s8 Z. }
; X1 r( }/ a% ~
- @: p' }6 v8 N3 I: l0 [
播放动画的时候,好像用了direct draw
! \; n6 n- @6 N9 r
  1. .text:004F4200 ; int __thiscall CVideo::Create(CVideo *__hidden this)% w& ~4 }' U* |+ a. s2 t
  2. .text:004F4200                 public ?Create@CVideo@@QAEHXZ0 t& @  r4 z4 c) B, u% F
  3. .text:004F4200 ?Create@CVideo@@QAEHXZ proc near        ; CODE XREF: CSystem::Create(HINSTANCE__ *,int,char *,char *,CWorld *,char const *)+380↑p
    5 F$ O: B8 J0 P+ s0 Q* D
  4. .text:004F4200                                         ; DATA XREF: .rdata:off_5C6668↓o
    ! Z# d8 X3 ~9 N/ c+ G/ E: `
  5. .text:004F4200                 push    esi
    ' A0 k0 P2 W: s, O) F) H* `. b
  6. .text:004F4201                 push    edi
    $ \/ R; x4 G9 d0 ?. ]
  7. .text:004F4202                 mov     esi, ecx- H, K# O: P1 b0 }% F$ Z. D$ I
  8. .text:004F4204                 push    0               ; pUnkOuter
    9 A2 x5 l/ p) S# k2 d' {7 Z
  9. .text:004F4206                 lea     edi, [esi+54h]
    % _! i" q& |- R4 X: A' ~6 W
  10. .text:004F4209                 push    edi             ; lplpDD2 _2 _/ k( P3 z! k. p& e# G$ L
  11. .text:004F420A                 push    0               ; lpGUID
    : G3 [3 B, P  r
  12. .text:004F420C                 mov     byte ptr [esi+79h], 0
    ! x& `) F6 P* w& \, q, I1 c8 c6 J
  13. .text:004F4210                 call    DirectDrawCreate
复制代码

, E1 n4 J' Q! o. x9 B' M
$ Z; a) B8 x( L# X# L. n3 Q
! q! f/ r$ x" ^% h6 x+ r& i, Z4 C本游戏可以窗口化,比较容易调试。
- T2 \; N3 M" z" P% A找一句画面有的字符串the son of ,找到显示函数。% D& r# q5 c4 o
以后我们用自己的函数替换它即可。' R) l' v3 o( }. w( n
# j% X8 W8 r5 ~4 Q; D
对话字幕断点处
" I/ ]% f# k' Q( R, H2 C004B5AF3  |> /8A08          /mov     cl, byte ptr [eax]
$ L/ Y: v4 ^7 S- U! Z
3 l$ P; ^3 K/ g' ]; ]  N; c$ c# G/ f* m: u
char __thiscall CFadingText::Set7 y+ h. g) K: s5 V
(CFadingText *this, char *a2, int a3, int a4, bool a5, bool a6)) `, H( L3 z. i
$ n) D0 K9 D% T
查了以下调用它的地方,有10多个,看来这个游戏所有地方的字幕应该都是调用这个显示函数了,
" X( b. ?8 ?% P) ~4 C
2 f% X. N( P: w1 O: |以下是一部分
3 M2 j/ G: X7 j" X+ k! ]' o
  1. CGLCLayer::Render+97,
    3 O& O' V% D! s4 f( b9 n7 y
  2. CGameInterface::ShowSentence+2C,
    3 S- [0 O/ i4 S4 ^; ~" |3 K! Z# `
  3. CGameInterface::CloseDiary+1A,
    1 z" e$ @6 n4 g1 P1 z4 H
  4. CGameInterface::SetDiaryText+6A, # |% j+ v' r, z# U- o& S& L
  5. CGameInterface::OpenMainMenu+17,
    & I* b0 p% b; `/ D
  6. CGameInterface::AddMenu+67,
    # U/ |9 U) w2 @# Y
  7. CGameInterface::OnMenuPressed+0AB, M)
    2 p# n. O4 A" E" W% i
  8. TheAbbey.CFadingText::Set
复制代码

$ `% }3 S% q: O3 s# R5 p+ l+ Z& n/ N! F' c: }  |" n
% d' T; _- B6 ]  }" r+ o, b. @: F

% _( m' r3 N: ]
/ R2 y' v/ R1 H. y% l
作者: 星之韶华    时间: 2025-4-14 09:33
学习学习一下




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