User prompt
slow it down a little bit
User prompt
also power drains so fast when cameras are open slow it down a little bit
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. foxy: doesnt come to office, just waits ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
animatronics come to office like this; 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 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
when they reach left or right corridor, they wait for 10 seconds, if you dont close the door in 10 seconds they jumpscare you and you lose ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
put camera buttons to the up left corner
User prompt
still no other camera positions. add; basement(also add foxy in there), bathroom; left corridor and right corridor
User prompt
add buttons to change camera position. add freddy to stage area. and power drains so fast
User prompt
add close cemaras button, add animatronics to the areas like, freddy, bonnie, chica to stage and foxy to basement. add more areas like, bathroom, basement, party room, left corridor, right corridor also add button to change cameras. animatronics move in areas closely coming to offices
User prompt
I die so fast add some time for animatronics to come like bonnie, 1AM and show full screen of camera when I open it. and put buttons to change areas on camera.
User prompt
add some areas to cameras for watching animatronics like, stage, bathroom, party area, left corridor, right corridor, basement. and make the power drain slower
Code edit (1 edits merged)
Please save this source code
User prompt
Five Nights at Freddy's: Security Watch
Initial prompt
The player takes on the role of a night security guard working at Freddy Fazbear’s Pizza, a children's restaurant similar to Chuck E. Cheese’s. The main gameplay involves monitoring security cameras from a small office to track the movements of animatronic characters that become active and hostile during the night. Each night in the game lasts from midnight 12 PM to 6 AM, and the player must survive without being caught by the animatronics. The office has limited power, which is consumed when using lights, cameras, or closing doors. If the power runs out before 6 AM, the lights go out, the doors stop working, and the animatronics can enter the office and cause a jumpscare, ending the game. The main animatronic characters in the original game are Freddy Fazbear (a bear), Bonnie (a rabbit), Chica (a chicken), and Foxy (a fox). Each has different patterns of behavior and routes they take to reach the office. The player must use strategy, observation, and timing to prevent them from getting in. Core Objective Survive five (later seven) nights as a night guard at Freddy Fazbear’s Pizza, from 12:00 AM to 6:00 AM, without getting caught by the animatronics. Gameplay Interface You are stationary inside a small security office, facing forward. You interact with the environment using point-and-click controls: Security Cameras: You can view a layout of the building and switch between camera feeds to track the animatronics’ movements. Door Controls: On either side of the office are doors and lights. Lights: Let you check if an animatronic is right outside the door. Doors: Can be shut to prevent animatronics from entering, but they consume power. Power Management You have a limited power supply each night. Using lights, cameras, and door controls all consume power. If power runs out, everything shuts down — doors open, lights and cameras go dark, and Freddy attacks. This creates a tension between monitoring the animatronics and conserving energy. Animatronic Behavior Each animatronic behaves differently: Bonnie (left side): Moves quickly and unpredictably. Frequently checks your left hallway. Chica (right side): Comes down the right hallway. Appears less often than Bonnie. Foxy (left side - Pirate Cove): Only moves if not watched often enough. Will sprint to the office if provoked. Freddy (center): Moves slowly but silently. Becomes more aggressive later in the week. Only visible briefly on certain cameras. They each have different AI patterns that become more aggressive with each passing night. Jumpscares & Game Over If an animatronic enters your office, you are greeted with a loud jumpscare, ending the night. You must then retry that night. Night Progression Each night (Night 1 to Night 5, plus Night 6 and a customizable Night 7) gets progressively harder: Animatronics become faster and more unpredictable. Player must optimize camera use and timing for doors/lights.
/****
* 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;
// Different movement patterns for each animatronic
self.movementPattern = {
freddy: [0, 1, 2, 3, 4, 6],
// Stage -> Bathroom -> Party Area -> Left Corridor -> Right Corridor -> Office
bonnie: [0, 3, 6],
// Stage -> Left Corridor -> Office
chica: [0, 2, 4, 6],
// Stage -> Party Area -> Right Corridor -> Office
foxy: [5, 3, 6] // Basement -> Left Corridor -> Office
};
self.update = function () {
self.moveTimer++;
// Movement chance based on aggression and time
var moveChance = self.aggressionLevel * 0.002;
if (Math.random() < moveChance && !self.isMoving) {
self.attemptMove();
}
};
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: 224,
y: 766,
anchorX: 0.5,
anchorY: 0.5
}));
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 = -200;
rightDoor.x = 2248;
// 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;
powerDrain += 0.2; // Further reduced door power drain
} else {
tween(leftDoor, {
x: -200
}, {
duration: 500
});
leftDoorButton.tint = 0xffffff;
powerDrain -= 0.2; // Further reduced door power drain
}
}
function toggleRightDoor() {
if (powerLevel <= 0) return;
rightDoorClosed = !rightDoorClosed;
LK.getSound('doorSlam').play();
if (rightDoorClosed) {
tween(rightDoor, {
x: 1848
}, {
duration: 500
});
rightDoorButton.tint = 0x00ff00;
powerDrain += 0.2; // Further reduced door power drain
} else {
tween(rightDoor, {
x: 2248
}, {
duration: 500
});
rightDoorButton.tint = 0xffffff;
powerDrain -= 0.2; // Further reduced door power drain
}
}
function toggleLeftLight() {
if (powerLevel <= 0) return;
leftLightOn = !leftLightOn;
if (leftLightOn) {
leftLightButton.tint = 0xffff00;
powerDrain += 0.1; // Further reduced light power drain
checkHallway('left');
} else {
leftLightButton.tint = 0xffffff;
powerDrain -= 0.1; // Further reduced light power drain
}
}
function toggleRightLight() {
if (powerLevel <= 0) return;
rightLightOn = !rightLightOn;
if (rightLightOn) {
rightLightButton.tint = 0xffff00;
powerDrain += 0.1; // Further reduced light power drain
checkHallway('right');
} else {
rightLightButton.tint = 0xffffff;
powerDrain -= 0.1; // Further reduced light power drain
}
}
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;
powerDrain += 0.15; // Further reduced camera power drain
} 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;
powerDrain -= 0.15; // Further reduced camera power drain
}
}
function switchCamera(roomId) {
if (!cameraMode || powerLevel <= 0) return;
// 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('jumpscare').play();
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;
powerDrain = 0.2; // Updated base drain rate (further reduced)
gameRunning = true;
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
}
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 = -200;
rightDoor.x = 2248;
}
// Game timers
var timeTimer = LK.setInterval(function () {
if (gameRunning) {
updateTime();
}
}, 1000); // 1 second = 1 minute in game
var powerTimer = LK.setInterval(function () {
if (gameRunning && powerLevel > 0) {
powerLevel -= powerDrain * 0.1;
if (powerLevel < 0) powerLevel = 0;
// 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;
powerDrain = 0;
// Reset visual states
leftDoorButton.tint = 0x333333;
rightDoorButton.tint = 0x333333;
leftLightButton.tint = 0x333333;
rightLightButton.tint = 0x333333;
monitorScreen.tint = 0x333333;
// Hide doors
tween(leftDoor, {
x: -200
}, {
duration: 1000
});
tween(rightDoor, {
x: 2248
}, {
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 10 seconds have passed
if (timeWaited >= 10) {
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
@@ -46,9 +46,22 @@
var pattern = self.movementPattern[self.type];
var currentIndex = pattern.indexOf(self.currentRoom);
if (currentIndex < pattern.length - 1) {
self.isMoving = true;
- self.currentRoom = pattern[currentIndex + 1];
+ 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 () {
@@ -129,8 +142,10 @@
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);
@@ -861,8 +876,10 @@
powerLevel = 100;
powerDrain = 0.2; // Updated base drain rate (further reduced)
gameRunning = true;
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
@@ -972,8 +989,35 @@
// 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 10 seconds have passed
+ if (timeWaited >= 10) {
+ 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) {
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