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

 找回密码
 加入口袋中心
搜索
查看: 2505|回复: 1

圆形护身符——火红出蛋率调整

[复制链接]

3344

回帖

613

现金

484

勋章券

超级版主

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
21849
QQ

时光印记Lv.3挥金如土勋章水中王者勋章Lv3Omega红宝石发售确认纪念章Alpha蓝宝石发售确认纪念章金银好CP-Ho-oh/LUGIA【里】金银好CP-Ho-oh/LUGIA【真·正常向】异化型LUGIA【M超梦版】

发表于 2015-7-2 14:20:57 | 显示全部楼层 |阅读模式
本帖最后由 jiangzhengwenjz 于 2015-8-20 15:04 编辑

这个算是临时起意的修改,主要是看到破道大师用了几分钟就弄完,就也想尝试一下。技术含量的确不高,不过我还是打算发个帖子【勿喷

注:我用了knizz的database所以有些数据会以"名称"的形式给出

首先要找出切入点——在火红中不难知道是special 0xb6来检验有没有蛋、有几只精灵,那就当然直接反汇编查看。无疑我们只关心哪里是控制有没有蛋的,故检测种族、用循环来检查存放精灵个数的部分完全可以无视(虽然也很明确)

这是开头检查蛋的部分:
  1. ROM:080464B4                 PUSH    {R4,LR}
  2. ROM:080464B6                 LDR     R4, =saveblock1_mapdata
  3. ROM:080464B8                 LDR     R0, [R4]
  4. ROM:080464BA                 MOVS    R1, #sav1.daycare_data
  5. ROM:080464BE                 ADDS    R0, R0, R1
  6. ROM:080464C0                 BL      sub_80463FC
复制代码
  1. ROM:080463FC                 MOVS    R1, #0x118
  2. ROM:08046400                 ADDS    R0, R0, R1
  3. ROM:08046402                 LDRH    R1, [R0]
  4. ROM:08046404                 NEGS    R0, R1
  5. ROM:08046406                 ORRS    R0, R1
  6. ROM:08046408                 LSRS    R0, R0, #0x1F
  7. ROM:0804640A                 BX      LR
复制代码
结合这个special的返回值(脚本中可看)很明显[3005008h]+2f80h+118h的一个hword用来控制有没有蛋,那么可以根据这里来找"是否产生蛋"的判定程序

(好吧我承认这个办法不怎么好,所以具体怎么找到这个程序的,我还是略去了)

经过断点截取发现——位于0x462C4的程序用来随机判断是否得蛋(当然也没必要完全看懂,看懂下面这一小段就可以)
  1. ROM:080462C4                 PUSH    {R4-R7,LR}
  2. ROM:080462C6                 SUB     SP, SP, #4
  3. ROM:080462C8                 MOVS    R6, R0
  4. ROM:080462CA                 MOVS    R7, #0
  5. ROM:080462CC                 MOVS    R5, #0
  6. ROM:080462CE
  7. ROM:080462CE loc_80462CE:                            @ CODE XREF: sub_80462C4+2Ej
  8. ROM:080462CE                 MOVS    R0, #0x8C @ '
  9. ROM:080462D0                 MOVS    R4, R5
  10. ROM:080462D2                 MULS    R4, R0
  11. ROM:080462D4                 ADDS    R0, R6, R4
  12. ROM:080462D6                 MOVS    R1, #req_sanity_bit2
  13. ROM:080462D8                 BL      pokemon_getattr_encrypted
  14. ROM:080462DC                 CMP     R0, #0
  15. ROM:080462DE                 BEQ     loc_80462EE
  16. ROM:080462E0                 MOVS    R1, R6
  17. ROM:080462E2                 ADDS    R1, #0x88 @ '
  18. ROM:080462E4                 ADDS    R1, R1, R4
  19. ROM:080462E6                 LDR     R0, [R1]
  20. ROM:080462E8                 ADDS    R0, #1
  21. ROM:080462EA                 STR     R0, [R1]
  22. ROM:080462EC                 ADDS    R7, #1
  23. ROM:080462EE
  24. ROM:080462EE loc_80462EE:                            @ CODE XREF: sub_80462C4+1Aj
  25. ROM:080462EE                 ADDS    R5, #1
  26. ROM:080462F0                 CMP     R5, #1
  27. ROM:080462F2                 BLS     loc_80462CE
  28. ROM:080462F4                 MOVS    R1, #0x118
  29. ROM:080462F8                 ADDS    R0, R6, R1
  30. ROM:080462FA                 LDRH    R0, [R0]
  31. ROM:080462FC                 CMP     R0, #0
  32. ROM:080462FE                 BNE     loc_8046334
  33. ROM:08046300                 CMP     R7, #2
  34. ROM:08046302                 BNE     loc_8046334
  35. ROM:08046304                 SUBS    R1, #4
  36. ROM:08046306                 ADDS    R0, R6, R1
  37. ROM:08046308                 LDRB    R0, [R0]
  38. ROM:0804630A                 CMP     R0, #0xFF
  39. ROM:0804630C                 BNE     loc_8046334
  40. ROM:0804630E                 MOVS    R0, R6
  41. ROM:08046310                 BL      daycare_relationship_score
  42. ROM:08046314                 MOVS    R4, R0
  43. ROM:08046316                 LSLS    R4, R4, #0x18
  44. ROM:08046318                 LSRS    R4, R4, #0x18
  45. ROM:0804631A                 BL      rand
  46. ROM:0804631E                 LSLS    R0, R0, #0x10
  47. ROM:08046320                 LSRS    R0, R0, #0x10
  48. ROM:08046322                 MOVS    R1, #0x64 @ 'd'
  49. ROM:08046324                 MULS    R0, R1
  50. ROM:08046326                 LDR     R1, =0xFFFF
  51. ROM:08046328                 BL      __udivsi3
  52. ROM:0804632C                 CMP     R4, R0
  53. ROM:0804632E                 BLS     loc_8046334
  54. ROM:08046330                 BL      sub_8045A48
复制代码
应该说这个程序还是非常容易分析的——而在daycaare_releationship_score中不难发现根据不同情况返回值是0x14,0x46,0x32,对应三种情况下的概率(那么后面的指令和跳转的在干什么也很明确了吧)

那么接下来就是随意设置跳转,进行判断了,我选在0x46320(有注释可能没法正常编译)
  1. .thumb
  2. .align 2
  3. ldr r1, =0x8800001 @新程序指针
  4. bx r1
复制代码
新的程序则是
  1. .thumb
  2. .align 2
  3. @800000h
  4. push {r0, r2-r7}
  5. mov r0, #0xfe @参量,道具编号(这里随便填了一个)
  6. mov r1, #1
  7. bl checkitem
  8. mov r1, r0
  9. pop {r0, r2-r7}
  10. lsr r0, r0, #0x10
  11. cmp r1, #1
  12. bne original
  13. mov r1, #0x10 @调小以提升概率(这种情况下"255步判断"必出蛋)
  14. b share

  15. original:
  16. mov r1, #0x64

  17. share:
  18. mul r0, r1
  19. ldrh r1, =0xffff
  20. ldr r3, =0x08046329
  21. bx r3

  22. checkitem:
  23. ldr r4, =0x08099F41
  24. bx r4
复制代码
大概就是这么回事了,苦逼地写论文去(花了整整一上午,但这东西很难测试)

或许这里或那里有什么错误或问题,欢迎指导【测试不足,不得转载
回复

使用道具 举报

85

回帖

1354

现金

1

勋章券

繁华都市的喧闹

Rank: 5Rank: 5Rank: 5

积分
287

时光印记Lv.1

发表于 2015-7-2 14:59:21 | 显示全部楼层
支持一下。。。。。。。。。。。。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入口袋中心

本版积分规则

手机版|Archiver|Pokemon Center

GMT+8, 2024-4-16 12:49 , Processed in 0.098157 second(s), 43 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表