Add Level 3 with new terrain, updated tower stats, and comprehensive wave configurations

This commit introduces Level 3 with:
- New terrain assets (terrain2.png) and tilemap configuration
- Updated tower statistics for level 2 and 3 in towerConfig.js
- Complete wave scheduling for level 3 in waveConfig.js
- Dynamic asset loading based on current level in level.js
This commit is contained in:
Brian Fertig 2025-09-06 23:37:12 -06:00
parent 7112571a2b
commit f843aee85f
7 changed files with 436 additions and 10 deletions

116
assets/level3.json Normal file
View File

@ -0,0 +1,116 @@
{ "compressionlevel":-1,
"height":14,
"infinite":false,
"layers":[
{
"data":[7, 7, 11, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 0, 0, 0,
7, 7, 11, 7, 11, 11, 11, 11, 11, 7, 7, 2, 2, 0, 0, 0,
7, 7, 11, 7, 7, 7, 7, 7, 11, 7, 7, 2, 2, 0, 0, 0,
7, 7, 11, 11, 7, 7, 7, 7, 11, 7, 7, 2, 2, 0, 0, 0,
12, 12, 12, 11, 12, 12, 12, 12, 11, 12, 12, 2, 2, 0, 0, 0,
2, 2, 2, 3221225478, 2, 2, 2, 2, 3221225478, 2, 2, 2, 2, 0, 0, 0,
2, 2, 2, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 0, 0, 0,
2, 1, 1, 1, 2, 2, 2, 2, 1, 2, 2, 2, 2, 0, 0, 0,
2, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 0, 0, 0,
2, 6, 2, 2, 2, 2, 2, 2, 6, 2, 2, 2, 2, 0, 0, 0,
7, 11, 7, 7, 7, 7, 7, 7, 11, 7, 7, 2, 2, 0, 0, 0,
7, 11, 7, 7, 7, 7, 7, 7, 11, 7, 7, 2, 2, 0, 0, 0,
7, 11, 11, 11, 11, 11, 11, 11, 11, 7, 7, 2, 2, 0, 0, 0,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 2, 2, 0, 0, 0],
"height":14,
"id":1,
"name":"main",
"opacity":1,
"type":"tilelayer",
"visible":true,
"width":16,
"x":0,
"y":0
},
{
"data":[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 16, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 16, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,
16, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
"height":14,
"id":2,
"name":"platforms",
"opacity":1,
"type":"tilelayer",
"visible":true,
"width":16,
"x":0,
"y":0
}],
"nextlayerid":3,
"nextobjectid":1,
"orientation":"orthogonal",
"renderorder":"right-down",
"tiledversion":"1.11.2",
"tileheight":200,
"tilesets":[
{
"columns":5,
"firstgid":1,
"image":"terrain2.png",
"imageheight":1000,
"imagewidth":1000,
"margin":0,
"name":"terrain2",
"spacing":0,
"tilecount":25,
"tileheight":200,
"tiles":[
{
"id":1,
"properties":[
{
"name":"collides",
"type":"bool",
"value":true
}]
},
{
"id":3,
"properties":[
{
"name":"collides",
"type":"bool",
"value":true
}]
},
{
"id":6,
"properties":[
{
"name":"collides",
"type":"bool",
"value":true
}]
},
{
"id":11,
"properties":[
{
"name":"collides",
"type":"bool",
"value":true
}]
}],
"tilewidth":200
}],
"tilewidth":200,
"type":"map",
"version":"1.10",
"width":16
}

BIN
assets/terrain2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 509 KiB

BIN
assets/terrain2.psd Normal file

Binary file not shown.

View File

@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.10" tiledversion="1.11.2" orientation="orthogonal" renderorder="right-down" width="16" height="14" tilewidth="200" tileheight="200" infinite="0" nextlayerid="3" nextobjectid="1">
<editorsettings>
<export target="../level3.tmj" format="json"/>
</editorsettings>
<tileset firstgid="1" name="terrain2" tilewidth="200" tileheight="200" tilecount="25" columns="5">
<image source="../terrain2.png" width="1000" height="1000"/>
<tile id="1">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="3">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="6">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
<tile id="11">
<properties>
<property name="collides" type="bool" value="true"/>
</properties>
</tile>
</tileset>
<layer id="1" name="main" width="16" height="14">
<data encoding="csv">
7,7,11,7,7,7,7,7,7,7,7,2,2,0,0,0,
7,7,11,7,11,11,11,11,11,7,7,2,2,0,0,0,
7,7,11,7,7,7,7,7,11,7,7,2,2,0,0,0,
7,7,11,11,7,7,7,7,11,7,7,2,2,0,0,0,
12,12,12,11,12,12,12,12,11,12,12,2,2,0,0,0,
2,2,2,3221225478,2,2,2,2,3221225478,2,2,2,2,0,0,0,
2,2,2,1,2,2,2,2,1,2,2,2,2,0,0,0,
2,1,1,1,2,2,2,2,1,2,2,2,2,0,0,0,
2,1,2,2,2,2,2,2,1,2,2,2,2,0,0,0,
2,6,2,2,2,2,2,2,6,2,2,2,2,0,0,0,
7,11,7,7,7,7,7,7,11,7,7,2,2,0,0,0,
7,11,7,7,7,7,7,7,11,7,7,2,2,0,0,0,
7,11,11,11,11,11,11,11,11,7,7,2,2,0,0,0,
7,7,7,7,7,7,7,7,7,7,7,2,2,0,0,0
</data>
</layer>
<layer id="2" name="platforms" width="16" height="14">
<data encoding="csv">
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,16,0,16,0,0,0,16,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,
0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,16,0,0,0,0,16,0,0,0,0,0,0,
16,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0
</data>
</layer>
</map>

View File

@ -9,6 +9,11 @@ export class Level extends Phaser.Scene {
this.level = 1; this.level = 1;
this.wave = 1; this.wave = 1;
this.gold = 150; this.gold = 150;
this.terrain = {
1: 'terrain',
2: 'terrain',
3: 'terrain2',
}
} }
init(data) { init(data) {
@ -20,7 +25,7 @@ export class Level extends Phaser.Scene {
preload() { preload() {
this.load.tilemapTiledJSON(`level${this.level}`, `assets/level${this.level}.json`); this.load.tilemapTiledJSON(`level${this.level}`, `assets/level${this.level}.json`);
this.load.image('terrain', 'assets/terrain.png'); this.load.image(`${this.terrain[this.level]}`, `assets/${this.terrain[this.level]}.png`);
this.load.spritesheet('ammo', 'assets/ammo.png', { this.load.spritesheet('ammo', 'assets/ammo.png', {
frameWidth: 50, frameWidth: 50,
frameHeight: 50 frameHeight: 50
@ -63,7 +68,7 @@ export class Level extends Phaser.Scene {
create() { create() {
this.levelMap = this.make.tilemap({ key: `level${this.level}` }); this.levelMap = this.make.tilemap({ key: `level${this.level}` });
const terrainTiles = this.levelMap.addTilesetImage('terrain', 'terrain'); const terrainTiles = this.levelMap.addTilesetImage(`${this.terrain[this.level]}`, `${this.terrain[this.level]}`);
this.mainLayer = this.levelMap.createLayer('main', terrainTiles) this.mainLayer = this.levelMap.createLayer('main', terrainTiles)
.setCollisionByProperty({ collides: true }); .setCollisionByProperty({ collides: true });
this.platformsLayer = this.levelMap.createLayer('platforms', terrainTiles); this.platformsLayer = this.levelMap.createLayer('platforms', terrainTiles);

View File

@ -157,21 +157,21 @@ export const TOWERS_CONFIG = {
}, },
'level2': { 'level2': {
'cost': 1000, 'cost': 1000,
'dmgLow': 40, 'dmgLow': 55,
'dmgHigh': 50, 'dmgHigh': 65,
'rate': 8000, 'rate': 9000,
'duration': 2000, 'duration': 2000,
'range': 800, 'range': 900,
'aoe': 210, 'aoe': 210,
'anim': 'none' 'anim': 'none'
}, },
'level3': { 'level3': {
'cost': 2000, 'cost': 2000,
'dmgLow': 50, 'dmgLow': 80,
'dmgHigh': 60, 'dmgHigh': 90,
'rate': 5000, 'rate': 7000,
'duration': 2000, 'duration': 2000,
'range': 800, 'range': 1000,
'aoe': 225, 'aoe': 225,
'anim': 'none' 'anim': 'none'
} }

View File

@ -478,5 +478,245 @@ export const WAVE_CONFIG = {
basic4: 20 basic4: 20
} }
} }
},
// Level
3: {
//Spawn Point
spawnX: 2,
spawnY: 0,
endX: 4,
endY: 1,
// Wave
1: {
// Schedule
1: {
begin: 0,
basic1: 5,
},
2: {
begin: 15,
basic1: 8,
},
3: {
begin: 30,
basic1: 10,
}
},
// Wave
2: {
// Schedule
1: {
begin: 0,
basic1: 8,
basic2: 1
},
2: {
begin: 15,
basic1: 5,
basic2: 2
},
3: {
begin: 30,
basic1: 5,
basic2: 4
}
},
// Wave
3: {
// Schedule
1: {
begin: 0,
basic2: 5
},
2: {
begin: 15,
basic2: 6
},
3: {
begin: 30,
basic2: 8,
basic3: 1
}
},
// Wave
4: {
// Schedule
1: {
begin: 0,
basic1: 10,
basic3: 2,
},
2: {
begin: 15,
basic1: 8,
basic2: 3,
basic3: 2
},
3: {
begin: 30,
basic3: 4
}
},
//Wave
5: {
//Schedule
1: {
begin: 0,
basic1: 10,
basic2: 2,
basic3: 1
},
2: {
begin: 15,
advanced1: 1,
},
3: {
begin: 25,
basic1: 8,
basic2: 3,
basic3: 2
},
4: {
begin: 35,
basic1: 25
},
5: {
begin: 40,
advanced1: 1
}
},
//Wave
6: {
//Schedule
1: {
begin: 0,
basic2: 10,
advanced2: 1
},
2: {
begin: 15,
basic1: 20,
},
3: {
begin: 25,
basic3: 6,
advanced1: 1
},
4: {
begin: 35,
advanced2: 1
}
},
//Wave
7: {
//Schedule
1: {
begin: 0,
medium1: 5,
basic3: 5
},
2: {
begin: 15,
basic2: 10,
basic4: 2,
advanced1: 1
},
3: {
begin: 25,
medium1: 6,
medium2: 2
},
4: {
begin: 35,
advanced2: 1
}
},
//Wave
8: {
//Schedule
1: {
begin: 0,
advanced2: 1,
basic4: 20
},
2: {
begin: 25,
basic2: 10,
medium2: 6,
},
3: {
begin: 35,
medium2: 5,
basic4: 15
},
4: {
begin: 45,
advanced1: 1,
basic3: 10
}
},
//Wave
9: {
//Schedule
1: {
begin: 0,
advanced3: 1,
medium1: 4,
basic4: 6
},
2: {
begin: 25,
basic3: 10,
medium2: 6,
},
3: {
begin: 40,
advanced3: 2,
basic4: 15
},
4: {
begin: 55,
medium1: 4,
medium2: 4,
basic4: 20
}
},
//Wave
10: {
//Schedule
1: {
begin: 0,
advanced3: 2,
advanced1: 2,
medium1: 4,
basic4: 4,
basic3: 4
},
2: {
begin: 25,
advanced2: 2,
medium2: 4,
basic2: 10
},
3: {
begin: 45,
advanced3: 4,
basic4: 20
},
4: {
begin: 50,
advanced1: 1,
advanced2: 1,
basic3: 10,
medium1: 20,
medium2: 10
},
4: {
begin: 60,
medium1: 10,
medium2: 10,
basic4: 20
}
}
} }
} }