2010-5-7 10:06
godtype
章节的扩展
目前的引擎在章节方面都总共只有五章,分别是
0——序章
1——第一章
2——第二章
3——第三章
4——终章
随着关卡数的增加,曾经有人问过我怎样扩展章节,当时没有深入研究,现在终于研究出来,其实很简单,即使是没有扩容、没有精简过代码、也没有利用教学的引擎都可以做得到。下面以我的4.0系列引擎为例写出代码(实际应用的引擎只能等到5.0发布):
首先选择一段8*N个字节的空白位置,N为章节总数,我暂时准备了10个章节,位置是从8AA00开始,看图
[attach]93884[/attach]
(截图是用OB截的,所以显示的是内存地址。)
然后改写代码:
0040B946 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
0040B949 |. 25 FF000000 AND EAX,0FF
0040B94E |. C1E0 03 SHL EAX,3
0040B951 |. 05 00C04800 ADD EAX,0048C000
0040B956 |. 8945 DC MOV DWORD PTR SS:[EBP-24],EAX
0040B959 |. 90 NOP
0040B95A |. 90 NOP
0040B971 |. 83F8 09 CMP EAX,9
0040B9E1 |. 8B55 DC MOV EDX,DWORD PTR SS:[EBP-24]
0040B9E4 |. 90 NOP
0040BA1A |. 8B4D DC MOV ECX,DWORD PTR SS:[EBP-24]
0040BA1D |. 90 NOP
0040BA64 |. 8B45 DC MOV EAX,DWORD PTR SS:[EBP-24]
0040BA67 |. 90 NOP
改成上面这样就可以了,其中[EBP+8]的值的章节值,即剧本指令67:章名的值;48C000就不用说了,看截图可知;CMP EAX,9的9是章节最大值(从0开始算)。
就这样改就OK了。
最后,关于位置的选择,我选8AA00是因为从我的4.0开始,这里虽然有兵种名称,但是已经没有用,所以可以再利用。而一般的引擎,推荐8AEDC开始的大兵种名称,因为这些是没有用的,改了也不会对游戏有影响。而对于STAR175的引擎,建议自己找连续的一大堆00的位置,当然了,找到的空白位置不一定可以用,最好先咨询一下STAR。