From efa24ec4b3f62107df1dda42946275aa5e397dfd Mon Sep 17 00:00:00 2001 From: Brian Fertig Date: Sun, 27 Jul 2025 18:15:08 -0600 Subject: [PATCH] Dungeon Boss --- src/scenes/NNDungeon.js | 57 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/src/scenes/NNDungeon.js b/src/scenes/NNDungeon.js index 6bf1321..5ac7008 100644 --- a/src/scenes/NNDungeon.js +++ b/src/scenes/NNDungeon.js @@ -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)