User prompt
when you finish the game at 6 AM show the time coming to 6 AM and put confetti around and take player back to the menu ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
also slow the power drain a little bit when something is activeted
User prompt
add menu background
User prompt
change the game's name to; Five Nights at Mango's
User prompt
add a scary music to menu
User prompt
also remove all things when menu is open
User prompt
add game menu when you are starting the game. add; New Game: Opens the game (night one)
User prompt
you forgot to add bonnie to basement in 1 AM
User prompt
make the doors bigger
User prompt
show animatronic's face when getting jumpscared
User prompt
make office cover all of my screen but dont make it cover other images and buttons
User prompt
add a sound when changing cameras
User prompt
and when something is activeted it drains faster
User prompt
faster faster faster, like 5x
User prompt
still not fast enough
User prompt
no like super fast
User prompt
also when everything is actived at the same time it drains even more faster
User prompt
make it faster
User prompt
still drains so slow when camera and doors are activetd ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
it drains slower when nothing is activeted, when anything is activeted like camera and doors it drains faster
User prompt
every 15 seconds it drains %1 power when nothing is activeted, when cameras are open it drains 1% power every 10 seconds, when you close the door it drains 1% power every 10 seconds, when you close the both doors it drains 1% power every 5 second, when you, close one door and open camera it drains 1% power every 5 seconds, when close both doors and open camera it drains 1% power every 2 seconds
User prompt
every 15 seconds it drains %1 power when nothing is activeted, when cameras are open every 10 seconds, when you close the door every 10 seconds, when you close the both doors every 5 second, when you, close one door and open camera every 5 seconds, when close both doors and open camera every 2 seconds ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
when you close the door while they wait in corridors, they dissapear in 3 seconds ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
also add screamin sound to jumpscares and make them cover my screen ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
reduce it by 2 times again
/****
* 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, 3, 6] // Basement -> Left Corridor -> Office
};
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 {
// Original movement logic for other animatronics
var moveChance = self.aggressionLevel * 0.002;
if (Math.random() < moveChance && !self.isMoving) {
self.attemptMove();
}
}
};
self.updateBonnieMovement = function () {
if (gameHour < 1) return; // Bonnie doesn't move until 1 AM
if (self.isMoving) return; // Don't move if already moving
var currentTime = LK.ticks / 60; // Convert to seconds
// 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 (gameHour < 1 || gameHour === 1 && gameMinutes < 30) return; // Chica doesn't move until 1:30 AM
if (self.isMoving) return; // Don't move if already moving
var currentTime = LK.ticks / 60; // Convert to seconds
// 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 AM
else if (self.movementState === 1 && gameHour >= 2) {
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.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 = true;
var cameraMode = false;
var currentCameraRoom = 0;
var cameras = [];
var cameraButtons = [];
// 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;
// UI Elements
var timeText = new Text2('12:00 AM', {
size: 60,
fill: 0xFFFFFF
});
timeText.anchor.set(1, 0);
LK.gui.topRight.addChild(timeText);
var nightText = new Text2('Night ' + nightNumber, {
size: 50,
fill: 0xFFFFFF
});
nightText.anchor.set(0, 0);
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
}));
var powerBar = LK.gui.bottomLeft.addChild(LK.getAsset('powerBar', {
x: 20,
y: -60,
anchorX: 0,
anchorY: 0
}));
var powerText = new Text2('Power: 100%', {
size: 30,
fill: 0xFFFFFF
});
powerText.anchor.set(0, 0);
powerText.x = 20;
powerText.y = -100;
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;
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 to basement
var foxySprite = camera.addChild(LK.getAsset('foxy', {
x: 0,
y: -50,
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.8,
scaleY: 0.8
}));
camera.foxySprite = foxySprite;
} 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);
// 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) {
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;
// 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;
}
}
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();
// 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;
if (nightNumber >= 5) {
LK.showYouWin();
} else {
nightNumber++;
// Reset for next night
resetNight();
}
}
function resetNight() {
gameHour = 0;
gameMinutes = 0;
powerLevel = 100;
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
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
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) {
powerLevel -= 1; // Drain 1% power
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: much faster drain (0.5 seconds)
nextPowerDrainTick = 0.5 * 60;
} else if (totalActivatedSystems === 2) {
// Two systems activated: very fast drain (0.25 seconds)
nextPowerDrainTick = 0.25 * 60;
} else if (totalActivatedSystems === 3) {
// Three systems activated: extremely fast drain (0.1 seconds)
nextPowerDrainTick = 0.1 * 60;
} else if (totalActivatedSystems === 4) {
// Four systems activated: ultra fast drain (0.05 seconds)
nextPowerDrainTick = 0.05 * 60;
} else {
// All systems activated: insanely fast drain (0.004 seconds - 5x faster)
nextPowerDrainTick = 0.004 * 60;
}
// Update power bar
var powerPercent = powerLevel / 100;
powerBar.width = 300 * powerPercent;
powerText.setText('Power: ' + Math.ceil(powerLevel) + '%');
if (powerLevel <= 0) {
powerOut();
}
}
}, 100);
function powerOut() {
LK.getSound('powerDown').play();
// 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) 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
@@ -319,10 +319,10 @@
anchorX: 1,
anchorY: 0.5
}));
// Initially hide doors
-leftDoor.x = -200;
-rightDoor.x = 2248;
+leftDoor.x = -300;
+rightDoor.x = 2348;
// UI Elements
var timeText = new Text2('12:00 AM', {
size: 60,
fill: 0xFFFFFF
@@ -716,9 +716,9 @@
});
leftDoorButton.tint = 0x00ff00;
} else {
tween(leftDoor, {
- x: -200
+ x: -300
}, {
duration: 500
});
leftDoorButton.tint = 0xffffff;
@@ -729,16 +729,16 @@
rightDoorClosed = !rightDoorClosed;
LK.getSound('doorSlam').play();
if (rightDoorClosed) {
tween(rightDoor, {
- x: 1848
+ x: 1748
}, {
duration: 500
});
rightDoorButton.tint = 0x00ff00;
} else {
tween(rightDoor, {
- x: 2248
+ x: 2348
}, {
duration: 500
});
rightDoorButton.tint = 0xffffff;
@@ -1065,10 +1065,10 @@
rightLightButton.tint = 0xffffff;
monitorScreen.tint = 0xffffff;
cameraText.setText('Camera: OFF');
// Reset door positions
- leftDoor.x = -200;
- rightDoor.x = 2248;
+ leftDoor.x = -300;
+ rightDoor.x = 2348;
}
// Game timers
var timeTimer = LK.setInterval(function () {
if (gameRunning) {
@@ -1135,14 +1135,14 @@
rightLightButton.tint = 0x333333;
monitorScreen.tint = 0x333333;
// Hide doors
tween(leftDoor, {
- x: -200
+ x: -300
}, {
duration: 1000
});
tween(rightDoor, {
- x: 2248
+ x: 2348
}, {
duration: 1000
});
// Freddy will attack after power runs out
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