30th of May, 2014: Blog Post GeorgeV.

May 30, 2014 in Dev Blog

Hi there.  Here’s a bit of a future npc you’ll see in Starbound. Adult Poptops can be scary!

Well I don’t feel like typing much. See you later!


May 29th – Shields

May 29, 2014 in Dev Blog, News

Hey there.

I did a thing with shields and made a video.

Shields now have a health which scales upwards with level. Regen also scales up with level by the same ratio. Your shield uses your defense and absorbs damage up to a certain point. After which your shield breaks and becomes unusable for a short time.

This eliminates the rather odd reliance on energy we previously had.

Hope you like the change. Sorry about the sound desync problems in the video.

May 28th: Fleshing out the farming.

May 28, 2014 in Dev Blog, News

As a part of our focus on Starbound’s progression systems, we’re working towards making certain gameplay elements deeper. One such element is farming, which presently is fairly simple in practice, and doesn’t have a whole lot of benefits beyond cooking. My job for today has been to completely reassess all the values of our crops, in preparation for the changes we’re going to be making.

Farming's gonna change!

Right now I’ve divided the crops into four tiers. Each tier reflects the amount of time they require to grow, the price of the seeds, and the selling value of the harvested materials. For example, the bottom-tier Kiwi fruit seeds will cost 100 pixels each, take 15 (real-time) minutes to grow, and the fruit you get will sell for 300 pixels. By comparison, the top-tier Pearlpea seeds will be bought for around 1450 pixels each, take just under an hour to grow, and sell for about 6150. As you can see, there’s quite a big difference.

Each race has a native crop type in each tier, and the seeds will be something you can purchase from the merchants at the various outposts. How soon precisely you gain access to each seed type is still in discussion, particularly since we intend to make higher value crops require a bit more effort, while the bottom-tier crops grow with little to no maintenance.

This all ties in to our plan to allow the player numerous possible means of progressing. For players who want a more relaxed experience without being left in the dust, farming may be the way to go.

We’ll hopefully have more to say on this aspect of the game soon!

27th of May, 2014: GeorgeV Super Update

May 27, 2014 in Dev Blog, News

Hi there! It’s GeorgeV again and back to work from a three day weekend.

Today I worked a bit more on drawing WIPs for the various racial A.I.s. Here they are so far!

May 27th – Glowing Staff Fun

May 27, 2014 in Dev Blog, News

Hi everyone, hope you had a wonderful weekend.

Today, I worked on a bunch of little things. First, is I fixed a few issues brought up by you guys in the code I posted yesterday. Special thanks to Forum user Andrey_P_P.

Next, I fixed a crash bug regression dealing with us removing the unused twitch code. I also fixed a long standing bug dealing with bow animations being invisible to everyone else.

Finally, I got the animation for staff charging working. There’s a webm video below, because the gif version is unaccountably around 4.8MB.

May 23: Progress Report

May 23, 2014 in Dev Blog, News

Today I took a little break from ground monsters to work on everyone’s favorite part of the game: birds! First, I replaced the current “swoop” attack with “dive bomb,” which is more effective in hitting players and also brings the monster within range of melee attacks. I tweaked the state behavior such that they tend to switch between dive bombing and ranged attacks so that even with the current, limited selection of attacks, combat feels much more dynamic and interesting. Next, I dug into their out-of-combat behavior. I re-enabled and improved several of their unused behavior states so that they will fly up, glide down, wander in different directions and even land on the ground to rest. There’s plenty of work left to do on these monsters, but they feel more lively now, and fighting them is actually fun!

Other than that, I’ve been continuing to improve ground monster behavior, fixing bugs, learning the game’s inner workings, and planning new additions to the Lua API. I’ll post more about my progress with ground monsters next week, so stay tuned and have a great weekend!

May 22 – Omni update

May 22, 2014 in Dev Blog, News

Today I mostly cleaned up some bugs and fixed some technical debt ahead of my next short project.  Kyren and I have been cleaning up the Item interfaces and streamlining and defining a better, smaller internal API to deal with Items.  Today, I removed explicit functions for fuel and removed the critical item flag (which was kind of a hack and we’ve solved the problem of losing your pickaxe).  I moved direct access to all parameters into protected.  And then I move instanceValue (which checks parameter and then config for a key) to public from protected.  I also exposed instanceValue to Lua and unexposed parameter.

There’s still some mess in Item, like a list of augments and such which should be parameter values.  But I think I’ll leave that to my next rampage through this area.

The second half of my day was mainly spent on a negative money bug that metadept brought to my attention regarding money underflow.  After examining the code I realized that the money could easily overflow as well.  So I spent most of the rest of the day creating a completely bullet proof no overflow signed/unsigned integer multiplication method, which surprisingly wasn’t something that was already in the language or documented somewhere.  I’ve copied it here for posterity.

template <typename Int>
typename std::enable_if<std::is_integral<Int>::value, Int>::type noOverflowMult(Int a, Int b) {
  if (!a || !b)
    return 0;

  if (b == std::numeric_limits<Int>::min()) {
    if (a > 0) {
      return b;
    } else {
      return std::numeric_limits<Int>::max();

  if (a == std::numeric_limits<Int>::min()) {
    if (b > 0) {
      return a;
    } else {
      return std::numeric_limits<Int>::max();

  Int maxInt;
  if ((a < 0) != (b < 0)) {
    maxInt = std::numeric_limits<Int>::min();
  } else {
    maxInt = std::numeric_limits<Int>::max();

  if (abs(maxInt / a) < abs(b))
    return maxInt;

  return a*b;

Which has been tested as working against every possible pair of uint16_t and int16_t.

I also put in a “normal” maxMoney limit, and set it to 9,999,999 pixels, this is super subject to change of course, considering I just pressed 9 for a while.

I also removed our custom range function that actually had broken behavior (on every number of the form -n + .5 it rounded the wrong direction).  It was there because MSVC didn’t have it at the time, but again, we’re probably not going to target that platform.

I also created the beginnings of a math test suite to make sure our custom math functions work properly.

May 21, things happened

May 21, 2014 in Dev Blog, News

Today for me was mostly finalizing the new monster spawning logic, which is a huge departure from the previous way monsters were spawned.  Now, monsters are spawned as part of “spawning profiles” which describe what monsters should be spawned in what conditions, and also in what density.  The spawning profiles are then connected to biomes, and each biome can actively have a different spawning profile.  This enables more interesting divergence of biome environments, because specific biomes (and detached sub-biomes, layers, etc) can have not only different monster types but also different numbers of monster types and densities and parameters, which was very difficult to achieve with the old system.

This is part of the effort to make biomes more unique, and to make it easier to have, as an example, a field full of bunnies appear in the middle of a forest.  There will also be added weighting and just generally more configurable monster spawning to increase variety and make exploring more interesting.  The previous system simply spawned X number of “things” around each player, regardless, and then what thing was being spawned was based on where the “thing” happened to fall, which is not too flexible.

The algorithm to spawn monsters around each player in a specific density per spawning profile is somewhat tricky, so it’s taken me a bit to work out how exactly it should work.

Other things today included helping omni with some item issues that needed sorting out and untangling a couple of messy bits of code, and also spending about 2 hours talking with the people setting up fiber in our office, getting information from them, and configuring our new internal network.

GeorgeV Super News: 21st of May!

May 21, 2014 in Dev Blog, News

Hello. It’s GeorgeV again.

Today I fleshed out and got the new A.I. UI ready for testing. As always it’s tentative and temporary in every way. We even took some suggestions from the forums on what we might call it.  :)


Keeping it short. See you again soon!

GeorgeV News: 20th of May! London Office!

May 20, 2014 in Dev Blog, News

Hello again! So soon?!

Today I did stuff.  Among this stuff was the mockup for the “Ship Computer A.I.” user interface. The blank space to the left is where a portrait of the A.I. would be and like all mocks everything in it is temporary.