I have encountered projects where things like UI and player feedback aren't really considered until the last possible minute. Then towards the end of the project, they only take one or two passes at it, and it ends up pretty crappy. And a players' understanding of what's going on in the game is at least as important as the game mechanics, no?
So, to recap. I have buildings: house, sawmill, stoneworks, watchtowers, and (now) barracks. Workers appear from the sawmills and stoneworks, seek out the nearest resources, walk over, gather some, walk back, drop them off, and so on. They move around obstacles, avoid enemies, and react appropriately when things don't go according to play... for the most part :)
But what about construction of the actual buildings? In a full-on city building game, the player would select a location on the map, the little villagers would scurry about collecting the required resources from some stockpile, carry everything over, and then slowly build it. I initially thought this was what I was going to do, but before committing to a completely new set of on-screen villagers with their own set of logic, I figured it would be a good idea to think it through.
Right now, building placement is somewhat arbitrary. As long as you're not trying to place a new building on an existing one or on top of some other object, you're free to plop it down wherever you like. It will instantly appear and begin to function. This works but doesn't give the player that much in the way of making interesting choices. Some thought needs to be given when placing a sawmill or a stoneworks because the villagers need to travel back and forth from resource to building. Build it too far away and your economy will be sluggish.
So what can we do about this? As I mentioned, one thing would be to have villagers travel from the town center to the build location. That would require another villager type and I don't think I want to do that. What happens if the build site gets attacked/destroyed? What if the villagers get ambushed on the way? What happens to the resources? One thing I don't want to do is give the player direct control over the villagers so I can't just have them drag select some idle villagers and assign them build duty. Nor do I want the game to just generate new villagers from the town center and send them off to their doom.
No. In the end, I implemented a build timer. Once you place a building, your resources are committed. The building is then slowly constructed. It's weak in this state and if attacked it will likely be destroyed before it's completed. I messed around with it and so far I like the delay.
But that still doesn't address the problem of where you can place your buildings. For that I look our real-time strategy friend, StarCraft. (Go ahead. Play it. I'll wait.) For the uninitiated there are three playable "races" in StarCraft: Terran, Zerg, and Protoss. Each have unique way to build their bases. The Terrans have no build restrictions and in fact many of their buildings are mobile. That's close to what I've got now. The Zerg can only build on an expanding carpet of "creep" that gushes forth from certain constructions. Hmmm, interesting. And the Protoss may only build near special "pylon" building that are designed to power everything within their radius. Again, interesting. It's really a pretty neat set of systems that have all kinds of advantages and ramifications for players.
For me, I'm most interested in limiting the player from instantly expanding all over the map, but requiring the player to eventually expand. Here's where I think I'll be starting:
- Buildings need to be constructed within a certain radius of the town center.
- (Potentially) A certain type of building will provide an additional pocket of build-able area... like the Protoss pylon. It can be built anywhere.
- (Potentially) Any building provides their own build-able radius but needs to be constructed within the radius of another building.
I still think there needs to be something more than wandering monsters to push the player back and give him something to struggle against. I've got an idea, but that is for another post. :)