<< August 2012 | Home | October 2012 >>

Cortex Command released on Steam

On friday 28th September 2012, the Industries did upload the Cortex Command RC1 (Release Candidate) to Steam. It was approved and it's available now. The final completed game! You can find it here on Steam.

View the Cortex Command release trailer here:

All your pixel art games come hang with us!

Or so it seems

It has been a long road for Dan (interview here) from Data Realms working on Cortex Command. 11 years as the tale is told, but that journey has an end and that end is nigh!

The Industries have only been involved since May, 2008 when we first joined the team that is pushing Cortex Command to 1.0. The time has absolutely flown by. It's been a massively positive experience and quite a behemoth undertaking for such a small team of developers. Now at the end, only weeks away from a final release, the Industries are working hard to make sure Cortex Command will be something to be proud of.

With the Mac port being mostly done for some time now; we've put our energies into getting Cortex Command onto Steam and available for all. Now we're waiting for Dan and the rest of the team to polish and bugfix our way over the line. Our deploy fingers are itching. We're just waiting for the go ahead.

We discovered recently our friends at Transhuman Design have been working hard on getting to release their Pixel based fun fantastic extravaganza King Arthur's Gold. Michal Marcinkowski, the principle rogue of the Transhuman rogue collective, heard about our work towards getting Cortex Command onto Steam. It seems he remembered our past meeting in the aether when the Industries did reside in Europe. Ahoy! Said he. I know a band of scoundrels when I see one! I also know which scruffy misfits can help me ship KAG on Steam. We accepted his invitation to join his band of adventurers; if only for short time.

So the Industrial monkeys have set to work; KAG is now waiting in the wings to fly on Steam powered air. Once MM says "make it so."

For now, we leave you with a sweet little Hors d'oeuvre of KAG meat.

King Arthur's Gold is available on Windows, Macintosh and Linux and soon via Steam!

Unity 3D: Tips on combining treadmill animations and animations with baked in translation.

A stream of consciousness treatise (aka a messy mind blatt)

Treadmill Animations

The most obvious way to combine character animation and movement in Unity 3D is to use "treadmill" style animations. The character is animated to walk, run or otherwise perambulate on the spot. Actual world space movement is typically controlled via script or code. This is straight forward enough but one has to take care to setup the control code to translate the character at a rate which visually corresponds to the animation. Visible foot skating is the most common obvious side effect.

Complex Activities

Sometimes with more complex animations and interactions with the world it is very difficult to get animations to look like the characters are properly interacting with the world. Poor hand, hand or foot placements or character/world geometry intersections are likely symptoms. This kind of problem is most commonly solved using animations that include translation of the root node and the animation played is matched with specific world geometry and or props.

Typical examples of activities that might require such techniques include climbing, swinging and parkour style animations.

Trying to have the best of both world

Triggers to signal change of state. Standard sized interactive world object. Play animation with root node translation/animation On animation end take note of the world space location and apply this position to the root of the GameObject. When treadmill animations take over again it will should fine.

Animation Event

Animation events allow functions to be called at marked points during an animation. The canonical example of a use for this is timing the sound of footsteps during a walk cycle animation. The animation may be several seconds long but footfalls occur at specific time points.

AnimationEvent animationEvent = new AnimationEvent();
animationEvent.functionName = "OnAnimationEvent";
animationEvent.time = 0.4f;
animation.GetClip("animationName").AddEvent(animationEvent);
Animation Event Receiver

One little gotcha with Unity animation events is that the function that gets called by the animation event must reside in a script that is attached to the GameObject that is running the animations. Often this is the case so it just works but sometimes this is not the case. To make this a little easier for myself I usually use something like an AnimationEventReceiver script and attach it to GameObjects running the animation that will be firing my event. The receiver script acts as a proxy object that will then call my real method doing the work via it's delegate. The AnimationEventReceiver looks like:

public class AnimationEventReceiver : MonoBehaviour {
    public const string FUNCTIONNAME = "OnAnimationEvent";
    public delegate void AnimationEventDelegate(AnimationEvent animationEvent);
    private AnimationEventDelegate _callback;
    public AnimationEventDelegate callback { 
      set { _callback = value; }
    }
    public void OnAnimationEvent(AnimationEvent animationEvent) {
       if (_callback == null) {
          Debug.Log("AnimationEventReceiver callback delegate has not been set for animation event");
	  return;
       }
       _callback(animationEvent);
    }
}

Using this is something like

AnimationEventReceiver animEventReceiver = gameObject.AddComponent();
animEventReceiver.callback = delegate(AnimationEvent e) {      
   OnEventMethod();
};

This can be used from just about anywhere as our AnimationEvenReceiver exists on the animated GameObject to receive our AnimationEvent message