diff --git a/main.lua b/main.lua index 6afb352c..900b18b9 100644 --- a/main.lua +++ b/main.lua @@ -464,6 +464,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..aa6a2734 --- /dev/null +++ b/parts/eventsets/construct_checker.lua @@ -0,0 +1,114 @@ +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 + + if not D.showGuide then return end + ply_applyField(P) + local mark=TEXTURE.puzzleMark + 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 + 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..e9aded03 --- /dev/null +++ b/parts/eventsets/construct_invsg.lua @@ -0,0 +1,118 @@ +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 + + if not D.showGuide then return end + ply_applyField(P) + local mark=TEXTURE.puzzleMark + 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 + 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) + 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 new file mode 100644 index 00000000..35f8d3f1 --- /dev/null +++ b/parts/eventsets/construct_sg.lua @@ -0,0 +1,114 @@ +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 + + if not D.showGuide then return end + ply_applyField(P) + local mark=TEXTURE.puzzleMark + 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 + 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/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", } diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index 371113b5..9c045f79 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", @@ -867,7 +868,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 ab152c1d..8ef2d43a 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", @@ -819,7 +820,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 f874e5ae..c8660a55 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é", @@ -797,6 +798,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 849db32a..1b45a067 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", @@ -829,7 +830,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 da96ae1b..46fdaee4 100644 --- a/parts/language/lang_ja.lua +++ b/parts/language/lang_ja.lua @@ -44,6 +44,7 @@ return { infHeightOn="高度無限!", infHeightOff="高度制限あり", infHeightHint="“ファンクション 1”キー", + -- highestGrade="(highest: $1)", speedLV="レベル", piece="ミノ数",line="line数",atk="火力",eff="効率", @@ -872,7 +873,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 e3f2f411..f31cadb8 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", @@ -816,6 +817,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 f7ff23d5..74546973 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 ae3677d6..b1811ec8 100644 --- a/parts/language/lang_vi.lua +++ b/parts/language/lang_vi.lua @@ -48,6 +48,7 @@ return { infHeightOn="Bảng cao vô tận: BẬT", infHeightOff="Bảng cao vô tận: TẮT", infHeightHint="Nhấn phím Chức năng 1 để bật/tắt", + 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 0d1d2508..dc5573de 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="效率", @@ -854,7 +855,9 @@ return { ['sprint_100l']= {"竞速", "100L", "消除100行"}, ['sprint_400l']= {"竞速", "400L", "消除400行"}, ['sprint_1000l']= {"竞速", "1000L", "消除1000行"}, - ['secret_grade']= {"秘密段位", "", "按照提示完成经典的“大于号”拼图"}, + ['construct_sg']= {"拼花", "秘密段位", "按照提示完成经典的“大于号”拼图"}, + ['construct_checker']={"拼花", "棋盘", "按照提示搭建棋盘的图案"}, + ['construct_invsg']= {"拼花", "折线", "按照提示搭建折线图案"}, ['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 3ef590ec..2126ecc8 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", @@ -767,116 +768,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);", "", "模拟5x10场地(标准尺寸的一半)"}, - ['big_h']= {"Big(Hard);", "", "模拟5x10场地(标准尺寸的一半)"}, - ['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", "", "按照提示搭建棋盘的图案"}, + ['construct_invsg']= {"Construct", "", "按照提示搭建折线图案"}, + ['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);", "", "模拟5x10场地(标准尺寸的一半)"}, + ['big_h']= {"Big(Hard);", "", "模拟5x10场地(标准尺寸的一半)"}, + ['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 fcb39aac..b4c5ce85 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="效率", @@ -825,7 +826,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 0ac99233..5b72eef8 100644 --- a/parts/modes.lua +++ b/parts/modes.lua @@ -10,6 +10,10 @@ 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=700, y=-450, size=40,shape=1,icon="secret_grade",unlock={'construct_checker'}}, + {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='secret_grade', 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'}}, @@ -27,7 +31,7 @@ return { {name='dig_eff_100l', x=-1000,y=0, size=40,shape=1,icon="dig_eff", unlock={'dig_eff_400l'}}, {name='dig_eff_400l', x=-1200,y=0, size=40,shape=1,icon="dig_eff"}, - {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','pctrain_n','sprintAtk','zen','construct_sg'}}, {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'}}, 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..c82673c7 --- /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.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]=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 62% rename from parts/modes/secret_grade.lua rename to parts/modes/construct_sg.lua index 7e7fbd99..59b36488 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 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)