下面就谈谈为什么兵力会暴增……有了上面的基础,那就简单多了!
还是先谈谈设计者留给我们的基础吧。如过兵力只用2字节来表示的话,那么最大兵力只有65535(2的16次方减1),而游戏正常进行是不可能达到这么多的,就算255级也达不到这个数,更何况,如果不通过修改,基本上是无法突破“级(、)限”的,用经验升级是升不到255级的就很好的说明了这点。说这些话,并不是向大家介绍什么,而是想说明一个问题,就是设计者完全没必要把兵力数设置成3字节,两字节就远远足够了,况且三字节的最大数字是16777215(2的24次方减1),从何要这么大的一个数字,因此从而更好的说明了一点,这完全是为了配合“六四物法”。
知道了这个基础条件(兵力存放信息是用三字节表示的),我们就来谈事实原因吧!兵力数量通常是不超过两字节的,在游戏中是“xx xx 00”的形式(在游戏内存中数是反过来表示的,实际数应是“00 xx xx”的形式),那在使用过64物法后,到底程序做了什么,这里发生了怎样的变化呢。问得好,那我就快捷的作出回答吧!6610-6630行这里的所有数值都向前移了两个单位(注:663e和663f的值由6640和6641的值补充),为什么是两个单位了,原因可能就是上面所说的而引起的吧(64物法的杰作,无关紧要不用理睬为什么……程序就是这样运行的。)。同样,由于6600行这里不准写入,6610和6611的值就不能写入660e和660f了,因此被顶掉了。而6640-6670行,则是这样执行命令的--这里值整体向前移动一个地址(6640的值被顶掉不写入663f,因为这里已经有值来补充过了,就是前面所提到的……同样,这里的最后一个地址667f的值是由6680的值来补充,而6680行和后面的都是正常运行,不移动的。要是什么地方都不疼不痒的动一下,那恐怕你刚拿完第64个物品,就听见叮当一声--死机了!)。知道了这么多,现在答案应该一目了然了吧!就是因为地址位移而使“xx xx 00”的“00”位置上有了值,所以兵力就突然猛增到百千万,当然也会一下变成零(全是位移惹的祸!)。
由此,我们可以总结出兵力在一段时间内的变化规律。
(这里说的是分子上的兵力数量,范围是6620d-66401,每个人的兵力数量是不间隔的,且这部分是在6610-6630行之间,根据上面介绍,因此这部分是整体前移两个位置。)在经过第一次64物法后,假设原先第一个人兵力位置上的代码是a、b、c,它后面一个人的代码是d、e、f,第三个人的代码是g、h、i,其后面的人的代码依次顺用字母表示……那么变化后,第一个人的兵力代码就是c、d、e,第二个人就是f、g、h,第三个人就是i、j、k,第四个……由此可见,每个人变化后的兵力数就是其原先兵力数代码的第三个位置上的数与它后面人的兵力数代码第一、二个位置上的数所组合成的一个数(这是内存中的数,要求值的话,不要忘了把位置反过来再算!)(注意:由于最后一个人其代码后的地址值一开始都是00,所以它是由它本身的第三个位置上的数与两个“00”组合成的,但如果用了许多次64物法后,则两个“00”会是由后面顶上来的有值或无值的数构成的。)。同样,再用第二次64物法时,是再第一次的基础上,照旧实行这个原则的,再用第三次……是第二次的基础上……(特别注意:这里的人物顺序,不是大家经过自己排列后的队列顺序,而是依次加入的顺序,程序会保留这方面的信息。)
我想举这几个例子来表明我的看法。
① 寄存所物品位置地址与其对应的数量地址,是连起来的,且是可以由后者写入前者的,并没有用符号隔开,不准写入。
② 数据并不是可以无限向前推移的,而是到了一定的行就不准写入,使数据硬挤出内存,这样使游戏不至于崩溃。
③ 兵力数在正常情况下是完全够表示的,不至于用3字节表示。
④ 战斗中的信息完全就没必要保留,也不必特意与我方人物代码位置相连--这样做就是为了方面我们调人。
……
⑩还有一些例子,前面的文章中就有,那里已经很好的表明了我的态度了。我不想再多写了,因为我真的很累,脑袋疼死了。