Files
2023-09-25 19:51:08 -04:00

139 lines
8.1 KiB
HTML

<!DOCTYPE html>
<html ng-app="zombieApp">
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-56478232-3"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-56478232-3');
var errors = 1;
// Track basic JavaScript errors
window.addEventListener('error', function(e) {
gtag('event', 'error', {
'event_category': 'JS exception',
'event_label': e.message + ": " + e.filename + ": " + e.lineno,
'value': errors++
});
});
</script>
<title>Incremancer</title>
<meta content="Zombie necromancer idle game" name="description"/>
<meta content="zombie,game,idle,javascript" name="keywords"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<meta content="noindex" name="robots"/>
<meta content="#104510" name="theme-color"/>
<meta charset="utf-8"/>
<link href="manifest.json" rel="manifest"/>
<script src="js/lz-string.min.js"></script>
<script src="js/pixi-legacy.min.js"></script>
<script src="js/angular.min.js"></script>
<script src="dist/bundle.js"></script>
<link href="zombiemancer.css" rel="stylesheet" type="text/css"/>
<link href="/favicon.ico" rel="shortcut icon" type="image/x-icon"/>
</head>
<body ng-controller="ZombieController as zm">
<div class="message" ng-if="zm.message">
<p>{{zm.message}}</p>
</div>
<div class="stats {{zm.model.persistentData.zoomButtons ? 'zoom' : ''}}">
<label>Level: {{zm.model.level}}</label>
<button class="{{zm.showStats ? 'active' : ''}}" ng-click="zm.showStats = !zm.showStats">Stats</button>
<label>Humans: {{zm.model.getHumanCount()}}</label>
<label>Zombies: {{zm.model.zombieCount}}</label>
<label ng-if="zm.model.constructions.monsterFactory">Creatures: {{zm.model.creatureCount}} / {{zm.model.creatureLimit}}</label>
<label ng-if="zm.model.persistentData.showfps">FPS: {{zm.model.frameRate|whole}}</label>
</div>
<div class="resources">
<label class="energy">Energy:<span class="value">{{zm.model.energy|decimal}} / {{zm.model.energyMax|whole}}</span><span class="percent" ng-style="{'width':zm.energyPercent() + '%'}"></span></label>
<label class="blood">Blood:<span class="value">{{zm.model.persistentData.blood|whole}} / {{zm.model.bloodMax|whole}}</span><span class="percent" ng-style="{'width':zm.bloodPercent() + '%'}"></span></label>
<label class="brains">Brains:<span class="value">{{zm.model.persistentData.brains|whole}} / {{zm.model.brainsMax|whole}}</span><span class="percent" ng-style="{'width':zm.brainsPercent() + '%'}"></span></label>
<label class="bones" ng-if="zm.model.constructions.graveyard || zm.model.persistentData.bones &gt; 0">Bones:<span class="value">{{zm.model.persistentData.bones|whole}}</span></label>
<label class="parts" ng-if="zm.model.constructions.factory || zm.model.persistentData.parts &gt; 0">Parts:<span class="value">{{zm.model.persistentData.parts|whole}}</span></label>
<div class="spells">
<button class="spell {{spell.active ? 'active' : (spell.onCooldown ? 'cooldown' : '')}}" ng-click="zm.spells.castSpell(spell)" ng-disabled="spell.onCooldown || spell.energyCost &gt; zm.model.energy" ng-repeat="spell in zm.spells.getUnlockedSpells()">
<span class="icon">{{spell.name}}</span>
<span class="timer" ng-if="spell.active || spell.onCooldown">{{spell.active ? spell.timer : spell.cooldownLeft|whole}}</span>
<span class="tooltip" ng-if="!spell.active &amp;&amp; !spell.onCooldown">{{spell.tooltip}}</span>
</button>
<div class="skeleton" ng-click="zm.skeletonMenu.show()" ng-if="zm.model.persistentData.allTimeHighestLevel &gt;= 50">
<div class="bg" id="skeleton"></div>
<div class="xp">
<span ng-style="{'height': zm.skeletonMenu.xpPercent() + '%'}"></span>
</div>
<div class="lvl" ng-if="zm.skeleton().skeletons &gt; 0 &amp;&amp; zm.skeletonMenu.isAlive()">
lvl {{zm.skeleton().level}}
</div>
<div class="lvl dead" ng-if="zm.skeleton().skeletons &gt; 0 &amp;&amp; !zm.skeletonMenu.isAlive()">
DEAD: {{zm.skeletonMenu.timer()}}
</div>
</div>
</div>
</div>
<div class="buttons {{zm.sidePanels.open ? 'open' : ''}}">
<button class="{{zm.sidePanels.shop ? 'active' : ''}}" ng-click="zm.openSidePanel('shop');">Shop</button>
<button class="{{zm.sidePanels.construction ? 'active' : ''}}" ng-click="zm.openSidePanel('construction');" ng-if="zm.model.construction"><span class="tag" ng-if="zm.model.persistentData.currentConstruction">{{zm.constructionPercent()}}%</span>Construction</button>
<button class="{{zm.sidePanels.graveyard ? 'active' : ''}}" ng-click="zm.openSidePanel('graveyard');" ng-if="zm.model.constructions.graveyard">Graveyard</button>
<button class="{{zm.sidePanels.factory ? 'active' : ''}}" ng-click="zm.openSidePanel('factory');" ng-if="zm.model.constructions.factory">Factory</button>
<button class="{{zm.sidePanels.runesmith ? 'active' : ''}}{{zm.canShatter() ? 'shatter' : ''}}" ng-click="zm.openSidePanel('runesmith');" ng-if="zm.model.constructions.runesmith">Runesmith</button>
<button class="{{zm.sidePanels.prestige ? 'active' : ''}}" id="prestige-button" ng-click="zm.openSidePanel('prestige');" ng-if="zm.isShowPrestige()"><div id="prestige-bg"></div>Prestige</button>
<button class="{{zm.sidePanels.options ? 'active' : ''}}" ng-click="zm.openSidePanel('options');">Options</button>
<button class="{{zm.levelSelect.shown ? 'active' : ''}}" ng-click="zm.levelSelect.show()" ng-if="zm.levelSelect.showButton()">Level Select</button>
</div>
<div class="zoom-buttons" ng-if="zm.model.persistentData.zoomButtons">
<button ng-click="zm.zoom(-1);">-</button>
<button ng-click="zm.resetZoom();">Reset</button>
<button ng-click="zm.zoom(+1);">+</button>
</div>
<shop-menu></shop-menu>
<construction-menu></construction-menu>
<graveyard-menu></graveyard-menu>
<factory-menu></factory-menu>
<runesmith-menu></runesmith-menu>
<champions-hold-menu></champions-hold-menu>
<prestige-menu></prestige-menu>
<options-menu></options-menu>
<level-select></level-select>
<level-stats></level-stats>
<div class="end-level confirm" ng-if="zm.confirmCallback">
<div><label>{{zm.confirmMessage}}</label></div>
<button ng-click="zm.confirmCallback();">Yes</button><button ng-click="zm.confirmCancel();">No</button>
</div>
<div class="start-game" ng-if="zm.model.currentState == zm.model.states.startGame">
<h2>Incremancer</h2>
<h4>Take control of a horde of zombies to ravage small towns</h4>
<ul>
<li ng-repeat="text in zm.howToPlay">{{text}}</li>
</ul>
<a href="https://discord.gg/TxPyNDh" target="_blank">Join the Discord - https://discord.gg/TxPyNDh</a>
<h3 ng-if="zm.model.offlineMessage">{{zm.model.offlineMessage}}</h3>
<button ng-click="zm.startGame();">Start Level {{zm.model.level}}</button>
</div>
<div class="end-level" ng-if="zm.model.currentState == zm.model.states.failed">
<h2>Level {{zm.model.level}} Failed</h2>
<h4>You have been defeated</h4>
<button ng-click="zm.model.startLevel(zm.model.level - 1);">Go back to Level {{zm.model.level - 1}}</button>
<button ng-click="zm.model.startLevel(zm.model.level);">Retry Level {{zm.model.level}}</button>
</div>
<div class="end-level" ng-if="zm.model.currentState == zm.model.states.levelCompleted">
<h2>Level {{zm.model.level}} Complete</h2>
<h4>All the humans are either dead or undead!</h4>
<h4 ng-if="zm.model.prestigePointsEarned &gt; 0">You have earned {{zm.model.prestigePointsEarned}} prestige points</h4>
<h4 ng-if="zm.model.endLevelBones" style="margin:1em">Your bone collectors have gathered the remaining {{zm.model.endLevelBones}} bones from the town</h4>
<button ng-click="zm.nextLevel();">Start Level {{zm.model.level + 1}}</button>
</div>
<div class="start-game" ng-if="zm.model.currentState == zm.model.states.prestiged">
<h2>You have prestiged!</h2>
<p>It's time to start from the beginning again, but this time stronger and faster.</p>
<h4>You have {{zm.model.persistentData.prestigePointsToSpend}} prestige points to spend</h4>
<p>It is recommended to spend your points before clicking start game</p>
<p>as some of their effects will only activate when a new level is started.</p>
<button ng-click="zm.startGame();">Start Level {{zm.model.level}}</button>
</div>
</body>
</html>