diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..cc309a64 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +/nbproject/private/ +nbproject/project.properties + +nbproject/project.xml diff --git a/index.html b/index.html index 24d2b45b..beb22117 100644 --- a/index.html +++ b/index.html @@ -431,6 +431,7 @@
+ diff --git a/main.js b/main.js index c79e1a71..188a7e1e 100644 --- a/main.js +++ b/main.js @@ -23,7 +23,7 @@ "use strict"; function toggleSave(updateOnly) { - var elem = document.getElementById("toggleBtn"); + var elem = gameElements.getElementById("toggleBtn"); if (updateOnly) game.global.autoSave = (game.global.autoSave) ? false : true; if (game.global.autoSave) { game.global.autoSave = false; @@ -77,6 +77,7 @@ function save(exportThis) { message("Game Saved!", "Notices"); } else { + console.log(saveString, localStorage.getItem('trimpSave1')); message("For some reason, your game is not saving. Make sure you export and back up your save!", "Notices"); } } @@ -87,7 +88,7 @@ function save(exportThis) { function load(saveString, autoLoad) { var savegame; if (saveString) { - savegame = JSON.parse(LZString.decompressFromBase64(document.getElementById("importBox").value)); + savegame = JSON.parse(LZString.decompressFromBase64(gameElements.getElementById("importBox").value)); tooltip('hide'); } else if (localStorage.getItem("trimpSave1") !== null) { savegame = JSON.parse(LZString.decompressFromBase64(localStorage.getItem("trimpSave1"))); @@ -97,7 +98,7 @@ function load(saveString, autoLoad) { if (game.global.killSavesBelow > savegame.global.version) { message("I'm so terribly sorry, but your previous save game (version " + savegame.global.version + ") does not work in the new version. This game is still in early alpha, and a lot is still changing! Thank you for helping test!", "Notices"); message("Since you already had a save, and since the game is still alpha, I unlocked a little cheat button for you. It will make you twice as efficient, allowing you to get through the beginning a little faster.", "Notices"); - document.getElementById("cheatTd").style.display = "block"; + gameElements.getElementById("cheatTd").style.display = "block"; return; } else savegame.global.version = game.global.version; if (typeof savegame.global !== 'undefined') { @@ -148,27 +149,27 @@ function load(saveString, autoLoad) { } } - if (game.buildings.Gym.locked === 0) document.getElementById("blockDiv").style.visibility = "visible"; + if (game.buildings.Gym.locked === 0) gameElements.getElementById("blockDiv").style.visibility = "visible"; if (game.global.gridArray.length > 0) { - document.getElementById("battleContainer").style.visibility = "visible"; + gameElements.getElementById("battleContainer").style.visibility = "visible"; fadeIn("EquipmentFilter", 10); fadeIn("equipmentTitleDiv", 10); drawGrid(); - document.getElementById('metal').style.visibility = "visible"; + gameElements.getElementById('metal').style.visibility = "visible"; for (var x = 0; x <= game.global.lastClearedCell; x++) { - document.getElementById("cell" + x).style.backgroundColor = "green"; + gameElements.getElementById("cell" + x).style.backgroundColor = "green"; } - if (game.global.battleClock > 0) document.getElementById("battleTimer").style.visibility = "visible"; + if (game.global.battleClock > 0) gameElements.getElementById("battleTimer").style.visibility = "visible"; } if (game.global.mapGridArray.length > 0) { drawGrid(true); for (var y = 0; y <= game.global.lastClearedMapCell; y++) { - document.getElementById("mapCell" + y).style.backgroundColor = "green"; + gameElements.getElementById("mapCell" + y).style.backgroundColor = "green"; } } else if (game.global.mapGridArray.length === 0 && game.global.mapsActive) game.global.mapsActive = false; if (game.resources.trimps.owned > 0 || game.buildings.Trap.owned > 0) game.buildings.Trap.first(); if (game.global.autoBattle) { - document.getElementById("pauseFight").style.visibility = "visible"; + gameElements.getElementById("pauseFight").style.visibility = "visible"; pauseFight(true); } for (var itemC in game.global.mapsOwnedArray) { @@ -184,13 +185,13 @@ function load(saveString, autoLoad) { filterTabs(tabBool, true); } } - document.getElementById("worldNumber").innerHTML = game.global.world; + gameElements.getElementById("worldNumber").innerHTML = game.global.world; mapsSwitch(true); checkTriggers(true); setGather(game.global.playerGathering); numTab(1); if (game.global.autoCraftModifier > 0) - document.getElementById("foremenCount").innerHTML = (game.global.autoCraftModifier * 2) + " Foremen"; + gameElements.getElementById("foremenCount").innerHTML = (game.global.autoCraftModifier * 2) + " Foremen"; if (game.global.fighting) startFight(); toggleSave(true); } @@ -233,7 +234,7 @@ function addResCheckMax(what, number) { function fireMode(noChange) { if (!noChange) game.global.firing = !game.global.firing; - var elem = document.getElementById("fireBtn"); + var elem = gameElements.getElementById("fireBtn"); if (game.global.firing) { elem.style.background = "rgba(255,0,0,0.5)"; elem.innerHTML = "Firing"; @@ -251,12 +252,12 @@ function setGather(what) { var colorOff = "rgba(0,0,0,1)"; if (typeof toGather === 'undefined' && what != "buildings") return; if (game.global.playerGathering !== "") { - document.getElementById(game.global.playerGathering + "CollectBtn").innerHTML = setGatherTextAs(game.global.playerGathering, false); - document.getElementById(game.global.playerGathering + "CollectBtn").style.background = colorOff; + gameElements.getElementById(game.global.playerGathering + "CollectBtn").innerHTML = setGatherTextAs(game.global.playerGathering, false); + gameElements.getElementById(game.global.playerGathering + "CollectBtn").style.background = colorOff; } game.global.playerGathering = what; - document.getElementById(what + "CollectBtn").innerHTML = setGatherTextAs(what, true); - document.getElementById(what + "CollectBtn").style.background = colorOn; + gameElements.getElementById(what + "CollectBtn").innerHTML = setGatherTextAs(what, true); + gameElements.getElementById(what + "CollectBtn").style.background = colorOn; } function setGatherTextAs(what, on) { @@ -429,7 +430,7 @@ function cancelQueueItem(what) { if (index === 0) { game.global.crafting = ""; game.global.timeLeftOnCraft = 0; - document.getElementById("buildingsBar").style.width = "0%"; + gameElements.getElementById("buildingsBar").style.width = "0%"; } } @@ -457,8 +458,8 @@ function startQueue(what) { } function craftBuildings(makeUp) { - var buildingsBar = document.getElementById("buildingsBar"); - var speedElem = document.getElementById("buildSpeed"); + var buildingsBar = gameElements.getElementById("buildingsBar"); + var speedElem = gameElements.getElementById("buildSpeed"); if (game.global.crafting === "" && game.global.buildingsQueue.length > 0) { setNewCraftItem(); } @@ -482,7 +483,7 @@ function craftBuildings(makeUp) { game.global.buildingsQueue.splice(0, 1); if (game.global.buildingsQueue.length <= 0) { game.global.crafting = ""; - document.getElementById("noQueue").style.display = "block"; + gameElements.getElementById("noQueue").style.display = "block"; return; } var nextCraft = game.global.buildingsQueue[0].split('.')[0]; @@ -495,8 +496,8 @@ function buildBuilding(what) { var toIncrease; building.owned++; if (building.owned == 1 && typeof building.first !== 'undefined') building.first(); - if (document.getElementById(what + "Owned") === null) return; - document.getElementById(what + "Owned").innerHTML = building.owned; + if (gameElements.getElementById(what + "Owned") === null) return; + gameElements.getElementById(what + "Owned").innerHTML = building.owned; if (typeof building.increase === 'undefined') return; var buildingSplit = building.increase.what.split('.'); if (buildingSplit[0] == "global") toIncrease = game.global; @@ -512,7 +513,7 @@ function setNewCraftItem() { var queueItem = game.global.buildingsQueue[0].split('.')[0]; game.global.crafting = queueItem; game.global.timeLeftOnCraft = game.buildings[queueItem].craftTime; - document.getElementById("buildingsBar").style.width = "0%"; + gameElements.getElementById("buildingsBar").style.width = "0%"; } function calculatePercentageBuildingCost(what, resourceToCheck, costModifier){ @@ -533,8 +534,8 @@ function trapThings() { if (trimps.owned < trimps.max && trap.owned >= 1) game.global.timeLeftOnTrap = trimps.speed; else { - document.getElementById("trappingBar").style.width = "0%"; - document.getElementById("TrapOwned").innerHTML = trap.owned; + gameElements.getElementById("trappingBar").style.width = "0%"; + gameElements.getElementById("TrapOwned").innerHTML = trap.owned; return; } } @@ -543,9 +544,9 @@ function trapThings() { trap.owned--; trimps.owned++; game.global.timeLeftOnTrap = -1; - document.getElementById("TrapOwned").innerHTML = trap.owned; + gameElements.getElementById("TrapOwned").innerHTML = trap.owned; } - document.getElementById("trappingBar").style.width = (100 - ((game.global.timeLeftOnTrap / trimps.speed) * 100)) + "%"; + gameElements.getElementById("trappingBar").style.width = (100 - ((game.global.timeLeftOnTrap / trimps.speed) * 100)) + "%"; } function buyJob(what) { @@ -626,13 +627,13 @@ function buyUpgrade(what) { upgrade.done++; var dif = upgrade.allowed - upgrade.done; if (dif > 1) { - document.getElementById(what + "Owned").innerHTML = upgrade.done + "( +" + dif + ")"; + gameElements.getElementById(what + "Owned").innerHTML = upgrade.done + "( +" + dif + ")"; return; } else if (dif == 1) { - document.getElementById(what + "Owned").innerHTML = upgrade.done; + gameElements.getElementById(what + "Owned").innerHTML = upgrade.done; return; } - document.getElementById("upgradesHere").removeChild(document.getElementById(what)); + gameElements.getElementById("upgradesHere").removeChild(gameElements.getElementById(what)); tooltip("hide"); } @@ -669,7 +670,7 @@ function prestigeEquipment(what) { } equipment.level = 0; equipment.prestige++; - if (document.getElementById(what + "Numeral") !== null) document.getElementById(what + "Numeral").innerHTML = romanNumeral(equipment.prestige); + if (gameElements.getElementById(what + "Numeral") !== null) gameElements.getElementById(what + "Numeral").innerHTML = romanNumeral(equipment.prestige); } function createMap() { @@ -866,7 +867,7 @@ function findHomeForSpecial(special, item, array, max){ } function drawGrid(maps) { //maps t or f. This function overwrites the current grid, be carefulz - var grid = (maps) ? document.getElementById("mapGrid") : document.getElementById("grid"); + var grid = (maps) ? gameElements.getElementById("mapGrid") : gameElements.getElementById("grid"); grid.innerHTML = ""; var cols = (maps) ? (game.global.mapGridArray.length / 10) : 10; var counter = 0; @@ -896,10 +897,10 @@ function pauseFight(setup) { if (setup) game.global.pauseFight = (game.global.pauseFight) ? false : true; if (game.global.pauseFight) { game.global.pauseFight = false; - document.getElementById("pauseFight").innerHTML = "Pause"; + gameElements.getElementById("pauseFight").innerHTML = "Pause"; } else { game.global.pauseFight = true; - document.getElementById("pauseFight").innerHTML = "AutoBattle"; + gameElements.getElementById("pauseFight").innerHTML = "AutoBattle"; } } @@ -908,16 +909,16 @@ function recycleMap() { var map = getMapIndex(game.global.lookingAtMap); if (map === null) return; game.global.mapsOwnedArray.splice(map, 1); - document.getElementById("mapsHere").removeChild(document.getElementById(game.global.lookingAtMap)); + gameElements.getElementById("mapsHere").removeChild(gameElements.getElementById(game.global.lookingAtMap)); game.global.lookingAtMap = ""; game.global.currentMapId = ""; game.global.mapsOwned--; game.global.lastClearedMapCell = -1; game.resources.fragments.owned++; - document.getElementById("selectedMapName").innerHTML = "Select a Map!"; - document.getElementById("selectedMapStats").innerHTML = ""; - document.getElementById("selectMapBtn").style.visibility = "hidden"; - document.getElementById("recycleMapBtn").style.visibility = "hidden"; + gameElements.getElementById("selectedMapName").innerHTML = "Select a Map!"; + gameElements.getElementById("selectedMapStats").innerHTML = ""; + gameElements.getElementById("selectMapBtn").style.visibility = "hidden"; + gameElements.getElementById("recycleMapBtn").style.visibility = "hidden"; } @@ -952,36 +953,36 @@ function mapsSwitch(updateOnly) { } else game.global.preMapsActive = true; } if (game.global.preMapsActive) { - document.getElementById("grid").style.display = "none"; - document.getElementById("preMaps").style.display = "block"; - document.getElementById("mapGrid").style.display = "none"; - document.getElementById("mapsBtn").innerHTML = "World"; + gameElements.getElementById("grid").style.display = "none"; + gameElements.getElementById("preMaps").style.display = "block"; + gameElements.getElementById("mapGrid").style.display = "none"; + gameElements.getElementById("mapsBtn").innerHTML = "World"; if (game.global.currentMapId === "") { - document.getElementById("selectMapBtn").style.visibility = "hidden"; - document.getElementById("recycleMapBtn").style.visibility = "hidden"; - document.getElementById("selectedMapName").innerHTML = "Select a Map!"; - document.getElementById("selectedMapStats").innerHTML = ""; + gameElements.getElementById("selectMapBtn").style.visibility = "hidden"; + gameElements.getElementById("recycleMapBtn").style.visibility = "hidden"; + gameElements.getElementById("selectedMapName").innerHTML = "Select a Map!"; + gameElements.getElementById("selectedMapStats").innerHTML = ""; } else { selectMap(game.global.currentMapId, true); - document.getElementById("selectMapBtn").innerHTML = "Continue"; - document.getElementById("selectMapBtn").style.visibility = "visible"; - document.getElementById("recycleMapBtn").style.visibility = "visible"; + gameElements.getElementById("selectMapBtn").innerHTML = "Continue"; + gameElements.getElementById("selectMapBtn").style.visibility = "visible"; + gameElements.getElementById("recycleMapBtn").style.visibility = "visible"; } } else if (game.global.mapsActive) { var currentMapObj = getCurrentMapObject(); - document.getElementById("grid").style.display = "none"; - document.getElementById("preMaps").style.display = "none"; - document.getElementById("mapGrid").style.display = "table"; - document.getElementById("mapsBtn").innerHTML = "World"; - document.getElementById("worldNumber").innerHTML = "Lv: " + currentMapObj.level; - document.getElementById("worldName").innerHTML = currentMapObj.name; + gameElements.getElementById("grid").style.display = "none"; + gameElements.getElementById("preMaps").style.display = "none"; + gameElements.getElementById("mapGrid").style.display = "table"; + gameElements.getElementById("mapsBtn").innerHTML = "World"; + gameElements.getElementById("worldNumber").innerHTML = "Lv: " + currentMapObj.level; + gameElements.getElementById("worldName").innerHTML = currentMapObj.name; } else { - document.getElementById("grid").style.display = "table"; - document.getElementById("preMaps").style.display = "none"; - document.getElementById("mapGrid").style.display = "none"; - document.getElementById("mapsBtn").innerHTML = "Maps"; - document.getElementById("worldNumber").innerHTML = game.global.world; - document.getElementById("worldName").innerHTML = "World"; + gameElements.getElementById("grid").style.display = "table"; + gameElements.getElementById("preMaps").style.display = "none"; + gameElements.getElementById("mapGrid").style.display = "none"; + gameElements.getElementById("mapsBtn").innerHTML = "Maps"; + gameElements.getElementById("worldNumber").innerHTML = game.global.world; + gameElements.getElementById("worldName").innerHTML = "World"; } } @@ -992,14 +993,14 @@ function selectMap(mapId, force) { } var map = getMapIndex(mapId); map = game.global.mapsOwnedArray[map]; - document.getElementById("selectedMapName").innerHTML = map.name; - document.getElementById("selectedMapStats").innerHTML = "Size: " + Math.floor(map.size) + ". Difficulty: " + Math.floor(map.difficulty * 100) + "%. Loot Bonus: " + Math.floor(map.loot * 100) + "%.
There are " + addSpecials(true, true, map) + " items to be earned from level " + map.level + "+ maps."; - if (typeof game.global.mapsOwnedArray[getMapIndex(game.global.lookingAtMap)] !== 'undefined') document.getElementById(game.global.lookingAtMap).style.border = "1px solid white"; - document.getElementById(mapId).style.border = "1px solid red"; + gameElements.getElementById("selectedMapName").innerHTML = map.name; + gameElements.getElementById("selectedMapStats").innerHTML = "Size: " + Math.floor(map.size) + ". Difficulty: " + Math.floor(map.difficulty * 100) + "%. Loot Bonus: " + Math.floor(map.loot * 100) + "%.
There are " + addSpecials(true, true, map) + " items to be earned from level " + map.level + "+ maps."; + if (typeof game.global.mapsOwnedArray[getMapIndex(game.global.lookingAtMap)] !== 'undefined') gameElements.getElementById(game.global.lookingAtMap).style.border = "1px solid white"; + gameElements.getElementById(mapId).style.border = "1px solid red"; game.global.lookingAtMap = mapId; - document.getElementById("selectMapBtn").innerHTML = "Run Map"; - document.getElementById("selectMapBtn").style.visibility = "visible"; - document.getElementById("recycleMapBtn").style.visibility = "visible"; + gameElements.getElementById("selectMapBtn").innerHTML = "Run Map"; + gameElements.getElementById("selectMapBtn").style.visibility = "visible"; + gameElements.getElementById("recycleMapBtn").style.visibility = "visible"; } function runMap() { @@ -1063,18 +1064,18 @@ function battle(force) { function startFight() { game.global.battleCounter = 0; - document.getElementById("badGuyCol").style.visibility = "visible"; + gameElements.getElementById("badGuyCol").style.visibility = "visible"; var cellNum; var cell; var cellElem; if (game.global.mapsActive) { cellNum = game.global.lastClearedMapCell + 1; cell = game.global.mapGridArray[cellNum]; - cellElem = document.getElementById("mapCell" + cellNum); + cellElem = gameElements.getElementById("mapCell" + cellNum); } else { cellNum = game.global.lastClearedCell + 1; cell = game.global.gridArray[cellNum]; - cellElem = document.getElementById("cell" + cellNum); + cellElem = gameElements.getElementById("cell" + cellNum); } cellElem.style.backgroundColor = "yellow"; if (cell.maxHealth == -1) { @@ -1086,10 +1087,10 @@ function startFight() { cell.health *= difficulty; } cell.maxHealth = cell.health; - document.getElementById("badGuyBar").style.width = "100%"; - document.getElementById("badGuyName").innerHTML = cell.name; - document.getElementById("badGuyBar").style.backgroundColor = "blue"; - document.getElementById("badGuyAttack").innerHTML = calculateDamage(cell.attack, true); + gameElements.getElementById("badGuyBar").style.width = "100%"; + gameElements.getElementById("badGuyName").innerHTML = cell.name; + gameElements.getElementById("badGuyBar").style.backgroundColor = "blue"; + gameElements.getElementById("badGuyAttack").innerHTML = calculateDamage(cell.attack, true); } if (game.global.soldierHealth === 0) { var trimpsFighting = game.resources.trimps.maxSoldiers; @@ -1097,18 +1098,18 @@ function startFight() { game.global.soldierHealth = game.global.soldierHealthMax; game.global.soldierCurrentAttack = (game.global.attack * trimpsFighting); game.global.soldierCurrentBlock = Math.floor((game.global.block * (game.jobs.Trainer.owned * (game.jobs.Trainer.modifier / 100)) + game.global.block) * trimpsFighting); - document.getElementById("trimpsFighting").innerHTML = prettify(trimpsFighting, 0); - document.getElementById("goodGuyBar").style.width = "100%"; - document.getElementById("goodGuyBlock").innerHTML = prettify(game.global.soldierCurrentBlock); - document.getElementById("goodGuyAttack").innerHTML = calculateDamage(game.global.soldierCurrentAttack, true); + gameElements.getElementById("trimpsFighting").innerHTML = prettify(trimpsFighting, 0); + gameElements.getElementById("goodGuyBar").style.width = "100%"; + gameElements.getElementById("goodGuyBlock").innerHTML = prettify(game.global.soldierCurrentBlock); + gameElements.getElementById("goodGuyAttack").innerHTML = calculateDamage(game.global.soldierCurrentAttack, true); } game.global.fighting = true; game.global.lastFightUpdate = new Date(); - document.getElementById("goodGuyHealth").innerHTML = prettify(game.global.soldierHealth, 0); - document.getElementById("goodGuyHealthMax").innerHTML = prettify(game.global.soldierHealthMax, 0); - document.getElementById("goodGuyBar").style.backgroundColor = "blue"; - document.getElementById("badGuyHealth").innerHTML = prettify(cell.health, 0); - document.getElementById("badGuyHealthMax").innerHTML = prettify(cell.maxHealth, 0); + gameElements.getElementById("goodGuyHealth").innerHTML = prettify(game.global.soldierHealth, 0); + gameElements.getElementById("goodGuyHealthMax").innerHTML = prettify(game.global.soldierHealthMax, 0); + gameElements.getElementById("goodGuyBar").style.backgroundColor = "blue"; + gameElements.getElementById("badGuyHealth").innerHTML = prettify(cell.health, 0); + gameElements.getElementById("badGuyHealthMax").innerHTML = prettify(cell.maxHealth, 0); } @@ -1125,10 +1126,10 @@ function calculateDamage(number, buildString) { //number = base attack function nextWorld() { game.global.world++; //ga('send', 'event', 'Next World', 'World: ' + game.global.world); - document.getElementById("worldNumber").innerHTML = game.global.world; + gameElements.getElementById("worldNumber").innerHTML = game.global.world; game.global.lastClearedCell = -1; game.global.gridArray = []; - document.getElementById("grid").innerHTML = ""; + gameElements.getElementById("grid").innerHTML = ""; buildGrid(); drawGrid(); } @@ -1147,11 +1148,11 @@ function fight(makeUp) { if (game.global.mapsActive) { cellNum = game.global.lastClearedMapCell + 1; cell = game.global.mapGridArray[cellNum]; - cellElem = document.getElementById("mapCell" + cellNum); + cellElem = gameElements.getElementById("mapCell" + cellNum); } else { cellNum = game.global.lastClearedCell + 1; cell = game.global.gridArray[cellNum]; - cellElem = document.getElementById("cell" + cellNum); + cellElem = gameElements.getElementById("cell" + cellNum); } if (cell.health <= 0) { message("You killed a " + cell.name + "!", "Combat"); @@ -1160,7 +1161,7 @@ function fight(makeUp) { if (game.global.mapsActive) game.global.lastClearedMapCell = cellNum; else game.global.lastClearedCell = cellNum; game.global.fighting = false; - document.getElementById("badGuyCol").style.visibility = "hidden"; + gameElements.getElementById("badGuyCol").style.visibility = "hidden"; var unlock; if (game.global.mapsActive) unlock = game.mapUnlocks[cell.special]; else unlock = game.worldUnlocks[cell.special]; @@ -1204,11 +1205,11 @@ function fight(makeUp) { } game.global.lastFightUpdate = new Date(); if (makeUp) return; - document.getElementById("badGuyHealth").innerHTML = prettify(cell.health, 0); + gameElements.getElementById("badGuyHealth").innerHTML = prettify(cell.health, 0); updateGoodBar(); var percent = ((cell.health / cell.maxHealth) * 100); - document.getElementById("badGuyBar").style.width = percent + "%"; - document.getElementById("badGuyBar").style.backgroundColor = getBarColor(percent); + gameElements.getElementById("badGuyBar").style.width = percent + "%"; + gameElements.getElementById("badGuyBar").style.backgroundColor = getBarColor(percent); /* if (game.jobs.Medic.owned >= 1) setTimeout(heal, 500); */ } @@ -1221,10 +1222,10 @@ function fight(makeUp) { } */ function updateGoodBar() { - document.getElementById("goodGuyHealth").innerHTML = prettify(game.global.soldierHealth, 0); + gameElements.getElementById("goodGuyHealth").innerHTML = prettify(game.global.soldierHealth, 0); var percent = ((game.global.soldierHealth / game.global.soldierHealthMax) * 100); - document.getElementById("goodGuyBar").style.width = percent + "%"; - document.getElementById("goodGuyBar").style.backgroundColor = getBarColor(percent); + gameElements.getElementById("goodGuyBar").style.width = percent + "%"; + gameElements.getElementById("goodGuyBar").style.backgroundColor = getBarColor(percent); } function buyEquipment(what) { @@ -1257,7 +1258,7 @@ function affordOneTier(what, whereFrom, take) { function fadeIn(elem, speed) { var opacity = 0; - elem = document.getElementById(elem); + elem = gameElements.getElementById(elem); elem.style.opacity = 0; if (elem.style.display == "none") elem.style.display = "block"; if (elem.style.visibility == "hidden") elem.style.visibility = "visible"; @@ -1275,7 +1276,7 @@ function fadeIn(elem, speed) { function cheatALittle() { if (game.global.playerModifier <= 2) { game.global.playerModifier = 2; - document.getElementById("cheatTd").style.display = "none"; + gameElements.getElementById("cheatTd").style.display = "none"; message("Your player modifier has been boosted to 200%!", "Notices"); return; } @@ -1319,4 +1320,4 @@ setTimeout(gameTimeout(), (1000 / game.settings.speed)); load(); -document.getElementById("versionNumber").innerHTML = game.global.version; \ No newline at end of file +gameElements.getElementById("versionNumber").innerHTML = game.global.version; \ No newline at end of file diff --git a/primitiveDomCache.js b/primitiveDomCache.js new file mode 100644 index 00000000..32d057d3 --- /dev/null +++ b/primitiveDomCache.js @@ -0,0 +1,72 @@ +/* Trimps + Copyright (C) 2015 Zach Hood + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program (if you are reading this on the original + author's website, you can find a copy at + ). If not, see + . */ +// primitive element caching +// While I recommend using jQuery for this kind of thing, this should improve performance a little. + +var gameElements = { + nodes : {}, + observer:new MutationObserver( + function(mutations) + { + mutations.forEach( + function(mutation) + { + for(var i in mutation.removedNodes) + { + var node = mutation.removedNodes[i]; + if(node.id && gameElements.nodes[node.id]) + { + delete(gameElements.nodes[node.id]); + } + } + } + ); + } + ), + observerOptions:{subtree:false, childList:true}, + getElementById:function(id) + { + if(!id) + { + return null; + } + if(this.nodes[id]) + { + return this.nodes[id]; + } + console.log('searching for element' +id); + var elem = document.getElementById(id); + + if(elem === null) + { + console.log('Element '+id+' not found'); + return null; + } + + console.log('returning element'); + this.observer.observe(elem.parentNode, this.observerOptions); + + this.nodes[id] = elem; + return elem; + }, + removeElement:function(id) + { + + } +}; \ No newline at end of file diff --git a/updates.js b/updates.js index 4d27aabf..b50a0a65 100644 --- a/updates.js +++ b/updates.js @@ -20,13 +20,13 @@ function tooltip(what, isItIn, event) { if (game.global.lockTooltip) return; - var elem = document.getElementById("tooltipDiv"); + var elem = gameElements.getElementById("tooltipDiv"); if (what == "hide"){ elem.style.display = "none"; return; } - if (document.getElementById(what + "Alert") !== null) document.getElementById(what + "Alert").innerHTML = ""; - if (document.getElementById(isItIn + "Alert") !== null) document.getElementById(isItIn + "Alert").innerHTML = ""; + if (gameElements.getElementById(what + "Alert") !== null) gameElements.getElementById(what + "Alert").innerHTML = ""; + if (gameElements.getElementById(isItIn + "Alert") !== null) gameElements.getElementById(isItIn + "Alert").innerHTML = ""; if (event != "update"){ var cordx = 0; var cordy = 0; @@ -166,9 +166,9 @@ function tooltip(what, isItIn, event) { else tooltipText = tipSplit[0] + prettify(toTip[tipSplit[1]]) + tipSplit[2]; } - document.getElementById("tipTitle").innerHTML = what; - document.getElementById("tipText").innerHTML = tooltipText; - document.getElementById("tipCost").innerHTML = costText; + gameElements.getElementById("tipTitle").innerHTML = what; + gameElements.getElementById("tipText").innerHTML = tooltipText; + gameElements.getElementById("tipCost").innerHTML = costText; elem.style.display = "block"; } @@ -177,81 +177,38 @@ function unlockTooltip(){ } function prettify(number) { + var numberTmp = number; number = Math.round(number * 1000000) / 1000000; - var base = 0; - while (number >= 1000){ - number /= 1000; - base++; + + // this is the mathematical way of changing base + // and so it's a little more efficient than looping + if(number === 0) + { + return prettifySub(0); } - if (base === 0) return prettifySub(number); + var base = Math.floor(Math.log(number)/Math.log(1000)); + + if (base <= 0) return prettifySub(number); + number /= Math.pow(1000, base); + + var suffices = [ + 'K', 'M', 'B', 'T', 'Qa', 'Qi', 'Sx', 'Sp', 'Oc', 'No', 'Dc', 'Ud', + 'Dd', 'Td', 'Qad', 'Qid', 'Sxd', 'Spd', 'Od', 'Nd', 'V' + ]; var suffix; - switch (base) { - case 1: - suffix = "K"; - break; - case 2: - suffix = "M"; - break; - case 3: - suffix = "B"; - break; - case 4: - suffix = "T"; - break; - case 5: - suffix = "Qa"; - break; - case 6: - suffix = "Qi"; - break; - case 7: - suffix = "Sx"; - break; - case 8: - suffix = "Sp"; - break; - case 9: - suffix = "Oc"; - break; - case 10: - suffix = "No"; - break; - case 11: - suffix = "Dc"; - break; - case 12: - suffix = "Ud"; - break; - case 13: - suffix = "Dd"; - break; - case 14: - suffix = "Td"; - break; - case 15: - suffix = "Qad"; - break; - case 16: - suffix = "Qid"; - break; - case 17: - suffix = "Sxd"; - break; - case 18: - suffix = "Spd"; - break; - case 19: - suffix = "Od"; - break; - case 20: - suffix = "Nd"; - break; - case 21: - suffix = "V"; - break; + if (base <= suffices.length && base > 0) + { + suffix = suffices[base-1]; + } + else + { + // I strongly recommend using scientific notation instead of ++ + // if the base is 22, 23, or 24 you'll end up with the same indicator + // being shown which will confuse late game players. + return parseFloat(numberTmp).toExponential(3); } - if (base > 21) suffix = "++"; + return prettifySub(number) + suffix; } @@ -306,37 +263,37 @@ function prettifySub(number){ } function resetGame() { - document.getElementById("wood").style.visibility = "hidden"; - document.getElementById("metal").style.visibility = "hidden"; - document.getElementById("trimps").style.visibility = "hidden"; - document.getElementById("gems").style.visibility = "hidden"; - document.getElementById("buyCol").style.visibility = "hidden"; - document.getElementById("unempHide").style.visibility = "hidden"; - document.getElementById("empHide").style.visibility = "hidden"; - document.getElementById("upgradesTitleSpan").innerHTML = "Upgrades (research first)"; - document.getElementById("science").style.visibility = "hidden"; - document.getElementById("battleContainer").style.visibility = "hidden"; - document.getElementById("pauseFight").style.visibility = "hidden"; - document.getElementById("blockDiv").style.visibility = "hidden"; - document.getElementById("badGuyCol").style.visibility = "hidden"; - document.getElementById("jobsHere").innerHTML = ""; - document.getElementById("foremenCount").innerHTML = ""; - document.getElementById("JobsFilter").style.visibility = "hidden"; - document.getElementById("UpgradesFilter").style.visibility = "hidden"; - document.getElementById("EquipmentFilter").style.visibility = "hidden"; - document.getElementById("upgradesHere").innerHTML = ""; - document.getElementById("mapsBtn").style.visibility = "hidden"; - document.getElementById("grid").style.display = "block"; - document.getElementById("preMaps").style.display = "none"; - document.getElementById("mapGrid").style.display = "none"; - document.getElementById("buildingsHere").innerHTML = ""; - document.getElementById("grid").innerHTML = ""; - document.getElementById("equipmentHere").innerHTML = ""; - document.getElementById("buildingsQueue").innerHTML = "Nothing in queue..."; - document.getElementById("log").innerHTML = ""; - document.getElementById("worldNumber").innerHTML = "1"; - document.getElementById("mapsHere").innerHTML = ""; - document.getElementById("sciencePs").innerHTML = "+0/sec"; + gameElements.getElementById("wood").style.visibility = "hidden"; + gameElements.getElementById("metal").style.visibility = "hidden"; + gameElements.getElementById("trimps").style.visibility = "hidden"; + gameElements.getElementById("gems").style.visibility = "hidden"; + gameElements.getElementById("buyCol").style.visibility = "hidden"; + gameElements.getElementById("unempHide").style.visibility = "hidden"; + gameElements.getElementById("empHide").style.visibility = "hidden"; + gameElements.getElementById("upgradesTitleSpan").innerHTML = "Upgrades (research first)"; + gameElements.getElementById("science").style.visibility = "hidden"; + gameElements.getElementById("battleContainer").style.visibility = "hidden"; + gameElements.getElementById("pauseFight").style.visibility = "hidden"; + gameElements.getElementById("blockDiv").style.visibility = "hidden"; + gameElements.getElementById("badGuyCol").style.visibility = "hidden"; + gameElements.getElementById("jobsHere").innerHTML = ""; + gameElements.getElementById("foremenCount").innerHTML = ""; + gameElements.getElementById("JobsFilter").style.visibility = "hidden"; + gameElements.getElementById("UpgradesFilter").style.visibility = "hidden"; + gameElements.getElementById("EquipmentFilter").style.visibility = "hidden"; + gameElements.getElementById("upgradesHere").innerHTML = ""; + gameElements.getElementById("mapsBtn").style.visibility = "hidden"; + gameElements.getElementById("grid").style.display = "block"; + gameElements.getElementById("preMaps").style.display = "none"; + gameElements.getElementById("mapGrid").style.display = "none"; + gameElements.getElementById("buildingsHere").innerHTML = ""; + gameElements.getElementById("grid").innerHTML = ""; + gameElements.getElementById("equipmentHere").innerHTML = ""; + gameElements.getElementById("buildingsQueue").innerHTML = "Nothing in queue..."; + gameElements.getElementById("log").innerHTML = ""; + gameElements.getElementById("worldNumber").innerHTML = "1"; + gameElements.getElementById("mapsHere").innerHTML = ""; + gameElements.getElementById("sciencePs").innerHTML = "+0/sec"; game = null; game = newGame(); @@ -348,15 +305,15 @@ function resetGame() { } function message(messageString, type) { - var log = document.getElementById("log"); + var log = gameElements.getElementById("log"); var displayType = (game.global.messages[type]) ? "block" : "none"; if (type == "Story") messageString = "" + messageString; if (type == "Combat") messageString = "" + messageString; var addId = ""; if (messageString == "Game Saved!") { addId = " id='saveGame'"; - if (document.getElementById('saveGame') !== null){ - log.removeChild(document.getElementById('saveGame')); + if (gameElements.getElementById('saveGame') !== null){ + log.removeChild(gameElements.getElementById('saveGame')); } } if (type == "Notices") messageString = "" + messageString; @@ -382,7 +339,7 @@ function trimMessages(what){ } function filterMessage(what, updateOnly){ //send true for updateOnly - var log = document.getElementById("log"); + var log = gameElements.getElementById("log"); var displayed = game.global.messages[what]; if (!updateOnly){ displayed = (displayed) ? false : true; @@ -390,7 +347,7 @@ function filterMessage(what, updateOnly){ //send true for updateOnly } var toChange = document.getElementsByClassName(what + "Message"); var btnText = (displayed) ? what : what + " off"; - var btnElem = document.getElementById(what + "Filter"); + var btnElem = gameElements.getElementById(what + "Filter"); btnElem.innerHTML = btnText; btnElem.className = ""; btnElem.className = getTabClass(displayed); @@ -410,11 +367,11 @@ function filterTabs (what, updateOnly) { game.global.buyTabs[what] = displayed; } var btnText = (displayed) ? what : what + " off"; - var btnElem = document.getElementById(what + "Filter"); - document.getElementById(what + "Text").innerHTML = btnText; + var btnElem = gameElements.getElementById(what + "Filter"); + gameElements.getElementById(what + "Text").innerHTML = btnText; btnElem.className = ""; btnElem.className = getTabClass(displayed); - document.getElementById(what + "Container").style.display = (displayed) ? "block" : "none"; + gameElements.getElementById(what + "Container").style.display = (displayed) ? "block" : "none"; } @@ -428,7 +385,7 @@ function numTab (what) { else game.global.numTab = what; for (var x = 1; x <= 4; x++){ - document.getElementById("tab" + x).style.background = (what == x) ? "rgba(0,0,0,0.5)" : "rgba(255,255,255,0.25)"; + gameElements.getElementById("tab" + x).style.background = (what == x) ? "rgba(0,0,0,0.5)" : "rgba(255,255,255,0.25)"; var num; switch (x){ case 1: @@ -450,7 +407,7 @@ function numTab (what) { } /* function shrink(what) { //fired by player when clicking shrink on main menu item - var toShrink = document.getElementById(what + "Here"); + var toShrink = gameElements.getElementById(what + "Here"); var alreadyShown = game.global.menu[what]; toShrink.style.display = (alreadyShown) ? "none" : "block"; game.global.menu[what] = (alreadyShown) ? false : true; @@ -465,7 +422,7 @@ function updateSideSize() { //resizes main menu items var percent = Math.floor(72 / count); for (menuItem in game.global.menu) { if (game.global.menu[menuItem]) { - document.getElementById(menuItem + "Here").style.height = percent + "%"; + gameElements.getElementById(menuItem + "Here").style.height = percent + "%"; } } } */ @@ -473,15 +430,15 @@ function updateSideSize() { //resizes main menu items // //Buildings Specific function removeQueueItem(what) { - var elem = document.getElementById("buildingsQueue"); - elem.removeChild(document.getElementById(what + "QueueItem")); - if (game.global.buildingsQueue.length === 0) document.getElementById("noQueue").style.display = "block"; + var elem = gameElements.getElementById("buildingsQueue"); + elem.removeChild(gameElements.getElementById(what + "QueueItem")); + if (game.global.buildingsQueue.length === 0) gameElements.getElementById("noQueue").style.display = "block"; } function addQueueItem(what) { - var elem = document.getElementById("buildingsQueue"); - document.getElementById("noQueue").style.display = "none"; + var elem = gameElements.getElementById("buildingsQueue"); + gameElements.getElementById("noQueue").style.display = "none"; name = what.split('.')[0]; elem.innerHTML += '
' + name + '
'; } @@ -493,10 +450,10 @@ function updateLabels() { //Tried just updating as something changes, but seems //Resources (food, wood, metal, trimps, science). All but science have max and a bar. Per second will be handled in separate function, and called from job loop. for (var item in game.resources){ toUpdate = game.resources[item]; - document.getElementById(item + "Owned").innerHTML = prettify(Math.floor(toUpdate.owned), true); + gameElements.getElementById(item + "Owned").innerHTML = prettify(Math.floor(toUpdate.owned), true); if (toUpdate.max == -1) continue; - document.getElementById(item + "Max").innerHTML = prettify(toUpdate.max); - var bar = document.getElementById(item + "Bar"); + gameElements.getElementById(item + "Max").innerHTML = prettify(toUpdate.max); + var bar = gameElements.getElementById(item + "Bar"); var percentToMax = ((toUpdate.owned / toUpdate.max) * 100); bar.style.backgroundColor = getBarColor(100 - percentToMax); bar.style.width = percentToMax + "%"; @@ -506,15 +463,15 @@ function updateLabels() { //Tried just updating as something changes, but seems for (var itemA in game.buildings){ toUpdate = game.buildings[itemA]; if (toUpdate.locked == 1) continue; - var elem = document.getElementById(itemA + "Owned"); + var elem = gameElements.getElementById(itemA + "Owned"); if (elem === null){ unlockBuilding(itemA); - elem = document.getElementById(itemA + "Owned"); + elem = gameElements.getElementById(itemA + "Owned"); } elem.innerHTML = toUpdate.owned; if (itemA == "Trap") { - document.getElementById("trimpTrapText").innerHTML = toUpdate.owned; - document.getElementById("trimpTrapText2").innerHTML = toUpdate.owned; + gameElements.getElementById("trimpTrapText").innerHTML = toUpdate.owned; + gameElements.getElementById("trimpTrapText2").innerHTML = toUpdate.owned; } } //Jobs, check PS here and stuff. Trimps per second is handled by breed() function @@ -526,8 +483,8 @@ function updateLabels() { //Tried just updating as something changes, but seems updatePs(toUpdate); continue; } - if (document.getElementById(itemB) === null) unlockJob(itemB); - document.getElementById(itemB + "Owned").innerHTML = toUpdate.owned; + if (gameElements.getElementById(itemB) === null) unlockJob(itemB); + gameElements.getElementById(itemB + "Owned").innerHTML = toUpdate.owned; var perSec = (toUpdate.owned * toUpdate.modifier); updatePs(toUpdate); } @@ -535,14 +492,14 @@ function updateLabels() { //Tried just updating as something changes, but seems for (var itemC in game.upgrades){ toUpdate = game.upgrades[itemC]; if (toUpdate.locked == 1) continue; - if (document.getElementById(itemC) === null) unlockUpgrade(itemC, true); + if (gameElements.getElementById(itemC) === null) unlockUpgrade(itemC, true); } //Equipment for (var itemD in game.equipment){ toUpdate = game.equipment[itemD]; if (toUpdate.locked == 1) continue; - if (document.getElementById(itemD) === null) unlockEquipment(itemD); - document.getElementById(itemD + "Owned").innerHTML = toUpdate.level; + if (gameElements.getElementById(itemD) === null) unlockEquipment(itemD); + gameElements.getElementById(itemD + "Owned").innerHTML = toUpdate.level; } } @@ -552,13 +509,13 @@ function updatePs(jobObj, trimps){ //trimps is true/false, send PS as first if t var elem; if (trimps) { psText = jobObj.toFixed(3); - elem = document.getElementById("trimpsPs"); + elem = gameElements.getElementById("trimpsPs"); } else{ var increase = jobObj.increase; psText = (jobObj.owned * jobObj.modifier); if (game.global.playerGathering == increase) psText += game.global.playerModifier; - elem = document.getElementById(increase + "Ps"); + elem = gameElements.getElementById(increase + "Ps"); if (game.resources[increase].owned >= game.resources[increase].max && game.resources[increase].max != -1) psText = 0; psText = psText.toFixed(1); } @@ -574,38 +531,38 @@ function updatePs(jobObj, trimps){ //trimps is true/false, send PS as first if t function updateSideTrimps(){ var trimps = game.resources.trimps; - document.getElementById("trimpsEmployed").innerHTML = prettify(trimps.employed); + gameElements.getElementById("trimpsEmployed").innerHTML = prettify(trimps.employed); var breedCount = (trimps.owned - trimps.employed > 2) ? prettify(Math.floor(trimps.owned - trimps.employed)) : 0; - document.getElementById("trimpsUnemployed").innerHTML = breedCount; - document.getElementById("maxEmployed").innerHTML = prettify(Math.ceil(trimps.max / 2)); + gameElements.getElementById("trimpsUnemployed").innerHTML = breedCount; + gameElements.getElementById("maxEmployed").innerHTML = prettify(Math.ceil(trimps.max / 2)); var free = (Math.ceil(trimps.max / 2) - trimps.employed); free = (free > Math.floor(trimps.owned)) ? Math.floor(trimps.owned - trimps.employed) : free; - document.getElementById("jobsTitleUnemployed").innerHTML = prettify(free) + " free"; + gameElements.getElementById("jobsTitleUnemployed").innerHTML = prettify(free) + " free"; } function unlockBuilding(what) { var locked = game.buildings[what].locked; game.buildings[what].locked = 0; if (game.global.spreadSheetMode) return; - document.getElementById("buildingsHere").innerHTML += '
' + what + '
0
'; + gameElements.getElementById("buildingsHere").innerHTML += '
' + what + '
0
'; if (locked == 1){ - document.getElementById("buildingsAlert").innerHTML = "!"; - document.getElementById(what + "Alert").innerHTML = "!"; + gameElements.getElementById("buildingsAlert").innerHTML = "!"; + gameElements.getElementById(what + "Alert").innerHTML = "!"; } } function unlockJob(what) { - document.getElementById("jobsHere").innerHTML += '
' + what + '
0
'; + gameElements.getElementById("jobsHere").innerHTML += '
' + what + '
0
'; if (game.jobs[what].locked == 1){ - document.getElementById("jobsAlert").innerHTML = "!"; - document.getElementById(what + "Alert").innerHTML = "!"; + gameElements.getElementById("jobsAlert").innerHTML = "!"; + gameElements.getElementById(what + "Alert").innerHTML = "!"; } game.jobs[what].locked = 0; } function unlockMap(what) { //what here is the array index var item = game.global.mapsOwnedArray[what]; - var elem = document.getElementById("mapsHere"); + var elem = gameElements.getElementById("mapsHere"); elem.innerHTML = '
' + item.name + '
Level ' + item.level + '
' + elem.innerHTML; //onmouseover="tooltip(\'' + item.id + '\',\'maps\',event)" onmouseout="tooltip(\'hide\')" } @@ -622,12 +579,12 @@ function unlockUpgrade(what, displayOnly) { if (!displayOnly) { upgrade.allowed++; } - if (document.getElementById(what + "Owned") === null) - document.getElementById("upgradesHere").innerHTML += '
' + what + '
' + done + '
'; - if (dif > 1) document.getElementById(what + "Owned").innerHTML = upgrade.done + "(+" + dif + ")"; + if (gameElements.getElementById(what + "Owned") === null) + gameElements.getElementById("upgradesHere").innerHTML += '
' + what + '
' + done + '
'; + if (dif > 1) gameElements.getElementById(what + "Owned").innerHTML = upgrade.done + "(+" + dif + ")"; if (!displayOnly){ - document.getElementById("upgradesAlert").innerHTML = "!"; - document.getElementById(what + "Alert").innerHTML = "!"; + gameElements.getElementById("upgradesAlert").innerHTML = "!"; + gameElements.getElementById(what + "Alert").innerHTML = "!"; } } @@ -686,12 +643,12 @@ function checkButtons(what) { function updateButtonColor(what, canAfford, isJob) { var color = (canAfford) ? "black" : "grey"; if (isJob && game.global.firing === true) color = (game.jobs[what].owned >= 1) ? "red" : "grey"; - document.getElementById(what).style.backgroundColor = color; + gameElements.getElementById(what).style.backgroundColor = color; } function unlockEquipment(what) { var equipment = game.equipment[what]; - var elem = document.getElementById("equipmentHere"); + var elem = gameElements.getElementById("equipmentHere"); equipment.locked = 0; var numeral = ""; if (equipment.prestige > 1){