Code edit (1 edits merged)
Please save this source code
User prompt
Huggy's Escape: The Grab Pack Hunt
Initial prompt
can you make a horror game where you grab a device called a grab pack since you work at playtime co and they turn children into living toys and when you go there a toy called huggy wuggy chases you in a vent
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1");
/****
* Classes
****/
var Exit = Container.expand(function () {
var self = Container.call(this);
var exitGraphics = self.attachAsset('exit', {
anchorX: 0.5,
anchorY: 0.5
});
self.lastY = 0;
self.update = function () {
self.lastY = self.y;
};
return self;
});
var Huggy = Container.expand(function () {
var self = Container.call(this);
var huggyGraphics = self.attachAsset('huggy', {
anchorX: 0.5,
anchorY: 0.5
});
self.baseSpeed = 4;
self.currentSpeed = 4;
self.distanceToPlayer = 0;
self.lastY = 0;
self.dangerThreshold = 400;
self.warningActive = false;
self.update = function () {
self.lastY = self.y;
};
return self;
});
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var obstacleGraphics = self.attachAsset('obstacle', {
anchorX: 0.5,
anchorY: 0.5
});
self.slowFactor = 0.5;
self.lastY = 0;
self.update = function () {
self.lastY = self.y;
};
return self;
});
var Player = Container.expand(function () {
var self = Container.call(this);
var playerGraphics = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = 8;
self.isSpeedBoosted = false;
self.boostEndTime = 0;
self.lastX = 0;
self.activateBoost = function () {
self.isSpeedBoosted = true;
self.boostEndTime = LK.ticks + 300;
playerGraphics.tint = 0xFFFF00;
};
self.update = function () {
if (LK.ticks > self.boostEndTime && self.isSpeedBoosted) {
self.isSpeedBoosted = false;
playerGraphics.tint = 0xFFFFFF;
}
self.lastX = self.x;
};
return self;
});
var PowerUp = Container.expand(function () {
var self = Container.call(this);
var powerupGraphics = self.attachAsset('powerup', {
anchorX: 0.5,
anchorY: 0.5
});
self.bobOffset = 0;
self.collected = false;
self.lastY = 0;
self.update = function () {
self.bobOffset += 0.1;
self.y = self.y + Math.sin(self.bobOffset) * 0.5;
self.lastY = self.y;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x1a1a2e
});
/****
* Game Code
****/
var player = game.addChild(new Player());
player.x = 200;
player.y = 400;
var huggy = game.addChild(new Huggy());
huggy.x = 200;
huggy.y = -200;
var obstacles = [];
var powerups = [];
var exit = null;
var score = 0;
var gameActive = true;
var playerOnObstacle = false;
var playerMoving = false;
var playerTargetX = 200;
var scoreTxt = new Text2('Distance: 0m', {
size: 80,
fill: '#FFFFFF'
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
var dangerTxt = new Text2('DANGER!', {
size: 100,
fill: '#FF0000'
});
dangerTxt.anchor.set(0.5, 0.5);
dangerTxt.visible = false;
LK.gui.center.addChild(dangerTxt);
function spawnObstacle(yPos) {
var obstacle = game.addChild(new Obstacle());
obstacle.x = 150 + Math.random() * 700;
obstacle.y = yPos;
obstacles.push(obstacle);
}
function spawnPowerUp(yPos) {
var powerup = game.addChild(new PowerUp());
powerup.x = 150 + Math.random() * 700;
powerup.y = yPos;
powerups.push(powerup);
}
function createExit(yPos) {
exit = game.addChild(new Exit());
exit.x = 1024;
exit.y = yPos;
}
function initializeLevel() {
score = 0;
player.y = 400;
huggy.y = -200;
huggy.currentSpeed = huggy.baseSpeed;
gameActive = true;
playerOnObstacle = false;
for (var i = 0; i < 15; i++) {
spawnObstacle(-500 + i * 400);
}
for (var i = 0; i < 5; i++) {
spawnPowerUp(-800 + i * 800 + Math.random() * 400);
}
createExit(-6000);
LK.playMusic('bgmusic', {
loop: true
});
}
game.down = function (x, y, obj) {
if (gameActive) {
playerMoving = true;
playerTargetX = x;
}
};
game.up = function (x, y, obj) {
playerMoving = false;
};
game.move = function (x, y, obj) {
if (gameActive && playerMoving) {
playerTargetX = x;
}
};
game.update = function () {
if (!gameActive) {
return;
}
var moveSpeed = player.speed;
if (playerMoving) {
var direction = playerTargetX > player.x ? 1 : -1;
player.x += direction * moveSpeed * 0.5;
if (player.x < 100) player.x = 100;
if (player.x > 1948) player.x = 1948;
}
player.y += moveSpeed;
if (playerOnObstacle) {
player.y += moveSpeed * (player.slowFactor - 1);
}
if (player.isSpeedBoosted) {
player.y += moveSpeed * 1.5;
}
huggy.y += huggy.currentSpeed;
var huggyDistance = Math.abs(huggy.y - player.y);
player.distanceToPlayer = huggyDistance;
if (huggyDistance < 600 && huggyDistance > 300) {
huggy.currentSpeed = huggy.baseSpeed + 1.5;
if (!huggy.warningActive) {
huggy.warningActive = true;
dangerTxt.visible = true;
LK.getSound('danger').play();
tween(dangerTxt, {
alpha: 0
}, {
duration: 500,
onFinish: function onFinish() {
dangerTxt.visible = false;
dangerTxt.alpha = 1;
huggy.warningActive = false;
}
});
}
} else if (huggyDistance < 300) {
huggy.currentSpeed = huggy.baseSpeed + 3;
dangerTxt.visible = true;
} else {
huggy.currentSpeed = huggy.baseSpeed;
dangerTxt.visible = false;
}
score = Math.floor((player.y - 400) / 10);
if (score < 0) score = 0;
scoreTxt.setText('Distance: ' + score + 'm');
playerOnObstacle = false;
for (var i = obstacles.length - 1; i >= 0; i--) {
var obstacle = obstacles[i];
if (player.intersects(obstacle) && obstacle.lastY > player.lastY) {
playerOnObstacle = true;
obstacle.slowFactor = 0.4;
}
if (obstacle.y > 3000) {
obstacle.destroy();
obstacles.splice(i, 1);
}
}
for (var i = powerups.length - 1; i >= 0; i--) {
var powerup = powerups[i];
if (!powerup.collected && player.intersects(powerup)) {
powerup.collected = true;
player.activateBoost();
LK.getSound('powerup').play();
LK.setScore(LK.getScore() + 50);
powerup.destroy();
powerups.splice(i, 1);
}
if (powerup.y > 3000) {
if (!powerup.collected) {
powerup.destroy();
powerups.splice(i, 1);
}
}
}
if (exit && player.intersects(exit)) {
gameActive = false;
LK.setScore(LK.getScore() + 1000 + score);
LK.showYouWin();
}
if (huggy.intersects(player)) {
gameActive = false;
LK.getSound('caught').play();
LK.effects.flashScreen(0xFF0000, 500);
LK.showGameOver();
}
if (player.y > 500) {
var lastObstacleY = obstacles.length > 0 ? obstacles[0].y : player.y;
var nextSpawnY = lastObstacleY - 1000;
if (Math.random() < 0.7) {
spawnObstacle(nextSpawnY);
}
if (Math.random() < 0.15) {
spawnPowerUp(nextSpawnY);
}
}
};
initializeLevel();
LK.playMusic('bgmusic'); ===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,279 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+var storage = LK.import("@upit/storage.v1");
+
+/****
+* Classes
+****/
+var Exit = Container.expand(function () {
+ var self = Container.call(this);
+ var exitGraphics = self.attachAsset('exit', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.lastY = 0;
+ self.update = function () {
+ self.lastY = self.y;
+ };
+ return self;
+});
+var Huggy = Container.expand(function () {
+ var self = Container.call(this);
+ var huggyGraphics = self.attachAsset('huggy', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.baseSpeed = 4;
+ self.currentSpeed = 4;
+ self.distanceToPlayer = 0;
+ self.lastY = 0;
+ self.dangerThreshold = 400;
+ self.warningActive = false;
+ self.update = function () {
+ self.lastY = self.y;
+ };
+ return self;
+});
+var Obstacle = Container.expand(function () {
+ var self = Container.call(this);
+ var obstacleGraphics = self.attachAsset('obstacle', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.slowFactor = 0.5;
+ self.lastY = 0;
+ self.update = function () {
+ self.lastY = self.y;
+ };
+ return self;
+});
+var Player = Container.expand(function () {
+ var self = Container.call(this);
+ var playerGraphics = self.attachAsset('player', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = 8;
+ self.isSpeedBoosted = false;
+ self.boostEndTime = 0;
+ self.lastX = 0;
+ self.activateBoost = function () {
+ self.isSpeedBoosted = true;
+ self.boostEndTime = LK.ticks + 300;
+ playerGraphics.tint = 0xFFFF00;
+ };
+ self.update = function () {
+ if (LK.ticks > self.boostEndTime && self.isSpeedBoosted) {
+ self.isSpeedBoosted = false;
+ playerGraphics.tint = 0xFFFFFF;
+ }
+ self.lastX = self.x;
+ };
+ return self;
+});
+var PowerUp = Container.expand(function () {
+ var self = Container.call(this);
+ var powerupGraphics = self.attachAsset('powerup', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.bobOffset = 0;
+ self.collected = false;
+ self.lastY = 0;
+ self.update = function () {
+ self.bobOffset += 0.1;
+ self.y = self.y + Math.sin(self.bobOffset) * 0.5;
+ self.lastY = self.y;
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x1a1a2e
+});
+
+/****
+* Game Code
+****/
+var player = game.addChild(new Player());
+player.x = 200;
+player.y = 400;
+var huggy = game.addChild(new Huggy());
+huggy.x = 200;
+huggy.y = -200;
+var obstacles = [];
+var powerups = [];
+var exit = null;
+var score = 0;
+var gameActive = true;
+var playerOnObstacle = false;
+var playerMoving = false;
+var playerTargetX = 200;
+var scoreTxt = new Text2('Distance: 0m', {
+ size: 80,
+ fill: '#FFFFFF'
+});
+scoreTxt.anchor.set(0.5, 0);
+LK.gui.top.addChild(scoreTxt);
+var dangerTxt = new Text2('DANGER!', {
+ size: 100,
+ fill: '#FF0000'
+});
+dangerTxt.anchor.set(0.5, 0.5);
+dangerTxt.visible = false;
+LK.gui.center.addChild(dangerTxt);
+function spawnObstacle(yPos) {
+ var obstacle = game.addChild(new Obstacle());
+ obstacle.x = 150 + Math.random() * 700;
+ obstacle.y = yPos;
+ obstacles.push(obstacle);
+}
+function spawnPowerUp(yPos) {
+ var powerup = game.addChild(new PowerUp());
+ powerup.x = 150 + Math.random() * 700;
+ powerup.y = yPos;
+ powerups.push(powerup);
+}
+function createExit(yPos) {
+ exit = game.addChild(new Exit());
+ exit.x = 1024;
+ exit.y = yPos;
+}
+function initializeLevel() {
+ score = 0;
+ player.y = 400;
+ huggy.y = -200;
+ huggy.currentSpeed = huggy.baseSpeed;
+ gameActive = true;
+ playerOnObstacle = false;
+ for (var i = 0; i < 15; i++) {
+ spawnObstacle(-500 + i * 400);
+ }
+ for (var i = 0; i < 5; i++) {
+ spawnPowerUp(-800 + i * 800 + Math.random() * 400);
+ }
+ createExit(-6000);
+ LK.playMusic('bgmusic', {
+ loop: true
+ });
+}
+game.down = function (x, y, obj) {
+ if (gameActive) {
+ playerMoving = true;
+ playerTargetX = x;
+ }
+};
+game.up = function (x, y, obj) {
+ playerMoving = false;
+};
+game.move = function (x, y, obj) {
+ if (gameActive && playerMoving) {
+ playerTargetX = x;
+ }
+};
+game.update = function () {
+ if (!gameActive) {
+ return;
+ }
+ var moveSpeed = player.speed;
+ if (playerMoving) {
+ var direction = playerTargetX > player.x ? 1 : -1;
+ player.x += direction * moveSpeed * 0.5;
+ if (player.x < 100) player.x = 100;
+ if (player.x > 1948) player.x = 1948;
+ }
+ player.y += moveSpeed;
+ if (playerOnObstacle) {
+ player.y += moveSpeed * (player.slowFactor - 1);
+ }
+ if (player.isSpeedBoosted) {
+ player.y += moveSpeed * 1.5;
+ }
+ huggy.y += huggy.currentSpeed;
+ var huggyDistance = Math.abs(huggy.y - player.y);
+ player.distanceToPlayer = huggyDistance;
+ if (huggyDistance < 600 && huggyDistance > 300) {
+ huggy.currentSpeed = huggy.baseSpeed + 1.5;
+ if (!huggy.warningActive) {
+ huggy.warningActive = true;
+ dangerTxt.visible = true;
+ LK.getSound('danger').play();
+ tween(dangerTxt, {
+ alpha: 0
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ dangerTxt.visible = false;
+ dangerTxt.alpha = 1;
+ huggy.warningActive = false;
+ }
+ });
+ }
+ } else if (huggyDistance < 300) {
+ huggy.currentSpeed = huggy.baseSpeed + 3;
+ dangerTxt.visible = true;
+ } else {
+ huggy.currentSpeed = huggy.baseSpeed;
+ dangerTxt.visible = false;
+ }
+ score = Math.floor((player.y - 400) / 10);
+ if (score < 0) score = 0;
+ scoreTxt.setText('Distance: ' + score + 'm');
+ playerOnObstacle = false;
+ for (var i = obstacles.length - 1; i >= 0; i--) {
+ var obstacle = obstacles[i];
+ if (player.intersects(obstacle) && obstacle.lastY > player.lastY) {
+ playerOnObstacle = true;
+ obstacle.slowFactor = 0.4;
+ }
+ if (obstacle.y > 3000) {
+ obstacle.destroy();
+ obstacles.splice(i, 1);
+ }
+ }
+ for (var i = powerups.length - 1; i >= 0; i--) {
+ var powerup = powerups[i];
+ if (!powerup.collected && player.intersects(powerup)) {
+ powerup.collected = true;
+ player.activateBoost();
+ LK.getSound('powerup').play();
+ LK.setScore(LK.getScore() + 50);
+ powerup.destroy();
+ powerups.splice(i, 1);
+ }
+ if (powerup.y > 3000) {
+ if (!powerup.collected) {
+ powerup.destroy();
+ powerups.splice(i, 1);
+ }
+ }
+ }
+ if (exit && player.intersects(exit)) {
+ gameActive = false;
+ LK.setScore(LK.getScore() + 1000 + score);
+ LK.showYouWin();
+ }
+ if (huggy.intersects(player)) {
+ gameActive = false;
+ LK.getSound('caught').play();
+ LK.effects.flashScreen(0xFF0000, 500);
+ LK.showGameOver();
+ }
+ if (player.y > 500) {
+ var lastObstacleY = obstacles.length > 0 ? obstacles[0].y : player.y;
+ var nextSpawnY = lastObstacleY - 1000;
+ if (Math.random() < 0.7) {
+ spawnObstacle(nextSpawnY);
+ }
+ if (Math.random() < 0.15) {
+ spawnPowerUp(nextSpawnY);
+ }
+ }
+};
+initializeLevel();
+LK.playMusic('bgmusic');
\ No newline at end of file