local POINT_RAD = 2
local POINT_RAD_PREVIOUS = 1
local TILT_MOVE_GRID = 10
local EDGE_MOVE_LIMIT = 90
local ENABLE_TILT_ARROW = true
local ENABLE_CLICK = false
local ENABLE_JOYPAD = true
local TILT_MOVE_UP = "Up"
local TILT_MOVE_DOWN = "Down"
local TILT_MOVE_LEFT = "Left"
local TILT_MOVE_RIGHT = "Right"
local TILT_MOVE_CENTER = "Home"
local TILT_MOVE_PREVIOUS = "End"
local TILT_UP_ONE = "Ctrl+Up"
local TILT_DOWN_ONE = "Ctrl+Down"
local TILT_LEFT_ONE = "Ctrl+Left"
local TILT_RIGHT_ONE = "Ctrl+Right"
local TILT_UP_LAST = "Ctrl+Shift+Up"
local TILT_DOWN_LAST = "Ctrl+Shift+Down"
local TILT_LEFT_LAST = "Ctrl+Shift+Left"
local TILT_RIGHT_LAST = "Ctrl+Shift+Right"
local TILT_POP_TOGGLE = "PageDown"
local SCRIPT_NAME = "KTnT_TAS"
local INPUT_TILTX = "P1 Tilt X"
local INPUT_TILTY = "P1 Tilt Y"
local INFO_OFS_X = 216
local INFO_OFS_Y = 12
local INFO_ROW_HEIGHT = 16
local EXPADDING_TOP = 64
local EXPADDING_BOTTOM = 64
local EXPADDING_LEFT = 32
local EXPADDING_RIGHT = 220
local TILT_INPUT_PADDING = 20
local AXIS_SIZE = 90
local TILT_ARROW_SCALE = 0.38
local TILT_ARROW_MAX = 100
local POP_RANGE = 18
local NON_POP_RANGE = 17
local controllerEnable = false
local keyMoveUp = {key = TILT_MOVE_UP, current = false, previous = false, pressed = false}
local keyMoveDown = {key = TILT_MOVE_DOWN, current = false, previous = false, pressed = false}
local keyMoveLeft = {key = TILT_MOVE_LEFT, current = false, previous = false, pressed = false}
local keyMoveRight = {key = TILT_MOVE_RIGHT, current = false, previous = false, pressed = false}
local keyMoveCenter = {key = TILT_MOVE_CENTER, current = false, previous = false, pressed = false}
local keyMovePrevious = {key = TILT_MOVE_PREVIOUS, current = false, previous = false, pressed = false}
local keyUpOne = {key = TILT_UP_ONE, current = false, previous = false}
local keyDownOne = {key = TILT_DOWN_ONE, current = false, previous = false}
local keyLeftOne = {key = TILT_LEFT_ONE, current = false, previous = false}
local keyRightOne = {key = TILT_RIGHT_ONE, current = false, previous = false}
local keyUpLast = {key = TILT_UP_LAST, current = false, previous = false}
local keyDownLast = {key = TILT_DOWN_LAST, current = false, previous = false}
local keyLeftLast = {key = TILT_LEFT_LAST, current = false, previous = false}
local keyRightLast = {key = TILT_RIGHT_LAST, current = false, previous = false}
local keyPopToggle = {key = TILT_POP_TOGGLE, current = false, previous = false}
local tiltX = 0
local tiltY = 0
local tiltX_ofs = 0
local tiltY_ofs = 0
local tiltX_previous = 0
local tiltY_previous = 0
local tiltOutX = 0
local tiltOutY = 0
local saveXinput = {key = SCRIPT_NAME .. "_Xinput", value = 0}
local saveYinput = {key = SCRIPT_NAME .. "_Yinput", value = 0}
if client.getwindowsize() <= 1 then
client.setwindowsize(2)
end
memory.usememorydomain("System Bus")
function checkPreviousFrame()
local check = false
if movie.mode() == "PLAY" or movie.mode() == "RECORD" then
if emu.framecount() >= 1 then
check = true
end
end
return check
end
function adjustGridCalc(tilt, isAdd)
local adjustedTilt
local div = tilt / TILT_MOVE_GRID
local multi = 0
if isAdd then
multi = math.floor(div + 1)
else
multi = math.ceil(div - 1)
end
adjustedTilt = multi * TILT_MOVE_GRID
return adjustedTilt
end
function tiltConvertor(tiltOut, tiltFlat)
local convTilt = math.floor((tiltOut - tiltFlat) / 16)
return convTilt
end
function clampTilt(tilt)
if tilt < -90 then
tilt = -90
elseif tilt > 90 then
tilt = 90
end
return tilt
end
function clampTiltLimit(tilt)
if tilt < -EDGE_MOVE_LIMIT then
tilt = -EDGE_MOVE_LIMIT
elseif tilt > EDGE_MOVE_LIMIT then
tilt = EDGE_MOVE_LIMIT
end
return tilt
end
function isKeyPressed(keyTable, inputTable)
local input = false
if inputTable[keyTable["key"]] then
input = true
end
keyTable["current"] = input
keyTable["pressed"] = keyTable["current"]
if keyTable["previous"] then
keyTable["pressed"] = false
end
keyTable["previous"] = keyTable["current"]
return input
end
function controllerDetecter(getInput)
local controllerTilted = false
if getInput["P1 Tilt X"] ~= 0 or getInput["P1 Tilt Y"] ~= 0 then
controllerTilted = true
end
return controllerTilted
end
function tiltMoveTop(tiltY_ofs, tiltY_previous)
if movie.isloaded() then
if tiltY_ofs > tiltY_previous + NON_POP_RANGE then
tiltY_ofs = tiltY_previous + NON_POP_RANGE
elseif tiltY_ofs > tiltY_previous - NON_POP_RANGE then
tiltY_ofs = tiltY_previous - NON_POP_RANGE
else
tiltY_ofs = -EDGE_MOVE_LIMIT
end
else
tiltY_ofs = -EDGE_MOVE_LIMIT
end
if tiltY_ofs < -EDGE_MOVE_LIMIT then
tiltY_ofs = -EDGE_MOVE_LIMIT
end
return tiltY_ofs
end
function tiltMoveLeftEnd(tiltX_ofs)
tiltX_ofs = -EDGE_MOVE_LIMIT
return tiltX_ofs
end
function tiltMoveRightEnd(tiltX_ofs)
tiltX_ofs = EDGE_MOVE_LIMIT
return tiltX_ofs
end
function tiltMoveBottom(tiltY_ofs, tiltY_previous)
if movie.isloaded() then
if tiltY_ofs < tiltY_previous - NON_POP_RANGE then
tiltY_ofs = tiltY_previous - NON_POP_RANGE
elseif tiltY_ofs < tiltY_previous + NON_POP_RANGE then
tiltY_ofs = tiltY_previous + NON_POP_RANGE
else
tiltY_ofs = EDGE_MOVE_LIMIT
end
else
tiltY_ofs = EDGE_MOVE_LIMIT
end
if tiltY_ofs > EDGE_MOVE_LIMIT then
tiltY_ofs = EDGE_MOVE_LIMIT
end
return tiltY_ofs
end
function tiltMoveCenter(tiltX_ofs, tiltY_ofs)
tiltX_ofs = 0
tiltY_ofs = 0
return tiltX_ofs, tiltY_ofs
end
function tiltMovePrevious()
if checkPreviousFrame() then
tiltX_ofs = tiltX_previous
tiltY_ofs = tiltY_previous
else
gui.addmessage("Movie not loaded")
end
end
function tiltMoveUp(tiltY_ofs)
tiltY_ofs = adjustGridCalc(tiltY_ofs, false)
tiltY_ofs = clampTiltLimit(tiltY_ofs)
return tiltY_ofs
end
function tiltMoveLeft(tiltX_ofs)
tiltX_ofs = adjustGridCalc(tiltX_ofs, false)
tiltX_ofs = clampTiltLimit(tiltX_ofs)
return tiltX_ofs
end
function tiltMoveRight(tiltX_ofs)
tiltX_ofs = adjustGridCalc(tiltX_ofs, true)
tiltX_ofs = clampTiltLimit(tiltX_ofs)
return tiltX_ofs
end
function tiltMoveDown(tiltY_ofs)
tiltY_ofs = adjustGridCalc(tiltY_ofs, true)
tiltY_ofs = clampTiltLimit(tiltY_ofs)
return tiltY_ofs
end
function tiltMoveUpOne(tiltY_ofs)
tiltY_ofs = tiltY_ofs - 1
tiltY_ofs = clampTiltLimit(tiltY_ofs)
return tiltY_ofs
end
function tiltMoveLeftOne(tiltX_ofs)
tiltX_ofs = tiltX_ofs - 1
tiltX_ofs = clampTiltLimit(tiltX_ofs)
return tiltX_ofs
end
function tiltMoveRightOne(tiltX_ofs)
tiltX_ofs = tiltX_ofs + 1
tiltX_ofs = clampTiltLimit(tiltX_ofs)
return tiltX_ofs
end
function tiltMoveDownOne(tiltY_ofs)
tiltY_ofs = tiltY_ofs + 1
tiltY_ofs = clampTiltLimit(tiltY_ofs)
return tiltY_ofs
end
function drawTilt(tiltAreaX, tiltAreaY, winSize, tiltX, tiltY, pointRad, color)
local tiltXpos = tiltAreaX + TILT_INPUT_PADDING + 90 + tiltX
local tiltYpos = tiltAreaY + TILT_INPUT_PADDING + 90 + tiltY
gui.drawEllipse(tiltXpos - pointRad * winSize, tiltYpos - pointRad * winSize, pointRad * winSize * 2, pointRad * winSize * 2, color, color)
end
function drawTiltArrow(tiltAreaCentralX, tiltAreaCentralY, tiltOutX, tiltOutY, color)
local arrowHeadLengthRatio = 0.2
local arrowHeadWidthRatio = 0.1
local arrowShaftWidthRatio = 0.05
local tiltXpos = tiltOutX * TILT_ARROW_SCALE
local tiltYpos = tiltOutY * TILT_ARROW_SCALE
local tiltScalor = math.sqrt(tiltXpos * tiltXpos + tiltYpos * tiltYpos)
if tiltScalor > TILT_ARROW_MAX then
tiltXpos = tiltXpos * (TILT_ARROW_MAX / tiltScalor)
tiltYpos = tiltYpos * (TILT_ARROW_MAX / tiltScalor)
end
arrowPolygon = {}
arrowPolygon[1] = {0, 0}
arrowPolygon[2] = {math.floor(tiltXpos * (1 - arrowHeadLengthRatio) + tiltYpos * arrowShaftWidthRatio),
math.floor(tiltYpos * (1 - arrowHeadLengthRatio) - tiltXpos * arrowShaftWidthRatio)}
arrowPolygon[3] = {math.floor(tiltXpos * (1 - arrowHeadLengthRatio) + tiltYpos * arrowHeadWidthRatio),
math.floor(tiltYpos * (1 - arrowHeadLengthRatio) - tiltXpos * arrowHeadWidthRatio)}
arrowPolygon[4] = {math.floor(tiltXpos), math.floor(tiltYpos)}
arrowPolygon[5] = {math.floor(tiltXpos * (1 - arrowHeadLengthRatio) - tiltYpos * arrowHeadWidthRatio),
math.floor(tiltYpos * (1 - arrowHeadLengthRatio) + tiltXpos * arrowHeadWidthRatio)}
arrowPolygon[6] = {math.floor(tiltXpos * (1 - arrowHeadLengthRatio) - tiltYpos * arrowShaftWidthRatio),
math.floor(tiltYpos * (1 - arrowHeadLengthRatio) + tiltXpos * arrowShaftWidthRatio)}
gui.drawPolygon(arrowPolygon, tiltAreaCentralX, tiltAreaCentralY, color, color)
end
function onLoadState()
tiltX_ofs, tiltY_ofs = tiltMoveCenter(tiltX_ofs, tiltY_ofs)
if userdata.containskey(saveXinput.key)
and userdata.containskey(saveYinput.key)
then
tiltX_ofs = userdata.get(saveXinput.key)
tiltY_ofs = userdata.get(saveYinput.key)
elseif checkPreviousFrame() then
tiltMovePrevious()
end
end
event.onloadstate(onLoadState)
function onExit()
gui.clearGraphics()
gui.cleartext()
client.SetGameExtraPadding(0, 0, 0, 0)
end
event.onexit(onExit)
while true do
gui.clearGraphics()
gui.cleartext()
local winSize = client.getwindowsize()
client.SetGameExtraPadding(EXPADDING_LEFT, EXPADDING_TOP, EXPADDING_RIGHT, EXPADDING_BOTTOM)
local tiltY_sub = 0
local existPrevFrame = checkPreviousFrame()
local getInput = joypad.getimmediate()
if controllerDetecter(getInput) and ENABLE_JOYPAD and not controllerEnable then
controllerEnable = true
gui.addmessage("Controller tilt enabled.")
end
local memory_Xpos = memory.read_s16_be(0xFFA5)
local memory_Xspx = memory.read_u8(0xFFA7)
local memory_Zpos = memory.read_s16_be(0xFFA8)
local memory_Zspx = memory.read_u8(0xFFAA)
local memory_Ypos = memory.read_s16_be(0xFFAB)
local memory_Yspx = memory.read_u8(0xFFAD)
local memory_Xspd = memory.read_s16_be(0xFFD2)
local memory_Zspd = memory.read_s16_be(0xFFD4)
local memory_Yspd = memory.read_s16_be(0xFFD6)
local memory_tiltOutX = memory.read_u16_be(0xFFF3)
local memory_tiltOutY = memory.read_u16_be(0xFFF5)
local memory_tiltFlatX = memory.read_u16_be(0xFFF7)
local memory_tiltFlatY = memory.read_u16_be(0xFFF9)
local stopTime = memory.read_s16_be(0xE28C)
tiltOutX = tiltConvertor(memory_tiltOutX, memory_tiltFlatX)
tiltOutY = tiltConvertor(memory_tiltOutY, memory_tiltFlatY)
local group1_x = INFO_OFS_X + 0
local group1_y = INFO_OFS_Y + 0
local group1_indent = 24
local memory_Xpos_db = string.format("%d:%03d", memory_Xpos, memory_Xspx)
local memory_Zpos_db = string.format("%d:%03d", memory_Zpos, memory_Zspx)
local memory_Ypos_db = string.format("%d:%03d", memory_Ypos, memory_Yspx)
gui.text(group1_x, group1_y + INFO_ROW_HEIGHT * 0, "- Position -", "white")
gui.text(group1_x, group1_y + INFO_ROW_HEIGHT * 1, "X:", "red")
gui.text(group1_x + group1_indent, group1_y + INFO_ROW_HEIGHT * 1, memory_Xpos_db, "white");
gui.text(group1_x, group1_y + INFO_ROW_HEIGHT * 2, "Z:", "blue")
gui.text(group1_x + group1_indent, group1_y + INFO_ROW_HEIGHT * 2, memory_Zpos_db, "white");
gui.text(group1_x, group1_y + INFO_ROW_HEIGHT * 3, "Y:", "green")
gui.text(group1_x + group1_indent, group1_y + INFO_ROW_HEIGHT * 3, memory_Ypos_db, "white");
local group2_x = INFO_OFS_X + 144
local group2_y = INFO_OFS_Y + 0
local group2_indent = 24
gui.text(group2_x, group2_y + INFO_ROW_HEIGHT * 0, "- Speed -", "white")
gui.text(group2_x, group2_y + INFO_ROW_HEIGHT * 1, "X:", "red")
gui.text(group2_x + group2_indent, group2_y + INFO_ROW_HEIGHT * 1, memory_Xspd, "white");
gui.text(group2_x, group2_y + INFO_ROW_HEIGHT * 2, "Z:", "blue")
gui.text(group2_x + group2_indent, group2_y + INFO_ROW_HEIGHT * 2, memory_Zspd, "white");
gui.text(group2_x, group2_y + INFO_ROW_HEIGHT * 3, "Y:", "green")
gui.text(group2_x + group2_indent, group2_y + INFO_ROW_HEIGHT * 3, memory_Yspd, "white");
local group3_x = INFO_OFS_X + 256
local group3_y = INFO_OFS_Y + 0
gui.text(group3_x, group3_y + INFO_ROW_HEIGHT * 0, "- Other -", "white")
gui.text(group3_x, group3_y + INFO_ROW_HEIGHT * 1, "StopTime:", "white")
gui.text(group3_x + 92, group3_y + INFO_ROW_HEIGHT * 1, stopTime, "white");
local pressedTable = {}
local mouseL = input.getmouse().Left
table.insert(pressedTable, mouseL)
local inputTable = input.get()
table.insert(pressedTable, isKeyPressed(keyUpOne, inputTable))
table.insert(pressedTable, isKeyPressed(keyDownOne, inputTable))
table.insert(pressedTable, isKeyPressed(keyLeftOne, inputTable))
table.insert(pressedTable, isKeyPressed(keyRightOne, inputTable))
table.insert(pressedTable, isKeyPressed(keyMoveUp, inputTable))
table.insert(pressedTable, isKeyPressed(keyMoveDown, inputTable))
table.insert(pressedTable, isKeyPressed(keyMoveLeft, inputTable))
table.insert(pressedTable, isKeyPressed(keyMoveRight, inputTable))
table.insert(pressedTable, isKeyPressed(keyMoveCenter, inputTable))
table.insert(pressedTable, isKeyPressed(keyMovePrevious, inputTable))
table.insert(pressedTable, isKeyPressed(keyUpLast, inputTable))
table.insert(pressedTable, isKeyPressed(keyDownLast, inputTable))
table.insert(pressedTable, isKeyPressed(keyLeftLast, inputTable))
table.insert(pressedTable, isKeyPressed(keyRightLast, inputTable))
table.insert(pressedTable, isKeyPressed(keyPopToggle, inputTable))
for i, value in pairs(pressedTable) do
if value and controllerEnable then
controllerEnable = false
gui.addmessage("Controller tilt disabled.")
end
end
local tiltAreaX = EXPADDING_LEFT + client.bufferwidth() + EXPADDING_RIGHT - (AXIS_SIZE + TILT_INPUT_PADDING) * 2
local tiltAreaY = EXPADDING_TOP + client.bufferheight() + EXPADDING_BOTTOM - (AXIS_SIZE + TILT_INPUT_PADDING) * 2
local tiltAreaCentralX = tiltAreaX + TILT_INPUT_PADDING + AXIS_SIZE
local tiltAreaCentralY = tiltAreaY + TILT_INPUT_PADDING + AXIS_SIZE
for i = TILT_MOVE_GRID, AXIS_SIZE, TILT_MOVE_GRID do
gui.drawLine(tiltAreaCentralX + i, tiltAreaCentralY - AXIS_SIZE, tiltAreaCentralX + i, tiltAreaCentralY + AXIS_SIZE, "#333333")
gui.drawLine(tiltAreaCentralX - AXIS_SIZE, tiltAreaCentralY + i, tiltAreaCentralX + AXIS_SIZE, tiltAreaCentralY + i, "#333333")
gui.drawLine(tiltAreaCentralX - i, tiltAreaCentralY - AXIS_SIZE, tiltAreaCentralX - i, tiltAreaCentralY + AXIS_SIZE, "#333333")
gui.drawLine(tiltAreaCentralX - AXIS_SIZE, tiltAreaCentralY - i, tiltAreaCentralX + AXIS_SIZE, tiltAreaCentralY - i, "#333333")
end
gui.drawRectangle(tiltAreaCentralX - EDGE_MOVE_LIMIT, tiltAreaCentralY - EDGE_MOVE_LIMIT, EDGE_MOVE_LIMIT * 2, EDGE_MOVE_LIMIT * 2, "#999999")
gui.drawAxis(tiltAreaCentralX, tiltAreaCentralY, AXIS_SIZE, "blue")
gui.drawRectangle(tiltAreaCentralX - AXIS_SIZE, tiltAreaCentralY - AXIS_SIZE, AXIS_SIZE * 2, AXIS_SIZE * 2, "#FFFFFF")
gui.pixelText(tiltAreaCentralX - AXIS_SIZE - 18, tiltAreaCentralY - 3, "X-90")
gui.pixelText(tiltAreaCentralX + AXIS_SIZE + 2, tiltAreaCentralY - 3, "X+90")
gui.pixelText(tiltAreaCentralX - 7, tiltAreaCentralY - AXIS_SIZE - 7, "Y-90")
gui.pixelText(tiltAreaCentralX - 7, tiltAreaCentralY + AXIS_SIZE + 1, "Y+90")
if controllerEnable then
tiltX, tiltY = getInput["P1 Tilt X"], getInput["P1 Tilt Y"]
else
inputTable[INPUT_TILTX] = 0
inputTable[INPUT_TILTY] = 0
joypad.setanalog(inputTable)
if keyMoveCenter["pressed"] then
tiltX_ofs, tiltY_ofs = tiltMoveCenter(tiltX_ofs, tiltY_ofs)
end
if keyMovePrevious["pressed"] then
tiltMovePrevious()
end
if keyUpOne["pressed"] then
tiltY_ofs = tiltMoveUpOne(tiltY_ofs)
elseif keyMoveUp["pressed"] then
tiltY_ofs = tiltMoveUp(tiltY_ofs)
end
if keyLeftOne["pressed"] then
tiltX_ofs = tiltMoveLeftOne(tiltX_ofs)
elseif keyMoveLeft["pressed"] then
tiltX_ofs = tiltMoveLeft(tiltX_ofs)
end
if keyRightOne["pressed"] then
tiltX_ofs = tiltMoveRightOne(tiltX_ofs)
elseif keyMoveRight["pressed"] then
tiltX_ofs = tiltMoveRight(tiltX_ofs)
end
if keyDownOne["pressed"] then
tiltY_ofs = tiltMoveDownOne(tiltY_ofs)
elseif keyMoveDown["pressed"] then
tiltY_ofs = tiltMoveDown(tiltY_ofs)
end
if keyUpLast["pressed"] then
tiltY_ofs = tiltMoveTop(tiltY_ofs, tiltY_previous)
end
if keyLeftLast["pressed"] then
tiltX_ofs = tiltMoveLeftEnd(tiltX_ofs)
end
if keyRightLast["pressed"] then
tiltX_ofs = tiltMoveRightEnd(tiltX_ofs)
end
if keyDownLast["pressed"] then
tiltY_ofs = tiltMoveBottom(tiltY_ofs, tiltY_previous)
end
if keyPopToggle["current"] then
tiltY_sub = POP_RANGE
end
if mouseL and ENABLE_CLICK then
local tiltMouseX = input.getmouse().X - (tiltAreaX - EXPADDING_LEFT + TILT_INPUT_PADDING)
local tiltMouseY = input.getmouse().Y - (tiltAreaY - EXPADDING_TOP + TILT_INPUT_PADDING)
if tiltMouseX >= -TILT_INPUT_PADDING and tiltMouseX <= (TILT_INPUT_PADDING + AXIS_SIZE) * 2 then
if tiltMouseY >= -TILT_INPUT_PADDING and tiltMouseY <= (TILT_INPUT_PADDING + AXIS_SIZE) * 2 then
tiltX_ofs = math.floor(tiltMouseX - 90 + 0.5)
tiltY_ofs = math.floor(tiltMouseY - 90 + 0.5)
end
end
end
tiltX = tiltX_ofs
tiltY = tiltY_ofs + tiltY_sub
tiltX = clampTilt(tiltX)
tiltY = clampTilt(tiltY)
end
gui.text((tiltAreaX + TILT_INPUT_PADDING) * winSize, (tiltAreaY + TILT_INPUT_PADDING) * winSize - 50, "TILT IN: ", "#FFFFFF")
gui.text((tiltAreaX + TILT_INPUT_PADDING) * winSize + 100, (tiltAreaY + TILT_INPUT_PADDING) * winSize - 50, "X: " .. tiltX .. " Y: " .. tiltY, "#FF6666")
gui.text((tiltAreaX + TILT_INPUT_PADDING) * winSize, (tiltAreaY + TILT_INPUT_PADDING) * winSize - 32, "TILT OUT: ", "#FFFFFF")
gui.text((tiltAreaX + TILT_INPUT_PADDING) * winSize + 100, (tiltAreaY + TILT_INPUT_PADDING) * winSize - 32, "X: " .. tiltOutX .. " Y: " .. tiltOutY, "#FF6666")
if checkPreviousFrame() then
gui.text((tiltAreaX + TILT_INPUT_PADDING + (AXIS_SIZE * 2)) * winSize - 128, (tiltAreaY + TILT_INPUT_PADDING) * winSize - 50, "X: " .. tiltX_previous .. " Y: " .. tiltY_previous, "#00FF00")
end
if ENABLE_TILT_ARROW then
drawTiltArrow(tiltAreaCentralX, tiltAreaCentralY, tiltOutX, tiltOutY, "#CCFF3333")
end
local tiltColor = "#FF6666"
if tiltX == 0 and tiltY == 0 then
tiltColor = "#0000FF"
end
if existPrevFrame and movie.getreadonly() == false then
if tiltY < tiltY_previous - NON_POP_RANGE or tiltY > tiltY_previous + NON_POP_RANGE then
tiltColor = "#FF0000"
end
end
drawTilt(tiltAreaX, tiltAreaY, winSize, tiltX, tiltY, POINT_RAD, tiltColor)
if existPrevFrame then
local inputPrevious = movie.getinput(emu.framecount() - 1)
tiltX_previous = inputPrevious[INPUT_TILTX]
tiltY_previous = inputPrevious[INPUT_TILTY]
drawTilt(tiltAreaX, tiltAreaY, winSize, tiltX_previous, tiltY_previous, POINT_RAD_PREVIOUS, "#00FF00")
if movie.getreadonly() == false then
local nonPopTopY = tiltAreaCentralY + tiltY_previous - NON_POP_RANGE
if nonPopTopY < tiltAreaY + TILT_INPUT_PADDING then
nonPopTopY = tiltAreaY + TILT_INPUT_PADDING
end
local nonPopBottomY = tiltAreaCentralY + tiltY_previous + NON_POP_RANGE
if nonPopBottomY > tiltAreaCentralY * 2 then
nonPopBottomY = tiltAreaCentralY * 2
end
gui.drawLine(tiltAreaX + TILT_INPUT_PADDING, nonPopTopY, tiltAreaCentralX * 2, nonPopTopY, "#006600")
gui.drawLine(tiltAreaX + TILT_INPUT_PADDING, nonPopBottomY, tiltAreaCentralX * 2, nonPopBottomY, "#006600")
end
end
inputTable[INPUT_TILTX] = tiltX
inputTable[INPUT_TILTY] = tiltY
joypad.setanalog(inputTable)
saveXinput.value = tiltX_ofs
saveYinput.value = tiltY_ofs
userdata.set(saveXinput.key, saveXinput.value)
userdata.set(saveYinput.key, saveYinput.value)
emu.yield()
end