modified: index.html

modified:   js/config.js
	modified:   js/game.js
	modified:   js/ui.js
	modified:   style.css
This commit is contained in:
xbl
2026-02-26 22:28:18 +01:00
parent 805dd7b082
commit 8f5f3aa03a
5 changed files with 91 additions and 37 deletions

View File

@ -75,6 +75,7 @@ a1.7 1.7 0 0 0-1.5 1z"></path>
<div id="upgrade-panel">
<div class="menu-title">Upgrades</div>
<div id="total-level" class="stat-line"></div>
<div id="star-bonus" class="stat-line"></div>
<div class="upgrade-row">
</br>
<div id="spendable-mass">Available to Spend: 0 kg</div>

View File

@ -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,

View File

@ -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() {

View File

@ -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 =
'<span class="tooltip-trigger">' +
'Total Level: ' + totalLevel +
'<span class="tooltip">' +
'Sum of all upgrades.<br>'
'</span>' +
'</span>';
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 =
'<span class="tooltip-trigger">' +
'Total Level: ' + totalLevel +
'<span class="tooltip">' +
'Sum of all upgrades.<br>' +
'</span>' +
'</span>';
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 += '<br><br>M-Type: +' + mBonus.toFixed(0) + '%<br>';
}
if (kBonus > 1) {
starTooltip += 'K-Type: +' + kBonus.toFixed(0) + '%<br>';
}
if (gBonus > 1) {
starTooltip += 'G-Type: +' + gBonus.toFixed(0) + '%';
}
starBonusEl.innerHTML =
'<span class="tooltip-trigger">' +
'<br><span style="color:#FC6;">Star Bonus: +' + totalStarBonus + '%</span>' +
'<span class="tooltip">' + starTooltip + '</span>' +
'</span>';
},
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.<br><br>Rate: ' + rate + '/sec<br>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.<br><br>Rate: ' + rate + '/sec<br>Bonus: ' + bonusPercent + '%';
if (!gameState.cometUnlocked) tooltipText += '<br><span style="color:#0FF;">Unlocks Comets at level 20</span>';
this.elements.asteroidLevel.innerHTML = '<span class="tooltip-trigger">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.<br><br>Rate: ' + rate + '/3days<br>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.<br><br>Rate: ' + rate + '/3days<br>Bonus: ' + bonusPercent + '%';
this.elements.gtypeLevel.innerHTML = '<span class="tooltip-trigger">G-Type: Level ' +
gameState.gtypeUpgradeLevel +

View File

@ -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 {