Code edit (18 edits merged)
Please save this source code
User prompt
add a Killer class, that will be very similar to obstacles, except that a collision with a killer leads to game over
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
its worse. do a global reflexion with step by step implementation like a senior developer
User prompt
analyze deeply the code then find a way to make innerLineLeft lines appear reguarly with a constant offset between lines
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (3 edits merged)
Please save this source code
User prompt
in updateBackgroundColor, color should not reach full black, but only very dark gray
Code edit (15 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: xOffset is not a function' in or related to this line: 'leftEndX = leftStartX - xOffset(1 + rand);' Line Number: 210
Code edit (1 edits merged)
Please save this source code
Code edit (17 edits merged)
Please save this source code
User prompt
in game initialize, add a Decoration to the game
Code edit (1 edits merged)
Please save this source code
Code edit (22 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: math is not defined' in or related to this line: 'self.progress = math.max(0, self.y - startY) / (endY - startY); // Update progress property' Line Number: 64
Code edit (1 edits merged)
Please save this source code
Code edit (16 edits merged)
Please save this source code
User prompt
Please fix the bug: 'ReferenceError: roadtop is not defined' in or related to this line: 'self.y = roadtop;' Line Number: 183
User prompt
Please fix the bug: 'ReferenceError: roadtop is not defined' in or related to this line: 'self.y = roadtop;' Line Number: 183
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
===================================================================
--- original.js
+++ change.js
@@ -141,12 +141,14 @@
var leftEndX = leftStartX - xOffset * (1 + rand);
var baseRightStartX = 1280;
var rightStartX = baseRightStartX + rand * xOffset / 2;
var rightEndX = rightStartX + xOffset * (1 + rand);
+ var assetWidthRatio = 1;
var startSize, endSize;
if (self.assetIndex == 0) {
startSize = 3;
- endSize = 900;
+ endSize = 1024;
+ assetWidthRatio = 900 / 846;
} else if (self.assetIndex == 1) {
startSize = 1;
endSize = 140;
} else if (self.assetIndex == 2) {
@@ -159,10 +161,10 @@
self.update = function () {
var newTint = intensityHalf << 16 | intensityHalf << 8 | intensityHalf;
mainGraphics.tint = newTint;
self.progress = Math.max(0, self.y - startY) / (endY - startY); // Update progress property
- mainGraphics.width = startSize + (endSize - startSize) * self.progress;
mainGraphics.height = startSize + (endSize - startSize) * self.progress;
+ mainGraphics.width = mainGraphics.height * assetWidthRatio;
var tempSpeed = currentSpeed * 0.05 + currentSpeed * (self.progress * 3);
var newSpeed = currentSpeed; // + 10 * self.progress;
newSpeed = tempSpeed * 1; // TEMP DEBUG !!!
self.y += newSpeed;
@@ -195,8 +197,65 @@
self.x = rightStartX;
}
};
});
+var Killer = Container.expand(function () {
+ var self = Container.call(this);
+ var assets = ['killer1'];
+ self.assetIndex = Math.floor(Math.random() * assets.length);
+ var randomAsset = assets[self.assetIndex];
+ var killerGraphics = self.attachAsset(randomAsset, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var speed = 5;
+ var startY = roadTop + 50;
+ var endY = startY + roadHeight;
+ var leftStartX = 1024 - 100;
+ var leftEndX = 1024 - 650;
+ var rightStartX = 1024 + 100;
+ var rightEndX = 1024 + 650;
+ var startSize = 2;
+ var endSize = 250;
+ killerGraphics.width = startSize;
+ killerGraphics.height = startSize;
+ self.pathIndex = 0;
+ self.update = function () {
+ if (!isPlaying) {
+ return;
+ }
+ self.progress = Math.max(0, self.y - startY) / (endY - startY);
+ killerGraphics.width = startSize + (endSize - startSize) * self.progress;
+ killerGraphics.height = startSize + (endSize - startSize) * self.progress;
+ var tempSpeed = currentSpeed * 0.05 + currentSpeed * (self.progress * 3);
+ var newSpeed = currentSpeed;
+ newSpeed = tempSpeed * 1;
+ self.y += newSpeed;
+ if (self.pathIndex == 0 && self.x != leftEndX) {
+ self.x = leftStartX + (leftEndX - leftStartX) * self.progress;
+ }
+ if (self.pathIndex == 2 && self.x != rightEndX) {
+ self.x = rightStartX + (rightEndX - rightStartX) * self.progress;
+ }
+ if (self.y > endY + endSize / 2) {
+ self.reset();
+ }
+ };
+ self.reset = function () {
+ self.y = startY;
+ self.progress = 0;
+ killerGraphics.width = startSize;
+ killerGraphics.height = startSize;
+ self.pathIndex = Math.floor(Math.random() * 3);
+ if (self.pathIndex === 0) {
+ self.x = leftStartX;
+ } else if (self.pathIndex === 2) {
+ self.x = rightStartX;
+ } else {
+ self.x = 1024;
+ }
+ };
+});
var Landscape = Container.expand(function () {
var self = Container.call(this);
var landscapeGraphics = self.attachAsset('landscape1', {
anchorX: 0.5,
@@ -227,9 +286,8 @@
var Obstacle = Container.expand(function () {
var self = Container.call(this);
var assets = ['obstacle1', 'obstacle2', 'obstacle3'];
self.assetIndex = Math.floor(Math.random() * assets.length);
- self.assetIndex = 2; // TEMP DEBUG
var randomAsset = assets[self.assetIndex];
var obstacleGraphics = self.attachAsset(randomAsset, {
anchorX: 0.5,
anchorY: 0.5
@@ -245,9 +303,9 @@
var innerLeftLineEndX = -390;
var startSize, endSize;
if (self.assetIndex == 0) {
startSize = 3;
- endSize = 500;
+ endSize = 350;
} else if (self.assetIndex == 1) {
startSize = 1;
endSize = 140;
} else if (self.assetIndex == 2) {
@@ -318,9 +376,9 @@
playerGraphics2.visible = false; // Initially hide player2 asset
var frame = 0;
self.update = function () {
if (!self.isJumping) {
- frame += Math.min(currentSpeed, 10); // Add a max limit to avoid optical effects
+ frame += Math.min(currentSpeed, 20); // Add a max limit to avoid optical effects
if (frame >= 100) {
frame = 0;
// Swap frames every 10 game ticks
var visible = playerGraphics1.visible;
@@ -391,23 +449,23 @@
var innerLineStartY = roadTop;
var innerLineEndY = roadTop + roadHeight + 200;
// Left
var innerLeftLineStartX = -50;
- var innerLeftLineEndX = -512;
+ var innerLeftLineEndX = -412;
var innerLeftLineStartW = 3;
var innerLeftLineEndW = 80;
var innerLeftLineStartH = 3;
var innerLeftLineEndH = 500;
- var innerLeftLineStartR = 0.275; //0.075;
+ var innerLeftLineStartR = 0.2; //0.075;
var innerLeftLineEndR = 0.275;
// Right
var innerRightLineStartX = 50;
- var innerRightLineEndX = 512;
+ var innerRightLineEndX = 412;
var innerRightLineStartW = 3;
var innerRightLineEndW = 80;
var innerRightLineStartH = 3;
var innerRightLineEndH = 500;
- var innerRightLineStartR = -0.275;
+ var innerRightLineStartR = -0.2;
var innerRightLineEndR = -0.275;
// Lamp posts
// Left Lamp
var leftLampStartX = -130;
@@ -464,10 +522,10 @@
self.innerLeftLines.push(innerLineLeft);
var innerLineRight = self.attachAsset('line', {
anchorX: 0.5,
anchorY: 0.5,
- width: innerLeftLineStartW,
- height: innerLeftLineStartH,
+ width: innerRightLineStartW,
+ height: innerRightLineStartH,
rotation: innerRightLineStartR,
alpha: 1
});
innerLineRight.x = innerRightLineStartX;
@@ -491,10 +549,9 @@
anchorX: 0.5,
anchorY: 0.5,
scaleX: -1,
height: rightLampStartH,
- width: rightLampStartH * rightLampWRatio,
- alpha: 1
+ width: rightLampStartH * rightLampWRatio
});
rightLampPost.x = rightLampStartX;
rightLampPost.y = rightLampStartY - (i - 1) * 40;
self.addChild(rightLampPost);
@@ -542,9 +599,9 @@
self.resetInnerLine(innerLineRight, false);
} else {
innerLineRight.progress = Math.max(0, innerLineRight.y - innerLineStartY) / (innerLineEndY - innerLineStartY);
}
- var tempSpeed = currentSpeed * 0.05 + currentSpeed * (innerLineLeft.progress * 3);
+ var tempSpeed = currentSpeed * 0.05 + currentSpeed * (innerLineRight.progress * 3);
var newSpeed = currentSpeed; // + 10 * self.progress;
newSpeed = tempSpeed * 1; // TEMP DEBUG !!!
innerLineRight.y += newSpeed;
// Move innerLineRight x progressively to innerRightLineEndX
@@ -598,9 +655,9 @@
rightLampPost.y = rightLampStartY;
rightLampPost.x = rightLampStartX;
rightLampPost.height = rightLampStartH;
}
- rightLampPost.progress = (rightLampPost.y - rightLampStartY) / rightLampEndY;
+ rightLampPost.progress = Math.max(0, rightLampPost.y - rightLampStartY) / (rightLampEndY - rightLampStartY);
rightLampPost.alpha = 0.75 + Math.min(0.25, rightLampPost.progress);
if (rightLampPost.x != rightLampEndX) {
rightLampPost.x = rightLampStartX + (rightLampEndX - rightLampStartX) * rightLampPost.progress;
}
@@ -680,9 +737,9 @@
var coinsCollected = 0; // Initialize coins collected counter
var isIntersectingObstacle = false; // Flag to track if the player is currently intersecting an obstacle
var playerPositionIndex = 1; // Initialize player position index
// Define the three fixed x positions for the player
-var playerPositions = [2048 / 4, 2048 / 2, 3 * 2048 / 4];
+var playerPositions = [2048 / 5, 2048 / 2, 4 * 2048 / 5];
// Create player
var player;
var debugMarker;
var debugText;
@@ -774,8 +831,14 @@
}
// Update obstacles and check for collisions
for (var i = obstacles.length - 1; i >= 0; i--) {
if (player && player.shadow && player.shadow.intersects(obstacles[i]) && !player.isJumping) {
+ if (obstacles[i] instanceof Killer) {
+ // Trigger game over if player intersects with a Killer
+ LK.effects.flashScreen(0xff0000, 1000);
+ LK.showGameOver();
+ return;
+ }
if (!isIntersectingObstacle) {
// Make player flash red for 1 second
LK.effects.flashObject(player, 0xff0000, 1000);
// Add coin animation only if score is greater than 0
@@ -834,8 +897,13 @@
var newObstacle = new Obstacle();
newObstacle.reset();
obstacles.push(newObstacle);
game.addChild(newObstacle);
+ // Create and attach the killer instance to the game
+ var newKiller = new Killer();
+ newKiller.reset();
+ obstacles.push(newKiller);
+ game.addChild(newKiller);
// Create player
player = game.addChild(new Player());
player.frame = 0;
player.x = playerPositions[playerPositionIndex]; // Start at the center position
Directly overhead, plumb view of a beggar heading top (we see his back).. Zenith view, directly overhead, plumb view. NOT PERSPECTIVE! Fantasy theme. Pixel art
a traffic cone. video game sprite
face view of a big start button in the shape of a dollar bill. video game style
a tree. video game style
a black garbage bag. video game style
Dollar bill. Perspective. video game sprite
perspective of a simple snake rolled up on itself.. video game sprite
Ball of dry desert bushes. video game sprite
tractor. high definition video game sprite
street ad billboard with 1 or 2 posts with "Get rich!" on it. high definition video game sprite
a dog sleeping on a street. video game sprite
desert bush. video game sprite
profile view of an empty motorcycle helmet. black with a white vertical central band and another thiner orange band on the center. NOT PERSPECTIVE!. Pixel art high definition
simple red and white magnet. video game style
gold sign with a "X" and a "2". video game style
bgMusic
Music
coin_1
Sound effect
hit_1
Sound effect
hit_2
Sound effect
hit_3
Sound effect
levelWin_1
Sound effect
car_1
Sound effect
police_1
Sound effect
ambulance_1
Sound effect
accident_1
Sound effect
killed_1
Sound effect
jump_1
Sound effect
rip_1
Sound effect
bonus_take
Sound effect
bonus_approaching
Sound effect