/**** * Plugins ****/ var tween = LK.import("@upit/tween.v1"); var storage = LK.import("@upit/storage.v1", { level: 1, score: 0, highScore: 0 }); /**** * Classes ****/ var ImageContainer = Container.expand(function (imageKey, letter) { var self = Container.call(this); // Create the image box background var box = self.attachAsset('imageBox', { anchorX: 0.5, anchorY: 0.7, alpha: 0 // Make the image box transparent }); // Attach the actual image asset var imageAsset = self.attachAsset(imageKey, { anchorX: 0.5, anchorY: 0.5 }); self.addChild(imageAsset); // Letter label below the image var letterLabel = new Text2("(" + letter + ")", { size: 50, fill: 0x333333 }); letterLabel.anchor.set(0.5, 0); letterLabel.y = 70; self.addChild(letterLabel); // Properties self.imageKey = imageKey; self.letter = letter; self.matched = false; // Mark as matched self.markMatched = function () { if (!self.matched) { self.matched = true; // Visual feedback for matched state tween(box, { tint: 0x66cc66 }, { duration: 300 }); // Add a checkmark or similar var checkmark = new Text2("✓", { size: 70, fill: 0x00AA00 }); checkmark.anchor.set(0.5, 0.5); checkmark.y = -50; checkmark.x = 50; self.addChild(checkmark); } }; return self; }); var Letter = Container.expand(function (letter, imageKey) { var self = Container.call(this); // Create the letter box background var box = self.attachAsset('letterBox', { anchorX: 0.5, anchorY: 0.5 }); // Add letter text var letterText = new Text2(letter, { size: 80, fill: 0xFFFFFF }); letterText.anchor.set(0.5, 0.5); self.addChild(letterText); // Properties self.letter = letter; self.imageKey = imageKey; self.speed = 1 + Math.random() * 1.5; // Varying fall speeds self.matched = false; self.dragging = false; self.originalX = 0; self.originalY = 0; // Interactive properties self.interactive = true; // Event handlers self.down = function (x, y, obj) { if (!self.matched) { self.dragging = true; self.originalX = self.x; self.originalY = self.y; // Bring to front by re-adding to parent var parent = self.parent; if (parent) { parent.removeChild(self); parent.addChild(self); } // Scale up slightly to indicate selection tween(self, { scaleX: 1.1, scaleY: 1.1 }, { duration: 200 }); // Set drag target dragTarget = self; } }; self.up = function (x, y, obj) { if (self.dragging) { self.dragging = false; // Check if letter intersects with any image container var matched = false; for (var i = 0; i < imageContainers.length; i++) { if (self.intersects(imageContainers[i]) && self.imageKey === imageContainers[i].imageKey) { // Correct match! matched = true; self.matched = true; // Award points LK.setScore(LK.getScore() + 10); scoreTxt.setText(LK.getScore()); // Play correct sound LK.getSound('correct').play(); // Play voice note for correct match LK.getSound(self.imageKey + 'Voice').play(); // Animate to center of image tween(self, { x: imageContainers[i].x, y: imageContainers[i].y, scaleX: 0.9, scaleY: 0.9 }, { duration: 300, easing: tween.easeOut, onFinish: function onFinish() { // Celebrate with a bounce tween(self, { scaleX: 1.0, scaleY: 1.0 }, { duration: 200, easing: tween.bounceOut }); // Mark image as matched imageContainers[i].markMatched(); // Check if level is complete checkLevelComplete(); } }); break; } } if (!matched) { // Return to original position if not matched LK.getSound('wrong').play(); tween(self, { x: self.originalX, y: self.originalY, scaleX: 1.0, scaleY: 1.0 }, { duration: 300, easing: tween.easeOut }); } } }; self.update = function () { if (!self.dragging && !self.matched) { self.y += self.speed; // If letter goes off screen, reset it if (self.y > 2732 + 100) { self.y = -100; self.x = 200 + Math.random() * (2048 - 400); } } }; return self; }); var LevelCompleteMessage = Container.expand(function () { var self = Container.call(this); // Create background var bg = LK.getAsset('letterBox', { anchorX: 0.5, anchorY: 0.5, width: 1000, height: 600, tint: 0x00AA00 }); self.addChild(bg); // Title text var titleText = new Text2("Level Complete!", { size: 100, fill: 0xFFFFFF }); titleText.anchor.set(0.5, 0.5); titleText.y = -150; self.addChild(titleText); // Score text var scoreText = new Text2("Score: 0", { size: 70, fill: 0xFFFFFF }); scoreText.anchor.set(0.5, 0.5); scoreText.y = 0; self.addChild(scoreText); // Update score self.updateScore = function (score) { scoreText.setText("Score: " + score); }; // Next button var nextButton = new Text2("NEXT LEVEL", { size: 80, fill: 0xFFFF00 }); nextButton.anchor.set(0.5, 0.5); nextButton.y = 150; nextButton.interactive = true; nextButton.down = function () { tween(nextButton, { scaleX: 0.9, scaleY: 0.9 }, { duration: 100 }); }; nextButton.up = function () { tween(nextButton, { scaleX: 1.0, scaleY: 1.0 }, { duration: 100, onFinish: function onFinish() { self.onNextLevel(); } }); }; self.addChild(nextButton); // Event handler for next level button self.onNextLevel = function () { // To be set by the game }; return self; }); /**** * Initialize Game ****/ var game = new LK.Game({ backgroundColor: 0x000000 // Always backgroundColor is black }); /**** * Game Code ****/ // Add background image var backgroundImage = LK.getAsset('backgroundImage', { anchorX: 0.5, anchorY: 0.5, x: 2048 / 2, y: 2732 / 2 }); game.addChild(backgroundImage); // Initialize the first level var level = storage.level || 1; var lettersInPlay = []; var imageContainers = []; var levelComplete = false; var levelCompleteMessage = null; // Define letter-image pairs for different levels var levelData = [ // Level 1: Simple letters A-E { letters: [{ letter: 'A', image: 'apple' }, { letter: 'B', image: 'ball' }, { letter: 'C', image: 'cat' }, { letter: 'D', image: 'dog' }, { letter: 'E', image: 'elephant' }] }, // Level 2: F-J { letters: [{ letter: 'F', image: 'fish' }, { letter: 'G', image: 'goat' }, { letter: 'H', image: 'hat' }, { letter: 'I', image: 'ice' }, { letter: 'J', image: 'jam' }] }, // Level 3: K-O { letters: [{ letter: 'K', image: 'kite' }, { letter: 'L', image: 'lion' }, { letter: 'M', image: 'monkey' }, { letter: 'N', image: 'nest' }, { letter: 'O', image: 'orange' }] }, // Level 4: P-T { letters: [{ letter: 'P', image: 'panda' }, { letter: 'Q', image: 'queen' }, { letter: 'R', image: 'rabbit' }, { letter: 'S', image: 'sun' }, { letter: 'T', image: 'tiger' }] }, // Level 5: U-Z { letters: [{ letter: 'U', image: 'umbrella' }, { letter: 'V', image: 'violin' }, { letter: 'W', image: 'whale' }, { letter: 'X', image: 'xylophone' }, { letter: 'Y', image: 'yacht' }, { letter: 'Z', image: 'zebra' }] }]; // Make sure we don't exceed available levels if (level > levelData.length) { level = 1; storage.level = 1; } // Level indicator var levelTxt = new Text2("Level " + level, { size: 80, fill: 0x333333 }); levelTxt.anchor.set(0.5, 0); levelTxt.y = 30; LK.gui.top.addChild(levelTxt); // Score display var scoreTxt = new Text2("0", { size: 80, fill: 0x333333 }); scoreTxt.anchor.set(0, 0); scoreTxt.x = 150; scoreTxt.y = 30; LK.gui.topRight.addChild(scoreTxt); // Initialize score LK.setScore(0); scoreTxt.setText("0"); // Function to initialize level function initLevel(levelNumber) { // Clear any existing objects clearLevel(); // Set level text levelTxt.setText("Level " + levelNumber); // Get current level data var currentLevelData = levelData[levelNumber - 1]; // Create image containers at the bottom var containerSpacing = 2048 / (currentLevelData.letters.length + 1); for (var i = 0; i < currentLevelData.letters.length; i++) { var imageContainer = new ImageContainer(currentLevelData.letters[i].image, currentLevelData.letters[i].letter); imageContainer.x = containerSpacing * (i + 1); imageContainer.y = 2732 - 300; game.addChild(imageContainer); imageContainers.push(imageContainer); } // Shuffle letters var shuffledLetters = currentLevelData.letters.slice().sort(function () { return Math.random() - 0.5; }); // Create falling letters for (var i = 0; i < shuffledLetters.length; i++) { var letter = new Letter(shuffledLetters[i].letter, shuffledLetters[i].image); letter.x = containerSpacing * (i + 1); // Align with image containers letter.y = -200 - i * 300; // Stagger the starting positions game.addChild(letter); lettersInPlay.push(letter); } // Reset level complete flag levelComplete = false; } // Function to clear level function clearLevel() { // Remove all letters for (var i = 0; i < lettersInPlay.length; i++) { if (lettersInPlay[i].parent) { lettersInPlay[i].parent.removeChild(lettersInPlay[i]); } } lettersInPlay = []; // Remove all image containers for (var i = 0; i < imageContainers.length; i++) { if (imageContainers[i].parent) { imageContainers[i].parent.removeChild(imageContainers[i]); } } imageContainers = []; // Remove level complete message if present if (levelCompleteMessage && levelCompleteMessage.parent) { levelCompleteMessage.parent.removeChild(levelCompleteMessage); levelCompleteMessage = null; } } // Function to check if level is complete function checkLevelComplete() { // Check if all images are matched var allMatched = true; for (var i = 0; i < imageContainers.length; i++) { if (!imageContainers[i].matched) { allMatched = false; break; } } if (allMatched && !levelComplete) { // Play level complete sound effect LK.getSound('levelComplete').play(); levelComplete = true; // Save progress storage.score = LK.getScore(); if (LK.getScore() > (storage.highScore || 0)) { storage.highScore = LK.getScore(); } // Show level complete message levelCompleteMessage = new LevelCompleteMessage(); levelCompleteMessage.x = 2048 / 2; levelCompleteMessage.y = 2732 / 2; levelCompleteMessage.updateScore(LK.getScore()); levelCompleteMessage.onNextLevel = function () { // Increment level level++; storage.level = level; // If we've completed all levels, go back to level 1 if (level > levelData.length) { level = 1; storage.level = 1; LK.showYouWin(); } else { // Start next level initLevel(level); } }; game.addChild(levelCompleteMessage); } } // Handle dragging var dragTarget = null; game.down = function (x, y, obj) { // The letter objects handle their own down events }; game.up = function (x, y, obj) { // The letter objects handle their own up events dragTarget = null; }; game.move = function (x, y, obj) { // Move the dragged letter if (dragTarget) { dragTarget.x = x; dragTarget.y = y; } }; // Game update loop game.update = function () { // Nothing needed here - objects handle their own updates }; // Initialize the first level initLevel(level); // Play background music LK.playMusic('bgMusic', { fade: { start: 0, end: 0.4, duration: 1000 } });
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
var storage = LK.import("@upit/storage.v1", {
level: 1,
score: 0,
highScore: 0
});
/****
* Classes
****/
var ImageContainer = Container.expand(function (imageKey, letter) {
var self = Container.call(this);
// Create the image box background
var box = self.attachAsset('imageBox', {
anchorX: 0.5,
anchorY: 0.7,
alpha: 0 // Make the image box transparent
});
// Attach the actual image asset
var imageAsset = self.attachAsset(imageKey, {
anchorX: 0.5,
anchorY: 0.5
});
self.addChild(imageAsset);
// Letter label below the image
var letterLabel = new Text2("(" + letter + ")", {
size: 50,
fill: 0x333333
});
letterLabel.anchor.set(0.5, 0);
letterLabel.y = 70;
self.addChild(letterLabel);
// Properties
self.imageKey = imageKey;
self.letter = letter;
self.matched = false;
// Mark as matched
self.markMatched = function () {
if (!self.matched) {
self.matched = true;
// Visual feedback for matched state
tween(box, {
tint: 0x66cc66
}, {
duration: 300
});
// Add a checkmark or similar
var checkmark = new Text2("✓", {
size: 70,
fill: 0x00AA00
});
checkmark.anchor.set(0.5, 0.5);
checkmark.y = -50;
checkmark.x = 50;
self.addChild(checkmark);
}
};
return self;
});
var Letter = Container.expand(function (letter, imageKey) {
var self = Container.call(this);
// Create the letter box background
var box = self.attachAsset('letterBox', {
anchorX: 0.5,
anchorY: 0.5
});
// Add letter text
var letterText = new Text2(letter, {
size: 80,
fill: 0xFFFFFF
});
letterText.anchor.set(0.5, 0.5);
self.addChild(letterText);
// Properties
self.letter = letter;
self.imageKey = imageKey;
self.speed = 1 + Math.random() * 1.5; // Varying fall speeds
self.matched = false;
self.dragging = false;
self.originalX = 0;
self.originalY = 0;
// Interactive properties
self.interactive = true;
// Event handlers
self.down = function (x, y, obj) {
if (!self.matched) {
self.dragging = true;
self.originalX = self.x;
self.originalY = self.y;
// Bring to front by re-adding to parent
var parent = self.parent;
if (parent) {
parent.removeChild(self);
parent.addChild(self);
}
// Scale up slightly to indicate selection
tween(self, {
scaleX: 1.1,
scaleY: 1.1
}, {
duration: 200
});
// Set drag target
dragTarget = self;
}
};
self.up = function (x, y, obj) {
if (self.dragging) {
self.dragging = false;
// Check if letter intersects with any image container
var matched = false;
for (var i = 0; i < imageContainers.length; i++) {
if (self.intersects(imageContainers[i]) && self.imageKey === imageContainers[i].imageKey) {
// Correct match!
matched = true;
self.matched = true;
// Award points
LK.setScore(LK.getScore() + 10);
scoreTxt.setText(LK.getScore());
// Play correct sound
LK.getSound('correct').play();
// Play voice note for correct match
LK.getSound(self.imageKey + 'Voice').play();
// Animate to center of image
tween(self, {
x: imageContainers[i].x,
y: imageContainers[i].y,
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 300,
easing: tween.easeOut,
onFinish: function onFinish() {
// Celebrate with a bounce
tween(self, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 200,
easing: tween.bounceOut
});
// Mark image as matched
imageContainers[i].markMatched();
// Check if level is complete
checkLevelComplete();
}
});
break;
}
}
if (!matched) {
// Return to original position if not matched
LK.getSound('wrong').play();
tween(self, {
x: self.originalX,
y: self.originalY,
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 300,
easing: tween.easeOut
});
}
}
};
self.update = function () {
if (!self.dragging && !self.matched) {
self.y += self.speed;
// If letter goes off screen, reset it
if (self.y > 2732 + 100) {
self.y = -100;
self.x = 200 + Math.random() * (2048 - 400);
}
}
};
return self;
});
var LevelCompleteMessage = Container.expand(function () {
var self = Container.call(this);
// Create background
var bg = LK.getAsset('letterBox', {
anchorX: 0.5,
anchorY: 0.5,
width: 1000,
height: 600,
tint: 0x00AA00
});
self.addChild(bg);
// Title text
var titleText = new Text2("Level Complete!", {
size: 100,
fill: 0xFFFFFF
});
titleText.anchor.set(0.5, 0.5);
titleText.y = -150;
self.addChild(titleText);
// Score text
var scoreText = new Text2("Score: 0", {
size: 70,
fill: 0xFFFFFF
});
scoreText.anchor.set(0.5, 0.5);
scoreText.y = 0;
self.addChild(scoreText);
// Update score
self.updateScore = function (score) {
scoreText.setText("Score: " + score);
};
// Next button
var nextButton = new Text2("NEXT LEVEL", {
size: 80,
fill: 0xFFFF00
});
nextButton.anchor.set(0.5, 0.5);
nextButton.y = 150;
nextButton.interactive = true;
nextButton.down = function () {
tween(nextButton, {
scaleX: 0.9,
scaleY: 0.9
}, {
duration: 100
});
};
nextButton.up = function () {
tween(nextButton, {
scaleX: 1.0,
scaleY: 1.0
}, {
duration: 100,
onFinish: function onFinish() {
self.onNextLevel();
}
});
};
self.addChild(nextButton);
// Event handler for next level button
self.onNextLevel = function () {
// To be set by the game
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Always backgroundColor is black
});
/****
* Game Code
****/
// Add background image
var backgroundImage = LK.getAsset('backgroundImage', {
anchorX: 0.5,
anchorY: 0.5,
x: 2048 / 2,
y: 2732 / 2
});
game.addChild(backgroundImage);
// Initialize the first level
var level = storage.level || 1;
var lettersInPlay = [];
var imageContainers = [];
var levelComplete = false;
var levelCompleteMessage = null;
// Define letter-image pairs for different levels
var levelData = [
// Level 1: Simple letters A-E
{
letters: [{
letter: 'A',
image: 'apple'
}, {
letter: 'B',
image: 'ball'
}, {
letter: 'C',
image: 'cat'
}, {
letter: 'D',
image: 'dog'
}, {
letter: 'E',
image: 'elephant'
}]
},
// Level 2: F-J
{
letters: [{
letter: 'F',
image: 'fish'
}, {
letter: 'G',
image: 'goat'
}, {
letter: 'H',
image: 'hat'
}, {
letter: 'I',
image: 'ice'
}, {
letter: 'J',
image: 'jam'
}]
},
// Level 3: K-O
{
letters: [{
letter: 'K',
image: 'kite'
}, {
letter: 'L',
image: 'lion'
}, {
letter: 'M',
image: 'monkey'
}, {
letter: 'N',
image: 'nest'
}, {
letter: 'O',
image: 'orange'
}]
},
// Level 4: P-T
{
letters: [{
letter: 'P',
image: 'panda'
}, {
letter: 'Q',
image: 'queen'
}, {
letter: 'R',
image: 'rabbit'
}, {
letter: 'S',
image: 'sun'
}, {
letter: 'T',
image: 'tiger'
}]
},
// Level 5: U-Z
{
letters: [{
letter: 'U',
image: 'umbrella'
}, {
letter: 'V',
image: 'violin'
}, {
letter: 'W',
image: 'whale'
}, {
letter: 'X',
image: 'xylophone'
}, {
letter: 'Y',
image: 'yacht'
}, {
letter: 'Z',
image: 'zebra'
}]
}];
// Make sure we don't exceed available levels
if (level > levelData.length) {
level = 1;
storage.level = 1;
}
// Level indicator
var levelTxt = new Text2("Level " + level, {
size: 80,
fill: 0x333333
});
levelTxt.anchor.set(0.5, 0);
levelTxt.y = 30;
LK.gui.top.addChild(levelTxt);
// Score display
var scoreTxt = new Text2("0", {
size: 80,
fill: 0x333333
});
scoreTxt.anchor.set(0, 0);
scoreTxt.x = 150;
scoreTxt.y = 30;
LK.gui.topRight.addChild(scoreTxt);
// Initialize score
LK.setScore(0);
scoreTxt.setText("0");
// Function to initialize level
function initLevel(levelNumber) {
// Clear any existing objects
clearLevel();
// Set level text
levelTxt.setText("Level " + levelNumber);
// Get current level data
var currentLevelData = levelData[levelNumber - 1];
// Create image containers at the bottom
var containerSpacing = 2048 / (currentLevelData.letters.length + 1);
for (var i = 0; i < currentLevelData.letters.length; i++) {
var imageContainer = new ImageContainer(currentLevelData.letters[i].image, currentLevelData.letters[i].letter);
imageContainer.x = containerSpacing * (i + 1);
imageContainer.y = 2732 - 300;
game.addChild(imageContainer);
imageContainers.push(imageContainer);
}
// Shuffle letters
var shuffledLetters = currentLevelData.letters.slice().sort(function () {
return Math.random() - 0.5;
});
// Create falling letters
for (var i = 0; i < shuffledLetters.length; i++) {
var letter = new Letter(shuffledLetters[i].letter, shuffledLetters[i].image);
letter.x = containerSpacing * (i + 1); // Align with image containers
letter.y = -200 - i * 300; // Stagger the starting positions
game.addChild(letter);
lettersInPlay.push(letter);
}
// Reset level complete flag
levelComplete = false;
}
// Function to clear level
function clearLevel() {
// Remove all letters
for (var i = 0; i < lettersInPlay.length; i++) {
if (lettersInPlay[i].parent) {
lettersInPlay[i].parent.removeChild(lettersInPlay[i]);
}
}
lettersInPlay = [];
// Remove all image containers
for (var i = 0; i < imageContainers.length; i++) {
if (imageContainers[i].parent) {
imageContainers[i].parent.removeChild(imageContainers[i]);
}
}
imageContainers = [];
// Remove level complete message if present
if (levelCompleteMessage && levelCompleteMessage.parent) {
levelCompleteMessage.parent.removeChild(levelCompleteMessage);
levelCompleteMessage = null;
}
}
// Function to check if level is complete
function checkLevelComplete() {
// Check if all images are matched
var allMatched = true;
for (var i = 0; i < imageContainers.length; i++) {
if (!imageContainers[i].matched) {
allMatched = false;
break;
}
}
if (allMatched && !levelComplete) {
// Play level complete sound effect
LK.getSound('levelComplete').play();
levelComplete = true;
// Save progress
storage.score = LK.getScore();
if (LK.getScore() > (storage.highScore || 0)) {
storage.highScore = LK.getScore();
}
// Show level complete message
levelCompleteMessage = new LevelCompleteMessage();
levelCompleteMessage.x = 2048 / 2;
levelCompleteMessage.y = 2732 / 2;
levelCompleteMessage.updateScore(LK.getScore());
levelCompleteMessage.onNextLevel = function () {
// Increment level
level++;
storage.level = level;
// If we've completed all levels, go back to level 1
if (level > levelData.length) {
level = 1;
storage.level = 1;
LK.showYouWin();
} else {
// Start next level
initLevel(level);
}
};
game.addChild(levelCompleteMessage);
}
}
// Handle dragging
var dragTarget = null;
game.down = function (x, y, obj) {
// The letter objects handle their own down events
};
game.up = function (x, y, obj) {
// The letter objects handle their own up events
dragTarget = null;
};
game.move = function (x, y, obj) {
// Move the dragged letter
if (dragTarget) {
dragTarget.x = x;
dragTarget.y = y;
}
};
// Game update loop
game.update = function () {
// Nothing needed here - objects handle their own updates
};
// Initialize the first level
initLevel(level);
// Play background music
LK.playMusic('bgMusic', {
fade: {
start: 0,
end: 0.4,
duration: 1000
}
});
Red apple. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Ball. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Cat. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Elephant. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows
Fish. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Goat. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Hat. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Ice. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Jam. Single Game Texture. 2d. Blank background. No shadows
Kite. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Lion. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Monkey. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Nest. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Orange. In-Game asset. 2d. Blank background. No shadows
Panda. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Queen with crown. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Rabbit. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Sun. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Tiger. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Violin. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Blue Whale. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Xylophone. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Zebra. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Yatch. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
Eclipse violet. Single Game Texture. In-Game asset. 2d. Blank background. No shadows
correct
Sound effect
wrong
Sound effect
bgMusic
Music
ballVoice
Sound effect
catVoice
Sound effect
dogVoice
Sound effect
elephantVoice
Sound effect
fishVoice
Sound effect
goatVoice
Sound effect
hatVoice
Sound effect
iceVoice
Sound effect
jamVoice
Sound effect
kiteVoice
Sound effect
lionVoice
Sound effect
monkeyVoice
Sound effect
nestVoice
Sound effect
orangeVoice
Sound effect
pandaVoice
Sound effect
queenVoice
Sound effect
rabbitVoice
Sound effect
sunVoice
Sound effect
tigerVoice
Sound effect
umbrellaVoice
Sound effect
violinVoice
Sound effect
whaleVoice
Sound effect
xylophoneVoice
Sound effect
yachtVoice
Sound effect
zebraVoice
Sound effect
levelComplete
Sound effect