From 58bac2e290ad5d6671d4b00c7b758128ff106fec Mon Sep 17 00:00:00 2001 From: sakurw <45168417+sakurw@users.noreply.github.com> Date: Tue, 9 Jan 2024 09:55:07 +0900 Subject: [PATCH 1/5] Update lang_ja.lua (#1075) --- parts/language/lang_ja.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/parts/language/lang_ja.lua b/parts/language/lang_ja.lua index 868d8a70..17af6624 100644 --- a/parts/language/lang_ja.lua +++ b/parts/language/lang_ja.lua @@ -594,10 +594,10 @@ C. ゲームパッド bg_on="通常背景", bg_off="背景なし ", bg_custom="カスタム背景", - -- defaultBG="Default B.G.", - -- resetDbg="Reset to default", - -- lockBG="Lock B.G.", - -- noTheme="Disable theme", + defaultBG="デフォルト背景", + resetDbg="背景リセット", + lockBG="背景固定", + noTheme="テーマ無効化", blockSatur="ブロックデザイン", fieldSatur="設置ブロックデザイン", From b0a47f5222249234cc7ff646eedcd6a029985740 Mon Sep 17 00:00:00 2001 From: MrZ_26 <1046101471@qq.com> Date: Sun, 14 Jan 2024 22:36:55 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=B5=9E=E5=8A=A9?= =?UTF-8?q?=E5=90=8D=E5=8D=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parts/patron.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/parts/patron.lua b/parts/patron.lua index d99527f9..3f923e13 100644 --- a/parts/patron.lua +++ b/parts/patron.lua @@ -150,4 +150,5 @@ return { {font=25,name="V我50吃肉讨饭人"}, {font=25,name="电蜥蜴"}, {font=25,name="浮芙fufu"}, + {font=25,name="NOname_awa"}, } From bce60ee6c7c0e8310bd15864f19fa4c3581011da Mon Sep 17 00:00:00 2001 From: MrZ_26 <1046101471@qq.com> Date: Sun, 14 Jan 2024 22:36:55 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E4=BF=AE=E5=8D=A1=E5=9D=97=E6=97=8B?= =?UTF-8?q?=E8=BD=AC=E9=9F=B3=E6=95=88=E6=92=AD=E6=94=BE=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- parts/RSlist.lua | 2 +- parts/player/player.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parts/RSlist.lua b/parts/RSlist.lua index c5fbdd18..17b50e16 100644 --- a/parts/RSlist.lua +++ b/parts/RSlist.lua @@ -690,7 +690,7 @@ do local sfx if ifpre then sfx='prerotate' - elseif P:ifoverlap(icb,x,y+1) and P:ifoverlap(icb,x-1,y) and P:ifoverlap(icb,x+1,y) then + elseif y==P.ghoY and P:ifoverlap(icb,x,y+1) and P:ifoverlap(icb,x-1,y) and P:ifoverlap(icb,x+1,y) then sfx='rotatekick' P:_rotateField(d) else diff --git a/parts/player/player.lua b/parts/player/player.lua index 2ce44272..188aec62 100644 --- a/parts/player/player.lua +++ b/parts/player/player.lua @@ -1232,7 +1232,7 @@ function Player:spin(d,ifpre) local sfx if ifpre then sfx='prerotate' - elseif self:ifoverlap(icb,ix,iy+1) and self:ifoverlap(icb,ix-1,iy) and self:ifoverlap(icb,ix+1,iy) then + elseif iy==self.ghoY and self:ifoverlap(icb,ix,iy+1) and self:ifoverlap(icb,ix-1,iy) and self:ifoverlap(icb,ix+1,iy) then sfx='rotatekick' self:_rotateField(d) else From efeb24b0f07c7bb9e1380542a29c47c15e83eb7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=E2=82=82=E2=82=89H=E2=82=82=E2=82=85N=E2=82=83O=E2=82=85?= Date: Tue, 16 Jan 2024 01:09:45 -0600 Subject: [PATCH 4/5] Updated monospaced font (#1084) Redesigned the monospaced font based on the main UI font of the game (Exo 2). --- parts/fonts/monospaced.otf | Bin 22012 -> 33612 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/parts/fonts/monospaced.otf b/parts/fonts/monospaced.otf index 6d562d164c08ff870ced596f913c2d675d927c3f..e7adaa8bb0e002359860b80843d1ec324ef40c35 100644 GIT binary patch literal 33612 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 literal 22012 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 Date: Tue, 16 Jan 2024 14:19:19 +0700 Subject: [PATCH 5/5] Log viewer (#1076) * Add scene * Modify app_console.lua * Add fix ability to viewlog in case log got messed a bit --- Zframework/widget.lua | 2 +- parts/scenes/app_console.lua | 17 +++- parts/scenes/viewlog.lua | 176 +++++++++++++++++++++++++++++++++++ 3 files changed, 191 insertions(+), 4 deletions(-) create mode 100644 parts/scenes/viewlog.lua diff --git a/Zframework/widget.lua b/Zframework/widget.lua index 4fd108fc..876206ad 100644 --- a/Zframework/widget.lua +++ b/Zframework/widget.lua @@ -803,7 +803,7 @@ function selector:press(x) end end if self.select~=s then - self.code(self.list[s]) + self.code(self.list[s],s) self.select=s self.selText=self.list[s] if self.sound then diff --git a/parts/scenes/app_console.lua b/parts/scenes/app_console.lua index bb6d5dbc..50baed41 100644 --- a/parts/scenes/app_console.lua +++ b/parts/scenes/app_console.lua @@ -377,6 +377,15 @@ local commands={} do "Usage: openurl [url]", }, } + commands.viewlog={ + code=goScene('viewlog'), + description="View crash logs", + details={ + "Open the crash logs menu", + "", + "Usage: viewlog" + } + } commands.scrinfo={ code=function() for _,v in next,SCR.info() do @@ -478,7 +487,9 @@ local commands={} do commands.setbg={ code=function(name) if name~="" then - if name~=BG.cur then + if SETTING.lockBG then + log{"Background is currently ",C.R,"locked",C.Z,"! You can unlock it in Video settings."} + elseif name~=BG.cur then if BG.set(name) then log(("Background set to '%s'"):format(name)) else @@ -502,7 +513,7 @@ local commands={} do code=function(name) if name~="" then if SETTING.noTheme then - log{"Theme is ",C.R,"disabled",C.Z,"! Please re-enable it before trying this command again"} + log{"Themes are currently ",C.R,"disabled",C.Z,"! You can re-enable it in Video settings."} else if THEME.set(name) then log("Theme set to: "..name) @@ -1153,4 +1164,4 @@ scene.widgetList={ inputBox, } -return scene +return scene \ No newline at end of file diff --git a/parts/scenes/viewlog.lua b/parts/scenes/viewlog.lua new file mode 100644 index 00000000..2c41e610 --- /dev/null +++ b/parts/scenes/viewlog.lua @@ -0,0 +1,176 @@ +local fullLog,currentLogID +local logTimeList={} +local currentLogText={} + +local gc=love.graphics +local min,max=math.min,math.max +local scene={} + +local textBox=WIDGET.newTextBox {x= 30,y= 45,w=1000,h=540,font=25,fix=true} +local logList=WIDGET.newSelector{x=305,y=640,w= 550,name='list',color='O',fText='Crash log',list={''},disp=function() return '' end,code=function() end} + +local function updateText() + currentLogText=fullLog[currentLogID]:split('\n') + do + local _,wt=getFont(25):getWrap(fullLog[currentLogID],975) + textBox:setTexts(wt) + end + logList.select=currentLogID + logList.selText=currentLogText[1] +end + +local function noLogFound() + local _w=scene.widgetList + _w.home.hide=true;_w.list.hide=true + _w.endd.hide=true;_w.del .hide=true + _w.copy.hide=true;_w.delA.hide=true + + logList.list={''} + logList.select=false + logList.disp=function() return '' end + logList.code=function() end + logList:reset() +end + +function scene.enter() + fullLog=FILE.load('/conf/error.log','-string -canskip') or '/conf/error.log not found' + + if fullLog=='/conf/error.log not found' then noLogFound() + else + -- Fix data first + fullLog=table.concat(fullLog:split('\n\nTraceback'),'\nTraceback'):split('\n\n') + + -- Get timestamps and add into logTimeList for the selector + TABLE.reverse(fullLog) + for i,d in pairs(fullLog) do logTimeList[i]=d:split('\n')[1] end + + currentLogID=1 + updateText() + + local _w=scene.widgetList + _w.home.hide=false;_w.list.hide=false + _w.endd.hide=false;_w.del .hide=false + _w.copy.hide=false;_w.delA.hide=false + + logList.list=logTimeList + logList.select=false + logList.disp=function() return currentLogText[1] end + logList.code=function(_,s) + if s>currentLogID + then scene.keyDown('right') + else scene.keyDown('left') end + updateText() + end + logList:reset() + end +end +local deleteOld,deleteAll +do + local sureTime=-1e99 + function deleteOld() + local function task_redButton() + scene.widgetList.del.color=COLOR.Y + for _=1,120 do coroutine.yield() end + scene.widgetList.del.color=COLOR.dY + end + + if TIME()-sureTime<1 then + sureTime=-1e99 + scene.widgetList.del.color=COLOR.dY + do + local temp=TABLE.sub(TABLE.copy(fullLog),1,25) + fullLog=TABLE.copy(temp) + temp=table.concat(temp,'\n\n')..'\n\n' + + logTimeList=TABLE.sub(logTimeList,1,25) + currentLogID=min(logList.select,25) + logList.select=currentLogID + logList.list=logTimeList + updateText() + + TASK.removeTask_code(task_redButton) + FILE.save(temp,'/conf/error.log','-string') + end + else + sureTime=TIME() + MES.new('warn',text.sureDelete) + TASK.removeTask_code(task_redButton) + TASK.new(task_redButton) + end + end +end +do + local sureTime=-1e99 + function deleteAll() + local function task_redButton() + scene.widgetList.delA.color=COLOR.R + for _=1,120 do coroutine.yield() end + scene.widgetList.delA.color=COLOR.dR + end + + if TIME()-sureTime<1 then + sureTime=-1e99 + scene.widgetList.delA.color=COLOR.dR + love.filesystem.remove('/conf/error.log') + + noLogFound() + TASK.removeTask_code(task_redButton) + SCN.swapTo('viewLog','none') + else + sureTime=TIME() + MES.new('warn',text.sureDelete) + TASK.removeTask_code(task_redButton) + TASK.new(task_redButton) + end + end +end + +function scene.wheelMoved(_,y) + WHEELMOV(y) +end + +function scene.keyDown(key) + if key=='left' then + currentLogID=math.max(1,currentLogID-1) + updateText() + elseif key=='right' then + currentLogID=math.min(currentLogID+1,#fullLog) + updateText() + elseif key=='home' then + currentLogID=1 + updateText() + elseif key=='end' then + currentLogID=#fullLog + updateText() + elseif key=='up' then + textBox:scroll(-5) + elseif key=='down' then + textBox:scroll(5) + elseif key=='pageup' then + textBox:scroll(-20) + elseif key=='pagedown' then + textBox:scroll(20) + elseif key=='escape' then + SCN.back() + end +end + +function scene.draw() + setFont(40) + gc.print(currentLogID..' / '..#fullLog,1000,800) +end + +scene.widgetList={ + textBox, + WIDGET.newButton {name='home',x=1140,y= 90,w=170,h=80,sound='click',font=60,fText=CHAR.key.macHome,code=pressKey('home')}, + WIDGET.newButton {name='endd',x=1140,y=190,w=170,h=80,sound='click',font=60,fText=CHAR.key.macEnd ,code=pressKey('end')}, + WIDGET.newButton {name='copy',x=1140,y=290,w=170,h=80,sound='click',font=60,fText=CHAR.icon.copy ,code=function()love.system.setClipboardText(table.concat(textBox.texts,'\n'))end,color='lC'}, + + logList, + + WIDGET.newKey {name='del' ,x= 710,y=640,w=200,h=80,sound=false, font=30,fText='Clear old' ,color='dY',code=deleteOld}, + WIDGET.newKey {name='delA',x= 930,y=640,w=200,h=80,sound=false, font=30,fText='DELETE ALL!',color='dR',code=deleteAll}, + + WIDGET.newButton {name='back',x=1140,y=640,w=170,h=80,sound='back',font=60,fText=CHAR.icon.back,code=backScene}, +} +return scene \ No newline at end of file