/****
* Classes
****/
// Define an Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyBody = self.attachAsset('enemyBody', {
anchorX: 0.5,
anchorY: 0.5
});
var enemyArms = self.attachAsset('enemyArms', {
anchorX: 0.5,
anchorY: 0.5
});
var enemyLegs = self.attachAsset('enemyLegs', {
anchorX: 0.5,
anchorY: 0.5
});
var enemyHead = self.attachAsset('enemyHead', {
anchorX: 0.5,
anchorY: 0.5
});
enemyArms.y = -enemyBody.height / 4;
enemyLegs.y = enemyBody.height / 2;
enemyHead.y = -enemyBody.height / 2;
self.speed = 6;
self.update = function () {
// Calculate the direction vector between enemy and NPCs
var dxNpc = 0;
var dyNpc = 0;
var closestNpc = null;
var closestDistance = Infinity;
for (var i = 0; i < npcs.length; i++) {
var dx = npcs[i].x - self.x;
var dy = npcs[i].y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < closestDistance) {
closestNpc = npcs[i];
closestDistance = distance;
}
}
if (closestNpc) {
dxNpc = closestNpc.x - self.x;
dyNpc = closestNpc.y - self.y;
var magnitudeNpc = Math.sqrt(dxNpc * dxNpc + dyNpc * dyNpc);
// Normalize the direction vector
dxNpc /= magnitudeNpc;
dyNpc /= magnitudeNpc;
// Move the enemy towards the closest NPC
self.x += dxNpc * self.speed;
self.y += dyNpc * self.speed;
} else {
// Calculate the direction vector between enemy and player
var dxPlayer = player.x - self.x;
var dyPlayer = player.y - self.y;
var magnitudePlayer = Math.sqrt(dxPlayer * dxPlayer + dyPlayer * dyPlayer);
// Normalize the direction vector
dxPlayer /= magnitudePlayer;
dyPlayer /= magnitudePlayer;
// Move the enemy towards the player
self.x += dxPlayer * self.speed;
self.y += dyPlayer * self.speed;
}
};
});
// Define a MenuScreen class
var MenuScreen = Container.expand(function () {
var self = Container.call(this);
// Create a button for each game mode
var easyModeButton = new Text2('EASY MODE', {
size: 100,
fill: 0x00FF00
});
easyModeButton.anchor.set(0.5, 0.5);
easyModeButton.x = 2048 / 2;
easyModeButton.y = 2732 / 2.2;
self.addChild(easyModeButton);
var mode2Button = new Text2('NIGHTMARE MODE', {
size: 100,
fill: 0xFF0000
});
mode2Button.y = 2732 / 1.7;
mode2Button.anchor.set(0.5, 0.5);
mode2Button.x = 2048 / 2;
self.addChild(mode2Button);
var mode1Button = new Text2('Normal Mode', {
size: 100,
fill: 0xFFFFFF
});
mode1Button.anchor.set(0.5, 0.5);
mode1Button.x = 2048 / 2;
mode1Button.y = (easyModeButton.y + mode2Button.y) / 2;
self.addChild(mode1Button);
// Add event listener to easy mode button
easyModeButton.down = function () {
self.destroy(); // Remove menu screen
initializeGame('easy'); // Start the game in easy mode
};
// Add event listeners to mode buttons
mode1Button.down = function () {
self.destroy(); // Remove menu screen
initializeGame('mode1'); // Start the game in mode 1
};
mode2Button.down = function () {
self.destroy(); // Remove menu screen
initializeGame('mode2'); // Start the game in mode 2
};
});
// Define a NPC class
var NPC = Container.expand(function () {
var self = Container.call(this);
var npcHead = self.attachAsset('playerHead', {
anchorX: 0.5,
anchorY: 0.5
});
npcHead.y = -80;
var npcBody = self.attachAsset('playerBody', {
anchorX: 0.5,
anchorY: 0.5
});
var npcArms = self.attachAsset('playerArms', {
anchorX: 0.5,
anchorY: 0.5
});
npcArms.y = -30;
var npcLegs = self.attachAsset('playerLegs', {
anchorX: 0.5,
anchorY: 0.5
});
npcLegs.y = 40;
self.speed = 4;
self.update = function () {
// Randomly change direction every 60 frames
if (LK.ticks % 60 == 0) {
self.direction = Math.random() * Math.PI * 2;
}
// Calculate dx and dy based on the current direction
var dx = Math.cos(self.direction);
var dy = Math.sin(self.direction);
// Move the NPC
self.x += dx * self.speed;
self.y += dy * self.speed;
// Ensure NPC stays within game boundaries
if (self.x < 0) {
self.x = 0;
self.direction = Math.PI - self.direction;
}
if (self.x > 2048) {
self.x = 2048;
self.direction = Math.PI - self.direction;
}
if (self.y < 0) {
self.y = 0;
self.direction = -self.direction;
}
if (self.y > 2732) {
self.y = 2732;
self.direction = -self.direction;
}
};
});
//<Assets used in the game will automatically appear here>
// Define a Player class
var Player = Container.expand(function () {
var self = Container.call(this);
var playerHead = self.attachAsset('playerHead', {
anchorX: 0.5,
anchorY: 0.5
});
playerHead.y = -80;
var playerBody = self.attachAsset('playerBody', {
anchorX: 0.5,
anchorY: 0.5
});
var playerArms = self.attachAsset('playerArms', {
anchorX: 0.5,
anchorY: 0.5
});
playerArms.y = -30;
var playerLegs = self.attachAsset('playerLegs', {
anchorX: 0.5,
anchorY: 0.5
});
playerLegs.y = 40;
self.speed = 5;
self.update = function () {
// Player update logic
};
});
// Define a StartScreen class
var StartScreen = Container.expand(function () {
var self = Container.call(this);
// Create a title text for the start screen
var titleText = new Text2('NIGHT OF THE MASSACRE 2', {
size: 150,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 2732 / 4;
self.addChild(titleText);
// Create a start game button
var startButton = new Text2('Start Game', {
size: 150,
fill: 0x00FF00
});
startButton.anchor.set(0.5, 0.5);
startButton.x = 2048 / 2;
startButton.y = 2732 / 2;
self.addChild(startButton);
// Add event listener to start button
startButton.down = function () {
self.destroy(); // Remove start screen
var menuScreen = game.addChild(new MenuScreen()); // Show game mode selection
};
});
// Add the start screen to the game
// Define a Tree class
var Tree = Container.expand(function () {
var self = Container.call(this);
var treeTrunk = self.attachAsset('treeTrunk', {
anchorX: 0.5,
anchorY: 1
});
var treeLeaves = self.attachAsset('treeLeaves', {
anchorX: 0.5,
anchorY: 1
});
treeLeaves.y = -treeTrunk.height;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x0000FF //Init game with blue background
});
/****
* Game Code
****/
var enemies = [];
var player = null;
var npcs = [];
// Add the start screen to the game
var startScreen = game.addChild(new StartScreen());
var timerText;
function initializeGame(mode) {
// Initialize and display the timer
timerText = new Text2('Time: 00:00', {
size: 100,
fill: 0xFFFFFF
});
timerText.anchor.set(0.5, 0);
LK.gui.top.addChild(timerText);
var startTime = Date.now();
LK.setInterval(function () {
var elapsedTime = Math.floor((Date.now() - startTime) / 1000);
var minutes = Math.floor(elapsedTime / 60);
var seconds = elapsedTime % 60;
var formattedTime = minutes.toString().padStart(2, '0') + ':' + seconds.toString().padStart(2, '0');
timerText.setText('Time: ' + formattedTime);
// End the game when the timer reaches 06:00
if (formattedTime === '06:00') {
LK.showGameOver();
}
}, 1000);
console.log("Selected Game Mode:", mode);
if (mode === 'mode2') {
game.setBackgroundColor(0x8B0000); // Set background to dark red for NIGHTMARE MODE
} else if (mode === 'easy') {
game.setBackgroundColor(0x00FF00); // Set background to green for EASY MODE
}
// Initialize player
player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 - 150;
// Initialize enemies
var enemy = new Enemy();
enemy.x = Math.random() * 2048;
enemy.y = Math.random() * 1000;
if (mode === 'mode2') {
enemy.speed *= 1.5; // Increase enemy speed by 50% in NIGHTMARE MODE
} else if (mode === 'easy') {
enemy.speed *= 0.5; // Decrease enemy speed by 50% in EASY MODE
}
enemies.push(enemy);
game.addChild(enemy);
// Initialize 30 trees and spread them across the game
var trees = [];
for (var i = 0; i < 30; i++) {
var tree = game.addChild(new Tree());
tree.x = Math.random() * 2048;
tree.y = Math.random() * 2732;
trees.push(tree);
}
// Initialize NPCs
for (var i = 0; i < 20; i++) {
var npc = game.addChild(new NPC());
npc.x = Math.random() * 2048;
npc.y = Math.random() * 2732;
npc.direction = Math.random() * Math.PI * 2; // Initialize random direction
npcs.push(npc);
}
}
// Handle player movement
game.move = function (x, y, obj) {
if (player) {
player.x = x;
player.y = y;
}
};
// Handle shooting
game.down = function (x, y, obj) {
if (player) {
// Logic for player action on down event, if needed
}
};
// Game update loop
game.update = function () {
// Update enemies
for (var i = 0; i < enemies.length; i++) {
enemies[i].update();
if (player.intersects(enemies[i])) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
// Check if any NPC intersects with enemy
for (var j = npcs.length - 1; j >= 0; j--) {
if (npcs[j] && npcs[j].intersects(enemies[i])) {
npcs[j].destroy(); // Destroy NPC
npcs.splice(j, 1); // Remove NPC from array
}
}
}
};