/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { coins: 2000, bestScore: 0 }); /**** * Classes ****/ var Button = Container.expand(function () { var self = Container.call(this); var background = self.attachAsset('makeButton', { anchorX: 0.5, anchorY: 0.5 }); var buttonText = new Text2('MAKE MEME', { size: 50, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); self.down = function () { tween(self.scale, { x: 0.9, y: 0.9 }, { duration: 100, easing: tween.easeOut }); }; self.up = function () { tween(self.scale, { x: 1, y: 1 }, { duration: 100, easing: tween.easeOut }); }; return self; }); var House = Container.expand(function () { var self = Container.call(this); var houseBase = self.attachAsset('house', { anchorX: 0.5, anchorY: 1.0 }); var roof = self.attachAsset('houseRoof', { anchorX: 0.5, anchorY: 1.0, y: -houseBase.height }); // Make roof triangular by scaling down the width at top roof.scale.set(1, 1); return self; }); var MemePost = Container.expand(function () { var self = Container.call(this); var memeBackground = self.attachAsset('memeBackground', { anchorX: 0.5, anchorY: 0.5 }); // Create an image container for the meme image var memeImage = null; var resultText = new Text2('', { size: 40, fill: 0x000000 }); resultText.anchor.set(0.5, 0.5); resultText.y = memeBackground.height / 2 + 50; self.addChild(resultText); self.setMeme = function (text, isViral) { // Remove previous image if exists if (memeImage) { self.removeChild(memeImage); memeImage.destroy(); } // Create a new meme image var imageId = 'meme' + Math.floor(Math.random() * 5 + 1); // Random meme image 1-5 memeImage = LK.getAsset(imageId, { anchorX: 0.5, anchorY: 0.5, width: memeBackground.width * 0.8, height: memeBackground.height * 0.7 }); self.addChild(memeImage); if (isViral) { resultText.setText('VIRAL! +1000 COINS', { fill: 0x00AA00 }); } else { resultText.setText('FLOPPED! -500 COINS', { fill: 0xAA0000 }); } // Start with small scale and grow self.scale.set(0.1); tween(self.scale, { x: 1, y: 1 }, { duration: 500, easing: tween.elasticOut }); }; return self; }); var ProgressBar = Container.expand(function () { var self = Container.call(this); var background = self.attachAsset('progressBar', { anchorX: 0, anchorY: 0.5 }); var fill = self.attachAsset('progressBarFill', { anchorX: 0, anchorY: 0.5 }); fill.scale.x = 0; self.updateProgress = function (current, target) { var ratio = current / target; ratio = Math.max(0, Math.min(1, ratio)); tween(fill.scale, { x: ratio }, { duration: 500, easing: tween.easeOut }); }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xE6F7FF }); /**** * Game Code ****/ // Meme images // Game variables var coins = 0; // Always start with 0 coins when game begins storage.coins = 0; // Reset stored coins value var goalCoins = 100000; var memeTexts = ["One does not simply\nbecome a meme millionaire", "Me: *posts a meme*\nInternet: TAKE MY MONEY", "When your meme\ngoes viral", "Wait, you guys are\nmaking money?", "Meme stonks\nGO BRRRRR", "How it started vs\nHow it's going", "Nobody:\nMe: *making memes for virtual money*", "The house I'll buy\nwith meme coins", "Posting memes until\nI can afford a house", "My bank account after\nmaking memes all day"]; var currentMeme = null; var houseOwned = false; // Create the house (dream goal) var house = new House(); house.x = 2048 / 2; house.y = 800; house.scale.set(0.8); game.addChild(house); // Create UI elements var coinText = new Text2("Coins: " + coins.toLocaleString(), { size: 60, fill: 0x000000 }); coinText.anchor.set(0, 0); coinText.x = 50; coinText.y = 50; LK.gui.addChild(coinText); var goalText = new Text2("Goal: " + goalCoins.toLocaleString() + " coins", { size: 40, fill: 0x000000 }); goalText.anchor.set(1, 0); goalText.x = 2048 - 50; goalText.y = 50; LK.gui.addChild(goalText); // Progress bar var progressBar = new ProgressBar(); progressBar.x = 2048 / 2 - 800; progressBar.y = 150; LK.gui.addChild(progressBar); progressBar.updateProgress(coins, goalCoins); // Create the meme posting area var memeContainer = new Container(); memeContainer.x = 2048 / 2; memeContainer.y = 1500; game.addChild(memeContainer); // Create the meme button var makeButton = new Button(); makeButton.x = 2048 / 2; makeButton.y = 2200; game.addChild(makeButton); // Instructions text var instructionsText = new Text2("Tap the button to make memes.\nViral memes earn 1000 coins, flops cost 500 coins.\nReach 100,000 coins to buy your dream house!", { size: 40, fill: 0x000000 }); instructionsText.anchor.set(0.5, 0.5); instructionsText.x = 2048 / 2; instructionsText.y = 2350; game.addChild(instructionsText); // Handle meme creation function createMeme(isViral) { // Remove previous meme if exists if (currentMeme) { memeContainer.removeChild(currentMeme); currentMeme.destroy(); } // Create a new meme post currentMeme = new MemePost(); memeContainer.addChild(currentMeme); // Use an empty string as the function now uses images instead of text var memeText = ""; // Update coins if (isViral) { coins += 1000; // Success sound is now played in button up, not here LK.effects.flashScreen(0x00AA00, 300); var gainText = new Text2("+1000 COINS", { size: 60, fill: 0x00AA00 }); gainText.anchor.set(0.5, 0.5); gainText.x = 2048 / 2; gainText.y = 900; game.addChild(gainText); tween(gainText, { alpha: 0, y: gainText.y - 100 }, { duration: 1000 }); LK.setTimeout(function () { gainText.destroy(); }, 1000); } else { coins -= 500; LK.getSound('fail').play(); LK.effects.flashScreen(0xAA0000, 300); var loseText = new Text2("-500 COINS", { size: 60, fill: 0xAA0000 }); loseText.anchor.set(0.5, 0.5); loseText.x = 2048 / 2; loseText.y = 900; game.addChild(loseText); tween(loseText, { alpha: 0, y: loseText.y - 100 }, { duration: 1000 }); LK.setTimeout(function () { loseText.destroy(); }, 1000); } // Ensure coins don't go below 0 coins = Math.max(0, coins); // Save coins to storage storage.coins = coins; // Update display coinText.setText("Coins: " + coins.toLocaleString()); progressBar.updateProgress(coins, goalCoins); // Set meme content currentMeme.setMeme(memeText, isViral); // Check if player has reached the goal checkGoal(); } // Check if player reached the goal function checkGoal() { if (coins >= goalCoins && !houseOwned) { houseOwned = true; // Update best score if needed if (!storage.bestScore || coins > storage.bestScore) { storage.bestScore = coins; } // Animate house celebration tween(house.scale, { x: 1.2, y: 1.2 }, { duration: 800, easing: tween.elasticOut }); // Show winning message var winText = new Text2("CONGRATULATIONS!\nYou bought your dream house!", { size: 80, fill: 0x009900 }); winText.anchor.set(0.5, 0.5); winText.x = 2048 / 2; winText.y = 1100; game.addChild(winText); // Show confetti effect (simplified) LK.effects.flashScreen(0xFFFF00, 500); // Show you win after a delay LK.setTimeout(function () { LK.showYouWin(); }, 2000); } } // Handle button clicks makeButton.down = function (x, y, obj) { tween(makeButton.scale, { x: 0.9, y: 0.9 }, { duration: 100, easing: tween.easeOut }); }; makeButton.up = function (x, y, obj) { tween(makeButton.scale, { x: 1, y: 1 }, { duration: 100, easing: tween.easeOut }); // Only play click sound if meme will be viral, otherwise let fail sound play in createMeme var willBeViral = Math.random() < 0.6; if (willBeViral) { LK.getSound('success').play(); } createMeme(willBeViral); }; // Game update function game.update = function () { // Game logic that runs every frame }; // Start background music LK.playMusic('backgroundMusic'); // Create initial meme to show the player how it works LK.setTimeout(function () { var isViral = Math.random() < 0.6; createMeme(isViral); }, 500); ;
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
coins: 2000,
bestScore: 0
});
/****
* Classes
****/
var Button = Container.expand(function () {
var self = Container.call(this);
var background = self.attachAsset('makeButton', {
anchorX: 0.5,
anchorY: 0.5
});
var buttonText = new Text2('MAKE MEME', {
size: 50,
fill: 0xFFFFFF
});
buttonText.anchor.set(0.5, 0.5);
self.addChild(buttonText);
self.down = function () {
tween(self.scale, {
x: 0.9,
y: 0.9
}, {
duration: 100,
easing: tween.easeOut
});
};
self.up = function () {
tween(self.scale, {
x: 1,
y: 1
}, {
duration: 100,
easing: tween.easeOut
});
};
return self;
});
var House = Container.expand(function () {
var self = Container.call(this);
var houseBase = self.attachAsset('house', {
anchorX: 0.5,
anchorY: 1.0
});
var roof = self.attachAsset('houseRoof', {
anchorX: 0.5,
anchorY: 1.0,
y: -houseBase.height
});
// Make roof triangular by scaling down the width at top
roof.scale.set(1, 1);
return self;
});
var MemePost = Container.expand(function () {
var self = Container.call(this);
var memeBackground = self.attachAsset('memeBackground', {
anchorX: 0.5,
anchorY: 0.5
});
// Create an image container for the meme image
var memeImage = null;
var resultText = new Text2('', {
size: 40,
fill: 0x000000
});
resultText.anchor.set(0.5, 0.5);
resultText.y = memeBackground.height / 2 + 50;
self.addChild(resultText);
self.setMeme = function (text, isViral) {
// Remove previous image if exists
if (memeImage) {
self.removeChild(memeImage);
memeImage.destroy();
}
// Create a new meme image
var imageId = 'meme' + Math.floor(Math.random() * 5 + 1); // Random meme image 1-5
memeImage = LK.getAsset(imageId, {
anchorX: 0.5,
anchorY: 0.5,
width: memeBackground.width * 0.8,
height: memeBackground.height * 0.7
});
self.addChild(memeImage);
if (isViral) {
resultText.setText('VIRAL! +1000 COINS', {
fill: 0x00AA00
});
} else {
resultText.setText('FLOPPED! -500 COINS', {
fill: 0xAA0000
});
}
// Start with small scale and grow
self.scale.set(0.1);
tween(self.scale, {
x: 1,
y: 1
}, {
duration: 500,
easing: tween.elasticOut
});
};
return self;
});
var ProgressBar = Container.expand(function () {
var self = Container.call(this);
var background = self.attachAsset('progressBar', {
anchorX: 0,
anchorY: 0.5
});
var fill = self.attachAsset('progressBarFill', {
anchorX: 0,
anchorY: 0.5
});
fill.scale.x = 0;
self.updateProgress = function (current, target) {
var ratio = current / target;
ratio = Math.max(0, Math.min(1, ratio));
tween(fill.scale, {
x: ratio
}, {
duration: 500,
easing: tween.easeOut
});
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0xE6F7FF
});
/****
* Game Code
****/
// Meme images
// Game variables
var coins = 0; // Always start with 0 coins when game begins
storage.coins = 0; // Reset stored coins value
var goalCoins = 100000;
var memeTexts = ["One does not simply\nbecome a meme millionaire", "Me: *posts a meme*\nInternet: TAKE MY MONEY", "When your meme\ngoes viral", "Wait, you guys are\nmaking money?", "Meme stonks\nGO BRRRRR", "How it started vs\nHow it's going", "Nobody:\nMe: *making memes for virtual money*", "The house I'll buy\nwith meme coins", "Posting memes until\nI can afford a house", "My bank account after\nmaking memes all day"];
var currentMeme = null;
var houseOwned = false;
// Create the house (dream goal)
var house = new House();
house.x = 2048 / 2;
house.y = 800;
house.scale.set(0.8);
game.addChild(house);
// Create UI elements
var coinText = new Text2("Coins: " + coins.toLocaleString(), {
size: 60,
fill: 0x000000
});
coinText.anchor.set(0, 0);
coinText.x = 50;
coinText.y = 50;
LK.gui.addChild(coinText);
var goalText = new Text2("Goal: " + goalCoins.toLocaleString() + " coins", {
size: 40,
fill: 0x000000
});
goalText.anchor.set(1, 0);
goalText.x = 2048 - 50;
goalText.y = 50;
LK.gui.addChild(goalText);
// Progress bar
var progressBar = new ProgressBar();
progressBar.x = 2048 / 2 - 800;
progressBar.y = 150;
LK.gui.addChild(progressBar);
progressBar.updateProgress(coins, goalCoins);
// Create the meme posting area
var memeContainer = new Container();
memeContainer.x = 2048 / 2;
memeContainer.y = 1500;
game.addChild(memeContainer);
// Create the meme button
var makeButton = new Button();
makeButton.x = 2048 / 2;
makeButton.y = 2200;
game.addChild(makeButton);
// Instructions text
var instructionsText = new Text2("Tap the button to make memes.\nViral memes earn 1000 coins, flops cost 500 coins.\nReach 100,000 coins to buy your dream house!", {
size: 40,
fill: 0x000000
});
instructionsText.anchor.set(0.5, 0.5);
instructionsText.x = 2048 / 2;
instructionsText.y = 2350;
game.addChild(instructionsText);
// Handle meme creation
function createMeme(isViral) {
// Remove previous meme if exists
if (currentMeme) {
memeContainer.removeChild(currentMeme);
currentMeme.destroy();
}
// Create a new meme post
currentMeme = new MemePost();
memeContainer.addChild(currentMeme);
// Use an empty string as the function now uses images instead of text
var memeText = "";
// Update coins
if (isViral) {
coins += 1000;
// Success sound is now played in button up, not here
LK.effects.flashScreen(0x00AA00, 300);
var gainText = new Text2("+1000 COINS", {
size: 60,
fill: 0x00AA00
});
gainText.anchor.set(0.5, 0.5);
gainText.x = 2048 / 2;
gainText.y = 900;
game.addChild(gainText);
tween(gainText, {
alpha: 0,
y: gainText.y - 100
}, {
duration: 1000
});
LK.setTimeout(function () {
gainText.destroy();
}, 1000);
} else {
coins -= 500;
LK.getSound('fail').play();
LK.effects.flashScreen(0xAA0000, 300);
var loseText = new Text2("-500 COINS", {
size: 60,
fill: 0xAA0000
});
loseText.anchor.set(0.5, 0.5);
loseText.x = 2048 / 2;
loseText.y = 900;
game.addChild(loseText);
tween(loseText, {
alpha: 0,
y: loseText.y - 100
}, {
duration: 1000
});
LK.setTimeout(function () {
loseText.destroy();
}, 1000);
}
// Ensure coins don't go below 0
coins = Math.max(0, coins);
// Save coins to storage
storage.coins = coins;
// Update display
coinText.setText("Coins: " + coins.toLocaleString());
progressBar.updateProgress(coins, goalCoins);
// Set meme content
currentMeme.setMeme(memeText, isViral);
// Check if player has reached the goal
checkGoal();
}
// Check if player reached the goal
function checkGoal() {
if (coins >= goalCoins && !houseOwned) {
houseOwned = true;
// Update best score if needed
if (!storage.bestScore || coins > storage.bestScore) {
storage.bestScore = coins;
}
// Animate house celebration
tween(house.scale, {
x: 1.2,
y: 1.2
}, {
duration: 800,
easing: tween.elasticOut
});
// Show winning message
var winText = new Text2("CONGRATULATIONS!\nYou bought your dream house!", {
size: 80,
fill: 0x009900
});
winText.anchor.set(0.5, 0.5);
winText.x = 2048 / 2;
winText.y = 1100;
game.addChild(winText);
// Show confetti effect (simplified)
LK.effects.flashScreen(0xFFFF00, 500);
// Show you win after a delay
LK.setTimeout(function () {
LK.showYouWin();
}, 2000);
}
}
// Handle button clicks
makeButton.down = function (x, y, obj) {
tween(makeButton.scale, {
x: 0.9,
y: 0.9
}, {
duration: 100,
easing: tween.easeOut
});
};
makeButton.up = function (x, y, obj) {
tween(makeButton.scale, {
x: 1,
y: 1
}, {
duration: 100,
easing: tween.easeOut
});
// Only play click sound if meme will be viral, otherwise let fail sound play in createMeme
var willBeViral = Math.random() < 0.6;
if (willBeViral) {
LK.getSound('success').play();
}
createMeme(willBeViral);
};
// Game update function
game.update = function () {
// Game logic that runs every frame
};
// Start background music
LK.playMusic('backgroundMusic');
// Create initial meme to show the player how it works
LK.setTimeout(function () {
var isViral = Math.random() < 0.6;
createMeme(isViral);
}, 500);
;
the chicken jockey meme. In-Game asset. 2d. High contrast. No shadows
tung tung tung shaur meme. In-Game asset. 2d. High contrast. No shadows
banana meme. In-Game asset. 2d. High contrast. No shadows
mewing meme. In-Game asset. 2d. High contrast. No shadows
monkey eating a banana with a face meme. In-Game asset. 2d. High contrast. No shadows