User prompt
Vintowl Parkour diye kopya oluştur
User prompt
en yüksek skor ingilizce yazsın türkçe değil
User prompt
save this source code
User prompt
oyunu kaydet ismini Vintowl Parkour gibi bişi yap sen ayarla ismini ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
erroru düzelt ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
erroru düzelt
User prompt
oyuna yüksek skor alma listeside ekleyelim ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage.set is not a function' in or related to this line: 'storage.set('catNinjaGameState', {' Line Number: 200 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'storage is not defined' in or related to this line: 'storage.set('catNinjaGameState', {' Line Number: 194 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
kaydet şimdi
User prompt
444 puana geri al
User prompt
100 puan win olsun bi deneme olarak
User prompt
atlayış hızını biraz yavaşlat ilerledikçe yavaş yavaş artsın
User prompt
oyun 444 olunca bitsin 4444 çok bitincede bi resim gelsin you win yazsın
User prompt
spike çıkma oranı başta az olsun ilerledikçe artsın
User prompt
oyunu 4444 e kadar sürdürürsek oyunu kazanmış olalım onu nasıl yaparız
User prompt
game over ekranını süslemek istiyorum onu nasıl ayarlayabilirim
Remix started
Copy Ninja Meow
/****
* Plugins
****/
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Bird = Container.expand(function () {
var self = Container.call(this);
var birdGraphics = self.attachAsset('bird', {
anchorX: 0.5,
anchorY: 0.5
});
self.graphics = birdGraphics;
self.xSpeed = 10.9375;
self.ySpeed = -20;
self.gravity = 1;
self.lift = -jumpSpeed;
self.isInAir = false;
self.flap = function () {
if (self.isInAir < 1 || self.isInAir === 1 && canDoubleJump) {
self.ySpeed = -jumpSpeed * 1.5;
self.isInAir += 1;
if (showShadow) {
var shadow = game.addChild(new Shadow()); // Add a shadow particle
shadow.x = self.x; // Position the shadow at the bird's current position
shadow.y = self.y;
shadow.scale.x = self.scale.x; // Ensure the shadow graphics scale x matches the cats at the time it's spawned
}
}
if (bird.intersects(leftWall)) {
bird.xSpeed = 30; // Add positive x speed when bird jumps from the left wall
} else if (bird.intersects(rightWall)) {
bird.xSpeed = -30; // Add negative x speed when bird jumps from the right wall
}
};
self._update_migrated = function () {
if (game.isMouseDown) {
self.ySpeed += self.gravity / 3;
} else {
self.ySpeed += self.gravity;
}
self.y += self.ySpeed;
self.x += self.xSpeed;
if (self.y <= 0 || self.y >= 2732) {
self.speed = -self.speed;
}
if (self.xSpeed === 0) {
birdGraphics.scale.x = bird.intersects(leftWall) ? -1 : 1;
} else {
birdGraphics.scale.x = self.xSpeed > 0 ? -1 : 1;
}
// Bird rotation removed
};
});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self._move_migrated = function (speed) {
self.y += speed;
};
});
var Shadow = Container.expand(function () {
var self = Container.call(this);
var shadowGraphics = self.attachAsset('bird', {
anchorX: 0.5,
anchorY: 0.5
});
self.graphics = shadowGraphics;
shadowGraphics.tint = 0x280924; // Tint the shadow to bright fuschia
shadowGraphics.alpha = 1; // Make the shadow semi-transparent
self.fadeOut = function () {
// Delay the start of the fade out by 200ms
LK.setTimeout(function () {
if (shadowGraphics.alpha > 0) {
shadowGraphics.alpha -= 0.05; // Gradually decrease the alpha to create a fade out effect
} else {
self.destroy(); // Destroy the shadow when it's fully transparent
}
}, 200);
};
});
var Wall = Container.expand(function () {
var self = Container.call(this);
var wallGraphics = self.attachAsset('wall', {
anchorX: 0.5,
anchorY: 0.5
});
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x111111
});
/****
* Game Code
****/
// High score system with proper initialization
//Storage library which should be used for persistent game data
var highScores = [];
var maxHighScores = 10;
// Initialize high scores from storage
try {
highScores = storage.highScores || [];
if (!Array.isArray(highScores)) {
highScores = [];
}
} catch (e) {
highScores = [];
}
// Function to add new high score
function addHighScore(score) {
highScores.push(score);
highScores.sort(function (a, b) {
return b - a;
}); // Sort descending
if (highScores.length > maxHighScores) {
highScores = highScores.slice(0, maxHighScores);
}
// Save to storage with error handling
try {
storage.highScores = highScores;
} catch (e) {
console.log('Error saving high scores:', e);
}
}
// Function to check if score is a high score
function isHighScore(score) {
return highScores.length < maxHighScores || score > highScores[highScores.length - 1];
}
// Leaderboard display function
function showLeaderboard() {
var leaderboardText = 'SKOR LİSTESİ\n\n';
for (var i = 0; i < Math.min(highScores.length, 5); i++) {
leaderboardText += i + 1 + '. ' + highScores[i] + '\n';
}
if (highScores.length === 0) {
leaderboardText += 'Henüz skor yok!';
}
try {
var leaderboard = new Text2(leaderboardText, {
size: 80,
fill: '#ffffff',
dropShadow: true,
dropShadowColor: '#000000',
dropShadowBlur: 5,
dropShadowDistance: 5,
dropShadowAngle: 0
});
leaderboard.anchor.set(0.5, 0.5);
leaderboard.x = 1024;
leaderboard.y = 1366;
game.addChild(leaderboard);
// Remove leaderboard after 3 seconds
LK.setTimeout(function () {
if (leaderboard && leaderboard.parent) {
leaderboard.destroy();
}
}, 3000);
} catch (e) {
console.log('Error showing leaderboard:', e);
}
}
var canDoubleJump = true;
var framesPerShadow = 4;
var showShadow = true;
var jumpSpeed = 12; // Starting jump speed (slower than original -15)
game.score = 0;
game.obstacleSpeed = 5;
game.obstacleSpeedIncrease = 0.005;
game.simulatedY = 0;
game.checkObstacleCollision = function (obstacles) {
for (var i = 0; i < obstacles.length; i++) {
obstacles[i]._move_migrated();
var dist = Math.sqrt(Math.pow(bird.x - obstacles[i].x, 2) + Math.pow(bird.y - obstacles[i].y, 2));
if (dist < 280) {
// Flash screen red for dramatic effect
LK.effects.flashScreen(0xff0000, 500);
// Flash the bird white for impact effect
LK.effects.flashObject(bird, 0xffffff, 300);
// Play jump sound as game over sound
LK.getSound('jump').play();
LK.setScore(game.score);
// Check and save high score
if (isHighScore(game.score)) {
addHighScore(game.score);
showLeaderboard();
}
// Save final game state and mark as ended
try {
storage.vintowlParkourGameState.gameRunning = false;
storage.vintowlParkourGameState.finalScore = game.score;
} catch (e) {
console.log('Error saving final state:', e);
}
// Delay game over screen to show the flash effect
LK.setTimeout(function () {
LK.showGameOver();
}, 300);
}
}
};
var background = game.addChild(LK.getAsset('background', {
anchorX: 0.5,
anchorY: 1,
x: 1024,
y: 2732
}));
var scoreText = new Text2('0', {
size: 150,
fill: '#ffffff',
dropShadow: true,
dropShadowColor: '#222a9a',
dropShadowBlur: 5,
dropShadowDistance: 7,
dropShadowAngle: 0
});
scoreText.anchor.set(.5, 0);
LK.gui.top.addChild(scoreText);
var scoreText2 = new Text2('0', {
size: 150,
fill: '#ffffff'
});
scoreText2.anchor.set(.5, 0);
scoreText2.x = -4;
scoreText2.y = -5;
LK.gui.top.addChild(scoreText2);
LK.gui.top.addChild(scoreText);
// High score display
var currentBestScore = highScores.length > 0 ? highScores[0] : 0;
var highScoreText = new Text2('High Score: ' + currentBestScore, {
size: 80,
fill: '#ffff00',
dropShadow: true,
dropShadowColor: '#000000',
dropShadowBlur: 3,
dropShadowDistance: 3,
dropShadowAngle: 0
});
highScoreText.anchor.set(0.5, 0);
highScoreText.y = 180;
LK.gui.top.addChild(highScoreText);
var bird = game.addChild(new Bird());
var leftWall = game.addChild(new Wall());
leftWall.x = 0;
leftWall.y = 1366;
var rightWall = game.addChild(new Wall());
rightWall.x = 2048;
rightWall.y = 1366;
var leftObstacles = [],
rightObstacles = [];
var obstacleSpawnRandomness = 240;
var obstacleSpawnRandomnessDecrease = 0.015;
var obstacleSpawnY = -500;
var leftObstacleSpawnTime = Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
var rightObstacleSpawnTime = Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
// Try to load saved game state, otherwise use default position
if (!loadGameState()) {
bird.x = 1024;
bird.y = 1366;
}
game.isMouseDown = false;
game.isUpEventTriggered = true;
game.isUpEventTriggered = true;
game.on('down', function (x, y, obj) {
if (game.isUpEventTriggered) {
bird.flap();
game.isMouseDown = true;
game.isUpEventTriggered = false;
}
});
game.on('up', function (x, y, obj) {
game.isMouseDown = false;
game.isUpEventTriggered = true;
});
// Enhanced save game state function
function saveGameState() {
try {
storage.vintowlParkourGameState = {
score: game.score,
jumpSpeed: jumpSpeed,
obstacleSpeed: game.obstacleSpeed,
obstacleSpawnRandomness: obstacleSpawnRandomness,
birdPosition: {
x: bird.x,
y: bird.y
},
simulatedY: game.simulatedY,
timestamp: Date.now(),
gameRunning: true
};
console.log('Game state saved successfully');
} catch (e) {
console.log('Error saving game state:', e);
}
}
// Load game state function
function loadGameState() {
try {
var savedState = storage.vintowlParkourGameState;
if (savedState && savedState.gameRunning) {
game.score = savedState.score || 0;
jumpSpeed = savedState.jumpSpeed || 12;
game.obstacleSpeed = savedState.obstacleSpeed || 5;
obstacleSpawnRandomness = savedState.obstacleSpawnRandomness || 240;
game.simulatedY = savedState.simulatedY || 0;
if (savedState.birdPosition) {
bird.x = savedState.birdPosition.x;
bird.y = savedState.birdPosition.y;
}
console.log('Game state loaded successfully');
return true;
}
} catch (e) {
console.log('Error loading game state:', e);
}
return false;
}
// Auto-save every 5 seconds
var autoSaveTimer = LK.setInterval(function () {
saveGameState();
}, 5000);
// Initial save
saveGameState();
LK.on('tick', function () {
bird._update_migrated();
// Update the shadow particles
var shadowCount = 0;
for (var i = game.children.length - 1; i >= 0; i--) {
if (game.children[i] instanceof Shadow) {
game.children[i].fadeOut();
shadowCount++;
}
// If there are more than 15 shadow particles, remove the oldest one
if (shadowCount > 12) {
game.children[i].destroy();
}
}
// Spawn the shadows every few frames, while the cat is in the air
if (bird.isInAir && showShadow && LK.ticks % framesPerShadow == 0) {
var shadow = game.addChildAt(new Shadow(), game.getChildIndex(bird)); // Add a shadow particle behind the bird
shadow.x = bird.x; // Position the shadow at the bird's current position
shadow.y = bird.y;
shadow.graphics.scale.x = bird.graphics.scale.x; // Ensure the shadow graphics scale x matches the bird at the time it's spawned
}
scoreText.setText(game.score);
scoreText2.setText(game.score);
// Update high score display
var currentHighScore = highScores.length > 0 ? highScores[0] : 0;
if (game.score > currentHighScore) {
currentHighScore = game.score;
highScoreText.setText('High Score: ' + currentHighScore + ' (NEW!)');
highScoreText.fill = '#ff0000'; // Red color for new high score
} else {
highScoreText.setText('High Score: ' + currentHighScore);
highScoreText.fill = '#ffff00'; // Yellow color for existing high score
}
game.obstacleSpeed += game.obstacleSpeedIncrease;
obstacleSpawnRandomness -= obstacleSpawnRandomnessDecrease;
if (obstacleSpawnRandomness < 40) {
obstacleSpawnRandomness = 40;
}
if (LK.ticks >= leftObstacleSpawnTime) {
var newObstacle = game.addChild(new Obstacle());
newObstacle.x = -10 + newObstacle.width * 0.5;
newObstacle.y = obstacleSpawnY;
leftObstacles.push(newObstacle);
leftObstacleSpawnTime += Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
}
if (LK.ticks >= rightObstacleSpawnTime) {
var newObstacle = game.addChild(new Obstacle());
newObstacle.x = 2048 + 10 - newObstacle.width * 0.5;
newObstacle.y = -newObstacle.height;
newObstacle.scale.x *= -1; // Flip the obstacle horizontally
rightObstacles.push(newObstacle);
rightObstacleSpawnTime += Math.floor(Math.random() * obstacleSpawnRandomness) + obstacleSpawnRandomness;
}
if (bird.intersects(leftWall) || bird.intersects(rightWall)) {
bird.ySpeed = game.obstacleSpeed;
bird.xSpeed = 0;
bird.isInAir = 0;
}
for (var i = leftObstacles.length - 1; i >= 0; i--) {
leftObstacles[i]._move_migrated(game.obstacleSpeed);
if (leftObstacles[i].y > 3232) {
leftObstacles[i].destroy();
leftObstacles.splice(i, 1);
}
}
for (var i = rightObstacles.length - 1; i >= 0; i--) {
rightObstacles[i]._move_migrated(game.obstacleSpeed);
if (rightObstacles[i].y > 3232) {
rightObstacles[i].destroy();
rightObstacles.splice(i, 1);
}
}
game.checkObstacleCollision(leftObstacles);
game.checkObstacleCollision(rightObstacles);
game.simulatedY += game.obstacleSpeed;
if (bird.y < 0 || bird.y > 2732) {
// Flash screen blue for boundary collision
LK.effects.flashScreen(0x0066ff, 500);
// Flash the bird yellow for boundary impact effect
LK.effects.flashObject(bird, 0xffff00, 300);
// Play jump sound as game over sound
LK.getSound('jump').play();
LK.setScore(game.score);
// Check and save high score
if (isHighScore(game.score)) {
addHighScore(game.score);
showLeaderboard();
}
// Save final game state and mark as ended
try {
storage.vintowlParkourGameState.gameRunning = false;
storage.vintowlParkourGameState.finalScore = game.score;
} catch (e) {
console.log('Error saving final state:', e);
}
// Delay game over screen to show the flash effect
LK.setTimeout(function () {
LK.showGameOver();
}, 300);
} else {
game.score = Math.floor(game.simulatedY / 200);
// Gradually increase jump speed based on score (starts at 12, reaches ~18 at score 444)
jumpSpeed = 12 + game.score * 0.014;
// Check for win condition when score reaches 444
if (game.score >= 444) {
// Save final winning state
try {
storage.vintowlParkourGameState.gameRunning = false;
storage.vintowlParkourGameState.finalScore = game.score;
storage.vintowlParkourGameState.hasWon = true;
} catch (e) {
console.log('Error saving win state:', e);
}
LK.setScore(game.score);
LK.showYouWin();
}
}
}); ===================================================================
--- original.js
+++ change.js
@@ -102,10 +102,10 @@
/****
* Game Code
****/
-//Storage library which should be used for persistent game data
// High score system with proper initialization
+//Storage library which should be used for persistent game data
var highScores = [];
var maxHighScores = 10;
// Initialize high scores from storage
try {
A stylized cartoon owl mascot with a sharp business suit, resembling a professional professor or detective. The owl has large expressive orange eyes, a speckled brown head, and detailed feathers. Its body is in mid-jump pose as if performing a parkour leap, arms slightly bent for momentum, legs tucked upward. The style is clean 2D vector art with high contrast, no shadows, and vibrant colors. Purple blazer, golden vest, black tie remain consistent. Background is blank. Focus on dynamic motion and confident energy, game-ready sprite texture.
purple fire spikes. In-Game asset. 2d. High contrast. No shadows
dark purple wall. In-Game asset. 2d. High contrast. No shadows
A cinematic 2D cartoon-style night cityscape featuring a tall, dark purple skyscraper with glowing violet lights. From a distant view, on the top floor, a large glass window reveals the silhouette of a mysterious owl princess. She has a crown, flowing dress, and large glowing orange eyes, barely visible behind the glass. The building reflects moonlight, surrounded by other modern towers and misty clouds. The owl silhouette gives a feeling of sorrow or urgency. High detail background, vector-style with vibrant contrast, no shadows, magical atmosphere. Game-ready, dramatic storytelling frame.. In-Game asset. 2d. High contrast. No shadows