Code edit (2 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
make textline15 below textline14 and make it say: This game is no longer updated.
Code edit (1 edits merged)
Please save this source code
User prompt
remove highscoretxt
User prompt
Fix Bug: 'ReferenceError: highScoreTxt is not defined' in or related to this line: 'highScoreTxt.setText('High Score: ' + highScore + ' (WIP)');' Line Number: 702
User prompt
Fix Bug: 'Uncaught ReferenceError: ScoreTxt is not defined' in or related to this line: 'cosmicCreditsTxt.y = ScoreTxt.y + ScoreTxt.height + 20; // Position below the high score display' Line Number: 578
Code edit (3 edits merged)
Please save this source code
User prompt
Fix Bug: 'Uncaught ReferenceError: highScoreTxt is not defined' in or related to this line: 'highScoreTxt.anchor.set(1, 0);' Line Number: 577
Code edit (1 edits merged)
Please save this source code
User prompt
change versiontxt to: v0.2.2 BETA
User prompt
change "Tap anywhere to shoot" to: "Double tap anywhere to shoot"
User prompt
make it so the user has to double tap to shoot bullet
User prompt
change versiontxt to be v0.21 BETA
User prompt
the bulletpack bounce off the walls then move the other way. Make it more unpredictable and that they don't have to hit the walls to move the other way
User prompt
the enemies bounce off the walls then move the other way. Make it more unpredictable and that they don't have to hit the walls to move the other way
User prompt
make bullet pack rarity 1/5 of enemy rarity
User prompt
the bulletpack asset does not show up when it is meant to
User prompt
why are there no bulletpacks appearing?
User prompt
the bulletpack bounces off the walls then move the other way. Make it more unpredictable and that they don't have to hit the walls to move the other way
User prompt
the enemies bounce off the walls then move the other way. Make it more unpredictable and that they don't have to hit the walls to move the other way
User prompt
save this
/****
* Classes
****/
var PurchaseButtonWithText = Container.expand(function (buttonAssetId, buttonText, buttonSubText, positionX, positionY, onClickCallback) {
var self = Container.call(this);
var button = self.attachAsset('purchase1', {
anchorX: 0.5,
anchorY: 0.5
});
var text = new Text2(buttonText, {
size: 45,
fill: "#ffffff"
});
var subText = new Text2(buttonSubText, {
size: 45,
fill: "#ffffff"
});
text.anchor.set(0.5, 1);
subText.anchor.set(0.5, 0);
text.y = -button.height / 2 - 10;
subText.y = button.height / 2 + 10;
self.addChild(text);
self.addChild(subText);
self.x = positionX;
self.y = positionY;
self.interactive = true;
self.on('down', function (obj) {
self.alpha = 0.5;
onClickCallback();
});
self.on('up', function (obj) {
self.alpha = 1.0;
});
});
// BulletPack class
var BulletPack = Container.expand(function () {
var self = Container.call(this);
var bulletPackGraphics = self.attachAsset('bulletPack', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.move = function () {
var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002;
self.y += self.speed + speedIncreaseFactor;
};
});
// Character class
var Hero = Container.expand(function () {
var self = Container.call(this);
var heroGraphics = self.attachAsset('hero', {
anchorX: 0.5,
anchorY: 0.5
});
self.bulletLimit = 3; // Initialize bullet limit
self.canShoot = true; // Allow shooting initially
self.update = function () {
// Hero update logic
};
self.shoot = function () {
if (this.bulletLimit > 0 && this.canShoot) {
var bullet = new Bullet();
bullet.x = this.x;
bullet.y = this.y - this.height / 2;
heroBullets.push(bullet);
game.addChild(bullet);
this.bulletLimit--;
bulletCountTxt.setText('Bullets: ' + this.bulletLimit); // Update bullet count display
this.canShoot = false; // Set shooting cooldown
LK.setTimeout(function () {
self.canShoot = true;
}, 500); // Cooldown of 500ms before next shot
}
};
});
// Bullet class
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('Bullet', {
anchorX: 0.0625,
anchorY: 0.0625
});
self.speed = -10;
self.move = function () {
self.y += self.speed;
};
});
// Enemy class
var Enemy = Container.expand(function () {
var self = Container.call(this);
var enemyGraphics = self.attachAsset('enemy', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 4;
self.direction = Math.random() < 0.5 ? -1 : 1;
self.move = function () {
self.y += self.speed;
var speedIncreaseFactor = 0.1 + LK.ticks * 0.0002; // Increase the speed factor over time
self.x += self.direction * (4 + speedIncreaseFactor);
if (self.x < 0 || self.x > game.width) {
self.direction *= -1;
}
self.speed += 0.02 + LK.ticks * 0.0001; // Increase speed over time with an accelerating factor
};
});
var Button = Container.expand(function (text, positionX, positionY, onClickCallback) {
var self = Container.call(this);
var buttonText = new Text2(text, {
size: 200,
fill: "#ffffff"
});
buttonText.anchor.set(0.5);
self.addChild(buttonText);
self.x = positionX;
self.y = positionY;
self.interactive = true;
self.on('down', function (obj) {
self.alpha = 0.5;
onClickCallback();
});
self.on('up', function (obj) {
self.alpha = 1.0;
});
});
// JoystickAsset class
var JoystickAsset = Container.expand(function () {
var self = Container.call(this);
self.interactive = true;
self.isDragging = false;
self.onMoveCallback = null;
self.setMoveCallback = function (callback) {
self.onMoveCallback = function (direction) {
callback({
x: direction.x,
y: 0
});
};
};
self.on('down', function (obj) {
self.isDragging = true;
});
self.on('up', function (obj) {
self.isDragging = false;
stickGraphics.x = stickOrigin.x;
stickGraphics.y = stickOrigin.y;
if (self.onMoveCallback) {
self.onMoveCallback({
x: 0,
y: 0
});
}
});
self.on('move', function (obj) {
if (self.isDragging) {
var event = obj.event;
var pos = event.getLocalPosition(self);
var dx = pos.x - stickOrigin.x;
var maxDistance = stickGraphics.width * 0.5;
if (Math.abs(dx) > maxDistance) {
dx = maxDistance * (dx > 0 ? 1 : -1);
}
stickGraphics.x = stickOrigin.x + dx;
stickGraphics.y = stickOrigin.y;
if (self.onMoveCallback) {
self.onMoveCallback({
x: dx / maxDistance,
y: 0
});
}
}
});
self.containsPoint = function (point) {
return point.x >= self.x - self.width / 2 && point.x <= self.x + self.width / 2 && point.y >= self.y - self.height / 2 && point.y <= self.y + self.height / 2;
};
});
/****
* Initialize Game
****/
// Create left movement button
var game = new LK.Game({
title: 'gameplaypage',
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
var Purchase1 = game.addChild(new PurchaseButtonWithText('purchase1', '10 Bullets for:', '50 Cosmic Credits', 200, game.height - 200, function () {
if (cosmicCredits >= 50) {
cosmicCredits -= 50;
hero.bulletLimit += 10;
bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
}
}));
Purchase1.interactive = true;
Purchase1.on('down', function () {
Purchase1.alpha = 0.5;
if (cosmicCredits >= 50) {
cosmicCredits -= 50;
hero.bulletLimit += 10;
bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
}
});
Purchase1.on('up', function () {
Purchase1.alpha = 1.0;
});
var purchase2 = game.addChild(new PurchaseButtonWithText('purchase2', '20 Bullets for:', '75 Cosmic Credits', game.width - 200, game.height - 200, function () {
if (cosmicCredits >= 75) {
cosmicCredits -= 75;
hero.bulletLimit += 20;
bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
}
}));
purchase2.interactive = true;
purchase2.on('down', function () {
purchase2.alpha = 0.5;
if (cosmicCredits >= 75) {
cosmicCredits -= 75;
hero.bulletLimit += 20;
bulletCountTxt.setText('Bullets: ' + hero.bulletLimit);
cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
}
});
purchase2.on('up', function () {
purchase2.alpha = 1.0;
});
// Initialize important asset arrays
var heroBullets = [];
var enemies = [];
var bulletPacks = [];
// Create character
var hero = game.addChild(new Hero());
hero.x = game.width / 2;
hero.y = game.height - 100;
var cosmicCredits = 0; // Initialize cosmic credits
// Create score display
var scoreTxt = new Text2('Score: 0', {
size: 50,
fill: "#ffffff"
});
var highScoreTxt = new Text2('High Score: 0 (WIP)', {
size: 50,
fill: "#ffffff"
});
var cosmicCreditsTxt = new Text2('Cosmic Credits: 0', {
size: 50,
fill: "#ffffff"
}); // New currency display
scoreTxt.anchor.set(1, 0);
highScoreTxt.anchor.set(1, 0);
cosmicCreditsTxt.anchor.set(1, 0);
highScoreTxt.y = scoreTxt.height + 20;
cosmicCreditsTxt.y = highScoreTxt.y + highScoreTxt.height + 20; // Position below the high score display
LK.gui.topRight.addChild(scoreTxt);
LK.gui.topRight.addChild(highScoreTxt);
LK.gui.topRight.addChild(cosmicCreditsTxt); // Add the cosmic credits display to the GUI
// Create version display
var versionTxt = new Text2('v0.2 BETA', {
size: 50,
fill: "#ffffff"
});
versionTxt.anchor.set(1, 0);
versionTxt.y = cosmicCreditsTxt.y + cosmicCreditsTxt.height + 20; // Position below the cosmic credits display
LK.gui.topRight.addChild(versionTxt); // Add the version display to the GUI
// Create bullet count display
var bulletCountTxt = new Text2('Bullets: 3', {
size: 100,
fill: "#ffffff"
});
bulletCountTxt.anchor.set(0, 0);
bulletCountTxt.y = scoreTxt.height + 50; // Position below the score display
LK.gui.topLeft.addChild(bulletCountTxt);
// Create instructions display
var instructionsTxt = new Text2('Tap anywhere to shoot', {
size: 50,
fill: "#ffffff"
});
instructionsTxt.anchor.set(0, 0);
LK.gui.topLeft.addChild(instructionsTxt);
// Create a red line 3/4 down the screen
var redLine = LK.getAsset('redLine', {});
redLine.width = game.width;
redLine.height = 5;
redLine.y = game.height * 0.75;
game.addChild(redLine);
// Create joystick instance
var joystick = new JoystickAsset();
joystick.x = joystick.width / 2 + 150;
joystick.y = game.height - joystick.height / 2 - 150;
joystick.setMoveCallback(function (direction) {
hero.x = Math.max(hero.width / 2, Math.min(game.width - hero.width / 2, hero.x + direction.x * 10));
});
game.addChild(joystick);
// Handle tap on the game stage to shoot bullets, excluding buttons
var dragNode = null;
game.on('down', function (obj) {
var event = obj.event;
var pos = event.getLocalPosition(game);
// Check if the tap is not on any button
var purchaseButtonBoundsLeft = Purchase1.getBounds();
var purchaseButtonBoundsRight = purchase2.getBounds();
if (!(pos.x >= purchaseButtonBoundsLeft.x && pos.x <= purchaseButtonBoundsLeft.x + purchaseButtonBoundsLeft.width && pos.y >= purchaseButtonBoundsLeft.y && pos.y <= purchaseButtonBoundsLeft.y + purchaseButtonBoundsLeft.height || pos.x >= purchaseButtonBoundsRight.x && pos.x <= purchaseButtonBoundsRight.x + purchaseButtonBoundsRight.width && pos.y >= purchaseButtonBoundsRight.y && pos.y <= purchaseButtonBoundsRight.y + purchaseButtonBoundsRight.height) && !joystick.containsPoint(pos)) {
hero.shoot();
}
});
game.on('move', function (obj) {
var event = obj.event;
var pos = event.getLocalPosition(game);
hero.x = pos.x;
// hero.y = pos.y; // Removed the line that sets the hero's y position
});
// Game tick event
LK.on('tick', function () {
// Update character
hero.update();
// Move and check bullets
for (var i = heroBullets.length - 1; i >= 0; i--) {
var bullet = heroBullets[i];
bullet.move();
// Check for bullet collision with enemies and bullet packs
for (var j = enemies.length - 1; j >= 0; j--) {
if (bullet.intersects(enemies[j])) {
if (enemies[j] instanceof BulletPack) {
// If the enemy is a bullet pack
// Increment character's bullet limit by 5
hero.bulletLimit += 5;
} else {
// If the enemy is an actual enemy
// Update score and increase cosmic credits by 5
var newScore = LK.getScore() + 1;
LK.setScore(newScore);
scoreTxt.setText('Score: ' + newScore);
cosmicCredits += 5;
cosmicCreditsTxt.setText('Cosmic Credits: ' + cosmicCredits);
var highScore = Math.max(newScore, Number((typeof localStorage !== 'undefined' ? localStorage.getItem('highScore') : '0') || '0'));
highScoreTxt.setText('High Score: ' + highScore + ' (WIP)');
if (typeof localStorage !== 'undefined' && newScore > highScore) {
localStorage.setItem('highScore', newScore.toString());
}
// Increment character's bullet limit
hero.bulletLimit++;
}
bulletCountTxt.setText('Bullets: ' + hero.bulletLimit); // Update bullet count display
// Destroy enemy/bullet pack and bullet
enemies[j].destroy();
enemies.splice(j, 1);
bullet.destroy();
heroBullets.splice(i, 1);
break;
}
}
// Remove off-screen bullets and end the game if it's the last one
if (bullet.y < 0) {
bullet.destroy();
heroBullets.splice(i, 1);
if (heroBullets.length === 0 && hero.bulletLimit === 0) {
LK.showGameOver(); // End the game when the last bullet is out of frame
}
}
}
// Move enemies and check if they pass the red line
for (var k = enemies.length - 1; k >= 0; k--) {
enemies[k].move();
if (enemies[k].y > game.height * 0.75) {
enemies[k].destroy();
enemies[k] = null;
enemies.splice(k, 1);
}
}
var enemySpawnRate = 60; // Initialize enemy spawn rate
// Spawn enemies
if (LK.ticks % enemySpawnRate == 0) {
var enemy = new Enemy();
enemy.x = Math.random() * (game.width - enemy.width) + enemy.width / 2;
enemy.y = -enemy.height;
enemies.push(enemy);
game.addChild(enemy);
if (enemySpawnRate > 30) {
enemySpawnRate -= 0.5;
} // Decrease spawn rate over time to a minimum of 30 ticks
}
// Spawn bullet packs
if (LK.ticks % 600 == 0) {
var bulletPack = new BulletPack();
bulletPack.x = Math.random() * (game.width - bulletPack.width) + bulletPack.width / 2;
bulletPack.y = -bulletPack.height;
bulletPacks.push(bulletPack);
game.addChild(bulletPack);
}
});
android. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
letter X png. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
space background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
galaxy background. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
galaxy background. High quality
space background.. High contrast