158 lines
No EOL
4.1 KiB
Lua
158 lines
No EOL
4.1 KiB
Lua
-- smash --
|
|
|
|
saveFileBuffer = edizon.getSaveFileBuffer()
|
|
|
|
function getValueFromSaveFile()
|
|
strArgs = edizon.getStrArgs()
|
|
intArgs = edizon.getIntArgs()
|
|
startingAddress = tonumber(strArgs[1], 16)
|
|
endingAddress= tonumber(strArgs[2], 16)
|
|
addressSize = intArgs[1]
|
|
valueSize = intArgs[2]
|
|
|
|
value = 0
|
|
|
|
if startingAddress ~= 0 then
|
|
if strArgs[1] == "53FF60" then
|
|
value = 1
|
|
for i = 0, endingAddress - startingAddress - 1, 16 do
|
|
value = value & saveFileBuffer[startingAddress+i+1] & saveFileBuffer[startingAddress+i+1+4] & saveFileBuffer[startingAddress+i+1+8]
|
|
end
|
|
end
|
|
|
|
if strArgs[1] == "426C77" then
|
|
value = 255
|
|
for i = 0, endingAddress - startingAddress - 1,28 do
|
|
value = value & saveFileBuffer[startingAddress+i+1]
|
|
end
|
|
end
|
|
|
|
if strArgs[1] == "426C76" then
|
|
for k=0, endingAddress - startingAddress - 1, 28 do
|
|
for i = 0, valueSize - 1 do
|
|
value = value | (saveFileBuffer[(startingAddress+k) + i + 1] << i * 8)
|
|
end
|
|
value = value & 65293
|
|
end
|
|
end
|
|
|
|
|
|
if strArgs[1] == "555BB8" then
|
|
value = 255
|
|
for i = 0, endingAddress- startingAddress - 1 do
|
|
value = value & saveFileBuffer[startingAddress+i+1]
|
|
end
|
|
end
|
|
|
|
if strArgs[1] == "00D0" then
|
|
value = 255
|
|
for i = 0, endingAddress - startingAddress - 1 do
|
|
value = value & saveFileBuffer[startingAddress+i+1]
|
|
end
|
|
end
|
|
|
|
if strArgs[1] == "434750" then
|
|
for k=0, endingAddress- startingAddress - 1, 52 do
|
|
for i = 0, valueSize - 1 do
|
|
value = value | (saveFileBuffer[(startingAddress+k) + i + 17] << i * 8)
|
|
end
|
|
value = value & 65294
|
|
end
|
|
end
|
|
|
|
else
|
|
for i = 0, valueSize - 1 do
|
|
value = value | (saveFileBuffer[endingAddress+ i + 1] << i * 8)
|
|
end
|
|
end
|
|
|
|
return value
|
|
end
|
|
|
|
function setValueInSaveFile(value)
|
|
strArgs = edizon.getStrArgs()
|
|
intArgs = edizon.getIntArgs()
|
|
startingAddress = tonumber(strArgs[1], 16)
|
|
endingAddress = tonumber(strArgs[2], 16)
|
|
addressSize = intArgs[1]
|
|
valueSize = intArgs[2]
|
|
|
|
if startingAddress ~= 0 then
|
|
if strArgs[1] == "53FF60" then
|
|
for i = 0, endingAddress - startingAddress - 1, 16 do
|
|
saveFileBuffer[startingAddress+i+1] = value
|
|
saveFileBuffer[startingAddress+i+1+4] = value
|
|
saveFileBuffer[startingAddress+i+1+8] = value
|
|
end
|
|
end
|
|
|
|
if strArgs[1] == "426C77" then
|
|
for i = 0, endingAddress - startingAddress - 1,28 do
|
|
saveFileBuffer[startingAddress + i + 1] = value
|
|
end
|
|
end
|
|
|
|
if strArgs[1] == "426C76" then
|
|
for i = 0, endingAddress - startingAddress - 1,28 do
|
|
for m = 0, valueSize - 1 do
|
|
saveFileBuffer[startingAddress + i + m + 1] = (value & (0xFF << m * 8)) >> (m * 8)
|
|
end
|
|
end
|
|
end
|
|
|
|
if strArgs[1] == "555BB8" then
|
|
for i = 0, endingAddress - startingAddress - 1 do
|
|
saveFileBuffer[startingAddress + i + 1] = value
|
|
end
|
|
end
|
|
|
|
if strArgs[1] == "00D0" then
|
|
for i = 0, endingAddress - startingAddress - 1 do
|
|
saveFileBuffer[startingAddress + i + 1] = value
|
|
end
|
|
end
|
|
|
|
if strArgs[1] == "434750" then
|
|
if value == 0 then
|
|
for i = 0, endingAddress - startingAddress - 1,52 do
|
|
for m = 0, valueSize - 1 do
|
|
saveFileBuffer[startingAddress + i + m + 1] = (4294967295 & (0xFF << m * 8)) >> (m * 8)
|
|
end
|
|
|
|
for m = 0, valueSize - 1 do
|
|
saveFileBuffer[startingAddress + i + m + 11] = (65535 & (0xFF << m * 8)) >> (m * 8)
|
|
end
|
|
|
|
for m = 0, valueSize - 1 do
|
|
saveFileBuffer[startingAddress + i + m + 17] = (14 & (0xFF << m * 8)) >> (m * 8)
|
|
end
|
|
end
|
|
else
|
|
spirit=1
|
|
for i = 0, endingAddress - startingAddress - 1,52 do
|
|
for m = 0, valueSize - 1 do
|
|
saveFileBuffer[startingAddress + i + m + 1] = (spirit & (0xFF << m * 8)) >> (m * 8)
|
|
end
|
|
|
|
for m = 0, valueSize - 1 do
|
|
saveFileBuffer[startingAddress + i + m + 11] = (spirit-1 & (0xFF << m * 8)) >> (m * 8)
|
|
end
|
|
|
|
for m = 0, valueSize - 1 do
|
|
saveFileBuffer[startingAddress + i + m + 17] = (value & (0xFF << m * 8)) >> (m * 8)
|
|
end
|
|
spirit=spirit+1
|
|
end
|
|
end
|
|
end
|
|
|
|
else
|
|
for i = 0, valueSize - 1 do
|
|
saveFileBuffer[endingAddress+ i + 1] = (value & (0xFF << i * 8)) >> (i * 8)
|
|
end
|
|
end
|
|
end
|
|
|
|
function getModifiedSaveFile()
|
|
return saveFileBuffer
|
|
end |