31
0
2mo
/**** * Classes ****/ // Class for bombs dropped by Viggen var Bomb = Container.expand(function () { var self = Container.call(this); var bombGraphics = self.attachAsset('bomb', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 15; self.update = function () { self.y += self.speed; if (self.y > 2732) { self.destroy(); } }; }); // Class for enemy bullets var Bullet = Container.expand(function () { var self = Container.call(this); var bulletGraphics = self.attachAsset('bullet', { anchorX: 0.5, anchorY: 0.5 }); self.speed = -5; self.update = function () { self.y += self.speed; if (self.y < 0) { self.destroy(); } }; }); // Class for enemy defenses var Defense = Container.expand(function () { var self = Container.call(this); var defenseGraphics = self.attachAsset('defense', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.y += self.speed; if (self.y > 2732) { self.y = -100; } }; }); // Class for Dogfighter enemy jets var Dogfighter = Container.expand(function () { var self = Container.call(this); var dogfighterGraphics = self.attachAsset('enemyShip', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 7; // Faster than regular enemy ships self.update = function () { self.y += self.speed; if (self.y > 2732) { self.y = -100; } }; self.shoot = function () { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; bullets.push(bullet); game.addChild(bullet); }; }); // Class for enemy bombers var EnemyBomber = Container.expand(function () { var self = Container.call(this); var bomberGraphics = self.attachAsset('enemyShip', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 3; self.update = function () { self.y += self.speed; if (self.y > 2732) { self.y = -100; } }; self.dropBomb = function () { var bomb = new Bomb(); bomb.x = self.x; bomb.y = self.y; bombs.push(bomb); game.addChild(bomb); }; }); // Class for the enemy encyclopedia var EnemyEncyclopedia = Container.expand(function () { var self = Container.call(this); self.update = function () { // Update logic for EnemyEncyclopedia }; self.down = function (x, y, obj) { // Add double tap event listener if (this.lastTap) { var diff = Date.now() - this.lastTap; if (diff < 300) { // Show enemy details when double tapped console.log("Enemy Details: "); enemyShips.forEach(function (enemyShip, index) { console.log("Enemy " + (index + 1) + ": " + "Position - x: " + enemyShip.x + ", y: " + enemyShip.y); }); } } this.lastTap = Date.now(); }; }); // Class for enemy ships var EnemyShip = Container.expand(function () { var self = Container.call(this); var enemyShipGraphics = self.attachAsset('enemyShip', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.y += self.speed; if (self.y > 2732) { self.y = -100; } }; self.shoot = function () { var bullet = new Bullet(); bullet.x = self.x; bullet.y = self.y; bullets.push(bullet); game.addChild(bullet); }; }); // Class for the lore button var LoreButton = Container.expand(function () { var self = Container.call(this); var buttonGraphics = self.attachAsset('button', { anchorX: 0.5, anchorY: 0.5 }); self.update = function () { // Update logic for LoreButton }; self.down = function (x, y, obj) { // Show lore when button is pressed console.log("Lore: In the midst of the Cold War, a lone Viggen pilot embarks on a daring mission deep into Soviet territory. Outnumbered and outgunned, the pilot must rely on skill and cunning to survive. This is their story."); }; }); // Class for powerups var Powerup = Container.expand(function () { var self = Container.call(this); var powerupGraphics = self.attachAsset('powerup', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 5; self.update = function () { self.y += self.speed; if (self.y > 2732) { self.destroy(); } }; }); // Class for stealth bombers var StealthBomber = Container.expand(function () { var self = Container.call(this); var stealthBomberGraphics = self.attachAsset('stealthBomber', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 10; // Incredibly fast speed self.update = function () { self.y += self.speed; if (self.y > 2732) { self.y = -100; } }; }); //<Assets used in the game will automatically appear here> //<Write imports for supported plugins here> // Class for the player's aircraft var Viggen = Container.expand(function () { var self = Container.call(this); var viggenGraphics = self.attachAsset('viggen', { anchorX: 0.5, anchorY: 0.5 }); self.speed = 10; self.update = function () { // Update logic for Viggen }; self.move = function (x, y, obj) { self.x = x; self.y = y; }; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 //Init game with black background }); /**** * Game Code ****/ // Initialize player Viggen var viggen = game.addChild(new Viggen()); viggen.x = 1024; viggen.y = 2400; // Initialize lore button var loreButton = game.addChild(new LoreButton()); loreButton.x = 1800; loreButton.y = 100; // Initialize enemy encyclopedia var enemyEncyclopedia = game.addChild(new EnemyEncyclopedia()); enemyEncyclopedia.x = 1800; enemyEncyclopedia.y = 200; // Initialize bullets array var bullets = []; // Initialize defenses array var defenses = []; // Initialize enemy ships var enemyShips = []; for (var i = 0; i < 5; i++) { var enemyShip = new EnemyShip(); enemyShip.x = Math.random() * 2048; enemyShip.y = Math.random() * -1000; enemyShips.push(enemyShip); game.addChild(enemyShip); } // Initialize enemy bombers var enemyBombers = []; for (var i = 0; i < 3; i++) { var enemyBomber = new EnemyBomber(); enemyBomber.x = Math.random() * 2048; enemyBomber.y = Math.random() * -1000; enemyBombers.push(enemyBomber); game.addChild(enemyBomber); } // Initialize Dogfighters var dogfighters = []; for (var i = 0; i < 2; i++) { var dogfighter = new Dogfighter(); dogfighter.x = Math.random() * 2048; dogfighter.y = Math.random() * -1000; dogfighters.push(dogfighter); game.addChild(dogfighter); } // Initialize stealth bombers var stealthBombers = []; for (var i = 0; i < 1; i++) { // Rare occurrence var stealthBomber = new StealthBomber(); stealthBomber.x = Math.random() * 2048; stealthBomber.y = Math.random() * -1000; stealthBombers.push(stealthBomber); game.addChild(stealthBomber); } // Initialize powerups array var powerups = []; // Initialize bombs var bombs = []; // Handle game move events game.move = function (x, y, obj) { var game_position = game.toLocal(obj.global); viggen.move(game_position.x, game_position.y, obj); }; // Handle game update events game.update = function () { // Update enemy ships enemyShips.forEach(function (enemyShip) { enemyShip.update(); if (viggen.intersects(enemyShip)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } // Make enemy ships shoot at the player every 2 seconds if (LK.ticks % 120 === 0) { enemyShip.shoot(); } }); // Update Dogfighters dogfighters.forEach(function (dogfighter) { dogfighter.update(); if (viggen.intersects(dogfighter)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } // Make Dogfighters shoot bombs in front every 1.5 seconds if (LK.ticks % 90 === 0) { dogfighter.shoot(); } }); // Update enemy bombers enemyBombers.forEach(function (enemyBomber) { enemyBomber.update(); if (viggen.intersects(enemyBomber)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } // Make enemy bombers drop bombs every 3 seconds if (LK.ticks % 180 === 0) { enemyBomber.dropBomb(); } }); // Update stealth bombers stealthBombers.forEach(function (stealthBomber) { stealthBomber.update(); if (viggen.intersects(stealthBomber)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } }); // Check for collision between player's aircraft and enemy bullets bullets.forEach(function (bullet) { if (viggen.intersects(bullet)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } }); // Check for collision between player's aircraft and enemy defenses defenses.forEach(function (defense) { if (viggen.intersects(defense)) { LK.effects.flashScreen(0xff0000, 1000); LK.showGameOver(); } }); // Spawn new defenses every 2 seconds if (LK.ticks % 120 === 0) { var defense = new Defense(); defense.x = Math.random() * 2048; defense.y = Math.random() * -1000; defenses.push(defense); game.addChild(defense); } // Update bombs bombs.forEach(function (bomb, index) { bomb.update(); defenses.forEach(function (defense) { if (bomb.intersects(defense)) { defense.destroy(); bomb.destroy(); defenses.splice(defenses.indexOf(defense), 1); bombs.splice(index, 1); } }); // Check for collision between player's bombs and enemy ships enemyShips.forEach(function (enemyShip) { if (bomb.intersects(enemyShip)) { enemyShip.destroy(); bomb.destroy(); enemyShips.splice(enemyShips.indexOf(enemyShip), 1); bombs.splice(index, 1); } }); // Check for collision between player's bombs and enemy bombers enemyBombers.forEach(function (enemyBomber) { if (bomb.intersects(enemyBomber)) { enemyBomber.destroy(); bomb.destroy(); enemyBombers.splice(enemyBombers.indexOf(enemyBomber), 1); bombs.splice(index, 1); } }); // Check for collision between player's bombs and stealth bombers stealthBombers.forEach(function (stealthBomber) { if (bomb.intersects(stealthBomber)) { stealthBomber.destroy(); bomb.destroy(); stealthBombers.splice(stealthBombers.indexOf(stealthBomber), 1); bombs.splice(index, 1); } }); }); // Update powerups powerups.forEach(function (powerup, index) { powerup.update(); if (viggen.intersects(powerup)) { // Apply powerup effect console.log("Powerup collected!"); powerup.destroy(); powerups.splice(index, 1); } }); // Spawn powerups every 5 seconds if (LK.ticks % 300 === 0) { var powerup = new Powerup(); powerup.x = Math.random() * 2048; powerup.y = Math.random() * -1000; powerups.push(powerup); game.addChild(powerup); } // Drop bombs if (LK.ticks % 60 === 0) { var bomb = new Bomb(); bomb.x = viggen.x; bomb.y = viggen.y; bombs.push(bomb); game.addChild(bomb); } };
/****
* Classes
****/
// Class for bombs dropped by Viggen
var Bomb = Container.expand(function () {
var self = Container.call(this);
var bombGraphics = self.attachAsset('bomb', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 15;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.destroy();
}
};
});
// Class for enemy bullets
var Bullet = Container.expand(function () {
var self = Container.call(this);
var bulletGraphics = self.attachAsset('bullet', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -5;
self.update = function () {
self.y += self.speed;
if (self.y < 0) {
self.destroy();
}
};
});
// Class for enemy defenses
var Defense = Container.expand(function () {
var self = Container.call(this);
var defenseGraphics = self.attachAsset('defense', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -100;
}
};
});
// Class for Dogfighter enemy jets
var Dogfighter = Container.expand(function () {
var self = Container.call(this);
var dogfighterGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 7; // Faster than regular enemy ships
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -100;
}
};
self.shoot = function () {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
bullets.push(bullet);
game.addChild(bullet);
};
});
// Class for enemy bombers
var EnemyBomber = Container.expand(function () {
var self = Container.call(this);
var bomberGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 3;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -100;
}
};
self.dropBomb = function () {
var bomb = new Bomb();
bomb.x = self.x;
bomb.y = self.y;
bombs.push(bomb);
game.addChild(bomb);
};
});
// Class for the enemy encyclopedia
var EnemyEncyclopedia = Container.expand(function () {
var self = Container.call(this);
self.update = function () {
// Update logic for EnemyEncyclopedia
};
self.down = function (x, y, obj) {
// Add double tap event listener
if (this.lastTap) {
var diff = Date.now() - this.lastTap;
if (diff < 300) {
// Show enemy details when double tapped
console.log("Enemy Details: ");
enemyShips.forEach(function (enemyShip, index) {
console.log("Enemy " + (index + 1) + ": " + "Position - x: " + enemyShip.x + ", y: " + enemyShip.y);
});
}
}
this.lastTap = Date.now();
};
});
// Class for enemy ships
var EnemyShip = Container.expand(function () {
var self = Container.call(this);
var enemyShipGraphics = self.attachAsset('enemyShip', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -100;
}
};
self.shoot = function () {
var bullet = new Bullet();
bullet.x = self.x;
bullet.y = self.y;
bullets.push(bullet);
game.addChild(bullet);
};
});
// Class for the lore button
var LoreButton = Container.expand(function () {
var self = Container.call(this);
var buttonGraphics = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Update logic for LoreButton
};
self.down = function (x, y, obj) {
// Show lore when button is pressed
console.log("Lore: In the midst of the Cold War, a lone Viggen pilot embarks on a daring mission deep into Soviet territory. Outnumbered and outgunned, the pilot must rely on skill and cunning to survive. This is their story.");
};
});
// Class for powerups
var Powerup = Container.expand(function () {
var self = Container.call(this);
var powerupGraphics = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 5;
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.destroy();
}
};
});
// Class for stealth bombers
var StealthBomber = Container.expand(function () {
var self = Container.call(this);
var stealthBomberGraphics = self.attachAsset('stealthBomber', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 10; // Incredibly fast speed
self.update = function () {
self.y += self.speed;
if (self.y > 2732) {
self.y = -100;
}
};
});
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
// Class for the player's aircraft
var Viggen = Container.expand(function () {
var self = Container.call(this);
var viggenGraphics = self.attachAsset('viggen', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 10;
self.update = function () {
// Update logic for Viggen
};
self.move = function (x, y, obj) {
self.x = x;
self.y = y;
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Initialize player Viggen
var viggen = game.addChild(new Viggen());
viggen.x = 1024;
viggen.y = 2400;
// Initialize lore button
var loreButton = game.addChild(new LoreButton());
loreButton.x = 1800;
loreButton.y = 100;
// Initialize enemy encyclopedia
var enemyEncyclopedia = game.addChild(new EnemyEncyclopedia());
enemyEncyclopedia.x = 1800;
enemyEncyclopedia.y = 200;
// Initialize bullets array
var bullets = [];
// Initialize defenses array
var defenses = [];
// Initialize enemy ships
var enemyShips = [];
for (var i = 0; i < 5; i++) {
var enemyShip = new EnemyShip();
enemyShip.x = Math.random() * 2048;
enemyShip.y = Math.random() * -1000;
enemyShips.push(enemyShip);
game.addChild(enemyShip);
}
// Initialize enemy bombers
var enemyBombers = [];
for (var i = 0; i < 3; i++) {
var enemyBomber = new EnemyBomber();
enemyBomber.x = Math.random() * 2048;
enemyBomber.y = Math.random() * -1000;
enemyBombers.push(enemyBomber);
game.addChild(enemyBomber);
}
// Initialize Dogfighters
var dogfighters = [];
for (var i = 0; i < 2; i++) {
var dogfighter = new Dogfighter();
dogfighter.x = Math.random() * 2048;
dogfighter.y = Math.random() * -1000;
dogfighters.push(dogfighter);
game.addChild(dogfighter);
}
// Initialize stealth bombers
var stealthBombers = [];
for (var i = 0; i < 1; i++) {
// Rare occurrence
var stealthBomber = new StealthBomber();
stealthBomber.x = Math.random() * 2048;
stealthBomber.y = Math.random() * -1000;
stealthBombers.push(stealthBomber);
game.addChild(stealthBomber);
}
// Initialize powerups array
var powerups = [];
// Initialize bombs
var bombs = [];
// Handle game move events
game.move = function (x, y, obj) {
var game_position = game.toLocal(obj.global);
viggen.move(game_position.x, game_position.y, obj);
};
// Handle game update events
game.update = function () {
// Update enemy ships
enemyShips.forEach(function (enemyShip) {
enemyShip.update();
if (viggen.intersects(enemyShip)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
// Make enemy ships shoot at the player every 2 seconds
if (LK.ticks % 120 === 0) {
enemyShip.shoot();
}
});
// Update Dogfighters
dogfighters.forEach(function (dogfighter) {
dogfighter.update();
if (viggen.intersects(dogfighter)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
// Make Dogfighters shoot bombs in front every 1.5 seconds
if (LK.ticks % 90 === 0) {
dogfighter.shoot();
}
});
// Update enemy bombers
enemyBombers.forEach(function (enemyBomber) {
enemyBomber.update();
if (viggen.intersects(enemyBomber)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
// Make enemy bombers drop bombs every 3 seconds
if (LK.ticks % 180 === 0) {
enemyBomber.dropBomb();
}
});
// Update stealth bombers
stealthBombers.forEach(function (stealthBomber) {
stealthBomber.update();
if (viggen.intersects(stealthBomber)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
});
// Check for collision between player's aircraft and enemy bullets
bullets.forEach(function (bullet) {
if (viggen.intersects(bullet)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
});
// Check for collision between player's aircraft and enemy defenses
defenses.forEach(function (defense) {
if (viggen.intersects(defense)) {
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
}
});
// Spawn new defenses every 2 seconds
if (LK.ticks % 120 === 0) {
var defense = new Defense();
defense.x = Math.random() * 2048;
defense.y = Math.random() * -1000;
defenses.push(defense);
game.addChild(defense);
}
// Update bombs
bombs.forEach(function (bomb, index) {
bomb.update();
defenses.forEach(function (defense) {
if (bomb.intersects(defense)) {
defense.destroy();
bomb.destroy();
defenses.splice(defenses.indexOf(defense), 1);
bombs.splice(index, 1);
}
});
// Check for collision between player's bombs and enemy ships
enemyShips.forEach(function (enemyShip) {
if (bomb.intersects(enemyShip)) {
enemyShip.destroy();
bomb.destroy();
enemyShips.splice(enemyShips.indexOf(enemyShip), 1);
bombs.splice(index, 1);
}
});
// Check for collision between player's bombs and enemy bombers
enemyBombers.forEach(function (enemyBomber) {
if (bomb.intersects(enemyBomber)) {
enemyBomber.destroy();
bomb.destroy();
enemyBombers.splice(enemyBombers.indexOf(enemyBomber), 1);
bombs.splice(index, 1);
}
});
// Check for collision between player's bombs and stealth bombers
stealthBombers.forEach(function (stealthBomber) {
if (bomb.intersects(stealthBomber)) {
stealthBomber.destroy();
bomb.destroy();
stealthBombers.splice(stealthBombers.indexOf(stealthBomber), 1);
bombs.splice(index, 1);
}
});
});
// Update powerups
powerups.forEach(function (powerup, index) {
powerup.update();
if (viggen.intersects(powerup)) {
// Apply powerup effect
console.log("Powerup collected!");
powerup.destroy();
powerups.splice(index, 1);
}
});
// Spawn powerups every 5 seconds
if (LK.ticks % 300 === 0) {
var powerup = new Powerup();
powerup.x = Math.random() * 2048;
powerup.y = Math.random() * -1000;
powerups.push(powerup);
game.addChild(powerup);
}
// Drop bombs
if (LK.ticks % 60 === 0) {
var bomb = new Bomb();
bomb.x = viggen.x;
bomb.y = viggen.y;
bombs.push(bomb);
game.addChild(bomb);
}
};
Pixel art of a Saab Viggen, the Swedish fighter jet.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
A anti-air missile. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
A Soviet fighter jet, facing down. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
supply crate. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows