User prompt
During present frenzy, presents also temporarily move 100% faster
User prompt
the present frenzy powerup fires from 80 to 100 degrees and the rate of fire increase is 400%
User prompt
Instead of plus or minus 20 degrees, the present frenzy powerup fires from 70 to 110 degrees
User prompt
Fix Bug: 'ReferenceError: allowPresentAngle is not defined' in this line: 'if (allowPresentAngle) {' Line Number: 305
User prompt
Create powerup name: “Present Frenzy!” description “Burst of presents” effect: For the next 7 seconds, Santa's rate of fire is increased by 250% and presents can fire plus or minus 20 degrees of straight ahead. Cancel both these effects after those 7 seconds.
User prompt
Create powerup name: “Better Presents!” description “Fewer presents needed” effect: reduce the number of presents needed to make a house happy by one, and increase the number of points and xp granted by the first present hitting a nice house by one.
User prompt
More Reindeer should make you fly 60% faster instead
User prompt
Don't write the word "name" after each powerup's name on the buttons
User prompt
Delete the Increase Speed powerup
User prompt
If a present or a house is ever still for more than .1 seconds, despawn it
User prompt
The moment the Time Zones powerup is selected, refresh the clock's time remaining. Don't wait until the next second tick to do so.
User prompt
Fix Bug: 'Error: [object Object]addChildAt: The index -1 supplied is out of bounds 15' in this line: 'self.addChildAt(present, buttonIndex);' Line Number: 290
User prompt
Powerup name: “Time Zones!” description “Add 10 seconds” effect: add 10 seconds to the time remaining
User prompt
Create powerup name: “More Reindeer!” description “Fly faster” effect: increase Santa’s movement speed by 30%
User prompt
Create powerup name: “Pitching Arm!” description: “Throw more presents” effect: increase Santa’s rate of fire by 35%
User prompt
The powerup offered in the left and right button is chosen randomly from the list of available powerups.
User prompt
Center align the Powerup Description text
User prompt
Fix Bug: 'Error: [object Object]addChildAt: The index -1 supplied is out of bounds 2' in this line: 'self.addChildAt(present, self.children.indexOf(buttons[0]));' Line Number: 263
User prompt
Fix Bug: 'Error: [object Object]addChildAt: The index -1 supplied is out of bounds 2' in this line: 'self.addChildAt(present, self.children.indexOf(buttons[0]));' Line Number: 263
User prompt
Fix Bug: 'Uncaught Error: [object Object]addChildAt: The index -1 supplied is out of bounds 0' in this line: 'self.addChildAt(house, self.children.indexOf(buttons[0]));' Line Number: 239
User prompt
Bullets and houses can never render above buttons
User prompt
The powerup offered in the left and right button is chosen randomly from the list of available powerups. Here are three to start. Powerup name: “Pitching Arm!” description: “Throw more presents” effect: increase Santa’s rate of fire by 30% Powerup name: “More Reindeer!” description “Fly faster” effect: increase Santa’s movement speed by 30% Powerup name: “Time Zones!” description “Add 10 seconds” effect: add 10 seconds to the time remaining
User prompt
The buttons and their text always render on top of the other game objects
User prompt
Lower the button text for names and descriptions by 40 pixels
User prompt
Center align the Powerup Description text
var Button = Container.expand(function (label, onClick) { var self = Container.call(this); var buttonGraphics = self.createAsset('button', label, 0.5, 0.5); buttonGraphics.scale.set(4); buttonGraphics.interactive = true; buttonGraphics.buttonMode = true; var nameLabel = new Text2(label.split(' ').reduce(function (acc, word) { if (acc.length && acc[acc.length - 1].length + word.length <= 12) { acc[acc.length - 1] += ' ' + word; } else { acc.push(word); } return acc; }, []).join('\n') + ' Name', { size: 50, fill: '#ffffff', align: 'center' }); nameLabel.anchor.set(0.5); nameLabel.y = -buttonGraphics.height / 2 - (label.length > 12 ? 25 : 0) + 40; self.addChild(nameLabel); var descriptionLabel = new Text2(label.split(' ').reduce(function (acc, word) { if (acc.length && acc[acc.length - 1].length + word.length <= 12) { acc[acc.length - 1] += ' ' + word; } else { acc.push(word); } return acc; }, []).join('\n') + ' Description', { size: 30, fill: '#ffffff' }); descriptionLabel.anchor.set(0.5); descriptionLabel.y = buttonGraphics.height / 2 + 240; if (label === 'Pitching Arm!') { descriptionLabel.setText('Throw more presents'); } else if (label === 'More Reindeer!') { descriptionLabel.setText('Fly faster'); } else if (label === 'Time Zones!') { descriptionLabel.setText('Add 10 seconds'); } descriptionLabel.anchor.set(0.5); descriptionLabel.x = 0; self.addChild(descriptionLabel); self.on('down', function (obj) { onClick(); }); }); var Present = Container.expand(function () { var self = Container.call(this); var presentGraphics = self.createAsset('present', 'Present Graphics', .5, .5); self.speed = -10; self.move = function () { self.y += self.speed; }; }); var NaughtyHouse = Container.expand(function () { var self = Container.call(this); var houseGraphics = self.createAsset('naughtyHouse', 'Naughty House Graphics', .5, .5); houseGraphics.tint = 0xFF0000; self.speed = 2; self.move = function () { self.y += self.speed; if (self.y > 2732 + self.height) { self.destroy(); } }; }); var NiceHouse = Container.expand(function () { var self = Container.call(this); var houseGraphics = self.createAsset('niceHouse', 'Nice House Graphics', .5, .5); houseGraphics.tint = 0x00FF00; self.speed = 2; self.hitCount = 0; self.move = function () { self.y += self.speed; if (self.y > 2732 + self.height) { self.destroy(); } }; }); var HappyHouse = Container.expand(function () { var self = Container.call(this); var houseGraphics = self.createAsset('happyHouse', 'Happy House Graphics', .5, .5); houseGraphics.tint = 0xFFFF00; self.speed = 2; self.move = function () { self.y += self.speed; if (self.y > 2732 + self.height) { self.destroy(); } }; }); var DarkHouse = Container.expand(function () { var self = Container.call(this); var houseGraphics = self.createAsset('darkHouse', 'Dark House Graphics', .5, .5); houseGraphics.tint = 0x808080; self.speed = 2; self.move = function () { self.y += self.speed; if (self.y > 2732 + self.height) { self.destroy(); } }; }); var Santa = Container.expand(function () { var self = Container.call(this); var santaGraphics = self.createAsset('santa', 'Santa Graphics', .5, .5); self.targetPosition = null; self.moveSpeed = 5; self.move = function (position) { if (position) { self.targetPosition = position; } if (self.targetPosition) { var dx = self.targetPosition.x - self.x; var dy = self.targetPosition.y - self.y; var distance = Math.sqrt(dx * dx + dy * dy); if (distance > 1) { var angle = Math.atan2(dy, dx); var tentativeX = self.x + Math.cos(angle) * self.moveSpeed; var tentativeY = self.y + Math.sin(angle) * self.moveSpeed; self.x = tentativeX; if (tentativeY > 2732 - 2732 / 3) { self.y = tentativeY; } } else { if (self.targetPosition.y > 2732 - 2732 / 3) { self.x = self.targetPosition.x; self.y = self.targetPosition.y; } self.targetPosition = null; } } }; }); var Game = Container.expand(function () { var self = Container.call(this); function checkRankUp() { var xpThreshold = Math.floor(6 * Math.pow(1.35, rank - 1)); if (xp >= xpThreshold) { rank++; xp = 0; rankTxt.setText('Rank: ' + rank); updateXPDisplay(); self.spawnButtons(); } } var countdown = 60; var score = 0; var scoreTxt = new Text2('Score: ' + score, { size: 75, fill: "#ffffff" }); scoreTxt.anchor.set(0, 0); scoreTxt.x += 50; scoreTxt.y += 30; LK.gui.topLeft.addChild(scoreTxt); var timerTxt = new Text2(countdown.toString(), { size: 150, fill: "#ffffff" }); timerTxt.anchor.set(.5, 0); LK.gui.topCenter.addChild(timerTxt); var xp = 0; var rank = 1; var rankTxt = new Text2('Rank: ' + rank, { size: 75, fill: "#ffffff" }); rankTxt.anchor.set(0, 0); rankTxt.x = timerTxt.x + timerTxt.width + 230; rankTxt.y = scoreTxt.y; LK.gui.topCenter.addChild(rankTxt); var xpDisplayTxt = new Text2(xp + ' / ' + 6 * (rank - 1 + 1), { size: 75, fill: "#ffffff" }); xpDisplayTxt.anchor.set(0, 0); xpDisplayTxt.x = rankTxt.x; xpDisplayTxt.y = rankTxt.y + rankTxt.height + 20; LK.gui.topCenter.addChild(xpDisplayTxt); function updateXPDisplay() { var xpThreshold = Math.floor(6 * Math.pow(1.35, rank - 1)); xpDisplayTxt.setText(xp + ' / ' + xpThreshold); } function addXP(amount) { if (amount > 0) { xp += amount; checkRankUp(); } updateXPDisplay(); } var timer = LK.setInterval(function () { countdown--; timerTxt.setText(countdown.toString()); if (countdown <= 0) { LK.clearInterval(timer); LK.showGameOver(); } }, 1000); var houses = []; var buttons = []; self.spawnButtons = function () { buttons.forEach(function (button) { button.destroy(); }); buttons = []; var powerups = [{ label: 'Increase Speed', action: function () { santa.moveSpeed *= 1.5; } }, { label: 'Pitching Arm!', action: function () { presentFireRate *= 0.65; } }, { label: 'More Reindeer!', action: function () { santa.moveSpeed *= 1.3; } }, { label: 'Time Zones!', action: function () { countdown += 10; } }]; var chosenPowerups = powerups.sort(function () { return 0.5 - Math.random(); }).slice(0, 2); chosenPowerups.forEach(function (powerup, index) { var button = new Button(powerup.label, function () { powerup.action(); buttons.forEach(function (btn) { btn.destroy(); }); }); button.x = 2048 / 2 + (index === 0 ? -300 : 300); button.y = 2732 / 2 - 100; buttons.push(button); self.addChild(button); }); }; self.spawnHouse = function () { var nextSpawnTime = Math.random() * 1000 + 1000; var newHouseX = Math.random() * 2048; var newHouseY = -Math.random() * 500; var canSpawn = true; for (var i = 0; i < houses.length; i++) { var house = houses[i]; if (Math.abs(newHouseX - house.x) < house.width && Math.abs(newHouseY - house.y) < house.height) { canSpawn = false; break; } } if (canSpawn) { var houseTypes = [NaughtyHouse, NiceHouse]; var randomIndex = Math.random() < 0.34 ? 0 : 1; var house = new houseTypes[randomIndex](); house.x = newHouseX; house.y = newHouseY; houses.push(house); var buttonIndex = self.children.indexOf(buttons[0]); self.addChildAt(house, buttonIndex !== -1 ? buttonIndex : self.children.length); } LK.setTimeout(self.spawnHouse, nextSpawnTime); }; self.spawnHouse(); var houses = []; var presents = []; var santa = self.addChild(new Santa()); santa.x = 2048 / 2; santa.y = 2732 - 2732 * 0.1; var presentFireRate = 60; var presentFireCounter = 0; stage.on('down', function (obj) { var pos = obj.event.getLocalPosition(self); santa.move(pos); }); LK.on('tick', function () { santa.move(); if (presentFireCounter++ >= presentFireRate) { var present = new Present(); present.x = santa.x; present.y = santa.y; presents.push(present); var buttonIndex = buttons.length > 0 ? self.children.indexOf(buttons[0]) : self.children.length; self.addChildAt(present, buttonIndex); presentFireCounter = 0; } for (var i = presents.length - 1; i >= 0; i--) { var present = presents[i]; present.move(); for (var j = houses.length - 1; j >= 0; j--) { var house = houses[j]; if (house instanceof NaughtyHouse && present.intersects(house)) { var darkHouse = new DarkHouse(); darkHouse.x = house.x; darkHouse.y = house.y; houses[j] = darkHouse; self.addChild(darkHouse); house.destroy(); present.destroy(); score = Math.max(0, score - 2); scoreTxt.setText('Score: ' + score); presents.splice(i, 1); break; } else if (house instanceof NiceHouse && present.intersects(house)) { house.hitCount++; score++; addXP(1); scoreTxt.setText('Score: ' + score); present.destroy(); presents.splice(i, 1); if (house.hitCount >= 3) { var happyHouse = new HappyHouse(); happyHouse.x = house.x; happyHouse.y = house.y; houses[j] = happyHouse; self.addChild(happyHouse); house.destroy(); } break; } } if (present.y < -present.height) { present.destroy(); presents.splice(i, 1); } } for (var i = houses.length - 1; i >= 0; i--) { var house = houses[i]; house.move(); if (house.y > 2732 + house.height) { houses.splice(i, 1); } } }); });
===================================================================
--- original.js
+++ change.js
@@ -35,8 +35,10 @@
if (label === 'Pitching Arm!') {
descriptionLabel.setText('Throw more presents');
} else if (label === 'More Reindeer!') {
descriptionLabel.setText('Fly faster');
+ } else if (label === 'Time Zones!') {
+ descriptionLabel.setText('Add 10 seconds');
}
descriptionLabel.anchor.set(0.5);
descriptionLabel.x = 0;
self.addChild(descriptionLabel);
@@ -218,8 +220,13 @@
label: 'More Reindeer!',
action: function () {
santa.moveSpeed *= 1.3;
}
+ }, {
+ label: 'Time Zones!',
+ action: function () {
+ countdown += 10;
+ }
}];
var chosenPowerups = powerups.sort(function () {
return 0.5 - Math.random();
}).slice(0, 2);
overhead view of simple box house christmas decorations giant christmas tree out front video game asset 2d blank background Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
overhead view of drab house with giant prohibition symbol snowy lawn video game asset 2d blank background Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
overhead view of charred remains of a completely burned down box house snowy lawn video game asset 2d blank background Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Santa on sleigh pulled by reindeer blank background no shadows flying forward away straight top down Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
simple red christmas ornament 2d blank background high contrast no shadows in game asset Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
simple snowflake In-Game asset. 2d. Blank background. High contrast. No shadows. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
old white scroll unfurled blank no shadows Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
top down simple wrapped red present with gold bow. In-Game asset. 2d. Blank background. High contrast. No shadows. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
top down plate of cookies glass of milk. In-Game asset. Blank background. No shadows. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.