app: Update for latest lpp-vita

This commit is contained in:
Michal Chvíla 2019-08-23 01:18:29 +02:00
parent 50160454fc
commit 9227503bef

View File

@ -5,257 +5,257 @@ System.createDirectory("ux0:/data/TrackPlugArchive")
-- Scanning TrackPlug folder
local tbl = System.listDirectory("ux0:/data/TrackPlug")
if tbl == nil then
tbl = {}
tbl = {}
end
-- Convert a 32 bit binary string to a integer
function bin2int(str)
local b1, b2, b3, b4 = string.byte(str, 1, 4)
return (b4 << 24) + (b3 << 16) + (b2 << 8) + b1
local b1, b2, b3, b4 = string.byte(str, 1, 4)
return bit32.lshift(b4, 24) + bit32.lshift(b3, 16) + bit32.lshift(b2, 8) + b1
end
-- Format raw time data
function FormatTime(val)
local minutes = math.floor(val/60)
local seconds = val%60
local hours = math.floor(minutes/60)
local minutes = minutes%60
local res = ""
if hours > 0 then
res = hours .. "h "
end
if minutes > 0 then
res = res .. minutes .. "m "
end
res = res .. seconds .. "s "
return res
local minutes = math.floor(val/60)
local seconds = val%60
local hours = math.floor(minutes/60)
local minutes = minutes%60
local res = ""
if hours > 0 then
res = hours .. "h "
end
if minutes > 0 then
res = res .. minutes .. "m "
end
res = res .. seconds .. "s "
return res
end
-- Recover title from homebrew database
function recoverTitle(tid)
local file = System.openFile("ux0:/data/TrackPlugArchive/" .. tid .. ".txt", FREAD)
fsize = System.sizeFile(file)
local title = System.readFile(file, fsize)
System.closeFile(file)
return title
local file = System.openFile("ux0:/data/TrackPlugArchive/" .. tid .. ".txt", FREAD)
fsize = System.sizeFile(file)
local title = System.readFile(file, fsize)
System.closeFile(file)
return title
end
-- Extracts title name from an SFO file
function extractTitle(file, tid)
local data = System.extractSFO(file)
if System.doesFileExist("ux0:/data/TrackPlugArchive/" .. tid .. ".txt") then
System.deleteFile("ux0:/data/TrackPlugArchive/" .. tid .. ".txt")
end
local file = System.openFile("ux0:/data/TrackPlugArchive/" .. tid .. ".txt", FCREATE)
System.writeFile(file, data.title, string.len(data.title))
System.closeFile(file)
return data.title
local data = System.extractSfo(file)
if System.doesFileExist("ux0:/data/TrackPlugArchive/" .. tid .. ".txt") then
System.deleteFile("ux0:/data/TrackPlugArchive/" .. tid .. ".txt")
end
local file = System.openFile("ux0:/data/TrackPlugArchive/" .. tid .. ".txt", FCREATE)
System.writeFile(file, data.title, string.len(data.title))
System.closeFile(file)
return data.title
end
function getRegion(titleid)
local regioncode = string.sub(titleid,1,4)
local prefix = string.sub(regioncode,1,2)
local region = "Unknown"
local regioncode = string.sub(titleid,1,4)
local prefix = string.sub(regioncode,1,2)
local region = "Unknown"
-- PSV common
if regioncode == "PCSA" or regioncode == "PCSE" then
region = "USA"
elseif regioncode == "PCSB" or regioncode == "PCSF" then
region = "Europe"
elseif regioncode == "PCSC" or regioncode == "PCSG" then
region = "Japan"
elseif regioncode == "PCSD" or regioncode == "PCSH" then
region = "Asia"
-- Physical & NP releases (PSV/PSP/PS1)
elseif prefix == "VC" or prefix == "VL" or
prefix == "UC" or prefix == "UL" or
prefix == "SC" or prefix == "SL" or
prefix == "NP" then
n1 = string.sub(regioncode,1,1)
n3 = string.sub(regioncode,3,3)
n4 = string.sub(regioncode,4,4)
if n3 == "A" then
region = "Asia"
elseif n3 == "C" then
region = "China"
elseif n3 == "E" then
region = "Europe"
elseif n3 == "H" then
region = "Hong Kong"
elseif n3 == "J" or n3 == "P" then
region = "Japan"
elseif n3 == "K" then
region = "Korea"
elseif n3 == "U" then
region = "USA"
end
-- PSV common
if regioncode == "PCSA" or regioncode == "PCSE" then
region = "USA"
elseif regioncode == "PCSB" or regioncode == "PCSF" then
region = "Europe"
elseif regioncode == "PCSC" or regioncode == "PCSG" then
region = "Japan"
elseif regioncode == "PCSD" or regioncode == "PCSH" then
region = "Asia"
-- Physical & NP releases (PSV/PSP/PS1)
elseif prefix == "VC" or prefix == "VL" or
prefix == "UC" or prefix == "UL" or
prefix == "SC" or prefix == "SL" or
prefix == "NP" then
n1 = string.sub(regioncode,1,1)
n3 = string.sub(regioncode,3,3)
n4 = string.sub(regioncode,4,4)
if n3 == "A" then
region = "Asia"
elseif n3 == "C" then
region = "China"
elseif n3 == "E" then
region = "Europe"
elseif n3 == "H" then
region = "Hong Kong"
elseif n3 == "J" or n3 == "P" then
region = "Japan"
elseif n3 == "K" then
region = "Korea"
elseif n3 == "U" then
region = "USA"
end
if n1 == "S" then
region = region .. " (PS1)"
elseif n1 == "U" or
(prefix == "NP" and (n4 == "G" or n4 == "H")) then
region = region .. " (PSP)"
elseif prefix == "NP" then
if n4 == "E" or n4 == "F" then
region = region .. " (PS1 - PAL)"
elseif n4 == "I" or n4 == "J" then
region = region .. " (PS1 - NTSC)"
end
end
elseif prefix == "PE" then
region = "Europe (PS1)"
elseif prefix == "PT" then
region = "Asia (PS1)"
elseif prefix == "PU" then
region = "USA (PS1)"
elseif string.sub(file.name,1,6) == "PSPEMU" then
region = "PSP/PS1"
end
if n1 == "S" then
region = region .. " (PS1)"
elseif n1 == "U" or
(prefix == "NP" and (n4 == "G" or n4 == "H")) then
region = region .. " (PSP)"
elseif prefix == "NP" then
if n4 == "E" or n4 == "F" then
region = region .. " (PS1 - PAL)"
elseif n4 == "I" or n4 == "J" then
region = region .. " (PS1 - NTSC)"
end
end
elseif prefix == "PE" then
region = "Europe (PS1)"
elseif prefix == "PT" then
region = "Asia (PS1)"
elseif prefix == "PU" then
region = "USA (PS1)"
elseif string.sub(file.name,1,6) == "PSPEMU" then
region = "PSP/PS1"
end
return region
return region
end
-- Loading unknown icon
local unk = Graphics.loadImage("app0:/unk.png")
-- Getting region, playtime, icon and title name for any game
for i, file in pairs(tbl) do
if file.name == "config.lua" then
dofile("ux0:/data/TrackPlug/"..file.name)
cfg_idx = i
else
local titleid = string.sub(file.name,1,-5)
file.region = getRegion(titleid)
if file.name == "config.lua" then
dofile("ux0:/data/TrackPlug/"..file.name)
cfg_idx = i
else
local titleid = string.sub(file.name,1,-5)
file.region = getRegion(titleid)
if System.doesFileExist("ur0:/appmeta/" .. titleid .. "/icon0.png") then
file.icon = Graphics.loadImage("ur0:/appmeta/" .. titleid .. "/icon0.png")
else
file.icon = unk
end
if System.doesFileExist("ux0:/data/TrackPlugArchive/" .. titleid .. ".txt") then
file.title = recoverTitle(titleid)
elseif System.doesFileExist("ux0:/app/" .. titleid .. "/sce_sys/param.sfo") then
file.title = extractTitle("ux0:/app/" .. titleid .. "/sce_sys/param.sfo", titleid)
else
file.title = "Unknown Title"
end
file.id = titleid
fd = System.openFile("ux0:/data/TrackPlug/" .. file.name, FREAD)
file.rtime = bin2int(System.readFile(fd, 4))
file.ptime = FormatTime(file.rtime)
System.closeFile(fd)
end
if System.doesFileExist("ur0:/appmeta/" .. titleid .. "/icon0.png") then
file.icon = Graphics.loadImage("ur0:/appmeta/" .. titleid .. "/icon0.png")
else
file.icon = unk
end
if System.doesFileExist("ux0:/data/TrackPlugArchive/" .. titleid .. ".txt") then
file.title = recoverTitle(titleid)
elseif System.doesFileExist("ux0:/app/" .. titleid .. "/sce_sys/param.sfo") then
file.title = extractTitle("ux0:/app/" .. titleid .. "/sce_sys/param.sfo", titleid)
else
file.title = "Unknown Title"
end
file.id = titleid
fd = System.openFile("ux0:/data/TrackPlug/" .. file.name, FREAD)
file.rtime = bin2int(System.readFile(fd, 4))
file.ptime = FormatTime(file.rtime)
System.closeFile(fd)
end
end
if cfg_idx ~= nil then
table.remove(tbl, cfg_idx)
table.remove(tbl, cfg_idx)
end
-- Background wave effect
local colors = {
{Color.new(0,132,255), Color.new(72,185,255), Color.new(0,132,255)}, -- Cyan
{Color.new(255,132,0), Color.new(255,185,72), Color.new(255,132,0)}, -- Orange
{Color.new(255,72,72), Color.new(255,132,132), Color.new(255,72,72)}, -- Pink
{Color.new(255,0,0), Color.new(255,72,72), Color.new(255,0,0)}, -- Red
{Color.new(255,72,255), Color.new(255,185,255), Color.new(255,72,255)}, -- Magenta
{Color.new(72,72,72), Color.new(0,0,0), Color.new(0,255,0)} -- Black'N'Green
{Color.new(0,132,255), Color.new(72,185,255), Color.new(0,132,255)}, -- Cyan
{Color.new(255,132,0), Color.new(255,185,72), Color.new(255,132,0)}, -- Orange
{Color.new(255,72,72), Color.new(255,132,132), Color.new(255,72,72)}, -- Pink
{Color.new(255,0,0), Color.new(255,72,72), Color.new(255,0,0)}, -- Red
{Color.new(255,72,255), Color.new(255,185,255), Color.new(255,72,255)}, -- Magenta
{Color.new(72,72,72), Color.new(0,0,0), Color.new(0,255,0)} -- Black'N'Green
}
if col_idx == nil then
col_idx = 6
col_idx = 6
end
local function LoadWave(height,dim,f,style,x_dim)
if style == 1 then
f=f or 0.1
local onda={pi=math.pi,Frec=f,Long_onda=dim,Amplitud=height}
function onda:color(a,b,c) self.a=a self.b=b self.c=c end
function onda:init(desfase)
desfase=desfase or 0
if not self.contador then
self.contador=Timer.new()
end
if not self.a or not self.b or not self.c then
self.a = 0
self.b = 0
self.c = 255
end
local t,x,y,i
t = Timer.getTime(self.contador)/1000+desfase
for x = 0,x_dim,4 do
y = 252+self.Amplitud*math.sin(2*self.pi*(t*self.Frec-x/self.Long_onda))
i = self.Amplitud*(-2*self.pi/self.Long_onda)*math.cos(2*self.pi*(t*self.Frec-x/self.Long_onda))
Graphics.drawLine(x-200,x+200,y-i*200,y+i*200,Color.new(self.a,self.b,self.c,math.floor(x/40)))
end
collectgarbage()
end
function onda:destroy()
Timer.destroy(self.contador)
end
return onda
end
if style == 2 then
f=f or 0.1
local onda={pi=math.pi,Frec=f,Long_onda=dim,Amplitud=height}
function onda:color(a,b,c) self.a=a self.b=b self.c=c end
function onda:init(desfase)
desfase=desfase or 0
if not self.contador then
self.contador=Timer.new()
end
if not self.a or not self.b or not self.c then
self.a = 0
self.b = 0
self.c = 255
end
local t,x,y,i,a
t = Timer.getTime(self.contador)/1000+desfase
if self.Amplitud <= 5 then
self.aumento = true
elseif self.Amplitud >= 110 then
self.aumento = false
end
if self.aumento then
self.Amplitud = self.Amplitud+0.1
else
self.Amplitud = self.Amplitud-0.1
end
for x = 0,x_dim,10 do
y = 272+self.Amplitud*math.sin(2*self.pi*(t*self.Frec-x/self.Long_onda))
i = self.Amplitud*(-2*self.pi/self.Long_onda)*math.cos(2*self.pi*(t*self.Frec-x/self.Long_onda))
for a = -3,3 do
Graphics.drawLine(x-20,x+20,a+y-i*20,a+y+i*20,Color.new(self.a,self.b,self.c,25-math.abs(a*5)))
end
end
collectgarbage()
end
function onda:destroy()
Timer.destroy(self.contador)
end
return onda
end
if style == 3 then
f=f or 0.1
local onda={pi=math.pi,Frec=f,Long_onda=dim,Amplitud=height}
function onda:color(a,b,c) self.Color=Color.new(a,b,c,40) end
function onda:init(desfase)
desfase=desfase or 0
if not self.contador then
self.contador=Timer.new()
end
if not self.Color then
self.Color=Color.new(0,0,255,40)
end
local t,x,y,i
t = Timer.getTime(self.contador)/1000+desfase
for x = 0,x_dim do
y = 252+self.Amplitud*math.sin(2*self.pi*(t*self.Frec-x/self.Long_onda))
Graphics.drawLine(x,x,y,240,self.Color)
end
collectgarbage()
end
function onda:destroy()
Timer.destroy(self.contador)
end
return onda
end
local function LoadWave(height,dim,f,style,x_dim)
if style == 1 then
f=f or 0.1
local onda={pi=math.pi,Frec=f,Long_onda=dim,Amplitud=height}
function onda:color(a,b,c) self.a=a self.b=b self.c=c end
function onda:init(desfase)
desfase=desfase or 0
if not self.contador then
self.contador=Timer.new()
end
if not self.a or not self.b or not self.c then
self.a = 0
self.b = 0
self.c = 255
end
local t,x,y,i
t = Timer.getTime(self.contador)/1000+desfase
for x = 0,x_dim,4 do
y = 252+self.Amplitud*math.sin(2*self.pi*(t*self.Frec-x/self.Long_onda))
i = self.Amplitud*(-2*self.pi/self.Long_onda)*math.cos(2*self.pi*(t*self.Frec-x/self.Long_onda))
Graphics.drawLine(x-200,x+200,y-i*200,y+i*200,Color.new(self.a,self.b,self.c,math.floor(x/40)))
end
collectgarbage()
end
function onda:destroy()
Timer.destroy(self.contador)
end
return onda
end
if style == 2 then
f=f or 0.1
local onda={pi=math.pi,Frec=f,Long_onda=dim,Amplitud=height}
function onda:color(a,b,c) self.a=a self.b=b self.c=c end
function onda:init(desfase)
desfase=desfase or 0
if not self.contador then
self.contador=Timer.new()
end
if not self.a or not self.b or not self.c then
self.a = 0
self.b = 0
self.c = 255
end
local t,x,y,i,a
t = Timer.getTime(self.contador)/1000+desfase
if self.Amplitud <= 5 then
self.aumento = true
elseif self.Amplitud >= 110 then
self.aumento = false
end
if self.aumento then
self.Amplitud = self.Amplitud+0.1
else
self.Amplitud = self.Amplitud-0.1
end
for x = 0,x_dim,10 do
y = 272+self.Amplitud*math.sin(2*self.pi*(t*self.Frec-x/self.Long_onda))
i = self.Amplitud*(-2*self.pi/self.Long_onda)*math.cos(2*self.pi*(t*self.Frec-x/self.Long_onda))
for a = -3,3 do
Graphics.drawLine(x-20,x+20,a+y-i*20,a+y+i*20,Color.new(self.a,self.b,self.c,25-math.abs(a*5)))
end
end
collectgarbage()
end
function onda:destroy()
Timer.destroy(self.contador)
end
return onda
end
if style == 3 then
f=f or 0.1
local onda={pi=math.pi,Frec=f,Long_onda=dim,Amplitud=height}
function onda:color(a,b,c) self.Color=Color.new(a,b,c,40) end
function onda:init(desfase)
desfase=desfase or 0
if not self.contador then
self.contador=Timer.new()
end
if not self.Color then
self.Color=Color.new(0,0,255,40)
end
local t,x,y,i
t = Timer.getTime(self.contador)/1000+desfase
for x = 0,x_dim do
y = 252+self.Amplitud*math.sin(2*self.pi*(t*self.Frec-x/self.Long_onda))
Graphics.drawLine(x,x,y,240,self.Color)
end
collectgarbage()
end
function onda:destroy()
Timer.destroy(self.contador)
end
return onda
end
end
wav = LoadWave(15,1160, 0.1, 2, 960)
wav:color(Color.getR(colors[col_idx][3]),Color.getG(colors[col_idx][3]),Color.getB(colors[col_idx][3]))
@ -268,17 +268,17 @@ local orders = {"Name", "Playtime"}
-- Ordering titles
table.sort(tbl, function (a, b) return (a.title:lower() < b.title:lower() ) end)
function resortList(o_type, m_idx)
local old_id = tbl[m_idx].id
if o_type == 1 then -- Name
table.sort(tbl, function (a, b) return (a.title:lower() < b.title:lower() ) end)
elseif o_type == 2 then -- Playtime
table.sort(tbl, function (a, b) return (a.rtime > b.rtime ) end)
end
for i, title in pairs(tbl) do
if title.id == old_id then
return i
end
end
local old_id = tbl[m_idx].id
if o_type == 1 then -- Name
table.sort(tbl, function (a, b) return (a.title:lower() < b.title:lower() ) end)
elseif o_type == 2 then -- Playtime
table.sort(tbl, function (a, b) return (a.rtime > b.rtime ) end)
end
for i, title in pairs(tbl) do
if title.id == old_id then
return i
end
end
end
-- Internal stuffs
@ -290,23 +290,23 @@ local grey = Color.new(40, 40, 40)
local alarm_val = 128
local alarm_decrease = true
function showAlarm(title, select_idx)
if alarm_decrease then
alarm_val = alarm_val - 4
if alarm_val == 40 then
alarm_decrease = false
end
else
alarm_val = alarm_val + 4
if alarm_val == 128 then
alarm_decrease = true
end
end
local sclr = Color.new(alarm_val, alarm_val, alarm_val)
Graphics.fillRect(200, 760, 200, 280, grey)
Graphics.debugPrint(205, 205, title, yellow)
Graphics.fillRect(200, 760, 215 + select_idx * 20, 235 + select_idx * 20, sclr)
Graphics.debugPrint(205, 235, "Yes", white)
Graphics.debugPrint(205, 255, "No", white)
if alarm_decrease then
alarm_val = alarm_val - 4
if alarm_val == 40 then
alarm_decrease = false
end
else
alarm_val = alarm_val + 4
if alarm_val == 128 then
alarm_decrease = true
end
end
local sclr = Color.new(alarm_val, alarm_val, alarm_val)
Graphics.fillRect(200, 760, 200, 280, grey)
Graphics.debugPrint(205, 205, title, yellow)
Graphics.fillRect(200, 760, 215 + select_idx * 20, 235 + select_idx * 20, sclr)
Graphics.debugPrint(205, 235, "Yes", white)
Graphics.debugPrint(205, 255, "No", white)
end
-- Scroll-list Renderer
@ -319,152 +319,152 @@ local new_list_idx = nil
local real_i = 1
local big_tbl = {}
function RenderList()
local r_max = 0
local r = 0
big_tbl = {}
if #tbl < 4 then
r_max = 8
else
r_max = 2
end
while r < r_max do
for k, v in pairs(tbl) do
table.insert(big_tbl, v)
end
r = r + 1
end
local y = -124
local i = list_idx - 1
if not freeze then
if decrease then
sel_val = sel_val - 4
if sel_val == 0 then
decrease = false
end
else
sel_val = sel_val + 4
if sel_val == 128 then
decrease = true
end
end
end
local sclr = Color.new(sel_val, sel_val, sel_val, 100)
Graphics.fillRect(0, 960, 4, 140, sclr)
Graphics.debugPrint(800, 520, "Order: " .. orders[order_idx], white)
if mov_y ~= 0 then
mov_y = mov_y + mov_step
if math.abs(mov_y) >= 132 then
mov_y = 0
list_idx = new_list_idx
i = new_list_idx - 1
end
end
while i <= list_idx + 4 do
if i < 1 then
real_i = i
i = #big_tbl - math.abs(i)
end
if i ~= list_idx + 4 then
Graphics.drawImage(5, y + mov_y, big_tbl[i].icon)
end
Graphics.debugPrint(150, y + 25 + mov_y, big_tbl[i].title, yellow)
Graphics.debugPrint(150, y + 45 + mov_y, "Title ID: " .. big_tbl[i].id, white)
Graphics.debugPrint(150, y + 65 + mov_y, "Region: " .. big_tbl[i].region, white)
Graphics.debugPrint(150, y + 85 + mov_y, "Playtime: " .. big_tbl[i].ptime, white)
local r_idx = i % #tbl
if r_idx == 0 then
r_idx = #tbl
end
Graphics.debugPrint(900, y + 85 + mov_y, "#" .. r_idx, white)
y = y + 132
if real_i <= 0 then
i = real_i
real_i = 1
end
i = i + 1
end
local r_max = 0
local r = 0
big_tbl = {}
if #tbl < 4 then
r_max = 8
else
r_max = 2
end
while r < r_max do
for k, v in pairs(tbl) do
table.insert(big_tbl, v)
end
r = r + 1
end
local y = -124
local i = list_idx - 1
if not freeze then
if decrease then
sel_val = sel_val - 4
if sel_val == 0 then
decrease = false
end
else
sel_val = sel_val + 4
if sel_val == 128 then
decrease = true
end
end
end
local sclr = Color.new(sel_val, sel_val, sel_val, 100)
Graphics.fillRect(0, 960, 4, 140, sclr)
Graphics.debugPrint(800, 520, "Order: " .. orders[order_idx], white)
if mov_y ~= 0 then
mov_y = mov_y + mov_step
if math.abs(mov_y) >= 132 then
mov_y = 0
list_idx = new_list_idx
i = new_list_idx - 1
end
end
while i <= list_idx + 4 do
if i < 1 then
real_i = i
i = #big_tbl - math.abs(i)
end
if i ~= list_idx + 4 then
Graphics.drawImage(5, y + mov_y, big_tbl[i].icon)
end
Graphics.debugPrint(150, y + 25 + mov_y, big_tbl[i].title, yellow)
Graphics.debugPrint(150, y + 45 + mov_y, "Title ID: " .. big_tbl[i].id, white)
Graphics.debugPrint(150, y + 65 + mov_y, "Region: " .. big_tbl[i].region, white)
Graphics.debugPrint(150, y + 85 + mov_y, "Playtime: " .. big_tbl[i].ptime, white)
local r_idx = i % #tbl
if r_idx == 0 then
r_idx = #tbl
end
Graphics.debugPrint(900, y + 85 + mov_y, "#" .. r_idx, white)
y = y + 132
if real_i <= 0 then
i = real_i
real_i = 1
end
i = i + 1
end
end
-- Main loop
local f_idx = 1
local oldpad = Controls.read()
while #tbl > 0 do
Graphics.initBlend()
Graphics.fillRect(0,960,0,544,colors[col_idx][2])
wav:init()
RenderList()
if freeze then
showAlarm("Do you want to delete this record permanently?", f_idx)
end
Graphics.termBlend()
Screen.flip()
Screen.waitVblankStart()
local pad = Controls.read()
if Controls.check(pad, SCE_CTRL_UP) and mov_y == 0 then
if freeze then
f_idx = 1
else
new_list_idx = list_idx - 1
if new_list_idx == 0 then
new_list_idx = #tbl
end
mov_y = 1
mov_step = 33
end
elseif Controls.check(pad, SCE_CTRL_DOWN) and mov_y == 0 then
if freeze then
f_idx = 2
else
new_list_idx = list_idx + 1
if new_list_idx > #tbl then
new_list_idx = 1
end
mov_y = -1
mov_step = -33
end
elseif Controls.check(pad, SCE_CTRL_LTRIGGER) and not Controls.check(oldpad, SCE_CTRL_LTRIGGER) and not freeze then
order_idx = order_idx - 1
if order_idx == 0 then
order_idx = #orders
end
list_idx = resortList(order_idx, list_idx)
elseif Controls.check(pad, SCE_CTRL_RTRIGGER) and not Controls.check(oldpad, SCE_CTRL_RTRIGGER) and not freeze then
order_idx = order_idx + 1
if order_idx > #orders then
order_idx = 1
end
list_idx = resortList(order_idx, list_idx)
elseif Controls.check(pad, SCE_CTRL_TRIANGLE) and not Controls.check(oldpad, SCE_CTRL_TRIANGLE) and not freeze then
freeze = true
f_idx = 1
elseif Controls.check(pad, SCE_CTRL_CROSS) and not Controls.check(oldpad, SCE_CTRL_CROSS) and freeze then
freeze = false
if f_idx == 1 then -- Delete
System.deleteFile("ux0:/data/TrackPlug/" .. tbl[list_idx].name)
table.remove(tbl, list_idx)
if list_idx > #tbl then
list_idx = list_idx - 1
end
end
elseif Controls.check(pad, SCE_CTRL_SELECT) and not Controls.check(oldpad, SCE_CTRL_SELECT) then
col_idx = col_idx + 1
if col_idx > #colors then
col_idx = 1
end
wav:color(Color.getR(colors[col_idx][3]),Color.getG(colors[col_idx][3]),Color.getB(colors[col_idx][3]))
fd = System.openFile("ux0:/data/TrackPlug/config.lua", FCREATE)
System.writeFile(fd, "col_idx="..col_idx, 9)
System.closeFile(fd)
end
oldpad = pad
Graphics.initBlend()
Graphics.fillRect(0,960,0,544,colors[col_idx][2])
wav:init()
RenderList()
if freeze then
showAlarm("Do you want to delete this record permanently?", f_idx)
end
Graphics.termBlend()
Screen.flip()
Screen.waitVblankStart()
local pad = Controls.read()
if Controls.check(pad, SCE_CTRL_UP) and mov_y == 0 then
if freeze then
f_idx = 1
else
new_list_idx = list_idx - 1
if new_list_idx == 0 then
new_list_idx = #tbl
end
mov_y = 1
mov_step = 11
end
elseif Controls.check(pad, SCE_CTRL_DOWN) and mov_y == 0 then
if freeze then
f_idx = 2
else
new_list_idx = list_idx + 1
if new_list_idx > #tbl then
new_list_idx = 1
end
mov_y = -1
mov_step = -11
end
elseif Controls.check(pad, SCE_CTRL_LTRIGGER) and not Controls.check(oldpad, SCE_CTRL_LTRIGGER) and not freeze then
order_idx = order_idx - 1
if order_idx == 0 then
order_idx = #orders
end
list_idx = resortList(order_idx, list_idx)
elseif Controls.check(pad, SCE_CTRL_RTRIGGER) and not Controls.check(oldpad, SCE_CTRL_RTRIGGER) and not freeze then
order_idx = order_idx + 1
if order_idx > #orders then
order_idx = 1
end
list_idx = resortList(order_idx, list_idx)
elseif Controls.check(pad, SCE_CTRL_TRIANGLE) and not Controls.check(oldpad, SCE_CTRL_TRIANGLE) and not freeze then
freeze = true
f_idx = 1
elseif Controls.check(pad, SCE_CTRL_CROSS) and not Controls.check(oldpad, SCE_CTRL_CROSS) and freeze then
freeze = false
if f_idx == 1 then -- Delete
System.deleteFile("ux0:/data/TrackPlug/" .. tbl[list_idx].name)
table.remove(tbl, list_idx)
if list_idx > #tbl then
list_idx = list_idx - 1
end
end
elseif Controls.check(pad, SCE_CTRL_SELECT) and not Controls.check(oldpad, SCE_CTRL_SELECT) then
col_idx = col_idx + 1
if col_idx > #colors then
col_idx = 1
end
wav:color(Color.getR(colors[col_idx][3]),Color.getG(colors[col_idx][3]),Color.getB(colors[col_idx][3]))
fd = System.openFile("ux0:/data/TrackPlug/config.lua", FCREATE)
System.writeFile(fd, "col_idx="..col_idx, 9)
System.closeFile(fd)
end
oldpad = pad
end
-- No games played yet apparently
while true do
Graphics.initBlend()
Screen.clear()
Graphics.debugPrint(5, 5, "No games tracked yet.", white)
Graphics.termBlend()
Screen.flip()
Screen.waitVblankStart()
end
Graphics.initBlend()
Screen.clear()
Graphics.debugPrint(5, 5, "No games tracked yet.", white)
Graphics.termBlend()
Screen.flip()
Screen.waitVblankStart()
end