# 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):
Пример #5
0
# 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