Code edit (1 edits merged)
Please save this source code
User prompt
The Walrus's Belly
Initial prompt
The Walrus's Belly Characters: TUSKARR: A massive, blubbery walrus. NEMO: A perky corgi. MACCHIATO: A sleek, somewhat disdainful cat. CARROT: A perpetually optimistic bunny. PANEL 1 Setting: A surprisingly large bed, looking a bit stressed under the weight. Visual: TUSKARR, a truly enormous walrus, is asleep on the bed. His large, blubbery belly is prominently featured, with a noticeable, slightly lumpy bulge in the middle. Zzz's emanate from his open snout. A half-eaten fish lies discarded nearby. Caption: Later that night, after a very satisfying snack... PANEL 2 Setting: Close-up on TUSKARR's belly. Visual: The bulge on TUSKARR's belly now has distinct, albeit muffled, shapes pushing against it from within. A small, muffled THUMP can be seen. TUSKARR remains sound asleep, perhaps a snore bubble near his nose. Sound Effect: GURGLE... RUMBLE... Speech Bubble (Muffled, from inside Tuskarr): NEMO: (Small, muffled) Ugh... where in the... PANEL 3 Setting: Still inside TUSKARR's belly, implied by the dark, fleshy textures around the animals. Visual: NEMO, MACCHIATO, and CARROT are huddled together in a very confined, dark, and squishy space. They look disoriented and a bit grossed out. Speech Bubble: MACCHIATO: (Annoyed) This is not ergonomic. And what is that smell?! CARROT: (Confused) Is this... a new kind of burrow? It’s very warm! And a bit... squishy. NEMO: (Realizing) Squishy? Guys... I think... I think we're inside something. Something very, very big. PANEL 4 Setting: External view of TUSKARR on the bed. Visual: TUSKARR's belly is now noticeably churning and shifting. The lumps are more pronounced. TUSKARR lets out a loud, contented snore, completely oblivious. A little drool escapes his mouth. Sound Effect: GROOOOAN (from Tuskarr), SQUELCH (from inside) Speech Bubble (Muffled, from inside Tuskarr): NEMO: (Panicked) He ate us! The walrus! He ate us all! MACCHIATO: (Disgusted) I need a bath! Immediately! And a lint roller! CARROT: (Optimistic) Oh! So that's where my carrots went! Are we going to be part of a grand digestive adventure? PANEL 5 Setting: Inside TUSKARR's belly again. Visual: The space is becoming even darker and more viscous. The outlines of the animals are starting to blur slightly, as if their fur/skin is beginning to dissolve. CARROT still has a wide-eyed, naive look, while NEMO and MACCHIATO look increasingly distressed. Sound Effect: SLURP GULP FIZZZ Speech Bubble: NEMO: (Fading, panicked) It's getting... hot! And... bubbly! MACCHIATO: (Fading, horrified) My beautiful fur! It's... it's disappearing! CARROT: (Still cheerful, but fading) Oh! So this is the "digestion" part! Fascinating! Are we becoming... nutrients? PANEL 6 Setting: TUSKARR on the bed. Visual: TUSKARR is still sound asleep, but his belly is now perfectly smooth again. No more lumps. Just a vast expanse of contented blubber. A small, almost imperceptible "burp" cloud drifts from his mouth. Sound Effect: * contented SNORE... * ...BLURP. Speech Bubble (from Tuskarr, sleepy): TUSKARR: Mmmphh... best... snack... ever... (Trails off into a deeper snore) Caption: By morning, the walrus was well-rested... and incredibly full. With Video And Keyboard And Without Game
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Animal = Container.expand(function (type) { var self = Container.call(this); self.type = type; self.speed = 3; self.isSelected = false; var graphics = self.attachAsset(type, { anchorX: 0.5, anchorY: 0.5 }); self.setSelected = function (selected) { self.isSelected = selected; if (selected) { graphics.tint = 0xFFFFFF; graphics.alpha = 1.0; } else { graphics.tint = 0x888888; graphics.alpha = 0.7; } }; self.getAbility = function () { switch (self.type) { case 'nemo': return 'jump'; case 'macchiato': return 'squeeze'; case 'carrot': return 'dig'; default: return 'none'; } }; return self; }); var Passage = Container.expand(function () { var self = Container.call(this); self.isOpen = false; self.requiredAbility = 'none'; var graphics = self.attachAsset('passage', { anchorX: 0.5, anchorY: 0.5 }); self.setRequirement = function (ability) { self.requiredAbility = ability; switch (ability) { case 'jump': graphics.tint = 0xD2691E; // Nemo's color break; case 'squeeze': graphics.tint = 0x8B4513; // Macchiato's color break; case 'dig': graphics.tint = 0xFFFFFF; // Carrot's color break; } }; self.open = function () { if (!self.isOpen) { self.isOpen = true; graphics.alpha = 0.3; } }; return self; }); var Switch = Container.expand(function () { var self = Container.call(this); self.activated = false; var graphics = self.attachAsset('switch', { anchorX: 0.5, anchorY: 0.5 }); self.activate = function () { if (!self.activated) { self.activated = true; graphics.tint = 0x00FF00; LK.getSound('switch_activate').play(); return true; } return false; }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x2F4F4F }); /**** * Game Code ****/ // Game state var gameTime = 0; var acidLevel = 2732 - 150; var acidRiseSpeed = 0.5; var currentAnimal = 0; var switchesActivated = 0; var totalSwitches = 3; var gameWon = false; // Create animals var animals = []; var nemo = new Animal('nemo'); var macchiato = new Animal('macchiato'); var carrot = new Animal('carrot'); animals.push(nemo, macchiato, carrot); // Position animals nemo.x = 200; nemo.y = 2200; macchiato.x = 300; macchiato.y = 2200; carrot.x = 400; carrot.y = 2200; // Add animals to game game.addChild(nemo); game.addChild(macchiato); game.addChild(carrot); // Set initial selection animals[currentAnimal].setSelected(true); // Create acid var acid = game.addChild(LK.getAsset('acid', { anchorX: 0, anchorY: 0, x: 0, y: acidLevel })); // Create walls and obstacles var walls = []; for (var i = 0; i < 8; i++) { var wall = new Container(); wall.addChild(LK.getAsset('wall', { anchorX: 0.5, anchorY: 0.5 })); wall.x = Math.random() * 1800 + 200; wall.y = Math.random() * 1800 + 400; walls.push(wall); game.addChild(wall); } // Create switches var switches = []; for (var i = 0; i < totalSwitches; i++) { var switchObj = new Switch(); switchObj.x = 300 + i * 600; switchObj.y = 1000 + Math.random() * 800; switches.push(switchObj); game.addChild(switchObj); } // Create passages var passages = []; var abilities = ['jump', 'squeeze', 'dig']; for (var i = 0; i < 3; i++) { var passage = new Passage(); passage.setRequirement(abilities[i]); passage.x = 500 + i * 500; passage.y = 800; passages.push(passage); game.addChild(passage); } // Create exit var exit = game.addChild(LK.getAsset('exit', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 200 })); // UI var timeText = new Text2('Time: 0', { size: 60, fill: 0xFFFFFF }); timeText.anchor.set(0, 0); LK.gui.topRight.addChild(timeText); var instructionText = new Text2('Tap to switch animals', { size: 40, fill: 0xFFFF00 }); instructionText.anchor.set(0.5, 0); LK.gui.top.addChild(instructionText); var animalText = new Text2('Nemo (Jump)', { size: 50, fill: 0xFFFFFF }); animalText.anchor.set(0, 0); LK.gui.topLeft.addChild(animalText); animalText.x = 120; // Avoid platform menu // Touch controls var dragAnimal = null; game.down = function (x, y, obj) { // Check if touching current animal var currentAnimalObj = animals[currentAnimal]; var globalPos = currentAnimalObj.toGlobal({ x: 0, y: 0 }); var distance = Math.sqrt(Math.pow(x - globalPos.x, 2) + Math.pow(y - globalPos.y, 2)); if (distance < 100) { dragAnimal = currentAnimalObj; } else { // Switch animal animals[currentAnimal].setSelected(false); currentAnimal = (currentAnimal + 1) % 3; animals[currentAnimal].setSelected(true); // Update UI var animalNames = ['Nemo (Jump)', 'Macchiato (Squeeze)', 'Carrot (Dig)']; animalText.setText(animalNames[currentAnimal]); } }; game.move = function (x, y, obj) { if (dragAnimal) { var newX = Math.max(50, Math.min(1998, x)); var newY = Math.max(50, Math.min(acidLevel - 50, y)); dragAnimal.x = newX; dragAnimal.y = newY; } }; game.up = function (x, y, obj) { if (dragAnimal) { // Check interactions checkSwitchInteraction(dragAnimal); checkPassageInteraction(dragAnimal); checkExitInteraction(dragAnimal); dragAnimal = null; } }; // Interaction functions function checkSwitchInteraction(animal) { for (var i = 0; i < switches.length; i++) { var switchObj = switches[i]; if (!switchObj.activated && animal.intersects(switchObj)) { if (switchObj.activate()) { switchesActivated++; // Open corresponding passage if (passages[i]) { passages[i].open(); } if (switchesActivated >= totalSwitches) { instructionText.setText('All switches activated! Reach the exit!'); } } } } } function checkPassageInteraction(animal) { for (var i = 0; i < passages.length; i++) { var passage = passages[i]; if (animal.intersects(passage)) { if (passage.requiredAbility === animal.getAbility() && !passage.isOpen) { passage.open(); instructionText.setText('Passage opened by ' + animal.type + '!'); } } } } function checkExitInteraction(animal) { if (animal.intersects(exit) && switchesActivated >= totalSwitches) { // Check if all animals are near exit var allNearExit = true; for (var i = 0; i < animals.length; i++) { var dist = Math.sqrt(Math.pow(animals[i].x - exit.x, 2) + Math.pow(animals[i].y - exit.y, 2)); if (dist > 200) { allNearExit = false; break; } } if (allNearExit && !gameWon) { gameWon = true; LK.getSound('escape_success').play(); LK.showYouWin(); } else if (!allNearExit) { instructionText.setText('Get all animals to the exit!'); } } } // Main update loop game.update = function () { gameTime++; if (gameWon) return; // Update time display var seconds = Math.floor(gameTime / 60); timeText.setText('Time: ' + seconds + 's'); // Raise acid level acidLevel -= acidRiseSpeed; acid.y = acidLevel; // Check if any animal touches acid for (var i = 0; i < animals.length; i++) { if (animals[i].y + 40 > acidLevel) { LK.getSound('acid_warning').play(); LK.effects.flashScreen(0x32CD32, 500); LK.showGameOver(); return; } } // Increase difficulty over time if (gameTime % 600 === 0) { // Every 10 seconds acidRiseSpeed += 0.1; } // Warning when acid gets close if (acidLevel < 2000 && gameTime % 120 === 0) { LK.effects.flashObject(acid, 0xFF0000, 300); } };
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Animal = Container.expand(function (type) {
var self = Container.call(this);
self.type = type;
self.speed = 3;
self.isSelected = false;
var graphics = self.attachAsset(type, {
anchorX: 0.5,
anchorY: 0.5
});
self.setSelected = function (selected) {
self.isSelected = selected;
if (selected) {
graphics.tint = 0xFFFFFF;
graphics.alpha = 1.0;
} else {
graphics.tint = 0x888888;
graphics.alpha = 0.7;
}
};
self.getAbility = function () {
switch (self.type) {
case 'nemo':
return 'jump';
case 'macchiato':
return 'squeeze';
case 'carrot':
return 'dig';
default:
return 'none';
}
};
return self;
});
var Passage = Container.expand(function () {
var self = Container.call(this);
self.isOpen = false;
self.requiredAbility = 'none';
var graphics = self.attachAsset('passage', {
anchorX: 0.5,
anchorY: 0.5
});
self.setRequirement = function (ability) {
self.requiredAbility = ability;
switch (ability) {
case 'jump':
graphics.tint = 0xD2691E; // Nemo's color
break;
case 'squeeze':
graphics.tint = 0x8B4513; // Macchiato's color
break;
case 'dig':
graphics.tint = 0xFFFFFF; // Carrot's color
break;
}
};
self.open = function () {
if (!self.isOpen) {
self.isOpen = true;
graphics.alpha = 0.3;
}
};
return self;
});
var Switch = Container.expand(function () {
var self = Container.call(this);
self.activated = false;
var graphics = self.attachAsset('switch', {
anchorX: 0.5,
anchorY: 0.5
});
self.activate = function () {
if (!self.activated) {
self.activated = true;
graphics.tint = 0x00FF00;
LK.getSound('switch_activate').play();
return true;
}
return false;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2F4F4F
});
/****
* Game Code
****/
// Game state
var gameTime = 0;
var acidLevel = 2732 - 150;
var acidRiseSpeed = 0.5;
var currentAnimal = 0;
var switchesActivated = 0;
var totalSwitches = 3;
var gameWon = false;
// Create animals
var animals = [];
var nemo = new Animal('nemo');
var macchiato = new Animal('macchiato');
var carrot = new Animal('carrot');
animals.push(nemo, macchiato, carrot);
// Position animals
nemo.x = 200;
nemo.y = 2200;
macchiato.x = 300;
macchiato.y = 2200;
carrot.x = 400;
carrot.y = 2200;
// Add animals to game
game.addChild(nemo);
game.addChild(macchiato);
game.addChild(carrot);
// Set initial selection
animals[currentAnimal].setSelected(true);
// Create acid
var acid = game.addChild(LK.getAsset('acid', {
anchorX: 0,
anchorY: 0,
x: 0,
y: acidLevel
}));
// Create walls and obstacles
var walls = [];
for (var i = 0; i < 8; i++) {
var wall = new Container();
wall.addChild(LK.getAsset('wall', {
anchorX: 0.5,
anchorY: 0.5
}));
wall.x = Math.random() * 1800 + 200;
wall.y = Math.random() * 1800 + 400;
walls.push(wall);
game.addChild(wall);
}
// Create switches
var switches = [];
for (var i = 0; i < totalSwitches; i++) {
var switchObj = new Switch();
switchObj.x = 300 + i * 600;
switchObj.y = 1000 + Math.random() * 800;
switches.push(switchObj);
game.addChild(switchObj);
}
// Create passages
var passages = [];
var abilities = ['jump', 'squeeze', 'dig'];
for (var i = 0; i < 3; i++) {
var passage = new Passage();
passage.setRequirement(abilities[i]);
passage.x = 500 + i * 500;
passage.y = 800;
passages.push(passage);
game.addChild(passage);
}
// Create exit
var exit = game.addChild(LK.getAsset('exit', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
y: 200
}));
// UI
var timeText = new Text2('Time: 0', {
size: 60,
fill: 0xFFFFFF
});
timeText.anchor.set(0, 0);
LK.gui.topRight.addChild(timeText);
var instructionText = new Text2('Tap to switch animals', {
size: 40,
fill: 0xFFFF00
});
instructionText.anchor.set(0.5, 0);
LK.gui.top.addChild(instructionText);
var animalText = new Text2('Nemo (Jump)', {
size: 50,
fill: 0xFFFFFF
});
animalText.anchor.set(0, 0);
LK.gui.topLeft.addChild(animalText);
animalText.x = 120; // Avoid platform menu
// Touch controls
var dragAnimal = null;
game.down = function (x, y, obj) {
// Check if touching current animal
var currentAnimalObj = animals[currentAnimal];
var globalPos = currentAnimalObj.toGlobal({
x: 0,
y: 0
});
var distance = Math.sqrt(Math.pow(x - globalPos.x, 2) + Math.pow(y - globalPos.y, 2));
if (distance < 100) {
dragAnimal = currentAnimalObj;
} else {
// Switch animal
animals[currentAnimal].setSelected(false);
currentAnimal = (currentAnimal + 1) % 3;
animals[currentAnimal].setSelected(true);
// Update UI
var animalNames = ['Nemo (Jump)', 'Macchiato (Squeeze)', 'Carrot (Dig)'];
animalText.setText(animalNames[currentAnimal]);
}
};
game.move = function (x, y, obj) {
if (dragAnimal) {
var newX = Math.max(50, Math.min(1998, x));
var newY = Math.max(50, Math.min(acidLevel - 50, y));
dragAnimal.x = newX;
dragAnimal.y = newY;
}
};
game.up = function (x, y, obj) {
if (dragAnimal) {
// Check interactions
checkSwitchInteraction(dragAnimal);
checkPassageInteraction(dragAnimal);
checkExitInteraction(dragAnimal);
dragAnimal = null;
}
};
// Interaction functions
function checkSwitchInteraction(animal) {
for (var i = 0; i < switches.length; i++) {
var switchObj = switches[i];
if (!switchObj.activated && animal.intersects(switchObj)) {
if (switchObj.activate()) {
switchesActivated++;
// Open corresponding passage
if (passages[i]) {
passages[i].open();
}
if (switchesActivated >= totalSwitches) {
instructionText.setText('All switches activated! Reach the exit!');
}
}
}
}
}
function checkPassageInteraction(animal) {
for (var i = 0; i < passages.length; i++) {
var passage = passages[i];
if (animal.intersects(passage)) {
if (passage.requiredAbility === animal.getAbility() && !passage.isOpen) {
passage.open();
instructionText.setText('Passage opened by ' + animal.type + '!');
}
}
}
}
function checkExitInteraction(animal) {
if (animal.intersects(exit) && switchesActivated >= totalSwitches) {
// Check if all animals are near exit
var allNearExit = true;
for (var i = 0; i < animals.length; i++) {
var dist = Math.sqrt(Math.pow(animals[i].x - exit.x, 2) + Math.pow(animals[i].y - exit.y, 2));
if (dist > 200) {
allNearExit = false;
break;
}
}
if (allNearExit && !gameWon) {
gameWon = true;
LK.getSound('escape_success').play();
LK.showYouWin();
} else if (!allNearExit) {
instructionText.setText('Get all animals to the exit!');
}
}
}
// Main update loop
game.update = function () {
gameTime++;
if (gameWon) return;
// Update time display
var seconds = Math.floor(gameTime / 60);
timeText.setText('Time: ' + seconds + 's');
// Raise acid level
acidLevel -= acidRiseSpeed;
acid.y = acidLevel;
// Check if any animal touches acid
for (var i = 0; i < animals.length; i++) {
if (animals[i].y + 40 > acidLevel) {
LK.getSound('acid_warning').play();
LK.effects.flashScreen(0x32CD32, 500);
LK.showGameOver();
return;
}
}
// Increase difficulty over time
if (gameTime % 600 === 0) {
// Every 10 seconds
acidRiseSpeed += 0.1;
}
// Warning when acid gets close
if (acidLevel < 2000 && gameTime % 120 === 0) {
LK.effects.flashObject(acid, 0xFF0000, 300);
}
};