User prompt
make the NIGHTMARE MODE font to red
User prompt
when the NIGHTMARE MODE selected, change the background to red and make the enemy faster
User prompt
make the time attack mode write to NIGHTMARE MODE
User prompt
decrese enemy to 1 when the survival mode selected
User prompt
when the nightmare mode selected, make the background red and make the enemy faster
User prompt
make the time attack selection writing to become NIGHTMARE MODE
User prompt
make the survival mode to become a classic gameplay
User prompt
make the clock stop when the game mode not selected
User prompt
make the player cannot move when the game mode not started
User prompt
make all NPC cannot move when the game mode not selected
User prompt
add the become enemy gamemode
User prompt
make the time stop when the game mode not selected
User prompt
make the player cannot move when the game mode not selected
User prompt
make the enemy, player, and NPC stop when the game didnt chosen
User prompt
add a gamemode chosing when the start game clicked
User prompt
publish this game
User prompt
change the game name
User prompt
change the community name
User prompt
make the asset YOUWIN looks like helicopter
User prompt
make the YOUWIN asset appear when the clock is 06:00
User prompt
move the YOU WIN letter at the bottom of the screen
User prompt
add a YOU WIN letter when YOU WIN displayed
User prompt
make the player and enemy and NPC stop moving when the YOU WIN displayed
User prompt
if the clock is 00:10, give a YOU WIN screen
User prompt
make the NPC speed to same as enemy
/****
* Classes
****/
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
// Attach head
var head = self.attachAsset('enemyHead', {
anchorX: 0.5,
anchorY: 0.5,
y: -70
});
// Attach body
var body = self.attachAsset('enemyBody', {
anchorX: 0.5,
anchorY: 0.5
});
// Attach arms
var leftArm = self.attachAsset('enemyArm', {
anchorX: 0.5,
anchorY: 0.5,
x: -45,
y: -20
});
var rightArm = self.attachAsset('enemyArm', {
anchorX: 0.5,
anchorY: 0.5,
x: 45,
y: -20
});
// Attach legs
var leftLeg = self.attachAsset('enemyLeg', {
anchorX: 0.5,
anchorY: 0.5,
x: -20,
y: 60
});
var rightLeg = self.attachAsset('enemyLeg', {
anchorX: 0.5,
anchorY: 0.5,
x: 20,
y: 60
});
self.tired = false;
self.energy = 100; // Initial energy level
self.update = function () {
// Decrease energy over time
self.energy -= 0.1; // Decrease energy over time
if (self.energy <= 0) {
self.tired = true; // Set tired state when energy is depleted
}
// Logic to make the enemy slow down when tired
if (self.tired) {
speed = 3; // Reduce speed when tired
}
// Enemy movement logic to chase the player or NPCs
if (!menuScreen.visible && game.currentMode) {
var target = player;
var minDistance = Math.sqrt(Math.pow(player.x - self.x, 2) + Math.pow(player.y - self.y, 2));
// Find the closest NPC
for (var i = 0; i < npcs.length; i++) {
var npc = npcs[i];
var npcDistance = Math.sqrt(Math.pow(npc.x - self.x, 2) + Math.pow(npc.y - self.y, 2));
if (npcDistance < minDistance) {
minDistance = npcDistance;
target = npc;
}
}
var dx = target.x - self.x;
var dy = target.y - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
var speed = game.currentMode === 'timeAttack' ? 30 : 20; // Increase speed in NIGHTMARE MODE
if (distance > 0) {
var newX = self.x + dx / distance * speed;
var newY = self.y + dy / distance * speed;
// Check if the new position would intersect with the house
self.x = newX;
self.y = newY;
if (self.intersects(house)) {
if (Math.abs(dx) > Math.abs(dy)) {
self.y += (dy > 0 ? 1 : -1) * speed;
} else {
self.x += (dx > 0 ? 1 : -1) * speed;
}
}
}
}
};
});
// Generator class
var Generator = Container.expand(function () {
var self = Container.call(this);
var generatorGraphic = self.attachAsset('playerBody', {
anchorX: 0.5,
anchorY: 0.5
});
self.isOn = false; // Initial state of the generator
self.energy = 100; // Initial energy level of the generator
self.toggle = function () {
self.isOn = !self.isOn;
console.log("Generator is now " + (self.isOn ? "ON" : "OFF"));
if (self.isOn && self.energy > 0) {
self.energy -= 0.1; // Decrease energy over time
console.log("Generator energy: " + self.energy.toFixed(1) + "/100");
if (self.energy <= 0) {
self.isOn = false; // Turn off the generator when energy is depleted
console.log("Generator is now OFF due to energy depletion");
}
}
};
self.update = function () {
if (self.isOn && self.energy > 0) {
self.energy -= 0.1; // Decrease energy over time
console.log("Generator energy: " + self.energy.toFixed(1) + "/100");
if (self.energy <= 0) {
self.isOn = false; // Turn off the generator when energy is depleted
console.log("Generator is now OFF due to energy depletion");
}
}
};
});
// House class
var House = Container.expand(function () {
var self = Container.call(this);
var houseBase = self.attachAsset('houseBase', {
anchorX: 0.5,
anchorY: 0.5
});
var houseRoof = self.attachAsset('houseRoof', {
anchorX: 0.5,
anchorY: 1.0,
y: -75
});
// Attach door
var houseDoor = self.attachAsset('houseBase', {
anchorX: 0.5,
anchorY: 0.5,
width: 80,
height: 150,
color: 0x654321,
y: 75
});
});
// Joystick class
var Joystick = Container.expand(function () {
var self = Container.call(this);
var joystickButton = self.attachAsset('joystickButton', {
anchorX: 0.5,
anchorY: 0.5
});
self.active = false;
self.startX = 0;
self.startY = 0;
self.down = function (x, y, obj) {
self.active = true;
self.startX = x;
self.startY = y;
};
self.move = function (x, y, obj) {
if (self.active) {
var dx = x - self.startX;
var dy = y - self.startY;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
var speed = 5; // Adjust speed as necessary
player.x += dx / distance * speed;
player.y += dy / distance * speed;
}
self.startX = x;
self.startY = y;
}
};
self.up = function (x, y, obj) {
self.active = false;
};
});
// MenuScreen class
var MenuScreen = Container.expand(function () {
var self = Container.call(this);
var titleText = new Text2('Night of the Massacre', {
size: 150,
fill: "#ff0000",
// Change color to red for a scarier look
font: "'Creepster', 'Arial Black', Tahoma" // Use a scary font
});
titleText.anchor.set(0.5, 0.5);
titleText.x = 2048 / 2;
titleText.y = 2732 / 2 - 650; // Position title above the start game button
self.addChild(titleText);
var startButton = new Text2('Start Game', {
size: 150,
fill: "#ffffff"
});
startButton.anchor.set(0.5, 0.5);
startButton.x = 2048 / 2;
startButton.y = 2732 / 2 - 500; // Position the start button further from the house
self.addChild(startButton);
startButton.down = function (x, y, obj) {
console.log("Start Game button pressed!");
self.visible = false; // Hide the menu screen
// Create a game mode selection screen
var gameModeScreen = new Container();
gameModeScreen.visible = true;
var survivalModeButton = new Text2('Survival Mode', {
size: 100,
fill: "#ffffff"
});
survivalModeButton.anchor.set(0.5, 0.5);
survivalModeButton.x = 2048 / 2;
survivalModeButton.y = 2732 / 2 - 100;
gameModeScreen.addChild(survivalModeButton);
var timeAttackModeButton = new Text2('NIGHTMARE MODE', {
size: 100,
fill: "#ff0000" // Change font color to red
});
timeAttackModeButton.anchor.set(0.5, 0.5);
timeAttackModeButton.x = 2048 / 2;
timeAttackModeButton.y = 2732 / 2 + 100;
gameModeScreen.addChild(timeAttackModeButton);
var becomeEnemyModeButton = new Text2('Become Enemy Mode', {
size: 100,
fill: "#ffffff"
});
becomeEnemyModeButton.anchor.set(0.5, 0.5);
becomeEnemyModeButton.x = 2048 / 2;
becomeEnemyModeButton.y = 2732 / 2 + 300;
gameModeScreen.addChild(becomeEnemyModeButton);
game.addChild(gameModeScreen);
becomeEnemyModeButton.down = function (x, y, obj) {
console.log("Become Enemy Mode selected!");
gameModeScreen.visible = false;
game.startGame('becomeEnemy');
};
survivalModeButton.down = function (x, y, obj) {
console.log("Survival Mode selected!");
gameModeScreen.visible = false;
game.startGame('survival');
};
timeAttackModeButton.down = function (x, y, obj) {
console.log("Time Attack Mode selected!");
gameModeScreen.visible = false;
game.startGame('timeAttack');
};
};
});
// NPC class
var NPC = Container.expand(function () {
var self = Container.call(this);
// Attach head
var head = self.attachAsset('playerHead', {
anchorX: 0.5,
anchorY: 0.5,
y: -60
});
// Attach body
var body = self.attachAsset('playerBody', {
anchorX: 0.5,
anchorY: 0.5
});
// Attach arms
var leftArm = self.attachAsset('playerArm', {
anchorX: 0.5,
anchorY: 0.5,
x: -25,
y: -20
});
var rightArm = self.attachAsset('playerArm', {
anchorX: 0.5,
anchorY: 0.5,
x: 25,
y: -20
});
// Attach legs
var leftLeg = self.attachAsset('playerLeg', {
anchorX: 0.5,
anchorY: 0.5,
x: -10,
y: 40
});
var rightLeg = self.attachAsset('playerLeg', {
anchorX: 0.5,
anchorY: 0.5,
x: 10,
y: 40
});
self.speed = 10; // Set NPC speed to match enemy speed
self.update = function () {
if (!menuScreen.visible && game.currentMode) {
// Random movement logic: NPC moves to random locations
if (!self.targetX || !self.targetY || Math.abs(self.x - self.targetX) < 5 && Math.abs(self.y - self.targetY) < 5) {
self.targetX = Math.random() * 2048;
self.targetY = Math.random() * 2732;
}
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 0) {
self.x += dx / distance * self.speed;
self.y += dy / distance * self.speed;
}
}
};
});
// Joystick controls
// The game engine will automatically load the required assets
// Player class
var Player = Container.expand(function () {
var self = Container.call(this);
// Attach head
var head = self.attachAsset('playerHead', {
anchorX: 0.5,
anchorY: 0.5,
y: -60
});
// Attach body
var body = self.attachAsset('playerBody', {
anchorX: 0.5,
anchorY: 0.5
});
// Attach arms
var leftArm = self.attachAsset('playerArm', {
anchorX: 0.5,
anchorY: 0.5,
x: -25,
y: -20
});
var rightArm = self.attachAsset('playerArm', {
anchorX: 0.5,
anchorY: 0.5,
x: 25,
y: -20
});
// Attach legs
var leftLeg = self.attachAsset('playerLeg', {
anchorX: 0.5,
anchorY: 0.5,
x: -10,
y: 40
});
var rightLeg = self.attachAsset('playerLeg', {
anchorX: 0.5,
anchorY: 0.5,
x: 10,
y: 40
});
self.energy = 100; // Initial energy level
self.tired = false; // Initial tired state
self.update = function () {
// Decrease energy over time
self.energy -= 0.1;
if (self.energy <= 0) {
self.tired = true; // Set tired state when energy is depleted
console.log("Player is tired and cannot move!");
return; // Skip movement if player is tired
}
if (self.tired) {
return; // Skip movement if player is tired
}
// Decrease energy over time
self.energy -= 0.1;
if (self.energy <= 0) {
self.tired = true; // Set tired state when energy is depleted
console.log("Player is tired and cannot move!");
return;
}
// Check if player intersects with the shed
if (self.intersects(shed)) {
console.log("Player touched the shed!");
// Logic to refill the generator
if (!generator.isOn) {
generator.energy = 100; // Refill generator energy
console.log("Generator refilled!");
}
}
};
});
// Shed class
var Shed = Container.expand(function () {
var self = Container.call(this);
var shedBase = self.attachAsset('houseBase', {
anchorX: 0.5,
anchorY: 0.5
});
var generator = self.attachAsset('playerBody', {
anchorX: 0.5,
anchorY: 0.5,
x: 0,
y: 50
});
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x191970,
// Init game with midnight blue background
icon: 'screen' // Set the game icon to be the screen of the game
});
/****
* Game Code
****/
// Function to publish the game
function publishGame() {
console.log("Publishing the game...");
// Add any additional logic needed for publishing
// This could include saving game state, uploading to a server, etc.
console.log("Game published successfully!");
}
// Call the publishGame function when the game is ready to be published
publishGame();
// Initialize and display the menu screen
var menuScreen = game.addChild(new MenuScreen());
menuScreen.visible = true;
game.currentMode = null; // Track the current game mode
// Function to start the game
game.startGame = function (mode) {
// Initialize game elements here if needed
menuScreen.visible = false; // Hide the menu screen
game.currentMode = mode; // Set the current game mode
if (mode === 'survival') {
console.log("Starting Survival Mode...");
// Add survival mode specific initialization logic
} else if (mode === 'timeAttack') {
console.log("Starting NIGHTMARE MODE...");
game.setBackgroundColor(0xff0000); // Change background to red
// Add time attack mode specific initialization logic
} else if (mode === 'becomeEnemy') {
console.log("Starting Become Enemy Mode...");
// Add become enemy mode specific initialization logic
}
// Add other game initialization logic if necessary
};
// Initialize joystick
// Blood texture color
// Blood texture color
// Blood texture color
// Function to detect if the device is mobile
function isMobileDevice() {
return typeof navigator !== 'undefined' && /Mobi|Android/i.test(navigator.userAgent);
}
var joystick;
if (isMobileDevice()) {
joystick = game.addChild(new Joystick());
joystick.x = 2048 - 150; // Position joystick at the bottom right of the screen
joystick.y = 2732 - 150; // Position joystick at the bottom right of the screen
}
// Add a clock display to the game
var clockTxt = new Text2('00:00', {
size: 100,
fill: "#ffffff"
});
clockTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(clockTxt);
// Add 'Survive until 06:00 am' text at the bottom of the screen
var surviveText = new Text2('Survive until 06:00 am', {
size: 100,
fill: "#ffffff"
});
surviveText.anchor.set(0.5, 1);
surviveText.x = 2048 / 2;
surviveText.y = 2732;
LK.gui.bottom.addChild(surviveText);
// Add player to the game
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 / 2;
var house = game.addChild(new House());
house.x = 2048 / 2;
house.y = 2732 / 2;
// Add NPCs to the game
var npcs = [];
for (var i = 0; i < 49; i++) {
var npc = game.addChild(new NPC());
npc.x = house.x; // Position NPCs inside the house
npc.y = house.y;
npcs.push(npc);
}
// Add an NPC every 11 seconds
var npcAddInterval = LK.setInterval(function () {
if (!menuScreen.visible) {
var newNpc = game.addChild(new NPC());
newNpc.x = house.x; // Position new NPC inside the house
newNpc.y = house.y;
npcs.push(newNpc);
}
}, 11000);
// Update the clock every second
var startTime = Date.now();
LK.setInterval(function () {
if (!menuScreen.visible && !game.paused && game.currentMode) {
var elapsedTime = Math.floor((Date.now() - startTime) / 1000);
var minutes = Math.floor(elapsedTime / 60);
var seconds = elapsedTime % 60;
clockTxt.setText((minutes < 10 ? '0' : '') + minutes + ':' + (seconds < 10 ? '0' : '') + seconds);
// Check if the clock reaches 06:00
if (minutes === 6 && seconds === 0) {
// Display 'YOU WIN!' asset
var youWinAsset = LK.getAsset('YOUWIN', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
var helicopterBlade = LK.getAsset('helicopterBlade', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 - 250
});
var helicopterTail = LK.getAsset('helicopterTail', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2 + 500,
y: 2732 / 2
});
LK.gui.center.addChild(youWinAsset);
LK.gui.center.addChild(helicopterBlade);
LK.gui.center.addChild(helicopterTail);
// Pause the game
game.paused = true;
}
}
}, 1000);
// Add mouse movement control for player
game.move = function (x, y, obj) {
if (!menuScreen.visible && game.currentMode) {
player.x = x;
player.y = y;
}
};
var enemies = [];
var enemy = game.addChild(new Enemy());
enemy.x = Math.random() * 2048;
enemy.y = Math.random() * 2732;
enemies.push(enemy);
// Track time for increasing enemy speed
var lastSpeedIncreaseTime = Date.now();
// Track time for stopping the player
var lastStopTime = Date.now();
// Game update function
game.update = function () {
// Stop the player every 10 seconds
if (Date.now() - lastStopTime >= 10000) {
player.tired = true;
console.log("Player stops for a moment!");
LK.setTimeout(function () {
player.tired = false;
console.log("Player can move again!");
}, 1000); // Player stops for 1 second
lastStopTime = Date.now();
}
if (menuScreen.visible) {
return; // Do not update game elements if the menu screen is visible
}
// Increase speed of all enemies every 10 seconds
if (Date.now() - lastSpeedIncreaseTime >= 10000) {
for (var i = 0; i < enemies.length; i++) {
enemies[i].speed = (enemies[i].speed || 7) + 10; // Initialize speed if undefined and increase by 10
}
lastSpeedIncreaseTime = Date.now();
}
// Game logic goes here
generator.update();
// Check if player is inside the house
if (player.intersects(house)) {
// Logic to make the player feel cold
// For example, decrease player's health or display a message
console.log("Player feels cold inside the house!");
// Implement logic to encourage player to leave the house
// This could be a visual effect, sound, or health decrease
}
// Check for collisions between player and enemies
for (var i = 0; i < enemies.length; i++) {
if (player.intersects(enemies[i])) {
// Flash screen red for 2 seconds (2000ms) to show player is killed
LK.effects.flashScreen(0xff3333, 2000);
// Add killing animation
var killingAnimation = LK.getAsset('playerBody', {
anchorX: 0.5,
anchorY: 0.5,
x: player.x,
y: player.y
});
game.addChild(killingAnimation);
LK.effects.flashObject(killingAnimation, 0xff0000, 1000, function () {
killingAnimation.destroy();
});
// Show game over. The game will be automatically paused while game over is showing.
LK.showGameOver();
break;
}
for (var j = 0; j < npcs.length; j++) {
if (npcs[j].intersects(enemies[i])) {
// NPC is killed by enemy
console.log("NPC killed by enemy!");
npcs[j].destroy();
npcs.splice(j, 1);
}
}
}
// Increase enemy count by 1 every 10 seconds with a maximum of 1 enemy
var enemyIncreaseInterval = LK.setInterval(function () {
if (!menuScreen.visible && enemies.length < 1) {
var newEnemy = game.addChild(new Enemy());
newEnemy.x = Math.random() * 2048;
newEnemy.y = Math.random() * 2732;
enemies.push(newEnemy);
}
}, 10000);
};
// Initialize the bloodMoon object
var bloodMoon = LK.getAsset('bloodMoon', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 200
});
game.addChild(bloodMoon);
// Animate the bloodmoon to move across the sky
bloodMoon.x -= 0.5; // Move the bloodmoon slowly to the left
if (bloodMoon.x < -bloodMoon.width / 2) {
bloodMoon.x = 2048 + bloodMoon.width / 2; // Reset position to the right side of the screen
}
// Add a glow effect to the bloodmoon
LK.effects.flashObject(bloodMoon, 0xff0000, 2000, function () {
LK.effects.flashObject(bloodMoon, 0x8b0000, 2000);
});
var house = game.addChild(new House());
house.x = 2048 / 2;
house.y = 2732 / 2;
// Add a shed with a generator inside to the game
var shed = game.addChild(new Shed());
shed.x = 500; // Position the shed at a specific location
shed.y = 2000; // Position the shed at a specific location
// Add a generator inside the shed
var generator = shed.addChild(new Generator());
generator.x = 0; // Center the generator inside the shed
generator.y = 50; // Position the generator inside the shed
// Keyboard controls for WASD movement are not supported in this environment ===================================================================
--- original.js
+++ change.js
@@ -210,9 +210,9 @@
survivalModeButton.y = 2732 / 2 - 100;
gameModeScreen.addChild(survivalModeButton);
var timeAttackModeButton = new Text2('NIGHTMARE MODE', {
size: 100,
- fill: "#ffffff"
+ fill: "#ff0000" // Change font color to red
});
timeAttackModeButton.anchor.set(0.5, 0.5);
timeAttackModeButton.x = 2048 / 2;
timeAttackModeButton.y = 2732 / 2 + 100;