[ElonaEXE*研究系列*之(一)]找出属性和技能的成长公式
本帖最后由 gsky1986 于 2011-4-12 02:15 编辑本文长,很长,非常长,如果你想在游戏之外找点乐子,比如接触技术,不妨看看。
感谢whiteling 童鞋 提出质疑,公式得到再次修正:)。
目前此公式并不十分完善,已知的适用范围还是仅限于打怪带来的成长,吃肉、喝药的还待于继续研究:)。
Elona很好玩,不是么,连我这个上了岁数的老人都对其痴迷不已,想修改?想Mod?,源代码没公布怎么办?
嗯....在这残酷的时刻,我们只能慢慢研究它的EXE,看看能不能发现些什么。
本文旨在抛砖引玉,希望坛子里的达人们能火爆研究,打造自己的MOD。{:3_162:}
有错的地方也请指出哈!
开场!
>>Elona技能和属性等等的数据格式
先看看角色属性图:
红色标记的力量(Str),再看看内存中的数据:
嗯,红色部分,就代表力量的有关数据,我们划分一下:
->:
其中Head很好理解,就是我们属性栏显示的部分,那Middle和Last又分别代表什么呢?
看看技能的图:
和相关的内存数据:
对比下即可发现Last = 414 代表潜能,多对比一下其他技能即可确认。
那么剩下Middle是干什么的呢?
纠结啊,Middle其实是个很神奇的数据,有多神奇?
嗯....喝口水先.{:3_153:}
Middle = 836 神奇在它是个小数!{:3_164:}
为了让我们的属性和技能有所成长,靠小数是不行的,不靠小数更是万万不行的,小数们勇往直前,总有一天会成为整数的,苏格拉底说...............
咳咳,走神了,既然它这么神奇,我们就看看它是怎么影响属性成长的吧。为了尽量通俗,系列1中代码部分不做过分强调。
>>Elona,属性、技能成长逻辑
看图说话:
嗯这个数值貌似很熟悉哈,不错,它就是我们的 解剖学技能的数据。
一段微小的运行后,看看内存:
好神奇,变成了44!44是什么呢?聪明的你,一定想到这就是 Head!(额,恶心了)
嗯,代码如下:
0040200C > \8B06 MOV EAX,DWORD PTR DS: ; 拿到 44836414
0040200E . 99 CDQ
0040200F . F7F9 IDIV ECX ; 得到44,您就当(44836414-836414)/1000000 = 44
00402011 . 8906 MOV DWORD PTR DS:,EAX ;44进入内存
原来Head = 44是这么来的,汗,不复杂么!不复杂?好,继续走着:
嗯嗯,Last = 414出来了哈!小样想干嘛?
注意!注意!注意!(我为什么连说3个呢?{:3_187:} )
绿色部分是414,红色变成了4140!我勒个去,差了10倍啊!怎么着?来点代码?
00401FE6 > \8B16 MOV EDX,DWORD PTR DS: ; 拿到414
00401FE8 . 0FAFD1 IMUL EDX,ECX ; 414*10 = 4140(为啥是乘以10?嗯....这牵扯到一个很复杂的Swich...Case....)
00401FEB . 8916 MOV DWORD PTR DS:,EDX ; 4140入内存
要是人民币能这么乘多好!嗯,人民币确实是好东西,可以买烟买酒买小妹妹....................咳咳,权且记下来:
temp1 = Last*10
嗯,接着走:
注意!注意!注意!注意!(额,为啥老衲如此师太!)
Head = 44和一个神秘力量,哦不,是数据15出现了!
此时,4140 和 44 还有这个神秘的不知神马来头的龌龊数据相会了!他们之间将会发生什么样的暧昧情节?喔,这个真是太恶心了.................
嗯,他们合体了?他们生出个金刚葫芦娃 = 660?
远目之后,还是回到660上来,你懂的,代码依然在下面:
00401FE6 > \8B16 MOV EDX,DWORD PTR DS: ; 把44交出来,想干嘛?
00401FE8 . 0FAFD1 IMUL EDX,ECX ; 不要哇,44*15 = ? =? =660!!
00401FEB . 8916 MOV DWORD PTR DS:,EDX ;
惊天动地、地动山摇、摇钱树般的合体啊,合出个660,嗯,权且记下:
temp2 = Head*15
接下来的故事想听么?想就挺住,刺激的在后面:
注意!嗯,这次我很拿得住哦,Good for me,又出现了另一个神秘数据 760!
o(︶︿︶)o 唉,复杂的1-13啊,代码:
00401FDA > \010E ADD DWORD PTR DS:,ECX ;弱弱的660被100夹了之后,弱弱的变成了760....惨不忍睹....
一句代码也复杂?嗯,其实真的很复杂.................此处略去xx字。
temp3 = Head*15+100
为啥是+100?为啥?为啥为啥?
还记得前面的图里有个100么,不记得?翻去。
其实它就是个常量而已。{:3_160:}
不要纠结,继续走着:
发现什么了?什么?发现了个5?5姑娘...{:3_140:}
嗯,这个5不是一般的5,它来自遥远的................遥远的Elona............解开你的枷锁............我瘦了
且看:
0040200C > \8B06 MOV EAX,DWORD PTR DS: ; 4140
0040200E . 99 CDQ
0040200F . F7F9 IDIV ECX ; 4140/760 取商 = 5
00402011 . 8906 MOV DWORD PTR DS:,EAX
嗯,这个 5 的来头搞清了,就是4140一杠子打到760头上,760 一巴掌煽到4140脸上的那个印子....什么?760有6个指头?我去..............
5要干什么呢?你想知道,我也想知道,那咱继续往下看:
出来了836?836?嗯,Middle = 836?什么?你不知道?我也才知道嘛。。
嗯,出来了1000000,摇奖机子中奖1000000!
嗯,神奇的地方来了,841*1000000 = 841000?
不对,那1000000是给老大准备的,841就是836+5,你还费解么?
841000就是841*1000,你还费解么?费解?我少截图一章1000的,你就费解了?嗯...............我不是解释.............我瘦了............
有趣吗?哈哈,
44*1000000+(836+5)*1000 = 44841000
嗯,老大Head和我们口耐小数836姑娘以及神秘力量5开始合体了,遗传学Max啊!!!!
注意!注意!注意!(额,又没刹住) 我们的Last = 414再次华丽出现!
抢镜中!
Bingo!
->: 44*1000000+(836+5)*1000 + 414 = 44841414
Formular:
newAttr = Head*1000000 + (Middle+Math.Floor(Last*OneOf(0,10]/(Head*15+100) ?Rand))*1000 + Last.
Last代表潜力,Head代表整数部分,Middle代表小数,Math.Floor代表向下取整(取商),OneOf(0,10]代表从0到10取一个整数。?代表为0时,随机选取0到1,随机规则比较复杂,以后再研究。
到底,一段惊天动地、地震海啸、哮天犬的故事结束,我们完成了由44836414到44841414的创举!
Hoorai(y?)! 占楼备用.{:3_152:} 沙发,楼主技术啊,可惜看不懂, 回复 3# siyan12
其实就是些图片拉,呵呵,你可以看看下面的公式就好拉:) {:3_134:}
天啊 回复 5# x115152134
挺住 {:3_161:} 技术流。。。{:3_190:} 回复 7# mozia1989
国内研究Elona的还很少,感谢支持。 虽然我很努力的看了下去,,可....完全不懂啊混蛋,,
最近在玩1.22 还加了个MOD,,也是用更换EXE启动程序实现的,,,
所以...好怀念LZ的法术消耗1/4和白金币双倍的效果,,,
想在别人的MOD上添加这个功能可实在是力不从心啊.... 回复 9# sxooxs
:) 1.22还没接触,有什么新的地方吗?我连1.16都没玩过半,哈哈。 回复sxooxs
:) 1.22还没接触,有什么新的地方吗?我连1.16都没玩过半,哈哈。 ...
gsky1986 发表于 2011-4-11 09:45 http://bbs.blacksheepgame.com/images/common/back.gif
1.22有个MOD显示几乎所有数值,,比如人物潜力可视 抗性数值化 魔法经验数值化 装备技能加成数值化 耐力数值化 食物腐烂倒计时 宠物训练具体项目烹饪结果可选等等,,
挺中意这些功能的...还有个MOD可以简单的调节宠物攻击模式比如待机啊 防守啊 主动攻击啊默认的AI很多怪不打特别是做收获任务老是被小怪打扰 但因为MOD都是直接内嵌入启动文件,,所以不能共用,,只能选最实用的MOD了,,
然后1.22还能用很多自制NPC,,我非常喜欢那些极具特点的自制NPC,,,培养自己的后宫团是我游戏的最大乐趣了...原版的妹子太少了,,而且AI都差不多..
不过1.22基本没有新内容 游戏流程跟1.16基本一样,,所以即使是日文玩起来也没什么障碍...唯一可惜的是你的微调MOD我还没爽2天就不能用了...
好了我继续与命运抗争去了...
对了我用的那个MOD还能直接训练属性潜力价格跟技能一样算法,,,我50魔力想训练一次潜力要12个白金币....因此白金币价值更高了...于是每天几个城市轮着跑就为了多赚点白金币培养自己的角色...
最坑爹的是速度潜力妖精初始速度是120算120级的技能训练1次速度潜力要26个白金币....... 太复杂了,话说找到内存,直接改就行了。 好厉害...{:3_121:}这个是修改吗? Bingo!
->: 44*1000000+(836+5)*1000 + 414 = 44841000
此处是不是漏了414?
另外Math.Floor(Last*OneOf(0,10]/(Head*15+100))
这个..中间懒了下没看= = 直接看结论了..0-10的范围真的没问题么?..向下取整的话..
假设潜力50 最高取到500 (500-100)/15=26.XX 就是说到27级就一直是0了? 回复 15# whiteling
不是那样计算。
(Last*OneOf(0,10]/Head*15+100)等于0的条件只有你的潜力为0,即Last=0时才会满足。
(0,10]左边是开括号。
嗯,的确漏了414,呵呵,疏忽。谢谢补正。 本帖最后由 gsky1986 于 2011-4-11 18:23 编辑
回复 12# 菜肉包包
内存是变化的,你可以试试看技能计算数据的内存交换区(而不是技能数据存储区域)能不能改,除非你抓住那个特定的时刻。
否则你要更多的寄存器条件来判定。。
一次直接改内存和动态增量有联系,但更多的是区别。
而且Mod这事只关乎内存么?呵呵。只有数据而没有逻辑的那不叫Mod。
elona不仅仅是你技能成长时会访问技能存储区域,可以说它时时刻刻在循环扫描那个区域。
这也说明了elona的图像引擎很渣。{:3_162:} 个人浅见。 回复 13# sunmoon55555
这个在于打开Elona逻辑的冰山一角:)。 回复 11# sxooxs
哇,这么强大,呵呵,作者应该对1.22加入了支持吧。 技術貼,看不懂{:3_185:}
純支持{:3_123:} 此贴必须顶,留名以后学习{:3_193:} 说实话~~没看懂~~ LZ果然有深度~~~~~~ 回复 20# 烙印
感谢支持~ 回复 21# 璜獅淲︷の
共同进步~{:3_136:} 回复 22# rip555
关注就是支持,谢谢:P 回复 23# Messiath
抛砖引玉:P 本帖最后由 whiteling 于 2011-4-12 01:04 编辑
回复whiteling
不是那样计算。
(Last*OneOf(0,10]/Head*15+100)等于0的条件只有你的潜力为0, ...
gsky1986 发表于 2011-4-11 18:16 http://bbs.blacksheepgame.com/images/common/back.gif
抱歉 还是没弄懂...
不是向下取整么?那么不是小于1就取到0么?小于1的话不是只要除号左边小于右边么?
因为帖子里的例子是414*10/(44*15+100)=4140/760=5.XX向下取整到5
那么要是潜力为41 就成了41*10/(44*15+100)=410/760=0.XX向下只能取到0 这样理解哪里出了问题?= = 本帖最后由 gsky1986 于 2011-4-12 02:07 编辑
回复 28# whiteling
刚才又跟了一遍,刻意取了一个可以得到0的数。
没错:P,最后还会有个增量,+1,游戏的概率性很强,随机的东西跟起来十分的麻烦,这个增量是怎么来的比较复杂。
这个公式应该以后还会修正的,先提出来:P。 完全不懂······
页:
[1]
2