CursedSliver

Garden calc upgrade

Feb 18th, 2024 (edited)
392
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 14.10 KB | Source Code | 0 0
  1. //why did I do this to myself
  2. if (typeof Game !== 'undefined') { for (let i = 0; i < 10; i++) {Game.Notify('You are on the wrong website!','This is NOT a Cookie Clicker mod. This is a Garden Calculator Mod. Please load this mod at https://daydun.com/cookie/garden/ (you can find this in the instructions)'); }}
  3. var maxX = 6; var maxY = 6; var cdim = [6, 6]; var useLev = true; function glfm(x,y) { return x + y - 4; } function gmfl(l) { if (useLev) { l++; return [Math.floor(l/2)+2,Math.ceil(l/2)+1]; } else { return cdim; } } function ggbx(l) { if (useLev) { return 240+40*Math.ceil((Math.max(l,8)-8)/2) } else { return Math.max(40*cdim[0], 240); } } function ggby(l) { if (useLev) { return 240+40*Math.floor((Math.max(l,8)-8)/2) } else { return Math.max(40*cdim[1], 240); } } function uplim() { document.styleSheets[1].cssRules[23].style.cssText = 'width: '+ggbx(level).toString()+'px; height: '+ggby(level).toString()+'px;'; } function setP(tile,x,y) { if (x>=gmfl(level)[0]||y>=gmfl(level)[1]) {tile.setDisabled(true);} else {tile.setDisabled(false);}} function crT() {plot = []; document.getElementById('gardenPlot').innerHTML=''; maxX = gmfl(level)[0]; maxY = gmfl(level)[1]; generatePlot();} eval('generatePlot='+generatePlot.toString().replace('y<6','y<Math.max(maxY,6)').replace('x<6','x<Math.max(maxX,6)')); eval('getTile='+getTile.toString().replace('x >= 6','x >= maxX').replace('y >= 6','y >= maxY').replace('y * 6','y * maxX'));eval('updateLevel='+updateLevel.toString().replace('level + 1;','level+1;uplim();for (let i in plot) {plot[i].setDisabled(true);}').replace('y<6','y<Math.max(6,gmfl(level)[1])').replace('x<6','x<Math.max(6,gmfl(level)[0])').replace('y * 6','y*Math.max(6,gmfl(level)[0])').replace('+ x];','+ x]; if (level>=9&&useLev) {setP(tile,x,y);continue;} else if (!useLev) { setPAlt(tile,x,y); continue;  }'));eval('updateStats='+updateStats.toString().replace('y<6','y<maxY').replace('x<6','x<maxX')); document.getElementById('level-add').remove();var newLevelAdd = document.createElement('button');newLevelAdd.textContent = '+';newLevelAdd.id = "level-add";document.getElementById('level-select').appendChild(newLevelAdd); document.getElementById('level-add').addEventListener('click', function() {level++; useLev = true; if (glfm(maxX,maxY)<level) {crT();} updateEffects(); updateLevel();}); document.getElementById('level-sub').addEventListener('click',function() { if (!useLev) { useLev = true; console.log('level: '+level); crT(); updateLevel(); } updateEffects(); if(level>=8) { crT();updateLevel();}});eval('updateStats='+updateStats.toString().replace('.toFixed(2)','.toFixed(7)')); crT(); updateLevel(); function inR(x,y) { if (!useLev) { return inRAlt(x,y); } if (level<9||x>=gmfl(level)[0]||y>=gmfl(level)[1]) { return false; } return true; } eval('updateStats='+updateStats.toString().replace('let neigh = {};','let neigh = {}; let neighAges = {};').replace('].strId] = 0;','].strId]=0; neighAges[plants[i].strId]=[];').replace('alone = false;', 'alone=false; neighAges[plants[tile].strId].push(getAge(x+xx,y+yy));').replace('if (alone)', 'if (alone && (!checkSup(x,y)))').replace('probs = [];','probs = []; let cs = !checkSup(x,y);').replace(updateStats.toString().slice(updateStats.toString().indexOf('loop:'),updateStats.toString().indexOf('if (probs.length === 0) continue;')), 'loop:\n\t\t\tfor (let i=0; i<mutations.length; i++) { for (let j in mutations[i][0]) { if ( (neigh[j]-(mutations[i][0][j][2]?mode(neighAges[j],imt):0))<mutations[i][0][j][0] || neigh[j]>mutations[i][0][j][1] ) { continue loop; } } for (let j in mutations[i][1]) { if ((!plants[strIdToIndex[j]].fungi) || cs) { probs.push(mutations[i][1][j]); muts.push(j); }}}')); eval('var updateStatsA='+updateStats.toString().replace('function updateStats()','function()').replace('x < plotLimits[level][0] ||','(!inR(x,y))').replace('y < plotLimits[level][1] ||','').replace('x >= plotLimits[level][2] ||','').replace('y >= plotLimits[level] [3]','')); eval('updateStats='+updateStats.toString().replace('TML = "";','TML = "";if(level>=9||(!useLev)){updateStatsA();return false;}'));function sts(stage) { return -48*Math.min(stage,3)-48; } function decay(stage) { return (Math.max(stage-3,0))?0.5:1; } var agesContainer = document.createElement('div'); agesContainer.id = 'ages'; var liner = document.createElement('div'); liner.classList.add('line'); document.getElementById('gardenPanel').appendChild(liner); document.getElementById('gardenPanel').appendChild(agesContainer); for (let i = 0; i < 5; i++) { var test = document.createElement('div'); test.id = 'stage'+i;test.classList.add("seed"); var test2 = document.createElement('div'); test2.classList.add('seed-icon'); test.appendChild(test2); document.getElementById('ages').appendChild(test); } function updatestages(holding) { if (holding !== null) { holding=plants[holding].icon; } else { return false; } for (let i = 0; i < 5; i++) { document.getElementById('stage'+i).getElementsByClassName('seed-icon')[0].style.backgroundPosition = sts(i)+"px -"+holding*48+"px"; document.getElementById('stage'+i).getElementsByClassName('seed-icon')[0].style.opacity = decay(i); }} var ageSelected = 3;document.getElementById('stage3').classList.add('selected'); for (let i = 0; i < 5; i++) { let target = document.getElementById('stage'+i); target.addEventListener('click', function() { if (ageSelected != i) { document.getElementById('stage'+ageSelected).classList.remove('selected'); ageSelected = i; target.classList.add('selected')} }); } let alltheseeds = document.getElementById('gardenSeeds').childNodes; try {for (let i in alltheseeds) { alltheseeds[i].addEventListener('click', function() { updatestages(selected);}); }} catch(err) { } updatestages((selected === null)?0:selected); eval('Tile.prototype.setPlant='+Tile.prototype.setPlant.toString().replace('setPlant','function').replace('nt = id;','nt = id; this.age = ageSelected; updateEffects();').replace('"-192px -"','sts(this.age)+"px -"').replace('"";','"";this.icon.style.opacity = decay(this.age);')); function checkNonmature(obj,which) { let k = Object.keys(obj); which = k.indexOf(which);if (which==1&&k[0]=='bakerWheat'&&k[1]=='brownMold') {return 0;} if (which==1&&k[0]=='chocoroot'&&k[1]=='whiteMildew') {return 0;} if (which==0&&k.length==1) { if (k[0]=='shriekbulb'||k[0]=='doughshroom'||k[0]=='duketater') { return 0; } } return 1;} for (let i in mutations) { for (let key in mutations[i][0]) { eval('mutations['+i+'][0].'+key+'.push('+checkNonmature(mutations[i][0],key)+')') } } function mode(arr,items) { if (!Array.isArray(items)) { items = [items]; } let count = 0; for (let i in items) { for (let j in arr) { if (arr[j]==items[i]) { count++; } } } return count; } const mat = [3,4]; const imt = [0,1,2]; function getAge(x,y) {if (x < 0 || y < 0 || x >= maxX || y >= maxY || (plot[y*maxX+x].plant == null)) { return null; } return plot[y*maxX+x].age;} function updateEffects() { for (let i in plot) { plot[i].suppress = checkSup(plot[i].x,plot[i].y); } } function checkSup(x,y) { for (let yy = -2; yy <= 2; yy++) { for (let xx = -2; xx <= 2; xx++) { let t = getTile(x+xx,y+yy);if (xx==0&&yy==0) { continue; } if (t===31) { return 1; } if (t==32) { if (xx != 2 && xx != -2 && yy != 2 && yy != -2) { return 1; } } } } return 0; } for (let i in plants) { let id = plants[i].id; if (id==11||id==12||id==13||id==23||id==24||id==25||id==26||id==27||id==28||id==29||id==33) { plants[i].fungi = true; } else { plants[i].fungi = false; }} var strIdToIndex = {}; for (let i in plants) { strIdToIndex[plants[i].strId] = plants[i].id; } var tl = {0:'=',1:'a',2:'b',3:'c',4:'d',5:'e',6:'f',7:'g',8:'h',9:'i',10:'j',11:'k',12:'l',13:'m',14:'n',15:'o',16:'p',17:'q',18:'r',19:'s',20:'t',21:'u',22:'v',23:'w',24:'x',25:'y',26:'z',27:'!',28:'@',29:'#',30:'$',31:'%',32:'^',33:'&',34:'*',undefined:';',null:';'}; var rtl = Object.fromEntries(Object.entries(tl).map(([key, value]) => [value, key])); function parseP(input) { if (input === 'null') { return null; } return parseInt(input); } var ag = {undefined:'3',0:'0',1:'1',2:'2',3:'3',4:'4'}; function save() { var strr = ''; if (useLev) { strr = level+'/'; } else { strr = cdim[0]+'/'+cdim[1]+'/'; } for (let i in plot) { strr+=tl[plot[i].plant]+ag[plot[i].age];} return strr; } function load(str) { if (str.includes('/')) { str = str.split('/'); } else { return false; } if (str.length == 2) { level = parseP(str[0]); useLev = true; crT(); } else { cdim = [str[0],str[1]]; useLev = false; crT(); maxX = Math.max(6,cdim[0]); maxY = Math.max(6,cdim[1]); } updateLevel(); uplim(); str = str[str.length-1]; let select = ageSelected; for (let i = 0; i < str.length; i+=2) { ageSelected=parseP(str[i+1]); plot[i/2].setPlant(parseP(rtl[str[i]]),true);} ageSelected = select; updateStats(); } function dd() { return document.createElement('div'); } var divv = dd(); divv.classList.add('framed'); divv.id = 'misc'; var divv1 = dd(); divv1.classList.add('title'); divv1.innerText = 'Miscellaneous'; divv.appendChild(divv1); divv1 = dd(); divv1.classList.add('line'); divv.appendChild(divv1); document.getElementById('garden').appendChild(divv); document.styleSheets[1].insertRule('#misc { width: 120px; margin: 4px; text-align: center; box-shadow: 8px 0px 8px rgba(0, 0, 0, 0.5); }', document.styleSheets[1].cssRules.length); document.styleSheets[1].cssRules[44].style.width = '174px'; divv = document.createElement('label'); divv.setAttribute('for','import'); divv.innerHTML = 'Import garden:'; document.getElementById('misc').appendChild(divv); document.styleSheets[1].insertRule('label { display: inline-block; color: #fff; margin-top: -4px; padding: 2px; font-size: 11px; margin-bottom: 2px; }', document.styleSheets[1].cssRules.length); var importStr = ''; divv = document.createElement('input'); divv.type = 'text'; divv.id = 'import'; document.getElementById('misc').appendChild(divv); document.styleSheets[1].insertRule('input[type="text"] { background-image: url(https://orteil.dashnet.org/cookieclicker/img/shadedBordersSoft.png), url(https://orteil.dashnet.org/cookieclicker/img/darkNoise.jpg); border-image: url(https://orteil.dashnet.org/cookieclicker/img/frameBorder.png) 3 round; width: 90%; padding: 4px; box-sizing: border-box; color: #ccc; }', document.styleSheets[1].cssRules.length); document.styleSheets[1].insertRule('.cbr { display: inline-block; height: 1px; margin: 6px auto; }', document.styleSheets[1].cssRules.length); document.styleSheets[1].insertRule('.framed .small { border: 2px solid transparent; border-image: url(https://orteil.dashnet.org/cookieclicker/img/frameBorder.png) 3 round; margin: 3px; }', document.styleSheets[1].cssRules.length); var br = dd(); br.classList.add('cbr'); divv = document.createElement('button'); divv.id = 'importButton'; divv.classList.add('framed'); divv.classList.add('small'); divv.innerText = 'Import!'; divv.addEventListener('click', function() { load(document.getElementById('import').value); }); document.getElementById('misc').appendChild(divv);
  4. document.getElementById('misc').appendChild(br); divv = document.createElement('button'); divv.id = 'exportButton'; divv.classList.add('framed'); divv.classList.add('small'); divv.innerText = 'Export garden'; divv.addEventListener('click', function() { let code = save(); let str = document.createElement('input'); str.value = code; document.body.appendChild(str); str.select(); str.setSelectionRange(0, code.length); document.execCommand('copy'); document.body.removeChild(str);}); document.getElementById('misc').appendChild(divv); divv = document.createElement('label'); divv.setAttribute('for','import'); divv.innerHTML = '(saves to your clipboard)'; document.getElementById('misc').appendChild(divv); divv = dd(); divv.classList.add('line'); document.getElementById('misc').appendChild(divv); document.styleSheets[1].insertRule('#xDim { width: 45%; margin-left: 4px; }', document.styleSheets[1].cssRules.length); document.styleSheets[1].insertRule('#yDim { width: 45%; margin-left: 4px; }', document.styleSheets[1].cssRules.length); document.getElementById('misc').appendChild(br); divv = document.createElement('label'); divv.setAttribute('for','xDim'); divv.innerHTML = ' width: '; document.getElementById('misc').appendChild(divv); divv = document.createElement('input'); divv.type = 'text'; divv.id = 'xDim'; document.getElementById('misc').appendChild(divv); document.getElementById('misc').appendChild(document.createElement('br')); divv = document.createElement('label'); divv.setAttribute('for','yDim'); divv.innerHTML = 'height: '; document.getElementById('misc').appendChild(divv); divv = document.createElement('input'); divv.type = 'text'; divv.id = 'yDim'; document.getElementById('misc').appendChild(divv); divv = document.createElement('button'); divv.id = 'resize'; divv.classList.add('framed'); divv.classList.add('small'); divv.innerText = 'Custom resize'; divv.addEventListener('click', function() { cdim = [Math.max(parseP(document.getElementById('xDim').value),1), Math.max(parseP(document.getElementById('yDim').value),1)]; resize(); }); document.getElementById('misc').appendChild(divv); function resize() { useLev = false; crT(); maxX = Math.max(6,cdim[0]); maxY = Math.max(6,cdim[1]); uplim(); updateLevel(); updateEffects(); updateStats(); } var altLims = [0,[3,3],[3,4],[2,4],[2,5],[1,5],[1,6]]; function setPAlt(tile, x, y) { if (inRAlt(x,y)) { tile.setDisabled(false); } else { tile.setDisabled(true); } } function inRAlt(x,y) { x++; y++; if (x>Math.max(6,cdim[0])||y>Math.max(6,cdim[1])) {return false;} if (cdim[0]<=6) { if (x<altLims[cdim[0]][0]||x>altLims[cdim[0]][1]) {return false;} } if (cdim[1]<=6) { if (y<altLims[cdim[1]][0]||y>altLims[cdim[1]][1]) {return false;} } return true; } document.styleSheets[1].insertRule('.framed:hover { color: #fff; }',document.styleSheets[1].cssRules.length);
  5. var lib = document.createElement('script'); lib.src = 'https://html2canvas.hertzen.com/dist/html2canvas.min.js'; document.head.appendChild(lib); //installs html2canvas for screenshot purposes
  6. function download() { let g = document.getElementById('garden'); html2canvas(g).then(function(r) { promptToDownload(r); }) } function promptToDownload(canvas) { let dataUrl = canvas.toDataURL(); let downloadLink = document.createElement('a'); downloadLink.href = dataUrl; downloadLink.download = 'garden.png'; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); }
Advertisement
Add Comment
Please, Sign In to add comment