User prompt
The player cant jump up from green signal at now. Fix it!
User prompt
Reduce distance between signals to 5 units
User prompt
ReCalibrate signals size correctly because the player should stop falling on the top of the signals and not on the middle of the signals!
User prompt
Rotate signals left by 90 degrees ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Jumping by click is not working when player fall onto signals top. Fix it
User prompt
Stop automatic bouncing from signals
User prompt
Just do it
User prompt
Scale down the signals size by 1.2x
User prompt
Scale down the signals size by 1.5x
User prompt
The player cannot jump when it landed on green signal. Fix it
User prompt
Gravity is off while player land on green signal
User prompt
Player jumping on green signals by clicks still not working. FIX IT!
User prompt
Player jumping on green signals by clicks still not working. FIX IT!
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'down')' in or related to this line: 'self.down = function (x, y, obj) {' Line Number: 440
User prompt
Ensure player jumps when clicked
User prompt
Remove the automatic jump from the game
User prompt
Add player jumps when player clicked and player jumps on green signal
User prompt
Do it
User prompt
Avoid automatic jumpings, only when player clicked
User prompt
The jumping mechanics is good but it should only works if player clicks and reach the top of the green signal
User prompt
Ensure jumping event if player collision on the green signal
User prompt
Theres a lot of bugs with signal collisions, player jumps and falling
User prompt
Ensure player collision with the top of the green signal but not with the red
User prompt
Increase the player jump at click
User prompt
Ensure the player start falling from the left top of the screen at the game start
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Memecoin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('memecoin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 6;
self.active = true;
self.collected = false;
self.update = function () {
if (!self.active) {
return;
}
self.x -= self.speed;
// Rotate coin
coinGraphics.rotation += 0.03;
// Remove when off screen
if (self.x < -100) {
self.active = false;
}
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.vx = 0;
self.vy = 0;
self.gravity = 0.5;
self.jumpPower = -25; // Increased jump power from -15 to -25
self.isJumping = false;
self.isDead = false;
self.lastWasIntersecting = false;
self.jump = function () {
var _signals$find;
if (!self.isDead && (self.vy === 0 || self.y === ((_signals$find = signals.find(function (s) {
return player && player.intersects(s) && s.type === 'green';
})) === null || _signals$find === void 0 ? void 0 : _signals$find.y) - 325)) {
self.vy = self.jumpPower;
self.isJumping = true;
LK.getSound('jump').play();
}
};
self.update = function () {
if (self.isDead) {
return;
}
// Store last position for collision detection
self.lastY = self.y;
// Apply gravity
self.vy += self.gravity;
// Apply movement
self.y += self.vy;
// Track if player is jumping or falling
self.isJumping = self.vy !== 0;
// Ground collision detection
if (self.y > 2732 - 250) {
// Shark zone
self.y = 2732 - 250;
self.vy = 0;
self.isJumping = false;
}
};
return self;
});
var Shark = Container.expand(function () {
var self = Container.call(this);
var sharkGraphics = self.attachAsset('shark', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self.direction = 1;
self.amplitude = 100;
self.centerY = 2732 - 100;
self.startX = 400;
self.time = 0;
self.update = function () {
self.time += 0.02;
// Shark moves in a wavy pattern along the bottom
self.x = self.startX + Math.sin(self.time) * self.amplitude;
self.y = self.centerY + Math.sin(self.time * 2) * 20;
// Flip shark based on direction
if (Math.sin(self.time) > 0 && self.direction === -1) {
self.direction = 1;
sharkGraphics.scale.x = 1;
} else if (Math.sin(self.time) < 0 && self.direction === 1) {
self.direction = -1;
sharkGraphics.scale.x = -1;
}
};
return self;
});
var Signal = Container.expand(function (type) {
var self = Container.call(this);
self.type = type || 'green';
var assetId = self.type === 'green' ? 'greenSignal' : 'redSignal';
var signalGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1 / 1.2,
scaleY: 1 / 1.2
});
// Rotate signal by 90 degrees to the left
signalGraphics.rotation = -Math.PI / 2; // -90 degrees in radians
self.speed = 3.5;
self.active = true;
self.update = function () {
if (!self.active) {
return;
}
self.x -= self.speed;
// Remove when off screen only if player is not jumping/falling
// Make sure we keep signals visible while player is falling
if (self.x < -200) {
// Only deactivate if player doesn't exist or if player is not jumping/falling
if (!player || !player.isJumping && player.vy <= 0) {
self.active = false;
}
}
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x001F3F
});
/****
* Game Code
****/
// Game variables
var player;
var signals = [];
var memecoins = [];
var shark;
var isGameActive = true;
var gameSpeed = 1;
var lastSignalTime = 0;
var lastCoinTime = 0;
var score = 0;
var scoreIncrement = 0.1;
var distanceTraveled = 0;
// UI elements
var scoreTxt;
var highScoreTxt;
// Initialize UI
function initUI() {
// Score text
scoreTxt = new Text2('SCORE: 0', {
size: 70,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.y = 50;
// High score text
var highScore = storage.highScore || 0;
highScoreTxt = new Text2('HIGH SCORE: ' + Math.floor(highScore), {
size: 50,
fill: 0xFFD700
});
highScoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(highScoreTxt);
highScoreTxt.y = 130;
}
// Initialize game world
function initGame() {
isGameActive = true;
score = 0;
distanceTraveled = 0;
gameSpeed = 1;
// Create player at top left, ready to fall
player = new Player();
player.x = 200;
player.y = 100;
player.vy = 5; // Start with downward velocity
game.addChild(player);
// Create shark
shark = new Shark();
shark.y = 2732 - 100;
game.addChild(shark);
// Clear signals and coins
clearEntities();
// Create initial signals that have already reached the left side
for (var i = 0; i < 44; i++) {
var signalType = Math.random() < 0.5 ? 'green' : 'red';
// For signals that are lower than the previous, make them red
// For signals that are higher than the previous, make them green
var lastY = 1500;
if (signals.length > 0) {
lastY = signals[signals.length - 1].y;
}
var newY;
var willBeHigher = Math.random() < 0.5;
if (willBeHigher) {
newY = lastY - (200 + Math.random() * 300);
signalType = 'green';
} else {
newY = lastY + (200 + Math.random() * 300);
signalType = 'red';
}
// Ensure signal stays within playable area
newY = Math.max(800, Math.min(2200, newY));
var signal = new Signal(signalType);
// Position signals already at the left side of the screen
signal.x = -150 + i * 50; // Distribute signals across the left edge
signal.y = newY;
signals.push(signal);
game.addChild(signal);
}
// Start game music
LK.playMusic('gameMusic');
}
// Clear all entities
function clearEntities() {
for (var i = signals.length - 1; i >= 0; i--) {
signals[i].destroy();
signals.splice(i, 1);
}
for (var i = memecoins.length - 1; i >= 0; i--) {
memecoins[i].destroy();
memecoins.splice(i, 1);
}
}
// Spawn signals
function spawnSignal() {
var currentTime = Date.now();
// Spawn signals at shorter intervals to make them closer to each other
if (currentTime - lastSignalTime > 450 / gameSpeed) {
var signal;
var lastSignalY = 1500; // Default Y position if no signals exist
// Get the Y position of the last signal to compare with
if (signals.length > 0) {
var lastSignal = signals[signals.length - 1];
lastSignalY = lastSignal.y;
}
// Calculate a new Y position
var newY;
var willBeHigher = Math.random() < 0.5; // 50% chance to go higher
if (willBeHigher) {
// This signal will be higher (ascending)
newY = lastSignalY - (200 + Math.random() * 300);
// Higher signals must be green
signal = new Signal('green');
} else {
// This signal will be lower (descending)
newY = lastSignalY + (200 + Math.random() * 300);
// Lower signals must be red
signal = new Signal('red');
}
// Ensure signal stays within playable area
newY = Math.max(800, Math.min(2200, newY));
signal.x = 2048 + 150;
signal.y = newY;
signals.push(signal);
game.addChild(signal);
lastSignalTime = currentTime;
}
}
// Spawn memecoins
function spawnMemecoin() {
var currentTime = Date.now();
// Spawn coins less frequently than signals
if (currentTime - lastCoinTime > 3000 / gameSpeed) {
var coin = new Memecoin();
coin.x = 2048 + 150;
coin.y = 1000 + Math.random() * 1000; // Random height
memecoins.push(coin);
game.addChild(coin);
lastCoinTime = currentTime;
}
}
// Check collisions between player and signals/coins/shark
function checkCollisions() {
if (!isGameActive) {
return;
}
// Check signal collisions
for (var i = 0; i < signals.length; i++) {
var signal = signals[i];
if (signal.active && player.intersects(signal)) {
// Store previous intersection state
var wasIntersecting = player.lastWasIntersecting;
player.lastWasIntersecting = true;
// Only handle collision if this is a new intersection
if (!wasIntersecting) {
// Check if player is above the signal and falling down
// The signal is rotated 90 degrees left, so we need to detect its height properly
// Signal's height is now its width because of the rotation
var signalHeight = 50 / 1.2; // Original height divided by scale factor
var signalWidth = 500 / 1.2; // Original width divided by scale factor
var playerHeight = 150; // Player height
// Calculate where the top of the signal is considering rotation
if (player.y < signal.y - signalWidth / 2 && player.vy > 0) {
if (signal.type === 'green') {
// Land on green signals but don't automatically jump
// Position player properly on top of the signal
player.y = signal.y - signalWidth / 2 - playerHeight / 2;
player.vy = 0;
player.isJumping = false;
} else if (signal.type === 'red') {
// Pass through red signals, ignore collision
// Don't land on red signals, continue falling
player.vy += player.gravity;
player.isJumping = true;
}
}
}
} else if (signal.active) {
// If not intersecting this signal, reset lastWasIntersecting
player.lastWasIntersecting = false;
}
}
// Check memecoin collisions
for (var i = 0; i < memecoins.length; i++) {
var coin = memecoins[i];
if (coin.active && !coin.collected && player.intersects(coin)) {
// Collect coin
coin.collected = true;
// Add points
score += 50;
scoreTxt.setText('SCORE: ' + Math.floor(score));
// Flash coin and remove
LK.effects.flashObject(coin, 0xFFFFFF, 300);
LK.getSound('coinCollect').play();
tween(coin, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 300,
onFinish: function onFinish() {
coin.active = false;
}
});
}
}
// Check shark collision
if (player.y > 2732 - 250 && player.intersects(shark)) {
// Game over if player touches shark
gameOver();
}
}
// Clean up inactive entities
function cleanupEntities() {
// Remove inactive signals
for (var i = signals.length - 1; i >= 0; i--) {
// Only remove signals if player is not jumping or falling
if (!signals[i].active) {
// Add extra conditions to ensure we don't remove signals that player might need to land on
if (!player || !player.isJumping && player.vy <= 0) {
signals[i].destroy();
signals.splice(i, 1);
}
}
}
// Remove inactive coins
for (var i = memecoins.length - 1; i >= 0; i--) {
if (!memecoins[i].active) {
memecoins[i].destroy();
memecoins.splice(i, 1);
}
}
}
// Game over
function gameOver() {
isGameActive = false;
player.isDead = true;
// Play crash sound
LK.getSound('crash').play();
// Flash screen red
LK.effects.flashScreen(0xFF0000, 500);
// Update high score
var highScore = storage.highScore || 0;
if (score > highScore) {
storage.highScore = score;
highScoreTxt.setText('HIGH SCORE: ' + Math.floor(score));
}
// Show game over after a short delay
LK.setTimeout(function () {
LK.showGameOver();
}, 800);
}
// Input handling
game.down = function (x, y, obj) {
// Jump when tapping/clicking
player.jump();
};
// Main game update loop
game.update = function () {
if (!isGameActive) {
return;
}
// Update score based on distance
distanceTraveled += gameSpeed;
score += scoreIncrement * gameSpeed;
// Update score display occasionally to avoid text updates every frame
if (Math.floor(score) % 5 === 0) {
scoreTxt.setText('SCORE: ' + Math.floor(score));
}
// Increase game speed gradually
gameSpeed = 1 + distanceTraveled / 10000;
// Spawn entities
spawnSignal();
spawnMemecoin();
// Check collisions
checkCollisions();
// Remove inactive entities
cleanupEntities();
// Check if player fell off screen
if (player.y > 2732 + 200) {
gameOver();
}
};
// Initialize UI and game
initUI();
initGame();
// Track signal status globally
game.onEntityDestroyed = function (entity) {
// Keep track of destroyed entities if needed
if (entity instanceof Signal && player) {
// Keep signals around longer if player is falling or jumping
if (player.isJumping || player.vy > 0) {
// Return false to prevent deletion when player might need to land
return false;
}
}
return true;
}; ===================================================================
--- original.js
+++ change.js
@@ -43,9 +43,12 @@
self.isJumping = false;
self.isDead = false;
self.lastWasIntersecting = false;
self.jump = function () {
- if (!self.isDead && (self.vy === 0 || !self.isJumping)) {
+ var _signals$find;
+ if (!self.isDead && (self.vy === 0 || self.y === ((_signals$find = signals.find(function (s) {
+ return player && player.intersects(s) && s.type === 'green';
+ })) === null || _signals$find === void 0 ? void 0 : _signals$find.y) - 325)) {
self.vy = self.jumpPower;
self.isJumping = true;
LK.getSound('jump').play();
}
@@ -215,9 +218,9 @@
// Ensure signal stays within playable area
newY = Math.max(800, Math.min(2200, newY));
var signal = new Signal(signalType);
// Position signals already at the left side of the screen
- signal.x = -150 + i * 5; // Distribute signals across the left edge with 5 units spacing
+ signal.x = -150 + i * 50; // Distribute signals across the left edge
signal.y = newY;
signals.push(signal);
game.addChild(signal);
}
Grey shark, sideview. In-Game asset. 2d. High contrast. No shadows
Golden Dogecoin
Golden memecoin with sunglasses
shiba inu golden memecoin
Golden memecoin with Pepe
Golden coin with Floki
Golden coin with volt
Golden coin with cute catface
Golden coin with Trump and 'WILL FIX IT' Text
Lightning line. In-Game asset. 2d. High contrast. No shadows