/**** 
* Plugins
****/ 
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/**** 
* Classes
****/ 
var Collectible = Container.expand(function () {
	var self = Container.call(this);
	var asset = self.attachAsset('collectible', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 8;
	self.active = true;
	self.collected = false;
	self.update = function () {
		if (!self.active) {
			return;
		}
		self.x -= self.speed;
		// Spin the collectible
		asset.rotation += 0.05;
		// Remove when off screen
		if (self.x < -100) {
			self.active = false;
			self.destroy();
		}
	};
	self.collect = function () {
		if (self.collected) {
			return;
		}
		self.collected = true;
		LK.getSound('collect').play();
		// Collect animation
		tween(self, {
			alpha: 0,
			scaleX: 2,
			scaleY: 2
		}, {
			duration: 300,
			easing: tween.easeOut,
			onFinish: function onFinish() {
				self.active = false;
				self.destroy();
			}
		});
	};
	return self;
});
var Obstacle = Container.expand(function (type) {
	var self = Container.call(this);
	self.type = type || 'obstacle';
	var asset = self.attachAsset(self.type, {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.speed = 8;
	self.active = true;
	self.update = function () {
		if (!self.active) {
			return;
		}
		self.x -= self.speed;
		// Remove when off screen
		if (self.x < -100) {
			self.active = false;
			self.destroy();
		}
	};
	return self;
});
var Player = Container.expand(function () {
	var self = Container.call(this);
	var playerGraphics = self.attachAsset('player', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.velocity = 0;
	self.gravity = 1;
	self.jumpPower = -20;
	self.isJumping = false;
	self.isDead = false;
	self.jump = function () {
		if (!self.isJumping && !self.isDead) {
			self.velocity = self.jumpPower;
			self.isJumping = true;
			LK.getSound('jump').play();
		}
	};
	self.die = function () {
		if (!self.isDead) {
			self.isDead = true;
			LK.getSound('death').play();
			LK.effects.flashObject(self, 0xFF0000, 500);
			// Create death animation
			tween(self, {
				alpha: 0,
				rotation: Math.PI * 4
			}, {
				duration: 1000,
				easing: tween.easeInOut,
				onFinish: function onFinish() {
					LK.showGameOver();
				}
			});
		}
	};
	self.update = function () {
		if (self.isDead) {
			return;
		}
		// Apply gravity
		self.velocity += self.gravity;
		self.y += self.velocity;
		// Floor collision
		if (self.y > groundLevel - 50) {
			// Adjust for player height
			self.y = groundLevel - 50;
			self.velocity = 0;
			self.isJumping = false;
		}
		// Ceiling collision
		if (self.y < 50) {
			self.y = 50;
			self.velocity = 0;
		}
		// Visual feedback for jumping
		if (self.isJumping) {
			playerGraphics.rotation += 0.1;
		} else {
			playerGraphics.rotation = 0;
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x333333
});
/**** 
* Game Code
****/ 
// Game variables
var player;
var obstacles = [];
var collectibles = [];
var score = 0;
var level = 1;
var gameSpeed = 1;
var groundLevel = 2732 - 100;
var gameActive = false;
var lastObstacleTime = 0;
var obstacleSpawnRate = 1500; // milliseconds
var collectibleSpawnRate = 3000; // milliseconds
var lastCollectibleTime = 0;
var levelProgression = 0;
// Initialize UI
var scoreTxt = new Text2('0', {
	size: 80,
	fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var levelTxt = new Text2('Level: 1', {
	size: 60,
	fill: 0xFFFFFF
});
levelTxt.anchor.set(0, 0);
levelTxt.x = 150;
levelTxt.y = 20;
LK.gui.topRight.addChild(levelTxt);
// Create floor
var floor = LK.getAsset('platform', {
	anchorX: 0,
	anchorY: 0,
	scaleX: 7,
	scaleY: 1
});
floor.x = 0;
floor.y = groundLevel;
game.addChild(floor);
// Initialize player
function initPlayer() {
	player = new Player();
	player.x = 400;
	player.y = groundLevel - 50; // Position player to touch the ground accounting for anchor
	game.addChild(player);
}
// Initialize game
function initGame() {
	// Clear any existing objects
	for (var i = obstacles.length - 1; i >= 0; i--) {
		if (obstacles[i] && obstacles[i].parent) {
			obstacles[i].destroy();
		}
	}
	obstacles = [];
	for (var i = collectibles.length - 1; i >= 0; i--) {
		if (collectibles[i] && collectibles[i].parent) {
			collectibles[i].destroy();
		}
	}
	collectibles = [];
	// Reset variables
	score = 0;
	level = 1;
	gameSpeed = 1;
	levelProgression = 0;
	lastObstacleTime = Date.now();
	lastCollectibleTime = Date.now();
	// Update UI
	scoreTxt.setText(score);
	levelTxt.setText('Level: ' + level);
	// Initialize player
	if (player && player.parent) {
		player.destroy();
	}
	initPlayer();
	// Start the game
	gameActive = true;
	// Play music
	LK.playMusic('gameMusic');
}
// Spawn obstacle
function spawnObstacle() {
	var type;
	var rnd = Math.random();
	if (rnd < 0.4) {
		type = 'obstacle';
	} else if (rnd < 0.7) {
		type = 'spike';
	} else {
		type = 'platform';
	}
	var obstacle = new Obstacle(type);
	obstacle.x = 2048 + 100;
	// Position based on type
	if (type === 'platform') {
		// Platforms at varying heights
		obstacle.y = groundLevel - 200 - Math.random() * 300;
	} else if (type === 'spike') {
		// Spikes on the ground
		obstacle.y = groundLevel - 30;
	} else {
		// Regular obstacles on the ground
		obstacle.y = groundLevel - 50;
	}
	// Adjust speed based on level
	obstacle.speed = 8 + (level - 1) * 1.5;
	// Add to game
	game.addChild(obstacle);
	obstacles.push(obstacle);
	lastObstacleTime = Date.now();
}
// Spawn collectible
function spawnCollectible() {
	var collectible = new Collectible();
	collectible.x = 2048 + 100;
	collectible.y = groundLevel - 100 - Math.random() * 400; // Random height
	// Adjust speed based on level
	collectible.speed = 8 + (level - 1) * 1.5;
	// Add to game
	game.addChild(collectible);
	collectibles.push(collectible);
	lastCollectibleTime = Date.now();
}
// Check collisions
function checkCollisions() {
	if (!player || player.isDead) {
		return;
	}
	// Check obstacle collisions
	for (var i = 0; i < obstacles.length; i++) {
		var obstacle = obstacles[i];
		if (obstacle.active && player.intersects(obstacle)) {
			if (obstacle.type === 'platform') {
				// Land on platform
				if (player.velocity > 0 && player.y < obstacle.y - 30) {
					player.y = obstacle.y - 50;
					player.velocity = 0;
					player.isJumping = false;
				}
			} else {
				// Die on obstacle/spike
				player.die();
				return;
			}
		}
	}
	// Check collectible collisions
	for (var i = 0; i < collectibles.length; i++) {
		var collectible = collectibles[i];
		if (collectible.active && !collectible.collected && player.intersects(collectible)) {
			collectible.collect();
			updateScore(10);
		}
	}
}
// Update score
function updateScore(points) {
	score += points;
	scoreTxt.setText(score);
	levelProgression += points;
	// Level up after certain score thresholds
	if (levelProgression >= 100) {
		levelUp();
	}
}
// Level up
function levelUp() {
	level++;
	levelTxt.setText('Level: ' + level);
	levelProgression = 0;
	gameSpeed += 0.2;
	// Flash screen to indicate level up
	LK.effects.flashScreen(0x00FF00, 500);
	// Reduce spawn times as levels progress
	obstacleSpawnRate = Math.max(800, obstacleSpawnRate - 100);
	collectibleSpawnRate = Math.max(1500, collectibleSpawnRate - 200);
}
// Input handling
game.down = function (x, y, obj) {
	if (!gameActive) {
		initGame();
	} else if (player && !player.isDead) {
		player.jump();
	}
};
// Main update loop
game.update = function () {
	if (!gameActive) {
		return;
	}
	// Spawn obstacles
	var currentTime = Date.now();
	if (currentTime - lastObstacleTime > obstacleSpawnRate) {
		spawnObstacle();
	}
	// Spawn collectibles
	if (currentTime - lastCollectibleTime > collectibleSpawnRate) {
		spawnCollectible();
	}
	// Update obstacles
	for (var i = obstacles.length - 1; i >= 0; i--) {
		if (obstacles[i] && obstacles[i].active) {
			obstacles[i].update();
		} else {
			obstacles.splice(i, 1);
		}
	}
	// Update collectibles
	for (var i = collectibles.length - 1; i >= 0; i--) {
		if (collectibles[i] && collectibles[i].active) {
			collectibles[i].update();
		} else {
			collectibles.splice(i, 1);
		}
	}
	// Passive score increase
	if (LK.ticks % 60 === 0 && !player.isDead) {
		updateScore(1);
	}
	// Check collisions
	checkCollisions();
	// Update player
	if (player) {
		player.update();
		// Check if player fell off screen
		if (player.y > 2732 + 100) {
			player.die();
		}
	}
};
// Initialize the game when it loads
initPlayer();
LK.playMusic('gameMusic'); ===================================================================
--- original.js
+++ change.js
@@ -116,10 +116,11 @@
 		// Apply gravity
 		self.velocity += self.gravity;
 		self.y += self.velocity;
 		// Floor collision
-		if (self.y > groundLevel) {
-			self.y = groundLevel;
+		if (self.y > groundLevel - 50) {
+			// Adjust for player height
+			self.y = groundLevel - 50;
 			self.velocity = 0;
 			self.isJumping = false;
 		}
 		// Ceiling collision
@@ -153,9 +154,9 @@
 var collectibles = [];
 var score = 0;
 var level = 1;
 var gameSpeed = 1;
-var groundLevel = 2732 - 150;
+var groundLevel = 2732 - 100;
 var gameActive = false;
 var lastObstacleTime = 0;
 var obstacleSpawnRate = 1500; // milliseconds
 var collectibleSpawnRate = 3000; // milliseconds
@@ -189,9 +190,9 @@
 // Initialize player
 function initPlayer() {
 	player = new Player();
 	player.x = 400;
-	player.y = groundLevel;
+	player.y = groundLevel - 50; // Position player to touch the ground accounting for anchor
 	game.addChild(player);
 }
 // Initialize game
 function initGame() {