diff --git a/public/assets/maps/01_first_steps.png b/public/assets/maps/01_first_steps.png new file mode 100644 index 0000000..4cedff4 Binary files /dev/null and b/public/assets/maps/01_first_steps.png differ diff --git a/public/assets/maps/02_the_turn.png b/public/assets/maps/02_the_turn.png new file mode 100644 index 0000000..cd12c7c Binary files /dev/null and b/public/assets/maps/02_the_turn.png differ diff --git a/public/assets/maps/03_fork_in_the_road.png b/public/assets/maps/03_fork_in_the_road.png new file mode 100644 index 0000000..46a7266 Binary files /dev/null and b/public/assets/maps/03_fork_in_the_road.png differ diff --git a/public/assets/maps/04_crossroads.png b/public/assets/maps/04_crossroads.png new file mode 100644 index 0000000..d7d2993 Binary files /dev/null and b/public/assets/maps/04_crossroads.png differ diff --git a/public/assets/maps/05_the_maze.png b/public/assets/maps/05_the_maze.png new file mode 100644 index 0000000..63db43b Binary files /dev/null and b/public/assets/maps/05_the_maze.png differ diff --git a/public/assets/maps/06_multiple_fronts.png b/public/assets/maps/06_multiple_fronts.png new file mode 100644 index 0000000..bb81ed9 Binary files /dev/null and b/public/assets/maps/06_multiple_fronts.png differ diff --git a/public/assets/maps/mission_01.png b/public/assets/maps/mission_01.png index 6d14258..cd31cf8 100644 Binary files a/public/assets/maps/mission_01.png and b/public/assets/maps/mission_01.png differ diff --git a/public/assets/missions/01_first_steps.json b/public/assets/missions/01_first_steps.json new file mode 100644 index 0000000..6ace830 --- /dev/null +++ b/public/assets/missions/01_first_steps.json @@ -0,0 +1,76 @@ +{ + "name": "First Steps", + "description": "Welcome to your first defense mission. Protect the exit from basic invaders.", + "mapImage": { + "url": "/assets/maps/01_first_steps.png" + }, + "gameMap": { + "rows": 17, + "columns": 25, + "cells": [ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + ], + "paths": [ + [ + [8, 0], + [8, 1], + [8, 2], + [8, 3], + [8, 4], + [8, 5], + [8, 6], + [8, 7], + [8, 8], + [8, 9], + [8, 10], + [8, 11], + [8, 12], + [8, 13], + [8, 14], + [8, 15], + [8, 16], + [8, 17], + [8, 18], + [8, 19], + [8, 20], + [8, 21], + [8, 22], + [8, 23], + [8, 24] + ] + ] + }, + "rounds": [ + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 1000, + "creeps": [0, 0, 0] + }, + { + "firstCreepSpawnTick": 4000, + "spawnIntervalTicks": 1000, + "creeps": [0, 0, 0, 0] + } + ], + "offeredGems": [0, 1] + } + ] +} diff --git a/public/assets/missions/02_the_turn.json b/public/assets/missions/02_the_turn.json new file mode 100644 index 0000000..6e4e207 --- /dev/null +++ b/public/assets/missions/02_the_turn.json @@ -0,0 +1,99 @@ +{ + "name": "The Turn", + "description": "A winding path presents new defensive challenges. Watch out for quick enemies!", + "mapImage": { + "url": "/assets/maps/02_the_turn.png" + }, + "gameMap": { + "rows": 17, + "columns": 25, + "cells": [ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + ], + "paths": [ + [ + [4, 0], + [4, 1], + [4, 2], + [4, 3], + [4, 4], + [4, 5], + [4, 6], + [4, 7], + [4, 8], + [5, 8], + [6, 8], + [7, 8], + [8, 8], + [9, 8], + [10, 8], + [11, 8], + [12, 8], + [12, 9], + [12, 10], + [12, 11], + [12, 12], + [12, 13], + [12, 14], + [12, 15], + [12, 16], + [12, 17], + [12, 18], + [12, 19], + [12, 20], + [12, 21], + [12, 22], + [12, 23], + [12, 24] + ] + ] + }, + "rounds": [ + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 1000, + "creeps": [0, 0, 0, 0] + }, + { + "firstCreepSpawnTick": 5000, + "spawnIntervalTicks": 800, + "creeps": [1, 1, 1] + } + ], + "offeredGems": [0, 1] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 800, + "creeps": [0, 1, 0, 1, 0] + }, + { + "firstCreepSpawnTick": 5000, + "spawnIntervalTicks": 600, + "creeps": [1, 1, 1, 1] + } + ], + "offeredGems": [0, 1, 2] + } + ] +} diff --git a/public/assets/missions/03_fork_in_the_road.json b/public/assets/missions/03_fork_in_the_road.json new file mode 100644 index 0000000..ff4b9e7 --- /dev/null +++ b/public/assets/missions/03_fork_in_the_road.json @@ -0,0 +1,141 @@ +{ + "name": "Fork in the Road", + "description": "Multiple paths and heavily armored tank units test your defensive strategy.", + "mapImage": { + "url": "/assets/maps/03_fork_in_the_road.png" + }, + "gameMap": { + "rows": 17, + "columns": 25, + "cells": [ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + ], + "paths": [ + [ + [8, 0], + [8, 1], + [8, 2], + [8, 3], + [8, 4], + [8, 5], + [8, 6], + [8, 7], + [8, 8], + [7, 8], + [6, 8], + [5, 8], + [4, 8], + [4, 9], + [4, 10], + [4, 11], + [4, 12], + [4, 13], + [4, 14], + [4, 15], + [4, 16], + [4, 17], + [4, 18], + [4, 19], + [4, 20], + [4, 21], + [4, 22], + [4, 23], + [4, 24] + ], + [ + [8, 0], + [8, 1], + [8, 2], + [8, 3], + [8, 4], + [8, 5], + [8, 6], + [8, 7], + [8, 8], + [9, 8], + [10, 8], + [11, 8], + [12, 8], + [12, 9], + [12, 10], + [12, 11], + [12, 12], + [12, 13], + [12, 14], + [12, 15], + [12, 16], + [12, 17], + [12, 18], + [12, 19], + [12, 20], + [12, 21], + [12, 22], + [12, 23], + [12, 24] + ] + ] + }, + "rounds": [ + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 1000, + "creeps": [0, 0, 0, 0, 0] + }, + { + "firstCreepSpawnTick": 6000, + "spawnIntervalTicks": 800, + "creeps": [1, 1, 1, 1] + } + ], + "offeredGems": [0, 1, 2] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 900, + "creeps": [2, 0, 0, 2] + }, + { + "firstCreepSpawnTick": 5000, + "spawnIntervalTicks": 700, + "creeps": [1, 1, 2, 1, 1] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 800, + "creeps": [2, 1, 0, 2, 1, 0] + }, + { + "firstCreepSpawnTick": 6000, + "spawnIntervalTicks": 600, + "creeps": [2, 2, 1, 1, 2, 2] + } + ], + "offeredGems": [0, 1, 2, 3] + } + ] +} diff --git a/public/assets/missions/04_crossroads.json b/public/assets/missions/04_crossroads.json new file mode 100644 index 0000000..75f356f --- /dev/null +++ b/public/assets/missions/04_crossroads.json @@ -0,0 +1,191 @@ +{ + "name": "Crossroads", + "description": "Multiple entry points and intersecting paths require careful tower placement and strategy.", + "mapImage": { + "url": "/assets/maps/04_crossroads.png" + }, + "gameMap": { + "rows": 17, + "columns": 25, + "cells": [ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + ], + "paths": [ + [ + [0, 4], + [1, 4], + [2, 4], + [3, 4], + [4, 4], + [5, 4], + [6, 4], + [7, 4], + [8, 4], + [9, 4], + [10, 4], + [11, 4], + [12, 4], + [13, 4], + [14, 4], + [15, 4], + [16, 4], + [16, 5], + [16, 6], + [16, 7], + [16, 8], + [16, 9], + [16, 10], + [16, 11], + [16, 12], + [16, 13], + [16, 14], + [16, 15], + [16, 16], + [16, 17], + [16, 18], + [16, 19], + [16, 20], + [16, 21], + [16, 22], + [16, 23], + [16, 24] + ], + [ + [4, 0], + [4, 1], + [4, 2], + [4, 3], + [4, 4], + [4, 5], + [4, 6], + [4, 7], + [4, 8], + [4, 9], + [4, 10], + [4, 11], + [4, 12], + [4, 13], + [4, 14], + [4, 15], + [4, 16], + [4, 17], + [4, 18], + [4, 19], + [4, 20], + [4, 21], + [4, 22], + [4, 23], + [4, 24] + ], + [ + [0, 12], + [1, 12], + [2, 12], + [3, 12], + [4, 12], + [5, 12], + [6, 12], + [7, 12], + [8, 12], + [9, 12], + [10, 12], + [11, 12], + [12, 12], + [13, 12], + [14, 12], + [15, 12], + [16, 12], + [16, 13], + [16, 14], + [16, 15], + [16, 16], + [16, 17], + [16, 18], + [16, 19], + [16, 20], + [16, 21], + [16, 22], + [16, 23], + [16, 24] + ] + ] + }, + "rounds": [ + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 1000, + "creeps": [0, 0, 1, 0, 0] + }, + { + "firstCreepSpawnTick": 6000, + "spawnIntervalTicks": 800, + "creeps": [1, 1, 2, 1, 1] + } + ], + "offeredGems": [0, 1, 2] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 800, + "creeps": [2, 0, 2, 0, 2, 0] + }, + { + "firstCreepSpawnTick": 5000, + "spawnIntervalTicks": 600, + "creeps": [1, 2, 1, 2, 1, 2] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 700, + "creeps": [2, 1, 0, 2, 1, 0, 2] + }, + { + "firstCreepSpawnTick": 6000, + "spawnIntervalTicks": 500, + "creeps": [2, 2, 1, 1, 2, 2, 1] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 600, + "creeps": [2, 2, 2, 1, 1, 1, 0, 0] + }, + { + "firstCreepSpawnTick": 7000, + "spawnIntervalTicks": 400, + "creeps": [2, 2, 2, 2, 1, 1, 1, 1] + } + ], + "offeredGems": [0, 1, 2, 3] + } + ] +} diff --git a/public/assets/missions/05_the_maze.json b/public/assets/missions/05_the_maze.json new file mode 100644 index 0000000..7db8bb5 --- /dev/null +++ b/public/assets/missions/05_the_maze.json @@ -0,0 +1,202 @@ +{ + "name": "The Maze", + "description": "A complex network of paths requires masterful tower placement and timing.", + "mapImage": { + "url": "/assets/maps/05_the_maze.png" + }, + "gameMap": { + "rows": 17, + "columns": 25, + "cells": [ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + ], + "paths": [ + [ + [0, 3], + [1, 3], + [2, 3], + [3, 3], + [4, 3], + [4, 4], + [4, 5], + [4, 6], + [4, 7], + [4, 8], + [4, 9], + [4, 10], + [4, 11], + [4, 12], + [5, 12], + [6, 12], + [7, 12], + [8, 12], + [8, 13], + [8, 14], + [8, 15], + [8, 16], + [8, 17], + [8, 18], + [8, 19], + [8, 20], + [8, 21], + [8, 22], + [8, 23], + [8, 24] + ], + [ + [0, 8], + [1, 8], + [2, 8], + [3, 8], + [4, 8], + [5, 8], + [6, 8], + [7, 8], + [8, 8], + [9, 8], + [10, 8], + [11, 8], + [12, 8], + [12, 9], + [12, 10], + [12, 11], + [12, 12], + [12, 13], + [12, 14], + [12, 15], + [12, 16], + [12, 17], + [12, 18], + [12, 19], + [12, 20], + [12, 21], + [12, 22], + [12, 23], + [12, 24] + ], + [ + [0, 13], + [1, 13], + [2, 13], + [3, 13], + [4, 13], + [4, 14], + [4, 15], + [4, 16], + [4, 17], + [4, 18], + [4, 19], + [4, 20], + [5, 20], + [6, 20], + [7, 20], + [8, 20], + [9, 20], + [10, 20], + [11, 20], + [12, 20], + [13, 20], + [14, 20], + [15, 20], + [16, 20], + [16, 21], + [16, 22], + [16, 23], + [16, 24] + ] + ] + }, + "rounds": [ + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 800, + "creeps": [0, 1, 0, 1, 0, 1] + }, + { + "firstCreepSpawnTick": 5000, + "spawnIntervalTicks": 600, + "creeps": [1, 1, 2, 1, 1, 2] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 700, + "creeps": [2, 0, 2, 1, 2, 0, 2] + }, + { + "firstCreepSpawnTick": 6000, + "spawnIntervalTicks": 500, + "creeps": [2, 1, 2, 1, 2, 1, 2] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 600, + "creeps": [2, 2, 1, 1, 0, 2, 2, 1] + }, + { + "firstCreepSpawnTick": 6000, + "spawnIntervalTicks": 400, + "creeps": [2, 2, 2, 1, 1, 1, 2, 2] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 500, + "creeps": [2, 2, 1, 1, 2, 2, 1, 1, 2] + }, + { + "firstCreepSpawnTick": 7000, + "spawnIntervalTicks": 300, + "creeps": [2, 2, 2, 1, 1, 1, 2, 2, 2] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 400, + "creeps": [2, 2, 2, 2, 1, 1, 1, 1, 2, 2] + }, + { + "firstCreepSpawnTick": 8000, + "spawnIntervalTicks": 250, + "creeps": [2, 2, 2, 2, 2, 1, 1, 1, 1, 1] + } + ], + "offeredGems": [0, 1, 2, 3] + } + ] +} diff --git a/public/assets/missions/06_multiple_fronts.json b/public/assets/missions/06_multiple_fronts.json new file mode 100644 index 0000000..2de19b2 --- /dev/null +++ b/public/assets/missions/06_multiple_fronts.json @@ -0,0 +1,221 @@ +{ + "name": "Multi-Defense", + "description": "Multiple exits must be defended simultaneously against increasingly difficult waves.", + "mapImage": { + "url": "/assets/maps/06_multiple_fronts.png" + }, + "gameMap": { + "rows": 17, + "columns": 25, + "cells": [ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] + ], + "paths": [ + [ + [8, 0], + [8, 1], + [8, 2], + [8, 3], + [8, 4], + [8, 5], + [8, 6], + [8, 7], + [8, 8], + [7, 8], + [6, 8], + [5, 8], + [4, 8], + [4, 9], + [4, 10], + [4, 11], + [4, 12], + [4, 13], + [4, 14], + [4, 15], + [4, 16], + [4, 17], + [4, 18], + [4, 19], + [4, 20], + [4, 21], + [4, 22], + [4, 23], + [4, 24] + ], + [ + [8, 0], + [8, 1], + [8, 2], + [8, 3], + [8, 4], + [8, 5], + [8, 6], + [8, 7], + [8, 8], + [9, 8], + [10, 8], + [11, 8], + [12, 8], + [12, 9], + [12, 10], + [12, 11], + [12, 12], + [12, 13], + [12, 14], + [12, 15], + [12, 16], + [12, 17], + [12, 18], + [12, 19], + [12, 20], + [12, 21], + [12, 22], + [12, 23], + [12, 24] + ], + [ + [0, 8], + [1, 8], + [2, 8], + [3, 8], + [4, 8], + [5, 8], + [6, 8], + [7, 8], + [8, 8], + [9, 8], + [10, 8], + [11, 8], + [12, 8], + [13, 8], + [14, 8], + [15, 8], + [16, 8], + [16, 9], + [16, 10], + [16, 11], + [16, 12], + [16, 13], + [16, 14], + [16, 15], + [16, 16], + [16, 17], + [16, 18], + [16, 19], + [16, 20], + [16, 21], + [16, 22], + [16, 23], + [16, 24] + ] + ] + }, + "rounds": [ + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 700, + "creeps": [0, 1, 0, 1, 0, 1, 0] + }, + { + "firstCreepSpawnTick": 5000, + "spawnIntervalTicks": 500, + "creeps": [1, 1, 2, 1, 1, 2, 1] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 600, + "creeps": [2, 1, 2, 1, 2, 1, 2, 1] + }, + { + "firstCreepSpawnTick": 6000, + "spawnIntervalTicks": 400, + "creeps": [2, 2, 1, 1, 2, 2, 1, 1] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 500, + "creeps": [2, 2, 1, 1, 2, 2, 1, 1, 2] + }, + { + "firstCreepSpawnTick": 6000, + "spawnIntervalTicks": 300, + "creeps": [2, 2, 2, 1, 1, 1, 2, 2, 2] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 400, + "creeps": [2, 2, 2, 1, 1, 1, 2, 2, 2, 1] + }, + { + "firstCreepSpawnTick": 7000, + "spawnIntervalTicks": 250, + "creeps": [2, 2, 2, 2, 1, 1, 1, 1, 2, 2] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 300, + "creeps": [2, 2, 2, 2, 1, 1, 1, 1, 2, 2, 2] + }, + { + "firstCreepSpawnTick": 7000, + "spawnIntervalTicks": 200, + "creeps": [2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2] + } + ], + "offeredGems": [0, 1, 2, 3] + }, + { + "waves": [ + { + "firstCreepSpawnTick": 500, + "spawnIntervalTicks": 250, + "creeps": [2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2] + }, + { + "firstCreepSpawnTick": 8000, + "spawnIntervalTicks": 150, + "creeps": [2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1] + } + ], + "offeredGems": [0, 1, 2, 3] + } + ] +} diff --git a/public/maps.tiled-session b/public/maps.tiled-session index abcd439..41809c3 100644 --- a/public/maps.tiled-session +++ b/public/maps.tiled-session @@ -3,8 +3,10 @@ "height": 4300, "width": 2 }, - "activeFile": "Mission011.tmx", + "activeFile": "tiled/02_the_turn.tmx", "expandedProjectPaths": [ + "assets/missions", + "tiled", "." ], "file.lastUsedOpenFilter": "All Files (*)", @@ -16,7 +18,7 @@ "scaleInDock": 0.33, "scaleInEditor": 1 }, - "/home/koneko/dumping/tiles/TiledTDThree64.tmx": { + "C:/home/koneko/dumping/tiles/TiledTDThree64.tmx": { "scale": 0.187625, "selectedLayer": 0, "viewCenter": { @@ -36,13 +38,61 @@ "scale": 0.5, "selectedLayer": 0, "viewCenter": { - "x": 570, - "y": 448 + "x": 959, + "y": 543 } }, "Tileset.tsx": { "scaleInDock": 0.5, "scaleInEditor": 1 + }, + "tiled/01_first_steps.tmx": { + "scale": 1.6494375, + "selectedLayer": 0, + "viewCenter": { + "x": 799.9696866355956, + "y": 544.1248910613466 + } + }, + "tiled/02_the_turn.tmx": { + "scale": 1.6494375, + "selectedLayer": 0, + "viewCenter": { + "x": 799.9696866355956, + "y": 544.1248910613466 + } + }, + "tiled/03_fork_in_the_road.tmx": { + "scale": 1.6494375, + "selectedLayer": 0, + "viewCenter": { + "x": 799.9696866355956, + "y": 544.1248910613466 + } + }, + "tiled/04_crossroads.tmx": { + "scale": 1.6494375, + "selectedLayer": 0, + "viewCenter": { + "x": 799.9696866355956, + "y": 544.1248910613466 + } + }, + "tiled/05_the_maze.tmx": { + "scale": 1.6494375, + "selectedLayer": 0, + "viewCenter": { + "x": 799.9696866355956, + "y": 544.1248910613466 + } + }, + "tiled/Mission01.tmx": { + "scale": 0.5, + "selectedLayer": 0, + "viewCenter": { + "x": 799, + "y": 543 + } } }, "last.externalTilesetPath": "/home/koneko/Programing/js/towerdefense/public", @@ -50,17 +100,22 @@ "map.lastUsedFormat": "tmx", "map.tileHeight": 64, "map.tileWidth": 64, - "map.width": 30, + "map.width": 25, "openFiles": [ - "Tileset.tsx", - "Mission011.tmx" + "Mission011.tmx", + "tiled/Mission01.tmx", + "tiled/02_the_turn.tmx", + "tiled/01_first_steps.tmx" ], "project": "maps.tiled-project", "recentFiles": [ - "Tileset.tsx", "Mission011.tmx", + "tiled/Mission01.tmx", + "tiled/01_first_steps.tmx", + "tiled/02_the_turn.tmx", + "Tileset.tsx", "Mission01.tmx", - "/home/koneko/dumping/tiles/TiledTDThree64.tmx" + "C:/home/koneko/dumping/tiles/TiledTDThree64.tmx" ], "tileset.lastUsedFilter": "Tiled tileset files (*.tsx *.xml)" } diff --git a/public/tiled/01_first_steps.tmx b/public/tiled/01_first_steps.tmx new file mode 100644 index 0000000..fd54ac7 --- /dev/null +++ b/public/tiled/01_first_steps.tmx @@ -0,0 +1,25 @@ + + + + + +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + + + \ No newline at end of file diff --git a/public/tiled/02_the_turn.tmx b/public/tiled/02_the_turn.tmx new file mode 100644 index 0000000..bc35bf9 --- /dev/null +++ b/public/tiled/02_the_turn.tmx @@ -0,0 +1,25 @@ + + + + + +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,18,18,18,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + + + \ No newline at end of file diff --git a/public/tiled/03_fork_in_the_road.tmx b/public/tiled/03_fork_in_the_road.tmx new file mode 100644 index 0000000..330bcc7 --- /dev/null +++ b/public/tiled/03_fork_in_the_road.tmx @@ -0,0 +1,25 @@ + + + + + +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,18,18,18,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + + + \ No newline at end of file diff --git a/public/tiled/04_crossroads.tmx b/public/tiled/04_crossroads.tmx new file mode 100644 index 0000000..e7082d2 --- /dev/null +++ b/public/tiled/04_crossroads.tmx @@ -0,0 +1,25 @@ + + + + + +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,18,18,18,18,18,18,18,18,18 + + + \ No newline at end of file diff --git a/public/tiled/05_the_maze.tmx b/public/tiled/05_the_maze.tmx new file mode 100644 index 0000000..e5e0771 --- /dev/null +++ b/public/tiled/05_the_maze.tmx @@ -0,0 +1,25 @@ + + + + + +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,18,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,18,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,18,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,18,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,18,18,18,18,18, +15,15,15,15,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,15,15,15,15 + + + \ No newline at end of file diff --git a/public/tiled/06_multiple_fronts.tmx b/public/tiled/06_multiple_fronts.tmx new file mode 100644 index 0000000..051a5d0 --- /dev/null +++ b/public/tiled/06_multiple_fronts.tmx @@ -0,0 +1,25 @@ + + + + + +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,18,18,18,18,18,18,18,18,18, +15,15,15,15,15,15,15,15,15,15,15,15,18,15,15,15,18,15,15,15,15,15,15,15,15 + + + \ No newline at end of file diff --git a/public/tiled/Mission01.tmx b/public/tiled/Mission01.tmx new file mode 100644 index 0000000..17914fa --- /dev/null +++ b/public/tiled/Mission01.tmx @@ -0,0 +1,25 @@ + + + + + +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15, +4,4,4,4,4,4,4,4,4,4,4,4,4,5,15,15,15,15,15,15,15,15,15,15,15, +18,18,18,18,18,18,18,18,18,18,18,18,18,19,15,15,15,15,15,3,4,4,4,4,4, +32,32,32,32,32,32,32,32,32,32,32,7,18,19,15,15,15,15,15,17,18,18,18,18,18, +15,15,15,15,15,15,15,15,15,15,15,17,18,19,15,15,15,15,15,17,18,6,32,32,32, +15,15,15,15,15,15,15,15,15,15,15,17,18,19,15,15,15,15,15,17,18,19,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,17,18,19,15,15,15,15,15,17,18,19,15,15,15, +15,15,3,4,4,4,4,4,4,4,4,21,18,19,15,15,15,15,15,17,18,19,15,15,15, +15,15,17,18,18,18,18,18,18,18,18,18,18,19,15,15,15,15,15,17,18,19,15,15,15, +15,15,17,18,6,32,32,32,32,32,32,32,32,33,15,15,15,15,15,17,18,19,15,15,15, +15,15,17,18,19,15,15,15,15,15,15,15,15,15,15,15,15,15,15,17,18,19,15,15,15, +15,15,17,18,20,4,4,4,4,4,4,4,4,4,4,4,4,4,4,21,18,19,15,15,15, +15,15,17,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,15,15,15, +15,15,31,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,33,15,15,15, +15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15 + + + diff --git a/src/classes/Assets.ts b/src/classes/Assets.ts index ea3f2c5..1abebbf 100644 --- a/src/classes/Assets.ts +++ b/src/classes/Assets.ts @@ -35,7 +35,7 @@ export default class GameAssets { public static PlusIconTexture: PIXI.Texture; public static GemAmountIcons: PIXI.Texture[] = []; - public static Missions: MissionDefinition[]; + public static Missions: MissionDefinition[] = []; public static MissionBackgrounds: PIXI.Texture[] = []; public static Towers: TowerDefinition[]; public static Creeps: CreepDefinition[]; @@ -152,7 +152,13 @@ export default class GameAssets { private static async LoadMissions() { // When adding missions, make sure to keep order. - GameAssets.Missions = [await this.LoadMission('./assets/missions/mission_01.json')]; + await this.LoadMission('./assets/missions/mission_01.json'); + await this.LoadMission('./assets/missions/01_first_steps.json'); + await this.LoadMission('./assets/missions/02_the_turn.json'); + await this.LoadMission('./assets/missions/03_fork_in_the_road.json'); + await this.LoadMission('./assets/missions/04_crossroads.json'); + await this.LoadMission('./assets/missions/05_the_maze.json'); + await this.LoadMission('./assets/missions/06_multiple_fronts.json'); } private static async LoadTowers() { @@ -172,13 +178,8 @@ export default class GameAssets { private static async LoadMission(missionUrl: string) { const res = await fetch(missionUrl); const mission = await res.json(); - await this.LoadBackground(mission.mapImage.url); - return mission; - } - - private static async LoadBackground(backgroundUrl: string) { - let index = this.MissionBackgrounds.length - 1; - if (index == -1) index = 0; - this.MissionBackgrounds[index] = await this.Load(backgroundUrl); + console.log(`Loading mission: ${missionUrl} [${mission.name} / ${mission.mapImage.url}]`); + GameAssets.Missions.push(mission); + GameAssets.MissionBackgrounds.push(await this.Load(mission.mapImage.url)); } } diff --git a/src/classes/gui/HighScoreDialog.ts b/src/classes/gui/HighScoreDialog.ts index 082631a..6a3220b 100644 --- a/src/classes/gui/HighScoreDialog.ts +++ b/src/classes/gui/HighScoreDialog.ts @@ -13,12 +13,18 @@ export default class HighScoreDialog extends ModalDialogBase { private dialogCaption: PIXI.Text; private highScore: HighScoreManager; - constructor(missionName: string, nextMissionAvailable: boolean) { + constructor(missionName: string, retryPossible: boolean, nextMissionAvailable: boolean) { super( - nextMissionAvailable - ? [HighScoreDialogButtons.Retry, HighScoreDialogButtons.NextMission, HighScoreDialogButtons.MainMenu] - : [HighScoreDialogButtons.Retry, HighScoreDialogButtons.MainMenu], - nextMissionAvailable ? HighScoreDialogButtons.NextMission : HighScoreDialogButtons.Retry, + [ + ...(retryPossible ? [HighScoreDialogButtons.Retry] : []), + ...(nextMissionAvailable ? [HighScoreDialogButtons.NextMission] : []), + HighScoreDialogButtons.MainMenu, + ], + retryPossible + ? HighScoreDialogButtons.Retry + : nextMissionAvailable + ? HighScoreDialogButtons.NextMission + : HighScoreDialogButtons.MainMenu, HighScoreDialogButtons.MainMenu ); this.highScore = new HighScoreManager(missionName); diff --git a/src/scenes/Game.ts b/src/scenes/Game.ts index 92d90f6..3ad74e3 100644 --- a/src/scenes/Game.ts +++ b/src/scenes/Game.ts @@ -247,7 +247,11 @@ export class GameScene extends Scene { private async ShowEndgameDialog(lost) { const endGameDialog = new EndGameDialog(this.mission.name, this.MissionStats, lost); await endGameDialog.show(); - const highScore = new HighScoreDialog(this.mission.name, this.missionIndex + 1 < GameAssets.Missions.length); + const highScore = new HighScoreDialog( + this.mission.name, + lost, + !lost && this.missionIndex + 1 < GameAssets.Missions.length + ); const result = await highScore.show(); if (result === HighScoreDialogButtons.MainMenu) { this.ReturnToMain();