以下这个本论坛的下载贴中,由于有个字符串在中文系统中不能正常显示,导致游戏不能正常 运行。2 H6 i+ F K o# h/ r' ? f8 b- ~
修道院:导演剪辑版(The Abbey: Director's cut)2 a3 \: B0 w; \
https://www.chinaavg.com/forum.php?mod=viewthread&tid=1479679 O2 l J) N a& J
/ [1 T% o5 I0 e# K具体信息可以参考Messages.log。修改正确后的字符串为Tomas。) p7 [ S- \1 e8 d: N& N- c+ \
修改处
1 ]2 |. o8 |6 {# T《1》以下文件的内容" q0 F) v, B P
\The Abbey Directors Cut\English\Data\Game\Game.xmb
1 W7 d; `4 D* O6 q" u《2》所有游戏的文件和目录名,只要含有那个字符串的都要修改为Tomas _& `' S2 Z" @, z: f4 Z
比如\English\Data\Models\Tomas
5 C( a, T% E; Q- G% g0 e% R* x4 {9 ?/ h2 K. \% i. s& |
用ida pro 进行简单分析后,确定游戏是directx9的游戏,- M+ r g! f) T9 C, h5 s7 H
- .text:004F8D3B push 20h ; SDKVersion8 A% z t2 y/ u& `0 O c/ d
- .text:004F8D3D mov esi, ecx
+ e. q" s! k8 M0 f - .text:004F8D3F call Direct3DCreate9
复制代码 ; K$ _$ X* U4 C: r2 S
7 v( Q$ R5 F& U0 X# b& o
0 z3 W2 a* ], r9 C( X% t% ~" u播放动画的时候,好像用了direct draw1 C2 K! C* l6 n& K
- .text:004F4200 ; int __thiscall CVideo::Create(CVideo *__hidden this)
: V+ Y3 O7 b+ D: o - .text:004F4200 public ?Create@CVideo@@QAEHXZ
7 Z2 A7 G% C6 x. I; p. d - .text:004F4200 ?Create@CVideo@@QAEHXZ proc near ; CODE XREF: CSystem::Create(HINSTANCE__ *,int,char *,char *,CWorld *,char const *)+380↑p% s" D* C3 m1 _) [" k! r" J
- .text:004F4200 ; DATA XREF: .rdata:off_5C6668↓o
9 R& H8 h3 l5 c - .text:004F4200 push esi: r, w \1 s2 I
- .text:004F4201 push edi' @0 q2 }; C! L" ^" Z3 v
- .text:004F4202 mov esi, ecx
# Y' v L( W6 ^ m- w# A" ? - .text:004F4204 push 0 ; pUnkOuter* i) l6 b3 z0 P# P; C" ?- ?3 H3 @
- .text:004F4206 lea edi, [esi+54h]% h6 k# X& X. G' q5 ~8 u
- .text:004F4209 push edi ; lplpDD
" o6 a8 j1 y% H5 o+ M9 @ - .text:004F420A push 0 ; lpGUID
* F, j5 ?, \6 Q3 W - .text:004F420C mov byte ptr [esi+79h], 0, x1 ]6 g7 T8 T* w+ c
- .text:004F4210 call DirectDrawCreate
复制代码 ! {5 l2 C$ T0 [$ A) Q
$ x3 l; E# o- A
3 j+ l8 e- k) Y7 x$ j; x1 C3 ]本游戏可以窗口化,比较容易调试。7 Z: F- [* m: ] `
找一句画面有的字符串the son of ,找到显示函数。
. r9 _4 O* `" y; E3 Y以后我们用自己的函数替换它即可。
' q* {3 _' T/ x2 A% ~# J
& N* r1 Y2 @2 R- Y9 l c9 G) B2 O- Y对话字幕断点处
4 i7 N j' G9 p/ }, l004B5AF3 |> /8A08 /mov cl, byte ptr [eax]
2 L+ b- T% n. o1 \5 a8 ]4 k
1 Y5 |- m! a7 M. v! `& S. x; s/ Y# m
char __thiscall CFadingText::Set
) o1 t- P* Z7 [0 o( r(CFadingText *this, char *a2, int a3, int a4, bool a5, bool a6)
$ M6 C/ i( O+ E7 z, w8 f. {0 L5 i
查了以下调用它的地方,有10多个,看来这个游戏所有地方的字幕应该都是调用这个显示函数了,0 D* [$ U7 v9 U1 W1 O4 y
4 A F5 P- `' k) e; i" W- Y2 ^以下是一部分+ x4 b- h1 C6 ]
- CGLCLayer::Render+97, # g- e/ ^9 f9 ?) S5 s* i5 q H, j
- CGameInterface::ShowSentence+2C, * Q6 e7 B# g9 P0 H+ r
- CGameInterface::CloseDiary+1A, ' w, G9 b- h$ P
- CGameInterface::SetDiaryText+6A, # T4 S1 \. z# d' X/ x& o
- CGameInterface::OpenMainMenu+17,
4 B& E ~: Y4 l# }5 ^* V - CGameInterface::AddMenu+67, . x. z+ D( G- a" N2 f1 {3 i
- CGameInterface::OnMenuPressed+0AB, M)
4 j. h7 m2 \0 l- n - TheAbbey.CFadingText::Set
复制代码
3 o! F1 U$ ?! J. Z$ J* P* m* T7 ~* h
/ T6 f8 L J5 D$ n
- }( m# K+ y* O p. K" h* T" l7 @+ ?
|