User prompt
Maracas shake satın alındıktan sonra fiyatı %20 artsın, Piano butonu olmasın. Maracas enstrumentini açan buton piano butonu olsun.
User prompt
Cymbal ekranında maracas butonunu fixleyelim, maracas satın alınmadan önce audience 20 olsun.
User prompt
Maracas 2 tane görünüyor onu fixleyelim, Maracas satın alındıktan sonra buton kaybolmasın ''Piano'' butonu olsun
User prompt
maracas satın alındıktan sonra buton kaybolmasın piano butonu olsun. Maracas shake ücreti 10000 olsun ve maracas shake alınmadığı zaman audience alınamasın.
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot set properties of null (setting 'clickHandler')' in or related to this line: 'arrowBack2.clickHandler = function () {' Line Number: 1626
User prompt
okları fixleyelim, drum ekranındayken sadece gitara geçiş olsun, gitardanm cymbala, cymbaldan maracasa
User prompt
cymbalı hit hızını tam yarısına düşürelim, playercymbalstick biraz sağa kaydıralım.
User prompt
audience animasyonunu biraz azaltalım
User prompt
cymbal stick senkronize olsun
User prompt
audience hit hızını artıralım senkronize olsunlar
User prompt
audience start clapping drum diğer hite vurmak üzereyken
User prompt
cymbal speedi 45in tam yarı hızına alalım
User prompt
audience clap hit tam drum yarısında değil yarısından biraz sonra olsun
User prompt
cymbal speed 90 bpm yapalım
User prompt
drum cpmyi 60 yerine 45 yapalım
User prompt
audience drum hit yaptıktan sonra bir sonraki hit için geçen zamanın tam yarısında clap yapmaya başlasın
User prompt
audience hariç tüm enstrümanlar satın alındığında otomatik çalarken drum hit sesine senkronize şekilde başlasın.
User prompt
playercymbalstick konumunu biraz aşağıya kaydıralım, autocymbalstick konumunu hafif aşağıya kaydıralım
User prompt
Maracas shake 1 defa satın alınabilsin ve alındığında maracas 120 bpm hızında hit olsun
User prompt
maracas ekranındayken Drumstick buttonunu maracas shake butonu yapalım 700 para olsun
User prompt
maracas ses ekleyelim
User prompt
maracası görebilmek için aynı okların hizasına arrow3 ekleyelim, arrow3 cymbal ve maracas arasında olsun
User prompt
maracası baya sağa kaydıralım
User prompt
10 cymbalstick satın alındığında audience butonu da açılsın
User prompt
Maracası sağa doğru baya kaydıralım
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var ArrowButton = Container.expand(function () { var self = Container.call(this); self.arrowShape = null; self.assetType = 'arrow'; // Default asset type self.init = function (assetType) { if (assetType) { self.assetType = assetType; } self.arrowShape = self.attachAsset(self.assetType, { anchorX: 0.5, anchorY: 0.5, scaleX: 1, scaleY: 1 }); }; self.clickHandler = null; self.down = function () { if (self.clickHandler) { self.clickHandler(); } if (self.arrowShape) { tween(self.arrowShape, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100, onFinish: function onFinish() { tween(self.arrowShape, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); } }; return self; }); var Audience = Container.expand(function () { var self = Container.call(this); // Select audience asset sequentially var audienceAssets = ['audience1', 'audience2', 'audience3', 'audience4', 'audience5', 'audience6', 'audience7', 'audience8']; var selectedAsset; // If guitar is purchased, use reverse order starting from audience8 if (guitarPurchased) { // Reverse order: audience8, audience7, audience6, etc. selectedAsset = audienceAssets[7 - audienceCounter % audienceAssets.length]; } else { // Normal order for initial audiences selectedAsset = audienceAssets[audienceCounter % audienceAssets.length]; } audienceCounter++; // Increment counter for next audience self.audienceGraphics = self.attachAsset(selectedAsset, { anchorX: 0.5, anchorY: 0.5 }); self.instrument = null; self.multiplier = 1.2; self.update = function () { // Check if this is a clap tick if (LK.ticks % 120 === 0) { // Animate based on the global clap phase if (globalClapPhase === 3) { // Double clap animation (bigger) tween(self, { scaleX: 1.2, scaleY: 1.2 }, { duration: 100, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); } else if (globalClapPhase === 7) { // Four times clap animation (biggest) tween(self, { scaleX: 1.3, scaleY: 1.3 }, { duration: 100, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); } else { // Single clap animation (smaller) tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 100, onFinish: function onFinish() { tween(self, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); } } }; self.setInstrument = function (type) { if (self.instrument) { self.instrument.destroy(); } self.instrument = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5, x: 30, y: 0 }); }; return self; }); var AutoCymbalstick = Container.expand(function () { var self = Container.call(this); var stickGraphics = self.attachAsset('autocymbalstick', { anchorX: 0.5, anchorY: 0.9 }); self.speed = 30; // 30 CBM (Cymbal Beats per Minute) self.income = 10; // 10 gold per hit self.animating = false; self.tickCounter = 0; self.cymbalReference = null; self.update = function () { self.tickCounter++; // Hit every 120 ticks (30 CBM = 1 hit per 2 seconds at 60 FPS) if (self.tickCounter >= 120 && !self.animating) { self.tickCounter = 0; self.animate(); } }; self.animate = function () { if (self.animating) return; self.animating = true; tween(stickGraphics, { rotation: 0.3 }, { duration: 300, onFinish: function onFinish() { // Generate gold when hitting var startGold = gold; gold += self.income; // Smooth gold animation tween({ value: displayedGold }, { value: gold }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { displayedGold = gold; } }); var tweenObj = { value: displayedGold }; tween(tweenObj, { value: gold }, { duration: 300, easing: tween.easeOut }); Object.defineProperty(tweenObj, 'value', { get: function get() { return displayedGold; }, set: function set(v) { displayedGold = v; } }); // Play cymbal sound LK.getSound('cymbalhit').play(); // Visual feedback on cymbal if reference exists if (self.cymbalReference) { var cymbalGraphics = self.cymbalReference.children[0]; tween(cymbalGraphics, { scaleX: 1.1, scaleY: 1.1 }, { duration: 50, onFinish: function onFinish() { tween(cymbalGraphics, { scaleX: 1, scaleY: 1 }, { duration: 50 }); } }); } tween(stickGraphics, { rotation: 0 }, { duration: 200, onFinish: function onFinish() { self.animating = false; } }); } }); }; return self; }); var AutoDrumstick = Container.expand(function () { var self = Container.call(this); var stickGraphics = self.attachAsset('autodrumstick', { anchorX: 0.5, anchorY: 0.9 }); self.speed = 1; self.income = 1; self.animating = false; self.tickCounter = 0; self.drumReference = null; self.update = function () { self.tickCounter++; // Hit every 60 ticks (60 BPM = 1 hit per second at 60 FPS) if (self.tickCounter >= 60 && !self.animating) { self.tickCounter = 0; self.animate(); } }; self.animate = function () { if (self.animating) return; self.animating = true; tween(stickGraphics, { rotation: 0.3 }, { duration: 300, onFinish: function onFinish() { // Generate gold when hitting var startGold = gold; gold += self.income; // Smooth gold animation tween({ value: displayedGold }, { value: gold }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { displayedGold = gold; } }); var tweenObj = { value: displayedGold }; tween(tweenObj, { value: gold }, { duration: 300, easing: tween.easeOut }); Object.defineProperty(tweenObj, 'value', { get: function get() { return displayedGold; }, set: function set(v) { displayedGold = v; } }); // Play drum sound LK.getSound('drumhit').play(); // Visual feedback on drum if reference exists if (self.drumReference) { var drumGraphics = self.drumReference.children[0]; tween(drumGraphics, { scaleX: 1.1, scaleY: 1.1 }, { duration: 50, onFinish: function onFinish() { tween(drumGraphics, { scaleX: 1, scaleY: 1 }, { duration: 50 }); } }); } tween(stickGraphics, { rotation: 0 }, { duration: 200, onFinish: function onFinish() { self.animating = false; } }); } }); }; return self; }); var AutoFinger = Container.expand(function () { var self = Container.call(this); var fingerGraphics = self.attachAsset('finger', { anchorX: 0.5, anchorY: 0.5, scaleX: 1, scaleY: 1, rotation: -Math.PI / 2 // Rotate 90 degrees counterclockwise }); self.speed = 1; self.income = 1500; // Higher income than drumstick self.animating = false; self.tickCounter = 0; self.guitarReference = null; self.update = function () { self.tickCounter++; // Click every 360 ticks (10 CBM = 1 click per 6 seconds = 360 ticks at 60 FPS) if (self.tickCounter >= 360 && !self.animating) { self.tickCounter = 0; self.animate(); } }; self.animate = function () { if (self.animating) return; self.animating = true; // Vertical strumming motion - move up more tween(self, { y: self.y - 80 // Increased from 50 to 80 for more upward movement }, { duration: 200, onFinish: function onFinish() { // Generate gold when strumming var startGold = gold; gold += self.income; // Smooth gold animation tween({ value: displayedGold }, { value: gold }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { displayedGold = gold; } }); var tweenObj = { value: displayedGold }; tween(tweenObj, { value: gold }, { duration: 300, easing: tween.easeOut }); Object.defineProperty(tweenObj, 'value', { get: function get() { return displayedGold; }, set: function set(v) { displayedGold = v; } }); // Play guitar sound LK.getSound('guitarhit').play(); // Visual feedback on guitar if reference exists if (self.guitarReference) { var guitarGraphics = self.guitarReference.children[0]; tween(guitarGraphics, { rotation: 0.1 }, { duration: 50, onFinish: function onFinish() { tween(guitarGraphics, { rotation: 0 }, { duration: 50 }); } }); } // Return to original position - move down tween(self, { y: self.y + 80 // Increased from 50 to 80 to match upward movement }, { duration: 200, onFinish: function onFinish() { self.animating = false; } }); } }); }; return self; }); var BuyButton = Container.expand(function () { var self = Container.call(this); var buttonBg = self.attachAsset('buyButton', { anchorX: 0.5, anchorY: 0.5 }); self.titleText = new Text2('', { size: 40, fill: '#ffffff' }); self.titleText.anchor.set(0.5, 0.5); self.titleText.y = -15; self.addChild(self.titleText); self.costText = new Text2('', { size: 30, fill: '#ffffff' }); self.costText.anchor.set(0.5, 0.5); self.costText.y = 15; self.addChild(self.costText); self.countText = new Text2('', { size: 50, fill: '#FFD700' }); self.countText.anchor.set(0.5, 0.5); self.countText.x = -150; self.addChild(self.countText); self.lockIcon = null; self.updateButton = function (title, cost, canAfford, count, isLocked, lockMessage) { self.titleText.setText(title); self.costText.setText('$' + cost); if (count !== undefined && count > 0) { self.countText.setText(count.toString()); self.countText.visible = true; } else { self.countText.visible = false; } if (isLocked) { buttonBg.tint = 0x404040; self.interactive = false; // Hide button text when locked self.titleText.visible = false; self.costText.visible = false; self.countText.visible = false; if (!self.lockIcon) { self.lockIcon = self.attachAsset('lock', { anchorX: 0.5, anchorY: 0.5, x: 0, y: -10 }); } self.lockIcon.visible = true; } else { // Show button text when unlocked self.titleText.visible = true; self.costText.visible = true; if (self.lockIcon) { self.lockIcon.visible = false; } buttonBg.tint = canAfford ? 0x4CAF50 : 0x808080; self.interactive = canAfford; } }; self.down = function () { tween(buttonBg, { scaleX: 0.95, scaleY: 0.95 }, { duration: 100, onFinish: function onFinish() { tween(buttonBg, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); }; return self; }); var Cymbal = Container.expand(function () { var self = Container.call(this); var cymbalGraphics = self.attachAsset('cymbal', { anchorX: 0.5, anchorY: 0.5 }); // Add permanent cymbal stick self.cymbalstick = self.attachAsset('playerCymbalstick', { anchorX: 0.5, anchorY: 0.9, x: 210, y: -100, rotation: -0.3 }); self.canPlay = true; self.lastPlayTime = 0; self.cymbalstickAnimating = false; self.play = function () { if (!self.canPlay || self.cymbalstickAnimating) return; var currentTime = Date.now(); var timeSinceLastPlay = currentTime - self.lastPlayTime; self.lastPlayTime = currentTime; // Check for perfect rhythm var perfectTiming = Math.abs(timeSinceLastPlay - 1000) < 100; // Calculate animation speed based on tap speed var tapSpeed = timeSinceLastPlay > 0 ? Math.min(timeSinceLastPlay, 1000) : 1000; var animationSpeed = tapSpeed / 1000; var strikeDuration = Math.max(50, 150 * animationSpeed); var returnDuration = Math.max(100, 200 * animationSpeed); // Set animation state self.cymbalstickAnimating = true; // Animate cymbal stick strike tween(self.cymbalstick, { rotation: -0.6 }, { duration: strikeDuration, easing: tween.easeOut, onFinish: function onFinish() { tween(self.cymbalstick, { rotation: -0.3 }, { duration: returnDuration, easing: tween.easeInOut, onFinish: function onFinish() { self.cymbalstickAnimating = false; } }); } }); // Visual feedback - cymbal scale tween(cymbalGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 100, onFinish: function onFinish() { tween(cymbalGraphics, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); // Calculate reward var reward = perfectTiming ? goldPerTap * 2 : goldPerTap; var startGold = gold; gold += reward; // Smooth gold animation tween({ value: displayedGold }, { value: gold }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { displayedGold = gold; } }); var tweenObj = { value: displayedGold }; tween(tweenObj, { value: gold }, { duration: 300, easing: tween.easeOut }); Object.defineProperty(tweenObj, 'value', { get: function get() { return displayedGold; }, set: function set(v) { displayedGold = v; } }); // Create light flash effect var lightFlash = self.attachAsset('goldCoin', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3, alpha: 0.8 }); lightFlash.tint = perfectTiming ? 0xFFD700 : 0xFFFFFF; tween(lightFlash, { scaleX: 5, scaleY: 5, alpha: 0 }, { duration: 300, onFinish: function onFinish() { lightFlash.destroy(); } }); // Create floating text var floatingGold = game.addChild(new FloatingText('+' + reward, perfectTiming ? 0xFFD700 : 0xFFFFFF)); floatingGold.x = self.x; floatingGold.y = self.y - 50; // Play cymbal sound LK.getSound('cymbalhit').play(); // Create music note effect if (perfectTiming) { var note = game.addChild(new MusicNote()); note.x = self.x + (Math.random() - 0.5) * 100; note.y = self.y - 100; } }; self.down = function () { self.play(); }; return self; }); var Drum = Container.expand(function () { var self = Container.call(this); var drumGraphics = self.attachAsset('drum', { anchorX: 0.5, anchorY: 0.5 }); // Add permanent drumstick self.drumstick = self.attachAsset('playerDrumstick', { anchorX: 0.5, anchorY: 0.9, x: 210, y: -220, rotation: -0.3 }); self.canTap = true; self.lastTapTime = 0; self.drumstickAnimating = false; self.tap = function () { if (!self.canTap || self.drumstickAnimating) return; var currentTime = Date.now(); var timeSinceLastTap = currentTime - self.lastTapTime; self.lastTapTime = currentTime; // Check for perfect rhythm (60 BPM = 1000ms between beats) var perfectTiming = Math.abs(timeSinceLastTap - 1000) < 100; // Calculate animation speed based on tap speed var tapSpeed = timeSinceLastTap > 0 ? Math.min(timeSinceLastTap, 1000) : 1000; var animationSpeed = tapSpeed / 1000; // Normalize to 0-1 range var strikeDuration = Math.max(50, 150 * animationSpeed); // Faster taps = shorter animation var returnDuration = Math.max(100, 200 * animationSpeed); // Visual feedback - drum scale tween(drumGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 100, onFinish: function onFinish() { tween(drumGraphics, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); // Set animation state self.drumstickAnimating = true; // Animate drumstick strike with dynamic duration - reversed animation tween(self.drumstick, { rotation: -0.6 }, { duration: strikeDuration, easing: tween.easeOut, onFinish: function onFinish() { tween(self.drumstick, { rotation: -0.3 }, { duration: returnDuration, easing: tween.easeInOut, onFinish: function onFinish() { self.drumstickAnimating = false; } }); } }); // Calculate reward var reward = perfectTiming ? goldPerTap * 2 : goldPerTap; var startGold = gold; gold += reward; // Smooth gold animation tween({ value: displayedGold }, { value: gold }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { displayedGold = gold; } }); var tweenObj = { value: displayedGold }; tween(tweenObj, { value: gold }, { duration: 300, easing: tween.easeOut }); Object.defineProperty(tweenObj, 'value', { get: function get() { return displayedGold; }, set: function set(v) { displayedGold = v; } }); // Create light flash effect var lightFlash = self.attachAsset('goldCoin', { anchorX: 0.5, anchorY: 0.5, scaleX: 10, scaleY: 10, alpha: 0.8 }); lightFlash.tint = perfectTiming ? 0xFFD700 : 0xFFFFFF; tween(lightFlash, { scaleX: 15, scaleY: 15, alpha: 0 }, { duration: 300, onFinish: function onFinish() { lightFlash.destroy(); } }); // Create floating text var floatingGold = game.addChild(new FloatingText('+' + reward, perfectTiming ? 0xFFD700 : 0xFFFFFF)); floatingGold.x = self.x; floatingGold.y = self.y - 50; // Play sound LK.getSound('drumhit').play(); // Create music note effect if (perfectTiming) { var note = game.addChild(new MusicNote()); note.x = self.x + (Math.random() - 0.5) * 100; note.y = self.y - 100; } }; self.down = function () { self.tap(); }; return self; }); var FloatingText = Container.expand(function () { var self = Container.call(this); self.init = function (text, color) { self.textObj = new Text2(text, { size: 60, fill: '#' + color.toString(16).padStart(6, '0') }); self.textObj.anchor.set(0.5, 0.5); self.addChild(self.textObj); tween(self, { y: self.y - 100, alpha: 0 }, { duration: 1000, onFinish: function onFinish() { self.destroy(); } }); }; return self; }); var Guitar = Container.expand(function () { var self = Container.call(this); var guitarGraphics = self.attachAsset('guitar', { anchorX: 0.5, anchorY: 0.5 }); self.canPlay = true; self.lastPlayTime = 0; self.play = function () { if (!self.canPlay) return; var currentTime = Date.now(); var timeSinceLastPlay = currentTime - self.lastPlayTime; self.lastPlayTime = currentTime; // Check for perfect rhythm var perfectTiming = Math.abs(timeSinceLastPlay - 1000) < 100; // Visual feedback - guitar scale tween(guitarGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 100, onFinish: function onFinish() { tween(guitarGraphics, { scaleX: 1, scaleY: 1 }, { duration: 100 }); } }); // Calculate reward var reward = perfectTiming ? goldPerTap * 2 : goldPerTap; var startGold = gold; gold += reward; // Smooth gold animation tween({ value: displayedGold }, { value: gold }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { displayedGold = gold; } }); var tweenObj = { value: displayedGold }; tween(tweenObj, { value: gold }, { duration: 300, easing: tween.easeOut }); Object.defineProperty(tweenObj, 'value', { get: function get() { return displayedGold; }, set: function set(v) { displayedGold = v; } }); // Create light flash effect var lightFlash = self.attachAsset('goldCoin', { anchorX: 0.5, anchorY: 0.5, scaleX: 3, scaleY: 3, alpha: 0.8 }); lightFlash.tint = perfectTiming ? 0xFFD700 : 0xFFFFFF; tween(lightFlash, { scaleX: 5, scaleY: 5, alpha: 0 }, { duration: 300, onFinish: function onFinish() { lightFlash.destroy(); } }); // Create floating text var floatingGold = game.addChild(new FloatingText('+' + reward, perfectTiming ? 0xFFD700 : 0xFFFFFF)); floatingGold.x = self.x; floatingGold.y = self.y - 50; // Play guitar sound LK.getSound('guitarhit').play(); // Create music note effect if (perfectTiming) { var note = game.addChild(new MusicNote()); note.x = self.x + (Math.random() - 0.5) * 100; note.y = self.y - 100; } }; self.down = function () { self.play(); }; return self; }); var MusicNote = Container.expand(function () { var self = Container.call(this); var noteGraphics = self.attachAsset('musicNote', { anchorX: 0.5, anchorY: 0.5 }); tween(self, { y: self.y - 200, alpha: 0 }, { duration: 1500, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); tween(noteGraphics, { rotation: Math.PI * 2 }, { duration: 1500 }); return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a1a }); /**** * Game Code ****/ // Game variables var gold = 0; var displayedGold = 0; // Track displayed gold for smooth animation var goldPerTap = 20000; var passiveIncome = 0; var drumsticks = []; var drumsticksPurchased = 0; var musicians = []; var unlockedInstruments = ['drum']; var currentVenue = 0; var currentInstrument = 'drum'; var instrumentSwitchArrow = null; var guitarAsset = null; var cymbalAsset = null; var maracasAsset = null; var arrowBack = null; var arrow2 = null; var arrowBack2 = null; var instrumentsPurchased = 0; var audienceCounter = 0; // Track which audience asset to use next var globalClapCounter = 0; // Track global clap count for double clap pattern var globalClapPhase = 0; // 0-2 = singles, 3 = double, 4-6 = singles, 7 = four times var lastClapTick = -120; // Track last clap tick to prevent multiple claps per cycle var fingers = []; // Track AutoFinger instances var fingersPurchased = 0; // Track fingers purchased var autoCymbalsticks = []; // Track AutoCymbalstick instances // Upgrade costs var drumstickCost = 10; var fingerCost = 300; // Separate cost for fingers var musicianCost = 100; var guitarPurchased = false; // Track if guitar has been purchased var instrumentCosts = { guitar: 500, cymbal: 1000, maracas: 2000 }; // UI Elements var goldText = new Text2('Gold: 0', { size: 80, fill: '#FFD700' }); goldText.anchor.set(0.5, 0); LK.gui.top.addChild(goldText); // Add reset button var resetButton = new Container(); var resetBg = resetButton.attachAsset('buyButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.5, scaleY: 0.5 }); resetBg.tint = 0xFF0000; var resetText = new Text2('Reset', { size: 30, fill: '#FFFFFF' }); resetText.anchor.set(0.5, 0.5); resetButton.addChild(resetText); resetButton.interactive = true; LK.gui.topRight.addChild(resetButton); resetButton.x = -150; resetButton.y = 50; var incomeText = new Text2('Income: 0/s', { size: 50, fill: '#ffffff' }); incomeText.anchor.set(0.5, 0); incomeText.y = 90; LK.gui.top.addChild(incomeText); // Add background var background = game.addChild(LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 1366 })); // Main drum var mainDrum = game.addChild(new Drum()); mainDrum.x = 1024; mainDrum.y = 1300; // Stage/Venue display - removed // Buy buttons - Add to GUI layer to ensure they're always on top var buyDrumstickBtn = LK.gui.bottom.addChild(new BuyButton()); buyDrumstickBtn.x = -480; buyDrumstickBtn.y = -532; buyDrumstickBtn.updateButton('Drumstick', drumstickCost, false); var buyMusicianBtn = LK.gui.bottom.addChild(new BuyButton()); buyMusicianBtn.x = 0; buyMusicianBtn.y = -532; buyMusicianBtn.updateButton('Audience', musicianCost, false, 0, true, ''); var buyInstrumentBtn = LK.gui.bottom.addChild(new BuyButton()); buyInstrumentBtn.x = 480; buyInstrumentBtn.y = -532; buyInstrumentBtn.updateButton('Guitar', instrumentCosts.guitar, false, 0, true, '10 Audience'); // Reset button handler resetButton.down = function () { // Visual feedback tween(resetBg, { scaleX: 0.45, scaleY: 0.45 }, { duration: 100, onFinish: function onFinish() { tween(resetBg, { scaleX: 0.5, scaleY: 0.5 }, { duration: 100 }); } }); }; resetButton.up = function () { // Create confirmation dialog var confirmContainer = game.addChild(new Container()); confirmContainer.x = 1024; confirmContainer.y = 1366; // Dark overlay var overlay = confirmContainer.attachAsset('goldCoin', { anchorX: 0.5, anchorY: 0.5, scaleX: 100, scaleY: 100, alpha: 0.7 }); overlay.tint = 0x000000; // Dialog box var dialogBg = confirmContainer.attachAsset('buyButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 2, scaleY: 2 }); // Confirmation text var confirmText = new Text2('Reset All Progress?', { size: 60, fill: '#FFFFFF' }); confirmText.anchor.set(0.5, 0.5); confirmText.y = -50; confirmContainer.addChild(confirmText); // Yes button var yesBtn = confirmContainer.addChild(new Container()); var yesBg = yesBtn.attachAsset('buyButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); yesBg.tint = 0x4CAF50; var yesText = new Text2('Yes', { size: 40, fill: '#FFFFFF' }); yesText.anchor.set(0.5, 0.5); yesBtn.addChild(yesText); yesBtn.x = -150; yesBtn.y = 50; yesBtn.interactive = true; // No button var noBtn = confirmContainer.addChild(new Container()); var noBg = noBtn.attachAsset('buyButton', { anchorX: 0.5, anchorY: 0.5, scaleX: 0.8, scaleY: 0.8 }); noBg.tint = 0xFF0000; var noText = new Text2('No', { size: 40, fill: '#FFFFFF' }); noText.anchor.set(0.5, 0.5); noBtn.addChild(noText); noBtn.x = 150; noBtn.y = 50; noBtn.interactive = true; // Yes button handler yesBtn.down = function () { tween(yesBg, { scaleX: 0.7, scaleY: 0.7 }, { duration: 100, onFinish: function onFinish() { tween(yesBg, { scaleX: 0.8, scaleY: 0.8 }, { duration: 100 }); } }); }; yesBtn.up = function () { // Clear storage storage.gold = null; storage.passiveIncome = null; storage.drumstickCount = null; storage.drumsticksPurchased = null; storage.musicianCount = null; storage.unlockedInstruments = null; storage.instrumentsPurchased = null; // Reload game LK.showGameOver(); }; // No button handler noBtn.down = function () { tween(noBg, { scaleX: 0.7, scaleY: 0.7 }, { duration: 100, onFinish: function onFinish() { tween(noBg, { scaleX: 0.8, scaleY: 0.8 }, { duration: 100 }); } }); }; noBtn.up = function () { confirmContainer.destroy(); }; }; // Button handlers buyDrumstickBtn.up = function () { // CYMBALSTICK PURCHASE LOGIC if (currentInstrument === 'cymbal') { if (typeof window.cymbalsticksPurchased === 'undefined') window.cymbalsticksPurchased = 0; if (typeof window.cymbalstickCost === 'undefined') window.cymbalstickCost = 600; var cymbalstickCount = window.cymbalsticksPurchased; var cymbalstickCost = window.cymbalstickCost; if (gold >= cymbalstickCost) { gold -= cymbalstickCost; window.cymbalsticksPurchased++; // Create auto cymbal stick if it doesn't exist if (autoCymbalsticks.length === 0) { var newAutoCymbalstick = game.addChild(new AutoCymbalstick()); // Position auto cymbal stick on left side of cymbal if (cymbalAsset) { newAutoCymbalstick.x = cymbalAsset.x - 350; newAutoCymbalstick.y = cymbalAsset.y - 100; } else { // Default position if cymbal doesn't exist newAutoCymbalstick.x = 1024 - 350; newAutoCymbalstick.y = 1220 - 100; } // Set cymbal reference for visual feedback newAutoCymbalstick.cymbalReference = cymbalAsset; autoCymbalsticks.push(newAutoCymbalstick); } passiveIncome += 10; // Auto cymbal stick generates 10 gold per second // Increase cost for next cymbalstick (optional, can be fixed if desired) window.cymbalstickCost = Math.floor(window.cymbalstickCost * 1.3); LK.getSound('purchase').play(); // Update button buyDrumstickBtn.updateButton('Cymbalstick', window.cymbalstickCost, gold >= window.cymbalstickCost, window.cymbalsticksPurchased); } return; } var currentCost = currentInstrument === 'guitar' ? fingerCost : drumstickCost; if (gold >= currentCost) { gold -= currentCost; if (currentInstrument === 'guitar') { fingersPurchased++; // Create finger if it doesn't exist if (fingers.length === 0) { var newFinger = game.addChild(new AutoFinger()); // Position finger on right side of guitar if (guitarAsset) { newFinger.x = guitarAsset.x - 250; // Move significantly more to the left newFinger.y = guitarAsset.y + 50; // Move finger up a bit more (reduced from 80 to 50) } else { // If guitar doesn't exist yet, position at default location newFinger.x = 1024 - 250; newFinger.y = 1220 + 50; } // Set guitar reference for visual feedback newFinger.guitarReference = guitarAsset; fingers.push(newFinger); } passiveIncome += 4; // Fingers generate 4 gold per second fingerCost = Math.floor(fingerCost * 1.3); } else { drumsticksPurchased++; // Create drumstick if it doesn't exist if (drumsticks.length === 0) { var newStick = game.addChild(new AutoDrumstick()); // Position drumstick on left side of drum newStick.x = mainDrum.x - 350; newStick.y = mainDrum.y - 200; // Rotate drumstick to point towards the drum newStick.rotation = 0; // Set drum reference for visual feedback newStick.drumReference = mainDrum; drumsticks.push(newStick); } passiveIncome += 1; drumstickCost = Math.floor(drumstickCost * 1.3); } LK.getSound('purchase').play(); // Force update button to refresh count display var buttonText = currentInstrument === 'guitar' ? 'Finger' : 'Drumstick'; var purchaseCount = currentInstrument === 'guitar' ? fingersPurchased : drumsticksPurchased; var nextCost = currentInstrument === 'guitar' ? fingerCost : drumstickCost; buyDrumstickBtn.updateButton(buttonText, nextCost, gold >= nextCost, purchaseCount); } }; buyMusicianBtn.up = function () { var requiredFingers = guitarPurchased ? 10 : 0; var canPurchase = guitarPurchased ? fingersPurchased >= requiredFingers : drumsticksPurchased >= 10; if (canPurchase && gold >= musicianCost) { gold -= musicianCost; var newAudience = game.addChild(new Audience()); // Random spawn position at bottom of screen newAudience.x = 200 + Math.random() * 1648; // Random x between 200 and 1848 newAudience.y = 2400; // Fixed y position for horizontal alignment // Only set instruments if guitar is not purchased if (!guitarPurchased && unlockedInstruments.length > 1) { var randomInstrument = unlockedInstruments[Math.floor(Math.random() * (unlockedInstruments.length - 1)) + 1]; newAudience.setInstrument(randomInstrument); } musicians.push(newAudience); goldPerTap = Math.floor(goldPerTap * newAudience.multiplier); passiveIncome += 4; // Each audience generates 4 gold per second // Increase cost by 1.3x before guitar, 1.3x (30%) after guitar musicianCost = Math.floor(musicianCost * 1.3); LK.getSound('purchase').play(); // Force update button to refresh count display var isLocked = guitarPurchased ? fingersPurchased < 10 : drumsticksPurchased < 10; var lockMessage = guitarPurchased ? '10 Fingers' : '10 Drumsticks'; buyMusicianBtn.updateButton('Audience', musicianCost, gold >= musicianCost && !isLocked, musicians.length, isLocked, lockMessage); } }; buyInstrumentBtn.up = function () { var nextInstrument = null; var cost = 0; if (!unlockedInstruments.includes('guitar')) { nextInstrument = 'guitar'; cost = instrumentCosts.guitar; } else if (!unlockedInstruments.includes('cymbal')) { nextInstrument = 'cymbal'; cost = instrumentCosts.cymbal; } else if (!unlockedInstruments.includes('maracas')) { nextInstrument = 'maracas'; cost = instrumentCosts.maracas; } if (nextInstrument && gold >= cost && (nextInstrument !== 'guitar' || musicians.length >= 10) && (nextInstrument !== 'cymbal' || musicians.length >= 15) && (nextInstrument !== 'maracas' || typeof window.cymbalsticksPurchased !== 'undefined' && window.cymbalsticksPurchased >= 10)) { gold -= cost; unlockedInstruments.push(nextInstrument); instrumentsPurchased++; // Set guitar purchased flag and update musician cost to 2000 if (nextInstrument === 'guitar') { guitarPurchased = true; musicianCost = 2000; } else if (nextInstrument === 'cymbal') { // Create cymbal to the right of guitar if (!cymbalAsset) { cymbalAsset = game.addChild(new Cymbal()); cymbalAsset.scaleX = 2; cymbalAsset.scaleY = 2; // Position cymbal to the right of guitar if (guitarAsset) { cymbalAsset.x = guitarAsset.x + 2400; cymbalAsset.y = guitarAsset.y; } else { // Default position if guitar doesn't exist cymbalAsset.x = 3424; cymbalAsset.y = 1220; } // Show arrow2 if we're currently on guitar view if (currentInstrument === 'guitar' && !arrow2) { arrow2 = game.addChild(new ArrowButton()); arrow2.init('arrow2'); arrow2.x = 1024 + 850; arrow2.y = 1220; // Align with guitar height arrow2.visible = true; arrow2.clickHandler = function () { // Switch to cymbal view var cymbalCenterX = 1024; var INSTRUMENT_DISTANCE = 1200; // Move guitar to the left tween(guitarAsset, { x: cymbalCenterX - INSTRUMENT_DISTANCE - 400 }, { duration: 500, easing: tween.easeInOut }); // Move finger with guitar if (fingers.length > 0) { tween(fingers[0], { x: cymbalCenterX - INSTRUMENT_DISTANCE - 400 - 250 }, { duration: 500, easing: tween.easeInOut }); } // Move cymbal to center tween(cymbalAsset, { x: cymbalCenterX }, { duration: 500, easing: tween.easeInOut }); // Move auto cymbal stick with cymbal if (autoCymbalsticks.length > 0) { tween(autoCymbalsticks[0], { x: cymbalCenterX - 350, y: cymbalAsset.y - 100 }, { duration: 500, easing: tween.easeInOut }); } // Move drum further left tween(mainDrum, { x: cymbalCenterX - INSTRUMENT_DISTANCE * 2 - 800 }, { duration: 500, easing: tween.easeInOut }); // Move drumstick with drum if (drumsticks.length > 0) { tween(drumsticks[0], { x: cymbalCenterX - INSTRUMENT_DISTANCE * 2 - 800 - 350 }, { duration: 500, easing: tween.easeInOut }); } // Hide arrow2 and create/show arrowback2 arrow2.visible = false; if (!arrowBack2) { arrowBack2 = game.addChild(new ArrowButton()); arrowBack2.init('arrowback2'); arrowBack2.y = 1220; // Align with guitar height } arrowBack2.x = cymbalCenterX - 850; arrowBack2.visible = true; arrowBack2.clickHandler = function () { // Switch back to guitar from cymbal var guitarCenterX = 1024; // Move cymbal to the right tween(cymbalAsset, { x: guitarCenterX + 2400 }, { duration: 500, easing: tween.easeInOut }); // Move auto cymbal stick with cymbal if (autoCymbalsticks.length > 0) { tween(autoCymbalsticks[0], { x: guitarCenterX + 2400 - 350, y: cymbalAsset.y - 100 }, { duration: 500, easing: tween.easeInOut }); } // Move guitar back to center tween(guitarAsset, { x: guitarCenterX }, { duration: 500, easing: tween.easeInOut }); // Move finger with guitar if (fingers.length > 0) { tween(fingers[0], { x: guitarCenterX - 250 }, { duration: 500, easing: tween.easeInOut }); } // Move drum to the left tween(mainDrum, { x: guitarCenterX - INSTRUMENT_DISTANCE - 400 }, { duration: 500, easing: tween.easeInOut }); // Move drumstick with drum if (drumsticks.length > 0) { tween(drumsticks[0], { x: guitarCenterX - INSTRUMENT_DISTANCE - 400 - 350 }, { duration: 500, easing: tween.easeInOut }); } // Hide arrowback2 and show arrow2 and arrowBack arrowBack2.visible = false; arrow2.x = guitarCenterX + 850; arrow2.visible = true; if (arrowBack) { arrowBack.x = guitarCenterX - 850; arrowBack.visible = true; } currentInstrument = 'guitar'; }; currentInstrument = 'cymbal'; }; } } } else if (nextInstrument === 'maracas') { // Create maracas to the right of cymbal if (!maracasAsset) { maracasAsset = game.addChild(new Container()); var maracasGraphics = maracasAsset.attachAsset('maracas', { anchorX: 0.5, anchorY: 0.5 }); maracasAsset.scaleX = 2; maracasAsset.scaleY = 2; // Position maracas to the right of cymbal if (cymbalAsset) { maracasAsset.x = cymbalAsset.x + 800; // Increased from 400 to 800 maracasAsset.y = cymbalAsset.y; } else { // Default position if cymbal doesn't exist maracasAsset.x = 1824; // Increased from 1424 to 1824 maracasAsset.y = 1220; } // Make maracas interactive and play animation/sound on tap maracasAsset.interactive = true; maracasAsset.down = function () { // Prevent spamming animation if (maracasAsset._animating) return; maracasAsset._animating = true; // Animate maracas: scale up and back tween(maracasAsset, { scaleX: 2.3, scaleY: 2.3 }, { duration: 100, onFinish: function onFinish() { tween(maracasAsset, { scaleX: 2, scaleY: 2 }, { duration: 100, onFinish: function onFinish() { maracasAsset._animating = false; } }); } }); // Play a sound (use guitarhit as a placeholder, or add a maracas sound if available) LK.getSound('guitarhit').play(); // Optionally, create a floating text or effect var floatingGold = game.addChild(new FloatingText('+0', 0x00FF00)); floatingGold.x = maracasAsset.x; floatingGold.y = maracasAsset.y - 100; }; } } LK.getSound('purchase').play(); // Show arrow button when guitar is purchased if (nextInstrument === 'guitar' && !instrumentSwitchArrow) { instrumentSwitchArrow = game.addChild(new ArrowButton()); instrumentSwitchArrow.init('arrow'); instrumentSwitchArrow.x = mainDrum.x + 700; instrumentSwitchArrow.y = 1220; // Align with guitar height instrumentSwitchArrow.clickHandler = function () { // Fixed distance between instruments to maintain var INSTRUMENT_DISTANCE = 1200; // Increased distance to ensure they never get close // Smooth transition from drum to guitar with guitar centered if (currentInstrument === 'drum') { var guitarCenterX = 1024; // Center of screen // Calculate drum's new position to maintain distance var drumNewX = guitarCenterX - INSTRUMENT_DISTANCE - 400; // Move drum 400px more to the left // Move drum to the left while maintaining distance tween(mainDrum, { x: drumNewX }, { duration: 500, easing: tween.easeInOut }); // Move drumstick with drum if it exists if (drumsticks.length > 0) { tween(drumsticks[0], { x: drumNewX - 350 }, { duration: 500, easing: tween.easeInOut }); } // Create and bring in guitar from right to center if (!guitarAsset) { guitarAsset = game.addChild(new Guitar()); guitarAsset.scaleX = 3; guitarAsset.scaleY = 3; guitarAsset.x = 2048 + 500; // Start off-screen to the right guitarAsset.y = 1220; guitarAsset.x = guitarAsset.x + 50; // Move slightly to the right } // Create finger if purchased but not created yet if (fingersPurchased > 0 && fingers.length === 0) { var newFinger = game.addChild(new AutoFinger()); // Position finger on guitar (which is off-screen) newFinger.x = guitarAsset.x - 250; newFinger.y = guitarAsset.y + 50; newFinger.guitarReference = guitarAsset; fingers.push(newFinger); } tween(guitarAsset, { x: guitarCenterX // Move to center }, { duration: 500, easing: tween.easeInOut }); // Move cymbal with guitar if it exists if (cymbalAsset) { tween(cymbalAsset, { x: guitarCenterX + 2400 }, { duration: 500, easing: tween.easeInOut }); } // Move finger with guitar if it exists if (fingers.length > 0) { tween(fingers[0], { x: guitarCenterX - 250 }, { duration: 500, easing: tween.easeInOut }); } // Hide the right arrow instrumentSwitchArrow.visible = false; // Create and show left arrow if it doesn't exist if (!arrowBack) { arrowBack = game.addChild(new ArrowButton()); arrowBack.init('arrowback'); arrowBack.y = 1220; // Align with guitar height arrowBack.clickHandler = function () { // Switch back to drum view var drumCenterX = 1024; var INSTRUMENT_DISTANCE = 1200; // Move drum back to center tween(mainDrum, { x: drumCenterX }, { duration: 500, easing: tween.easeInOut }); // Move drumstick with drum if (drumsticks.length > 0) { tween(drumsticks[0], { x: drumCenterX - 350 }, { duration: 500, easing: tween.easeInOut }); } // Move guitar to the right tween(guitarAsset, { x: drumCenterX + INSTRUMENT_DISTANCE + 400 }, { duration: 500, easing: tween.easeInOut }); // Move cymbal with guitar if it exists if (cymbalAsset) { tween(cymbalAsset, { x: drumCenterX + INSTRUMENT_DISTANCE + 400 + 2400 }, { duration: 500, easing: tween.easeInOut }); } // Move finger with guitar if it exists if (fingers.length > 0) { tween(fingers[0], { x: drumCenterX + INSTRUMENT_DISTANCE + 400 - 250 }, { duration: 500, easing: tween.easeInOut }); } // Hide arrowBack and arrow2, show instrumentSwitchArrow arrowBack.visible = false; if (arrow2) { arrow2.visible = false; } instrumentSwitchArrow.visible = true; instrumentSwitchArrow.x = drumCenterX + 700; currentInstrument = 'drum'; // Update button back to Drumstick buyDrumstickBtn.updateButton('Drumstick', drumstickCost, gold >= drumstickCost, drumsticksPurchased); }; } arrowBack.x = guitarCenterX - 850; arrowBack.visible = true; currentInstrument = 'guitar'; // Update finger position when on guitar view if (fingers.length > 0) { // Update finger position to be relative to guitar's new position fingers[0].x = guitarCenterX - 250; fingers[0].y = guitarAsset.y + 50; // Updated vertical offset to match new position } // Create and show arrow2 if cymbal exists if (cymbalAsset && !arrow2) { arrow2 = game.addChild(new ArrowButton()); arrow2.init('arrow2'); arrow2.y = 1220; // Align with guitar height arrow2.clickHandler = function () { // Switch to cymbal view var cymbalCenterX = 1024; // Move guitar to the left tween(guitarAsset, { x: cymbalCenterX - INSTRUMENT_DISTANCE - 400 }, { duration: 500, easing: tween.easeInOut }); // Move finger with guitar if (fingers.length > 0) { tween(fingers[0], { x: cymbalCenterX - INSTRUMENT_DISTANCE - 400 - 250 }, { duration: 500, easing: tween.easeInOut }); } // Move cymbal to center tween(cymbalAsset, { x: cymbalCenterX }, { duration: 500, easing: tween.easeInOut }); // Move drum further left tween(mainDrum, { x: cymbalCenterX - INSTRUMENT_DISTANCE * 2 - 800 }, { duration: 500, easing: tween.easeInOut }); // Move drumstick with drum if (drumsticks.length > 0) { tween(drumsticks[0], { x: cymbalCenterX - INSTRUMENT_DISTANCE * 2 - 800 - 350 }, { duration: 500, easing: tween.easeInOut }); } // Hide arrow2 and arrowBack, create/show arrowback2 arrow2.visible = false; arrowBack.visible = false; if (!arrowBack2) { arrowBack2 = game.addChild(new ArrowButton()); arrowBack2.init('arrowback2'); arrowBack2.y = 1220; // Align with guitar height } arrowBack2.x = cymbalCenterX - 850; arrowBack2.visible = true; arrowBack2.clickHandler = function () { // Switch back to guitar from cymbal var guitarCenterX = 1024; // Move cymbal to the right tween(cymbalAsset, { x: guitarCenterX + 2400 }, { duration: 500, easing: tween.easeInOut }); // Move guitar back to center tween(guitarAsset, { x: guitarCenterX }, { duration: 500, easing: tween.easeInOut }); // Move finger with guitar if (fingers.length > 0) { tween(fingers[0], { x: guitarCenterX - 250 }, { duration: 500, easing: tween.easeInOut }); } // Move drum to the left tween(mainDrum, { x: guitarCenterX - INSTRUMENT_DISTANCE - 400 }, { duration: 500, easing: tween.easeInOut }); // Move drumstick with drum if (drumsticks.length > 0) { tween(drumsticks[0], { x: guitarCenterX - INSTRUMENT_DISTANCE - 400 - 350 }, { duration: 500, easing: tween.easeInOut }); } // Hide arrowback2 and show arrow2 and arrowBack arrowBack2.visible = false; if (arrow2) { arrow2.x = guitarCenterX + 850; arrow2.visible = true; } if (arrowBack) { arrowBack.x = guitarCenterX - 850; arrowBack.visible = true; } currentInstrument = 'guitar'; }; currentInstrument = 'cymbal'; }; } if (arrow2) { arrow2.x = guitarCenterX + 850; arrow2.visible = cymbalAsset ? true : false; } // Change drumstick button to Finger buyDrumstickBtn.updateButton('Finger', fingerCost, gold >= fingerCost, fingersPurchased); } else if (currentInstrument === 'guitar' && (!arrow2 || !arrow2.clickHandler)) { var drumCenterX = 1024; // Calculate guitar's new position to maintain distance var guitarNewX = drumCenterX + INSTRUMENT_DISTANCE + 400; // Move guitar 400px more to the right // Move guitar to the right maintaining distance tween(guitarAsset, { x: guitarNewX }, { duration: 500, easing: tween.easeInOut }); // Move cymbal with guitar if it exists if (cymbalAsset) { tween(cymbalAsset, { x: guitarNewX + 2400 }, { duration: 500, easing: tween.easeInOut }); } // Move finger with guitar if it exists if (fingers.length > 0) { tween(fingers[0], { x: guitarNewX - 250 // Keep finger at same relative position to guitar }, { duration: 500, easing: tween.easeInOut }); } // Bring drum back to center tween(mainDrum, { x: drumCenterX }, { duration: 500, easing: tween.easeInOut }); // Move drumstick back with drum if it exists if (drumsticks.length > 0) { tween(drumsticks[0], { x: drumCenterX - 350 }, { duration: 500, easing: tween.easeInOut }); } // Show the right arrow again instrumentSwitchArrow.visible = true; instrumentSwitchArrow.x = drumCenterX + 700; // Hide the left arrow and arrow2 if (arrowBack) { arrowBack.visible = false; } if (arrow2) { arrow2.visible = false; } currentInstrument = 'drum'; // Keep finger visible and move with guitar if (fingers.length > 0) { // Move finger with guitar to maintain position tween(fingers[0], { x: guitarNewX - 250 // Keep finger at same relative position to guitar }, { duration: 500, easing: tween.easeInOut }); } // Change button back to Drumstick buyDrumstickBtn.updateButton('Drumstick', drumstickCost, gold >= drumstickCost, drumsticksPurchased); } else if (currentInstrument === 'cymbal') { // Switch back to guitar from cymbal var guitarCenterX = 1024; // Move cymbal to the right tween(cymbalAsset, { x: guitarCenterX + 2400 }, { duration: 500, easing: tween.easeInOut }); // Move guitar back to center tween(guitarAsset, { x: guitarCenterX }, { duration: 500, easing: tween.easeInOut }); // Move finger with guitar if (fingers.length > 0) { tween(fingers[0], { x: guitarCenterX - 250 }, { duration: 500, easing: tween.easeInOut }); } // Keep drum to the left tween(mainDrum, { x: guitarCenterX - INSTRUMENT_DISTANCE - 400 }, { duration: 500, easing: tween.easeInOut }); // Move drumstick with drum if (drumsticks.length > 0) { tween(drumsticks[0], { x: guitarCenterX - INSTRUMENT_DISTANCE - 400 - 350 }, { duration: 500, easing: tween.easeInOut }); } // Show arrow2 again and update arrowBack position if (arrow2) { arrow2.x = guitarCenterX + 850; arrow2.visible = true; } if (arrowBack) { arrowBack.x = guitarCenterX - 850; } currentInstrument = 'guitar'; } }; } // Update button for next instrument if (nextInstrument === 'guitar') { buyInstrumentBtn.updateButton('Cymbal', instrumentCosts.cymbal, gold >= instrumentCosts.cymbal, instrumentsPurchased); } else if (nextInstrument === 'cymbal') { buyInstrumentBtn.updateButton('Maracas', instrumentCosts.maracas, gold >= instrumentCosts.maracas, instrumentsPurchased); } else if (nextInstrument === 'maracas') { buyInstrumentBtn.visible = false; } else { buyInstrumentBtn.visible = false; } } }; // Passive income timer var incomeTimer = 0; // Main game loop game.update = function () { // Global clap synchronization if (LK.ticks % 120 === 0 && LK.ticks !== lastClapTick) { lastClapTick = LK.ticks; globalClapCounter++; globalClapPhase = globalClapCounter % 8; // Play clap sound(s) based on phase - only if we have audience if (musicians.length > 0) { if (globalClapPhase === 3) { // Double clap (4th in pattern) - faster with rapid clap-clap LK.getSound('clap').play(); LK.setTimeout(function () { LK.getSound('clap').play(); }, 100); // Faster delay for rapid double clap effect } else if (globalClapPhase === 7) { // Four times clap (8th in pattern) - slightly slower rapid clap-clap LK.getSound('clap').play(); LK.setTimeout(function () { LK.getSound('clap').play(); }, 80); // Slightly slower for controlled rapid clap-clap LK.setTimeout(function () { LK.getSound('clap').play(); }, 160); LK.setTimeout(function () { LK.getSound('clap').play(); }, 240); } else { // Single clap (phases 0, 1, 2, 4, 5, 6) LK.getSound('clap').play(); } } } // Update UI goldText.setText('Gold: ' + Math.floor(displayedGold)); incomeText.setText('Income: ' + passiveIncome + '/s'); // Update button states // CYMBALSTICK LOGIC if (currentInstrument === 'cymbal') { // Track cymbalstick purchases if (typeof window.cymbalsticksPurchased === 'undefined') window.cymbalsticksPurchased = 0; if (typeof window.cymbalstickCost === 'undefined') window.cymbalstickCost = 600; var cymbalstickCount = window.cymbalsticksPurchased; var cymbalstickCost = window.cymbalstickCost; var canAffordCymbalstick = gold >= cymbalstickCost; var cymbalstickLocked = cymbalstickCount < 10; // Update buyDrumstickBtn for cymbalstick buyDrumstickBtn.updateButton('Cymbalstick', cymbalstickCost, canAffordCymbalstick, cymbalstickCount, false, ''); // Update audience button - unlock when 10 cymbalsticks are purchased var isAudienceLocked = cymbalstickCount < 10; // Unlock when 10 cymbalsticks purchased var audienceLockMessage = isAudienceLocked ? '10 Cymbalstick' : ''; buyMusicianBtn.updateButton('Audience', musicianCost, gold >= musicianCost && !isAudienceLocked, musicians.length, isAudienceLocked, audienceLockMessage); // Keep maracas button locked after cymbal purchase var isMaracasLocked = true; // Always locked when in cymbal view // Lock maracas if cymbal is purchased but maracas not yet unlocked if (unlockedInstruments.includes('cymbal') && !unlockedInstruments.includes('maracas')) { isMaracasLocked = true; } buyInstrumentBtn.updateButton('Maracas', instrumentCosts.maracas, false, instrumentsPurchased, isMaracasLocked, ''); } else { var buttonText = currentInstrument === 'guitar' ? 'Finger' : 'Drumstick'; var purchaseCount = currentInstrument === 'guitar' ? fingersPurchased : drumsticksPurchased; var currentCost = currentInstrument === 'guitar' ? fingerCost : drumstickCost; buyDrumstickBtn.updateButton(buttonText, currentCost, gold >= currentCost, purchaseCount); var isAudienceLocked = guitarPurchased ? fingersPurchased < 10 : drumsticksPurchased < 10; var lockMessage = guitarPurchased ? '10 Fingers' : '10 Drumsticks'; buyMusicianBtn.updateButton('Audience', musicianCost, gold >= musicianCost && !isAudienceLocked, musicians.length, isAudienceLocked, isAudienceLocked ? lockMessage : ''); } // Update instrument button var nextInstrument = null; var cost = 0; if (!unlockedInstruments.includes('guitar')) { nextInstrument = 'guitar'; cost = instrumentCosts.guitar; } else if (!unlockedInstruments.includes('cymbal')) { nextInstrument = 'cymbal'; cost = instrumentCosts.cymbal; } else if (!unlockedInstruments.includes('maracas')) { nextInstrument = 'maracas'; cost = instrumentCosts.maracas; } if (nextInstrument) { var isGuitarLocked = nextInstrument === 'guitar' && musicians.length < 10; var isCymbalLocked = nextInstrument === 'cymbal' && musicians.length < 15; var isMaracasLocked = nextInstrument === 'maracas' && (typeof window.cymbalsticksPurchased === 'undefined' || window.cymbalsticksPurchased < 10); var isLocked = isGuitarLocked || isCymbalLocked || isMaracasLocked; var lockMessage = ''; if (isGuitarLocked) { lockMessage = '10 Audience'; } else if (isCymbalLocked) { lockMessage = '15 Audience'; } else if (isMaracasLocked) { lockMessage = '10 Cymbalstick'; } buyInstrumentBtn.updateButton(nextInstrument.charAt(0).toUpperCase() + nextInstrument.slice(1), cost, gold >= cost && !isLocked, instrumentsPurchased, isLocked, lockMessage); } // Smooth passive income animation if (passiveIncome > 0 && Math.abs(gold - displayedGold) < 0.1) { // Start a new tween for the next second of income var targetGold = gold + passiveIncome; gold = targetGold; // Update actual gold value tween({ value: displayedGold }, { value: targetGold }, { duration: 1000, onFinish: function onFinish() { displayedGold = targetGold; } }); // Update displayedGold during tween var tweenObj = { value: displayedGold }; tween(tweenObj, { value: targetGold }, { duration: 1000, easing: tween.linear, onFinish: function onFinish() { displayedGold = tweenObj.value; } }); Object.defineProperty(tweenObj, 'value', { get: function get() { return displayedGold; }, set: function set(v) { displayedGold = v; } }); } // Save functionality removed - game resets on reload }; // Load functionality removed - game starts fresh on each reload // Play background music LK.playMusic('ambientMusic', { fade: { start: 0, end: 0.3, duration: 2000 } });
===================================================================
--- original.js
+++ change.js
@@ -1927,11 +1927,12 @@
var canAffordCymbalstick = gold >= cymbalstickCost;
var cymbalstickLocked = cymbalstickCount < 10;
// Update buyDrumstickBtn for cymbalstick
buyDrumstickBtn.updateButton('Cymbalstick', cymbalstickCost, canAffordCymbalstick, cymbalstickCount, false, '');
- // Update audience button - keep locked after cymbal purchase
- var isAudienceLocked = true; // Always locked when in cymbal view
- buyMusicianBtn.updateButton('Audience', musicianCost, false, musicians.length, isAudienceLocked, '');
+ // Update audience button - unlock when 10 cymbalsticks are purchased
+ var isAudienceLocked = cymbalstickCount < 10; // Unlock when 10 cymbalsticks purchased
+ var audienceLockMessage = isAudienceLocked ? '10 Cymbalstick' : '';
+ buyMusicianBtn.updateButton('Audience', musicianCost, gold >= musicianCost && !isAudienceLocked, musicians.length, isAudienceLocked, audienceLockMessage);
// Keep maracas button locked after cymbal purchase
var isMaracasLocked = true; // Always locked when in cymbal view
// Lock maracas if cymbal is purchased but maracas not yet unlocked
if (unlockedInstruments.includes('cymbal') && !unlockedInstruments.includes('maracas')) {
Horizontal drumstick for drum 2d pixelart. In-Game asset. 2d. High contrast. No shadows
Drum 2d pixelart. In-Game asset. 2d. no drums
detailed brunette woman from behind pixel art 2d. In-Game asset. 2d. High contrast. No shadows
man pixel art with different clothes
brown yellow haired man pixel art
yellow plus brown haired man pixel art with different colors of clothing
guitar pixel art 2d horizontal. In-Game asset. 2d. High contrast. No shadows
lock pixel art. In-Game asset. 2d. High contrast. No shadows
cymbal instrument pixel art 2d. In-Game asset. 2d. High contrast. No shadows
straight stick pixel art horizontal 2d. In-Game asset. 2d. High contrast. No shadows
maracas instrument pixelart vertical 2d. In-Game asset. 2d. High contrast. No shadows
piano pixelart 2d. In-Game asset. 2d. High contrast. No shadows
pianist man with hat from behind standing in chair without piano pixel art 2d
flute pixel art 2d vertical. In-Game asset. 2d. High contrast. No shadows
disco ball pixel art 2d. In-Game asset. 2d. High contrast. No shadows
Pixel art style
Confetti stick, 2d pixel art vertical. no papers only stick. In-Game asset. 2d. High contrast. No shadows
disco ball pixel art 2d. In-Game asset. 2d. High contrast. No shadows
Make different variations this pixel art change clothes, change hairstyle
make different variations of this pixel art change hairstyle, clothing
make different hairstyle and clothing, you can use cap etc.
make different hairstyle and clothing
make different hairstyle and clothing
make different hairstyle and clothing, you can make punk
make different clothing, you can make it blonde
make different hairstyle and clothing, you can make man wearing hoodie
One Confetti paper pixelart 2d. In-Game asset. 2d. High contrast. No shadows
Remove band clicker write, make drum in the middle
Make it red
Make it green
Make it blue
make it white
make it purple
#F3D296 colour small arrow pixel art. In-Game asset. 2d. High contrast. No shadows
Change writing to the ''MENU''
Make empty pixel art game card. #f3d296 color. In-Game asset. 2d. High quality. No shadows
Remove ball,
Remove stick, left ball alone
Change writing to the ''BPM OPTIONS'' pixel art
Make audio's lines dark black, audio color dark gray. Make x's lines black and inside color red.
Remove audio, left x
Make it brown
Can you make it lighter
make it #7d522e
Money gun pixel art. Without money, horizontal. In-Game asset. 2d. High contrast. No shadows
Make it red box
Make it resd