/**** * Classes ****/ var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.originalWidth = bulletGraphics.width; self.originalHeight = bulletGraphics.height; self.speed = -15; self._move_migrated = function () { self.y += self.speed; }; }); var Carp = Container.expand(function () { var self = Container.call(this); var carpGraphics = self.attachAsset('carp', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self._move_migrated = function () { self.y += self.speed * sausageSpeedMultiplier; }; }); var EndScreen = Container.expand(function () { var self = Container.call(this); var endScreenBackground = self.attachAsset('shape', { width: 2048, height: 2732, color: 0x000000, shape: 'box' }); endScreenBackground.alpha = 0.8; var finalScoreTxt = new Text2('Final Score: ' + score.toString(), { size: 150, fill: '#ffffff', anchorX: 0.5, anchorY: 0.5 }); finalScoreTxt.x = 2048 / 2; finalScoreTxt.y = 2732 / 2 - 300; self.addChild(finalScoreTxt); var restartButton = new Text2('Start a New Game', { size: 100, fill: '#ffffff', anchorX: 0.5, anchorY: 0.5 }); restartButton.x = 2048 / 2; restartButton.y = 2732 / 2; restartButton.interactive = true; restartButton.buttonMode = true; restartButton.on('down', function () { LK.showGameOver(); }); self.addChild(restartButton); }); var Explosion = Container.expand(function () { var self = Container.call(this); var explosionGraphics = self.attachAsset('explosion', { anchorX: 0.5, anchorY: 0.5 }); self.scaleX = 0; self.scaleY = 0; self.animate = function () { if (self.scaleX < 1) { self.scaleX += 0.1; self.scaleY += 0.1; } else { self.destroy(); } }; }); var GoldenSausage = Container.expand(function () { var self = Container.call(this); var goldenSausageGraphics = self.attachAsset('goldenSausage', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; // 1.5 times the base speed of 2 self._move_migrated = function () { self.y += self.speed * sausageSpeedMultiplier; }; }); var Hero = Container.expand(function () { var self = Container.call(this); var heroGraphics = self.attachAsset('hero', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 70; self.doubleSpeedActive = false; self.doubleSpeedTimer = null; self.moveLeft = function () { self.x = Math.max(self.width / 2, self.x - self.speed); }; self.moveRight = function () { self.x = Math.min(2048 - self.width / 2, self.x + self.speed); }; self.shoot = function () { var bullets = []; var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y - self.height / 2; game.addChild(bullet); bullets.push(bullet); return bullets; }; self.changeAppearance = function () {}; }); var IceCube = Container.expand(function () { var self = Container.call(this); var iceCubeGraphics = self.attachAsset('iceCube', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self._move_migrated = function () { self.y += self.speed * sausageSpeedMultiplier; }; }); var Onion = Container.expand(function () { var self = Container.call(this); var onionGraphics = self.attachAsset('onion', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self._move_migrated = function () { self.y += self.speed * sausageSpeedMultiplier; }; }); var OnionExplosion = Container.expand(function () { var self = Container.call(this); var explosionGraphics = self.attachAsset('onionExplosion', { anchorX: 0.5, anchorY: 0.5 }); self.scaleX = 0; self.scaleY = 0; self.animate = function () { if (self.scaleX < 1) { self.scaleX += 0.1; self.scaleY += 0.1; } else { self.destroy(); } }; }); var Sausage = Container.expand(function () { var self = Container.call(this); var sausageGraphics = self.attachAsset('sausage', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 2; self._move_migrated = function () { self.y += self.speed * sausageSpeedMultiplier; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x111111 // Slightly brighter black background }); /**** * Game Code ****/ var sausageSpeedMultiplier = 1.0; var freezeMovement = false; // Initialize score function createExplosion(x, y) { var explosion = new Explosion(); explosion.x = x; explosion.y = y; game.addChild(explosion); } var score = 0; var scoreMultiplier = 1.0; var scoreTxt = new Text2(score.toString(), { size: 150, fill: "#ffffff", anchorX: 0.7, // Center align horizontally anchorY: 0.0 // Top align }); LK.gui.top.addChild(scoreTxt); var hero = game.addChild(new Hero()); hero.x = 2048 / 2; hero.y = 2732 - 150; var bullets = []; var sausages = []; game.on('down', function (x, y, obj) { var touchPos = game.toLocal(obj.global); if (touchPos.x < hero.x) { hero.moveLeft(); } else if (touchPos.x > hero.x) { hero.moveRight(); } bullets = bullets.concat(hero.shoot()); }); LK.on('keydown', function (obj) { var event = obj.event; switch (event.keyCode) { case 37: // Left arrow key hero.moveLeft(); break; case 39: // Right arrow key hero.moveRight(); break; } }); LK.on('tick', function () { // Move bullets for (var i = bullets.length - 1; i >= 0; i--) { bullets[i]._move_migrated(); if (bullets[i].y < 0) { bullets[i].destroy(); bullets.splice(i, 1); } } // Move sausages and handle Onion and Carp scoring for (var j = sausages.length - 1; j >= 0; j--) { if (!freezeMovement) { sausages[j]._move_migrated(); } if (sausages[j].y > 2732) { if (sausages[j] instanceof Onion || sausages[j] instanceof Carp) { var pointsDeducted = 5 * scoreMultiplier; score -= Math.round(pointsDeducted); if (score < 0) { var endScreen = new EndScreen(); game.addChild(endScreen); LK.showGameOver(); } else { LK.setScore(score); scoreTxt.setText(score.toString()); } } sausages[j].destroy(); sausages.splice(j, 1); } } // Check for collisions between carps and hero for (var c = sausages.length - 1; c >= 0; c--) { if (sausages[c] && sausages[c] instanceof Carp && hero.intersects(sausages[c])) { createExplosion(sausages[c].x, sausages[c].y); // Update score when carps hit the hero score += Math.round(5 * scoreMultiplier); scoreTxt.setText(score.toString()); sausages[c].destroy(); sausages.splice(c, 1); } } // Check for collisions between sausages and hero for (var s = sausages.length - 1; s >= 0; s--) { if (sausages[s] && !(sausages[s] instanceof GoldenSausage) && hero.intersects(sausages[s])) { createExplosion(sausages[s].x, sausages[s].y); // Update score when sausages hit the hero score += 1; scoreTxt.setText(score.toString()); sausages[s].destroy(); sausages.splice(s, 1); } } // Check for collisions between bullets and sausages for (var b = bullets.length - 1; b >= 0; b--) { for (var s = sausages.length - 1; s >= 0; s--) { if (bullets[b] && sausages[s] && bullets[b].intersects(sausages[s])) { createExplosion(sausages[s].x, sausages[s].y); bullets[b].destroy(); bullets.splice(b, 1); sausages[s].destroy(); sausages.splice(s, 1); // Update score by 10 for golden sausage score += Math.round(1 * scoreMultiplier); scoreTxt.setText(score.toString()); break; } } } // Animate explosions for (var e = game.children.length - 1; e >= 0; e--) { if (game.children[e] instanceof Explosion) { game.children[e].animate(); } } sausageSpeedMultiplier += 0.0007; // Increment speed multiplier over time scoreMultiplier += 0.001; // Increment score multiplier over time // Spawn sausages and occasionally a golden sausage if (LK.ticks % 80 == 0) { // Reduced from 120 to 100 to increase spawn rate by 1.2 times var sausageType = Math.random() < 0.05 ? IceCube : Math.random() < 0.01 ? GoldenSausage : Math.random() < 0.02 ? Onion : Math.random() < 0.0333 ? Carp : Sausage; var newSausage = new sausageType(); newSausage.x = Math.random() * (2048 - newSausage.width) + newSausage.width / 2; newSausage.y = -newSausage.height / 2; sausages.push(newSausage); game.addChild(newSausage); } // Check for collisions with IceCubes and stop all falling objects for 5 seconds for (var b = bullets.length - 1; b >= 0; b--) { for (var s = sausages.length - 1; s >= 0; s--) { if (bullets[b] && sausages[s] instanceof IceCube && bullets[b].intersects(sausages[s])) { createExplosion(sausages[s].x, sausages[s].y); bullets[b].destroy(); bullets.splice(b, 1); sausages[s].destroy(); sausages.splice(s, 1); // Update score by 5 for IceCube score += Math.round(5 * scoreMultiplier); scoreTxt.setText(score.toString()); // Multiply the sausageSpeedMultiplier by 0.7 sausageSpeedMultiplier = Math.round(sausageSpeedMultiplier * 0.7); break; } } } // Check for collisions with golden sausages for (var b = bullets.length - 1; b >= 0; b--) { for (var s = sausages.length - 1; s >= 0; s--) { if (bullets[b] && sausages[s] instanceof GoldenSausage && bullets[b].intersects(sausages[s])) { createExplosion(sausages[s].x, sausages[s].y); var goldenExplosion = new Explosion(); goldenExplosion.x = sausages[s].x; goldenExplosion.y = sausages[s].y; game.addChild(goldenExplosion); bullets[b].destroy(); bullets.splice(b, 1); sausages[s].destroy(); sausages.splice(s, 1); // Update score by 10 for golden sausage score += Math.round(10 * scoreMultiplier); scoreMultiplier += 1; // Increase scoreMultiplier by 1 scoreTxt.setText(score.toString()); // Check if score is below zero and end game if true if (score < 0) { var endScreen = new EndScreen(); game.addChild(endScreen); } break; } } } }); // These following lines are an archive. Do not delete them. They keep track of the score in a manual way as I write it by hand. // Best scores : 60126 by Break_Me / 12867 by Break_Me / 5500 by Bidoutoumou / 3712 by Break_ME
/****
* Classes
****/
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.originalWidth = bulletGraphics.width;
self.originalHeight = bulletGraphics.height;
self.speed = -15;
self._move_migrated = function () {
self.y += self.speed;
};
});
var Carp = Container.expand(function () {
var self = Container.call(this);
var carpGraphics = self.attachAsset('carp', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self._move_migrated = function () {
self.y += self.speed * sausageSpeedMultiplier;
};
});
var EndScreen = Container.expand(function () {
var self = Container.call(this);
var endScreenBackground = self.attachAsset('shape', {
width: 2048,
height: 2732,
color: 0x000000,
shape: 'box'
});
endScreenBackground.alpha = 0.8;
var finalScoreTxt = new Text2('Final Score: ' + score.toString(), {
size: 150,
fill: '#ffffff',
anchorX: 0.5,
anchorY: 0.5
});
finalScoreTxt.x = 2048 / 2;
finalScoreTxt.y = 2732 / 2 - 300;
self.addChild(finalScoreTxt);
var restartButton = new Text2('Start a New Game', {
size: 100,
fill: '#ffffff',
anchorX: 0.5,
anchorY: 0.5
});
restartButton.x = 2048 / 2;
restartButton.y = 2732 / 2;
restartButton.interactive = true;
restartButton.buttonMode = true;
restartButton.on('down', function () {
LK.showGameOver();
});
self.addChild(restartButton);
});
var Explosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5
});
self.scaleX = 0;
self.scaleY = 0;
self.animate = function () {
if (self.scaleX < 1) {
self.scaleX += 0.1;
self.scaleY += 0.1;
} else {
self.destroy();
}
};
});
var GoldenSausage = Container.expand(function () {
var self = Container.call(this);
var goldenSausageGraphics = self.attachAsset('goldenSausage', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3; // 1.5 times the base speed of 2
self._move_migrated = function () {
self.y += self.speed * sausageSpeedMultiplier;
};
});
var Hero = Container.expand(function () {
var self = Container.call(this);
var heroGraphics = self.attachAsset('hero', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 70;
self.doubleSpeedActive = false;
self.doubleSpeedTimer = null;
self.moveLeft = function () {
self.x = Math.max(self.width / 2, self.x - self.speed);
};
self.moveRight = function () {
self.x = Math.min(2048 - self.width / 2, self.x + self.speed);
};
self.shoot = function () {
var bullets = [];
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y - self.height / 2;
game.addChild(bullet);
bullets.push(bullet);
return bullets;
};
self.changeAppearance = function () {};
});
var IceCube = Container.expand(function () {
var self = Container.call(this);
var iceCubeGraphics = self.attachAsset('iceCube', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self._move_migrated = function () {
self.y += self.speed * sausageSpeedMultiplier;
};
});
var Onion = Container.expand(function () {
var self = Container.call(this);
var onionGraphics = self.attachAsset('onion', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self._move_migrated = function () {
self.y += self.speed * sausageSpeedMultiplier;
};
});
var OnionExplosion = Container.expand(function () {
var self = Container.call(this);
var explosionGraphics = self.attachAsset('onionExplosion', {
anchorX: 0.5,
anchorY: 0.5
});
self.scaleX = 0;
self.scaleY = 0;
self.animate = function () {
if (self.scaleX < 1) {
self.scaleX += 0.1;
self.scaleY += 0.1;
} else {
self.destroy();
}
};
});
var Sausage = Container.expand(function () {
var self = Container.call(this);
var sausageGraphics = self.attachAsset('sausage', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 2;
self._move_migrated = function () {
self.y += self.speed * sausageSpeedMultiplier;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x111111 // Slightly brighter black background
});
/****
* Game Code
****/
var sausageSpeedMultiplier = 1.0;
var freezeMovement = false;
// Initialize score
function createExplosion(x, y) {
var explosion = new Explosion();
explosion.x = x;
explosion.y = y;
game.addChild(explosion);
}
var score = 0;
var scoreMultiplier = 1.0;
var scoreTxt = new Text2(score.toString(), {
size: 150,
fill: "#ffffff",
anchorX: 0.7,
// Center align horizontally
anchorY: 0.0 // Top align
});
LK.gui.top.addChild(scoreTxt);
var hero = game.addChild(new Hero());
hero.x = 2048 / 2;
hero.y = 2732 - 150;
var bullets = [];
var sausages = [];
game.on('down', function (x, y, obj) {
var touchPos = game.toLocal(obj.global);
if (touchPos.x < hero.x) {
hero.moveLeft();
} else if (touchPos.x > hero.x) {
hero.moveRight();
}
bullets = bullets.concat(hero.shoot());
});
LK.on('keydown', function (obj) {
var event = obj.event;
switch (event.keyCode) {
case 37:
// Left arrow key
hero.moveLeft();
break;
case 39:
// Right arrow key
hero.moveRight();
break;
}
});
LK.on('tick', function () {
// Move bullets
for (var i = bullets.length - 1; i >= 0; i--) {
bullets[i]._move_migrated();
if (bullets[i].y < 0) {
bullets[i].destroy();
bullets.splice(i, 1);
}
}
// Move sausages and handle Onion and Carp scoring
for (var j = sausages.length - 1; j >= 0; j--) {
if (!freezeMovement) {
sausages[j]._move_migrated();
}
if (sausages[j].y > 2732) {
if (sausages[j] instanceof Onion || sausages[j] instanceof Carp) {
var pointsDeducted = 5 * scoreMultiplier;
score -= Math.round(pointsDeducted);
if (score < 0) {
var endScreen = new EndScreen();
game.addChild(endScreen);
LK.showGameOver();
} else {
LK.setScore(score);
scoreTxt.setText(score.toString());
}
}
sausages[j].destroy();
sausages.splice(j, 1);
}
}
// Check for collisions between carps and hero
for (var c = sausages.length - 1; c >= 0; c--) {
if (sausages[c] && sausages[c] instanceof Carp && hero.intersects(sausages[c])) {
createExplosion(sausages[c].x, sausages[c].y);
// Update score when carps hit the hero
score += Math.round(5 * scoreMultiplier);
scoreTxt.setText(score.toString());
sausages[c].destroy();
sausages.splice(c, 1);
}
}
// Check for collisions between sausages and hero
for (var s = sausages.length - 1; s >= 0; s--) {
if (sausages[s] && !(sausages[s] instanceof GoldenSausage) && hero.intersects(sausages[s])) {
createExplosion(sausages[s].x, sausages[s].y);
// Update score when sausages hit the hero
score += 1;
scoreTxt.setText(score.toString());
sausages[s].destroy();
sausages.splice(s, 1);
}
}
// Check for collisions between bullets and sausages
for (var b = bullets.length - 1; b >= 0; b--) {
for (var s = sausages.length - 1; s >= 0; s--) {
if (bullets[b] && sausages[s] && bullets[b].intersects(sausages[s])) {
createExplosion(sausages[s].x, sausages[s].y);
bullets[b].destroy();
bullets.splice(b, 1);
sausages[s].destroy();
sausages.splice(s, 1);
// Update score by 10 for golden sausage
score += Math.round(1 * scoreMultiplier);
scoreTxt.setText(score.toString());
break;
}
}
}
// Animate explosions
for (var e = game.children.length - 1; e >= 0; e--) {
if (game.children[e] instanceof Explosion) {
game.children[e].animate();
}
}
sausageSpeedMultiplier += 0.0007; // Increment speed multiplier over time
scoreMultiplier += 0.001; // Increment score multiplier over time
// Spawn sausages and occasionally a golden sausage
if (LK.ticks % 80 == 0) {
// Reduced from 120 to 100 to increase spawn rate by 1.2 times
var sausageType = Math.random() < 0.05 ? IceCube : Math.random() < 0.01 ? GoldenSausage : Math.random() < 0.02 ? Onion : Math.random() < 0.0333 ? Carp : Sausage;
var newSausage = new sausageType();
newSausage.x = Math.random() * (2048 - newSausage.width) + newSausage.width / 2;
newSausage.y = -newSausage.height / 2;
sausages.push(newSausage);
game.addChild(newSausage);
}
// Check for collisions with IceCubes and stop all falling objects for 5 seconds
for (var b = bullets.length - 1; b >= 0; b--) {
for (var s = sausages.length - 1; s >= 0; s--) {
if (bullets[b] && sausages[s] instanceof IceCube && bullets[b].intersects(sausages[s])) {
createExplosion(sausages[s].x, sausages[s].y);
bullets[b].destroy();
bullets.splice(b, 1);
sausages[s].destroy();
sausages.splice(s, 1);
// Update score by 5 for IceCube
score += Math.round(5 * scoreMultiplier);
scoreTxt.setText(score.toString());
// Multiply the sausageSpeedMultiplier by 0.7
sausageSpeedMultiplier = Math.round(sausageSpeedMultiplier * 0.7);
break;
}
}
}
// Check for collisions with golden sausages
for (var b = bullets.length - 1; b >= 0; b--) {
for (var s = sausages.length - 1; s >= 0; s--) {
if (bullets[b] && sausages[s] instanceof GoldenSausage && bullets[b].intersects(sausages[s])) {
createExplosion(sausages[s].x, sausages[s].y);
var goldenExplosion = new Explosion();
goldenExplosion.x = sausages[s].x;
goldenExplosion.y = sausages[s].y;
game.addChild(goldenExplosion);
bullets[b].destroy();
bullets.splice(b, 1);
sausages[s].destroy();
sausages.splice(s, 1);
// Update score by 10 for golden sausage
score += Math.round(10 * scoreMultiplier);
scoreMultiplier += 1; // Increase scoreMultiplier by 1
scoreTxt.setText(score.toString());
// Check if score is below zero and end game if true
if (score < 0) {
var endScreen = new EndScreen();
game.addChild(endScreen);
}
break;
}
}
}
});
// These following lines are an archive. Do not delete them. They keep track of the score in a manual way as I write it by hand.
// Best scores : 60126 by Break_Me / 12867 by Break_Me / 5500 by Bidoutoumou / 3712 by Break_ME
A crook sausage. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A heroic potato. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A background which represents a kitchen's ground. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A bullet shaped potato. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An exploding sausage. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A gold sausage. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An angry-looking onion. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An onion exploding like a bomb. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A carp which looks dumb. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An ice cube. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.