import sys
sys.path.insert(1,'..\_python_')

from clearCache import clearCache
clearCache('cheatLib')
from cheatLib import *
cls()
################################ START ######################################
#file need to be named '0100453019AA8000 Xenoblades Chronicles X (US) (v1.0.1)'
#SetUsingMasterCode()
Init('Xenoblade Chronicles X v1.0.1(gbatemp version)')
AddMasterCode(RegData(0x270F))
max9999=GetCodeK()
AddMasterCode(RegData(0xF423F))
max999999=GetCodeK()
AddMasterCode(RegData(0x098967F))
Range=GetCodeK()


AddCheat('Skill ncd combat/skell')
Hack(0x0253B74,0x1E213820)
Hack(0x024DAF0,0x1E213820)

AddCheat('item not decrease on sell')
Hack(0x082F2D8,0x4B1F014A)

AddMasterCode( 
    CodeFunc( (
    'ldr w8, %d-{here}'%(Range),
    'ucvtf s0, w8',
    'ret', 
    ))
)
Pickuprangecave=GetCodeK()

AddCheat('(M)Auto Pickup Collectibles')
Hack(0x01504D0, 'bl %d-{here}'%(Pickuprangecave))
Hack(0x01504F0, 'bl %d-{here}'%(Pickuprangecave))
Hack(0x0150510, 'bl %d-{here}'%(Pickuprangecave))
Hack(0x0150548, 'bl %d-{here}'%(Pickuprangecave))
Hack(0x0150568, 'bl %d-{here}'%(Pickuprangecave))
Hack(0x0150588, 'bl %d-{here}'%(Pickuprangecave))
Hack(0x01505AC, 'bl %d-{here}'%(Pickuprangecave))
Hack(0x01505CC, 'bl %d-{here}'%(Pickuprangecave))
Hack(0x01505E0, 'bl %d-{here}'%(Pickuprangecave))
AddCheat('Adjust pickup range(must edit first)')
Hack(Range, 0x00000000,showRestoreCode=False)

XP=AOB('E3 03 19 2A ? ? ? ? E1 13 40 B9') #6B148
ClassXP=AOB('E3 03 17 2A ? ? ? ? A8 43 5F 38') #6BB60
DPlayer=AOB('E1 03 15 2A ? ? ? ? 68 02 40 F9 F5 03 00 2A E0 03 13 AA 08 45 41 F9 00 01 3F D6 BF 06 00 71 AB 00 00 54 E2 03 00 2A E0 03 13 AA E1 03 14 2A ? ? ? ? E0 03 15 2A F4 4F 42 A9 F5 0B 40 F9 FD 7B C3 A8 C0 03 5F D6 08 78') #01D705C
DEnemy=AOB('E1 03 15 2A ? ? ? ? 68 02 40 F9 F5 03 00 2A E0 03 13 AA 08 45 41 F9 00 01 3F D6 BF 06 00 71 8B 04 00 54')
lsl_table = {0:0, 1:2, 4:16, 6:64, 15:32768 }
BoosterXPcode='lsl w3, w25,'
BoosterClassXPcode='lsl w3, w23,'
BoosterDamagePcode='lsr w1, w21,'
BoosterDamageEcode='lsl w1, w21,'
for idx, multi in lsl_table.items():
    AddCheat('Xp booster (%dx)'%(multi), newOption=idx)
    if idx == 0:
        Hack(XP, 'mov w3, 0',showRestoreCode=False)
    else:
        Hack(XP, BoosterXPcode+'#%d'%idx,showRestoreCode=False)
    
for idx, multi in lsl_table.items():
    AddCheat('Class XP booster (%dx)'%(multi), newOption=idx)
    if idx == 0:
        Hack(XP, 'mov w3, 0',showRestoreCode=False)
    else:
        Hack(ClassXP, BoosterClassXPcode+'#%d'%idx,showRestoreCode=False)

AddMasterCode(CheatCode(4,DPlayer, GetDword(DPlayer)))
AddMasterCode(CheatCode(4,DEnemy, GetDword(DEnemy)))
lsl_table = {1:2, 2:4, 3:8, 4:16}
for idx, multi in lsl_table.items():
    AddCheat('Damage to Player reduced by (%dx)'%(multi), newOption=idx)
    Hack(DPlayer, BoosterDamageEcode+'#%d'%idx,showRestoreCode=False)
    
for idx, multi in lsl_table.items():
    AddCheat('Damage to Player increased by (%dx)'%(multi), newOption=idx)
    Hack(DPlayer, BoosterDamagePcode+'#%d'%idx,showRestoreCode=False)
    
lsl_table = {1:2, 4:16, 6:64, 15:32768}
for idx, multi in lsl_table.items():
    AddCheat('Damage to Enemy (%dx)'%(multi), newOption=idx)
    Hack(DEnemy, BoosterDamageEcode+'#%d'%idx,showRestoreCode=False)
    
AddCheat('insta-kill',newOption=5)
Hack(DEnemy, 'add w1, w9, 1') 

AddCheat('Affinity Multiplier x100')
Hack(0x006BF0C,0x52800C81,showRestoreCode=False)

AddCheat('Affinity Multiplier x150')
Hack(0x006BF0C,0x528012C1,showRestoreCode=False)

AddCheat('Affinity Multiplier x250')
Hack(0x006BF0C,0x52801F41,showRestoreCode=False)

AddCheat('Affinity Multiplier x500')
Hack(0x006BF0C,0x52803E81,showRestoreCode=False)

AddCheat('Affinity Multiplier x1000')
Hack(0x006BF0C,0x52807D01,showRestoreCode=False)

AddCheat('Affinity Multiplier off')
Hack(0x006BF0C,0x2A1403E1,showRestoreCode=False)

AddCheat('max money')
Hack(0x0349F38,0xB829690B) 

AddCheat('Inf Skell Fuel')
Hack(0x01CF5EC,0xBD7CF400)

AddCheat('Have 9999 held of item if you dont have any')
Hack(0x013DBB8,0x5284E1E0) 

AddCheat('overclock/overdrive stop')
Hack(0x00887E4,0x1E204001)
Hack(0x008F698,0x1E204020)

AddCheat('item not decrease in battle')
Hack(0x013D7D0,0x4B1F014A)

AddCheat('unlock fashion gear on')
Hack(0x034ED14,0x52800068)

AddCheat('View All Achievements ON')
Hack(0x04f9b4c,0x52800068)

#AddCheat('View All Enemy Index ON PERMANENT')
#Hack(0x034df40,0x52800020)

AddCheat('Appendage 1 hit break')
Hack(0x01C5A50,0x6B0A0153)

AddCheat('Always 3 skills 1 slot')
Hack(0x008576C,0x52800060)
Hack(0x0085998,0x52800020)

AddCheat('Item not decrease sale/upgrade')
Hack(0x082F2D8,0x4B1F014A)
Hack(0x08EC220,0x4B1F0129)
Hack(0x013D7D0,0x4B1F014A)

Ptr=0x00414CB0
AddMasterCode( 
    CodeFunc( (
    0x52A66662,
    0xB9009102,
    0xB940A501,
    0xD503201F,
    0xB940BD01,
    0xD503201F,
    0xB90D7680,
    'B %d-{here}'%(Ptr+4), 
    ))
)
HpCave=GetCodeK()
AddMasterCode(CheatCode(4,Ptr,'B %d'%(HpCave-Ptr)))

Ptr=0x01CE1B8
AddMasterCode( 
    CodeFunc( (
    0x52A66662,
    0xB9409105,
    0x6B0600BF,
    0x54000061,
    0x4B1302F9,
    'B %d-{here}'%(Ptr+4), 
    0x4B1302F9,
    'B %d-{here}'%(Ptr+4), 
    ))
)
DmgCave=GetCodeK()
AddMasterCode(CheatCode(4,Ptr,'B %d'%(DmgCave-Ptr)))


AddCheat('(M)inf hp')
Hack(HpCave+0x4*3, 0xB900A101,showRestoreCode=False) 

AddCheat('(M)inf tp')
Hack(HpCave+0x4*5, 0xB900A101,showRestoreCode=False) 

AddCheat('(M)damage x4 to enemies')
Hack(DmgCave+0x4*4, 0x4B130AF9,showRestoreCode=False) 

AddCheat('(M)damage x16 to enemies')
Hack(DmgCave+0x4*4, 0x4B1312F9,showRestoreCode=False) 

AddCheat('(M)One Hit Kill enemies')
Hack(DmgCave+0x4*4, 0x4B1702F9,showRestoreCode=False) 

AddCheat('(M)damage x2 to players')
Hack(DmgCave+0x4*6, 'sub w25, w23, w19,lsl#1',showRestoreCode=False) 

AddCheat('(M)damage x4 to players')
Hack(DmgCave+0x4*6, 'sub w25, w23, w19,lsl #2',showRestoreCode=False) 

AddCheat('(M)One Hit Kill players')
Hack(DmgCave+0x4*6, 0x4B1702F9,showRestoreCode=False) 

cheatAddr=0x15342B8
AddMasterCode( 
    CodeFunc( (
    'fadd v0.4s,v1.4s,v0.4s',
    'mov w8,0',
    'ins v1.s[1],w8',
    'Nop',
    'Nop',
    'Nop',
    'B %d-{here}'%(cheatAddr+4), 
    ))
)
Speedcave=GetCodeK()
AddMasterCode(CheatCode(4,cheatAddr,'B %d'%(Speedcave-cheatAddr)))
AddCheat('(M)Speed x2 (tomvita)')
InsertCheatCode(0, ButtonCode('ZL'))
Hack(Speedcave+4*0x3,'fadd v0.4s,v1.4s,v0.4s',showRestoreCode=False)
AddCheatCode(PointerCodeEndBlock())
AddCheat('(M)Speed x3 (tomvita)')
InsertCheatCode(0, ButtonCode('ZL'))
Hack(Speedcave+4*0x3,('fadd v0.4s,v1.4s,v0.4s','fadd v0.4s,v1.4s,v0.4s'),showRestoreCode=False)
AddCheatCode(PointerCodeEndBlock())
AddCheat('(M)Speed x4 (tomvita)')
InsertCheatCode(0, ButtonCode('ZL'))
Hack(Speedcave+4*0x3,('fadd v0.4s,v1.4s,v0.4s','fadd v0.4s,v1.4s,v0.4s'),showRestoreCode=False)
Hack(Speedcave+4*0x5,'fadd v0.4s,v1.4s,v0.4s',showRestoreCode=False)
AddCheatCode(PointerCodeEndBlock())

AddCheat('(M)Max Ticket Material (Buy Once)')
CodeCave(0x349FF8,
    (
    'ldr w9, %d-{here}'%(max9999),
    0xB82A6909,
    'b %d-{here}'%(0x349FFC),
    ),use_BL=False)

AddCheat('(M)max bp')
cheatAddr=0x121020
CodeCave(cheatAddr,
    (
    'ldr w8, %d-{here}'%(max9999),
    0xB905AC08,
    'b %d-{here}'%(cheatAddr+4),
    ),use_BL=False)

AddCheat('(M)Max Inf Miranium (Must Use Once)')
cheatAddr=0x34A124
CodeCave(cheatAddr,
    (
    'ldr w10, %d-{here}'%(max999999),
    0xB829690A,
    'b %d-{here}'%(cheatAddr+4),
    ),use_BL=False)

AddCheat('Have 255 qty of items after viewing')
cheatAddr=0x65A8D0
CodeCave(cheatAddr,
    (
    0x7940051E, 
    0x321D1FDE, 
    0x7900051E, 
    0x39400D08,
    'b %d-{here}'%(cheatAddr+4)
    ),use_BL=False)

AddCheat('All Stats are 500')
StatNumber=GetCodeK()-4
cheatAddr=0x410184
CodeCave(cheatAddr, 
    (
     0xF9410016,
     0x180001B4,
     0x794073F3,
     0x6B13029F,
     0x54000121,
     0x18000154,
     0xB90272D4,
     0xB90276D4,
     0xB9027AD4,
     0xB9027ED4,
     0xB90282D4,
     0xB90286D4,
     0xB9028AD4,
     'b %d-{here}'%(cheatAddr+4),
     0x00009D70,
     0x000001F4,
    ),use_BL=False)

AddCheat('mod stats to 9999')
Hack(StatNumber, Value2DWord(9999),showRestoreCode=False)

AddCheat('Silver chest/drops')
Hack(0x0084AA4,(0xD65F03C0,0x52800040))

AddCheat('Gold chest/drops')
Hack(0x0084AA4,(0xD65F03C0,0x52800020))

AddCheat('Extra weapon/armor drops')
Hack(0x0085F40,0x52800000)
Hack(0x0085F80,0x52800C80)
Hack(0x0085FBC,0x52800C80)

AddCheat('Extra material drops')
Hack(0x0085D5C,0x52800020)

AddCheat('No broken weapon')
Hack(0x0085878,0x52800000)

AddCheat('Always armor drop')
Hack(0x0085810,0x52800082)
Hack(0x0085838,0x52800081)
Hack(0x00862CC,0x140000A7)
Hack(0x0086598,0x1400018B)

AddCheat('Always weapon drop')
Hack(0x0085810,0x52800042)
Hack(0x0085838,0x52800041)
Hack(0x00862CC,0x140000A7)
Hack(0x0086598,0x1400018B)

AddCheat('R3 add slots to weapon')
InsertCheatCode(0, ButtonCode('R3'))
CodeCave(0x062112C, 
    (
    0x5280000B,
    0xB801228B,
    0xB801628B,
    0xB801A28B,
    0xA9412E8A,
    'b %d-{here}'%(0x0621130),
    ),use_BL=False)
AddCheatCode(PointerCodeEndBlock())
################################# END #######################################

HackComplete()

