const MAXSTEPS= 10000 function Korean(str) { switch (str) { case "Hello":{ return "안녕하세요" }break; default:{ return English(str) } } } function English(str) { switch (str) { case 1:{ //Tab Title of Webpage return "D4DJ Parking Calculator | Powered by Muni" }break; case 2:{ //Header Title (Top) of Webpage return "D4DJ Event Parking Calculator" }break; case 3:{ //Set up your options (Category Title) return "Parking Configuration" }break; case 4:{ //Selection for event type: Poker/Raid return "Poker/Raid" }break; case 5:{ //Selection for event type: Bingo return "Bingo" }break; case 6:{ //Selection for event type: Medley return "Medley" }break; case 7:{ //Label for team % selector (Include ":") return "Event Team Bonus:" }break; case 17:{ //Label for whether to enable flexible team options. return "Flexible Team?" }break; case 8:{ //Tooltip for flexible team options (mouseover) return "If turned on, calculates scoring options using lower % teams also." }break; case 18:{ //Label for what the max score in free lives is. return "Max Free Live Score:" }break; case 9:{ //Tooltip for what the max score in free lives is. (Setting it to 0 forces the calculator to use Rehearsal) return "The maximum score you can get from playing a song using Free Live.
(Use 0 for Rehearsals Only)" }break; case 10:{ //Label for Advanced Settings toggle. return "Advanced Options?" }break; case 11:{ //Tooltip for Advanced Settings toggle. return "Enable voltage & EP limits." }break; case 12:{ //Label for setting the lowest EP where voltage is allowed. return "Use voltage until: " }break; case 13:{ //Label for setting the total amount of voltage the calculator may consume. return "Max Voltage to use:" }break; case 14:{ //Label for setting the Starting EP amount. return "Starting EP:" }break; case 15:{ //Label for setting the final EP amount. return "Target EP:" }break; case 16:{ //The text for the button users click to run the calculator. return "Calculate" }break; case 19:{ //Tip: Here's the Light on EX or Synchrogazer on Hard/EX difficulty are some of the highest scoring songs you can pick. return "Here's the Light on EX or Synchrogazer on Hard/EX difficulty are some of the highest scoring songs you can pick." }break; case 20:{ //Tip: When you get close to the score you need in Free Live, purposely fail the song. Notes are worth 10% their normal value when you have 0 health so you can finish easily. return "When you get close to the score you need in Free Live, purposely fail the song. Notes are worth 10% their normal value when you have 0 health so you can finish easily." }break; case 21:{ //Tip: The "Flexible Team" option gives you the fastest park, but at the expense of more voltage. return "The \"Flexible Team\" option gives you the fastest park, but at the expense of more voltage." }break; case "%INITIAL%":{ //This message is the first thing to display for a normal calculation. //Sample message: /* Calculating from 100000 to 104000 for event type Poker/Raid... (All games are done in Free Live) Found a park! 9 steps and 13 voltage required! */ //Variables for this message: /* Calculating from %START% to %TARGET% for event type %EVENT%... (All games are done in Free Live) Found a park! %STEPS% step%PLURAL_STEPS% and %VOLTAGE% voltage required! */ return "Calculating from %START% to %TARGET% for event type %EVENT%...\n\t(All games are done in Free Live)\n\nFound a park! %STEPS% step%PLURAL_STEPS% and %VOLTAGE% voltage required!" }break; case "%STEP%":{ //This message is displayed for each normal voltage step in the process. //Sample message: /* Step 1) Using 5 voltage w/160% team, score between 640000~649999 pts. EP +1480. Remaining:2520 EP */ //Variables for this message: /* Step %STEP%) Using %VOLTAGE% voltage w/%PERCENT%% team, score between %LOWSCORE%~%HIGHSCORE% pts. EP +%EPGAIN%. Remaining:%REMAINING% EP */ return "Step %STEP%) Using %VOLTAGE% voltage w/%PERCENT%% team, score between %LOWSCORE%~%HIGHSCORE% pts. EP +%EPGAIN%. Remaining:%REMAINING% EP" }break; case "%REHEARSAL%":{ //Similar to above, but for a rehearsal step instead. return "Step %STEP%) Use Rehearsal w/%PERCENT%% team. EP +%EPGAIN%. Remaining:%REMAINING% EP" }break; case "%LARGEGAP%":{ //This message is displayed if the Starting EP and Final EP gap is too big for reasonable calculations. return "Get closer to target score before using parking calculator!"; }break; case "%FAILED%":{ //This message is displayed if it's impossible to park. return "Impossible to park using this team!" }break; default:{ return "???" } } } function Reveal(str) { switch (str) { case "Hello":{ return "Hi" }break; default:{ return English(str) } } } function ConvertVariables(str,data) { return str .replaceAll("%START%",data.start) .replaceAll("%TARGET%",data.target) .replaceAll("%EVENT%",data.event) .replaceAll("%STEPS%",data.steps) .replaceAll("%PLURAL_STEPS%",Plural(data.steps)) .replaceAll("%VOLTAGE%",data.voltage) .replaceAll("%STEP%",data.step) .replaceAll("%PERCENT%",data.percent) .replaceAll("%LOWSCORE%",data.lowscore) .replaceAll("%HIGHSCORE%",data.highscore) .replaceAll("%EPGAIN%",data.epgain) .replaceAll("%REMAINING%",data.remaining) } var LANGUAGE=Reveal var LANGUAGELIST={English:English,Korean:Korean} var TRANSLATEELEMENTS=100 //Increase as number of translated elements increases. function Plural(t) { return t==1?"":"s" } function ConvertLanguage() { for (var i=0;i0) { switch (type) { case "Bingo":{ return voltage * Math.floor((1 + bonus)*Math.max(10,Math.floor(score/interval))) }break; case "Medley":{ return voltage * Math.floor((1 + bonus)*(10+Math.floor(score/interval))) }break; case "Poker/Raid":{ return voltage * Math.floor((1 + bonus)*(50 + Math.floor(score/interval))) }break; } } else { return Math.round(bonus*10)+10 } } function EvenOdd(val) { return val%2==0?"even":"odd" } function TryBiggestGain(tbonus) { var voltage=5 for (var i=maxscore;i>=maxscore*0.8;i-=interval) { if (start+EPCalc(voltage,i,tbonus)26))) { //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)) { //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" start+=EPCalc(voltage,i,tbonus) flameCount+=voltage document.getElementById("console").value+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" /*"Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n"*/ return true } } } return false } function TrySmallerGain(voltage,tbonus) { for (var i=maxscore;i>=maxscore*0.8;i-=interval) { if (start+EPCalc(voltage,i,tbonus)26))) { //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)||start+EPCalc(voltage,i,tbonus)==end) { //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" start+=EPCalc(voltage,i,tbonus) flameCount+=voltage document.getElementById("console").value+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" /*"Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n"*/ return true } } } return false } function TrySmolGain(voltage,tbonus) { for (var i=maxscore;i>=0;i-=interval) { if ((EPCalc(voltage,i,tbonus)>=(10+Math.round(bonus*10))&&(start+EPCalc(voltage,i,tbonus)<=end-(10+Math.round(bonus*10))))||((start+EPCalc(voltage,i,tbonus)==end)&&((end-start)%2==1||(end-start)>26))) { //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" if (EvenOdd(start+EPCalc(voltage,i,tbonus))==EvenOdd(end-10)||start+EPCalc(voltage,i,tbonus)==end) { //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" start+=EPCalc(voltage,i,tbonus) flameCount+=voltage document.getElementById("console").value+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" /*"Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n"*/ return true } } } for (var i=maxscore;i>=0;i-=interval) { if (EvenOdd(start+EPCalc(voltage,i,tbonus))!=EvenOdd(end-10)&&(((start+EPCalc(voltage,i,tbonus))==end)&&((end-start)%2==1||(end-start)>26))) { //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" start+=EPCalc(voltage,i,tbonus) flameCount+=voltage document.getElementById("console").value+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" /*"Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n"*/ return true } } /*for (var i=maxscore;i>=0;i-=interval) { if ((start+EPCalc(voltage,i,tbonus))==end) { //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" start+=EPCalc(voltage,i,tbonus) flameCount+=voltage document.getElementById("console").value+="Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n" return true } }*/ for (var i=maxscore;i>=0;i-=interval) { if (EvenOdd(start+EPCalc(voltage,i,tbonus))!=EvenOdd(end-10)&&(((start+EPCalc(voltage,i,tbonus))==end)&&((end-start)%2==1||(end-start)>26))) { //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" start+=EPCalc(voltage,i,tbonus) flameCount+=voltage document.getElementById("console").value+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" /*"Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n"*/ return true } } return false } function TryEqualGain(voltage,tbonus) { for (var i=maxscore;i>=0;i-=interval) { //document.getElementById("console").value+=(start+EPCalc(voltage,i,tbonus))+"/"+end+"\n" if (((start+EPCalc(voltage,i,tbonus))==end)&&((end-start)%2==1||(end-start)>26)) { //document.getElementById("console").value+="Ending value needs to be "+EvenOdd(end-10)+"\n" //document.getElementById("console").value+=EvenOdd(start+EPCalc(voltage,i,tbonus))+"/"+EvenOdd(end-10)+"\n" start+=EPCalc(voltage,i,tbonus) flameCount+=voltage document.getElementById("console").value+=ConvertVariables(LANGUAGE("%STEP%"),{step:step++,voltage:voltage,percent:Math.round(tbonus*100),lowscore:i,highscore:(i+interval-1),epgain:EPCalc(voltage,i,tbonus),remaining:end-start})+"\n" /*"Step "+(step++)+") Using "+voltage+" voltage w/"+Math.round(tbonus*100)+"% team, score between "+i+"~"+(i+interval-1)+" pts. EP +"+EPCalc(voltage,i,tbonus)+". Remaining:"+(end-start)+" EP \n"*/ return true } } if (end==start) { return false } else { return undefined } } function TryMatchingRehearsal(tbonus) { //document.getElementById("console").value+=(Math.round(tbonus*10))+10 if (end-start==(Math.round(tbonus*10))+10) { var gain=(Math.round(tbonus*10))+10 start+=gain document.getElementById("console").value+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:Math.round(tbonus*100),epgain:gain,remaining:end-start})+"\n" /*"Step "+(step++)+") Use Rehearsal w/"+Math.round(tbonus*100)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n"*/ return false } return true } function TryRehearsal(tbonus) { if (end==start) { return false } var voltage=0 if ((end-start)%2!==0) { return undefined } if (end-start>(10+Math.round(tbonus*10))+10) { var gain=(10+Math.round(tbonus*10)) start+=gain //document.getElementById("console").value+="1)" document.getElementById("console").value+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:Math.round(tbonus*100),epgain:gain,remaining:end-start})+"\n" /*"Step "+(step++)+") Use Rehearsal w/"+Math.round(tbonus*100)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n"*/ return true } else for (var j=tbonus;j>=0;j-=0.2) { result = TryMatchingRehearsal(j) if (!result) { return false } } if (end-start>=20) { var gain=end-start-10 start+=gain //document.getElementById("console").value+="2)" document.getElementById("console").value+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:((gain-10)*10),epgain:gain,remaining:end-start})+"\n" /*"Step "+(step++)+") Use Rehearsal w/"+((gain-10)*10)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n"*/ return true } else if ((end-start)%10==0) { var gain=10 start+=gain //document.getElementById("console").value+="3)" document.getElementById("console").value+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:0,epgain:gain,remaining:end-start})+"\n" /*"Step "+(step++)+") Use Rehearsal w/0% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n"*/ return false } else { var gain=end-start if (((gain-10)*10)>=0) { start+=gain //document.getElementById("console").value+="4)" document.getElementById("console").value+=ConvertVariables(LANGUAGE("%REHEARSAL%"),{step:step++,percent:((gain-10)*10),epgain:gain,remaining:end-start})+"\n" /*"Step "+(step++)+") Use Rehearsal w/"+((gain-10)*10)+"% team. EP +"+(gain)+". Remaining:"+(end-start)+" EP \n"*/ return false } else { return undefined } } return false /*var voltage=0 if (end-start>36) { start+=26 document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+(1.6*100)+"% team. EP +"+EPCalc(voltage,1,1.6)+". Remaining:"+(end-start)+" EP \n" return true } else if (end-start>20) { var bonus = (end-start-20)*10 var gain = end-start-10 start+=end-start-10 document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+(bonus)+"% team. EP +"+gain+". Remaining:"+(end-start)+" EP \n" if ((bonus/10)%2!=0) { return undefined } else { return true } } else { if (end-start<10||(end-start)%2!=0) { return undefined } var bonus = ((end-start-10)/20)*2 start+=end-start document.getElementById("console").value+="Step "+(step++)+") Use Rehearsal w/"+((bonus)*100)+"% team. EP +"+EPCalc(voltage,1,bonus)+". Remaining:"+(end-start)+" EP \n" return false } return true*/ } if ((end-start)>1000000) { document.getElementById("console").value= LANGUAGE("%LARGEGAP%") //"Get closer to target score before using parking calculator!" } else { var result=true if (maxscore>0) { if (flexible) { for (var j=bonus;j>=0;j-=0.2) { while (TryBiggestGain(j)) { //document.getElementById("console").value+=+start+" EP"+"\n" } for (var i=4;i>0;i--) { while (TrySmallerGain(i,j)) { //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" } } for (var i=5;i>0;i--) { while (TrySmolGain(i,j)) { //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" } } } } else { while (TryBiggestGain(bonus)) { //document.getElementById("console").value+=+start+" EP"+"\n" } for (var i=4;i>0;i--) { while (TrySmallerGain(i,bonus)) { //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" } } for (var i=5;i>0;i--) { while (TrySmolGain(i,bonus)) { //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" } } } } for (var j=bonus;j>=0;j-=0.2) { result = TryMatchingRehearsal(j) if (!result) { break; } } if (result) { for (var j=1.6;j>=0;j-=0.2) { result = TryMatchingRehearsal(j) if (!result) { break; } } } if (result) { do { if (flexible) { for (var j=bonus;j>=0;j-=0.2) { var prevstart = 0 result = TryRehearsal(j) if (start!==prevstart) { break; } } } else { result = TryRehearsal(bonus) } } while (result); } if (maxscore>0) { if (flexible) { for (var i=5;i>0;i--) { for (var j=bonus;j>=0;j-=0.2) { while (result = TryEqualGain(i,j)) { //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" } } } } else { for (var i=5;i>0;i--) { while (result = TryEqualGain(i,bonus)) { //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" } } } } function ConvertEvent(str) { switch (str) { case "Poker/Raid":{ return LANGUAGE(4) }break; case "Bingo":{ return LANGUAGE(5) }break; case "Medley":{ return LANGUAGE(6) }break; } } start=end if (result===undefined) { document.getElementById("console").value=LANGUAGE("%FAILED%") //"Impossible to park using this team!" } else { document.getElementById("console").value=ConvertVariables(LANGUAGE("%INITIAL%"),{ start:originalTarget,target:end,event:ConvertEvent(type),steps:(step-1),voltage:flameCount})+"\n\n"+document.getElementById("console").value /*"Calculating from "+originalTarget+" to "+end+" for event type "+type+"...\n\t(All games are done in Free Live)\n\nFound a park! "+(step-1)+" step"+Plural(step-1)+" and "+flameCount+" voltage required!\n\n"+document.getElementById("console").value*/ } //document.getElementById("console").value+="Step "+(step++)+")"+start+" EP"+"\n" step++ } }