- UID
- 21410038
- 主题
- 11
- 阅读权限
- 20
- 帖子
- 22
- 精华
- 0
- 积分
- 12
- 金钱
- 142
- 荣誉
- 0
- 人气
- 8
- 在线时间
- 68 小时
- 评议
- 0
- 帖子
- 22
- 精华
- 0
- 积分
- 12
- 金钱
- 142
- 荣誉
- 0
- 人气
- 8
- 评议
- 0
|
先说说,过程,于是我找了许多网上的帖子,看看有没有办法,其中一个说,什么gp光速船,说吧容量改大,然后超过上限,就变成光速船,这tmd是bug,根本不是游戏,我自学一点点汇编就知道,因为载重量会影响船速,所以当你栽种变大后,会溢出数据,误打误撞影响到ecx的变量也就是汇编里面寄存船速的变量,这个就是修改的核心(后话),我想这bug不能算功能,要做一个没有bug的修改,真的很难,于是自学一点点汇编,先说说思路,真的很坎坷,还望您倾听。
1:根据以往的经验,影响船速的有风向,载重,耐久度,船长等级,船只类型等等因素,如何下手呢,用debug调试,先在船长位置和耐久度位置做好断点,然后进海战,发现有6处地方不停地在访问测试船长和耐久度,我就在想,只有船速会这么高频率地测试访问这两个地址,于是在6个地址中,选出两个最近的,运气真的很好,点开一看,一个在访问好耐久以后立刻去访问下一个船长,说明这个地址离胜利不远了。
2:修改船速方法,一开始我想,用耐久度来制衡,也就是霍尔克和克雷尔的耐久度不变,然后其他船,在读取他耐久的时候,反馈的值我diy设成10%的耐久,(不会影响游戏,是我自己强行插入的耐久,并不会作为数据导出到海战结束),后来发现,敌人的史耐克和克格是慢了下来,但是我的霍尔克速度也没有快多少,(这里大航海家3降低耐久是会减速,但是提高耐久不会加速,比如你提高个120%,速度还是100%的时候的速度),这时候,我就要在速度ecx变量上做文章,找这个真的,找了好久,好久,终于找到了,然后逻辑如下,
if 船型是霍尔克,那么把ecx扩大2倍,
else 船型是克雷尔,那么游戏原来设置。
else 其他船种,把他耐久读取强制反馈为10%(就好比你给了他几炮,他慢下来,但是上文说过,这不会影响他实际的耐久,所以看起来还是崭新的克格,只不过速度慢了,耐久还是100%,还可以挨n炮直到沉没)。
以下是脚本的代码:
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048)
label(returnhere)
label(huoerke)
label(exit)
label(keleier)
label(qita)
newmem: //this is allocated memory, you have read,write,execute access
//place your code here
cmp dl 03
je huoerke
cmp dl 01
je keleier
jmp qita
huoerke:
mov edx,[esi+18]
imul ecx,eax
mov eax,ecx
shl ecx,1
add ecx,eax
shr ecx,1
jmp exit
keleier:
mov edx,[esi+18]
imul ecx,eax
jmp exit
qita:
//mov edx,0a
mov edx,[esi+18]
imul ecx,eax
jmp exit
exit:
jmp returnhere
"P3.exe"+1771AF:
jmp newmem
nop
returnhere:
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"P3.exe"+1771AF:
mov edx,[esi+18]
imul ecx,eax
//Alt: db 8B 56 18 0F AF C8
以下是汇编的代码: |
|