User prompt
Update with: self.update = function () { // Hide all sprites first for (var i = 0; i < self.sprites.length; i++) { self.sprites[i].alpha = 0; } // IMPROVED PLATFORM DETECTION: Always check if player should fall if (self.isOnGround && !self.isJumping) { // Start with assumption that player isn't above any platform var foundPlatform = false; // Check all platforms to see if player is above any of them for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; var platformHalfWidth = platform.width / 2; if (self.x > platform.x - platformHalfWidth && self.x < platform.x + platformHalfWidth) { // Player is above this platform foundPlatform = true; self.currentPlatform = platform; break; } } // If not above any platform and not at ground level, start falling if (!foundPlatform && self.y < self.groundY) { self.isOnGround = false; self.currentPlatform = null; // Start falling self.velocityY = 0.1; } } // Apply gravity if not on a platform and not actively jumping if (!self.isOnGround && !self.isJumping) { self.velocityY += 0.7; self.y += self.velocityY; // Show falling animation (using jump3) var jumpOffset = self.runAnimation.length; self.sprites[jumpOffset + 2].alpha = 1; // jump3 // Check for platform collisions while falling self.checkPlatformCollision(); }
User prompt
Update with: self.update = function () { // Hide all sprites first for (var i = 0; i < self.sprites.length; i++) { self.sprites[i].alpha = 0; } // NEW CODE: Always check if the player is above a platform when on ground if (self.isOnGround && !self.isJumping) { var isAbovePlatform = false; // If we have a current platform, check if we're still above it if (self.currentPlatform) { var platformHalfWidth = self.currentPlatform.width / 2; isAbovePlatform = self.x > self.currentPlatform.x - platformHalfWidth && self.x < self.currentPlatform.x + platformHalfWidth; // If not above current platform, check all other platforms if (!isAbovePlatform) { for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; if (platform === self.currentPlatform) continue; var halfWidth = platform.width / 2; if (self.x > platform.x - halfWidth && self.x < platform.x + halfWidth) { self.currentPlatform = platform; isAbovePlatform = true; break; } } } } else { // No current platform but we're on ground - check all platforms for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; var halfWidth = platform.width / 2; if (self.x > platform.x - halfWidth && self.x < platform.x + halfWidth) { self.currentPlatform = platform; isAbovePlatform = true; break; } } } // If not above any platform and not on the original ground level, start falling if (!isAbovePlatform && self.y < self.groundY) { self.isOnGround = false; self.currentPlatform = null; self.velocityY = 0.1; // Start falling } }
Code edit (1 edits merged)
Please save this source code
User prompt
Update with: // Check if we need to spawn a new sequence of platforms var lastPlatform = platforms[platforms.length - 1]; if (lastPlatform && lastPlatform.x < GAME_WIDTH + 500) { // Spawn further off-screen to prevent pop-in // Time to spawn a new sequence if (platformsUntilNextChange <= 0) { // Switch height currentPlatformHeight = (currentPlatformHeight === lowPlatformHeight) ? highPlatformHeight : lowPlatformHeight; // Generate new random sequence length platformsUntilNextChange = Math.floor(Math.random() * (maxPlatformsInSequence - minPlatformsInSequence + 1)) + minPlatformsInSequence; // Make ground sequences longer if (currentPlatformHeight === lowPlatformHeight) { platformsUntilNextChange += 5; } } // Spawn a single platform in the sequence var platform = new Platform(); platform.x = lastPlatform.x + (platformWidth - platformOverlap); platform.y = currentPlatformHeight; platforms.push(platform); game.addChild(platform); // Decrement the counter for each platform added platformsUntilNextChange--; }
User prompt
Update with: game.update = function () { player.update(); // Check if we need to spawn a new sequence of platforms // We can check if our last platform has moved some distance from the right edge var lastPlatform = platforms[platforms.length - 1]; if (lastPlatform && lastPlatform.x < GAME_WIDTH - platformWidth) { // Time to spawn a new sequence // Generate sequence length if we're ready for height change if (platformsUntilNextChange <= 0) { // Switch height currentPlatformHeight = currentPlatformHeight === lowPlatformHeight ? highPlatformHeight : lowPlatformHeight; // Generate new random sequence length platformsUntilNextChange = Math.floor(Math.random() * (maxPlatformsInSequence - minPlatformsInSequence + 1)) + minPlatformsInSequence; // Make ground sequences longer if (currentPlatformHeight === lowPlatformHeight) { platformsUntilNextChange += 5; } } // Spawn the sequence of platforms var sequenceStart = lastPlatform.x; for (var i = 0; i < platformsUntilNextChange; i++) { var platform = new Platform(); platform.x = sequenceStart + (platformWidth - platformOverlap) * (i + 1); platform.y = currentPlatformHeight; platforms.push(platform); game.addChild(platform); } platformsUntilNextChange--; } // Update existing platforms for (var i = platforms.length - 1; i >= 0; i--) { platforms[i].update(); if (platforms[i].destroyed) { platforms.splice(i, 1); } }
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Can't find variable: platform' in or related to this line: 'var platformSpawnInterval = (platformWidth - platformOverlap) / platform.speed;' Line Number: 240
Code edit (1 edits merged)
Please save this source code
User prompt
Update with: game.update = function () { player.update(); // Spawn platforms platformSpawnCounter++; if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Always spawn from right edge of screen platform.x = GAME_WIDTH + (platformWidth / 2); // Set up platform height etc platform.y = currentPlatformHeight; platformsUntilNextChange--; platforms.push(platform); game.addChild(platform); platformSpawnCounter = 0; } // Update platforms for (var i = platforms.length - 1; i >= 0; i--) { platforms[i].update(); if (platforms[i].destroyed) { platforms.splice(i, 1); } }
Code edit (1 edits merged)
Please save this source code
User prompt
Update with: // Modified game.update game.update = function () { player.update(); // Spawn platforms platformSpawnCounter++; if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Find the actual current position of the last platform var lastPlatform = platforms[platforms.length - 1]; var actualLastX = lastPlatform ? lastPlatform.x : lastPlatformX; // Calculate new platform position based on actual current position // Add extra offset to account for movement during spawn interval var movementOffset = platformSpawnInterval * platform.speed; platform.x = actualLastX + platformWidth - platformOverlap + movementOffset; // Store the original spawn position lastPlatformX = platform.x; // Set up platform platform.y = currentPlatformHeight; platformsUntilNextChange--; platforms.push(platform); game.addChild(platform); platformSpawnCounter = 0; } // Update platforms for (var i = platforms.length - 1; i >= 0; i--) { platforms[i].update(); if (platforms[i].destroyed) { platforms.splice(i, 1); } }
User prompt
Update as needed with: if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Position with same overlap as initialization platform.x = lastPlatformX + platformWidth - platformOverlap; // Rest of platform generation code... lastPlatformX = platform.x; platforms.push(platform); game.addChild(platform); platformSpawnCounter = 0; }
User prompt
Update with: function initializeGame() { // Create initial platforms at the low level for (var i = 0; i < 5; i++) { var platform = new Platform(); if (i === 0) { // First platform centered on player platform.x = player.x; } else { // Position with slight overlap platform.x = lastPlatformX + platformWidth - platformOverlap; } platform.y = lowPlatformHeight; platforms.push(platform); game.addChild(platform); lastPlatformX = platform.x; } lastPlatformHeight = lowPlatformHeight; player.isOnGround = true; player.currentPlatform = platforms[0]; }
Code edit (1 edits merged)
Please save this source code
User prompt
Update as needed with: if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Position new platform edge-to-edge with the last one platform.x = lastPlatformX + platformWidth; // Rest of the platform generation code... lastPlatformX = platform.x; platforms.push(platform); game.addChild(platform); platformSpawnCounter = 0; }
User prompt
Update with: function initializeGame() { // Create initial platforms at the low level for (var i = 0; i < 5; i++) { var platform = new Platform(); if (i === 0) { // First platform centered on player platform.x = player.x; } else { // Position next platform edge-to-edge with previous platform // Since anchors are centered, we need to add full width platform.x = lastPlatformX + platformWidth; } platform.y = lowPlatformHeight; platforms.push(platform); game.addChild(platform); lastPlatformX = platform.x; } lastPlatformHeight = lowPlatformHeight; player.isOnGround = true; player.currentPlatform = platforms[0]; }
User prompt
Update with: platformSpawnCounter++; if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Position to connect exactly with last platform platform.x = lastPlatformX + platform.width/2; // BACK TO HALF WIDTH if (platformsUntilNextChange <= 0) { currentPlatformHeight = (currentPlatformHeight === lowPlatformHeight) ? highPlatformHeight : lowPlatformHeight; platformsUntilNextChange = Math.floor(Math.random() * (maxPlatformsInSequence - minPlatformsInSequence + 1)) + minPlatformsInSequence; if (currentPlatformHeight === lowPlatformHeight) { platformsUntilNextChange += 5; } } platform.y = currentPlatformHeight; platformsUntilNextChange--; lastPlatformX = platform.x; // Store center position platforms.push(platform); game.addChild(platform); platformSpawnCounter = 0; }
User prompt
Update as needed with: platformSpawnCounter++; if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Position exactly at the edge of the last platform platform.x = lastPlatformX + platform.width; // Full width since lastPlatformX is the center // Rest of platform generation logic... // Store last platform center position lastPlatformX = platform.x; platforms.push(platform); game.addChild(platform); platformSpawnCounter = 0; }
User prompt
Update with: platformSpawnCounter++; if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Position accounting for centered anchor point platform.x = lastPlatformX + (platform.width / 2); // Check if it's time to change platform height if (platformsUntilNextChange <= 0) { // Switch height currentPlatformHeight = (currentPlatformHeight === lowPlatformHeight) ? highPlatformHeight : lowPlatformHeight; // Generate new random sequence length platformsUntilNextChange = Math.floor(Math.random() * (maxPlatformsInSequence - minPlatformsInSequence + 1)) + minPlatformsInSequence; // Make ground sequences tend to be longer than high sequences if (currentPlatformHeight === lowPlatformHeight) { platformsUntilNextChange += 5; } } platform.y = currentPlatformHeight; platformsUntilNextChange--; // Store last platform position lastPlatformX = platform.x; platforms.push(platform); game.addChild(platform); platformSpawnCounter = 0; }
Code edit (1 edits merged)
Please save this source code
User prompt
Use the same formula as in the initial platforms to connect platforms appropriately after that.
User prompt
Make sure generated platforms are connected properly the same as the first initialized platforms
User prompt
Make it so platform generation doesn’t switch between upper and lower platforms so often. There should be long connected runs on the top and bottom after the first initial platforms.
User prompt
Update with: platform.x = lastPlatformX + (platform.width / 2);
User prompt
Update as needed with: // In the platform spawning code if (platformSpawnCounter >= platformSpawnInterval) { var platform = new Platform(); // Position exactly at the end of the last platform using the actual platform width platform.x = lastPlatformX + platform.width; // Rest of code stays the same // ... lastPlatformX = platform.x; platforms.push(platform); game.addChild(platform); platformSpawnCounter = 0; }
/**** * Classes ****/ // Define a class for enemies var Enemy = Container.expand(function () { var self = Container.call(this); var enemyGraphics = self.attachAsset('enemy', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); var Platform = Container.expand(function () { var self = Container.call(this); var platformGraphics = self.attachAsset('platform', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.passed = false; self.update = function () { self.x -= self.speed; if (self.x < -500) { // Increased value to ensure platforms are fully off-screen self.destroy(); } }; }); //<Assets used in the game will automatically appear here> var Player = Container.expand(function () { var self = Container.call(this); // Animation properties self.runAnimation = ['playerrun1', 'playerrun2', 'playerrun3', 'playerrun4', 'playerrun5', 'playerrun6']; self.jumpAnimation = ['playerjump1', 'playerjump2', 'playerjump3']; self.runFrame = 0; self.animationSpeed = 0.08; self.animationCounter = 0; self.sprites = []; self.groundY = 2732 / 1.5; // Store the ground position // Platform collision properties self.isOnGround = true; self.currentPlatform = null; // Pre-attach all animation frames but make only the first one visible // First add run animation sprites for (var i = 0; i < self.runAnimation.length; i++) { var sprite = self.attachAsset(self.runAnimation[i], { anchorX: 0.5, anchorY: 0.5 }); // Set all frames except the first to be invisible sprite.alpha = i === 0 ? 1 : 0; self.sprites.push(sprite); } // Then add jump animation sprites for (var i = 0; i < self.jumpAnimation.length; i++) { var sprite = self.attachAsset(self.jumpAnimation[i], { anchorX: 0.5, anchorY: 0.5 }); // Set all jump frames to invisible initially sprite.alpha = 0; self.sprites.push(sprite); } // Movement properties self.speed = 5; self.jumpHeight = 40; // Keeping the original jump height self.isJumping = false; self.velocityY = 0; self.jumpState = "none"; // Added to track jump animation phases self.jumpStartTime = 0; self.update = function () { // Hide all sprites first for (var i = 0; i < self.sprites.length; i++) { self.sprites[i].alpha = 0; } // IMPROVED PLATFORM DETECTION: Always check if player should fall if (self.isOnGround && !self.isJumping) { // Start with assumption that player isn't above any platform var foundPlatform = false; // Check all platforms to see if player is above any of them for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; var platformHalfWidth = platform.width / 2; if (self.x > platform.x - platformHalfWidth && self.x < platform.x + platformHalfWidth) { // Player is above this platform foundPlatform = true; self.currentPlatform = platform; break; } } // If not above any platform and not at ground level, start falling if (!foundPlatform && self.y < self.groundY) { self.isOnGround = false; self.currentPlatform = null; // Start falling self.velocityY = 0.1; } } // Apply gravity if not on a platform and not actively jumping if (!self.isOnGround && !self.isJumping) { self.velocityY += 0.7; self.y += self.velocityY; // Show falling animation (using jump3) var jumpOffset = self.runAnimation.length; self.sprites[jumpOffset + 2].alpha = 1; // jump3 // Check for platform collisions while falling self.checkPlatformCollision(); } // Check if player has fallen off the bottom of the screen if (self.y > 2732) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } // Handle jumping physics and animation if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; // Get jump frame index offset var jumpOffset = self.runAnimation.length; // Determine jump animation based on velocity and time var currentTime = Date.now(); if (currentTime - self.jumpStartTime < 100) { // Brief initial jump1 phase (first 100ms) self.sprites[jumpOffset + 0].alpha = 1; // jump1 } else if (self.velocityY < 0) { // Going up - show jump2 self.sprites[jumpOffset + 1].alpha = 1; // jump2 } else if (self.velocityY > 0) { // Going down - show jump3 self.sprites[jumpOffset + 2].alpha = 1; // jump3 // Check for landing on platforms while falling during a jump self.checkPlatformCollision(); } // End jump if hitting the original ground (for backward compatibility) if (self.y >= self.groundY && !self.currentPlatform) { self.y = self.groundY; self.isJumping = false; self.velocityY = 0; self.jumpState = "none"; self.isOnGround = true; } } else if (self.isOnGround) { // Run animation when on a platform or ground self.animationCounter += self.animationSpeed; if (self.animationCounter >= 1) { self.animationCounter = 0; // Update to next frame self.runFrame = (self.runFrame + 1) % self.runAnimation.length; } // Show current run frame self.sprites[self.runFrame].alpha = 1; } // If on a platform, check if we're still above it if (self.currentPlatform) { // Check if still above the platform var platformHalfWidth = self.currentPlatform.width / 2; var stillOnPlatform = self.x > self.currentPlatform.x - platformHalfWidth && self.x < self.currentPlatform.x + platformHalfWidth; if (!stillOnPlatform) { // CRUCIAL FIX: Check for other platforms before falling var foundAnotherPlatform = false; // Loop through all platforms to check if we're above any other platform for (var i = 0; i < platforms.length; i++) { var otherPlatform = platforms[i]; // Skip checking the current platform if (otherPlatform === self.currentPlatform) { continue; } var otherHalfWidth = otherPlatform.width / 2; // Check if player is above this platform (using same horizontal check) if (self.x > otherPlatform.x - otherHalfWidth && self.x < otherPlatform.x + otherHalfWidth) { // We found another platform directly below player self.currentPlatform = otherPlatform; foundAnotherPlatform = true; break; } } // Only fall if we didn't find another platform if (!foundAnotherPlatform) { self.isOnGround = false; self.currentPlatform = null; // Start falling self.velocityY = 0.1; } } } }; self.jump = function () { if (self.isOnGround) { self.isJumping = true; self.isOnGround = false; self.velocityY = -self.jumpHeight; self.jumpState = "start"; self.jumpStartTime = Date.now(); self.currentPlatform = null; } else if (self.isJumping && self.velocityY < 10) { // Allow for a small double-jump to reach higher platforms // Only if not falling too fast self.velocityY = -self.jumpHeight * 0.7; self.jumpStartTime = Date.now(); } }; self.checkPlatformCollision = function () { for (var i = 0; i < platforms.length; i++) { var platform = platforms[i]; var platformHalfWidth = platform.width / 2; // The offset should match exactly how the player aligns with the lower platform initially var playerPlatformOffset = 250; // This is the exact offset between player.y and lowPlatformHeight // Check if player is above the platform and falling if (self.velocityY > 0 && // Must be falling down self.y < platform.y - playerPlatformOffset && self.y + self.velocityY >= platform.y - playerPlatformOffset && self.x > platform.x - platformHalfWidth && self.x < platform.x + platformHalfWidth) { // Land on the platform with the exact same positioning as on the low platform self.y = platform.y - playerPlatformOffset; self.velocityY = 0; self.isJumping = false; self.isOnGround = true; self.currentPlatform = platform; return; } } }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Black background }); /**** * Game Code ****/ var GAME_WIDTH = 2048; var platforms = []; var platformWidth = 1000; // Define platform width based on asset size var platformSpawnInterval = 60; var platformSpawnCounter = 0; var platformOverlap = 50; var platformSpeed = 5; // Define platform speed globally var platformSpawnInterval = 190; // = (1000 - 50) / 5 = 190 // Define the two fixed platform heights var lowPlatformHeight = 2732 / 1.5 + 250; // Regular height (player.y + 250) var highPlatformHeight = lowPlatformHeight - 600; // High platform (600 pixels higher) var minPlatformsInSequence = 6; // Minimum platforms in a sequence var maxPlatformsInSequence = 10; // Maximum platforms in a sequence var platformsUntilNextChange = 10; // Initial longer ground sequence var currentPlatformHeight = lowPlatformHeight; var lastPlatformHeight = lowPlatformHeight; // Simple toggle for alternating platform heights var useHighPlatform = false; var platformGap = 200; // Gap between platforms var lastPlatformX = 0; // Track the last platform position //<Assets used in the game will automatically appear here> var background = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0, alpha: 0 })); background.x = 0; background.y = 0; // Initialize player var player = game.addChild(new Player()); player.x = 2048 / 4.5; player.y = 2732 / 1.5; // Initialize enemies var enemies = []; var enemySpawnInterval = 100; var enemySpawnCounter = 0; // Create a new Text2 object to display the score var scoreText = new Text2('0', { size: 100, fill: 0xFFFFFF }); // Add the score text to the game GUI at the top center of the screen LK.gui.top.addChild(scoreText); scoreText.x = 2048 / 2; scoreText.y = 0; // Initialize the game with starting platforms function initializeGame() { // Create initial platforms at the low level for (var i = 0; i < 5; i++) { var platform = new Platform(); if (i === 0) { // First platform centered on player platform.x = player.x; } else { // Position with slight overlap platform.x = lastPlatformX + platformWidth - platformOverlap; } platform.y = lowPlatformHeight; platforms.push(platform); game.addChild(platform); lastPlatformX = platform.x; } lastPlatformHeight = lowPlatformHeight; player.isOnGround = true; player.currentPlatform = platforms[0]; } initializeGame(); // Handle game updates game.update = function () { player.update(); // Check if we need to spawn a new sequence of platforms var lastPlatform = platforms[platforms.length - 1]; if (lastPlatform && lastPlatform.x < GAME_WIDTH + 500) { // Spawn further off-screen to prevent pop-in // Time to spawn a new sequence if (platformsUntilNextChange <= 0) { // Switch height currentPlatformHeight = currentPlatformHeight === lowPlatformHeight ? highPlatformHeight : lowPlatformHeight; // Generate new random sequence length platformsUntilNextChange = Math.floor(Math.random() * (maxPlatformsInSequence - minPlatformsInSequence + 1)) + minPlatformsInSequence; // Make ground sequences longer if (currentPlatformHeight === lowPlatformHeight) { platformsUntilNextChange += 5; } } // Spawn a single platform in the sequence var platform = new Platform(); platform.x = lastPlatform.x + (platformWidth - platformOverlap); platform.y = currentPlatformHeight; platforms.push(platform); game.addChild(platform); // Decrement the counter for each platform added platformsUntilNextChange--; } // Update platforms for (var i = platforms.length - 1; i >= 0; i--) { platforms[i].update(); // Remove platforms that are destroyed if (platforms[i].destroyed) { platforms.splice(i, 1); } } // Enemy handling (keep your existing enemy code) //enemySpawnCounter++; if (enemySpawnCounter >= enemySpawnInterval) { var enemy = new Enemy(); enemy.x = 2048; enemy.y = 2732 / 2; enemies.push(enemy); game.addChild(enemy); enemySpawnInterval = Math.floor(Math.random() * 150) + 50; enemySpawnCounter = 0; } // Update enemies for (var j = enemies.length - 1; j >= 0; j--) { enemies[j].update(); if (player.intersects(enemies[j])) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } else if (player.x > enemies[j].x && !enemies[j].passed) { enemies[j].passed = true; LK.setScore(LK.getScore() + 1); scoreText.setText(LK.getScore()); } } }; // Handle player jump game.down = function (x, y, obj) { player.jump(); };
===================================================================
--- original.js
+++ change.js
@@ -78,47 +78,29 @@
// Hide all sprites first
for (var i = 0; i < self.sprites.length; i++) {
self.sprites[i].alpha = 0;
}
- // NEW CODE: Always check if the player is above a platform when on ground
+ // IMPROVED PLATFORM DETECTION: Always check if player should fall
if (self.isOnGround && !self.isJumping) {
- var isAbovePlatform = false;
- // If we have a current platform, check if we're still above it
- if (self.currentPlatform) {
- var platformHalfWidth = self.currentPlatform.width / 2;
- isAbovePlatform = self.x > self.currentPlatform.x - platformHalfWidth && self.x < self.currentPlatform.x + platformHalfWidth;
- // If not above current platform, check all other platforms
- if (!isAbovePlatform) {
- for (var i = 0; i < platforms.length; i++) {
- var platform = platforms[i];
- if (platform === self.currentPlatform) {
- continue;
- }
- var halfWidth = platform.width / 2;
- if (self.x > platform.x - halfWidth && self.x < platform.x + halfWidth) {
- self.currentPlatform = platform;
- isAbovePlatform = true;
- break;
- }
- }
+ // Start with assumption that player isn't above any platform
+ var foundPlatform = false;
+ // Check all platforms to see if player is above any of them
+ for (var i = 0; i < platforms.length; i++) {
+ var platform = platforms[i];
+ var platformHalfWidth = platform.width / 2;
+ if (self.x > platform.x - platformHalfWidth && self.x < platform.x + platformHalfWidth) {
+ // Player is above this platform
+ foundPlatform = true;
+ self.currentPlatform = platform;
+ break;
}
- } else {
- // No current platform but we're on ground - check all platforms
- for (var i = 0; i < platforms.length; i++) {
- var platform = platforms[i];
- var halfWidth = platform.width / 2;
- if (self.x > platform.x - halfWidth && self.x < platform.x + halfWidth) {
- self.currentPlatform = platform;
- isAbovePlatform = true;
- break;
- }
- }
}
- // If not above any platform and not on the original ground level, start falling
- if (!isAbovePlatform && self.y < self.groundY) {
+ // If not above any platform and not at ground level, start falling
+ if (!foundPlatform && self.y < self.groundY) {
self.isOnGround = false;
self.currentPlatform = null;
- self.velocityY = 0.1; // Start falling
+ // Start falling
+ self.velocityY = 0.1;
}
}
// Apply gravity if not on a platform and not actively jumping
if (!self.isOnGround && !self.isJumping) {
2D Single Monster. In-Game asset. 2d. Blank background. High contrast. No shadows..
A gold coin. 8 bit pixel art. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Dark and moody dungeon background. Infinite repeatable texture. 8 bit pixel art.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
A ruby. Pixel art.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
A wooden arrow with white feathers and a steel arrow head. Horizontal. Pixel art. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
backgroundmusic1
Music
playerjump
Sound effect
swordslash
Sound effect
jarbreak
Sound effect
enemyhit
Sound effect
eyeballhit
Sound effect
coincollect
Sound effect
woodbreak
Sound effect
coinbounce
Sound effect
potion
Sound effect
playerouch
Sound effect
bowfiring
Sound effect
arrowfire
Sound effect
arrowpickup
Sound effect
gameover
Sound effect