User prompt
Add a Pink malware that shoots three projectiles to push the player off a platform
User prompt
Add a purple malware that slows ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Add a blue malware that shoots you and rams into you
User prompt
Add a green malware that shoots you off a platform
User prompt
Add malware that attempts to push you off by raming into you
Code edit (1 edits merged)
Please save this source code
User prompt
Circuit Runner: Digital Platformer Adventure
Initial prompt
Make a platformer about traversing a PC
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var DataPacket = Container.expand(function () {
var self = Container.call(this);
var packetGraphics = self.attachAsset('dataPacket', {
anchorX: 0.5,
anchorY: 0.5
});
self.collected = false;
self.rotationSpeed = 0.05;
self.update = function () {
packetGraphics.rotation += self.rotationSpeed;
// Floating animation
self.y += Math.sin(LK.ticks * 0.1) * 0.5;
};
self.collect = function () {
if (!self.collected) {
self.collected = true;
LK.setScore(LK.getScore() + 10);
scoreText.setText('Data: ' + LK.getScore());
LK.getSound('collect').play();
// Tween out
tween(self, {
alpha: 0,
scaleX: 2,
scaleY: 2
}, {
duration: 300,
onFinish: function onFinish() {
self.destroy();
}
});
}
};
return self;
});
var ElectricSpark = Container.expand(function () {
var self = Container.call(this);
var sparkGraphics = self.attachAsset('electricSpark', {
anchorX: 0.5,
anchorY: 0.5
});
self.moveDirection = 1;
self.moveSpeed = 3;
self.moveRange = 150;
self.startX = 0;
self.update = function () {
// Flash effect
sparkGraphics.alpha = 0.5 + Math.sin(LK.ticks * 0.3) * 0.5;
// Move back and forth
self.x += self.moveSpeed * self.moveDirection;
if (Math.abs(self.x - self.startX) > self.moveRange) {
self.moveDirection *= -1;
}
// Check player collision
if (self.intersects(player) && !playerInvulnerable) {
playerHit();
}
};
return self;
});
var Platform = Container.expand(function (type) {
var self = Container.call(this);
var assetType = type || 'platform';
var platformGraphics = self.attachAsset(assetType, {
anchorX: 0.5,
anchorY: 0.5
});
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 1.0
});
self.velocityX = 0;
self.velocityY = 0;
self.speed = 8;
self.jumpPower = -18;
self.gravity = 0.8;
self.onGround = false;
self.canJump = true;
self.update = function () {
// Apply gravity
self.velocityY += self.gravity;
// Apply velocity
self.x += self.velocityX;
self.y += self.velocityY;
// Friction
self.velocityX *= 0.85;
// Keep player in bounds
if (self.x < 20) self.x = 20;
if (self.x > 2028) self.x = 2028;
// Reset ground state
self.onGround = false;
// Check platform collisions
for (var i = 0; i < platforms.length; i++) {
var platform = platforms[i];
if (self.intersects(platform)) {
if (self.velocityY > 0 && self.y - 30 < platform.y) {
self.y = platform.y;
self.velocityY = 0;
self.onGround = true;
self.canJump = true;
}
}
}
// Fall limit
if (self.y > 2800) {
self.x = playerStartX;
self.y = playerStartY;
self.velocityX = 0;
self.velocityY = 0;
}
};
self.jump = function () {
if (self.canJump && self.onGround) {
self.velocityY = self.jumpPower;
self.onGround = false;
self.canJump = false;
LK.getSound('jump').play();
}
};
self.moveLeft = function () {
self.velocityX = -self.speed;
};
self.moveRight = function () {
self.velocityX = self.speed;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
// Game variables
var player;
var platforms = [];
var dataPackets = [];
var electricSparks = [];
var playerStartX = 100;
var playerStartY = 2400;
var playerInvulnerable = false;
var leftPressed = false;
var rightPressed = false;
var touchStartX = 0;
var isTouching = false;
// Add background
var bg = game.attachAsset('background', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 0
});
// Create UI
var scoreText = new Text2('Data: 0', {
size: 60,
fill: '#00ffff'
});
scoreText.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreText);
scoreText.y = 120;
var instructionText = new Text2('Tap left/right to move, tap anywhere to jump', {
size: 40,
fill: '#ffffff'
});
instructionText.anchor.set(0.5, 1);
LK.gui.bottom.addChild(instructionText);
instructionText.y = -50;
// Create player
player = game.addChild(new Player());
player.x = playerStartX;
player.y = playerStartY;
// Create level platforms (motherboard circuit layout)
createLevel();
// Game event handlers
game.down = function (x, y, obj) {
isTouching = true;
touchStartX = x;
// Jump on tap
player.jump();
};
game.up = function (x, y, obj) {
isTouching = false;
leftPressed = false;
rightPressed = false;
};
game.move = function (x, y, obj) {
if (isTouching) {
var deltaX = x - touchStartX;
if (deltaX < -50 && !leftPressed) {
leftPressed = true;
rightPressed = false;
} else if (deltaX > 50 && !rightPressed) {
rightPressed = true;
leftPressed = false;
}
}
};
// Player hit function
function playerHit() {
playerInvulnerable = true;
LK.getSound('electric').play();
// Flash player red
tween(player, {
alpha: 0.3
}, {
duration: 100
});
tween(player, {
alpha: 1
}, {
duration: 100
});
// Knockback
player.velocityX = player.x < 1024 ? 15 : -15;
player.velocityY = -10;
LK.setTimeout(function () {
playerInvulnerable = false;
}, 1000);
}
// Level creation function
function createLevel() {
// Main platform path (motherboard traces)
var platformPositions = [{
x: 200,
y: 2500,
type: 'platform'
}, {
x: 500,
y: 2400,
type: 'circuit'
}, {
x: 800,
y: 2300,
type: 'platform'
}, {
x: 1100,
y: 2200,
type: 'circuit'
}, {
x: 1400,
y: 2100,
type: 'platform'
}, {
x: 1700,
y: 2000,
type: 'circuit'
}, {
x: 1400,
y: 1900,
type: 'platform'
}, {
x: 1100,
y: 1800,
type: 'circuit'
}, {
x: 800,
y: 1700,
type: 'platform'
}, {
x: 500,
y: 1600,
type: 'circuit'
}, {
x: 200,
y: 1500,
type: 'platform'
}, {
x: 500,
y: 1400,
type: 'platform'
}, {
x: 800,
y: 1300,
type: 'circuit'
}, {
x: 1100,
y: 1200,
type: 'platform'
}, {
x: 1400,
y: 1100,
type: 'circuit'
}, {
x: 1700,
y: 1000,
type: 'platform'
}];
// Create platforms
for (var i = 0; i < platformPositions.length; i++) {
var pos = platformPositions[i];
var platform = new Platform(pos.type);
platform.x = pos.x;
platform.y = pos.y;
platforms.push(platform);
game.addChild(platform);
}
// Create data packets
var packetPositions = [{
x: 500,
y: 2350
}, {
x: 1100,
y: 2150
}, {
x: 1700,
y: 1950
}, {
x: 800,
y: 1650
}, {
x: 200,
y: 1450
}, {
x: 800,
y: 1250
}, {
x: 1400,
y: 1050
}, {
x: 1700,
y: 950
}];
for (var j = 0; j < packetPositions.length; j++) {
var packetPos = packetPositions[j];
var packet = new DataPacket();
packet.x = packetPos.x;
packet.y = packetPos.y;
dataPackets.push(packet);
game.addChild(packet);
}
// Create electric sparks (hazards)
var sparkPositions = [{
x: 650,
y: 2350
}, {
x: 950,
y: 2250
}, {
x: 1250,
y: 2150
}, {
x: 1550,
y: 2050
}, {
x: 950,
y: 1750
}, {
x: 650,
y: 1550
}, {
x: 950,
y: 1350
}];
for (var k = 0; k < sparkPositions.length; k++) {
var sparkPos = sparkPositions[k];
var spark = new ElectricSpark();
spark.x = sparkPos.x;
spark.y = sparkPos.y;
spark.startX = spark.x;
electricSparks.push(spark);
game.addChild(spark);
}
}
// Main game loop
game.update = function () {
// Handle movement input
if (leftPressed && !rightPressed) {
player.moveLeft();
} else if (rightPressed && !leftPressed) {
player.moveRight();
}
// Check data packet collection
for (var i = dataPackets.length - 1; i >= 0; i--) {
var packet = dataPackets[i];
if (player.intersects(packet) && !packet.collected) {
packet.collect();
dataPackets.splice(i, 1);
}
}
// Check win condition
if (dataPackets.length === 0 && LK.getScore() >= 80) {
LK.showYouWin();
}
// Camera follow (simple vertical follow)
if (player.y < 1500) {
var targetY = Math.max(0, 1366 - player.y);
game.y += (targetY - game.y) * 0.05;
}
};
// Start background music
LK.playMusic('bgmusic'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,408 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var DataPacket = Container.expand(function () {
+ var self = Container.call(this);
+ var packetGraphics = self.attachAsset('dataPacket', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.collected = false;
+ self.rotationSpeed = 0.05;
+ self.update = function () {
+ packetGraphics.rotation += self.rotationSpeed;
+ // Floating animation
+ self.y += Math.sin(LK.ticks * 0.1) * 0.5;
+ };
+ self.collect = function () {
+ if (!self.collected) {
+ self.collected = true;
+ LK.setScore(LK.getScore() + 10);
+ scoreText.setText('Data: ' + LK.getScore());
+ LK.getSound('collect').play();
+ // Tween out
+ tween(self, {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ }
+ };
+ return self;
+});
+var ElectricSpark = Container.expand(function () {
+ var self = Container.call(this);
+ var sparkGraphics = self.attachAsset('electricSpark', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.moveDirection = 1;
+ self.moveSpeed = 3;
+ self.moveRange = 150;
+ self.startX = 0;
+ self.update = function () {
+ // Flash effect
+ sparkGraphics.alpha = 0.5 + Math.sin(LK.ticks * 0.3) * 0.5;
+ // Move back and forth
+ self.x += self.moveSpeed * self.moveDirection;
+ if (Math.abs(self.x - self.startX) > self.moveRange) {
+ self.moveDirection *= -1;
+ }
+ // Check player collision
+ if (self.intersects(player) && !playerInvulnerable) {
+ playerHit();
+ }
+ };
+ return self;
+});
+var Platform = Container.expand(function (type) {
+ var self = Container.call(this);
+ var assetType = type || 'platform';
+ var platformGraphics = self.attachAsset(assetType, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ self.velocityX = 0;
+ self.velocityY = 0;
+ self.speed = 8;
+ self.jumpPower = -18;
+ self.gravity = 0.8;
+ self.onGround = false;
+ self.canJump = true;
+ self.update = function () {
+ // Apply gravity
+ self.velocityY += self.gravity;
+ // Apply velocity
+ self.x += self.velocityX;
+ self.y += self.velocityY;
+ // Friction
+ self.velocityX *= 0.85;
+ // Keep player in bounds
+ if (self.x < 20) self.x = 20;
+ if (self.x > 2028) self.x = 2028;
+ // Reset ground state
+ self.onGround = false;
+ // Check platform collisions
+ for (var i = 0; i < platforms.length; i++) {
+ var platform = platforms[i];
+ if (self.intersects(platform)) {
+ if (self.velocityY > 0 && self.y - 30 < platform.y) {
+ self.y = platform.y;
+ self.velocityY = 0;
+ self.onGround = true;
+ self.canJump = true;
+ }
+ }
+ }
+ // Fall limit
+ if (self.y > 2800) {
+ self.x = playerStartX;
+ self.y = playerStartY;
+ self.velocityX = 0;
+ self.velocityY = 0;
+ }
+ };
+ self.jump = function () {
+ if (self.canJump && self.onGround) {
+ self.velocityY = self.jumpPower;
+ self.onGround = false;
+ self.canJump = false;
+ LK.getSound('jump').play();
+ }
+ };
+ self.moveLeft = function () {
+ self.velocityX = -self.speed;
+ };
+ self.moveRight = function () {
+ self.velocityX = self.speed;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a2e
+});
+
+/****
+* Game Code
+****/
+// Game variables
+var player;
+var platforms = [];
+var dataPackets = [];
+var electricSparks = [];
+var playerStartX = 100;
+var playerStartY = 2400;
+var playerInvulnerable = false;
+var leftPressed = false;
+var rightPressed = false;
+var touchStartX = 0;
+var isTouching = false;
+// Add background
+var bg = game.attachAsset('background', {
+ anchorX: 0,
+ anchorY: 0,
+ x: 0,
+ y: 0
+});
+// Create UI
+var scoreText = new Text2('Data: 0', {
+ size: 60,
+ fill: '#00ffff'
+});
+scoreText.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreText);
+scoreText.y = 120;
+var instructionText = new Text2('Tap left/right to move, tap anywhere to jump', {
+ size: 40,
+ fill: '#ffffff'
+});
+instructionText.anchor.set(0.5, 1);
+LK.gui.bottom.addChild(instructionText);
+instructionText.y = -50;
+// Create player
+player = game.addChild(new Player());
+player.x = playerStartX;
+player.y = playerStartY;
+// Create level platforms (motherboard circuit layout)
+createLevel();
+// Game event handlers
+game.down = function (x, y, obj) {
+ isTouching = true;
+ touchStartX = x;
+ // Jump on tap
+ player.jump();
+};
+game.up = function (x, y, obj) {
+ isTouching = false;
+ leftPressed = false;
+ rightPressed = false;
+};
+game.move = function (x, y, obj) {
+ if (isTouching) {
+ var deltaX = x - touchStartX;
+ if (deltaX < -50 && !leftPressed) {
+ leftPressed = true;
+ rightPressed = false;
+ } else if (deltaX > 50 && !rightPressed) {
+ rightPressed = true;
+ leftPressed = false;
+ }
+ }
+};
+// Player hit function
+function playerHit() {
+ playerInvulnerable = true;
+ LK.getSound('electric').play();
+ // Flash player red
+ tween(player, {
+ alpha: 0.3
+ }, {
+ duration: 100
+ });
+ tween(player, {
+ alpha: 1
+ }, {
+ duration: 100
+ });
+ // Knockback
+ player.velocityX = player.x < 1024 ? 15 : -15;
+ player.velocityY = -10;
+ LK.setTimeout(function () {
+ playerInvulnerable = false;
+ }, 1000);
+}
+// Level creation function
+function createLevel() {
+ // Main platform path (motherboard traces)
+ var platformPositions = [{
+ x: 200,
+ y: 2500,
+ type: 'platform'
+ }, {
+ x: 500,
+ y: 2400,
+ type: 'circuit'
+ }, {
+ x: 800,
+ y: 2300,
+ type: 'platform'
+ }, {
+ x: 1100,
+ y: 2200,
+ type: 'circuit'
+ }, {
+ x: 1400,
+ y: 2100,
+ type: 'platform'
+ }, {
+ x: 1700,
+ y: 2000,
+ type: 'circuit'
+ }, {
+ x: 1400,
+ y: 1900,
+ type: 'platform'
+ }, {
+ x: 1100,
+ y: 1800,
+ type: 'circuit'
+ }, {
+ x: 800,
+ y: 1700,
+ type: 'platform'
+ }, {
+ x: 500,
+ y: 1600,
+ type: 'circuit'
+ }, {
+ x: 200,
+ y: 1500,
+ type: 'platform'
+ }, {
+ x: 500,
+ y: 1400,
+ type: 'platform'
+ }, {
+ x: 800,
+ y: 1300,
+ type: 'circuit'
+ }, {
+ x: 1100,
+ y: 1200,
+ type: 'platform'
+ }, {
+ x: 1400,
+ y: 1100,
+ type: 'circuit'
+ }, {
+ x: 1700,
+ y: 1000,
+ type: 'platform'
+ }];
+ // Create platforms
+ for (var i = 0; i < platformPositions.length; i++) {
+ var pos = platformPositions[i];
+ var platform = new Platform(pos.type);
+ platform.x = pos.x;
+ platform.y = pos.y;
+ platforms.push(platform);
+ game.addChild(platform);
+ }
+ // Create data packets
+ var packetPositions = [{
+ x: 500,
+ y: 2350
+ }, {
+ x: 1100,
+ y: 2150
+ }, {
+ x: 1700,
+ y: 1950
+ }, {
+ x: 800,
+ y: 1650
+ }, {
+ x: 200,
+ y: 1450
+ }, {
+ x: 800,
+ y: 1250
+ }, {
+ x: 1400,
+ y: 1050
+ }, {
+ x: 1700,
+ y: 950
+ }];
+ for (var j = 0; j < packetPositions.length; j++) {
+ var packetPos = packetPositions[j];
+ var packet = new DataPacket();
+ packet.x = packetPos.x;
+ packet.y = packetPos.y;
+ dataPackets.push(packet);
+ game.addChild(packet);
+ }
+ // Create electric sparks (hazards)
+ var sparkPositions = [{
+ x: 650,
+ y: 2350
+ }, {
+ x: 950,
+ y: 2250
+ }, {
+ x: 1250,
+ y: 2150
+ }, {
+ x: 1550,
+ y: 2050
+ }, {
+ x: 950,
+ y: 1750
+ }, {
+ x: 650,
+ y: 1550
+ }, {
+ x: 950,
+ y: 1350
+ }];
+ for (var k = 0; k < sparkPositions.length; k++) {
+ var sparkPos = sparkPositions[k];
+ var spark = new ElectricSpark();
+ spark.x = sparkPos.x;
+ spark.y = sparkPos.y;
+ spark.startX = spark.x;
+ electricSparks.push(spark);
+ game.addChild(spark);
+ }
+}
+// Main game loop
+game.update = function () {
+ // Handle movement input
+ if (leftPressed && !rightPressed) {
+ player.moveLeft();
+ } else if (rightPressed && !leftPressed) {
+ player.moveRight();
+ }
+ // Check data packet collection
+ for (var i = dataPackets.length - 1; i >= 0; i--) {
+ var packet = dataPackets[i];
+ if (player.intersects(packet) && !packet.collected) {
+ packet.collect();
+ dataPackets.splice(i, 1);
+ }
+ }
+ // Check win condition
+ if (dataPackets.length === 0 && LK.getScore() >= 80) {
+ LK.showYouWin();
+ }
+ // Camera follow (simple vertical follow)
+ if (player.y < 1500) {
+ var targetY = Math.max(0, 1366 - player.y);
+ game.y += (targetY - game.y) * 0.05;
+ }
+};
+// Start background music
+LK.playMusic('bgmusic');
\ No newline at end of file