- Complete game architecture with modular JS structure - 12 buildings across 4 tiers with scaling costs - 15+ upgrades with requirements and bonuses - 20 achievements to unlock - Auto-save system with offline progress (50% efficiency) - Export/Import save functionality - Responsive dark-themed UI with cosmic aesthetic - Floating text animations and notification system
189 lines
5.1 KiB
JavaScript
189 lines
5.1 KiB
JavaScript
/**
|
|
* Cosmic Garden - Achievement Definitions & Checker
|
|
*/
|
|
|
|
const ACHIEVEMENTS = {
|
|
// Click achievements
|
|
firstClick: {
|
|
id: 'firstClick',
|
|
name: 'First Contact',
|
|
description: 'Click for the first time',
|
|
icon: '👆',
|
|
condition: (state) => state.totalClicks >= 1
|
|
},
|
|
|
|
clicker: {
|
|
id: 'clicker',
|
|
name: 'Clicker',
|
|
description: 'Click 100 times',
|
|
icon: '🖱️',
|
|
condition: (state) => state.totalClicks >= 100
|
|
},
|
|
|
|
spammer: {
|
|
id: 'spammer',
|
|
name: 'Spam Finger',
|
|
description: 'Click 1,000 times',
|
|
icon: '🔥',
|
|
condition: (state) => state.totalClicks >= 1000
|
|
},
|
|
|
|
clickMaster: {
|
|
id: 'clickMaster',
|
|
name: 'Click Master',
|
|
description: 'Click 10,000 times',
|
|
icon: '⚡',
|
|
condition: (state) => state.totalClicks >= 10000
|
|
},
|
|
|
|
// Stardust achievements
|
|
dustCollector: {
|
|
id: 'dustCollector',
|
|
name: 'Dust Collector',
|
|
description: 'Earn 1,000 total stardust',
|
|
icon: '✨',
|
|
condition: (state) => state.totalStardust >= 1000
|
|
},
|
|
|
|
stardustMagnate: {
|
|
id: 'stardustMagnate',
|
|
name: 'Stardust Magnate',
|
|
description: 'Earn 100,000 total stardust',
|
|
icon: '💫',
|
|
condition: (state) => state.totalStardust >= 100000
|
|
},
|
|
|
|
cosmicTycoon: {
|
|
id: 'cosmicTycoon',
|
|
name: 'Cosmic Tycoon',
|
|
description: 'Earn 10,000,000 total stardust',
|
|
icon: '🌟',
|
|
condition: (state) => state.totalStardust >= 10000000
|
|
},
|
|
|
|
galaxyBaron: {
|
|
id: 'galaxyBaron',
|
|
name: 'Galaxy Baron',
|
|
description: 'Earn 1,000,000,000 total stardust',
|
|
icon: '👑',
|
|
condition: (state) => state.totalStardust >= 1000000000
|
|
},
|
|
|
|
// Building achievements
|
|
firstPlant: {
|
|
id: 'firstPlant',
|
|
name: 'First Plant',
|
|
description: 'Buy your first building',
|
|
icon: '🌱',
|
|
condition: (state) => Object.values(state.buildings).some(c => c >= 1)
|
|
},
|
|
|
|
gardenStart: {
|
|
id: 'gardenStart',
|
|
name: 'Garden Starter',
|
|
description: 'Own 10 total buildings',
|
|
icon: '🌿',
|
|
condition: (state) => Object.values(state.buildings).reduce((a, b) => a + b, 0) >= 10
|
|
},
|
|
|
|
gardenCenter: {
|
|
id: 'gardenCenter',
|
|
name: 'Garden Center',
|
|
description: 'Own 50 total buildings',
|
|
icon: '🏡',
|
|
condition: (state) => Object.values(state.buildings).reduce((a, b) => a + b, 0) >= 50
|
|
},
|
|
|
|
cosmicGarden: {
|
|
id: 'cosmicGarden',
|
|
name: 'Cosmic Garden',
|
|
description: 'Own 100 total buildings',
|
|
icon: '🌌',
|
|
condition: (state) => Object.values(state.buildings).reduce((a, b) => a + b, 0) >= 100
|
|
},
|
|
|
|
// Specific building achievements
|
|
sproutFarmer: {
|
|
id: 'sproutFarmer',
|
|
name: 'Sprout Farmer',
|
|
description: 'Own 25 Star Sprouts',
|
|
icon: '🌱',
|
|
condition: (state) => (state.buildings.starSprout || 0) >= 25
|
|
},
|
|
|
|
bloomGarden: {
|
|
id: 'bloomGarden',
|
|
name: 'Bloom Garden',
|
|
description: 'Own 25 Moon Blooms',
|
|
icon: '🌸',
|
|
condition: (state) => (state.buildings.moonBloom || 0) >= 25
|
|
},
|
|
|
|
solarPowered: {
|
|
id: 'solarPowered',
|
|
name: 'Solar Powered',
|
|
description: 'Own 25 Solar Leaves',
|
|
icon: '☀️',
|
|
condition: (state) => (state.buildings.solarLeaf || 0) >= 25
|
|
},
|
|
|
|
// Production achievements
|
|
steadyStream: {
|
|
id: 'steadyStream',
|
|
name: 'Steady Stream',
|
|
description: 'Reach 100 stardust/sec',
|
|
icon: '💧',
|
|
condition: (state) => Game.getProductionPerSecond() >= 100
|
|
},
|
|
|
|
rushingRiver: {
|
|
id: 'rushingRiver',
|
|
name: 'Rushing River',
|
|
description: 'Reach 1,000 stardust/sec',
|
|
icon: '🌊',
|
|
condition: (state) => Game.getProductionPerSecond() >= 1000
|
|
},
|
|
|
|
cosmicFlood: {
|
|
id: 'cosmicFlood',
|
|
name: 'Cosmic Flood',
|
|
description: 'Reach 100,000 stardust/sec',
|
|
icon: '🌊',
|
|
condition: (state) => Game.getProductionPerSecond() >= 100000
|
|
}
|
|
};
|
|
|
|
const Achievements = {
|
|
/**
|
|
* Check all achievements and unlock new ones
|
|
*/
|
|
check() {
|
|
for (const [id, achievement] of Object.entries(ACHIEVEMENTS)) {
|
|
if (Game.state.achievements.includes(id)) continue;
|
|
|
|
if (achievement.condition(Game.state)) {
|
|
Game.state.achievements.push(id);
|
|
UI.showNotification(`Achievement: ${achievement.name}!`, 'achievement');
|
|
console.log(`🏆 Achievement unlocked: ${achievement.name}`);
|
|
}
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Get achievement count
|
|
*/
|
|
getCount() {
|
|
return Game.state.achievements.length;
|
|
},
|
|
|
|
/**
|
|
* Get total achievements
|
|
*/
|
|
getTotal() {
|
|
return Object.keys(ACHIEVEMENTS).length;
|
|
}
|
|
};
|
|
|
|
window.ACHIEVEMENTS = ACHIEVEMENTS;
|
|
window.Achievements = Achievements;
|