User prompt
change admin password to "AR300710ON"
User prompt
change admin password to "AR300710ON"
User prompt
change admin password to "Ar300710On"
User prompt
apply this modfication to bonnie too
User prompt
every level makes them faster by 5 seconds their normal movment system: freddy: doesnt come to office, just waits in stage bonnie: Moves to basement in 1 AM, then comes to party room after 30 seconds in basement, then he moves to left corridor in 2 AM, after 20 seconds it repeats chica: moves to bathroom in 1:30 AM, then comes to party room in 2 AM, then she comes to right corridor in 2:45 AM. foxy: moves to party room at 2:30 AM, then he comes to left corridor at 3 AM, and it repeats after 15 seconds
User prompt
as the numbers grow, animatronics move way more often
User prompt
now add up and down arrows below them, when player presses the up arrow the number grows and when player presses down arrow, the number drops, numbers start from 1 end in 20
User prompt
chance freddy's name to Sigma Bart bonnie's name to george floyd chica's name to Noyan foxy's to Sigma Mango Mustard
User prompt
when you click custom night a new menu apears with images of; freddy, bonnie, chica and foxy in order
User prompt
Please fix the bug: 'Uncaught TypeError: storage.set is not a function' in or related to this line: 'storage.set('night6Unlocked', true);' Line Number: 1783 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Uncaught ReferenceError: storage is not defined' in or related to this line: 'storage.set('night6Unlocked', true);' Line Number: 1782 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
also it unlock night 6 too
User prompt
add a unlock all nights button in admin mode, it unlocks night 6 and custom night
User prompt
add a unlock all nights button in admin mode, it unlocks night 6 and custom night ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
when player completes night 6, a custom night button will apear.
User prompt
when player completes all 5 nights, a night 6 button will apear.
User prompt
add night 6 button on menu below admin mode, if player completed the whole 5 nights they can accses it and play night 6, if player didnt completed whole 5 nights, when player clicks it, a text box will pop up for 5 seconds saying "complete the main game first!" ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
if player completed the night 6 they can accses it and play custom night, if player didnt completed night 6, when player click it, a text box will pop up for 5 seconds saying "complete the night 6 first!" ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Uncaught TypeError: storage.get is not a function' in or related to this line: 'var completedNights = storage.get('completedNights') || 0;' Line Number: 986 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
still same problem
User prompt
still I can access without completing 5 nights, fix it ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
if player completed the whole 5 nights they can accses it and play night 6, if player didnt completed whole 5 nights, when player clicks it, a text box will pop up for 5 seconds saying "complete the main game first!" ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
when you enter custom night, there will be a menu screen before the game, put animatronics's image's in order; freddy, bonnie, chica, foxy with spaces
User prompt
when you enter night 6, it says "night 6" on top left
User prompt
add unlock all nights button to the admin mode, it unlocks night 6 and custom night without completing the whole game and night 6 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Animatronic = Container.expand(function (type, startX, startY) {
var self = Container.call(this);
var graphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
self.type = type;
self.currentRoom = 0; // 0 = stage, 1-10 = various rooms
self.moveTimer = 0;
self.aggressionLevel = 1;
self.isMoving = false;
// Movement state tracking for specific patterns
self.movementState = 0; // Track current state in movement cycle
self.lastMoveTime = 0; // Track when last move happened
self.waitingInBasement = false;
self.waitingInParty = false;
// Different movement patterns for each animatronic
self.movementPattern = {
freddy: [0],
// Freddy stays on stage
bonnie: [0, 5, 2, 3],
// Stage -> Basement -> Party -> Left Corridor (repeats)
chica: [0, 2, 4, 6],
// Stage -> Party Area -> Right Corridor -> Office
foxy: [5, 2, 3] // Basement -> Party Area -> Left Corridor
};
self.update = function () {
self.moveTimer++;
// Handle specific movement patterns
if (self.type === 'freddy') {
// Freddy doesn't move, stays on stage
return;
} else if (self.type === 'bonnie') {
self.updateBonnieMovement();
} else if (self.type === 'chica') {
self.updateChicaMovement();
} else if (self.type === 'foxy') {
self.updateFoxyMovement();
} else {
// Original movement logic for other animatronics
var moveChance = self.aggressionLevel * 0.002;
if (Math.random() < moveChance && !self.isMoving) {
self.attemptMove();
}
}
};
self.updateBonnieMovement = function () {
if (self.isMoving) return; // Don't move if already moving
var currentTime = LK.ticks / 60; // Convert to seconds
// Night 2 behavior
if (nightNumber === 2) {
// State 0: On stage, move to basement at 12:45 AM
if (self.movementState === 0 && gameHour >= 0 && gameMinutes >= 45) {
self.moveToRoom(5); // Move to basement
self.movementState = 1;
self.lastMoveTime = currentTime;
self.waitingInBasement = true;
}
// State 1: In basement, move to party room at 1:00 AM
else if (self.movementState === 1 && gameHour >= 1 && gameMinutes >= 0 && self.waitingInBasement) {
self.moveToRoom(2); // Move to party room
self.movementState = 2;
self.lastMoveTime = currentTime;
self.waitingInBasement = false;
self.waitingInParty = true;
}
// State 2: In party room, move to left corridor at 1:30 AM
else if (self.movementState === 2 && gameHour >= 1 && gameMinutes >= 30 && self.waitingInParty) {
self.moveToRoom(3); // Move to left corridor
self.movementState = 3;
self.lastMoveTime = currentTime;
self.waitingInParty = false;
}
// State 3: In left corridor, wait 15 seconds then restart cycle
else if (self.movementState === 3 && currentTime - self.lastMoveTime >= 15) {
self.moveToRoom(5); // Move back to basement
self.movementState = 1;
self.lastMoveTime = currentTime;
self.waitingInBasement = true;
}
} else {
// Original behavior for other nights
if (gameHour < 1) return; // Bonnie doesn't move until 1 AM
// State 0: On stage, move to basement at 1 AM
if (self.movementState === 0 && gameHour >= 1) {
self.moveToRoom(5); // Move to basement
self.movementState = 1;
self.lastMoveTime = currentTime;
self.waitingInBasement = true;
}
// State 1: In basement, wait 30 seconds then move to party room
else if (self.movementState === 1 && self.waitingInBasement && currentTime - self.lastMoveTime >= 30) {
self.moveToRoom(2); // Move to party room
self.movementState = 2;
self.lastMoveTime = currentTime;
self.waitingInBasement = false;
self.waitingInParty = true;
}
// State 2: In party room, move to left corridor at 2 AM
else if (self.movementState === 2 && gameHour >= 2 && self.waitingInParty) {
self.moveToRoom(3); // Move to left corridor
self.movementState = 3;
self.lastMoveTime = currentTime;
self.waitingInParty = false;
}
// State 3: In left corridor, wait 20 seconds then restart cycle
else if (self.movementState === 3 && currentTime - self.lastMoveTime >= 20) {
self.moveToRoom(5); // Move back to basement
self.movementState = 1;
self.lastMoveTime = currentTime;
self.waitingInBasement = true;
}
}
};
self.updateChicaMovement = function () {
if (self.isMoving) return; // Don't move if already moving
var currentTime = LK.ticks / 60; // Convert to seconds
// Night 2 behavior
if (nightNumber === 2) {
// State 0: On stage, move to basement at 12:30 AM
if (self.movementState === 0 && gameHour >= 0 && gameMinutes >= 30) {
self.moveToRoom(5); // Move to basement
self.movementState = 1;
self.lastMoveTime = currentTime;
}
// State 1: In basement, move to bathroom at 12:50 AM
else if (self.movementState === 1 && gameHour >= 0 && gameMinutes >= 50) {
self.moveToRoom(1); // Move to bathroom
self.movementState = 2;
self.lastMoveTime = currentTime;
}
// State 2: In bathroom, move to party room at 1:00 AM
else if (self.movementState === 2 && gameHour >= 1 && gameMinutes >= 0) {
self.moveToRoom(2); // Move to party room
self.movementState = 3;
self.lastMoveTime = currentTime;
}
// State 3: In party room, move to right corridor at 1:25 AM
else if (self.movementState === 3 && gameHour >= 1 && gameMinutes >= 25) {
self.moveToRoom(4); // Move to right corridor
self.movementState = 4;
self.lastMoveTime = currentTime;
}
// State 4: In right corridor, wait 20 seconds then restart cycle
else if (self.movementState === 4 && currentTime - self.lastMoveTime >= 20) {
self.moveToRoom(5); // Move back to basement
self.movementState = 1;
self.lastMoveTime = currentTime;
}
} else {
// Original behavior for other nights
if (gameHour < 1 || gameHour === 1 && gameMinutes < 30) return; // Chica doesn't move until 1:30 AM
// State 0: On stage, move to bathroom at 1:30 AM
if (self.movementState === 0 && gameHour >= 1 && gameMinutes >= 30) {
self.moveToRoom(1); // Move to bathroom
self.movementState = 1;
self.lastMoveTime = currentTime;
}
// State 1: In bathroom, move to party room at 2:00 AM
else if (self.movementState === 1 && gameHour >= 2 && gameMinutes >= 0) {
self.moveToRoom(2); // Move to party room
self.movementState = 2;
self.lastMoveTime = currentTime;
}
// State 2: In party room, move to right corridor at 2:45 AM
else if (self.movementState === 2 && gameHour >= 2 && gameMinutes >= 45) {
self.moveToRoom(4); // Move to right corridor
self.movementState = 3;
self.lastMoveTime = currentTime;
}
}
};
self.updateFoxyMovement = function () {
if (gameHour < 2) return; // Foxy doesn't move until 2 AM
if (self.isMoving) return; // Don't move if already moving
var currentTime = LK.ticks / 60; // Convert to seconds
// State 0: In basement, move to party room at 2:30 AM
if (self.movementState === 0 && gameHour >= 2 && gameMinutes >= 30) {
self.moveToRoom(2); // Move to party room
self.movementState = 1;
self.lastMoveTime = currentTime;
}
// State 1: In party room, wait 15 seconds then move to left corridor
else if (self.movementState === 1 && currentTime - self.lastMoveTime >= 15) {
self.moveToRoom(3); // Move to left corridor
self.movementState = 2;
self.lastMoveTime = currentTime;
}
// State 2: In left corridor, wait 15 seconds then return to party room
else if (self.movementState === 2 && currentTime - self.lastMoveTime >= 15) {
self.moveToRoom(2); // Return to party room
self.movementState = 1;
self.lastMoveTime = currentTime;
}
};
self.moveToRoom = function (roomId) {
self.isMoving = true;
// Clear corridor timer if moving away from corridor
if (corridorWaitTimers[self.type] && (self.currentRoom === 3 || self.currentRoom === 4) && roomId !== 3 && roomId !== 4) {
delete corridorWaitTimers[self.type];
}
self.currentRoom = roomId;
// Start corridor wait timer if moving to left or right corridor
if ((roomId === 3 || roomId === 4) && !corridorWaitTimers[self.type]) {
corridorWaitTimers[self.type] = {
room: roomId,
startTime: LK.ticks,
triggered: false
};
}
// Play movement sound
LK.getSound('footsteps').play();
// Reset after movement
LK.setTimeout(function () {
self.isMoving = false;
}, 1000);
};
self.attemptMove = function () {
// Check if animatronic is allowed to move based on time
var canMove = false;
if (self.type === 'bonnie' && gameHour >= 1) canMove = true;
if (self.type === 'chica' && gameHour >= 2) canMove = true;
if (self.type === 'foxy' && gameHour >= 3) canMove = true;
if (self.type === 'freddy' && gameHour >= 4) canMove = true;
if (!canMove) return;
var pattern = self.movementPattern[self.type];
var currentIndex = pattern.indexOf(self.currentRoom);
if (currentIndex < pattern.length - 1) {
self.isMoving = true;
var nextRoom = pattern[currentIndex + 1];
// Clear corridor timer if moving away from corridor
if (corridorWaitTimers[self.type] && (self.currentRoom === 3 || self.currentRoom === 4) && nextRoom !== 3 && nextRoom !== 4) {
delete corridorWaitTimers[self.type];
}
self.currentRoom = nextRoom;
// Start corridor wait timer if moving to left or right corridor
if ((nextRoom === 3 || nextRoom === 4) && !corridorWaitTimers[self.type]) {
corridorWaitTimers[self.type] = {
room: nextRoom,
startTime: LK.ticks,
triggered: false
};
}
// Play movement sound
LK.getSound('footsteps').play();
// Reset after movement
LK.setTimeout(function () {
self.isMoving = false;
}, 1000);
}
};
self.setAggression = function (level) {
self.aggressionLevel = level;
};
return self;
});
var SecurityCamera = Container.expand(function (roomId, roomName, assetName) {
var self = Container.call(this);
var cameraView = self.attachAsset('cameraView', {
anchorX: 0.5,
anchorY: 0.5
});
var roomDisplay = self.attachAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
});
var roomLabel = new Text2(roomName, {
size: 24,
fill: 0xFFFFFF
});
roomLabel.anchor.set(0.5, 0);
roomLabel.y = 120;
self.addChild(roomLabel);
self.roomId = roomId;
self.roomName = roomName;
self.isActive = false;
self.activate = function () {
self.isActive = true;
self.alpha = 1;
powerDrain += 1;
};
self.deactivate = function () {
self.isActive = false;
self.alpha = 0.3;
powerDrain -= 1;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
// Game state variables
// Office view
// Door controls
// Doors
// Animatronics
// UI elements
// Sounds
var gameHour = 0; // 0-5 (12AM to 6AM)
var gameMinutes = 0;
var nightNumber = 1;
var powerLevel = 100;
var powerDrain = 0.2; // Base power drain per second (further reduced for better gameplay)
var gameRunning = false; // Start with false, will be set to true when game starts
var cameraMode = false;
var currentCameraRoom = 0;
var cameras = [];
var cameraButtons = [];
var gameStarted = false; // Track if game has started
// Door states
var leftDoorClosed = false;
var rightDoorClosed = false;
var leftLightOn = false;
var rightLightOn = false;
// Animatronics
var animatronics = [];
// Corridor wait timers for jumpscares
var corridorWaitTimers = {};
var freddy = new Animatronic('freddy', 1024, 1366);
var bonnie = new Animatronic('bonnie', 1024, 1366);
var chica = new Animatronic('chica', 1024, 1366);
var foxy = new Animatronic('foxy', 1024, 1366);
animatronics.push(freddy, bonnie, chica, foxy);
// Set initial positions
freddy.currentRoom = 0; // Stage
bonnie.currentRoom = 0; // Stage
chica.currentRoom = 0; // Stage
foxy.currentRoom = 5; // Basement
// Set initial aggression based on night
freddy.setAggression(nightNumber);
bonnie.setAggression(nightNumber);
chica.setAggression(nightNumber);
foxy.setAggression(nightNumber);
// Office setup
var office = game.addChild(LK.getAsset('office', {
x: 1024,
y: 1366,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.28,
scaleY: 2.28
}));
var desk = game.addChild(LK.getAsset('desk', {
x: 1024,
y: 2582,
anchorX: 0.5,
anchorY: 1
}));
var monitor = game.addChild(LK.getAsset('monitor', {
x: 1024,
y: 2432,
anchorX: 0.5,
anchorY: 1
}));
var monitorScreen = game.addChild(LK.getAsset('monitorScreen', {
x: 1024,
y: 2432,
anchorX: 0.5,
anchorY: 1
}));
// Door controls
var leftDoorButton = game.addChild(LK.getAsset('leftDoorButton', {
x: 200,
y: 2300,
anchorX: 0.5,
anchorY: 0.5
}));
var rightDoorButton = game.addChild(LK.getAsset('rightDoorButton', {
x: 1848,
y: 2300,
anchorX: 0.5,
anchorY: 0.5
}));
var leftLightButton = game.addChild(LK.getAsset('leftLightButton', {
x: 200,
y: 2150,
anchorX: 0.5,
anchorY: 0.5
}));
var rightLightButton = game.addChild(LK.getAsset('rightLightButton', {
x: 1848,
y: 2150,
anchorX: 0.5,
anchorY: 0.5
}));
// Doors
var leftDoor = game.addChild(LK.getAsset('leftDoor', {
x: 0,
y: 1366,
anchorX: 0,
anchorY: 0.5
}));
var rightDoor = game.addChild(LK.getAsset('rightDoor', {
x: 2048,
y: 1366,
anchorX: 1,
anchorY: 0.5
}));
// Initially hide doors
leftDoor.x = -300;
rightDoor.x = 2348;
// Initially hide all game elements until game starts
office.visible = false;
desk.visible = false;
monitor.visible = false;
monitorScreen.visible = false;
leftDoorButton.visible = false;
rightDoorButton.visible = false;
leftLightButton.visible = false;
rightLightButton.visible = false;
leftDoor.visible = false;
rightDoor.visible = false;
// Hide animatronics
for (var i = 0; i < animatronics.length; i++) {
game.removeChild(animatronics[i]);
}
// UI Elements
var timeText = new Text2('12:00 AM', {
size: 60,
fill: 0xFFFFFF
});
timeText.anchor.set(1, 0);
timeText.visible = false;
LK.gui.topRight.addChild(timeText);
var nightText = new Text2('Night ' + nightNumber, {
size: 50,
fill: 0xFFFFFF
});
nightText.anchor.set(0, 0);
nightText.visible = false;
LK.gui.topLeft.addChild(nightText);
nightText.x = 120; // Avoid platform menu
var powerBarBg = LK.gui.bottomLeft.addChild(LK.getAsset('powerBarBg', {
x: 20,
y: -60,
anchorX: 0,
anchorY: 0
}));
powerBarBg.visible = false;
var powerBar = LK.gui.bottomLeft.addChild(LK.getAsset('powerBar', {
x: 20,
y: -60,
anchorX: 0,
anchorY: 0
}));
powerBar.visible = false;
var powerText = new Text2('Power: 100%', {
size: 30,
fill: 0xFFFFFF
});
powerText.anchor.set(0, 0);
powerText.x = 20;
powerText.y = -100;
powerText.visible = false;
LK.gui.bottomLeft.addChild(powerText);
var cameraText = new Text2('Camera: OFF', {
size: 40,
fill: 0xFFFFFF
});
cameraText.anchor.set(0.5, 0);
cameraText.x = 0;
cameraText.y = 50;
cameraText.visible = false;
LK.gui.center.addChild(cameraText);
// Create camera system
var cameraRooms = [{
id: 0,
name: 'Stage',
asset: 'cameraStage'
}, {
id: 1,
name: 'Bathroom',
asset: 'cameraBathroom'
}, {
id: 2,
name: 'Party Area',
asset: 'cameraPartyArea'
}, {
id: 3,
name: 'Left Corridor',
asset: 'cameraLeftCorridor'
}, {
id: 4,
name: 'Right Corridor',
asset: 'cameraRightCorridor'
}, {
id: 5,
name: 'Basement',
asset: 'cameraBasement'
}, {
id: 6,
name: 'Office',
asset: 'cameraView'
}];
// Create camera displays
for (var i = 0; i < cameraRooms.length; i++) {
var room = cameraRooms[i];
var camera = new SecurityCamera(room.id, room.name, room.asset);
camera.x = 1024;
camera.y = 2302;
camera.visible = false;
cameras.push(camera);
game.addChild(camera);
// Add animatronics to specific cameras
if (room.id === 0) {
// Stage - Add Freddy, Bonnie, Chica to stage
var freddySprite = camera.addChild(LK.getAsset('freddy', {
x: -100,
y: -50,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6
}));
var bonnieSprite = camera.addChild(LK.getAsset('bonnie', {
x: -30,
y: -50,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6
}));
var chicaSprite = camera.addChild(LK.getAsset('chica', {
x: 40,
y: -50,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6
}));
camera.freddySprite = freddySprite;
camera.bonnieSprite = bonnieSprite;
camera.chicaSprite = chicaSprite;
} else if (room.id === 5) {
// Basement - Add Foxy and Bonnie to basement
var foxySprite = camera.addChild(LK.getAsset('foxy', {
x: -40,
y: -50,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
}));
var bonnieSprite = camera.addChild(LK.getAsset('bonnie', {
x: 40,
y: -50,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6,
visible: false
}));
camera.foxySprite = foxySprite;
camera.bonnieSprite = bonnieSprite;
} else {
// Other rooms - Add placeholder sprites for animatronics that might visit
var freddySprite = camera.addChild(LK.getAsset('freddy', {
x: 0,
y: -50,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6,
visible: false
}));
var bonnieSprite = camera.addChild(LK.getAsset('bonnie', {
x: -40,
y: -50,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6,
visible: false
}));
var chicaSprite = camera.addChild(LK.getAsset('chica', {
x: 40,
y: -50,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.6,
visible: false
}));
var foxySprite = camera.addChild(LK.getAsset('foxy', {
x: 0,
y: -30,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.7,
scaleY: 0.7,
visible: false
}));
camera.freddySprite = freddySprite;
camera.bonnieSprite = bonnieSprite;
camera.chicaSprite = chicaSprite;
camera.foxySprite = foxySprite;
}
}
// Create close camera button
var closeCameraButton = LK.gui.topRight.addChild(LK.getAsset('closeCameraButton', {
x: -150,
y: 100,
anchorX: 0.5,
anchorY: 0.5
}));
var closeCameraText = new Text2('CLOSE', {
size: 20,
fill: 0xFFFFFF
});
closeCameraText.anchor.set(0.5, 0.5);
closeCameraText.x = -150;
closeCameraText.y = 100;
LK.gui.topRight.addChild(closeCameraText);
closeCameraButton.visible = false;
closeCameraText.visible = false;
closeCameraButton.down = function (x, y, obj) {
if (cameraMode) {
toggleCamera();
}
};
// Create camera selection buttons with room names
var cameraButtonTexts = [];
// Stage camera button
var stageButton = LK.gui.topLeft.addChild(LK.getAsset('cameraButton', {
x: 150,
y: 50,
anchorX: 0.5,
anchorY: 0.5
}));
var stageButtonText = new Text2('Stage', {
size: 18,
fill: 0xFFFFFF
});
stageButtonText.anchor.set(0.5, 0.5);
stageButtonText.x = 150;
stageButtonText.y = 50;
LK.gui.topLeft.addChild(stageButtonText);
stageButton.roomId = 0;
stageButton.down = function (x, y, obj) {
if (cameraMode && powerLevel > 0) {
switchCamera(0);
}
};
stageButton.visible = false;
stageButtonText.visible = false;
cameraButtons.push(stageButton);
cameraButtonTexts.push(stageButtonText);
// Bathroom camera button
var bathroomButton = LK.gui.topLeft.addChild(LK.getAsset('cameraButton', {
x: 300,
y: 50,
anchorX: 0.5,
anchorY: 0.5
}));
var bathroomButtonText = new Text2('Bath', {
size: 18,
fill: 0xFFFFFF
});
bathroomButtonText.anchor.set(0.5, 0.5);
bathroomButtonText.x = 300;
bathroomButtonText.y = 50;
LK.gui.topLeft.addChild(bathroomButtonText);
bathroomButton.roomId = 1;
bathroomButton.down = function (x, y, obj) {
if (cameraMode && powerLevel > 0) {
switchCamera(1);
}
};
bathroomButton.visible = false;
bathroomButtonText.visible = false;
cameraButtons.push(bathroomButton);
cameraButtonTexts.push(bathroomButtonText);
// Party Area camera button
var partyButton = LK.gui.topLeft.addChild(LK.getAsset('cameraButton', {
x: 450,
y: 50,
anchorX: 0.5,
anchorY: 0.5
}));
var partyButtonText = new Text2('Party', {
size: 18,
fill: 0xFFFFFF
});
partyButtonText.anchor.set(0.5, 0.5);
partyButtonText.x = 450;
partyButtonText.y = 50;
LK.gui.topLeft.addChild(partyButtonText);
partyButton.roomId = 2;
partyButton.down = function (x, y, obj) {
if (cameraMode && powerLevel > 0) {
switchCamera(2);
}
};
partyButton.visible = false;
partyButtonText.visible = false;
cameraButtons.push(partyButton);
cameraButtonTexts.push(partyButtonText);
// Left Corridor camera button
var leftCorridorButton = LK.gui.topLeft.addChild(LK.getAsset('cameraButton', {
x: 150,
y: 130,
anchorX: 0.5,
anchorY: 0.5
}));
var leftCorridorButtonText = new Text2('L-Corr', {
size: 18,
fill: 0xFFFFFF
});
leftCorridorButtonText.anchor.set(0.5, 0.5);
leftCorridorButtonText.x = 150;
leftCorridorButtonText.y = 130;
LK.gui.topLeft.addChild(leftCorridorButtonText);
leftCorridorButton.roomId = 3;
leftCorridorButton.down = function (x, y, obj) {
if (cameraMode && powerLevel > 0) {
switchCamera(3);
}
};
leftCorridorButton.visible = false;
leftCorridorButtonText.visible = false;
cameraButtons.push(leftCorridorButton);
cameraButtonTexts.push(leftCorridorButtonText);
// Right Corridor camera button
var rightCorridorButton = LK.gui.topLeft.addChild(LK.getAsset('cameraButton', {
x: 300,
y: 130,
anchorX: 0.5,
anchorY: 0.5
}));
var rightCorridorButtonText = new Text2('R-Corr', {
size: 18,
fill: 0xFFFFFF
});
rightCorridorButtonText.anchor.set(0.5, 0.5);
rightCorridorButtonText.x = 300;
rightCorridorButtonText.y = 130;
LK.gui.topLeft.addChild(rightCorridorButtonText);
rightCorridorButton.roomId = 4;
rightCorridorButton.down = function (x, y, obj) {
if (cameraMode && powerLevel > 0) {
switchCamera(4);
}
};
rightCorridorButton.visible = false;
rightCorridorButtonText.visible = false;
cameraButtons.push(rightCorridorButton);
cameraButtonTexts.push(rightCorridorButtonText);
// Basement camera button
var basementButton = LK.gui.topLeft.addChild(LK.getAsset('cameraButton', {
x: 450,
y: 130,
anchorX: 0.5,
anchorY: 0.5
}));
var basementButtonText = new Text2('Base', {
size: 18,
fill: 0xFFFFFF
});
basementButtonText.anchor.set(0.5, 0.5);
basementButtonText.x = 450;
basementButtonText.y = 130;
LK.gui.topLeft.addChild(basementButtonText);
basementButton.roomId = 5;
basementButton.down = function (x, y, obj) {
if (cameraMode && powerLevel > 0) {
switchCamera(5);
}
};
basementButton.visible = false;
basementButtonText.visible = false;
cameraButtons.push(basementButton);
cameraButtonTexts.push(basementButtonText);
// Office camera button
var officeButton = LK.gui.topLeft.addChild(LK.getAsset('cameraButton', {
x: 600,
y: 130,
anchorX: 0.5,
anchorY: 0.5
}));
var officeButtonText = new Text2('Office', {
size: 18,
fill: 0xFFFFFF
});
officeButtonText.anchor.set(0.5, 0.5);
officeButtonText.x = 600;
officeButtonText.y = 130;
LK.gui.topLeft.addChild(officeButtonText);
officeButton.roomId = 6;
officeButton.down = function (x, y, obj) {
if (cameraMode && powerLevel > 0) {
switchCamera(6);
}
};
officeButton.visible = false;
officeButtonText.visible = false;
cameraButtons.push(officeButton);
cameraButtonTexts.push(officeButtonText);
// Create game menu
var menuOverlay = game.addChild(LK.getAsset('jumpscareOverlay', {
x: 0,
y: 0,
anchorX: 0,
anchorY: 0,
alpha: 0.9
}));
var menuBackground = menuOverlay.addChild(LK.getAsset('menuBackground', {
x: 1024,
y: 1366,
anchorX: 0.5,
anchorY: 0.5
}));
var menuTitle = new Text2('Five Nights at Mango\'s', {
size: 80,
fill: 0xFFFFFF
});
menuTitle.anchor.set(0.5, 0.5);
menuTitle.x = 1024;
menuTitle.y = 800;
menuOverlay.addChild(menuTitle);
var newGameButton = menuOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1100,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 1.5
}));
var newGameText = new Text2('NEW GAME', {
size: 40,
fill: 0xFFFFFF
});
newGameText.anchor.set(0.5, 0.5);
newGameText.x = 1024;
newGameText.y = 1100;
menuOverlay.addChild(newGameText);
newGameButton.down = function (x, y, obj) {
startGame();
};
// Add admin mode button
// Add continue button above admin mode
var continueButton = menuOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1300,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 1.5
}));
var continueText = new Text2('CONTINUE', {
size: 40,
fill: 0xFFFFFF
});
continueText.anchor.set(0.5, 0.5);
continueText.x = 1024;
continueText.y = 1300;
menuOverlay.addChild(continueText);
continueButton.down = function (x, y, obj) {
// Continue the current game if already started
if (gameStarted) {
menuOverlay.visible = false;
gameRunning = true;
// Resume office ambiance if not playing
LK.getSound('officeAmbiance').play();
}
};
var adminButton = menuOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1500,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 1.5
}));
var adminText = new Text2('ADMIN MODE', {
size: 40,
fill: 0xFFFFFF
});
adminText.anchor.set(0.5, 0.5);
adminText.x = 1024;
adminText.y = 1500;
menuOverlay.addChild(adminText);
adminButton.down = function (x, y, obj) {
showPasswordPrompt();
};
// Add night 6 button below admin mode
var night6Button = menuOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1700,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 1.5
}));
var night6Text = new Text2('NIGHT 6', {
size: 40,
fill: 0xFFFFFF
});
night6Text.anchor.set(0.5, 0.5);
night6Text.x = 1024;
night6Text.y = 1700;
menuOverlay.addChild(night6Text);
night6Button.down = function (x, y, obj) {
// Check if player completed the whole 5 nights
var completedNights = storage.completedNights || 0;
if (completedNights >= 5) {
// Player can access night 6
nightNumber = 6;
nightText.setText('Night 6'); // Update night text to show Night 6
startGame();
} else {
// Show message that player needs to complete main game first
var messageOverlay = game.addChild(LK.getAsset('jumpscareOverlay', {
x: 0,
y: 0,
anchorX: 0,
anchorY: 0,
alpha: 0.8
}));
var messageText = new Text2('Complete the main game first!', {
size: 60,
fill: 0xFF0000
});
messageText.anchor.set(0.5, 0.5);
messageText.x = 1024;
messageText.y = 1366;
messageOverlay.addChild(messageText);
// Remove message after 5 seconds
LK.setTimeout(function () {
game.removeChild(messageOverlay);
}, 5000);
}
};
// Add custom night button below night 6
var customNightButton = menuOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1900,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.2,
scaleY: 1.5
}));
var customNightText = new Text2('CUSTOM NIGHT', {
size: 40,
fill: 0xFFFFFF
});
customNightText.anchor.set(0.5, 0.5);
customNightText.x = 1024;
customNightText.y = 1900;
menuOverlay.addChild(customNightText);
customNightButton.down = function (x, y, obj) {
// Check if player completed night 6
var completedNight6 = storage.completedNight6 || false;
if (completedNight6) {
// Player can access custom night
nightNumber = 7; // Use 7 for custom night
startGame();
} else {
// Show message that player needs to complete night 6 first
var messageOverlay = game.addChild(LK.getAsset('jumpscareOverlay', {
x: 0,
y: 0,
anchorX: 0,
anchorY: 0,
alpha: 0.8
}));
var messageText = new Text2('Complete the night 6 first!', {
size: 60,
fill: 0xFF0000
});
messageText.anchor.set(0.5, 0.5);
messageText.x = 1024;
messageText.y = 1366;
messageOverlay.addChild(messageText);
// Remove message after 5 seconds
LK.setTimeout(function () {
game.removeChild(messageOverlay);
}, 5000);
}
};
// Play scary menu music when game loads
LK.playMusic('menuMusic');
// Event handlers
leftDoorButton.down = function (x, y, obj) {
toggleLeftDoor();
};
rightDoorButton.down = function (x, y, obj) {
toggleRightDoor();
};
leftLightButton.down = function (x, y, obj) {
toggleLeftLight();
};
rightLightButton.down = function (x, y, obj) {
toggleRightLight();
};
monitor.down = function (x, y, obj) {
toggleCamera();
};
// Game functions
function toggleLeftDoor() {
if (powerLevel <= 0) return;
leftDoorClosed = !leftDoorClosed;
LK.getSound('doorSlam').play();
if (leftDoorClosed) {
tween(leftDoor, {
x: 0
}, {
duration: 500
});
leftDoorButton.tint = 0x00ff00;
} else {
tween(leftDoor, {
x: -300
}, {
duration: 500
});
leftDoorButton.tint = 0xffffff;
}
}
function toggleRightDoor() {
if (powerLevel <= 0) return;
rightDoorClosed = !rightDoorClosed;
LK.getSound('doorSlam').play();
if (rightDoorClosed) {
tween(rightDoor, {
x: 1748
}, {
duration: 500
});
rightDoorButton.tint = 0x00ff00;
} else {
tween(rightDoor, {
x: 2348
}, {
duration: 500
});
rightDoorButton.tint = 0xffffff;
}
}
function toggleLeftLight() {
if (powerLevel <= 0) return;
leftLightOn = !leftLightOn;
if (leftLightOn) {
leftLightButton.tint = 0xffff00;
checkHallway('left');
} else {
leftLightButton.tint = 0xffffff;
}
}
function toggleRightLight() {
if (powerLevel <= 0) return;
rightLightOn = !rightLightOn;
if (rightLightOn) {
rightLightButton.tint = 0xffff00;
checkHallway('right');
} else {
rightLightButton.tint = 0xffffff;
}
}
function toggleCamera() {
if (powerLevel <= 0) return;
cameraMode = !cameraMode;
if (cameraMode) {
LK.getSound('cameraToggle').play();
// Play camera switch sound
LK.getSound('cameraSwitch').play();
cameraText.setText('Camera: ON - ' + cameraRooms[currentCameraRoom].name);
monitorScreen.tint = 0x0000ff;
cameras[currentCameraRoom].visible = true;
cameras[currentCameraRoom].activate();
// Scale up camera to full screen
cameras[currentCameraRoom].scaleX = 5.7;
cameras[currentCameraRoom].scaleY = 10.5;
cameras[currentCameraRoom].x = 1024;
cameras[currentCameraRoom].y = 1366;
// Update animatronic visibility in cameras
updateAnimatronicVisibility();
// Hide office elements
office.visible = false;
desk.visible = false;
monitor.visible = false;
leftDoorButton.visible = false;
rightDoorButton.visible = false;
leftLightButton.visible = false;
rightLightButton.visible = false;
leftDoor.visible = false;
rightDoor.visible = false;
// Play camera ambiance sound
LK.getSound('cameraAmbiance').play();
// Show camera buttons and close button
for (var i = 0; i < cameraButtons.length; i++) {
cameraButtons[i].visible = true;
cameraButtonTexts[i].visible = true;
}
closeCameraButton.visible = true;
closeCameraText.visible = true;
} else {
cameraText.setText('Camera: OFF');
monitorScreen.tint = 0xffffff;
for (var i = 0; i < cameras.length; i++) {
cameras[i].visible = false;
cameras[i].scaleX = 1;
cameras[i].scaleY = 1;
cameras[i].x = 1024;
cameras[i].y = 2302;
if (cameras[i].isActive) {
cameras[i].deactivate();
}
}
// Show office elements
office.visible = true;
desk.visible = true;
monitor.visible = true;
leftDoorButton.visible = true;
rightDoorButton.visible = true;
leftLightButton.visible = true;
rightLightButton.visible = true;
leftDoor.visible = true;
rightDoor.visible = true;
// Hide camera buttons and close button
for (var i = 0; i < cameraButtons.length; i++) {
cameraButtons[i].visible = false;
cameraButtonTexts[i].visible = false;
}
closeCameraButton.visible = false;
closeCameraText.visible = false;
}
LK.getSound('cameraToggle').play();
// Play camera switch sound
LK.getSound('cameraSwitch').play();
// Stop camera ambiance sound
LK.getSound('cameraAmbiance').stop();
}
function switchCamera(roomId) {
if (!cameraMode || powerLevel <= 0) return;
// Play camera switch sound
LK.getSound('cameraSwitch').play();
// Deactivate current camera
if (cameras[currentCameraRoom].isActive) {
cameras[currentCameraRoom].deactivate();
cameras[currentCameraRoom].visible = false;
cameras[currentCameraRoom].scaleX = 1;
cameras[currentCameraRoom].scaleY = 1;
}
// Activate new camera
currentCameraRoom = roomId;
cameras[currentCameraRoom].visible = true;
cameras[currentCameraRoom].activate();
// Scale up new camera to full screen
cameras[currentCameraRoom].scaleX = 5.7;
cameras[currentCameraRoom].scaleY = 10.5;
cameras[currentCameraRoom].x = 1024;
cameras[currentCameraRoom].y = 1366;
cameraText.setText('Camera: ON - ' + cameraRooms[currentCameraRoom].name);
// Update animatronic visibility
updateAnimatronicVisibility();
// Update button appearances
for (var i = 0; i < cameraButtons.length; i++) {
if (i === roomId) {
cameraButtons[i].tint = 0x00ff00;
} else {
cameraButtons[i].tint = 0xffffff;
}
}
}
function updateAnimatronicVisibility() {
// Hide all animatronics first
for (var i = 0; i < cameras.length; i++) {
var camera = cameras[i];
if (camera.freddySprite) camera.freddySprite.visible = false;
if (camera.bonnieSprite) camera.bonnieSprite.visible = false;
if (camera.chicaSprite) camera.chicaSprite.visible = false;
if (camera.foxySprite) camera.foxySprite.visible = false;
}
// Show animatronics in their current rooms
for (var i = 0; i < animatronics.length; i++) {
var animatronic = animatronics[i];
var room = animatronic.currentRoom;
if (room < cameras.length) {
var camera = cameras[room];
if (animatronic.type === 'freddy' && camera.freddySprite) {
camera.freddySprite.visible = true;
} else if (animatronic.type === 'bonnie' && camera.bonnieSprite) {
camera.bonnieSprite.visible = true;
} else if (animatronic.type === 'chica' && camera.chicaSprite) {
camera.chicaSprite.visible = true;
} else if (animatronic.type === 'foxy' && camera.foxySprite) {
camera.foxySprite.visible = true;
}
}
}
}
function checkHallway(side) {
// Check if animatronics are in the hallway
var animatronicPresent = false;
for (var i = 0; i < animatronics.length; i++) {
var animatronic = animatronics[i];
if (side === 'left' && (animatronic.type === 'bonnie' || animatronic.type === 'foxy') && animatronic.currentRoom === 6 || side === 'right' && animatronic.type === 'chica' && animatronic.currentRoom === 6) {
animatronicPresent = true;
break;
}
}
if (animatronicPresent) {
LK.effects.flashScreen(0xff0000, 200);
}
}
function checkForJumpscares() {
for (var i = 0; i < animatronics.length; i++) {
var animatronic = animatronics[i];
// Check if animatronic reached office
if (animatronic.currentRoom === 6) {
// Bonnie/Foxy check left door
if ((animatronic.type === 'bonnie' || animatronic.type === 'foxy') && !leftDoorClosed) {
jumpscare(animatronic.type);
return;
}
// Chica checks right door
if (animatronic.type === 'chica' && !rightDoorClosed) {
jumpscare(animatronic.type);
return;
}
// Freddy can attack from either side
if (animatronic.type === 'freddy' && (!leftDoorClosed || !rightDoorClosed)) {
jumpscare(animatronic.type);
return;
}
}
}
}
function jumpscare(animatronicType) {
gameRunning = false;
LK.getSound('scream').play();
LK.getSound('officeAmbiance').stop();
// Stop camera ambiance sound
LK.getSound('cameraAmbiance').stop();
// Create full-screen overlay (transparent to show animatronic face)
var jumpscareOverlay = game.addChild(LK.getAsset('jumpscareOverlay', {
x: 0,
y: 0,
anchorX: 0,
anchorY: 0,
alpha: 0.3
}));
// Add animatronic sprite to overlay (make face prominent)
var jumpscareSprite = jumpscareOverlay.addChild(LK.getAsset(animatronicType, {
x: 1024,
y: 1200,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 10,
scaleY: 10
}));
// Add glow effect to make face stand out
jumpscareSprite.tint = 0xffffff;
// Animate the jumpscare
tween(jumpscareSprite, {
scaleX: 15,
scaleY: 15
}, {
duration: 500,
easing: tween.easeOut
});
// Pulse the animatronic to make it more visible
tween(jumpscareSprite, {
alpha: 0.8
}, {
duration: 100,
repeat: 5,
yoyo: true
});
// Flash effect
LK.effects.flashScreen(0xff0000, 1000);
LK.setTimeout(function () {
LK.showGameOver();
}, 1000);
}
function updateTime() {
gameMinutes += 1;
if (gameMinutes >= 60) {
gameMinutes = 0;
gameHour += 1;
if (gameHour >= 6) {
// Night completed
nightCompleted();
return;
}
}
var displayHour = gameHour === 0 ? 12 : gameHour;
var displayMinutes = gameMinutes.toString().padStart(2, '0');
var ampm = gameHour < 6 ? 'AM' : 'AM';
timeText.setText(displayHour + ':' + displayMinutes + ' ' + ampm);
}
function nightCompleted() {
gameRunning = false;
LK.getSound('officeAmbiance').stop();
// Stop camera ambiance sound
LK.getSound('cameraAmbiance').stop();
// Show 6 AM completion sequence
var displayHour = 6;
var displayMinutes = '00';
var ampm = 'AM';
timeText.setText(displayHour + ':' + displayMinutes + ' ' + ampm);
// Create black screen overlay
var completionOverlay = game.addChild(LK.getAsset('jumpscareOverlay', {
x: 0,
y: 0,
anchorX: 0,
anchorY: 0,
alpha: 1.0
}));
// Add 6 AM text display centered on black screen
var sixAmText = new Text2('6:00 AM', {
size: 120,
fill: 0x00ff00
});
sixAmText.anchor.set(0.5, 0.5);
sixAmText.x = 1024;
sixAmText.y = 1366;
completionOverlay.addChild(sixAmText);
// Play completion sound
LK.getSound('completion').play();
// Show 6:00 AM for 10 seconds then transition to next night
LK.setTimeout(function () {
// Remove completion overlay
game.removeChild(completionOverlay);
if (nightNumber >= 7) {
// Custom night completed
LK.showYouWin();
} else if (nightNumber === 6) {
// Night 6 completed - save completion and unlock custom night
storage.completedNight6 = true;
LK.showYouWin();
} else if (nightNumber >= 5) {
// Save completion progress
var completedNights = storage.completedNights || 0;
if (nightNumber > completedNights) {
storage.completedNights = nightNumber;
}
LK.showYouWin();
} else {
// Save completion progress
var completedNights = storage.completedNights || 0;
if (nightNumber > completedNights) {
storage.completedNights = nightNumber;
}
// Move to next night
nightNumber++;
// Reset night text
nightText.setText('Night ' + nightNumber);
// Start the next night directly without going to menu
resetNight();
}
}, 10000);
}
function resetNight() {
gameHour = 0;
gameMinutes = 0;
powerLevel = 100;
if (isAdminMode) {
powerLevel = 100; // Ensure power stays at 100% in admin mode
}
gameRunning = true;
powerDrainTimer = 0;
nextPowerDrainTick = 20 * 60; // Reset to 20 seconds (nothing activated)
currentCameraRoom = 0;
// Reset corridor wait timers
corridorWaitTimers = {};
// Reset animatronics
for (var i = 0; i < animatronics.length; i++) {
if (animatronics[i].type === 'foxy') {
animatronics[i].currentRoom = 5; // Foxy starts in basement
} else {
animatronics[i].currentRoom = 0; // Others start on stage
}
// Reset Bonnie's movement state
if (animatronics[i].type === 'bonnie') {
animatronics[i].movementState = 0;
animatronics[i].lastMoveTime = 0;
animatronics[i].waitingInBasement = false;
animatronics[i].waitingInParty = false;
}
// Reset Chica's movement state
if (animatronics[i].type === 'chica') {
animatronics[i].movementState = 0;
animatronics[i].lastMoveTime = 0;
}
animatronics[i].setAggression(nightNumber);
}
// Reset doors and lights
leftDoorClosed = false;
rightDoorClosed = false;
leftLightOn = false;
rightLightOn = false;
cameraMode = false;
// Reset camera views
for (var i = 0; i < cameras.length; i++) {
cameras[i].visible = false;
cameras[i].scaleX = 1;
cameras[i].scaleY = 1;
cameras[i].x = 1024;
cameras[i].y = 2302;
if (cameras[i].isActive) {
cameras[i].deactivate();
}
}
// Show office elements
if (gameStarted) {
office.visible = true;
desk.visible = true;
monitor.visible = true;
monitorScreen.visible = true;
leftDoorButton.visible = true;
rightDoorButton.visible = true;
leftLightButton.visible = true;
rightLightButton.visible = true;
leftDoor.visible = true;
rightDoor.visible = true;
// Show UI elements
timeText.visible = true;
nightText.visible = true;
powerBarBg.visible = true;
powerBar.visible = true;
powerText.visible = true;
cameraText.visible = true;
}
// Hide camera buttons
for (var i = 0; i < cameraButtons.length; i++) {
cameraButtons[i].visible = false;
cameraButtons[i].tint = 0xffffff;
}
// Reset UI
if (nightNumber === 6) {
nightText.setText('Night 6');
} else {
nightText.setText('Night ' + nightNumber);
}
leftDoorButton.tint = 0xffffff;
rightDoorButton.tint = 0xffffff;
leftLightButton.tint = 0xffffff;
rightLightButton.tint = 0xffffff;
monitorScreen.tint = 0xffffff;
cameraText.setText('Camera: OFF');
// Reset door positions
leftDoor.x = -300;
rightDoor.x = 2348;
}
// Game timers
var timeTimer = LK.setInterval(function () {
if (gameRunning) {
updateTime();
}
}, 1000); // 1 second = 1 minute in game
// Power drain timing system
var powerDrainTimer = 0;
var nextPowerDrainTick = 20 * 60; // Start with 20 seconds (nothing activated - slower)
var powerTimer = LK.setInterval(function () {
if (gameRunning && powerLevel > 0) {
powerDrainTimer++;
// Check if it's time to drain power
if (powerDrainTimer >= nextPowerDrainTick) {
if (!isAdminMode) {
powerLevel -= 1; // Drain 1% power
} else {
powerLevel = 100; // Keep power at 100% in admin mode
}
powerDrainTimer = 0; // Reset timer
if (powerLevel < 0) powerLevel = 0;
}
// Calculate next drain interval based on current state
var camerasOpen = cameraMode;
var doorsClosedCount = (leftDoorClosed ? 1 : 0) + (rightDoorClosed ? 1 : 0);
var lightsOnCount = (leftLightOn ? 1 : 0) + (rightLightOn ? 1 : 0);
var totalActivatedSystems = (camerasOpen ? 1 : 0) + doorsClosedCount + lightsOnCount;
if (totalActivatedSystems === 0) {
// Nothing activated: slowest drain (10 seconds)
nextPowerDrainTick = 10 * 60;
} else if (totalActivatedSystems === 1) {
// One system activated: slower drain (1 second)
nextPowerDrainTick = 1 * 60;
} else if (totalActivatedSystems === 2) {
// Two systems activated: medium drain (0.75 seconds)
nextPowerDrainTick = 0.75 * 60;
} else if (totalActivatedSystems === 3) {
// Three systems activated: faster drain (0.5 seconds)
nextPowerDrainTick = 0.5 * 60;
} else if (totalActivatedSystems === 4) {
// Four systems activated: fast drain (0.25 seconds)
nextPowerDrainTick = 0.25 * 60;
} else {
// All systems activated: fastest drain (0.1 seconds)
nextPowerDrainTick = 0.1 * 60;
}
// Update power bar
var powerPercent = powerLevel / 100;
powerBar.width = 300 * powerPercent;
powerText.setText('Power: ' + Math.ceil(powerLevel) + '%');
if (powerLevel <= 0) {
powerOut();
}
}
}, 100);
function showPasswordPrompt() {
// Create password input overlay
var passwordOverlay = game.addChild(LK.getAsset('jumpscareOverlay', {
x: 0,
y: 0,
anchorX: 0,
anchorY: 0,
alpha: 0.8
}));
var passwordPrompt = new Text2('Enter Admin Password:', {
size: 60,
fill: 0xFFFFFF
});
passwordPrompt.anchor.set(0.5, 0.5);
passwordPrompt.x = 1024;
passwordPrompt.y = 1200;
passwordOverlay.addChild(passwordPrompt);
var passwordInput = '';
var passwordDisplay = new Text2('', {
size: 50,
fill: 0x00FF00
});
passwordDisplay.anchor.set(0.5, 0.5);
passwordDisplay.x = 1024;
passwordDisplay.y = 1300;
passwordOverlay.addChild(passwordDisplay);
var messageText = new Text2('', {
size: 40,
fill: 0xFF0000
});
messageText.anchor.set(0.5, 0.5);
messageText.x = 1024;
messageText.y = 1400;
passwordOverlay.addChild(messageText);
// Create virtual keyboard buttons
var keyboard = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
var keyButtons = [];
var keyTexts = [];
for (var i = 0; i < keyboard.length; i++) {
var _char = keyboard[i];
var row = Math.floor(i / 8);
var col = i % 8;
var keyButton = passwordOverlay.addChild(LK.getAsset('cameraButton', {
x: 500 + col * 130,
y: 1500 + row * 90,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.2,
scaleY: 1.2
}));
var keyText = new Text2(_char, {
size: 24,
fill: 0xFFFFFF
});
keyText.anchor.set(0.5, 0.5);
keyText.x = 500 + col * 130;
keyText.y = 1500 + row * 90;
passwordOverlay.addChild(keyText);
keyButton["char"] = _char;
keyButton.down = function (x, y, obj) {
if (passwordInput.length < 20) {
passwordInput += this["char"];
passwordDisplay.setText(passwordInput);
}
};
keyButtons.push(keyButton);
keyTexts.push(keyText);
}
// Add Enter button
var enterButton = passwordOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 800,
y: 2000,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1
}));
var enterText = new Text2('ENTER', {
size: 30,
fill: 0xFFFFFF
});
enterText.anchor.set(0.5, 0.5);
enterText.x = 800;
enterText.y = 2000;
passwordOverlay.addChild(enterText);
enterButton.down = function (x, y, obj) {
if (passwordInput === 'ARASBABA300710ONCUL') {
// Correct password - activate admin mode
messageText.setText('Admin Mode Activated!');
messageText.tint = 0x00FF00;
LK.setTimeout(function () {
game.removeChild(passwordOverlay);
activateAdminMode();
}, 1000);
} else {
// Wrong password
messageText.setText('Wrong password!');
messageText.tint = 0xFF0000;
passwordInput = '';
passwordDisplay.setText('');
}
};
// Add Clear button
var clearButton = passwordOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1200,
y: 2000,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1
}));
var clearText = new Text2('CLEAR', {
size: 30,
fill: 0xFFFFFF
});
clearText.anchor.set(0.5, 0.5);
clearText.x = 1200;
clearText.y = 2000;
passwordOverlay.addChild(clearText);
clearButton.down = function (x, y, obj) {
passwordInput = '';
passwordDisplay.setText('');
messageText.setText('');
};
// Add Back button
var backButton = passwordOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1000,
y: 2100,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.5,
scaleY: 1
}));
var backText = new Text2('BACK', {
size: 30,
fill: 0xFFFFFF
});
backText.anchor.set(0.5, 0.5);
backText.x = 1000;
backText.y = 2100;
passwordOverlay.addChild(backText);
backButton.down = function (x, y, obj) {
game.removeChild(passwordOverlay);
};
}
var isAdminMode = false;
function activateAdminMode() {
isAdminMode = true;
// Set unlimited power
powerLevel = 100;
// Create admin mode interface
var adminOverlay = game.addChild(LK.getAsset('jumpscareOverlay', {
x: 0,
y: 0,
anchorX: 0,
anchorY: 0,
alpha: 0.9
}));
var adminTitle = new Text2('ADMIN MODE', {
size: 80,
fill: 0x00FF00
});
adminTitle.anchor.set(0.5, 0.5);
adminTitle.x = 1024;
adminTitle.y = 500;
adminOverlay.addChild(adminTitle);
var adminInfo = new Text2('UNLIMITED POWER ACTIVATED\nAdmin controls activated\nAll debug features unlocked', {
size: 40,
fill: 0xFFFFFF
});
adminInfo.anchor.set(0.5, 0.5);
adminInfo.x = 1024;
adminInfo.y = 800;
adminOverlay.addChild(adminInfo);
// Add unlimited power button
var unlimitedPowerButton = adminOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1200,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 1.5
}));
var unlimitedPowerText = new Text2('UNLIMITED POWER: ' + (isAdminMode ? 'ON' : 'OFF'), {
size: 35,
fill: isAdminMode ? 0x00FF00 : 0xFF0000
});
unlimitedPowerText.anchor.set(0.5, 0.5);
unlimitedPowerText.x = 1024;
unlimitedPowerText.y = 1200;
adminOverlay.addChild(unlimitedPowerText);
unlimitedPowerButton.down = function (x, y, obj) {
isAdminMode = !isAdminMode;
if (isAdminMode) {
powerLevel = 100;
unlimitedPowerText.setText('UNLIMITED POWER: ON');
unlimitedPowerText.tint = 0x00FF00;
} else {
unlimitedPowerText.setText('UNLIMITED POWER: OFF');
unlimitedPowerText.tint = 0xFF0000;
}
};
// Add unlock all nights button
var unlockAllButton = adminOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1400,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 1.5
}));
var unlockAllText = new Text2('UNLOCK ALL NIGHTS', {
size: 35,
fill: 0xFFFFFF
});
unlockAllText.anchor.set(0.5, 0.5);
unlockAllText.x = 1024;
unlockAllText.y = 1400;
adminOverlay.addChild(unlockAllText);
unlockAllButton.down = function (x, y, obj) {
// Unlock night 6 and custom night
storage.completedNights = 5;
storage.completedNight6 = true;
unlockAllText.setText('ALL NIGHTS UNLOCKED!');
unlockAllText.tint = 0x00FF00;
LK.setTimeout(function () {
unlockAllText.setText('UNLOCK ALL NIGHTS');
unlockAllText.tint = 0xFFFFFF;
}, 2000);
};
// Add close admin button
var closeAdminButton = adminOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1600,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2,
scaleY: 1.5
}));
var closeAdminText = new Text2('CLOSE ADMIN', {
size: 40,
fill: 0xFFFFFF
});
closeAdminText.anchor.set(0.5, 0.5);
closeAdminText.x = 1024;
closeAdminText.y = 1600;
adminOverlay.addChild(closeAdminText);
closeAdminButton.down = function (x, y, obj) {
game.removeChild(adminOverlay);
};
}
function startGame() {
gameStarted = true;
gameRunning = true;
menuOverlay.visible = false;
// Stop menu music when starting game
LK.stopMusic();
// Play office ambiance sound
LK.getSound('officeAmbiance').play();
// Show all UI elements
timeText.visible = true;
nightText.visible = true;
powerBarBg.visible = true;
powerBar.visible = true;
powerText.visible = true;
cameraText.visible = true;
monitorScreen.visible = true;
// Add animatronics back to game
for (var i = 0; i < animatronics.length; i++) {
game.addChild(animatronics[i]);
}
// Initialize night 1
nightNumber = 1;
resetNight();
// Show night text
nightText.setText('Night ' + nightNumber);
}
function powerOut() {
LK.getSound('powerDown').play();
// Stop camera ambiance sound
LK.getSound('cameraAmbiance').stop();
// Turn off all systems
leftDoorClosed = false;
rightDoorClosed = false;
leftLightOn = false;
rightLightOn = false;
cameraMode = false;
// Reset visual states
leftDoorButton.tint = 0x333333;
rightDoorButton.tint = 0x333333;
leftLightButton.tint = 0x333333;
rightLightButton.tint = 0x333333;
monitorScreen.tint = 0x333333;
// Hide doors
tween(leftDoor, {
x: -300
}, {
duration: 1000
});
tween(rightDoor, {
x: 2348
}, {
duration: 1000
});
// Freddy will attack after power runs out
LK.setTimeout(function () {
if (gameRunning) {
jumpscare('freddy');
}
}, 3000);
}
game.update = function () {
if (!gameRunning || !gameStarted) return;
// Update animatronics
for (var i = 0; i < animatronics.length; i++) {
animatronics[i].update();
}
// Check corridor wait timers
for (var animatronicType in corridorWaitTimers) {
var timer = corridorWaitTimers[animatronicType];
if (!timer.triggered) {
var timeWaited = (LK.ticks - timer.startTime) / 60; // Convert to seconds
// Check if door was closed while animatronic is waiting
var doorClosed = false;
if (timer.room === 3 && leftDoorClosed) {
doorClosed = true;
} else if (timer.room === 4 && rightDoorClosed) {
doorClosed = true;
}
// If door is closed, start disappear timer
if (doorClosed && !timer.disappearStartTime) {
timer.disappearStartTime = LK.ticks;
}
// If disappear timer started, check if 3 seconds passed
if (timer.disappearStartTime) {
var disappearTime = (LK.ticks - timer.disappearStartTime) / 60;
if (disappearTime >= 3) {
// Find the animatronic and move it away from corridor
for (var i = 0; i < animatronics.length; i++) {
if (animatronics[i].type === animatronicType) {
// Move back to previous room or stage
if (animatronics[i].type === 'bonnie') {
animatronics[i].currentRoom = 2; // Back to party room
} else if (animatronics[i].type === 'chica') {
animatronics[i].currentRoom = 2; // Back to party room
}
break;
}
}
delete corridorWaitTimers[animatronicType];
continue;
}
}
// Check if 10 seconds have passed (only if door not closed)
if (timeWaited >= 10 && !doorClosed) {
var shouldJumpscare = false;
// Check if appropriate door is closed
if (timer.room === 3 && !leftDoorClosed) {
// Left corridor
shouldJumpscare = true;
} else if (timer.room === 4 && !rightDoorClosed) {
// Right corridor
shouldJumpscare = true;
}
if (shouldJumpscare) {
timer.triggered = true;
jumpscare(animatronicType);
return;
} else {
// Door was closed in time, remove timer
delete corridorWaitTimers[animatronicType];
}
}
}
}
// Check for jumpscares
checkForJumpscares();
// Update power drain visualization
if (powerDrain > 1) {
powerBar.tint = 0xff0000;
} else {
powerBar.tint = 0x00ff00;
}
}; ===================================================================
--- original.js
+++ change.js
@@ -923,8 +923,9 @@
var completedNights = storage.completedNights || 0;
if (completedNights >= 5) {
// Player can access night 6
nightNumber = 6;
+ nightText.setText('Night 6'); // Update night text to show Night 6
startGame();
} else {
// Show message that player needs to complete main game first
var messageOverlay = game.addChild(LK.getAsset('jumpscareOverlay', {
@@ -1445,9 +1446,13 @@
cameraButtons[i].visible = false;
cameraButtons[i].tint = 0xffffff;
}
// Reset UI
- nightText.setText('Night ' + nightNumber);
+ if (nightNumber === 6) {
+ nightText.setText('Night 6');
+ } else {
+ nightText.setText('Night ' + nightNumber);
+ }
leftDoorButton.tint = 0xffffff;
rightDoorButton.tint = 0xffffff;
leftLightButton.tint = 0xffffff;
rightLightButton.tint = 0xffffff;
footsteps
Sound effect
menuMusic
Music
doorSlam
Sound effect
cameraSwitch
Sound effect
scream
Sound effect
officeAmbiance
Sound effect
cameraAmbiance
Sound effect
cameraToggle
Sound effect
completion
Sound effect
powerDown
Sound effect
cutsceneMusic
Sound effect
freddyCorridorSound
Sound effect
customNightEndSound
Sound effect