September 1st – WIPs

September 2, 2014 in Dev Blog

Not much exciting to post about today. Kyren’s been working on nitty gritty technical stuff, addressing some threading issues we’re running into with C++11 pointers. Armagon and the artists are continuing work on missions that I’m not allowed to post about yet.

I’m still playing with the terrain generation, seeing what its capabilities and limitations are. Here’s a screenshot of some WIP desert canyons (click for big):

canyonswipThe terrain generator works by combining multiple layers of Perlin noise. In this shot, I’m using one source to define the primary surface terrain (low dunes), another source to define the rough bottom of the canyons, and a third to mix between them, with bias toward the primary source to make canyons less frequent. There are several problems with the current configuration, however. The most obvious problems are the sharp corners at the canyon edge where the mix shifts from 100% primary surface and rapidly begins switching to the lower canyon terrain. These can be addressed with some smoothing in the mixer (which needs engine changes to implement). Another issue without an obvious solution is what to do with the background. Because of the dimensionality and limited number of layers, it’s difficult to visually distinguish an open valley from a long, narrow canyon from a deep hole. I’ll have to experiment further to find a satisfactory solution.


August 29th – Kindergarten

August 29, 2014 in Dev Blog

Continuing work on biomes, I’ve been configuring a new primary biome type for starter worlds that we’re calling Garden. It’s a sparsely forested biome with gentle, rolling hills that should be easy to navigate for players just starting the game. It’s got quite a pleasant atmosphere:

Garden Sunrise

I’m also working on surface terrain generation for all biomes. Higher tier planets will be a bit craggier (in general) since players will be likely to have some movement abilities and grappling hooks, but mainly I’m just aiming for interesting variety. I’ll post some screenshots of other terrain types in a future update. Have a good weekend!

August 28th – Alright, one more lunar base teaser!

August 29, 2014 in Dev Blog

Since it seems nobody else has anything particularly new to report as we’ve all continued working on the same things for the most part, I’ll cave a little and give you one more glimpse of what you can expect on your mission to the moon. This is the only lunar base media you’re getting out of me for a while, so enjoy it while you can!

Something's moving in the shadows!

Keep your eyes peeled, and you might just see something. ;)

August 27th – Still at it!

August 28, 2014 in Dev Blog

Evening folks!

For the past couple of days I’ve been chiefly focusing on the armor balancing that I mentioned last week, as it’s proven surprisingly difficult. I’m beginning to understand the pains that other developers must go through when painstakingly balancing their games, especially the competitive multiplayer ones! Our armor balance is getting to a better place, but it’s looking like there are a number of earlier armors that are going to need to be rebalanced as well to suit our progression changes.

I’ve also been doing little bits of work on the lunar base here and there. I’ve turned it into a floating dungeon type while await the completion of Omni’s work on the skies so I can configure the parallax layers to my liking. I still wish to keep most elements of the mission a surprise, so I’m reluctant to share any further media relating to it and its unique enemies.

The efforts of the rest of the team seems to be stuff that’s mostly under the hood, like the biome threat level changes that Metadept talked about yesterday. He’s continued his efforts on that front but has also been working on the enemies I’ve been trying to stay so elusive about. He’s also fixed a few long-withstanding bugs with the humanoid NPCs that have been present in the nightly build for some time (such as their inability to properly switch between their melee and ranged weapons appropriately).

George on the other hand has been busily devising our other missions, with some seriously cool ideas being laid out. Once I’m done with the lunar base, I’ll be moving right along to start building one of those.

In any case, it’s about time for me to hit the hay. Good night everybody!

August 26th – Biomic Enhancement

August 26, 2014 in Dev Blog

One big part of the game’s progression will be the ability to access new planet types as your ship and equipment improve. To facilitate this, we’re making biomes correspond with threat levels as you advance through tiers.

What does this mean, exactly? Previously, some biomes would only appear on planets with higher threat levels, but there wasn’t much relating a world’s appearance and environment to how challenging it is other than the explicit threat level. We’re now grouping the primary biomes by tier in a way that makes the progression of difficulty more logical and encourages players to visit a wide variety of planet types as they play through the game. When a player acquires gear with the appropriate environmental protection (such as heating systems to insulate them from cold environments), they will gain access to several new primary biome types (such as Tundra, Arctic and Asteroid worlds). We’re making sure to have enough variety within each tier to keep exploration entertaining while still retaining a somewhat consistent theme at each stage.

Once a player has completed the game’s progression and can access all of the various primary planet types, they will be able to visit planets with special high-level versions of the biomes. These will include some of the stranger variations like metallic trees/plants, as well as previously unavailable mini-biomes and dungeons. There’s no need to rush or grind to the endgame, but there will still be lots to discover after reaching it!

I’ve also been working on some smaller biome and planet configuration improvements. I’ve made the biome/sub-biome combinations more reasonable, so you won’t find ice trees growing next to pools of lava, and improved the matching of planet types to the distance from their star so you can reliably look for hot worlds in near orbits, temperate worlds in the habitable zone and frozen worlds in the outer fringes.

August 22 – Adding skies to outposts

August 23, 2014 in Dev Blog

So a while back I mentioned that I made some changes to sky to decouple them from the coordinate information. Today I hooked it up to the WorldParameter system so that it could actually begin to be used on Floating Dungeons and stuff. There’s more work to be done, because currently there’s no randomization in this area. But we can put any sky on the outpost worlds now. Here’s an example:

August 21st – Kid strummed that guitar…

August 22, 2014 in Dev Blog

I ended up deviating a bit from my work on the lunar base mission today, as I’m waiting on further developments on the new enemy before I go too in-depth with careful placement and setting up the loot distribution. We have some other cool stuff for it in the works, but I’d really like to keep those elements a surprise if I can help it.

Instead I primarily spent my time getting the Novakid armors that George showed off last week actually craftable in-game. We’ve got all their tiered weapons designed and ready to go too, they just need to be implemented and balanced.

The Novakids feel so at home in our universe, they could well usurp the Glitch as my favorite race!

Lone Novakid Out In The Desert

I’ve also begun work on rebalancing all the armors that fall into the separator, accelerator and manipulator classes. I expect to spend most of tomorrow continuing on this task, so I’d like to get it to a good place. That said, I have no doubt we’ll need to do some fine-tuning down the line as we continue our playtesting.

Until next time!

Stats and Scripts

August 20, 2014 in Dev Blog

Recently, we’ve been discussing adding some more capabilities to the Status and Status Effect system in Starbound.  There are a lot of interesting things we want to do, but as of right now the Status system is a bit of a pain point in the Starbound codebase.

Every Status equipped entity has around 20 stats, all defined directly in c++, and they can be affected by about *45* status effect primitives, also specified in c++.  Status primitives are everything from ForceField to FlawedProtection to ClumsyProtection to ExplosiveDefense to ExplosiveDefensePower to.. you get the idea.  Extending the status system right now involves doing things like extending this enum and adding to this set of fields.

Now, don’t get me wrong, simple and hard-coded sometimes works great.  Usually, it’s what you want to try *first*, and you stick with that until it’s clear that it needs to be replaced by something more powerful.  Well, for the Status system, that time is NOW.

Omni and I have been working on a replacement for the Status system that should hit (fingers crossed) master in a few days.  Stats are generic String -> Float mappings, there’s a system for adding temporary modifiers to the String -> Float set, there is a resource system that is closely tied to the stats system for things like health / energy / warmth, and, the most exciting part is, it will be driven by lua scripts!

Not only will this allow us to have, well.. sort of more “interesting” status effects like brain reboot and things like that driven by an isolated script and with way more interesting graphical effects, it will allow modders to add additional status effects and, as a side effect, will give modders a place to add persistent client-side data and scripts that affect the player without having to tie into the tech system.

Also, as either part of this update or soon thereafter, I’m trying to work it so that status graphical effects like cold and hunger that affect the screen can actually modify the shader used by the world renderer for some more interesting graphical effects than what we have now.

It’s exciting!

August 19 – The day when all your mods died.

August 19, 2014 in Dev Blog

The new JSON patching system discussed way back on June 25 has landed. There might be a few edge cases that aren’t implemented correctly, but it’s passed all of the tests I threw at it. Let me know if you find an edge case I missed.

“__merge” style patches no longer work. You can override files fully, or you can use the patch system. To use a patch, name the file “whatever.config.patch” where “whatever.config” is the file you want to patch. It should support the entirety of RFC6902 and RFC6901.

Q: Can you give us an example?

A: Sure:

Here’s a short example.
Let’s say you have a file named… oh I don’t know, “player.config” And let’s say you want to change the hitbox of the player by changing around the standing poly.
You would create a file called “player.config.patch” and it could contain, for example, the following:

  { "op" : "replace", "path" : "/techControllerSettings/baseMovementParameters/standingPoly/2", "value" : [ 1.35, -2.5] },
  { "op" : "replace", "path" : "/techControllerSettings/baseMovementParameters/standingPoly/3", "value" : [ 1.75, -2.0] },
  { "op" : "replace", "path" : "/techControllerSettings/baseMovementParameters/standingPoly/4", "value" : [ 1.75, 0.65] },
  { "op" : "replace", "path" : "/techControllerSettings/baseMovementParameters/standingPoly/5", "value" : [ 1.35, 1.22] }

What that will do is change the values in the file from:

  "techControllerSettings" : {
    "baseMovementParameters" : {
       "standingPoly" : [ [-0.75, -2.0], [-0.35, -2.5], [0.35, -2.5], [0.75, -2.0], [0.75, 0.65], [0.35, 1.22], [-0.35, 1.22], [-0.75, 0.65] ],
       "crouchingPoly" : [ [-0.75, -2.0], [-0.35, -2.5], [0.35, -2.5], [0.75, -2.0], [0.75, -1], [0.35, -0.5], [-0.35, -0.5], [-0.75, -1] ],
       "airFriction" : 0.2,
       "mass" : 0.6,
       // should keep the player from teleporting through walls
       "maximumCorrection" : 1,
       "maxMovementPerStep" : 0.4


   "techControllerSettings" : {
     "baseMovementParameters" : {
       "standingPoly" : [ [-0.75, -2.0], [-0.35, -2.5], [1.35, -2.5], [1.75, -2.0], [1.75, 0.65], [1.35, 1.22], [-0.35, 1.22], [-0.75, 0.65] ],
       "crouchingPoly" : [ [-0.75, -2.0], [-0.35, -2.5], [0.35, -2.5], [0.75, -2.0], [0.75, -1], [0.35, -0.5], [-0.35, -0.5], [-0.75, -1] ],
       "airFriction" : 0.2,
       "mass" : 0.6,
       // should keep the player from teleporting through walls
       "maximumCorrection" : 1,
       "maxMovementPerStep" : 0.4

Possible values for “op” are: “test”, “add”, “remove”, “move”, “copy”, and “replace”. They do what it says on the tin. The only one potentially confusing is “test” which simply tests the path for some value, and if it’s not correct it aborts the patch.

“test”, “add”, and “replace” take “path” and “value”
“remove” just takes “path”
“move” and “copy” take “from” and “path”

There’s other stuff like “-” for end of list and using ~1 and ~0 to reference “/” and “~” respectively. But that’s pretty much it.

August 19th – Let’s throw a rave!

August 19, 2014 in Dev Blog

It’s pretty much been business as usual for me the last few days. The lunar base mission is getting to a really nice place, and I’ll be able to start populating it with enemies and loot very soon.

Kyren kindly implemented a quick update to our lighting engine that provides far greater control of how a light flickers. Previously the controls were a little vague and it was often difficult to get the precise results desired. It was difficult to get lights doing anything other than dimming and brightening in an largely unpredictable fashion.

Now we have the capacity to make lights pulse, strobe, or flicker erratically as we wish. As a side effect of this update, you may notice in the nightly that any lights that previously flickered currently are not doing so, but I’ll be quickly zipping through them to make them work as intended again in my downtime.

I put a quick video test together with a variation of the spotlights that flickers erratically. I do not advise watching this video if you are sensitive to strobing light effects as I have purposefully used a lot of them in one space simply to demonstrate.

Good night!