本帖最后由 shane007 于 2023-8-23 13:25 编辑 9 x2 `3 m2 R# y
1 y) A' J2 X0 K. a% k
SDL是4大图形API之一,其他几个是directx,directdraw,opengl: ]0 ^4 q; p, ], Y) ^
, g- |/ f7 i0 U0 L. l1 c0 Q$ U
断剑1导演剪辑版Broken Sword Director‘s,这游戏存在解包脚本。
t1 O( C2 I4 l) c; i, Q$ a2 r打包工具以前让深绿做过一个,但是还有问题,等稍后再做,这个问题不大。
7 X4 Q: r0 J5 |1 A# o3 A游戏界面是图片,图片的替换估计需要用打包工具来配合完成。
! U$ O" g$ {' u7 R* t5 V8 g- _5 p- T但是也有另外一个思路,就是修改exe,修改exe内部图片的路径,此方法是否可行,再行验证。) A3 _! Y6 \" I k/ o3 X+ w
! h2 j2 F- k6 L4 x
最关键的对话函数之一,在内存中找一句经常出现的对话,下内存访问断点后断下。6 ~ u2 y2 ^6 n
结合ida pro的F5生成C代码功能,找到以下对话显示函数,以及工具栏的显示函数。
+ @$ V: d5 G& j4 [; o. [(这游戏本身支持窗口化,因此用OllyICE.exe调试比较方便)
D+ r1 ]5 m; u: E7 m1 A4 Q( q为了方便观看,用excel做成层级调用关系图。* {% |7 s6 R9 T: m# b# f
下一步,就是写个程序,用内存补丁的方式,用自己的显示函数替换掉游戏的显示函数即可。
1 V+ g( x, C2 u(需要熟悉一下SDL画字符的过程,研究下如何在中获取类似CreateDevice的对象)
5 [2 i" U$ Z; f. @) G. H" S
+ [' Q0 K3 X7 v1 J/ L, r- 对话字幕断点处
+ [; \" h- z0 J* D+ Y4 C
* j7 e7 B* n O4 Y! Y ]/ U5 F- 00443854 . 8954C3 20 mov dword ptr [ebx+eax*8+20], edx ; |& b) C* C; u. C( P7 ~2 L
( o: q- l6 q: R7 z+ r- 对话字幕显示函数
5 @$ M5 V, ]: k9 x9 ^( {! b
/ U6 C3 j6 D" O( N# h0 ?- "char __cdecl sub_443744(int a1, int a2, int a3, char *a4, char a5, int a6, int a7)"
复制代码 4 }3 d6 z/ R% v$ ~
3 Y2 i+ K8 B \$ k" G! ]
# o4 C" u4 F) ^0 R& C
- y$ c; x, p% h/ A( q
0 D; u @$ o, O. A) ]/ {8 E |