Code edit (1 edits merged)
Please save this source code
User prompt
change level if score reach 300
Code edit (1 edits merged)
Please save this source code
User prompt
Make the asset Explosion2 the explosion objects for level 2
User prompt
let the explosion asset for explosion in level 1 only and make the asset explotion2 for level 2
User prompt
delete explosion line 5 from game
User prompt
Make the asset Explosion the Explosion for level 1
User prompt
Make asset Explotsion2 for explosion in level 2
User prompt
Add 2 object to the game Explosion2 and Explosion3
User prompt
if score reach 1000 point start level 2 so on for the other levels
User prompt
Go to level 2 if score reach 1000
User prompt
Make explosion the object that if the dragon shout and touch other objects of level 1 show explosion then hide
User prompt
Remove sharp_Island,SharpislandBig,SharpislandMedium,SharpislandSmall,SharpislandTall from the game
User prompt
Remove All the Sharpisland objects from the game
User prompt
Make the object assets of level 1 have same system of asset tree01, make it all respawn in the screen
User prompt
Make the assets Sharp_Island, SharpislandBig, SharpislandMedium, SharpislandSmall, SharpislandTall, the objects that the dragon shout it for level 1
User prompt
Make the object on the front side like dragon
User prompt
If object touch the dragon the object explode and decrease the healthbar by small amount of damage
User prompt
fix set 13
User prompt
Make the background first object on the back
User prompt
Make the all sharpisland objects respawn in screen from bottom to upward
User prompt
Make SharplandBig, SharpislandMedium,SharpislandSmall, SharpislandTall the object assets for the game level 1
User prompt
make the object for level 1 respawn
User prompt
Add asset sharpisland_tall to level 1
User prompt
Make the objects with same range for the dragon to get touched
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ //<Assets used in the game will automatically appear here> //<Write imports for supported plugins here> // Dragon class to represent the player character var Dragon = Container.expand(function () { var self = Container.call(this); var dragonGraphics = self.attachAsset('dragon', { anchorX: 0.5, anchorY: 0.5, scaleX: 2.0, scaleY: 2.0, smooth: true, filterQuality: 2 }); self.speed = 20; // Further increase the speed of the dragon self.update = function () { // Update logic for the dragon to flip based on movement direction if (self.x < 2048 / 2) { dragonGraphics.scaleX = -1; // Flip horizontally when on the left side of the screen } else { dragonGraphics.scaleX = 1; // Normal orientation when on the right side of the screen } // Removed unnecessary variable to optimize performance }; }); // Fireball class to represent the fireballs that the dragon shoots var Fireball = Container.expand(function (assetId) { var self = Container.call(this); var fireballGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5, scaleX: 0.6, scaleY: 0.9, smooth: true, filterQuality: 1 }); self.speed = 40; // Increase the speed of the fireballs self.update = function () { self.y += self.speed; }; }); // HealthBar class to represent the player's health var HealthBar = Container.expand(function () { var self = Container.call(this); var healthBarGraphics = self.attachAsset('healthBar', { anchorX: 0.0, anchorY: 0.0, scaleX: 2530 / 1000, // Scale to fit the game width scaleY: 0.1 }); self.maxHealth = 1000; self.currentHealth = self.maxHealth; self.update = function () { healthBarGraphics.scaleX = self.currentHealth / self.maxHealth; healthBarGraphics.scaleY = 0.05; // Resize the health bar to fit the top of the screen }; }); var Icerocks = Container.expand(function () { var self = Container.call(this); var icerocksGraphics = self.attachAsset('Icerocks', { anchorX: 0.5, anchorY: 0.5, scaleX: level === 3 ? 1.5 : 1.0, scaleY: level === 3 ? 1.5 : 1.0, smooth: true, filterQuality: 1 }); self.speed = level === 3 ? 10 : 5; // Increase speed for level 3 self.update = function () { // Move the icerocks upwards self.y -= self.speed; }; }); var Lavarocks = Container.expand(function () { var self = Container.call(this); var lavarocksGraphics = self.attachAsset('Lavarocks', { anchorX: 0.5, anchorY: 0.5, scaleX: level === 2 ? 1.5 : 1.0, scaleY: level === 2 ? 1.5 : 1.0, smooth: true, filterQuality: 1 }); self.speed = level === 2 ? 10 : 5; // Increase speed for level 2 self.update = function () { // Move the lavarocks upwards self.y -= self.speed; }; }); var Lavarocks1 = Container.expand(function () { var self = Container.call(this); var lavarocks1Graphics = self.attachAsset('Lavarocks1', { anchorX: 0.5, anchorY: 0.5, scaleX: level === 2 ? 1.5 : 1.0, scaleY: level === 2 ? 1.5 : 1.0, smooth: true, filterQuality: 1 }); self.speed = level === 2 ? 10 : 5; // Increase speed for level 2 self.update = function () { // Move the lavarocks1 upwards self.y += self.speed; }; }); var Lavarocks2 = Container.expand(function () { var self = Container.call(this); var lavarocks2Graphics = self.attachAsset('Lavarocks2', { anchorX: 0.5, anchorY: 0.5, scaleX: level === 2 ? 1.5 : 1.0, scaleY: level === 2 ? 1.5 : 1.0, smooth: true, filterQuality: 1 }); self.speed = level === 2 ? 10 : 5; // Increase speed for level 2 self.update = function () { // Move the lavarocks2 upwards self.y -= self.speed; }; }); var Sharpisland = Container.expand(function (size) { var self = Container.call(this); var assetId; switch (size) { case 'small': assetId = 'SharpislandSmall'; self.points = 15; break; case 'medium': assetId = 'SharpislandMedium'; self.points = 25; break; case 'big': assetId = 'SharpislandBig'; self.points = 35; break; case 'tall': assetId = 'SharpislandTall'; self.points = 35; break; default: assetId = 'SharpislandMedium'; self.points = 25; } var sharpislandGraphics = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5, scaleX: 1.0, scaleY: 1.0, smooth: true, filterQuality: 1 }); self.speed = 5; // Set speed for Sharpisland objects self.update = function () { self.y -= self.speed; // Move the Sharpisland upwards from the bottom if (self.y < -self.height) { self.y = 2732; // Reset position to the bottom when it goes off-screen self.x = Math.random() * (2048 - self.width) + self.width / 2; // Randomize x position } // Adjust collision range to match dragon's size self.width = dragon.width * 0.8; // Set Sharpisland width to 80% of dragon's width self.height = dragon.height * 0.8; // Set Sharpisland height to 80% of dragon's height }; }); var Stone = Container.expand(function () { var self = Container.call(this); var stoneGraphics = self.attachAsset('Stone', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5, smooth: true, filterQuality: 1 }); self.speed = 10; // Increase speed for Stone objects self.update = function () { // Move the stones upwards self.y -= self.speed; }; }); var StoneCircle = Container.expand(function () { var self = Container.call(this); var stoneCircleGraphics = self.attachAsset('StoneCircle', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5, smooth: true, filterQuality: 1 }); self.speed = 10; // Increase speed for StoneCircle objects self.update = function () { // Move the stones upwards self.y -= self.speed; }; }); var StoneSquare = Container.expand(function () { var self = Container.call(this); var stoneSquareGraphics = self.attachAsset('StoneSquare', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5, smooth: true, filterQuality: 1 }); self.speed = 10; // Increase speed for StoneSquare objects self.update = function () { // Move the stones upwards self.y -= self.speed; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000, //Init game with black background height: 3000 // Increase the game screen height }); /**** * Game Code ****/ // or via static code analysis based on their usage in the code. function startRespawningObjects() { // Logic to start respawning objects based on the current level if (level === 1) { // Respawn Sharpisland randomly in level 1 if (!LK.gameOver && LK.ticks % 50 == 0) { var newSharpisland; for (var i = 0; i < spheres.length; i++) { if (spheres[i] instanceof Sharpisland && spheres[i].y < -200) { newSharpisland = spheres[i]; break; } } if (!newSharpisland) { newSharpisland = new Sharpisland(); spheres.push(newSharpisland); game.addChild(newSharpisland); } newSharpisland.x = Math.random() * (2048 - newSharpisland.width) + newSharpisland.width / 2; newSharpisland.y = 2732; // Start from the bottom var randomScale = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0 newSharpisland.scaleX = randomScale; newSharpisland.scaleY = randomScale; newSharpisland.visible = true; // Ensure Sharpisland is visible } } else if (level === 2) { // Respawn Lavarocks, Lavarocks1, and Lavarocks2 randomly in level 2 if (!LK.gameOver && LK.ticks % 50 == 0) { var newLavarock; for (var i = 0; i < spheres.length; i++) { if ((spheres[i] instanceof Lavarocks || spheres[i] instanceof Lavarocks1 || spheres[i] instanceof Lavarocks2) && spheres[i].y < -200) { newLavarock = spheres[i]; break; } } if (!newLavarock) { var randomType = Math.floor(Math.random() * 3); if (randomType === 0) { newLavarock = new Lavarocks(); } else if (randomType === 1) { newLavarock = new Lavarocks1(); } else { newLavarock = new Lavarocks2(); } spheres.push(newLavarock); game.addChild(newLavarock); } newLavarock.x = Math.random() * (2048 - newLavarock.width) + newLavarock.width / 2; newLavarock.y = 2732; var randomScale = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0 newLavarock.scaleX = randomScale; newLavarock.scaleY = randomScale; } } else if (level === 3) { // Respawn Icerocks randomly in level 3 if (!LK.gameOver && LK.ticks % 50 == 0) { var newIcerock; for (var i = 0; i < spheres.length; i++) { if (spheres[i] instanceof Icerocks && spheres[i].y < -200) { newIcerock = spheres[i]; break; } } if (!newIcerock) { newIcerock = new Icerocks(); spheres.push(newIcerock); game.addChild(newIcerock); } newIcerock.x = Math.random() * (2048 - newIcerock.width) + newIcerock.width / 2; newIcerock.y = 2732; var randomScaleX = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0 for width var randomScaleY = 0.5 + Math.random() * 2.5; // Random scale between 0.5 and 2.5 for height newIcerock.scaleX = randomScaleX; newIcerock.scaleY = randomScaleY; } } } // Function to show the level text twice function showLevelTextTwice() { levelTxtOrange.fill = 0x0000ff; // Blue color levelTxtOrange.visible = true; LK.setTimeout(function () { levelTxtOrange.visible = false; LK.setTimeout(function () { levelTxtOrange.visible = true; LK.setTimeout(function () { levelTxtOrange.visible = false; // Start respawning objects after the text has shown and hidden for the last time startRespawningObjects(); }, 500); }, 500); }, 500); } // Add background image for level 4 var backgroundLevel4 = LK.getAsset('Stone_lands', { anchorX: 0.0, anchorY: 0.0 }); backgroundLevel4.smooth = true; backgroundLevel4.filterQuality = 0; // Further increase the filter quality for better clarity backgroundLevel4.scale.set(2048 / 800, 2732 / 800); backgroundLevel4.smooth = true; // Enable smoothing to remove pixelation backgroundLevel4.filterQuality = 0; // Adjust filter quality for better clarity backgroundLevel4.visible = false; // Initially hidden game.addChild(backgroundLevel4); // Add Sharpisland to the game screen var sharpisland = new Sharpisland(); game.addChild(sharpisland); sharpisland.x = Math.random() * (2048 - sharpisland.width) + sharpisland.width / 2; sharpisland.y = 2732; // Start from the bottom // Initialize game variables var dragon; var spheres = []; var fireballs = []; // Initialize fireballs array var score = 0; // Initialize score to 0 var scoreTxt; var level = 1; // Initialize level to 1 // Add background image to the game for level 1 var backgroundLevel1 = LK.getAsset('Green_lands', { anchorX: 0.0, anchorY: 0.0 }); backgroundLevel1.smooth = true; // Enable smoothing to remove pixelation backgroundLevel1.filterQuality = 0; // Adjust filter quality for better clarity backgroundLevel1.scale.set(2048 / 800, 2732 / 800); // Scale the background to fit the screen backgroundLevel1.smooth = true; // Enable smoothing to remove pixelation backgroundLevel1.filterQuality = 0; // Further increase the filter quality for better clarity backgroundLevel1.visible = true; // Initially visible game.addChildAt(backgroundLevel1, 0); // Add background at the lowest layer // Add background image for level 2 var backgroundLevel2 = LK.getAsset('Lava_lands', { anchorX: 0.0, anchorY: 0.0 }); backgroundLevel2.smooth = true; backgroundLevel2.filterQuality = 0; // Further increase the filter quality for better clarity backgroundLevel2.scale.set(2048 / 800, 2732 / 800); backgroundLevel2.smooth = true; // Enable smoothing to remove pixelation backgroundLevel2.filterQuality = 2; // Increase filter quality for better clarity backgroundLevel2.visible = false; // Initially hidden game.addChild(backgroundLevel2); // Add background image for level 3 var backgroundLevel3 = LK.getAsset('Ice_lands', { anchorX: 0.0, anchorY: 0.0 }); backgroundLevel3.smooth = true; backgroundLevel3.filterQuality = 0; // Further increase the filter quality for better clarity backgroundLevel3.scale.set(2048 / 800, 2732 / 800); backgroundLevel3.smooth = true; // Enable smoothing to remove pixelation backgroundLevel3.filterQuality = 0; // Adjust filter quality for better clarity backgroundLevel3.visible = false; // Initially hidden game.addChild(backgroundLevel3); // Refresh the background to be clearer & fit to screen every 60 ticks game.update = function () { backgroundLevel1.x = 2048 / 2; // Center the background horizontally backgroundLevel1.y = 2732 / 2; // Center the background vertically if (backgroundLevel1.y >= 2732) { backgroundLevel1.y = -2732; } }; // Function to handle game updates game.update = function () { // Reuse off-screen stones or spawn new ones if necessary if (level === 4 && !LK.gameOver && LK.ticks % 50 == 0) { var newStone; for (var i = 0; i < spheres.length; i++) { if ((spheres[i] instanceof Stone || spheres[i] instanceof StoneCircle || spheres[i] instanceof StoneSquare) && spheres[i].y < -200) { newStone = spheres[i]; break; } } if (!newStone) { var randomType = Math.floor(Math.random() * 3); if (randomType === 0) { newStone = new Stone(); } else if (randomType === 1) { newStone = new StoneCircle(); } else { newStone = new StoneSquare(); } spheres.push(newStone); game.addChild(newStone); } newStone.x = Math.random() * (2048 - newStone.width) + newStone.width / 2; newStone.y = 2732; var randomScaleX = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0 for width var randomScaleY = 0.5 + Math.random() * 2.0; // Random scale between 0.5 and 2.5 for height newStone.scaleX = randomScaleX; newStone.scaleY = randomScaleY; } // Check for collisions between fireballs and Sharpisland for (var i = fireballs.length - 1; i >= 0; i--) { if (fireballs[i].y > 2732) { fireballs[i].destroy(); fireballs.splice(i, 1); continue; } for (var j = spheres.length - 1; j >= 0; j--) { if (fireballs[i].intersects(spheres[j]) && spheres[j] instanceof Sharpisland) { // Award points based on the size of the Sharpisland score += spheres[j].points; // Create explosion effect var explosion = LK.getAsset('explosion', { anchorX: 0.5, anchorY: 0.5, x: spheres[j].x, y: spheres[j].y }); game.addChild(explosion); tween(explosion, { alpha: 0 }, { duration: 500, onFinish: function onFinish() { explosion.destroy(); } }); // Remove the fireball and the object from the game fireballs[i].destroy(); fireballs.splice(i, 1); spheres[j].destroy(); spheres.splice(j, 1); break; } } } // Check for collisions between dragon and Sharpisland for (var j = spheres.length - 1; j >= 0; j--) { if (dragon.intersects(spheres[j]) && spheres[j] instanceof Sharpisland) { // Adjust collision range to match dragon's size spheres[j].width = dragon.width * 0.8; // Set Sharpisland width to 80% of dragon's width spheres[j].height = dragon.height * 0.8; // Set Sharpisland height to 80% of dragon's height // Decrease the dragon's health healthBar.currentHealth -= 20; // Consistent damage taken by the dragon from all objects in level 1 // Remove the Sharpisland from the game spheres[j].destroy(); spheres.splice(j, 1); break; } } // Check for collisions between fireballs and stones for (var i = fireballs.length - 1; i >= 0; i--) { if (fireballs[i].y > 2732) { fireballs[i].destroy(); fireballs.splice(i, 1); continue; } for (var j = spheres.length - 1; j >= 0; j--) { if (fireballs[i].intersects(spheres[j]) && spheres[j] instanceof Stone) { // Add random points from 0-40 when the dragon shoots the stones var points = Math.floor(Math.random() * 41); score += points; // Remove the fireball and the object from the game fireballs[i].destroy(); fireballs.splice(i, 1); spheres[j].destroy(); spheres.splice(j, 1); break; } } } // Check for collisions between dragon and stones for (var j = spheres.length - 1; j >= 0; j--) { if (dragon.intersects(spheres[j]) && spheres[j] instanceof Stone) { // Decrease the dragon's health healthBar.currentHealth -= 20; // Consistent damage taken by the dragon from all objects in level 4 // Remove the stone from the game spheres[j].destroy(); spheres.splice(j, 1); break; } } if (!LK.gameOver && dragNode && dragNode.global) { dragNode.x = game.toLocal(dragNode.global).x; } // Check for collisions between fireballs and Lavarocks for (var i = fireballs.length - 1; i >= 0; i--) { if (fireballs[i].y > 2732) { fireballs[i].destroy(); fireballs.splice(i, 1); continue; } for (var j = spheres.length - 1; j >= 0; j--) { if (fireballs[i].intersects(spheres[j]) && (spheres[j] instanceof Lavarocks || spheres[j] instanceof Lavarocks1 || spheres[j] instanceof Lavarocks2)) { // Add random points from 0-40 when the dragon shoots the Lavarocks var points = Math.floor(Math.random() * 41); score += points; // Remove the fireball and the object from the game fireballs[i].destroy(); fireballs.splice(i, 1); spheres[j].destroy(); spheres.splice(j, 1); break; } } } // Check for collisions between dragon and rocks for (var j = spheres.length - 1; j >= 0; j--) { if (dragon.intersects(spheres[j]) && (spheres[j] instanceof Lavarocks || spheres[j] instanceof Lavarocks1 || spheres[j] instanceof Lavarocks2)) { // Decrease the dragon's health healthBar.currentHealth -= 20; // Consistent damage taken by the dragon from all objects in level 1 // Remove the rock from the game spheres[j].destroy(); spheres.splice(j, 1); break; } // Decrease dragon's health if any object passes the top of the screen if (spheres[j].y < -200) { healthBar.currentHealth -= 10; // Decrease health by 10 for each object spheres[j].destroy(); spheres.splice(j, 1); } // Reuse off-screen lavarocks or spawn new ones if necessary } // Update the score display when the dragon gets points scoreTxt.setText('Score: ' + score); // Check if health bar reaches 0 to trigger game over if (healthBar.currentHealth <= 0 && !LK.gameOver) { LK.effects.flashScreen(0xff0000, 1000); // Flash screen red for 1 second LK.showGameOver(); // Show game over screen } // Regenerate player's health to max when score reaches 1000 if (score >= 1000) { healthBar.currentHealth = healthBar.maxHealth; } // Transition to the next level every 100 score if (score >= 100 * level && level < 4) { level++; levelTxt.setText('Level: ' + level); levelTxtOrange.setText('Level: ' + level); showLevelTextOnce(); // Hide all backgrounds backgroundLevel1.visible = false; backgroundLevel2.visible = false; backgroundLevel3.visible = false; backgroundLevel4.visible = false; // Show the current level background if (level === 2) { backgroundLevel2.visible = true; var newLavarocks = new Lavarocks(); spheres.push(newLavarocks); game.addChild(newLavarocks); newLavarocks.x = Math.random() * (2048 - newLavarocks.width) + newLavarocks.width / 2; newLavarocks.y = -100; } else if (level === 3) { backgroundLevel3.visible = true; var newIcerocks = new Icerocks(); spheres.push(newIcerocks); game.addChild(newIcerocks); newIcerocks.x = Math.random() * (2048 - newIcerocks.width) + newIcerocks.width / 2; newIcerocks.y = -100; } else if (level === 4) { backgroundLevel4.visible = true; var newStone = new Stone(); spheres.push(newStone); game.addChild(newStone); newStone.x = Math.random() * (2048 - newStone.width) + newStone.width / 2; newStone.y = -100; } } // Respawn Lavarocks, Lavarocks1, and Lavarocks2 randomly in level 2 if (level === 2 && !LK.gameOver && LK.ticks % 50 == 0) { var newLavarock; for (var i = 0; i < spheres.length; i++) { if ((spheres[i] instanceof Lavarocks || spheres[i] instanceof Lavarocks1 || spheres[i] instanceof Lavarocks2) && spheres[i].y < -200) { newLavarock = spheres[i]; break; } } if (!newLavarock) { var randomType = Math.floor(Math.random() * 3); if (randomType === 0) { newLavarock = new Lavarocks(); } else if (randomType === 1) { newLavarock = new Lavarocks1(); } else { newLavarock = new Lavarocks2(); } spheres.push(newLavarock); game.addChild(newLavarock); } newLavarock.x = Math.random() * (2048 - newLavarock.width) + newLavarock.width / 2; newLavarock.y = 2732; var randomScale = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0 newLavarock.scaleX = randomScale; newLavarock.scaleY = randomScale; } // Respawn Icerocks randomly in level 3 if (level === 3 && !LK.gameOver && LK.ticks % 50 == 0) { var newIcerock; for (var i = 0; i < spheres.length; i++) { if (spheres[i] instanceof Icerocks && spheres[i].y < -200) { newIcerock = spheres[i]; break; } } if (!newIcerock) { newIcerock = new Icerocks(); spheres.push(newIcerock); game.addChild(newIcerock); } newIcerock.x = Math.random() * (2048 - newIcerock.width) + newIcerock.width / 2; newIcerock.y = 2732; var randomScale = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0 newIcerock.scaleX = randomScale; newIcerock.scaleY = randomScale; } }; // Initialize dragon dragon = game.addChild(new Dragon()); dragon.x = 2048 / 2; dragon.y = 200; // Initialize start text var startTxt = new Text2('Start', { size: 150, fill: 0xffa500, // Orange color font: "'Time new roman',Impact,'Arial Black',Tahoma" }); startTxt.anchor.set(0.5, 0.5); LK.gui.center.addChild(startTxt); // Function to show start text with alternating colors function showStartText() { startTxt.visible = true; LK.setTimeout(function () { startTxt.visible = false; showLevelTextTwice(); // Show level status text before start text }, 2000); } // Initialize level display var levelTxt = new Text2('Level: 1', { size: 100, fill: 0x800080, // Purple color font: "'Time new roman',Impact,'Arial Black',Tahoma" }); levelTxt.anchor.set(1, 1); LK.gui.bottomRight.addChild(levelTxt); levelTxt.x = -50; // Move the level text to the right side of the screen levelTxt.y = -50; // Position the level text at the bottom of the screen // Call the function to show start text at the beginning of the game showStartText(); // Initialize second level display in orange var levelTxtOrange = new Text2('Level: ' + level, { size: 100, fill: 0xffff00, // Yellow color font: "'Time new roman',Impact,'Arial Black',Tahoma" }); levelTxtOrange.anchor.set(0.5, 0.5); LK.gui.center.addChild(levelTxtOrange); levelTxtOrange.visible = false; // Initially hidden // Function to show the orange level text twice function showLevelTextOnce() { levelTxtOrange.fill = 0xffff00; // Yellow color levelTxtOrange.visible = true; tween(levelTxtOrange, { alpha: 0 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(levelTxtOrange, { alpha: 1 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(levelTxtOrange, { alpha: 0 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { tween(levelTxtOrange, { alpha: 1 }, { duration: 500, easing: tween.easeInOut, onFinish: function onFinish() { levelTxtOrange.visible = false; // Start respawning objects after the text has disappeared startRespawningObjects(); } }); } }); } }); } }); } // Initialize score display scoreTxt = new Text2('Score: 0', { size: 100, fill: 0x800080, // Purple color font: "'Time new roman',Impact,'Arial Black',Tahoma" }); LK.gui.top.addChild(scoreTxt); scoreTxt.anchor.set(0, 0); // Sets anchor to the left of the top edge of the text. scoreTxt.x = 50; // Position the score text a little bit to the right scoreTxt.y = levelTxt.y - scoreTxt.height - 100; // Position the score text 100 pixels above the level text // Initialize health bar var healthBar = game.addChild(new HealthBar()); healthBar.x = 2000 / 2 - healthBar.width / 2 + 100; // Move health bar to the right a little bit healthBar.y = 2710 - healthBar.height / 2; // Move health bar to the middle of the bottom side scoreTxt.anchor.set(0, 1); LK.gui.bottomLeft.addChild(scoreTxt); scoreTxt.x = 50; // Position the score text a little bit to the right scoreTxt.y = -50; // Position the score text above the health bar // Handle touch input for dragging the dragon var dragNode = null; game.down = function (x, y, obj) { dragNode = dragon; }; game.up = function (x, y, obj) { dragNode = null; }; game.move = function (x, y, obj) { // Make the dragon follow the mouse cursor var newX = Math.max(dragon.width / 2, Math.min(2048 - dragon.width / 2, x)); var newY = Math.max(dragon.height / 2, Math.min(2732 - dragon.height / 2, y)); dragon.x = newX; dragon.y = newY; // Shoot a fireball at regular intervals if (LK.ticks % 10 == 0) { // Reduce the interval for shooting fireballs for (var i = 0; i < 1; i++) { var assetId; if (level === 2) { assetId = 'Shout2'; } else if (level === 3) { assetId = 'Shout3'; } else if (level === 4) { assetId = 'Shout4'; } else { assetId = 'Shout1'; } var fireball = new Fireball(assetId); fireball.x = dragon.x; fireball.y = dragon.y; fireballs.push(fireball); game.addChild(fireball); } } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
// Dragon class to represent the player character
var Dragon = Container.expand(function () {
var self = Container.call(this);
var dragonGraphics = self.attachAsset('dragon', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 2.0,
scaleY: 2.0,
smooth: true,
filterQuality: 2
});
self.speed = 20; // Further increase the speed of the dragon
self.update = function () {
// Update logic for the dragon to flip based on movement direction
if (self.x < 2048 / 2) {
dragonGraphics.scaleX = -1; // Flip horizontally when on the left side of the screen
} else {
dragonGraphics.scaleX = 1; // Normal orientation when on the right side of the screen
}
// Removed unnecessary variable to optimize performance
};
});
// Fireball class to represent the fireballs that the dragon shoots
var Fireball = Container.expand(function (assetId) {
var self = Container.call(this);
var fireballGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.6,
scaleY: 0.9,
smooth: true,
filterQuality: 1
});
self.speed = 40; // Increase the speed of the fireballs
self.update = function () {
self.y += self.speed;
};
});
// HealthBar class to represent the player's health
var HealthBar = Container.expand(function () {
var self = Container.call(this);
var healthBarGraphics = self.attachAsset('healthBar', {
anchorX: 0.0,
anchorY: 0.0,
scaleX: 2530 / 1000,
// Scale to fit the game width
scaleY: 0.1
});
self.maxHealth = 1000;
self.currentHealth = self.maxHealth;
self.update = function () {
healthBarGraphics.scaleX = self.currentHealth / self.maxHealth;
healthBarGraphics.scaleY = 0.05; // Resize the health bar to fit the top of the screen
};
});
var Icerocks = Container.expand(function () {
var self = Container.call(this);
var icerocksGraphics = self.attachAsset('Icerocks', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: level === 3 ? 1.5 : 1.0,
scaleY: level === 3 ? 1.5 : 1.0,
smooth: true,
filterQuality: 1
});
self.speed = level === 3 ? 10 : 5; // Increase speed for level 3
self.update = function () {
// Move the icerocks upwards
self.y -= self.speed;
};
});
var Lavarocks = Container.expand(function () {
var self = Container.call(this);
var lavarocksGraphics = self.attachAsset('Lavarocks', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: level === 2 ? 1.5 : 1.0,
scaleY: level === 2 ? 1.5 : 1.0,
smooth: true,
filterQuality: 1
});
self.speed = level === 2 ? 10 : 5; // Increase speed for level 2
self.update = function () {
// Move the lavarocks upwards
self.y -= self.speed;
};
});
var Lavarocks1 = Container.expand(function () {
var self = Container.call(this);
var lavarocks1Graphics = self.attachAsset('Lavarocks1', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: level === 2 ? 1.5 : 1.0,
scaleY: level === 2 ? 1.5 : 1.0,
smooth: true,
filterQuality: 1
});
self.speed = level === 2 ? 10 : 5; // Increase speed for level 2
self.update = function () {
// Move the lavarocks1 upwards
self.y += self.speed;
};
});
var Lavarocks2 = Container.expand(function () {
var self = Container.call(this);
var lavarocks2Graphics = self.attachAsset('Lavarocks2', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: level === 2 ? 1.5 : 1.0,
scaleY: level === 2 ? 1.5 : 1.0,
smooth: true,
filterQuality: 1
});
self.speed = level === 2 ? 10 : 5; // Increase speed for level 2
self.update = function () {
// Move the lavarocks2 upwards
self.y -= self.speed;
};
});
var Sharpisland = Container.expand(function (size) {
var self = Container.call(this);
var assetId;
switch (size) {
case 'small':
assetId = 'SharpislandSmall';
self.points = 15;
break;
case 'medium':
assetId = 'SharpislandMedium';
self.points = 25;
break;
case 'big':
assetId = 'SharpislandBig';
self.points = 35;
break;
case 'tall':
assetId = 'SharpislandTall';
self.points = 35;
break;
default:
assetId = 'SharpislandMedium';
self.points = 25;
}
var sharpislandGraphics = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 1.0,
scaleY: 1.0,
smooth: true,
filterQuality: 1
});
self.speed = 5; // Set speed for Sharpisland objects
self.update = function () {
self.y -= self.speed; // Move the Sharpisland upwards from the bottom
if (self.y < -self.height) {
self.y = 2732; // Reset position to the bottom when it goes off-screen
self.x = Math.random() * (2048 - self.width) + self.width / 2; // Randomize x position
}
// Adjust collision range to match dragon's size
self.width = dragon.width * 0.8; // Set Sharpisland width to 80% of dragon's width
self.height = dragon.height * 0.8; // Set Sharpisland height to 80% of dragon's height
};
});
var Stone = Container.expand(function () {
var self = Container.call(this);
var stoneGraphics = self.attachAsset('Stone', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.5,
scaleY: 0.5,
smooth: true,
filterQuality: 1
});
self.speed = 10; // Increase speed for Stone objects
self.update = function () {
// Move the stones upwards
self.y -= self.speed;
};
});
var StoneCircle = Container.expand(function () {
var self = Container.call(this);
var stoneCircleGraphics = self.attachAsset('StoneCircle', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.5,
scaleY: 0.5,
smooth: true,
filterQuality: 1
});
self.speed = 10; // Increase speed for StoneCircle objects
self.update = function () {
// Move the stones upwards
self.y -= self.speed;
};
});
var StoneSquare = Container.expand(function () {
var self = Container.call(this);
var stoneSquareGraphics = self.attachAsset('StoneSquare', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.5,
scaleY: 0.5,
smooth: true,
filterQuality: 1
});
self.speed = 10; // Increase speed for StoneSquare objects
self.update = function () {
// Move the stones upwards
self.y -= self.speed;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000,
//Init game with black background
height: 3000 // Increase the game screen height
});
/****
* Game Code
****/
// or via static code analysis based on their usage in the code.
function startRespawningObjects() {
// Logic to start respawning objects based on the current level
if (level === 1) {
// Respawn Sharpisland randomly in level 1
if (!LK.gameOver && LK.ticks % 50 == 0) {
var newSharpisland;
for (var i = 0; i < spheres.length; i++) {
if (spheres[i] instanceof Sharpisland && spheres[i].y < -200) {
newSharpisland = spheres[i];
break;
}
}
if (!newSharpisland) {
newSharpisland = new Sharpisland();
spheres.push(newSharpisland);
game.addChild(newSharpisland);
}
newSharpisland.x = Math.random() * (2048 - newSharpisland.width) + newSharpisland.width / 2;
newSharpisland.y = 2732; // Start from the bottom
var randomScale = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0
newSharpisland.scaleX = randomScale;
newSharpisland.scaleY = randomScale;
newSharpisland.visible = true; // Ensure Sharpisland is visible
}
} else if (level === 2) {
// Respawn Lavarocks, Lavarocks1, and Lavarocks2 randomly in level 2
if (!LK.gameOver && LK.ticks % 50 == 0) {
var newLavarock;
for (var i = 0; i < spheres.length; i++) {
if ((spheres[i] instanceof Lavarocks || spheres[i] instanceof Lavarocks1 || spheres[i] instanceof Lavarocks2) && spheres[i].y < -200) {
newLavarock = spheres[i];
break;
}
}
if (!newLavarock) {
var randomType = Math.floor(Math.random() * 3);
if (randomType === 0) {
newLavarock = new Lavarocks();
} else if (randomType === 1) {
newLavarock = new Lavarocks1();
} else {
newLavarock = new Lavarocks2();
}
spheres.push(newLavarock);
game.addChild(newLavarock);
}
newLavarock.x = Math.random() * (2048 - newLavarock.width) + newLavarock.width / 2;
newLavarock.y = 2732;
var randomScale = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0
newLavarock.scaleX = randomScale;
newLavarock.scaleY = randomScale;
}
} else if (level === 3) {
// Respawn Icerocks randomly in level 3
if (!LK.gameOver && LK.ticks % 50 == 0) {
var newIcerock;
for (var i = 0; i < spheres.length; i++) {
if (spheres[i] instanceof Icerocks && spheres[i].y < -200) {
newIcerock = spheres[i];
break;
}
}
if (!newIcerock) {
newIcerock = new Icerocks();
spheres.push(newIcerock);
game.addChild(newIcerock);
}
newIcerock.x = Math.random() * (2048 - newIcerock.width) + newIcerock.width / 2;
newIcerock.y = 2732;
var randomScaleX = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0 for width
var randomScaleY = 0.5 + Math.random() * 2.5; // Random scale between 0.5 and 2.5 for height
newIcerock.scaleX = randomScaleX;
newIcerock.scaleY = randomScaleY;
}
}
}
// Function to show the level text twice
function showLevelTextTwice() {
levelTxtOrange.fill = 0x0000ff; // Blue color
levelTxtOrange.visible = true;
LK.setTimeout(function () {
levelTxtOrange.visible = false;
LK.setTimeout(function () {
levelTxtOrange.visible = true;
LK.setTimeout(function () {
levelTxtOrange.visible = false;
// Start respawning objects after the text has shown and hidden for the last time
startRespawningObjects();
}, 500);
}, 500);
}, 500);
}
// Add background image for level 4
var backgroundLevel4 = LK.getAsset('Stone_lands', {
anchorX: 0.0,
anchorY: 0.0
});
backgroundLevel4.smooth = true;
backgroundLevel4.filterQuality = 0; // Further increase the filter quality for better clarity
backgroundLevel4.scale.set(2048 / 800, 2732 / 800);
backgroundLevel4.smooth = true; // Enable smoothing to remove pixelation
backgroundLevel4.filterQuality = 0; // Adjust filter quality for better clarity
backgroundLevel4.visible = false; // Initially hidden
game.addChild(backgroundLevel4);
// Add Sharpisland to the game screen
var sharpisland = new Sharpisland();
game.addChild(sharpisland);
sharpisland.x = Math.random() * (2048 - sharpisland.width) + sharpisland.width / 2;
sharpisland.y = 2732; // Start from the bottom
// Initialize game variables
var dragon;
var spheres = [];
var fireballs = []; // Initialize fireballs array
var score = 0; // Initialize score to 0
var scoreTxt;
var level = 1; // Initialize level to 1
// Add background image to the game for level 1
var backgroundLevel1 = LK.getAsset('Green_lands', {
anchorX: 0.0,
anchorY: 0.0
});
backgroundLevel1.smooth = true; // Enable smoothing to remove pixelation
backgroundLevel1.filterQuality = 0; // Adjust filter quality for better clarity
backgroundLevel1.scale.set(2048 / 800, 2732 / 800); // Scale the background to fit the screen
backgroundLevel1.smooth = true; // Enable smoothing to remove pixelation
backgroundLevel1.filterQuality = 0; // Further increase the filter quality for better clarity
backgroundLevel1.visible = true; // Initially visible
game.addChildAt(backgroundLevel1, 0); // Add background at the lowest layer
// Add background image for level 2
var backgroundLevel2 = LK.getAsset('Lava_lands', {
anchorX: 0.0,
anchorY: 0.0
});
backgroundLevel2.smooth = true;
backgroundLevel2.filterQuality = 0; // Further increase the filter quality for better clarity
backgroundLevel2.scale.set(2048 / 800, 2732 / 800);
backgroundLevel2.smooth = true; // Enable smoothing to remove pixelation
backgroundLevel2.filterQuality = 2; // Increase filter quality for better clarity
backgroundLevel2.visible = false; // Initially hidden
game.addChild(backgroundLevel2);
// Add background image for level 3
var backgroundLevel3 = LK.getAsset('Ice_lands', {
anchorX: 0.0,
anchorY: 0.0
});
backgroundLevel3.smooth = true;
backgroundLevel3.filterQuality = 0; // Further increase the filter quality for better clarity
backgroundLevel3.scale.set(2048 / 800, 2732 / 800);
backgroundLevel3.smooth = true; // Enable smoothing to remove pixelation
backgroundLevel3.filterQuality = 0; // Adjust filter quality for better clarity
backgroundLevel3.visible = false; // Initially hidden
game.addChild(backgroundLevel3);
// Refresh the background to be clearer & fit to screen every 60 ticks
game.update = function () {
backgroundLevel1.x = 2048 / 2; // Center the background horizontally
backgroundLevel1.y = 2732 / 2; // Center the background vertically
if (backgroundLevel1.y >= 2732) {
backgroundLevel1.y = -2732;
}
};
// Function to handle game updates
game.update = function () {
// Reuse off-screen stones or spawn new ones if necessary
if (level === 4 && !LK.gameOver && LK.ticks % 50 == 0) {
var newStone;
for (var i = 0; i < spheres.length; i++) {
if ((spheres[i] instanceof Stone || spheres[i] instanceof StoneCircle || spheres[i] instanceof StoneSquare) && spheres[i].y < -200) {
newStone = spheres[i];
break;
}
}
if (!newStone) {
var randomType = Math.floor(Math.random() * 3);
if (randomType === 0) {
newStone = new Stone();
} else if (randomType === 1) {
newStone = new StoneCircle();
} else {
newStone = new StoneSquare();
}
spheres.push(newStone);
game.addChild(newStone);
}
newStone.x = Math.random() * (2048 - newStone.width) + newStone.width / 2;
newStone.y = 2732;
var randomScaleX = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0 for width
var randomScaleY = 0.5 + Math.random() * 2.0; // Random scale between 0.5 and 2.5 for height
newStone.scaleX = randomScaleX;
newStone.scaleY = randomScaleY;
}
// Check for collisions between fireballs and Sharpisland
for (var i = fireballs.length - 1; i >= 0; i--) {
if (fireballs[i].y > 2732) {
fireballs[i].destroy();
fireballs.splice(i, 1);
continue;
}
for (var j = spheres.length - 1; j >= 0; j--) {
if (fireballs[i].intersects(spheres[j]) && spheres[j] instanceof Sharpisland) {
// Award points based on the size of the Sharpisland
score += spheres[j].points;
// Create explosion effect
var explosion = LK.getAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5,
x: spheres[j].x,
y: spheres[j].y
});
game.addChild(explosion);
tween(explosion, {
alpha: 0
}, {
duration: 500,
onFinish: function onFinish() {
explosion.destroy();
}
});
// Remove the fireball and the object from the game
fireballs[i].destroy();
fireballs.splice(i, 1);
spheres[j].destroy();
spheres.splice(j, 1);
break;
}
}
}
// Check for collisions between dragon and Sharpisland
for (var j = spheres.length - 1; j >= 0; j--) {
if (dragon.intersects(spheres[j]) && spheres[j] instanceof Sharpisland) {
// Adjust collision range to match dragon's size
spheres[j].width = dragon.width * 0.8; // Set Sharpisland width to 80% of dragon's width
spheres[j].height = dragon.height * 0.8; // Set Sharpisland height to 80% of dragon's height
// Decrease the dragon's health
healthBar.currentHealth -= 20; // Consistent damage taken by the dragon from all objects in level 1
// Remove the Sharpisland from the game
spheres[j].destroy();
spheres.splice(j, 1);
break;
}
}
// Check for collisions between fireballs and stones
for (var i = fireballs.length - 1; i >= 0; i--) {
if (fireballs[i].y > 2732) {
fireballs[i].destroy();
fireballs.splice(i, 1);
continue;
}
for (var j = spheres.length - 1; j >= 0; j--) {
if (fireballs[i].intersects(spheres[j]) && spheres[j] instanceof Stone) {
// Add random points from 0-40 when the dragon shoots the stones
var points = Math.floor(Math.random() * 41);
score += points;
// Remove the fireball and the object from the game
fireballs[i].destroy();
fireballs.splice(i, 1);
spheres[j].destroy();
spheres.splice(j, 1);
break;
}
}
}
// Check for collisions between dragon and stones
for (var j = spheres.length - 1; j >= 0; j--) {
if (dragon.intersects(spheres[j]) && spheres[j] instanceof Stone) {
// Decrease the dragon's health
healthBar.currentHealth -= 20; // Consistent damage taken by the dragon from all objects in level 4
// Remove the stone from the game
spheres[j].destroy();
spheres.splice(j, 1);
break;
}
}
if (!LK.gameOver && dragNode && dragNode.global) {
dragNode.x = game.toLocal(dragNode.global).x;
}
// Check for collisions between fireballs and Lavarocks
for (var i = fireballs.length - 1; i >= 0; i--) {
if (fireballs[i].y > 2732) {
fireballs[i].destroy();
fireballs.splice(i, 1);
continue;
}
for (var j = spheres.length - 1; j >= 0; j--) {
if (fireballs[i].intersects(spheres[j]) && (spheres[j] instanceof Lavarocks || spheres[j] instanceof Lavarocks1 || spheres[j] instanceof Lavarocks2)) {
// Add random points from 0-40 when the dragon shoots the Lavarocks
var points = Math.floor(Math.random() * 41);
score += points;
// Remove the fireball and the object from the game
fireballs[i].destroy();
fireballs.splice(i, 1);
spheres[j].destroy();
spheres.splice(j, 1);
break;
}
}
}
// Check for collisions between dragon and rocks
for (var j = spheres.length - 1; j >= 0; j--) {
if (dragon.intersects(spheres[j]) && (spheres[j] instanceof Lavarocks || spheres[j] instanceof Lavarocks1 || spheres[j] instanceof Lavarocks2)) {
// Decrease the dragon's health
healthBar.currentHealth -= 20; // Consistent damage taken by the dragon from all objects in level 1
// Remove the rock from the game
spheres[j].destroy();
spheres.splice(j, 1);
break;
}
// Decrease dragon's health if any object passes the top of the screen
if (spheres[j].y < -200) {
healthBar.currentHealth -= 10; // Decrease health by 10 for each object
spheres[j].destroy();
spheres.splice(j, 1);
}
// Reuse off-screen lavarocks or spawn new ones if necessary
}
// Update the score display when the dragon gets points
scoreTxt.setText('Score: ' + score);
// Check if health bar reaches 0 to trigger game over
if (healthBar.currentHealth <= 0 && !LK.gameOver) {
LK.effects.flashScreen(0xff0000, 1000); // Flash screen red for 1 second
LK.showGameOver(); // Show game over screen
}
// Regenerate player's health to max when score reaches 1000
if (score >= 1000) {
healthBar.currentHealth = healthBar.maxHealth;
}
// Transition to the next level every 100 score
if (score >= 100 * level && level < 4) {
level++;
levelTxt.setText('Level: ' + level);
levelTxtOrange.setText('Level: ' + level);
showLevelTextOnce();
// Hide all backgrounds
backgroundLevel1.visible = false;
backgroundLevel2.visible = false;
backgroundLevel3.visible = false;
backgroundLevel4.visible = false;
// Show the current level background
if (level === 2) {
backgroundLevel2.visible = true;
var newLavarocks = new Lavarocks();
spheres.push(newLavarocks);
game.addChild(newLavarocks);
newLavarocks.x = Math.random() * (2048 - newLavarocks.width) + newLavarocks.width / 2;
newLavarocks.y = -100;
} else if (level === 3) {
backgroundLevel3.visible = true;
var newIcerocks = new Icerocks();
spheres.push(newIcerocks);
game.addChild(newIcerocks);
newIcerocks.x = Math.random() * (2048 - newIcerocks.width) + newIcerocks.width / 2;
newIcerocks.y = -100;
} else if (level === 4) {
backgroundLevel4.visible = true;
var newStone = new Stone();
spheres.push(newStone);
game.addChild(newStone);
newStone.x = Math.random() * (2048 - newStone.width) + newStone.width / 2;
newStone.y = -100;
}
}
// Respawn Lavarocks, Lavarocks1, and Lavarocks2 randomly in level 2
if (level === 2 && !LK.gameOver && LK.ticks % 50 == 0) {
var newLavarock;
for (var i = 0; i < spheres.length; i++) {
if ((spheres[i] instanceof Lavarocks || spheres[i] instanceof Lavarocks1 || spheres[i] instanceof Lavarocks2) && spheres[i].y < -200) {
newLavarock = spheres[i];
break;
}
}
if (!newLavarock) {
var randomType = Math.floor(Math.random() * 3);
if (randomType === 0) {
newLavarock = new Lavarocks();
} else if (randomType === 1) {
newLavarock = new Lavarocks1();
} else {
newLavarock = new Lavarocks2();
}
spheres.push(newLavarock);
game.addChild(newLavarock);
}
newLavarock.x = Math.random() * (2048 - newLavarock.width) + newLavarock.width / 2;
newLavarock.y = 2732;
var randomScale = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0
newLavarock.scaleX = randomScale;
newLavarock.scaleY = randomScale;
}
// Respawn Icerocks randomly in level 3
if (level === 3 && !LK.gameOver && LK.ticks % 50 == 0) {
var newIcerock;
for (var i = 0; i < spheres.length; i++) {
if (spheres[i] instanceof Icerocks && spheres[i].y < -200) {
newIcerock = spheres[i];
break;
}
}
if (!newIcerock) {
newIcerock = new Icerocks();
spheres.push(newIcerock);
game.addChild(newIcerock);
}
newIcerock.x = Math.random() * (2048 - newIcerock.width) + newIcerock.width / 2;
newIcerock.y = 2732;
var randomScale = 0.5 + Math.random() * 1.5; // Random scale between 0.5 and 2.0
newIcerock.scaleX = randomScale;
newIcerock.scaleY = randomScale;
}
};
// Initialize dragon
dragon = game.addChild(new Dragon());
dragon.x = 2048 / 2;
dragon.y = 200;
// Initialize start text
var startTxt = new Text2('Start', {
size: 150,
fill: 0xffa500,
// Orange color
font: "'Time new roman',Impact,'Arial Black',Tahoma"
});
startTxt.anchor.set(0.5, 0.5);
LK.gui.center.addChild(startTxt);
// Function to show start text with alternating colors
function showStartText() {
startTxt.visible = true;
LK.setTimeout(function () {
startTxt.visible = false;
showLevelTextTwice(); // Show level status text before start text
}, 2000);
}
// Initialize level display
var levelTxt = new Text2('Level: 1', {
size: 100,
fill: 0x800080,
// Purple color
font: "'Time new roman',Impact,'Arial Black',Tahoma"
});
levelTxt.anchor.set(1, 1);
LK.gui.bottomRight.addChild(levelTxt);
levelTxt.x = -50; // Move the level text to the right side of the screen
levelTxt.y = -50; // Position the level text at the bottom of the screen
// Call the function to show start text at the beginning of the game
showStartText();
// Initialize second level display in orange
var levelTxtOrange = new Text2('Level: ' + level, {
size: 100,
fill: 0xffff00,
// Yellow color
font: "'Time new roman',Impact,'Arial Black',Tahoma"
});
levelTxtOrange.anchor.set(0.5, 0.5);
LK.gui.center.addChild(levelTxtOrange);
levelTxtOrange.visible = false; // Initially hidden
// Function to show the orange level text twice
function showLevelTextOnce() {
levelTxtOrange.fill = 0xffff00; // Yellow color
levelTxtOrange.visible = true;
tween(levelTxtOrange, {
alpha: 0
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(levelTxtOrange, {
alpha: 1
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(levelTxtOrange, {
alpha: 0
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(levelTxtOrange, {
alpha: 1
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
levelTxtOrange.visible = false;
// Start respawning objects after the text has disappeared
startRespawningObjects();
}
});
}
});
}
});
}
});
}
// Initialize score display
scoreTxt = new Text2('Score: 0', {
size: 100,
fill: 0x800080,
// Purple color
font: "'Time new roman',Impact,'Arial Black',Tahoma"
});
LK.gui.top.addChild(scoreTxt);
scoreTxt.anchor.set(0, 0); // Sets anchor to the left of the top edge of the text.
scoreTxt.x = 50; // Position the score text a little bit to the right
scoreTxt.y = levelTxt.y - scoreTxt.height - 100; // Position the score text 100 pixels above the level text
// Initialize health bar
var healthBar = game.addChild(new HealthBar());
healthBar.x = 2000 / 2 - healthBar.width / 2 + 100; // Move health bar to the right a little bit
healthBar.y = 2710 - healthBar.height / 2; // Move health bar to the middle of the bottom side
scoreTxt.anchor.set(0, 1);
LK.gui.bottomLeft.addChild(scoreTxt);
scoreTxt.x = 50; // Position the score text a little bit to the right
scoreTxt.y = -50; // Position the score text above the health bar
// Handle touch input for dragging the dragon
var dragNode = null;
game.down = function (x, y, obj) {
dragNode = dragon;
};
game.up = function (x, y, obj) {
dragNode = null;
};
game.move = function (x, y, obj) {
// Make the dragon follow the mouse cursor
var newX = Math.max(dragon.width / 2, Math.min(2048 - dragon.width / 2, x));
var newY = Math.max(dragon.height / 2, Math.min(2732 - dragon.height / 2, y));
dragon.x = newX;
dragon.y = newY;
// Shoot a fireball at regular intervals
if (LK.ticks % 10 == 0) {
// Reduce the interval for shooting fireballs
for (var i = 0; i < 1; i++) {
var assetId;
if (level === 2) {
assetId = 'Shout2';
} else if (level === 3) {
assetId = 'Shout3';
} else if (level === 4) {
assetId = 'Shout4';
} else {
assetId = 'Shout1';
}
var fireball = new Fireball(assetId);
fireball.x = dragon.x;
fireball.y = dragon.y;
fireballs.push(fireball);
game.addChild(fireball);
}
}
};