User File #638735711231534860

Upload All User Files

#638735711231534860 - Kirby's Adventure TAStudio Logger

Kirby's Adventure.lua
4 downloads
Uploaded 2 days ago by TASeditor (see all 189)
Branch comparision not working properly for some reason
function Draw()

	gui.drawRectangle(0, 167, 255, 56, 0x88FFFFFF, 0x88000000)
	gui.drawLine(128, 168, 128, 222, 0x88FFFFFF)
	
	gui.drawText(2, 168, "X: "..kirby.position.x[frame]..":"..kirby.subpixel.x[	frame], 0xFFFFFFFF, 0x44FF0000)
	gui.drawText(2, 180, "Y: "..kirby.position.y[frame]..":"..kirby.subpixel.y[frame], 0xFFFFFFFF, 0x4400FF00)
	gui.drawText(2, 192, "Xv: "..kirby.velocity.x[frame], 0xFFFFFFFF, 0x44FF0000)
	gui.drawText(2, 204, "Yv: "..kirby.velocity.y[frame], 0xFFFFFFFF, 0x4400FF00)

end

function sgn(x)

	if x > 0
	then return 1
	elseif x < 0
	then return -1
	else return 0
	end
	
end

function Color(index, color1, color2)

	if index >= ungreenframe
	then return color1
	else return color2
	end

end

function ColorGradient(value, maxvalue, index)

	if value < 0
	then red = 255
		 green = 0
		 blue = 0
	elseif value  < maxvalue/2
		then red = 255	
		 green = math.floor((255/(maxvalue-maxvalue/2))*math.abs(value))
		 blue = 0
	elseif math.abs(value) < maxvalue
		then red = math.floor(-(255/(maxvalue-maxvalue/2))*math.abs(value)+510)
			 green = 255
			 blue = 0
		else red = 0
			 green = 255
			 blue = 0
	end
	
	if (index >= ungreenframe)
	then red = math.floor((255-red)/120*(200-240)+255)
		 green = math.floor((255-green)/120*(200-240)+255)
		 blue = math.floor((255-blue)/120*(200-240)+255)
	end

	alpha = 255
	
	return alpha*256*256*256+red*256*256+green*256+blue
	
end

function TAStudioText(index, column)

	if kirby.velocity.x[index] ~= nil and column == "Xv"
		then return tostring(kirby.velocity.x[index])
	elseif kirby.velocity.y[index] ~= nil and column == "Yv"
		then return tostring(kirby.velocity.y[index])
		
		elseif branches[selectedbranch] ~= nil and branches[selectedbranch].position.x[index] ~= nil and column == "Dx" and kirby.position.x[index] ~= nil and kirby.subpixel.x[index] ~= nil
		then local d = ((kirby.position.x[index]*256 + kirby.subpixel.x[index]) 
						- (branches[selectedbranch].position.x[index]* 256 + branches[selectedbranch].subpixel.x[index]))
						* sgn(branches[selectedbranch].velocity.x[index])
			 return tostring(math.floor(d / 256) ..":" .. d % 256)
	elseif branches[selectedbranch] ~= nil and branches[selectedbranch].position.y[index] ~= nil and column == "Dy" and kirby.position.y[index] ~= nil and kirby.subpixel.y[index] ~= nil
		then local d = ((kirby.position.y[index]*256 + kirby.subpixel.y[index]) 
						- (branches[selectedbranch].position.y[index]* 256 + branches[selectedbranch].subpixel.y[index]))
						* sgn(branches[selectedbranch].velocity.y[index])
		return tostring(math.floor(d / 256) ..":" .. d % 256)	
	end

	if column == "Xv" or column == "Yv" or column == "Dx" or column == "Dy" 
	then return ""
	end
	
end

function TAStudioColor(index, column)

	if kirby.velocity.x[index] ~= nil and column == "Xv"
		then return ColorGradient(math.abs(kirby.velocity.x[index]), 704, index)
	elseif kirby.velocity.y[index] ~= nil and column == "Yv"
		then return ColorGradient(math.abs(kirby.velocity.y[index]), 880, index)
		
	elseif branches[selectedbranch] ~= nil and branches[selectedbranch].position.x[index] ~= nil and column == "Dx" and kirby.position.x[index] ~= nil and kirby.subpixel.x[index] ~= nil
		then return ColorGradient(((kirby.position.x[index]*256 + kirby.subpixel.x[index]) 
									- (branches[selectedbranch].position.x[index]* 256 + branches[selectedbranch].subpixel.x[index]))
									* sgn(branches[selectedbranch].velocity.x[index]), 256, index)
									
	elseif branches[selectedbranch] ~= nil and branches[selectedbranch].position.y[index] ~= nil and column == "Dy" and kirby.position.y[index] ~= nil and kirby.subpixel.y[index] ~= nil
		then return ColorGradient(((kirby.position.y[index]*256 + kirby.subpixel.y[index])
									- (branches[selectedbranch].position.y[index]* 256 + branches[selectedbranch].subpixel.y[index]))
									* sgn(branches[selectedbranch].velocity.y[index]), 256, index)	
	end

end

function Ungreen(index)

	if ungreenframe > index
	then ungreenframe = index
	end
	
end

function LoadFile(index)

	--Backup file for undo branch load
	SaveFile(-1)
	
	local file = io.open(movie.filename()..tostring(index)..".txt", "r")
	local i = 0
	
	if file ~= nil
	then for line in file:lines(1) do
			local s = {}
			s = bizstring.split(line, ";")
			
			--Use the same order as saving
			kirby.position.x[i] = tonumber(s[1])
			kirby.position.y[i] = tonumber(s[2])
			kirby.subpixel.x[i] = tonumber(s[3])
			kirby.subpixel.y[i] = tonumber(s[4])
			kirby.velocity.x[i] = tonumber(s[5])
			kirby.velocity.y[i] = tonumber(s[6])
			
			i = i + 1
		 end
		 file:close()
	end
	
end

function SaveFile(index)

	local file = io.open(movie.filename()..tostring(index)..".txt", "w+")
	
	for i = 0, movie.length(), 1 do
		file:write(tostring(kirby.position.x[i])..";"..
				   tostring(kirby.position.y[i])..";"..
				   tostring(kirby.subpixel.x[i])..";"..
				   tostring(kirby.subpixel.y[i])..";"..
				   tostring(kirby.velocity.x[i])..";"..
				   tostring(kirby.velocity.y[i]).."\n")
	end

	file:close()
	
end

function BranchLoad(index)

	LoadFile(index)

end

function deepcopy(orig)
    local orig_type = type(orig)
    local copy
    if orig_type == 'table' then
        copy = {}
        for orig_key, orig_value in next, orig, nil do
            copy[deepcopy(orig_key)] = deepcopy(orig_value)
        end
        setmetatable(copy, deepcopy(getmetatable(orig)))
    else -- number, string, boolean, etc
        copy = orig
    end
    return copy
end

function BranchSave(index)

	if index >= 0
	then kirby_ = {position = {x = {}, y = {}}, 
		 		   subpixel = {x = {}, y = {}},
		 		   velocity = {x = {}, y = {}},
				  }
		 kirby_ = deepcopy(players)
		 branches[index+1] = kirby_
	end

	SaveFile(index)

end

function BranchRemove(index)

	table.remove(branches, index+1)

	local branches = tastudio.getbranches()
	
	os.remove(movie.filename()..tostring(index)..".txt")
	
	for i = index, table.getn(branches), 1 do
		os.rename(movie.filename()..tostring(i+1)..".txt", movie.filename()..tostring(i)..".txt")
	end

end

function LogData()

	kirby.position.x[frame] = memory.read_u8(0x0083) + memory.read_u8(0x0095)*256
	kirby.position.y[frame] = memory.read_u8(0x00B9) + memory.read_u8(0x00CB)*256
	
	kirby.subpixel.x[frame] = memory.read_u8(0x0071)
	kirby.subpixel.y[frame] = memory.read_u8(0x00A7)
	
	kirby.velocity.x[frame] = memory.read_s16_le(0x05B9)
	kirby.velocity.y[frame] = memory.read_s16_le(0x05BD)
	
	--print("ASD");
	
end

function Exit()

	SaveFile(-2)

end

function FrameEnd()

	LogData()
	Draw()

end

memory.usememorydomain("RAM")

kirby = {position = {x = {}, y = {}}, 
		 subpixel = {x = {}, y = {}},
		 velocity = {x = {}, y = {}}
		}
	
branches = {}

tastudio.addcolumn("Xv", "Xv", 40)
tastudio.addcolumn("Yv", "Yv", 40)

tastudio.addcolumn("Dx", "Dx", 60)
tastudio.addcolumn("Dy", "Dy", 60)

ungreenframe = 0

tastudio.onqueryitemtext(TAStudioText)
tastudio.onqueryitembg(TAStudioColor)
tastudio.ongreenzoneinvalidated(Ungreen)

tastudio.onbranchsave(BranchSave)
tastudio.onbranchload(BranchLoad)
tastudio.onbranchremove(BranchRemove)

event.onexit(Exit)
event.onframeend(FrameEnd)

selectedbranch = 1

for index = 1, table.getn(tastudio.getbranches())+1, 1 do

	kirby_ = {position = {x = {}, y = {}}, 
			  subpixel = {x = {}, y = {}},
			  velocity = {x = {}, y = {}},
			 }

	local file = io.open(movie.filename()..tostring(index-1)..".txt", "r")
	local i = 0
	
	if file ~= nil
	then for line in file:lines(1) do
			local s = {}
			s = bizstring.split(line, ";")
			
			--Use the same order as saving
			kirby_.position.x[i] = tonumber(s[1])
			kirby_.position.y[i] = tonumber(s[2])
			kirby_.subpixel.x[i] = tonumber(s[3])
			kirby_.subpixel.y[i] = tonumber(s[4])
			kirby_.velocity.x[i] = tonumber(s[5])
			kirby_.velocity.y[i] = tonumber(s[6])
			       
			i = i + 1
		 end
		 branches[index] = kirby_
		 file:close()
	end

end

LoadFile(-2)

while true do

	frame = emu.framecount()

	if frame > ungreenframe
	then ungreenframe = frame
	end
	
	wasinp = inp
	inp = input.get()
	
	if inp["P"] and wasinp["P"] == nil and selectedbranch <= table.getn(tastudio.getbranches())
	then selectedbranch = selectedbranch + 1
	elseif inp["M"] and wasinp["M"] == nil and selectedbranch > 1
	then selectedbranch = selectedbranch - 1
	end

	lag = memory.read_u8(0x01a5)
	if (lag ==1)
	then emu.setislagged()
		tastudio.setlag(emu.framecount(), true)
	else emu.setislagged(false)
		tastudio.setlag(emu.framecount(), false)
	end
	
	gui.pixelText(0, 160, "B:"..selectedbranch)
	LogData()
	Draw()
	
	emu.yield()
	
end