Version v0.11 – Release

Version v0.11 is here! Includes lots of small fixes and enhancements, and a few major additions. You can now craft weapons to make your orcs more effective fighters, mine stone from quarries, watch bees fly over your walls and poison your goblins, and spawn new recruits from the Spawning Pool.

Short changelog:

  • All data files are in libtcod format now, instead of XML. Modding should be notably easier
  • Mods no longer need to modify the .dat files that come with GC, instead you can place them in their own folder under the ‘mods’ folder, and they’ll automatically be read in.
  • Fixed several bugs (walls display correctly now, for example)
  • No more random orc/goblin migrants
  • You can establish a spawning pool to spawn more recruits
  • Creatures have creature specific attacks, and can inflict other effects as well (a bee sting may poison your orcs)
  • Stone quarries can be dug out and will produce stone for you. Underground nasties may attack from within, so beware.
  • Constructions and areas can be designated by clicking and dragging, in addition to the original two-click method.
  • Flying monsters have been implemented, walls won’t keep out everything now!
  • Sleeping on the rough ground will have a detrimental effect, so now you have a reason to build beds
  • Constructions set to be dismantled display this fact as well
  • msvcr100.dll and msvcp100.dll are included in the .zip to make install easier.

New constructions, creatures and items are included, many created by the community. A big thanks to everyone who’s contributed with mods and/or code!

You can check out the changesets on bitbucket for a more detailed view of what’s changed and who’s done what.

Windows: DOWNLOAD

Edit: If Goblin Camp crashes on load, check that your old config.ini isn’t hanging around. It’ll cause a crash to desktop.

I’ve also fixed a bug with scrolling the stock manager window and uploaded v0.111, so don’t be surprised at the new version number.

Info on the next version – v0.11

Now that v0.1 is succesfully out it’s time to start thinking about the next version. Here’s a list of things that I’m planning to include in the next release, v0.11:

  • Bugfixes
  • All data files converted to libtcod format.

This has been done, so from v0.11 and onwards all data files will be in the libtcod format. It’s easier to read and the community was pretty much in agreement on moving away from XML. The .dat files in the bitbucket repository should illustrate the format so that you can convert mods already.

  • Stone quarries

The primary method of acquiring stone will be implemented as open-pit mines, or quarries. They’ll supply your settlement with stone, but will include risks of their own such as attack by underground monsters.

  • Weapons

The biggest change in v0.11 will be the addition of weapons. This will require a lot of work to introduce the whole system, but then you’ll be able to both create weapons and make your orcs use them. Then they’ll be able to cut those wolves into pieces, in addition to smashing them!

  • Various small fixes and enhancements

My timeline is to get v0.11 out before August, so that gives me a schedule of two weeks to get this done. Essentially weapons are what will introduce most of the work, but I’m feeling fairly confident that I’ll manage. Especially because people have started contributing code really actively and fixing bugs on their own.

Added Future Plans section

I added the Future Plans section, and I’ve written some stuff there about what I want Goblin Camp to become. It’s pretty stream-of-consciousness type stuff, but hopefully it’ll help as a guideline for potential contributors, and perhaps help generate some discussion about the future too.

Also I’ve added links to the Downloads section for the linux build thread and a Mac OS X binary.

Also also, theres a donate button on the right now in case you want to support my efforts monetarily.

Version 0.1 – Release

0.1 is out!

It has a working stock manager, basic combat, basic farming and such. Download it and test it out, and come over to the forums and voice your opinions!

If you don’t have the Visual C++ 2010 Runtime installed already grab it from here: VC++ 2010 Runtime It’s a fairly small download (4.8mb) and it doesn’t require a restart to install or anything. Without it Goblin Camp will complain about msvcr100.dll and msvcp100.dll.

A linux version will be up at some point in the future too.
Goblin Camp can be built in linux: forum thread, it does take a bit of work though. No binary releases yet.

Download link: GoblinCamp01.zip

The source code is available over on bitbucket.

Modding Goblin Camp

People have expressed interest in how moddable and extendable Goblin Camp will be, so I thought to show how things work right now. The specifics will change, as I’m still undecided on whether everything should be defined in XML files or using the libtcod file format. Personally I’m leaning towards the libtcod format. I think it’s slightly more readable than XML, and has built-in support for libtcod types. The differences aren’t major, though, so if a clear majority would rather have all the data as XML it won’t be a problem.

Anyway, on to the specifics, and we’ll start with Items.

Item Categories

The Items XML file is split into two parts: First come the category definitions, which right now consist only of a name for the category.

<category>
  <name>Wood</name>
</category>

My plan is to add category specific attributes, such as <flammable> to category ‘Wood’.

Items belong to one or more categories. For example, a wooden door would belong both to category ‘Wood’ and category ‘Door’, while a stone door would be in ‘Stone’ and ‘Door’. With category specific tags like <flammable>, a wooden door will be flammable because it is wood, while a stone door won’t be, but both will function as doors. This means that I don’t need to individually tag each wooden item as flammable, instead I only need to make sure that wooden items are in the ‘Wood’ category.

Item Types

Specific items have a wider variety of tags right now, we’ll take the aforementioned wooden door as the first example:

<item>
  <name>Wooden Door</name>
  <category>Wood</category>
  <category>Door</category>
  <graphic>197</graphic>
  <color>
    <r>255</r>
    <g>73</g>
    <b>7</b>
  </color>
  <components>
    <comp>Plank</comp>
    <comp>Plank</comp>
  </components>
</item>

The graphic is given as a number that specifies which tile to use from the font. This will probably change, depending on how tiles are implemented.

The <color> tag specifies a default color for the item, but the actual color you see ingame is actually derived from the colors of the components.

The <components> list is a list of items specified by their item category. They are what is required to actually produce this item at a workshop.

This is all probably quite clear, so let’s take a look at some of the other tags that have been implemented. For example the item ‘Wine ‘.

...
    <comp>Berry</comp>
    <comp containin="true">Liquid Container</comp>
  </components>
  <multiplier>10</multiplier>
...

The ‘Wine’ item has berries as components as expected, but the interesting part is the Liquid Container component. It has the attribute “containin” which directs the workshop to place all the created product(s) into this container. So being a component, a Liquid Container (see. barrel) is required to create Wine, but instead of being used up in the process it is used to store the created Wine (wouldn’t make sense to just pour it on the ground, now would it!).

The <multiplier> tag specifies that instead of creating one unit of Wine, we actually receive 10 units of Wine from these components.

Growable crops are defined as items as well. They have specific tags:

<growth>
<fruits>

<growth> specifies if, and what this plant (or seed) grows into. You can define as long a chain of growth as you like, for example: seed -> sprout -> young shrub -> shrub

The <fruits>  tag specifies if and what fruit grows on this plant. It is also used to specify if an item leaves something behind after being used. You’ll use this to both define, for example, that berries grow on a shrub and that the berries in turn leave seeds behind.

Organic items such as berries won’t stay fresh and edible forever, and this is where the <decay> tag comes in. Here’s an example from the ‘Corpse’ item:

<decay>
  <speed>4</speed>
  <item>Bones</item>
  <item>Filth</item>
</decay>

<speed> governs how quickly the item will decay, and the <item> tags specify what the item decays into. Filth is a special case, it isn’t actually an item but it’s own semi-liquid object.

Constructions

Here’s an example of what construction definitions look like right now. I’ve already planned to expand some tags, such as <walkable> into being a more specific tag. Right now it’ll tag the whole construction as walkable, but I want finer control so it’ll be extended to allow you to specify which parts are walkable and which aren’t. The tags should for the most part be quite self-explanatory:

<construction>
  <name>Carpenter's workshop</name>
  <graphic><g>3</g>
    <g>35</g><g>46</g><g>177</g>
    <g>35</g><g>67</g><g>46</g>
    <g>178</g><g>46</g><g>177</g>
  </graphic>
  <products>
    <prod>Wood plank</prod>
    <prod>Wooden door</prod>
    <prod>Wooden barrel</prod>
    <prod>Crate</prod>
    <prod>Wooden bed</prod>
  </products>
  <walkable>true</walkable>
  <maxCondition>90</maxCondition>
  <materials>
    <mat>Log</mat>
    <mat>Log</mat>
    <mat>Log</mat>
  </materials>
  <productionSpot><x>1</x><y>1</y></productionSpot>
</construction>

The <graphic> tag is a bit cluttered right now and won’t stay like that. I’ll revamp it once the choice is made on the file format.  Right now the first value is how long each row is, and after that the numbers are the same as with items. Right now it only allows constructions shaped as rectangles.

The <products> tag lists all the items the construction can produce,  <materials> what is required to build the construction, and the <productionSpot> tag specifies where an orc has to actually stand in order to use the construction.

Creatures are an example of the libtcod format:

Creatures

Here’s what an orc’s definition looks like:

npc_type "orc" {
 expert
 needsNutrition
 generateName
 name="orc"
 speed="1d20+40"
 color="0,0,255"
 graphic='o'
 health=200
 AI="PlayerNPC"
 attackSkill="1d10+5"
 attackPower="5d5+5"
 defenceSkill="1d5+5"
}

The ‘generateName’ flag means that instead of giving each orc the name ‘orc’ the game should generate a name based on the rules given for ‘orc’ names. I won’t get into name generation, but it’s pretty straightforward and also completely moddable.

The stats (speed, attackSkill, etc) are given in dice format, though they can be given as normal numbers as well. The format is [amount of dice] d [faces on dice] +/- [number], so 1d20+40 will give numbers from 41 to 60, while 5d5+5 has a range of 10 to 30

The AI tag specifies the creature’s behaviour. In addition to the player’s creature AI I’ve implemented peaceful animals, hostile animals and  hungry animals (hungry animals are hostile animals which try to get at your food stockpiles, if you have any).  Obviously more will come.

Wild Plants

A quick note on wild plants, which are separate from crops. They are defined in their own XML file, wherein you can define what the plants give when harvested/cut, what their rarity is and if they appear in clusters (also the cluster size).

Feedback

Right now the question is, which format to go with. XML which I began with, or libtcod that I used for creatures? For example, libtcod allows for easier to write lists (not so many tags):

list= [ "value1","value2","value3" ]

Also the fact that it supports both the libtcod color and dice types is a nice addition.

Visit the forums to voice your opinion, as well as post any questions, comments or criticisms.

Roadmap section up

I added the Roadmap page to the site. I’ll try to always have a post there outlining what will be in the upcoming version. Right now there’s a post there about 0.1 and what it’ll include. Obviously the feature list is quite short, most of the work up till now has been laying the foundations for future features.

You can be absolutely sure that 0.11 will come out in less than 2½ months after 0.1, I’m going to try and release often. My job and real life in general of course mean that I don’t have all that many hours to work on this everyday, but I’ve managed quite well thus far.

Oh, and the roadmap has a tentative release date for 0.1 too, if you’re interested.

Feature preview: The Stockmanager

I thought I’d talk about an important feature that you’ll get to see in action in the upcoming 0.1 release: The Stockmanager. It’s the key component in enabling you to have a nearly self-sufficient industry.

Starting a new game, your stockmanager screen will look something like this:

Initial Stock Manager

The Stock Manager before any workshops have been built

(Remember that I’m only getting to the first release, so the UI is in a constant state of flux, and I haven’t had a chance to improve the presentation very much)

You’ll only see resources that are available to you from nature, in this case only wood. The first step would be to establish a stockpile that accepts wood, and to designate which trees are allowed to be cut down. There will be an option to allow goblins to chop down any trees nearby, which would probably be the preferred method in the beginning, but later on it may be desirable to only cut down trees in specific areas. Also, manually designating trees to be immediately cut down is possible.

Once you raise the wood minimum, or designate trees for immediate cutting down, the goblins will get to work cutting the trees and carrying the logs to the stockpile. Now that you have some raw material, you should build your first workshop. We’ll start with a carpenter’s workshop.

Each workshop can produce a specific set of items, and once a workshop is built it makes its products available to the stockmanager, as we can see if we open the manager screen:

Stockmanager after a carpenter's shop is built

The Stock Manager screen after a carpenter's workshop has been built

Now a good idea would be to raise the wood plank limit and the crate limit (crates can be used to store many planks, makes for more efficient stockpiles), which in turn will send production jobs to all of your carpenter’s workshops. We only have one workshop though, so all of the jobs will be sent there as you can see below.

Single workshop handling all the production

A single workshop handling all of the production, while most orcs stand around idly

Of course now that you only have one you’ll have just one orc working and the rest will be idle, so if you were to build two more workshops the jobs would get done far more quickly. After building the two workshops we can check their production queues and see that the Stockmanager has distributed jobs to the new workshops:

Production queue on second workshop

Production queue for the 2nd workshop

Production queue for the third workshop

Production queue for the 3rd workshop

Now you can build things which require planks, and whenever your plank stocks diminish below your set limit, new plank production jobs get queued up. And when you’ve created so many planks that your wood log stocks are running low, new wood cutting jobs will be queued.

And to end this preview, a note on workshop production and creature duties. What with goblins doing the menial jobs, when a job is queued up in a workshop goblins will haul the required materials there and only then will an orc actually come over to handle the skilled work. Hauling jobs are also all assigned at once if there are enough goblins available, so if a crate requires 5 planks to make, and there are 5 goblins idle, they will carry the 5 planks to the workshop simultaneously.

What we accomplished

The end result with three workshops all churning out products

Edit: I forgot to mention a feature that I haven’t implemented, but will do so in the future. A search box for the Stock Manager. Once you have several different workshops, the stock manager screen may become cluttered with many different items. My plan is to have a simple search box which searches the items while you type, so you can quickly find the item you want to adjust.