Code edit (2 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: PlantNode is undefined' in or related to this line: 'var FarmNode = PlantNode.expand(function (config) {' Line Number: 168
User prompt
Rename the Farm class to FarmNode, additionally, the FarmNode should inherit from the PlantNode
User prompt
PlantNode should be inherit from ConfigContainer
Code edit (4 edits merged)
Please save this source code
User prompt
create a Fruit class which inherits from the ConfigContainer but takes in a `fruitName` as the first argument and the `config` as the second
Code edit (1 edits merged)
Please save this source code
User prompt
Add a `setItem` function to the InventorySlot class which takes in an itemName variable and, creates and attaches an asset (id of itemName) to the inventorySlot, center anchored
Code edit (4 edits merged)
Please save this source code
User prompt
Fix Bug: 'ReferenceError: setQuantity is not defined' in or related to this line: 'self.adjustQuantity = setQuantity;' Line Number: 467
Code edit (1 edits merged)
Please save this source code
Code edit (2 edits merged)
Please save this source code
User prompt
Use bordertext instead of text2 for the quantity
User prompt
InventorySlots should display their quantities as text along their bottom edge
Code edit (1 edits merged)
Please save this source code
User prompt
Fix Bug: 'TypeError: self is undefined' in or related to this line: 'self.adjustItem = function (item, quantity) {' Line Number: 541
User prompt
Add an adjustItem function to the Inventory which takes in an item (string) and a quantity (number). Check which InventorySlot has the item using the index slot, or assign it to the first available empty slot
User prompt
Add a self.item and self.quantity variables to the InventorySlot class
User prompt
Add an itemIndex map to the Inventory class
Code edit (2 edits merged)
Please save this source code
User prompt
In the asteroid update function, before the final return statement, check the distance squared between the asteroid and the planet's radius and return true
User prompt
When calling transitionPlanet, destroy all asteroids
User prompt
rename the constant `ASTEROID_SIZE` to `ASTEROID_MARGIN` and update all references that use it
Code edit (1 edits merged)
Please save this source code
User prompt
Asteroids should have a slightly random scale. Make sure to add any constants to the global
/****
* Classes
****/
var BorderedText = Container.expand(function (string, config) {
var self = Container.call(this);
config = config || {};
var textList = [];
var anchorX = config.anchorX !== undefined ? config.anchorX : 0;
var anchorY = config.anchorY !== undefined ? config.anchorY : 0;
var borderConfig = {
fill: config.border || TEXT_DEFAULT_BORDER,
font: config.font || TEXT_DEFAULT_FONT,
size: config.size || TEXT_DEFAULT_SIZE
};
var textConfig = {
fill: config.fill || TEXT_DEFAULT_FILL,
font: config.font || TEXT_DEFAULT_FONT,
size: config.size || TEXT_DEFAULT_SIZE
};
for (var i = 0; i < TEXT_OFFSETS.length; i++) {
var localSettings = i === TEXT_OFFSETS.length - 1 ? textConfig : borderConfig;
var text = self.addChild(new Text2(string, localSettings));
text.x += TEXT_OFFSETS[i][0] * TEXT_BORDER_WEIGHT;
text.y += TEXT_OFFSETS[i][1] * TEXT_BORDER_WEIGHT;
text.anchor.set(anchorX, anchorY);
textList.push(text);
}
;
self.x = config.x || 0;
self.y = config.y || 0;
self.setText = setText;
self.setFill = setFill;
;
function setText(string) {
for (var i = 0; i < textList.length; i++) {
textList[i].setText(string);
}
}
function setFill(newFill) {
textList[textList.length - 1].fill = newFill;
}
});
var CurrencySymbol = Container.expand(function (config) {
var self = Container.call(this);
config = config || {};
var mainSymbol;
var anchorX = config.anchorX !== undefined ? config.anchorX : .5;
var anchorY = config.anchorY !== undefined ? config.anchorY : .5;
var borderSettings = {
fill: 0x000000,
// fill: config.border || TEXT_DEFAULT_BORDER,
size: config.size || TEXT_DEFAULT_SIZE
};
var symbolSettings = {
fill: 0xFFFFFF,
// fill: config.fill || TEXT_DEFAULT_FILL,
size: config.size || TEXT_DEFAULT_SIZE
};
for (var i = 0; i < TEXT_OFFSETS.length; i++) {
var localConfig = i === TEXT_OFFSETS.length - 1 ? symbolSettings : borderSettings;
var symbol = self.attachAsset('currencySymbol', {});
symbol.tint = localConfig.fill;
symbol.anchor.set(anchorX, anchorY);
symbol.scale.set(localConfig.size / 100);
symbol.x += TEXT_OFFSETS[i][0] * TEXT_BORDER_WEIGHT;
symbol.y += TEXT_OFFSETS[i][1] * TEXT_BORDER_WEIGHT;
if (i === TEXT_OFFSETS.length - 1) {
mainSymbol = symbol;
}
}
;
self.x = config.x || 0;
self.y = config.y || 0;
self.setFill = setFill;
;
function setFill(newFill) {
mainSymbol.tint = newFill;
}
});
var CurrencyText = Container.expand(function (amount, config) {
var self = Container.call(this);
config = config || {};
var anchorX = config.anchorX !== undefined ? config.anchorX : .5;
var anchorY = config.anchorY !== undefined ? config.anchorY : .5;
var margin = config.margin || CURRENCY_DEFAULT_MARGIN;
var currencySymbol = self.addChild(new CurrencySymbol({
anchorX: 0,
anchorY: anchorY
}));
var textAmount = self.addChild(new BorderedText(amount, {
anchorX: 0,
anchorY: anchorY
}));
;
self.x = config.x || 0;
self.y = config.y || 0;
self.setAmount = setAmount;
;
function alignText() {
var totalWidth = currencySymbol.width + margin + textAmount.width;
currencySymbol.x = -totalWidth * anchorX;
textAmount.x = currencySymbol.x + currencySymbol.width + margin;
}
function setAmount(newAmount) {
textAmount.setText(newAmount);
alignText();
}
;
alignText();
});
var ConfigContainer = Container.expand(function (config) {
var self = Container.call(this);
;
config = config || {};
self.x = config.x || 0;
self.y = config.y || 0;
self.rotation = config.rotation || 0;
if (config.width !== undefined) {
self.width = config.width;
}
if (config.height !== undefined) {
self.height = config.height;
}
if (self.anchor) {
self.anchor.set(config.anchorX || 0, config.anchorY || 0);
}
;
return self;
});
var Ship = Container.expand(function (x, y) {
var self = Container.call(this);
var shipGraphics = self.attachAsset('ship', {
anchorX: 0.35,
anchorY: 0.5
});
var counter = 0;
;
self.update = update;
self.launch = launch;
self.x = x;
self.y = y;
self.direction = -1;
;
function update() {
if (self.direction < 0) {
self.x -= ROCKET_SPEED_REVERSE;
if (self.x <= self.parent.radius) {
self.x = self.parent.radius;
self.direction = 0;
}
} else if (self.direction > 0) {
counter++;
var speed = Math.pow(ROCKET_SPEED_BASE, counter / ROCKET_SPEED_DIV - ROCKET_SPEED_DELAY);
self.x += speed;
if (self.x > ROCKET_DIST_LEAVE) {
counter = 0;
self.direction = -1;
transitionPlanets();
}
}
}
function launch(direction) {
if (!self.direction) {
self.direction = direction;
}
}
});
var Farm = Container.expand(function () {
var self = Container.call(this);
var farmGraphics = self.attachAsset('farm', {
anchorX: 0.5,
anchorY: 0.6
});
farmGraphics.scale.set(PLOT_SIZE / 100);
;
self.update = update;
;
function update() {}
});
var PlantNode = Container.expand(function (x, y, rotation) {
var self = Container.call(this);
;
self.update = update;
self.x = x;
self.y = y;
self.rotation = rotation;
self.plant;
self.farm;
self.prev;
self.next;
;
function update() {}
});
var Plant = Container.expand(function () {
var self = Container.call(this);
;
return self;
});
var PlantWeed = Plant.expand(function (stage) {
var self = Plant.call(this);
var weedGraphics = self.createAsset('plant0Stage' + stage, {
anchorX: 0.5,
anchorY: 1
});
});
var Planet = Container.expand(function (x, y, radius, assetName, barren) {
var self = Container.call(this);
var perimeter = MATH_2_PI * radius;
var numPlots = Math.floor(perimeter / (PLOT_SIZE + PLOT_GAP));
var numNodes = numPlots / 4;
var nodes = [];
var planetGraphics = self.createAsset(assetName, {
anchorX: 0.5,
anchorY: 0.5
});
planetGraphics.scale.set(2 * radius / 1000);
;
self.update = update;
self.launch = launch;
self.x = x;
self.y = y;
self.radius = radius;
self.rotation = Math.random() * MATH_2_PI;
self.spin = 0;
;
function update(ticks) {
self.rotation += self.spin;
}
function launch(direction) {}
function createNodes() {
if (!barren) {
for (var i = 0; i < numPlots * 4; i++) {
var angle = i / (numPlots * 4) * MATH_2_PI;
var nodeX = radius * Math.cos(angle);
var nodeY = radius * Math.sin(angle);
var rotation = angle + MATH_HALF_PI;
var node = self.addChild(new PlantNode(nodeX, nodeY, rotation));
if (Math.random() < 0.2) {
var stage = Math.floor(Math.random() * 4);
node.plant = node.addChild(new PlantWeed(stage));
} else if (i !== 0 && i % 4 === 0) {
node.farm = node.addChild(new Farm());
}
nodes.push(node);
}
}
}
;
createNodes();
return self;
});
var PlanetGrey = Planet.expand(function (x, y) {
var self = Planet.call(this, x, y, PLANET_RADIUS_GREY, 'planetGrey');
;
self.spin = PLANET_SPIN_GREY;
});
var PlanetRed = Planet.expand(function (x, y) {
var self = Planet.call(this, x, y, PLANET_RADIUS_RED, 'planetRed');
;
self.spin = PLANET_SPIN_RED;
});
var PlanetBlue = Planet.expand(function (x, y) {
var self = Planet.call(this, x, y, PLANET_RADIUS_BLUE, 'planetBlue');
;
self.spin = PLANET_SPIN_BLUE;
});
var PlanetOmni = Planet.expand(function (x, y) {
var self = Planet.call(this, x, y, PLANET_RADIUS_OMNI, 'planetOmni');
;
self.spin = PLANET_SPIN_OMNI;
});
var PlanetGold = Planet.expand(function (x, y) {
var self = Planet.call(this, x, y, PLANET_RADIUS_GOLD, 'planetGold', true);
;
self.spin = PLANET_SPIN_GOLD;
});
var Crosshair = Container.expand(function () {
var self = Container.call(this);
var counter = 0;
var arrows = [];
var arrowOffsets = [{
x: 0,
y: -1
}, {
x: 1,
y: 0
}, {
x: 0,
y: 1
}, {
x: -1,
y: 0
}];
for (var i = 0; i < arrowOffsets.length; i++) {
var arrow = self.attachAsset('arrow', {
anchorX: 0.5,
anchorY: 1
});
arrow.rotation = MATH_HALF_PI * i;
arrows.push(arrow);
self.addChild(arrow);
}
;
self.rotation = MATH_QUARTER_PI;
self.update = update;
;
function update() {
if (currentPlanet !== destinationPlanet) {
counter++;
var distance = CROSSHAIR_DIST + CROSSHAIR_VARIANCE * Math.sin(counter / CROSSHAIR_PERIOD);
setDistance(distance);
} else if (counter > 0) {
counter = 0;
setDistance(CROSSHAIR_DIST);
}
}
function setDistance(distance) {
for (var i = 0; i < arrows.length; i++) {
arrows[i].x = arrowOffsets[i].x * distance;
arrows[i].y = arrowOffsets[i].y * distance;
}
}
;
setDistance(CROSSHAIR_DIST);
});
var NavigationButton = Container.expand(function (x, y, index, callback) {
var self = Container.call(this);
var details = NAVIGATION[index];
var buttonGraphics = self.attachAsset('button', {
anchorX: 0.5,
anchorY: 0.5
});
var planetGraphics = self.createAsset(details.planet, {
anchorX: 0.5,
anchorY: 0.5
});
var currencyText = self.addChild(new CurrencyText(details.cost));
buttonGraphics.tint = 0xFFAAAA;
planetGraphics.width = buttonGraphics.width * 0.4;
planetGraphics.height = buttonGraphics.width * 0.4;
;
self.unlock = unlock;
self.x = x;
self.y = y;
self.cost = details.cost;
self.planet = details.planet;
self.unlocked = false;
self.on('down', function () {
callback(index);
});
;
function unlock() {
self.unlocked = true;
buttonGraphics.tint = 0xFFFFFF;
currencyText.destroy();
}
});
var NavigationInterface = Container.expand(function (x, y) {
var self = Container.call(this);
var buttons = [];
for (var i = 0; i < NAVIGATION.length; i++) {
var buttonX = (-NAVIGATION.length / 2 + 0.5 + i) * 200;
buttons.push(self.addChild(new NavigationButton(buttonX, 0, i, buttonCallback)));
}
buttons[0].addChild(crosshair);
self.x = x;
self.y = y;
;
function buttonCallback(index) {
var button = buttons[index];
if (button.unlocked) {
setDestination(index);
} else if (money >= button.cost) {
moneyDisplay.setAmount(money -= button.cost);
button.unlock();
}
}
self.setDestination = setDestination;
;
function setDestination(index) {
if (destinationPlanet !== index && ship.direction === 0) {
destinationPlanet = index;
buttons[index].addChild(crosshair);
ship.launch(1);
}
}
buttonCallback(0);
});
var WinningMessage = Container.expand(function (x, y, completionTicks) {
var self = Container.call(this);
var seconds = Math.floor(completionTicks / 60);
var minutes = Math.floor(seconds / 60);
var hours = Math.floor(minutes / 60);
seconds = seconds % 60;
minutes = minutes % 60;
var winningTime = (hours > 0 ? hours + 'h ' : '') + (minutes > 0 ? minutes + 'm ' : '') + seconds + 's';
var messageStatTitles = ['Credits', 'Harvests', 'Weeds', 'Trades'];
var messageStatKeys = ['creditsEarned', 'cropsHarvested', 'weedsPulled', 'salesDone'];
var timeText = self.addChild(new BorderedText('You reached the Gold Planet in: ' + winningTime, {
anchorX: .5,
anchorY: 1,
y: -TEXT_WINNING_OFFSET
}));
self.addChild(new BorderedText('Congratulations, you win!', {
anchorX: .5,
anchorY: 1,
size: 80,
y: timeText.y - timeText.height - 10
}));
self.addChild(new BorderedText(messageStatTitles.map(mapTitle).join('\n'), {
anchorX: 1,
anchorY: 0,
y: TEXT_WINNING_OFFSET
}));
self.addChild(new BorderedText(messageStatKeys.map(mapKey).join('\n'), {
anchorX: 0,
anchorY: 0,
y: TEXT_WINNING_OFFSET
}));
;
self.x = x;
self.y = y;
;
function mapTitle(title) {
return '• ' + title + ' ';
}
function mapKey(key) {
var stat = winningStats[key];
var extra = stat - stats[key];
return ': ' + stat + (extra ? ' (+ ' + extra + ')' : '');
}
});
var Background = Container.expand(function () {
var self = Container.call(this);
var backgroundGraphics = self.attachAsset('background', {
anchorX: 0.5,
anchorY: 0.5,
alpha: 0.5
});
backgroundGraphics.width = GAME_WIDTH * 1.05;
backgroundGraphics.height = GAME_WIDTH * 1.05;
;
self.x = GAME_WIDTH / 2;
self.y = GAME_HEIGHT / 2;
self.refresh = refresh;
;
function refresh() {
backgroundGraphics.rotation += Math.PI / 2;
}
});
var InventorySlot = ConfigContainer.expand(function (index, config) {
var self = ConfigContainer.call(this, config);
var frame = self.attachAsset('inventoryFrame', {
anchorX: .5,
anchorY: .5
});
;
self.index = index;
frame.width = INVENTORY_SLOT_SIZE;
frame.height = INVENTORY_SLOT_SIZE;
self.on('down', function () {
self.parent.selectSlot(self.index);
});
});
var Inventory = ConfigContainer.expand(function (config) {
var self = ConfigContainer.call(this, config);
var slots = [];
var widthOffset = INVENTORY_SLOT_SIZE * INVENTORY_COLS * (config.anchorX || 0);
var heightOffset = INVENTORY_SLOT_SIZE * INVENTORY_ROWS * (config.anchorY || 0);
for (var row = 0; row < INVENTORY_ROWS; row++) {
for (var col = 0; col < INVENTORY_COLS; col++) {
slots.push(self.addChild(new InventorySlot(row * INVENTORY_COLS + col, {
x: (col + .5) * INVENTORY_SLOT_SIZE - widthOffset,
y: (row + .5) * INVENTORY_SLOT_SIZE - heightOffset
})));
}
}
;
self.slots = slots;
self.selectSlot = selectSlot;
self.selector = LK.getAsset('inventorySelector', {
anchorX: .5,
anchorY: .5,
tint: 0xFF3333
});
;
function selectSlot(index) {
self.slots[index].addChild(self.selector);
}
;
selectSlot(0);
});
var Asteroid = ConfigContainer.expand(function (config) {
var self = ConfigContainer.call(this, config);
var asteroidGraphics = self.attachAsset('asteroid', {
anchorX: 0.5,
anchorY: 0.5,
rotation: Math.random() * MATH_2_PI
});
var randomScale = ASTEROID_SCALE_MIN + Math.random() * (ASTEROID_SCALE_MAX - ASTEROID_SCALE_MIN);
asteroidGraphics.scale.set(randomScale);
var side = self.x < 0;
var targetY = ASTEROID_TARGET_OFFSET + Math.random() * (GAME_HEIGHT - 2 * ASTEROID_TARGET_OFFSET);
var targetX = side ? GAME_WIDTH + ASTEROID_SIZE : -ASTEROID_SIZE;
var rotationSpeed = (Math.random() - 0.5) * 2 * ASTEROID_ROTATION_MAX;
var angle = Math.atan2(targetY - self.y, targetX - self.x);
var velocityX = ASTEROID_SPEED * Math.cos(angle);
var velocityY = ASTEROID_SPEED * Math.sin(angle);
;
self.update = update;
;
function update() {
self.rotation += rotationSpeed;
self.x += velocityX;
self.y += velocityY;
return side ? self.x > targetX : self.x < targetX;
}
});
/****
* Initialize Game
****/
var game = new LK.Game({
backgroundColor: 0x000000 // Init game with black background
});
/****
* Game Code
****/
var MATH_2_PI = Math.PI * 2;
var MATH_HALF_PI = Math.PI / 2;
var MATH_QUARTER_PI = Math.PI / 4;
var MATH_HALF_ROOT_3 = Math.sqrt(3) / 2;
;
var GAME_TICKS = 60;
var GAME_WIDTH = 2048;
var GAME_HEIGHT = 2732;
var PLANET_RADIUS_GREY = 200;
var PLANET_RADIUS_RED = 400;
var PLANET_RADIUS_BLUE = 350;
var PLANET_RADIUS_OMNI = 500;
var PLANET_RADIUS_GOLD = 250;
var PLANET_SPIN_GREY = 0.001;
var PLANET_SPIN_RED = -0.0002;
var PLANET_SPIN_BLUE = 0.001;
var PLANET_SPIN_OMNI = 0.005;
var PLANET_SPIN_GOLD = -0.001;
var ROCKET_DIST_REVERSE = 300;
var ROCKET_DIST_LEAVE = 2500;
var ROCKET_SPEED_BASE = 1.2;
var ROCKET_SPEED_DIV = 5;
var ROCKET_SPEED_DELAY = 10;
var ROCKET_SPEED_REVERSE = 2;
var PLOT_SIZE = 65;
var PLOT_GAP = 90;
var TEXT_OFFSETS = [[0, 1], [MATH_HALF_ROOT_3, 0.5], [MATH_HALF_ROOT_3, -0.5], [0, -1], [-MATH_HALF_ROOT_3, -0.5], [-MATH_HALF_ROOT_3, 0.5], [0, 0]];
var TEXT_BORDER_WEIGHT = 4;
var TEXT_DEFAULT_SIZE = 50;
var TEXT_DEFAULT_FONT = 'Arial';
var TEXT_DEFAULT_FILL = '#FFFFFF';
var TEXT_DEFAULT_BORDER = '#000000';
var TEXT_WINNING_OFFSET = 300;
var CURRENCY_DEFAULT_MARGIN = 0;
var CROSSHAIR_DIST = 40;
var CROSSHAIR_VARIANCE = 10;
var CROSSHAIR_PERIOD = 1.25 * GAME_TICKS / MATH_2_PI;
var INVENTORY_ROWS = 1;
var INVENTORY_COLS = 8;
var INVENTORY_SLOT_SIZE = 100;
var ASTEROID_SPAWN_CHANCE = 0.01;
var ASTEROID_ROTATION_MAX = 0.02;
var ASTEROID_SPEED = 5;
var ASTEROID_SIZE = 100;
var ASTEROID_SCALE_MIN = 0.75;
var ASTEROID_SCALE_MAX = 1.25;
var ASTEROID_TARGET_OFFSET = 500;
var NAVIGATION = [{
cost: 0,
"class": PlanetGrey,
planet: 'planetGrey',
description: 'Small moon, with no special bonuses.'
}, {
cost: 100,
"class": PlanetRed,
planet: 'planetRed',
description: ''
}, {
cost: 250,
"class": PlanetBlue,
planet: 'planetBlue',
description: ''
}, {
cost: 800,
"class": PlanetOmni,
planet: 'planetOmni',
description: ''
}, {
cost: 3000,
"class": PlanetGold,
planet: 'planetGold',
description: 'A wealthy planet with vast resources.'
}];
;
var money = 10000;
var stats = {
creditsEarned: 0,
cropsHarvested: 0,
cropsOverrun: 0,
weedsPulled: 0,
salesDone: 0,
salesRejected: 0
};
var winningStats = {};
var winningTick = -1;
var winningTime = '';
var winningMessage;
var currentPlanet = 0;
var destinationPlanet = 0;
var background = game.addChild(new Background());
var planet = game.addChild(new PlanetGrey(GAME_WIDTH / 2, GAME_HEIGHT / 2));
var ship = planet.addChild(new Ship(planet.radius + ROCKET_DIST_REVERSE, 0));
var planets = [planet];
var asteroidList = [];
var inventory = LK.gui.top.addChild(new Inventory({
y: INVENTORY_SLOT_SIZE / 2 + 10,
anchorX: .5,
anchorY: .5
}));
var moneyDisplay = LK.gui.top.addChild(new CurrencyText(money, {
x: inventory.width / 2 + 25,
y: inventory.y,
size: 70,
anchorX: 0
}));
var crosshair = new Crosshair();
var navigation = LK.gui.bottom.addChild(new NavigationInterface(0, -100));
;
LK.on('tick', function () {
ship.update();
planet.update();
crosshair.update();
for (var i = asteroidList.length - 1; i >= 0; i--) {
if (asteroidList[i].update()) {
asteroidList[i].destroy();
asteroidList.splice(i, 1);
}
}
spawnAsteroidWithChance();
});
;
function spawnAsteroidWithChance() {
if (Math.random() < ASTEROID_SPAWN_CHANCE) {
var side = Math.random() < 0.5;
asteroidList.push(game.addChild(new Asteroid({
x: side ? -ASTEROID_SIZE : GAME_WIDTH + ASTEROID_SIZE,
y: Math.random() * GAME_HEIGHT,
vx: side ? ASTEROID_SPEED : -ASTEROID_SPEED
})));
}
}
function transitionPlanets() {
LK.effects.flashScreen(0x000000, 500);
currentPlanet = destinationPlanet;
planet.parent.removeChild(planet);
planet = planets[currentPlanet];
background.refresh();
if (!planet) {
var planetClass = NAVIGATION[currentPlanet]["class"];
planet = planets[currentPlanet] = new planetClass(GAME_WIDTH / 2, GAME_HEIGHT / 2);
}
if (currentPlanet === NAVIGATION.length - 1) {
if (winningTick < 0) {
saveStats();
winningTick = LK.ticks;
}
winningMessage = LK.gui.center.addChild(new WinningMessage(0, -100, winningTick));
} else if (winningMessage) {
winningMessage.destroy();
winningMessage = undefined;
}
game.addChild(planet);
planet.addChild(ship);
ship.x = planet.radius + ROCKET_DIST_REVERSE;
}
function saveStats() {
for (var key in stats) {
winningStats[key] = stats[key];
}
}
pixel art of a tiny planet. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a planet. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of an alien currency symbol. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a planet made of gold ore. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
plain black background with stars. 2d repeating Texture.
pixel art of a asteroid. Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a cute alien farmer, side view. Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a rocky explosion.. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art flame particle. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a large white, empty, rectangular, speech bubble. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
pixel art of a red chevron. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
Pixel art of yellow grapes. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.