User prompt
Implement collisions with the character and the walls
User prompt
Make sure that the hole tile is not at a corner of the grid
User prompt
Optimize the code
User prompt
Before move check the next grid tile the character is going to move towards, if the grid tile is a wall or empty dont allow movement
User prompt
Delete unused code
User prompt
Please fix the bug: 'TypeError: aButton.swapAsset is not a function' in or related to this line: 'aButton.swapAsset('aButtonPressed', {' Line Number: 119
User prompt
Implement the button press asset.swap when the botton is pressed
User prompt
Tint A button green and B button red
User prompt
Remove all filter implementation
Code edit (1 edits merged)
Please save this source code
User prompt
Shrink the shadow a couple pixels
User prompt
Offset the shadow down to the characters feet
User prompt
Make the shadow a child of the character
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'x')' in or related to this line: 'characterShadow.x = character.x;' Line Number: 299
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'x')' in or related to this line: 'characterShadow.x = character.x;' Line Number: 299
User prompt
Make the shadow always follows the character
User prompt
Move the shadow down to the players feet
User prompt
Make the shadow a new asset black transparent elipse
User prompt
Add a shadow blob for the character feet
User prompt
Please fix the bug: 'ReferenceError: filters is not defined' in or related to this line: 'character.filters = [new filters.BlurFilter(5)];' Line Number: 284
User prompt
Add a blurred casting shadow to the character
User prompt
Please fix the bug: 'Uncaught ReferenceError: filters is not defined' in or related to this line: 'controllerBackground.filters = [new filters.BlurFilter(5)];' Line Number: 30
User prompt
Add blurred shadows behind the buttons but on top of the background
User prompt
Add a background for the on screen controllers
User prompt
Make the on screen control background cover the whole control zone
/**** * Classes ****/ // OnScreenController class encapsulating A, B buttons and D-pad var OnScreenController = Container.expand(function () { var self = Container.call(this); // Add a background behind the on screen controllers var controllerBackground = self.attachAsset('emptyTile', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 2732 - 145.2 / 2, scaleX: 14, scaleY: 4 }); // Move the background to the bottom of the display list so it appears behind the controllers self.setChildIndex(controllerBackground, 0); var yPosAdjustment = -100; var buttonYPosAdjustment = -273.2; var aButtonColor = 0x00FF00; var bButtonColor = 0xFF0000; var aButtonPosition = { x: 1400, y: 2432 + buttonYPosAdjustment + 150 }; var bButtonPosition = { x: 1800, y: 2432 + buttonYPosAdjustment - 50 }; var buttonSize = { width: 400, height: 400 }; var aButton = self.attachAsset('aButton', { anchorX: 0.5, anchorY: 0.5, x: aButtonPosition.x, y: aButtonPosition.y, width: buttonSize.width, height: buttonSize.height, tint: aButtonColor // Use customizable A button color }); var bButton = self.attachAsset('bButton', { anchorX: 0.5, anchorY: 0.5, x: bButtonPosition.x, y: bButtonPosition.y, width: buttonSize.width, height: buttonSize.height, tint: bButtonColor // Use customizable B button color }); // D-pad var dpadBase = self.attachAsset('dpadBase', { anchorX: 0.5, anchorY: 0.5, x: 500, y: 2432 + yPosAdjustment, scaleX: 3.0, scaleY: 3.0 }); // Move dpad base to the top of the display list so it appears on top of the arrows self.setChildIndex(dpadBase, self.children.length - 1); var dpadLeft = self.attachAsset('dpadButton', { anchorX: 0.5, anchorY: 0.5, x: dpadBase.x - 250, y: dpadBase.y, width: 450, height: 450, tint: 0xFFFF00, orientation: 3 }); dpadLeft.on('down', function () { if (character) { character.x -= 145.2; // Move character left by 145.2 pixels to match grid size } dpadLeft.tint = 0xAAAAAA; // Tint dpadLeft button to a darker color when pressed }); dpadLeft.on('up', function () { dpadLeft.tint = 0xFFFF00; // Return dpadLeft button to original yellow color when released }); // A and B button event listeners var dpadUp = self.attachAsset('dpadButton', { anchorX: 0.5, anchorY: 0.5, x: dpadBase.x, y: dpadBase.y - 250, width: 450, height: 450, tint: 0xFFFF00, orientation: 0 }); dpadUp.on('down', function () { if (character) { character.y -= 145.2; // Move character up by 145.2 pixels to match grid size } dpadUp.tint = 0xAAAAAA; // Tint dpadUp button to a darker color when pressed }); dpadUp.on('up', function () { dpadUp.tint = 0xFFFF00; // Return dpadUp button to original yellow color when released }); aButton.on('down', function () { console.log('A button pressed'); aButton.tint = 0xAAAAAA; // Tint A button to a darker color when pressed }); aButton.on('up', function () { aButton.tint = 0x00FF00; // Return A button to original green color when released }); var dpadRight = self.attachAsset('dpadButton', { anchorX: 0.5, anchorY: 0.5, x: dpadBase.x + 250, y: dpadBase.y, width: 450, height: 450, tint: 0xFFFF00, orientation: 1 }); dpadRight.on('down', function () { if (character) { character.x += 145.2; // Move character right by 145.2 pixels to match grid size } dpadRight.tint = 0xAAAAAA; // Tint dpadRight button to a darker color when pressed }); dpadRight.on('up', function () { dpadRight.tint = 0xFFFF00; // Return dpadRight button to original yellow color when released }); bButton.on('down', function () { console.log('B button pressed'); bButton.tint = 0xAAAAAA; // Tint B button to a darker color when pressed }); bButton.on('up', function () { bButton.tint = 0xFF0000; // Return B button to original red color when released }); var dpadDown = self.attachAsset('dpadButton', { anchorX: 0.5, anchorY: 0.5, x: dpadBase.x, y: dpadBase.y + 250, width: 450, height: 450, tint: 0xFFFF00, orientation: 2 }); dpadDown.on('down', function () { if (character) { character.y += 145.2; // Move character down by 145.2 pixels to match grid size } dpadDown.tint = 0xAAAAAA; // Tint dpadDown button to a darker color when pressed }); dpadDown.on('up', function () { dpadDown.tint = 0xFFFF00; // Return dpadDown button to original yellow color when released }); }); /**** * Initialize Game ****/ // Instantiate and add OnScreenController to the game var game = new LK.Game({ backgroundColor: 0x000000 }); /**** * Game Code ****/ function moveCharacter(dx, dy) { var newX = character.x + dx * movementDistance; var newY = character.y + dy * movementDistance; // Check if new position is within bounds and if it's a floor tile var newTile = getTileAtPosition(newX, newY); if (newTile && floorTiles.indexOf(newTile) !== -1 && wallTiles.indexOf(newTile) === -1) { // Move character to new position character.x = newX; character.y = newY; character.currentTile = newTile; } } var gridSize = 10; var character; var wallTiles = []; var floorTiles = []; var isGameStarted = false; var grid = new Array(gridSize * gridSize); var fadeEffect = { alpha: 0, speed: 0.01 }; var onScreenController; onScreenController = game.addChild(new OnScreenController()); // D-pad button event listeners moved inside OnScreenController class // Character movement function removed function createTiles() { for (var i = 0; i < gridSize * gridSize; i++) { var x = i % gridSize; var y = Math.floor(i / gridSize); var tile; if (x === 0 || y === 0 || x === gridSize - 1 || y === gridSize - 1) { tile = LK.getAsset('wallTile', { anchorX: 0.5, anchorY: 0.5, x: x * 145.2 + (2048 - gridSize * 145.2) / 2, y: y * 145.2 + (2732 - gridSize * 145.2) / 2 - 300 }); wallTiles.push(tile); } else { tile = LK.getAsset('floorTile', { anchorX: 0.5, anchorY: 0.5, x: x * 145.2 + (2048 - gridSize * 145.2) / 2, y: y * 145.2 + (2732 - gridSize * 145.2) / 2 - 300 }); floorTiles.push(tile); } game.addChild(tile); grid[i] = tile; } } createTiles(); // Function to check if a tile is in a corner function isTileInCorner(tile) { var corners = [{ x: 0, y: 0 }, { x: 0, y: (gridSize - 1) * 100 }, { x: (gridSize - 1) * 100, y: 0 }, { x: (gridSize - 1) * 100, y: (gridSize - 1) * 100 }]; return corners.some(function (corner) { return tile.x === corner.x && tile.y === corner.y; }); } // Select a random wall tile and replace it with a hole tile, ensuring it's not in a corner var randomWallTileIndex; var randomWallTile; do { randomWallTileIndex = Math.floor(Math.random() * wallTiles.length); randomWallTile = wallTiles[randomWallTileIndex]; } while (isTileInCorner(randomWallTile)); var holeTile = LK.getAsset('holeTile', { anchorX: 0.5, anchorY: 0.5, x: randomWallTile.x, y: randomWallTile.y }); game.addChild(holeTile); game.removeChild(randomWallTile); wallTiles[randomWallTileIndex] = holeTile; LK.on('tick', function () { if (fadeEffect.alpha < 1) { fadeEffect.alpha += fadeEffect.speed; game.alpha = fadeEffect.alpha; } else if (!isGameStarted) { // Patrol points setup logic removed isGameStarted = true; // Ensure game start logic is only triggered once // Initialize game elements here after fade-in completes // Spawn an instance of the character on the hole tile character = LK.getAsset('character', { anchorX: 0.5, anchorY: 0.5, x: holeTile.x, y: holeTile.y - 50, scaleX: 1.25, scaleY: 1.25 }); character.currentTile = getTileAtPosition(holeTile.x, holeTile.y); // Correctly initialize character's current tile game.addChild(character); } }); // Define a function to get the tile at a given position function getTileAtPosition(x, y) { var index = Math.floor(y / 100) * gridSize + Math.floor(x / 100); return grid[index]; } // Character movement logic removed
/****
* Classes
****/
// OnScreenController class encapsulating A, B buttons and D-pad
var OnScreenController = Container.expand(function () {
var self = Container.call(this);
// Add a background behind the on screen controllers
var controllerBackground = self.attachAsset('emptyTile', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 2732 - 145.2 / 2,
scaleX: 14,
scaleY: 4
});
// Move the background to the bottom of the display list so it appears behind the controllers
self.setChildIndex(controllerBackground, 0);
var yPosAdjustment = -100;
var buttonYPosAdjustment = -273.2;
var aButtonColor = 0x00FF00;
var bButtonColor = 0xFF0000;
var aButtonPosition = {
x: 1400,
y: 2432 + buttonYPosAdjustment + 150
};
var bButtonPosition = {
x: 1800,
y: 2432 + buttonYPosAdjustment - 50
};
var buttonSize = {
width: 400,
height: 400
};
var aButton = self.attachAsset('aButton', {
anchorX: 0.5,
anchorY: 0.5,
x: aButtonPosition.x,
y: aButtonPosition.y,
width: buttonSize.width,
height: buttonSize.height,
tint: aButtonColor // Use customizable A button color
});
var bButton = self.attachAsset('bButton', {
anchorX: 0.5,
anchorY: 0.5,
x: bButtonPosition.x,
y: bButtonPosition.y,
width: buttonSize.width,
height: buttonSize.height,
tint: bButtonColor // Use customizable B button color
});
// D-pad
var dpadBase = self.attachAsset('dpadBase', {
anchorX: 0.5,
anchorY: 0.5,
x: 500,
y: 2432 + yPosAdjustment,
scaleX: 3.0,
scaleY: 3.0
});
// Move dpad base to the top of the display list so it appears on top of the arrows
self.setChildIndex(dpadBase, self.children.length - 1);
var dpadLeft = self.attachAsset('dpadButton', {
anchorX: 0.5,
anchorY: 0.5,
x: dpadBase.x - 250,
y: dpadBase.y,
width: 450,
height: 450,
tint: 0xFFFF00,
orientation: 3
});
dpadLeft.on('down', function () {
if (character) {
character.x -= 145.2; // Move character left by 145.2 pixels to match grid size
}
dpadLeft.tint = 0xAAAAAA; // Tint dpadLeft button to a darker color when pressed
});
dpadLeft.on('up', function () {
dpadLeft.tint = 0xFFFF00; // Return dpadLeft button to original yellow color when released
});
// A and B button event listeners
var dpadUp = self.attachAsset('dpadButton', {
anchorX: 0.5,
anchorY: 0.5,
x: dpadBase.x,
y: dpadBase.y - 250,
width: 450,
height: 450,
tint: 0xFFFF00,
orientation: 0
});
dpadUp.on('down', function () {
if (character) {
character.y -= 145.2; // Move character up by 145.2 pixels to match grid size
}
dpadUp.tint = 0xAAAAAA; // Tint dpadUp button to a darker color when pressed
});
dpadUp.on('up', function () {
dpadUp.tint = 0xFFFF00; // Return dpadUp button to original yellow color when released
});
aButton.on('down', function () {
console.log('A button pressed');
aButton.tint = 0xAAAAAA; // Tint A button to a darker color when pressed
});
aButton.on('up', function () {
aButton.tint = 0x00FF00; // Return A button to original green color when released
});
var dpadRight = self.attachAsset('dpadButton', {
anchorX: 0.5,
anchorY: 0.5,
x: dpadBase.x + 250,
y: dpadBase.y,
width: 450,
height: 450,
tint: 0xFFFF00,
orientation: 1
});
dpadRight.on('down', function () {
if (character) {
character.x += 145.2; // Move character right by 145.2 pixels to match grid size
}
dpadRight.tint = 0xAAAAAA; // Tint dpadRight button to a darker color when pressed
});
dpadRight.on('up', function () {
dpadRight.tint = 0xFFFF00; // Return dpadRight button to original yellow color when released
});
bButton.on('down', function () {
console.log('B button pressed');
bButton.tint = 0xAAAAAA; // Tint B button to a darker color when pressed
});
bButton.on('up', function () {
bButton.tint = 0xFF0000; // Return B button to original red color when released
});
var dpadDown = self.attachAsset('dpadButton', {
anchorX: 0.5,
anchorY: 0.5,
x: dpadBase.x,
y: dpadBase.y + 250,
width: 450,
height: 450,
tint: 0xFFFF00,
orientation: 2
});
dpadDown.on('down', function () {
if (character) {
character.y += 145.2; // Move character down by 145.2 pixels to match grid size
}
dpadDown.tint = 0xAAAAAA; // Tint dpadDown button to a darker color when pressed
});
dpadDown.on('up', function () {
dpadDown.tint = 0xFFFF00; // Return dpadDown button to original yellow color when released
});
});
/****
* Initialize Game
****/
// Instantiate and add OnScreenController to the game
var game = new LK.Game({
backgroundColor: 0x000000
});
/****
* Game Code
****/
function moveCharacter(dx, dy) {
var newX = character.x + dx * movementDistance;
var newY = character.y + dy * movementDistance;
// Check if new position is within bounds and if it's a floor tile
var newTile = getTileAtPosition(newX, newY);
if (newTile && floorTiles.indexOf(newTile) !== -1 && wallTiles.indexOf(newTile) === -1) {
// Move character to new position
character.x = newX;
character.y = newY;
character.currentTile = newTile;
}
}
var gridSize = 10;
var character;
var wallTiles = [];
var floorTiles = [];
var isGameStarted = false;
var grid = new Array(gridSize * gridSize);
var fadeEffect = {
alpha: 0,
speed: 0.01
};
var onScreenController;
onScreenController = game.addChild(new OnScreenController());
// D-pad button event listeners moved inside OnScreenController class
// Character movement function removed
function createTiles() {
for (var i = 0; i < gridSize * gridSize; i++) {
var x = i % gridSize;
var y = Math.floor(i / gridSize);
var tile;
if (x === 0 || y === 0 || x === gridSize - 1 || y === gridSize - 1) {
tile = LK.getAsset('wallTile', {
anchorX: 0.5,
anchorY: 0.5,
x: x * 145.2 + (2048 - gridSize * 145.2) / 2,
y: y * 145.2 + (2732 - gridSize * 145.2) / 2 - 300
});
wallTiles.push(tile);
} else {
tile = LK.getAsset('floorTile', {
anchorX: 0.5,
anchorY: 0.5,
x: x * 145.2 + (2048 - gridSize * 145.2) / 2,
y: y * 145.2 + (2732 - gridSize * 145.2) / 2 - 300
});
floorTiles.push(tile);
}
game.addChild(tile);
grid[i] = tile;
}
}
createTiles();
// Function to check if a tile is in a corner
function isTileInCorner(tile) {
var corners = [{
x: 0,
y: 0
}, {
x: 0,
y: (gridSize - 1) * 100
}, {
x: (gridSize - 1) * 100,
y: 0
}, {
x: (gridSize - 1) * 100,
y: (gridSize - 1) * 100
}];
return corners.some(function (corner) {
return tile.x === corner.x && tile.y === corner.y;
});
}
// Select a random wall tile and replace it with a hole tile, ensuring it's not in a corner
var randomWallTileIndex;
var randomWallTile;
do {
randomWallTileIndex = Math.floor(Math.random() * wallTiles.length);
randomWallTile = wallTiles[randomWallTileIndex];
} while (isTileInCorner(randomWallTile));
var holeTile = LK.getAsset('holeTile', {
anchorX: 0.5,
anchorY: 0.5,
x: randomWallTile.x,
y: randomWallTile.y
});
game.addChild(holeTile);
game.removeChild(randomWallTile);
wallTiles[randomWallTileIndex] = holeTile;
LK.on('tick', function () {
if (fadeEffect.alpha < 1) {
fadeEffect.alpha += fadeEffect.speed;
game.alpha = fadeEffect.alpha;
} else if (!isGameStarted) {
// Patrol points setup logic removed
isGameStarted = true; // Ensure game start logic is only triggered once
// Initialize game elements here after fade-in completes
// Spawn an instance of the character on the hole tile
character = LK.getAsset('character', {
anchorX: 0.5,
anchorY: 0.5,
x: holeTile.x,
y: holeTile.y - 50,
scaleX: 1.25,
scaleY: 1.25
});
character.currentTile = getTileAtPosition(holeTile.x, holeTile.y); // Correctly initialize character's current tile
game.addChild(character);
}
});
// Define a function to get the tile at a given position
function getTileAtPosition(x, y) {
var index = Math.floor(y / 100) * gridSize + Math.floor(x / 100);
return grid[index];
}
// Character movement logic removed
grey square, black border. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
simple light yellow button front view game console, clean, rounded edges, high resolution, graphic. Single Game Texture. In-Game asset. 2d. Blank background. High contrast.
Worn out sticker for a video game, 90s style, cheese, simple, vintage. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
wall view from top-down, game asset videogame, black color, simple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. worn out sticker. 90's style. vintage. simple. top-down view. poster. sticker
top-down view, videogame character enemy, roomba, 90s style sticker, flat, no perspective, silhouette, black and white, cartoon, fun, simple, from above. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
top-down view, videogame heart, 90s style sticker, flat, no perspective, silhouette, white, cartoon, fun, simple, from above. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Black square with white outline. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.