diff --git a/parts/backgrounds/bg3.lua b/parts/backgrounds/bg3.lua new file mode 100644 index 000000000..a9fa7f571 --- /dev/null +++ b/parts/backgrounds/bg3.lua @@ -0,0 +1,19 @@ +-- Vertical green-blue gradient +local back={} +local shader=SHADER.grad3 + +local t +function back.init() + t=math.random()*2600 +end +function back.update(dt) + t=(t+dt)%6200 +end +function back.draw() + GC.clear(.08,.08,.084) + shader:send('phase',t) + GC.setShader(shader) + GC.rectangle('fill',0,0,SCR.w,SCR.h) + GC.setShader() +end +return back diff --git a/parts/eventsets/master_g_modern.lua b/parts/eventsets/master_g_modern.lua new file mode 100644 index 000000000..d5b2b1215 --- /dev/null +++ b/parts/eventsets/master_g_modern.lua @@ -0,0 +1,409 @@ +-- local regretDelay=-1 +-- local int_grade=0 +-- local grade_points=0 +local _igb={0,1,2,3,3,4,4,5,5,5,6,6,6,7,7,7,8,8,8,9,9,9,10,10,11,11,12,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26} +local function getInternalGradeBoosts(internal_grade) + return _igb[MATH.clamp(internal_grade+1,1,#_igb)] +end +-- local spd_lvl=0 +-- local cools=0 +-- local regrets=0 +-- local prevSectTime=0 +-- local isInRoll=false +-- local rollGrades=0 +local awesome_time= {2700,2700,2520,2280,2280,1980,1980,1620,1620,0} +local cool_time= {3120,3120,2940,2700,2700,2520,2520,2280,2280,0} +local regret_time= {5400,4500,4500,4080,3600,3600,3000,3000,3000,3000} +local fault_time= {7200,5400,5400,4500,4080,4080,3600,3600,3600,3600} +local function getGrav(l) + return + l<30 and 64 or + l<40 and 43 or + l<50 and 32 or + l<60 and 26 or + l<70 and 21 or + l<80 and 16 or + l<90 and 8 or + l<120 and 6 or + l<160 and 4 or + l<200 and 3 or + l<240 and 2 or + l<260 and 64 or + l<268 and 32 or + l<275 and 16 or + l<280 and 8 or + l<290 and 4 or + l<320 and 3 or + l<370 and 2 or + l<430 and 1 or + l<470 and 0.75 or + l<510 and 0.5 or + l<600 and 0.25 or + l<700 and 0.1 or + 0 +end +local function getLock(l) + return + l<900 and 30 or + l<1100 and 17 or + l<1400 and 15 or + 12 +end +local function getCurrentGrade(D) + if not D.int_grade then D.int_grade=0 end + if not D.roll_grades then D.roll_grades=0 end + return math.floor(math.max(1,getInternalGradeBoosts(D.internal_grade)+D.rollGrades+D.cools+1-D.regrets)) +end +local function addGrade(D,row,cmb,chk,lvl) -- IGS = internal grade system + if row<1 then return end + local pts=0 + local cmb_mult=1.0 + local lvl_mult=math.floor(lvl/250)+1 + local spn_mult=1.0 + if chk.spin then spn_mult=spn_mult*1.5 + elseif chk.mini then spn_mult=spn_mult*1.2 + end + if chk.pc then spn_mult=spn_mult*2.0 + elseif chk.hpc then spn_mult=spn_mult*1.2 + end + if row==1 then + pts=D.internal_grade<5 and 10 or D.internal_grade<10 and 5 or 2 + cmb_mult=1.0 + elseif row==2 then + pts=D.internal_grade<3 and 20 or D.internal_grade<6 and 15 or D.internal_grade<10 and 10 or 12 + cmb_mult=cmb==1 and 1 or cmb<4 and 1.2 or cmb<8 and 1.4 or cmb<10 and 1.5 or 2.0 + elseif row==3 then + pts=D.internal_grade==0 and 40 or D.internal_grade<4 and 30 or D.internal_grade<7 and 20 or D.internal_grade<10 and 15 or 13 + cmb_mult=cmb==1 and 1 or cmb<10 and 1+(cmb+2)*0.1 or 2 + else + pts=D.internal_grade==0 and 50 or D.internal_grade<5 and 40 or 30 + cmb_mult=cmb==1 and 1 or cmb==2 and 1.5 or cmb<6 and (0.2*cmb)+1.2 or cmb<10 and (0.1*cmb)+1.7 or 3 + end + D.grade_points=D.grade_points+(pts*cmb_mult*lvl_mult*spn_mult) + if D.grade_points>=100 then + D.grade_points=0 + D.internal_grade=D.internal_grade+1 + end +end +local function getRollGoal(D,isGreenLine) + local invis=D.cools>11 + local superinvis=D.cools>16 + -- get amount of grades needed for TGM+ + local rem=46-getCurrentGrade(D)-( + -- adjust for clear bonus + isGreenLine and 0 or + superinvis and 1.6 or invis and not superinvis and .8 or .5 + ) + if rem<=0 then return 0 end + local goal=0 + if superinvis then + goal=math.floor(rem)*4 + rem=rem%1 + return goal+(rem>0.3 and 4 or rem*10) + elseif invis then + goal=math.floor(rem/.53)*4 + rem=rem%.53 + return goal+(rem>0.21 and 4 or rem*16) + else + goal=math.floor(rem/.26)*4 + rem=rem%.26 + return goal+(rem>0.12 and 4 or rem*25) + end +end +local function getCurSection(D) + return math.ceil((D.pt+1)/100) +end +local function getSectionState(P,section) + local D=P.modeData + local awesome,cool,miss,regret,fault=false,false,false,false,false + if D.awesomeList[section] then awesome=true + elseif D.coolList[section] then cool=true end + if D.regretList[section] then regret=true + elseif D.faultList[section] then fault=true end + + if section==getCurSection(D) and P.stat.frame-D.prevSectTime>cool_time[section] then + miss=true + end + return awesome,cool,miss,regret,fault +end +local function setSectionColor(awesome,cool,regret,fault,isCurSection) + if not (awesome or cool or regret or fault) then + GC.setColor(0.6,0.6,0.6,isCurSection and 0.25 or 0.6) + else + GC.setColor(fault and 0.5 or regret and 1 or 0, awesome and 1 or cool and 1 or 0, awesome and 1 or 0, 1) + end +end +local function setCurSectionColor(awesome, cool, miss, regret, fault) + if awesome and fault then + GC.setColor(COLOR.P) + elseif awesome and regret then + GC.setColor(COLOR.lB) + elseif cool and fault then + GC.setColor(COLOR.O) + elseif cool and regret then + GC.setColor(COLOR.Y) + elseif awesome then + GC.setColor(COLOR.C) + elseif cool then + GC.setColor(COLOR.G) + elseif regret then + GC.setColor(COLOR.R) + elseif fault then + GC.setColor(COLOR.dR) + elseif miss then + GC.setColor(COLOR.lX) + end +end + +return { + drop=64, + lock=30, + keyCancel={10,11,12,14,15,16,17,18,19,20}, + arr=1, + minsdarr=1, + ihs=true,irs=true,ims=false, + mesDisp=function(P) + local D=P.modeData + GC.setColor(1,1,1,1) + setFont(45) + mText(TEXTOBJ.grade,63,180) + setFont(60) + GC.mStr(getMasterGradeModern(getCurrentGrade(D)),63,110) -- draw grade + for i=1,10 do -- draw cool/regret history + setSectionColor(D.awesomeList[i],D.coolList[i],D.regretList[i],D.faultList[i],i==getCurSection(D)) + GC.circle('fill',-10,150+i*25,10) + GC.setColor(1,1,1,1) + end + if D.isInRoll then + setFont(20) + GC.mStr(("%.1f"):format(D.rollGrades),63,208) -- draw roll grades + GC.setLineWidth(2) + GC.setColor(.98,.98,.98,.8) + GC.rectangle('line',0,240,126,80,4) + GC.setColor(.98,.98,.98,.4) + GC.rectangle('fill',0+2,240+2,126-4,80-4,2) -- draw time box + + setFont(45) -- Draw time text + local t=(P.stat.frame-D.prevSectTime)/60 + local T=("%.1f"):format(60-t) + GC.setColor(COLOR.dH) + GC.mStr(T,65,250) + t=t/60 + GC.setColor(1.7*t,2.3-2*t,.3) + GC.mStr(T,63,248) + + GC.setColor(COLOR.O) + PLY.draw.drawTargetLine(P,getRollGoal(D),true) + + GC.setColor(COLOR.G) + PLY.draw.drawTargetLine(P,getRollGoal(D,true),true) + else + -- Not in roll + setFont(20) + GC.mStr(D.grade_points,63,208) + setFont(45) + + setCurSectionColor(getSectionState(P,getCurSection(D))) + PLY.draw.drawProgress(P.modeData.pt,P.modeData.target) + end + end, + hook_drop=function(P) + local D=P.modeData + + local c=#P.clearedRow + if D.cools>16 and D.isInRoll then -- super invis roll grades + D.rollGrades=D.rollGrades+(c==4 and 1 or 0.1*c) + return + + elseif D.cools>11 and D.isInRoll then -- invis roll grades + D.rollGrades=D.rollGrades+(c==4 and 0.52 or 0.06*c) + return + + elseif D.isInRoll then -- fading roll grades + D.rollGrades=D.rollGrades+(c==4 and 0.26 or 0.04*c) + return + end + + if c==0 and D.pt+1>=D.target then return end + local s=c<3 and c+1 or c==3 and 5 or 7 + local LP=P.lastPiece + local B2B=P.b2b + if c==4 then + if B2B>800 then s=s+2 + elseif B2B>=50 then s=s+1 + end + end + if LP.spin and c==0 then s=s+1 + elseif LP.spin and c>0 then + if B2B>=50 then s=s+2 + else s=s+1 + end + end + if LP.mini and c>0 and B2B>=50 then s=s+1 end + if LP.pc then s=s+4 end + if LP.hpc then s=s+1 end + if P.combo>7 then s=s+2 + elseif P.combo>3 then s=s+1 end + + if not D.isInRoll then + addGrade(D,c,P.combo,LP,D.pt) + D.pt=D.pt+s + D.speed_level=D.speed_level+s + end + + if D.pt%100>70 and not D.prevDrop70 then + if P.stat.frame-D.prevSectTime=D.target then-- Level up! + D.speed_level=D.nextSpeedUpper and D.speed_level+150 or D.nextSpeedUp and D.speed_level+100 or D.speed_level + D.nextSpeedUp=false + D.nextSpeedUpper=false + D.prevDrop70=false + s=D.target/100 + local E=P.gameEnv + E.drop=getGrav(D.speed_level) + E.lock=getLock(D.speed_level) + if (E.drop==0) then P:set20G(true) end + + if P.stat.frame-D.prevSectTime > fault_time[math.ceil(s)] then + D.regrets=D.regrets+2 + D.regretDelay=60 + elseif P.stat.frame-D.prevSectTime > regret_time[math.ceil(s)] then + D.regrets=D.regrets+1 + D.regretDelay=60 + end + D.prevSectTime=P.stat.frame + if s==2 then + BG.set('rainbow') + elseif s==4 then + BG.set('rainbow2') + elseif s==5 then + if P.stat.frame>420*60 then + D.pt=500 + P:win('finish') + return + else + BG.set('glow') + BGM.play('secret7th remix') + end + elseif s==6 then + BG.set('lightning') + elseif s>9 then + if D.cools>16 then + if E.lockFX and 3>E.lockFX then E.lockFX=3 end + P:setInvisible(5) + E.block=false + elseif D.cools>11 then + if E.lockFX and E.lockFX>1 then E.lockFX=1 end + P:setInvisible(5) + else + P:setInvisible(300) + if E.lockFX and not E.lockFX==2 then E.lockFX=2 end + if E.block==false then E.block=true end + end + D.pt=999 + P.waiting=240 + BGM.stop() + D.isInRollTrans=true + return + end + D.target=D.target<900 and D.target+100 or 999 + P:stageComplete(s) + SFX.play('reach') + end + end, + task=function(P) + local D=P.modeData + D.regretDelay=-1 + D.pt=0 + D.target=100 + D.int_grade=0 + D.grade_points=0 + D.rollGrades=0 + D.spd_lvl=0 + D.cools=0 + D.regrets=0 + D.prevSectTime=0 + D.isInRoll=false + D.isInRollTrans=false + D.isFault=false + D.prevDrop70=false + D.nextSpeedUp=false + D.nextSpeedUpper=false + D.awesomeList,D.coolList,D.regretList,D.faultList=TABLE.new(false,9),TABLE.new(false,9),TABLE.new(false,10),TABLE.new(false,10) + local decayRate={125,80,80,50,50,50,45,45,45,45,40,40,40,40,40,30,30,30,30,30,20,20,20,20,20,15,15,15,15,15,15,15,15,15,15,10,10,10,10,9,9,9,8,8,8,7,7,7,6} + local decayTimer=0 + + while true do + coroutine.yield() + D.gradePts=getCurrentGrade(D) + if P.stat.frame-D.prevSectTime > fault_time[getCurSection(D)] and not (D.isInRoll or D.isInRollTrans) then + D.faultList[math.ceil(D.pt/100)]=true + D.regretList[math.ceil(D.pt/100)]=true + D.isFault=true + elseif P.stat.frame-D.prevSectTime > regret_time[getCurSection(D)] and not (D.isInRoll or D.isInRollTrans) then + D.regretList[math.ceil(D.pt/100)]=true + end + if D.regretDelay>-1 then + D.regretDelay=D.regretDelay-1 + if D.regretDelay==-1 and D.isFault then + P:_showText("FAULT!!!",0,-120,80,'beat',.8) + D.isFault=false + elseif D.regretDelay==-1 then P:_showText("REGRET!!",0,-120,80,'beat',.8) end + end + if D.isInRollTrans then + if P.waiting>=220 then + -- Make field invisible + for y=1,#P.field do for x=1,10 do + P.visTime[y][x]=P.waiting-220 + end end + elseif P.waiting==190 then + TABLE.cut(P.field) + TABLE.cut(P.visTime) + elseif P.waiting==180 then + playReadySFX(3,3) + P:_showText("3",0,-120,120,'fly',1) + elseif P.waiting==120 then + playReadySFX(2,1) + P:_showText("2",0,-120,120,'fly',1) + elseif P.waiting==60 then + playReadySFX(1,1) + P:_showText("1",0,-120,120,'fly',1) + elseif P.waiting==1 then + playReadySFX(0,1) + D.isInRollTrans=false + D.isInRoll=true + BGM.play('hope') + BG.set('blockspace') + D.prevSectTime=P.stat.frame + end + end + if P.waiting<=0 and D.grade_points>0 and not D.isInRoll then + decayTimer=decayTimer+1 + if decayTimer>=decayRate[math.min(D.internal_grade+1,#decayRate)] then + decayTimer=0 + D.grade_points=D.grade_points-1 + end + elseif D.isInRoll and P.stat.frame>=D.prevSectTime+3599 then + D.rollGrades=D.rollGrades+(D.cools>16 and 1.6 or D.cools>11 and 0.8 or 0.5) + D.gradePts=getCurrentGrade(D) + P:win('finish') + end + end + end, +} diff --git a/parts/gameFuncs.lua b/parts/gameFuncs.lua index 209db401d..85c31b6e2 100644 --- a/parts/gameFuncs.lua +++ b/parts/gameFuncs.lua @@ -252,6 +252,41 @@ do -- Master GRADED end end end +do -- Master GRADED MODERN + local modern_postm_grades={"M","MK","MV","MO","MM-","MM","MM+","GM-","GM","GM+","TM-","TM","TM+","ΩM","ΣM","∞M","∞M+"} + function getMasterGradeModern(index) + if index<11 then + return tostring(11-index) + elseif index<21 then + return "S"..index-11 + elseif index<31 then + return "m"..index-21 + elseif index<48 then + return modern_postm_grades[index-30] + else + return modern_postm_grades[#modern_postm_grades]..getSmallNum(index-46) + end + end + local modern_postm_grades_text={ + "Master","MasterK","MasterV","MasterO","MasterM-","MasterM","MasterM+", + "Grand Master-","Grand Master","Grand Master+", + "Tech Master-","Tech Master","Tech Master+", + "Omega Master","Sigma Master","Infinity Master","Infinity Master+" + } + function getMasterGradeModernText(index) + if index<11 then + return "Grade "..tostring(11-index) + elseif index<21 then + return "S"..index-11 + elseif index<31 then + return "m"..index-21 + elseif index<48 then + return modern_postm_grades_text[index-30] + else + return modern_postm_grades_text[#modern_postm_grades]..index-46 + end + end +end ------------------------------[Royale mode]------------------------------ function randomTarget(P)-- Return a random opponent for P local l=TABLE.shift(PLY_ALIVE,0) @@ -1010,6 +1045,7 @@ do-- function resetGameData(args) TEXT.show(M.id,640+(counter%5-2)*80,26,45,'spin') counter=counter+1 end + time=time and time+1 or 0 end end local gameSetting={ diff --git a/parts/language/lang_en.lua b/parts/language/lang_en.lua index 01240ab3d..dcc16d395 100644 --- a/parts/language/lang_en.lua +++ b/parts/language/lang_en.lua @@ -913,6 +913,7 @@ C. Gamepad ['master_final']= {"Master", "FINAL", "20G and beyond"}, ['master_ph']= {"Master", "PHANTASM", "???"}, ['master_g']= {"Master", "GRADED", "Get the highest grade you can!"}, + ['master_g_modern']= {"Master", "MODERN GRADED", "Get the highest grade you can!"}, ['master_ex']= {"GrandMaster", "EXTRA", "An eternity shorter than an instant"}, ['master_instinct']= {"Master", "INSTINCT", "What if the active piece becomes invisible?"}, ['strategy_e']= {"Strategy", "EASY", "Fast 20G decision"}, diff --git a/parts/language/lang_es.lua b/parts/language/lang_es.lua index c3dea60f3..00e53df65 100644 --- a/parts/language/lang_es.lua +++ b/parts/language/lang_es.lua @@ -871,6 +871,7 @@ return { ['master_final']= {"Master", "Final", "Al 20Ginito y más allá!"}, ['master_ph']= {"Master", "Phantasm", "???"}, ['master_g']= {"Master", "Con rangos", "¡Consigue el rango más alto que puedas!"}, + ['master_g_modern']={"Master", "Con rangos modernos", "¡Consigue el rango más alto que puedas!"}, ['master_ex']= {"GrandMaster", "Extra", "Una eternidad que dura un instante."}, ['master_instinct']={"Master", "Instintivo", "¿Y si la pieza activa es invisible?"}, ['strategy_e']= {"Strategy", "Fácil", "Decisiones rápidas en 20G."}, diff --git a/parts/language/lang_id.lua b/parts/language/lang_id.lua index cb460b029..bf05ac9b6 100644 --- a/parts/language/lang_id.lua +++ b/parts/language/lang_id.lua @@ -875,6 +875,7 @@ return { ['master_final']= {"Ahli", "TERAKHIR", "Lebih dari 20G"}, ['master_ph']= {"Ahli", "KHAYALAN", "???"}, ['master_g']= {"Ahli", "BERTINGKAT", "Dapatkan tingkat tertinggi!"}, + ['master_g_modern']= {"Ahli", "BERTINGKAT MODERN", "Dapatkan tingkat tertinggi!"}, ['master_ex']= {"Sangat Ahli", "EKSTRA", "Blok tidak kelihatan"}, ['master_instinct']= {"Ahli", "INSTINK", "Bagaimana jika blok terkontrol tersembunyi?"}, ['strategy_e']= {"Strategi", "MUDAH", "Keputusan 20G cepat"}, diff --git a/parts/language/lang_ja.lua b/parts/language/lang_ja.lua index d60b75b99..83025f55d 100644 --- a/parts/language/lang_ja.lua +++ b/parts/language/lang_ja.lua @@ -919,6 +919,7 @@ C. ゲームパッド ['master_final']= {"マスター", "FINAL", "20G その先へ"}, ['master_ph']= {"マスター", "PHANTASM", "???"}, ['master_g']= {"マスター", "GRADED", "最高段位を取れ!"}, + ['master_g_modern']= {"マスター", "MODERN GRADED", "最高段位を取れ!"}, ['master_ex']= {"グランドマスター", "EXTRA", "一瞬にも満たない永遠"}, ['master_instinct']= {"マスター", "INSTINCT", "もしミノが見えなくなったら?"}, ['strategy_e']= {"ストラテジー", "EASY", "20Gでの素早い判断"}, diff --git a/parts/language/lang_vi.lua b/parts/language/lang_vi.lua index db45bd4ee..5e48783d1 100644 --- a/parts/language/lang_vi.lua +++ b/parts/language/lang_vi.lua @@ -940,6 +940,7 @@ C. Tay cầm chơi game (Gamepad): ['master_final']= {"Master", "FINAL", "Dành cho các pháp sư 20G"}, ['master_ph']= {"Master", "PHANTASM", "Hả???"}, ['master_g']= {"Master", "GRADED", "Lấy điểm cao nhất có thể!"}, + ['master_g_modern']= {"Master", "GRADED MỚI", "Lấy điểm cao nhất có thể!"}, ['master_ex']= {"GrandMaster", "EXTRA", "Cũng là lấy điểm cao nhất có thể nhưng mà gắt hơn!"}, ['master_instinct']= {"Master", "INSTINCT", "Lấy điểm cao nhất có thể nhưng với gạch tàng hình!"}, ['strategy_e']= {"Strategy", "DỄ", "Quyết định nhanh hoặc là thua"}, diff --git a/parts/language/lang_zh.lua b/parts/language/lang_zh.lua index d3de2f227..da229ea3f 100644 --- a/parts/language/lang_zh.lua +++ b/parts/language/lang_zh.lua @@ -903,6 +903,7 @@ return { ['master_final']= {"大师", "终点", "究极20G:无法触及的终点"}, ['master_ph']= {"大师", "虚幻", "虚幻20G:???"}, ['master_g']= {"大师", "段位考试", "20G段位考试"}, + ['master_g_modern']={"大师", "现代段位考试", "20G段位考试"}, ['master_ex']= {"宗师", "EX", "成为方块大师"}, ['master_instinct']={"大师", "本能", "当前块在出现后一小会后会隐形"}, ['strategy_e']= {"策略堆叠", "简单", "20G堆叠中速决策练习"}, diff --git a/parts/language/lang_zh_code.lua b/parts/language/lang_zh_code.lua index 084a70c8a..d5c013bec 100644 --- a/parts/language/lang_zh_code.lua +++ b/parts/language/lang_zh_code.lua @@ -822,6 +822,7 @@ return { ['master_final']= {"Master(Final);", "", "究极20G:无法触及的终点"}, ['master_ph']= {"Master(Phantasm);", "", "虚幻20G:???"}, ['master_g']= {"Master(Graded);", "", "20G段位考试"}, + ['master_g_modern']= {"Master(Modern Graded);", "", "20G段位考试"}, ['master_ex']= {"Master(EX);", "", "成为方块大师"}, ['master_instinct']= {"Master(Instinct);", "", "当前块在出现后一小会后会隐形"}, ['strategy_e']= {"Strategy(Easy);", "", "20G堆叠中速决策练习"}, diff --git a/parts/language/lang_zh_trad.lua b/parts/language/lang_zh_trad.lua index dd2e6d2a1..af9bcbfa1 100644 --- a/parts/language/lang_zh_trad.lua +++ b/parts/language/lang_zh_trad.lua @@ -874,6 +874,7 @@ return { ['master_final']= {"大師", "究極", "究極20G:無法觸及的終點"}, ['master_ph']= {"大師", "虛幻", "虛幻20G:???"}, ['master_g']= {"大師", "段位考試", "20G段位考試"}, + ['master_g_modern']={"大師", "現代段位考試", "20G段位考試"}, ['master_ex']= {"宗師", "EX", "成為方塊大師"}, ['master_instinct']={"大師", "本能", "隱藏當前塊"}, ['strategy_e']= {"策略堆疊", "簡單", "20G堆疊中速決策練習"}, diff --git a/parts/modes.lua b/parts/modes.lua index 2c2ee5c74..8f4fc3209 100644 --- a/parts/modes.lua +++ b/parts/modes.lua @@ -55,12 +55,13 @@ return { {name='big_h', x=-600, y=-400, size=40,shape=1,icon="big"}, {name='master_n', x=0, y=-1000,size=40,shape=1,icon="master", unlock={'master_h','strategy_h'}}, - {name='master_h', x=0, y=-1200,size=40,shape=3,icon="master", unlock={'master_final','master_ex','master_ph','master_m','master_g','strategy_u'}}, - {name='master_m', x=100, y=-1550,size=40,shape=2,icon="master"}, - {name='master_final', x=-100, y=-1550,size=40,shape=2,icon="master"}, - {name='master_ph', x=-170, y=-1450,size=40,shape=2,icon="master"}, - {name='master_g', x=0, y=-1600,size=40,shape=3,icon="master"}, - {name='master_ex', x=170, y=-1450,size=40,shape=2,icon="master_ex"}, + {name='master_h', x=0, y=-1200,size=40,shape=3,icon="master", unlock={'master_final','master_ex','master_ph','master_m','master_g','master_g_modern','strategy_u'}}, + {name='master_m', x=150, y=-1610,size=40,shape=2,icon="master"}, + {name='master_final', x=-150, y=-1610,size=40,shape=2,icon="master"}, + {name='master_ph', x=-190, y=-1500,size=40,shape=2,icon="master"}, + {name='master_g', x=60, y=-1680,size=40,shape=3,icon="master"}, + {name='master_ex', x=190, y=-1500,size=40,shape=2,icon="master_ex"}, + {name='master_g_modern', x=-60, y=-1680,size=40,shape=3,icon="master"}, {name='strategy_e', x=-150, y=-1020,size=40,shape=3,icon="master", unlock={'strategy_e_plus'}}, {name='strategy_h', x=-150, y=-1150,size=35,shape=3,icon="master", unlock={'strategy_h_plus'}}, diff --git a/parts/modes/master_g_modern.lua b/parts/modes/master_g_modern.lua new file mode 100644 index 000000000..38f3c0c39 --- /dev/null +++ b/parts/modes/master_g_modern.lua @@ -0,0 +1,25 @@ +return { + env={ + freshLimit=15, + sequence='bagES', + eventSet='master_g_modern', + bg='bg3',bgm='secret7th', + }, + score=function(P) return {P.modeData.gradePts,P.stat.time} end, + scoreDisp=function(D) return(getMasterGradeModernText(D[1]) or D[1]).." "..STRING.time(D[2]) end, + comp=function(a,b) return a[1]>b[1] or (a[1]==b[1] and a[2]=47 and 5 or -- ∞M+ + G>=41 and 4 or -- TM- - ∞M + G>=31 and 3 or -- M - GM+ + G>=21 and 2 or -- m0 - m9 + G>=11 and 1 or -- S0 - S9 + 0 + + -- Table of grades vs values + -- 10 9 8 7 6 5 4 3 2 1 S0 S1 S2 S3 S4 S5 S6 S7 S8 S9 m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 M MK MV MO MM- MM MM+ GM- GM GM+ TM- TM TM+ ΩM ΣM ∞M ∞M+ + -- 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 + end, +} \ No newline at end of file diff --git a/parts/shaders/grad3.glsl b/parts/shaders/grad3.glsl new file mode 100644 index 000000000..011aeec0a --- /dev/null +++ b/parts/shaders/grad3.glsl @@ -0,0 +1,10 @@ +uniform highp float phase; +vec4 effect(vec4 color,sampler2D tex,vec2 texCoord,vec2 scrCoord){ + float y=scrCoord.y/love_ScreenSize.y; + return vec4( + .3+.1*sin(phase), + .8-y*.6, + .15+y*.7, + .4 + ); +}