User prompt
Add new pack: Ancient pack! A pack with 4 cards; most of them are mammals, but there's at least 1 guaranteed Exctint Animal card!(Extinct Animal cards: Unique: Dodo, Sabertooth tiger; Epic: Woolly rhino; Legendary: Megalodon; Exotic: Wolly Mammoth)
User prompt
Add assets for Rhino, Cobra, Snake, Eagle
User prompt
Add new Cards: Penguin, Rhino, Eagle, Cheetah, Snake, Cobra
User prompt
Janitor Minigame should end when all mud in the screen is gone
User prompt
Add zookeeper Minigame
User prompt
Add Minigame for Plumber
User prompt
Add Minigame for Janitor
User prompt
Add jobs: Janitor (play a Minigame where you need to tap on all the mud; if you win, you gain some money), Plumber (play a Minigame where you need to sort the pipes to fix the gabinet; If you win, you gain money), Zookeeper (play a Minigame where you need to guess 5 random cards from their description. If you win, you gain some money)
User prompt
Add jobs: Janitor (play a Minigame where you need to tap on all the mud; if you win, you gain some money), Plumber (play a Minigame where you need to sort the pipes to fix the gabinet; If you win, you gain money), Zookeeper (play a Minigame where you need to guess 5 random cards from their description. If you win, you gain some money)
User prompt
Add jobs: Janitor (play a Minigame where you need to tap on all the mud; if you win, you gain some money), Plumber (play a Minigame where you need to sort the pipes to fix the gabinet; If you win, you gain money), Zookeeper (play a Minigame where you need to guess 5 random cards from their description. If you win, you gain some money)
User prompt
When you sell a card, it gets removed from your collection ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Now packs cost money; only the common one is free. You can get money by selling your cards, doing jobs pee completing achievements
User prompt
Make it so that only Jurassic pack and Random pack give Jurassic packs; the rest do not
User prompt
Add new cards: Uncommon: Crow, Cat, Dog; Rare: Penguin (First "Artic" card), Camel; Epic: Polar bear, Hog, cheetah; Legendary: Tarantula, Bull, Elephant
User prompt
Add new cards: Uncommon: Crow, Cat, Dog; Rare: Penguin (First "Artic" card), Camel; Epic: Polar bear, Hog, cheetah; Legendary: Tarantula, Bull, Elephant
User prompt
Add new pack: Random pack! You get one COMPLETELY RANDOM CARD!
User prompt
Add new pack: Random pack! You get one COMPLETELY RANDOM CARD!
User prompt
Jurassic pack now guarantees at least 1 Dinosaur card
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.trades[tradeCode] = tradeDataValue;' Line Number: 2295
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.trades[tradeCode] = simpleTradeData;' Line Number: 2291 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.trades[tradeCode] = simpleTradeData;' Line Number: 2289
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.trades[tradeCode] = tradeDataToStore;' Line Number: 2279 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Please fix the bug: 'Error: Invalid value. Only literals or 1-level deep objects/arrays containing literals are allowed.' in or related to this line: 'storage.trades[tradeCode] = tradeSelectedCards;' Line Number: 2269 ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Make it so that you can also trade Non-duplicate cards ↪💡 Consider importing and using the following plugins: @upit/storage.v1
User prompt
Add a new feature: Trade! Trade cards with someone to get cards in exchange for your duplicates ↪💡 Consider importing and using the following plugins: @upit/storage.v1
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { money: 0, collection: {}, stats: { totalCards: 0, common: 0, uncommon: 0, rare: 0, unique: 0, epic: 0, legendary: 0, exotic: 0 } }); /**** * Classes ****/ var Button = Container.expand(function (text, width, height, color) { var self = Container.call(this); var background = self.attachAsset('cardButton', { anchorX: 0.5, anchorY: 0.5, width: width || 300, height: height || 100 }); var label = new Text2(text, { size: 40, fill: 0xFFFFFF }); label.anchor.set(0.5, 0.5); self.addChild(label); self.down = function () { tween(self.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; self.up = function () { tween(self.scale, { x: 1, y: 1 }, { duration: 100 }); }; return self; }); var Card = Container.expand(function (rarity, id, name, type) { var self = Container.call(this); self.rarity = rarity; self.id = id; self.name = name; self.type = type; self.revealed = false; // Card back initially shown var cardBack = self.attachAsset('cardBack', { anchorX: 0.5, anchorY: 0.5 }); // The actual card (initially hidden) var cardFront; switch (rarity) { case 'common': cardFront = self.attachAsset('commonCard', { anchorX: 0.5, anchorY: 0.5, visible: false }); break; case 'uncommon': cardFront = self.attachAsset('uncommonCard', { anchorX: 0.5, anchorY: 0.5, visible: false }); break; case 'rare': cardFront = self.attachAsset('rareCard', { anchorX: 0.5, anchorY: 0.5, visible: false }); break; case 'unique': cardFront = self.attachAsset('uniqueCard', { anchorX: 0.5, anchorY: 0.5, visible: false }); break; case 'epic': cardFront = self.attachAsset('epicCard', { anchorX: 0.5, anchorY: 0.5, visible: false }); break; case 'legendary': cardFront = self.attachAsset('legendaryCard', { anchorX: 0.5, anchorY: 0.5, visible: false }); break; case 'exotic': cardFront = self.attachAsset('exoticCard', { anchorX: 0.5, anchorY: 0.5, visible: false }); break; } // Card icon var icon; switch (type) { case 'Rodent': icon = self.attachAsset('cardIconRat', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); break; case 'Avian': // Check for specific Avians that have unique icons if (self.name === 'Owl') { icon = self.attachAsset('cardIconOwl', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Ostrich') { icon = self.attachAsset('cardIconOstrich', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Duck') { icon = self.attachAsset('cardIconDuck', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else { icon = self.attachAsset('cardIconPidgeon', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } break; case 'Amphibian': // Check for specific Amphibians that have unique icons if (self.name === 'Frog') { icon = self.attachAsset('cardIconFrog', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else { icon = self.attachAsset('cardIconSalamander', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } break; case 'Insect': // Check for specific Insects that have unique icons if (self.name === 'Beetle') { icon = self.attachAsset('cardIconBeetle', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else { icon = self.attachAsset('cardIconAnt', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } break; case 'Aquatic': // Check for specific Aquatics that have unique icons if (self.name === 'Shark') { icon = self.attachAsset('cardIconShark', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Whale') { icon = self.attachAsset('cardIconWhale', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else { icon = self.attachAsset('cardIconSalmon', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } break; case 'Mammal': // Check for specific Mammals that have unique icons if (self.name === 'Pig') { icon = self.attachAsset('cardIconPig', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Fox') { icon = self.attachAsset('cardIconFox', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Wolf') { icon = self.attachAsset('cardIconWolf', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Bear') { icon = self.attachAsset('cardIconBear', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Hippo') { icon = self.attachAsset('cardIconHippo', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else { icon = self.attachAsset('cardIconHare', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } break; case 'Reptile': // Check for specific Reptiles that have unique icons if (self.name === 'Crocodile') { icon = self.attachAsset('cardIconCrocodile', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else { icon = self.attachAsset('cardIconLizard', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } break; case 'Feline': icon = self.attachAsset('cardIconLion', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); break; case 'Primate': icon = self.attachAsset('cardIconGorilla', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); break; case 'EVERYTHING': icon = self.attachAsset('cardIconDuck', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); break; case 'Dinosaur': if (self.name === 'Velociraptor') { icon = self.attachAsset('cardIconVelociraptor', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Parasaur') { icon = self.attachAsset('cardIconParasaur', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Pterodactyl') { icon = self.attachAsset('cardIconPterodactyl', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Stegosaurus') { icon = self.attachAsset('cardIconStegosaurus', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Ankylosaurus') { icon = self.attachAsset('cardIconAnkylosaurus', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Spinosaurus') { icon = self.attachAsset('cardIconSpinosaurus', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Diplodocus') { icon = self.attachAsset('cardIconDiplodocus', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'Triceratops') { icon = self.attachAsset('cardIconTriceratops', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } else if (self.name === 'T-REX') { icon = self.attachAsset('cardIconTRex', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); } break; default: // Default icon if type not found (optional) icon = self.attachAsset('cardIconEVERYTHING', { anchorX: 0.5, anchorY: 0.5, y: -150, visible: false }); break; } // Card text var nameText = new Text2(name, { size: 50, fill: 0xFFFFFF }); nameText.anchor.set(0.5, 0); nameText.y = 50; nameText.visible = false; self.addChild(nameText); var typeText = new Text2(type, { size: 40, fill: 0xFFFFFF }); typeText.anchor.set(0.5, 0); typeText.y = 120; typeText.visible = false; self.addChild(typeText); var rarityText = new Text2(rarity.toUpperCase(), { size: 35, fill: 0xFFFFFF }); rarityText.anchor.set(0.5, 1); rarityText.y = 300; rarityText.visible = false; self.addChild(rarityText); // Reveal the card self.reveal = function () { if (self.revealed) { return; } self.revealed = true; LK.getSound('cardFlip').play(); // Play special sounds for card rarities if (rarity === 'unique') { LK.getSound('uniqueDrop').play(); } else if (rarity === 'epic') { LK.getSound('epicDrop').play(); } else if (rarity === 'legendary') { LK.getSound('legendaryDrop').play(); } else if (rarity === 'exotic') { LK.getSound('exoticDrop').play(); } else if (rarity === 'rare') { LK.getSound('rareDrop').play(); } // Flip animation tween(cardBack.scale, { x: 0 }, { duration: 200, onFinish: function onFinish() { cardBack.visible = false; cardFront.visible = true; icon.visible = true; nameText.visible = true; typeText.visible = true; rarityText.visible = true; tween(cardFront.scale, { x: 1 }, { duration: 200, easing: tween.easeOut, onFinish: function onFinish() { // Add card to collection if (!storage.collection[self.id]) { // Initialize collection entry with primitive values separately storage.collection[self.id + "_rarity"] = self.rarity; storage.collection[self.id + "_name"] = self.name; storage.collection[self.id + "_type"] = self.type; storage.collection[self.id + "_count"] = 0; } storage.collection[self.id + "_count"] = (storage.collection[self.id + "_count"] || 0) + 1; storage.stats.totalCards++; storage.stats[self.rarity]++; } }); cardFront.scale.x = 0; } }); }; self.down = function () { self.reveal(); }; return self; }); var Pack = Container.expand(function (type) { var self = Container.call(this); self.type = type; self.opened = false; // Pack artwork based on type var packArt; switch (type) { case 'common': packArt = self.attachAsset('packCommon', { anchorX: 0.5, anchorY: 0.5 }); break; case 'advanced': packArt = self.attachAsset('packAdvanced', { anchorX: 0.5, anchorY: 0.5 }); break; case 'rare': packArt = self.attachAsset('packRare', { anchorX: 0.5, anchorY: 0.5 }); break; case 'magic': packArt = self.attachAsset('packMagic', { anchorX: 0.5, anchorY: 0.5 }); break; case 'legendary': packArt = self.attachAsset('packLegendary', { anchorX: 0.5, anchorY: 0.5 }); break; case 'jurassic': packArt = self.attachAsset('packJurassic', { anchorX: 0.5, anchorY: 0.5 }); break; case 'random': packArt = self.attachAsset('packRandom', { anchorX: 0.5, anchorY: 0.5 }); break; } // Pack type text var typeText = new Text2(type.toUpperCase() + " PACK", { size: 40, fill: 0xFFFFFF }); typeText.anchor.set(0.5, 0.5); self.addChild(typeText); self.down = function () { if (!currentlyOpeningPack && !self.opened) { self.openPack(); } }; self.openPack = function () { if (self.opened || currentlyOpeningPack) { return; } var packCost; switch (self.type) { case 'common': packCost = 0; break; case 'advanced': packCost = 50; break; case 'rare': packCost = 150; break; case 'magic': packCost = 400; break; case 'legendary': packCost = 1000; break; case 'jurassic': packCost = 500; break; case 'random': packCost = 200; break; default: packCost = 0; } if (storage.money < packCost) { console.log("Not enough money to open this pack!"); return; } storage.money -= packCost; updateStatsDisplay(); currentlyOpeningPack = true; LK.getSound('packOpen').play(); // Hide all packs for (var i = 0; i < packDisplays.length; i++) { if (packDisplays[i] !== self) { tween(packDisplays[i], { alpha: 0 }, { duration: 300 }); } } // Move to center and fade out tween(self, { y: 2732 / 2 - 200, scale: 1.5 }, { duration: 500, easing: tween.easeOut, onFinish: function onFinish() { tween(self, { alpha: 0 }, { duration: 300, onFinish: function onFinish() { self.visible = false; // Generate cards based on pack type var cards = generateCardsFromPack(self.type); // Display cards for (var i = 0; i < cards.length; i++) { var card = cards[i]; card.x = 2048 / 2 + (i - (cards.length - 1) / 2) * 550; card.y = 2732 / 2; card.scale.set(0.7); game.addChild(card); displayedCards.push(card); // Animate card entry card.y = 2732 + 400; tween(card, { y: 2732 / 2 }, { duration: 500, easing: tween.easeOut }); } // Show return button showReturnButton(); } }); } }); }; return self; }); var Pipe = Container.expand(function (type, start, end) { var self = Container.call(this); self.type = type; // 'straight', 'corner' self.start = start; // 0, 90, 180, 270 degrees, indicating water entry point self.end = end; // 0, 90, 180, 270 degrees, indicating water exit point self.currentRotation = 0; // 0: 0 degrees, 1: 90 degrees, 2: 180 degrees, 3: 270 degrees self.connected = false; var pipeGraphic; if (type === 'straight') { pipeGraphic = self.attachAsset('pipeStraight', { anchorX: 0.5, anchorY: 0.5 }); } else { // corner pipeGraphic = self.attachAsset('pipeCorner', { anchorX: 0.5, anchorY: 0.5 }); } self.down = function () { self.rotatePipe(); }; self.rotatePipe = function () { self.currentRotation = (self.currentRotation + 1) % 4; tween(pipeGraphic, { rotation: self.currentRotation * Math.PI / 2 }, { duration: 100 }); // Logic to check connections will be handled in the game update }; self.checkConnection = function (otherPipe) { // Simple connection logic: check if rotated end of this pipe matches rotated start of other pipe // This is a placeholder and needs more complex logic based on grid position and rotation return false; // Placeholder }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x1a1a2e }); /**** * Game Code ****/ // Game state variables var currentScreen = 'home'; // 'home', 'packs', 'collection' var currentlyOpeningPack = false; var packDisplays = []; var displayedCards = []; var screenElements = []; // Game constants var CARD_DATABASE = [ // Common cards (id, name, type) { id: 'c1', rarity: 'common', name: 'Rat', type: 'Rodent' }, { id: 'c2', rarity: 'common', name: 'Pidgeon', type: 'Avian' }, { id: 'c3', rarity: 'common', name: 'Frog', type: 'Amphibian' }, { id: 'c4', rarity: 'common', name: 'Ant', type: 'Insect' }, { id: 'c5', rarity: 'common', name: 'Salmon', type: 'Aquatic' }, { id: 'c6', rarity: 'common', name: 'Hare', type: 'Mammal' }, { id: 'c8', rarity: 'common', name: 'Pig', type: 'Mammal' }, // Uncommon cards { id: 'u1', rarity: 'uncommon', name: 'Fox', type: 'Mammal' }, { id: 'u2', rarity: 'uncommon', name: 'Owl', type: 'Avian' }, { id: 'u3', rarity: 'uncommon', name: 'Salamander', type: 'Amphibian' }, { id: 'u4', rarity: 'uncommon', name: 'Lizard', type: 'Reptile' }, { id: 'u5', rarity: 'uncommon', name: 'Beetle', type: 'Insect' }, // Rare cards { id: 'r1', rarity: 'rare', name: 'Wolf', type: 'Mammal' }, { id: 'r2', rarity: 'rare', name: 'Ostrich', type: 'Avian' }, { id: 'r3', rarity: 'rare', name: 'Shark', type: 'Aquatic' }, // Unique cards { id: 'q1', rarity: 'unique', name: 'Bear', type: 'Mammal' }, { id: 'q2', rarity: 'unique', name: 'Lion', type: 'Feline' }, // Epic cards { id: 'e1', rarity: 'epic', name: 'Gorilla', type: 'Primate' }, { id: 'e2', rarity: 'epic', name: 'Crocodile', type: 'Reptile' }, // Legendary cards { id: 'l1', rarity: 'legendary', name: 'Hippo', type: 'Mammal' }, { id: 'l2', rarity: 'legendary', name: 'Whale', type: 'Aquatic' }, // Exotic card { id: 'x1', rarity: 'exotic', name: 'Duck', type: 'EVERYTHING' }, // Jurassic pack cards { id: 'j1', rarity: 'unique', name: 'Velociraptor', type: 'Dinosaur' }, { id: 'j2', rarity: 'unique', name: 'Parasaur', type: 'Dinosaur' }, { id: 'j3', rarity: 'epic', name: 'Pterodactyl', type: 'Dinosaur' }, { id: 'j4', rarity: 'epic', name: 'Stegosaurus', type: 'Dinosaur' }, { id: 'j5', rarity: 'epic', name: 'Ankylosaurus', type: 'Dinosaur' }, { id: 'j6', rarity: 'legendary', name: 'Spinosaurus', type: 'Dinosaur' }, { id: 'j7', rarity: 'legendary', name: 'Diplodocus', type: 'Dinosaur' }, { id: 'j8', rarity: 'legendary', name: 'Triceratops', type: 'Dinosaur' }, { id: 'j9', rarity: 'exotic', name: 'T-REX', type: 'Dinosaur' }]; // Play background music LK.playMusic('bgMusic'); // Initialize stats text var statsText = new Text2("Collection: 0 cards", { size: 50, fill: 0xFFFFFF }); statsText.anchor.set(0.5, 0); statsText.y = 100; LK.gui.top.addChild(statsText); updateStatsDisplay(); // Setup the home screen showHomeScreen(); // Show home screen with main menu function showHomeScreen() { clearScreen(); currentScreen = 'home'; var title = new Text2("ANIMALMON", { size: 120, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 300; game.addChild(title); screenElements.push(title); var subtitle = new Text2("Pocket Menagerie", { size: 80, fill: 0xFFFFFF }); subtitle.anchor.set(0.5, 0); subtitle.x = 2048 / 2; subtitle.y = 450; game.addChild(subtitle); screenElements.push(subtitle); var packButton = new Button("OPEN PACKS", 400, 120); packButton.x = 2048 / 2; packButton.y = 1200; game.addChild(packButton); screenElements.push(packButton); packButton.down = function () { tween(packButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; packButton.up = function () { tween(packButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showPacksScreen(); } }); }; var collectionButton = new Button("COLLECTION", 400, 120); collectionButton.x = 2048 / 2; collectionButton.y = 1400; game.addChild(collectionButton); screenElements.push(collectionButton); var jobsButton = new Button("JOBS", 400, 120); jobsButton.x = 2048 / 2; jobsButton.y = 1600; game.addChild(jobsButton); screenElements.push(jobsButton); jobsButton.down = function () { tween(jobsButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; jobsButton.up = function () { tween(jobsButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showJobsScreen(); } }); }; var achievementsButton = new Button("ACHIEVEMENTS", 400, 120); achievementsButton.x = 2048 / 2; achievementsButton.y = 1800; game.addChild(achievementsButton); screenElements.push(achievementsButton); achievementsButton.down = function () { tween(achievementsButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; achievementsButton.up = function () { tween(achievementsButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showAchievementsScreen(); } }); }; collectionButton.down = function () { tween(collectionButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; collectionButton.up = function () { tween(collectionButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showCollectionScreen(); } }); }; updateStatsDisplay(); var moneyText = new Text2("Money: $" + storage.money, { size: 50, fill: 0xFFFFFF }); moneyText.anchor.set(0.5, 0); moneyText.x = 2048 / 2; moneyText.y = 200; game.addChild(moneyText); screenElements.push(moneyText); } // Show packs selection screen function showPacksScreen() { clearScreen(); currentScreen = 'packs'; var title = new Text2("SELECT A PACK", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); // Common Pack var commonPack = new Pack('common'); commonPack.x = 2048 / 2 - 700; commonPack.y = 800; game.addChild(commonPack); packDisplays.push(commonPack); screenElements.push(commonPack); var commonText = new Text2("3 Cards\n1-2 Common\n1 Chance for Uncommon", { size: 30, fill: 0xFFFFFF }); commonText.anchor.set(0.5, 0); commonText.x = commonPack.x; commonText.y = commonPack.y + 250; game.addChild(commonText); screenElements.push(commonText); var commonCostText = new Text2("Cost: $0", { size: 30, fill: 0xFFFFFF }); commonCostText.anchor.set(0.5, 0); commonCostText.x = commonPack.x; commonCostText.y = commonPack.y + 350; game.addChild(commonCostText); screenElements.push(commonCostText); // Advanced Pack var advancedPack = new Pack('advanced'); advancedPack.x = 2048 / 2 - 350; advancedPack.y = 800; game.addChild(advancedPack); packDisplays.push(advancedPack); screenElements.push(advancedPack); var advancedText = new Text2("4 Cards\n2-3 Common\n1-2 Uncommon\nSmall Chance for Rare", { size: 30, fill: 0xFFFFFF }); advancedText.anchor.set(0.5, 0); advancedText.x = advancedPack.x; advancedText.y = advancedPack.y + 250; game.addChild(advancedText); screenElements.push(advancedText); var advancedCostText = new Text2("Cost: $50", { size: 30, fill: 0xFFFFFF }); advancedCostText.anchor.set(0.5, 0); advancedCostText.x = advancedPack.x; advancedCostText.y = advancedPack.y + 350; game.addChild(advancedCostText); screenElements.push(advancedCostText); // Rare Pack var rarePack = new Pack('rare'); rarePack.x = 2048 / 2; rarePack.y = 800; game.addChild(rarePack); packDisplays.push(rarePack); screenElements.push(rarePack); var rareText = new Text2("4 Cards\n1-2 Uncommon\n1-2 Rare\nChance for Unique", { size: 30, fill: 0xFFFFFF }); rareText.anchor.set(0.5, 0); rareText.x = rarePack.x; rareText.y = rarePack.y + 250; game.addChild(rareText); screenElements.push(rareText); var rareCostText = new Text2("Cost: $150", { size: 30, fill: 0xFFFFFF }); rareCostText.anchor.set(0.5, 0); rareCostText.x = rarePack.x; rareCostText.y = rarePack.y + 350; game.addChild(rareCostText); screenElements.push(rareCostText); // Magic Pack var magicPack = new Pack('magic'); magicPack.x = 2048 / 2 + 350; magicPack.y = 800; game.addChild(magicPack); packDisplays.push(magicPack); screenElements.push(magicPack); var magicText = new Text2("5 Cards\n1-2 Rare\n1-2 Unique\nChance for Epic", { size: 30, fill: 0xFFFFFF }); magicText.anchor.set(0.5, 0); magicText.x = magicPack.x; magicText.y = magicPack.y + 250; game.addChild(magicText); screenElements.push(magicText); var magicCostText = new Text2("Cost: $400", { size: 30, fill: 0xFFFFFF }); magicCostText.anchor.set(0.5, 0); magicCostText.x = magicPack.x; magicCostText.y = magicPack.y + 350; game.addChild(magicCostText); screenElements.push(magicCostText); // Legendary Pack var legendaryPack = new Pack('legendary'); legendaryPack.x = 2048 / 2 + 700; legendaryPack.y = 800; game.addChild(legendaryPack); packDisplays.push(legendaryPack); screenElements.push(legendaryPack); var legendaryText = new Text2("5 Cards\n1-2 Unique\n1-2 Epic\nChance for Legendary\nRare Chance for Exotic", { size: 30, fill: 0xFFFFFF }); legendaryText.anchor.set(0.5, 0); legendaryText.x = legendaryPack.x; legendaryText.y = legendaryPack.y + 250; game.addChild(legendaryText); screenElements.push(legendaryText); var legendaryCostText = new Text2("Cost: $1000", { size: 30, fill: 0xFFFFFF }); legendaryCostText.anchor.set(0.5, 0); legendaryCostText.x = legendaryPack.x; legendaryCostText.y = legendaryPack.y + 350; game.addChild(legendaryCostText); screenElements.push(legendaryCostText); // Random Pack var randomPack = new Pack('random'); randomPack.x = 2048 / 2 - 350; randomPack.y = 1400; game.addChild(randomPack); packDisplays.push(randomPack); screenElements.push(randomPack); var randomText = new Text2("1 Card\nCompletely Random", { size: 30, fill: 0xFFFFFF }); randomText.anchor.set(0.5, 0); randomText.x = randomPack.x; randomText.y = randomPack.y + 250; game.addChild(randomText); screenElements.push(randomText); var randomCostText = new Text2("Cost: $200", { size: 30, fill: 0xFFFFFF }); randomCostText.anchor.set(0.5, 0); randomCostText.x = randomPack.x; randomCostText.y = randomPack.y + 350; game.addChild(randomCostText); screenElements.push(randomCostText); // Back button var backButton = new Button("BACK", 200, 80); backButton.x = 200; backButton.y = 200; game.addChild(backButton); screenElements.push(backButton); backButton.down = function () { tween(backButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; backButton.up = function () { tween(backButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showHomeScreen(); } }); }; // Jurassic Pack var jurassicPack = new Pack('jurassic'); jurassicPack.x = 2048 / 2 - 700; jurassicPack.y = 1400; game.addChild(jurassicPack); packDisplays.push(jurassicPack); screenElements.push(jurassicPack); var jurassicText = new Text2("4 Cards\nMost are Reptiles\nChance for Dinosaurs\n(Unique, Epic, Legendary, Exotic)", { size: 30, fill: 0xFFFFFF }); jurassicText.anchor.set(0.5, 0); jurassicText.x = jurassicPack.x; jurassicText.y = jurassicPack.y + 250; game.addChild(jurassicText); screenElements.push(jurassicText); var jurassicCostText = new Text2("Cost: $500", { size: 30, fill: 0xFFFFFF }); jurassicCostText.anchor.set(0.5, 0); jurassicCostText.x = jurassicPack.x; jurassicCostText.y = jurassicPack.y + 350; game.addChild(jurassicCostText); screenElements.push(jurassicCostText); } // Show return button after opening pack function showReturnButton() { var returnButton = new Button("RETURN", 300, 100); returnButton.x = 2048 / 2; returnButton.y = 2732 - 200; game.addChild(returnButton); screenElements.push(returnButton); returnButton.down = function () { tween(returnButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; returnButton.up = function () { tween(returnButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { // Clear displayed cards for (var i = 0; i < displayedCards.length; i++) { displayedCards[i].destroy(); } displayedCards = []; // Return to packs screen currentlyOpeningPack = false; showPacksScreen(); updateStatsDisplay(); } }); }; } // Show collection screen function showCollectionScreen() { clearScreen(); currentScreen = 'collection'; var title = new Text2("YOUR COLLECTION", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); // Collection stats var collectionStats = new Text2("Total Cards: " + storage.stats.totalCards + "\n\n" + "Common: " + storage.stats.common + "\n" + "Uncommon: " + storage.stats.uncommon + "\n" + "Rare: " + storage.stats.rare + "\n" + "Unique: " + storage.stats.unique + "\n" + "Epic: " + storage.stats.epic + "\n" + "Legendary: " + storage.stats.legendary + "\n" + "Exotic: " + storage.stats.exotic, { size: 50, fill: 0xFFFFFF }); collectionStats.anchor.set(0.5, 0); collectionStats.x = 2048 / 2; collectionStats.y = 400; game.addChild(collectionStats); screenElements.push(collectionStats); // Display recently acquired cards (up to 3) var recentText = new Text2("RECENT ACQUISITIONS:", { size: 50, fill: 0xFFFFFF }); recentText.anchor.set(0.5, 0); recentText.x = 2048 / 2; recentText.y = 1000; game.addChild(recentText); screenElements.push(recentText); // Get recent cards var allKeys = Object.keys(storage.collection); var cardIds = []; // Filter keys to get unique card IDs for (var i = 0; i < allKeys.length; i++) { var key = allKeys[i]; if (key.endsWith("_rarity")) { cardIds.push(key.substring(0, key.length - 7)); } } var recentCards = []; // Sort by count (higher count means they were collected more recently) cardIds.sort(function (a, b) { return (storage.collection[b + "_count"] || 0) - (storage.collection[a + "_count"] || 0); }); // Display up to 3 recent cards var displayCount = Math.min(3, cardIds.length); for (var i = 0; i < displayCount; i++) { var cardId = cardIds[i]; var card = new Card(storage.collection[cardId + "_rarity"], cardId, storage.collection[cardId + "_name"], storage.collection[cardId + "_type"]); card.x = 2048 / 2 + (i - (displayCount - 1) / 2) * 550; card.y = 1400; card.scale.set(0.6); card.reveal(); // Already revealed game.addChild(card); screenElements.push(card); } // Back button var backButton = new Button("BACK", 200, 80); backButton.x = 200; backButton.y = 200; game.addChild(backButton); screenElements.push(backButton); backButton.down = function () { tween(backButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; backButton.up = function () { tween(backButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showHomeScreen(); } }); }; // View all cards button var viewCardsButton = new Button("VIEW ALL CARDS", 400, 80); viewCardsButton.x = 2048 / 2; viewCardsButton.y = 2732 - 300; game.addChild(viewCardsButton); screenElements.push(viewCardsButton); viewCardsButton.down = function () { tween(viewCardsButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; viewCardsButton.up = function () { tween(viewCardsButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showAllCardsScreen(); } }); }; // Sell cards button var sellCardsButton = new Button("SELL CARDS", 400, 80); sellCardsButton.x = 2048 / 2; sellCardsButton.y = 2732 - 400; game.addChild(sellCardsButton); screenElements.push(sellCardsButton); sellCardsButton.down = function () { tween(sellCardsButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; sellCardsButton.up = function () { tween(sellCardsButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showSellCardsScreen(); } }); }; // Reset collection button var resetButton = new Button("RESET COLLECTION", 400, 80); resetButton.x = 2048 / 2; resetButton.y = 2732 - 200; game.addChild(resetButton); screenElements.push(resetButton); resetButton.down = function () { tween(resetButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; resetButton.up = function () { tween(resetButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { // Reset collection data storage.collection = {}; storage.stats = { totalCards: 0, common: 0, uncommon: 0, rare: 0, unique: 0, epic: 0, legendary: 0, exotic: 0 }; // Update display and return to home screen updateStatsDisplay(); showHomeScreen(); } }); }; } // Generate cards based on pack type function generateCardsFromPack(packType) { var cards = []; var rarityPool = []; switch (packType) { case 'common': // 3 cards: 1-2 Common, chance for Uncommon for (var i = 0; i < 3; i++) { if (i < 2) { rarityPool.push('common'); } else { rarityPool.push(Math.random() < 0.3 ? 'uncommon' : 'common'); } } break; case 'advanced': // 4 cards: 2-3 Common, 1-2 Uncommon, small chance for Rare for (var i = 0; i < 4; i++) { if (i < 2) { rarityPool.push('common'); } else if (i == 2) { rarityPool.push(Math.random() < 0.7 ? 'uncommon' : 'common'); } else { var roll = Math.random(); if (roll < 0.1) { rarityPool.push('rare'); } else if (roll < 0.6) { rarityPool.push('uncommon'); } else { rarityPool.push('common'); } } } break; case 'rare': // 4 cards: 1-2 Uncommon, 1-2 Rare, chance for Unique for (var i = 0; i < 4; i++) { if (i < 1) { rarityPool.push('uncommon'); } else if (i < 3) { rarityPool.push(Math.random() < 0.6 ? 'rare' : 'uncommon'); } else { var roll = Math.random(); if (roll < 0.15) { rarityPool.push('unique'); } else if (roll < 0.6) { rarityPool.push('rare'); } else { rarityPool.push('uncommon'); } } } break; case 'magic': // 5 cards: 1-2 Rare, 1-2 Unique, chance for Epic for (var i = 0; i < 5; i++) { if (i < 1) { rarityPool.push('rare'); } else if (i < 3) { rarityPool.push(Math.random() < 0.6 ? 'unique' : 'rare'); } else if (i < 4) { rarityPool.push(Math.random() < 0.7 ? 'unique' : 'rare'); } else { var roll = Math.random(); if (roll < 0.2) { rarityPool.push('epic'); } else if (roll < 0.6) { rarityPool.push('unique'); } else { rarityPool.push('rare'); } } } break; case 'legendary': // 5 cards: 1-2 Unique, 1-2 Epic, chance for Legendary, rare chance for Exotic for (var i = 0; i < 5; i++) { if (i < 1) { rarityPool.push('unique'); } else if (i < 3) { rarityPool.push(Math.random() < 0.6 ? 'epic' : 'unique'); } else if (i < 4) { var roll = Math.random(); if (roll < 0.2) { rarityPool.push('legendary'); } else if (roll < 0.6) { rarityPool.push('epic'); } else { rarityPool.push('unique'); } } else { var roll = Math.random(); if (roll < 0.02) { rarityPool.push('exotic'); } else if (roll < 0.15) { rarityPool.push('legendary'); } else if (roll < 0.5) { rarityPool.push('epic'); } else { rarityPool.push('unique'); } } } case 'random': // 1 card: Completely random rarityPool.push(CARD_DATABASE[Math.floor(Math.random() * CARD_DATABASE.length)].rarity); break; case 'jurassic': // 4 cards: Guarantees at least 1 Dinosaur card, rest are mostly Reptiles var hasDinosaur = false; for (var i = 0; i < 4; i++) { // For the last card, if we haven't added a dinosaur yet, guarantee one if (i === 3 && !hasDinosaur) { // Choose a dinosaur rarity var dinoRoll = Math.random(); if (dinoRoll < 0.01) { rarityPool.push('exotic'); } else if (dinoRoll < 0.1) { rarityPool.push('legendary'); } else if (dinoRoll < 0.3) { rarityPool.push('epic'); } else { rarityPool.push('unique'); } hasDinosaur = true; continue; } var roll = Math.random(); if (roll < 0.01) { rarityPool.push('exotic'); hasDinosaur = true; // Mark that we've added a dinosaur } else if (roll < 0.05) { rarityPool.push('legendary'); hasDinosaur = true; // Mark that we've added a dinosaur } else if (roll < 0.15) { rarityPool.push('epic'); hasDinosaur = true; // Mark that we've added a dinosaur } else if (roll < 0.3) { rarityPool.push('unique'); hasDinosaur = true; // Mark that we've added a dinosaur } else { rarityPool.push('rare'); // Primarily reptiles, could be other rare types } } break; } // Create cards based on rarity pool for (var i = 0; i < rarityPool.length; i++) { var rarity = rarityPool[i]; var possibleCards = CARD_DATABASE.filter(function (card) { if ((packType === 'jurassic' || packType === 'random') && (rarity === 'unique' || rarity === 'epic' || rarity === 'legendary' || rarity === 'exotic')) { // Only Jurassic and Random packs can give Dinosaur cards if (card.type === 'Dinosaur') { return card.rarity === rarity; } } else if (card.type === 'Dinosaur') { // Other packs cannot give Dinosaur cards return false; } return card.rarity === rarity; }); if (possibleCards.length > 0) { var selectedCard = possibleCards[Math.floor(Math.random() * possibleCards.length)]; cards.push(new Card(selectedCard.rarity, selectedCard.id, selectedCard.name, selectedCard.type)); } } return cards; } // Clear current screen elements function clearScreen() { for (var i = 0; i < screenElements.length; i++) { screenElements[i].destroy(); } screenElements = []; packDisplays = []; } // Show all cards in collection screen function showAllCardsScreen() { clearScreen(); currentScreen = 'allCards'; var title = new Text2("ALL COLLECTED CARDS", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); // Get all cards from collection var allKeys = Object.keys(storage.collection); var cardIds = []; // Filter keys to get unique card IDs for (var i = 0; i < allKeys.length; i++) { var key = allKeys[i]; if (key.endsWith("_rarity")) { cardIds.push(key.substring(0, key.length - 7)); } } // Sort cards by rarity var rarityOrder = { 'common': 1, 'uncommon': 2, 'rare': 3, 'unique': 4, 'epic': 5, 'legendary': 6, 'exotic': 7 }; cardIds.sort(function (a, b) { var rarityA = storage.collection[a + "_rarity"]; var rarityB = storage.collection[b + "_rarity"]; return rarityOrder[rarityA] - rarityOrder[rarityB]; }); // Display cards in a grid var cardsPerRow = 5; var startY = 400; var cardScale = 0.35; var cardSpacingX = 400 * cardScale; var cardSpacingY = 850 * cardScale; for (var i = 0; i < cardIds.length; i++) { var cardId = cardIds[i]; var row = Math.floor(i / cardsPerRow); var col = i % cardsPerRow; var card = new Card(storage.collection[cardId + "_rarity"], cardId, storage.collection[cardId + "_name"], storage.collection[cardId + "_type"]); card.x = 2048 / 2 + (col - (cardsPerRow - 1) / 2) * cardSpacingX; card.y = startY + row * cardSpacingY; card.scale.set(cardScale); card.reveal(); // Already revealed // Add count indicator var countText = new Text2("x" + storage.collection[cardId + "_count"], { size: 40, fill: 0xFFFFFF }); countText.anchor.set(1, 1); countText.x = 220; countText.y = 300; card.addChild(countText); game.addChild(card); screenElements.push(card); } // Back button var backButton = new Button("BACK", 200, 80); backButton.x = 200; backButton.y = 200; game.addChild(backButton); screenElements.push(backButton); backButton.down = function () { tween(backButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; backButton.up = function () { tween(backButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showCollectionScreen(); } }); }; } // Update stats display function updateStatsDisplay() { var totalCards = storage.stats.totalCards || 0; statsText.setText("Money: $" + storage.money + " | Collection: " + totalCards + " cards"); } // Update function called by the game engine function showSellCardsScreen() { clearScreen(); currentScreen = 'sellCards'; var title = new Text2("SELL CARDS", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); var infoText = new Text2("Tap on a card to sell it for money.\nHigher rarity cards sell for more!", { size: 50, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0); infoText.x = 2048 / 2; infoText.y = 350; game.addChild(infoText); screenElements.push(infoText); // Display cards in a grid for selling var allKeys = Object.keys(storage.collection); var cardIds = []; for (var i = 0; i < allKeys.length; i++) { var key = allKeys[i]; if (key.endsWith("_rarity")) { cardIds.push(key.substring(0, key.length - 7)); } } // Sort cards by rarity for display var rarityOrder = { 'common': 1, 'uncommon': 2, 'rare': 3, 'unique': 4, 'epic': 5, 'legendary': 6, 'exotic': 7 }; cardIds.sort(function (a, b) { var rarityA = storage.collection[a + "_rarity"]; var rarityB = storage.collection[b + "_rarity"]; return rarityOrder[rarityA] - rarityOrder[rarityB]; }); var cardsPerRow = 5; var startY = 500; var cardScale = 0.35; var cardSpacingX = 400 * cardScale; var cardSpacingY = 850 * cardScale; for (var i = 0; i < cardIds.length; i++) { var cardId = cardIds[i]; var row = Math.floor(i / cardsPerRow); var col = i % cardsPerRow; var card = new Card(storage.collection[cardId + "_rarity"], cardId, storage.collection[cardId + "_name"], storage.collection[cardId + "_type"]); card.x = 2048 / 2 + (col - (cardsPerRow - 1) / 2) * cardSpacingX; card.y = startY + row * cardSpacingY; card.scale.set(cardScale); card.reveal(); // Add count indicator var countText = new Text2("x" + storage.collection[cardId + "_count"], { size: 40, fill: 0xFFFFFF }); countText.anchor.set(1, 1); countText.x = 220; countText.y = 300; card.addChild(countText); // Add selling logic on tap card.down = function () { var sellingCard = this; var cardPrice = getCardSellPrice(sellingCard.rarity); if (storage.collection[sellingCard.id + "_count"] > 0) { storage.collection[sellingCard.id + "_count"]--; storage.stats.totalCards--; storage.stats[sellingCard.rarity]--; storage.money += cardPrice; // Remove the card from storage if count reaches zero if (storage.collection[sellingCard.id + "_count"] <= 0) { delete storage.collection[sellingCard.id + "_rarity"]; delete storage.collection[sellingCard.id + "_name"]; delete storage.collection[sellingCard.id + "_type"]; delete storage.collection[sellingCard.id + "_count"]; } updateStatsDisplay(); showSellCardsScreen(); // Refresh screen after selling } }; game.addChild(card); screenElements.push(card); } // Back button var backButton = new Button("BACK", 200, 80); backButton.x = 200; backButton.y = 200; game.addChild(backButton); screenElements.push(backButton); backButton.down = function () { tween(backButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; backButton.up = function () { tween(backButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showCollectionScreen(); } }); }; updateStatsDisplay(); } // Get card sell price based on rarity function getCardSellPrice(rarity) { switch (rarity) { case 'common': return 10; case 'uncommon': return 20; case 'rare': return 50; case 'unique': return 100; case 'epic': return 250; case 'legendary': return 500; case 'exotic': return 1000; default: return 0; } } // Implement jobs screen (placeholder) function showJobsScreen() { clearScreen(); currentScreen = 'jobs'; var title = new Text2("JOBS", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); var infoText = new Text2("Jobs coming soon!", { size: 50, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0); infoText.x = 2048 / 2; infoText.y = 400; game.addChild(infoText); screenElements.push(infoText); // Back button var backButton = new Button("BACK", 200, 80); backButton.x = 200; backButton.y = 200; game.addChild(backButton); screenElements.push(backButton); backButton.down = function () { tween(backButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; backButton.up = function () { tween(backButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showHomeScreen(); } }); }; var janitorButton = new Button("JANITOR (TAP MUD)", 600, 120); janitorButton.x = 2048 / 2; janitorButton.y = 600; game.addChild(janitorButton); screenElements.push(janitorButton); janitorButton.down = function () { tween(janitorButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; janitorButton.up = function () { tween(janitorButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showJanitorMinigame(); } }); }; var plumberButton = new Button("PLUMBER (SORT PIPES)", 600, 120); plumberButton.x = 2048 / 2; plumberButton.y = 800; game.addChild(plumberButton); screenElements.push(plumberButton); plumberButton.down = function () { tween(plumberButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; plumberButton.up = function () { tween(plumberButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showPlumberMinigame(); } }); }; var zookeeperButton = new Button("ZOOKEEPER (GUESS CARDS)", 600, 120); zookeeperButton.x = 2048 / 2; zookeeperButton.y = 1000; game.addChild(zookeeperButton); screenElements.push(zookeeperButton); zookeeperButton.down = function () { tween(zookeeperButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; zookeeperButton.up = function () { tween(zookeeperButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showZookeeperMinigame(); } }); }; updateStatsDisplay(); } // Placeholder for Janitor Minigame function showJanitorMinigame() { clearScreen(); currentScreen = 'janitorMinigame'; var title = new Text2("JANITOR MINIGAME", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); var infoText = new Text2("Tap the mud!", { size: 50, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0); infoText.x = 2048 / 2; infoText.y = 350; game.addChild(infoText); screenElements.push(infoText); var mudSplats = []; var numMudSplats = 10; var mudSplatSize = 150; var mudSplatCount = 0; // Generate random mud splats for (var i = 0; i < numMudSplats; i++) { var mud = game.attachAsset('mudSplat', { anchorX: 0.5, anchorY: 0.5, x: Math.random() * (2048 - mudSplatSize) + mudSplatSize / 2, y: Math.random() * (2732 - mudSplatSize) + mudSplatSize / 2 + 500, // Avoid placing too high width: mudSplatSize, height: mudSplatSize }); screenElements.push(mud); mudSplats.push(mud); // Add tap logic to remove mud mud.down = function () { if (currentScreen === 'janitorMinigame') { this.destroy(); mudSplatCount++; if (mudSplatCount >= numMudSplats) { // Minigame complete, award money and go back to jobs screen storage.money += 100; // Award some money updateStatsDisplay(); clearScreen(); showJobsScreen(); } } }; } var backButton = new Button("BACK", 200, 80); backButton.x = 200; backButton.y = 200; game.addChild(backButton); screenElements.push(backButton); backButton.down = function () { tween(backButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; backButton.up = function () { tween(backButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showJobsScreen(); } }); }; } // Placeholder for Plumber Minigame function showPlumberMinigame() { clearScreen(); currentScreen = 'plumberMinigame'; var title = new Text2("PLUMBER MINIGAME", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); var infoText = new Text2("Sort the pipes!", { size: 50, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0); infoText.x = 2048 / 2; infoText.y = 400; game.addChild(infoText); screenElements.push(infoText); var gridSize = 4; // 4x4 grid var tileSize = 200; var pipes = []; var startConnector = game.attachAsset('pipeConnector', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2 - tileSize * (gridSize / 2), y: 2732 / 2 - tileSize * (gridSize / 2) - tileSize }); screenElements.push(startConnector); var endConnector = game.attachAsset('pipeConnector', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2 + tileSize * (gridSize / 2), y: 2732 / 2 + tileSize * (gridSize / 2) + tileSize }); screenElements.push(endConnector); // Generate random pipes for (var row = 0; row < gridSize; row++) { for (var col = 0; col < gridSize; col++) { var type = Math.random() < 0.5 ? 'straight' : 'corner'; var start = 0; // Placeholder var end = 0; // Placeholder var pipe = new Pipe(type, start, end); pipe.x = 2048 / 2 + (col - (gridSize - 1) / 2) * tileSize; pipe.y = 2732 / 2 + (row - (gridSize - 1) / 2) * tileSize; pipe.scale.set(tileSize / 150); // Scale to fit grid game.addChild(pipe); screenElements.push(pipe); pipes.push(pipe); } } // Placeholder for win condition check function checkWinCondition() { // More complex logic needed here to check if pipes are connected from start to end return false; } game.update = function () { if (currentScreen === 'plumberMinigame') { if (checkWinCondition()) { // Minigame complete, award money and go back to jobs screen storage.money += 150; // Award some money updateStatsDisplay(); clearScreen(); showJobsScreen(); } } }; var backButton = new Button("BACK", 200, 80); backButton.x = 200; backButton.y = 200; game.addChild(backButton); screenElements.push(backButton); backButton.down = function () { tween(backButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; backButton.up = function () { tween(backButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { game.update = function () {}; // Remove the update function for this minigame showJobsScreen(); } }); }; } // Placeholder for Zookeeper Minigame function showZookeeperMinigame() { clearScreen(); currentScreen = 'zookeeperMinigame'; var title = new Text2("ZOOKEEPER MINIGAME", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); // Game variables var currentQuestion = 0; var correctAnswers = 0; var totalQuestions = 5; var selectedCards = []; var options = []; var selectedAnswer = null; // Select 5 random cards for the quiz var allCards = CARD_DATABASE.slice(); for (var i = 0; i < totalQuestions; i++) { var randomIndex = Math.floor(Math.random() * allCards.length); selectedCards.push(allCards[randomIndex]); allCards.splice(randomIndex, 1); } // Create description for the current card function createCardDescription(card) { var descriptions = { 'Rodent': "This small animal has a long tail and likes to eat cheese.", 'Avian': "This animal has wings and can fly through the air.", 'Amphibian': "This animal can live both in water and on land.", 'Insect': "This tiny creature has six legs and often has wings.", 'Aquatic': "This animal lives in water and has fins for swimming.", 'Mammal': "This animal has fur and feeds its young with milk.", 'Reptile': "This cold-blooded animal has scales and often basks in the sun.", 'Feline': "This graceful predator has sharp claws and excellent night vision.", 'Primate': "This intelligent animal has opposable thumbs and is related to humans.", 'Dinosaur': "This ancient reptile lived millions of years ago." }; var specificDescriptions = { 'Rat': "A small rodent with a long tail that's often found in cities.", 'Pidgeon': "A common city bird with a cooing call.", 'Frog': "An amphibian known for jumping and saying 'ribbit'.", 'Beetle': "An insect with a hard shell covering its wings.", 'Salmon': "A fish that swims upstream to lay eggs.", 'Shark': "A fearsome predator of the seas with multiple rows of teeth.", 'Wolf': "A wild canine that lives and hunts in packs.", 'Bear': "A large omnivore that hibernates during winter.", 'Lion': "The king of the jungle with a magnificent mane.", 'Crocodile': "A reptile with powerful jaws that lives in water.", 'Velociraptor': "A fast dinosaur with sharp claws that hunted in packs.", 'T-REX': "The tyrant lizard king, the most fearsome dinosaur of all." }; var baseDescription = descriptions[card.type] || "This animal is part of a diverse ecosystem."; var specificDescription = specificDescriptions[card.name] || ""; // Combine descriptions if we have a specific one if (specificDescription) { return baseDescription + " " + specificDescription; } return baseDescription; } // Show current question function showQuestion() { clearScreen(); currentScreen = 'zookeeperMinigame'; // Add title var title = new Text2("ZOOKEEPER QUIZ: QUESTION " + (currentQuestion + 1) + "/" + totalQuestions, { size: 60, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); // Add description var description = createCardDescription(selectedCards[currentQuestion]); var questionText = new Text2("What animal is this?\n\n" + description, { size: 40, fill: 0xFFFFFF }); questionText.anchor.set(0.5, 0); questionText.x = 2048 / 2; questionText.y = 350; game.addChild(questionText); screenElements.push(questionText); // Generate options (1 correct, 3 random) options = [selectedCards[currentQuestion]]; var remainingCards = CARD_DATABASE.filter(function (card) { return card.id !== selectedCards[currentQuestion].id; }); // Add 3 random wrong answers for (var i = 0; i < 3; i++) { var randomIndex = Math.floor(Math.random() * remainingCards.length); options.push(remainingCards[randomIndex]); remainingCards.splice(randomIndex, 1); } // Shuffle options for (var i = options.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = options[i]; options[i] = options[j]; options[j] = temp; } // Add option buttons for (var i = 0; i < options.length; i++) { var optionButton = new Button(options[i].name, 600, 120); optionButton.x = 2048 / 2; optionButton.y = 700 + i * 200; optionButton.optionIndex = i; game.addChild(optionButton); screenElements.push(optionButton); optionButton.down = function () { tween(this.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; optionButton.up = function () { var self = this; tween(self.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { // Check answer selectedAnswer = options[self.optionIndex]; if (selectedAnswer.id === selectedCards[currentQuestion].id) { correctAnswers++; } // Move to next question or show results currentQuestion++; if (currentQuestion < totalQuestions) { showQuestion(); } else { showResults(); } } }); }; } // Back button var backButton = new Button("QUIT", 200, 80); backButton.x = 200; backButton.y = 200; game.addChild(backButton); screenElements.push(backButton); backButton.down = function () { tween(backButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; backButton.up = function () { tween(backButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showJobsScreen(); } }); }; } // Show results at the end function showResults() { clearScreen(); currentScreen = 'zookeeperResults'; var title = new Text2("ZOOKEEPER QUIZ RESULTS", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); var reward = correctAnswers * 50; // $50 per correct answer var resultText = new Text2("You got " + correctAnswers + " out of " + totalQuestions + " correct!\n\nReward: $" + reward, { size: 60, fill: 0xFFFFFF }); resultText.anchor.set(0.5, 0); resultText.x = 2048 / 2; resultText.y = 400; game.addChild(resultText); screenElements.push(resultText); // Add money storage.money += reward; updateStatsDisplay(); // Return button var returnButton = new Button("RETURN", 400, 120); returnButton.x = 2048 / 2; returnButton.y = 800; game.addChild(returnButton); screenElements.push(returnButton); returnButton.down = function () { tween(returnButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; returnButton.up = function () { tween(returnButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showJobsScreen(); } }); }; } // Start the game by showing the first question showQuestion(); } // Implement achievements screen (placeholder) function showAchievementsScreen() { clearScreen(); currentScreen = 'achievements'; var title = new Text2("ACHIEVEMENTS", { size: 80, fill: 0xFFFFFF }); title.anchor.set(0.5, 0); title.x = 2048 / 2; title.y = 200; game.addChild(title); screenElements.push(title); var infoText = new Text2("Achievements coming soon!", { size: 50, fill: 0xFFFFFF }); infoText.anchor.set(0.5, 0); infoText.x = 2048 / 2; infoText.y = 400; game.addChild(infoText); screenElements.push(infoText); // Back button var backButton = new Button("BACK", 200, 80); backButton.x = 200; backButton.y = 200; game.addChild(backButton); screenElements.push(backButton); backButton.down = function () { tween(backButton.scale, { x: 0.95, y: 0.95 }, { duration: 100 }); }; backButton.up = function () { tween(backButton.scale, { x: 1, y: 1 }, { duration: 100, onFinish: function onFinish() { showHomeScreen(); } }); }; updateStatsDisplay(); } // Update function called by the game engine game.update = function () { // Game logic updates (if needed) }; // Event handling game.move = function (x, y, obj) { // Mouse/touch move handling }; game.down = function (x, y, obj) { // Mouse/touch down handling }; game.up = function (x, y, obj) { // Mouse/touch up handling };
===================================================================
--- original.js
+++ change.js
@@ -2136,41 +2136,221 @@
title.x = 2048 / 2;
title.y = 200;
game.addChild(title);
screenElements.push(title);
- var infoText = new Text2("Guess the cards!", {
- size: 50,
- fill: 0xFFFFFF
- });
- infoText.anchor.set(0.5, 0);
- infoText.x = 2048 / 2;
- infoText.y = 400;
- game.addChild(infoText);
- screenElements.push(infoText);
- var backButton = new Button("BACK", 200, 80);
- backButton.x = 200;
- backButton.y = 200;
- game.addChild(backButton);
- screenElements.push(backButton);
- backButton.down = function () {
- tween(backButton.scale, {
- x: 0.95,
- y: 0.95
- }, {
- duration: 100
+ // Game variables
+ var currentQuestion = 0;
+ var correctAnswers = 0;
+ var totalQuestions = 5;
+ var selectedCards = [];
+ var options = [];
+ var selectedAnswer = null;
+ // Select 5 random cards for the quiz
+ var allCards = CARD_DATABASE.slice();
+ for (var i = 0; i < totalQuestions; i++) {
+ var randomIndex = Math.floor(Math.random() * allCards.length);
+ selectedCards.push(allCards[randomIndex]);
+ allCards.splice(randomIndex, 1);
+ }
+ // Create description for the current card
+ function createCardDescription(card) {
+ var descriptions = {
+ 'Rodent': "This small animal has a long tail and likes to eat cheese.",
+ 'Avian': "This animal has wings and can fly through the air.",
+ 'Amphibian': "This animal can live both in water and on land.",
+ 'Insect': "This tiny creature has six legs and often has wings.",
+ 'Aquatic': "This animal lives in water and has fins for swimming.",
+ 'Mammal': "This animal has fur and feeds its young with milk.",
+ 'Reptile': "This cold-blooded animal has scales and often basks in the sun.",
+ 'Feline': "This graceful predator has sharp claws and excellent night vision.",
+ 'Primate': "This intelligent animal has opposable thumbs and is related to humans.",
+ 'Dinosaur': "This ancient reptile lived millions of years ago."
+ };
+ var specificDescriptions = {
+ 'Rat': "A small rodent with a long tail that's often found in cities.",
+ 'Pidgeon': "A common city bird with a cooing call.",
+ 'Frog': "An amphibian known for jumping and saying 'ribbit'.",
+ 'Beetle': "An insect with a hard shell covering its wings.",
+ 'Salmon': "A fish that swims upstream to lay eggs.",
+ 'Shark': "A fearsome predator of the seas with multiple rows of teeth.",
+ 'Wolf': "A wild canine that lives and hunts in packs.",
+ 'Bear': "A large omnivore that hibernates during winter.",
+ 'Lion': "The king of the jungle with a magnificent mane.",
+ 'Crocodile': "A reptile with powerful jaws that lives in water.",
+ 'Velociraptor': "A fast dinosaur with sharp claws that hunted in packs.",
+ 'T-REX': "The tyrant lizard king, the most fearsome dinosaur of all."
+ };
+ var baseDescription = descriptions[card.type] || "This animal is part of a diverse ecosystem.";
+ var specificDescription = specificDescriptions[card.name] || "";
+ // Combine descriptions if we have a specific one
+ if (specificDescription) {
+ return baseDescription + " " + specificDescription;
+ }
+ return baseDescription;
+ }
+ // Show current question
+ function showQuestion() {
+ clearScreen();
+ currentScreen = 'zookeeperMinigame';
+ // Add title
+ var title = new Text2("ZOOKEEPER QUIZ: QUESTION " + (currentQuestion + 1) + "/" + totalQuestions, {
+ size: 60,
+ fill: 0xFFFFFF
});
- };
- backButton.up = function () {
- tween(backButton.scale, {
- x: 1,
- y: 1
- }, {
- duration: 100,
- onFinish: function onFinish() {
- showJobsScreen();
- }
+ title.anchor.set(0.5, 0);
+ title.x = 2048 / 2;
+ title.y = 200;
+ game.addChild(title);
+ screenElements.push(title);
+ // Add description
+ var description = createCardDescription(selectedCards[currentQuestion]);
+ var questionText = new Text2("What animal is this?\n\n" + description, {
+ size: 40,
+ fill: 0xFFFFFF
});
- };
+ questionText.anchor.set(0.5, 0);
+ questionText.x = 2048 / 2;
+ questionText.y = 350;
+ game.addChild(questionText);
+ screenElements.push(questionText);
+ // Generate options (1 correct, 3 random)
+ options = [selectedCards[currentQuestion]];
+ var remainingCards = CARD_DATABASE.filter(function (card) {
+ return card.id !== selectedCards[currentQuestion].id;
+ });
+ // Add 3 random wrong answers
+ for (var i = 0; i < 3; i++) {
+ var randomIndex = Math.floor(Math.random() * remainingCards.length);
+ options.push(remainingCards[randomIndex]);
+ remainingCards.splice(randomIndex, 1);
+ }
+ // Shuffle options
+ for (var i = options.length - 1; i > 0; i--) {
+ var j = Math.floor(Math.random() * (i + 1));
+ var temp = options[i];
+ options[i] = options[j];
+ options[j] = temp;
+ }
+ // Add option buttons
+ for (var i = 0; i < options.length; i++) {
+ var optionButton = new Button(options[i].name, 600, 120);
+ optionButton.x = 2048 / 2;
+ optionButton.y = 700 + i * 200;
+ optionButton.optionIndex = i;
+ game.addChild(optionButton);
+ screenElements.push(optionButton);
+ optionButton.down = function () {
+ tween(this.scale, {
+ x: 0.95,
+ y: 0.95
+ }, {
+ duration: 100
+ });
+ };
+ optionButton.up = function () {
+ var self = this;
+ tween(self.scale, {
+ x: 1,
+ y: 1
+ }, {
+ duration: 100,
+ onFinish: function onFinish() {
+ // Check answer
+ selectedAnswer = options[self.optionIndex];
+ if (selectedAnswer.id === selectedCards[currentQuestion].id) {
+ correctAnswers++;
+ }
+ // Move to next question or show results
+ currentQuestion++;
+ if (currentQuestion < totalQuestions) {
+ showQuestion();
+ } else {
+ showResults();
+ }
+ }
+ });
+ };
+ }
+ // Back button
+ var backButton = new Button("QUIT", 200, 80);
+ backButton.x = 200;
+ backButton.y = 200;
+ game.addChild(backButton);
+ screenElements.push(backButton);
+ backButton.down = function () {
+ tween(backButton.scale, {
+ x: 0.95,
+ y: 0.95
+ }, {
+ duration: 100
+ });
+ };
+ backButton.up = function () {
+ tween(backButton.scale, {
+ x: 1,
+ y: 1
+ }, {
+ duration: 100,
+ onFinish: function onFinish() {
+ showJobsScreen();
+ }
+ });
+ };
+ }
+ // Show results at the end
+ function showResults() {
+ clearScreen();
+ currentScreen = 'zookeeperResults';
+ var title = new Text2("ZOOKEEPER QUIZ RESULTS", {
+ size: 80,
+ fill: 0xFFFFFF
+ });
+ title.anchor.set(0.5, 0);
+ title.x = 2048 / 2;
+ title.y = 200;
+ game.addChild(title);
+ screenElements.push(title);
+ var reward = correctAnswers * 50; // $50 per correct answer
+ var resultText = new Text2("You got " + correctAnswers + " out of " + totalQuestions + " correct!\n\nReward: $" + reward, {
+ size: 60,
+ fill: 0xFFFFFF
+ });
+ resultText.anchor.set(0.5, 0);
+ resultText.x = 2048 / 2;
+ resultText.y = 400;
+ game.addChild(resultText);
+ screenElements.push(resultText);
+ // Add money
+ storage.money += reward;
+ updateStatsDisplay();
+ // Return button
+ var returnButton = new Button("RETURN", 400, 120);
+ returnButton.x = 2048 / 2;
+ returnButton.y = 800;
+ game.addChild(returnButton);
+ screenElements.push(returnButton);
+ returnButton.down = function () {
+ tween(returnButton.scale, {
+ x: 0.95,
+ y: 0.95
+ }, {
+ duration: 100
+ });
+ };
+ returnButton.up = function () {
+ tween(returnButton.scale, {
+ x: 1,
+ y: 1
+ }, {
+ duration: 100,
+ onFinish: function onFinish() {
+ showJobsScreen();
+ }
+ });
+ };
+ }
+ // Start the game by showing the first question
+ showQuestion();
}
// Implement achievements screen (placeholder)
function showAchievementsScreen() {
clearScreen();
Light gray card packet with a hare in the center. In-Game asset. 2d. High contrast. No shadows
Green card packet with a Salamander in the center. In-Game asset. 2d. High contrast. No shadows
Orange card packet with a Rhino in the center. In-Game asset. 2d. High contrast. No shadows
Purple card packet with a Crocodile in the center. In-Game asset. 2d. High contrast. No shadows
Dark red card packet with a Whale in the center. In-Game asset. 2d. High contrast. No shadows
Rabbit. In-Game asset. 2d. High contrast. No shadows
Orange salamander. In-Game asset. 2d. High contrast. No shadows
Ant. In-Game asset. 2d. High contrast. No shadows
Pidgeon. In-Game asset. 2d. High contrast. No shadows
Pig. In-Game asset. 2d. High contrast. No shadows
Frog. In-Game asset. 2d. High contrast. No shadows
Rat. In-Game asset. 2d. High contrast. No shadows
Squirrel. In-Game asset. 2d. High contrast. No shadows
Salmon. In-Game asset. 2d. High contrast. No shadows
Fox. In-Game asset. 2d. High contrast. No shadows
Owl. In-Game asset. 2d. High contrast. No shadows
Silverback gorilla. In-Game asset. 2d. High contrast. No shadows
Ostrich. In-Game asset. 2d. High contrast. No shadows
Wolf. In-Game asset. 2d. High contrast. No shadows
Bear. In-Game asset. 2d. High contrast. No shadows
Hammerhead shark. In-Game asset. 2d. High contrast. No shadows
Lion. In-Game asset. 2d. High contrast. No shadows
Aggressive hippo. In-Game asset. 2d. High contrast. No shadows
Sperm whale. In-Game asset. 2d. High contrast. No shadows
Crocodile. In-Game asset. 2d. High contrast. No shadows
Lizard. In-Game asset. 2d. High contrast. No shadows
Dung beetle. In-Game asset. 2d. High contrast. No shadows
Duck. In-Game asset. 2d. High contrast. No shadows
Ankylosaurus. In-Game asset. 2d. High contrast. No shadows
Diplodocus. In-Game asset. 2d. High contrast. No shadows
Parasaur. In-Game asset. 2d. High contrast. No shadows
Pterodactyl. In-Game asset. 2d. High contrast. No shadows
A Yellow card pack with a T-TEX in the center
Spinosaurus. In-Game asset. 2d. High contrast. No shadows
Stegosaurus. In-Game asset. 2d. High contrast. No shadows
T-REX. In-Game asset. 2d. High contrast. No shadows
Triceratops. In-Game asset. 2d. High contrast. No shadows
Raptor. In-Game asset. 2d. High contrast. No shadows
White card packet with a "?" Sign in the middle. In-Game asset. 2d. High contrast. No shadows
Cat. In-Game asset. 2d. High contrast. No shadows
Cheetah. In-Game asset. 2d. High contrast. No shadows
Penguin. In-Game asset. 2d. High contrast. No shadows
Cobra. In-Game asset. 2d. High contrast. No shadows
Snake. In-Game asset. 2d. High contrast. No shadows
Rhino. In-Game asset. 2d. High contrast. No shadows
Card packet made out of stone with a Tribal drawing of people Hunting a wolly Mammoth. In-Game asset. 2d. High contrast. No shadows
Mammoth. In-Game asset. 2d. High contrast. No shadows
Dodo. In-Game asset. 2d. High contrast. No shadows
Megalodon. In-Game asset. 2d. High contrast. No shadows
Sabertooth tiger. In-Game asset. 2d. High contrast. No shadows
Wooly Rhino. In-Game asset. 2d. High contrast. No shadows
Giant bat. In-Game asset. 2d. High contrast. No shadows
Moose. In-Game asset. 2d. High contrast. No shadows
Wasp. In-Game asset. 2d. High contrast. No shadows
Seal. In-Game asset. 2d. High contrast. No shadows
Eagle. In-Game asset. 2d. High contrast. No shadows
Make the outlines on my character a dark black
Elephant. In-Game asset. 2d. High contrast. No shadows
Gem. In-Game asset. 2d. High contrast. No shadows
Remove the background
Remove the background
RE.MO.VE. THE. BACKGROUND!
Remove the background
Remove the baccground
Remove the background
Remov the bagroud