User prompt
Fait en sorte que la personnalisation de chats fonctionne ! āŖš” Consider importing and using the following plugins: @upit/storage.v1
User prompt
Du coup ajoute les diffeĢrents types de chats dans les assets pour qu'ils remplacent le chat par deĢfaut quand le joueur modifie son chat
User prompt
Ajoute ces fonctionnaliteĢs au jeu Cating : - le joueur peut deĢsormais personnaliser son chat (type de chat), le joueur peut choisir et acheter un nouveau type de chat pour son chat en acceĢdant au bouton violet a texte blanc "š½ Cat'pers", le joueur peut alors acheter et choisir le type de son chat de son chat parmi les diffeĢrentes fourrures et types de chats disponibles, voici la liste : 1) chat de base (prix : 0 croquettes, c'est le chat de base existant que le joueur a par deĢfaut) 2) Cutie princesse (prix : 15 croquettes, c'est un chat femelle de peluche rose treĢs mignonne) 3) Spider'cat (prix : 10 croquettes, c'est un chat maĢle qui aime les araigneĢes et spider man) 4) Bee cat (prix : 18 croquettes) 5) White cat (prix : 16 croquettes) 6) Chat fan de fruits (prix : 25 croquettes) 7) Pro-cat (prix : 30 croquettes) Le chat personnaliseĢ , acheteĢ et choisi remplace le chat par deĢfaut !, āŖš” Consider importing and using the following plugins: @upit/storage.v1
User prompt
Ajoute ces nouvelles fonctionnaliteĢs/nouveauteĢs dans Cating : - possibiliteĢ pour le joueur de choisir un nom pour son chat : Il doit y avoir une base de donneĢes de 68 noms de chats diffeĢrents, Le joueur peut choisir le nom de son chat en appuyant sur un bouton bleu a texte blanc "Nommer mon chat", Quand le joueur appuie dessus, un eĢcran apparaiĢt, ou le jeu propose 3 noms de chats aleĢatoires parmi sa base de donneĢes, le joueur peut alors choisir lequel il veut pour son chat en appuyant sur le bouton "choice" a coĢteĢ du nom choisis dans l'eĢcran, Si aucun nom proposeĢ ne lui plaiĢt , Le joueur peut appuyer sur un Bouton "GeĢneĢrer 3 nouveaux noms", pour que le jeu geĢneĢre 3 autres noms de chats aleĢatoires parmi sa base de donneĢes, Le joueur peut changer le nom de son chat quand il le veut via cet eĢcran le nom du chat est afficheĢ sur l'ui du joueur, et est sauvegarde āŖš” Consider importing and using the following plugins: @upit/storage.v1
User prompt
Je veux personnaliseĢ le fond du jeu avec mon propre asset
User prompt
Ajoute la musique dans le jeu en boucle en musique de fond
User prompt
Joue la musique dans le jeu en boucle
User prompt
Ajoute une musique de fond en boucle au jeu correctement
User prompt
Ajoute une musique de fond en boucle au jeu
Code edit (1 edits merged)
Please save this source code
User prompt
Cating - Virtual Cat Care Adventure
Initial prompt
CreĢe le jeu "Cating", Voici la description du gameplay, de l'univers et des meĢcaniques : Cating est un jeu dans lequel le joueur doit eĢlever un chaton, il doit s'en occuper et il peut le personnaliser, Plus le joueur monte en niveau , plus le chaton grandit et vieillit, Quand son chat meurt, le jeu se termine et la progression du joueur est reĢinitialiser, Mais le joueur peut y rejouer , il redeĢmarrera le jeu avec un autre chaton ! la progression du joueur doit eĢtre sauvegardeĢe tant que son chat nest pas mort, voici ce que le joueur peut faire dans le jeu, pour s'occuper de son chat, le personnaliseĢ et monter en niveau : Nombre de niveaux du jeu : 150 (le chat meurt au niveau 150), Le joueur monte en niveau, fur a mesure qu'il s'occupe de son chat et le personnalise, Pour s'en occuper le joueur peut : - le nourrir (avec des croquettes de poissons, que le joueur obtient en reĢpondant a des quizz sur les chats) , a chaque fois que le joueur nourrit son chat, le joueur gagne 5 XP de niveau, Chaque nourrissage du chat couĢte 10 croquettes de poissons Le joueur peut nourir son chat en appuyant sur un boutton rose a texte blanc "nourir", - le caresser (en appuyant sur son chat avec son doigt a l'eĢcran) - cela donne 3 croquettes de poissons au joueur a chaque fois qu'il caresse son chat, mais le joueur ne peut caresser son chat que une fois toute les minutes - l'endormir (en appuyant sur un emoji de lune en haut de son eĢcran, cela couĢte 30 croquettes de poissons, et donne 15 XP au joueur, le joueur peut alors reappuyer sur un nouveau emoji de soleil pour reĢveiller son chat) - changer sa litieĢre (en appuyant sur un boutton turquoise a texte noir "Changer la litieĢre", cela couĢte 14 croquettes de poissons, le joueur doit le refaire toutes les 3 minutes de jeux) Maintenant pour personnaliser son chat le joueur peut : - Lui acheter des jouets dans une boutique (Accessible en appuyant sur un emoji de boutique), Un eĢcran de boutique s'ouvre alors ouĢ le joueur peut acheter des articles (avec des prix en croquettes de poissons), pour personnaliser l'espace de son chat , voici les jouets et articles disponibles : 1) Peluche de chien (prix : 10 croquettes de poissons) 2) poisson en plastique (prix : 20 croquettes de poissons) 3) bandeau rose ou bleu (prix : 30 croquettes de poissons) 4) Souris (prix : 40 croquettes de poissons) Le joueur peut acheter un article en appuyant sur un bouton "choisir" en face de l'article dans la boutique ! il faut 100 XP au joueur pour passer du niveau 1 au niveau 2, Et aĢ chaque niveau le nombre d'xp requis est double
/**** * Plugins ****/ var storage = LK.import("@upit/storage.v1", { level: 1, xp: 0, kibble: 50, lastPetTime: 0, lastLitterTime: 0, ownedItems: [], catName: "Unnamed", catType: "basic", ownedCatTypes: ["basic"] }); var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var Cat = Container.expand(function () { var self = Container.call(this); var catSprite = self.attachAsset('cat', { anchorX: 0.5, anchorY: 0.5 }); self.accessories = []; self.catSprite = catSprite; self.setCatType = function (typeId) { switch (typeId) { case 'princess': self.catSprite.tint = 0xFFB6C1; // Light pink break; case 'spider': self.catSprite.tint = 0x8B0000; // Dark red break; case 'bee': self.catSprite.tint = 0xFFD700; // Gold/yellow break; case 'white': self.catSprite.tint = 0xF5F5F5; // White gray break; case 'fruit': self.catSprite.tint = 0xFF69B4; // Hot pink break; case 'pro': self.catSprite.tint = 0x4169E1; // Royal blue break; default: // basic self.catSprite.tint = 0xFFFFFF; // Normal break; } }; self.addAccessory = function (itemType) { var accessory = self.addChild(LK.getAsset(itemType, { anchorX: 0.5, anchorY: 0.5 })); if (itemType === 'pinkHeadband' || itemType === 'blueHeadband') { accessory.y = -120; } else { accessory.x = Math.random() * 100 - 50; accessory.y = Math.random() * 100 - 50; } self.accessories.push(accessory); }; self.animate = function () { tween(catSprite, { scaleX: 1.1, scaleY: 1.1 }, { duration: 300, easing: tween.easeInOut, onFinish: function onFinish() { tween(catSprite, { scaleX: 1, scaleY: 1 }, { duration: 300, easing: tween.easeInOut }); } }); }; return self; }); var CatCustomization = Container.expand(function () { var self = Container.call(this); var panel = self.attachAsset('shopPanel', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2('Cat\'pers - Personnalisez votre chat', { size: 45, fill: 0x333333 }); titleText.anchor.set(0.5, 0.5); titleText.y = -500; self.addChild(titleText); var closeBtn = self.addChild(new GameButton('closeButton', 'Close', 700, -500)); self.catTypeButtons = []; self.setupCatTypes = function () { // Clear existing buttons for (var i = 0; i < self.catTypeButtons.length; i++) { self.removeChild(self.catTypeButtons[i]); } self.catTypeButtons = []; for (var i = 0; i < catTypes.length; i++) { var catType = catTypes[i]; var yPos = -350 + i * 100; var nameText = new Text2(catType.name, { size: 35, fill: 0x333333 }); nameText.anchor.set(0, 0.5); nameText.x = -350; nameText.y = yPos; self.addChild(nameText); var priceText = new Text2(catType.price + ' croquettes', { size: 30, fill: 0x666666 }); priceText.anchor.set(0, 0.5); priceText.x = -350; priceText.y = yPos + 35; self.addChild(priceText); var isOwned = ownedCatTypes.indexOf(catType.id) !== -1; var isCurrent = currentCatType === catType.id; var buttonText = isCurrent ? 'Actuel' : isOwned ? 'Choisir' : 'Acheter'; var button = self.addChild(new GameButton('buyButton', buttonText, 300, yPos)); button.catTypeId = catType.id; button.catTypePrice = catType.price; button.isOwned = isOwned; button.isCurrent = isCurrent; if (isCurrent) { button.attachAsset('buyButton', {}).tint = 0x4CAF50; // Green for current } else if (isOwned) { button.attachAsset('buyButton', {}).tint = 0x2196F3; // Blue for owned } self.catTypeButtons.push(button); } }; closeBtn.up = function () { closeBtn.parent.parent.alpha = 0.7; self.visible = false; }; self.visible = false; return self; }); var CatNaming = Container.expand(function () { var self = Container.call(this); var panel = self.attachAsset('shopPanel', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2('Choose Your Cat\'s Name', { size: 50, fill: 0x333333 }); titleText.anchor.set(0.5, 0.5); titleText.y = -500; self.addChild(titleText); var closeBtn = self.addChild(new GameButton('closeButton', 'Close', 700, -500)); self.nameOptions = []; self.choiceButtons = []; self.generateNames = function () { var shuffled = catNames.slice(); for (var i = shuffled.length - 1; i > 0; i--) { var j = Math.floor(Math.random() * (i + 1)); var temp = shuffled[i]; shuffled[i] = shuffled[j]; shuffled[j] = temp; } return [shuffled[0], shuffled[1], shuffled[2]]; }; self.setupNameOptions = function () { // Clear existing options for (var i = 0; i < self.nameOptions.length; i++) { self.removeChild(self.nameOptions[i]); } for (var i = 0; i < self.choiceButtons.length; i++) { self.removeChild(self.choiceButtons[i]); } self.nameOptions = []; self.choiceButtons = []; var names = self.generateNames(); for (var i = 0; i < 3; i++) { var yPos = -200 + i * 120; var nameText = new Text2(names[i], { size: 45, fill: 0x333333 }); nameText.anchor.set(0.5, 0.5); nameText.x = -100; nameText.y = yPos; self.addChild(nameText); self.nameOptions.push(nameText); var choiceBtn = self.addChild(new GameButton('buyButton', 'Choose', 300, yPos)); choiceBtn.catName = names[i]; self.choiceButtons.push(choiceBtn); } }; var generateBtn = self.addChild(new GameButton('buyButton', 'Generate 3 New Names', 0, 200)); generateBtn.up = function () { generateBtn.parent.parent.alpha = 0.7; self.setupNameOptions(); }; closeBtn.up = function () { closeBtn.parent.parent.alpha = 0.7; self.visible = false; }; self.visible = false; return self; }); var GameButton = Container.expand(function (assetId, text, x, y) { var self = Container.call(this); var buttonSprite = self.attachAsset(assetId, { anchorX: 0.5, anchorY: 0.5 }); var buttonText = new Text2(text, { size: 40, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); self.addChild(buttonText); self.x = x; self.y = y; self.down = function () { buttonSprite.alpha = 0.7; }; self.up = function () { buttonSprite.alpha = 1.0; }; return self; }); var Shop = Container.expand(function () { var self = Container.call(this); var panel = self.attachAsset('shopPanel', { anchorX: 0.5, anchorY: 0.5 }); var titleText = new Text2('Shop', { size: 60, fill: 0x333333 }); titleText.anchor.set(0.5, 0.5); titleText.y = -500; self.addChild(titleText); var closeBtn = self.addChild(new GameButton('closeButton', 'Close', 700, -500)); var items = [{ name: 'Dog Plushie', asset: 'dogPlushie', price: 10, id: 'dogPlushie' }, { name: 'Plastic Fish', asset: 'plasticFish', price: 20, id: 'plasticFish' }, { name: 'Pink Headband', asset: 'pinkHeadband', price: 30, id: 'pinkHeadband' }, { name: 'Blue Headband', asset: 'blueHeadband', price: 30, id: 'blueHeadband' }, { name: 'Mouse Toy', asset: 'mouseToy', price: 40, id: 'mouseToy' }]; self.itemButtons = []; for (var i = 0; i < items.length; i++) { var item = items[i]; var yPos = -200 + i * 150; var itemSprite = self.addChild(LK.getAsset(item.asset, { anchorX: 0.5, anchorY: 0.5, x: -300, y: yPos })); var nameText = new Text2(item.name, { size: 40, fill: 0x333333 }); nameText.anchor.set(0, 0.5); nameText.x = -200; nameText.y = yPos; self.addChild(nameText); var priceText = new Text2(item.price + ' kibble', { size: 35, fill: 0x666666 }); priceText.anchor.set(0, 0.5); priceText.x = -200; priceText.y = yPos + 40; self.addChild(priceText); var buyBtn = self.addChild(new GameButton('buyButton', 'Buy', 400, yPos)); buyBtn.itemId = item.id; buyBtn.price = item.price; self.itemButtons.push(buyBtn); } closeBtn.up = function () { closeBtn.parent.parent.alpha = 0.7; self.visible = false; }; self.visible = false; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var catNames = ['Shadow', 'Luna', 'Mittens', 'Whiskers', 'Simba', 'Nala', 'Felix', 'Garfield', 'Smokey', 'Tiger', 'Oreo', 'Patches', 'Boots', 'Socks', 'Pepper', 'Salt', 'Coco', 'Mimi', 'Bella', 'Charlie', 'Max', 'Oscar', 'Leo', 'Milo', 'Jasper', 'Oliver', 'Jack', 'Toby', 'George', 'Sam', 'Lucky', 'Buddy', 'Princess', 'Angel', 'Baby', 'Honey', 'Sugar', 'Cookie', 'Peanut', 'Ginger', 'Snowball', 'Fluffy', 'Fuzzy', 'Cuddles', 'Snuggles', 'Bubbles', 'Sparkles', 'Twinkle', 'Storm', 'Thunder', 'Lightning', 'Blaze', 'Flame', 'Ember', 'Ash', 'Dusty', 'Ruby', 'Emerald', 'Sapphire', 'Diamond', 'Pearl', 'Crystal', 'Jewel', 'Treasure', 'Magic', 'Mystery', 'Wonder', 'Dream']; var catTypes = [{ id: 'basic', name: 'Chat de base', price: 0, asset: 'cat' }, { id: 'princess', name: 'Cutie princesse', price: 15, asset: 'cat' }, { id: 'spider', name: 'Spider\'cat', price: 10, asset: 'cat' }, { id: 'bee', name: 'Bee cat', price: 18, asset: 'cat' }, { id: 'white', name: 'White cat', price: 16, asset: 'cat' }, { id: 'fruit', name: 'Chat fan de fruits', price: 25, asset: 'cat' }, { id: 'pro', name: 'Pro-cat', price: 30, asset: 'cat' }]; var currentLevel = storage.level; var currentXP = storage.xp; var currentKibble = storage.kibble; var lastPetTime = storage.lastPetTime; var lastLitterTime = storage.lastLitterTime; var ownedItems = storage.ownedItems || []; var currentCatName = storage.catName || 'Unnamed'; var currentCatType = storage.catType || 'basic'; var ownedCatTypes = storage.ownedCatTypes || ['basic']; var xpRequired = 100 * Math.pow(2, currentLevel - 1); // Add custom background var backgroundImage = game.addChild(LK.getAsset('customBackground', { anchorX: 0.5, anchorY: 0.5 })); backgroundImage.x = 1024; backgroundImage.y = 1366; var cat = game.addChild(new Cat()); cat.x = 1024; cat.y = 800; // Add owned accessories to cat for (var i = 0; i < ownedItems.length; i++) { cat.addAccessory(ownedItems[i]); } // UI Elements var levelText = new Text2('Level: ' + currentLevel, { size: 50, fill: 0x333333 }); levelText.anchor.set(0, 0); levelText.x = 120; levelText.y = 150; LK.gui.topLeft.addChild(levelText); var xpText = new Text2('XP: ' + currentXP + '/' + xpRequired, { size: 40, fill: 0x333333 }); xpText.anchor.set(0, 0); xpText.x = 120; xpText.y = 220; LK.gui.topLeft.addChild(xpText); var kibbleText = new Text2('Kibble: ' + currentKibble, { size: 45, fill: 0x333333 }); kibbleText.anchor.set(1, 0); LK.gui.topRight.addChild(kibbleText); // Cat name display var catNameText = new Text2('Cat: ' + currentCatName, { size: 40, fill: 0x333333 }); catNameText.anchor.set(0.5, 0); catNameText.y = 100; LK.gui.top.addChild(catNameText); // Name cat button var nameCatBtn = game.addChild(new GameButton('buyButton', 'Nommer mon chat', 824, 150)); nameCatBtn.attachAsset('buyButton', {}).tint = 0x2196F3; // Cat customization button var catCustomBtn = game.addChild(new GameButton('buyButton', 'Cat\'pers', 1224, 150)); catCustomBtn.attachAsset('buyButton', {}).tint = 0x9C27B0; // Purple // Action Buttons var feedBtn = game.addChild(new GameButton('feedButton', 'Feed (10)', 300, 2200)); var petBtn = game.addChild(new GameButton('petButton', 'Pet', 600, 2200)); var sleepBtn = game.addChild(new GameButton('sleepButton', 'Sleep (30)', 900, 2200)); var litterBtn = game.addChild(new GameButton('litterButton', 'Clean (14)', 1200, 2200)); var shopBtn = game.addChild(new GameButton('shopButton', 'Shop', 1500, 2200)); // Shop var shop = game.addChild(new Shop()); shop.x = 1024; shop.y = 1366; // Cat Naming Interface var catNaming = game.addChild(new CatNaming()); catNaming.x = 1024; catNaming.y = 1366; catNaming.setupNameOptions(); // Cat Customization Interface var catCustomization = game.addChild(new CatCustomization()); catCustomization.x = 1024; catCustomization.y = 1366; catCustomization.setupCatTypes(); // Set initial cat type cat.setCatType(currentCatType); // Pet cooldown indicator var petCooldownText = new Text2('', { size: 30, fill: 0xFF0000 }); petCooldownText.anchor.set(0.5, 0); petCooldownText.x = 600; petCooldownText.y = 2280; game.addChild(petCooldownText); // Litter box indicator var litterIndicator = new Text2('', { size: 30, fill: 0xFF0000 }); litterIndicator.anchor.set(0.5, 0); litterIndicator.x = 1200; litterIndicator.y = 2280; game.addChild(litterIndicator); function updateUI() { levelText.setText('Level: ' + currentLevel); xpText.setText('XP: ' + currentXP + '/' + xpRequired); kibbleText.setText('Kibble: ' + currentKibble); catNameText.setText('Cat: ' + currentCatName); storage.level = currentLevel; storage.xp = currentXP; storage.kibble = currentKibble; storage.lastPetTime = lastPetTime; storage.lastLitterTime = lastLitterTime; storage.ownedItems = ownedItems; storage.catName = currentCatName; storage.catType = currentCatType; storage.ownedCatTypes = ownedCatTypes; } function gainXP(amount) { currentXP += amount; if (currentXP >= xpRequired) { currentLevel++; currentXP -= xpRequired; xpRequired = 100 * Math.pow(2, currentLevel - 1); if (currentLevel >= 150) { LK.setTimeout(function () { // Reset everything storage.level = 1; storage.xp = 0; storage.kibble = 50; storage.lastPetTime = 0; storage.lastLitterTime = 0; storage.ownedItems = []; LK.showGameOver(); }, 2000); } LK.effects.flashScreen(0xFFD700, 1000); } updateUI(); // Start background music in loop LK.playMusic('backgroundMusic'); } // Button handlers feedBtn.up = function () { feedBtn.parent.parent.alpha = 0.7; if (currentKibble >= 10) { currentKibble -= 10; gainXP(5); cat.animate(); LK.getSound('meow').play(); } }; petBtn.up = function () { petBtn.parent.parent.alpha = 0.7; var currentTime = Date.now(); if (currentTime - lastPetTime >= 60000) { currentKibble += 3; lastPetTime = currentTime; cat.animate(); LK.getSound('purr').play(); updateUI(); } }; sleepBtn.up = function () { sleepBtn.parent.parent.alpha = 0.7; if (currentKibble >= 30) { currentKibble -= 30; gainXP(15); cat.animate(); tween(cat, { alpha: 0.5 }, { duration: 1000, onFinish: function onFinish() { tween(cat, { alpha: 1 }, { duration: 1000 }); } }); } }; litterBtn.up = function () { litterBtn.parent.parent.alpha = 0.7; if (currentKibble >= 14) { currentKibble -= 14; lastLitterTime = Date.now(); updateUI(); } }; shopBtn.up = function () { shopBtn.parent.parent.alpha = 0.7; shop.visible = true; }; nameCatBtn.up = function () { nameCatBtn.parent.parent.alpha = 0.7; catNaming.visible = true; }; catCustomBtn.up = function () { catCustomBtn.parent.parent.alpha = 0.7; catCustomization.visible = true; catCustomization.setupCatTypes(); }; // Cat customization choice handlers for (var i = 0; i < catCustomization.catTypeButtons.length; i++) { var catTypeBtn = catCustomization.catTypeButtons[i]; catTypeBtn.up = function () { this.parent.parent.alpha = 0.7; if (this.isCurrent) { // Already current type, do nothing return; } if (this.isOwned) { // Switch to owned cat type currentCatType = this.catTypeId; cat.setCatType(currentCatType); updateUI(); catCustomization.visible = false; } else { // Try to buy cat type if (currentKibble >= this.catTypePrice) { currentKibble -= this.catTypePrice; ownedCatTypes.push(this.catTypeId); currentCatType = this.catTypeId; cat.setCatType(currentCatType); LK.getSound('purchase').play(); updateUI(); catCustomization.visible = false; } } }; } // Cat naming choice handlers for (var i = 0; i < catNaming.choiceButtons.length; i++) { var choiceBtn = catNaming.choiceButtons[i]; choiceBtn.up = function () { this.parent.parent.alpha = 0.7; currentCatName = this.catName; updateUI(); catNaming.visible = false; }; } // Shop buy handlers for (var i = 0; i < shop.itemButtons.length; i++) { var btn = shop.itemButtons[i]; btn.up = function () { this.parent.parent.alpha = 0.7; if (currentKibble >= this.price && ownedItems.indexOf(this.itemId) === -1) { currentKibble -= this.price; ownedItems.push(this.itemId); cat.addAccessory(this.itemId); LK.getSound('purchase').play(); updateUI(); } }; } game.update = function () { var currentTime = Date.now(); // Pet cooldown var petCooldown = 60000 - (currentTime - lastPetTime); if (petCooldown > 0) { petCooldownText.setText('Pet: ' + Math.ceil(petCooldown / 1000) + 's'); } else { petCooldownText.setText(''); } // Litter box timer var litterTime = currentTime - lastLitterTime; if (litterTime >= 180000) { litterIndicator.setText('Clean needed!'); } else { var remainingTime = 180000 - litterTime; litterIndicator.setText('Clean in: ' + Math.ceil(remainingTime / 1000) + 's'); } }; updateUI();
===================================================================
--- original.js
+++ change.js
@@ -7,9 +7,11 @@
kibble: 50,
lastPetTime: 0,
lastLitterTime: 0,
ownedItems: [],
- catName: "Unnamed"
+ catName: "Unnamed",
+ catType: "basic",
+ ownedCatTypes: ["basic"]
});
var tween = LK.import("@upit/tween.v1");
/****
@@ -21,8 +23,35 @@
anchorX: 0.5,
anchorY: 0.5
});
self.accessories = [];
+ self.catSprite = catSprite;
+ self.setCatType = function (typeId) {
+ switch (typeId) {
+ case 'princess':
+ self.catSprite.tint = 0xFFB6C1; // Light pink
+ break;
+ case 'spider':
+ self.catSprite.tint = 0x8B0000; // Dark red
+ break;
+ case 'bee':
+ self.catSprite.tint = 0xFFD700; // Gold/yellow
+ break;
+ case 'white':
+ self.catSprite.tint = 0xF5F5F5; // White gray
+ break;
+ case 'fruit':
+ self.catSprite.tint = 0xFF69B4; // Hot pink
+ break;
+ case 'pro':
+ self.catSprite.tint = 0x4169E1; // Royal blue
+ break;
+ default:
+ // basic
+ self.catSprite.tint = 0xFFFFFF; // Normal
+ break;
+ }
+ };
self.addAccessory = function (itemType) {
var accessory = self.addChild(LK.getAsset(itemType, {
anchorX: 0.5,
anchorY: 0.5
@@ -54,8 +83,71 @@
});
};
return self;
});
+var CatCustomization = Container.expand(function () {
+ var self = Container.call(this);
+ var panel = self.attachAsset('shopPanel', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var titleText = new Text2('Cat\'pers - Personnalisez votre chat', {
+ size: 45,
+ fill: 0x333333
+ });
+ titleText.anchor.set(0.5, 0.5);
+ titleText.y = -500;
+ self.addChild(titleText);
+ var closeBtn = self.addChild(new GameButton('closeButton', 'Close', 700, -500));
+ self.catTypeButtons = [];
+ self.setupCatTypes = function () {
+ // Clear existing buttons
+ for (var i = 0; i < self.catTypeButtons.length; i++) {
+ self.removeChild(self.catTypeButtons[i]);
+ }
+ self.catTypeButtons = [];
+ for (var i = 0; i < catTypes.length; i++) {
+ var catType = catTypes[i];
+ var yPos = -350 + i * 100;
+ var nameText = new Text2(catType.name, {
+ size: 35,
+ fill: 0x333333
+ });
+ nameText.anchor.set(0, 0.5);
+ nameText.x = -350;
+ nameText.y = yPos;
+ self.addChild(nameText);
+ var priceText = new Text2(catType.price + ' croquettes', {
+ size: 30,
+ fill: 0x666666
+ });
+ priceText.anchor.set(0, 0.5);
+ priceText.x = -350;
+ priceText.y = yPos + 35;
+ self.addChild(priceText);
+ var isOwned = ownedCatTypes.indexOf(catType.id) !== -1;
+ var isCurrent = currentCatType === catType.id;
+ var buttonText = isCurrent ? 'Actuel' : isOwned ? 'Choisir' : 'Acheter';
+ var button = self.addChild(new GameButton('buyButton', buttonText, 300, yPos));
+ button.catTypeId = catType.id;
+ button.catTypePrice = catType.price;
+ button.isOwned = isOwned;
+ button.isCurrent = isCurrent;
+ if (isCurrent) {
+ button.attachAsset('buyButton', {}).tint = 0x4CAF50; // Green for current
+ } else if (isOwned) {
+ button.attachAsset('buyButton', {}).tint = 0x2196F3; // Blue for owned
+ }
+ self.catTypeButtons.push(button);
+ }
+ };
+ closeBtn.up = function () {
+ closeBtn.parent.parent.alpha = 0.7;
+ self.visible = false;
+ };
+ self.visible = false;
+ return self;
+});
var CatNaming = Container.expand(function () {
var self = Container.call(this);
var panel = self.attachAsset('shopPanel', {
anchorX: 0.5,
@@ -231,15 +323,53 @@
/****
* Game Code
****/
var catNames = ['Shadow', 'Luna', 'Mittens', 'Whiskers', 'Simba', 'Nala', 'Felix', 'Garfield', 'Smokey', 'Tiger', 'Oreo', 'Patches', 'Boots', 'Socks', 'Pepper', 'Salt', 'Coco', 'Mimi', 'Bella', 'Charlie', 'Max', 'Oscar', 'Leo', 'Milo', 'Jasper', 'Oliver', 'Jack', 'Toby', 'George', 'Sam', 'Lucky', 'Buddy', 'Princess', 'Angel', 'Baby', 'Honey', 'Sugar', 'Cookie', 'Peanut', 'Ginger', 'Snowball', 'Fluffy', 'Fuzzy', 'Cuddles', 'Snuggles', 'Bubbles', 'Sparkles', 'Twinkle', 'Storm', 'Thunder', 'Lightning', 'Blaze', 'Flame', 'Ember', 'Ash', 'Dusty', 'Ruby', 'Emerald', 'Sapphire', 'Diamond', 'Pearl', 'Crystal', 'Jewel', 'Treasure', 'Magic', 'Mystery', 'Wonder', 'Dream'];
+var catTypes = [{
+ id: 'basic',
+ name: 'Chat de base',
+ price: 0,
+ asset: 'cat'
+}, {
+ id: 'princess',
+ name: 'Cutie princesse',
+ price: 15,
+ asset: 'cat'
+}, {
+ id: 'spider',
+ name: 'Spider\'cat',
+ price: 10,
+ asset: 'cat'
+}, {
+ id: 'bee',
+ name: 'Bee cat',
+ price: 18,
+ asset: 'cat'
+}, {
+ id: 'white',
+ name: 'White cat',
+ price: 16,
+ asset: 'cat'
+}, {
+ id: 'fruit',
+ name: 'Chat fan de fruits',
+ price: 25,
+ asset: 'cat'
+}, {
+ id: 'pro',
+ name: 'Pro-cat',
+ price: 30,
+ asset: 'cat'
+}];
var currentLevel = storage.level;
var currentXP = storage.xp;
var currentKibble = storage.kibble;
var lastPetTime = storage.lastPetTime;
var lastLitterTime = storage.lastLitterTime;
var ownedItems = storage.ownedItems || [];
var currentCatName = storage.catName || 'Unnamed';
+var currentCatType = storage.catType || 'basic';
+var ownedCatTypes = storage.ownedCatTypes || ['basic'];
var xpRequired = 100 * Math.pow(2, currentLevel - 1);
// Add custom background
var backgroundImage = game.addChild(LK.getAsset('customBackground', {
anchorX: 0.5,
@@ -285,10 +415,13 @@
catNameText.anchor.set(0.5, 0);
catNameText.y = 100;
LK.gui.top.addChild(catNameText);
// Name cat button
-var nameCatBtn = game.addChild(new GameButton('buyButton', 'Nommer mon chat', 1024, 150));
+var nameCatBtn = game.addChild(new GameButton('buyButton', 'Nommer mon chat', 824, 150));
nameCatBtn.attachAsset('buyButton', {}).tint = 0x2196F3;
+// Cat customization button
+var catCustomBtn = game.addChild(new GameButton('buyButton', 'Cat\'pers', 1224, 150));
+catCustomBtn.attachAsset('buyButton', {}).tint = 0x9C27B0; // Purple
// Action Buttons
var feedBtn = game.addChild(new GameButton('feedButton', 'Feed (10)', 300, 2200));
var petBtn = game.addChild(new GameButton('petButton', 'Pet', 600, 2200));
var sleepBtn = game.addChild(new GameButton('sleepButton', 'Sleep (30)', 900, 2200));
@@ -302,8 +435,15 @@
var catNaming = game.addChild(new CatNaming());
catNaming.x = 1024;
catNaming.y = 1366;
catNaming.setupNameOptions();
+// Cat Customization Interface
+var catCustomization = game.addChild(new CatCustomization());
+catCustomization.x = 1024;
+catCustomization.y = 1366;
+catCustomization.setupCatTypes();
+// Set initial cat type
+cat.setCatType(currentCatType);
// Pet cooldown indicator
var petCooldownText = new Text2('', {
size: 30,
fill: 0xFF0000
@@ -332,8 +472,10 @@
storage.lastPetTime = lastPetTime;
storage.lastLitterTime = lastLitterTime;
storage.ownedItems = ownedItems;
storage.catName = currentCatName;
+ storage.catType = currentCatType;
+ storage.ownedCatTypes = ownedCatTypes;
}
function gainXP(amount) {
currentXP += amount;
if (currentXP >= xpRequired) {
@@ -414,8 +556,42 @@
nameCatBtn.up = function () {
nameCatBtn.parent.parent.alpha = 0.7;
catNaming.visible = true;
};
+catCustomBtn.up = function () {
+ catCustomBtn.parent.parent.alpha = 0.7;
+ catCustomization.visible = true;
+ catCustomization.setupCatTypes();
+};
+// Cat customization choice handlers
+for (var i = 0; i < catCustomization.catTypeButtons.length; i++) {
+ var catTypeBtn = catCustomization.catTypeButtons[i];
+ catTypeBtn.up = function () {
+ this.parent.parent.alpha = 0.7;
+ if (this.isCurrent) {
+ // Already current type, do nothing
+ return;
+ }
+ if (this.isOwned) {
+ // Switch to owned cat type
+ currentCatType = this.catTypeId;
+ cat.setCatType(currentCatType);
+ updateUI();
+ catCustomization.visible = false;
+ } else {
+ // Try to buy cat type
+ if (currentKibble >= this.catTypePrice) {
+ currentKibble -= this.catTypePrice;
+ ownedCatTypes.push(this.catTypeId);
+ currentCatType = this.catTypeId;
+ cat.setCatType(currentCatType);
+ LK.getSound('purchase').play();
+ updateUI();
+ catCustomization.visible = false;
+ }
+ }
+ };
+}
// Cat naming choice handlers
for (var i = 0; i < catNaming.choiceButtons.length; i++) {
var choiceBtn = catNaming.choiceButtons[i];
choiceBtn.up = function () {
Chat (animal). In-Game asset. 2d. High contrast. No shadows
feed boutton. In-Game asset. 2d. High contrast. No shadows
dogPlushie. In-Game asset. 2d. High contrast. No shadows
petButton. In-Game asset. 2d. High contrast. No shadows
buyButton. In-Game asset. 2d. High contrast. No shadows
sleepButton. In-Game asset. 2d. High contrast. No shadows
litterButton. In-Game asset. 2d. High contrast. No shadows
shopButton. In-Game asset. 2d. High contrast. No shadows
shopPanel. In-Game asset. 2d. High contrast. No shadows
plasticFish. In-Game asset. 2d. High contrast. No shadows
pinkHeadband. In-Game asset. 2d. High contrast. No shadows
blueHeadband. In-Game asset. 2d. High contrast. No shadows
mouseToy. In-Game asset. 2d. High contrast. No shadows
Fond d'eĢcran appartement. In-Game asset. 2d. High contrast. No shadows
Chat (animal) a la fourrure couleur abeille et avec des ailes. In-Game asset. 2d. High contrast. No shadows
Chat (animal) a la fourrure araigneĢes. In-Game asset. 2d. High contrast. No shadows
Chatonne (fille chat) au pelage rose princesse avec un diadeĢme de princesse sur la teĢte. In-Game asset. 2d. High contrast. No shadows
White cat. In-Game asset. 2d. High contrast. No shadows
Chat (animal), au pelage couleur fruit. In-Game asset. 2d. High contrast. No shadows
Cat avec des lunettes et un cravate. In-Game asset. 2d. High contrast. No shadows