2018-11-03 18:22:34 +01:00
[XCX_LOOT_FORCECHEST]
2019-03-16 14:25:25 +01:00
moduleMatches = 0xF882D5CF, 0x30B6E091, 0xAB97DE6B ; 1.0.1E, 1.0.2U, 1.0.1U
2018-11-03 18:22:34 +01:00
2018-11-07 19:02:06 +01:00
codeCaveSize = 0x30
2018-11-03 18:22:34 +01:00
2018-11-07 19:02:06 +01:00
0x00000000 = .byte $forced
0x00000004 = .byte $treasure
_forced = 0x00000000
_treasure = 0x00000004
2018-11-03 18:22:34 +01:00
2018-11-07 19:02:06 +01:00
; ----------------------------------------------------------------------------
; WHO : ItemDrop::CItemDropManager::calcRank((unsigned short, int))
; WHAT : Force the chest quality
2018-11-03 18:22:34 +01:00
2018-11-07 19:02:06 +01:00
_goForced = 0x00000008
0x00000008 = lis r28, _forced@ha
0x0000000C = lbz r28, _forced@l(r28)
0x00000010 = cmpwi r28, 0
0x00000014 = bnelr
0x00000018 = mr. r28, r3
0x0000001C = blr
0x021AAFA4 = bla _goForced
2018-11-03 18:22:34 +01:00
; ----------------------------------------------------------------------------
; WHO : ItemDrop::CItemDropManager::calcRank((unsigned short, int))
; WHAT : Override the chest quality you get when the game initially decided you get no chest at all
; : It's a bit tough to explain, but the function calcRank does this:
; : 1) Calculate luck for gold chest, if success exit with gold quality (1), else process next step
; : 2) Calculate luck for silver chest, if success exit with silver quality (2), else process next step
; : 3) Calculate luck for bronze chest, if success exit with bronze quality (3), else process next step
; : 4) No chest at all, exit with no chest (0)
2018-11-07 19:02:06 +01:00
; : --> The mod below only changes this last step. So even if you put value 1 (gold chest), you'll still get a silver chest if the game succeeded the step 2.
_goTreasure = 0x00000020
0x00000020 = lis r3, _treasure@ha
0x00000024 = lbz r3, _treasure@l(r3)
0x00000028 = blr
2018-11-03 18:22:34 +01:00
2018-11-07 19:02:06 +01:00
0x21AAF18 = bla _goTreasure ; li r3, 1 ; 0 = nothing (default), 1 = gold, 2 = silver, 3 = bronze