diff --git a/index.html b/index.html index 81ca817..ccbad9c 100644 --- a/index.html +++ b/index.html @@ -75,6 +75,7 @@ a1.7 1.7 0 0 0-1.5 1z">
+

Available to Spend: 0 kg
diff --git a/js/config.js b/js/config.js index 0934d1b..d27e45e 100644 --- a/js/config.js +++ b/js/config.js @@ -36,9 +36,9 @@ var CONFIG = { COMET_BASE_COST: 1e7, PLANET_BASE_COST: 1e24, GIANT_BASE_COST: 1e27, - MTYPE_BASE_COST: 1e28, - KTYPE_BASE_COST: 1e29, - GTYPE_BASE_COST: 1e30, + MTYPE_BASE_COST: 1e29, + KTYPE_BASE_COST: 1e30, + GTYPE_BASE_COST: 1e31, // Upgrade scaling UPGRADE_COST_MULTIPLIER_ASTER: 1.25, @@ -74,10 +74,11 @@ var CONFIG = { ktype: [8.95e29, 1.59e30], // K-Type: 0.45-0.8 M☉ gtype: [1.59e30, 2.07e30] // G-Type: 0.8-1.04 M☉ }, + // Star-tier spawn rate bonuses (applied to all lower tiers) - MTYPE_SPAWN_BOOST_PER_LEVEL: 0.03, // 3% per level - KTYPE_SPAWN_BOOST_PER_LEVEL: 0.04, // 4% per level - GTYPE_SPAWN_BOOST_PER_LEVEL: 0.05, // 5% per level + MTYPE_SPAWN_BOOST_PER_LEVEL: 0.01, // 1% per level + KTYPE_SPAWN_BOOST_PER_LEVEL: 0.02, // 2% per level + GTYPE_SPAWN_BOOST_PER_LEVEL: 0.03, // 3% per level // Visual Sizes VISUAL_SIZE_SMALL: 1, diff --git a/js/game.js b/js/game.js index 460a020..715d0eb 100644 --- a/js/game.js +++ b/js/game.js @@ -257,20 +257,39 @@ var Game = (function() { } function updateSpawnIntervals() { + // Calculate star-tier spawn boost (multiplicative) + var starBonus = 1 + + (state.mtypeUpgradeLevel * CONFIG.MTYPE_SPAWN_BOOST_PER_LEVEL) + + (state.ktypeUpgradeLevel * CONFIG.KTYPE_SPAWN_BOOST_PER_LEVEL) + + (state.gtypeUpgradeLevel * CONFIG.GTYPE_SPAWN_BOOST_PER_LEVEL); + + // Asteroids boosted by all stars state.currentAsteroidSpawnInterval = CONFIG.BASE_ASTEROID_SPAWN_INTERVAL / - (1 + state.asteroidUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_ASTER); + ((1 + state.asteroidUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_ASTER) * starBonus); + + // Comets boosted by all stars state.currentCometSpawnInterval = CONFIG.BASE_COMET_SPAWN_INTERVAL / - (1 + state.cometUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_COMET); + ((1 + state.cometUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_COMET) * starBonus); + + // Planets boosted by all stars state.currentPlanetSpawnInterval = CONFIG.BASE_PLANET_SPAWN_INTERVAL / - (1 + state.planetUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_PLANT); + ((1 + state.planetUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_PLANT) * starBonus); + + // Giants boosted by all stars state.currentGiantSpawnInterval = CONFIG.BASE_GIANT_SPAWN_INTERVAL / - (1 + state.giantUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_GIANT); - state.currentMtypeSpawnInterval = CONFIG.BASE_MTYPE_SPAWN_INTERVAL / - (1 + state.mtypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_MTYPE); - state.currentKtypeSpawnInterval = CONFIG.BASE_KTYPE_SPAWN_INTERVAL / - (1 + state.ktypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_KTYPE); - state.currentGtypeSpawnInterval = CONFIG.BASE_GTYPE_SPAWN_INTERVAL / - (1 + state.gtypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_GTYPE); + ((1 + state.giantUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_GIANT) * starBonus); + + // M-type boosted by all stars + state.currentMtypeSpawnInterval = CONFIG.BASE_MTYPE_SPAWN_INTERVAL / + ((1 + state.mtypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_MTYPE) * starBonus); + + // K-type boosted by all stars + state.currentKtypeSpawnInterval = CONFIG.BASE_KTYPE_SPAWN_INTERVAL / + ((1 + state.ktypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_KTYPE) * starBonus); + + // G-type boosted by all stars + state.currentGtypeSpawnInterval = CONFIG.BASE_GTYPE_SPAWN_INTERVAL / + ((1 + state.gtypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_GTYPE) * starBonus); } function recalculateUpgradeCosts() { diff --git a/js/ui.js b/js/ui.js index a040daa..b24ec64 100644 --- a/js/ui.js +++ b/js/ui.js @@ -336,25 +336,54 @@ var UI = { }, updateTotalLevel: function(gameState) { - var el = this.elements.totalLevel; - if (!el) return; - - var totalLevel = - gameState.asteroidUpgradeLevel + - gameState.cometUpgradeLevel + - gameState.planetUpgradeLevel + - gameState.giantUpgradeLevel + - gameState.mtypeUpgradeLevel + - gameState.ktypeUpgradeLevel + - gameState.gtypeUpgradeLevel; - - el.innerHTML = - '' + - 'Total Level: ' + totalLevel + - '' + - 'Sum of all upgrades.
' - '
' + - '
'; + var el = this.elements.totalLevel; + if (!el) return; + + var totalLevel = + gameState.asteroidUpgradeLevel + + gameState.cometUpgradeLevel + + gameState.planetUpgradeLevel + + gameState.giantUpgradeLevel + + gameState.mtypeUpgradeLevel + + gameState.ktypeUpgradeLevel + + gameState.gtypeUpgradeLevel; + + el.innerHTML = + '' + + 'Total Level: ' + totalLevel + + '' + + 'Sum of all upgrades.
' + + '
' + + '
'; + + var starBonusEl = document.getElementById('star-bonus'); + if (!starBonusEl) return; + + var mBonus = gameState.mtypeUpgradeLevel * CONFIG.MTYPE_SPAWN_BOOST_PER_LEVEL * 100; + var kBonus = gameState.ktypeUpgradeLevel * CONFIG.KTYPE_SPAWN_BOOST_PER_LEVEL * 100; + var gBonus = gameState.gtypeUpgradeLevel * CONFIG.GTYPE_SPAWN_BOOST_PER_LEVEL * 100; + var totalStarBonus = (mBonus + kBonus + gBonus).toFixed(0); + + var starTooltip = + '*-Type upgrades boost the spawn rate of all objects.'; + + if (mBonus > 1) { + starTooltip += '

M-Type: +' + mBonus.toFixed(0) + '%
'; + } + + if (kBonus > 1) { + starTooltip += 'K-Type: +' + kBonus.toFixed(0) + '%
'; + } + + if (gBonus > 1) { + starTooltip += 'G-Type: +' + gBonus.toFixed(0) + '%'; + } + + starBonusEl.innerHTML = + '' + + '
Star Bonus: +' + totalStarBonus + '%' + + '' + starTooltip + '' + + '
'; }, updateActiveObjects: function() { @@ -391,7 +420,7 @@ var UI = { updateAsteroidUpgrade: function(gameState) { var rate = (1000 / gameState.currentAsteroidSpawnInterval).toFixed(2); var bonusPercent = (gameState.asteroidUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_ASTER * 100).toFixed(0); - var tooltipText = 'Asteroids are rocky, airless bodies that range in size from tiny pebbles to hundreds of kilometers across. Some asteroids have moons or even binary companions.

Rate: ' + rate + '/sec
Bonus: ' + bonusPercent + '%'; + var tooltipText = 'Asteroids are rocky, airless bodies that range in size from tiny pebbles to hundreds of kilometers across. Some asteroids have moons or even binary companions.

Rate: ' + rate + '/sec
Bonus: ' + bonusPercent + '%'; if (!gameState.cometUnlocked) tooltipText += '
Unlocks Comets at level 20'; this.elements.asteroidLevel.innerHTML = 'Asteroids: Level ' + @@ -489,7 +518,7 @@ var UI = { updateGtypeUpgrade: function(gameState) { var rate = (CONFIG.BASE_GTYPE_SPAWN_INTERVAL / gameState.currentGtypeSpawnInterval).toFixed(2); var bonusPercent = (gameState.gtypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_GTYPE * 100).toFixed(0); - var tooltipText = 'G-Types, also known as yellow dwarfs, are medium-sized stars that are about the size of our Sun (~1 M☉). The term yellow dwarf is a misnomer, as most G-Types (including the Sun) are in fact white. These stars are stable and long-lived, making them strong candidates for hosting habitable planets.

Rate: ' + rate + '/3days
Bonus: ' + bonusPercent + '%'; + var tooltipText = 'G-Types, also known as yellow dwarfs, are medium-sized stars that are about the size of our Sun (~1 M☉). The term yellow dwarf is a misnomer, as most G-Types (including the Sun) are in fact white. These stars are stable and long-lived, making them strong candidates for hosting habitable planets.

Rate: ' + rate + '/3days
Bonus: ' + bonusPercent + '%'; this.elements.gtypeLevel.innerHTML = 'G-Type: Level ' + gameState.gtypeUpgradeLevel + diff --git a/style.css b/style.css index 86d4bc4..53e5ba7 100644 --- a/style.css +++ b/style.css @@ -148,6 +148,8 @@ canvas { width: 280px; line-height: 1.5; z-index: 999; + max-height: 80vh; + overflow-y: auto; } #settings-menu.open { @@ -200,6 +202,8 @@ canvas { font-size: 11px; width: 280px; z-index: 999; + max-height: 80vh; + overflow-y: auto; } #upgrade-panel.open {