85 lines
2.1 KiB
Python
85 lines
2.1 KiB
Python
# kirbysa.py - by Ac_K
|
|
|
|
import edizon
|
|
|
|
saveFileBuffer = edizon.getSaveFileBuffer()
|
|
save_slot_id = 0
|
|
save_slots = [saveFileBuffer[0x100000:0x200000], saveFileBuffer[0x200000:0x300000], saveFileBuffer[0x300000:0x400000]]
|
|
|
|
def find_offset(section_name, item_name):
|
|
section_offset = save_slots[save_slot_id].index(section_name.encode())
|
|
|
|
section_buffer = save_slots[save_slot_id][section_offset:section_offset + 0x1000]
|
|
|
|
item_offset = section_buffer.index(item_name.encode())
|
|
|
|
return section_offset + item_offset
|
|
|
|
def check_slot_exist(index):
|
|
if index == 0:
|
|
meta_buffer = saveFileBuffer[0x100002:0x100006].decode()
|
|
elif index == 1:
|
|
meta_buffer = saveFileBuffer[0x200002:0x200006].decode()
|
|
elif index == 2:
|
|
meta_buffer = saveFileBuffer[0x300002:0x300006].decode()
|
|
else:
|
|
meta_buffer = ""
|
|
|
|
if meta_buffer == "meta":
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
def getDummyValue():
|
|
return save_slot_id + 1
|
|
|
|
def setDummyValue(value):
|
|
global save_slot_id
|
|
|
|
value -= 1
|
|
|
|
if check_slot_exist(value):
|
|
save_slot_id = value
|
|
else:
|
|
save_slot_id = 0
|
|
|
|
def getValueFromSaveFile():
|
|
strArgs = edizon.getStrArgs()
|
|
intArgs = edizon.getIntArgs()
|
|
|
|
sectionId = strArgs[0]
|
|
itemId = strArgs[1]
|
|
padding = int(strArgs[2], 16)
|
|
|
|
valueSize = intArgs[0]
|
|
|
|
item_offset = find_offset(sectionId, itemId) + padding
|
|
|
|
value = 0
|
|
|
|
for i in range(0, valueSize):
|
|
value = value | (save_slots[save_slot_id][item_offset + i] << i * 8)
|
|
|
|
return value
|
|
|
|
def setValueInSaveFile(value):
|
|
global save_slots
|
|
|
|
strArgs = edizon.getStrArgs()
|
|
intArgs = edizon.getIntArgs()
|
|
|
|
sectionId = strArgs[0]
|
|
itemId = strArgs[1]
|
|
padding = int(strArgs[2], 16)
|
|
|
|
valueSize = intArgs[0]
|
|
|
|
item_offset = find_offset(sectionId, itemId) + padding
|
|
|
|
for i in range(0, valueSize):
|
|
save_slots[save_slot_id][item_offset + i] = (value & (0xFF << i * 8)) >> (i * 8)
|
|
|
|
def getModifiedSaveFile():
|
|
new_save_buffer = saveFileBuffer[0:0x100000] + save_slots[0] + save_slots[1] + save_slots[2]
|
|
|
|
return new_save_buffer |