本帖最后由 shane007 于 2023-8-23 13:25 编辑
+ n9 H7 c2 Q# J, O) m. {) G9 ~/ u# d/ G- G
SDL是4大图形API之一,其他几个是directx,directdraw,opengl0 x- \3 k/ e. _5 \) H
6 Y* }2 r! k F4 w( s
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
& z4 r- t3 M2 R/ ]/ \1 s打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。8 x/ D+ J. V# x# Q+ [ Q4 Q
游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
0 n9 H L: Y/ \' s1 ]但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。2 i& P$ D4 B+ M6 z1 r8 S" n
4 t9 ]+ Y' H3 l/ y$ h* C, ?最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。
# o2 }( E) F, `( Z2 j& x结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。" @- t8 x$ V) u$ H; {7 v
(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
+ N# K( A& E: V% a: S为了方便观看,用excel做成层级调用关系图。% Q$ Y0 o3 d V) u
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。1 s+ @& b( L( Q+ \. B
(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)+ l& H, k4 s: g) I# g& W! A0 L% T! N- i
7 h( C# D: G4 g0 a! h
- 对话字幕断点处" E1 G5 E0 e; A5 R" U5 F3 S, j: j
- 0 ]$ @) [/ P6 F/ r6 I7 A1 w+ A ^$ d
- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |
" I8 M5 Z: q6 E% }% d! M+ @. ?
0 Z; _1 W, U* j4 {- 对话字幕显示函数
- Q' Z7 i" e6 F: ]( @
! h y: E2 ]4 q" \" n9 _; e- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 + u) Y( ^% j: H# n
; ?! b5 I: i3 B6 p+ W
7 k: J9 K" E" L) C# c; ]( }
! r9 {9 Y \( w4 y& x# w; L# P
. l }+ L1 H1 k. P1 O
|