diff --git a/main.lua b/main.lua index 51fc4259..da59f533 100644 --- a/main.lua +++ b/main.lua @@ -19,7 +19,6 @@ -- setmetatable(_G,{__newindex=function(self,k,v)print('>>'..k)print(debug.traceback():match("\n.-\n\t(.-): "))rawset(self,k,v)end}) --Declaration -goto REM love=require"love"::REM::--Just tell IDE to load love-api, no actual usage local fs=love.filesystem TIME=love.timer.getTime YIELD=coroutine.yield @@ -306,6 +305,10 @@ do RANKS.sprint_10l=0 needSave=true end + if RANKS.master_l or RANKS.master_u then + RANKS.master_l,RANKS.master_u=0,0 + needSave=true + end if needSave then FILE.save(SETTING,'conf/settings') diff --git a/media/BGM/secret8th remix.ogg b/media/BGM/secret8th remix.ogg new file mode 100644 index 00000000..93b0c845 Binary files /dev/null and b/media/BGM/secret8th remix.ogg differ diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index fb1bf672..5abcd3e8 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -750,8 +750,8 @@ return{ ['round_h']= {"Turn-Based", "HARD", "Chess mode"}, ['round_l']= {"Turn-Based", "LUNATIC", "Chess mode"}, ['round_u']= {"Turn-Based", "ULTIMATE", "Chess mode"}, - ['master_l']= {"Master", "LUNATIC", "For 20G beginners."}, - ['master_u']= {"Master", "ULTIMATE", "For 20G pros."}, + ['master_n']= {"Master", "NORMAL", "For 20G beginners."}, + ['master_h']= {"Master", "HARD", "For 20G pros."}, ['master_final']= {"Master", "FINAL", "20G and beyond."}, ['master_ph']= {"Master", "PHANTASM", "???"}, ['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant."}, @@ -805,10 +805,15 @@ return{ ['ultra']= {'Ultra', "EXTRA", "A 2-minute score attack."}, ['infinite']= {'infinite', "", "It's just a sandbox."}, ['infinite_dig']= {"Infinite: Dig", "", "Dig-diggi-dug."}, + ['sprintFix']= {"Sprint", "NO LEFT/RIGHT"}, ['sprintLock']= {"Sprint", "NO ROTATIONS"}, ['sprintSmooth']= {"Sprint", "NO FRICTION"}, ['marathon_bfmax']= {"Marathon", "ULTIMATE"}, + + ['master_l']= {"Master", "LUNATIC"}, + ['master_u']= {"Master", "ULTIMATE"}, + ['custom_clear']= {"Custom", "NORMAL"}, ['custom_puzzle']= {"Custom", "PUZZLE"}, }, diff --git a/parts/language/lang_es.lua b/parts/language/lang_es.lua index 6799f7c2..958962cc 100644 --- a/parts/language/lang_es.lua +++ b/parts/language/lang_es.lua @@ -655,8 +655,8 @@ return{ ['round_h']= {"Por Turnos", "Difícil", "Modo ajedrez."}, ['round_l']= {"Por Turnos", "Lunático", "Modo ajedrez."}, ['round_u']= {"Por Turnos", "Supremo", "Modo ajedrez."}, - ['master_l']= {"Master", "Lunático", "Para principiantes en 20G"}, - ['master_u']= {"Master", "Supremo", "¡Desafío profesional de 20G!"}, + ['master_n']= {"Master", "Normal", "Para principiantes en 20G"}, + ['master_h']= {"Master", "Difícil", "¡Desafío profesional de 20G!"}, ['master_final']= {"Master", "FINAL", "El verdadero 20G Supremo: el final es inalcanzable."}, ['master_ex']= {"GrandMaster", "EXTRA", "Para ser un gran maestro, acepta este desafío"}, ['rhythm_e']= {"Al Ritmo", "Fácil", "Maratón rítmica de 200 líneas con bajo bpm."}, @@ -709,10 +709,15 @@ return{ ['ultra']= {'Ultra', "Extra", "¡Consigue el mayor puntaje posible en 2 minutos!"}, ['infinite']= {"Infinito", "", "Modo Sandbox."}, ['infinite_dig']= {"Infinito: Queso", "", "Limpia, limpia, más limpia que tú."}, + ['sprintFix']= {"Sprint", "Sin mover a Izq./Der."}, ['sprintLock']= {"Sprint", "Sin rotar"}, ['sprintSmooth']= {"Sprint", "SIN FRICCIÓN"}, ['marathon_bfmax']= {"Maratón", "Supremo"}, + + ['master_l']= {"Master", "Lunático"}, + ['master_u']= {"Master", "Supremo"}, + ['custom_clear']= {"Personalizado", "Normal"}, ['custom_puzzle']= {"Personalizado", "Puzzle"}, }, diff --git a/parts/language/lang_fr.lua b/parts/language/lang_fr.lua index 5bc2d39f..cc70d821 100644 --- a/parts/language/lang_fr.lua +++ b/parts/language/lang_fr.lua @@ -657,8 +657,8 @@ return{ ['round_h']= {"Tour à tour", "DIFFICILE", "Mode échecs"}, ['round_l']= {"Tour à tour", "LUNATIQUE", "Mode échecs"}, ['round_u']= {"Tour à tour", "ULTIME", "Mode échecs"}, - ['master_l']= {"Master", "LUNATIQUE", "Pour les débutants en 20G."}, - ['master_u']= {"Master", "ULTIME", "Challenge 20G pro !"}, + ['master_n']= {"Master", "NORMAL", "Pour les débutants en 20G."}, + ['master_h']= {"Master", "DIFFICILE", "Challenge 20G pro !"}, ['master_final']= {"Master", "FINAL", "20G : Un point final impossible à atteindre !"}, -- ['master_ph']= {"Mester", "FANTASMA", "20G: ???"}, ['master_ex']= {"GrandMaster", "EXTRA", "Tentez de devenir un Grandmaster."}, @@ -712,10 +712,15 @@ return{ ['ultra']= {'Ultra', "EXTRA", "2 minutes pour avoir le meilleur score."}, ['infinite']= {"Infini", "", "Mode tranquile."}, ['infinite_dig']= {"Infini : Dig", "", "Creuser, creuser, creuser."}, + ['sprintFix']= {"Sprint", "Sans gauche/droite"}, ['sprintLock']= {"Sprint", "Sans rotation"}, -- ['sprintSmooth']= {"Sprint", "NO FRICTION"}, ['marathon_bfmax']= {"Marathon", "ULTIME"}, + + ['master_l']= {"Master", "LUNATIQUE"}, + ['master_u']= {"Master", "ULTIME"}, + ['custom_clear']= {"Perso.", "NORMAL"}, ['custom_puzzle']= {"Perso.", "PUZZLE"}, }, diff --git a/parts/language/lang_pt.lua b/parts/language/lang_pt.lua index 0ad1f28c..9c572d2f 100644 --- a/parts/language/lang_pt.lua +++ b/parts/language/lang_pt.lua @@ -741,8 +741,8 @@ return{ ['round_h']= {"Baseado Turnos", "DIFÍCIL", "Modo xadrez"}, ['round_l']= {"Baseado Turnos", "LUNÁTICO", "Modo xadrez"}, ['round_u']= {"Baseado Turnos", "ULTIMATE", "Modo xadrez"}, - ['master_l']= {"Mestre", "LUNÁTICO", "Pra iniciantes de 20G."}, - ['master_u']= {"Mestre", "ULTIMATE", "Desafio 20G profissional!"}, + ['master_n']= {"Mestre", "NORMAL", "Pra iniciantes de 20G."}, + ['master_h']= {"Mestre", "DIFÍCIL", "Desafio 20G profissional!"}, ['master_final']= {"Mestre", "FINAL", "20G: Final inalcançável!"}, ['master_ph']= {"Mestre", "FANTASMA", "20G: ???"}, ['master_ex']= {"GrandMaster", "EXTRA", "Para ser um Grand Master, aceite \nesse desafio."}, @@ -796,10 +796,15 @@ return{ ['ultra']= {'Ultra', "EXTRA", "Pegue a maior pontuação em 2 minutos."}, ['infinite']= {"Infinito", "", "Modo Sandbox."}, ['infinite_dig']= {"Infinito:Cave", "", "Cava, Cava, Cava."}, + ['sprintFix']= {"Sprint", "SEM ESQUERDA/DIREITA"}, ['sprintLock']= {"Sprint", "SEM ROTAÇÃO"}, -- ['sprintSmooth']= {"Sprint", "NO FRICTION"}, ['marathon_bfmax']= {"Maratona", "ULTIMATE"}, + + ['master_l']= {"Mestre", "LUNÁTICO"}, + ['master_u']= {"Mestre", "ULTIMATE"}, + ['custom_clear']= {"Custom", "NORMAL"}, ['custom_puzzle']= {"Custom", "PUZZLE"}, }, diff --git a/parts/language/lang_yygq.lua b/parts/language/lang_yygq.lua index aa8b934a..57694f69 100644 --- a/parts/language/lang_yygq.lua +++ b/parts/language/lang_yygq.lua @@ -238,8 +238,8 @@ return{ ['round_h']= {"回合制", "困难", "下棋"}, ['round_l']= {"回合制", "疯狂", "下棋"}, ['round_u']= {"回合制", "极限", "下棋"}, - ['master_l']= {"大师", "疯狂", "无脑20G"}, - ['master_u']= {"大师", "极限", "简单20G"}, + ['master_n']= {"大师", "普通", "无脑20G"}, + ['master_h']= {"大师", "困难", "简单20G"}, ['master_final']= {"大师", "终点", "究极20G:真正的游戏"}, ['master_ph']= {"大师", "虚幻", "虚幻20G:好玩"}, ['master_ex']= {"宗师", "EX", "你行你上"}, @@ -293,10 +293,15 @@ return{ ['ultra']= {"限时打分", "挑战", "2分钟刷分"}, ['infinite']= {"无尽", "", "真的有人会玩这个?"}, ['infinite_dig']= {"无尽:挖掘", "", "闲得慌就来挖"}, + ['sprintFix']= {"竞速", "无移动"}, ['sprintLock']= {"竞速", "无旋转"}, ['sprintSmooth']= {"竞速", "无摩擦"}, ['marathon_bfmax']= {"马拉松", "极限"}, + + ['master_l']= {"大师", "疯狂"}, + ['master_u']= {"大师", "极限"}, + ['custom_clear']= {"自定义", "普通"}, ['custom_puzzle']= {"自定义", "拼图"}, }, diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index 6b33fb81..102037d4 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -751,8 +751,8 @@ return{ ['round_h']= {"回合制", "困难", "下棋模式"}, ['round_l']= {"回合制", "疯狂", "下棋模式"}, ['round_u']= {"回合制", "极限", "下棋模式"}, - ['master_l']= {"大师", "疯狂", "20G初心者练习"}, - ['master_u']= {"大师", "极限", "上级者20G挑战"}, + ['master_n']= {"大师", "普通", "20G初心者练习"}, + ['master_h']= {"大师", "困难", "上级者20G挑战"}, ['master_final']= {"大师", "终点", "究极20G:无法触及的终点"}, ['master_ph']= {"大师", "虚幻", "虚幻20G:???"}, ['master_ex']= {"宗师", "EX", "成为方块大师"}, @@ -806,10 +806,15 @@ return{ ['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"}, ['infinite']= {"无尽", "", "沙盒"}, ['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"}, + ['sprintFix']= {"竞速", "无移动"}, ['sprintLock']= {"竞速", "无旋转"}, ['sprintSmooth']= {"竞速", "无摩擦"}, ['marathon_bfmax']= {"马拉松", "极限"}, + + ['master_l']= {"大师", "疯狂"}, + ['master_u']= {"大师", "极限"}, + ['custom_clear']= {"自定义", "普通"}, ['custom_puzzle']= {"自定义", "拼图"}, }, diff --git a/parts/language/lang_zh2.lua b/parts/language/lang_zh2.lua index db04acb3..4b7107f2 100644 --- a/parts/language/lang_zh2.lua +++ b/parts/language/lang_zh2.lua @@ -164,8 +164,8 @@ return{ ['round_h']= {"回合制", "困难", "下棋模式"}, ['round_l']= {"回合制", "疯狂", "下棋模式"}, ['round_u']= {"回合制", "极限", "下棋模式"}, - ['master_l']= {"大师", "疯狂", "20G初心者练习"}, - ['master_u']= {"大师", "极限", "上级者20G挑战"}, + ['master_n']= {"大师", "普通", "20G初心者练习"}, + ['master_h']= {"大师", "困难", "上级者20G挑战"}, ['master_final']= {"大师", "终点", "究极20G:无法触及的终点"}, ['master_ph']= {"大师", "虚幻", "虚幻20G:???"}, ['master_ex']= {"宗师", "EX", "成为方块大师"}, @@ -219,10 +219,14 @@ return{ ['ultra']= {"限时打分", "挑战", "在两分钟内尽可能拿到最多的分数"}, ['infinite']= {"无尽", "", "沙盒"}, ['infinite_dig']= {"无尽:挖掘", "", "挖呀挖呀挖"}, + ['sprintFix']= {"竞速", "无移动"}, ['sprintLock']= {"竞速", "无旋转"}, ['sprintSmooth']= {"竞速", "无摩擦"}, ['marathon_bfmax']= {"马拉松", "极限"}, + + ['master_l']= {"大师", "疯狂"}, + ['master_u']= {"大师", "极限"}, ['custom_clear']= {"自定义", "普通"}, ['custom_puzzle']= {"自定义", "拼图"}, }, diff --git a/parts/modes.lua b/parts/modes.lua index 1f30bf6e..8eafb1d8 100644 --- a/parts/modes.lua +++ b/parts/modes.lua @@ -18,7 +18,7 @@ return{ {name='dig_400l', x=-800, y=-200, size=40,shape=1,icon="dig_sprint"}, {name='marathon_n', x=0, y=-600, size=60,shape=1,icon="marathon",unlock={'marathon_h','rhythm_e','solo_e','round_e','blind_e','classic_fast','survivor_e','bigbang','zen'}}, - {name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon",unlock={'master_l'}}, + {name='marathon_h', x=0, y=-800, size=50,shape=1,icon="marathon",unlock={'master_n'}}, {name='solo_e', x=-600, y=-1000,size=40,shape=1,icon="solo", unlock={'solo_n'}}, {name='solo_n', x=-800, y=-1000,size=40,shape=1,icon="solo", unlock={'solo_h'}}, @@ -39,8 +39,8 @@ return{ {name='round_l', x=-1200,y=-800, size=40,shape=1,icon="round", unlock={'round_u'}}, {name='round_u', x=-1400,y=-800, size=40,shape=1,icon="round"}, - {name='master_l', x=0, y=-1000,size=40,shape=1,icon="master", unlock={'master_u'}}, - {name='master_u', x=0, y=-1200,size=40,shape=3,icon="master", unlock={'master_final','master_ex','master_ph'}}, + {name='master_n', x=0, y=-1000,size=40,shape=1,icon="master", unlock={'master_h'}}, + {name='master_h', x=0, y=-1200,size=40,shape=3,icon="master", unlock={'master_final','master_ex','master_ph'}}, {name='master_final', x=0, y=-1600,size=40,shape=2,icon="master"}, {name='master_ph', x=-150, y=-1500,size=40,shape=2,icon="master"}, {name='master_ex', x=150, y=-1500,size=40,shape=2,icon="master_ex"}, @@ -111,12 +111,17 @@ return{ {name='infinite', x=-1000,y=-400, size=40,shape=1,icon='infinite'}, {name='infinite_dig', x=-800, y=-400, size=40,shape=1,icon="dig"}, + --Secret {name='sprintFix'}, {name='sprintLock'}, - {name='sprintSmooth'}, {name='marathon_bfmax'}, + --Old + {name='master_l'}, + {name='master_u'}, + + --Special {name='custom_puzzle'}, {name='custom_clear'}, {name="netBattle"}, diff --git a/parts/modes/master_h.lua b/parts/modes/master_h.lua new file mode 100644 index 00000000..e5ac1cff --- /dev/null +++ b/parts/modes/master_h.lua @@ -0,0 +1,100 @@ +local gc=love.graphics +local death_lock={12,11,10,9,8, 7,7,7,7,6} +local death_wait={10,9, 8, 7,6, 6,6,5,5,4} +local death_fall={10,9, 8, 7,6, 6,5,5,4,4} +local function score(P) + local D=P.modeData + + local c=#P.clearedRow + if c==0 and D.pt%100==99 then return end + local s=c<3 and c+1 or c==3 and 5 or 7 + if P.combo>7 then s=s+2 + elseif P.combo>3 then s=s+1 + end + D.pt=D.pt+s + + if D.pt%100==99 then + SFX.play('blip_1') + elseif D.pt>=D.target then--Level up! + s=D.target/100 + local E=P.gameEnv + E.lock=death_lock[s] + E.wait=death_wait[s] + E.fall=death_fall[s] + if s==2 then + E.das=5 + BG.set('rainbow') + elseif s==4 then + E.das=4 + BG.set('rainbow2') + elseif s==5 then + if P.stat.frame>183*60 then + D.pt=500 + P:win('finish') + return + else + E.bone=true + P.gameEnv.freshLimit=10 + BG.set('glow') + BGM.play('secret7th remix') + end + elseif s==6 then + E.das=3 + BG.set('lightning') + elseif s==7 then + E.bone=true + elseif s==10 then + D.pt=1000 + P:win('finish') + return + end + D.target=D.target+100 + P:showTextF(text.stage:gsub("$1",s),0,-120,80,'beat') + SFX.play('reach') + end +end + +return{ + color=COLOR.red, + env={ + noTele=true, + das=6,arr=1, + drop=0, + lock=death_lock[1], + wait=death_wait[1], + fall=death_fall[1], + dropPiece=score, + task=function(P) + P.modeData.pt=0 + P.modeData.target=100 + end, + freshLimit=15, + noInitSZO=true, + bg='bg2',bgm='secret7th', + }, + slowMark=true, + load=function() + PLY.newPlayer(1) + end, + mesDisp=function(P) + setFont(45) + mStr(P.modeData.pt,69,320) + mStr(P.modeData.target,69,370) + gc.rectangle('fill',25,375,90,4) + end, + score=function(P)return{P.modeData.pt,P.stat.time}end, + scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end, + comp=function(a,b) + return a[1]>b[1]or(a[1]==b[1]and a[2]=1000 and 5 or + S>=800 and 4 or + S>=500 and 3 or + S>=300 and 2 or + S>=100 and 1 or + S>=60 and 0 + end, +} \ No newline at end of file diff --git a/parts/modes/master_l.lua b/parts/modes/master_l.lua index d8d2a1ca..6a161e42 100644 --- a/parts/modes/master_l.lua +++ b/parts/modes/master_l.lua @@ -1,6 +1,6 @@ local gc=love.graphics local rush_lock={20,18,16,15,14} -local rush_wait={12,10,9,8,7} +local rush_wait={12,10, 9, 8, 7} local rush_fall={18,16,14,13,12} local function score(P) local D=P.modeData diff --git a/parts/modes/master_n.lua b/parts/modes/master_n.lua new file mode 100644 index 00000000..ca940809 --- /dev/null +++ b/parts/modes/master_n.lua @@ -0,0 +1,100 @@ +local gc=love.graphics +local rush_lock={20,18,16,15,14, 14,13,12,11,11} +local rush_wait={12,11,11,10,10, 10,10, 9, 9, 9} +local rush_fall={18,16,14,13,12, 12,11,11,10,10} +local function score(P) + local D=P.modeData + + local c=#P.clearedRow + if c==0 and D.pt%100==99 then return end + local s=c<3 and c+1 or c==3 and 5 or 7 + if P.combo>7 then s=s+2 + elseif P.combo>3 then s=s+1 + end + D.pt=D.pt+s + + if D.pt%100==99 then + SFX.play('blip_1') + elseif D.pt>=D.target then--Level up! + s=D.target/100 + local E=P.gameEnv + E.lock=rush_lock[s] + E.wait=rush_wait[s] + E.fall=rush_fall[s] + + if s==2 then + E.das=8 + BG.set('rainbow') + elseif s==4 then + BG.set('rainbow2') + elseif s==5 then + if P.stat.frame>260*60 then + D.pt=500 + P:win('finish') + return + else + P.gameEnv.freshLimit=10 + E.das=7 + BG.set('glow') + BGM.play('secret8th remix') + end + elseif s==7 then + E.das=6 + BG.set('lightning') + elseif s==9 then + E.bone=true + elseif s==10 then + D.pt=1000 + P:win('finish') + return + end + D.target=D.target+100 + P:showTextF(text.stage:gsub("$1",s),0,-120,80,'fly') + SFX.play('reach') + end +end + +return{ + color=COLOR.red, + env={ + noTele=true, + das=10,arr=3, + drop=0, + lock=rush_lock[1], + wait=rush_wait[1], + fall=rush_fall[1], + dropPiece=score, + noInitSZO=true, + task=function(P) + P.modeData.pt=0 + P.modeData.target=100 + end, + freshLimit=15, + bg='bg1',bgm='secret8th', + }, + slowMark=true, + load=function() + PLY.newPlayer(1) + end, + mesDisp=function(P) + setFont(45) + mStr(P.modeData.pt,69,320) + mStr(P.modeData.target,69,370) + gc.rectangle('fill',25,375,90,4) + end, + score=function(P)return{P.modeData.pt,P.stat.time}end, + scoreDisp=function(D)return D[1].."P "..STRING.time(D[2])end, + comp=function(a,b) + return a[1]>b[1]or(a[1]==b[1]and a[2]=1000 and 5 or + S>=800 and 4 or + S>=500 and 3 or + S>=300 and 2 or + S>=100 and 1 or + S>=60 and 0 + end, +} \ No newline at end of file diff --git a/parts/modes/master_u.lua b/parts/modes/master_u.lua index 1e906e50..95221105 100644 --- a/parts/modes/master_u.lua +++ b/parts/modes/master_u.lua @@ -1,7 +1,7 @@ local gc=love.graphics -local death_lock={12,11,10,9,8, 7,7,7,6,6} -local death_wait={10,9,8,7,6, 6,5,4,4,3} -local death_fall={10,9,8,7,6, 5,5,4,3,2} +local death_lock={12,11,10,9,8, 7,7,7,6,6} +local death_wait={10, 9, 8,7,6, 6,5,4,4,3} +local death_fall={10, 9, 8,7,6, 5,5,4,3,3} local function score(P) local D=P.modeData @@ -29,7 +29,6 @@ local function score(P) BG.set('rainbow2') elseif s==3 then BG.set('glow') - E.bone=true elseif s==5 then if P.stat.frame>183*60 then D.pt=500