User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in this line: 'self.villagerAndFramerateDisplay.update();' Line Number: 471
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in this line: 'self.villagerAndFramerateDisplay.update();' Line Number: 471
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in this line: 'self.villagerAndFramerateDisplay.update();' Line Number: 471
User prompt
Fix Bug: 'TypeError: Cannot read properties of undefined (reading 'update')' in this line: 'self.villagerAndFramerateDisplay.update();' Line Number: 344
User prompt
Fix Bug: 'Uncaught ReferenceError: VillagerAndFramerateDisplay is not defined' in this line: 'self.villagerAndFramerateDisplay = new VillagerAndFramerateDisplay(self);' Line Number: 376
User prompt
fix
User prompt
fix
User prompt
Fix Bug: 'Uncaught ReferenceError: resources is not defined' in this line: 'self.resourceDisplay = new ResourceDisplay(resources);' Line Number: 368
User prompt
fix
User prompt
Fix Bug: 'TypeError: this.increaseIQ is not a function' in this line: 'this.increaseIQ();' Line Number: 298
User prompt
Fix Bug: 'TypeError: villagerA.kiss is not a function' in this line: 'villagerA.kiss(villagerB);' Line Number: 386
User prompt
Fix Bug: 'TypeError: villagerA.canFallInLove is not a function' in this line: 'if (villagerA.canFallInLove(villagerB)) {' Line Number: 382
User prompt
Fix Bug: 'TypeError: villager.decideNextAction is not a function' in this line: 'villager.decideNextAction();' Line Number: 335
User prompt
Fix Bug: 'TypeError: villager.isDoingSomething is not a function' in this line: 'if (!villager.isDoingSomething()) {' Line Number: 330
User prompt
Fix Bug: 'TypeError: this.decideNextAction is not a function' in this line: 'this.decideNextAction();' Line Number: 289
User prompt
Fix Bug: 'TypeError: this.continuousMove is not a function' in this line: 'this.continuousMove();' Line Number: 289
User prompt
improve all the code
User prompt
create a way to villager to became smarter in realtime
User prompt
improve the movement of the villager base on their IQ
User prompt
batiment have to be at least 400 pixel to each other
User prompt
add one type of each batiment in the begining
User prompt
add 2 new idea
User prompt
improve
User prompt
Fix Bug: 'Uncaught TypeError: self.createAndAddVillager is not a function' in this line: 'self.createAndAddVillager(Math.random() * 2048, Math.random() * 2732);' Line Number: 570
User prompt
Fix Bug: 'Uncaught TypeError: self.createAndAddVillager is not a function' in this line: 'self.createAndAddVillager(Math.random() * 2048, Math.random() * 2732);' Line Number: 570
var Cloud = Container.expand(function () {
var self = Container.call(this);
var cloudGraphics = self.createAsset('cloud', 'Cloud Graphics', .5, .5);
cloudGraphics.alpha = 0.5;
self.x = Math.random() * 2048;
self.y = Math.random() * 2732;
self.speed = Math.random() * 2 + 1;
self.move = function () {
self.x += self.speed;
if (self.x > 2048) {
self.x = -cloudGraphics.width;
}
};
});
var School = Container.expand(function () {
var self = Container.call(this);
var schoolGraphics = self.createAsset('school', 'School Graphics', .5, .5);
self.x = 2048 / 2 - 500;
self.y = 2732 / 2 + 500;
self.teach = function (villager) {};
});
var Inn = Container.expand(function () {
var self = Container.call(this);
var innGraphics = self.createAsset('inn', 'Inn Graphics', .5, .5);
self.x = 2048 / 2;
self.y = 2732 / 2 + 300;
self.isOccupiable = true;
self.occupy = function (villager) {
if (!self.isOccupiable) return;
self.isOccupiable = false;
villager.state = 'restingAtInn';
LK.setTimeout(function () {
self.isOccupiable = true;
}, 10000);
};
});
var Gardener = Container.expand(function () {
var self = Container.call(this);
var gardenerGraphics = self.createAsset('gardener', 'Gardener Graphics', .5, .5);
self.x = Math.random() * 2048;
self.y = Math.random() * 2732;
self.tendPlants = function () {};
self.plantNewTree = function () {
var newTree = new Tree();
newTree.x = Math.random() * 2048;
newTree.y = Math.random() * 2732;
self.parent.addChild(newTree);
};
});
var Festival = Container.expand(function () {
var self = Container.call(this);
var festivalGraphics = self.createAsset('festival', 'Festival Graphics', .5, .5);
self.x = 2048 / 2;
self.y = 2732 / 2 - 300;
self.isActive = false;
self.activateFestival = function () {
self.isActive = true;
LK.setTimeout(function () {
self.isActive = false;
}, 10000);
};
self.isVillagerParticipating = function (villager) {
return self.isActive && villager.intersects(self);
};
});
var Heart = Container.expand(function () {
var self = Container.call(this);
var heartGraphics = self.createAsset('heartImage', 'Heart Image', .5, .5);
self.showAbove = function (villager) {
self.x = villager.x;
self.y = villager.y - villager.height;
self.alpha = 1;
self.follow = function () {
if (villager) {
self.x = villager.x;
self.y = villager.y - villager.height;
}
};
LK.on('tick', self.follow);
LK.setTimeout(function () {
LK.off('tick', self.follow);
self.alpha = 1;
self.destroy();
}, 1000);
};
});
var Market = Container.expand(function () {
var self = Container.call(this);
var marketGraphics = self.createAsset('market', 'Market Graphics', .5, .5);
self.x = 2048 / 2;
self.y = 2732 / 2;
self.availableResources = {
wood: 0,
rock: 0,
food: 0
};
self.trade = function (villager, resourceType, amount) {
if (self.availableResources[resourceType] >= amount) {
self.availableResources[resourceType] -= amount;
villager.gameResources[resourceType].amount += amount;
}
};
self.addResource = function (resourceType, amount) {
self.availableResources[resourceType] += amount;
};
});
var HouseBuilder = Container.expand(function () {
var self = Container.call(this);
self.build = function (villager) {
var newHouse = new House();
newHouse.initializeRandomPosition();
villager.parent.addChild(newHouse);
villager.state = 'atHome';
villager.home = newHouse;
newHouse.scheduleVillagerWork(villager);
};
});
var Resource = Container.expand(function (type, amount) {
var self = Container.call(this);
self.type = type;
self.amount = amount;
var resourceGraphics = self.createAsset(type.toLowerCase() + 'Image', type + ' Image', .5, .5);
});
var Tree = Container.expand(function () {
var self = Container.call(this);
var treeGraphics = self.createAsset('treeImage', 'Tree Image', .5, .5);
self.resourceType = 'food';
self.amount = 100;
self.collectResource = function (villager) {
if (self.amount > 0) {
var collectedAmount = Math.min(5, self.amount);
villager.gameResources.food.amount += collectedAmount;
villager.carriedFood += collectedAmount;
self.amount -= collectedAmount;
if (self.amount <= 0) {
self.destroy();
}
}
};
});
var Villager = Container.expand(function (resources) {
var self = Container.call(this);
Villager.prototype.participateInFestival = function () {
if (this.parent.festival.isVillagerParticipating(this)) {
this.state = 'participatingInFestival';
LK.effects.flashObject(this, 0x00ff00, 500);
}
};
Villager.prototype.calculateSocialUtility = function () {
var socialFactor = this.partner ? 0 : 1000;
var socialOpportunities = this.parent.villagers.filter((function (v) {
return v !== this && this.canFallInLove(v);
}).bind(this)).length;
return socialFactor + socialOpportunities * 100;
};
Villager.prototype.kiss = function (partner) {
if (this.canFallInLove(partner)) {
var heart = new Heart();
this.parent.addChild(heart);
heart.showAbove(this);
var heart = new Heart();
this.parent.addChild(heart);
heart.showAbove(this);
this.createBabyWith(partner);
}
};
Villager.prototype.createBabyWith = function (partner) {
var babyX = (this.x + partner.x) / 2;
var babyY = (this.y + partner.y) / 2;
var babyVillager = this.parent.createAndAddVillager(babyX, babyY, true);
babyVillager.home = this.home || partner.home;
babyVillager.workplace = this.workplace || partner.workplace;
};
Villager.prototype.continuousMove = function () {
if (this.x < this.speed || this.x > 2048 - this.speed) this.directionX *= -1;
if (this.y < this.speed || this.y > 2732 - this.speed) this.directionY *= -1;
this.x = Math.max(this.speed, Math.min(2048 - this.speed, this.x + this.speed * this.directionX));
this.y = Math.max(this.speed, Math.min(2732 - this.speed, this.y + this.speed * this.directionY));
if (Math.random() < 0.5) {
this.directionX = Math.random() < 0.5 ? -1 : 1;
this.directionY = Math.random() < 0.5 ? -1 : 1;
}
};
Villager.prototype.directionX = 1;
Villager.prototype.directionY = 1;
Villager.prototype.restAtHome = function () {
this.state = 'resting';
this.tiredness = Math.max(0, this.tiredness - 0.1);
if (this.home) {
this.home.occupy(this);
}
if (this.tiredness <= 0) {
this.state = 'atHome';
}
};
Villager.prototype.isDoingSomething = function () {
return this.state === 'goingToWork' || this.state === 'working' || this.state === 'goingHome' || this.state === 'resting' || this.state === 'plantingTree' || this.state === 'buildingHouse';
};
Villager.prototype.carriedWood = 0;
Villager.prototype.carriedRock = 0;
Villager.prototype.carriedFood = 0;
Villager.prototype.tiredness = 0;
Villager.prototype.canBuildHouse = function () {
return this.gameResources && this.gameResources.wood.amount >= 200 && this.gameResources.rock.amount >= 200 && this.gameResources.food.amount >= 200;
};
Villager.prototype.calculateBuildUtility = function () {
return this.canBuildHouse() ? 25000 : 0;
};
Villager.prototype.hasResources = function () {
return this.carriedWood > 0 || this.carriedRock > 0 || this.carriedFood > 0;
};
Villager.prototype.canFallInLove = function (otherVillager) {
return this.state === 'atHome' && otherVillager.state === 'atHome' && !this.partner && !otherVillager.partner;
};
self.gameResources = resources;
var villagerGraphics = self.createAsset('villager', 'Villager Graphics', .5, .5);
var heart = new Heart();
self.addChild(heart);
heart.showAbove(self);
self.targetX = null;
self.targetY = null;
self.home = null;
self.workplace = null;
self.resourceType = null;
self.speed = 12;
self.moveTo = function (x, y, state) {
self.targetX = x;
self.targetY = y;
if (state) self.state = state;
};
self.update = function () {
self.continuousMove();
self.decideNextAction();
self.executeCurrentAction();
};
self.decideNextAction = function () {
var utilities = [{
action: 'work',
utility: self.calculateWorkUtility()
}, {
action: 'home',
utility: self.calculateHomeUtility()
}, {
action: 'plant',
utility: self.calculatePlantUtility(self.gameResources)
}, {
action: 'buildHouse',
utility: self.calculateBuildUtility()
}, {
action: 'trade',
utility: self.calculateTradeUtility()
}, {
action: 'socialize',
utility: self.calculateSocialUtility()
}];
var totalUtility = utilities.reduce(function (sum, utility) {
return sum + utility.utility;
}, 0);
var randomSelection = Math.random() * totalUtility;
var accumulatedUtility = 0;
for (var i = 0; i < utilities.length; i++) {
accumulatedUtility += utilities[i].utility;
if (randomSelection <= accumulatedUtility) {
self.state = utilities[i].action;
break;
}
}
if (self.state === 'work' && self.workplace) {
self.moveTo(self.workplace.x, self.workplace.y, 'goingToWork');
}
};
self.executeCurrentAction = function () {
switch (self.state) {
case 'goingToWork':
if (self.workplace && self.workplace.x !== null && self.workplace.y !== null) {
self.moveTowards(self.workplace.x, self.workplace.y);
if (self.intersects(self.workplace)) {
self.state = 'working';
self.startWorking();
}
}
break;
case 'working':
if (self.workplace && typeof self.workplace.collectResource === 'function') {
self.workplace.collectResource(self);
}
break;
case 'goingHome':
if (self.home) {
self.moveTowards(self.home.x, self.home.y);
if (self.intersects(self.home)) {
self.arriveHome();
}
}
break;
case 'resting':
self.restAtHome();
break;
case 'plantingTree':
self.plantTree();
break;
case 'buildingHouse':
self.buildHouse();
break;
case 'trade':
if (self.parent.market) {
self.moveTowards(self.parent.market.x, self.parent.market.y);
if (self.intersects(self.parent.market)) {
if (self.carriedWood > 10) self.parent.market.trade(self, 'wood', 10);
if (self.carriedRock > 10) self.parent.market.trade(self, 'rock', 10);
if (self.carriedFood > 10) self.parent.market.trade(self, 'food', 10);
self.state = 'atHome';
}
}
break;
}
};
self.calculateWorkUtility = function () {
return self.workplace && self.workplace.resourceType && self.workplace.resourceType.amount > 0 ? 25000 : 1;
};
self.calculateHomeUtility = function () {
return self.tiredness > 0.7 || self.hasResources() ? 25000 : 1;
};
self.calculatePlantUtility = function (gameResources) {
return self.gameResources && self.gameResources.food.amount > 50 && !self.workplace ? 25000 : 0;
};
self.calculateTradeUtility = function () {
var excessResources = (self.carriedWood > 10 ? 1 : 0) + (self.carriedRock > 10 ? 1 : 0) + (self.carriedFood > 10 ? 1 : 0);
return excessResources > 1 ? 25000 : 0;
};
self.moveTowards = function (x, y) {
var dx = x - self.x;
var dy = y - self.y;
if (dx !== 0 || dy !== 0) {
self.moveTo(x, y);
self.moveTowardsTarget();
}
};
self.moveTowardsTarget = function () {
if (self.targetX !== null && self.targetY !== null) {
var dx = self.targetX - self.x;
var dy = self.targetY - self.y;
var distance = Math.sqrt(dx * dx + dy * dy);
if (distance < self.speed) {
self.x = self.targetX;
self.y = self.targetY;
self.targetX = null;
self.targetY = null;
} else {
var angle = Math.atan2(dy, dx);
self.x += Math.cos(angle) * Math.min(self.speed, distance);
self.y += Math.sin(angle) * Math.min(self.speed, distance);
}
}
};
});
var EmployingWorkPlace = Container.expand(function () {
var self = Container.call(this);
var workplaceGraphics = self.createAsset('workplace', 'Workplace Graphics', .5, .5);
self.isEmploying = true;
self.employ = function (villager) {};
});
var House = Container.expand(function () {
var self = Container.call(this);
House.prototype.scheduleVillagerWork = function (villager) {
LK.setTimeout(function () {
villager.state = 'goingToWork';
villager.moveTo(villager.workplace.x, villager.workplace.y);
}, 5000);
};
House.prototype.initializeRandomPosition = function () {
this.x = Math.random() * 2048;
this.y = Math.random() * 2732;
};
var houseGraphics = self.createAsset('house', 'House Graphics', .5, .5);
self.isOccupiable = true;
House.prototype.occupy = function (villager) {
if (!this.isOccupiable) return;
this.isOccupiable = false;
villager.home = this;
this.scheduleVillagerWork(villager);
};
});
var ResourceDisplay = Container.expand(function (gameResources) {
var self = Container.call(this);
self.gameResources = gameResources || ({
wood: {
amount: 0
},
rock: {
amount: 0
},
food: {
amount: 0
}
});
var resourceDisplayText = new Text2('', {
size: 50,
fill: "#ffffff"
});
resourceDisplayText.anchor.set(0.5, 0);
resourceDisplayText.x = 2048 / 2 - 800 - 500 + 100;
resourceDisplayText.y = 50;
LK.gui.topCenter.addChild(resourceDisplayText);
self.update = function () {
resourceDisplayText.setText('Resources: Wood ' + self.gameResources.wood.amount + ' units, Rock ' + self.gameResources.rock.amount + ' units, Food ' + self.gameResources.food.amount + ' units');
};
});
var VillagerAndFramerateDisplay = Container.expand(function (game) {
var self = Container.call(this);
self.villagers = game.villagers;
var villagerCountText = new Text2('', {
size: 50,
fill: "#ffffff"
});
villagerCountText.anchor.set(0.5, 0);
villagerCountText.x = 2048 / 2 - 200;
villagerCountText.y = 50;
LK.gui.topCenter.addChild(villagerCountText);
var startTime = Date.now();
var framerateText = new Text2('', {
size: 50,
fill: "#ffffff"
});
framerateText.anchor.set(0, 1);
framerateText.x = 500;
framerateText.y = 2732;
LK.gui.topCenter.addChild(framerateText);
var framerateText = new Text2('', {
size: 50,
fill: "#ffffff"
});
framerateText.anchor.set(0, 1);
framerateText.x = 500;
framerateText.y = 2732;
LK.gui.topCenter.addChild(framerateText);
var lastTick = LK.ticks;
var frameCount = 0;
var lastSecond = Math.floor(lastTick / 60);
self.update = function () {
var currentTick = LK.ticks;
var currentSecond = Math.floor(currentTick / 60);
frameCount++;
if (currentSecond > lastSecond) {
framerateText.setText('FPS: ' + frameCount);
framerateText.visible = true;
frameCount = 0;
lastSecond = currentSecond;
}
villagerCountText.setText('Villagers: ' + (self.villagers ? self.villagers.length : 0));
};
});
var Game = Container.expand(function () {
var self = Container.call(this);
self.createAndAddVillagerIfPossible = function () {
if (self.resources && self.resources.food.amount >= 10) {
self.addVillager(self.createVillager(Math.random() * 2048, Math.random() * 2732));
self.resources.food.amount -= 10;
}
};
var heart = new Heart();
self.addChild(heart);
heart.x = 2048 / 2;
heart.y = 2732 / 2;
Game.prototype.zoomOnVillagers = function (villagerA, villagerB) {
var zoomLevel = 2;
var centerX = (villagerA.x + villagerB.x) / 2;
var centerY = (villagerA.y + villagerB.y) / 2;
LK.stageContainer.scale.x = zoomLevel;
LK.stageContainer.scale.y = zoomLevel;
LK.stageContainer.pivot.x = centerX;
LK.stageContainer.pivot.y = centerY;
LK.stageContainer.x = LK.stageContainer.width / 2;
LK.stageContainer.y = LK.stageContainer.height / 2;
LK.setTimeout(function () {
LK.stageContainer.scale.x = 1;
LK.stageContainer.scale.y = 1;
LK.stageContainer.pivot.x = 0;
LK.stageContainer.pivot.y = 0;
LK.stageContainer.x = 0;
LK.stageContainer.y = 0;
}, 3000);
};
self.makeVillagerDecisions = function (villager) {
if (!villager.isDoingSomething()) {
villager.decideNextAction();
}
};
LK.on('tick', function () {
self.villagerAndFramerateDisplay.update();
var currentTime = Date.now();
var elapsedTime = Math.floor((currentTime - self.startTime) / 1000);
self.timerText.setText('Time: ' + elapsedTime);
self.updateResourceDisplay();
for (var i = 0; i < self.villagers.length; i++) {
self.villagers[i].update();
self.makeVillagerDecisions(self.villagers[i]);
}
self.handleVillagersFallingInLove();
});
self.timerText = new Text2('Time: 0', {
size: 100,
fill: "#ffffff"
});
self.timerText.anchor.set(1, 1);
self.timerText.x = 2048 - 500;
self.timerText.y = 2732;
LK.gui.topCenter.addChild(self.timerText);
self.startTime = Date.now();
self.villagers = [];
self.villagerAndFramerateDisplay = new VillagerAndFramerateDisplay(self);
self.resourceDisplay = new ResourceDisplay(resources);
self.updateResourceDisplay = function () {
self.resourceDisplay.update();
};
self.handleVillagersFallingInLove = function () {
for (var i = 0; i < self.villagers.length; i++) {
for (var j = i + 1; j < self.villagers.length; j++) {
var villagerA = self.villagers[i];
var villagerB = self.villagers[j];
if (villagerA.canFallInLove(villagerB)) {
villagerA.kiss(villagerB);
}
}
}
};
function createResources() {
return {
wood: new Resource('Wood', 100),
rock: new Resource('Rock', 100),
food: new Resource('Food', 100)
};
}
var resources = createResources();
self.addChild(resources.wood);
self.addChild(resources.rock);
self.addChild(resources.food);
var background = self.createAsset('background', 'Background Graphics', 0, 0);
background.width = 4096 * 0.8;
background.height = 5464 * 0.8;
background.x = (2048 - background.width) / 2;
background.y = (2732 - background.height) / 2 - 400;
self.addChildAt(background, 0);
Game.prototype.createVillager = function (x, y, isBaby) {
var villager = new Villager(this.resources);
villager.x = x;
villager.y = y;
if (isBaby) {
villager.scale.x = 0.5;
villager.scale.y = 0.5;
}
return villager;
};
Game.prototype.addVillager = function (villager) {
this.addChild(villager);
this.villagers.push(villager);
};
self.villagers = [];
self.houses = [];
self.cloudLayer = new Container();
LK.stageContainer.addChild(self.cloudLayer);
self.clouds = [];
for (var i = 0; i < 5; i++) {
var cloud = new Cloud();
self.clouds.push(cloud);
self.cloudLayer.addChild(cloud);
}
self.addVillager(self.createVillager(1024, 1366));
for (var i = 0; i < 10; i++) {
self.createAndAddVillager(Math.random() * 2048, Math.random() * 2732);
}
self.market = new Market();
self.addChild(self.market);
Game.prototype.createHouse = function (x, y) {
var house = new House();
house.x = x;
house.y = y;
return house;
};
Game.prototype.addHouse = function (house) {
this.addChild(house);
this.houses.push(house);
};
var houses = [];
var newHouse = self.createHouse(2048 / 2, 2732 / 2);
self.addHouse(newHouse);
houses.push(newHouse);
Game.prototype.createWorkplace = function () {
var workplace = new EmployingWorkPlace();
workplace.x = Math.random() * 2048;
workplace.y = Math.random() * 2732;
return workplace;
};
Game.prototype.addWorkplace = function (workplace) {
this.addChild(workplace);
this.workplaces.push(workplace);
};
self.workplaces = [];
var workplace = self.createWorkplace();
self.addWorkplace(workplace);
self.workplaces.push(workplace);
var house = new House();
house.x = 2048 / 2;
house.y = 2732 / 2;
houses.push(house);
self.addChild(house);
var workplace = new EmployingWorkPlace();
workplace.x = Math.random() * 2048;
workplace.y = Math.random() * 2732;
self.workplaces.push(workplace);
self.addChild(workplace);
self.villagerCreationInterval = LK.setInterval(function () {
self.createAndAddVillagerIfPossible();
}, 10000);
LK.on('tick', function () {
self.villagerAndFramerateDisplay.update();
var currentTime = Date.now();
var elapsedTime = Math.floor((currentTime - self.startTime) / 1000);
self.timerText.setText('Time: ' + elapsedTime);
self.updateResourceDisplay();
for (var i = 0; i < self.villagers.length; i++) {
self.villagers[i].update();
}
self.handleVillagersFallingInLove();
self.updateDayNightCycle();
for (var i = 0; i < self.clouds.length; i++) {
self.clouds[i].move();
}
});
self.updateDayNightCycle = function () {
var cycleDuration = 5000;
var time = (Date.now() - self.startTime) % cycleDuration;
var dayProgress = time / cycleDuration * 2 * Math.PI;
var alpha = 0.15 + 0.2 * Math.cos(dayProgress - Math.PI) * -0.5;
LK.stageContainer.alpha = alpha;
var hours = Math.floor(time / 3600000) % 24;
var minutes = Math.floor(time % 3600000 / 60000);
self.timeOfDayText.setText('Time of Day: ' + hours.toString().padStart(2, '0') + ':' + minutes.toString().padStart(2, '0'));
};
self.timeOfDayText = new Text2('Time of Day: 00:00', {
size: 50,
fill: "#ffffff"
});
self.timeOfDayText.anchor.set(0.5, 0);
self.timeOfDayText.x = 2048 / 2;
self.timeOfDayText.y = 100;
LK.gui.topCenter.addChild(self.timeOfDayText);
});
A background of a paysage with plain and without tree or montainbut no water see from the top in the air 100m by 100m Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
One human medieval villager in a warcraft 2 style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a house in a warcraft 2 style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A tree a rock and crambery in a RTS style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A heart comic style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A cloud in a comic style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A market in a RTS fantasy style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An Inn in a RTS fantasy style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An school in a RTS fantasy style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An bakery in a RTS fantasy style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A well in a RTS fantasy style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A tree in a rts style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
An apple in a rts style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A rock in a rts style Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A home in a RTS and fantasy style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A brewery in a fantasy rts style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
A lumberjack in a fantasy rts style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a marketplace in a fantasy rts style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.
a festival in a fantasy rts style. Single Game Texture. In-Game asset. 2d. Blank background. High contrast. No shadows.