Code edit (8 edits merged)
Please save this source code
User prompt
move ground and ground2 50 pixel down
Code edit (7 edits merged)
Please save this source code
User prompt
move menu_background 10 pixel down
User prompt
move menu_background 20 pixel up
Code edit (1 edits merged)
Please save this source code
User prompt
✅ Move menu_background 5 pixels down
User prompt
move menu_background 10 pixel down
User prompt
move menu_background 20 pixel up
User prompt
move menu_background 10 pixel down
User prompt
move menu_background 20 pixel up
User prompt
move menu_background 50 pixel down
User prompt
move menu_background 100 pixel up
User prompt
move menu_background 100 pixel down
User prompt
move menu_background 200 pixel down
User prompt
move menu_background 400 pixel down
User prompt
make menu_background visible
Code edit (1 edits merged)
Please save this source code
User prompt
move menu_background_part 10 pixel down
User prompt
move menu_background_part 20 pixel down
User prompt
move menu_background_part 50 pixel down
User prompt
move menu_background_part 100 pixel up
User prompt
move menu_background_part 150 pixel up
User prompt
move menu_background_part 100 pixel up
User prompt
move menu_background_part 900 pixel down
/**** 
* Classes
****/ 
// Character: Dokunulduğunda zıplar.
var Character = Container.expand(function () {
	var self = Container.call(this);
	self.attachAsset('character', {
		anchorX: 0.5,
		anchorY: 0.5
	});
	self.zIndex = 4;
	self.velocityY = 0;
	self.gravity = 0.3;
	self.jumpStrength = -12;
	self.width = 350;
	self.height = 300;
	self.update = function () {
		if (gameStarted && !gameOver) {
			self.velocityY += self.gravity;
			self.y += self.velocityY;
			if (self.y > groundY - 100) {
				self.y = groundY - 100;
				self.velocityY = 0;
				if (!self.intersects(underscoreAsset) && !self.preventDeath) {
					gameOver = true;
					endGame();
				}
			}
			var characterLeft = self.x - self.width / 2;
			var characterRight = self.x + self.width / 2;
			var characterTop = self.y - self.height / 2;
			var characterBottom = self.y + self.height / 2;
			// Ekran dışına çıkma kontrolü
			if (characterLeft + self.width / 2 < 0 || characterRight - self.width / 2 > screenRight || characterTop + self.height / 2 < 0 || characterBottom - self.height / 2 > groundY) {
				gameOver = true;
				endGame();
			}
			// Çarpışma kontrolü: Tube ve Tree
			game.children.forEach(function (child) {
				if (child instanceof Tube) {
					var tubeLeft = child.x - child.bottomTube.width / 2;
					var tubeRight = child.x + child.bottomTube.width / 2;
					var safeGapLowerEdge = child.y - child.bottomTube.height;
					var safeGapUpperEdge = -gapOffset + child.topTube.height;
					if (self.x + self.width / 2 > tubeLeft && self.x - self.width / 2 < tubeRight) {
						if (self.y < safeGapUpperEdge || self.y > safeGapLowerEdge) {
							if (!self.intersects(underscoreAsset) && !self.preventDeath) {
								// Check if not intersecting with underscore asset and preventDeath is not true
								gameOver = true;
								endGame();
							} else {
								// If intersecting with underscore asset or preventDeath is true, do not trigger game over
								return;
							}
						}
					}
				} else if (child instanceof Tree) {
					var treeLeft = child.x - child.bottomTree.width / 2;
					var treeRight = child.x + child.bottomTree.width / 2;
					var safeGapLowerEdge = child.y - child.bottomTree.height;
					var safeGapUpperEdge = -gapOffset + child.topTree.height;
					if (self.x + self.width / 2 > treeLeft && self.x - self.width / 2 < treeRight) {
						if (self.y < safeGapUpperEdge || self.y > safeGapLowerEdge) {
							if (!self.intersects(underscoreAsset) && !self.preventTreeDeath) {
								// Check if not intersecting with underscore asset and preventTreeDeath is not true
								gameOver = true;
								endGame();
							}
						}
					}
				}
			});
		}
	};
	self.jump = function () {
		if (!gameOver) {
			self.velocityY = self.jumpStrength;
			LK.getSound('wingeffect').play();
		}
	};
	return self;
});
// GameOverText class
var GameOverText = Container.expand(function () {
	var self = Container.call(this);
	self.text = new Text2("GAME OVER", {
		fontFamily: "Arial",
		fontSize: 2250,
		fill: 0xFF0000,
		align: "center",
		fontWeight: "bold"
	});
	self.text.anchorX = 0.5;
	self.text.anchorY = 0.5;
	self.addChild(self.text);
	self.zIndex = 100;
	return self;
});
// Tree class: Üst ve alt ağaç oluşturma
var Tree = Container.expand(function () {
	var self = Container.call(this);
	var bottomUnit = Math.floor(Math.random() * 8) + 1;
	var topUnit = 9 - bottomUnit;
	var unitSize = groundY / totalUnits;
	var bottomHeight = bottomUnit * unitSize;
	var topHeight = topUnit * unitSize;
	self.y = groundY;
	self.bottomTree = self.attachAsset('tree', {
		anchorX: 0.5,
		anchorY: 1,
		width: 300,
		height: bottomHeight,
		flipY: false
	});
	self.topTree = self.attachAsset('tree', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: 300,
		height: topHeight,
		flipY: false
	});
	self.topTree.rotation = Math.PI;
	self.topTree.y = -groundY - gapOffset + topHeight / 2;
	self.zIndex = 1;
	self.x = 2048 + 800;
	self.velocityX = -3.6;
	self.spawned = false;
	self.prevX = self.x;
	self.update = function () {
		if (gameStarted && !gameOver) {
			self.x += self.velocityX;
			// Sırayla ağaç-boru üretimi
			if (!self.spawned && self.prevX > treeSpawnThreshold && self.x <= treeSpawnThreshold) {
				self.spawned = true;
				var newTube = new Tube();
				newTube.x = 2048 + 800;
				game.addChild(newTube);
				lastSpawner = newTube;
			}
			self.prevX = self.x;
			// Geçme sayacı
			if (!self.passed && character.x > self.x + self.bottomTree.width / 2) {
				self.passed = true;
				updateScore();
			}
		}
	};
	return self;
});
// Tube class: Üst ve alt boru oluşturma
var Tube = Container.expand(function () {
	var self = Container.call(this);
	var bottomUnit = Math.floor(Math.random() * 8) + 1;
	var topUnit = 9 - bottomUnit;
	var unitSize = groundY / totalUnits;
	var bottomHeight = bottomUnit * unitSize;
	var topHeight = topUnit * unitSize;
	self.y = groundY;
	self.bottomTube = self.attachAsset('tube', {
		anchorX: 0.5,
		anchorY: 1,
		width: 300,
		height: bottomHeight,
		flipY: false
	});
	self.topTube = self.attachAsset('tube', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: 300,
		height: topHeight,
		flipY: false
	});
	self.topTube.rotation = Math.PI;
	self.topTube.y = -groundY - gapOffset + topHeight / 2;
	self.zIndex = 1;
	self.x = 2048 + 800;
	self.velocityX = -3.6;
	self.spawned = false;
	self.prevX = self.x;
	self.update = function () {
		if (gameStarted && !gameOver) {
			self.x += self.velocityX;
			if (self.velocityX === 0) {
				background.velocityX = 0;
				bg2.velocityX = 0;
			}
			// Sırayla boru-ağaç üretimi
			if (!self.spawned && self.prevX > tubeSpawnThreshold && self.x <= tubeSpawnThreshold) {
				self.spawned = true;
				var newTree = new Tree();
				newTree.x = 2048 + 800;
				game.addChild(newTree);
				lastSpawner = newTree;
			}
			self.prevX = self.x;
			// Geçme sayacı
			if (!self.passed && character.x > self.x + self.bottomTube.width / 2) {
				self.passed = true;
				updateScore();
			}
		}
	};
	return self;
});
/**** 
* Initialize Game
****/ 
var game = new LK.Game({
	backgroundColor: 0x000000
});
/**** 
* Game Code
****/ 
var underscoreAsset = LK.getAsset('_', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: centerX() + 1000,
	y: centerY()
});
underscoreAsset.zIndex = 15000;
game.addChild(underscoreAsset);
// Add click event to underscore asset
underscoreAsset.on('down', function () {
	// Increment the touch counter
	underscoreTouchCount++;
	// Enable preventDeath if touched 5 times
	if (underscoreTouchCount >= 5) {
		character.preventDeath = true;
		character.preventTreeDeath = true; // New flag to prevent death by tree
	}
});
game.children.sort(function (a, b) {
	return (a.zIndex || 0) - (b.zIndex || 0);
});
function createCloseButton() {
	// Close button’un kendi container’ı:
	var closeButtonContainer = new Container();
	closeButtonContainer.zIndex = 9999; // Diğer her şeyin üstünde olsun
	// Close butonu için ellipse (shape)
	var closeShape = LK.getAsset('button_close', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: 160 * 0.8,
		// Adjusted width to 80% of original
		height: 160 * 1.2 // Adjusted height to 120% of original
	});
	closeButtonContainer.addChild(closeShape);
	// “X” metni
	var closeLabel = LK.getAsset('justX', {
		anchorX: 0.5,
		anchorY: 0.5,
		x: -6,
		// Moved 4 pixels left
		y: 2 // Moved 4 pixels up
	});
	closeButtonContainer.addChild(closeLabel);
	return closeButtonContainer;
}
function zoomEffect() {
	// Mevcut scale değeri (örneğin orijinal 1)
	var originalScale = character.scale.x;
	// Zoom in: %20 artış
	character.scale.set(originalScale * 1.2);
	// 300ms sonra zoom out yap, orijinal scale'e dön
	LK.setTimeout(function () {
		character.scale.set(originalScale);
	}, 300);
}
// Dünyayı ters döndürme (flip) fonksiyonu – 0.2 saniye boyunca jump/gravity devre dışı
function flipWorld() {
	if (flipped) {
		return;
	}
	flipped = true;
	// 0.3 saniye boyunca karakterin jump ve gravity etkilerini devre dışı bırak
	character.gravity = 0;
	character.jumpStrength = 0;
	zoomEffect();
	LK.setTimeout(function () {
		// Ters dünyada: gravity -0.3, jumpStrength 12
		character.gravity = -0.3;
		character.jumpStrength = 12;
	}, 300);
	// Dünya elemanlarını ters çevir (sadece scale yöntemiyle)
	background.scale.y *= -1;
	bg2.scale.y *= -1;
	sky.scale.y *= -1;
	groundAsset.scale.y *= -1;
	ground2Asset.scale.y *= -1;
}
// Dünyayı eski hâline döndürme (unflip) fonksiyonu – 0.2 saniye boyunca jump/gravity devre dışı
function unflipWorld() {
	if (!flipped) {
		return;
	}
	flipped = false;
	character.gravity = 0;
	character.jumpStrength = 0;
	zoomEffect();
	LK.setTimeout(function () {
		// Normal dünyada: gravity 0.3, jumpStrength -12
		character.gravity = 0.3;
		character.jumpStrength = -12;
	}, 300);
	// Dünya elemanlarını yeniden ters çevirerek orijinal haline döndür
	background.scale.y *= -1;
	bg2.scale.y *= -1;
	sky.scale.y *= -1;
	groundAsset.scale.y *= -1;
	ground2Asset.scale.y *= -1;
}
// Skoru güncelleme fonksiyonu – Her 5 skorda flip/unflip toggle
function updateScore() {
	passCounter++;
	counterText.setText(passCounter);
	if (passCounter % 5 === 0) {
		if (!flipped) {
			flipWorld();
		} else {
			unflipWorld();
		}
	}
}
/**** 
* Global Variables & Helper Functions
****/ 
var groundY = 2732;
var menuOpen = true;
var volumeOn = true;
var records = []; // En iyi 5 skoru saklar
var gapOffset = 400;
var gameStarted = false;
var gameOver = false;
var gameWait = false; // Oyun menüden çıkıp da henüz başlamamışken true olacak.
var screenRight = 2048;
var totalUnits = 10;
var tubeSpawnThreshold, treeSpawnThreshold;
var lastSpawner = null;
var gameOverText = null;
var passCounter = 0;
var lastScore = 0; // Global lastScore variable
var underscoreTouchCount = 0; // Counter for underscore asset touches
// Flip durumunu takip eden bayrak
var flipped = false;
function centerX() {
	return 2048 / 2;
}
function centerY() {
	return groundY / 2;
}
tubeSpawnThreshold = centerX() + (screenRight - centerX()) / 2;
treeSpawnThreshold = centerX() + 3 * (screenRight - centerX()) / 4;
/**** 
* Menu Setup
****/ 
var menuContainer = new Container();
menuContainer.zIndex = 200;
// Menü arka planları
var menuBackground = LK.getAsset('menu_background', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: centerX(),
	y: centerY() + 625
});
menuBackground.zIndex = 199;
menuContainer.addChild(menuBackground);
var menuBackgroundPart = LK.getAsset('menu_background_part', {
	anchorX: 0.5,
	anchorY: 0.19,
	x: centerX(),
	y: centerY() - 870
});
menuBackgroundPart.zIndex = menuBackground.zIndex + 1; // 201
menuContainer.addChild(menuBackgroundPart);
// Butonlar ve Label’lar
// PLAY
var playButton = LK.getAsset('button_play', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: centerX() - 20,
	y: centerY() + 205
});
playButton.visible = false;
menuContainer.addChild(playButton);
var playLabel = new Text2("PLAY", {
	fontFamily: "Arial",
	fontSize: 630.25 * 1.1 * 1.08 * 1.5,
	fill: 0xffffff
});
playLabel.anchorX = 0.5;
playLabel.anchorY = 0.5;
playLabel.x = playButton.x - 45;
playLabel.y = playButton.y - -25;
playLabel.visible = true;
playLabel.zIndex = 1000;
menuContainer.addChild(playLabel);
// VOLUME
var volumeButton = LK.getAsset('button_volume', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: centerX() - 28,
	y: centerY() + 320
});
volumeButton.visible = false;
menuContainer.addChild(volumeButton);
var volumeLabel = new Text2("VOLUME", {
	fontFamily: "Arial",
	fontSize: 63.25 * 1.1 * 1.05 * 1.05 * 1.05 * 1.5,
	fill: 0xffffff
});
volumeLabel.anchorX = 0.5;
volumeLabel.anchorY = 0.5;
volumeLabel.x = volumeButton.x - 58;
volumeLabel.y = volumeButton.y + 30;
volumeLabel.visible = true;
volumeLabel.zIndex = 1000;
menuContainer.addChild(volumeLabel);
// CREDITS
var creditsButton = LK.getAsset('button_credits', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: centerX() - 30,
	y: centerY() + 429
});
creditsButton.visible = false;
menuContainer.addChild(creditsButton);
var creditsLabel = new Text2("CREDITS", {
	fontFamily: "Arial",
	fontSize: 630.25 * 1.05 * 1.05 * 1.05 * 1.5,
	fill: 0xffffff
});
creditsLabel.anchorX = 0.5;
creditsLabel.anchorY = 0.5;
creditsLabel.x = creditsButton.x - 60;
creditsLabel.y = creditsButton.y + 28;
creditsLabel.visible = true;
creditsLabel.zIndex = 1000;
menuContainer.addChild(creditsLabel);
// RECORDS
var recordsButton = LK.getAsset('button_records', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: centerX() - 30,
	y: centerY() + 540
});
recordsButton.visible = false;
menuContainer.addChild(recordsButton);
var recordsLabel = new Text2("RECORDS", {
	fontFamily: "Arial",
	fontSize: 150.25 * 1.05 * 1.05 * 1.03 * 1.05 * 1.5,
	fill: 0xffffff
});
recordsLabel.anchorX = 0.5;
recordsLabel.anchorY = 0.5;
recordsLabel.x = recordsButton.x - 67;
recordsLabel.y = recordsButton.y + 28;
recordsLabel.visible = true;
recordsLabel.zIndex = 1000;
menuContainer.addChild(recordsLabel);
// Ekranda sayacımız
var counterText = new Text2('0', {
	size: 124.2,
	fill: 0xFFFFFF
});
counterText.anchor.set(0, 0);
counterText.x = 1315;
counterText.y = 15;
LK.gui.topLeft.addChild(counterText);
// Arkaplanlar
var background = LK.getAsset('background', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: centerX(),
	y: groundY / 2
});
background.zIndex = 0;
game.addChild(background);
var bg2 = LK.getAsset('bg2', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: centerX() + 2807.2,
	// Position bg2 to the right of the background
	y: groundY / 2
});
bg2.zIndex = 0;
game.addChild(bg2);
var sky = LK.getAsset('sky', {
	anchorX: 0.5,
	anchorY: 0,
	x: centerX(),
	y: 0
});
sky.zIndex = 2;
game.addChild(sky);
var groundAsset = LK.getAsset('ground', {
	anchorX: 0.5,
	anchorY: 0.5,
	x: centerX(),
	y: groundY - -25
});
groundAsset.zIndex = 4.1;
game.addChild(groundAsset);
var ground2Asset = LK.getAsset('ground2', {
	anchorX: 0.5,
	anchorY: 10.5,
	x: centerX(),
	y: groundY - 40
});
ground2Asset.zIndex = 0.5;
game.addChild(ground2Asset);
// Karakteri ekle
var character = game.addChild(new Character());
character.x = centerX();
character.y = groundY / 2;
// Menü container'ı biraz aşağı kaydırma
menuContainer.y += 100;
game.addChild(menuContainer);
/**** 
* Helper Functions: Credits, Volume & Records
****/ 
function createCommonCloseElements(modalWidth, modalHeight) {
	var closeLabel = LK.getAsset('justX', {
		anchorX: 0.5,
		anchorY: 0.5,
		zIndex: 10000,
		x: 6,
		// Moved 4 pixels left
		y: 16 // Moved 4 pixels up
	});
	var radius = 50;
	var closeButton = LK.getAsset('button_close', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: radius * 2.3 * 1.2,
		height: radius * 2.3 * 1.2
	});
	closeButton.zIndex = 10000;
	closeButton.x = 0; // Center the button horizontally
	closeButton.y = 0; // Center the button vertically
	closeButton.addChild(closeLabel);
	return {
		closeLabel: closeLabel,
		closeButton: closeButton
	};
}
function showCredits() {
	// Disable menu interaction when modal is opened
	menuOpen = false;
	var creditsContainer = new Container();
	creditsContainer.zIndex = 300;
	var modalWidth = 1250,
		modalHeight = 2000;
	var bg = LK.getAsset('second_menu', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: modalWidth,
		height: modalHeight,
		color: 0x000000
	});
	bg.x = centerX();
	bg.y = centerY();
	creditsContainer.addChild(bg);
	var creditsText = new Text2("Game by\nMustafa Talha ŞEN", {
		fontFamily: "Arial",
		fontSize: 5000 * 1.03,
		fill: 0xffffff,
		align: "center"
	});
	creditsText.anchorX = 0.5;
	creditsText.anchorY = 0.5;
	creditsText.x = centerX() - 359;
	creditsText.y = centerY() - 800 + 40;
	creditsText.scale.set(3, 3);
	creditsContainer.addChild(creditsText);
	// 5) creditsContainer’ı oyuna ekle
	game.addChild(creditsContainer);
	// 6) Close butonunu tamamen bağımsız ekle
	var closeButton = createCloseButton();
	// Örneğin, modal’ın sağ üst köşesi olsun
	closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 160;
	closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 175;
	// Tıklanınca hem creditsContainer’ı hem close butonunu kaldır
	closeButton.on('down', function () {
		game.removeChild(creditsContainer);
		game.removeChild(closeButton);
		// Enable menu interaction when modal is closed
		menuOpen = true;
		menuContainer.visible = true;
	});
	// Close butonunu da oyuna ekle
	game.addChild(closeButton);
}
function showVolume() {
	// Disable menu interaction when modal is opened
	menuOpen = false;
	var volumeContainer = new Container();
	volumeContainer.zIndex = 300;
	var modalWidth = 1250,
		modalHeight = 2000;
	var bg = LK.getAsset('second_menu', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: modalWidth,
		height: modalHeight,
		color: 0x000000
	});
	bg.x = centerX();
	bg.y = centerY();
	volumeContainer.addChild(bg);
	var volumeText = new Text2("Volume Settings", {
		fontFamily: "Arial",
		fontSize: 5000 * 1.103,
		fill: 0xffffff
	});
	volumeText.scale.set(3, 3);
	volumeText.anchorX = 0.5;
	volumeText.anchorY = 0.5;
	volumeText.x = centerX() - 275;
	volumeText.y = centerY() - 800 + 85;
	volumeContainer.addChild(volumeText);
	// Container’ı oyuna ekle
	game.addChild(volumeContainer);
	// Create a slider for volume control
	var volumeSlider = new Container();
	volumeSlider.zIndex = 301;
	volumeSlider.visible = false;
	volumeSlider.x = centerX() - 250 + 250;
	volumeSlider.y = centerY() - 200 - 150;
	// Create a background for the slider
	var sliderBg = LK.getAsset('button_volume', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: 800,
		height: 100
	});
	volumeSlider.addChild(sliderBg);
	// Create a draggable knob for the slider
	var sliderKnob = LK.getAsset('button_close', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: 100,
		height: 100
	});
	sliderKnob.x = 0; // Start in the middle
	volumeSlider.addChild(sliderKnob);
	// Add drag functionality to the knob
	sliderKnob.on('down', function (x, y, obj) {
		var startX = x;
		var startKnobX = sliderKnob.x;
		game.move = function (moveX, moveY, moveObj) {
			var deltaX = moveX - startX;
			sliderKnob.x = Math.max(-400, Math.min(400, startKnobX + deltaX));
			// Calculate volume based on knob position
			var volume = (sliderKnob.x + 400) / 800;
			LK.setVolume(volume);
		};
		game.up = function (upX, upY, upObj) {
			game.move = null;
			game.up = null;
		};
	});
	volumeContainer.addChild(volumeSlider);
	// Close butonu bağımsız
	var closeButton = createCloseButton();
	closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 159;
	closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 175;
	closeButton.on('down', function () {
		game.removeChild(volumeContainer);
		game.removeChild(closeButton);
		// Enable menu interaction when modal is closed
		menuOpen = true;
		menuContainer.visible = true;
	});
	game.addChild(closeButton);
}
function showRecords() {
	// Disable menu interaction when modal is opened
	menuOpen = false;
	var recordsContainer = new Container();
	recordsContainer.zIndex = 300;
	var modalWidth = 1500,
		modalHeight = 2200;
	var bg = LK.getAsset('second_menu', {
		anchorX: 0.5,
		anchorY: 0.5,
		width: modalWidth,
		height: modalHeight,
		color: 0x000000
	});
	bg.x = centerX();
	bg.y = centerY();
	recordsContainer.addChild(bg);
	var recordsTextStr = "Top Scores:\n";
	for (var i = 0; i < records.length; i++) {
		recordsTextStr += i + 1 + ". " + records[i].score + " (Attempt " + records[i].attempt + ")\n";
	}
	if (records.length === 0) {
		recordsTextStr += "No records yet.";
	}
	recordsTextStr += "\nAttempts: " + records.length;
	recordsTextStr += "\nLast Score: " + lastScore;
	var recordsText = new Text2(recordsTextStr, {
		fontFamily: "Arial",
		fontSize: 5000 * 1.103,
		fill: 0xffffff,
		align: "center"
	});
	recordsText.anchorX = 0.5;
	recordsText.anchorY = 0.5;
	recordsText.x = centerX() - 280;
	recordsText.y = centerY() - 850 + 40;
	recordsText.scale.set(3, 3);
	recordsContainer.addChild(recordsText);
	// Container’ı oyuna ekle
	game.addChild(recordsContainer);
	// Close butonu bağımsız
	var closeButton = createCloseButton();
	closeButton.x = bg.x + modalWidth / 2 - closeButton.width / 2 - 205;
	closeButton.y = bg.y - modalHeight / 2 + closeButton.height / 2 + 195;
	closeButton.on('down', function () {
		game.removeChild(recordsContainer);
		game.removeChild(closeButton);
		// Enable menu interaction when modal is closed
		menuOpen = true;
		menuContainer.visible = true;
	});
	game.addChild(closeButton);
}
/**** 
* End Game & Reset Functions
****/ 
function endGame() {
	LK.effects.flashScreen(0xFF0000, 500);
	character.velocityY = character.jumpStrength;
	character.update = function () {
		if (gameOver) {
			character.velocityY += character.gravity;
			character.y += character.velocityY;
			if (character.y > groundY + character.height) {
				character.y = groundY + character.height;
				character.velocityY = 0;
			}
		}
	};
	game.children.forEach(function (child) {
		if (child.velocityX) {
			child.velocityX = 0;
		}
	});
	game.touchDisabled = true;
	lastScore = passCounter;
	records.push({
		score: passCounter,
		attempt: records.length + 1
	});
	records.sort(function (a, b) {
		return b.score - a.score;
	});
	if (records.length > 5) {
		records = records.slice(0, 5);
	}
	LK.setTimeout(function () {
		game.touchDisabled = false;
		menuOpen = true;
		menuContainer.visible = true;
		var startY = groundY + 100;
		var endY = centerY() - 1270;
		var animationDuration = 16.5 * 5 / 1.5;
		var startTime = Date.now();
		function animateMenu() {
			var currentTime = Date.now();
			var elapsedTime = currentTime - startTime;
			var progress = Math.min(elapsedTime / animationDuration, 1);
			menuContainer.y = startY + (endY - startY) * progress;
			if (progress < 1) {
				LK.setTimeout(animateMenu, 16);
			}
		}
		animateMenu();
	}, 1700);
	LK.setTimeout(function () {
		resetGame();
	}, 1750);
}
function resetGame() {
	if (gameOverText) {
		game.removeChild(gameOverText);
		gameOverText = null;
	}
	// Flip'i eski hâline döndür
	unflipWorld();
	var objectsToRemove = [];
	game.children.forEach(function (child) {
		if (child instanceof Tree || child instanceof Tube) {
			objectsToRemove.push(child);
		}
	});
	objectsToRemove.forEach(function (obj) {
		game.removeChild(obj);
	});
	game.removeChild(character);
	character = game.addChild(new Character());
	character.x = centerX();
	character.y = groundY / 2;
	// Reset background and bg2 positions
	background.x = centerX();
	bg2.x = centerX() + 2807.2;
	background.velocityX = -3.6;
	bg2.velocityX = -3.6;
	bg2.scale.x = 1; // Ensure bg2 is not flipped horizontally
	gameStarted = false;
	gameOver = false;
	character.preventDeath = false; // Reset preventDeath flag
	underscoreAsset.preventDeath = false; // Reset preventDeath flag for underscore asset
	lastSpawner = null;
	passCounter = 0;
	underscoreTouchCount = 0; // Reset underscore touch count
	counterText.setText(passCounter);
}
/**** 
* Eliptik hit testi için yardımcı fonksiyon
****/ 
function checkEllipseHover(button, lx, ly) {
	var scaleFactorX = 1;
	var scaleFactorY = 0.53;
	var offsetY = 40;
	var dx = lx - button.x;
	var dy = ly - (button.y + offsetY);
	var rx = button.width / 2 * scaleFactorX;
	var ry = button.height / 2 * scaleFactorY;
	return dx * dx / (rx * rx) + dy * dy / (ry * ry) <= 1;
}
/**** 
* Fare hareketinde hover kontrolü
****/ 
game.move = function (x, y, obj) {
	if (!menuOpen) {
		return;
	} // Modal açıkken hover efekti çalışmasın.
	var localX = x - menuContainer.x;
	var localY = y - menuContainer.y;
	playButton.visible = checkEllipseHover(playButton, localX, localY);
	volumeButton.visible = checkEllipseHover(volumeButton, localX, localY);
	creditsButton.visible = checkEllipseHover(creditsButton, localX, localY);
	recordsButton.visible = checkEllipseHover(recordsButton, localX, localY);
};
/**** 
* Touch Event
****/ 
game.down = function (x, y, obj) {
	if (menuOpen) {
		var localX = x - menuContainer.x;
		var localY = y - menuContainer.y;
		if (checkEllipseHover(playButton, localX, localY)) {
			var _animateMenu = function animateMenu() {
				var currentTime = Date.now();
				var elapsedTime = currentTime - startTime;
				var progress = Math.min(elapsedTime / animationDuration, 1);
				menuContainer.y = startY + (endY - startY) * progress;
				if (progress < 1) {
					LK.setTimeout(_animateMenu, 1);
				} else {
					menuOpen = false;
					menuContainer.visible = false;
					gameWait = true;
				}
			};
			var animationDuration = 16.5 * 5 * 2 / 1.5;
			var startTime = Date.now();
			var startY = menuContainer.y;
			var endY = centerY() + 100;
			_animateMenu();
			return;
		} else if (checkEllipseHover(volumeButton, localX, localY)) {
			showVolume();
		} else if (checkEllipseHover(creditsButton, localX, localY)) {
			showCredits();
		} else if (checkEllipseHover(recordsButton, localX, localY)) {
			showRecords();
		}
		return;
	} else if (gameOver) {
		if (!game.touchDisabled) {
			menuOpen = true;
			menuContainer.visible = true;
			resetGame();
		}
	} else {
		if (gameWait) {
			gameWait = false;
			gameStarted = true;
			var initialTube = new Tube();
			game.addChild(initialTube);
			lastSpawner = initialTube;
			character.jump();
		} else {
			character.jump();
			character.rotation = 0.1;
			LK.setTimeout(function () {
				character.rotation = 0;
			}, 200);
		}
	}
};
/**** 
* Game Loop
****/ 
game.update = function () {
	game.children.forEach(function (child) {
		if (child.update) {
			child.update();
		}
		// Move background and bg2 to the left
		if (child === background || child === bg2) {
			if (!gameOver && !menuOpen && gameStarted) {
				// Only move if game is not over
				child.x -= 7.2; // Move left by 5.0 units per frame to increase speed
			}
			// Reset position if moved off screen
			if (child.x < -2807.2 / 2) {
				child.x += 2807.2 * 2;
			}
		}
	});
	game.children.sort(function (a, b) {
		return (a.zIndex || 0) - (b.zIndex || 0);
	});
}; ===================================================================
--- original.js
+++ change.js
@@ -497,17 +497,17 @@
 var groundAsset = LK.getAsset('ground', {
 	anchorX: 0.5,
 	anchorY: 0.5,
 	x: centerX(),
-	y: groundY - -25 + 50
+	y: groundY - -25
 });
 groundAsset.zIndex = 4.1;
 game.addChild(groundAsset);
 var ground2Asset = LK.getAsset('ground2', {
 	anchorX: 0.5,
-	anchorY: 0.5,
+	anchorY: 10.5,
 	x: centerX(),
-	y: groundY - 40 + 50
+	y: groundY - 40
 });
 ground2Asset.zIndex = 0.5;
 game.addChild(ground2Asset);
 // Karakteri ekle
:quality(85)/https://cdn.frvr.ai/67ca66e43b19280b799c63f5.png%3F3) 
 green theme forest by green tones to the sky , not to much detail just simple tree shadows trees has no details just shadowed green and shadowless places, beautiful view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
:quality(85)/https://cdn.frvr.ai/67dded40660402a845b054ae.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/6831d6e02430dd37916b738c.png%3F3) 
 :quality(85)/https://cdn.frvr.ai/6831d9572430dd37916b740b.png%3F3) 
 hyper realistic nature too reallistic proffational blue sky white clouds yellow sun an over realistic mountain view with full of trees and sun and clouds view a forest of a mountain challangeing mountain road. No background.cool background. view background. No shadows. 2d. In-Game asset. flat