Code edit (9 edits merged)
Please save this source code
User prompt
Please fix the bug: 'TypeError: LK.isSoundPlaying is not a function' in or related to this line: 'if (!LK.isSoundPlaying('ambience')) {' Line Number: 567
User prompt
Please fix the bug: 'TypeError: LK.getSound(...).isPlaying is not a function' in or related to this line: 'if (!LK.getSound('ambience').isPlaying()) {' Line Number: 567
Code edit (5 edits merged)
Please save this source code
User prompt
please play the bounce sound effect where it says so in the comment in line 113
Code edit (1 edits merged)
Please save this source code
Code edit (4 edits merged)
Please save this source code
User prompt
Please fix the bug: 'Cannot read properties of undefined (reading 'addChild')' in or related to this line: 'LK.gui.top.right.addChild(bestScoreTxt);' Line Number: 482
Code edit (10 edits merged)
Please save this source code
User prompt
Migrate to the latest version of LK
Code edit (6 edits merged)
Please save this source code
User prompt
create a graphic for a spiky platform.
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
Code edit (1 edits merged)
Please save this source code
User prompt
make this line work: ballGraphics.texture = LK.getAsset('newDeathSpriteId', {}).texture;
User prompt
Fix Bug: 'TypeError: ballGraphics.setTextureFromAsset is not a function' in or related to this line: '_iterator.f();' Line Number: 429
User prompt
Fix Bug: 'TypeError: ballGraphics.setTexture is not a function' in or related to this line: '_iterator.f();' Line Number: 429
User prompt
in the deathanim function, ball sprite should change to another one.
Code edit (10 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'setText')' in or related to this line: '_iterator.f();' Line Number: 466
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'setText')' in or related to this line: '_iterator.f();' Line Number: 466
Code edit (1 edits merged)
Please save this source code
User prompt
Every time the player gets points, they should be multiplied by the variable (multiplier-1).
===================================================================
--- original.js
+++ change.js
@@ -1,94 +1,134 @@
/****
* Classes
-****/
-/*
-TODO:
---------------------
-Bugs:
-* Consider shaft method for difficulty ramping.
-* The red platforms have to be really shining up in red, dangerous looking. maybe add spikes.
-* Now that player graphic is bigger, it sometimes collides with platforms from below. Either adjust size, spacing
-or jump height/logic.
-* Maybe player should have three lives - shown as little red hearts in top right corner.
----------------------
-Interface/graphics:
-* Show instructions on screen at start.
---------------
-Powerup ideas:
-* A powerup that removes all nearby platforms and give score for them.
-* Maybe make a disco powerup that changes light, colors or visuals somehow.
-* Consider platforms that increase or decrease the size/weight of the character.
-* Or maybe just a platform with a piece of cake on it, and when player lands there he gets 10 points and swells up
-(no gameplay side effects) for 5 seconds. Could actually be all kinds of funny pickups like that.
-* Different hats that the player will wear until a new one is picked up?
-----------
-Gameplay:
-* Consider difficulty ramping. More red platforms?
-* Make sure red platforms never fully block the way. Platforms have row and column id's to pattern match against.
------------
-Theming:
-* Consider possible player character.
-* A frog? A kangaroo? A spring? A tennisball? A rabbit? A two-headed squirrel? Something on a pogostick?
-* A Rick Dangerous finding treasures on the platforms?
-* A Pirate Ship finding bounty on platforms? Maybe beats platforms with less strength than they have?
-* A cat eating sushi on each platform?
-* A princess saving animals on every tenth platform?
-* Maybe all those characters, each triggered by a powerup until a new one is picked up.
-* Maybe new mode unlocked per 200 platforms or so?
-----------
-*/
-var ScoreLabel = Container.expand(function (scoreValue, posX, posY) {
+****/
+// Ball class to create the bouncing ball
+var Ball = Container.expand(function () {
var self = Container.call(this);
- var scoreText = new Text2(scoreValue.toString(), {
- size: 150,
- fill: "#ffffff"
+ var ballGraphics = self.attachAsset('ball', {
+ anchorX: 0.5,
+ anchorY: 0.5
});
- scoreText.anchor.set(0.5, 0.5);
- self.addChild(scoreText);
- self.x = posX;
- self.y = posY;
- var angle = Math.random() * Math.PI; // Random angle in radians
- self.dx = Math.cos(angle) * 4; // Horizontal drift
- self.dy = Math.sin(angle) * 8; // Vertical drift
- // Animation for the score label to drift upwards and fade out
- var driftFrames = 60;
- self.update = function () {
- if (driftFrames > 0) {
- self.x += self.dx;
- self.y -= self.dy;
- scoreText.alpha -= 0.005;
- driftFrames--;
+ // Set initial position and velocity
+ self.x = game.width / 2 + 100;
+ self.y = game.height / 4;
+ self.velocity = {
+ x: 0,
+ y: -20
+ };
+ self.immunity = 0;
+ self.followers = 0;
+ self.fallingActivated = false;
+ self.vely = 1;
+ // Function to update ball position
+ self._update_migrated = function () {
+ if (this.fallingActivated) {
+ this.vely *= 1.1;
+ this.width *= 1.02;
+ this.height *= 1.02;
+ this.rotation = -Math.PI / 4;
+ this.y += this.vely / 5;
+ this.zIndex = 10000;
+ if (self.width > 1000) {
+ self.destroy();
+ LK.showGameOver();
+ }
} else {
- self.destroy();
+ if (self.x > 500 && self.x < 1548) {
+ self.x += self.velocity.x;
+ }
+ self.velocity.y += 1; // simple gravity
+ platforms.forEach(function (platform) {
+ platform.y -= self.velocity.y;
+ });
}
};
- self.updateScore = function (newScore) {
- scoreText.setText(newScore.toString());
+ // Function to bounce the ball off platforms with a bounce counter
+ self.bounceCounter = 0;
+ self.bounce = function (platforms) {
+ for (var i = platforms.length - 1; i > 0; i--) {
+ var platform = platforms[i];
+ if (platform && platform.collidable && platform.alpha == 1) {
+ if (self.intersects(platform) && self.velocity.y > 0) {
+ // If player has immunity left (from a powerup) he just passes through the platform.
+ if (self.immunity > 0) {
+ self.immunity--;
+ platform.alpha = 0;
+ // If immunity is spent, player jumps up, so he has time to dodge a possibly toxic platform below.
+ if (self.immunity == 0) {
+ self.velocity.y = -30;
+ }
+ break;
+ }
+ if (platform.toxic) {
+ self.removeChild(self.getChildAt(0));
+ self.attachAsset('newDeathSpriteId', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.fallingActivated = true;
+ gameEnding = true;
+ break;
+ }
+ self.velocity.y *= -1;
+ if (self.velocity.y < -40) {
+ self.velocity.y = -40;
+ }
+ if (platform.powerupType == "Multiply") {
+ multiplier++;
+ }
+ platform.alpha = 0;
+ if (platform.powerup == false) {
+ var scoreIncrement = multiplier - 1;
+ LK.setScore(LK.getScore() + scoreIncrement);
+ // Create and display score label
+ var scoreLabel = new ScoreLabel(scoreIncrement, self.x, self.y);
+ scoreLabel.updateScore(scoreIncrement);
+ scoreLabels.push(scoreLabel);
+ game.addChild(scoreLabel);
+ }
+ if (platform.powerup == true) {
+ self.velocity.y = platform.velocityBoost;
+ self.immunity = platform.immunityBoost;
+ var scoreIncrement = (multiplier - 1) * platform.scoreBoost;
+ LK.setScore(LK.getScore() + scoreIncrement);
+ // Create and display score label
+ var scoreLabel = new ScoreLabel(scoreIncrement, self.x, self.y);
+ scoreLabel.updateScore(scoreIncrement);
+ scoreLabels.push(scoreLabel);
+ game.addChild(scoreLabel);
+ if (platform.powerupType != "Follow") {
+ platform.destroy();
+ } else {
+ self.followers += 1;
+ platform.removeChild(platform.getChildAt(0));
+ platform.attachAsset(platform.freeGraphicName, {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ platform.followActivated = true;
+ platform.alpha = 1;
+ platform.collidable = false;
+ }
+ }
+ playerScoreLabel.updateScore(LK.getScore());
+ if (platform.row > maxDepth) {
+ maxDepth = platform.row;
+ }
+ }
+ }
+ }
};
});
-var PlayerScoreLabel = Container.expand(function () {
- var self = Container.call(this);
- var scoreText = new Text2('0', {
- size: 150,
- fill: "#ffffff"
- });
- scoreText.anchor.set(0.5, 0);
- self.addChild(scoreText);
- self.updateScore = function (newScore) {
- scoreText.setText(newScore.toString());
- };
- self.updateScore(0); // Initialize with 0 score
-});
// Platform class to create movable platforms
var Platform = Container.expand(function () {
var self = Container.call(this);
var platformGraphics = self.attachAsset('platform', {
anchorX: 0.5,
anchorY: 0.5
});
self.width = 200;
- self.height = 60; //20;
+ self.height = 60;
self.toxic = false;
self.row = 0;
self.col = 0;
self.powerup = false;
@@ -101,69 +141,56 @@
platformGraphics = self.attachAsset('spikyPlatform', {
anchorX: 0.5,
anchorY: 0.5
});
- self.width = 200;
- self.height = 60;
+ self.width = 220;
+ self.height = 90;
} else {
platformGraphics.tint = 0xffffff;
+ self.removeChild(platformGraphics);
+ platformGraphics = self.attachAsset('platform', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.width = 200;
+ self.height = 60;
}
}
};
self.setTint();
});
-var PowerupBurst = Container.expand(function () {
+var PlayerScoreLabel = Container.expand(function () {
var self = Container.call(this);
- var powerupBurstGraphics = self.attachAsset('powerupBurst', {
- anchorX: 0.5,
- anchorY: 0.5
+ var scoreText = new Text2('0', {
+ size: 150,
+ fill: "#ffffff"
});
- self.col = 0;
- self.row = 0;
- self.toxic = false;
- self.powerup = true;
- self.powerupType = "Burst";
- self.collidable = true;
- self.velocityBoost = 50;
- self.immunityBoost = 10;
- self.scoreBoost = 10;
+ scoreText.anchor.set(0.5, 0);
+ self.addChild(scoreText);
+ self.updateScore = function (newScore) {
+ scoreText.setText(newScore.toString());
+ };
+ self.updateScore(0); // Initialize with 0 score
});
-var PowerupMultiply = Container.expand(function () {
+var PowerupBluebird = Container.expand(function () {
var self = Container.call(this);
- var powerupMultiplyGraphics = self.attachAsset('powerupMultiply', {
+ var powerupBluebirdGraphics = self.attachAsset('powerupBluebird', {
anchorX: 0.5,
- anchorY: 0.5
- });
- self.col = 0;
- self.row = 0;
- self.toxic = false;
- self.powerup = true;
- self.powerupType = "Multiply";
- self.collidable = true;
- self.velocityBoost = 25;
- self.immunityBoost = 0;
- self.scoreBoost = 1;
- self.rotation = Math.PI / 4;
-});
-var PowerupFollow = Container.expand(function () {
- var self = Container.call(this);
- var powerupFollowGraphics = self.attachAsset('powerupFollow', {
- anchorX: 0.5,
anchorY: 0
});
self.col = 0;
self.row = 0;
self.toxic = false;
self.powerup = true;
self.powerupType = "Follow";
+ self.freeGraphicName = "bluebirdFreeGraphic";
self.followActivated = false;
self.collidable = true;
self.velocityBoost = 25;
self.immunityBoost = 0;
- self.scoreBoost = 10;
+ self.scoreBoost = 20;
self.vely = 1;
- self.freeGraphicName = 'powerupFollowFree';
- self.update = function () {
+ self._update_migrated = function () {
if (this.followActivated) {
if (self.x > 1024) {
this.x += 4;
} else {
@@ -178,27 +205,43 @@
}
}
};
});
-var PowerupBluebird = Container.expand(function () {
+var PowerupBurst = Container.expand(function () {
var self = Container.call(this);
- var powerupBluebirdGraphics = self.attachAsset('powerupBluebird', {
+ var powerupBurstGraphics = self.attachAsset('powerupBurst', {
anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.col = 0;
+ self.row = 0;
+ self.toxic = false;
+ self.powerup = true;
+ self.powerupType = "Burst";
+ self.collidable = true;
+ self.velocityBoost = 50;
+ self.immunityBoost = 10;
+ self.scoreBoost = 10;
+});
+var PowerupFollow = Container.expand(function () {
+ var self = Container.call(this);
+ var powerupFollowGraphics = self.attachAsset('powerupFollow', {
+ anchorX: 0.5,
anchorY: 0
});
self.col = 0;
self.row = 0;
self.toxic = false;
self.powerup = true;
self.powerupType = "Follow";
- self.freeGraphicName = "bluebirdFreeGraphic";
self.followActivated = false;
self.collidable = true;
- self.velocityBoost = 25; //50;
+ self.velocityBoost = 25;
self.immunityBoost = 0;
- self.scoreBoost = 20;
+ self.scoreBoost = 10;
self.vely = 1;
- self.update = function () {
+ self.freeGraphicName = 'powerupFollowFree';
+ self._update_migrated = function () {
if (this.followActivated) {
if (self.x > 1024) {
this.x += 4;
} else {
@@ -231,9 +274,9 @@
self.velocityBoost = 25;
self.immunityBoost = 0;
self.scoreBoost = 30;
self.vely = 1;
- self.update = function () {
+ self._update_migrated = function () {
if (this.followActivated) {
if (self.x > 1024) {
this.x += 4;
} else {
@@ -248,8 +291,25 @@
}
}
};
});
+var PowerupMultiply = Container.expand(function () {
+ var self = Container.call(this);
+ var powerupMultiplyGraphics = self.attachAsset('powerupMultiply', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.col = 0;
+ self.row = 0;
+ self.toxic = false;
+ self.powerup = true;
+ self.powerupType = "Multiply";
+ self.collidable = true;
+ self.velocityBoost = 25;
+ self.immunityBoost = 0;
+ self.scoreBoost = 1;
+ self.rotation = Math.PI / 4;
+});
var PowerupScore = Container.expand(function () {
var self = Container.call(this);
var powerupScoreGraphics = self.attachAsset('powerupScore', {
anchorX: 0.5,
@@ -277,140 +337,95 @@
self.scoreBoost = newVal;
};
self.updateLabel(self.scoreVal);
});
-// Ball class to create the bouncing ball
-var Ball = Container.expand(function () {
+/*
+TODO:
+--------------------
+Bugs:
+* Consider shaft method for difficulty ramping.
+* Now that player graphic is bigger, it sometimes collides with platforms from below. Either adjust size, spacing
+or jump height/logic.
+* Maybe player should have three lives - shown as little red hearts in top right corner.
+---------------------
+Interface/graphics:
+* Show instructions on screen at start.
+* Maybe elephant should face the last direction it moved.
+--------------
+Powerup ideas:
+* A powerup that removes all nearby platforms and give score for them.
+* Maybe make a disco powerup that changes light, colors or visuals somehow.
+* Consider platforms that increase or decrease the size/weight of the character.
+* Or maybe just a platform with a piece of cake on it, and when player lands there he gets 10 points and swells up
+(no gameplay side effects) for 5 seconds. Could actually be all kinds of funny pickups like that.
+* Different hats that the player will wear until a new one is picked up?
+----------
+Gameplay:
+* Consider difficulty ramping. More red platforms?
+* Make sure red platforms never fully block the way. Platforms have row and column id's to pattern match against.
+-----------
+Theming:
+* Consider possible player character.
+* A frog? A kangaroo? A spring? A tennisball? A rabbit? A two-headed squirrel? Something on a pogostick?
+* A Rick Dangerous finding treasures on the platforms?
+* A Pirate Ship finding bounty on platforms? Maybe beats platforms with less strength than they have?
+* A cat eating sushi on each platform?
+* A princess saving animals on every tenth platform?
+* Maybe all those characters, each triggered by a powerup until a new one is picked up.
+* Maybe new mode unlocked per 200 platforms or so?
+----------
+*/
+var ScoreLabel = Container.expand(function (scoreValue, posX, posY) {
var self = Container.call(this);
- var ballGraphics = self.attachAsset('ball', {
- anchorX: 0.5,
- anchorY: 0.5
+ var scoreText = new Text2(scoreValue.toString(), {
+ size: 150,
+ fill: "#ffffff"
});
- // Set initial position and velocity
- self.x = game.width / 2 + 100;
- self.y = game.height / 4;
- self.velocity = {
- x: 0,
- y: -20
- };
- self.immunity = 0;
- self.followers = 0;
- self.fallingActivated = false;
- self.vely = 1;
- // Function to update ball position
- self.update = function () {
- if (this.fallingActivated) {
- this.vely *= 1.1;
- this.width *= 1.02;
- this.height *= 1.02;
- this.rotation = -Math.PI / 4;
- this.y += this.vely / 5;
- this.zIndex = 10000;
- if (self.width > 1000) {
- self.destroy();
- LK.showGameOver();
- }
+ scoreText.anchor.set(0.5, 0.5);
+ self.addChild(scoreText);
+ self.x = posX;
+ self.y = posY;
+ var angle = Math.random() * Math.PI; // Random angle in radians
+ self.dx = Math.cos(angle) * 4; // Horizontal drift
+ self.dy = Math.sin(angle) * 8; // Vertical drift
+ // Animation for the score label to drift upwards and fade out
+ var driftFrames = 60;
+ self._update_migrated = function () {
+ if (driftFrames > 0) {
+ self.x += self.dx;
+ self.y -= self.dy;
+ scoreText.alpha -= 0.005;
+ driftFrames--;
} else {
- if (self.x > 500 && self.x < 1548) {
- self.x += self.velocity.x;
- }
- self.velocity.y += 1; // simple gravity
- platforms.forEach(function (platform) {
- platform.y -= self.velocity.y;
- });
+ self.destroy();
}
};
- // Function to bounce the ball off platforms with a bounce counter
- self.bounceCounter = 0;
- self.bounce = function (platforms) {
- for (var i = platforms.length - 1; i > 0; i--) {
- var platform = platforms[i];
- if (platform && platform.collidable && platform.alpha == 1) {
- if (self.intersects(platform) && self.velocity.y > 0) {
- // If player has immunity left (from a powerup) he just passes through the platform.
- if (self.immunity > 0) {
- self.immunity--;
- platform.alpha = 0;
- // If immunity is spent, player jumps up, so he has time to dodge a possibly toxic platform below.
- if (self.immunity == 0) {
- self.velocity.y = -30;
- }
- break;
- }
- if (platform.toxic) {
- self.removeChild(self.getChildAt(0));
- self.attachAsset('newDeathSpriteId', {
- anchorX: 0.5,
- anchorY: 0.5
- });
- self.fallingActivated = true;
- gameEnding = true;
- break;
- }
- self.velocity.y *= -1;
- if (self.velocity.y < -40) {
- self.velocity.y = -40;
- }
- if (platform.powerupType == "Multiply") {
- multiplier++;
- }
- platform.alpha = 0;
- if (platform.powerup == false) {
- var scoreIncrement = multiplier - 1;
- LK.setScore(LK.getScore() + scoreIncrement);
- // Create and display score label
- var scoreLabel = new ScoreLabel(scoreIncrement, self.x, self.y);
- scoreLabel.updateScore(scoreIncrement);
- scoreLabels.push(scoreLabel);
- game.addChild(scoreLabel);
- }
- if (platform.powerup == true) {
- self.velocity.y = platform.velocityBoost;
- self.immunity = platform.immunityBoost;
- var scoreIncrement = (multiplier - 1) * platform.scoreBoost;
- LK.setScore(LK.getScore() + scoreIncrement);
- // Create and display score label
- var scoreLabel = new ScoreLabel(scoreIncrement, self.x, self.y);
- scoreLabel.updateScore(scoreIncrement);
- scoreLabels.push(scoreLabel);
- game.addChild(scoreLabel);
- if (platform.powerupType != "Follow") {
- platform.destroy();
- } else {
- self.followers += 1;
- platform.removeChild(platform.getChildAt(0));
- platform.attachAsset(platform.freeGraphicName, {
- anchorX: 0.5,
- anchorY: 0.5
- });
- platform.followActivated = true;
- platform.alpha = 1;
- platform.collidable = false;
- }
- }
- playerScoreLabel.updateScore(LK.getScore());
- if (platform.row > maxDepth) {
- maxDepth = platform.row;
- }
- }
- }
- }
+ self.updateScore = function (newScore) {
+ scoreText.setText(newScore.toString());
};
});
/****
* Initialize Game
-****/
+****/
var game = new LK.Game({
- backgroundColor: 0x000000 // Init game with black background
+ backgroundColor: 0x517425 // Init game with black background
});
/****
* Game Code
-****/
-// Initialize background graphic asset
-// Create background graphic and add it to the game
+****/
//LK.init.shape('sideBarrier', {width:100, height:100, color:0xff0000, shape:'box'})
+var blackBgGraphic = game.addChild(LK.getAsset('blackBg', {
+ anchorX: 0.5,
+ anchorY: 0.5,
+ x: 1024,
+ // Centered on x-axis
+ y: 1366 // Centered on y-axis
+}));
+blackBgGraphic.zIndex = -2;
+// Create background graphic and add it to the game
+// Initialize background graphic asset
var backgroundGraphic = game.addChild(LK.getAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
x: 1024,
@@ -458,50 +473,55 @@
game.addChild(ball);
// Handle touch move events to move platforms
function handleMove(obj) {
var event = obj.event;
- var position = event.getLocalPosition(game);
+ var position = game.toLocal(event.global);
// Move ball depending on whether click is left or right of it.
if (position.x > ball.x) {
// Take previous clicks into account, so ball can't fly off stage.
if (ball.x < 2048 - (300 + moveRightFrames * 40)) {
moveRightFrames += 10;
+ ball.getChildAt(0).scale.x = -1;
}
} else {
// Take previous clicks into account, so ball can't fly off stage.
if (ball.x > 300 + moveLeftFrames * 40) {
moveLeftFrames += 10;
+ ball.getChildAt(0).scale.x = 1;
}
}
}
// Add event listener for touch down
-game.on('down', handleMove);
+game.on('down', function (x, y, obj) {
+ obj.event = obj;
+ handleMove(obj);
+});
// Game tick event
LK.on('tick', function () {
if (gameEnding) {
- ball.update(platforms);
+ ball._update_migrated(platforms);
platforms.forEach(function (platform) {
- if (platform.update) {
- platform.update();
+ if (platform._update_migrated) {
+ platform._update_migrated();
}
});
scoreLabels.forEach(function (scoreLabel) {
- if (scoreLabel.update) {
- scoreLabel.update();
+ if (scoreLabel._update_migrated) {
+ scoreLabel._update_migrated();
}
});
} else {
- /*
+ /*
if (LK.ticks % 120 == 0) {
console.log('Platforms.length is now: ' + platforms.length);
}*/
scoreLabels.forEach(function (scoreLabel) {
- if (scoreLabel.update) {
- scoreLabel.update();
+ if (scoreLabel._update_migrated) {
+ scoreLabel._update_migrated();
}
});
// Update ball position
- ball.update(platforms);
+ ball._update_migrated(platforms);
// Check for ball bouncing off platforms
ball.bounce(platforms);
if (moveLeftFrames > 0) {
moveLeftFrames--;
@@ -513,10 +533,10 @@
}
var newPlatforms = [];
for (var i = platforms.length - 1; i > 0; i--) {
var platform = platforms[i];
- if (platform.update) {
- platform.update();
+ if (platform._update_migrated) {
+ platform._update_migrated();
}
if (platform.y < -900) {
platform.y += rowAmount * 300;
platform.row += rowAmount;
A happy blue elephant.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
erase.
Make the bird sit inside a birdcage.
Three green arrows pointing down.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A sad little bluebird sitting down.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A happy little bluebird flying.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A happy little green bird flying.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A lush jungle scenery with huge old trees covered in vines and overwrowth, blue sky and forested mountains in the background.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A dark wooden message board with vines and jungle moss growing on top.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A happy little blue elephant, looking scared, facing the viewer, legs flailing as it falls through the air.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A delicious peanut.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
delete