Merge remote-tracking branch 'bot/construct-modes'

This commit is contained in:
MrZ_26
2023-10-06 02:49:42 +08:00
23 changed files with 562 additions and 198 deletions

View File

@@ -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

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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
}

View File

@@ -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

View File

@@ -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",
}

View File

@@ -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!"},

View File

@@ -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!"},

View File

@@ -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"},

View File

@@ -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!"},

View File

@@ -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下穴を掘れ!"},

View File

@@ -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."},

View File

@@ -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=": (",

View File

@@ -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!"},

View File

@@ -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连块"},

View File

@@ -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);", ""},
},
}

View File

@@ -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行但只有一至三連塊"},

View File

@@ -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'}},

View File

@@ -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]<b[2] end,
getRank=function(P)
local G=P.modeData.maxRankPts
return
G>=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,
}

View File

@@ -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]<b[2] end,
getRank=function(P)
local G=P.modeData.maxRankPts
return
G>=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,
}

View File

@@ -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]<b[2] end,
getRank=function(P)
local G=P.modeData.rankPts
local G=P.modeData.maxRankPts
return
G>=23 and 5 or
G>=21 and 4 or

View File

@@ -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 x<min_x and dx>0 then dx=0 end
if y>max_y and dy<0 or y<min_y and dy>0 then dy=0 end
mapCam.xOy:translate(dx/k,dy/k)
end
function scene.wheelMoved(_,dy)