Code edit (3 edits merged)
Please save this source code
User prompt
start all 3 foods from a slower speed
Code edit (6 edits merged)
Please save this source code
User prompt
Food_2 should actually increase by 3 units and award 3 points when collected and deduct 3 when destroyed, while Food_3 should actually increase by 5 units and award 5 points and deduct 5 when destroyed
Code edit (2 edits merged)
Please save this source code
User prompt
only show the UI_Crappy asset if the player goes to the up state while there are still filled units when he rose, otherwise dont show it
Code edit (1 edits merged)
Please save this source code
User prompt
it should take less than a second for the assets between UI_1 and 5 to grow to their size
User prompt
wait for all units in the digestion system to deplete, so wait for all of them to be empty before displaying the assets benwtee UI_1 and UI_%
User prompt
only display the UI_1 to UI_5 assets after all the units in the digestion system have been depleted, and only show it once
User prompt
now we're going to implement a similar system to the UI_Crappy, but triggered at different moments. This system is intended to display an asset, depending on how many units have been collected in the digestive system. After the player moves to the down state, see how many Units have been collected at that point. once the digestive system has fully depleted all the units that have been collected, display one of the 5 UI elements. If the player managed to collect between 1 and 4 units before moving to the down state, display UI_1. If however there are are between 5 and 7 units, display UI_2. For 8 units collected, display UI_3. For 9 units collected, display UI_4. For 10 units collected, display UI_5. All UI elements have the same exact display method as the UI_CRappy asset. They start off as very small of the size of 1 pixel and grow to their original size over a period of 1 second. They then stay on the screen for 1 second then they disappear. they are supposed to be displayed on the screen inside the foreground container, based on how many units have been depelted. these UI elements are supposed to be displayed once the final unit of the digestive system has been depleted. place this new system inside it's own class outside the game code
User prompt
place the animation for the assets between UI_1 and UI_5 inside its own class so its not inside the game code
User prompt
place the animation for the assets between UI_1 and UI_5 inside their own class so they are not inside the game code
User prompt
Before starting the animation, check if it has already been played: ```javascript if (!animationPlayed) { animationPlayed = true; // Start animation } ```
User prompt
The logic to start the animation might be placed inside a loop or a function that gets called multiple times, causing the animation to restart repeatedly. Use a boolean flag to track whether the animation has already been played. Set this flag to `true` once the animation starts and check this flag before starting the animation again.
User prompt
the assets between UI_1 and UI_5 have their animations repeated multiple time. they should only have that animation happening once, not on a loop
User prompt
once the UI_x animation grows to it's full size, only show it once for 1 seconds, don't keep repeating the animation for the same round of units removals
User prompt
The removal of the UI elements should not be tied to the player's state or other game conditions. It should be a standalone operation that happens after the 1-second duration.
User prompt
Make sure that the `uiAsset` is correctly referenced within the `setTimeout` function. The `uiAsset` should be accessible in the scope where the `setTimeout` is defined.
User prompt
the assets between UI_1 to UI_5 are not getting removed after being displayed. they should only be display for 1 second then be removed. right now they wait for the player to switch states from down to up, but they shouldn't be correlated to the player's state
User prompt
the assets between UI_1 to UI_5 are not getting removed after being displayed. they should only be display for 1 second then be removed
Code edit (1 edits merged)
Please save this source code
User prompt
when showing UI_1 to UI_5 itnstead of growing them over a second, reduce that time to half
Code edit (1 edits merged)
Please save this source code
User prompt
the UI_crappy asset is displayed whenever the player moves to the up state, but that's only supposed to happen it the player moves up while there are still filled units that havent been depleted. fix this bug
/****
* Classes
****/
// Create BackgroundContainer class
var BackgroundContainer = Container.expand(function () {
var self = Container.call(this);
return self;
});
// Create DigestionSystem class
var DigestionSystem = Container.expand(function () {
var self = Container.call(this);
self.units = [];
self.maxUnits = 10;
self.unitWidth = 100;
self.unitHeight = 100;
self.unitSpacing = 100;
self.unitFullAlpha = 1;
self.unitEmptyAlpha = 0.5;
// Initialize with 10 empty units
for (var i = 0; i < self.maxUnits; i++) {
var unit = self.attachAsset('Unit', {
anchorX: 0.5,
anchorY: 0.5,
x: i * (self.unitWidth + self.unitSpacing),
alpha: self.unitEmptyAlpha
});
self.units.push(unit);
}
// Add text display for points under each unit
self.unitTexts = [];
for (var i = 0; i < self.maxUnits; i++) {
var unitText = new Text2('', {
size: 80,
fill: "#ffffff",
stroke: "#000000",
strokeThickness: 10
});
unitText.anchor.set(0.5, 0.5);
unitText.x = i * (self.unitWidth + self.unitSpacing);
unitText.y = +120;
self.addChild(unitText);
self.unitTexts.push(unitText);
}
return self;
});
// Create Food class
var Food = Container.expand(function (assetId, points) {
var self = Container.call(this);
// Attach Food asset to the food
self.foodAsset = self.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
// Set food speed
self.speed = -5;
// Points awarded by this food item
self.points = points;
// This is automatically called every game tick, if the food is attached!
self.update = function () {
self.speed -= 0.3 + foodAccelerationIncrement; // acceleration with increment
self.x += self.speed;
};
return self;
});
// Create ForegroundContainer class
var ForegroundContainer = Container.expand(function () {
var self = Container.call(this);
return self;
});
// Create MidgroundContainer class
var MidgroundContainer = Container.expand(function () {
var self = Container.call(this);
return self;
});
// Create Player class
var Player = Container.expand(function () {
var self = Container.call(this);
// Attach Player_Up asset to the player
self.playerUp = self.attachAsset('Player_Up', {
anchorX: 0.5,
anchorY: 1.0,
scaleX: 1.5,
scaleY: 1.5
});
// Attach Player_Down asset to the player
self.playerDown = self.attachAsset('Player_Down', {
anchorX: 0.5,
anchorY: 1.0,
x: -120,
scaleX: 1.5,
scaleY: 1.5
});
// Initially, Player_Down is not visible
self.playerDown.visible = false;
// Method to switch between Player_Up and Player_Down
self.switchFrame = function () {
self.playerUp.visible = !self.playerUp.visible;
self.playerDown.visible = !self.playerDown.visible;
if (self.playerDown.visible) {
LK.getSound('Pooping').play();
// Store the number of filled units when transitioning to the down state
filledUnits = digestionSystem.units.filter(function (unit) {
return unit.alpha === digestionSystem.unitFullAlpha;
}).length;
} else {
// Decrease the score for each remaining unit when the player prematurely moves back up
var remainingUnits = digestionSystem.units.filter(function (unit) {
return unit.alpha === digestionSystem.unitFullAlpha;
}).length;
score -= remainingUnits * filledUnits;
scoreTxt.setText(score);
if (score <= 0) {
LK.showGameOver();
return;
} else if (filledUnits > 0 && digestionSystem.units.some(function (unit) {
return unit.alpha === digestionSystem.unitFullAlpha;
})) {
// Display UI_Crappy asset in the center of the screen
var uiCrappy = foregroundContainer.attachAsset('UI_Crappy', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 - 700
});
foregroundContainer.addChild(uiCrappy);
// Set a timeout to remove the UI_Crappy asset after 1 second
LK.setTimeout(function () {
foregroundContainer.removeChild(uiCrappy);
}, 1000);
}
filledUnits = digestionSystem.units.filter(function (unit) {
return unit.alpha === digestionSystem.unitFullAlpha;
}).length;
// Update points display under each unit
digestionSystem.units.forEach(function (unit, index) {
if (unit.alpha === digestionSystem.unitFullAlpha) {
digestionSystem.unitTexts[index].setText(filledUnits);
} else {
digestionSystem.unitTexts[index].setText('');
}
});
digestionSystem.units.forEach(function (unit, index) {
unit.alpha = digestionSystem.unitEmptyAlpha;
digestionSystem.unitTexts[index].setText(''); // Clear points display under each unit
});
filledUnits = 0;
LK.getSound('Pooping').stop();
foodAccelerationIncrement += 0.1; // Increase the acceleration increment for food items
foodSpawnTimeDecrement += 1; // Decrease the spawn time for food items
}
};
self.displayUIBasedOnUnits = function (unitsCollected) {
var uiElement;
if (unitsCollected >= 1 && unitsCollected <= 4) {
uiElement = 'UI_1';
} else if (unitsCollected >= 5 && unitsCollected <= 7) {
uiElement = 'UI_2';
} else if (unitsCollected === 8) {
uiElement = 'UI_3';
} else if (unitsCollected === 9) {
uiElement = 'UI_4';
} else if (unitsCollected === 10) {
uiElement = 'UI_5';
}
if (uiElement) {
var uiAsset = foregroundContainer.attachAsset(uiElement, {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2 - 700
});
foregroundContainer.addChild(uiAsset);
// Animate the UI element to grow to its original size over 1 second
uiAsset.scale.set(0.01, 0.01);
var growInterval = LK.setInterval(function () {
uiAsset.scale.x += 0.01;
uiAsset.scale.y += 0.01;
if (uiAsset.scale.x >= 1 && uiAsset.scale.y >= 1) {
LK.clearInterval(growInterval);
// Set a timeout to remove the UI element after 1 second
LK.setTimeout(function () {
foregroundContainer.removeChild(uiAsset);
}, 1000);
}
}, 10);
}
};
// Method to check if the player collides with a food object
self.checkCollision = function (food) {
// Only player_up can collect food
if (self.playerUp.visible) {
var playerBounds = self.playerUp.getBounds();
if (food) {
var foodBounds = food.getBounds();
var foodCenter = {
x: foodBounds.x + foodBounds.width / 2,
y: foodBounds.y + foodBounds.height / 2
};
}
var playerCenter = {
x: playerBounds.x + playerBounds.width / 2,
y: playerBounds.y + playerBounds.height / 2
};
// Check if the center of the food is within the bounds of the player
if (foodCenter && playerBounds.contains(foodCenter.x, foodCenter.y)) {
// Do not add a unit to the Digestion System here
return true;
}
if (food) {
var foodBounds = food.getBounds();
var foodCenter = {
x: foodBounds.x + foodBounds.width / 2,
y: foodBounds.y + foodBounds.height / 2
};
if (playerBounds.contains(foodCenter.x, foodCenter.y)) {
return true;
}
if (food && food.foodAsset && food.foodAsset.getBounds) {
var foodAssetBounds = food.foodAsset.getBounds();
var foodAssetCenter = {
x: foodAssetBounds.x + foodAssetBounds.width / 2,
y: foodAssetBounds.y + foodAssetBounds.height / 2
};
if (playerBounds.contains(foodAssetCenter.x, foodAssetCenter.y)) {
return true;
}
}
}
return false;
}
return false;
};
return self;
});
/****
* Initialize Game
****/
//<Assets used in the game will automatically appear here>
var game = new LK.Game({
backgroundColor: 0xfdfff4 // Init game with white background
});
/****
* Game Code
****/
var backgroundContainer = game.addChild(new BackgroundContainer());
var background = backgroundContainer.attachAsset('background', {
anchorX: 0.5,
anchorY: 1.0,
x: 2048 / 2,
y: 2732
});
var midgroundContainer = game.addChild(new MidgroundContainer());
var foregroundContainer = game.addChild(new ForegroundContainer());
// Add the Digestion System to the game
var digestionSystem = game.addChild(new DigestionSystem());
digestionSystem.x = 2048 / 2 - 400 - digestionSystem.unitWidth * digestionSystem.maxUnits / 2;
digestionSystem.y = 100;
var score = 0;
var scoreTxt;
var filledUnits = 0;
var foodSpawnTimeDecrement = 0; // Global variable to track spawn time decrement for food items
var foodAccelerationIncrement = 0; // Global variable to track acceleration increment for food items
var filledUnits = 0;
scoreTxt = new Text2('0', {
size: 150,
fill: "#ffffff",
stroke: "#000000",
strokeThickness: 15
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
scoreTxt.x -= 10; // Move the score 10 pixels to the left
scoreTxt.y += 920;
// Add the Player in the center of the screen
var player = midgroundContainer.addChild(new Player());
player.x = 2048 / 2 - 500;
player.y = 2732 + 30;
// Switch the player's frame on tap
game.down = function (x, y, obj) {
player.switchFrame();
};
// Spawn food from the right edge of the screen at y position of 500
game.update = function () {
if (LK.ticks == 0) {
score = 0;
scoreTxt.setText(score);
filledUnits = 0;
// Reset the Digestion System
digestionSystem.units.forEach(function (unit) {
unit.alpha = digestionSystem.unitEmptyAlpha;
});
// Clear points display under each unit
digestionSystem.unitTexts.forEach(function (unitText) {
unitText.setText('');
});
}
if (LK.ticks % (60 - foodSpawnTimeDecrement) == 0) {
// every second
var foodBucket = [];
for (var i = 0; i < 90; i++) {
foodBucket.push(new Food('Food', 1));
}
for (var i = 0; i < 60; i++) {
foodBucket.push(new Food('Food_2', 2));
}
for (var i = 0; i < 30; i++) {
foodBucket.push(new Food('Food_3', 3));
}
var newFood = foodBucket[Math.floor(Math.random() * foodBucket.length)];
newFood.x = 2048; // right edge of the screen
newFood.y = 1900;
foregroundContainer.addChild(newFood);
}
// Check for collision between the player and the food
// Remove a unit from the Digestion System when the player is in the Down state
if (!player.playerUp.visible) {
if (LK.ticks % 30 == 0) {
var fullUnits = digestionSystem.units.filter(function (unit) {
return unit.alpha === digestionSystem.unitFullAlpha;
});
if (fullUnits.length > 0) {
fullUnits[fullUnits.length - 1].alpha = digestionSystem.unitEmptyAlpha;
score += filledUnits; // Add points based on the fixed number of filled units
// Update points display under each unit
digestionSystem.units.forEach(function (unit, index) {
if (unit.alpha === digestionSystem.unitFullAlpha) {
digestionSystem.unitTexts[index].setText(filledUnits);
} else {
digestionSystem.unitTexts[index].setText('');
}
});
scoreTxt.setText(score);
if (score <= 0) {
LK.showGameOver();
return;
}
} else {
// Display UI element based on the number of collected units
player.displayUIBasedOnUnits(filledUnits);
LK.getSound('Pooping').stop();
}
}
} else {
LK.getSound('Pooping').stop();
}
for (var i = foregroundContainer.children.length - 1; i >= 0; i--) {
var food = foregroundContainer.children[i];
if (food && food.x <= 0) {
// Only decrease the score if the digestive system unit is 0
var fullUnits = digestionSystem.units.filter(function (unit) {
return unit.alpha === digestionSystem.unitFullAlpha;
}).length;
if (fullUnits === 0) {
// Decrease the score based on the points the food was supposed to increase
score -= food.points;
scoreTxt.setText(score);
if (score <= 0) {
LK.showGameOver();
return;
}
}
food.destroy();
} else if (food && (player.checkCollision(food) || player.checkCollision(food.foodAsset))) {
// Increment the score
score += food.points;
// Add units to the Digestion System based on the points of the food
for (var i = 0; i < food.points; i++) {
var fullUnits = digestionSystem.units.filter(function (unit) {
return unit.alpha === digestionSystem.unitFullAlpha;
});
if (fullUnits.length < digestionSystem.maxUnits) {
digestionSystem.units[fullUnits.length].alpha = digestionSystem.unitFullAlpha;
filledUnits = fullUnits.length + 1; // Update filledUnits
} else {
LK.showGameOver();
return;
}
}
// Update points display under each unit
digestionSystem.units.forEach(function (unit, index) {
if (unit.alpha === digestionSystem.unitFullAlpha) {
digestionSystem.unitTexts[index].setText(filledUnits);
} else {
digestionSystem.unitTexts[index].setText('');
}
});
scoreTxt.setText(score);
// Play the Eat sound
LK.getSound('Eat').play();
// Remove the food from the game
food.destroy();
}
}
};
hamburger. pixelated. 8-bit. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
poop UI element . pixelated. 8 bit.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
text saying "Constipated" against a poop banner. pixelated. 8-bit. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
text saying "You’re on a roll!" against a toilet paper banner. pixelated. 8-bit. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
text saying "Holy Crap!" against a divine angelic poop banner. pixelated. 8-bit. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixelated text saying "Shit Yeah!" as a shitty newspaper headline. pixelated. 8-bit. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
macdonalds fries but with the M letter rotated so it looks like a 3. pixelated. 8 bit. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
large KFC bucket with the digit 5 on it. pixelated. 8 bit. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
8-bit pixelated image of a video game character sitting with hands on a large belly, wearing a white shirt and brown pants. The setting is a simple bathroom, with the character as the main focus. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.