User prompt
Fix counter false counting bugs
User prompt
Fix counter bugs
User prompt
Move the counter left by 70 units
User prompt
Move the counter left by 80 units
User prompt
Move the counter left by 92 units
User prompt
Move the counter left by 123 units
User prompt
Decrease the size of the counter to the half
User prompt
Move the score counter 300 units to the left
User prompt
Move the counter left by 500 units
User prompt
Add to the top center of the map a 'Defeated opponents:' score counter.
User prompt
Flashing faster the powerup asset
User prompt
Animate powerup asset to flashing shiny effect ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Player invulnerable as long as animation is turned on
User prompt
The animation is not turned on when the game starts. It only turns on when the player touches the power asset
User prompt
Ensure if player touch power asset then the effect is turn on for 5 seconds
User prompt
Change the animated effect looking to more fiery
User prompt
Add to the game power asset
User prompt
Change the effect to yellow
User prompt
Could you add animated dragon ball lightning effect to mario ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Avoid having the same enemies one after the other, always coming in turns
User prompt
Ensure enemy assets cannot overlap each other
User prompt
Avoid enemies overlap
User prompt
Make bigger distance between enemies loading
User prompt
Double the distance between two enemy to avoid overlap
User prompt
Increase enemy delay time to 2 seconds before loading the next one enemy asset!
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ // Define a class for enemies var Enemy = Container.expand(function (enemyType) { var self = Container.call(this); var enemyGraphics = self.attachAsset(enemyType, { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.x -= self.speed; if (self.x < -50) { self.destroy(); } }; }); // Define a class for the life counter var LifeCounter = Container.expand(function () { var self = Container.call(this); var lifeGraphics = self.attachAsset('life', { anchorX: 0.0, anchorY: 0.0 }); self.width = 2048; // Full width self.update = function () { // Update the width of the life counter based on Mario's life self.width = 2048 * Mario.life; }; }); // Define a class for the dragon ball lightning effect var LightningEffect = Container.expand(function () { var self = Container.call(this); // Create lightning bolts self.bolts = []; var colors = [0xFFFF00, 0xFFFF00, 0xFFFF00, 0xFFFF00]; // Create multiple lightning bolts around Mario for (var i = 0; i < 5; i++) { var bolt = self.attachAsset('enemy2', { anchorX: 0.5, anchorY: 0.5, scaleX: 25 + Math.random() * 10, scaleY: 25 + Math.random() * 10 }); bolt.tint = colors[Math.floor(Math.random() * colors.length)]; bolt.alpha = 0.7; bolt.rotation = Math.random() * Math.PI * 2; bolt.distance = 80 + Math.random() * 40; bolt.speed = 0.1 + Math.random() * 0.1; bolt.originalScale = { x: bolt.scale.x, y: bolt.scale.y }; self.bolts.push(bolt); } // Animate the lightning self.animate = function () { // Stop any existing animations for (var i = 0; i < self.bolts.length; i++) { tween.stop(self.bolts[i]); } // Start new animations for (var i = 0; i < self.bolts.length; i++) { var bolt = self.bolts[i]; // Randomize the bolt appearance bolt.rotation = Math.random() * Math.PI * 2; bolt.scale.x = bolt.originalScale.x * (0.8 + Math.random() * 0.4); bolt.scale.y = bolt.originalScale.y * (0.8 + Math.random() * 0.4); // Animate the bolt with pulse effect tween(bolt, { alpha: 0.2 + Math.random() * 0.5, scaleX: bolt.originalScale.x * (0.7 + Math.random() * 0.6), scaleY: bolt.originalScale.y * (0.7 + Math.random() * 0.6) }, { duration: 300 + Math.random() * 400, easing: tween.easeOut, onFinish: function () { // Create a callback closure to maintain the correct bolt reference var currentBolt = bolt; return function () { // Animate back tween(currentBolt, { alpha: 0.6 + Math.random() * 0.4, scaleX: currentBolt.originalScale.x * (0.9 + Math.random() * 0.3), scaleY: currentBolt.originalScale.y * (0.9 + Math.random() * 0.3) }, { duration: 300 + Math.random() * 400, easing: tween.easeIn }); }; }() }); } }; self.update = function () { // Position the lightning bolts around Mario for (var i = 0; i < self.bolts.length; i++) { var bolt = self.bolts[i]; var angle = bolt.rotation + self.parent.rotation + bolt.speed * LK.ticks; bolt.x = Math.cos(angle) * bolt.distance; bolt.y = Math.sin(angle) * bolt.distance; } // Periodically refresh animations if (LK.ticks % 30 === 0) { self.animate(); } }; return self; }); //<Assets used in the game will automatically appear here> // Define a class for the player character var Player = Container.expand(function () { var self = Container.call(this); var MarioGraphics = self.attachAsset('Mario', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; // Add the lightning effect self.lightning = self.addChild(new LightningEffect()); self.jumpHeight = 40; self.isJumping = false; self.velocityY = 0; self.update = function () { if (self.isJumping) { self.y += self.velocityY; self.velocityY += 0.7; // Decreased gravity effect by 30% if (self.y >= 2732 / 2) { // Ground level self.y = 2732 / 2; self.isJumping = false; self.velocityY = 0; } } // Update the lightning effect if (self.lightning) { self.lightning.update(); } }; self.jump = function () { if (!self.isJumping) { self.isJumping = true; self.velocityY = -self.jumpHeight; // Activate lightning effect animation with a more intense glow when jumping if (self.lightning) { // Intensify the lightning effect for (var i = 0; i < self.lightning.bolts.length; i++) { var bolt = self.lightning.bolts[i]; tween(bolt, { alpha: 0.9, scaleX: bolt.originalScale.x * 1.5, scaleY: bolt.originalScale.y * 1.5 }, { duration: 300, easing: tween.elasticOut }); } // Reset to normal after a short time LK.setTimeout(function () { self.lightning.animate(); }, 500); } } }; }); // Define a class for power-ups var PowerUp = Container.expand(function () { var self = Container.call(this); var powerGraphics = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.floatOffset = 0; self.collected = false; // Make power-up glow with tween animation tween(powerGraphics, { alpha: 0.7 }, { duration: 1000, easing: tween.sinusoidalInOut, loop: true, yoyo: true }); self.update = function () { // Move power-up from right to left self.x -= self.speed; // Floating up and down motion self.floatOffset += 0.05; self.y = self.originalY + Math.sin(self.floatOffset) * 20; // Remove if off screen if (self.x < -100) { self.destroy(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB // Sky blue background }); /**** * Game Code ****/ var background = game.addChild(LK.getAsset('background', { anchorX: 0, anchorY: 0 })); background.x = 0; background.y = 0; // Initialize player var Mario = game.addChild(new Player()); Mario.x = 2048 / 2; Mario.y = 2732 / 2; Mario.life = 1; // Initialize Mario's life to 1 (100%) // Initialize the life counter and add it to the game var lifeCounter = game.addChild(new LifeCounter()); lifeCounter.y = 0; // Position it at the top of the screen // Initialize enemies var enemies = []; var enemySpawnInterval = 100; var enemySpawnCounter = 0; // Initialize power-ups var powerups = []; var powerupSpawnInterval = 300; var powerupSpawnCounter = 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; // Handle game updates game.update = function () { Mario.update(); // Spawn enemies enemySpawnCounter++; if (enemySpawnCounter >= enemySpawnInterval) { // Define enemy types var enemyTypes = ['enemy', 'enemy1', 'enemy2', 'enemy3']; // Keep track of the last enemy type to avoid repetition if (!game.lastEnemyTypeIndex) { game.lastEnemyTypeIndex = -1; } var i = 0; var _spawnEnemy = function spawnEnemy() { // Get a new enemy type that is different from the last one var availableTypes = []; for (var t = 0; t < enemyTypes.length; t++) { if (t !== game.lastEnemyTypeIndex) { availableTypes.push({ index: t, type: enemyTypes[t] }); } } // Randomly select from available types var selectedType = availableTypes[Math.floor(Math.random() * availableTypes.length)]; game.lastEnemyTypeIndex = selectedType.index; var enemy = new Enemy(selectedType.type); enemy.x = 2048 + i * 6 * enemy.width; // Six times the distance between enemies to completely avoid overlap enemy.y = 2732 / 2; enemies.push(enemy); game.addChild(enemy); i++; if (i < enemyTypes.length) { LK.setTimeout(_spawnEnemy, 2000); // Add 2 seconds delay between each enemy spawn } }; _spawnEnemy(); // Randomize the spawn interval for the next enemy enemySpawnInterval = Math.floor(Math.random() * 150) + 50; enemySpawnCounter = 0; } // Spawn power-ups powerupSpawnCounter++; if (powerupSpawnCounter >= powerupSpawnInterval) { var powerup = new PowerUp(); powerup.x = 2048 + 200; // Start a bit off screen powerup.y = 2732 / 2 - 200; // Above the players level powerup.originalY = powerup.y; // Store original Y for floating animation powerup.lastWasIntersecting = false; // For tracking intersection powerups.push(powerup); game.addChild(powerup); // Randomize the spawn interval for the next power-up powerupSpawnInterval = Math.floor(Math.random() * 400) + 300; powerupSpawnCounter = 0; } // Update enemies for (var j = enemies.length - 1; j >= 0; j--) { enemies[j].update(); if (Mario.intersects(enemies[j])) { if (Mario.isJumping) { // Mario jumped on top of the enemy, destroy the enemy enemies[j].destroy(); enemies.splice(j, 1); } else { Mario.life -= 0.005; // Decrease Mario's life by 0.5% if (Mario.life <= 0) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } } } else if (Mario.x > enemies[j].x && !enemies[j].passed) { enemies[j].passed = true; LK.setScore(LK.getScore() + 1); scoreText.setText(LK.getScore()); } } // Update power-ups for (var k = powerups.length - 1; k >= 0; k--) { var powerup = powerups[k]; powerup.update(); // Check for collision with Mario var currentIntersecting = Mario.intersects(powerup); if (!powerup.lastWasIntersecting && currentIntersecting) { // Power-up collected - apply effect powerup.collected = true; // Apply power-up effect Mario.life = Math.min(1, Mario.life + 0.3); // Restore 30% of life // Flash effect when collecting power-up LK.effects.flashObject(Mario, 0xFFD700, 500); // Enhance lightning effect temporarily if (Mario.lightning) { for (var i = 0; i < Mario.lightning.bolts.length; i++) { var bolt = Mario.lightning.bolts[i]; tween(bolt, { alpha: 1, scaleX: bolt.originalScale.x * 2, scaleY: bolt.originalScale.y * 2 }, { duration: 500, easing: tween.elasticOut }); } // Reset to normal after a short time LK.setTimeout(function () { Mario.lightning.animate(); }, 1000); } // Remove the power-up powerup.destroy(); powerups.splice(k, 1); } // Update tracking state if (powerup) { powerup.lastWasIntersecting = currentIntersecting; } } // Sort enemies by their x position to ensure they never cover each other in display order enemies.sort(function (a, b) { return a.x - b.x; }); // Update the life counter lifeCounter.update(); }; // Handle player jump game.down = function (x, y, obj) { Mario.jump(); };
===================================================================
--- original.js
+++ change.js
@@ -168,8 +168,40 @@
}
}
};
});
+// Define a class for power-ups
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var powerGraphics = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 3;
+ self.floatOffset = 0;
+ self.collected = false;
+ // Make power-up glow with tween animation
+ tween(powerGraphics, {
+ alpha: 0.7
+ }, {
+ duration: 1000,
+ easing: tween.sinusoidalInOut,
+ loop: true,
+ yoyo: true
+ });
+ self.update = function () {
+ // Move power-up from right to left
+ self.x -= self.speed;
+ // Floating up and down motion
+ self.floatOffset += 0.05;
+ self.y = self.originalY + Math.sin(self.floatOffset) * 20;
+ // Remove if off screen
+ if (self.x < -100) {
+ self.destroy();
+ }
+ };
+ return self;
+});
/****
* Initialize Game
****/
@@ -197,8 +229,12 @@
// Initialize enemies
var enemies = [];
var enemySpawnInterval = 100;
var enemySpawnCounter = 0;
+// Initialize power-ups
+var powerups = [];
+var powerupSpawnInterval = 300;
+var powerupSpawnCounter = 0;
// Create a new Text2 object to display the score
var scoreText = new Text2('0', {
size: 100,
fill: 0xFFFFFF
@@ -248,8 +284,22 @@
// Randomize the spawn interval for the next enemy
enemySpawnInterval = Math.floor(Math.random() * 150) + 50;
enemySpawnCounter = 0;
}
+ // Spawn power-ups
+ powerupSpawnCounter++;
+ if (powerupSpawnCounter >= powerupSpawnInterval) {
+ var powerup = new PowerUp();
+ powerup.x = 2048 + 200; // Start a bit off screen
+ powerup.y = 2732 / 2 - 200; // Above the players level
+ powerup.originalY = powerup.y; // Store original Y for floating animation
+ powerup.lastWasIntersecting = false; // For tracking intersection
+ powerups.push(powerup);
+ game.addChild(powerup);
+ // Randomize the spawn interval for the next power-up
+ powerupSpawnInterval = Math.floor(Math.random() * 400) + 300;
+ powerupSpawnCounter = 0;
+ }
// Update enemies
for (var j = enemies.length - 1; j >= 0; j--) {
enemies[j].update();
if (Mario.intersects(enemies[j])) {
@@ -269,8 +319,48 @@
LK.setScore(LK.getScore() + 1);
scoreText.setText(LK.getScore());
}
}
+ // Update power-ups
+ for (var k = powerups.length - 1; k >= 0; k--) {
+ var powerup = powerups[k];
+ powerup.update();
+ // Check for collision with Mario
+ var currentIntersecting = Mario.intersects(powerup);
+ if (!powerup.lastWasIntersecting && currentIntersecting) {
+ // Power-up collected - apply effect
+ powerup.collected = true;
+ // Apply power-up effect
+ Mario.life = Math.min(1, Mario.life + 0.3); // Restore 30% of life
+ // Flash effect when collecting power-up
+ LK.effects.flashObject(Mario, 0xFFD700, 500);
+ // Enhance lightning effect temporarily
+ if (Mario.lightning) {
+ for (var i = 0; i < Mario.lightning.bolts.length; i++) {
+ var bolt = Mario.lightning.bolts[i];
+ tween(bolt, {
+ alpha: 1,
+ scaleX: bolt.originalScale.x * 2,
+ scaleY: bolt.originalScale.y * 2
+ }, {
+ duration: 500,
+ easing: tween.elasticOut
+ });
+ }
+ // Reset to normal after a short time
+ LK.setTimeout(function () {
+ Mario.lightning.animate();
+ }, 1000);
+ }
+ // Remove the power-up
+ powerup.destroy();
+ powerups.splice(k, 1);
+ }
+ // Update tracking state
+ if (powerup) {
+ powerup.lastWasIntersecting = currentIntersecting;
+ }
+ }
// Sort enemies by their x position to ensure they never cover each other in display order
enemies.sort(function (a, b) {
return a.x - b.x;
});
Ghiblis style
Ghibli style but more realistic
Ghibli style
NeonYellow powerup logo. In-Game asset. 2d. High contrast. No shadows
Running Sith jar-jar binks in ghibli style. In-Game asset. 2d. High contrast. No shadows
Shark with lasergun on his head, sideview, ghibli style. In-Game asset. 2d. High contrast. No shadows
White textbubble with thin black frame. 'Run away! A killer rabbit!' text in bubble. In-Game asset. 2d. High contrast. No shadows
Remove 3. Stripe from the shoe and the kit