Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论

标题: 【讨论】根据游戏时间决定商品价格 [打印本页]

作者: jiangzhengwenjz    时间: 2015-6-10 14:26
标题: 【讨论】根据游戏时间决定商品价格
本帖最后由 jiangzhengwenjz 于 2015-6-12 22:34 编辑

。。最近快考试忙的一比,发个帖凑个数,当然昨晚断网前时间仓促,技术含量实在不高,还请各位指教。【不是教程,不得转载】

所有的修改都在火红2012汉化上进行

首先必须得知何处的程序用来读取道具价格,这个断点的截取也是非常简单的,不过为了凑字数还是废话一下:
1、首先找到道具表格的位置(查资料,或修改后数据比对,或搜索道具名称对应的数据)
2、然后发现这个表格里每个道具都是44字节,然后相对每个道具数据开头偏移0x10的位置就是道具的价钱
3、以精灵球为例,0xc8也就是200块,在0x3db0e8,那么在这里下读取断。[083db0e8]?

到尼比市的商店触发脚本,因为有精灵球卖所以break了。通过多次断点截取与寄存器修改不难知道此处修改是可靠的。那么考虑选择位置跳出。
  1. ROM:0809A914                 ADDS    R0, R0, R4
  2. ROM:0809A916                 LDRH    R0, [R0,#item.market_price]
  3. ROM:0809A918                 POP     {R4}
  4. ROM:0809A91A                 POP     {R1}
  5. ROM:0809A91C                 BX      R1
复制代码
代码的位置也就是在0x9A914,不难发现,执行完马上就跳走到lr的位置了。所以跑到新代码以后直接跳走就完事,不必跳回了。那么跳转就设在0x9A914.
  1. 00 49 08 47 XX XX XX XX
复制代码
其中XX XX XX XX就是新程序指针(thumb模式+1)
也就是:
  1. ldr r1, =新程序指针
  2. bx r1
复制代码
那么,新程序也就呼之欲出了:(随便弄的一个算法,不要在意)
  1. .thumb
  2. add r0, r0, r4
  3. ldrh r0, [r0, #0x10]
  4. push {r2-r3}
  5. ldr r1, playerdata
  6. ldr r1, [r1]
  7. ldrh r1, [r1, #0xe]
  8. lsr r1, r1, #0x2
  9. add r1, r1, #0xa
  10. mul r0, r1
  11. mov r1, #0xa
  12. ldr r2, divmod
  13. bl linker
  14. ldr r1, nnnn
  15. cmp r0, r1
  16. bhs shit
  17. b back

  18. shit:
  19. add r0, r1, #0x0

  20. back:
  21. pop {r2-r3}
  22. pop {r4}
  23. pop {r1}
  24. bx r1

  25. linker:
  26. bx r2

  27. .align 2
  28. playerdata: .word 0x0300500c
  29. divmod: .word 0x081E4019
  30. nnnn: .word 0x0000270f
复制代码
其中0x270f是9999,注意到divmod会保护r4,且r4会被pop {r4}刷新,故无必要保护r4.(其他寄存器没用到,虽然未测试但应该错不了)
当然由于这个程序的最后会mov r15, r14,所以会顺畅地跳回。

==========================================================
以下才是研究的重点!
如何扩充商品价格显示上限到65535:
0x9b440及0x9b430的均改成05,并于0x9b428写入00000000
如何扩充金钱上限到999999999 (by JPAN):
0x9fdd4把3f420f00改成ffc99a3b
0x8a000或0x8a006中有一处是06,将06改去09(貌似英文版和新汉化不同)
0x9fe52和0x9fe62的06均改去09
==========================================================
然后目前在看如何保证扩到99999不出问题
问题1:在超出65535(ffff)之后购买时价格会错误
解决:首先要解限,于0x9b428写入00000000
另要在0x9bc4a写入00000000,0x9bdb6写入00000000
问题2:购买时显示位数问题(需从6位扩充到7位)
解决:0x9FEE8和0x9FEF8的06改成07

==========================================================
结论:
0x9b440及0x9b430的04改去05
0x9b428写入00 00 00 00
0x9fdd4把3f420f00改成ffc99a3b
0x8a000或0x8a006中有一处是06,将06改去09
0x9fe52和0x9fe62的06均改去09
0x9bc4a及0x9bdb6写入00 00 00 00
0x9FEE8及0x9FEF8的06改去07
0x10a6ca的06改去07
0x10a7ea改去00 00 40 08
0x10a8a2改去00 00 40 08
0x10a6bc改去00 00 40 08
0x10a982改去00 00 40 08
0x10aa14改去00 00 40 08
0x10a990的06改去07
最后把之前代码里的9999改去99999对应的16进制值即可。
会造成游戏其他部分的bug吗?不知道
作者: 海のLUGIA    时间: 2015-6-10 22:04
这样,随着时间的推移,物价越来越高,写实23333
作者: jiangzhengwenjz    时间: 2015-6-10 22:29
本帖最后由 jiangzhengwenjz 于 2015-6-11 13:16 编辑
海のLUGIA 发表于 2015-6-10 22:04
这样,随着时间的推移,物价越来越高,写实23333


然而玩家囤积居奇,牟取暴利(虽然钱变多了但还是买不到东西233)
作者: 判仔团    时间: 2015-6-10 22:59
好帖,又是一个黑科技666666
作者: 暗影之刺    时间: 2015-6-11 13:14
话说不少RPG游戏的话后期商店等基本价格都会涨呢,不过最终话之前也就是最后的商店貌似都是最贵的,于是不少玩家跑回去原来的地方买便宜的商品(尽管不全2333)
具体不是特别懂,不过也算是挺不错的东西吧╮( ̄▽ ̄")╭ ,过来支持下版主的努力
作者: jiangzhengwenjz    时间: 2015-6-11 13:16
暗影之刺 发表于 2015-6-11 13:14
话说不少RPG游戏的话后期商店等基本价格都会涨呢,不过最终话之前也就是最后的商店貌似都是最贵的,于是不 ...


我这个是全地区性的普遍涨价
作者: gujiahao12    时间: 2015-6-12 18:41
。。。。。如果物品价格超过65535的话,那么物品的价格数据位置不就要重新定位了。。。。
作者: jiangzhengwenjz    时间: 2015-6-12 19:18
本帖最后由 jiangzhengwenjz 于 2015-6-12 22:43 编辑
gujiahao12 发表于 2015-6-12 18:41
。。。。。如果物品价格超过65535的话,那么物品的价格数据位置不就要重新定位了。。。。


似乎虽然变长了,但是还是没有遇到什么bug
恳请见教
还有你的意思是指改变原始价格数据吗?我好像理解错了
作者: strange_kid    时间: 2015-6-14 11:09
我都想算算这个的通胀率了
作者: Deicde丶笑沧海    时间: 2015-7-20 21:27
这个    坑。。。不过貌似限制上限为65535 超了怎么破
作者: a503368088    时间: 2015-11-21 10:35
那卖掉的价钱呢
如果是售价的半价,是不是能通过前期囤货来刷钱!
作者: jiangzhengwenjz    时间: 2015-11-21 10:42
a503368088 发表于 2015-11-21 10:35
那卖掉的价钱呢
如果是售价的半价,是不是能通过前期囤货来刷钱!

然而, 钱已经买不到东西了




欢迎光临 Pokemon Center | 口袋中心 以口袋妖怪为主题并带有其他动漫游戏的讨论 (http://162.218.49.243/) Powered by Discuz! X3