User prompt
make the game icon is the screen of the game
User prompt
increase the flashlight size and range
User prompt
decrease enemy max to 3
User prompt
make the flashlight effect and range more smaller but not too small
User prompt
Please fix the bug: 'TypeError: house.update is not a function' in or related to this line: 'house.update();' Line Number: 527
User prompt
make the house and shed invisible when not touched by flashlight effect
User prompt
increase the flashlight range same as the flashlight effect
User prompt
make a scary sound if the enemy target player
User prompt
increase the flashlight effect size
User prompt
decrease flashlight to 3X more smaller
User prompt
increase the flashlight effect to 5X more bigger
User prompt
make the flashlight range and effect more bigger
User prompt
make the NPC and the enemy invisible if not touched by the flashlight effet
User prompt
make a flashlight
User prompt
make the game dark
User prompt
decrease enemy max to 10
User prompt
increase NPC count to 19
User prompt
enemy max increase every 10 second with max 20 enemy
User prompt
stop the enemy increasing after 0.1 milisecond
User prompt
make the enemy increase every 10 seconds with no max
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'userAgent')' in or related to this line: 'return /Mobi|Android/i.test(navigator.userAgent);' Line Number: 391
User prompt
make the joystick disappear for computer and appear for mobile
User prompt
make the joystick functional
User prompt
make the joystick at the bottom right of the screen
User prompt
remove shotgun logic
/****
* 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) {
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 = 10; // Speed at which the enemy chases the target
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
game.startGame(); // Call the start game function
};
});
// 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) {
// 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
****/
// Initialize and display the menu screen
var menuScreen = game.addChild(new MenuScreen());
menuScreen.visible = true;
// Function to start the game
game.startGame = function () {
// Initialize game elements here if needed
menuScreen.visible = false; // Hide the menu screen
// 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 < 19; i++) {
var npc = game.addChild(new NPC());
npc.x = house.x; // Position NPCs inside the house
npc.y = house.y;
npcs.push(npc);
}
// Update the clock every second
var startTime = Date.now();
LK.setInterval(function () {
if (!menuScreen.visible) {
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!' screen
var winText = new Text2('YOU WIN!', {
size: 200,
fill: "#00ff00"
});
winText.anchor.set(0.5, 0.5);
winText.x = 2048 / 2;
winText.y = 2732 / 2;
LK.gui.center.addChild(winText);
// Pause the game
game.paused = true;
}
}
}, 1000);
// Add mouse movement control for player
game.move = function (x, y, obj) {
if (!menuScreen.visible) {
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 second
for (var i = 0; i < enemies.length; i++) {
enemies[i].speed = (enemies[i].speed || 7) + 10; // Initialize speed if undefined and increase by 10
}
// 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 1 second (1000ms) to show player is killed
LK.effects.flashScreen(0xff0000, 1000);
// 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 10 enemies
var enemyIncreaseInterval = LK.setInterval(function () {
if (!menuScreen.visible && enemies.length < 10) {
var newEnemy = game.addChild(new Enemy());
newEnemy.x = Math.random() * 2048;
newEnemy.y = Math.random() * 2732;
enemies.push(newEnemy);
}
}, 10000);
};
// Add a bloodmoon to the game
var bloodMoon = LK.getAsset('bloodMoon', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 200
});
game.addChild(bloodMoon);
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
@@ -54,11 +54,8 @@
speed = 3; // Reduce speed when tired
}
// Enemy movement logic to chase the player or NPCs
if (!menuScreen.visible) {
- // Check if Enemy is within flashlight range
- var distanceToFlashlight = Math.sqrt(Math.pow(flashlight.x - self.x, 2) + Math.pow(flashlight.y - self.y, 2));
- self.visible = distanceToFlashlight < 200; // Set visibility based on flashlight range
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++) {
@@ -89,28 +86,8 @@
}
}
};
});
-// Flashlight class
-var Flashlight = Container.expand(function () {
- var self = Container.call(this);
- var light = self.attachAsset('playerBody', {
- anchorX: 0.5,
- anchorY: 0.5,
- width: 600,
- // Increase width
- height: 600,
- // Increase height
- color: 0xffffe0,
- alpha: 0.5
- });
- self.update = function () {
- self.range = 600; // Set range to match the increased effect size
- // Follow the player
- self.x = player.x;
- self.y = player.y;
- };
-});
// Generator class
var Generator = Container.expand(function () {
var self = Container.call(this);
var generatorGraphic = self.attachAsset('playerBody', {
@@ -266,11 +243,8 @@
});
self.speed = 10; // Set NPC speed to match enemy speed
self.update = function () {
if (!menuScreen.visible) {
- // Check if NPC is within flashlight range
- var distanceToFlashlight = Math.sqrt(Math.pow(flashlight.x - self.x, 2) + Math.pow(flashlight.y - self.y, 2));
- self.visible = distanceToFlashlight < 200; // Set visibility based on flashlight range
// 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;
@@ -376,9 +350,11 @@
/****
* Initialize Game
****/
var game = new LK.Game({
- backgroundColor: 0x000000 // Init game with black background for a darker effect
+ backgroundColor: 0x191970,
+ // Init game with midnight blue background
+ icon: 'screen' // Set the game icon to be the screen of the game
});
/****
* Game Code
@@ -425,10 +401,8 @@
// Add player to the game
var player = game.addChild(new Player());
player.x = 2048 / 2;
player.y = 2732 / 2;
-// Add flashlight to the game
-var flashlight = game.addChild(new Flashlight());
var house = game.addChild(new House());
house.x = 2048 / 2;
house.y = 2732 / 2;
// Add NPCs to the game
@@ -497,10 +471,8 @@
// Increase speed of all enemies every second
for (var i = 0; i < enemies.length; i++) {
enemies[i].speed = (enemies[i].speed || 7) + 10; // Initialize speed if undefined and increase by 10
}
- // Update flashlight position
- flashlight.update();
// Game logic goes here
generator.update();
// Check if player is inside the house
if (player.intersects(house)) {
@@ -527,11 +499,11 @@
npcs.splice(j, 1);
}
}
}
- // Increase enemy count by 1 every 10 seconds with a maximum of 3 enemies
+ // Increase enemy count by 1 every 10 seconds with a maximum of 10 enemies
var enemyIncreaseInterval = LK.setInterval(function () {
- if (!menuScreen.visible && enemies.length < 3) {
+ if (!menuScreen.visible && enemies.length < 10) {
var newEnemy = game.addChild(new Enemy());
newEnemy.x = Math.random() * 2048;
newEnemy.y = Math.random() * 2732;
enemies.push(newEnemy);