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 {