以下这个本论坛的下载贴中,由于有个字符串在中文系统中不能正常显示,导致游戏不能正常 运行。$ c& J; r3 o( a2 h; I# H9 H
修道院:导演剪辑版(The Abbey: Director's cut)% e! {8 u2 ~' _
https://www.chinaavg.com/forum.php?mod=viewthread&tid=147967
9 V; C8 P' Z3 G* g W# M( M
* i ?/ D1 O) e7 o具体信息可以参考Messages.log。修改正确后的字符串为Tomas。' \6 Z3 u/ Z! S+ {
修改处
# Y, |' |+ `& r" }7 U《1》以下文件的内容
w/ G0 h0 N8 t, E: V3 N\The Abbey Directors Cut\English\Data\Game\Game.xmb
$ B4 y) s# }# S《2》所有游戏的文件和目录名,只要含有那个字符串的都要修改为Tomas
7 `/ m- |" ]5 M4 C+ H 比如\English\Data\Models\Tomas0 p$ I5 P5 p1 I* u4 y
( F, J2 i- t# I w% S" f用ida pro 进行简单分析后,确定游戏是directx9的游戏,
# I% `: }5 u% Y4 c" }0 e& b- .text:004F8D3B push 20h ; SDKVersion
( m# T1 N; t# p - .text:004F8D3D mov esi, ecx2 _$ M; Q5 t$ x( l: \! g
- .text:004F8D3F call Direct3DCreate9
复制代码 5 c! D3 H5 V+ g4 v! X* R
/ B- x" I) ?/ U
& m6 G$ ^( N- |' ~
播放动画的时候,好像用了direct draw
6 o; e9 k8 |0 Y( y0 C6 \- .text:004F4200 ; int __thiscall CVideo::Create(CVideo *__hidden this)
8 W" J! I# g* i/ O5 | - .text:004F4200 public ?Create@CVideo@@QAEHXZ' U4 p7 V( @! I7 h% N
- .text:004F4200 ?Create@CVideo@@QAEHXZ proc near ; CODE XREF: CSystem::Create(HINSTANCE__ *,int,char *,char *,CWorld *,char const *)+380↑p: `' Q" i0 B& p8 p8 p
- .text:004F4200 ; DATA XREF: .rdata:off_5C6668↓o0 c1 q1 c! K+ c5 m ^: i" F- o
- .text:004F4200 push esi
; l2 R" \; Q) O* S6 z/ W: m - .text:004F4201 push edi, U5 @5 }; n( v* P4 L1 u% K e8 j9 _6 Z
- .text:004F4202 mov esi, ecx
3 l; i/ a# p3 ^' R( O' L+ y - .text:004F4204 push 0 ; pUnkOuter l1 _* Z6 I% O
- .text:004F4206 lea edi, [esi+54h]- m$ Q# |- S$ |, K# |+ J) m
- .text:004F4209 push edi ; lplpDD/ X' Y+ L$ O4 v+ {3 G3 d9 h
- .text:004F420A push 0 ; lpGUID& Y$ [# v A) Y+ z% T/ ]( w0 G
- .text:004F420C mov byte ptr [esi+79h], 0
7 B' ?1 w- C/ O c: q B( I0 H! ` - .text:004F4210 call DirectDrawCreate
复制代码
( O) R; d Q* d* R0 S& r: g' l9 X4 v' o# i4 k! V" ]1 J" v, R8 p
& U& N" h/ F/ J" g, G, `, d! X
本游戏可以窗口化,比较容易调试。
1 h. o# x P# A找一句画面有的字符串the son of ,找到显示函数。
8 m" h/ w2 X0 ]1 o. c' k以后我们用自己的函数替换它即可。" @6 ^8 `- Q) C4 H) C# _' }
* e4 ]- C r% z对话字幕断点处) a# \, O! C+ |
004B5AF3 |> /8A08 /mov cl, byte ptr [eax]
9 ?! G4 S9 x0 s9 Y4 B( }
; G; ~) T" W- o7 K4 \9 G" L% ~. V ^" V' v) J& x; \
char __thiscall CFadingText::Set
4 C" k/ O7 g6 X5 u(CFadingText *this, char *a2, int a3, int a4, bool a5, bool a6)( v7 q5 f2 A- l- M' A
7 n' z9 M9 q' {6 R) t1 V+ l查了以下调用它的地方,有10多个,看来这个游戏所有地方的字幕应该都是调用这个显示函数了,6 o9 F- \1 I _% h0 G- J/ q
, p! l4 {' K* m) h- }以下是一部分- ~* B, n Y3 T* w2 h
- CGLCLayer::Render+97, % m! n# E) o# X' z
- CGameInterface::ShowSentence+2C,
& t+ y# _: l2 z3 Z0 z( [/ m2 C @' X - CGameInterface::CloseDiary+1A,
! S# \0 ~7 @, B2 P: f - CGameInterface::SetDiaryText+6A, 7 y! d) x7 g4 n% F
- CGameInterface::OpenMainMenu+17, ! k8 C$ V% V) ^/ W; c3 D0 E
- CGameInterface::AddMenu+67, % V6 {2 }: ^$ O3 n! t: j
- CGameInterface::OnMenuPressed+0AB, M)/ A* p( x* v( p( a6 ^/ d
- TheAbbey.CFadingText::Set
复制代码
( i ~" M$ C4 {$ Z2 |3 s* m$ R0 f9 x% X! C
# A) ]: b; A8 L2 h; s% t, V& Y! k/ h" }* {
% ]: W) j! k. _' Z7 z' v. i- @
|