User prompt
Please fix the bug: 'Uncaught ReferenceError: SGTarget25 is not defined' in or related to this line: 'var sgTarget25 = game.addChild(new SGTarget25());' Line Number: 214
User prompt
add a 5% chance to spawn an sgtarget25 when bottle,beans,poster,barrel are destroyed
User prompt
var SGBeans01 = Container.expand(function () { var self = Container.call(this); var beansGraphics = self.attachAsset('sgBeans01', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (!this.clicked) { score += 1; scoreTxt.setText(score); this.clicked = true; } if (Math.random() > 0.5) { LK.getSound('canHit').play(); } else { LK.getSound('canHit02').play(); } var velocityX = Math.random() * 20 - 10; var velocityY = Math.random() * 10 + 5; var gravity = 0.5; var angularVelocity = Math.random() * 0.2 - 0.1; velocityY += gravity; this.update = function () { this.y += velocityY; this.x += velocityX; this.rotation += angularVelocity; if (this.y > 2732 || this.x < 0 || this.x > 2048) { this.destroy(); respawnSGBeans01(); } }; }; self.update = function () { // Do any additional update logic here }; game.update = self.update.bind(self); });
User prompt
To fix the code, update self.update = function() to self.update = () => { to ensure this retains the correct context. Replace game.update = self.update.bind(self); with game.update = self.update;. Ensure the game object and its properties (sgBeans01 and update) are correctly managed within the game's initialization and update loops.
User prompt
there can never be more than one sgbeans01 on screen fix it
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Uncaught ReferenceError: sgTarget5 is not defined' in or related to this line: 'sgTarget5.down = function (x, y, obj) {' Line Number: 869
User prompt
Please fix the bug: 'Uncaught ReferenceError: sgTarget5 is not defined' in or related to this line: 'sgTarget5.update = function () {' Line Number: 869
User prompt
SGTarget5 has three possible spawn locations, Position 1: x: 700 / 2, y: 2350 / 2 Position 2: x: 2050 / 2, y: 3300/ 2 Position 3: x: 2700/ 2, y: 2700/ 2 When SGTarget5 is destroyed, respawn one instance of SGTarget5 after 1 to 4 seconds to one of the three positions. There can only be one instance of SGTarget5 active.
User prompt
Please fix the bug: 'Uncaught ReferenceError: sgTarget10 is not defined' in or related to this line: 'sgTarget10.down = function (x, y, obj) {' Line Number: 875
User prompt
Please fix the bug: 'Uncaught ReferenceError: sgTarget10 is not defined' in or related to this line: 'sgTarget10.update = function () {' Line Number: 872
User prompt
SGTarget10 has three possible spawn locations, Position 1: x: 1625, Y:1350 Position 2: x: 525, y: 1765 Position 3: x: 995, y: 935 When SGTarget10 is destroyed, respawn one instance of SGTarget10 after 1 to 4 seconds to one of the three positions.
User prompt
ensure sgtarget10 respawns correctly after being destroyed
User prompt
ensure sgtarget10 respawns correctly
User prompt
SGTarget10 has three possible spawn locations, Position 1: x: 1625, Y:1350 Position 2: x: 525, y: 1765 Position 3: x: 995, y: 935 When SGTarget10 is destroyed, respawn one instance of SGTarget10 after 1 to 4 seconds to one of the three positions. There can only be one instance of SGTarget10 active.
User prompt
SGTarget10 has three possible spawn locations, Position 1: x: 1625, Y:1350 Position 2: x: 525, y: 1765 Position 3: x: 995, y: 935 When SGTarget10 is destroyed, respawn one instance of SGTarget10 after 1 to 4 seconds to one of the three positions. There can only be one instance of SGTarget10 active.
User prompt
make sure sgposter01 spawns behind sgbarman
User prompt
var SGBeans01 = Container.expand(function () { var self = Container.call(this); var beansGraphics = self.attachAsset('sgBeans01', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (!this.clicked) { score += 1; scoreTxt.setText(score); this.clicked = true; } if (Math.random() > 0.5) { LK.getSound('canHit').play(); } else { LK.getSound('canHit02').play(); } var velocityX = Math.random() * 20 - 10; var velocityY = Math.random() * 10 + 5; var gravity = 0.5; var angularVelocity = Math.random() * 0.2 - 0.1; this.update = function () { velocityY += gravity; this.y += velocityY; this.x += velocityX; this.rotation += angularVelocity; if (this.y > 2732 || this.x < 0 || this.x > 2048) { this.destroy(); // Only call respawn function once respawnSGBeans01(); } }; game.update = this.update.bind(this); }; }); // Ensure only one respawn is triggered var respawnTimeout = null; function respawnSGBeans01() { if (respawnTimeout) { return; } var respawnTime = Math.random() * 3000 + 1000; respawnTimeout = LK.setTimeout(function () { spawnSGBeans01(); respawnTimeout = null; // Reset the timeout tracker }, respawnTime); } function spawnSGBeans01() { var positions = [{ x: 2048 / 2 - 100, y: 2975 / 2 }, { x: 2048 / 2 - 400, y: 2975 / 2 + 125 }, { x: 2048 / 2 + 800, y: 2975 / 2 + 225 }]; var randomPosition = positions[Math.floor(Math.random() * positions.length)]; var sgBeans01 = game.addChild(new SGBeans01()); sgBeans01.x = randomPosition.x; sgBeans01.y = randomPosition.y; }
User prompt
Please fix the bug: 'Uncaught ReferenceError: sgBeans01 is not defined' in or related to this line: 'sgBeans01.down = function (x, y, obj) {' Line Number: 767
User prompt
SGBeans01 has three possible spawn locations, Position 1: x: 2048 / 2 - 100, y: 2975 / 2 Position 2: x: 2048 / 2 - 400, y: 2975 / 2 + 125 Position 3: x: 2048 / 2 + 800, y: 2975 / 2 + 225 When SGBeans01 is destroyed, respawn one instance of SGBeans01 after 1 to 4 seconds to one of the three positions. There can only be one instance of SGBeans01 active.
User prompt
remember to destroy sgbeans01 when it is outside of the playspace
User prompt
remember, when sgbeans01 is destroyed, respawn one instance of SGBeans01 after 1 to 4 seconds to one of the three positions.
User prompt
SGBeans01 has three possible spawn locations, Position 1: x: 2048 / 2 - 100, y: 2975 / 2 Position 2: x: 2048 / 2 - 400, y: 2975 / 2 + 125 Position 3: x: 2048 / 2 + 800, y: 2975 / 2 + 225 When SGBeans01 is destroyed, respawn one instance of SGBeans01 after 1 to 4 seconds to one of the three positions. Not all three.
User prompt
there can only be one instance of sgbeans01 on screen, after its destroyed it selects one of the three spawn positions not all three.
User prompt
there can only be one sgbeans01 on screen
/**** * Classes ****/ var Barman = Container.expand(function () { var self = Container.call(this); var barmanGraphics = self.attachAsset('sgBarman', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // Add any specific update logic for the barman here }; self.down = function (x, y, obj) { // Add any specific click logic for the barman here }; }); // Create a class for the sg_Notes asset var Note = Container.expand(function () { var self = Container.call(this); // Attach the sg_Notes asset to the Note instance var noteGraphics = self.attachAsset('sg_Notes', { anchorX: 0.5, anchorY: 0.5 }); // Set the initial speed of the note self.speed = 1.25; // This is automatically called every game tick, if the note is attached! self.update = function () { self.y -= self.speed; // Destroy the note if it goes off screen if (self.y < -50) { self.destroy(); } }; }); var Poster = Container.expand(function () { var self = Container.call(this); var posterGraphics = self.attachAsset('sgPoster01', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { if (self.y < -50) { self.destroy(); } }; self.down = function (x, y, obj) { if (!this.clicked) { score += 1; scoreTxt.setText(score); this.clicked = true; } if (Math.random() > 0.5) { LK.getSound('canHit').play(); } else { LK.getSound('canHit02').play(); } var velocityX = Math.random() * 20 - 10; var velocityY = Math.random() * 10 + 5; var gravity = 0.5; var angularVelocity = Math.random() * 0.2 - 0.1; this.update = function () { velocityY += gravity; this.y += velocityY; this.x += velocityX; this.rotation += angularVelocity; if (this.y > 2732 || this.x < 0 || this.x > 2048) { this.destroy(); } }; game.update = this.update.bind(this); }; }); var SGBarrel = Container.expand(function () { var self = Container.call(this); var barrelGraphics = self.attachAsset('sgBarrel', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { // Play barreltHit01 sound LK.getSound('barreltHit01').play(); // Add 1 to the score score += 1; scoreTxt.setText(score); // Destroy the sgBarrel asset this.destroy(); // Instantiate sgBrokenBarrel at the same position for 1 second var sgBrokenBarrel = game.addChild(LK.getAsset('sgBrokenBarrel', { anchorX: 0.5, anchorY: 0.5, x: this.x, y: this.y })); LK.setTimeout(function () { sgBrokenBarrel.destroy(); }, 1000); // Respawn the barrel after 1 to 4 seconds var respawnTime = Math.random() * 3000 + 1000; LK.setTimeout(spawnSGBarrel, respawnTime); }; }); var SGBeans01 = Container.expand(function () { var self = Container.call(this); var beansGraphics = self.attachAsset('sgBeans01', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (!this.clicked) { score += 1; scoreTxt.setText(score); this.clicked = true; } if (Math.random() > 0.5) { LK.getSound('canHit').play(); } else { LK.getSound('canHit02').play(); } var velocityX = Math.random() * 20 - 10; var velocityY = Math.random() * 10 + 5; var gravity = 0.5; var angularVelocity = Math.random() * 0.2 - 0.1; this.update = function () { velocityY += gravity; this.y += velocityY; this.x += velocityX; this.rotation += angularVelocity; if (this.y > 2732 || this.x < 0 || this.x > 2048) { this.destroy(); currentSGBeans01 = null; // Clear the current instance respawnSGBeans01(); } }; game.update = this.update.bind(this); }; }); var SGGlassBottle01 = Container.expand(function () { var self = Container.call(this); var bottleGraphics = self.attachAsset('sgGlassBottle01', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (Math.random() > 0.5) { LK.getSound('glassHit01').play(); } else { LK.getSound('glassHit02').play(); } this.destroy(); score += 1; scoreTxt.setText(score); var sgBrokenGlassBottle01 = game.addChild(LK.getAsset('sgBrokenGlassBottle01', { anchorX: 0.5, anchorY: 0.5, x: this.x, y: this.y })); LK.setTimeout(function () { sgBrokenGlassBottle01.destroy(); }, 500); respawnSGGlassBottle01(); }; }); var SGPoster = Container.expand(function () { var self = Container.call(this); var posterGraphics = self.attachAsset('sgPoster01', { anchorX: 0.5, anchorY: 0.5 }); self.down = function (x, y, obj) { if (!this.clicked) { score += 1; scoreTxt.setText(score); this.clicked = true; } if (Math.random() > 0.5) { LK.getSound('canHit').play(); } else { LK.getSound('canHit02').play(); } var velocityX = Math.random() * 20 - 10; var velocityY = Math.random() * 10 + 5; var gravity = 0.5; var angularVelocity = Math.random() * 0.2 - 0.1; this.update = function () { velocityY += gravity; this.y += velocityY; this.x += velocityX; this.rotation += angularVelocity; if (this.y > 2732 || this.x < 0 || this.x > 2048) { this.destroy(); respawnSGPoster(); } }; }; }); var Target25 = Container.expand(function () { var self = Container.call(this); var targetGraphics = self.attachAsset('sgTarget25', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { this.scale.x = Math.sin(LK.ticks * 0.1); }; self.down = function (x, y, obj) { LK.getSound('getSound01').play(); this.destroy(); score += 25; scoreTxt.setText(score); var number25 = new Text2('25', { size: 75, fill: "#FFD700" }); number25.x = this.x - 40; number25.y = this.y - 30; game.addChild(number25); var flashInterval = LK.setInterval(function () { number25.visible = !number25.visible; }, 100); LK.setTimeout(function () { LK.clearInterval(flashInterval); number25.visible = true; }, 1000); LK.setTimeout(function () { number25.destroy(); }, 1000); }; }); var Tumbleweed = Container.expand(function () { var self = Container.call(this); var tumbleweedGraphics = self.attachAsset('sgTumbleWeed', { anchorX: 0.5, anchorY: 0.4 }); self.speedX = 6; self.speedY = 0; self.rotationSpeed = 0.075; self.update = function () { self.x += self.speedX; self.rotation += self.rotationSpeed; if (self.x > 2048) { self.destroy(); } }; }); var sgTrainSmoke = Container.expand(function () { var self = Container.call(this); var smokeGraphics = self.attachAsset('sgTrainSmoke', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -1; self.update = function () { self.y += self.speed; }; LK.setTimeout(function () { self.destroy(); currentSmoke = null; }, 2000); }); /**** * Initialize Game ****/ //<Assets used in the game will automatically appear here> var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ var currentSGBeans01 = null; function spawnSGBeans01() { if (currentSGBeans01) { return; // If there's already an instance, do nothing } var positions = [{ x: 2048 / 2 - 100, y: 2975 / 2 }, { x: 2048 / 2 - 400, y: 2975 / 2 + 125 }, { x: 2048 / 2 + 800, y: 2975 / 2 + 225 }]; var randomPosition = positions[Math.floor(Math.random() * positions.length)]; currentSGBeans01 = game.addChild(new SGBeans01()); currentSGBeans01.x = randomPosition.x; currentSGBeans01.y = randomPosition.y; } function respawnSGBeans01() { var respawnTime = Math.random() * 3000 + 1000; LK.setTimeout(spawnSGBeans01, respawnTime); } function spawnSGGlassBottle01() { var positions = [{ x: 2848 / 2 - 100, y: 2732 / 2 + 105 }, { x: 2848 / 2 + 320, y: 2732 / 2 + 175 }, { x: 2848 / 2 - 920, y: 2732 / 2 + 225 }]; var randomPosition = positions[Math.floor(Math.random() * positions.length)]; var sgGlassBottle01 = game.addChild(new SGGlassBottle01()); sgGlassBottle01.x = randomPosition.x; sgGlassBottle01.y = randomPosition.y; } function respawnSGGlassBottle01() { var respawnTime = Math.random() * 3000 + 1000; LK.setTimeout(spawnSGGlassBottle01, respawnTime); } // Initialize the sgBackground01 asset on screen var sgBackground01 = game.addChild(LK.getAsset('sgBackground01', { anchorX: 0.5, anchorY: 0.5, x: 2025 / 2, y: 2725 / 2 })); var currentSmoke = null; // Initialize the sgTrain01 asset on screen var sgTrain01 = game.addChild(LK.getAsset('sgTrain01', { anchorX: 0.5, anchorY: 0.5, x: 125, y: 1910 })); // Add a flag to track if sgTrain01 has been clicked var sgTrain01Clicked = false; // Initialize the sgTrainWagon01 asset and parent it to sgTrain01 var sgTrainWagons = []; for (var i = 0; i < 8; i++) { var sgTrainWagon = sgTrain01.addChild(LK.getAsset('sgTrainWagon01', { anchorX: 0.5, anchorY: 0.5, x: sgTrain01.width / 2 - 300 - i * 220, // Adjust position for each wagon y: sgTrain01.height / 2 - 70 })); sgTrainWagons.push(sgTrainWagon); } // Add a click event to the sgTrain01 asset sgTrain01.down = function (x, y, obj) { // Check if sgTrain01 has already been clicked if (sgTrain01Clicked) { return; } sgTrain01Clicked = true; // Check if there is already an sgTrainSmoke instance if (currentSmoke) { return; } // Play sgTrainSound01 sound LK.getSound('sgTrainSound01').play(); // Initialize sgSmoke in the center of sgTrain01 var sgSmoke = new sgTrainSmoke(); sgSmoke.x = sgTrain01.x + 70; sgSmoke.y = sgTrain01.y - 100; game.addChild(sgSmoke); currentSmoke = sgSmoke; // Play sgTrainSound02 after 2 seconds LK.setTimeout(function () { LK.getSound('sgTrainsSound02').play(); }, 2000); // Move sgTrain01 horizontally to the right until it is near the border of the playspace var moveTrain = function moveTrain() { if (sgTrain01.x < 1825 - sgTrain01.width / 2) { sgTrain01.x += 7; LK.setTimeout(moveTrain, 16); // Move every 16ms (~60 FPS) } else { // Spawn three sgTarget25 on the visible train carts for (var i = 0; i < 3; i++) { var target25 = new Target25(); target25.x = sgTrainWagons[i].x + sgTrain01.x + -400; target25.y = sgTrainWagons[i].y + sgTrain01.y; game.addChild(target25); } // After 2 seconds, fade out the train LK.setTimeout(function () { var fadeOut = function fadeOut() { if (sgTrain01.alpha > 0) { sgTrain01.alpha -= 0.05; LK.setTimeout(fadeOut, 50); // Reduce alpha every 50ms } else { sgTrain01.destroy(); } }; fadeOut(); }, 2000); } }; moveTrain(); }; // Initialize the saloonPiano asset on screen var saloonPiano = game.addChild(LK.getAsset('saloonPiano', { anchorX: 0.5, anchorY: 0.5, x: 3275 / 2, y: 3800 / 2 })); // Add a click event to the piano saloonPiano.down = function (x, y, obj) { // If the piano jingle is not playing, play it if (!isPianoPlaying) { isPianoPlaying = true; LK.getSound('saloonPianoJingle01').play(); // After 5 seconds, set isPianoPlaying to false and hide sg_notes LK.setTimeout(function () { isPianoPlaying = false; note.visible = false; }, 3250); // Create sg_Notes above saloonPiano when piano jingle is playing var note = new Note(); note.x = saloonPiano.x; note.y = saloonPiano.y - 100; game.addChild(note); } }; // Initialize the sgBarrel asset on screen function spawnSGBarrel() { var positions = [{ x: 400, y: 1800 }, { x: 1325, y: 1800 }, { x: 1750, y: 2200 }]; var randomPosition = positions[Math.floor(Math.random() * positions.length)]; var sgBarrel = game.addChild(new SGBarrel()); sgBarrel.x = randomPosition.x; sgBarrel.y = randomPosition.y; } spawnSGBarrel(); // Initialize the sgBoard asset on screen var sgBoard = game.addChild(LK.getAsset('sgBoard', { anchorX: 0.5, anchorY: 0.5, x: 1024, // Center of the screen horizontally y: 2366 // Center of the screen vertically })); // Initialize the sgFrame01 asset on screen var sgFrame01 = game.addChild(LK.getAsset('sgFrame01', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2600 / 2 })); // Initialize the sgBulletHole01 asset on screen var sgBulletHole01 = game.addChild(LK.getAsset('sgBulletHole01', { anchorX: 0.5, anchorY: 0.5, x: 50, // Center of the screen horizontally y: 1800 // Center of the screen vertically })); // Initialize the sgInGrain asset on screen var sgInGrain = game.addChild(LK.getAsset('sgIngrain', { anchorX: 0.5, anchorY: 0.5, x: 50, y: 320 })); // Initialize the sgVines asset on screen var sgVines = game.addChild(LK.getAsset('sgVines', { anchorX: 0.5, anchorY: 0.5, x: 50, // Center of the screen horizontally y: 150 // Center of the screen vertically })); // Initialize the sgSpeechBubble01 asset on screen for 2 second and then destroy it var sgSpeechBubble01 = game.addChild(LK.getAsset('sgSpeechBubble01', { anchorX: 0.5, anchorY: 0.5, x: 924, // Center of the screen horizontally y: 1966 // Center of the screen vertically })); LK.setTimeout(function () { sgSpeechBubble01.destroy(); }, 2000); // Play sgYeehaw sound 0.5 seconds after the game is initialized LK.setTimeout(function () { LK.getSound('sgYeehaw').play(); }, 500); // Initialize the sgPoster01 asset on screen function spawnSGPoster() { var positions = [{ x: 385, y: 1425 }, { x: 1585, y: 1300 }, { x: 250, y: 1725 }]; var randomPosition = positions[Math.floor(Math.random() * positions.length)]; var sgPoster = game.addChild(new SGPoster()); sgPoster.x = randomPosition.x; sgPoster.y = randomPosition.y; } function respawnSGPoster() { var respawnTime = Math.random() * 3000 + 1000; LK.setTimeout(spawnSGPoster, respawnTime); } spawnSGPoster(); function spawnTumbleweed() { var tumbleweed = new Tumbleweed(); tumbleweed.x = 100; tumbleweed.y = 2800; game.addChild(tumbleweed); var nextSpawnTime = Math.random() * 20000 + 30000; // 20 to 30 seconds LK.setTimeout(spawnTumbleweed, nextSpawnTime); } LK.setTimeout(spawnTumbleweed, 10000); var sgBarman = game.addChild(new Barman()); sgBarman.x = 255; // Center of the screen horizontally sgBarman.y = 1455; // Center of the screen vertically // Initialize the sgDesertRock asset on screen var sgDesertRock = game.addChild(LK.getAsset('sgDesertRock', { anchorX: 0.5, anchorY: 0.5, x: 1500, y: 2900 })); // Initialize the sgGecko asset on screen after sgDesertRock var sgGecko = game.addChild(LK.getAsset('sgGecko', { anchorX: 0.5, anchorY: 0.5, x: 1500, y: 2375 })); // Add a click event to the sgGecko asset sgGecko.down = function (x, y, obj) { // Play sgGeckoNoise sound LK.getSound('sgGeckoNoise').play(); // Destroy the sgGecko asset this.destroy(); // Instantiate sgCloudPuff at the same position var sgCloudPuff = game.addChild(LK.getAsset('sgCloudPuff', { anchorX: 0.5, anchorY: 0.5, x: this.x - 25, y: this.y })); // After 1 second, destroy sgCloudPuff and instantiate sgTarget100 LK.setTimeout(function () { sgCloudPuff.destroy(); var sgTarget100 = game.addChild(LK.getAsset('sgTarget100', { anchorX: 0.5, anchorY: 0.5, x: sgCloudPuff.x, y: sgCloudPuff.y })); // Add pulsing effect to sgTarget100 sgTarget100.update = function () { this.scale.x = 1 + 0.1 * Math.sin(LK.ticks * 0.1); this.scale.y = 1 + 0.1 * Math.sin(LK.ticks * 0.1); }; // Add a click event to the sgTarget100 asset to destroy it and replace it with a flashing number 100 for 1 second sgTarget100.down = function (x, y, obj) { // Play getSound02 sound LK.getSound('getSound02').play(); // Destroy the sgTarget100 asset this.destroy(); // Add 100 to the score score += 100; scoreTxt.setText(score); // Create a text asset for the number 100 var number100 = new Text2('100', { size: 50, fill: "#00FF00" // Green color }); // Position the number 100 at the same position as the sgTarget100 asset number100.x = this.x - 50; number100.y = this.y - 30; // Add the number 100 to the game game.addChild(number100); // Make the number 100 flash for 1 second var flashInterval = LK.setInterval(function () { number100.visible = !number100.visible; }, 100); LK.setTimeout(function () { LK.clearInterval(flashInterval); number100.visible = true; }, 1000); // After 1 second, destroy the number 100 LK.setTimeout(function () { number100.destroy(); }, 1000); }; }, 1000); }; // Initialize the sgTarget100 asset on screen var sgTarget100 = game.addChild(LK.getAsset('sgTarget100', { anchorX: 0.5, anchorY: 0.5, x: 1000, y: 350 })); // Add pulsing effect to sgTarget100 sgTarget100.update = function () { this.scale.x = 1 + 0.1 * Math.sin(LK.ticks * 0.1); this.scale.y = 1 + 0.1 * Math.sin(LK.ticks * 0.1); }; // Add a click event to the sgTarget100 asset to destroy it and replace it with a flashing number 100 for 1 second sgTarget100.down = function (x, y, obj) { // Play getSound02 sound LK.getSound('getSound02').play(); // Destroy the sgTarget100 asset this.destroy(); // Add 100 to the score score += 100; scoreTxt.setText(score); // Create a text asset for the number 100 var number100 = new Text2('100', { size: 50, fill: "#00FF00" // Green color }); // Position the number 100 at the same position as the sgTarget100 asset number100.x = this.x - 50; number100.y = this.y - 30; // Add the number 100 to the game game.addChild(number100); // Make the number 100 flash for 1 second var flashInterval = LK.setInterval(function () { number100.visible = !number100.visible; }, 100); LK.setTimeout(function () { LK.clearInterval(flashInterval); number100.visible = true; }, 1000); // After 1 second, destroy the number 100 LK.setTimeout(function () { number100.destroy(); }, 1000); }; // Initialize variables var scoreTxt; var score = 0; var isPianoPlaying = false; // Initialize the sgSign01 asset on screen and center it at the top var sgSign01 = LK.gui.top.addChild(LK.getAsset('sg_Sign01', { anchorX: 0.5, anchorY: 0, x: 0, y: -150 })); // Add a click event to the sg_Sign01 asset to make it swing for 5 seconds sgSign01.down = function (x, y, obj) { // Check if the sign is already swinging if (this.isSwinging) { return; } this.isSwinging = true; var swingDuration = 5000; // 5 seconds in milliseconds var swingFrequency = 1 / swingDuration; // Frequency of the oscillation var swingAmplitude = 1; // The maximum rotation angle var startTime = Date.now(); // Play chainNoises sound once at the start of the swinging LK.getSound('chainNoises').play(); this.update = function () { var currentTime = Date.now(); var timePassed = currentTime - startTime; if (timePassed < swingDuration) { this.rotation = swingAmplitude * Math.sin(2 * Math.PI * swingFrequency * timePassed); } else { this.rotation = 0; this.update = function () {}; this.isSwinging = false; } }; game.update = this.update.bind(this); }; // Initialize the sg_Beans01 asset on screen spawnSGBeans01(); // Initialize the sgCactus asset on screen var sgCactus = game.addChild(LK.getAsset('sgCactus', { anchorX: 0.5, anchorY: 0.5, x: 2000, y: 2500 })); // Initialize the sgCharacter asset on screen var sgCharacter = game.addChild(LK.getAsset('sgCharacter', { anchorX: 0.5, anchorY: 0.5, x: 800 / 2, y: 4800 / 2 })); // Add a click event to the sgCharacter asset to trigger game over sgCharacter.down = function (x, y, obj) { LK.effects.flashScreen(0xff0000, 1000); LK.setTimeout(function () { LK.showGameOver(); }, 250); }; // Create score text scoreTxt = new Text2('0', { size: 150, fill: "#000000" }); scoreTxt.anchor.set(0.5, 0); game.addChild(scoreTxt); scoreTxt.x = sgCharacter.x; scoreTxt.y = sgCharacter.y + 85; spawnSGGlassBottle01(); // Initialize the sgTarget5 asset on screen var sgTarget5 = game.addChild(LK.getAsset('sgTarget5', { anchorX: 0.5, anchorY: 0.5, x: 2700 / 2, y: 2700 / 2 })); // Add hover effect to sgTarget5 sgTarget5.update = function () { this.y += 1 * Math.sin(LK.ticks * 0.05); // Adjust the speed and amplitude as needed }; // Add a click event to the sgTarget5 asset to destroy it and replace it with a flashing number 5 for 1 second sgTarget5.down = function (x, y, obj) { // Play hitcan02 sound LK.getSound('canHit02').play(); // Destroy the sgTarget5 asset var sgCloudSmoke = game.addChild(LK.getAsset('sgCloudSmoke', { anchorX: 0.5, anchorY: 0.5, x: this.x, y: this.y })); LK.setTimeout(function () { sgCloudSmoke.destroy(); }, 500); this.destroy(); // Add 5 to the score score += 5; scoreTxt.setText(score); // Create a text asset for the number 5 var number5 = new Text2('5', { size: 75, fill: "#ffffff" }); // Position the number 5 at the same position as the sgTarget5 asset number5.x = this.x - 25; number5.y = this.y - 50; // Add the number 5 to the game game.addChild(number5); // Make the number 5 flash for 1 second var flashInterval = LK.setInterval(function () { number5.visible = !number5.visible; }, 100); LK.setTimeout(function () { LK.clearInterval(flashInterval); number5.visible = true; }, 1000); // After 1 second, destroy the number 5 LK.setTimeout(function () { number5.destroy(); }, 1000); }; // Initialize the sgTarget10 asset on screen var sgTarget10 = game.addChild(LK.getAsset('sgTarget10', { anchorX: 0.5, anchorY: 0.5, x: 995, y: 935 })); // Add hover effect to sgTarget10 sgTarget10.update = function () { this.x += 1 * Math.sin(LK.ticks * 0.05); // Adjust the speed and amplitude as needed }; // Add a click event to the sgTarget10 asset to destroy it and replace it with a flashing number 10 for 1 second sgTarget10.down = function (x, y, obj) { // Play hitcan02 sound LK.getSound('canHit02').play(); // Destroy the sgTarget10 asset var sgCloudSmoke = game.addChild(LK.getAsset('sgCloudSmoke', { anchorX: 0.5, anchorY: 0.5, x: this.x, y: this.y })); LK.setTimeout(function () { sgCloudSmoke.destroy(); }, 500); this.destroy(); // Add 10 to the score score += 10; scoreTxt.setText(score); // Create a text asset for the number 10 var number10 = new Text2('10', { size: 75, fill: "#ADD8E6" // Light blue color }); // Position the number 10 at the same position as the sgTarget10 asset number10.x = this.x - 40; number10.y = this.y - 30; // Add the number 10 to the game game.addChild(number10); // Make the number 10 flash for 1 second var flashInterval = LK.setInterval(function () { number10.visible = !number10.visible; }, 100); LK.setTimeout(function () { LK.clearInterval(flashInterval); number10.visible = true; }, 1000); // After 1 second, destroy the number 10 LK.setTimeout(function () { number10.destroy(); }, 1000); }; // Handle game updates sgTarget100.update(); // Add a click event to the game to create a sgCrosshair asset at the clicked position game.down = function (x, y, obj) { // Create a sgCrosshair asset at the clicked position var sgCrosshair = game.addChild(LK.getAsset('sgCrosshair', { anchorX: 0.5, anchorY: 0.5, x: x, y: y })); // Play bulletHit01 or bulletHit02 sound randomly if (Math.random() > 0) { LK.getSound('bulletHit01').play(); } // After 0.5 second, destroy the sgCrosshair asset LK.setTimeout(function () { sgCrosshair.destroy(); }, 500); }; ; ;
/****
* Classes
****/
var Barman = Container.expand(function () {
var self = Container.call(this);
var barmanGraphics = self.attachAsset('sgBarman', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Add any specific update logic for the barman here
};
self.down = function (x, y, obj) {
// Add any specific click logic for the barman here
};
});
// Create a class for the sg_Notes asset
var Note = Container.expand(function () {
var self = Container.call(this);
// Attach the sg_Notes asset to the Note instance
var noteGraphics = self.attachAsset('sg_Notes', {
anchorX: 0.5,
anchorY: 0.5
});
// Set the initial speed of the note
self.speed = 1.25;
// This is automatically called every game tick, if the note is attached!
self.update = function () {
self.y -= self.speed;
// Destroy the note if it goes off screen
if (self.y < -50) {
self.destroy();
}
};
});
var Poster = Container.expand(function () {
var self = Container.call(this);
var posterGraphics = self.attachAsset('sgPoster01', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (self.y < -50) {
self.destroy();
}
};
self.down = function (x, y, obj) {
if (!this.clicked) {
score += 1;
scoreTxt.setText(score);
this.clicked = true;
}
if (Math.random() > 0.5) {
LK.getSound('canHit').play();
} else {
LK.getSound('canHit02').play();
}
var velocityX = Math.random() * 20 - 10;
var velocityY = Math.random() * 10 + 5;
var gravity = 0.5;
var angularVelocity = Math.random() * 0.2 - 0.1;
this.update = function () {
velocityY += gravity;
this.y += velocityY;
this.x += velocityX;
this.rotation += angularVelocity;
if (this.y > 2732 || this.x < 0 || this.x > 2048) {
this.destroy();
}
};
game.update = this.update.bind(this);
};
});
var SGBarrel = Container.expand(function () {
var self = Container.call(this);
var barrelGraphics = self.attachAsset('sgBarrel', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
// Play barreltHit01 sound
LK.getSound('barreltHit01').play();
// Add 1 to the score
score += 1;
scoreTxt.setText(score);
// Destroy the sgBarrel asset
this.destroy();
// Instantiate sgBrokenBarrel at the same position for 1 second
var sgBrokenBarrel = game.addChild(LK.getAsset('sgBrokenBarrel', {
anchorX: 0.5,
anchorY: 0.5,
x: this.x,
y: this.y
}));
LK.setTimeout(function () {
sgBrokenBarrel.destroy();
}, 1000);
// Respawn the barrel after 1 to 4 seconds
var respawnTime = Math.random() * 3000 + 1000;
LK.setTimeout(spawnSGBarrel, respawnTime);
};
});
var SGBeans01 = Container.expand(function () {
var self = Container.call(this);
var beansGraphics = self.attachAsset('sgBeans01', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (!this.clicked) {
score += 1;
scoreTxt.setText(score);
this.clicked = true;
}
if (Math.random() > 0.5) {
LK.getSound('canHit').play();
} else {
LK.getSound('canHit02').play();
}
var velocityX = Math.random() * 20 - 10;
var velocityY = Math.random() * 10 + 5;
var gravity = 0.5;
var angularVelocity = Math.random() * 0.2 - 0.1;
this.update = function () {
velocityY += gravity;
this.y += velocityY;
this.x += velocityX;
this.rotation += angularVelocity;
if (this.y > 2732 || this.x < 0 || this.x > 2048) {
this.destroy();
currentSGBeans01 = null; // Clear the current instance
respawnSGBeans01();
}
};
game.update = this.update.bind(this);
};
});
var SGGlassBottle01 = Container.expand(function () {
var self = Container.call(this);
var bottleGraphics = self.attachAsset('sgGlassBottle01', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (Math.random() > 0.5) {
LK.getSound('glassHit01').play();
} else {
LK.getSound('glassHit02').play();
}
this.destroy();
score += 1;
scoreTxt.setText(score);
var sgBrokenGlassBottle01 = game.addChild(LK.getAsset('sgBrokenGlassBottle01', {
anchorX: 0.5,
anchorY: 0.5,
x: this.x,
y: this.y
}));
LK.setTimeout(function () {
sgBrokenGlassBottle01.destroy();
}, 500);
respawnSGGlassBottle01();
};
});
var SGPoster = Container.expand(function () {
var self = Container.call(this);
var posterGraphics = self.attachAsset('sgPoster01', {
anchorX: 0.5,
anchorY: 0.5
});
self.down = function (x, y, obj) {
if (!this.clicked) {
score += 1;
scoreTxt.setText(score);
this.clicked = true;
}
if (Math.random() > 0.5) {
LK.getSound('canHit').play();
} else {
LK.getSound('canHit02').play();
}
var velocityX = Math.random() * 20 - 10;
var velocityY = Math.random() * 10 + 5;
var gravity = 0.5;
var angularVelocity = Math.random() * 0.2 - 0.1;
this.update = function () {
velocityY += gravity;
this.y += velocityY;
this.x += velocityX;
this.rotation += angularVelocity;
if (this.y > 2732 || this.x < 0 || this.x > 2048) {
this.destroy();
respawnSGPoster();
}
};
};
});
var Target25 = Container.expand(function () {
var self = Container.call(this);
var targetGraphics = self.attachAsset('sgTarget25', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
this.scale.x = Math.sin(LK.ticks * 0.1);
};
self.down = function (x, y, obj) {
LK.getSound('getSound01').play();
this.destroy();
score += 25;
scoreTxt.setText(score);
var number25 = new Text2('25', {
size: 75,
fill: "#FFD700"
});
number25.x = this.x - 40;
number25.y = this.y - 30;
game.addChild(number25);
var flashInterval = LK.setInterval(function () {
number25.visible = !number25.visible;
}, 100);
LK.setTimeout(function () {
LK.clearInterval(flashInterval);
number25.visible = true;
}, 1000);
LK.setTimeout(function () {
number25.destroy();
}, 1000);
};
});
var Tumbleweed = Container.expand(function () {
var self = Container.call(this);
var tumbleweedGraphics = self.attachAsset('sgTumbleWeed', {
anchorX: 0.5,
anchorY: 0.4
});
self.speedX = 6;
self.speedY = 0;
self.rotationSpeed = 0.075;
self.update = function () {
self.x += self.speedX;
self.rotation += self.rotationSpeed;
if (self.x > 2048) {
self.destroy();
}
};
});
var sgTrainSmoke = Container.expand(function () {
var self = Container.call(this);
var smokeGraphics = self.attachAsset('sgTrainSmoke', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -1;
self.update = function () {
self.y += self.speed;
};
LK.setTimeout(function () {
self.destroy();
currentSmoke = null;
}, 2000);
});
/****
* Initialize Game
****/
//<Assets used in the game will automatically appear here>
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
var currentSGBeans01 = null;
function spawnSGBeans01() {
if (currentSGBeans01) {
return; // If there's already an instance, do nothing
}
var positions = [{
x: 2048 / 2 - 100,
y: 2975 / 2
}, {
x: 2048 / 2 - 400,
y: 2975 / 2 + 125
}, {
x: 2048 / 2 + 800,
y: 2975 / 2 + 225
}];
var randomPosition = positions[Math.floor(Math.random() * positions.length)];
currentSGBeans01 = game.addChild(new SGBeans01());
currentSGBeans01.x = randomPosition.x;
currentSGBeans01.y = randomPosition.y;
}
function respawnSGBeans01() {
var respawnTime = Math.random() * 3000 + 1000;
LK.setTimeout(spawnSGBeans01, respawnTime);
}
function spawnSGGlassBottle01() {
var positions = [{
x: 2848 / 2 - 100,
y: 2732 / 2 + 105
}, {
x: 2848 / 2 + 320,
y: 2732 / 2 + 175
}, {
x: 2848 / 2 - 920,
y: 2732 / 2 + 225
}];
var randomPosition = positions[Math.floor(Math.random() * positions.length)];
var sgGlassBottle01 = game.addChild(new SGGlassBottle01());
sgGlassBottle01.x = randomPosition.x;
sgGlassBottle01.y = randomPosition.y;
}
function respawnSGGlassBottle01() {
var respawnTime = Math.random() * 3000 + 1000;
LK.setTimeout(spawnSGGlassBottle01, respawnTime);
}
// Initialize the sgBackground01 asset on screen
var sgBackground01 = game.addChild(LK.getAsset('sgBackground01', {
anchorX: 0.5,
anchorY: 0.5,
x: 2025 / 2,
y: 2725 / 2
}));
var currentSmoke = null;
// Initialize the sgTrain01 asset on screen
var sgTrain01 = game.addChild(LK.getAsset('sgTrain01', {
anchorX: 0.5,
anchorY: 0.5,
x: 125,
y: 1910
}));
// Add a flag to track if sgTrain01 has been clicked
var sgTrain01Clicked = false;
// Initialize the sgTrainWagon01 asset and parent it to sgTrain01
var sgTrainWagons = [];
for (var i = 0; i < 8; i++) {
var sgTrainWagon = sgTrain01.addChild(LK.getAsset('sgTrainWagon01', {
anchorX: 0.5,
anchorY: 0.5,
x: sgTrain01.width / 2 - 300 - i * 220,
// Adjust position for each wagon
y: sgTrain01.height / 2 - 70
}));
sgTrainWagons.push(sgTrainWagon);
}
// Add a click event to the sgTrain01 asset
sgTrain01.down = function (x, y, obj) {
// Check if sgTrain01 has already been clicked
if (sgTrain01Clicked) {
return;
}
sgTrain01Clicked = true;
// Check if there is already an sgTrainSmoke instance
if (currentSmoke) {
return;
}
// Play sgTrainSound01 sound
LK.getSound('sgTrainSound01').play();
// Initialize sgSmoke in the center of sgTrain01
var sgSmoke = new sgTrainSmoke();
sgSmoke.x = sgTrain01.x + 70;
sgSmoke.y = sgTrain01.y - 100;
game.addChild(sgSmoke);
currentSmoke = sgSmoke;
// Play sgTrainSound02 after 2 seconds
LK.setTimeout(function () {
LK.getSound('sgTrainsSound02').play();
}, 2000);
// Move sgTrain01 horizontally to the right until it is near the border of the playspace
var moveTrain = function moveTrain() {
if (sgTrain01.x < 1825 - sgTrain01.width / 2) {
sgTrain01.x += 7;
LK.setTimeout(moveTrain, 16); // Move every 16ms (~60 FPS)
} else {
// Spawn three sgTarget25 on the visible train carts
for (var i = 0; i < 3; i++) {
var target25 = new Target25();
target25.x = sgTrainWagons[i].x + sgTrain01.x + -400;
target25.y = sgTrainWagons[i].y + sgTrain01.y;
game.addChild(target25);
}
// After 2 seconds, fade out the train
LK.setTimeout(function () {
var fadeOut = function fadeOut() {
if (sgTrain01.alpha > 0) {
sgTrain01.alpha -= 0.05;
LK.setTimeout(fadeOut, 50); // Reduce alpha every 50ms
} else {
sgTrain01.destroy();
}
};
fadeOut();
}, 2000);
}
};
moveTrain();
};
// Initialize the saloonPiano asset on screen
var saloonPiano = game.addChild(LK.getAsset('saloonPiano', {
anchorX: 0.5,
anchorY: 0.5,
x: 3275 / 2,
y: 3800 / 2
}));
// Add a click event to the piano
saloonPiano.down = function (x, y, obj) {
// If the piano jingle is not playing, play it
if (!isPianoPlaying) {
isPianoPlaying = true;
LK.getSound('saloonPianoJingle01').play();
// After 5 seconds, set isPianoPlaying to false and hide sg_notes
LK.setTimeout(function () {
isPianoPlaying = false;
note.visible = false;
}, 3250);
// Create sg_Notes above saloonPiano when piano jingle is playing
var note = new Note();
note.x = saloonPiano.x;
note.y = saloonPiano.y - 100;
game.addChild(note);
}
};
// Initialize the sgBarrel asset on screen
function spawnSGBarrel() {
var positions = [{
x: 400,
y: 1800
}, {
x: 1325,
y: 1800
}, {
x: 1750,
y: 2200
}];
var randomPosition = positions[Math.floor(Math.random() * positions.length)];
var sgBarrel = game.addChild(new SGBarrel());
sgBarrel.x = randomPosition.x;
sgBarrel.y = randomPosition.y;
}
spawnSGBarrel();
// Initialize the sgBoard asset on screen
var sgBoard = game.addChild(LK.getAsset('sgBoard', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
// Center of the screen horizontally
y: 2366 // Center of the screen vertically
}));
// Initialize the sgFrame01 asset on screen
var sgFrame01 = game.addChild(LK.getAsset('sgFrame01', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2600 / 2
}));
// Initialize the sgBulletHole01 asset on screen
var sgBulletHole01 = game.addChild(LK.getAsset('sgBulletHole01', {
anchorX: 0.5,
anchorY: 0.5,
x: 50,
// Center of the screen horizontally
y: 1800 // Center of the screen vertically
}));
// Initialize the sgInGrain asset on screen
var sgInGrain = game.addChild(LK.getAsset('sgIngrain', {
anchorX: 0.5,
anchorY: 0.5,
x: 50,
y: 320
}));
// Initialize the sgVines asset on screen
var sgVines = game.addChild(LK.getAsset('sgVines', {
anchorX: 0.5,
anchorY: 0.5,
x: 50,
// Center of the screen horizontally
y: 150 // Center of the screen vertically
}));
// Initialize the sgSpeechBubble01 asset on screen for 2 second and then destroy it
var sgSpeechBubble01 = game.addChild(LK.getAsset('sgSpeechBubble01', {
anchorX: 0.5,
anchorY: 0.5,
x: 924,
// Center of the screen horizontally
y: 1966 // Center of the screen vertically
}));
LK.setTimeout(function () {
sgSpeechBubble01.destroy();
}, 2000);
// Play sgYeehaw sound 0.5 seconds after the game is initialized
LK.setTimeout(function () {
LK.getSound('sgYeehaw').play();
}, 500);
// Initialize the sgPoster01 asset on screen
function spawnSGPoster() {
var positions = [{
x: 385,
y: 1425
}, {
x: 1585,
y: 1300
}, {
x: 250,
y: 1725
}];
var randomPosition = positions[Math.floor(Math.random() * positions.length)];
var sgPoster = game.addChild(new SGPoster());
sgPoster.x = randomPosition.x;
sgPoster.y = randomPosition.y;
}
function respawnSGPoster() {
var respawnTime = Math.random() * 3000 + 1000;
LK.setTimeout(spawnSGPoster, respawnTime);
}
spawnSGPoster();
function spawnTumbleweed() {
var tumbleweed = new Tumbleweed();
tumbleweed.x = 100;
tumbleweed.y = 2800;
game.addChild(tumbleweed);
var nextSpawnTime = Math.random() * 20000 + 30000; // 20 to 30 seconds
LK.setTimeout(spawnTumbleweed, nextSpawnTime);
}
LK.setTimeout(spawnTumbleweed, 10000);
var sgBarman = game.addChild(new Barman());
sgBarman.x = 255; // Center of the screen horizontally
sgBarman.y = 1455; // Center of the screen vertically
// Initialize the sgDesertRock asset on screen
var sgDesertRock = game.addChild(LK.getAsset('sgDesertRock', {
anchorX: 0.5,
anchorY: 0.5,
x: 1500,
y: 2900
}));
// Initialize the sgGecko asset on screen after sgDesertRock
var sgGecko = game.addChild(LK.getAsset('sgGecko', {
anchorX: 0.5,
anchorY: 0.5,
x: 1500,
y: 2375
}));
// Add a click event to the sgGecko asset
sgGecko.down = function (x, y, obj) {
// Play sgGeckoNoise sound
LK.getSound('sgGeckoNoise').play();
// Destroy the sgGecko asset
this.destroy();
// Instantiate sgCloudPuff at the same position
var sgCloudPuff = game.addChild(LK.getAsset('sgCloudPuff', {
anchorX: 0.5,
anchorY: 0.5,
x: this.x - 25,
y: this.y
}));
// After 1 second, destroy sgCloudPuff and instantiate sgTarget100
LK.setTimeout(function () {
sgCloudPuff.destroy();
var sgTarget100 = game.addChild(LK.getAsset('sgTarget100', {
anchorX: 0.5,
anchorY: 0.5,
x: sgCloudPuff.x,
y: sgCloudPuff.y
}));
// Add pulsing effect to sgTarget100
sgTarget100.update = function () {
this.scale.x = 1 + 0.1 * Math.sin(LK.ticks * 0.1);
this.scale.y = 1 + 0.1 * Math.sin(LK.ticks * 0.1);
};
// Add a click event to the sgTarget100 asset to destroy it and replace it with a flashing number 100 for 1 second
sgTarget100.down = function (x, y, obj) {
// Play getSound02 sound
LK.getSound('getSound02').play();
// Destroy the sgTarget100 asset
this.destroy();
// Add 100 to the score
score += 100;
scoreTxt.setText(score);
// Create a text asset for the number 100
var number100 = new Text2('100', {
size: 50,
fill: "#00FF00" // Green color
});
// Position the number 100 at the same position as the sgTarget100 asset
number100.x = this.x - 50;
number100.y = this.y - 30;
// Add the number 100 to the game
game.addChild(number100);
// Make the number 100 flash for 1 second
var flashInterval = LK.setInterval(function () {
number100.visible = !number100.visible;
}, 100);
LK.setTimeout(function () {
LK.clearInterval(flashInterval);
number100.visible = true;
}, 1000);
// After 1 second, destroy the number 100
LK.setTimeout(function () {
number100.destroy();
}, 1000);
};
}, 1000);
};
// Initialize the sgTarget100 asset on screen
var sgTarget100 = game.addChild(LK.getAsset('sgTarget100', {
anchorX: 0.5,
anchorY: 0.5,
x: 1000,
y: 350
}));
// Add pulsing effect to sgTarget100
sgTarget100.update = function () {
this.scale.x = 1 + 0.1 * Math.sin(LK.ticks * 0.1);
this.scale.y = 1 + 0.1 * Math.sin(LK.ticks * 0.1);
};
// Add a click event to the sgTarget100 asset to destroy it and replace it with a flashing number 100 for 1 second
sgTarget100.down = function (x, y, obj) {
// Play getSound02 sound
LK.getSound('getSound02').play();
// Destroy the sgTarget100 asset
this.destroy();
// Add 100 to the score
score += 100;
scoreTxt.setText(score);
// Create a text asset for the number 100
var number100 = new Text2('100', {
size: 50,
fill: "#00FF00" // Green color
});
// Position the number 100 at the same position as the sgTarget100 asset
number100.x = this.x - 50;
number100.y = this.y - 30;
// Add the number 100 to the game
game.addChild(number100);
// Make the number 100 flash for 1 second
var flashInterval = LK.setInterval(function () {
number100.visible = !number100.visible;
}, 100);
LK.setTimeout(function () {
LK.clearInterval(flashInterval);
number100.visible = true;
}, 1000);
// After 1 second, destroy the number 100
LK.setTimeout(function () {
number100.destroy();
}, 1000);
};
// Initialize variables
var scoreTxt;
var score = 0;
var isPianoPlaying = false;
// Initialize the sgSign01 asset on screen and center it at the top
var sgSign01 = LK.gui.top.addChild(LK.getAsset('sg_Sign01', {
anchorX: 0.5,
anchorY: 0,
x: 0,
y: -150
}));
// Add a click event to the sg_Sign01 asset to make it swing for 5 seconds
sgSign01.down = function (x, y, obj) {
// Check if the sign is already swinging
if (this.isSwinging) {
return;
}
this.isSwinging = true;
var swingDuration = 5000; // 5 seconds in milliseconds
var swingFrequency = 1 / swingDuration; // Frequency of the oscillation
var swingAmplitude = 1; // The maximum rotation angle
var startTime = Date.now();
// Play chainNoises sound once at the start of the swinging
LK.getSound('chainNoises').play();
this.update = function () {
var currentTime = Date.now();
var timePassed = currentTime - startTime;
if (timePassed < swingDuration) {
this.rotation = swingAmplitude * Math.sin(2 * Math.PI * swingFrequency * timePassed);
} else {
this.rotation = 0;
this.update = function () {};
this.isSwinging = false;
}
};
game.update = this.update.bind(this);
};
// Initialize the sg_Beans01 asset on screen
spawnSGBeans01();
// Initialize the sgCactus asset on screen
var sgCactus = game.addChild(LK.getAsset('sgCactus', {
anchorX: 0.5,
anchorY: 0.5,
x: 2000,
y: 2500
}));
// Initialize the sgCharacter asset on screen
var sgCharacter = game.addChild(LK.getAsset('sgCharacter', {
anchorX: 0.5,
anchorY: 0.5,
x: 800 / 2,
y: 4800 / 2
}));
// Add a click event to the sgCharacter asset to trigger game over
sgCharacter.down = function (x, y, obj) {
LK.effects.flashScreen(0xff0000, 1000);
LK.setTimeout(function () {
LK.showGameOver();
}, 250);
};
// Create score text
scoreTxt = new Text2('0', {
size: 150,
fill: "#000000"
});
scoreTxt.anchor.set(0.5, 0);
game.addChild(scoreTxt);
scoreTxt.x = sgCharacter.x;
scoreTxt.y = sgCharacter.y + 85;
spawnSGGlassBottle01();
// Initialize the sgTarget5 asset on screen
var sgTarget5 = game.addChild(LK.getAsset('sgTarget5', {
anchorX: 0.5,
anchorY: 0.5,
x: 2700 / 2,
y: 2700 / 2
}));
// Add hover effect to sgTarget5
sgTarget5.update = function () {
this.y += 1 * Math.sin(LK.ticks * 0.05); // Adjust the speed and amplitude as needed
};
// Add a click event to the sgTarget5 asset to destroy it and replace it with a flashing number 5 for 1 second
sgTarget5.down = function (x, y, obj) {
// Play hitcan02 sound
LK.getSound('canHit02').play();
// Destroy the sgTarget5 asset
var sgCloudSmoke = game.addChild(LK.getAsset('sgCloudSmoke', {
anchorX: 0.5,
anchorY: 0.5,
x: this.x,
y: this.y
}));
LK.setTimeout(function () {
sgCloudSmoke.destroy();
}, 500);
this.destroy();
// Add 5 to the score
score += 5;
scoreTxt.setText(score);
// Create a text asset for the number 5
var number5 = new Text2('5', {
size: 75,
fill: "#ffffff"
});
// Position the number 5 at the same position as the sgTarget5 asset
number5.x = this.x - 25;
number5.y = this.y - 50;
// Add the number 5 to the game
game.addChild(number5);
// Make the number 5 flash for 1 second
var flashInterval = LK.setInterval(function () {
number5.visible = !number5.visible;
}, 100);
LK.setTimeout(function () {
LK.clearInterval(flashInterval);
number5.visible = true;
}, 1000);
// After 1 second, destroy the number 5
LK.setTimeout(function () {
number5.destroy();
}, 1000);
};
// Initialize the sgTarget10 asset on screen
var sgTarget10 = game.addChild(LK.getAsset('sgTarget10', {
anchorX: 0.5,
anchorY: 0.5,
x: 995,
y: 935
}));
// Add hover effect to sgTarget10
sgTarget10.update = function () {
this.x += 1 * Math.sin(LK.ticks * 0.05); // Adjust the speed and amplitude as needed
};
// Add a click event to the sgTarget10 asset to destroy it and replace it with a flashing number 10 for 1 second
sgTarget10.down = function (x, y, obj) {
// Play hitcan02 sound
LK.getSound('canHit02').play();
// Destroy the sgTarget10 asset
var sgCloudSmoke = game.addChild(LK.getAsset('sgCloudSmoke', {
anchorX: 0.5,
anchorY: 0.5,
x: this.x,
y: this.y
}));
LK.setTimeout(function () {
sgCloudSmoke.destroy();
}, 500);
this.destroy();
// Add 10 to the score
score += 10;
scoreTxt.setText(score);
// Create a text asset for the number 10
var number10 = new Text2('10', {
size: 75,
fill: "#ADD8E6" // Light blue color
});
// Position the number 10 at the same position as the sgTarget10 asset
number10.x = this.x - 40;
number10.y = this.y - 30;
// Add the number 10 to the game
game.addChild(number10);
// Make the number 10 flash for 1 second
var flashInterval = LK.setInterval(function () {
number10.visible = !number10.visible;
}, 100);
LK.setTimeout(function () {
LK.clearInterval(flashInterval);
number10.visible = true;
}, 1000);
// After 1 second, destroy the number 10
LK.setTimeout(function () {
number10.destroy();
}, 1000);
};
// Handle game updates
sgTarget100.update();
// Add a click event to the game to create a sgCrosshair asset at the clicked position
game.down = function (x, y, obj) {
// Create a sgCrosshair asset at the clicked position
var sgCrosshair = game.addChild(LK.getAsset('sgCrosshair', {
anchorX: 0.5,
anchorY: 0.5,
x: x,
y: y
}));
// Play bulletHit01 or bulletHit02 sound randomly
if (Math.random() > 0) {
LK.getSound('bulletHit01').play();
}
// After 0.5 second, destroy the sgCrosshair asset
LK.setTimeout(function () {
sgCrosshair.destroy();
}, 500);
};
;
;
wild west saloon piano real life. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
front facing western shooting gallery wooden frame. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a white musical note on a empty background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western baked beans can. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western glass beer bottle. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western shooting target with 5 written on it.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western shooting target with 10 written on it.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
vertical exploded glass beer bottle. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
vertical red curtain. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pretty blond human cowgirl holding a sign. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western gold star with 25 written on it. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a western shining green diamond. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create a cactus. The goal is to capture a lively and playful location.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create a desert rock. The goal is to capture a lively and playful location.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Create a desert tumble weed. The goal is to capture a lively and playful location.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western barrel. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon gecko with a cowboy hat. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon smoke puff. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western destroyed barrel. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cloud of smoke. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a single brown dust particle. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western wanted poster. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
2d western toy train side view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
train smoke. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western toy train wagon side profile. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a single wildvine with spikes and flowers dangling.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
J+G ingrained in a heart, on wood by a knife. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a western shooting gallery ranking charts written rookie (70) skilled(220) legendary (400). Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
wood bullet hole. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
empty western saloon, just the floor, ceiling and walls.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
front facing western shooting gallery wooden sign hanging from chains that is written "Whiskey Saloon". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
upper torso of a western cartoon barman getting ready to throw a bottle of whiskey.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western cowboy toy shooting. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western target dummy. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
grawlix in a speech bubble, make sure it looks something like this !#@* and theres an angry icon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western bottle of whiskey.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
orange damage splash.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
cartoon pie drawn top view. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
add an apron, add a bow in the hair, remove the hat
purple damage splash. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Tap to shoot! in a western style speech bubble.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Red x western inspired. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
western inspired letters that spell "Score". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
saloonPianoJingle01
Sound effect
chainNoises
Sound effect
canHit
Sound effect
canHit02
Sound effect
glassHit01
Sound effect
glassHit02
Sound effect
bulletHit01
Sound effect
sgGeckoNoise
Sound effect
getSound02
Sound effect
getSound01
Sound effect
barreltHit01
Sound effect
sgSaloonMusic
Sound effect
sgYeehaw
Sound effect
sgTrainSound01
Sound effect
sgTrainsSound02
Sound effect
sgGrunt
Sound effect
sgRicochet
Sound effect
sgOof
Sound effect
sgfemaleoof
Sound effect
sgfemaleow
Sound effect
sgsquish
Sound effect