Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'set')' in this line: 'self.healthBar.anchor.set(0.5, 0.5);' Line Number: 510
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'set')' in this line: 'self.healthBar.anchor.set(0.5, 0.5);' Line Number: 510
Code edit (10 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'set')' in this line: 'self.healthBar.anchor.set(0.5, 0.5);' Line Number: 510
Code edit (3 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: curveBallText.setText is not a function' in this line: 'curveBallText.setText(curveBallTexts[randomCurveTextIndex]);' Line Number: 945
User prompt
show a text similar to hardhittext when hit by a curveball
User prompt
use a random text from hardHitTexts
User prompt
fill the hardHitText array with 10 witty texts about getting hit hard with a snowball
Code edit (1 edits merged)
Please save this source code
Code edit (4 edits merged)
Please save this source code
User prompt
fade out hard hit text and move upwards
Code edit (1 edits merged)
Please save this source code
User prompt
Create a text "Hard hit" when a snowball hits with maximal power
Code edit (1 edits merged)
Please save this source code
User prompt
add 20 more texts to victory texts
User prompt
Create an array with 10 texts. The texts should be short, witty and christmas related and similar to "Sweet victory"
Code edit (3 edits merged)
Please save this source code
User prompt
fade out zombie kids when they die
Code edit (4 edits merged)
Please save this source code
User prompt
how a text "Ninja kids defeted!" in the middle of the screen after a wave is complete. Fade it out upwards
User prompt
add a delay of 500 ms before upgrade screen is shown
Code edit (1 edits merged)
Please save this source code
var HardHitText = Container.expand(function (x, y) { var self = Container.call(this); var hardHitTexts = ['Chilled to the bone!', 'Snowball smackdown!', 'Frosty wallop!', 'Icy impact!', 'Blizzard bash!', 'Snowpocalypse strike!', 'Arctic assault!', 'Winter whack!', 'Hailstone hit!', 'Freeze frame!']; var randomIndex = Math.floor(Math.random() * hardHitTexts.length); var text = new Text2(hardHitTexts[randomIndex], { size: 40, fill: '#009900', weight: 'bold', align: 'center' }); text.anchor.set(0.5, 0.5); self.addChild(text); self.x = x; self.y = y; var fadeStep = 0.005; var moveStep = 1; var moveX = Math.random() * 1 - 0.5; var fadeInterval = LK.setInterval(function () { self.y -= moveStep; self.x += moveX; text.alpha -= fadeStep; if (text.alpha <= 0) { LK.clearInterval(fadeInterval); self.destroy(); } }, 1000 / 60); }); var DamageText = Container.expand(function (damage) { var self = Container.call(this); var damageText = new Text2((Math.round(damage) || '0').toString(), { size: 70, fill: '#ff0000', weight: 'bold', align: 'center' }); damageText.anchor.set(0.5, 0.5); self.addChild(damageText); self.init = function (x, y) { self.targetX = x + (Math.random() * 100 - 50); self.x = x; self.y = y; var fadeStep = 0.05; var moveStep = 1; var fadeInterval = LK.setInterval(function () { self.y -= moveStep; self.x += self.targetX / 1000; damageText.alpha -= fadeStep; if (damageText.alpha <= 0) { LK.clearInterval(fadeInterval); self.destroy(); } }, 3000 / 60); }; }); var HealthBar = Container.expand(function (maxHealth, size) { var self = Container.call(this); var healthBarBg = self.createAsset('healthBarBg', 'Health Bar Background', 0, 0.5); var healthBarFill = self.createAsset('healthBarFill', 'Health Bar Fill', 0, 0.5); healthBarFill.tint = 0x00ff00; self.maxHealth = maxHealth; self.currentHealth = maxHealth; self.updateHealth = function (newHealth) { self.currentHealth = newHealth; var healthPercentage = self.currentHealth / self.maxHealth; healthBarFill.scale.x = healthPercentage; console.log("healthPercentage", healthPercentage); var redValue = (1 - healthPercentage) * 255; var greenValue = healthPercentage * 255; healthBarFill.tint = (redValue << 16) + (greenValue << 8); }; self.init = function () { var sizeMultiplier = size / 5 + 1; healthBarBg.width = 100 * sizeMultiplier; healthBarBg.height = 20 * sizeMultiplier; healthBarFill.width = 100 * sizeMultiplier; healthBarFill.height = 20 * sizeMultiplier; self.addChild(healthBarBg); self.addChild(healthBarFill); }; self.init(); }); var GameOverScreen = Container.expand(function (score) { var self = Container.call(this); var gameOverBg = self.createAsset('gameOverBg', 'Game Over Background', 0, 0); gameOverBg.width = LK.gui.width; console.log("ww", LK.gui.width); gameOverBg.height = LK.gui.height; self.addChild(gameOverBg); var scoreText = new Text2('Score: ' + score, { size: 100, fill: '#ff0000', weight: 'bold', align: 'center' }); scoreText.anchor.set(0.5, 0.5); scoreText.x = LK.gui.width / 2; scoreText.y = 500; self.addChild(scoreText); }); var IntroScreen = Container.expand(function () { var self = Container.call(this); var upgradeBg = self.createAsset('introBg', 'Intro Screen Background', 0, 0); var h = H_GUI; var w = W_GUI; upgradeBg.width = w; upgradeBg.height = h; self.addChild(upgradeBg); var logo = self.createAsset('logo', 'Game Logo', 0.5, 0.5); logo.x = w / 2; logo.y = h / 4 - 75; self.addChild(logo); var playButton = self.createAsset('playButton', 'Play Button', 0.5, 0.5); playButton.x = w / 2; playButton.y = h - 250; var instructionsContainer = new Container(); var instructionsBg = self.createAsset('instructionsBg', 'Instructions Background', 0, 0); instructionsBg.width = w / 1.5; instructionsBg.height = w / 2.2; instructionsBg.alpha = 0.7; instructionsContainer.addChild(instructionsBg); var instructionsText = new Text2('- Tap to throw snowballs!\n\n- Hold to throw harder\n\n- Hold and drag to add spin\n\n\n\nPROTECT THE CHRISTMAS GIFTS!', { size: 45, fill: '#000000', weight: 'bold', align: 'center' }); instructionsText.anchor.set(0.5, 0.5); instructionsText.x = instructionsBg.width / 2; instructionsText.y = instructionsBg.height / 2; instructionsContainer.addChild(instructionsText); instructionsContainer.x = w / 2 - instructionsBg.width / 2; instructionsContainer.y = h / 2 - instructionsBg.height / 2 + 150; self.addChild(instructionsContainer); var playButton2 = self.createAsset('playButton', 'Play Button', 0.5, 0.5); playButton2.x = w / 2; playButton2.y = h - 250; self.addChild(playButton2); self.addChild(playButton); playButton.blendMode = 2; playButton2.blendMode = 1; playButton.on('down', function () { LK.gui.topLeft.removeChild(self); self.destroy(); self.getGameInstance().startNextWave(); }); pulsate(playButton2, 1.1); pulsate(playButton, 1.05); }); var UpgradeItemContainer = Container.expand(function (upgradeType, labelText, infoText, onClickCallback) { var self = Container.call(this); var bg = self.createAsset('upgradeItemBg', 'Upgrade Item Background', 0.5, 0.5); bg.width = W_GUI * 0.6; bg.height = 265; bg.x = W_GUI / 2; bg.y = 95; self.addChild(bg); var text = new Text2(labelText, { size: 40, fill: '#006600', weight: 'bold' }); text.anchor.set(0, 0.5); text.x = W_GUI / 2 - bg.width / 2 + 50; text.y = 8; var textInfo = new Text2(infoText, { size: 30, fill: '#000000', weight: 'bold' }); textInfo.anchor.set(0, 0.5); textInfo.x = text.x; textInfo.y = text.y + 48; var priceText = new Text2('0', { size: 50, fill: '#000000', weight: 'bold', align: 'center' }); priceText.anchor.set(0, 0.5); self.addChild(textInfo); self.addChild(text); self.addChild(priceText); var button = self.createAsset('upgradeButton', 'Upgrade Button', 0.5, 0.5); button.x = W_GUI / 2 + bg.width / 2 - 50; button.y = bg.height / 2 - 45; pulsate(button, 1.02, 0.001); self.addChild(button); var dotContainer = new Container(); var dots = []; for (var i = 0; i < 10; i++) { var dot = self.createAsset('dot', 'Dot Image', 0.5, 1); dot.x = i * 55; dot.scale.x = 3; dot.y = 0; dots.push(dot); dotContainer.addChild(dot); } dotContainer.x = LK.gui.width / 2 - bg.width / 2 + 70; dotContainer.y = bg.height - 70; self.addChild(dotContainer); var coinSprite = self.createAsset('coinSprite', 'Coin Sprite', 0, 0.5); coinSprite.x = text.x - 2; coinSprite.y = text.y + 111; priceText.x = coinSprite.x + coinSprite.width + 20; priceText.y = coinSprite.y + 2; self.addChild(coinSprite); button.on('down', function () { self.buy(); onClickCallback(upgradeType); }); var price = basePrice[upgradeType]; self.update = function () { price = Math.ceil(basePrice[upgradeType] * Math.pow(1.5, upgrades[upgradeType] + 1)); console.log("price", upgradeType, price); priceText.setText(price); for (var i = 0; i < dots.length; i++) { var d = dots[i]; upgrades[upgradeType] > i ? d.tint = 0x00ee00 : d.tint = 0x555555; } if (coinAmount < price) { button.blendMode = 2; button.alpha = 0.5; } else { button.blendMode = 0; alpha = 1; } }; self.buy = function () { if (coinAmount < price) return; coinAmount -= price; self.getGameInstance().wallet.update(); upgrades[upgradeType]++; self.parent.updateAll(); }; self.update(); }); var UpgradeContainer = Container.expand(function () { var self = Container.call(this); var upgradeBg = self.createAsset('upgradeBg', 'Upgrade Background', 0, 0); var h = LK.gui.height; var w = LK.gui.width; upgradeBg.width = w; upgradeBg.height = h; self.addChild(upgradeBg); var upgradeTitleAsset = self.createAsset('upgradeTitle', 'Upgrade Title Asset', 0.5, 0.5); upgradeTitleAsset.x = w / 2; upgradeTitleAsset.y = 230; self.addChild(upgradeTitleAsset); var u1 = new UpgradeItemContainer('snowballs', 'More Ho Ho Ho', 'More snowballs', function () {}); self.addChild(u1); var u2 = new UpgradeItemContainer('strength', 'Increase Christmas Spirit', 'Santa gets stronger', function () {}); self.addChild(u2); var u3 = new UpgradeItemContainer('gifts', 'Boost Joy and Laugter', 'Extra gifts', function () { self.getGameInstance().placeGift(); }); self.updateAll = function () { u1.update(); u2.update(); u3.update(); }; self.addChild(u3); u1.y = 530; u2.y = u1.y + 320; u3.y = u2.y + 320; var playButton = self.createAsset('playButton', 'Play Button', 0.5, 0.5); pulsate(playButton, 1.05); playButton.x = w / 2; playButton.y = h - 270; self.addChild(playButton); playButton.on('down', function () { LK.gui.topCenter.visible = true; self.getGameInstance().startNextWave(); self.destroy(); }); }); var WaveCounterText = Container.expand(function (level) { var self = Container.call(this); var text = new Text2('Wave ' + level, { size: 250, weight: 700, fill: "#005500", align: 'center' }); text.anchor.set(.5, .5); text.x = 2048 / 2 + 100; text.y = 2732 / 2; self.addChild(text); var maxScale = 1.1; var minScale = 0.9; var scaleStep = 0.005; var growing = true; self.scale.x = self.scale.y = minScale; LK.on('tick', function () { if (growing) { text.scale.x += scaleStep; text.scale.y += scaleStep; if (text.scale.x >= maxScale) growing = false; } else { text.scale.x -= scaleStep; text.scale.y -= scaleStep; if (text.scale.x <= minScale) growing = true; } }); LK.setTimeout(function () { var fadeStep = 0.05; var fadeInterval = LK.setInterval(function () { text.alpha -= fadeStep; if (text.alpha <= 0) { LK.clearInterval(fadeInterval); self.destroy(); } }, 1000 / 60); }, 3000); }); var Wallet = Container.expand(function () { var self = Container.call(this); self.setCoinText = function (coinCount) { self.coinText.setText(coinCount.toString()); }; var walletBackground = self.createAsset('walletBg', 'Wallet Background', .5, .5); var walletForeground = self.createAsset('walletFg', 'Wallet Foreground', 1, .5); walletBackground.alpha = 0.5; walletForeground.scale.x = walletForeground.scale.y = .7; self.init = function () { self.x = 1418 - walletBackground.width / 2; self.y = 110; self.coinText = new Text2('' + coinCount, { size: 50, weight: 700, fill: '#000000', align: 'center' }); self.coinText.x = walletForeground.x + 65; self.coinText.y = walletForeground.y; self.coinText.anchor.set(1, 0.5); self.addChild(self.coinText); LK.gui.topLeft.addChildAt(self, LK.gui.topLeft.children.length); }; self.update = function () { self.coinText.setText('' + coinAmount); LK.gui.topLeft.addChildAt(self, LK.gui.topLeft.children.length); }; }); var CoinLayer = Container.expand(function () { var self = Container.call(this); self.coins = []; self.x = 0; self.y = 0; self.addCoin = function (coin) { console.log("add"); self.coins.push(coin); self.addChild(coin); }; self.removeCoin = function (coin) { var index = self.coins.indexOf(coin); if (index > -1) { self.coins.splice(index, 1); coin.destroy(); } }; self.updateCoinDisplay = function () { var gameInstance = self.getGameInstance(); if (gameInstance) { gameInstance.wallet.setCoinText(self.coins.length); } }; }); var Coin = Container.expand(function () { var self = Container.call(this); var coinGraphics = self.createAsset('coin', 'Coin Graphics', .5, .5); self.init = function (coinLayer) { self.x = Math.random() * (2048 - self.width) + self.width / 2; self.y = Math.random() * (2732 - self.height) + self.height / 2; self.coinLayer = coinLayer; coinLayer.addCoin(self); }; self.on('down', function (obj) { console.log('coin down', obj.event.global); self.coinLayer.removeCoin(self); coinAmount += 5; self.getGameInstance().wallet.update(); }); pulsate(self, 1.05, 0.01); }); var Shadow = Container.expand(function () { var self = Container.call(this); var shadowGraphics = self.createAsset('shadow', 'Shadow Graphics', .5, .5); self.follow = function (target) { self.x = target.x - (1 - target.percentFromHalf) * 100; self.y = target.y + (1 - target.percentFromHalf) * 100; var scale = target.scale.x * target.scale.x * 0.7; self.scale.x = self.scale.y = scale; self.scale.x = self.scale.y = scale; self.alpha = .5 * (target.percentFromHalf + .2); }; }); var Aim = Container.expand(function () { var self = Container.call(this); var aimGraphics = self.createAsset('aim', 'Aim Graphics', .5, .5); }); var ParticleSplash = Container.expand(function (didHit) { var self = Container.call(this); var particleSplashGraphics = self.createAsset('particleSplash', 'Particle Splash Graphics', .5, .5); var randomScale = 0.5 + Math.random() * 0.5; var alpha = 0.5 + Math.random() * 0.5; if (!didHit) randomScale *= 0.5; self.scale.x = randomScale; self.scale.y = randomScale; self.directionX = Math.random() * 2 - 1; self.directionY = Math.random() * 2 - 1; if (!didHit) { self.directionX *= 0.2; self.directionY *= 0.2; } self.animate = function () { if (didHit) self.alpha -= 0.01; else self.alpha -= 0.03; self.x += self.directionX; self.y += self.directionY; if (self.alpha <= 0) { self.destroy(); } }; }); var Snowball = Container.expand(function () { var self = Container.call(this); var snowballGraphics = self.createAsset('snowball', 'Snowball Graphics', .5, .5); self.speed = Math.pow(1.2, upgrades.snowballs + 1) * -10; self.speedX = 0; self.speedY = 0; self.totalDistance = 0; self.spinX = 10; self.moves = 0; self.move = function () { self.moves++; self.totalDistance = Math.sqrt(Math.pow(self.startX - self.x, 2) + Math.pow(self.y - self.startY, 2)); var halfDistance = self.targetTotalDistance / 2; var distanceFromHalf = 0; if (self.totalDistance < halfDistance) distanceFromHalf = halfDistance - self.totalDistance; else distanceFromHalf = self.totalDistance - halfDistance; var percentFromHalf = distanceFromHalf / halfDistance; self.percentFromHalf = percentFromHalf; if (percentFromHalf > 1.1) { self.shouldBeDestroyed = true; } else { var scaleAdj = 2 - percentFromHalf * 1.2; self.scale.x = 1 + scaleAdj; self.scale.y = 1 + scaleAdj; self.rotation += self.spinX; self.mayHit = scaleAdj < 0.8; self.x += self.speedX + self.spinX * self.moves * 3; self.y += self.speedY + self.spinY * 100; if (self.shadow) self.shadow.follow(self); } }; self.init = function () { self.targetTotalDistance = Math.sqrt(Math.pow(self.targetX - self.x, 2) + Math.pow(self.y - self.targetY, 2)); self.shadow = new Shadow(); self.shadow.follow(self); LK.stage.addChild(self.shadow); LK.stage.addChild(self); self.spinX = -self.spinX / 5000; self.spinY = -self.spinY / 5000; console.log(self.spinX, self.spinY); }; self.die = function () { self.shadow && self.shadow.destroy(); self.aim && self.aim.destroy(); self.destroy(); }; }); var ZombieKid = Container.expand(function (size) { var self = Container.call(this); ZombieKid.prototype.startFadeOut = function () { var self = this; var fadeStep = 0.05; self.healthBar.visible = false; var fadeInterval = LK.setInterval(function () { self.alpha -= fadeStep; if (self.alpha <= 0) { LK.clearInterval(fadeInterval); self.destroy(); var index = self.getGameInstance().zombieKids.indexOf(self); if (index > -1) { self.getGameInstance().zombieKids.splice(index, 1); } } }, 1000 / 60); }; self.size = size; var zombieKidGraphics; switch (self.size) { case 1: zombieKidGraphics = self.createAsset('zombieKidSmall', 'Small Zombie Kid Graphics', .5, 0.8); break; case 2: zombieKidGraphics = self.createAsset('zombieKidMedium', 'Medium Zombie Kid Graphics', .5, 0.8); break; case 3: zombieKidGraphics = self.createAsset('zombieKidLarge', 'Large Zombie Kid Graphics', .5, 0.8); break; case 4: zombieKidGraphics = self.createAsset('zombieKidXLarge', 'Extra Large Zombie Kid Graphics', .5, 0.8); break; case 5: zombieKidGraphics = self.createAsset('zombieKidXXLarge', 'Extra Extra Large Zombie Kid Graphics', .5, 0.8); break; default: zombieKidGraphics = self.createAsset('zombieKid', 'Default Zombie Kid Graphics', .5, 0.8); } var health = [20, 50, 100, 200, 500][self.size - 1]; self.healthBar = new HealthBar(health, self.size); self.healthBar.y = 80; self.healthBar.x = -self.healthBar.width / 2; self.addChild(self.healthBar); self.speed = (Math.random() * 2 + 1.3) * (1 - (self.size - 1) * 0.1); self.hasGift = false; self.pickedUpGift = null; self.findNewTarget = function () { var availableGifts = []; if (this.parent) { availableGifts = this.parent.children.filter(function (child) { return child instanceof ChristmasGift && !child.isDestroyed && !child.hasBeenPickedUp; }); } if (availableGifts.length > 0) { var randomIndex = Math.floor(Math.random() * availableGifts.length); this.targetGift = availableGifts[randomIndex]; } }; self.move = function () { if (!self.hasGift) { if (self.targetGift) { var dx = self.targetGift.x - self.x; var dy = self.targetGift.y - self.y; } var angle = Math.atan2(dy, dx); var mx = Math.cos(angle) * self.speed; if (mx < 0) self.scale.x = -1; else self.scale.x = 1; if (mx < 0) self.healthBar.scale.x = -1; else self.healthBar.scale.x = 1; if (mx < 0) self.healthBar.x = -self.healthBar.width / 2; else self.healthBar.width / 2; mx += +Math.random() * self.speed; self.x += mx; self.y += Math.sin(angle) * self.speed + Math.random() * self.speed * .5; if (self.targetGift && !self.targetGift.isDestroyed && !self.targetGift.hasBeenPickedUp && Math.abs(self.x - self.targetGift.x) < 10 && Math.abs(self.y - self.targetGift.y + 50) < 50) { self.hasGift = true; self.exitDirection = Math.random() < .5 ? -1 : 1; self.targetGift.hasBeenPickedUp = true; self.targetGift.owner = self; self.pickedUpGift = self.targetGift; if (self.pickedUpGift.parent) { self.pickedUpGift.parent.setChildIndex(self.pickedUpGift, self.pickedUpGift.parent.children.length - 1); } } else if (!self.targetGift || self.targetGift.isDestroyed || self.targetGift.hasBeenPickedUp) { self.findNewTarget(); } } else { if (self.hasGift && !self.speedIncreased) { self.speed *= 1.5; self.speedIncreased = true; } var mx = self.speed * self.exitDirection; if (mx < 0) self.scale.x = -1; else self.scale.x = 1; if (mx < 0) self.healthBar.scale.x = -1; else self.healthBar.scale.x = 1; if (mx < 0) self.healthBar.x = -self.healthBar.width / 2; else self.healthBar.width / 2; self.x += mx; self.y -= self.speed * Math.random(); if (self.pickedUpGift) { self.pickedUpGift.x = self.x; self.pickedUpGift.y = self.y + 30; self.pickedUpGift.hasBeenPickedUp = true; } } }; }); var Santa = Container.expand(function () { var self = Container.call(this); var santaGraphics = self.createAsset('santa', 'Santa Graphics', .5, .5); }); var ChristmasGift = Container.expand(function () { var self = Container.call(this); self.offScreenHandler = function () { if (self.y > 2732 || self.x < 0 || self.x > 2048 || self.y < 0) { self.flaggedForRemoval = true; } }; var giftTypes = ['christmasGift1', 'christmasGift2', 'christmasGift3']; var randomType = giftTypes[Math.floor(Math.random() * giftTypes.length)]; var christmasGiftGraphics = self.createAsset(randomType, 'Christmas Gifts Graphics', 0.5, 1); self.x = Math.random() * 1536 + 256; self.y = Math.random() * 1532 + 500; }); var ProgressBar = Container.expand(function () { var self = Container.call(this); var progressBarGraphics = self.createAsset('progressBar2', 'Progress Bar Graphics', 0.5, 0.5); self.updateProgress = function (progress) { progressBarGraphics.scale.x = progress; self.alpha = Math.max(progress, 0.15); }; self.init = function () { self.x = LK.gui.width / 2; self.y = LK.gui.height - 25; LK.gui.topLeft.addChild(self); }; self.alpha = 0.45; self.maxScale = LK.gui.width / 100; self.scale.x = self.maxScale; self.height = 45; self.init(); }); var W_GUI = 1440; var H_GUI = 1920; var coinAmount = 0; var coinCount = 0; var snowballUpgrades = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; var baseStrength = .5; var upgrades = { snowballs: 0, strength: 0, gifts: 0 }; var basePrice = { snowballs: 10, strength: 5, gifts: 1 }; function upgrade(type) { console.log("upgrade", type); } function pulsate(item, amount, scaleStep) { var maxScale = 1 * amount; var minScale = 1 / amount; var scaleStep = scaleStep || 0.004; var growing = true; item.scale.x = minScale; item.scale.y = minScale; LK.on('tick', function () { if (growing) { item.scale.x += scaleStep; item.scale.y += scaleStep; if (item.scale.x >= maxScale) growing = false; } else { item.scale.x -= scaleStep; item.scale.y -= scaleStep; if (item.scale.x <= minScale) growing = true; } }); } ; Container.prototype.getGameInstance = function () { var currentParent = this.parent; while (currentParent) { if (currentParent instanceof Game) { return currentParent; } currentParent = currentParent.parent; } if (currentParent === LK.stage) { return currentParent; } return LK.stage.children.find(function (child) { return child instanceof Game; }); }; var currentLevel = 0; var levels = [{ zombieKidSizes: [1, 1, 2] }, { zombieKidSizes: [1, 1, 2, 2] }, { zombieKidSizes: [1, 1, 2, 2, 2, 3] }, { zombieKidSizes: [5] }, { zombieKidSizes: [2, 2, 2, 3, 4] }, { zombieKidSizes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] }, { zombieKidSizes: [1, 1, 2, 2, 3, 3, 4, 4] }, { zombieKidSizes: [5, 5] }, { zombieKidSizes: [1, 1, 2, 2, 3, 3, 4, 4, 5] }, { zombieKidSizes: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] }, { zombieKidSizes: [3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }, { zombieKidSizes: [1, 1, 2, 2, 3, 3, 4, 4, 4] }, { zombieKidSizes: [5, 5, 5, 5] }, { zombieKidSizes: [1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4] }, { zombieKidSizes: [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5] }, { zombieKidSizes: [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5] }, { zombieKidSizes: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2] }, { zombieKidSizes: [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3] }, { zombieKidSizes: [4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4] }, { zombieKidSizes: [5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5] }, { zombieKidSizes: [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] }]; var Game = Container.expand(function () { var self = Container.call(this); console.log(LK.gui.width, LK.gui.height); Game.prototype.spawnSnowParticles = function (snowball, didHit) { var splashes = Math.abs(snowball.speedX) + Math.abs(snowball.speedY); for (var i = 0; i < Math.max(5, splashes / 5); i++) { var particleSplash = new ParticleSplash(didHit); particleSplash.x = snowball.x; particleSplash.y = snowball.y; particleSplash.directionX *= snowball.speedY; particleSplash.directionY *= snowball.speedY; this.addChild(particleSplash); } }; self.waveInProgress = false; self.showUpgradeContainer = function () { self.waveInProgress = false; var upgradeContainer = new UpgradeContainer(); LK.gui.topLeft.addChild(upgradeContainer); self.wallet.update(); LK.gui.topCenter.visible = false; }; var introScreen = new IntroScreen(); LK.gui.topLeft.addChild(introScreen); LK.gui.topCenter.visible = false; self.progressBar = new ProgressBar(); self.zombieKids = []; self.spawnZombieKids = function () { self.christmasGifts = self.christmasGifts || []; var zombieKidSizes = levels[currentLevel].zombieKidSizes || []; var adjustedLength = currentLevel <= 5 ? zombieKidSizes.length : Math.ceil(zombieKidSizes.length * 0.8); for (var i = 0; i < adjustedLength; i++) { var newZombieKid = new ZombieKid(zombieKidSizes[i]); newZombieKid.speed = self.zombieKidSpeed; newZombieKid.x = Math.random() * (2448 - newZombieKid.width); -200; newZombieKid.y = Math.random() * 2000 - 500; if (newZombieKid.y > 0) { newZombieKid.x = Math.random() < 0.5 ? -200 : 2448; } self.zombieKids.push(newZombieKid); self.addChild(newZombieKid); } }; self.startNextWave = function () { console.log("Start level", currentLevel); self.wallet.visible = true; if (currentLevel < levels.length) { var level = levels[currentLevel]; self.numZombieKids = level.zombieKidSizes.length; self.coinFrequency = level.coinFrequency; self.zombieKidSpeed = 2 + 0.2 * currentLevel; self.spawnZombieKids(); currentLevel++; var waveCounterTxt = new WaveCounterText(currentLevel); self.addChild(waveCounterTxt); self.waveInProgress = true; LK.setTimeout(function () { var coin = new Coin(); coin.init(self.coinLayer); }, Math.random() * 5000); } }; var background = self.createAsset('background', 'Full Screen Background', 0, 0); background.width = 2048; background.height = 2732; self.isThrowing = false; self.addChildAt(background, 0); self.coinLayer = new CoinLayer(); self.addChild(self.coinLayer); var santa = self.addChild(new Santa()); santa.x = 2048 / 2; santa.y = 2732 - santa.height / 2 - 170; self.christmasGifts = self.christmasGifts || []; var placedGifts = 0; var tries = 0; self.placeGift = function () { var gift = new ChristmasGift(); pulsate(gift, 1.03, 0.002); var intersects = false; for (var j = 0; j < self.christmasGifts.length; j++) { if (gift === self.christmasGifts[j]) continue; if (Math.abs(gift.x - self.christmasGifts[j].x) < 150 && Math.abs(gift.y - self.christmasGifts[j].y) < 150) intersects = true; } if (!intersects) { self.christmasGifts.push(gift); self.addChild(gift); placedGifts++; } }; while (placedGifts < 10) { tries++; if (tries > 1000) break; self.placeGift(); } var scoreTxt = new Text2('0', { size: 150, weight: 700, fill: "#000000" }); self.wallet = new Wallet(); self.wallet.init(); self.wallet.visible = false; self.coinLayer = new CoinLayer(); self.addChild(self.coinLayer); scoreTxt.anchor.set(0.5, 0.5); scoreTxt.x = 0; scoreTxt.y = 100; LK.gui.topCenter.addChild(scoreTxt); self.updateScoreDisplay = function () { scoreTxt.setText(LK.getScore().toString()); }; self.updateScoreDisplay(); self.snowballs = []; var touchStartTime = 0; self.removeSnowball = function (snowball) { var a = self.snowballs.indexOf(snowball); if (self.snowballs[a].aim) self.snowballs[a].aim.destroy(); if (self.snowballs[a].shadow) self.snowballs[a].shadow.destroy(); self.snowballs.splice(a, 1); snowball.destroy(); }; self.showGameOverScreen = function () { var gameOverScreen = new GameOverScreen(LK.getScore()); LK.gui.topLeft.addChild(gameOverScreen); LK.setTimeout(function () { LK.showGameOver(); }, 3000); }; self.spawnAim = function (pos) { var aim = new Aim(); self.currentAim = aim; aim.x = pos.x; aim.y = pos.y; var progress = 0; aim.scale.x = aim.scale.y = 0.5 + progress * 0.5; self.addChild(aim); self.lastAim = aim; aim.tweenToAlpha = function (targetAlpha, duration) { var step = (1 - targetAlpha) / (duration * 60); var fadeInterval = LK.setInterval(function () { aim.alpha -= step; if (aim.alpha <= targetAlpha) { LK.clearInterval(fadeInterval); aim.destroy(); } }, 1000 / 60); }; aim.tweenToAlpha(0, 3); }; stage.on('down', function (obj) { touchStartTime = LK.ticks; isThrowing = true; var event = obj.event; var pos = event.getLocalPosition(self); self.downPos = pos; santa.baseRotation = Math.atan2(pos.y - santa.y, pos.x - santa.x) + Math.PI * 0.6; self.aimPosition = pos; if (self.snowballs.length < upgrades.snowballs + 2) { self.spawnAim(pos); } }); stage.on('up', function (obj) { if (self.aim) { self.aim.destroy(); self.aim = null; } self.progressBar.updateProgress(0); santa.rotation = santa.baseRotation; isThrowing = false; if (self.snowballs.length < upgrades.snowballs + 2 && self.aimPosition) { var newSnowball = new Snowball(self.currentAim); newSnowball.x = santa.x + 230; ; newSnowball.y = santa.y; newSnowball.startX = santa.x + 120; newSnowball.startY = santa.y; newSnowball.aim = self.currentAim; var endPos = obj.event.getLocalPosition(self); newSnowball.spinX = self.downPos.x - endPos.x; newSnowball.spinY = self.downPos.y - endPos.y; var aim = 0.5; var missDistance = 300; var missX = Math.random() * missDistance - missDistance / 2; var missY = Math.random() * missDistance - missDistance / 2; newSnowball.targetX = self.aimPosition.x + +missX * aim; newSnowball.targetY = self.aimPosition.y + missY * aim; ; newSnowball.init(); var dx = newSnowball.targetX - newSnowball.x + newSnowball.spinX * 0.5; var dy = newSnowball.targetY - newSnowball.y; var distance = Math.sqrt(dx * dx + dy * dy); var throwSpeed = 1.5 + upgrades.strength * 0.3; var touchDuration = LK.ticks - touchStartTime; touchDuration = Math.min(touchDuration, 30); var speedMultiplier = Math.max(touchDuration / 15, 1) * throwSpeed; newSnowball.isMaxPower = touchDuration >= 29; newSnowball.speedMultiplier = speedMultiplier; var aim = 0.5; var missDistance = 20; var missX = Math.random() * missDistance - missDistance / 2; var missY = Math.random() * missDistance - missDistance / 2; newSnowball.speedX = -dx / distance * newSnowball.speed * speedMultiplier; newSnowball.speedY = -Math.abs(dy / distance * newSnowball.speed) * speedMultiplier; self.snowballs.push(newSnowball); self.aimPosition = null; } self.currentAim = null; }); LK.on('tick', function () { var zombieKids = self.zombieKids; if (touchStartTime > 0 && isThrowing) { var progress = Math.min((LK.ticks - touchStartTime) / 30, 1); self.progressBar.updateProgress(progress); santa.rotation = santa.baseRotation + progress * Math.PI * 2 / 10; if (self.aim) { self.aim.scale.x = self.aim.scale.y = 0.5 + progressBarGraphics.scale.x * 0.5; } if (self.currentAim) { self.currentAim.scale.x = 0.2 + progress; self.currentAim.scale.y = 0.2 + progress; } } for (var a = self.snowballs.length - 1; a >= 0; a--) { if (self.snowballs[a]) { self.snowballs[a].move(); for (var b = self.zombieKids.length - 1; b >= 0; b--) { if (zombieKids[b] && self.snowballs[a] && self.snowballs[a].intersects(zombieKids[b]) && self.snowballs[a].mayHit) { LK.setScore(LK.getScore() + currentLevel); coinAmount += 1; self.wallet.update(); self.updateScoreDisplay(); self.spawnSnowParticles(self.snowballs[a], true); var damage = 20 + (self.snowballs[a].speedMultiplier - 1) * 10; if (self.snowballs[a].isMaxPower || Math.abs(self.snowballs[a].spinX) + Math.abs(self.snowballs[a].spinY) > 20) { var curveBallTexts = ['Curvy comeback!', 'Twisty takedown!', 'Spiral smack!', 'Whirling wallop!', 'Corkscrew crash!', 'Swirling strike!', 'Helix hit!', 'Arcing assault!', 'Gyroscopic gale!', 'Rotating retribution!']; var randomCurveTextIndex = Math.floor(Math.random() * curveBallTexts.length); var curveBallText = new HardHitText(self.snowballs[a].x, self.snowballs[a].y - 50); curveBallText.setText(curveBallTexts[randomCurveTextIndex]); self.addChild(curveBallText); } var damageText = new DamageText(damage); self.addChild(damageText); damageText.init(self.snowballs[a].x, self.snowballs[a].y); if (zombieKids[b].hasGift) { var droppedGift = zombieKids[b].pickedUpGift; droppedGift.x = zombieKids[b].x; droppedGift.y = zombieKids[b].y; droppedGift.hasBeenDropped = true; droppedGift.hasBeenPickedUp = false; } zombieKids[b].healthBar.updateHealth(zombieKids[b].healthBar.currentHealth - damage); if (zombieKids[b].healthBar.currentHealth <= 0) { zombieKids[b].startFadeOut(); } self.removeSnowball(self.snowballs[a]); break; } } if (self.snowballs[a] && (self.snowballs[a].y < -50 || self.snowballs[a].shouldBeDestroyed)) { self.removeSnowball(self.snowballs[a]); } } } if (self.zombieKids.length === 0 && self.waveInProgress && currentLevel > 0) { self.waveInProgress = false; var victoryTexts = ['Jingle all the way!', 'Ho-ho-holy win!', 'Frosty finish!', 'Sleighed it!', 'Yule rock!', 'Elf-tastic!', 'Merry victory!', 'Santa-tastic!', 'Chimney champion!', 'Ornament overlord!', 'Sleigh bell boss!', 'Mistletoe master!', 'Holiday hero!', 'Winter wizard!', 'Eggnog emperor!']; var randomVictoryText = victoryTexts[Math.floor(Math.random() * victoryTexts.length)]; var victoryText = new Text2(randomVictoryText, { size: 100, fill: '#da1c13', weight: 'bold', align: 'center' }); victoryText.anchor.set(0.5, 0.5); victoryText.x = LK.gui.width / 2; victoryText.y = LK.gui.height / 2; LK.gui.topLeft.addChild(victoryText); var fadeStep = 0.005; var moveStep = 1; var fadeInterval = LK.setInterval(function () { victoryText.y -= moveStep; victoryText.alpha -= fadeStep; if (victoryText.alpha <= 0) { LK.clearInterval(fadeInterval); victoryText.destroy(); } }, 1000 / 60); LK.setTimeout(function () { self.showUpgradeContainer(); }, 2000); } for (var b = self.zombieKids.length - 1; b >= 0; b--) { if (zombieKids[b]) { zombieKids[b].move(); } } for (var c = self.children.length - 1; c >= 0; c--) { if (self.children[c] instanceof ParticleSplash) { self.children[c].animate(); } } for (var j = 0; j < self.christmasGifts.length; j++) { self.christmasGifts[j].offScreenHandler(); if (self.christmasGifts[j].flaggedForRemoval) { self.christmasGifts[j].owner.hasGift = false; self.christmasGifts[j].owner.targetGift = false; self.christmasGifts[j].destroy(); self.christmasGifts.splice(j, 1); if (self.christmasGifts.length === 0) { self.showGameOverScreen(); } } } }); });
===================================================================
--- original.js
+++ change.js
@@ -937,12 +937,14 @@
self.wallet.update();
self.updateScoreDisplay();
self.spawnSnowParticles(self.snowballs[a], true);
var damage = 20 + (self.snowballs[a].speedMultiplier - 1) * 10;
- if (self.snowballs[a].isMaxPower) {
- console.log("HARD");
- var hardHitText = new HardHitText(self.snowballs[a].x, self.snowballs[a].y - 50);
- self.addChild(hardHitText);
+ if (self.snowballs[a].isMaxPower || Math.abs(self.snowballs[a].spinX) + Math.abs(self.snowballs[a].spinY) > 20) {
+ var curveBallTexts = ['Curvy comeback!', 'Twisty takedown!', 'Spiral smack!', 'Whirling wallop!', 'Corkscrew crash!', 'Swirling strike!', 'Helix hit!', 'Arcing assault!', 'Gyroscopic gale!', 'Rotating retribution!'];
+ var randomCurveTextIndex = Math.floor(Math.random() * curveBallTexts.length);
+ var curveBallText = new HardHitText(self.snowballs[a].x, self.snowballs[a].y - 50);
+ curveBallText.setText(curveBallTexts[randomCurveTextIndex]);
+ self.addChild(curveBallText);
}
var damageText = new DamageText(damage);
self.addChild(damageText);
damageText.init(self.snowballs[a].x, self.snowballs[a].y);
a christmas gift Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
red crosshair Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
snowball of soft snow Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Christmas gift with glowing green wrapping paper Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a christmas gift in beautiful glowing wrapping paper Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Christmas gift beautifully wrapped in green glowing wrapping paper Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Snowy flat surface viewed from above at nighttime Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
an empty painting with a winter styled frame Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a kid thief in wearing a black hoodie. Also looking like a zombie Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A button with the text "play". Winter theme Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A winter themed button, with no text Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A buy upgrade button, winter theme, no text Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a wide white sheet of paper Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a snowball Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a snowball
A game over screen for the game "Snowball Santa". Santa is very sad because all the presents has been stolen from ninja kids. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A wooden sign with text "UPGRADES" in a winter theme. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A ninja kid thief, full body, with a dark purple hoodie. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A ninja kid thief, full body, with a dark colored hoodie. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A ninja kid thief, full body, with a dark colored hoodie. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a precious colorful glowing gem with snow and ice on it. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a logo for the game "Snowball santa" with the text "Snowball Santa". Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A beautiful winter snowy christmas landscape with ninja thieves kids lurking. Christmas gifts are hidden in the snow. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.