User prompt
make the custom night button slightly wider
User prompt
add custom night button on menu below night 6, 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
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
remove it
User prompt
also add back to the menu botton top of screen while playing
User prompt
make button spaces bigger in menu
User prompt
add continue button at menu above admin mode button and bottom new game button
User prompt
you forgot to add chica in bathroom at night 2
User prompt
add a sound for that
User prompt
change it to 10 seconds
User prompt
when you finish the game show the 06:00 time on a black screen for 7 seconds, and then take player to the night 2 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
at night 2 bonnie; he will go to basement at 12:45 AM, then he will go to party room at 1 AM, then he will come to left corridor at 1:30 AM, after 15 seconds it will repeat Chica; she will go to basement at 12:30 AM, then she will go to bathroom at 12:50 AM, then she will go to party room at 1 AM, then she will come to right corridor at 1:25 AM, after 20 seconds it will repeat
User prompt
at night 2 bonnie; he will go to basement at 12:45 AM, then he will go to party room at 1 AM, then he will come to left corridor at 1:30 AM, after 15 seconds it will repeat Chica; she will go to basement at 12:30 AM, then she will go to bathroom at 12:50 AM, then she will go to party room at 1 AM, then she will come to right corridor at 1:25 AM, after 20 seconds it will repeat
User prompt
make the unlimited power as button in admin mode
User prompt
admin powers are; Unlimited power
User prompt
ARASBABA300710ONCUL is the admin password, also make the keyboard bigger
User prompt
add an admin mode button on menu, when you click it, ask for password, password is "ArasBaba300710Oncul" if anything other then this written say "Wrong password!"
User prompt
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.
User prompt
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
make that sound when I open the camera and closing the camera
User prompt
add an sound asset for it
User prompt
add a sound when opening and closing the camera
User prompt
add camera ambiance sound
User prompt
add office ambiance sound
User prompt
also foxy doesnt move and do nothing
/****
* Plugins
****/
var tween = LK.import("@upit/tween.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
****/
// Sounds
// UI elements
// Animatronics
// Doors
// Door controls
// Office view
// Game state variables
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: 1200,
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 = 1200;
menuOverlay.addChild(newGameText);
newGameButton.down = function (x, y, obj) {
startGame();
};
// Add admin mode button
var adminButton = menuOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1400,
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 = 1400;
menuOverlay.addChild(adminText);
adminButton.down = function (x, y, obj) {
showPasswordPrompt();
};
// 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);
// Show 6:00 AM for 7 seconds then transition to next night
LK.setTimeout(function () {
// Remove completion overlay
game.removeChild(completionOverlay);
if (nightNumber >= 5) {
LK.showYouWin();
} else {
// Move to next night
nightNumber++;
// Reset night text
nightText.setText('Night ' + nightNumber);
// Start the next night directly without going to menu
resetNight();
}
}, 7000);
}
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
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 close admin button
var closeAdminButton = adminOverlay.addChild(LK.getAsset('closeCameraButton', {
x: 1024,
y: 1400,
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 = 1400;
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
@@ -54,27 +54,27 @@
};
self.updateBonnieMovement = function () {
if (self.isMoving) return; // Don't move if already moving
var currentTime = LK.ticks / 60; // Convert to seconds
- // Night 2 movement pattern
+ // 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, wait until 1 AM then move to party room
- else if (self.movementState === 1 && self.waitingInBasement && gameHour >= 1 && gameMinutes >= 0) {
+ // 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, wait until 1:30 AM then move to left corridor
- else if (self.movementState === 2 && self.waitingInParty && gameHour >= 1 && gameMinutes >= 30) {
+ // 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;
@@ -86,9 +86,9 @@
self.lastMoveTime = currentTime;
self.waitingInBasement = true;
}
} else {
- // Original Night 1 movement pattern
+ // 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
@@ -122,29 +122,29 @@
};
self.updateChicaMovement = function () {
if (self.isMoving) return; // Don't move if already moving
var currentTime = LK.ticks / 60; // Convert to seconds
- // Night 2 movement pattern
+ // 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, wait until 12:50 AM then move to bathroom
+ // 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, wait until 1:00 AM then move to party room
+ // 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, wait until 1:25 AM then move to right corridor
+ // 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;
@@ -155,9 +155,9 @@
self.movementState = 1;
self.lastMoveTime = currentTime;
}
} else {
- // Original Night 1 movement pattern
+ // 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
@@ -1195,80 +1195,40 @@
var displayHour = 6;
var displayMinutes = '00';
var ampm = 'AM';
timeText.setText(displayHour + ':' + displayMinutes + ' ' + ampm);
- // Create completion overlay
+ // Create black screen overlay
var completionOverlay = game.addChild(LK.getAsset('jumpscareOverlay', {
x: 0,
y: 0,
anchorX: 0,
anchorY: 0,
- alpha: 0.8
+ alpha: 1.0
}));
- // Add 6 AM text display
+ // 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 = 1200;
+ sixAmText.y = 1366;
completionOverlay.addChild(sixAmText);
- // Add night completed text
- var nightCompletedText = new Text2('Night ' + nightNumber + ' Completed!', {
- size: 80,
- fill: 0xffffff
- });
- nightCompletedText.anchor.set(0.5, 0.5);
- nightCompletedText.x = 1024;
- nightCompletedText.y = 1400;
- completionOverlay.addChild(nightCompletedText);
- // Animate the 6 AM text
- tween(sixAmText, {
- scaleX: 1.5,
- scaleY: 1.5
- }, {
- duration: 1000,
- easing: tween.easeInOut
- });
- // Create confetti effect with multiple colored rectangles
- for (var i = 0; i < 50; i++) {
- var confetti = completionOverlay.addChild(LK.getAsset('powerBar', {
- x: Math.random() * 2048,
- y: -100,
- anchorX: 0.5,
- anchorY: 0.5,
- scaleX: 0.1,
- scaleY: 0.1
- }));
- // Random colors for confetti
- var colors = [0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xff00ff, 0x00ffff];
- confetti.tint = colors[Math.floor(Math.random() * colors.length)];
- // Animate confetti falling
- tween(confetti, {
- y: 2800,
- rotation: Math.random() * Math.PI * 4
- }, {
- duration: 3000 + Math.random() * 2000,
- easing: tween.easeOut
- });
- }
- // After 4 seconds, return to menu
+ // Show 6:00 AM for 7 seconds then transition to next night
LK.setTimeout(function () {
// Remove completion overlay
game.removeChild(completionOverlay);
if (nightNumber >= 5) {
LK.showYouWin();
} else {
- // Return to menu for next night
- menuOverlay.visible = true;
+ // Move to next night
nightNumber++;
- // Play menu music again
- LK.playMusic('menuMusic');
- // Reset night text for menu
+ // Reset night text
nightText.setText('Night ' + nightNumber);
+ // Start the next night directly without going to menu
+ resetNight();
}
- }, 4000);
+ }, 7000);
}
function resetNight() {
gameHour = 0;
gameMinutes = 0;
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