User prompt
İncrease distance pipe to pipe
User prompt
İncrease distance pipe to pipe
User prompt
Make everything better ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Add all Real flapy bird thing ↪💡 Consider importing and using the following plugins: @upit/tween.v1
User prompt
Can you add health bar
User prompt
İncrease distance pipe to pipe
User prompt
Decrase distance of pipe to pipe
User prompt
Add some spacn point
User prompt
Decrease size of pipe to pipe
User prompt
Add coin at among of pipe
User prompt
Reset last adding
User prompt
Make more birde jumping
Code edit (1 edits merged)
Please save this source code
User prompt
Flappy Bird
Initial prompt
Make me flaapy bird
/****
* Plugins
****/
var tween = LK.import("@upit/tween.v1");
/****
* Classes
****/
var Bird = Container.expand(function () {
var self = Container.call(this);
var birdGraphics = self.attachAsset('bird', {
anchorX: 0.5,
anchorY: 0.5
});
self.velocity = 0;
self.gravity = 0.6;
self.flapStrength = -10;
self.maxFallSpeed = 12;
self.rotation = 0;
self.animationTimer = 0;
self.invincible = false;
self.flap = function () {
self.velocity = self.flapStrength;
LK.getSound('flap').play();
// Wing flapping animation
tween(birdGraphics, {
scaleY: 1.2
}, {
duration: 100,
easing: tween.easeOut
});
tween(birdGraphics, {
scaleY: 1.0
}, {
duration: 100,
easing: tween.easeIn
});
// Slight upward rotation on flap
tween(birdGraphics, {
rotation: -0.4
}, {
duration: 150,
easing: tween.easeOut
});
};
self.update = function () {
// Apply gravity
self.velocity += self.gravity;
// Limit fall speed
if (self.velocity > self.maxFallSpeed) {
self.velocity = self.maxFallSpeed;
}
// Update position
self.y += self.velocity;
// Smooth rotation based on velocity
var targetRotation = Math.min(self.velocity * 0.08, 1.2);
if (self.velocity < 0) {
targetRotation = Math.max(self.velocity * 0.08, -0.4);
}
// Smooth rotation transition
tween.stop(birdGraphics, {
rotation: true
});
tween(birdGraphics, {
rotation: targetRotation
}, {
duration: 200,
easing: tween.easeOut
});
// Subtle bob animation when idle
if (Math.abs(self.velocity) < 2) {
self.animationTimer += 0.1;
var bob = Math.sin(self.animationTimer) * 2;
birdGraphics.y = bob;
}
// Invincibility flashing
if (self.invincible) {
birdGraphics.alpha = 0.5 + 0.5 * Math.sin(LK.ticks * 0.3);
} else {
birdGraphics.alpha = 1;
}
};
return self;
});
var Building = Container.expand(function () {
var self = Container.call(this);
var buildingGraphics = self.attachAsset('building', {
anchorX: 0.5,
anchorY: 1
});
self.speed = -2;
self.update = function () {
self.x += self.speed;
// Reset position when off screen
if (self.x < -200) {
self.x = 2048 + 200;
self.y = 2732 - 100; // Ground level
}
};
return self;
});
var Cloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.attachAsset('cloud', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -1;
self.update = function () {
self.x += self.speed;
// Reset position when off screen
if (self.x < -200) {
self.x = 2048 + 200;
self.y = 100 + Math.random() * 300;
}
};
return self;
});
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
anchorY: 0.5
});
self.speed = -4;
self.collected = false;
self.update = function () {
self.x += self.speed;
// Simple rotation animation
coinGraphics.rotation += 0.1;
};
self.checkCollection = function (bird) {
var distance = Math.sqrt(Math.pow(bird.x - self.x, 2) + Math.pow(bird.y - self.y, 2));
return distance < 35; // Collection radius
};
return self;
});
var Pipe = Container.expand(function () {
var self = Container.call(this);
self.gapHeight = 220;
self.speed = -3;
self.scored = false;
// Create top pipe
self.topPipe = self.attachAsset('pipe', {
anchorX: 0.5,
anchorY: 1
});
// Create bottom pipe
self.bottomPipe = self.attachAsset('pipe', {
anchorX: 0.5,
anchorY: 0
});
// Add pipe caps for authentic look
self.topCap = LK.getAsset('pipe', {
anchorX: 0.5,
anchorY: 1,
scaleX: 1.2,
scaleY: 0.1
});
self.bottomCap = LK.getAsset('pipe', {
anchorX: 0.5,
anchorY: 0,
scaleX: 1.2,
scaleY: 0.1
});
self.addChild(self.topCap);
self.addChild(self.bottomCap);
self.setupPipes = function (gapCenterY) {
self.topPipe.y = gapCenterY - self.gapHeight / 2;
self.bottomPipe.y = gapCenterY + self.gapHeight / 2;
self.topCap.y = self.topPipe.y;
self.bottomCap.y = self.bottomPipe.y;
};
self.update = function () {
self.x += self.speed;
};
self.checkCollision = function (bird) {
var birdRadius = 25;
var pipeWidth = 62;
var birdBounds = {
left: bird.x - birdRadius,
right: bird.x + birdRadius,
top: bird.y - birdRadius,
bottom: bird.y + birdRadius
};
var pipeBounds = {
left: self.x - pipeWidth,
right: self.x + pipeWidth,
topBottom: self.topPipe.y,
bottomTop: self.bottomPipe.y
};
// Check if bird is within pipe horizontal bounds
if (birdBounds.right > pipeBounds.left && birdBounds.left < pipeBounds.right) {
// Check collision with top or bottom pipe
if (birdBounds.top < pipeBounds.topBottom || birdBounds.bottom > pipeBounds.bottomTop) {
return true;
}
}
return false;
};
return self;
});
var SpawnPoint = Container.expand(function () {
var self = Container.call(this);
self.isActive = true;
self.spawnType = 'pipe'; // 'pipe' or 'coin'
self.cooldownTimer = 0;
self.cooldownDuration = 60; // 1 second at 60fps
// Create visual marker for spawn point
var marker = LK.getAsset('coin', {
anchorX: 0.5,
anchorY: 0.5,
scaleX: 0.5,
scaleY: 0.5
});
self.addChild(marker);
self.marker = marker;
self.update = function () {
if (self.cooldownTimer > 0) {
self.cooldownTimer--;
self.marker.alpha = 0.3; // Dim when on cooldown
} else {
self.marker.alpha = 1.0; // Bright when ready
}
// Pulse animation
self.marker.rotation += 0.05;
var pulse = Math.sin(LK.ticks * 0.1) * 0.1 + 1;
self.marker.scaleX = 0.5 * pulse;
self.marker.scaleY = 0.5 * pulse;
};
self.canSpawn = function () {
return self.isActive && self.cooldownTimer <= 0;
};
self.triggerSpawn = function () {
if (self.canSpawn()) {
self.cooldownTimer = self.cooldownDuration;
return true;
}
return false;
};
return self;
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x87CEEB
});
/****
* Game Code
****/
var bird;
var pipes = [];
var coins = [];
var spawnPoints = [];
var clouds = [];
var buildings = [];
var ground;
var gameStarted = false;
var gameActive = true;
var pipeSpawnTimer = 0;
var pipeSpawnInterval = 90; // 1.5 seconds at 60fps
var playerHealth = 3;
var bestScore = 0;
var dayTime = true;
// Create score display
var scoreTxt = new Text2('0', {
size: 80,
fill: 0xFFFFFF
});
scoreTxt.anchor.set(0.5, 0);
LK.gui.top.addChild(scoreTxt);
// Create health display
var healthTxt = new Text2('♥ ♥ ♥', {
size: 60,
fill: 0xFF0000
});
healthTxt.anchor.set(1, 0);
healthTxt.x = -20; // Position from right edge
healthTxt.y = 20;
LK.gui.topRight.addChild(healthTxt);
// Create start instruction
var startTxt = new Text2('TAP TO START', {
size: 60,
fill: 0xFFFFFF
});
startTxt.anchor.set(0.5, 0.5);
startTxt.x = 2048 / 2;
startTxt.y = 2732 / 2 - 200;
game.addChild(startTxt);
// Initialize bird
bird = new Bird();
bird.x = 2048 / 4;
bird.y = 2732 / 2;
bird.invincible = false;
game.addChild(bird);
// Initialize health display
updateHealthDisplay();
// Initialize clouds
for (var i = 0; i < 4; i++) {
var cloud = new Cloud();
cloud.x = i * 500 + 200;
cloud.y = 100 + Math.random() * 300;
clouds.push(cloud);
game.addChild(cloud);
}
// Initialize buildings
for (var i = 0; i < 6; i++) {
var building = new Building();
building.x = i * 350 + 100;
building.y = 2732 - 100;
var randomHeight = 200 + Math.random() * 400;
building.scaleY = randomHeight / 300;
buildings.push(building);
game.addChild(building);
}
// Initialize spawn points
for (var i = 0; i < 3; i++) {
var spawnPoint = new SpawnPoint();
spawnPoint.x = 2048 + 200 + i * 400;
spawnPoint.y = 300 + i * 200;
spawnPoints.push(spawnPoint);
game.addChild(spawnPoint);
}
// Create ground
ground = game.attachAsset('ground', {
anchorX: 0,
anchorY: 0,
x: 0,
y: 2732 - 100
});
// Add ground scrolling animation
tween(ground, {
x: -200
}, {
duration: 4000,
easing: tween.linear,
onFinish: function onFinish() {
ground.x = 0;
tween(ground, {
x: -200
}, {
duration: 4000,
easing: tween.linear,
onFinish: arguments.callee
});
}
});
function spawnPipe() {
var pipe = new Pipe();
pipe.x = 2048 + 60;
// Random gap center position
var minGapCenter = 200;
var maxGapCenter = 2732 - 200 - 100; // Account for ground
var gapCenterY = minGapCenter + Math.random() * (maxGapCenter - minGapCenter);
pipe.setupPipes(gapCenterY);
pipes.push(pipe);
game.addChild(pipe);
// Spawn coin in the gap center
var coin = new Coin();
coin.x = pipe.x;
coin.y = gapCenterY;
coins.push(coin);
game.addChild(coin);
}
function checkScore() {
for (var i = 0; i < pipes.length; i++) {
var pipe = pipes[i];
if (!pipe.scored && pipe.x < bird.x) {
pipe.scored = true;
LK.setScore(LK.getScore() + 1);
scoreTxt.setText(LK.getScore().toString());
LK.getSound('score').play();
}
}
}
function updateHealthDisplay() {
var hearts = '';
for (var i = 0; i < playerHealth; i++) {
hearts += '♥ ';
}
for (var i = playerHealth; i < 3; i++) {
hearts += '♡ ';
}
healthTxt.setText(hearts.trim());
}
function checkCoinCollection() {
for (var i = coins.length - 1; i >= 0; i--) {
var coin = coins[i];
if (!coin.collected && coin.checkCollection(bird)) {
coin.collected = true;
LK.setScore(LK.getScore() + 5); // Coins worth 5 points
scoreTxt.setText(LK.getScore().toString());
LK.getSound('score').play();
coin.destroy();
coins.splice(i, 1);
}
}
}
function checkCollisions() {
// Check pipe collisions
for (var i = 0; i < pipes.length; i++) {
if (pipes[i].checkCollision(bird)) {
return true;
}
}
// Check ground collision
if (bird.y + 30 > ground.y) {
return true;
}
// Check ceiling collision
if (bird.y - 30 < 0) {
return true;
}
return false;
}
function takeDamage() {
if (playerHealth > 1) {
playerHealth--;
updateHealthDisplay();
LK.getSound('hit').play();
// Flash screen red briefly
LK.effects.flashScreen(0xff0000, 500);
// Reset bird position and velocity
bird.y = 2732 / 2;
bird.velocity = 0;
// Brief invincibility period
bird.invincible = true;
LK.setTimeout(function () {
bird.invincible = false;
}, 1000);
} else {
gameOver();
}
}
function gameOver() {
gameActive = false;
LK.getSound('hit').play();
// Stop bird movement
bird.velocity = 0;
// Flash screen red
LK.effects.flashScreen(0xff0000, 1000);
// Show game over after a brief delay
LK.setTimeout(function () {
LK.showGameOver();
}, 500);
}
// Touch/tap handler
game.down = function (x, y, obj) {
if (!gameStarted) {
gameStarted = true;
gameActive = true;
startTxt.visible = false;
// Spawn first pipe
spawnPipe();
}
if (gameActive) {
bird.flap();
}
};
// Main game loop
game.update = function () {
// Always update background elements for ambiance
for (var i = 0; i < clouds.length; i++) {
clouds[i].update();
}
for (var i = 0; i < buildings.length; i++) {
buildings[i].update();
}
if (!gameStarted || !gameActive) {
return;
}
// Update bird
bird.update();
// Update pipes
for (var i = pipes.length - 1; i >= 0; i--) {
pipes[i].update();
// Remove pipes that have moved off screen
if (pipes[i].x < -120) {
pipes[i].destroy();
pipes.splice(i, 1);
}
}
// Update coins
for (var i = coins.length - 1; i >= 0; i--) {
coins[i].update();
// Remove coins that have moved off screen
if (coins[i].x < -120) {
coins[i].destroy();
coins.splice(i, 1);
}
}
// Update spawn points
for (var i = 0; i < spawnPoints.length; i++) {
spawnPoints[i].update();
// Move spawn points left
spawnPoints[i].x -= 2;
// Reset spawn point position when it goes off screen
if (spawnPoints[i].x < -100) {
spawnPoints[i].x = 2048 + 200;
spawnPoints[i].y = 300 + Math.random() * 400;
}
}
// Spawn new pipes with dynamic difficulty
pipeSpawnTimer++;
var adjustedInterval = Math.max(60, pipeSpawnInterval - Math.floor(LK.getScore() / 10) * 5);
if (pipeSpawnTimer >= adjustedInterval) {
spawnPipe();
pipeSpawnTimer = 0;
}
// Check for score
checkScore();
// Check for coin collection
checkCoinCollection();
// Check for collisions
if (checkCollisions() && !bird.invincible) {
takeDamage();
}
// Screen shake effect when bird is close to pipes
for (var i = 0; i < pipes.length; i++) {
var distance = Math.abs(bird.x - pipes[i].x);
if (distance < 100) {
var intensity = (100 - distance) / 100 * 3;
game.x = (Math.random() - 0.5) * intensity;
game.y = (Math.random() - 0.5) * intensity;
break;
} else {
game.x = 0;
game.y = 0;
}
}
}; ===================================================================
--- original.js
+++ change.js
@@ -12,26 +12,37 @@
anchorX: 0.5,
anchorY: 0.5
});
self.velocity = 0;
- self.gravity = 0.8;
- self.flapStrength = -12;
- self.maxFallSpeed = 15;
+ self.gravity = 0.6;
+ self.flapStrength = -10;
+ self.maxFallSpeed = 12;
self.rotation = 0;
+ self.animationTimer = 0;
+ self.invincible = false;
self.flap = function () {
self.velocity = self.flapStrength;
LK.getSound('flap').play();
- // Animate bird rotation for flapping effect
+ // Wing flapping animation
tween(birdGraphics, {
- rotation: -0.3
+ scaleY: 1.2
}, {
- duration: 100
+ duration: 100,
+ easing: tween.easeOut
});
tween(birdGraphics, {
- rotation: 0
+ scaleY: 1.0
}, {
- duration: 200
+ duration: 100,
+ easing: tween.easeIn
});
+ // Slight upward rotation on flap
+ tween(birdGraphics, {
+ rotation: -0.4
+ }, {
+ duration: 150,
+ easing: tween.easeOut
+ });
};
self.update = function () {
// Apply gravity
self.velocity += self.gravity;
@@ -40,17 +51,72 @@
self.velocity = self.maxFallSpeed;
}
// Update position
self.y += self.velocity;
- // Rotate bird based on velocity
- if (self.velocity > 0) {
- birdGraphics.rotation = Math.min(self.velocity * 0.1, 1.5);
+ // Smooth rotation based on velocity
+ var targetRotation = Math.min(self.velocity * 0.08, 1.2);
+ if (self.velocity < 0) {
+ targetRotation = Math.max(self.velocity * 0.08, -0.4);
+ }
+ // Smooth rotation transition
+ tween.stop(birdGraphics, {
+ rotation: true
+ });
+ tween(birdGraphics, {
+ rotation: targetRotation
+ }, {
+ duration: 200,
+ easing: tween.easeOut
+ });
+ // Subtle bob animation when idle
+ if (Math.abs(self.velocity) < 2) {
+ self.animationTimer += 0.1;
+ var bob = Math.sin(self.animationTimer) * 2;
+ birdGraphics.y = bob;
+ }
+ // Invincibility flashing
+ if (self.invincible) {
+ birdGraphics.alpha = 0.5 + 0.5 * Math.sin(LK.ticks * 0.3);
} else {
- birdGraphics.rotation = Math.max(self.velocity * 0.1, -0.5);
+ birdGraphics.alpha = 1;
}
};
return self;
});
+var Building = Container.expand(function () {
+ var self = Container.call(this);
+ var buildingGraphics = self.attachAsset('building', {
+ anchorX: 0.5,
+ anchorY: 1
+ });
+ self.speed = -2;
+ self.update = function () {
+ self.x += self.speed;
+ // Reset position when off screen
+ if (self.x < -200) {
+ self.x = 2048 + 200;
+ self.y = 2732 - 100; // Ground level
+ }
+ };
+ return self;
+});
+var Cloud = Container.expand(function () {
+ var self = Container.call(this);
+ var cloudGraphics = self.attachAsset('cloud', {
+ anchorX: 0.5,
+ anchorY: 0.5
+ });
+ self.speed = -1;
+ self.update = function () {
+ self.x += self.speed;
+ // Reset position when off screen
+ if (self.x < -200) {
+ self.x = 2048 + 200;
+ self.y = 100 + Math.random() * 300;
+ }
+ };
+ return self;
+});
var Coin = Container.expand(function () {
var self = Container.call(this);
var coinGraphics = self.attachAsset('coin', {
anchorX: 0.5,
@@ -70,10 +136,10 @@
return self;
});
var Pipe = Container.expand(function () {
var self = Container.call(this);
- self.gapHeight = 200;
- self.speed = -4;
+ self.gapHeight = 220;
+ self.speed = -3;
self.scored = false;
// Create top pipe
self.topPipe = self.attachAsset('pipe', {
anchorX: 0.5,
@@ -83,25 +149,44 @@
self.bottomPipe = self.attachAsset('pipe', {
anchorX: 0.5,
anchorY: 0
});
+ // Add pipe caps for authentic look
+ self.topCap = LK.getAsset('pipe', {
+ anchorX: 0.5,
+ anchorY: 1,
+ scaleX: 1.2,
+ scaleY: 0.1
+ });
+ self.bottomCap = LK.getAsset('pipe', {
+ anchorX: 0.5,
+ anchorY: 0,
+ scaleX: 1.2,
+ scaleY: 0.1
+ });
+ self.addChild(self.topCap);
+ self.addChild(self.bottomCap);
self.setupPipes = function (gapCenterY) {
self.topPipe.y = gapCenterY - self.gapHeight / 2;
self.bottomPipe.y = gapCenterY + self.gapHeight / 2;
+ self.topCap.y = self.topPipe.y;
+ self.bottomCap.y = self.bottomPipe.y;
};
self.update = function () {
self.x += self.speed;
};
self.checkCollision = function (bird) {
+ var birdRadius = 25;
+ var pipeWidth = 62;
var birdBounds = {
- left: bird.x - 30,
- right: bird.x + 30,
- top: bird.y - 30,
- bottom: bird.y + 30
+ left: bird.x - birdRadius,
+ right: bird.x + birdRadius,
+ top: bird.y - birdRadius,
+ bottom: bird.y + birdRadius
};
var pipeBounds = {
- left: self.x - 60,
- right: self.x + 60,
+ left: self.x - pipeWidth,
+ right: self.x + pipeWidth,
topBottom: self.topPipe.y,
bottomTop: self.bottomPipe.y
};
// Check if bird is within pipe horizontal bounds
@@ -169,14 +254,18 @@
var bird;
var pipes = [];
var coins = [];
var spawnPoints = [];
+var clouds = [];
+var buildings = [];
var ground;
var gameStarted = false;
var gameActive = true;
var pipeSpawnTimer = 0;
-var pipeSpawnInterval = 120; // 2 seconds at 60fps
+var pipeSpawnInterval = 90; // 1.5 seconds at 60fps
var playerHealth = 3;
+var bestScore = 0;
+var dayTime = true;
// Create score display
var scoreTxt = new Text2('0', {
size: 80,
fill: 0xFFFFFF
@@ -208,8 +297,26 @@
bird.invincible = false;
game.addChild(bird);
// Initialize health display
updateHealthDisplay();
+// Initialize clouds
+for (var i = 0; i < 4; i++) {
+ var cloud = new Cloud();
+ cloud.x = i * 500 + 200;
+ cloud.y = 100 + Math.random() * 300;
+ clouds.push(cloud);
+ game.addChild(cloud);
+}
+// Initialize buildings
+for (var i = 0; i < 6; i++) {
+ var building = new Building();
+ building.x = i * 350 + 100;
+ building.y = 2732 - 100;
+ var randomHeight = 200 + Math.random() * 400;
+ building.scaleY = randomHeight / 300;
+ buildings.push(building);
+ game.addChild(building);
+}
// Initialize spawn points
for (var i = 0; i < 3; i++) {
var spawnPoint = new SpawnPoint();
spawnPoint.x = 2048 + 200 + i * 400;
@@ -223,8 +330,25 @@
anchorY: 0,
x: 0,
y: 2732 - 100
});
+// Add ground scrolling animation
+tween(ground, {
+ x: -200
+}, {
+ duration: 4000,
+ easing: tween.linear,
+ onFinish: function onFinish() {
+ ground.x = 0;
+ tween(ground, {
+ x: -200
+ }, {
+ duration: 4000,
+ easing: tween.linear,
+ onFinish: arguments.callee
+ });
+ }
+});
function spawnPipe() {
var pipe = new Pipe();
pipe.x = 2048 + 60;
// Random gap center position
@@ -337,8 +461,15 @@
}
};
// Main game loop
game.update = function () {
+ // Always update background elements for ambiance
+ for (var i = 0; i < clouds.length; i++) {
+ clouds[i].update();
+ }
+ for (var i = 0; i < buildings.length; i++) {
+ buildings[i].update();
+ }
if (!gameStarted || !gameActive) {
return;
}
// Update bird
@@ -371,20 +502,13 @@
spawnPoints[i].x = 2048 + 200;
spawnPoints[i].y = 300 + Math.random() * 400;
}
}
- // Spawn new pipes using spawn points
+ // Spawn new pipes with dynamic difficulty
pipeSpawnTimer++;
- if (pipeSpawnTimer >= pipeSpawnInterval) {
- // Find available spawn point
- for (var i = 0; i < spawnPoints.length; i++) {
- if (spawnPoints[i].canSpawn() && spawnPoints[i].x > 2048 - 200) {
- if (spawnPoints[i].triggerSpawn()) {
- spawnPipe();
- break;
- }
- }
- }
+ var adjustedInterval = Math.max(60, pipeSpawnInterval - Math.floor(LK.getScore() / 10) * 5);
+ if (pipeSpawnTimer >= adjustedInterval) {
+ spawnPipe();
pipeSpawnTimer = 0;
}
// Check for score
checkScore();
@@ -393,5 +517,18 @@
// Check for collisions
if (checkCollisions() && !bird.invincible) {
takeDamage();
}
+ // Screen shake effect when bird is close to pipes
+ for (var i = 0; i < pipes.length; i++) {
+ var distance = Math.abs(bird.x - pipes[i].x);
+ if (distance < 100) {
+ var intensity = (100 - distance) / 100 * 3;
+ game.x = (Math.random() - 0.5) * intensity;
+ game.y = (Math.random() - 0.5) * intensity;
+ break;
+ } else {
+ game.x = 0;
+ game.y = 0;
+ }
+ }
};
\ No newline at end of file
Make bird same like flappy bird. In-Game asset. 2d. No shadows
Make background forest. In-Game asset. 2d. No shadows
Flapy bird coin. In-Game asset. 2d. No shadows
Make it flapy bird cloud. In-Game asset. 2d. High contrast. No shadows
Add a monkey flying with plane. In-Game asset. 2d. No shadows
Make a zombi flapy bird. In-Game asset. 2d. High contrast. No shadows
Make a sigma flapy bird. In-Game asset. 2d. No shadows
Make a star War flapy bird. In-Game asset. 2d. No shadows
Make a gost flapy bird. In-Game asset. 2d. High contrast. No shadows
Make a starting buton. In-Game asset. 2d. High contrast. No shadows
Make a skin buton. In-Game asset. 2d. No shadows
Make it flapy bird building. 2d. No shadows
Make it flapy bird shape. 2d. High contrast. No shadows
Make it flapy bird building. In-Game asset. 2d. No shadows