Posts Tagged Species

Droop

I’ve been working on applying torques to the creatures in a meaningful and well thought out manner (read: banging my head against the keyboard whilst trying to fix all the horrible signage errors). The original intention was to simply pass the torques on to the energy system and let natural selection weed out the unbalanced and physically impossible specimens. But I realised I have the perfect opportunity to overhaul a system that has bothered me since its inception: the quadruped system.

Logically, if a creature has slightly smaller front limbs than back limbs, it should lean forward in order to walk on them (unless it’s a pangolin, but they’re too awesome to be swayed by our petty logic).

Throw logic out and do the impossible, that’s the way pangolin’s roll

Without something to enforce this, every creature in Species ALRE would be a biped, because every creature has at least a *slightly* different leg size.

The quadruped system governs how this is implemented. A hideously simplified description would be “if the torso rotation is less than 45 degrees, and it has fore or back legs, the creature will fall forward onto its front legs or chest. If it’s higher than 45 degrees, or it has mid-legs, it will remain bipedal.”

That “45 degrees” is completely arbitrary. It’s just a value I picked.

This system is why ‘head-down butt-up’ creatures, whose bodies hang forward from their back legs are so common: Any creature with large back legs and a small torso rotation will end up with this body plan.

That’s the old system. The new one is much more sophisticated.

It starts by completely eliminating the quadruped system: creatures will initially be created *exactly* as their genes would have them (ie. with only one pair of their legs reaching the ground). It then calculates the skeleton and torques as normal.

Once that’s done, it passes control to the droop system. This applies “droops” to every body part attached to the torso: limbs, neck and tail. Legs are bent upwards by the reaction force on their legs, neck and tail are bent downwards, and the torso droops based on the creature’s balance, all in direct proportion to the torque applied on the joints.

If a body part droops into the ground, it stops drooping and adds a ground contact point, which will take some of the creatures weight in the next step.

Then pass 2 starts, the body-plan is completely reinitialised: bones are regenerated, torques and forces are recalculated. The results of pass 2 are what the creature will ultimately use for most of it’s energy calculations, so as to take advantage of the creature new quadrupedal body plan. (physical droops will affect energy, but proportionally to how much they rotate rather than as a function of torque. Small drops onto legs will be a negligible cost)

This also has a noticeable effect on creature appearances. I haven’t adjusted the rotation genes at all in the following screenshot: these variations are entirely the result of torso, neck and tail thickness changes causing different torques in the creature’s body plan.

OH GOD FAT SPIDERS

OH GOD FAT SPIDERS

One particularly noticeable change is that the creatures tail now has an effect: increasing its mass is the only way to counter the torque produced by the head and neck in the second body plan. For bipeds with centrally situated legs (raptor-like creatures), a sizable tail will be the only way to maintain balance (other than having an upright torso rotation gene and incurring a large energy cost in droop).

I’m hoping this system will be realistic enough to promote life-like body plans in place of a real-time physics system, which would be far too CPU intensive to implement across thousands of creatures. More likely, it will be exploited ruthlessly in ways I can’t yet imagine. But hey, that’s what makes it fun!

Cheers!
Quasar

“Anime references. There goes the neigbourhood”

Advertisements

, , , , , ,

3 Comments

Stat Encapsulation

I forgot to charge my laptop yesterday so used the forced break to practice my sketching, but I’m back in it today and development continues.

The Mutation Map tool now has the ability to view and edit both the overall map and the individual stats of each head. It can also do the same for Feet, and I’m working on getting the remaining mutation maps (Limbs, Coverings, Colour Patterns, Feature Models and Feature Textures) into the tool. Hope to be done by the end of the week and moving on to other things, though that may be a bit optimistic.

Also took some time to begin taking my Stat encapsulation to the next level. Currently we have 6 types of Stat:

  • GeneticStats encapsulate a mutation rate, plus mutate, randomise and blank routines, for every gene.
    • FloatingGeneticStat: A hereditable decimal number, like “torsoWidth” or “headSize”. Encapsulates an upper limit and lower limit in addition to the mutation rate.
    • DiscreetGeneticStat: A hereditable integer number, like “numberOfFeatures”. Just encapsulates the mutation rate.
    • BooleanGeneticStat: A hereditable yes/no value, like “hasTail” or “hasNeck”. Just the mutation rate again.
    • MappedGeneticStat: A stat with a mutation map, like “headType” or “bodyCovering”. Encapsulates the entire mutation map structure.
    • BasalStat: a non-hereditable stat which is imported from an external file, linked to a MappedGeneticStat. Like how HeadType determines Diet, or how LimbTipType determines BaseLimbDamage. These stats are rarely used directly: usually, they feed into formulas to determine other stats. (diet is an exception)
    • UpdatableAttribute: a type of Stat I have encapsulated but haven’t derived from IStat yet: these are things like Health, Energy and Biomass, which change over the course of a creature’s life. Encapsulates a list of “Deltas”, making it possible to track the source of changes to these stats (you can see these deltas listed out on the energy page in creature details).

There’s only one major type of stat still missing, at least on a per-creature level:

  • DerivedStat: Any stat which calculates itself from other stats. For instance, Speed takes into account LimbSize, LimbBaseSpeed, TorsoWidth, TorsoRotation, LimbTipBaseSpeed, and so on. DerivedStat will encapsulate all these stats, plus the formula used to combine them.

The method I’m using to encapsulate the formula uses something I haven’t spent much time with in the past: delegates. I’m storing it the entire formula as a delegate inside the DerivedStat instance. This means I get to define the formula in StatData, but still use the built-in accessors of the objects, so I get the same intellisense benefits and high performance as if I was defining  the calculation over in Phenotype.

The result looks like this:

AddDerivedStatType(
    "mass",                                                          //Name
    "Mass",                                                          //Printable Name
    "Determines how much stuff there is in the thing",               //Printable Description
    delegate(Genome genome, BodyPlan bodyPlan, Phenotype phenotype)  //boring code stuff
    {
        return bodyplan.Volume * genome.Skin.Density;                //Formula
    }
);

The relevant bit is the second-last line: that’s the only place that formula needs to be defined. All I have to do later is call Initialise, and the DerivedStat takes care of calculating itself on behalf of it’s parent creature, pulling other stats in and combining them, as well as throwing errors if stats haven’t been correctly initialised.

Yes yes, making with the boring and the code and the words and the stuff, so what? Why do we care?

Here’s why we care: every calculation, limit and mutation rate from the raw genes to attributes like speed and stamina is now stored in StatData. This one file is becoming the spinal column of a lot of the simulation’s behaviour, so tweaking mutation rates, adding limits, changing names and descriptions, and now adjusting stat formula will all be possible simply by changing the input data here.

And I intend to expose that input data to modding.

Cue the maniacal laughter,

Qu

,

Leave a comment

0.7.0 Planned Features

0.6.1 is finally hotfixed to the point of “reasonable-stability”, so it’s time to begin the subjugation of the foolish and pathetic human race. Begin deploying the jetpack-equipped Tasmanian Devils at once!

While that’s happening, we should look at revising the flight plan for 0.7.0. We completed some things in 0.6.1 that were originally to be part of this update, and learned a few things as a result.

 

Image

Animation

We included a lot of the aesthetic work in 0.6.1, but there was one feature we didn’t get to: improving the creatures animation. The animations we have planned will be basic but functional: think more “Minecraft” than “Spore”. They’ll include behaviors for grazing, feeding and fighting, as well as improving the walk cycle.

Metric Units

We’ll be converting the game as a whole from unspecified relative units to metres, kilograms and newtons. Our plan is to use the length of an adult Primum specium as our base scale (1Ps = 1m). This puts the larger trees at around 6m tall, and makes the rover roughly the size of Spirit and Opportunity, which is a nice co-incidence.

Physical Values and Skeletal Analysis

We’ll be defining Density and Volume, which will give us Mass and Weight, which can be converted to translation forces and torques and applied via skeletal analysis. By leveraging the stuff I learned in university and the infinite power of Google, we should be able to achieve much more realistic body-plans than “Stamina = (Base * (Bicep + Tricep) * Size * 2) * Bipedal * Streamlining”

Gameplay

Fences, impassible barriers you can construct to block or isolate populations of creatures.

Climate Control: Heaters, Coolers, Humidifiers and Aridifiers you can place to adjust the temperature/fertility of the local area, rather than the whole map.

Targeted Rover Programming: instruct your rovers to feed or kill creatures based on their genetic distance to a target: either the species average, an exported creature, or a target you design yourself.

Stat Map Editor

Until now I’ve been tweaking the stats on body parts, textures, biomes and trees by editing the data.txt files manually. This is a slow and error prone way of doing things: I can’t see what I’m tweaking, I can’t compare it to other things in the mutation map, etc. To compensate, I’ll be creating a Stat Editor that shows me the physical objects alongside their stats and relationships and allows for tweaks and adjustments in real time. This will mostly be for me, but it might also come in handy for modding.

 

Most of these items are stepping stones on the way to something greater, most notably the gameplay additions: once those three are in place, I’ll be able to start work on a feature that will form the backbone of gameplay in the future.

Now if you’ll excuse me, I need to check how the subjugation is going.

Cheers,
Qu

 

 

“What do you mean “you lost them”? We’re in orbit and they’re loud, violent marsupials, where could they possibly have- they’re in this room with me aren’t they? Dammit, I just know they are. Any second now I’m gonna be mauled.

Aaaanny second now…

, , , ,

Leave a comment

0.6.1 Hotfix 4

Welp, we finally managed to track down the Black Ground bug, by means of Google research and an Ouija board. Turns out AMD cards can’t use a 2.0 vertex shader model in the same pass as a 3.0 pixel shader model, but rather than doing something sensible like, I dunno, telling me about it, instead it adopts the much more interesting approach of falling over randomly and not drawing anything.

 

Fixing this meant adjusting a whole bunch of shader files, and I lost track of which ones had been modified somewhere along the way, so to get the hotfix you’ll need to re-download the game. If you extract the files into your existing Species folder and merge/overwrite, you should be able to keep your save games and exported creatures.

 

Also made a few small tweaks and fixed one of the more common exceptions. Potentially-stable release ahoy!

 

http://www.speciesgame.com/download

– Fixed the Black Ground/Invisible Creatures issue people with AMD cards were experiencing.
– Fixed the ArgumentOutOfRangeException that was causing crashes after an unspecified period of time.
– Tweaked Body Pitch so creature’s don’t lean back as much as a result of growing legs
– Tweaked CalculateReach so creature’s can’t increase their reach by having a not-expressed neck length.
 
Enjoy,
Qu

, , ,

Leave a comment

Species 0.6.1 Hotfixes

We’ve been busily hotfixing since the release, and 0.6.1 is now much more stable than when it was first released. We recommend downloading the entire thing again:

http://www.speciesgame.com/download/

(Tip: if you extract the latest version directly over the top of the previous one, you won’t lose any of your saved worlds or exported creatures!).

… but if you’re an advanced user and don’t want to download the full 75MB again, you can download the patches. Make sure you apply them in order.

Hotfix 1 Patch
Hotfix 2 & 3 Patch

, ,

Leave a comment

Species 0.6.1 Released

Welp, here we are. Species 0.6.1 can now be downloaded from the speciesgame.com download page.

Get the latest release of Species here!

This release was all about cleaning up the back-end code for future features and making visual improvements.

Be warned, this release is likely to be amusingly buggy for a week or three. Whether or not that’s a good thing depends on how much you enjoy watching me scramble about like a lemur on fire trying to keep up with the necessary hotfixes. And let’s face it, of course you do, that’s hilarious. You bastards.

Changelog:

Stability Improvements

- several fatal crashes have been fixed (‘System.OutOfMemoryException’, ‘CladeDiagram.CollideBranches’, ‘UIManager.Paused_Export_Update’),
- the method for addressing problems when the game is minimised or graphics card is lost has been improved,
- built-in troubleshooting for some start-up problems (running from the zip file, running from Program Files, running on computer with unsupported graphics card) has been added

Aesthetic Adjustments

- Procedural texturing: creatures now have different top, side and underbelly textures, giving them a more distinct appearance and more recognisable body covers.
- Custom textures: beaks, claws, teeth and mouths now have their own (appropriately horrifying) textures, blended into the triplanar texturing.
- Fur: Fuzzy wuzzy was a bear, fuzzy wuzzy had no hair, but the creature’s in Species do now. And they find bear meat tasty.
- Water reflections: They only reflect the skybox, but they significantly improve the appearance of the game nonetheless.
- A new Species ALRE logo. Now with infinity% more cladeogram and cycad leaf.
- Adjusted Tree Shaders make better use of dark greys and oranges, meaning trees have more colour variety and look more natural.
- An improved wasteland texture.
- Fixed that weird blue shading on trees when you pause the game (it still happens on grass).

Content Additions

- Body coverings: fur, feathers, scales and skins. Also squid skin, toad warts, echidna spines and human forearms (ewwww…).
- Leg shapes: from 6 in 0.6.0 to 20, meaning a much greater variety of knee shapes.
- Heads: a number of additions (and of course, the existing heads had to be adjusted to provide beak and mouth textures and fur polygons).
- A selection of the Body Part Voting Competition head types.

Other

- Added an "Indirect" rover drive mode to the game options. Seriously, try it out. It's hilariously broken.

, , , , ,

2 Comments

Last minute stuff…

First, fixed an introduced bug that was giving canivores the ability to eat vegetation and removing herbivores ability to eat anything. A single missing “-” and herbivory stops being viable. Let’s hope that’s the last major error and the release is stable! (“Haaaaaahahahahahah!”)

                   

Second, since I haven’t spotted any other bugs recently, I followed through on my threat suggestion to include an Indirect Rover Control Mode, where the rover uses it’s AI to attempt to drive in the direction you point the camera. The result is every bit as broken and insane as you’d expect, and it. is. GLORIOUS.

                    

Finally, Species has adopted a new, less minimalistic logo.

                    

Image

                    

The clade diagram was planned from the start: the symbolism there is an obvious match for Species. I find it amusing how the game’s name correlates with a mass extinction, but then again I’m easily amused.

                     

The cycad leaf was more a case of Throw It In: it was originally going to just be the middle arc, but that looked too much like a planet. While that wouldn’t have been a bad representation of the games’ scope, it’s too reminiscent of space and science fiction in general.

                    

I was about to delete it when I threw some fronds on it on a whim, and liked the result. And the additional symbolism is nice: cycads are an ancient clade*, evocative of prehistory, nature and dinosaurs. All good evolutionary stuff.

                    

We’re still on track to release 0.6.1 on February 1. 🙂

                    

                    

*footnote: if anyone uses the term “living fossil” I will personally inject live cockatoo’s into their bloodstream.** I generally don’t do this because it’s a bugger to find a syringe big enough, but I’ll make an exception.

                    

**footnote: don’t worry, it doesn’t hurt the birds. It’s actually fairly close to how they reproduce in nature (they’re Australian).

                    

Cheers,

Qu

, , , , ,

4 Comments