Code edit (1 edits merged)
Please save this source code
User prompt
Toca Friends Village
Initial prompt
Toca friends (2014-2015). Tap on twitter’s house 🐦, jacky’s house 🐰, Harvey’s house 🐶, ginger’s house 🐱, or buzzy’s house 🐹 to get started, tap on the doorbell to ring it from the beginning, tap on feeding mode, sleeping mode, bath mode, balloon blowing mode, or bubble blowing mode to get started.
/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); /**** * Classes ****/ var ActivityButton = Container.expand(function (activity, x, y) { var self = Container.call(this); self.activity = activity; var buttonGraphics = self.attachAsset(activity + 'Button', { anchorX: 0.5, anchorY: 0.5 }); var buttonText = new Text2(activity.charAt(0).toUpperCase() + activity.slice(1), { size: 30, fill: 0xFFFFFF }); buttonText.anchor.set(0.5, 0.5); buttonText.y = 5; self.addChild(buttonText); self.x = x; self.y = y; self.down = function () { tween(buttonGraphics, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); tween(buttonGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100 }); LK.setTimeout(function () { startActivity(activity); }, 200); }; return self; }); var Balloon = Container.expand(function () { var self = Container.call(this); var balloonGraphics = self.attachAsset('balloon', { anchorX: 0.5, anchorY: 1.0 }); var colors = [0xFF1493, 0x00BFFF, 0x32CD32, 0xFFD700, 0xFF6347]; balloonGraphics.tint = colors[Math.floor(Math.random() * colors.length)]; self.speedY = -1 - Math.random() * 2; self.speedX = (Math.random() - 0.5) * 1; self.update = function () { self.y += self.speedY; self.x += self.speedX; if (self.y < -150) { self.destroy(); var index = balloons.indexOf(self); if (index > -1) { balloons.splice(index, 1); } } }; self.down = function () { currentCharacterObj.playHappyAnimation(); tween(self, { alpha: 0, scaleX: 1.5, scaleY: 1.5 }, { duration: 400, onFinish: function onFinish() { self.destroy(); var index = balloons.indexOf(self); if (index > -1) { balloons.splice(index, 1); } } }); }; return self; }); var Bubble = Container.expand(function () { var self = Container.call(this); var bubbleGraphics = self.attachAsset('bubble', { anchorX: 0.5, anchorY: 0.5 }); bubbleGraphics.alpha = 0.7; self.speedY = -2 - Math.random() * 3; self.speedX = (Math.random() - 0.5) * 2; self.update = function () { self.y += self.speedY; self.x += self.speedX; if (self.y < -100) { self.destroy(); var index = bubbles.indexOf(self); if (index > -1) { bubbles.splice(index, 1); } } }; self.down = function () { LK.getSound('bubble').play(); tween(self, { alpha: 0, scaleX: 2, scaleY: 2 }, { duration: 300, onFinish: function onFinish() { self.destroy(); var index = bubbles.indexOf(self); if (index > -1) { bubbles.splice(index, 1); } } }); }; return self; }); var Character = Container.expand(function (characterName) { var self = Container.call(this); self.characterName = characterName; var characterGraphics = self.attachAsset('character', { anchorX: 0.5, anchorY: 0.5 }); var colors = { 'Twitter': 0x00BFFF, 'Jacky': 0xFF6347, 'Harvey': 0x32CD32, 'Ginger': 0xFFA500, 'Buzzy': 0xFFD700 }; characterGraphics.tint = colors[characterName] || 0x8B4513; self.x = 1024; self.y = 1000; self.playHappyAnimation = function () { tween(characterGraphics, { scaleX: 1.2, scaleY: 1.2 }, { duration: 300 }); tween(characterGraphics, { scaleX: 1.0, scaleY: 1.0 }, { duration: 300 }); LK.getSound('happy').play(); }; return self; }); var Food = Container.expand(function () { var self = Container.call(this); var foodGraphics = self.attachAsset('food', { anchorX: 0.5, anchorY: 0.5 }); self.eaten = false; self.down = function () { if (!self.eaten) { self.eaten = true; currentCharacterObj.playHappyAnimation(); tween(self, { alpha: 0, scaleX: 0.1, scaleY: 0.1 }, { duration: 500, onFinish: function onFinish() { self.destroy(); } }); } }; return self; }); var House = Container.expand(function (houseId, color, name, x, y) { var self = Container.call(this); self.houseId = houseId; self.characterName = name; var houseGraphics = self.attachAsset('house' + houseId, { anchorX: 0.5, anchorY: 1.0 }); var doorbell = self.attachAsset('doorbell', { anchorX: 0.5, anchorY: 0.5, x: 120, y: -150 }); var nameText = new Text2(name, { size: 40, fill: 0xFFFFFF }); nameText.anchor.set(0.5, 0.5); nameText.x = 0; nameText.y = -350; self.addChild(nameText); self.x = x; self.y = y; self.down = function (x, y, obj) { var localPos = self.toLocal(obj.parent.toGlobal(obj.position)); if (localPos.x > 80 && localPos.x < 160 && localPos.y > -180 && localPos.y < -120) { LK.getSound('doorbell').play(); tween(doorbell, { scaleX: 1.2, scaleY: 1.2 }, { duration: 200 }); tween(doorbell, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200 }); LK.setTimeout(function () { currentState = 'character'; currentCharacter = self.characterName; showCharacterScreen(); }, 400); } }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x87CEEB }); /**** * Game Code ****/ var currentState = 'village'; var currentCharacter = ''; var currentCharacterObj = null; var currentActivity = ''; var houses = []; var activityButtons = []; var foods = []; var bubbles = []; var balloons = []; var titleText = new Text2('Toca Friends Village', { size: 80, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0); LK.gui.top.addChild(titleText); var backButton = null; function createVillage() { var houseData = [{ name: 'Twitter', x: 400, y: 1200 }, { name: 'Jacky', x: 900, y: 1200 }, { name: 'Harvey', x: 1400, y: 1200 }, { name: 'Ginger', x: 400, y: 1800 }, { name: 'Buzzy', x: 900, y: 1800 }]; for (var i = 0; i < houseData.length; i++) { var houseInfo = houseData[i]; var house = new House(i + 1, 0xFF6B9D, houseInfo.name, houseInfo.x, houseInfo.y); houses.push(house); game.addChild(house); } } function showCharacterScreen() { clearVillage(); currentCharacterObj = new Character(currentCharacter); game.addChild(currentCharacterObj); var activities = ['feed', 'sleep', 'bath', 'balloon', 'bubble']; var buttonPositions = [{ x: 300, y: 1600 }, { x: 500, y: 1600 }, { x: 700, y: 1600 }, { x: 900, y: 1600 }, { x: 1100, y: 1600 }]; for (var i = 0; i < activities.length; i++) { var button = new ActivityButton(activities[i], buttonPositions[i].x, buttonPositions[i].y); activityButtons.push(button); game.addChild(button); } createBackButton(); } function startActivity(activity) { currentActivity = activity; clearActivityButtons(); if (activity === 'feed') { startFeedingActivity(); } else if (activity === 'sleep') { startSleepingActivity(); } else if (activity === 'bath') { startBathingActivity(); } else if (activity === 'balloon') { startBalloonActivity(); } else if (activity === 'bubble') { startBubbleActivity(); } } function startFeedingActivity() { for (var i = 0; i < 6; i++) { var food = new Food(); food.x = 300 + i % 3 * 200 + Math.random() * 100; food.y = 1400 + Math.floor(i / 3) * 150 + Math.random() * 100; foods.push(food); game.addChild(food); } } function startSleepingActivity() { currentCharacterObj.playHappyAnimation(); tween(currentCharacterObj, { alpha: 0.5 }, { duration: 2000 }); tween(currentCharacterObj, { alpha: 1.0 }, { duration: 2000 }); } function startBathingActivity() { currentCharacterObj.playHappyAnimation(); tween(currentCharacterObj, { tint: 0x87CEEB }, { duration: 1000 }); tween(currentCharacterObj, { tint: 0xFFFFFF }, { duration: 1000 }); } function startBalloonActivity() { // Balloons will be created on tap } function startBubbleActivity() { // Bubbles will be created on tap } function createBackButton() { backButton = game.addChild(LK.getAsset('backButton', { anchorX: 0.5, anchorY: 0.5, x: 1024, y: 2000 })); var backText = new Text2('Back', { size: 30, fill: 0xFFFFFF }); backText.anchor.set(0.5, 0.5); backText.x = 1024; backText.y = 2000; game.addChild(backText); } function clearVillage() { for (var i = 0; i < houses.length; i++) { houses[i].destroy(); } houses = []; } function clearActivityButtons() { for (var i = 0; i < activityButtons.length; i++) { activityButtons[i].destroy(); } activityButtons = []; } function clearActivity() { for (var i = 0; i < foods.length; i++) { foods[i].destroy(); } foods = []; for (var i = 0; i < bubbles.length; i++) { bubbles[i].destroy(); } bubbles = []; for (var i = 0; i < balloons.length; i++) { balloons[i].destroy(); } balloons = []; currentActivity = ''; } function returnToVillage() { currentState = 'village'; currentCharacter = ''; if (currentCharacterObj) { currentCharacterObj.destroy(); currentCharacterObj = null; } if (backButton) { backButton.destroy(); backButton = null; } clearActivityButtons(); clearActivity(); createVillage(); } game.down = function (x, y, obj) { if (currentState === 'character' && backButton) { var globalPos = obj.parent.toGlobal(obj.position); var localPos = game.toLocal(globalPos); if (localPos.x > 974 && localPos.x < 1074 && localPos.y > 1970 && localPos.y < 2030) { returnToVillage(); return; } } if (currentActivity === 'balloon') { var balloon = new Balloon(); balloon.x = x + Math.random() * 100 - 50; balloon.y = y; balloons.push(balloon); game.addChild(balloon); } else if (currentActivity === 'bubble') { var bubble = new Bubble(); bubble.x = x + Math.random() * 50 - 25; bubble.y = y; bubbles.push(bubble); game.addChild(bubble); LK.getSound('bubble').play(); } }; game.update = function () { for (var i = bubbles.length - 1; i >= 0; i--) { if (bubbles[i] && bubbles[i].update) { bubbles[i].update(); } } for (var i = balloons.length - 1; i >= 0; i--) { if (balloons[i] && balloons[i].update) { balloons[i].update(); } } }; createVillage();
===================================================================
--- original.js
+++ change.js
@@ -1,6 +1,465 @@
-/****
+/****
+* Plugins
+****/
+var tween = LK.import("@upit/tween.v1");
+
+/****
+* Classes
+****/
+var ActivityButton = Container.expand(function (activity, x, y) {
+ var self = Container.call(this);
+ self.activity = activity;
+ var buttonGraphics = self.attachAsset(activity + 'Button', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var buttonText = new Text2(activity.charAt(0).toUpperCase() + activity.slice(1), {
+ size: 30,
+ fill: 0xFFFFFF
+ });
+ buttonText.anchor.set(0.5, 0.5);
+ buttonText.y = 5;
+ self.addChild(buttonText);
+ self.x = x;
+ self.y = y;
+ self.down = function () {
+ tween(buttonGraphics, {
+ scaleX: 0.9,
+ scaleY: 0.9
+ }, {
+ duration: 100
+ });
+ tween(buttonGraphics, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 100
+ });
+ LK.setTimeout(function () {
+ startActivity(activity);
+ }, 200);
+ };
+ return self;
+});
+var Balloon = Container.expand(function () {
+ var self = Container.call(this);
+ var balloonGraphics = self.attachAsset('balloon', {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ var colors = [0xFF1493, 0x00BFFF, 0x32CD32, 0xFFD700, 0xFF6347];
+ balloonGraphics.tint = colors[Math.floor(Math.random() * colors.length)];
+ self.speedY = -1 - Math.random() * 2;
+ self.speedX = (Math.random() - 0.5) * 1;
+ self.update = function () {
+ self.y += self.speedY;
+ self.x += self.speedX;
+ if (self.y < -150) {
+ self.destroy();
+ var index = balloons.indexOf(self);
+ if (index > -1) {
+ balloons.splice(index, 1);
+ }
+ }
+ };
+ self.down = function () {
+ currentCharacterObj.playHappyAnimation();
+ tween(self, {
+ alpha: 0,
+ scaleX: 1.5,
+ scaleY: 1.5
+ }, {
+ duration: 400,
+ onFinish: function onFinish() {
+ self.destroy();
+ var index = balloons.indexOf(self);
+ if (index > -1) {
+ balloons.splice(index, 1);
+ }
+ }
+ });
+ };
+ return self;
+});
+var Bubble = Container.expand(function () {
+ var self = Container.call(this);
+ var bubbleGraphics = self.attachAsset('bubble', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ bubbleGraphics.alpha = 0.7;
+ self.speedY = -2 - Math.random() * 3;
+ self.speedX = (Math.random() - 0.5) * 2;
+ self.update = function () {
+ self.y += self.speedY;
+ self.x += self.speedX;
+ if (self.y < -100) {
+ self.destroy();
+ var index = bubbles.indexOf(self);
+ if (index > -1) {
+ bubbles.splice(index, 1);
+ }
+ }
+ };
+ self.down = function () {
+ LK.getSound('bubble').play();
+ tween(self, {
+ alpha: 0,
+ scaleX: 2,
+ scaleY: 2
+ }, {
+ duration: 300,
+ onFinish: function onFinish() {
+ self.destroy();
+ var index = bubbles.indexOf(self);
+ if (index > -1) {
+ bubbles.splice(index, 1);
+ }
+ }
+ });
+ };
+ return self;
+});
+var Character = Container.expand(function (characterName) {
+ var self = Container.call(this);
+ self.characterName = characterName;
+ var characterGraphics = self.attachAsset('character', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ var colors = {
+ 'Twitter': 0x00BFFF,
+ 'Jacky': 0xFF6347,
+ 'Harvey': 0x32CD32,
+ 'Ginger': 0xFFA500,
+ 'Buzzy': 0xFFD700
+ };
+ characterGraphics.tint = colors[characterName] || 0x8B4513;
+ self.x = 1024;
+ self.y = 1000;
+ self.playHappyAnimation = function () {
+ tween(characterGraphics, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 300
+ });
+ tween(characterGraphics, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 300
+ });
+ LK.getSound('happy').play();
+ };
+ return self;
+});
+var Food = Container.expand(function () {
+ var self = Container.call(this);
+ var foodGraphics = self.attachAsset('food', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.eaten = false;
+ self.down = function () {
+ if (!self.eaten) {
+ self.eaten = true;
+ currentCharacterObj.playHappyAnimation();
+ tween(self, {
+ alpha: 0,
+ scaleX: 0.1,
+ scaleY: 0.1
+ }, {
+ duration: 500,
+ onFinish: function onFinish() {
+ self.destroy();
+ }
+ });
+ }
+ };
+ return self;
+});
+var House = Container.expand(function (houseId, color, name, x, y) {
+ var self = Container.call(this);
+ self.houseId = houseId;
+ self.characterName = name;
+ var houseGraphics = self.attachAsset('house' + houseId, {
+ anchorX: 0.5,
+ anchorY: 1.0
+ });
+ var doorbell = self.attachAsset('doorbell', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 120,
+ y: -150
+ });
+ var nameText = new Text2(name, {
+ size: 40,
+ fill: 0xFFFFFF
+ });
+ nameText.anchor.set(0.5, 0.5);
+ nameText.x = 0;
+ nameText.y = -350;
+ self.addChild(nameText);
+ self.x = x;
+ self.y = y;
+ self.down = function (x, y, obj) {
+ var localPos = self.toLocal(obj.parent.toGlobal(obj.position));
+ if (localPos.x > 80 && localPos.x < 160 && localPos.y > -180 && localPos.y < -120) {
+ LK.getSound('doorbell').play();
+ tween(doorbell, {
+ scaleX: 1.2,
+ scaleY: 1.2
+ }, {
+ duration: 200
+ });
+ tween(doorbell, {
+ scaleX: 1.0,
+ scaleY: 1.0
+ }, {
+ duration: 200
+ });
+ LK.setTimeout(function () {
+ currentState = 'character';
+ currentCharacter = self.characterName;
+ showCharacterScreen();
+ }, 400);
+ }
+ };
+ return self;
+});
+
+/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000
-});
\ No newline at end of file
+ backgroundColor: 0x87CEEB
+});
+
+/****
+* Game Code
+****/
+var currentState = 'village';
+var currentCharacter = '';
+var currentCharacterObj = null;
+var currentActivity = '';
+var houses = [];
+var activityButtons = [];
+var foods = [];
+var bubbles = [];
+var balloons = [];
+var titleText = new Text2('Toca Friends Village', {
+ size: 80,
+ fill: 0xFFFFFF
+});
+titleText.anchor.set(0.5, 0);
+LK.gui.top.addChild(titleText);
+var backButton = null;
+function createVillage() {
+ var houseData = [{
+ name: 'Twitter',
+ x: 400,
+ y: 1200
+ }, {
+ name: 'Jacky',
+ x: 900,
+ y: 1200
+ }, {
+ name: 'Harvey',
+ x: 1400,
+ y: 1200
+ }, {
+ name: 'Ginger',
+ x: 400,
+ y: 1800
+ }, {
+ name: 'Buzzy',
+ x: 900,
+ y: 1800
+ }];
+ for (var i = 0; i < houseData.length; i++) {
+ var houseInfo = houseData[i];
+ var house = new House(i + 1, 0xFF6B9D, houseInfo.name, houseInfo.x, houseInfo.y);
+ houses.push(house);
+ game.addChild(house);
+ }
+}
+function showCharacterScreen() {
+ clearVillage();
+ currentCharacterObj = new Character(currentCharacter);
+ game.addChild(currentCharacterObj);
+ var activities = ['feed', 'sleep', 'bath', 'balloon', 'bubble'];
+ var buttonPositions = [{
+ x: 300,
+ y: 1600
+ }, {
+ x: 500,
+ y: 1600
+ }, {
+ x: 700,
+ y: 1600
+ }, {
+ x: 900,
+ y: 1600
+ }, {
+ x: 1100,
+ y: 1600
+ }];
+ for (var i = 0; i < activities.length; i++) {
+ var button = new ActivityButton(activities[i], buttonPositions[i].x, buttonPositions[i].y);
+ activityButtons.push(button);
+ game.addChild(button);
+ }
+ createBackButton();
+}
+function startActivity(activity) {
+ currentActivity = activity;
+ clearActivityButtons();
+ if (activity === 'feed') {
+ startFeedingActivity();
+ } else if (activity === 'sleep') {
+ startSleepingActivity();
+ } else if (activity === 'bath') {
+ startBathingActivity();
+ } else if (activity === 'balloon') {
+ startBalloonActivity();
+ } else if (activity === 'bubble') {
+ startBubbleActivity();
+ }
+}
+function startFeedingActivity() {
+ for (var i = 0; i < 6; i++) {
+ var food = new Food();
+ food.x = 300 + i % 3 * 200 + Math.random() * 100;
+ food.y = 1400 + Math.floor(i / 3) * 150 + Math.random() * 100;
+ foods.push(food);
+ game.addChild(food);
+ }
+}
+function startSleepingActivity() {
+ currentCharacterObj.playHappyAnimation();
+ tween(currentCharacterObj, {
+ alpha: 0.5
+ }, {
+ duration: 2000
+ });
+ tween(currentCharacterObj, {
+ alpha: 1.0
+ }, {
+ duration: 2000
+ });
+}
+function startBathingActivity() {
+ currentCharacterObj.playHappyAnimation();
+ tween(currentCharacterObj, {
+ tint: 0x87CEEB
+ }, {
+ duration: 1000
+ });
+ tween(currentCharacterObj, {
+ tint: 0xFFFFFF
+ }, {
+ duration: 1000
+ });
+}
+function startBalloonActivity() {
+ // Balloons will be created on tap
+}
+function startBubbleActivity() {
+ // Bubbles will be created on tap
+}
+function createBackButton() {
+ backButton = game.addChild(LK.getAsset('backButton', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1024,
+ y: 2000
+ }));
+ var backText = new Text2('Back', {
+ size: 30,
+ fill: 0xFFFFFF
+ });
+ backText.anchor.set(0.5, 0.5);
+ backText.x = 1024;
+ backText.y = 2000;
+ game.addChild(backText);
+}
+function clearVillage() {
+ for (var i = 0; i < houses.length; i++) {
+ houses[i].destroy();
+ }
+ houses = [];
+}
+function clearActivityButtons() {
+ for (var i = 0; i < activityButtons.length; i++) {
+ activityButtons[i].destroy();
+ }
+ activityButtons = [];
+}
+function clearActivity() {
+ for (var i = 0; i < foods.length; i++) {
+ foods[i].destroy();
+ }
+ foods = [];
+ for (var i = 0; i < bubbles.length; i++) {
+ bubbles[i].destroy();
+ }
+ bubbles = [];
+ for (var i = 0; i < balloons.length; i++) {
+ balloons[i].destroy();
+ }
+ balloons = [];
+ currentActivity = '';
+}
+function returnToVillage() {
+ currentState = 'village';
+ currentCharacter = '';
+ if (currentCharacterObj) {
+ currentCharacterObj.destroy();
+ currentCharacterObj = null;
+ }
+ if (backButton) {
+ backButton.destroy();
+ backButton = null;
+ }
+ clearActivityButtons();
+ clearActivity();
+ createVillage();
+}
+game.down = function (x, y, obj) {
+ if (currentState === 'character' && backButton) {
+ var globalPos = obj.parent.toGlobal(obj.position);
+ var localPos = game.toLocal(globalPos);
+ if (localPos.x > 974 && localPos.x < 1074 && localPos.y > 1970 && localPos.y < 2030) {
+ returnToVillage();
+ return;
+ }
+ }
+ if (currentActivity === 'balloon') {
+ var balloon = new Balloon();
+ balloon.x = x + Math.random() * 100 - 50;
+ balloon.y = y;
+ balloons.push(balloon);
+ game.addChild(balloon);
+ } else if (currentActivity === 'bubble') {
+ var bubble = new Bubble();
+ bubble.x = x + Math.random() * 50 - 25;
+ bubble.y = y;
+ bubbles.push(bubble);
+ game.addChild(bubble);
+ LK.getSound('bubble').play();
+ }
+};
+game.update = function () {
+ for (var i = bubbles.length - 1; i >= 0; i--) {
+ if (bubbles[i] && bubbles[i].update) {
+ bubbles[i].update();
+ }
+ }
+ for (var i = balloons.length - 1; i >= 0; i--) {
+ if (balloons[i] && balloons[i].update) {
+ balloons[i].update();
+ }
+ }
+};
+createVillage();
\ No newline at end of file