diff --git a/app/index.lua b/app/index.lua index 9633da9..5ea35d8 100644 --- a/app/index.lua +++ b/app/index.lua @@ -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 \ No newline at end of file + Graphics.initBlend() + Screen.clear() + Graphics.debugPrint(5, 5, "No games tracked yet.", white) + Graphics.termBlend() + Screen.flip() + Screen.waitVblankStart() +end