Code edit (1 edits merged)
Please save this source code
User prompt
In the top right corner of the screen it should say little orange “Glaud”.
Code edit (1 edits merged)
Please save this source code
User prompt
In the center of the screen for the first 3 seconds, write “Glaud” in orange. ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
let the cows fall back to their old place from gravity when the beam closes.
Remix started
Copy Aliens love cows
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// AlarmDevice class
var AlarmDevice = Container.expand(function () {
var self = Container.call(this);
var alarmGraphics = self.attachAsset('alarmdevice', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Red flashing effect will be triggered in the game update loop after 3 seconds of beam use
};
});
// But stop if the beam's top edge is at or above the UFO's bottom edge
// Beam class
var Beam = Container.expand(function () {
var self = Container.call(this);
var beamGraphics = self.attachAsset('beam', {
anchorX: 0.5,
anchorY: 1.0
});
beamGraphics.rotation = -Math.PI / 2;
self.update = function () {
// But stop if the beam's top edge is at or above the UFO's bottom edge
if (self.y - self.height / 2 > ufo.y + ufo.height / 2) {
self.y -= 5;
}
};
});
// Cow class
var Cow = Container.expand(function () {
var self = Container.call(this);
var cowGraphics = self.attachAsset('cow', {
anchorX: 0.5,
anchorY: 0.5
});
self.isAbducted = false; // Add a new property to check if the cow is being abducted
self.update = function () {
if (!self.isAbducted) {
// Check if the cow is falling
if (this.isFalling) {
// Apply gravity
this.fallVelocity += 0.5; // Gravity acceleration
this.y += this.fallVelocity;
// Check if the cow has reached the ground
if (this.y >= 2000) {
// The original Y position where cows were created
this.y = 2000;
this.isFalling = false;
this.fallVelocity = 0;
}
} else {
// If the cow is not being abducted and not falling, it can move freely
if (this.x < guards[0].x) {
this.x = guards[0].x;
}
if (this.x > guards[1].x) {
this.x = guards[1].x;
}
}
} else {
// If the cow is being abducted, it should move towards the UFO
var dx = ufo.x - this.x;
var dy = ufo.y - this.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance > 5 && this.y - this.height / 2 > ufo.y + ufo.height / 2) {
LK.getSound('cowmooing').play(); // Play cow mooing sound when the cow is being abducted
// If the cow is not yet at the UFO and the cow's top edge is below the UFO's bottom edge, it should continue moving towards it
this.x += dx / distance * 5;
this.y += dy / distance * 5;
} else {
// If the cow has reached the UFO or its top edge is at or above the UFO's bottom edge, it should disappear
this.destroy();
cows.splice(cows.indexOf(this), 1);
}
}
};
});
// Ground class
var Ground = Container.expand(function () {
var self = Container.call(this);
var groundGraphics = self.attachAsset('ground', {
anchorX: 0.5,
anchorY: 1.0
});
});
// Moon class
var Moon = Container.expand(function () {
var self = Container.call(this);
var moonGraphics = self.attachAsset('moon', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Moon shining animation logic
// this.alpha = 0.5 + Math.sin(LK.ticks / 30) / 2; // Create a shining effect by changing the alpha value
};
});
// SecurityGuard class
var SecurityGuard = Container.expand(function () {
var self = Container.call(this);
var guardGraphics = self.attachAsset('guard', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
if (self.visible) {
if (!self.lastShotTime || Date.now() - self.lastShotTime > 1000) {
// Add a cooldown of 1 second between shots
self.lastShotTime = Date.now();
// Create a red laser beam shooting towards the UFO
var laser = new Container();
var laserGraphics = laser.attachAsset('redlaser', {
anchorX: 0.5,
anchorY: 0.0
});
laser.x = self.x;
laser.y = self.y;
laser.rotation = Math.atan2(ufo.y - self.y, ufo.x - self.x);
game.addChildAt(laser, game.getChildIndex(self));
// Move the laser towards the UFO
laser.update = function () {
laser.x += Math.cos(laser.rotation) * 10;
laser.y += Math.sin(laser.rotation) * 10;
// Ensure the laser beams maintain ten times the distance between them
if (game.ticks % 10 === 0) {
laser.x += Math.cos(laser.rotation) * 10;
laser.y += Math.sin(laser.rotation) * 10;
}
// Destroy the laser if it goes off screen
if (laser.x < 0 || laser.x > 2048 || laser.y < 0 || laser.y > 2732) {
laser.destroy();
}
if (laser.intersects(ufo)) {
// Reduce UFO health by 10%
ufoHealthBar.scaleX -= 0.1;
if (ufoHealthBar.scaleX <= 0) {
// If health is depleted, replace the UFO with an explosion asset
if (!ufo.exploded) {
var explosion = LK.getAsset('explosion', {
anchorX: 0.5,
anchorY: 0.5
});
explosion.x = ufo.x;
explosion.y = ufo.y;
game.addChild(explosion);
ufo.exploded = true;
LK.setTimeout(function () {
explosion.destroy();
ufo.destroy();
guards.forEach(function (guard) {
guard.visible = false; // Stop guards from firing
});
LK.showGameOver(); // Trigger game over
}, 1000); // Display explosion for 1 second
}
}
laser.destroy(); // Destroy the laser after hitting the UFO
}
};
}
}
};
});
// StarrySky class
var StarrySky = Container.expand(function () {
var self = Container.call(this);
var starrySkyGraphics = self.attachAsset('starrySky', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Starry sky animation logic
this.alpha = 0.5 + Math.sin(LK.ticks / 120) / 2; // Create a shining effect by changing the alpha value
};
});
//<Assets used in the game will automatically appear here>
//<Write imports for supported plugins here>
// UFO class
var UFO = Container.expand(function () {
var self = Container.call(this);
var ufoGraphics = self.attachAsset('ufo', {
anchorX: 0.5,
anchorY: 0.5
});
self.beam = null; // Add a beam property to the UFO
self.update = function () {
// UFO movement logic will be handled in the game move event
if (self.beam) {
// If the beam exists, make it flash by changing its alpha value
self.beam.alpha = 0.5 + Math.sin(LK.ticks / 10) / 2;
// If the beam's top is inside the UFO, make it disappear
if (self.beam.y <= self.y + self.height / 2) {
self.beam.destroy();
self.beam = null;
}
}
};
});
// Wormhole class
var Wormhole = Container.expand(function () {
var self = Container.call(this);
var wormholeGraphics = self.attachAsset('wormhole', {
anchorX: 0.5,
anchorY: 0.5
});
self.update = function () {
// Rotate the wormhole continuously
self.rotation += 0.05; // Adjust the rotation speed as needed
};
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 //Init game with black background
});
/****
* Game Code
****/
// Display "Glaud" text in orange for first 3 seconds
var glaudText = new Text2("Glaud", {
size: 200,
fill: 0xFF8000 // Orange color
});
glaudText.anchor.set(0.5, 0.5);
glaudText.x = 1024; // Center horizontally
glaudText.y = 1366; // Center vertically
game.addChild(glaudText);
// Use setTimeout to hide the text after 3 seconds
LK.setTimeout(function () {
tween(glaudText, {
alpha: 0
}, {
duration: 500,
easing: tween.easeOut,
onFinish: function onFinish() {
glaudText.destroy();
}
});
}, 3000);
// Initialize variables
var ufoHealthBar = new Container();
var healthBarGraphics = ufoHealthBar.attachAsset('beam', {
anchorX: 0.5,
anchorY: 0.5,
width: 200,
height: 20,
color: 0x00ff00 // Green color
});
ufoHealthBar.x = 1024; // Center horizontally
ufoHealthBar.y = 20; // Position at the top of the screen
ufoHealthBar.visible = false; // Initially hidden
game.addChild(ufoHealthBar);
var starrySky = game.addChild(new StarrySky());
starrySky.x = 1024; // Center horizontally
starrySky.y = 1366; // Center vertically
// Initialize variables
var ground = game.addChild(new Ground());
var moon = game.addChild(new Moon());
moon.x = 2048 - moon.width / 2 - 200; // Position moon at the upper right corner and move it left by 200 units
moon.y = moon.height / 2 + 200; // Move the moon down by 200 units
var wormhole = game.addChild(new Wormhole());
var alarmdevice = game.addChild(new AlarmDevice());
alarmdevice.x = 565; // Set x position of alarmdevice
alarmdevice.y = 850; // Set y position of alarmdevice
wormhole.x = moon.x; // Center wormhole on the moon
wormhole.y = moon.y; // Align vertically with the moon
wormhole.visible = false; // Initially hide the wormhole
ground.x = 1024; // Center horizontally
ground.y = 2732; // Bottom of the screen
var ufo = game.addChild(new UFO());
ufo.x = 1024; // Center horizontally
ufo.y = 500; // Upper half of the screen
var cows = [];
var guards = [];
var sucking = false;
var suckStartTime = 0;
var beam = null; // Define the beam variable
var laserStartTime = null; // Track when the laser beam starts
var laserActive = false; // Track if the laser is currently active
// Create cows
for (var i = 0; i < 10; i++) {
var cow = new Cow();
do {
cow.x = Math.random() * 2048;
cow.y = 2000 + Math.random() * 500; // Lower half of the screen
} while (cows.some(function (existingCow) {
return Math.abs(existingCow.x - cow.x) < 50 && Math.abs(existingCow.y - cow.y) < 50;
}));
cows.push(cow);
game.addChild(cow);
}
// Sort cows based on their y-coordinate to ensure correct display order
cows.sort(function (a, b) {
return a.y - b.y;
});
// Add cows to the game in sorted order
cows.forEach(function (cow) {
game.addChild(cow);
});
// Create security guards but do not add them to the game yet
for (var i = 0; i < 2; i++) {
var guard = new SecurityGuard();
guard.x = i * 2048 + (i == 0 ? 200 : -200); // Position guards at each side of the screen but 200 units closer to the center
guard.y = 2600; // Bottom of the screen
guards.push(guard);
}
// Handle UFO movement
game.move = function (x, y, obj) {
ufo.x = x;
ufo.y = Math.min(y, 1366); // Restrict to upper half
};
// Handle mouse down event
game.down = function (x, y, obj) {
suckStartTime = Date.now(); // Track the time when the player starts pressing down
// Check if the player clicked on a cow
for (var i = 0; i < cows.length; i++) {
if (Math.abs(cows[i].x - x) < 50 && Math.abs(cows[i].y - y) < 50) {
cows[i].isAbducted = true; // Set the isAbducted property of the clicked cow to true
beam = new Beam();
beam.x = cows[i].x;
beam.y = cows[i].y;
beam.height = Math.abs(cows[i].y - ufo.y); // Adjust the beam's height to match the distance between the UFO and the cow
game.addChildAt(beam, game.getChildIndex(cows[0])); // Add the beam behind the cows in the display list
break;
}
}
};
// Handle mouse up event
game.up = function (x, y, obj) {
if (beam) {
beam.destroy();
beam = null;
for (var i = 0; i < cows.length; i++) {
// Set the isAbducted property of all cows to false
cows[i].isAbducted = false;
// Store the cow's falling position and add gravity property
cows[i].isFalling = true;
cows[i].fallVelocity = 0;
}
suckStartTime = 0; // Reset the suckStartTime when the player releases the click
}
};
// Game update loop
game.update = function () {
if (beam && !laserActive) {
laserStartTime = Date.now();
laserActive = true;
} else if (!beam && laserActive) {
laserStartTime = null;
laserActive = false;
}
if (laserActive && Date.now() - laserStartTime >= 3000) {
// Add red flashing animation to the alarmdevice
alarmdevice.update = function () {
alarmdevice.children[0].tint = 0xff0000 * (0.5 + Math.sin(LK.ticks / 10) / 2);
};
LK.getSound('alarm').play(); // Play alarm sound after 3 seconds of continuous laser use
ufoHealthBar.visible = true; // Show the health bar
LK.getSound('alarm').play();
laserStartTime = null; // Reset to prevent repeated alarms
laserActive = false;
// Add guards to the game after the alarm sound has played
guards.forEach(function (guard) {
game.addChild(guard);
});
}
if (sucking) {
var currentTime = Date.now();
if (currentTime - suckStartTime > 2000) {
// Move guards horizontally towards the UFO
guards.forEach(function (guard) {
if (guard.x < ufo.x) {
guard.x += 2; // Move right
} else if (guard.x > ufo.x) {
guard.x -= 2; // Move left
}
// Shoot thin red lines towards the UFO
var line = new Container();
var lineGraphics = line.attachAsset('redlaser', {
anchorX: 0.5,
anchorY: 0.5
});
line.x = guard.x;
line.y = guard.y;
line.rotation = Math.atan2(ufo.y - guard.y, ufo.x - guard.x);
game.addChild(line);
line.update = function () {
line.x += Math.cos(line.rotation) * 10;
line.y += Math.sin(line.rotation) * 10;
if (line.x < 0 || line.x > 2048 || line.y < 0 || line.y > 2732) {
line.destroy();
}
if (line.intersects(ufo)) {
line.destroy();
}
};
});
}
if (currentTime - suckStartTime > 5000) {
// Move guards horizontally towards the UFO
guards.forEach(function (guard) {
if (guard.x < ufo.x) {
guard.x += 2; // Move right
} else if (guard.x > ufo.x) {
guard.x -= 2; // Move left
}
// Shoot thin red lines towards the UFO
var line = new Container();
var lineGraphics = line.attachAsset('beam', {
anchorX: 0.5,
anchorY: 0.5,
color: 0xff0000,
// Red color
width: 2,
// Thin line
height: Math.abs(guard.y - ufo.y)
});
line.x = guard.x;
line.y = guard.y;
game.addChild(line);
});
}
var currentTime = Date.now();
if (currentTime - suckStartTime > 6000) {
// Game over logic
LK.effects.flashScreen(0xff0000, 1000);
LK.showGameOver();
if (beam) {
beam.destroy();
beam = null;
}
} else {
// Suck cows
for (var i = cows.length - 1; i >= 0; i--) {
if (Math.abs(cows[i].x - ufo.x) < 50 && Math.abs(cows[i].y - ufo.y) < 50) {
cows[i].destroy();
cows.splice(i, 1);
}
}
}
}
// Check if all cows are collected
if (cows.length === 0) {
wormhole.visible = true; // Display the wormhole
}
// Check if UFO intersects with the wormhole
if (ufo.intersects(wormhole)) {
// Ensure the intersection is with the wormhole and not the pause button
if (wormhole.visible) {
// Increase UFO's life to 100%
ufoHealthBar.scaleX = 1.0;
// Hide guards when UFO intersects with the wormhole
guards.forEach(function (guard) {
guard.visible = false;
});
// Reduce UFO size continuously by 0.05
ufo.scaleX = Math.max(0, ufo.scaleX - 0.05);
ufo.scaleY = Math.max(0, ufo.scaleY - 0.05);
// Stop the alarm sound when UFO intersects with the wormhole
LK.getSound('alarm').stop();
// Display 'Level Completed' with a flash animated effect
var levelCompletedText = new Text2('Level Completed', {
size: 200,
fill: 0xFFFFFF
});
levelCompletedText.anchor.set(0.5, 0.5);
levelCompletedText.x = 1024; // Center horizontally
levelCompletedText.y = 1366; // Center vertically
game.addChild(levelCompletedText);
// Use tween to create a flash effect
tween(levelCompletedText, {
alpha: 0
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
tween(levelCompletedText, {
alpha: 1
}, {
duration: 500,
easing: tween.easeInOut,
onFinish: function onFinish() {
levelCompletedText.visible = false; // Hide the text after 1 second
// Reload the game for the next level
LK.showYouWin(10); // This will reset the game state and start a new level with a final score of 10
}
});
}
});
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -225,8 +225,29 @@
/****
* Game Code
****/
+// Display "Glaud" text in orange for first 3 seconds
+var glaudText = new Text2("Glaud", {
+ size: 200,
+ fill: 0xFF8000 // Orange color
+});
+glaudText.anchor.set(0.5, 0.5);
+glaudText.x = 1024; // Center horizontally
+glaudText.y = 1366; // Center vertically
+game.addChild(glaudText);
+// Use setTimeout to hide the text after 3 seconds
+LK.setTimeout(function () {
+ tween(glaudText, {
+ alpha: 0
+ }, {
+ duration: 500,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ glaudText.destroy();
+ }
+ });
+}, 3000);
// Initialize variables
var ufoHealthBar = new Container();
var healthBarGraphics = ufoHealthBar.attachAsset('beam', {
anchorX: 0.5,
Cute alien in ufo spaceship. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Windows xp hill with a red barn on the top of the hill at night. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Starry sky. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Shining fullmoon. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Sherif man, drone view.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
red flashing police alarm device asset from profile view
explosion. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.