From a475232432d9d37bef55621bdb898bb9d2a217c3 Mon Sep 17 00:00:00 2001 From: NOT_A_ROBOT Date: Mon, 18 Sep 2023 12:49:17 +0700 Subject: [PATCH 1/6] Add Construct modes --- main.lua | 1 + parts/eventsets/construct_checker.lua | 117 +++++++++ parts/eventsets/construct_invsg.lua | 117 +++++++++ parts/eventsets/construct_sg.lua | 117 +++++++++ parts/eventsets/secret_grade.lua | 69 ------ parts/gameFuncs.lua | 6 +- parts/language/lang_en.lua | 5 +- parts/language/lang_es.lua | 5 +- parts/language/lang_fr.lua | 5 + parts/language/lang_id.lua | 5 +- parts/language/lang_ja.lua | 5 +- parts/language/lang_pt.lua | 5 + parts/language/lang_symbol.lua | 1 + parts/language/lang_vi.lua | 5 +- parts/language/lang_zh.lua | 5 +- parts/language/lang_zh_code.lua | 223 +++++++++--------- parts/language/lang_zh_trad.lua | 5 +- parts/modes.lua | 4 +- parts/modes/construct_checker.lua | 22 ++ parts/modes/construct_invsg.lua | 22 ++ .../{secret_grade.lua => construct_sg.lua} | 8 +- 21 files changed, 557 insertions(+), 195 deletions(-) create mode 100644 parts/eventsets/construct_checker.lua create mode 100644 parts/eventsets/construct_invsg.lua create mode 100644 parts/eventsets/construct_sg.lua delete mode 100644 parts/eventsets/secret_grade.lua create mode 100644 parts/modes/construct_checker.lua create mode 100644 parts/modes/construct_invsg.lua rename parts/modes/{secret_grade.lua => construct_sg.lua} (60%) diff --git a/main.lua b/main.lua index a3915726..1e6ec01e 100644 --- a/main.lua +++ b/main.lua @@ -462,6 +462,7 @@ do if not RANKS.sprint_10l then RANKS.sprint_10l=0 end if RANKS.master_l then RANKS.master_n,RANKS.master_l=RANKS.master_l end if RANKS.master_u then RANKS.master_h,RANKS.master_u=RANKS.master_u end + if RANKS.secret_grade then RANKS.construct_sg,RANKS.secret_grade=RANKS.secret_grade end for _,v in next,VK_ORG do v.color=nil end for name,rank in next,RANKS do if type(name)=='number' or type(rank)~='number' then diff --git a/parts/eventsets/construct_checker.lua b/parts/eventsets/construct_checker.lua new file mode 100644 index 00000000..a88dca6c --- /dev/null +++ b/parts/eventsets/construct_checker.lua @@ -0,0 +1,117 @@ +local gc_setColor,gc_draw=love.graphics.setColor,love.graphics.draw +local ply_applyField=PLY.draw.applyField + +local holePatterns={ + {-1,21,-1,21,-1,21,-1,21,-1,21}, + {21,-1,21,-1,21,-1,21,-1,21,-1} +} + +local targetField={} + +local function generateGuide(y,mirror) + local tfLength=#targetField + if tfLength>y then return end + mirror=mirror and 1 or 0 + for i=tfLength,y do + table.insert(targetField,TABLE.shift( + holePatterns[(i+mirror)%2+1] + )) + end +end + +local function calculateRankPts(P) + local points=1 + for y=1,#P.field do + local flag + for x=1,10 do + -- X guide is filled + if P.field[y][x]>0 and targetField[y][x]<0 then flag=true break end + -- Block guide is empty + if P.field[y][x]==0 and targetField[y][x]>0 then flag=true break end + end + if flag then break end + points=points+1 + end + P.modeData.rankPts=points + P.modeData.maxRankPts=math.max(points,P.modeData.maxRankPts) +end + +return { + fkey1=function(P) P.modeData.showGuide=not P.modeData.showGuide end, + fkey2=function(P) + P.modeData.mirror=not P.modeData.mirror + TABLE.cut(targetField) + generateGuide(#P.field+10,P.modeData.mirror) + calculateRankPts(P) + end, + mesDisp=function(P) + local D=P.modeData + mText(TEXTOBJ.grade,63,190) + mText(TEXTOBJ.line,63,310) + setFont(55) + GC.mStr(getConstructGrade(D.rankPts),63,125) + GC.mStr(D.rankPts-1,63,245) + + -- Display highest grade + if D.maxRankPts>D.rankPts then + gc_setColor(COLOR.lX) + setFont(20) + GC.mStr(text.highest:repD(getConstructGrade(D.maxRankPts)),63,216) + GC.mStr(text.highest:repD(D.maxRankPts+1),63,336) + end + + ply_applyField(P) + local mark=TEXTURE.puzzleMark + if D.showGuide then + local firstMistake=nil + for y=1,D.rankPts+1 do + for x=1,10 do + local texture=targetField[y][x] + -- Missing blocks + if not P:solid(x,y) and texture>0 then + + -- Missing block under overhang + if P:solid(x,y+1) then + firstMistake=firstMistake or y + gc_setColor(COLOR.R) + else + gc_setColor(COLOR.Z) + end + + gc_draw(mark[texture],30*x-30,600-30*y) + elseif texture<0 then + -- X always gets displayed, color changes based on whether there is a block there + if P:solid(x,y) then + gc_setColor(COLOR.R) + firstMistake=firstMistake or y + elseif D.rankPts>y then + gc_setColor(COLOR.G) + else + gc_setColor(COLOR.Z) + end + gc_draw(mark[texture],30*x-30,600-30*y) + end + end + if y==firstMistake then + gc_setColor(1,0,0,.2*(math.sin(2*TIME())+1)) + love.graphics.rectangle("fill",0,600-30*y,300,30) + end + end + end + PLY.draw.cancelField() + end, + task=function(P) + local D=P.modeData + D.rankPts=1 + D.maxRankPts=1 + D.showGuide=true + D.mirror=false + TABLE.cut(targetField) + generateGuide(10) + end, + hook_drop=function(P) + local D=P.modeData + calculateRankPts(P) + generateGuide(#P.field+10) + end +} diff --git a/parts/eventsets/construct_invsg.lua b/parts/eventsets/construct_invsg.lua new file mode 100644 index 00000000..4cf5d7b5 --- /dev/null +++ b/parts/eventsets/construct_invsg.lua @@ -0,0 +1,117 @@ +local gc_setColor,gc_draw=love.graphics.setColor,love.graphics.draw +local ply_applyField=PLY.draw.applyField + +local targetField={} + +local function getOpenHole(y,mirror) + if mirror then y=y+9 end + return -math.abs(((y-1) % 18)-9)+10 +end +local function generateGuide(y,mirror) + local l=#targetField + if l>y then + return + end + for i=l,y do + targetField[i] = {} + local h=getOpenHole(i,mirror) + for j=1,10 do + targetField[i][j]=h==j and 21 or -1 + end + end +end +local function calculateRankPts(P) + local points=1 + for y=1,#P.field do + local holePos=getOpenHole(y,P.modeData.mirror) + local flag + for x=1,10 do + if P.field[y][x]>0 and holePos~=x then flag=true break end + if P.field[y][x]==0 and holePos==x then flag=true break end + end + if flag then break end + if P:solid(holePos,y+1) then break end + points=points+1 + end + P.modeData.rankPts=points + P.modeData.maxRankPts=math.max(points,P.modeData.maxRankPts) +end + +return { + fkey1=function(P) P.modeData.showGuide=not P.modeData.showGuide end, + fkey2=function(P) + P.modeData.mirror=not P.modeData.mirror + TABLE.cut(targetField) + generateGuide(#P.field+10,P.modeData.mirror) + calculateRankPts(P) + end, + mesDisp=function(P) + local D=P.modeData + mText(TEXTOBJ.grade,63,190) + mText(TEXTOBJ.line,63,310) + setFont(55) + GC.mStr(getConstructGrade(D.rankPts),63,125) + GC.mStr(D.rankPts-1,63,245) + + -- Display highest grade + if D.maxRankPts>D.rankPts then + gc_setColor(COLOR.lX) + setFont(20) + GC.mStr(text.highest:repD(getConstructGrade(D.maxRankPts)),63,216) + GC.mStr(text.highest:repD(D.maxRankPts+1),63,336) + end + + ply_applyField(P) + local mark=TEXTURE.puzzleMark + if D.showGuide then + local firstMistake=nil + for y=1,D.rankPts+1 do + for x=1,10 do + local texture=targetField[y][x] + -- Missing blocks + if not P:solid(x,y) and texture>0 then + + -- Missing block under overhang + if P:solid(x,y+1) then + firstMistake=firstMistake or y + gc_setColor(COLOR.R) + else + gc_setColor(COLOR.Z) + end + + gc_draw(mark[texture],30*x-30,600-30*y) + elseif texture<0 then + -- X always gets displayed, color changes based on whether there is a block there + if P:solid(x,y) then + gc_setColor(COLOR.R) + firstMistake=firstMistake or y + elseif D.rankPts>y then + gc_setColor(COLOR.G) + else + gc_setColor(COLOR.Z) + end + gc_draw(mark[texture],30*x-30,600-30*y) + end + end + if y==firstMistake then + gc_setColor(1,0,0,.2*(math.sin(2*TIME())+1)) + love.graphics.rectangle("fill",0,600-30*y,300,30) + end + end + end + PLY.draw.cancelField() + end, + task=function(P) + local D=P.modeData + D.rankPts=1 + D.showGuide=true + D.maxRankPts=1 + D.mirror=false + TABLE.cut(targetField) + generateGuide(10,D.mirror) + end, + hook_drop=function(P) + calculateRankPts(P) + generateGuide(#P.field+10,P.modeData.mirror) + end +} diff --git a/parts/eventsets/construct_sg.lua b/parts/eventsets/construct_sg.lua new file mode 100644 index 00000000..67b4e1b3 --- /dev/null +++ b/parts/eventsets/construct_sg.lua @@ -0,0 +1,117 @@ +local gc_setColor,gc_draw=love.graphics.setColor,love.graphics.draw +local ply_applyField=PLY.draw.applyField + +local targetField={} + +local function getOpenHole(y,mirror) + if mirror then y=y+9 end + return -math.abs(((y-1) % 18)-9)+10 +end +local function generateGuide(y,mirror) + local l=#targetField + if l>y then + return + end + for i=l,y do + targetField[i] = {} + local h=getOpenHole(i,mirror) + for j=1,10 do + targetField[i][j]=h==j and -1 or 21 + end + end +end +local function calculateRankPts(P) + local points=1 + for y=1,#P.field do + local holePos=getOpenHole(y,P.modeData.mirror) + local flag + for x=1,10 do + if P.field[y][x]>0 and holePos==x then flag=true break end + if P.field[y][x]==0 and holePos~=x then flag=true break end + end + if flag then break end + if not P:solid(holePos,y+1) then break end + points=points+1 + end + P.modeData.rankPts=points + P.modeData.maxRankPts=math.max(points,P.modeData.maxRankPts) +end + +return { + fkey1=function(P) P.modeData.showGuide=not P.modeData.showGuide end, + fkey2=function(P) + P.modeData.mirror=not P.modeData.mirror + TABLE.cut(targetField) + generateGuide(#P.field+10,P.modeData.mirror) + calculateRankPts(P) + end, + mesDisp=function(P) + local D=P.modeData + mText(TEXTOBJ.grade,63,190) + mText(TEXTOBJ.line,63,310) + setFont(55) + GC.mStr(getConstructGrade(D.rankPts),63,125) + GC.mStr(D.rankPts-1,63,245) + + -- Display highest grade + if D.maxRankPts>D.rankPts then + gc_setColor(COLOR.lX) + setFont(20) + GC.mStr(text.highest:repD(getConstructGrade(D.maxRankPts)),63,216) + GC.mStr(text.highest:repD(D.maxRankPts+1),63,336) + end + + ply_applyField(P) + local mark=TEXTURE.puzzleMark + if D.showGuide then + local firstMistake=nil + for y=1,D.rankPts+1 do + for x=1,10 do + local texture=targetField[y][x] + -- Missing blocks + if not P:solid(x,y) and texture>0 then + + -- Missing block under overhang + if P:solid(x,y+1) then + firstMistake=firstMistake or y + gc_setColor(COLOR.R) + else + gc_setColor(COLOR.Z) + end + + gc_draw(mark[texture],30*x-30,600-30*y) + elseif texture<0 then + -- X always gets displayed, color changes based on whether there is a block there + if P:solid(x,y) then + gc_setColor(COLOR.R) + firstMistake=firstMistake or y + elseif D.rankPts>y then + gc_setColor(COLOR.G) + else + gc_setColor(COLOR.Z) + end + gc_draw(mark[texture],30*x-30,600-30*y) + end + end + if y==firstMistake then + gc_setColor(1,0,0,.2*(math.sin(2*TIME())+1)) + love.graphics.rectangle("fill",0,600-30*y,300,30) + end + end + end + PLY.draw.cancelField() + end, + task=function(P) + local D=P.modeData + D.rankPts=1 + D.showGuide=true + D.maxRankPts=1 + D.mirror=false + TABLE.cut(targetField) + generateGuide(10,D.mirror) + end, + hook_drop=function(P) + calculateRankPts(P) + generateGuide(#P.field+10,P.modeData.mirror) + end +} diff --git a/parts/eventsets/secret_grade.lua b/parts/eventsets/secret_grade.lua deleted file mode 100644 index 729aebc1..00000000 --- a/parts/eventsets/secret_grade.lua +++ /dev/null @@ -1,69 +0,0 @@ -local gc_setColor,gc_draw=love.graphics.setColor,love.graphics.draw -local ply_applyField=PLY.draw.applyField -local function getOpenHole(num) - return -math.abs(((num-1) % 18)-9)+10 -end -local F={} - --- local ranks={"10","9","8","7","6","5","4","3","2","1","S1","S2","S3","S4","S5","S6","S7","S8","S9","GM","GM+","TM","TM+","TM+₂","TM+₃", "TM+₄","TM+₅"} --- lines: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 - -local function generateGuide(num) - local l=#F - if l>num then - return - end - for i=l,num do - F[i] = {} - local h=getOpenHole(i) - for j=1,10 do - F[i][j]=h==j and -1 or 21 - end - end -end - -return { - fkey1=function(P) P.modeData.showGuide=not P.modeData.showGuide end, - mesDisp=function(P) - mText(TEXTOBJ.grade,63,190) - mText(TEXTOBJ.line,63,310) - setFont(55) - GC.mStr(getSecretGrade(P.modeData.rankPts),63,125) - GC.mStr(P.modeData.rankPts-1,63,245) - ply_applyField(P) - local mark=TEXTURE.puzzleMark - gc_setColor(1,1,1) - if P.modeData.showGuide then - for y=1,P.modeData.rankPts+1 do for x=1,10 do - local T=F[y][x] - if T~=0 then - gc_draw(mark[T],30*x-30,600-30*y) - end - end end - end - PLY.draw.cancelField() - end, - task=function(P) - P.modeData.rankPts=1 - P.modeData.showGuide=true - generateGuide(10) - end, - hook_drop=function(P) - local D=P.modeData - D.rankPts=0 - for i=1,#P.field do - local h=getOpenHole(i) - local flag - for j=1,10 do - if P.field[i][j]>0 and h==j then flag=true break end-- goto post_pts_calc - if P.field[i][j]==0 and h~=j then flag=true break end-- goto post_pts_calc - end - if flag then break end - if i==#P.field then break end-- goto post_pts_calc - if P.field[i+1][h]==0 then break end-- goto post_pts_calc - D.rankPts=D.rankPts+1 - end - -- ::post_pts_calc:: - generateGuide(D.rankPts+20) - end -} diff --git a/parts/gameFuncs.lua b/parts/gameFuncs.lua index b6ade66c..fff60073 100644 --- a/parts/gameFuncs.lua +++ b/parts/gameFuncs.lua @@ -198,7 +198,7 @@ local function getSmallNum(num) end do -- Secret Grade local r={"GM","GM+","TM","TM+"} - function getSecretGrade(index) + function getConstructGrade(index) if index<11 then -- rank 10 - 1 return tostring(11-index) elseif index<20 then -- S1 - S9 ranks @@ -210,11 +210,11 @@ do -- Secret Grade end end end -function getSecretGradeText(index) +function getConstructGradeText(index) if index<11 then return "Grade "..tostring(11-index) else - return getSecretGrade(index) + return getConstructGrade(index) end end diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index b005d627..02f1a469 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -43,6 +43,7 @@ return { infHeightOn="Infinite Height ON", infHeightOff="Infinite Height OFF", infHeightHint="Toggle with Function 1 key", + highest="(highest: $1)", speedLV="Speed Level", piece="Piece",line="Lines",atk="Attack",eff="Efficiency", @@ -866,7 +867,9 @@ C. Gamepad ['sprintPenta']= {"Sprint", "PENTOMINO", "40L with the 18 pentominoes"}, ['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"}, ['sprint123']= {"Sprint", "M123", "40L with only monominoes, dominoes, and triminoes"}, - ['secret_grade']= {"Secret Grade", "", "Building a zigzag shape by following the guide!"}, + ['construct_sg']= {"Construct", "SECRET GRADE", "Build a zigzag pattern by following the guide!"}, + ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, + ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, ['dig_10l']= {"Dig", "10L", "Dig 10 garbage lines as fast as you can!"}, ['dig_40l']= {"Dig", "40L", "Dig 40 garbage lines as fast as you can!"}, ['dig_100l']= {"Dig", "100L", "Dig 100 garbage lines as fast as you can!"}, diff --git a/parts/language/lang_es.lua b/parts/language/lang_es.lua index dba29ac8..b1de8de3 100644 --- a/parts/language/lang_es.lua +++ b/parts/language/lang_es.lua @@ -42,6 +42,7 @@ return { -- infHeightOn="Infinite Height ON", -- infHeightOff="Infinite Height OFF", -- infHeightHint="Toggle with Function 1 key", + -- highestGrade="(highest: $1)", speedLV="Veloc. de juego", piece="Piezas",line="Líneas",atk="Ataque",eff="Eficiencia", @@ -818,7 +819,9 @@ return { ['sprintPenta']= {"Sprint", "Pentominos", "¡Limpia 40 líneas con los 18 pentominos distintos!"}, ['sprintMPH']= {"Sprint", "MPH", "Memoryless (sin memoria)\nPreviewless (sin pzas. siguientes)\nHoldless (sin reserva)."}, ['sprint123']= {"Sprint", "M123", "Limpia 40 líneas con monominos, biminos y triminos"}, - ['secret_grade']= {"Secret Grade", "", "¡Arma dejando huecos en escalera, sigue la guía!"}, + ['construct_sg']= {"Construir", "SECRET GRADE", "¡Arma dejando huecos en escalera, sigue la guía!"}, + -- ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, + -- ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, ['dig_10l']= {"Dig", "10L", "¡Limpia 10 líneas de queso lo más rápido que puedas!"}, ['dig_40l']= {"Dig", "40L", "¡Limpia 40 líneas de queso lo más rápido que puedas!"}, ['dig_100l']= {"Dig", "100L", "¡Limpia 100 líneas de queso lo más rápido que puedas!"}, diff --git a/parts/language/lang_fr.lua b/parts/language/lang_fr.lua index 482bfbe0..aa2fc73d 100644 --- a/parts/language/lang_fr.lua +++ b/parts/language/lang_fr.lua @@ -42,6 +42,7 @@ return { -- infHeightOn="Infinite Height ON", -- infHeightOff="Infinite Height OFF", -- infHeightHint="Toggle with Function 1 key", + -- highestGrade="(highest: $1)", speedLV="niveau de vitesse", piece="Pièce",line="Lignes",atk="Attaque",eff="Efficacité", @@ -796,6 +797,10 @@ return { ['sprint_1000l']= {"Sprint", "1000L", "Nettoyez 1000 lignes !"}, ['sprintPenta']= {"Sprint", "Pentomino", "40 lignes avec 18 pentominos."}, ['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"}, + -- ['sprint123']= {"Sprint", "M123", "40L with only monominoes, dominoes, and triminoes"}, + -- ['construct_sg']= {"Construct", "SECRET GRADE", "Build a zigzag shape by following the guide!"}, + -- ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, + -- ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, ['dig_10l']= {"Dig", "10L", "Creusez 10 lignes"}, ['dig_40l']= {"Dig", "40L", "Creusez 40 lignes"}, ['dig_100l']= {"Dig", "100L", "Creusez 100 lignes"}, diff --git a/parts/language/lang_id.lua b/parts/language/lang_id.lua index 5706eb01..5e5f942a 100644 --- a/parts/language/lang_id.lua +++ b/parts/language/lang_id.lua @@ -44,6 +44,7 @@ return { infHeightOn="Ketinggian Tak Terhingga ON", infHeightOff="Ketinggian Tak Terhingga OFF", infHeightHint="Ubah dengan tombol Fungsi 1", + highestGrade="(tertinggi: $1)", speedLV="Kecptn lvl", piece="Blok",line="Baris",atk="Baris Terkirim",eff="Efisiensi", @@ -828,7 +829,9 @@ return { ['sprintPenta']= {"Balapan", "PENTOMINO", "40L dengan pentomino!"}, ['sprintMPH']= {"Balapan", "MPH", "Tanpa ingatan\nTanpa pratinjau\nTanpa simpan"}, ['sprint123']= {"Balapan", "M123", "40L dengan hanya monomino, domino, dan trimino"}, - ['secret_grade']= {"Secret Grade", "", "Buatlah formasi lubang zigzag, menuruti panduannya!"}, + ['construct_sg']= {"Membangun", "SECRET GRADE", "Buatlah formasi lubang zigzag, menuruti panduannya!"}, + ['construct_checker']= {"Membangun", "KOTAK-KOTAK", "Buatlah pola kotak-kotak!"}, + ['construct_invsg']= {"Membangun", "SG TERBALIK", "Buatlah pola zigzag terbalik!"}, ['dig_10l']= {"Gali", "10L", "Gali 10 baris!"}, ['dig_40l']= {"Gali", "40L", "Gali 40 baris!"}, ['dig_100l']= {"Gali", "100L", "Gali 100 baris!"}, diff --git a/parts/language/lang_ja.lua b/parts/language/lang_ja.lua index d4edae45..4daa8d93 100644 --- a/parts/language/lang_ja.lua +++ b/parts/language/lang_ja.lua @@ -44,6 +44,7 @@ return { -- infHeightOn="Infinite Height ON", -- infHeightOff="Infinite Height OFF", -- infHeightHint="Toggle with Function 1 key", + -- highestGrade="(highest: $1)", speedLV="レベル", piece="ミノ数",line="line数",atk="火力",eff="効率", @@ -871,7 +872,9 @@ C. ゲームパッド ['sprintPenta']= {"スプリント", "PENTOMINO", "ペントミノで40line"}, ['sprintMPH']= {"スプリント", "MPH", "ミノ順なし\nネクストなし\nホールドなし!"}, ['sprint123']= {"スプリント", "M123", "モノミノ、ドミノ、トリミノで40line"}, - ['secret_grade']= {"裏GM", "", "ガイドに従ってジグザグに穴を作れ!"}, + ['construct_sg']= {"コンストラクト", "裏GM", "ガイドに従ってジグザグに穴を作れ!"}, + -- ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, + -- ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, ['dig_10l']= {"掘り", "10L", "10line下穴を掘れ!"}, ['dig_40l']= {"掘り", "40L", "40line下穴を掘れ!"}, ['dig_100l']= {"掘り", "100L", "100line下穴を掘れ!"}, diff --git a/parts/language/lang_pt.lua b/parts/language/lang_pt.lua index a5d010ab..6777d80e 100644 --- a/parts/language/lang_pt.lua +++ b/parts/language/lang_pt.lua @@ -33,6 +33,7 @@ return { -- infHeightOn="Infinite Height ON", -- infHeightOff="Infinite Height OFF", -- infHeightHint="Toggle with Function 1 key", + -- highestGrade="(highest: $1)", speedLV="Nível de velocidade", piece="Peça",line="Linhas",atk="Ataque",eff="Eficiência", @@ -815,6 +816,10 @@ return { ['sprint_1000l']= {"Sprint", "1000L", "Limpe 1000 linhas!"}, ['sprintPenta']= {"Sprint", "PENTOMINO", "Limpe 40 linhas com 18 pentominoes."}, ['sprintMPH']= {"Sprint", "MPH", "SemMem.\nSemPrévia\nSemSegurar"}, + -- ['sprint123']= {"Sprint", "M123", "40L with only monominoes, dominoes, and triminoes"}, + -- ['construct_sg']= {"Construct", "SECRET GRADE", "Build a zigzag shape by following the guide!"}, + -- ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, + -- ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, ['dig_10l']= {"Cave", "10L", "Cave 10 linhas de lixo."}, ['dig_40l']= {"Cave", "40L", "Cave 40 linhas de lixo."}, ['dig_100l']= {"Cave", "100L", "Cave 100 linhas de lixo."}, diff --git a/parts/language/lang_symbol.lua b/parts/language/lang_symbol.lua index ef5e94cc..a79f2155 100644 --- a/parts/language/lang_symbol.lua +++ b/parts/language/lang_symbol.lua @@ -41,6 +41,7 @@ return { infHeightOn="∞↑ "..CHAR.icon.checkMark, infHeightOff="∞↑ "..CHAR.icon.crossMark, infHeightHint=CHAR.icon.checkMark.."/"..CHAR.icon.crossMark..": F₁", + highestGrade="(↑: $1)", win=": )", lose=": (", diff --git a/parts/language/lang_vi.lua b/parts/language/lang_vi.lua index 94392eaf..85e5e0d6 100644 --- a/parts/language/lang_vi.lua +++ b/parts/language/lang_vi.lua @@ -49,6 +49,7 @@ return { infHeightOn="Infinite Height ON", infHeightOff="Infinite Height OFF", infHeightHint="Toggle with Function 1 key", + highestGrade="(highest: $1)", speedLV="Tốc độ rơi", piece="Gạch",line="Hàng",atk="Attack",eff="Efficiency", @@ -894,7 +895,9 @@ C. Tay cầm chơi game (Gamepad): ['sprintPenta']= {"Sprint", "PENTOMINO", "Xoá 40 hàng với 18 pentomino"}, ['sprintMPH']= {"Sprint", "MPH", "Memoryless\nPreviewless\nHoldless"}, ['sprint123']= {"Sprint", "M123", "Xoá 40 hàng chỉ với monomino, domino, và trimino"}, - ['secret_grade']= {"Secret Grade", "", "Xây một đường lỗ theo hình dích dắc!"}, + ['construct_sg']= {"Construct", "SECRET GRADE", "Xây một đường lỗ theo hình dích dắc!"}, + -- ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, + -- ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, ['dig_10l']= {"Dig", "10L", "Đào 10 hàng rác càng nhanh càng tốt"}, ['dig_40l']= {"Dig", "40L", "Đào 40 hàng rác càng nhanh càng tốt!"}, ['dig_100l']= {"Dig", "100L", "Đào 100 hàng rác càng nhanh càng tốt!"}, diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index 4453b70b..97284806 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -43,6 +43,7 @@ return { infHeightOn="无限高度 开", infHeightOff="无限高度 关", infHeightHint="用功能键1切换", + -- highestGrade="(highest: $1)", speedLV="速度等级", piece="块数",line="行数",atk="攻击",eff="效率", @@ -853,7 +854,9 @@ return { ['sprint_100l']= {"竞速", "100L", "消除100行"}, ['sprint_400l']= {"竞速", "400L", "消除400行"}, ['sprint_1000l']= {"竞速", "1000L", "消除1000行"}, - ['secret_grade']= {"秘密段位", "", "按照提示完成经典的“大于号”拼图"}, + ['construct_sg']= {"建设", "秘密段位", "按照提示完成经典的“大于号”拼图"}, + -- ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, + -- ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, ['sprintPenta']= {"竞速", "五连块", "伤脑筋十八块"}, ['sprintMPH']= {"竞速", "MPH", "纯随机\n无预览\n无暂存"}, ['sprint123']= {"竞速", "M123", "40L,但只有1~3连块"}, diff --git a/parts/language/lang_zh_code.lua b/parts/language/lang_zh_code.lua index 8c5869ec..eb43edb2 100644 --- a/parts/language/lang_zh_code.lua +++ b/parts/language/lang_zh_code.lua @@ -42,6 +42,7 @@ return { infHeightOn="infHeight=true", infHeightOff="infHeight=false", infHeightHint="F1:!infHeight", + highestGrade="(max=$1)", speedLV="P.SpeedLV", piece="P.Piece",line="P.Line",atk="P.ATK",eff="P.EFF", @@ -766,116 +767,118 @@ return { }, }, modes={ - ['sprint_10l']= {"Sprint(10L);", "", "消除10行"}, - ['sprint_20l']= {"Sprint(20L);", "", "消除20行"}, - ['sprint_40l']= {"Sprint(40L);", "", "消除40行"}, - ['sprint_100l']= {"Sprint(100L);", "", "消除100行"}, - ['sprint_400l']= {"Sprint(400L);", "", "消除400行"}, - ['sprint_1000l']= {"Sprint(1000L);", "", "消除1000行"}, - ['secret_grade']= {"SecretGrade();", "", "按照提示完成经典的“大于号”拼图"}, - ['sprintPenta']= {"Sprint(Penta);", "", "伤脑筋十八块"}, - ['sprintMPH']= {"Sprint(MPH);", "", "纯随机\n无预览\n无暂存"}, - ['sprint123']= {"Sprint(M123);", "", "40L,但只有1~3连块"}, - ['dig_10l']= {"Dig(10L);", "", "挖掘10行"}, - ['dig_40l']= {"Dig(40L);", "", "挖掘40行"}, - ['dig_100l']= {"Dig(100L);", "", "挖掘100行"}, - ['dig_400l']= {"Dig(400L);", "", "挖掘400行"}, - ['dig_eff_10l']= {"DigEff(10L);", "", "用尽量少的块数挖掘10行"}, - ['dig_eff_40l']= {"DigEff(40L);", "", "用尽量少的块数挖掘40行"}, - ['dig_eff_100l']= {"DigEff(100L);", "", "用尽量少的块数挖掘100行"}, - ['dig_eff_400l']= {"DigEff(400L);", "", "用尽量少的块数挖掘400行"}, - ['dig_quad_10l']= {"DigQuad(10L);", "", "挖掘10行,但只能消四"}, - ['drought_n']= {"Drought(100L);", "", "你I没了"}, - ['drought_l']= {"DroughtP(100L);", "", "后 妈 发 牌"}, - ['marathon_n']= {"Marathon(Normal);", "", "200行加速马拉松"}, - ['marathon_h']= {"Marathon(Hard);", "", "200行高速马拉松"}, - ['solo_e']= {"Solo(Easy);", "", "打败AI"}, - ['solo_n']= {"Solo(Normal);", "", "打败AI"}, - ['solo_h']= {"Solo(Hard);", "", "打败AI"}, - ['solo_l']= {"Solo(Lunatic);", "", "打败AI"}, - ['solo_u']= {"Solo(Ultimate);", "", "打败AI"}, - ['techmino49_e']= {"Tech49(Easy);", "", "49人混战,活到最后"}, - ['techmino49_h']= {"Tech49(Hard);", "", "49人混战,活到最后"}, - ['techmino49_u']= {"Tech49(Ultimate);", "", "49人混战,活到最后"}, - ['techmino99_e']= {"Tech99(Easy);", "", "99人混战,活到最后"}, - ['techmino99_h']= {"Tech99(Hard);", "", "99人混战,活到最后"}, - ['techmino99_u']= {"Tech99(Ultimate);", "", "99人混战,活到最后"}, - ['round_e']= {"Round(Easy);", "", "下棋模式"}, - ['round_n']= {"Round(Normal);", "", "下棋模式"}, - ['round_h']= {"Round(Hard);", "", "下棋模式"}, - ['round_l']= {"Round(Lunatic);", "", "下棋模式"}, - ['round_u']= {"Round(Ultimate);", "", "下棋模式"}, - ['big_n']= {"Big(Normal);", "", "模拟10*5场地的玩法(标准尺寸的一半)"}, - ['big_h']= {"Big(Hard);", "", "模拟10*5场地的玩法(标准尺寸的一半)"}, - ['master_n']= {"Master(Normal);", "", "20G初心者练习"}, - ['master_h']= {"Master(Hard);", "", "上级者20G挑战"}, - ['master_m']= {"Master(M21);", "", "大师20G"}, - ['master_final']= {"Master(Final);", "", "究极20G:无法触及的终点"}, - ['master_ph']= {"Master(Phantasm);", "", "虚幻20G:???"}, - ['master_g']= {"Master(Graded);", "", "20G段位考试"}, - ['master_ex']= {"Master(EX);", "", "成为方块大师"}, - ['master_instinct']={"Master(Instinct);", "", "当前块在出现后一小会后会隐形"}, - ['strategy_e']= {"Strategy(Easy);", "", "20G堆叠中速决策练习"}, - ['strategy_h']= {"Strategy(Hard);", "", "20G堆叠快速决策练习"}, - ['strategy_u']= {"Strategy(Ultimate);", "", "20G堆叠极速决策练习"}, - ['strategy_e_plus']={"Strategy(EasyP);", "", "20G堆叠中速决策练习\n无Hold"}, - ['strategy_h_plus']={"Strategy(HardP);", "", "20G堆叠快速决策练习\n无Hold"}, - ['strategy_u_plus']={"Strategy(UltimateP);","", "20G堆叠极速决策练习\n无Hold"}, - ['blind_e']= {"Blind(Slow);", "", "不强大脑"}, - ['blind_n']= {"Blind(Fast);", "", "挺强大脑"}, - ['blind_h']= {"Blind(Instant);", "", "很强大脑"}, - ['blind_l']= {"Blind(NoGhost);", "", "最强大脑"}, - ['blind_u']= {"Blind(NoField);", "", "你准备好了吗"}, - ['blind_wtf']= {"Blind(Voie);" , "", "还没准备好"}, - ['classic_e']= {"Classic(Easy);", "", "高速经典"}, - ['classic_h']= {"Classic(Hard);", "", "飞速经典"}, - ['classic_l']= {"Classic(Lunatic);", "", "极速经典"}, - ['classic_u']= {"Classic(Ultimate);", "", "光速经典"}, - ['survivor_e']= {"Surviver(Easy);", "", "你能存活多久?"}, - ['survivor_n']= {"Surviver(Normal);", "", "你能存活多久?"}, - ['survivor_h']= {"Surviver(Hard);", "", "你能存活多久?"}, - ['survivor_l']= {"Surviver(Lunatic);", "", "你能存活多久?"}, - ['survivor_u']= {"Surviver(Ultimate);", "", "你能存活多久?"}, - ['attacker_h']= {"Attacker(Hard);", "", "进攻练习"}, - ['attacker_u']= {"Attacker(Ultimate);", "", "进攻练习"}, - ['defender_n']= {"Defender(Normal);", "", "防守练习"}, - ['defender_l']= {"Defender(Lunatic);", "", "防守练习"}, - ['dig_h']= {"Dig(Hard);", "", "挖掘练习"}, - ['dig_u']= {"Dig(Ultimate);", "", "挖掘练习"}, - ['c4wtrain_n']= {"C4WTrain(Normal);", "", "无 限 连 击"}, - ['c4wtrain_l']= {"C4WTrain(Lunatic);", "", "无 限 连 击"}, - ['pctrain_n']= {"PCTrain(Normal);", "", "简易PC题库,熟悉全清定式的组合"}, - ['pctrain_l']= {"PCTrain(Lunatic);", "", "困难PC题库,强算力者进"}, - ['pc_n']= {"PC(Normal);", "", "100行内刷PC"}, - ['pc_h']= {"PC(Hard);", "", "100行内刷PC"}, - ['pc_l']= {"PC(Lunatic);", "", "100行内刷PC"}, - ['pc_inf']= {"PC(Inf);", "", "你能连续做多少PC?"}, - ['tech_n']= {"Tech(Normal);", "", "禁止断B2B"}, - ['tech_n_plus']= {"Tech(NormalP);", "", "仅允许spin与PC"}, - ['tech_h']= {"Tech(Hard);", "", "禁止断B2B"}, - ['tech_h_plus']= {"Tech(HardP);", "", "仅允许spin与PC"}, - ['tech_l']= {"Tech(Lunatic);", "", "禁止断B2B"}, - ['tech_l_plus']= {"Tech(LunaticP);", "", "仅允许spin与PC"}, - ['tech_finesse']= {"Tech(Finesse);", "", "强制最简操作"}, - ['tech_finesse_f']= {"Tech(FinesseF);", "", "禁止普通消除,强制最简操作"}, - ['tech_finesse_lock']= {"Tech(FineeseLock);","", "限制操作次数"}, - ['tech_finesse_lock_f']={"Tech(FineeseLockF);","", "限制操作次数,禁止断B2B"}, - ['tsd_e']= {"TSD(Easy);", "", "你能连续做几个TSD?"}, - ['tsd_h']= {"TSD(Hard);", "", "你能连续做几个TSD?"}, - ['tsd_u']= {"TSD(Ultimate);", "", "你能连续做几个TSD?"}, - ['backfire_n']= {"Backfire(Normal);", "", "打出100攻击"}, - ['backfire_h']= {"Backfire(Hard);", "", "打出100攻击"}, - ['backfire_l']= {"Backfire(Lunatic);", "", "打出100攻击"}, - ['backfire_u']= {"Backfire(Ultimate);", "", "打出100攻击"}, - ['sprintAtk']= {"Sprint(100ATK);", "", "打出100攻击"}, - ['sprintEff']= {"Sprint(EFF);", "", "40行内打出更高的攻击"}, - ['zen']= {"Zen(200L);", "", "不限时200行"}, - ['ultra']= {"Ultra(EXTRA);", "", "在两分钟内尽可能拿到最多的分数"}, - ['infinite']= {"Infinite();", "", "沙盒"}, - ['infinite_dig']= {"InfDig();", "", "挖呀挖呀挖"}, - ['marathon_inf']= {"Marathon(Inf);", "", "无尽马拉松"}, + ['sprint_10l']= {"Sprint(10L);", "", "消除10行"}, + ['sprint_20l']= {"Sprint(20L);", "", "消除20行"}, + ['sprint_40l']= {"Sprint(40L);", "", "消除40行"}, + ['sprint_100l']= {"Sprint(100L);", "", "消除100行"}, + ['sprint_400l']= {"Sprint(400L);", "", "消除400行"}, + ['sprint_1000l']= {"Sprint(1000L);", "", "消除1000行"}, + ['construct_sg']= {"Construct(SecretGrade);", "", "按照提示完成经典的“大于号”拼图"}, + -- ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, + -- ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, + ['sprintPenta']= {"Sprint(Penta);", "", "伤脑筋十八块"}, + ['sprintMPH']= {"Sprint(MPH);", "", "纯随机\n无预览\n无暂存"}, + ['sprint123']= {"Sprint(M123);", "", "40L,但只有1~3连块"}, + ['dig_10l']= {"Dig(10L);", "", "挖掘10行"}, + ['dig_40l']= {"Dig(40L);", "", "挖掘40行"}, + ['dig_100l']= {"Dig(100L);", "", "挖掘100行"}, + ['dig_400l']= {"Dig(400L);", "", "挖掘400行"}, + ['dig_eff_10l']= {"DigEff(10L);", "", "用尽量少的块数挖掘10行"}, + ['dig_eff_40l']= {"DigEff(40L);", "", "用尽量少的块数挖掘40行"}, + ['dig_eff_100l']= {"DigEff(100L);", "", "用尽量少的块数挖掘100行"}, + ['dig_eff_400l']= {"DigEff(400L);", "", "用尽量少的块数挖掘400行"}, + ['dig_quad_10l']= {"DigQuad(10L);", "", "挖掘10行,但只能消四"}, + ['drought_n']= {"Drought(100L);", "", "你I没了"}, + ['drought_l']= {"DroughtP(100L);", "", "后 妈 发 牌"}, + ['marathon_n']= {"Marathon(Normal);", "", "200行加速马拉松"}, + ['marathon_h']= {"Marathon(Hard);", "", "200行高速马拉松"}, + ['solo_e']= {"Solo(Easy);", "", "打败AI"}, + ['solo_n']= {"Solo(Normal);", "", "打败AI"}, + ['solo_h']= {"Solo(Hard);", "", "打败AI"}, + ['solo_l']= {"Solo(Lunatic);", "", "打败AI"}, + ['solo_u']= {"Solo(Ultimate);", "", "打败AI"}, + ['techmino49_e']= {"Tech49(Easy);", "", "49人混战,活到最后"}, + ['techmino49_h']= {"Tech49(Hard);", "", "49人混战,活到最后"}, + ['techmino49_u']= {"Tech49(Ultimate);", "", "49人混战,活到最后"}, + ['techmino99_e']= {"Tech99(Easy);", "", "99人混战,活到最后"}, + ['techmino99_h']= {"Tech99(Hard);", "", "99人混战,活到最后"}, + ['techmino99_u']= {"Tech99(Ultimate);", "", "99人混战,活到最后"}, + ['round_e']= {"Round(Easy);", "", "下棋模式"}, + ['round_n']= {"Round(Normal);", "", "下棋模式"}, + ['round_h']= {"Round(Hard);", "", "下棋模式"}, + ['round_l']= {"Round(Lunatic);", "", "下棋模式"}, + ['round_u']= {"Round(Ultimate);", "", "下棋模式"}, + ['big_n']= {"Big(Normal);", "", "模拟10*5场地的玩法(标准尺寸的一半)"}, + ['big_h']= {"Big(Hard);", "", "模拟10*5场地的玩法(标准尺寸的一半)"}, + ['master_n']= {"Master(Normal);", "", "20G初心者练习"}, + ['master_h']= {"Master(Hard);", "", "上级者20G挑战"}, + ['master_m']= {"Master(M21);", "", "大师20G"}, + ['master_final']= {"Master(Final);", "", "究极20G:无法触及的终点"}, + ['master_ph']= {"Master(Phantasm);", "", "虚幻20G:???"}, + ['master_g']= {"Master(Graded);", "", "20G段位考试"}, + ['master_ex']= {"Master(EX);", "", "成为方块大师"}, + ['master_instinct']= {"Master(Instinct);", "", "当前块在出现后一小会后会隐形"}, + ['strategy_e']= {"Strategy(Easy);", "", "20G堆叠中速决策练习"}, + ['strategy_h']= {"Strategy(Hard);", "", "20G堆叠快速决策练习"}, + ['strategy_u']= {"Strategy(Ultimate);", "", "20G堆叠极速决策练习"}, + ['strategy_e_plus']= {"Strategy(EasyP);", "", "20G堆叠中速决策练习\n无Hold"}, + ['strategy_h_plus']= {"Strategy(HardP);", "", "20G堆叠快速决策练习\n无Hold"}, + ['strategy_u_plus']= {"Strategy(UltimateP);", "", "20G堆叠极速决策练习\n无Hold"}, + ['blind_e']= {"Blind(Slow);", "", "不强大脑"}, + ['blind_n']= {"Blind(Fast);", "", "挺强大脑"}, + ['blind_h']= {"Blind(Instant);", "", "很强大脑"}, + ['blind_l']= {"Blind(NoGhost);", "", "最强大脑"}, + ['blind_u']= {"Blind(NoField);", "", "你准备好了吗"}, + ['blind_wtf']= {"Blind(Voie);" , "", "还没准备好"}, + ['classic_e']= {"Classic(Easy);", "", "高速经典"}, + ['classic_h']= {"Classic(Hard);", "", "飞速经典"}, + ['classic_l']= {"Classic(Lunatic);", "", "极速经典"}, + ['classic_u']= {"Classic(Ultimate);", "", "光速经典"}, + ['survivor_e']= {"Surviver(Easy);", "", "你能存活多久?"}, + ['survivor_n']= {"Surviver(Normal);", "", "你能存活多久?"}, + ['survivor_h']= {"Surviver(Hard);", "", "你能存活多久?"}, + ['survivor_l']= {"Surviver(Lunatic);", "", "你能存活多久?"}, + ['survivor_u']= {"Surviver(Ultimate);", "", "你能存活多久?"}, + ['attacker_h']= {"Attacker(Hard);", "", "进攻练习"}, + ['attacker_u']= {"Attacker(Ultimate);", "", "进攻练习"}, + ['defender_n']= {"Defender(Normal);", "", "防守练习"}, + ['defender_l']= {"Defender(Lunatic);", "", "防守练习"}, + ['dig_h']= {"Dig(Hard);", "", "挖掘练习"}, + ['dig_u']= {"Dig(Ultimate);", "", "挖掘练习"}, + ['c4wtrain_n']= {"C4WTrain(Normal);", "", "无 限 连 击"}, + ['c4wtrain_l']= {"C4WTrain(Lunatic);", "", "无 限 连 击"}, + ['pctrain_n']= {"PCTrain(Normal);", "", "简易PC题库,熟悉全清定式的组合"}, + ['pctrain_l']= {"PCTrain(Lunatic);", "", "困难PC题库,强算力者进"}, + ['pc_n']= {"PC(Normal);", "", "100行内刷PC"}, + ['pc_h']= {"PC(Hard);", "", "100行内刷PC"}, + ['pc_l']= {"PC(Lunatic);", "", "100行内刷PC"}, + ['pc_inf']= {"PC(Inf);", "", "你能连续做多少PC?"}, + ['tech_n']= {"Tech(Normal);", "", "禁止断B2B"}, + ['tech_n_plus']= {"Tech(NormalP);", "", "仅允许spin与PC"}, + ['tech_h']= {"Tech(Hard);", "", "禁止断B2B"}, + ['tech_h_plus']= {"Tech(HardP);", "", "仅允许spin与PC"}, + ['tech_l']= {"Tech(Lunatic);", "", "禁止断B2B"}, + ['tech_l_plus']= {"Tech(LunaticP);", "", "仅允许spin与PC"}, + ['tech_finesse']= {"Tech(Finesse);", "", "强制最简操作"}, + ['tech_finesse_f']= {"Tech(FinesseF);", "", "禁止普通消除,强制最简操作"}, + ['tech_finesse_lock']= {"Tech(FineeseLock);", "", "限制操作次数"}, + ['tech_finesse_lock_f']={"Tech(FineeseLockF);", "", "限制操作次数,禁止断B2B"}, + ['tsd_e']= {"TSD(Easy);", "", "你能连续做几个TSD?"}, + ['tsd_h']= {"TSD(Hard);", "", "你能连续做几个TSD?"}, + ['tsd_u']= {"TSD(Ultimate);", "", "你能连续做几个TSD?"}, + ['backfire_n']= {"Backfire(Normal);", "", "打出100攻击"}, + ['backfire_h']= {"Backfire(Hard);", "", "打出100攻击"}, + ['backfire_l']= {"Backfire(Lunatic);", "", "打出100攻击"}, + ['backfire_u']= {"Backfire(Ultimate);", "", "打出100攻击"}, + ['sprintAtk']= {"Sprint(100ATK);", "", "打出100攻击"}, + ['sprintEff']= {"Sprint(EFF);", "", "40行内打出更高的攻击"}, + ['zen']= {"Zen(200L);", "", "不限时200行"}, + ['ultra']= {"Ultra(EXTRA);", "", "在两分钟内尽可能拿到最多的分数"}, + ['infinite']= {"Infinite();", "", "沙盒"}, + ['infinite_dig']= {"InfDig();", "", "挖呀挖呀挖"}, + ['marathon_inf']= {"Marathon(Inf);", "", "无尽马拉松"}, - ['custom_clear']= {"Ctm(Clear);", ""}, - ['custom_puzzle']= {"Ctm(Puzzle);", ""}, + ['custom_clear']= {"Custom(Clear);", ""}, + ['custom_puzzle']= {"Custom(Puzzle);", ""}, }, } diff --git a/parts/language/lang_zh_trad.lua b/parts/language/lang_zh_trad.lua index 085021a2..4442f940 100644 --- a/parts/language/lang_zh_trad.lua +++ b/parts/language/lang_zh_trad.lua @@ -43,6 +43,7 @@ return { infHeightOn="無限高度 開", infHeightOff="無限高度 關", infHeightHint="用功能鍵1切換", + -- highestGrade="(highest: $1)", speedLV="速度等級", piece="塊數",line="行數",atk="攻擊",eff="效率", @@ -824,7 +825,9 @@ return { ['sprint_100l']= {"競速", "100L", "清除100行"}, ['sprint_400l']= {"競速", "400L", "清除400行"}, ['sprint_1000l']= {"競速", "1000L", "清除1000行"}, - ['secret_grade']= {"秘密段位", "", "按照提示完成經典的“大於號”拼圖"}, + ['construct_sg']= {"建設", "秘密段位", "按照提示完成經典的“大於號”拼圖"}, + -- ['construct_checker']= {"Construct", "CHECKERBOARD", "Build a checkerboard pattern!"}, + -- ['construct_invsg']= {"Construct", "INV. SG", "Build an inverted zigzag pattern!"}, ['sprintPenta']= {"競速", "五連塊", "傷腦筋十八塊"}, ['sprintMPH']= {"競速", "MPH", "純隨機\n無Next\n無Hold"}, ['sprint123']= {"競速", "M123", "清除40行,但只有一至三連塊"}, diff --git a/parts/modes.lua b/parts/modes.lua index 87d9d33c..92d65790 100644 --- a/parts/modes.lua +++ b/parts/modes.lua @@ -1,7 +1,7 @@ return { {name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}}, {name='sprint_20l', x=-200, y=200, size=50,shape=1,icon="sprint1"}, - {name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','sprint123','secret_grade'}}, + {name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','sprint123','construct_sg'}}, {name='sprint_100l', x=-400, y=200, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}}, {name='sprint_400l', x=-600, y=200, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}}, {name='sprint_1000l', x=-800, y=200, size=40,shape=1,icon="sprint3"}, @@ -10,7 +10,7 @@ return { {name='sprintMPH', x=200, y=-260, size=40,shape=3,icon="sprint2"}, {name='sprintPenta', x=130, y=-140, size=40,shape=3,icon="sprint_pento"}, - {name='secret_grade', x=-200, y=-400, size=40,shape=1,icon="secret_grade"}, + {name='construct_sg', x=-200, y=-400, size=40,shape=1,icon="secret_grade"}, {name='drought_n', x=-600, y=400, size=40,shape=1,icon="drought", unlock={'drought_l'}}, {name='drought_l', x=-800, y=400, size=40,shape=1,icon="drought"}, diff --git a/parts/modes/construct_checker.lua b/parts/modes/construct_checker.lua new file mode 100644 index 00000000..0964f367 --- /dev/null +++ b/parts/modes/construct_checker.lua @@ -0,0 +1,22 @@ +return { + env={ + drop=180,lock=600, + hang=40, + infHold=true, + eventSet='construct_checker', + bg='bg2',bgm='race', + }, + score=function(P) return {P.modeData.maxRankPts,P.stat.piece} end, + scoreDisp=function(D) return getConstructGradeText(D[1]).." "..D[2].." Pieces" end, + comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]=18 and 5 or + G>=15 and 4 or + G>=12 and 3 or + G>=8 and 2 or + G>=4 and 1 or + G>=2 and 0 + end, +} diff --git a/parts/modes/construct_invsg.lua b/parts/modes/construct_invsg.lua new file mode 100644 index 00000000..73c5e23c --- /dev/null +++ b/parts/modes/construct_invsg.lua @@ -0,0 +1,22 @@ +return { + env={ + drop=180,lock=600, + hang=40, + infHold=true, + eventSet='construct_invsg', + bg='bg2',bgm='race', + }, + score=function(P) return {P.modeData.rankPts,P.stat.piece} end, + scoreDisp=function(D) return getConstructGradeText(D[1]).." "..D[2].." Pieces" end, + comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]=10 and 5 or + G>=8 and 4 or + G>=6 and 3 or + G>=4 and 2 or + G>=3 and 1 or + G>=2 and 0 + end, +} diff --git a/parts/modes/secret_grade.lua b/parts/modes/construct_sg.lua similarity index 60% rename from parts/modes/secret_grade.lua rename to parts/modes/construct_sg.lua index da8d55bc..c52dd608 100644 --- a/parts/modes/secret_grade.lua +++ b/parts/modes/construct_sg.lua @@ -2,14 +2,14 @@ return { env={ drop=180,lock=180, hang=15, - eventSet='secret_grade', + eventSet='construct_sg', bg='bg2',bgm='race', }, - score=function(P) return {P.modeData.rankPts,P.stat.piece} end, - scoreDisp=function(D) return getSecretGradeText(D[1]).." "..D[2].." Pieces" end, + score=function(P) return {P.modeData.maxRankPts,P.stat.piece} end, + scoreDisp=function(D) return getConstructGradeText(D[1]).." "..D[2].." Pieces" end, comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]=23 and 5 or G>=21 and 4 or From 2f6a3392e603f62b65924e64911f5345ed9f58e3 Mon Sep 17 00:00:00 2001 From: NOT_A_ROBOT Date: Tue, 3 Oct 2023 07:32:56 +0700 Subject: [PATCH 2/6] De-nest Construct modes' display code --- parts/eventsets/construct_checker.lua | 61 +++++++++++++-------------- parts/eventsets/construct_invsg.lua | 61 +++++++++++++-------------- parts/eventsets/construct_sg.lua | 61 +++++++++++++-------------- 3 files changed, 87 insertions(+), 96 deletions(-) diff --git a/parts/eventsets/construct_checker.lua b/parts/eventsets/construct_checker.lua index a88dca6c..37824ae2 100644 --- a/parts/eventsets/construct_checker.lua +++ b/parts/eventsets/construct_checker.lua @@ -60,42 +60,39 @@ return { GC.mStr(text.highest:repD(D.maxRankPts+1),63,336) end + if not D.showGuide then return end ply_applyField(P) local mark=TEXTURE.puzzleMark - if D.showGuide then - local firstMistake=nil - for y=1,D.rankPts+1 do - for x=1,10 do - local texture=targetField[y][x] - -- Missing blocks - if not P:solid(x,y) and texture>0 then - - -- Missing block under overhang - if P:solid(x,y+1) then - firstMistake=firstMistake or y - gc_setColor(COLOR.R) - else - gc_setColor(COLOR.Z) - end - - gc_draw(mark[texture],30*x-30,600-30*y) - elseif texture<0 then - -- X always gets displayed, color changes based on whether there is a block there - if P:solid(x,y) then - gc_setColor(COLOR.R) - firstMistake=firstMistake or y - elseif D.rankPts>y then - gc_setColor(COLOR.G) - else - gc_setColor(COLOR.Z) - end - gc_draw(mark[texture],30*x-30,600-30*y) + local firstMistake=nil + for y=1,D.rankPts+1 do + for x=1,10 do + local texture=targetField[y][x] + -- Missing blocks + if not P:solid(x,y) and texture>0 then + -- Missing block under overhang + if P:solid(x,y+1) then + firstMistake=firstMistake or y + gc_setColor(COLOR.R) + else + gc_setColor(COLOR.Z) end + gc_draw(mark[texture],30*x-30,600-30*y) + elseif texture<0 then + -- X always gets displayed, color changes based on whether there is a block there + if P:solid(x,y) then + gc_setColor(COLOR.R) + firstMistake=firstMistake or y + elseif D.rankPts>y then + gc_setColor(COLOR.G) + else + gc_setColor(COLOR.Z) + end + gc_draw(mark[texture],30*x-30,600-30*y) end - if y==firstMistake then - gc_setColor(1,0,0,.2*(math.sin(2*TIME())+1)) - love.graphics.rectangle("fill",0,600-30*y,300,30) - end + end + if y==firstMistake then + gc_setColor(1,0,0,.2*(math.sin(2*TIME())+1)) + love.graphics.rectangle("fill",0,600-30*y,300,30) end end PLY.draw.cancelField() diff --git a/parts/eventsets/construct_invsg.lua b/parts/eventsets/construct_invsg.lua index 4cf5d7b5..9856f032 100644 --- a/parts/eventsets/construct_invsg.lua +++ b/parts/eventsets/construct_invsg.lua @@ -61,42 +61,39 @@ return { GC.mStr(text.highest:repD(D.maxRankPts+1),63,336) end + if not D.showGuide then return end ply_applyField(P) local mark=TEXTURE.puzzleMark - if D.showGuide then - local firstMistake=nil - for y=1,D.rankPts+1 do - for x=1,10 do - local texture=targetField[y][x] - -- Missing blocks - if not P:solid(x,y) and texture>0 then - - -- Missing block under overhang - if P:solid(x,y+1) then - firstMistake=firstMistake or y - gc_setColor(COLOR.R) - else - gc_setColor(COLOR.Z) - end - - gc_draw(mark[texture],30*x-30,600-30*y) - elseif texture<0 then - -- X always gets displayed, color changes based on whether there is a block there - if P:solid(x,y) then - gc_setColor(COLOR.R) - firstMistake=firstMistake or y - elseif D.rankPts>y then - gc_setColor(COLOR.G) - else - gc_setColor(COLOR.Z) - end - gc_draw(mark[texture],30*x-30,600-30*y) + local firstMistake=nil + for y=1,D.rankPts+1 do + for x=1,10 do + local texture=targetField[y][x] + -- Missing blocks + if not P:solid(x,y) and texture>0 then + -- Missing block under overhang + if P:solid(x,y+1) then + firstMistake=firstMistake or y + gc_setColor(COLOR.R) + else + gc_setColor(COLOR.Z) end + gc_draw(mark[texture],30*x-30,600-30*y) + elseif texture<0 then + -- X always gets displayed, color changes based on whether there is a block there + if P:solid(x,y) then + gc_setColor(COLOR.R) + firstMistake=firstMistake or y + elseif D.rankPts>y then + gc_setColor(COLOR.G) + else + gc_setColor(COLOR.Z) + end + gc_draw(mark[texture],30*x-30,600-30*y) end - if y==firstMistake then - gc_setColor(1,0,0,.2*(math.sin(2*TIME())+1)) - love.graphics.rectangle("fill",0,600-30*y,300,30) - end + end + if y==firstMistake then + gc_setColor(1,0,0,.2*(math.sin(2*TIME())+1)) + love.graphics.rectangle("fill",0,600-30*y,300,30) end end PLY.draw.cancelField() diff --git a/parts/eventsets/construct_sg.lua b/parts/eventsets/construct_sg.lua index 67b4e1b3..11e56383 100644 --- a/parts/eventsets/construct_sg.lua +++ b/parts/eventsets/construct_sg.lua @@ -61,42 +61,39 @@ return { GC.mStr(text.highest:repD(D.maxRankPts+1),63,336) end + if not D.showGuide then return end ply_applyField(P) local mark=TEXTURE.puzzleMark - if D.showGuide then - local firstMistake=nil - for y=1,D.rankPts+1 do - for x=1,10 do - local texture=targetField[y][x] - -- Missing blocks - if not P:solid(x,y) and texture>0 then - - -- Missing block under overhang - if P:solid(x,y+1) then - firstMistake=firstMistake or y - gc_setColor(COLOR.R) - else - gc_setColor(COLOR.Z) - end - - gc_draw(mark[texture],30*x-30,600-30*y) - elseif texture<0 then - -- X always gets displayed, color changes based on whether there is a block there - if P:solid(x,y) then - gc_setColor(COLOR.R) - firstMistake=firstMistake or y - elseif D.rankPts>y then - gc_setColor(COLOR.G) - else - gc_setColor(COLOR.Z) - end - gc_draw(mark[texture],30*x-30,600-30*y) + local firstMistake=nil + for y=1,D.rankPts+1 do + for x=1,10 do + local texture=targetField[y][x] + -- Missing blocks + if not P:solid(x,y) and texture>0 then + -- Missing block under overhang + if P:solid(x,y+1) then + firstMistake=firstMistake or y + gc_setColor(COLOR.R) + else + gc_setColor(COLOR.Z) end + gc_draw(mark[texture],30*x-30,600-30*y) + elseif texture<0 then + -- X always gets displayed, color changes based on whether there is a block there + if P:solid(x,y) then + gc_setColor(COLOR.R) + firstMistake=firstMistake or y + elseif D.rankPts>y then + gc_setColor(COLOR.G) + else + gc_setColor(COLOR.Z) + end + gc_draw(mark[texture],30*x-30,600-30*y) end - if y==firstMistake then - gc_setColor(1,0,0,.2*(math.sin(2*TIME())+1)) - love.graphics.rectangle("fill",0,600-30*y,300,30) - end + end + if y==firstMistake then + gc_setColor(1,0,0,.2*(math.sin(2*TIME())+1)) + love.graphics.rectangle("fill",0,600-30*y,300,30) end end PLY.draw.cancelField() From 33fc59bd5c029ce254912130b490694577b07fe1 Mon Sep 17 00:00:00 2001 From: NOT_A_ROBOT Date: Tue, 3 Oct 2023 07:43:42 +0700 Subject: [PATCH 3/6] Add secret grade to old mode list --- parts/gameTables.lua | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/parts/gameTables.lua b/parts/gameTables.lua index d1eee3b2..c5197432 100644 --- a/parts/gameTables.lua +++ b/parts/gameTables.lua @@ -293,6 +293,7 @@ MODE_UPDATE_MAP={ round_3="round_l", round_4="round_n", round_5="round_u", + secret_grade="construct_sg", solo_1="solo_e", solo_2="solo_h", solo_3="solo_l", @@ -326,8 +327,8 @@ MODE_UPDATE_MAP={ tsd_hard="tsd_h", tsd_ultimate="tsd_u", GM="master_ex", - master_beginner="master_l", - master_advance="master_u", + master_beginner="master_n", + master_advance="master_h", master_phantasm="master_ph", master_extra="master_ex", } From 22ca0a7c9662f9e6af53269e5d2a0c1cc4d3f32f Mon Sep 17 00:00:00 2001 From: NOT_A_ROBOT Date: Tue, 3 Oct 2023 08:18:10 +0700 Subject: [PATCH 4/6] Add Construct modes to map --- parts/modes.lua | 48 ++++++++++++++++++++++--------------------- parts/scenes/mode.lua | 6 ++++-- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/parts/modes.lua b/parts/modes.lua index 92d65790..f1a2a316 100644 --- a/parts/modes.lua +++ b/parts/modes.lua @@ -1,7 +1,7 @@ return { {name='sprint_10l', x=0, y=0, size=40,shape=1,icon="sprint1", unlock={'sprint_20l','sprint_40l'}}, {name='sprint_20l', x=-200, y=200, size=50,shape=1,icon="sprint1"}, - {name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','sprint123','construct_sg'}}, + {name='sprint_40l', x=0, y=-300, size=40,shape=1,icon="sprint2", unlock={'dig_10l','sprint_100l','marathon_n','sprintPenta','sprintMPH','sprint123'}}, {name='sprint_100l', x=-400, y=200, size=50,shape=1,icon="sprint2", unlock={'sprint_400l','drought_n'}}, {name='sprint_400l', x=-600, y=200, size=40,shape=1,icon="sprint3", unlock={'sprint_1000l'}}, {name='sprint_1000l', x=-800, y=200, size=40,shape=1,icon="sprint3"}, @@ -10,8 +10,6 @@ return { {name='sprintMPH', x=200, y=-260, size=40,shape=3,icon="sprint2"}, {name='sprintPenta', x=130, y=-140, size=40,shape=3,icon="sprint_pento"}, - {name='construct_sg', x=-200, y=-400, size=40,shape=1,icon="secret_grade"}, - {name='drought_n', x=-600, y=400, size=40,shape=1,icon="drought", unlock={'drought_l'}}, {name='drought_l', x=-800, y=400, size=40,shape=1,icon="drought"}, @@ -25,7 +23,7 @@ return { {name='dig_eff_100l', x=-800, y=0, size=40,shape=1,icon="dig_sprint", unlock={'dig_eff_400l'}}, {name='dig_eff_400l', x=-1000, y=0, size=40,shape=1,icon="dig_sprint"}, - {name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon", unlock={'marathon_h','solo_e','round_e','big_n','blind_e','classic_e','survivor_e','c4wtrain_n','pctrain_n','sprintAtk','zen'}}, + {name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon", unlock={'marathon_h','solo_e','round_e','big_n','blind_e','classic_e','survivor_e','c4wtrain_n','construct_sg','pctrain_n','sprintAtk','zen'}}, {name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon", unlock={'master_n','strategy_e'}}, {name='solo_e', x=-600, y=-1000, size=40,shape=1,icon="solo", unlock={'solo_n'}}, @@ -93,16 +91,20 @@ return { {name='dig_h', x=850, y=-800, size=40,shape=1,icon="dig", unlock={'dig_u'}}, {name='dig_u', x=850, y=-1000, size=40,shape=1,icon="dig"}, - {name='c4wtrain_n', x=700, y=-450, size=40,shape=1,icon="pc", unlock={'c4wtrain_l'}}, - {name='c4wtrain_l', x=900, y=-450, size=40,shape=1,icon="pc"}, + {name='construct_sg', x=700, y=-450, size=40,shape=1,icon="secret_grade",unlock={'construct_checker'}}, + {name='construct_checker', x=900, y=-450, size=40,shape=1,icon="secret_grade",unlock={'construct_invsg'}}, + {name='construct_invsg', x=1100, y=-450, size=40,shape=1,icon="secret_grade"}, - {name='pctrain_n', x=700, y=-300, size=40,shape=1,icon="pc", unlock={'pctrain_l','pc_n'}}, - {name='pctrain_l', x=900, y=-300, size=40,shape=1,icon="pc"}, + {name='c4wtrain_n', x=700, y=-320, size=40,shape=1,icon="pc", unlock={'c4wtrain_l'}}, + {name='c4wtrain_l', x=900, y=-320, size=40,shape=1,icon="pc"}, - {name='pc_n', x=800, y=-140, size=40,shape=1,icon="pc", unlock={'pc_h'}}, - {name='pc_h', x=950, y=-140, size=40,shape=3,icon="pc", unlock={'pc_l','pc_inf'}}, - {name='pc_l', x=1100, y=-140, size=40,shape=3,icon="pc"}, - {name='pc_inf', x=1100, y=-280, size=40,shape=2,icon="pc"}, + {name='pctrain_n', x=700, y=-200, size=40,shape=1,icon="pc", unlock={'pctrain_l','pc_n'}}, + {name='pctrain_l', x=900, y=-200, size=40,shape=1,icon="pc"}, + + {name='pc_n', x=800, y=-80, size=40,shape=1,icon="pc", unlock={'pc_h'}}, + {name='pc_h', x=950, y=-80, size=40,shape=3,icon="pc", unlock={'pc_l','pc_inf'}}, + {name='pc_l', x=1100, y=-80, size=40,shape=3,icon="pc"}, + {name='pc_inf', x=1100, y=-220, size=40,shape=2,icon="pc"}, {name='sprintAtk', x=500, y=-280, size=40,shape=1,icon="sprint2", unlock={'sprintEff','tech_n','tech_finesse','tech_finesse_lock','tsd_e','backfire_n'}}, {name='sprintEff', x=360, y=-150, size=40,shape=1,icon="sprint2"}, @@ -114,20 +116,20 @@ return { {name='tech_l', x=400, y=320, size=40,shape=1,icon="tech", unlock={'tech_l_plus'}}, {name='tech_l_plus', x=200, y=290, size=35,shape=3,icon="tech"}, - {name='tech_finesse', x=850, y=20, size=40,shape=1,icon="tech", unlock={'tech_finesse_f'}}, - {name='tech_finesse_f', x=1050, y=20, size=40,shape=1,icon="tech"}, + {name='tech_finesse', x=850, y=80, size=40,shape=1,icon="tech", unlock={'tech_finesse_f'}}, + {name='tech_finesse_f', x=1050, y=80, size=40,shape=1,icon="tech"}, - {name='tech_finesse_lock', x=850, y=160, size=40,shape=1,icon="tech", unlock={'tech_finesse_lock_f'}}, - {name='tech_finesse_lock_f', x=1050, y=170, size=40,shape=1,icon="tech"}, + {name='tech_finesse_lock', x=850, y=210, size=40,shape=1,icon="tech", unlock={'tech_finesse_lock_f'}}, + {name='tech_finesse_lock_f', x=1050, y=220, size=40,shape=1,icon="tech"}, - {name='tsd_e', x=700, y=250, size=40,shape=1,icon="tsd", unlock={'tsd_h'}}, - {name='tsd_h', x=860, y=310, size=40,shape=1,icon="tsd", unlock={'tsd_u'}}, - {name='tsd_u', x=1050, y=320, size=40,shape=1,icon="tsd"}, + {name='tsd_e', x=700, y=300, size=40,shape=1,icon="tsd", unlock={'tsd_h'}}, + {name='tsd_h', x=860, y=360, size=40,shape=1,icon="tsd", unlock={'tsd_u'}}, + {name='tsd_u', x=1050, y=370, size=40,shape=1,icon="tsd"}, - {name='backfire_n', x=640, y=420, size=40,shape=1,icon="backfire", unlock={'backfire_h'}}, - {name='backfire_h', x=790, y=450, size=40,shape=1,icon="backfire", unlock={'backfire_l'}}, - {name='backfire_l', x=930, y=450, size=40,shape=3,icon="backfire", unlock={'backfire_u'}}, - {name='backfire_u', x=1070, y=450, size=35,shape=2,icon="backfire"}, + {name='backfire_n', x=640, y=470, size=40,shape=1,icon="backfire", unlock={'backfire_h'}}, + {name='backfire_h', x=790, y=500, size=40,shape=1,icon="backfire", unlock={'backfire_l'}}, + {name='backfire_l', x=930, y=500, size=40,shape=3,icon="backfire", unlock={'backfire_u'}}, + {name='backfire_u', x=1070, y=500, size=35,shape=2,icon="backfire"}, {name='zen', x=-1000, y=-600, size=40,shape=1,icon="zen", unlock={'ultra','infinite','infinite_dig','marathon_inf'}}, {name='ultra', x=-1200, y=-600, size=40,shape=1,icon="ultra"}, diff --git a/parts/scenes/mode.lua b/parts/scenes/mode.lua index f293fa7d..a187df0c 100644 --- a/parts/scenes/mode.lua +++ b/parts/scenes/mode.lua @@ -22,6 +22,8 @@ local mapCam={ local visibleModes local touchDist local grid +local min_x,max_x=-1500,1350 +local min_y,max_y=-1900,660 local scene={} @@ -66,8 +68,8 @@ end local function _moveMap(dx,dy) local k=_getK() local x,y=_getPos() - if x>1300 and dx<0 or x<-1500 and dx>0 then dx=0 end - if y>620 and dy<0 or y<-1900 and dy>0 then dy=0 end + if x>max_x and dx<0 or x0 then dx=0 end + if y>max_y and dy<0 or y0 then dy=0 end mapCam.xOy:translate(dx/k,dy/k) end function scene.wheelMoved(_,dy) From 0eb4212e40f5a257e119a3e49c4749c67630f123 Mon Sep 17 00:00:00 2001 From: NOT_A_ROBOT Date: Tue, 3 Oct 2023 08:25:29 +0700 Subject: [PATCH 5/6] Adjust some mode shapes --- parts/modes.lua | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/parts/modes.lua b/parts/modes.lua index f1a2a316..b9a7bda4 100644 --- a/parts/modes.lua +++ b/parts/modes.lua @@ -92,8 +92,8 @@ return { {name='dig_u', x=850, y=-1000, size=40,shape=1,icon="dig"}, {name='construct_sg', x=700, y=-450, size=40,shape=1,icon="secret_grade",unlock={'construct_checker'}}, - {name='construct_checker', x=900, y=-450, size=40,shape=1,icon="secret_grade",unlock={'construct_invsg'}}, - {name='construct_invsg', x=1100, y=-450, size=40,shape=1,icon="secret_grade"}, + {name='construct_checker', x=900, y=-450, size=40,shape=3,icon="secret_grade",unlock={'construct_invsg'}}, + {name='construct_invsg', x=1100, y=-450, size=40,shape=2,icon="secret_grade"}, {name='c4wtrain_n', x=700, y=-320, size=40,shape=1,icon="pc", unlock={'c4wtrain_l'}}, {name='c4wtrain_l', x=900, y=-320, size=40,shape=1,icon="pc"}, @@ -113,14 +113,14 @@ return { {name='tech_n_plus', x=200, y=-10, size=40,shape=3,icon="tech"}, {name='tech_h', x=400, y=170, size=40,shape=1,icon="tech", unlock={'tech_h_plus','tech_l'}}, {name='tech_h_plus', x=200, y=140, size=35,shape=3,icon="tech"}, - {name='tech_l', x=400, y=320, size=40,shape=1,icon="tech", unlock={'tech_l_plus'}}, - {name='tech_l_plus', x=200, y=290, size=35,shape=3,icon="tech"}, + {name='tech_l', x=400, y=320, size=40,shape=3,icon="tech", unlock={'tech_l_plus'}}, + {name='tech_l_plus', x=200, y=290, size=35,shape=2,icon="tech"}, {name='tech_finesse', x=850, y=80, size=40,shape=1,icon="tech", unlock={'tech_finesse_f'}}, - {name='tech_finesse_f', x=1050, y=80, size=40,shape=1,icon="tech"}, + {name='tech_finesse_f', x=1050, y=80, size=40,shape=3,icon="tech"}, {name='tech_finesse_lock', x=850, y=210, size=40,shape=1,icon="tech", unlock={'tech_finesse_lock_f'}}, - {name='tech_finesse_lock_f', x=1050, y=220, size=40,shape=1,icon="tech"}, + {name='tech_finesse_lock_f', x=1050, y=210, size=40,shape=3,icon="tech"}, {name='tsd_e', x=700, y=300, size=40,shape=1,icon="tsd", unlock={'tsd_h'}}, {name='tsd_h', x=860, y=360, size=40,shape=1,icon="tsd", unlock={'tsd_u'}}, From 03a2e9356cf786aee63108e1ee35afd00f51bfeb Mon Sep 17 00:00:00 2001 From: NOT_A_ROBOT Date: Tue, 3 Oct 2023 08:49:22 +0700 Subject: [PATCH 6/6] Fix rank display bug in Construct modes --- parts/eventsets/construct_checker.lua | 2 +- parts/eventsets/construct_invsg.lua | 6 +++++- parts/eventsets/construct_sg.lua | 2 +- parts/modes/construct_invsg.lua | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/parts/eventsets/construct_checker.lua b/parts/eventsets/construct_checker.lua index 37824ae2..aa6a2734 100644 --- a/parts/eventsets/construct_checker.lua +++ b/parts/eventsets/construct_checker.lua @@ -57,7 +57,7 @@ return { gc_setColor(COLOR.lX) setFont(20) GC.mStr(text.highest:repD(getConstructGrade(D.maxRankPts)),63,216) - GC.mStr(text.highest:repD(D.maxRankPts+1),63,336) + GC.mStr(text.highest:repD(D.maxRankPts-1),63,336) end if not D.showGuide then return end diff --git a/parts/eventsets/construct_invsg.lua b/parts/eventsets/construct_invsg.lua index 9856f032..e9aded03 100644 --- a/parts/eventsets/construct_invsg.lua +++ b/parts/eventsets/construct_invsg.lua @@ -58,7 +58,7 @@ return { gc_setColor(COLOR.lX) setFont(20) GC.mStr(text.highest:repD(getConstructGrade(D.maxRankPts)),63,216) - GC.mStr(text.highest:repD(D.maxRankPts+1),63,336) + GC.mStr(text.highest:repD(D.maxRankPts-1),63,336) end if not D.showGuide then return end @@ -108,7 +108,11 @@ return { generateGuide(10,D.mirror) end, hook_drop=function(P) + local oldPts=P.modeData.rankPts calculateRankPts(P) + if oldPts>P.modeData.rankPts+2 then + P:_showText("REGRET!!",0,-120,80,'beat',.8) + end generateGuide(#P.field+10,P.modeData.mirror) end } diff --git a/parts/eventsets/construct_sg.lua b/parts/eventsets/construct_sg.lua index 11e56383..35f8d3f1 100644 --- a/parts/eventsets/construct_sg.lua +++ b/parts/eventsets/construct_sg.lua @@ -58,7 +58,7 @@ return { gc_setColor(COLOR.lX) setFont(20) GC.mStr(text.highest:repD(getConstructGrade(D.maxRankPts)),63,216) - GC.mStr(text.highest:repD(D.maxRankPts+1),63,336) + GC.mStr(text.highest:repD(D.maxRankPts-1),63,336) end if not D.showGuide then return end diff --git a/parts/modes/construct_invsg.lua b/parts/modes/construct_invsg.lua index 73c5e23c..c82673c7 100644 --- a/parts/modes/construct_invsg.lua +++ b/parts/modes/construct_invsg.lua @@ -6,7 +6,7 @@ return { eventSet='construct_invsg', bg='bg2',bgm='race', }, - score=function(P) return {P.modeData.rankPts,P.stat.piece} end, + score=function(P) return {P.modeData.maxRankPts,P.stat.piece} end, scoreDisp=function(D) return getConstructGradeText(D[1]).." "..D[2].." Pieces" end, comp=function(a,b) return a[1]>b[1] or a[1]==b[1] and a[2]