User prompt
Make it a little bit more right
User prompt
Make it a little bit right
User prompt
Move the cycle counter UP
User prompt
Move the cycle counter where that text was
User prompt
Remove the text that says drag organisims
User prompt
Make it so that the cycle counter will not start until the first organism is placed
User prompt
Put it WAY more to the left
User prompt
Make it so that on the bottom of the screen is a cycle counter that a cycle happens every 50 seconds
User prompt
Remove bugs
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'obj = new Flower();' Line Number: 241
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'obj = new Plant();' Line Number: 238
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'obj = new Plant();' Line Number: 265
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'obj = new Nummer();' Line Number: 260
User prompt
Please fix the bug: 'Script error.' in or related to this line: 'obj = new Flower();' Line Number: 241
User prompt
Make a new organism called a flower
User prompt
Make it so that a boarder surrounds the screen preventing any creatures from exiting
User prompt
Make it so herbivores can walk over fungi as if it is not there
User prompt
Rename fungi into shroom in ui
User prompt
Rename carnivore in the UI into hunter
User prompt
Rename the plant in the UI into fern
User prompt
Rename it in the UI into Nummer
User prompt
Rename the herbivore into Nummer
User prompt
Make it so fungi shoots spores at herbivores in a straight line
User prompt
Make it so after 1 min the pollinator dies
User prompt
Make it so spores dont follow herbivores and instead take a straight path
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
// --- End of Game Code ---;
// --- Flower Class ---
var Flower = Container.expand(function () {
var self = Container.call(this);
// Attach flower image asset, centered
var flowerSprite = self.attachAsset('flower', {
anchorX: 0.5,
anchorY: 0.5
});
// Optionally, add any properties or methods for Flower here
return self;
});
// --- Nummer (Herbivore) Class ---
var Nummer = Container.expand(function () {
var self = Container.call(this);
// Attach herbivore image asset, centered
var sprite = self.attachAsset('herbivore', {
anchorX: 0.5,
anchorY: 0.5
});
// Optionally, add any properties or methods for Nummer here
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x2ecc40 //{7C} // Set to a green background
});
/****
* Game Code
****/
// new carnivore egg texture
// --- Asset Initialization ---
// --- Global arrays for organisms ---
var plants = [];
var herbivores = [];
var carnivores = [];
var seeds = [];
var eggs = []; // Track all eggs globally
var pollinators = [];
var fungis = []; // Track all fungi globally
var fungiSpores = []; // Track all spores shot by fungi
// --- Palette UI ---
var paletteY = 180; // y position for palette
var paletteSpacing = 260;
var paletteItems = [];
// Shift the palette even further left so it is not offscreen
var paletteTotalWidth = paletteSpacing * 2;
var paletteXStart = 2048 / 2 - paletteTotalWidth / 2 - 1300;
// Create palette items for drag-and-drop
function createPaletteItem(type, x, y) {
var assetId, color, label;
if (type === 'plant') {
assetId = 'plant';
color = 0x6adf60;
label = 'Fern';
} else if (type === 'flower') {
assetId = 'flower';
color = 0xff69b4;
label = 'Flower';
} else if (type === 'herbivore') {
assetId = 'herbivore';
color = 0xf7e26b;
label = 'Nummer';
} else if (type === 'pollinator') {
assetId = 'pollinator';
color = 0xffc300;
label = 'Pollinator';
} else if (type === 'fungi') {
assetId = 'fungi';
color = 0xbb88ff;
label = 'Shroom';
} else {
assetId = 'carnivore';
color = 0xe74c3c;
label = 'Hunter';
}
;
// Update all eggs
for (var i = eggs.length - 1; i >= 0; i--) {
var e = eggs[i];
if (!e.parent || e.hatched) {
eggs.splice(i, 1);
continue;
}
if (e.update) e.update();
}
;
// Update all pollinators
for (var i = pollinators.length - 1; i >= 0; i--) {
var p = pollinators[i];
if (p.eaten) {
pollinators.splice(i, 1);
continue;
}
if (p.update) p.update();
}
var node = new Container();
var icon = node.attachAsset(assetId, {
anchorX: 0.5,
anchorY: 0.5
});
node.x = x;
node.y = y;
node.type = type;
// Add label
var txt = new Text2(label, {
size: 60,
fill: "#fff"
});
txt.anchor.set(0.5, 0);
txt.y = 60;
node.addChild(txt);
// Add to GUI overlay (so it stays on top)
LK.gui.top.addChild(node);
paletteItems.push(node);
return node;
}
// --- Palette Scroll Bar ---
// All available organism types in palette
var paletteTypes = ['plant', 'flower', 'herbivore', 'carnivore', 'pollinator', 'fungi'];
var paletteScrollOffset = 0; // How much the palette is scrolled (in px)
var paletteScrollMin = 0;
var paletteScrollMax = Math.max(0, paletteTypes.length * paletteSpacing - paletteSpacing * 3); // Show 3 at a time
// Remove old palette items if any
for (var i = 0; i < paletteItems.length; i++) {
if (paletteItems[i].parent) paletteItems[i].parent.removeChild(paletteItems[i]);
}
paletteItems = [];
// Helper to render palette items based on scroll offset
function renderPaletteItems() {
// Remove all current palette items from GUI
for (var i = 0; i < paletteItems.length; i++) {
if (paletteItems[i].parent) paletteItems[i].parent.removeChild(paletteItems[i]);
}
paletteItems = [];
// Only show up to 3 at a time, centered
var visibleCount = 3;
var startIdx = Math.floor(paletteScrollOffset / paletteSpacing);
var offsetPx = paletteScrollOffset % paletteSpacing;
for (var i = 0; i < visibleCount; i++) {
var idx = startIdx + i;
if (idx >= 0 && idx < paletteTypes.length) {
var px = paletteXStart + i * paletteSpacing - offsetPx;
var node = createPaletteItem(paletteTypes[idx], px, paletteY);
paletteItems.push(node);
}
}
// Draw left/right scroll buttons
if (!window.paletteLeftBtn) {
window.paletteLeftBtn = new Container();
var leftIcon = window.paletteLeftBtn.attachAsset('box', {
anchorX: 0.5,
anchorY: 0.5,
width: 80,
height: 120,
color: 0x444444,
shape: 'box'
});
var leftArrow = new Text2("<", {
size: 80,
fill: "#fff"
});
leftArrow.anchor.set(0.5, 0.5);
leftArrow.x = 0;
leftArrow.y = 0;
window.paletteLeftBtn.addChild(leftArrow);
window.paletteLeftBtn.x = paletteXStart - 120;
window.paletteLeftBtn.y = paletteY;
window.paletteLeftBtn.interactive = true;
LK.gui.top.addChild(window.paletteLeftBtn);
window.paletteLeftBtn.visible = false;
}
if (!window.paletteRightBtn) {
window.paletteRightBtn = new Container();
var rightIcon = window.paletteRightBtn.attachAsset('box', {
anchorX: 0.5,
anchorY: 0.5,
width: 80,
height: 120,
color: 0x444444,
shape: 'box'
});
var rightArrow = new Text2(">", {
size: 80,
fill: "#fff"
});
rightArrow.anchor.set(0.5, 0.5);
rightArrow.x = 0;
rightArrow.y = 0;
window.paletteRightBtn.addChild(rightArrow);
window.paletteRightBtn.x = paletteXStart + paletteSpacing * visibleCount + 40;
window.paletteRightBtn.y = paletteY;
window.paletteRightBtn.interactive = true;
LK.gui.top.addChild(window.paletteRightBtn);
window.paletteRightBtn.visible = false;
}
// Show/hide buttons
window.paletteLeftBtn.visible = paletteScrollOffset > paletteScrollMin;
window.paletteRightBtn.visible = paletteScrollOffset < paletteScrollMax;
}
renderPaletteItems();
// --- Palette Scroll Button Handlers ---
window.paletteLeftBtn.down = function () {
if (paletteScrollOffset > paletteScrollMin) {
paletteScrollOffset -= paletteSpacing;
if (paletteScrollOffset < paletteScrollMin) paletteScrollOffset = paletteScrollMin;
renderPaletteItems();
}
};
window.paletteRightBtn.down = function () {
if (paletteScrollOffset < paletteScrollMax) {
paletteScrollOffset += paletteSpacing;
if (paletteScrollOffset > paletteScrollMax) paletteScrollOffset = paletteScrollMax;
renderPaletteItems();
}
};
// --- End Palette Scroll Bar ---
// --- Drag and Drop Logic ---
var dragging = null; // {type, node, paletteRef}
var dragOffsetX = 0,
dragOffsetY = 0;
// Helper: create organism at x,y
function createOrganism(type, x, y) {
var obj;
if (type === 'plant') {
obj = new Plant();
plants.push(obj);
} else if (type === 'flower') {
obj = new Flower();
game.addChild(obj);
} else if (type === 'herbivore') {
obj = new Nummer();
herbivores.push(obj);
} else if (type === 'pollinator') {
obj = new Pollinator();
pollinators.push(obj);
} else if (type === 'fungi') {
obj = new Fungi();
fungis.push(obj);
} else {
obj = new Carnivore();
carnivores.push(obj);
}
obj.x = x;
obj.y = y;
obj.scaleX = 1;
obj.scaleY = 1;
obj.alpha = 1;
game.addChild(obj);
return obj;
}
// Helper: check if point is inside a palette item
function isInPalette(x, y, node) {
var bounds = {
x: node.x - 60,
y: node.y - 60,
w: 120,
h: 120
};
return x >= bounds.x && x <= bounds.x + bounds.w && y >= bounds.y && y <= bounds.y + bounds.h;
}
// --- Event Handlers ---
// Down: start drag if on palette
game.down = function (x, y, obj) {
// Check if touch/click is on a palette item
for (var i = 0; i < paletteItems.length; i++) {
var p = paletteItems[i];
// Convert GUI coordinates to game coordinates
var guiPos = LK.gui.top.toLocal({
x: x,
y: y
}, game);
if (isInPalette(guiPos.x, guiPos.y, p)) {
// Start dragging a new organism
dragging = {
type: p.type,
node: createOrganism(p.type, x, y),
paletteRef: p
};
dragOffsetX = 0;
dragOffsetY = 0;
// Make it semi-transparent while dragging
dragging.node.alpha = 0.7;
return;
}
}
// If not on palette, check if on an organism to move it
// Check if touch/click is on an organism to move it
var found = false;
var allOrganisms = plants.concat(herbivores, carnivores, pollinators, fungis);
for (var i = allOrganisms.length - 1; i >= 0; i--) {
var org = allOrganisms[i];
// Only allow moving if not eaten and touch is within 60px radius of center
var dx = x - org.x;
var dy = y - org.y;
var dist = Math.sqrt(dx * dx + dy * dy);
// Fungi do not have .eaten, so check for undefined or false
var isFungi = fungis.indexOf(org) !== -1;
var canDrag = !isFungi && !org.eaten || isFungi;
if (canDrag && dist < 60) {
var type;
if (plants.indexOf(org) !== -1) type = 'plant';else if (herbivores.indexOf(org) !== -1) type = 'herbivore';else if (carnivores.indexOf(org) !== -1) type = 'carnivore';else if (pollinators.indexOf(org) !== -1) type = 'pollinator';else if (fungis.indexOf(org) !== -1) type = 'fungi';
// (UI label is handled in createPaletteItem, so no change needed here for type)
dragging = {
type: type,
node: org,
paletteRef: null
};
dragOffsetX = org.x - x;
dragOffsetY = org.y - y;
org.alpha = 0.7;
found = true;
break;
}
}
if (!found) {
dragging = null;
}
};
// Move: update drag position
game.move = function (x, y, obj) {
if (dragging && dragging.node) {
var minX = 124 + 60;
var maxX = 124 + 1800 - 60;
var minY = paletteY + 320 + 60;
var maxY = paletteY + 320 + 2000 - 60;
var newX = x + dragOffsetX;
var newY = y + dragOffsetY;
// Clamp to map area
if (newX < minX) newX = minX;
if (newX > maxX) newX = maxX;
if (newY < minY) newY = minY;
if (newY > maxY) newY = maxY;
dragging.node.x = newX;
dragging.node.y = newY;
}
};
// Up: drop organism if dragging
game.up = function (x, y, obj) {
if (dragging && dragging.node) {
// If dropped inside palette area, destroy (cancel)
var guiPos = LK.gui.top.toLocal({
x: x,
y: y
}, game);
var cancel = false;
for (var i = 0; i < paletteItems.length; i++) {
if (isInPalette(guiPos.x, guiPos.y, paletteItems[i])) {
cancel = true;
break;
}
}
if (cancel) {
// Remove organism
dragging.node.destroy();
if (dragging.type === 'plant') plants.pop();else if (dragging.type === 'herbivore') herbivores.pop();else if (dragging.type === 'carnivore') carnivores.pop();else if (dragging.type === 'pollinator') pollinators.pop();
} else {
// Place organism: snap alpha to 1
dragging.node.alpha = 1;
}
dragging = null;
}
};
// --- Main Update Loop ---
game.update = function () {
// Update all herbivores
for (var i = herbivores.length - 1; i >= 0; i--) {
var h = herbivores[i];
if (h.eaten) {
herbivores.splice(i, 1);
continue;
}
if (h.update) h.update();
}
// Update all carnivores
for (var i = carnivores.length - 1; i >= 0; i--) {
var c = carnivores[i];
if (c.eaten) {
carnivores.splice(i, 1);
continue;
}
if (c.update) c.update();
}
// Clean up dead plants
for (var i = plants.length - 1; i >= 0; i--) {
var p = plants[i];
if (p.eaten) {
plants.splice(i, 1);
}
}
// Update all seeds
for (var i = seeds.length - 1; i >= 0; i--) {
var s = seeds[i];
if (s.eaten) {
seeds.splice(i, 1);
continue;
}
if (s.update) s.update();
}
;
// Update all fungi
for (var i = fungis.length - 1; i >= 0; i--) {
var f = fungis[i];
if (f.update) f.update();
}
// Update all fungi spores
for (var i = fungiSpores.length - 1; i >= 0; i--) {
var s = fungiSpores[i];
if (!s.parent || !s._alive) {
fungiSpores.splice(i, 1);
continue;
}
if (s.update) s.update();
}
};
// --- Instructions Text ---
var infoTxt = new Text2("Drag organisms from the palette to the map below.\nNummer eat ferns. Hunters eat Nummer.", {
size: 60,
fill: 0xFFFFFF
});
// (No explicit mention of fungi in instructions, so no text change needed here)
infoTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(infoTxt);
infoTxt.x = 2048 / 2;
infoTxt.y = paletteY + 160;
// --- Random seed spawning around the map if there are any plants ---
var randomSeedSpawnTimer = null;
function startRandomSeedSpawning() {
if (randomSeedSpawnTimer !== null) return;
randomSeedSpawnTimer = LK.setInterval(function () {
// Only spawn if there are any plants
if (plants.length > 0) {
// 40% chance per interval to spawn a seed
if (Math.random() < 0.4) {
// Pick a random position inside the map area
var minX = 124 + 60;
var maxX = 124 + 1800 - 60;
var minY = paletteY + 320 + 60;
var maxY = paletteY + 320 + 2000 - 60;
var sx = minX + Math.random() * (maxX - minX);
var sy = minY + Math.random() * (maxY - minY);
var seed = new Seed();
seed.x = sx;
seed.y = sy;
seed.scaleX = 0.4;
seed.scaleY = 0.4;
seed.alpha = 1;
seeds.push(seed);
game.addChild(seed);
}
}
// If no plants, stop spawning
if (plants.length === 0 && randomSeedSpawnTimer !== null) {
LK.clearInterval(randomSeedSpawnTimer);
randomSeedSpawnTimer = null;
}
}, 120); // Try every 2 seconds
}
// Start random seed spawning at game start
startRandomSeedSpawning();
// --- Map Area Border (for visual feedback) ---
// Use a simple colored rectangle instead of a plant asset for the map border background
var mapBorder = LK.getAsset('box', {
anchorX: 0,
anchorY: 0,
width: 1800,
height: 2000,
color: 0x2e8b57,
shape: 'box'
});
mapBorder.alpha = 0.12;
game.addChild(mapBorder);
mapBorder.x = 124;
mapBorder.y = paletteY + 320;
// --- Add invisible border walls to prevent creatures from exiting the map area ---
var borderThickness = 40;
var borderAlpha = 0; // fully invisible
// Left border
var borderLeft = LK.getAsset('box', {
anchorX: 0,
anchorY: 0,
width: borderThickness,
height: 2000,
color: 0x000000,
shape: 'box'
});
borderLeft.alpha = borderAlpha;
game.addChild(borderLeft);
borderLeft.x = 124 - borderThickness;
borderLeft.y = paletteY + 320;
// Right border
var borderRight = LK.getAsset('box', {
anchorX: 0,
anchorY: 0,
width: borderThickness,
height: 2000,
color: 0x000000,
shape: 'box'
});
borderRight.alpha = borderAlpha;
game.addChild(borderRight);
borderRight.x = 124 + 1800;
borderRight.y = paletteY + 320;
// Top border
var borderTop = LK.getAsset('box', {
anchorX: 0,
anchorY: 0,
width: 1800 + borderThickness * 2,
height: borderThickness,
color: 0x000000,
shape: 'box'
});
borderTop.alpha = borderAlpha;
game.addChild(borderTop);
borderTop.x = 124 - borderThickness;
borderTop.y = paletteY + 320 - borderThickness;
// Bottom border
var borderBottom = LK.getAsset('box', {
anchorX: 0,
anchorY: 0,
width: 1800 + borderThickness * 2,
height: borderThickness,
color: 0x000000,
shape: 'box'
});
borderBottom.alpha = borderAlpha;
game.addChild(borderBottom);
borderBottom.x = 124 - borderThickness;
borderBottom.y = paletteY + 320 + 2000; ===================================================================
--- original.js
+++ change.js
@@ -17,8 +17,19 @@
});
// Optionally, add any properties or methods for Flower here
return self;
});
+// --- Nummer (Herbivore) Class ---
+var Nummer = Container.expand(function () {
+ var self = Container.call(this);
+ // Attach herbivore image asset, centered
+ var sprite = self.attachAsset('herbivore', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ // Optionally, add any properties or methods for Nummer here
+ return self;
+});
/****
* Initialize Game
****/
tentacled red circle with a mouth and no eyes. In-Game asset. 2d. High contrast. No shadows. Very simple
A plant. In-Game asset. 2d. High contrast. No shadows. Very simple
Brown Seed. In-Game asset. 2d. High contrast. No shadows. Very simple
A small orange circle with spider legs 1 cute eye and no mouth. In-Game asset. 2d. High contrast. No shadows. Very very simple
Make a red egg with dark red spots. In-Game asset. 2d. High contrast. No shadows
Purple mushroom. In-Game asset. 2d. High contrast. No shadows. Very simple
A green shiny orb with a black circle. In-Game asset. 2d. High contrast. No shadows. Very simple
make a cyan lichen. In-Game asset. 2d. High contrast. No shadows. very simple
Just the color blue filling the entire space. In-Game asset. 2d. High contrast. No shadows
A brown circle with bug like antennas and bug legs with bug jaws and no eyes. In-Game asset. 2d. High contrast. No shadows. Very simple
A venus flytrap with one mouth and is looking up side view. In-Game asset. 2d. High contrast. No shadows VERY SIMPLE
Short brown worm. In-Game asset. 2d. High contrast. No shadows. Very simple
Pile of dirt. In-Game asset. 2d. High contrast. No shadows. Very simple
A yellow circle with 3 eyes no mouth and the eyes are in a triangle orientation. In-Game asset. 2d. High contrast. No shadows
Shrub. In-Game asset. 2d. High contrast. No shadows. Very simple