User prompt
fastest time is still n/a. please fix it
User prompt
fastest time is not being updaated, can you fix it?
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'anchor')' in or related to this line: 'fastestTimeText.anchor.set(0.5, 0);' Line Number: 260
User prompt
make sure time is saved and shown in fastest time
User prompt
remove collision boxes
User prompt
Please fix the bug: 'ReferenceError: spearTriggerBoundingBox is not defined' in or related to this line: 'if (spearTriggerBoundingBox) {' Line Number: 458
User prompt
Please fix the bug: 'ReferenceError: fireTriggerBoundingBox is not defined' in or related to this line: 'if (fireTriggerBoundingBox) {' Line Number: 453
User prompt
Please fix the bug: 'ReferenceError: heroBoundingBox is not defined' in or related to this line: 'if (heroBoundingBox) {' Line Number: 448
User prompt
collision boxes should be updated with the objects positions
User prompt
make sure all objects have the collisions boxes drawn
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'self.x = target.x;' Line Number: 60
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'self.x = target.x;' Line Number: 56
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'x')' in or related to this line: 'self.x = target.x;' Line Number: 54
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading 'width')' in or related to this line: 'box.width = target.width;' Line Number: 48
User prompt
draw bbox arround objects
User prompt
Please fix the bug: 'TypeError: Cannot read properties of undefined (reading 'setText')' in or related to this line: 'fastestTimeText.setText("Fastest Time: " + (storage.fastestTime === "Infinity" ? "N/A" : storage.fastestTime.toFixed(3)));' Line Number: 474
User prompt
Please fix the bug: 'ReferenceError: fastestTimeText is not defined' in or related to this line: 'fastestTimeText.setText("Fastest Time: " + (storage.fastestTime === "Infinity" ? "N/A" : storage.fastestTime.toFixed(3)));' Line Number: 473
User prompt
It is not updating after playing a game
User prompt
make sure fastest time is updated with counter time
User prompt
show fasftest time in the main menu
User prompt
add storage for fastest counter final time ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Save timercoundown lowest final time in storage. Then display it as fastest kill in the homepage ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'toFixed')' in or related to this line: 'var previousTimeText = new Text2("Previous Time: " + previousTimeCounter.toFixed(3), {' Line Number: 227
User prompt
in the home screen also display the timer countdown of the previous game
User prompt
Please fix the bug: 'tween is not defined' in or related to this line: 'tween(cloud, {' Line Number: 194 ↪💡 Consider importing and using the following plugins: @upit/tween.v1
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { fastestTime: "Infinity" }); /**** * Classes ****/ // Class to draw bounding boxes around objects var BoundingBox = Container.expand(function () { var self = Container.call(this); self.drawBox = function (target) { var box = LK.getAsset('transparentAsset', { anchorX: 0.5, anchorY: 0.5 }); if (target) { if (target.width !== undefined && target.height !== undefined) { box.width = target.width; box.height = target.height; } if (target.x !== undefined && target.y !== undefined) { self.x = target.x; self.y = target.y; } } box.alpha = 0.3; // Semi-transparent for visibility self.addChild(box); if (target) { self.x = target.x; self.y = target.y; } }; }); var FireTrigger = Container.expand(function () { var self = Container.call(this); var fireTriggerGraphics = self.attachAsset('fireTrigger', { anchorX: 0.5, anchorY: 0.5, alpha: 0 // Start with full transparency }); // Add fade-in effect tween(fireTriggerGraphics, { alpha: 1 // Fade to full opacity }, { duration: 1000, // 1 second duration easing: tween.easeInOut }); self.update = function () { if (!self.fireWall) { self.fireWall = LK.getAsset('fireWall', { anchorX: 0.5, anchorY: 0.5 }); self.fireWall.width = 2048; // Set width to match screen width self.fireWall.x = 2048 / 2; // Start from the center of the screen self.fireWall.y = 2732 + self.fireWall.height; // Start from bottom off-screen self.fireWall.speedX = 0; // No horizontal movement self.fireWall.speedY = -15; // Move upwards self.fireWall.update = function () { this.x += this.speedX; this.y += this.speedY; // Add flickering effect this.alpha = Math.random() * 0.5 + 0.5; // Random alpha between 0.5 and 1 }; game.addChild(self.fireWall); // Play firewall sound when it spawns LK.getSound('firewall').play(); // Reposition the fire trigger to a random location self.x = Math.random() * (2048 - 400) + 200; // Ensure at least 200 pixels from left and right edges self.y = Math.random() * (2732 - 400) + 200; // Ensure at least 200 pixels from top and bottom edges // Add fade-in effect when repositioning tween(fireTriggerGraphics, { alpha: 1 // Fade to full opacity }, { duration: 1000, // 1 second duration easing: tween.easeInOut }); } if (self.intersects(hero)) { self.fireWall = LK.getAsset('fireWall', { anchorX: 0.5, anchorY: 0.5 }); self.fireWall.width = 2048; // Set width to match screen width self.fireWall.x = 2048 / 2; // Start from the center of the screen self.fireWall.y = 2732 + self.fireWall.height; // Start from bottom off-screen self.fireWall.speedX = 0; // No horizontal movement self.fireWall.speedY = -15; // Move upwards self.fireWall.update = function () { this.x += this.speedX; this.y += this.speedY; // Add flickering effect this.alpha = Math.random() * 0.5 + 0.5; // Random alpha between 0.5 and 1 }; game.addChild(self.fireWall); // Play firewall sound when it spawns LK.getSound('firewall').play(); // Reposition the fire trigger to a random location self.x = Math.random() * (2048 - 400) + 200; // Ensure at least 200 pixels from left and right edges self.y = Math.random() * (2732 - 400) + 200; // Ensure at least 200 pixels from top and bottom edges } }; }); // Hero class representing the player character var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.attachAsset('hero', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 10; // Add a shadow below the hero var shadow = self.attachAsset('heroShadow', { anchorX: 0.5, anchorY: 0.5 }); shadow.y = heroGraphics.height / 2 + 10; // Position the shadow slightly below the hero shadow.alpha = 0.5; // Make the shadow semi-transparent // Add hitbox for collision detection self.hitbox = new Container(); self.hitbox.width = heroGraphics.width * 1.2; // Increase size for better collision detection self.hitbox.height = heroGraphics.height * 1.2; // Increase size for better collision detection self.hitbox.x = -self.hitbox.width; self.hitbox.y = -self.hitbox.height; // Display the hitbox with a transparent asset var hitboxGraphics = LK.getAsset('transparentAsset', { anchorX: 0.5, anchorY: 0.5 }); hitboxGraphics.width = self.hitbox.width; hitboxGraphics.height = self.hitbox.height; self.hitbox.addChild(hitboxGraphics); self.addChild(self.hitbox); self.update = function () { // Update logic for hero, if needed }; }); var Lifebar = Container.expand(function () { var self = Container.call(this); var lifebarGraphics = self.attachAsset('lifebar', { anchorX: 0.5, anchorY: 0.5 }); // Removed life percentage text display self.update = function () { // Removed life percentage text display if (hero.health > 0) { lifebarGraphics.width = hero.health / 100 * 1500; // Update lifebar width based on health } else { lifebarGraphics.width = 0; // Ensure lifebar does not grow after emptying } }; }); var Spear = Container.expand(function () { var self = Container.call(this); var spearGraphics = self.attachAsset('spear', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 20; self.update = function () { self.y += self.speed; }; }); var SpearTrigger = Container.expand(function () { var self = Container.call(this); self.spearTriggerGraphics = self.attachAsset('spearTrigger', { anchorX: 0.5, anchorY: 0.5, alpha: 0 // Start with full transparency }); // Add fade-in effect tween(self.spearTriggerGraphics, { alpha: 1 // Fade to full opacity }, { duration: 1000, // 1 second duration easing: tween.easeInOut }); }); var StartScreen = Container.expand(function () { var self = Container.call(this); // Add a blury cloud moving in the background var cloud = self.attachAsset('background', { anchorX: 0.5, // Center the cloud horizontally anchorY: 0.5 // Center the cloud vertically }); cloud.x = 2048 / 2; // Start from the center of the screen cloud.y = 2732 / 2; // Start from the center of the screen cloud.alpha = 0.3; // Make the cloud semi-transparent for a blury effect // Animate the cloud to move slowly across the screen function animateCloud() { tween(cloud, { x: 2048 / 2 + 100, // Move the cloud 100 pixels to the right y: 2732 / 2 + 50 // Move the cloud 50 pixels down }, { duration: 5000, // Move over 5 seconds easing: tween.easeInOut, onFinish: function onFinish() { tween(cloud, { x: 2048 / 2 - 100, // Move the cloud back 100 pixels to the left y: 2732 / 2 - 50 // Move the cloud back 50 pixels up }, { duration: 5000, // Move back over 5 seconds easing: tween.easeInOut, onFinish: animateCloud // Loop the animation }); } }); } animateCloud(); var gameTitle = self.attachAsset('gamename', { anchorX: 0.5, anchorY: 0.5 }); var startButton = self.attachAsset('startButton', { anchorX: 0.5, anchorY: 0.5 }); // Initialize and display fastest time fastestTimeText = new Text2("Fastest Time: " + (storage.fastestTime === "Infinity" ? "N/A" : storage.fastestTime.toFixed(3)), { size: 100, fill: 0xFFFFFF }); fastestTimeText.anchor.set(0.5, 0); fastestTimeText.x = 2048 / 2; fastestTimeText.y = 2732 / 2 + 200; // Position below the game title LK.gui.top.addChild(fastestTimeText); gameTitle.x = 2048 / 2; gameTitle.y = 2732 / 2 - 500; // Move the game title 500 pixels up // Add a tween to animate the game title function animateTitle() { tween(gameTitle, { y: gameTitle.y - 20 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(gameTitle, { y: gameTitle.y + 20 }, { duration: 1000, easing: tween.easeInOut, onFinish: animateTitle // Loop the animation }); } }); } animateTitle(); // Removed stretching of the game title image startButton.x = 2048 / 2; // Center the start button horizontally startButton.y = 2732 - 500; // Move the start button 400 pixels up from the bottom of the screen // Add a tilting effect to the start button function animateButton() { tween(startButton, { rotation: 0.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: function onFinish() { tween(startButton, { rotation: -0.1 }, { duration: 1000, easing: tween.easeInOut, onFinish: animateButton // Loop the tilting effect }); } }); } animateButton(); startButton.down = function (x, y, obj) { LK.getSound('Dieknightdie').play(); self.destroy(); initGame(); }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Init game with black background }); /**** * Game Code ****/ LK.playMusic('Menumusic'); // Play menu music on game load var startScreen = game.addChild(new StartScreen()); // Check if hero's health is 0 to end the game if (timeCounter) { // Ensure timeCounter is defined before accessing its text property // Set the final score to the time counter LK.setScore(parseFloat(timeCounter.text)); } function shakeScreen() { var shakeIntensity = 10; var shakeDuration = 500; // in milliseconds var elapsedTime = 0; var originalX = game.x; var originalY = game.y; var shakeInterval = LK.setInterval(function () { if (elapsedTime < shakeDuration) { game.x = originalX + (Math.random() - 0.5) * shakeIntensity; game.y = originalY + (Math.random() - 0.5) * shakeIntensity; elapsedTime += 16; // approximately 60 FPS } else { game.x = originalX; game.y = originalY; LK.clearInterval(shakeInterval); } }, 16); } // Initialize game variables var hero; var heroBoundingBox; // Define heroBoundingBox in the global scope var spearTrigger; var fireTrigger; var fireTriggerBoundingBox; // Define fireTriggerBoundingBox in the global scope var spearTriggerBoundingBox; // Define spearTriggerBoundingBox in the global scope var spearCount = 0; // Declare scoreText, timeCounter, and fastestTimeText in the global scope var scoreText; var timeCounter; var fastestTimeText = new Text2("Fastest Time: " + (storage.fastestTime === "Infinity" ? "N/A" : storage.fastestTime.toFixed(3)), { size: 100, fill: 0xFFFFFF }); var currentLevel = 1; // Initialize current level // Function to initialize game elements function initGame() { // Play game music on game start LK.playMusic('Gamemusic'); // Create and position the time counter timeCounter = new Text2("0", { size: 210, // 70% of the original size fill: 0xFFFFFF }); // Add tween effect to increase the size of the time counter tween(timeCounter, { scaleX: 1.5, scaleY: 1.5 }, { duration: 1000, easing: tween.easeInOut }); timeCounter.anchor.set(0.5, 1); // Sets anchor to the center of the bottom edge of the text. LK.gui.bottom.addChild(timeCounter); // Add the time counter to the GUI overlay at the bottom of the screen. // Update the time counter every second var startTime = Date.now(); var timeInterval = LK.setInterval(function () { var elapsedTime = (Date.now() - startTime) / 1000; timeCounter.setText(elapsedTime.toFixed(3)); // Stop the time counter if hero's health is zero if (hero.health <= 0) { LK.clearInterval(timeInterval); } }, 1); // Add background image var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5 }); background.x = 2048 / 2; background.y = 2732 / 2; background.alpha = 0.5; // Set background transparency to dim it game.addChild(background); hero = game.addChild(new Hero()); hero.health = 100; // Initialize hero health as a number hero.x = 2048 / 2; hero.y = 2732 / 2; // Create and position the lifebar var lifebar = new Lifebar(); lifebar.x = 2048 / 2; lifebar.y = 25; // Centered at the top of the screen game.addChild(lifebar); // Initialize the score without displaying it LK.setScore(0); // Create and position the spear trigger within the playable area spearTrigger = game.addChild(new SpearTrigger()); spearTrigger.x = Math.random() * (2048 - 400) + 200; // Ensure at least 200 pixels from left and right edges spearTrigger.y = Math.random() * (2732 - 400) + 200; // Ensure at least 200 pixels from top and bottom edges // Create and position the fire trigger within the playable area fireTrigger = game.addChild(new FireTrigger()); fireTrigger.x = Math.random() * 2048 * 0.8 + 2048 * 0.1; fireTrigger.y = Math.random() * 2732 * 0.8 + 2732 * 0.1; } // Function to handle hero movement function handleMove(x, y, obj) { // Add a wobble and tilting effect to the hero's movement var wobbleIntensity = 5; var tiltIntensity = 0.1; if (hero && !game.ending) { hero.x = x + (Math.random() - 0.5) * wobbleIntensity; hero.y = y + (Math.random() - 0.5) * wobbleIntensity; } if (hero) { hero.rotation = (Math.random() - 0.5) * tiltIntensity; } } // Function to update game state game.update = function () { // Check if the hero intersects with the firewall if (fireTrigger && fireTrigger.fireWall && hero.intersects(fireTrigger.fireWall)) { // Decrease hero's health by 1 every third of a second if (LK.ticks % 20 === 0) { // Assuming 60 ticks per second hero.health -= 1; // Play firewall sound LK.getSound('firewall').play(); } } if (hero && spearTrigger && hero.intersects(spearTrigger)) { var spear = game.addChild(new Spear()); spear.x = Math.random() * 2048; // Random x position spear.y = Math.random() < 0.5 ? 0 : 2732; // Randomly choose top or bottom for y position var dx = hero.x - spear.x; var dy = hero.y - spear.y; var angle = Math.atan2(dy, dx); spear.speedX = Math.cos(angle) * spear.speed; spear.speedY = Math.sin(angle) * spear.speed; spear.rotation = angle; // Rotate the spear in the direction it's moving // Play spear sound LK.getSound('spear').play(); spear.update = function () { this.x += this.speedX; this.y += this.speedY; if (this.intersects(hero.hitbox)) { // Trigger screen shake effect shakeScreen(); // Attach the spear to the hero at the position it first touches him this.speedX = 0; this.speedY = 0; var relativeX = this.x - hero.x; var relativeY = this.y - hero.y; this.update = function () { var wobbleIntensity = 2; var tiltIntensity = 0.05; this.x = hero.x + relativeX + (Math.random() - 0.5) * wobbleIntensity; this.y = hero.y + relativeY + (Math.random() - 0.5) * wobbleIntensity; this.rotation = angle + (Math.random() - 0.5) * tiltIntensity; }; // Play spearhit sound LK.getSound('spearhit').play(); // Reduce player's health hero.health -= 10; // Check if hero's health is 0 to end the game if (hero.health <= 0) { tween(timeCounter, { scaleX: timeCounter.scaleX + 0.5, scaleY: timeCounter.scaleY + 0.5 }, { duration: 2000, easing: tween.linear }); // Set the final score to the time counter var finalTime = parseFloat(timeCounter.text); LK.setScore(finalTime); // Check and store the fastest time if (finalTime < storage.fastestTime) { storage.fastestTime = finalTime; storage.save(); } // Update fastest time display fastestTimeText.setText("Fastest Time: " + (storage.fastestTime === "Infinity" ? "N/A" : storage.fastestTime.toFixed(3))); // Show an endscreen for 2 seconds before game over game.ending = true; var endScreen = LK.getAsset('hudBackground', { anchorX: 0.5, anchorY: 0.5 }); endScreen.x = 2048 / 2 + 100; endScreen.y = 2732 / 2 - 200; endScreen.scaleX = 1; endScreen.scaleY = 1; game.addChild(endScreen); tween(endScreen, { scaleX: 1.5, scaleY: 1.5 }, { duration: 4000, easing: tween.easeInOut }); // Tween to increase size // Play evil laugh sound when endscreen appears LK.getSound('Evillaugh').play(); LK.setTimeout(function () { game.removeChild(endScreen); game.ending = false; LK.showGameOver(); }, 4000); } } }; // Reposition the spear trigger to a random location spearTrigger.x = Math.random() * (2048 - 400) + 200; // Ensure at least 200 pixels from left and right edges spearTrigger.y = Math.random() * (2732 - 400) + 200; // Ensure at least 200 pixels from top and bottom edges // Add fade-in effect when repositioning tween(spearTrigger.spearTriggerGraphics, { alpha: 1 // Fade to full opacity }, { duration: 1000, // 1 second duration easing: tween.easeInOut }); } }; // Function to handle transition to the next level function moveToNextLevel() { // Reset hero's health hero.health = 100; // Increment level (removed spear count and level display) currentLevel++; // Reposition hero to the center hero.x = 2048 / 2; hero.y = 2732 / 2; // Reposition spear trigger to a new random location spearTrigger.x = Math.random() * (2048 - 400) + 200; // Ensure at least 200 pixels from left and right edges spearTrigger.y = Math.random() * (2732 - 400) + 200; // Ensure at least 200 pixels from top and bottom edges // Optionally, increase difficulty or change level parameters here } // Set up event listeners for touch/mouse interactions game.down = function (x, y, obj) { handleMove(x, y, obj); }; game.move = function (x, y, obj) { handleMove(x, y, obj); }; game.up = function (x, y, obj) { // No specific action needed on release };
===================================================================
--- original.js
+++ change.js
@@ -235,9 +235,9 @@
});
fastestTimeText.anchor.set(0.5, 0);
fastestTimeText.x = 2048 / 2;
fastestTimeText.y = 2732 / 2 + 200; // Position below the game title
- self.addChild(fastestTimeText);
+ LK.gui.top.addChild(fastestTimeText);
gameTitle.x = 2048 / 2;
gameTitle.y = 2732 / 2 - 500; // Move the game title 500 pixels up
// Add a tween to animate the game title
function animateTitle() {
@@ -475,10 +475,8 @@
storage.save();
}
// Update fastest time display
fastestTimeText.setText("Fastest Time: " + (storage.fastestTime === "Infinity" ? "N/A" : storage.fastestTime.toFixed(3)));
- fastestTimeText.x = 2048 / 2;
- fastestTimeText.y = 2732 / 2 + 200; // Position below the game title
// Show an endscreen for 2 seconds before game over
game.ending = true;
var endScreen = LK.getAsset('hudBackground', {
anchorX: 0.5,
pixealrt spear. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
fireskull button. pixelart.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
spearbutton. pixelart.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Pixelart button that says "Start". Dungeon vibes.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2000 by 2800 high quality banner. Pixelart. title reads: "Die Knight, Die!". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Pixealrt. Dungeon. Reads: The Knight is DEAD. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.