modified: index.html
modified: js/config.js modified: js/game.js modified: js/ui.js modified: style.css
This commit is contained in:
@ -75,6 +75,7 @@ a1.7 1.7 0 0 0-1.5 1z"></path>
|
|||||||
<div id="upgrade-panel">
|
<div id="upgrade-panel">
|
||||||
<div class="menu-title">Upgrades</div>
|
<div class="menu-title">Upgrades</div>
|
||||||
<div id="total-level" class="stat-line"></div>
|
<div id="total-level" class="stat-line"></div>
|
||||||
|
<div id="star-bonus" class="stat-line"></div>
|
||||||
<div class="upgrade-row">
|
<div class="upgrade-row">
|
||||||
</br>
|
</br>
|
||||||
<div id="spendable-mass">Available to Spend: 0 kg</div>
|
<div id="spendable-mass">Available to Spend: 0 kg</div>
|
||||||
|
|||||||
13
js/config.js
13
js/config.js
@ -36,9 +36,9 @@ var CONFIG = {
|
|||||||
COMET_BASE_COST: 1e7,
|
COMET_BASE_COST: 1e7,
|
||||||
PLANET_BASE_COST: 1e24,
|
PLANET_BASE_COST: 1e24,
|
||||||
GIANT_BASE_COST: 1e27,
|
GIANT_BASE_COST: 1e27,
|
||||||
MTYPE_BASE_COST: 1e28,
|
MTYPE_BASE_COST: 1e29,
|
||||||
KTYPE_BASE_COST: 1e29,
|
KTYPE_BASE_COST: 1e30,
|
||||||
GTYPE_BASE_COST: 1e30,
|
GTYPE_BASE_COST: 1e31,
|
||||||
|
|
||||||
// Upgrade scaling
|
// Upgrade scaling
|
||||||
UPGRADE_COST_MULTIPLIER_ASTER: 1.25,
|
UPGRADE_COST_MULTIPLIER_ASTER: 1.25,
|
||||||
@ -74,10 +74,11 @@ var CONFIG = {
|
|||||||
ktype: [8.95e29, 1.59e30], // K-Type: 0.45-0.8 M☉
|
ktype: [8.95e29, 1.59e30], // K-Type: 0.45-0.8 M☉
|
||||||
gtype: [1.59e30, 2.07e30] // G-Type: 0.8-1.04 M☉
|
gtype: [1.59e30, 2.07e30] // G-Type: 0.8-1.04 M☉
|
||||||
},
|
},
|
||||||
|
|
||||||
// Star-tier spawn rate bonuses (applied to all lower tiers)
|
// Star-tier spawn rate bonuses (applied to all lower tiers)
|
||||||
MTYPE_SPAWN_BOOST_PER_LEVEL: 0.03, // 3% per level
|
MTYPE_SPAWN_BOOST_PER_LEVEL: 0.01, // 1% per level
|
||||||
KTYPE_SPAWN_BOOST_PER_LEVEL: 0.04, // 4% per level
|
KTYPE_SPAWN_BOOST_PER_LEVEL: 0.02, // 2% per level
|
||||||
GTYPE_SPAWN_BOOST_PER_LEVEL: 0.05, // 5% per level
|
GTYPE_SPAWN_BOOST_PER_LEVEL: 0.03, // 3% per level
|
||||||
|
|
||||||
// Visual Sizes
|
// Visual Sizes
|
||||||
VISUAL_SIZE_SMALL: 1,
|
VISUAL_SIZE_SMALL: 1,
|
||||||
|
|||||||
39
js/game.js
39
js/game.js
@ -257,20 +257,39 @@ var Game = (function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function updateSpawnIntervals() {
|
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 /
|
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 /
|
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 /
|
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 /
|
state.currentGiantSpawnInterval = CONFIG.BASE_GIANT_SPAWN_INTERVAL /
|
||||||
(1 + state.giantUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_GIANT);
|
((1 + state.giantUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_GIANT) * starBonus);
|
||||||
state.currentMtypeSpawnInterval = CONFIG.BASE_MTYPE_SPAWN_INTERVAL /
|
|
||||||
(1 + state.mtypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_MTYPE);
|
// M-type boosted by all stars
|
||||||
state.currentKtypeSpawnInterval = CONFIG.BASE_KTYPE_SPAWN_INTERVAL /
|
state.currentMtypeSpawnInterval = CONFIG.BASE_MTYPE_SPAWN_INTERVAL /
|
||||||
(1 + state.ktypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_KTYPE);
|
((1 + state.mtypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_MTYPE) * starBonus);
|
||||||
state.currentGtypeSpawnInterval = CONFIG.BASE_GTYPE_SPAWN_INTERVAL /
|
|
||||||
(1 + state.gtypeUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_GTYPE);
|
// 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() {
|
function recalculateUpgradeCosts() {
|
||||||
|
|||||||
67
js/ui.js
67
js/ui.js
@ -336,25 +336,54 @@ var UI = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
updateTotalLevel: function(gameState) {
|
updateTotalLevel: function(gameState) {
|
||||||
var el = this.elements.totalLevel;
|
var el = this.elements.totalLevel;
|
||||||
if (!el) return;
|
if (!el) return;
|
||||||
|
|
||||||
var totalLevel =
|
var totalLevel =
|
||||||
gameState.asteroidUpgradeLevel +
|
gameState.asteroidUpgradeLevel +
|
||||||
gameState.cometUpgradeLevel +
|
gameState.cometUpgradeLevel +
|
||||||
gameState.planetUpgradeLevel +
|
gameState.planetUpgradeLevel +
|
||||||
gameState.giantUpgradeLevel +
|
gameState.giantUpgradeLevel +
|
||||||
gameState.mtypeUpgradeLevel +
|
gameState.mtypeUpgradeLevel +
|
||||||
gameState.ktypeUpgradeLevel +
|
gameState.ktypeUpgradeLevel +
|
||||||
gameState.gtypeUpgradeLevel;
|
gameState.gtypeUpgradeLevel;
|
||||||
|
|
||||||
el.innerHTML =
|
el.innerHTML =
|
||||||
'<span class="tooltip-trigger">' +
|
'<span class="tooltip-trigger">' +
|
||||||
'Total Level: ' + totalLevel +
|
'Total Level: ' + totalLevel +
|
||||||
'<span class="tooltip">' +
|
'<span class="tooltip">' +
|
||||||
'Sum of all upgrades.<br>'
|
'Sum of all upgrades.<br>' +
|
||||||
'</span>' +
|
'</span>' +
|
||||||
'</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() {
|
updateActiveObjects: function() {
|
||||||
@ -391,7 +420,7 @@ var UI = {
|
|||||||
updateAsteroidUpgrade: function(gameState) {
|
updateAsteroidUpgrade: function(gameState) {
|
||||||
var rate = (1000 / gameState.currentAsteroidSpawnInterval).toFixed(2);
|
var rate = (1000 / gameState.currentAsteroidSpawnInterval).toFixed(2);
|
||||||
var bonusPercent = (gameState.asteroidUpgradeLevel * CONFIG.UPGRADE_BONUS_PER_LEVEL_ASTER * 100).toFixed(0);
|
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>';
|
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 ' +
|
this.elements.asteroidLevel.innerHTML = '<span class="tooltip-trigger">Asteroids: Level ' +
|
||||||
@ -489,7 +518,7 @@ var UI = {
|
|||||||
updateGtypeUpgrade: function(gameState) {
|
updateGtypeUpgrade: function(gameState) {
|
||||||
var rate = (CONFIG.BASE_GTYPE_SPAWN_INTERVAL / gameState.currentGtypeSpawnInterval).toFixed(2);
|
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 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 ' +
|
this.elements.gtypeLevel.innerHTML = '<span class="tooltip-trigger">G-Type: Level ' +
|
||||||
gameState.gtypeUpgradeLevel +
|
gameState.gtypeUpgradeLevel +
|
||||||
|
|||||||
@ -148,6 +148,8 @@ canvas {
|
|||||||
width: 280px;
|
width: 280px;
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
|
max-height: 80vh;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
#settings-menu.open {
|
#settings-menu.open {
|
||||||
@ -200,6 +202,8 @@ canvas {
|
|||||||
font-size: 11px;
|
font-size: 11px;
|
||||||
width: 280px;
|
width: 280px;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
|
max-height: 80vh;
|
||||||
|
overflow-y: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
#upgrade-panel.open {
|
#upgrade-panel.open {
|
||||||
|
|||||||
Reference in New Issue
Block a user