User prompt
smaller it until it fits to the screen
User prompt
MAKE THE FONT SMALLER
User prompt
change the title on menu screen to "NIGHT OF THE MASSACRE: THE MASSACRE"
User prompt
prevent monster spawning inside the house
User prompt
prevent monster spawning near the house
User prompt
prevent anything appear on the cutscene
User prompt
make a cutscene screen for intro after choosing difficulty
User prompt
prevent time moving while the cutscene start
User prompt
make the monster on the cutscene same as enemy monster shape and colow
User prompt
prevent house and roof appearing in the cutscene
User prompt
dont let anything moved until the cutscene done
User prompt
add a cutscene about a monster come into the house when after choosing difficulty ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
dont play ambience music in practice mode, instead use practicemusic asset for the ambience in practice mode
User prompt
make a special music for practice mode
User prompt
npc screams when died
User prompt
when a npc killed, add soun
User prompt
add menu music
User prompt
add ambience sound
User prompt
Make the npcs move when practice mode already selected
User prompt
Remove okay button on practice mode and make the there will be no enemy text gone after 1 second
User prompt
Make the enemy will be so slow text to middle and more large
User prompt
tambahkan tulisan enemy will be so slow saat easy mode diselect
User prompt
Please fix the bug: 'ReferenceError: noEnemyText is not defined' in or related to this line: 'if (menuScreen.visible || noEnemyText.visible) {' Line Number: 717
User prompt
Please fix the bug: 'ReferenceError: noEnemyText is not defined' in or related to this line: 'if (menuScreen.visible || noEnemyText.visible) {' Line Number: 715
User prompt
Please fix the bug: 'ReferenceError: noEnemyText is not defined' in or related to this line: 'if (menuScreen.visible || noEnemyText.visible) {' Line Number: 715
/**** * Classes ****/ // Position the generator inside the shed // Keyboard controls for WASD movement are not supported in this environment // CutsceneScreen class var CutsceneScreen = Container.expand(function () { var self = Container.call(this); // Create dark background var cutsceneBackground = self.attachAsset('houseBase', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2, width: 2200, height: 2800, color: 0x000000 }); // Create intro text var introText = new Text2('As darkness falls upon the town...', { size: 120, fill: 0xFFFFFF }); introText.anchor.set(0.5, 0.5); introText.x = 2048 / 2; introText.y = 2732 / 2 - 200; self.addChild(introText); // Create story text var storyText = new Text2('The nightmare begins at midnight.\nSurvive until dawn.', { size: 100, fill: 0xFF0000 }); storyText.anchor.set(0.5, 0.5); storyText.x = 2048 / 2; storyText.y = 2732 / 2; self.addChild(storyText); // Create continue button var continueButton = new Text2('Press to Continue', { size: 80, fill: 0xFFFF00 }); continueButton.anchor.set(0.5, 0.5); continueButton.x = 2048 / 2; continueButton.y = 2732 / 2 + 300; self.addChild(continueButton); // Flash the continue button LK.effects.flashObject(continueButton, 0xFFFFFF, 1500); // Handle continue button press continueButton.down = function (x, y, obj) { console.log("Continue button pressed!"); self.visible = false; // Stop cutscene music and start appropriate music based on mode LK.stopMusic(); if (game.selectedDifficulty === 'practice') { LK.playMusic('practiceMusic'); } else { LK.playMusic('ambience'); } // Start the actual game game.startActualGame(); }; return self; }); // 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 === 'easy' ? 10 : game.currentMode === 'challenging' ? 200 : game.currentMode === 'timeAttack' ? 30 : 20; // Adjust speed for challenging 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: 0xFF0000, // 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 surviveTextMenu = new Text2('SURVIVE UNTIL 6 AM', { size: 100, fill: 0xFFFFFF }); surviveTextMenu.anchor.set(0.5, 0.5); surviveTextMenu.x = 2048 / 2; surviveTextMenu.y = 2732 / 2 + 300; // Move further below the house self.addChild(surviveTextMenu); var startButton = new Text2('start game', { size: 150, fill: 0xFFFFFF }); 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 easyModeButton = new Text2('Easy Mode', { size: 100, fill: 0x00FF00 // Green color for easy mode }); easyModeButton.anchor.set(0.5, 0.5); easyModeButton.x = 2048 / 2; easyModeButton.y = 2732 / 2 - 300; // Move further above the normal mode button gameModeScreen.addChild(easyModeButton); var normalModeButton = new Text2('Normal Mode', { size: 100, fill: 0xFFFFFF }); normalModeButton.anchor.set(0.5, 0.5); normalModeButton.x = 2048 / 2; normalModeButton.y = 2732 / 2 - 100; gameModeScreen.addChild(normalModeButton); var timeAttackModeButton = new Text2('NIGHTMARE MODE', { size: 100, fill: 0xFF0000 // 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 challengingModeButton = new Text2('IMPOSSIBLE MODE', { size: 100, fill: 0xFF8C00 // Orange color for impossible mode }); challengingModeButton.anchor.set(0.5, 0.5); challengingModeButton.x = 2048 / 2; challengingModeButton.y = 2732 / 2 + 300; gameModeScreen.addChild(challengingModeButton); var practiceModeButton = new Text2('Practice Mode', { size: 100, fill: 0x87CEEB // Light blue color for practice mode }); practiceModeButton.anchor.set(0.5, 0.5); practiceModeButton.x = 2048 / 2; practiceModeButton.y = 2732 / 2 - 500; // Move above the easy mode button gameModeScreen.addChild(practiceModeButton); var endlessModeButton = new Text2('Endless Mode', { size: 100, fill: 0xFF69B4 // Pink color for endless mode }); endlessModeButton.anchor.set(0.5, 0.5); endlessModeButton.x = 2048 / 2; endlessModeButton.y = 2732 / 2 + 500; gameModeScreen.addChild(endlessModeButton); var backButton = new Text2('Back', { size: 100, fill: 0xFFFFFF // White color for back button }); backButton.anchor.set(0.5, 0.5); backButton.x = 2048 / 2; backButton.y = 2732 / 2 + 700; gameModeScreen.addChild(backButton); backButton.down = function (x, y, obj) { console.log("Back button pressed!"); gameModeScreen.visible = false; self.visible = true; // Show the menu screen again }; game.addChild(gameModeScreen); easyModeButton.down = function (x, y, obj) { console.log("Easy Mode selected!"); gameModeScreen.visible = false; game.selectedDifficulty = 'easy'; game.showCutscene(); }; normalModeButton.down = function (x, y, obj) { console.log("Normal Mode selected!"); gameModeScreen.visible = false; game.selectedDifficulty = 'normal'; game.showCutscene(); }; timeAttackModeButton.down = function (x, y, obj) { console.log("Time Attack Mode selected!"); gameModeScreen.visible = false; game.selectedDifficulty = 'timeAttack'; game.showCutscene(); }; challengingModeButton.down = function (x, y, obj) { console.log("Challenging Mode selected!"); gameModeScreen.visible = false; game.selectedDifficulty = 'challenging'; game.showCutscene(); }; practiceModeButton.down = function (x, y, obj) { console.log("Practice Mode selected!"); gameModeScreen.visible = false; game.selectedDifficulty = 'practice'; game.showCutscene(); }; endlessModeButton.down = function (x, y, obj) { console.log("Endless Mode selected!"); gameModeScreen.visible = false; game.selectedDifficulty = 'endless'; game.showCutscene(); }; }; }); // 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 } // Allow player to kill NPCs in Become Enemy Mode if (game.currentMode === 'becomeEnemy') { for (var i = 0; i < npcs.length; i++) { if (self.intersects(npcs[i])) { console.log("NPC killed by player!"); LK.getSound('npcScream').play(); npcs[i].destroy(); npcs.splice(i, 1); } } } // 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(); // Add a quit button to the top-right corner of the game screen var quitButton = new Text2('Quit', { size: 100, fill: 0xFFFFFF }); quitButton.anchor.set(1, 0); // Anchor to the top-right corner quitButton.x = 2048; // Position at the right edge quitButton.y = 0; // Position at the top edge LK.gui.topRight.addChild(quitButton); // Define the quit button functionality quitButton.down = function (x, y, obj) { console.log("Quit button pressed!"); // Stop ambient music and start menu music when returning to menu LK.stopMusic(); LK.playMusic('menuMusic'); // Logic to quit the game, e.g., return to the main menu or close the game menuScreen.visible = true; // Show the menu screen again game.currentMode = null; // Reset the current game mode }; // Initialize and display the menu screen var menuScreen = game.addChild(new MenuScreen()); menuScreen.visible = true; game.currentMode = null; // Track the current game mode // Start menu music when menu screen is displayed LK.playMusic('menuMusic'); // Initialize cutscene screen var cutsceneScreen = game.addChild(new CutsceneScreen()); cutsceneScreen.visible = false; // Function to show cutscene game.showCutscene = function () { console.log("Showing cutscene for difficulty: " + game.selectedDifficulty); cutsceneScreen.visible = true; // Stop menu music and start cutscene music LK.stopMusic(); LK.playMusic('cutsceneMusic'); }; // Function to start the actual game after cutscene game.startActualGame = function () { console.log("Starting actual game with difficulty: " + game.selectedDifficulty); game.currentMode = game.selectedDifficulty; // Show all game elements player.visible = true; house.visible = true; for (var i = 0; i < npcs.length; i++) { npcs[i].visible = true; } for (var i = 0; i < enemies.length; i++) { enemies[i].visible = true; } bloodMoon.visible = true; shed.visible = true; clockTxt.visible = true; surviveText.visible = true; if (joystick) { joystick.visible = true; } game.startGame(game.selectedDifficulty); }; // 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 // Music is already handled by cutscene or directly for practice mode if (mode === 'easy') { console.log("Starting Easy Mode..."); game.setBackgroundColor(0x00ff00); // Change background to green // Add easy mode specific initialization logic } else if (mode === 'normal') { console.log("Starting Normal Mode..."); // Add normal 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 === 'challenging') { console.log("Starting Challenging Mode..."); game.setBackgroundColor(0xff8c00); // Change background to orange // Increase enemy speed by 10x compared to NIGHTMARE MODE for (var i = 0; i < enemies.length; i++) { enemies[i].speed = 200; // Assuming NIGHTMARE MODE speed is 20 } } else if (mode === 'practice') { console.log("Starting Practice Mode..."); game.setBackgroundColor(0x87ceeb); // Change background to light blue // Remove all existing enemies in practice mode for (var i = 0; i < enemies.length; i++) { enemies[i].destroy(); } enemies = []; } else if (mode === 'becomeEnemy') { console.log("Starting Become Enemy Mode..."); // Remove all existing enemies for (var i = 0; i < enemies.length; i++) { enemies[i].destroy(); } enemies = []; // Transform player into an enemy player.destroy(); player = game.addChild(new Enemy()); player.x = 2048 / 2; player.y = 2732 / 2; } // 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 joystick.visible = false; // Hide joystick during cutscene } // Add a clock display to the game var clockTxt = new Text2('00:00', { size: 100, fill: 0xFFFFFF }); clockTxt.anchor.set(0.5, 0); clockTxt.visible = false; // Hide clock during cutscene 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: 0xFFFFFF }); surviveText.anchor.set(0.5, 1); surviveText.x = 2048 / 2; surviveText.y = 2732; surviveText.visible = false; // Hide survive text during cutscene LK.gui.bottom.addChild(surviveText); // Add player to the game var player = game.addChild(new Player()); player.x = 2048 / 2; player.y = 2732 / 2; player.visible = false; // Hide player during cutscene var house = game.addChild(new House()); house.x = 2048 / 2; house.y = 2732 / 2; house.visible = false; // Hide house during cutscene // 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; npc.visible = false; // Hide NPCs during cutscene npcs.push(npc); } // Add 10 NPCs every 11 seconds var npcAddInterval = LK.setInterval(function () { if (!menuScreen.visible) { for (var i = 0; i < 30; i++) { 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 and the mode is not endless if (minutes === 6 && seconds === 0 && game.currentMode !== 'endless') { // Display 'YOU WIN!' asset var youWinAsset = LK.getAsset('YOUWIN', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); LK.gui.center.addChild(youWinAsset); // Show game over. The game will be automatically paused while game over is showing. LK.showGameOver(); } } }, 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; enemy.visible = false; // Hide enemy during cutscene 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!"); LK.getSound('npcScream').play(); 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 && game.currentMode !== 'becomeEnemy' && game.currentMode !== 'practice') { var newEnemy = game.addChild(new Enemy()); var validPosition = false; var attempts = 0; var maxAttempts = 50; // Keep trying to find a valid spawn position away from the house while (!validPosition && attempts < maxAttempts) { newEnemy.x = Math.random() * 2048; newEnemy.y = Math.random() * 2732; // Calculate distance from house var dx = newEnemy.x - house.x; var dy = newEnemy.y - house.y; var distance = Math.sqrt(dx * dx + dy * dy); // Ensure minimum distance of 300 pixels from house if (distance > 300) { validPosition = true; } attempts++; } enemies.push(newEnemy); } }, 10000); }; // Initialize the bloodMoon object var bloodMoon = LK.getAsset('bloodMoon', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 200 }); bloodMoon.visible = false; // Hide blood moon during cutscene 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 shed.visible = false; // Hide shed during cutscene // Add a generator inside the shed var generator = shed.addChild(new Generator()); generator.x = 0; // Center the generator inside the shed generator.y = 50; ;
===================================================================
--- original.js
+++ change.js
@@ -819,10 +819,25 @@
// 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 && game.currentMode !== 'becomeEnemy' && game.currentMode !== 'practice') {
var newEnemy = game.addChild(new Enemy());
- newEnemy.x = Math.random() * 2048;
- newEnemy.y = Math.random() * 2732;
+ var validPosition = false;
+ var attempts = 0;
+ var maxAttempts = 50;
+ // Keep trying to find a valid spawn position away from the house
+ while (!validPosition && attempts < maxAttempts) {
+ newEnemy.x = Math.random() * 2048;
+ newEnemy.y = Math.random() * 2732;
+ // Calculate distance from house
+ var dx = newEnemy.x - house.x;
+ var dy = newEnemy.y - house.y;
+ var distance = Math.sqrt(dx * dx + dy * dy);
+ // Ensure minimum distance of 300 pixels from house
+ if (distance > 300) {
+ validPosition = true;
+ }
+ attempts++;
+ }
enemies.push(newEnemy);
}
}, 10000);
};