# 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:
# MK8.py - by Ac_K import edizon, zlib saveFileBuffer = edizon.getSaveFileBuffer() def getValueFromSaveFile(): strArgs = edizon.getStrArgs() intArgs = edizon.getIntArgs() indirectAddress = int(strArgs[0], 16) address = int(strArgs[1], 16) addressSize = intArgs[0] valueSize = intArgs[1] offset = 0 value = 0 if indirectAddress != 0: for i in range(0, addressSize): offset = offset | (saveFileBuffer[indirectAddress + i] << i * 8) for i in range(0, valueSize): value = value | (saveFileBuffer[offset + address + i] << i * 8) return value def setValueInSaveFile(value): strArgs = edizon.getStrArgs() intArgs = edizon.getIntArgs() indirectAddress = int(strArgs[0], 16) address = int(strArgs[1], 16)
## bin ## import edizon import zlib CompressedSaveFileBuffer = edizon.getSaveFileBuffer() CompressedSaveFileBuffer = CompressedSaveFileBuffer[16:] DecompressedSaveFileBuffer = zlib.decompress(bytes(CompressedSaveFileBuffer), 32 + 15) saveFileBuffer = bytearray(DecompressedSaveFileBuffer) def getValueFromSaveFile(): strArgs = edizon.getStrArgs() intArgs = edizon.getIntArgs() indirectAddress = int(strArgs[0], 16) address = int(strArgs[1], 16) addressSize = intArgs[0] valueSize = intArgs[1] offset = 0 value = 0 if indirectAddress != 0: for i in range(0, addressSize): offset = offset | (saveFileBuffer[indirectAddress + i] << i * 8) for i in range(0, valueSize): value = value | (saveFileBuffer[offset + address + i] << i * 8) return value
## bin ## import edizon import zlib CompressedSaveFileBuffer = edizon.getSaveFileBuffer() CompressedSaveFileBuffer = CompressedSaveFileBuffer[16:] DecompressedSaveFileBuffer = zlib.decompress(bytes(CompressedSaveFileBuffer), 32 + 15) saveFileBuffer = bytearray(DecompressedSaveFileBuffer) def getValueFromSaveFile(): strArgs = edizon.getStrArgs() intArgs = edizon.getIntArgs() indirectAddress = int(strArgs[0], 16) address = int(strArgs[1], 16) addressSize = intArgs[0] valueSize = intArgs[1] offset = 0 value = 0 if indirectAddress != 0: for i in range(0, addressSize): offset = offset | (saveFileBuffer[indirectAddress + i] << i * 8) for i in range(0, valueSize): value = value | (saveFileBuffer[offset + address + i] << i * 8) return value def setValueInSaveFile(value):
# SMO.py - by Ac_K # Thanks to WerWolv and Leoetlino for helped me! import edizon, io, operator from byml import * savedata_buffer = edizon.getSaveFileBuffer() savedata_header = savedata_buffer[0:0xC] savedata_dict = bymlbuffer_to_object(savedata_buffer[0x10:]) # skip the save data header # TODO: Add more editable values :P # print(savedata_dict) def get_first_empty_index(item_list): i = 0 for x in item_list: if x == "": return i i += 1 return -1 def find_item_index(item_list, item): i = 0 for x in item_list: if x == item: return i i += 1