Add new advanced enemy type (advanced3), flamethrower tower, laser cannon tower, and update wave configuration with new enemy spawns and timing

This commit introduces a new advanced enemy variant (advanced3) with increased health and speed, adds two new tower types (flamethrower and laser cannon) with their respective configurations, extends the spawn timing for existing enemies in wave 9, and enhances the upgrade menu UI to display stat improvements.
This commit is contained in:
Brian Fertig 2025-09-06 14:13:12 -06:00
parent 283a51044c
commit ff5f9db876
7 changed files with 119 additions and 68 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 494 KiB

After

Width:  |  Height:  |  Size: 848 KiB

Binary file not shown.

View File

@ -14,7 +14,7 @@ export class Enemies {
this.baseSprite = ENEMIES_CONFIG[type].spriteStart; this.baseSprite = ENEMIES_CONFIG[type].spriteStart;
this.spawnRange = { this.spawnRange = {
low: 500, low: 500,
high: 8000 high: 12000
} }
this.spawnEnemy(); this.spawnEnemy();

View File

@ -86,5 +86,16 @@ export const ENEMIES_CONFIG = {
'spriteSheet': 'advanced-enemies', 'spriteSheet': 'advanced-enemies',
'dropLow': 15, 'dropLow': 15,
'dropHigh': 25 'dropHigh': 25
},
'advanced3': {
'spread': 0,
'health': 1100,
'fullHealth': 1100,
'speedLow': 65,
'speedHigh': 85,
'spriteStart': 20,
'spriteSheet': 'advanced-enemies',
'dropLow': 15,
'dropHigh': 25
} }
} }

View File

@ -33,43 +33,6 @@ export const TOWERS_CONFIG = {
'anim': 'gun-level3-fire' 'anim': 'gun-level3-fire'
} }
}, },
'cannon': {
'name': 'Cannon',
'cost': 200,
'spriteStart': 10,
'dmgType': 'aoe',
'level1': {
'dmgLow': 15,
'dmgHigh': 35,
'rate': 2500,
'duration': 200,
'range': 400,
'aoe': 55,
'anim': 'cannon-level1-fire'
},
'level2': {
'sprite': 12,
'cost': 400,
'dmgLow': 28,
'dmgHigh': 60,
'rate': 2500,
'duration': 500,
'range': 450,
'aoe': 60,
'anim': 'cannon-level1-fire'
},
'level3': {
'sprite': 14,
'cost': 800,
'dmgLow': 35,
'dmgHigh': 90,
'rate': 2500,
'duration': 500,
'range': 500,
'aoe': 65,
'anim': 'cannon-level1-fire'
}
},
'flame': { 'flame': {
'name': 'Flamethrower', 'name': 'Flamethrower',
'cost': 150, 'cost': 150,
@ -107,39 +70,41 @@ export const TOWERS_CONFIG = {
'anim': 'flamethrower' 'anim': 'flamethrower'
} }
}, },
'icbm': { 'cannon': {
'name': 'ICBM Launcher', 'name': 'Cannon',
'cost': 500, 'cost': 200,
'spriteStart': 30, 'spriteStart': 10,
'dmgType': 'aoe', 'dmgType': 'aoe',
'level1': { 'level1': {
'dmgLow': 40, 'dmgLow': 15,
'dmgHigh': 50, 'dmgHigh': 35,
'rate': 10000, 'rate': 2500,
'duration': 2000, 'duration': 200,
'range': 800, 'range': 400,
'aoe': 200, 'aoe': 55,
'anim': 'none' 'anim': 'cannon-level1-fire'
}, },
'level2': { 'level2': {
'cost': 1000, 'sprite': 12,
'dmgLow': 40, 'cost': 400,
'dmgHigh': 50, 'dmgLow': 28,
'rate': 8000, 'dmgHigh': 60,
'duration': 2000, 'rate': 2500,
'range': 800, 'duration': 500,
'aoe': 210, 'range': 450,
'anim': 'none' 'aoe': 60,
'anim': 'cannon-level1-fire'
}, },
'level3': { 'level3': {
'cost': 2000, 'sprite': 14,
'dmgLow': 50, 'cost': 800,
'dmgHigh': 60, 'dmgLow': 35,
'rate': 5000, 'dmgHigh': 90,
'duration': 2000, 'rate': 2500,
'range': 800, 'duration': 500,
'aoe': 225, 'range': 500,
'anim': 'none' 'aoe': 65,
'anim': 'cannon-level1-fire'
} }
}, },
'laser': { 'laser': {
@ -175,5 +140,40 @@ export const TOWERS_CONFIG = {
'range': 400, 'range': 400,
'anim': 'laser-level3-fire' 'anim': 'laser-level3-fire'
} }
} },
'icbm': {
'name': 'ICBM Launcher',
'cost': 500,
'spriteStart': 30,
'dmgType': 'aoe',
'level1': {
'dmgLow': 40,
'dmgHigh': 50,
'rate': 10000,
'duration': 2000,
'range': 800,
'aoe': 200,
'anim': 'none'
},
'level2': {
'cost': 1000,
'dmgLow': 40,
'dmgHigh': 50,
'rate': 8000,
'duration': 2000,
'range': 800,
'aoe': 210,
'anim': 'none'
},
'level3': {
'cost': 2000,
'dmgLow': 50,
'dmgHigh': 60,
'rate': 5000,
'duration': 2000,
'range': 800,
'aoe': 225,
'anim': 'none'
}
},
} }

View File

@ -60,7 +60,7 @@ export class TowerManager {
upgradeMenu(tower) { upgradeMenu(tower) {
if (this.upgradeDetails) this.upgradeDetails.destroy(); if (this.upgradeDetails) this.upgradeDetails.destroy();
this.selectedTower = tower; this.selectedTower = tower;
const currentLevel = `level${tower.props.level}`; const currentLevel = `level${tower.props.level}`;
const nextLevel = currentLevel === 'level3' ? 'level3' : `level${tower.props.level + 1}`; const nextLevel = currentLevel === 'level3' ? 'level3' : `level${tower.props.level + 1}`;
@ -92,7 +92,7 @@ export class TowerManager {
this.upgradeCost = TOWERS_CONFIG[tower.props.type][nextLevel].cost; this.upgradeCost = TOWERS_CONFIG[tower.props.type][nextLevel].cost;
this.upgradeText = this.scene.add.text(tower.x + 175, tower.y - 50, `Upgrade: ${this.upgradeCost}`, { this.upgradeText = this.scene.add.text(tower.x + 175, tower.y - 75, `Upgrade: ${this.upgradeCost}`, {
fontFamily: 'neuropol, arial', fontFamily: 'neuropol, arial',
fontSize: '32px', fontSize: '32px',
fill: '#ffd900ff', fill: '#ffd900ff',
@ -109,6 +109,20 @@ export class TowerManager {
}).setDepth(13).setInteractive(); }).setDepth(13).setInteractive();
this.upgradeDetails.add(this.upgradeText); this.upgradeDetails.add(this.upgradeText);
if (currentLevel !== 3) {
const currentStats = TOWERS_CONFIG[tower.props.type][currentLevel];
const nextStats = TOWERS_CONFIG[tower.props.type][nextLevel];
const rangeText = `Range: +${nextStats.range - currentStats.range}\n`;
const damageText = `Damage: +${nextStats.dmgHigh - currentStats.dmgHigh}`;
const upgradesText = `${rangeText}${damageText}`;
this.upgradeTextStats = this.scene.add.text(tower.x + 200, tower.y - 25, upgradesText, {
fontFamily: 'neuropol, arial', fontSize: '20px', fill: '#00ff88ff', stroke: '#00c493ff', strokeThickness: 2,
shadow: { offsetX: 2, offsetY: 2, color: '#000000', blur: 2, stroke: false, fill: true }
}).setDepth(13).setInteractive();
this.upgradeDetails.add(this.upgradeTextStats);
}
if (currentLevel === 'level3') { if (currentLevel === 'level3') {
this.upgradeText.setText('Max Upgrade').disableInteractive(); this.upgradeText.setText('Max Upgrade').disableInteractive();
} }

View File

@ -174,6 +174,32 @@ export const WAVE_CONFIG = {
advanced1: 1, advanced1: 1,
basic3: 10 basic3: 10
} }
},
//Wave
9: {
//Schedule
1: {
begin: 0,
advanced3: 1,
medium1: 4,
basic4: 6
},
2: {
begin: 25,
basic3: 10,
medium2: 6,
},
3: {
begin: 45,
advanced3: 2,
basic4: 15
},
4: {
begin: 35,
medium1: 4,
medium2: 4,
basic4: 20
}
} }
} }
} }