User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading '0')' in or related to this line: 'if (Math.random() < 0.001 && stressLevel > 0) {' Line Number: 604
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading '0')' in or related to this line: 'var newChild = LK.getAsset(child.assetId, {' Line Number: 434
User prompt
Please fix the bug: 'Uncaught TypeError: Cannot read properties of undefined (reading '0')' in or related to this line: 'fillMask.addChild(barMask.clone());' Line Number: 428
User prompt
The stress lever bar putt it on the bottom middle. Round the corners.
User prompt
change everything Game Concept Create a relatable meme game where players tap falling problems before they hit the ground and raise the character's stress level. The character insists "I'M FINE!" with increasing intensity as they visibly become more stressed, reflecting the universal experience of pretending to be okay when overwhelmed. Visual Assets Required 1. Background Image (2048x2732px) Modern office/workspace with subtle chaotic elements Include desk with scattered papers, coffee stains, overflowing inbox, sticky notes Light, neutral color palette (pale blue/gray) with professional appearance Should look slightly overwhelming but clean enough to not distract from gameplay 2. Character (282x423px) Professional-looking, gender-neutral character in business casual attire Neutral standing pose with slightly raised arms in "what can you do?" gesture Transparent background to allow for color tinting Simple design that reads well when tinted and animated Slightly disheveled appearance (loose tie, messy hair) that works with stress concept 3. Problem Icons (150x150px) Square or rounded square icons with different colors for each problem type Should contain text describing common daily problems: "WiFi Down!" (red) "Coffee Spill!" (brown) "Deadline Changed!" (orange) "Surprise Meeting!" (purple) "Traffic Jam!" (gray) "Phone Died!" (black) "Email Overload!" (blue) "Printer Error!" (dark red) "Noisy Neighbors!" (green) "Low Battery!" (orange-red) 4. UI Elements Stress Meter: Gray background bar (1000x50px) with red fill that grows Game title: Bold, red "I'M FINE!" text at top of screen Audio Assets Required 1. Background Music Upbeat but slightly frantic looping music 20-30 seconds long with seamless loop Should convey busy, slightly stressful energy 2. Sound Effects Level Up: Short positive jingle (1 second) Stress Sound: Negative crash/thud when problems hit ground (1 second) Tap Sound: Quick satisfying click/pop for successful taps (0.2 seconds) Game Mechanics 1. Main Gameplay Problems fall from top of screen at random horizontal positions Player taps problems before they hit the ground to earn points Each problem that hits the ground increases stress level Stress bar fills from left to right as stress increases Game ends when stress reaches 100% 2. Character Progression As stress increases, character changes in 4 stages: 0-30% Stress: Normal appearance (blue tint), calmly says "I'm fine!" 30-60% Stress: Slightly stressed (purple tint), says "I'm FINE!" in dark red 60-90% Stress: Very stressed (red tint), slight wobble animation, says "I'M FINE!!" in bright red 90-100% Stress: About to lose it (bright red tint), dramatic wobble with squash/stretch, says "I'M FINE!!!" in large bright red text 3. Difficulty Progression Level increases every 10 points Higher levels spawn problems faster (reduce spawn time by 150ms per level) Minimum spawn time is 500ms Screen shake effect starts at 70% stress and intensifies as stress increases Small random chance (0.1%) to reduce stress slightly over time 4. UI Elements Score display at top center ("SCORE: 0") Level indicator at top left ("LEVEL: 1") Stress meter below score with "STRESS LEVEL" label Help button in corner that shows instructions when tapped Tutorial text at game start: "TAP THE PROBLEMS BEFORE THEY HIT THE GROUND!" 5. Special Effects Green screen flash on level up with "LEVEL UP!" text animation Red screen flash when problems hit ground Intense red screen flash on game over "YOU'RE NOT FINE!" game over text with "(But we've all been there...)" subtitle Scoring & Win Conditions 1 point per problem tapped in levels 1-9 2 points per problem tapped in level 10+ Game ends when stress meter reaches 100% Final score displayed on game over screen Technical Requirements Use Upit game engine with tween animations for smooth movement Keep tracking array of active problems and clean up destroyed ones Use efficient collision detection Implement stress bar with smooth animations Include help button with game instructions Add screen shake effect that scales with stress level Implement subtle stress reduction over time as recovery mechanic Key Winning Elements Universal relatability of the "I'm fine!" meme concept Visual humor of character insisting they're fine while clearly not being fine Simple one-touch gameplay accessible to all players Escalating visual feedback that communicates game state Polished animations and effects that enhance the core concept Humor that makes players want to share their experience ↪💡 Consider importing and using the following plugins: @upit/tween.v1, @upit/storage.v1
User prompt
Please fix the bug: 'Graphics is not a constructor' in or related to this line: 'var instructionsButtonBg = new Graphics();' Line Number: 513
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'self.statusText.style.fill = 0x000000;' Line Number: 46
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'self.statusText.style.fill = 0x000000;' Line Number: 46
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'self.statusText.style.fill = 0x000000;' Line Number: 46
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'self.statusText.style.fill = 0x000000;' Line Number: 46
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'self.statusText.style.fill = 0x000000;' Line Number: 43
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'self.statusText.style.fill = 0x000000;' Line Number: 42
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'self.statusText.style.fill = 0x000000;' Line Number: 43
User prompt
Please fix the bug: 'Cannot set properties of undefined (setting 'fill')' in or related to this line: 'self.statusText.style.fill = 0x000000;' Line Number: 42
Code edit (1 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: Cannot set properties of undefined (setting 'size')' in or related to this line: 'self.textBubble.style.size = 70;' Line Number: 59
Code edit (1 edits merged)
Please save this source code
User prompt
I'm Fine!
Initial prompt
Game Overview "I'm Fine!" is a relatable meme game about maintaining your composure while life throws endless problems at you. Players tap falling "problem" icons before they hit the ground, trying to prevent their stress meter from filling completely. As stress increases, the character visibly becomes more frantic while insisting "I'M FINE!" Instructions for Upit Engine IMPORTANT: This will create a new game and delete any existing work. Asset Requirements Images: Background (2048x2732): An office or home workspace environment with subtle chaos elements (papers, coffee cups, etc.). Position centered on screen. Player Character (282x423): A professional-looking person gradually becoming more disheveled. Position at bottom center of screen (coordinates: 1024, 2432). Problem Icons (150x150): Square problem bubbles with different colors for each problem type. Audio: Background Music: Upbeat but slightly frantic music loop. Level Up Sound: Short positive jingle. Stress Sound: Short negative sound effect when problems hit the ground. Tap Sound: Quick click sound for successful taps. Screen Layout Top Center: Score display ("SCORE: 0") in large bold font (size 60, black). Top Left: Level display ("LEVEL: 1") in medium font (size 40, black). Top Center, below score: Stress meter label ("STRESS LEVEL") in small font (size 30, black). Below stress label: Stress meter bar (1000px wide, 50px high), gray background with red fill that grows from left to right as stress increases. Center Screen: Playing area where problems fall from top to bottom. Bottom Center: Player character with speech bubble above saying "I'm fine!" (text changes with stress level). Visual Progression As stress increases: 0-30% Stress: Character has blue tint, calmly says "I'm fine!" 30-60% Stress: Character has purple tint, says "I'm FINE!" in dark red text 60-90% Stress: Character has red tint, wobbles slightly, says "I'M FINE!!" in bright red text 90-100% Stress: Character has bright red tint, wobbles dramatically with squash/stretch, says "I'M FINE!!!" in bright red text, screen shakes Gameplay Details Problems fall from top of screen at random horizontal positions Higher levels spawn problems faster (level increases every 10 points) Different problem types ("WiFi Down!", "Coffee Spill!", etc.) have different colors and stress values Tap problems to clear them and earn points If problems hit the ground, they increase stress meter Game ends when stress reaches 100% Small random chance to reduce stress slightly over time (tiny recovery chance) Screen shake effect when stress is above 70% Brief green screen flash on level up Red screen flash on game over Winning Elements This game captures the relatable meme of claiming "I'm fine!" while clearly not being fine. It plays on daily chaos that everyone experiences, with problems that will make players say "lol same" (WiFi issues, coffee spills, surprise meetings). The escalating visual panic paired with increasingly desperate "I'M FINE!" text perfectly embodies the internet meme culture while being simple enough for anyone to play.RetryClaude can make mistakes. Please double-check responses.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1"); /**** * Classes ****/ var Player = Container.expand(function () { var self = Container.call(this); var playerGraphic = self.attachAsset('player', { anchorX: 0.5, anchorY: 0.5 }); // Create status text once self.statusText = new Text2("I'm fine!", { size: 40, fill: 0x000000 }); self.statusText.anchor.set(0.5, -0.5); self.addChild(self.statusText); // Update appearance based on stress level self.updateAppearance = function (stress) { // Visual changes based on stress if (stress < 30) { playerGraphic.tint = 0x3498db; // Normal blue self.statusText.setText("I'm fine!"); self.statusText.style.fill = 0x000000; self.statusText.style.fontSize = 40; tween.stop(self); tween(self, { rotation: 0, scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeOut }); } else if (stress < 60) { playerGraphic.tint = 0x9b59b6; // Purple - getting stressed self.statusText.setText("I'm FINE!"); self.statusText.style.fill = 0x660000; self.statusText.style.fontSize = 45; tween.stop(self); tween(self, { rotation: 0, scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeOut }); } else if (stress < 90) { playerGraphic.tint = 0xe74c3c; // Red - very stressed self.statusText.setText("I'M FINE!!"); self.statusText.style.fill = 0xFF0000; self.statusText.style.fontSize = 50; // Add slight wobble tween.stop(self); tween(self, { rotation: 0.05 }, { duration: 300, easing: tween.easeInOut, onFinish: function onFinish() { tween(self, { rotation: -0.05 }, { duration: 300, easing: tween.easeInOut, onFinish: function onFinish() { if (stressLevel >= 60) { self.updateAppearance(stressLevel); } } }); } }); } else { playerGraphic.tint = 0xff0000; // Bright red - about to lose it self.statusText.setText("I'M FINE!!!"); self.statusText.style.fill = 0xFF0000; self.statusText.style.fontSize = 55; // Add more dramatic wobble tween.stop(self); tween(self, { rotation: 0.1, scaleX: 1.1, scaleY: 0.9 }, { duration: 200, easing: tween.easeInOut, onFinish: function onFinish() { tween(self, { rotation: -0.1, scaleX: 0.9, scaleY: 1.1 }, { duration: 200, easing: tween.easeInOut, onFinish: function onFinish() { if (stressLevel >= 90) { self.updateAppearance(stressLevel); } } }); } }); } }; return self; }); var Problem = Container.expand(function () { var self = Container.call(this); // Different problem types with text and color var problemTypes = [{ text: "WiFi Down!", color: 0xff4d4d }, { text: "Coffee Spill!", color: 0x8b4513 }, { text: "Deadline Changed!", color: 0xff9900 }, { text: "Surprise Meeting!", color: 0x9933cc }, { text: "Traffic Jam!", color: 0x666666 }, { text: "Phone Died!", color: 0x000000 }, { text: "Email Overload!", color: 0x3366ff }, { text: "Printer Error!", color: 0xcc0000 }, { text: "Noisy Neighbors!", color: 0x99cc00 }, { text: "Low Battery!", color: 0xff6600 }]; // Choose random problem type var typeIndex = Math.floor(Math.random() * problemTypes.length); var type = problemTypes[typeIndex]; // Create problem visual var problemGraphic = self.attachAsset('problem', { anchorX: 0.5, anchorY: 0.5, tint: type.color }); // Add problem text var problemText = new Text2(type.text, { size: 24, fill: 0xFFFFFF, align: 'center', wordWrap: true, wordWrapWidth: 130 }); problemText.anchor.set(0.5, 0.5); self.addChild(problemText); // Problem properties self.fallSpeed = 2 + Math.random() * 3; self.rotationSpeed = (Math.random() - 0.5) * 0.05; self.stressValue = Math.ceil(Math.random() * 3); self.active = true; // Handle tap self.down = function (x, y, obj) { if (!self.active) return; self.active = false; LK.getSound('tap').play(); // Tween to make it disappear tween(self, { alpha: 0, scaleX: 0.2, scaleY: 0.2 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { self.destroy(); } }); // Award more points at higher levels if (gameLevel < 10) { score += 1; } else { score += 2; } scoreText.setText("SCORE: " + score); }; // Update method called each frame self.update = function () { if (!self.active) return; // Move problem downward self.y += self.fallSpeed; self.rotation += self.rotationSpeed; // Check if problem hit the floor if (self.y > 2732) { stressLevel += self.stressValue; updateStressBar(); LK.getSound('stress').play(); // Visual feedback LK.effects.flashScreen(0xff0000, 200, 0.3); self.destroy(); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0xe8f4f8 // Light blue background }); /**** * Game Code ****/ // Replace with actual ID // Replace with actual ID // Replace with actual ID // Replace with actual ID // Replace with actual ID // Replace with actual ID // Game state variables var score = 0; var stressLevel = 0; var gameLevel = 1; var problems = []; var problemSpawnTime = 2000; // ms var lastProblemTime = 0; var player; var scoreText; var levelText; var progressBarBackground; var progressBarFill; var gameRunning = true; // Set up background var background = LK.getAsset('background', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(background); // Set up player player = new Player(); player.x = 2048 / 2; player.y = 2732 - 300; game.addChild(player); // Set up score text scoreText = new Text2("SCORE: 0", { size: 60, fill: 0x000000 }); scoreText.anchor.set(0.5, 0); scoreText.x = 2048 / 2; scoreText.y = 20; LK.gui.top.addChild(scoreText); // Set up level text levelText = new Text2("LEVEL: 1", { size: 40, fill: 0x000000 }); levelText.anchor.set(0, 0); levelText.x = 150; // Leave space for the top-left menu icon levelText.y = 50; LK.gui.addChild(levelText); // Game title var titleText = new Text2("I'M FINE!", { size: 70, fill: 0xff4d4d, fontWeight: 'bold' }); titleText.anchor.set(1, 0); titleText.x = 2048 - 150; titleText.y = 50; LK.gui.addChild(titleText); // Stress bar progressBarBackground = LK.getAsset('progressBar', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 120 }); LK.gui.addChild(progressBarBackground); progressBarFill = LK.getAsset('progressFill', { anchorX: 0, anchorY: 0.5, x: (2048 - 1000) / 2, y: 120, width: 0 // Start with 0 width }); LK.gui.addChild(progressBarFill); // Status label var statusLabel = new Text2("STRESS LEVEL", { size: 30, fill: 0x000000 }); statusLabel.anchor.set(0.5, 1); statusLabel.x = 2048 / 2; statusLabel.y = progressBarBackground.y - 35; LK.gui.addChild(statusLabel); // Update stress bar based on current stress level function updateStressBar() { // Update stress bar width based on stress level var maxWidth = 1000; var newWidth = stressLevel / 100 * maxWidth; // Tween the progress bar fill tween(progressBarFill, { width: newWidth }, { duration: 300, easing: tween.easeOut }); // Update player appearance based on stress player.updateAppearance(stressLevel); // Game over if stress level reaches 100 if (stressLevel >= 100 && gameRunning) { gameRunning = false; LK.effects.flashScreen(0xff0000, 1000); // Create game over text var gameOverText = new Text2("YOU'RE NOT FINE!", { size: 100, fill: 0xff0000, stroke: 0xffffff, strokeThickness: 5 }); gameOverText.anchor.set(0.5, 0.5); gameOverText.x = 2048 / 2; gameOverText.y = 2732 / 2 - 200; // Add fun meme text var memeText = new Text2("(But we've all been there...)", { size: 50, fill: 0xffffff }); memeText.anchor.set(0.5, 0.5); memeText.x = 2048 / 2; memeText.y = 2732 / 2 - 100; LK.gui.addChild(gameOverText); LK.gui.addChild(memeText); LK.setTimeout(function () { LK.showGameOver(); }, 3000); } } // Spawn a new problem function spawnProblem() { var problem = new Problem(); problem.x = Math.random() * (2048 - 200) + 100; // Random x position problem.y = -100; // Start above screen game.addChild(problem); problems.push(problem); } // Check if level should be increased based on score function checkLevelProgress() { // Level up based on score var newLevel = Math.floor(score / 10) + 1; if (newLevel > gameLevel) { gameLevel = newLevel; levelText.setText("LEVEL: " + gameLevel); // Make problems spawn faster as level increases problemSpawnTime = Math.max(500, 2000 - gameLevel * 150); // Visual and audio feedback for level up LK.effects.flashScreen(0x00ff00, 500, 0.3); LK.getSound('levelup').play(); // Show level up text var levelUpText = new Text2("LEVEL UP!", { size: 80, fill: 0x00cc00 }); levelUpText.anchor.set(0.5, 0.5); levelUpText.x = 2048 / 2; levelUpText.y = 2732 / 2; LK.gui.addChild(levelUpText); // Animate and remove text tween(levelUpText, { scaleX: 1.5, scaleY: 1.5, alpha: 0 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { levelUpText.destroy(); } }); } } // Clean up problems that have been destroyed function cleanupProblems() { for (var i = problems.length - 1; i >= 0; i--) { if (!problems[i].parent) { problems.splice(i, 1); } } } // Spawn tutorial text at start function showTutorial() { var tutorialText = new Text2("TAP THE PROBLEMS BEFORE THEY HIT THE GROUND!", { size: 60, fill: 0xffffff, align: 'center', wordWrap: true, wordWrapWidth: 1800, stroke: 0x000000, strokeThickness: 5 }); tutorialText.anchor.set(0.5, 0.5); tutorialText.x = 2048 / 2; tutorialText.y = 2732 / 2; LK.gui.addChild(tutorialText); LK.setTimeout(function () { tween(tutorialText, { alpha: 0 }, { duration: 1000, easing: tween.easeOut, onFinish: function onFinish() { tutorialText.destroy(); } }); }, 3000); } // Show tutorial at start showTutorial(); // Game update function game.update = function () { if (!gameRunning) { return; } // Check if it's time to spawn a new problem if (LK.ticks * (1000 / 60) - lastProblemTime > problemSpawnTime) { spawnProblem(); lastProblemTime = LK.ticks * (1000 / 60); } // Update all problems for (var i = 0; i < problems.length; i++) { problems[i].update(); } // Check if player should level up checkLevelProgress(); // Clean up any destroyed problems cleanupProblems(); // Randomly reduce stress by a small amount (chance for slight recovery) if (Math.random() < 0.001 && stressLevel > 0) { stressLevel = Math.max(0, stressLevel - 1); updateStressBar(); } }; // Add shake effect to entire game when stress is high LK.setInterval(function () { if (stressLevel >= 70 && gameRunning) { var intensity = (stressLevel - 70) / 30; // 0 to 1 based on stress from 70-100 var shake = 10 * intensity; tween(game, { x: Math.random() * shake - shake / 2 }, { duration: 50, easing: tween.linear, onFinish: function onFinish() { tween(game, { x: 0 }, { duration: 50, easing: tween.linear }); } }); } }, 1000); // Initial stress bar update updateStressBar(); // Start the music LK.playMusic('bgmusic'); // Add instructions button var instructionsButton = new Container(); var instructionsButtonBg = new Graphics(); instructionsButtonBg.beginFill(0x333333, 0.7); instructionsButtonBg.drawRoundedRect(0, 0, 60, 60, 10); instructionsButtonBg.endFill(); instructionsButton.addChild(instructionsButtonBg); var questionText = new Text2("?", { size: 40, fill: 0xffffff }); questionText.anchor.set(0.5, 0.5); questionText.x = 30; questionText.y = 30; instructionsButton.addChild(questionText); instructionsButton.x = 50; instructionsButton.y = 50; instructionsButton.interactive = true; LK.gui.addChild(instructionsButton); instructionsButton.down = function () { // Show instructions popup var popup = new Container(); // Darken background var bg = new Graphics(); bg.beginFill(0x000000, 0.7); bg.drawRect(0, 0, 2048, 2732); bg.endFill(); popup.addChild(bg); // Instructions panel var panel = new Graphics(); panel.beginFill(0xffffff, 0.9); panel.drawRoundedRect(0, 0, 1500, 1000, 20); panel.endFill(); panel.x = (2048 - 1500) / 2; panel.y = (2732 - 1000) / 2; popup.addChild(panel); // Title var title = new Text2("HOW TO PLAY", { size: 80, fill: 0xff4d4d, fontWeight: 'bold' }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = panel.y + 50; popup.addChild(title); // Instructions var instructions = new Text2("1. Tap on the falling problems before they hit the ground\n\n" + "2. Each problem that hits the ground increases your stress\n\n" + "3. Don't let your stress meter reach 100%\n\n" + "4. Score points by tapping problems\n\n" + "5. Level up every 10 points\n\n" + "6. Higher levels = faster problems\n\n" + "7. Just keep telling yourself, \"I'M FINE!\"", { size: 50, fill: 0x000000, align: 'left', lineHeight: 60 }); instructions.anchor.set(0, 0); instructions.x = panel.x + 100; instructions.y = panel.y + 150; popup.addChild(instructions); // Close button var closeButton = new Container(); var closeBg = new Graphics(); closeBg.beginFill(0xff4d4d); closeBg.drawRoundedRect(0, 0, 300, 100, 20); closeBg.endFill(); closeButton.addChild(closeBg); var closeText = new Text2("CLOSE", { size: 50, fill: 0xffffff }); closeText.anchor.set(0.5, 0.5); closeText.x = 150; closeText.y = 50; closeButton.addChild(closeText); closeButton.x = panel.x + (panel.width - 300) / 2; closeButton.y = panel.y + panel.height - 150; closeButton.interactive = true; popup.addChild(closeButton); closeButton.down = function () { popup.destroy(); }; LK.gui.addChild(popup); };
===================================================================
--- original.js
+++ change.js
@@ -6,322 +6,558 @@
/****
* Classes
****/
-var Character = Container.expand(function () {
+var Player = Container.expand(function () {
var self = Container.call(this);
- // Create character visual
- var graphic = self.attachAsset('character', {
+ var playerGraphic = self.attachAsset('player', {
anchorX: 0.5,
anchorY: 0.5
});
- // Create character's text bubble
- self.textBubble = new Text2("I'M FINE!", {
- size: 70,
+ // Create status text once
+ self.statusText = new Text2("I'm fine!", {
+ size: 40,
fill: 0x000000
});
- self.textBubble.style = {
- size: 70
- };
- self.textBubble.anchor.set(0.5, 1.2);
- self.addChild(self.textBubble);
- // Set initial state
- self.stressLevel = 0;
- self.baseScale = 1;
- self.wobbleAmount = 0;
- self.wobbleSpeed = 0.05;
- self.wobbleAngle = 0;
- // Method to update character based on stress
- self.updateStress = function (stressPercent) {
- self.stressLevel = stressPercent;
- // Change appearance based on stress
- var colorShift = Math.floor(stressPercent * 2.55);
- var red = Math.min(51 + colorShift, 255);
- var green = Math.max(204 - colorShift, 51);
- graphic.tint = red << 16 | green << 8 | 51;
- // Update wobble effect
- self.wobbleAmount = stressPercent / 100 * 0.2;
- self.wobbleSpeed = 0.05 + stressPercent / 100 * 0.1;
- // Update text message
- if (stressPercent < 30) {
- self.textBubble.setText("I'M FINE!");
- self.textBubble.style.size = 70;
- } else if (stressPercent < 60) {
- self.textBubble.setText("I'M FINE!!");
- self.textBubble.style.size = 80;
- } else if (stressPercent < 90) {
- self.textBubble.setText("I'M TOTALLY FINE!!!");
- self.textBubble.style.size = 90;
+ self.statusText.anchor.set(0.5, -0.5);
+ self.addChild(self.statusText);
+ // Update appearance based on stress level
+ self.updateAppearance = function (stress) {
+ // Visual changes based on stress
+ if (stress < 30) {
+ playerGraphic.tint = 0x3498db; // Normal blue
+ self.statusText.setText("I'm fine!");
+ self.statusText.style.fill = 0x000000;
+ self.statusText.style.fontSize = 40;
+ tween.stop(self);
+ tween(self, {
+ rotation: 0,
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ } else if (stress < 60) {
+ playerGraphic.tint = 0x9b59b6; // Purple - getting stressed
+ self.statusText.setText("I'm FINE!");
+ self.statusText.style.fill = 0x660000;
+ self.statusText.style.fontSize = 45;
+ tween.stop(self);
+ tween(self, {
+ rotation: 0,
+ scaleX: 1,
+ scaleY: 1
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ } else if (stress < 90) {
+ playerGraphic.tint = 0xe74c3c; // Red - very stressed
+ self.statusText.setText("I'M FINE!!");
+ self.statusText.style.fill = 0xFF0000;
+ self.statusText.style.fontSize = 50;
+ // Add slight wobble
+ tween.stop(self);
+ tween(self, {
+ rotation: 0.05
+ }, {
+ duration: 300,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ rotation: -0.05
+ }, {
+ duration: 300,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ if (stressLevel >= 60) {
+ self.updateAppearance(stressLevel);
+ }
+ }
+ });
+ }
+ });
} else {
- self.textBubble.setText("I'M COMPLETELY FINE!!!!");
- self.textBubble.style.size = 100;
+ playerGraphic.tint = 0xff0000; // Bright red - about to lose it
+ self.statusText.setText("I'M FINE!!!");
+ self.statusText.style.fill = 0xFF0000;
+ self.statusText.style.fontSize = 55;
+ // Add more dramatic wobble
+ tween.stop(self);
+ tween(self, {
+ rotation: 0.1,
+ scaleX: 1.1,
+ scaleY: 0.9
+ }, {
+ duration: 200,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ tween(self, {
+ rotation: -0.1,
+ scaleX: 0.9,
+ scaleY: 1.1
+ }, {
+ duration: 200,
+ easing: tween.easeInOut,
+ onFinish: function onFinish() {
+ if (stressLevel >= 90) {
+ self.updateAppearance(stressLevel);
+ }
+ }
+ });
+ }
+ });
}
};
- // Method to update character animation
- self.update = function () {
- // Update wobble effect
- if (self.wobbleAmount > 0) {
- self.wobbleAngle += self.wobbleSpeed;
- self.rotation = Math.sin(self.wobbleAngle) * self.wobbleAmount;
- // Subtle pulse effect
- var scalePulse = 1 + Math.sin(self.wobbleAngle * 0.5) * (self.wobbleAmount * 0.5);
- self.scale.set(self.baseScale * scalePulse);
- }
- };
return self;
});
-var LevelIndicator = Container.expand(function () {
+var Problem = Container.expand(function () {
var self = Container.call(this);
- // Create level text
- self.levelText = new Text2("LEVEL 1", {
- size: 50,
- fill: 0xFFFFFF
- });
- self.levelText.anchor.set(0.5, 0.5);
- self.addChild(self.levelText);
- // Update level display
- self.updateLevel = function (level) {
- self.levelText.setText("LEVEL " + level);
- // Animation effect when level changes
- self.scale.set(1.5);
- tween(self, {
- scaleX: 1,
- scaleY: 1
- }, {
- duration: 500,
- easing: tween.elasticOut
- });
- };
- return self;
-});
-var Problem = Container.expand(function (type, speed) {
- var self = Container.call(this);
- // Store problem type and falling speed
- self.type = type || 'work';
- self.speed = speed || 5;
- self.active = true;
- // Create problem visual representation
- var graphic = self.attachAsset('problem_' + self.type, {
+ // Different problem types with text and color
+ var problemTypes = [{
+ text: "WiFi Down!",
+ color: 0xff4d4d
+ }, {
+ text: "Coffee Spill!",
+ color: 0x8b4513
+ }, {
+ text: "Deadline Changed!",
+ color: 0xff9900
+ }, {
+ text: "Surprise Meeting!",
+ color: 0x9933cc
+ }, {
+ text: "Traffic Jam!",
+ color: 0x666666
+ }, {
+ text: "Phone Died!",
+ color: 0x000000
+ }, {
+ text: "Email Overload!",
+ color: 0x3366ff
+ }, {
+ text: "Printer Error!",
+ color: 0xcc0000
+ }, {
+ text: "Noisy Neighbors!",
+ color: 0x99cc00
+ }, {
+ text: "Low Battery!",
+ color: 0xff6600
+ }];
+ // Choose random problem type
+ var typeIndex = Math.floor(Math.random() * problemTypes.length);
+ var type = problemTypes[typeIndex];
+ // Create problem visual
+ var problemGraphic = self.attachAsset('problem', {
anchorX: 0.5,
- anchorY: 0.5
+ anchorY: 0.5,
+ tint: type.color
});
- // Add label for the problem type
- var label = new Text2(self.type.toUpperCase(), {
+ // Add problem text
+ var problemText = new Text2(type.text, {
size: 24,
- fill: 0xFFFFFF
+ fill: 0xFFFFFF,
+ align: 'center',
+ wordWrap: true,
+ wordWrapWidth: 130
});
- label.anchor.set(0.5, 0.5);
- self.addChild(label);
- // Method to handle problem falling
- self.update = function () {
- if (self.active) {
- self.y += self.speed;
- // Check if problem hit the ground
- if (self.y > 2732 - 100) {
- self.hitGround();
- }
- }
- };
- // Method to handle tapping on problem
+ problemText.anchor.set(0.5, 0.5);
+ self.addChild(problemText);
+ // Problem properties
+ self.fallSpeed = 2 + Math.random() * 3;
+ self.rotationSpeed = (Math.random() - 0.5) * 0.05;
+ self.stressValue = Math.ceil(Math.random() * 3);
+ self.active = true;
+ // Handle tap
self.down = function (x, y, obj) {
- if (self.active) {
- self.solved();
- }
- };
- // Method when problem is solved
- self.solved = function () {
if (!self.active) return;
self.active = false;
LK.getSound('tap').play();
- // Visual feedback for solving
+ // Tween to make it disappear
tween(self, {
alpha: 0,
scaleX: 0.2,
scaleY: 0.2
}, {
duration: 300,
+ easing: tween.easeOut,
onFinish: function onFinish() {
self.destroy();
}
});
- // Update score
- LK.setScore(LK.getScore() + 10);
+ // Award more points at higher levels
+ if (gameLevel < 10) {
+ score += 1;
+ } else {
+ score += 2;
+ }
+ scoreText.setText("SCORE: " + score);
};
- // Method when problem hits ground
- self.hitGround = function () {
+ // Update method called each frame
+ self.update = function () {
if (!self.active) return;
- self.active = false;
- LK.getSound('stress').play();
- // Add stress to player
- stress += 10;
- // Visual feedback for hitting ground
- tween(self, {
- alpha: 0
- }, {
- duration: 200,
- onFinish: function onFinish() {
- self.destroy();
- }
- });
+ // Move problem downward
+ self.y += self.fallSpeed;
+ self.rotation += self.rotationSpeed;
+ // Check if problem hit the floor
+ if (self.y > 2732) {
+ stressLevel += self.stressValue;
+ updateStressBar();
+ LK.getSound('stress').play();
+ // Visual feedback
+ LK.effects.flashScreen(0xff0000, 200, 0.3);
+ self.destroy();
+ }
};
return self;
});
-var StressMeter = Container.expand(function () {
- var self = Container.call(this);
- // Create meter background
- var background = self.attachAsset('stressMeter', {
- anchorX: 0,
- anchorY: 0
- });
- // Create fill bar
- self.fillBar = self.attachAsset('stressFill', {
- anchorX: 0,
- anchorY: 0,
- x: 2,
- y: 2,
- width: 0 // Start empty
- });
- // Create label
- self.label = new Text2("STRESS: 0%", {
- size: 30,
- fill: 0xFFFFFF
- });
- self.label.anchor.set(0.5, 0.5);
- self.label.x = background.width / 2;
- self.label.y = background.height / 2;
- self.addChild(self.label);
- // Method to update fill based on stress percentage
- self.updateFill = function (percent) {
- var fillWidth = (background.width - 4) * (percent / 100);
- self.fillBar.width = fillWidth;
- self.label.setText("STRESS: " + Math.floor(percent) + "%");
- };
- return self;
-});
/****
* Initialize Game
****/
var game = new LK.Game({
- backgroundColor: 0x87CEEB // Sky blue background
+ backgroundColor: 0xe8f4f8 // Light blue background
});
/****
* Game Code
****/
+// Replace with actual ID
+// Replace with actual ID
+// Replace with actual ID
+// Replace with actual ID
+// Replace with actual ID
+// Replace with actual ID
// Game state variables
-var stress = 0;
-var maxStress = 100;
-var level = 1;
+var score = 0;
+var stressLevel = 0;
+var gameLevel = 1;
var problems = [];
-var problemTypes = ['work', 'bills', 'family', 'health'];
-var spawnInterval = 2000; // ms between problem spawns
-var lastSpawnTime = 0;
-var baseSpeed = 3; // Base falling speed for problems
-var gameActive = true;
-// Create character
-var character = new Character();
-character.x = 2048 / 2;
-character.y = 2732 - 400;
-character.scale.set(1.2);
-game.addChild(character);
-// Create stress meter
-var stressMeter = new StressMeter();
-stressMeter.x = (2048 - stressMeter.width) / 2;
-stressMeter.y = 150;
-game.addChild(stressMeter);
-// Create level indicator
-var levelIndicator = new LevelIndicator();
-levelIndicator.x = 2048 / 2;
-levelIndicator.y = 80;
-game.addChild(levelIndicator);
-// Create score display
-var scoreText = new Text2("SCORE: 0", {
+var problemSpawnTime = 2000; // ms
+var lastProblemTime = 0;
+var player;
+var scoreText;
+var levelText;
+var progressBarBackground;
+var progressBarFill;
+var gameRunning = true;
+// Set up background
+var background = LK.getAsset('background', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 2048 / 2,
+ y: 2732 / 2
+});
+game.addChild(background);
+// Set up player
+player = new Player();
+player.x = 2048 / 2;
+player.y = 2732 - 300;
+game.addChild(player);
+// Set up score text
+scoreText = new Text2("SCORE: 0", {
size: 60,
- fill: 0xFFFFFF
+ fill: 0x000000
});
scoreText.anchor.set(0.5, 0);
-LK.gui.top.addChild(scoreText);
+scoreText.x = 2048 / 2;
scoreText.y = 20;
-// Random position generator for problems
-function getRandomX() {
- // Keep problems within screen bounds and avoid edges
- return 100 + Math.random() * (2048 - 200);
+LK.gui.top.addChild(scoreText);
+// Set up level text
+levelText = new Text2("LEVEL: 1", {
+ size: 40,
+ fill: 0x000000
+});
+levelText.anchor.set(0, 0);
+levelText.x = 150; // Leave space for the top-left menu icon
+levelText.y = 50;
+LK.gui.addChild(levelText);
+// Game title
+var titleText = new Text2("I'M FINE!", {
+ size: 70,
+ fill: 0xff4d4d,
+ fontWeight: 'bold'
+});
+titleText.anchor.set(1, 0);
+titleText.x = 2048 - 150;
+titleText.y = 50;
+LK.gui.addChild(titleText);
+// Stress bar
+progressBarBackground = LK.getAsset('progressBar', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 2048 / 2,
+ y: 120
+});
+LK.gui.addChild(progressBarBackground);
+progressBarFill = LK.getAsset('progressFill', {
+ anchorX: 0,
+ anchorY: 0.5,
+ x: (2048 - 1000) / 2,
+ y: 120,
+ width: 0 // Start with 0 width
+});
+LK.gui.addChild(progressBarFill);
+// Status label
+var statusLabel = new Text2("STRESS LEVEL", {
+ size: 30,
+ fill: 0x000000
+});
+statusLabel.anchor.set(0.5, 1);
+statusLabel.x = 2048 / 2;
+statusLabel.y = progressBarBackground.y - 35;
+LK.gui.addChild(statusLabel);
+// Update stress bar based on current stress level
+function updateStressBar() {
+ // Update stress bar width based on stress level
+ var maxWidth = 1000;
+ var newWidth = stressLevel / 100 * maxWidth;
+ // Tween the progress bar fill
+ tween(progressBarFill, {
+ width: newWidth
+ }, {
+ duration: 300,
+ easing: tween.easeOut
+ });
+ // Update player appearance based on stress
+ player.updateAppearance(stressLevel);
+ // Game over if stress level reaches 100
+ if (stressLevel >= 100 && gameRunning) {
+ gameRunning = false;
+ LK.effects.flashScreen(0xff0000, 1000);
+ // Create game over text
+ var gameOverText = new Text2("YOU'RE NOT FINE!", {
+ size: 100,
+ fill: 0xff0000,
+ stroke: 0xffffff,
+ strokeThickness: 5
+ });
+ gameOverText.anchor.set(0.5, 0.5);
+ gameOverText.x = 2048 / 2;
+ gameOverText.y = 2732 / 2 - 200;
+ // Add fun meme text
+ var memeText = new Text2("(But we've all been there...)", {
+ size: 50,
+ fill: 0xffffff
+ });
+ memeText.anchor.set(0.5, 0.5);
+ memeText.x = 2048 / 2;
+ memeText.y = 2732 / 2 - 100;
+ LK.gui.addChild(gameOverText);
+ LK.gui.addChild(memeText);
+ LK.setTimeout(function () {
+ LK.showGameOver();
+ }, 3000);
+ }
}
// Spawn a new problem
function spawnProblem() {
- if (!gameActive) return;
- // Select random problem type
- var type = problemTypes[Math.floor(Math.random() * problemTypes.length)];
- // Calculate speed based on level
- var speed = baseSpeed + level * 0.5;
- // Create problem
- var problem = new Problem(type, speed);
- problem.x = getRandomX();
+ var problem = new Problem();
+ problem.x = Math.random() * (2048 - 200) + 100; // Random x position
problem.y = -100; // Start above screen
- // Add to game and tracking array
game.addChild(problem);
problems.push(problem);
}
-// Check if level should increase
+// Check if level should be increased based on score
function checkLevelProgress() {
- var score = LK.getScore();
- var newLevel = Math.floor(score / 100) + 1;
- if (newLevel > level) {
- level = newLevel;
- levelIndicator.updateLevel(level);
- LK.getSound('levelUp').play();
- // Adjust difficulty
- spawnInterval = Math.max(500, 2000 - level * 150);
+ // Level up based on score
+ var newLevel = Math.floor(score / 10) + 1;
+ if (newLevel > gameLevel) {
+ gameLevel = newLevel;
+ levelText.setText("LEVEL: " + gameLevel);
+ // Make problems spawn faster as level increases
+ problemSpawnTime = Math.max(500, 2000 - gameLevel * 150);
+ // Visual and audio feedback for level up
+ LK.effects.flashScreen(0x00ff00, 500, 0.3);
+ LK.getSound('levelup').play();
+ // Show level up text
+ var levelUpText = new Text2("LEVEL UP!", {
+ size: 80,
+ fill: 0x00cc00
+ });
+ levelUpText.anchor.set(0.5, 0.5);
+ levelUpText.x = 2048 / 2;
+ levelUpText.y = 2732 / 2;
+ LK.gui.addChild(levelUpText);
+ // Animate and remove text
+ tween(levelUpText, {
+ scaleX: 1.5,
+ scaleY: 1.5,
+ alpha: 0
+ }, {
+ duration: 1000,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ levelUpText.destroy();
+ }
+ });
}
}
-// Update stress meter and character
-function updateStress() {
- stress = Math.min(maxStress, Math.max(0, stress));
- var stressPercent = stress / maxStress * 100;
- stressMeter.updateFill(stressPercent);
- character.updateStress(stressPercent);
- // Check for game over
- if (stress >= maxStress) {
- gameActive = false;
- LK.showGameOver();
+// Clean up problems that have been destroyed
+function cleanupProblems() {
+ for (var i = problems.length - 1; i >= 0; i--) {
+ if (!problems[i].parent) {
+ problems.splice(i, 1);
+ }
}
}
-// Reduce stress gradually over time
-function reduceStress() {
- if (stress > 0) {
- stress -= 0.05;
- updateStress();
- }
+// Spawn tutorial text at start
+function showTutorial() {
+ var tutorialText = new Text2("TAP THE PROBLEMS BEFORE THEY HIT THE GROUND!", {
+ size: 60,
+ fill: 0xffffff,
+ align: 'center',
+ wordWrap: true,
+ wordWrapWidth: 1800,
+ stroke: 0x000000,
+ strokeThickness: 5
+ });
+ tutorialText.anchor.set(0.5, 0.5);
+ tutorialText.x = 2048 / 2;
+ tutorialText.y = 2732 / 2;
+ LK.gui.addChild(tutorialText);
+ LK.setTimeout(function () {
+ tween(tutorialText, {
+ alpha: 0
+ }, {
+ duration: 1000,
+ easing: tween.easeOut,
+ onFinish: function onFinish() {
+ tutorialText.destroy();
+ }
+ });
+ }, 3000);
}
-// Event handler for tapping on game area
-game.down = function (x, y, obj) {
- // This is handled by the Problem class for specific problems
- // We could add global interaction here if needed
-};
-// Main game update function
+// Show tutorial at start
+showTutorial();
+// Game update function
game.update = function () {
- if (!gameActive) return;
- // Update score display
- scoreText.setText("SCORE: " + LK.getScore());
- // Spawn new problems based on interval
- var currentTime = Date.now();
- if (currentTime - lastSpawnTime > spawnInterval) {
+ if (!gameRunning) {
+ return;
+ }
+ // Check if it's time to spawn a new problem
+ if (LK.ticks * (1000 / 60) - lastProblemTime > problemSpawnTime) {
spawnProblem();
- lastSpawnTime = currentTime;
+ lastProblemTime = LK.ticks * (1000 / 60);
}
- // Update problems
- for (var i = problems.length - 1; i >= 0; i--) {
- if (!problems[i].parent) {
- // Problem was destroyed, remove from tracking array
- problems.splice(i, 1);
- }
+ // Update all problems
+ for (var i = 0; i < problems.length; i++) {
+ problems[i].update();
}
- // Gradually reduce stress
- reduceStress();
- // Check for level progression
+ // Check if player should level up
checkLevelProgress();
- // Update character based on stress
- character.update();
+ // Clean up any destroyed problems
+ cleanupProblems();
+ // Randomly reduce stress by a small amount (chance for slight recovery)
+ if (Math.random() < 0.001 && stressLevel > 0) {
+ stressLevel = Math.max(0, stressLevel - 1);
+ updateStressBar();
+ }
};
-// Start background music
-LK.playMusic('gameMusic');
\ No newline at end of file
+// Add shake effect to entire game when stress is high
+LK.setInterval(function () {
+ if (stressLevel >= 70 && gameRunning) {
+ var intensity = (stressLevel - 70) / 30; // 0 to 1 based on stress from 70-100
+ var shake = 10 * intensity;
+ tween(game, {
+ x: Math.random() * shake - shake / 2
+ }, {
+ duration: 50,
+ easing: tween.linear,
+ onFinish: function onFinish() {
+ tween(game, {
+ x: 0
+ }, {
+ duration: 50,
+ easing: tween.linear
+ });
+ }
+ });
+ }
+}, 1000);
+// Initial stress bar update
+updateStressBar();
+// Start the music
+LK.playMusic('bgmusic');
+// Add instructions button
+var instructionsButton = new Container();
+var instructionsButtonBg = new Graphics();
+instructionsButtonBg.beginFill(0x333333, 0.7);
+instructionsButtonBg.drawRoundedRect(0, 0, 60, 60, 10);
+instructionsButtonBg.endFill();
+instructionsButton.addChild(instructionsButtonBg);
+var questionText = new Text2("?", {
+ size: 40,
+ fill: 0xffffff
+});
+questionText.anchor.set(0.5, 0.5);
+questionText.x = 30;
+questionText.y = 30;
+instructionsButton.addChild(questionText);
+instructionsButton.x = 50;
+instructionsButton.y = 50;
+instructionsButton.interactive = true;
+LK.gui.addChild(instructionsButton);
+instructionsButton.down = function () {
+ // Show instructions popup
+ var popup = new Container();
+ // Darken background
+ var bg = new Graphics();
+ bg.beginFill(0x000000, 0.7);
+ bg.drawRect(0, 0, 2048, 2732);
+ bg.endFill();
+ popup.addChild(bg);
+ // Instructions panel
+ var panel = new Graphics();
+ panel.beginFill(0xffffff, 0.9);
+ panel.drawRoundedRect(0, 0, 1500, 1000, 20);
+ panel.endFill();
+ panel.x = (2048 - 1500) / 2;
+ panel.y = (2732 - 1000) / 2;
+ popup.addChild(panel);
+ // Title
+ var title = new Text2("HOW TO PLAY", {
+ size: 80,
+ fill: 0xff4d4d,
+ fontWeight: 'bold'
+ });
+ title.anchor.set(0.5, 0);
+ title.x = 2048 / 2;
+ title.y = panel.y + 50;
+ popup.addChild(title);
+ // Instructions
+ var instructions = new Text2("1. Tap on the falling problems before they hit the ground\n\n" + "2. Each problem that hits the ground increases your stress\n\n" + "3. Don't let your stress meter reach 100%\n\n" + "4. Score points by tapping problems\n\n" + "5. Level up every 10 points\n\n" + "6. Higher levels = faster problems\n\n" + "7. Just keep telling yourself, \"I'M FINE!\"", {
+ size: 50,
+ fill: 0x000000,
+ align: 'left',
+ lineHeight: 60
+ });
+ instructions.anchor.set(0, 0);
+ instructions.x = panel.x + 100;
+ instructions.y = panel.y + 150;
+ popup.addChild(instructions);
+ // Close button
+ var closeButton = new Container();
+ var closeBg = new Graphics();
+ closeBg.beginFill(0xff4d4d);
+ closeBg.drawRoundedRect(0, 0, 300, 100, 20);
+ closeBg.endFill();
+ closeButton.addChild(closeBg);
+ var closeText = new Text2("CLOSE", {
+ size: 50,
+ fill: 0xffffff
+ });
+ closeText.anchor.set(0.5, 0.5);
+ closeText.x = 150;
+ closeText.y = 50;
+ closeButton.addChild(closeText);
+ closeButton.x = panel.x + (panel.width - 300) / 2;
+ closeButton.y = panel.y + panel.height - 150;
+ closeButton.interactive = true;
+ popup.addChild(closeButton);
+ closeButton.down = function () {
+ popup.destroy();
+ };
+ LK.gui.addChild(popup);
+};
\ No newline at end of file
Modern office/workspace with subtle chaotic elements Include desk with scattered papers, coffee stains, overflowing inbox, sticky notes Light, neutral color palette (pale blue/gray) with professional appearance Should look slightly overwhelming but clean enough to not distract from gameplay. In-Game asset. 2d. High contrast. No shadows
Fullscreen modern App Store landscape banner, 16:9, high definition, for a game titled "FOMO Simulator: The Meeting That Could've Been An Email" and with the description "A fast-paced office simulator where you collect meetings, emails, and notifications while managing your energy levels. Strategic decisions must be made about which workplace items to prioritize as your energy depletes. Grab coffee for boosts, avoid missing important meetings, and survive the chaotic 60-second workday!". No text on banner!. In-Game asset. 2d. High contrast. No shadows
Modern App Store icon, high definition, square with rounded corners, for a game titled "FOMO Simulator: The Meeting That Could've Been An Email" and with the description "A fast-paced office simulator where you collect meetings, emails, and notifications while managing your energy levels. Strategic decisions must be made about which workplace items to prioritize as your energy depletes. Grab coffee for boosts, avoid missing important meetings, and survive the chaotic 60-second workday!". No text on icon!. In-Game asset. 2d. High contrast. No shadows