User prompt
make them more opaqe
User prompt
the number buttons on the keypad arent visible on the keypad
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading '0')' in or related to this line: 'var bg = button.children[0]; // Get the button background' Line Number: 57
User prompt
make the keypad interactable and add vidible numbers on the keypad that you can click
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'toString')' in or related to this line: 'self.currentCode += digit.toString();' Line Number: 152
User prompt
move the keypad to the top-right corner with numbers showing on the keypad
User prompt
add a keypad in the top corner of the screen and hide a code in the speakers dialouge "1197"
User prompt
make him talk a little slower
User prompt
move the guys eyes down just a little and a teeny-tiny bit to the center of his face
User prompt
make the guys dialouge longer
User prompt
add A skip button to skip dialouge
User prompt
make the car crash image go to front layer
User prompt
make the blurry car image an asset
User prompt
make a shadow figure give a dialouge speech like "Hello, do you remember where you were before the incident *shows blurry image of a persons prespective of driving a car* and now, you're here. And now you must complete 35 levels of simon says to leave this place. Good luck. *shows devious smile before game starts*"
User prompt
make the font creepier
Code edit (1 edits merged)
Please save this source code
User prompt
Sinister Simon
Initial prompt
Can you make a horror game about simon says
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var SimonButton = Container.expand(function (color, sound, id) { var self = Container.call(this); self.id = id; self.isActive = false; self.sound = sound; var buttonGraphics = self.attachAsset('simonButton', { anchorX: 0.5, anchorY: 0.5 }); var activeButtonAsset = 'simonButton' + color; var activeButtonGraphics = self.attachAsset(activeButtonAsset, { anchorX: 0.5, anchorY: 0.5, alpha: 0 }); self.activate = function () { if (self.isActive) { return; } self.isActive = true; tween(activeButtonGraphics, { alpha: 1 }, { duration: 300, onFinish: function onFinish() { LK.getSound(self.sound).play(); tween(activeButtonGraphics, { alpha: 0 }, { duration: 300, onFinish: function onFinish() { self.isActive = false; } }); } }); }; self.down = function (x, y, obj) { if (gameState === STATE_PLAYER_TURN && !self.isActive && !waitingForInput) { self.activate(); playerSequence.push(self.id); checkPlayerInput(); } }; return self; }); var SinisterEntity = Container.expand(function () { var self = Container.call(this); // Face base var face = self.attachAsset('entityFace', { anchorX: 0.5, anchorY: 0.5 }); // Left eye var leftEye = self.attachAsset('entityEye', { anchorX: 0.5, anchorY: 0.5, x: -75, y: -50 }); // Right eye var rightEye = self.attachAsset('entityEye', { anchorX: 0.5, anchorY: 0.5, x: 75, y: -50 }); // Mouth var mouth = self.attachAsset('entityMouth', { anchorX: 0.5, anchorY: 0.5, y: 80 }); self.alpha = 0; self.appear = function (intensity) { self.alpha = 0; // Scale intensity from 0-10 to meaningful values var duration = Math.max(1000 - intensity * 80, 200); var scaleFactor = 1 + intensity * 0.1; tween(self, { alpha: 1 }, { duration: duration, easing: tween.easeIn, onFinish: function onFinish() { // Make eyes look at player tween(leftEye, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300, easing: tween.easeOut }); tween(rightEye, { scaleX: 1.5, scaleY: 1.5 }, { duration: 300, easing: tween.easeOut }); // Make mouth grow wider tween(mouth, { scaleX: 1.8, scaleY: 0.8 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { if (intensity > 5) { LK.getSound('creepyLaugh').play(); } LK.setTimeout(function () { self.disappear(); }, 1000); } }); } }); }; self.disappear = function () { tween(leftEye, { scaleX: 1, scaleY: 1 }, { duration: 300 }); tween(rightEye, { scaleX: 1, scaleY: 1 }, { duration: 300 }); tween(mouth, { scaleX: 1, scaleY: 1 }, { duration: 300 }); tween(self, { alpha: 0 }, { duration: 500, easing: tween.easeOut }); }; self.jumpscare = function () { self.alpha = 0; self.scale.set(0.1); tween(self, { alpha: 1, scaleX: 3, scaleY: 3 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { LK.setTimeout(function () { tween(self, { alpha: 0 }, { duration: 400, easing: tween.easeIn }); }, 200); } }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ // Constants var STATE_INTRO = 0; var STATE_SIMON_TURN = 1; var STATE_PLAYER_TURN = 2; var STATE_GAME_OVER = 3; var COLOR_RED = 'Red'; var COLOR_GREEN = 'Green'; var COLOR_BLUE = 'Blue'; var COLOR_YELLOW = 'Yellow'; // Game variables var gameState = STATE_INTRO; var level = 1; var sequence = []; var playerSequence = []; var sequenceIndex = 0; var waitingForInput = false; var horrorIntensity = 0; var highScore = storage.highScore || 0; // Overlay for horror effects var overlay = game.addChild(LK.getAsset('backgroundOverlay', { anchorX: 0, anchorY: 0, alpha: 0 })); // Create Simon buttons var buttonSize = 400; var spacing = 50; var totalWidth = buttonSize * 2 + spacing; var totalHeight = buttonSize * 2 + spacing; var startX = (2048 - totalWidth) / 2 + buttonSize / 2; var startY = (2732 - totalHeight) / 2 + buttonSize / 2; var buttons = []; var buttonRed = game.addChild(new SimonButton(COLOR_RED, 'buttonSound1', 0)); buttonRed.x = startX; buttonRed.y = startY; buttons.push(buttonRed); var buttonGreen = game.addChild(new SimonButton(COLOR_GREEN, 'buttonSound2', 1)); buttonGreen.x = startX + buttonSize + spacing; buttonGreen.y = startY; buttons.push(buttonGreen); var buttonBlue = game.addChild(new SimonButton(COLOR_BLUE, 'buttonSound3', 2)); buttonBlue.x = startX; buttonBlue.y = startY + buttonSize + spacing; buttons.push(buttonBlue); var buttonYellow = game.addChild(new SimonButton(COLOR_YELLOW, 'buttonSound4', 3)); buttonYellow.x = startX + buttonSize + spacing; buttonYellow.y = startY + buttonSize + spacing; buttons.push(buttonYellow); // Create the sinister entity var entity = game.addChild(new SinisterEntity()); entity.x = 2048 / 2; entity.y = 2732 / 2; // Level text var levelText = new Text2('Level: 1', { size: 80, fill: 0xFF0000, font: "'Creepster', 'Chiller', 'Times New Roman'" }); levelText.anchor.set(0.5, 0); LK.gui.top.addChild(levelText); levelText.y = 100; // Score text var scoreText = new Text2('Score: 0', { size: 80, fill: 0xFF0000, font: "'Creepster', 'Chiller', 'Times New Roman'" }); scoreText.anchor.set(0.5, 0); LK.gui.top.addChild(scoreText); scoreText.y = 200; // High score text var highScoreText = new Text2('High Score: ' + highScore, { size: 80, fill: 0xFF0000, font: "'Creepster', 'Chiller', 'Times New Roman'" }); highScoreText.anchor.set(0.5, 0); LK.gui.top.addChild(highScoreText); highScoreText.y = 300; // Instructions text var instructionsText = new Text2('Watch the pattern, then repeat it', { size: 60, fill: 0xFF0000, font: "'Creepster', 'Chiller', 'Times New Roman'" }); instructionsText.anchor.set(0.5, 0); LK.gui.bottom.addChild(instructionsText); instructionsText.y = -150; // Status text var statusText = new Text2('Get ready...', { size: 85, fill: 0xFF0000, font: "'Creepster', 'Chiller', 'Times New Roman'" }); statusText.anchor.set(0.5, 0); LK.gui.center.addChild(statusText); statusText.y = -400; // Game functions function startGame() { LK.playMusic('horrorAmbience', { fade: { start: 0, end: 0.4, duration: 1000 } }); gameState = STATE_SIMON_TURN; level = 1; sequence = []; horrorIntensity = 0; updateLevel(); LK.setScore(0); updateScore(); generateSequence(); // Start the first round LK.setTimeout(function () { playSequence(); }, 1500); } function updateLevel() { levelText.setText('Level: ' + level); } function updateScore() { scoreText.setText('Score: ' + LK.getScore()); if (LK.getScore() > highScore) { highScore = LK.getScore(); storage.highScore = highScore; highScoreText.setText('High Score: ' + highScore); } } function generateSequence() { // Add a new step to the sequence sequence.push(Math.floor(Math.random() * 4)); playerSequence = []; sequenceIndex = 0; } function playSequence() { statusText.setText("Watch carefully..."); // Flash the entity briefly before showing the sequence // Intensity increases with level horrorIntensity = Math.min(level - 1, 10); entity.appear(horrorIntensity); // Start showing sequence after entity appears sequenceIndex = 0; waitingForInput = true; LK.setTimeout(function () { playNextInSequence(); }, 2000); } function playNextInSequence() { if (sequenceIndex < sequence.length) { buttons[sequence[sequenceIndex]].activate(); // Sequence timing gets faster as level increases var delay = Math.max(1000 - level * 50, 400); LK.setTimeout(function () { sequenceIndex++; playNextInSequence(); }, delay); } else { // Done showing sequence, player's turn LK.setTimeout(function () { waitingForInput = false; gameState = STATE_PLAYER_TURN; statusText.setText("Your turn!"); playerSequence = []; sequenceIndex = 0; }, 500); } } function checkPlayerInput() { var currentIndex = playerSequence.length - 1; if (playerSequence[currentIndex] !== sequence[currentIndex]) { // Wrong input gameOver(); return; } // If the player has completed the current sequence if (playerSequence.length === sequence.length) { // Level completed waitingForInput = true; LK.setScore(LK.getScore() + sequence.length); updateScore(); level++; updateLevel(); gameState = STATE_SIMON_TURN; // Horror effect between levels tween(overlay, { alpha: 0.7 }, { duration: 500, onFinish: function onFinish() { LK.getSound('levelUpSound').play(); LK.setTimeout(function () { tween(overlay, { alpha: 0 }, { duration: 500 }); }, 500); } }); statusText.setText("Level " + level + "!"); // Start next level after a delay LK.setTimeout(function () { generateSequence(); playSequence(); }, 2000); } } function gameOver() { gameState = STATE_GAME_OVER; // Jumpscare effect entity.jumpscare(); LK.getSound('errorSound').play(); // Flash screen red LK.effects.flashScreen(0xff0000, 800); statusText.setText("Game Over!"); LK.setTimeout(function () { LK.showGameOver(); }, 1500); } // Start game when loaded LK.setTimeout(function () { startGame(); }, 1000); // Game update function game.update = function () { // Add subtle horror effects as the game progresses if (gameState !== STATE_GAME_OVER && level > 3) { // Random subtle screen flicker if (Math.random() < 0.005 * horrorIntensity) { tween(overlay, { alpha: 0.2 }, { duration: 100, onFinish: function onFinish() { tween(overlay, { alpha: 0 }, { duration: 100 }); } }); } // Random entity flicker at higher levels if (level > 5 && Math.random() < 0.002 * horrorIntensity && entity.alpha < 0.1) { tween(entity, { alpha: 0.3 }, { duration: 50, onFinish: function onFinish() { tween(entity, { alpha: 0 }, { duration: 50 }); } }); } } }; // Event handlers game.down = function (x, y, obj) { if (gameState === STATE_INTRO) { startGame(); } };
===================================================================
--- original.js
+++ change.js
@@ -241,41 +241,46 @@
entity.y = 2732 / 2;
// Level text
var levelText = new Text2('Level: 1', {
size: 80,
- fill: 0xFFFFFF
+ fill: 0xFF0000,
+ font: "'Creepster', 'Chiller', 'Times New Roman'"
});
levelText.anchor.set(0.5, 0);
LK.gui.top.addChild(levelText);
levelText.y = 100;
// Score text
var scoreText = new Text2('Score: 0', {
size: 80,
- fill: 0xFFFFFF
+ fill: 0xFF0000,
+ font: "'Creepster', 'Chiller', 'Times New Roman'"
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
scoreText.y = 200;
// High score text
var highScoreText = new Text2('High Score: ' + highScore, {
size: 80,
- fill: 0xFFFFFF
+ fill: 0xFF0000,
+ font: "'Creepster', 'Chiller', 'Times New Roman'"
});
highScoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(highScoreText);
highScoreText.y = 300;
// Instructions text
var instructionsText = new Text2('Watch the pattern, then repeat it', {
size: 60,
- fill: 0xFFFFFF
+ fill: 0xFF0000,
+ font: "'Creepster', 'Chiller', 'Times New Roman'"
});
instructionsText.anchor.set(0.5, 0);
LK.gui.bottom.addChild(instructionsText);
instructionsText.y = -150;
// Status text
var statusText = new Text2('Get ready...', {
- size: 70,
- fill: 0xFF0000
+ size: 85,
+ fill: 0xFF0000,
+ font: "'Creepster', 'Chiller', 'Times New Roman'"
});
statusText.anchor.set(0.5, 0);
LK.gui.center.addChild(statusText);
statusText.y = -400;
creepy realistic eye. In-Game asset. 2d. High contrast. No shadows
realistic face with no eyes or mouth. In-Game asset. 2d. High contrast. No shadows
realistic mouth. In-Game asset. 2d. High contrast. No shadows
blurry realistic image of a car crash with backround. In-Game asset. 2d. High contrast. No shadows
number 0. In-Game asset. 2d. High contrast. No shadows
the number 1. In-Game asset. 2d. High contrast. No shadows