Dungeon Boss

This commit is contained in:
Brian Fertig 2025-07-27 18:15:08 -06:00
parent 0232ab5eac
commit efa24ec4b3
1 changed files with 53 additions and 4 deletions

View File

@ -29,6 +29,10 @@ export class NNDungeon extends Phaser.Scene {
frameWidth: 100,
frameHeight: 100
});
this.load.spritesheet('99Dungeon-tiles', 'assets/dungeon-tiles.png', {
frameWidth: 100,
frameHeight: 100
});
this.load.audio('gulchMusic', 'assets/music/gulch.mp3');
this.load.audio('gunShot', 'assets/sounds/gun-shot.mp3');
@ -44,16 +48,18 @@ export class NNDungeon extends Phaser.Scene {
// Load the map and tileset
const NNDungeonMap = this.make.tilemap({ key: 'NNDungeonMap' });
const dungeonTiles = NNDungeonMap.addTilesetImage('dungeon-tiles', 'dungeon-tiles');
//const NNTiles = NNDungeonMap.addTilesetImage('99boy-tiles', '99boy-tiles');
const NNTiles = NNDungeonMap.addTilesetImage('99boy-tiles', '99boy-tiles');
const mainLayer = NNDungeonMap.createLayer('main', dungeonTiles, 0, 0)
.setCollisionByProperty({ collides: true });
const objectsLayer = NNDungeonMap.createLayer('objects', dungeonTiles, 0, 0)
.setCollisionByProperty({ collides: true });
const enemiesLayer = NNDungeonMap.getObjectLayer('enemies');
const interactiveLayer = NNDungeonMap.getObjectLayer('interactive');
//const zoneLayer = gulchMap.getObjectLayer('zone');
// Add a player
this.player = new Player(this, 2400, 3450);
//this.player = new Player(this, 3550, 350);
this.player.healthBars(true, 1, 3);
// zoneLayer.objects.forEach(object => {
@ -63,13 +69,28 @@ export class NNDungeon extends Phaser.Scene {
// }
// });
// Add Interactive
this.interactive = this.physics.add.group();
interactiveLayer.objects.forEach(object => {
if (object.gid) {
let inter = this.interactive.create(object.x+50, object.y-50, '99Dungeon-tiles', object.gid-1);
inter.properties = object.properties;
} else {
let inter = this.physics.add.existing(this.add.rectangle(object.x, object.y, object.width, object.height));
this.interactive.add(inter);
if (object.properties) {
inter.properties = object.properties;
}
}
});
// Add Enemies
this.enemies = this.physics.add.group({
classType: NNBoy,
runChildUpdate: true
});
enemiesLayer.objects.forEach(object => {
let a99Boy = this.enemies.create(object.x-50, object.y-50, '99boy-tiles', object.gid-101);
let a99Boy = this.enemies.create(object.x-50, object.y-50, '99boy-tiles', object.gid-201);
if (object.properties) {
object.properties.forEach(prop => {
if (prop.name === 'patrolX') {
@ -83,9 +104,9 @@ export class NNDungeon extends Phaser.Scene {
if (prop.name === 'patrolY') {
let to = object.y + prop.value;
if (to < object.y) {
a99Boy.setPatrolY(to, object.y);
a99Boy.setPatrolY(to-100, object.y-100);
} else {
a99Boy.setPatrolY(object.y, to);
a99Boy.setPatrolY(object.y-100, to-100);
}
}
if (prop.name === 'fire') {
@ -102,6 +123,12 @@ export class NNDungeon extends Phaser.Scene {
a99Boy.bottleReload = 2000;
a99Boy.bottleReloadVariance = 500;
}
if (prop.name === 'NNBoss' && prop.value === true) {
a99Boy.setScale(2.5);
}
if (prop.name === 'health') {
a99Boy.health = prop.value;
}
});
}
});
@ -119,6 +146,7 @@ export class NNDungeon extends Phaser.Scene {
this.physics.add.collider(this.player, objectsLayer);
this.physics.add.collider(this.enemies, mainLayer);
this.physics.add.collider(this.enemies, objectsLayer);
this.physics.add.collider(this.player, this.interactive, touchInteractive);
this.physics.add.collider(this.player, this.enemies, (player, enemy) => {
player.takeDamage();
});
@ -126,6 +154,27 @@ export class NNDungeon extends Phaser.Scene {
// console.log('Hit');
// });
function touchInteractive(player, interactive) {
interactive.properties.forEach(prop => {
if (prop.name === 'key' && prop.value === true) {
player.addItemToInventory('key');
interactive.destroy();
}
if (prop.name === 'lock' && prop.value === true) {
if (player.hasItem('key')) {
player.removeItemFromInventory('key');
let checkTiles = objectsLayer.getTilesWithin(interactive.x/100-5, interactive.y/100-5, 15, 15);
checkTiles.forEach(frameTile => {
if (frameTile.properties.lockedDoor === true) {
objectsLayer.removeTileAt(frameTile.x, frameTile.y);
}
interactive.destroy();
});
}
}
});
};
// Collision between bullets and enemies
this.physics.add.collider(this.bullets, this.enemies, (bullet, enemy) => {
// Handle collision here (e.g., damage the enemy or destroy the bullet)