Click to try…

I prototyped this simple control scheme in ~2 hours. I wonder what may become of it if I put more time into it.

TODO:

  • Add rules
  • Apply polish
  • Produce levels like Niflas :-)
  • Polish again
What do you think?
 

Nothing much, just what my team and I accomplished at Nordic Game Jam 2011:

mdr.neonleif.dk

 

Right now I am totally exhausted after having designed and coded in audio in the NGJ game Inglorious Skater.
There has been a lot of very interesting and funny games here at the Nordic flagship of IGDA’s Global Game Jam in Copenhagen.

There where a number of games submitted this year of which twelve went to through the first voting round:

  1. Disco Donkey Slaughterhouse
  2. Chasing Dots
  3. You Say Jump, I Say How High
  4. Grapple Grapple
  5. Shadow Ninja Monkey
  6. Find Love
  7. Preschool Theater Director
  8. Honeymoon

There where also four juror industry / research representatives that had to pick their favourites (one of them got picked twice, I think… correct me if I’m wrong)

Finally the People’s Award went to the game Only One Can Ride The Donkey.

The theme of the Global Game Jam was  deception and the local constraints for GMT+1 (based on timezones) was that the games had to incorporate the words monkey, donkey, or key (I’m afraid the art of subtlety has been lost; if I hear of a game including any of those within the next year, my head is going to pop).

I’ve noticed a few using XNA or GameMaker, a bit more using Flash but by far, the majority of the games here where created with Unity.

 

For a few months I have been working at Unity Technologies as QA Specialist, handling the publicly submitted bugs reports. I am very proud (even lucky as I have just graduated) of being a part of one of the worlds leading teams in game development.

Our issue tracker, FogBugz, is not feature loaded, but the FogBugz XML API has quite a few possibilities to it.

I am learning Perl to get an easy and versatile tool to work the API with. Once I am on top of that, I will look into how the API can be used to fill in some missing features of FogBugz. Then, in a near future when I have tweaked FogBugz to meet the needs of Unity Technologies, I will put my interests and experience into extending the product itself to make life even more easy for game developers.

 

Back on the blog.

Some 3d doodle guys from the DADIU projects I did have started a small game company called Sapling.

Another programmer and I are going to help them create some code that make their great graphics come to life.

For now we are doing a pilot project called Zumbi-e: a zombie shooter with some RTS/Puzzle elements in it.

 

A figure from my thesis summarizing the theorynicolaj.schweitz@gmail.com if you would like to read my thesis. Otherwise, read on and get an overview of my thoughts behind.

With a vantage point in the term Game Polish, I have proposed a simple method for designing games independently from any specific production methodologies.

The study was made in the spring of 2009 through correspondences with members of the International IGDA Game Design SIG and other forums dedicated to game design.

The main cornerstones of the study is Polish, Appeal, and Measures – all elaborated in the report.

The conclusion of the thesis proposes a simple methodology of designing games that is independent of software production methodologies.

Continue reading »

 

While doing my MSc in Medialogy, I took part in two productions at DADIU (Danish Academy for Digital Interactive Entertainment).

My second production was called Exodroid and was made in Unity3D using C# and Visual Studio Express. This production took place in March 2009 while I was writing my essay and master thesis , so these are somewhat interconnected.

As game programmer on this project, I gained experience using C# with Unity3D. Furthermore, I took an active part in developing the design and the production itself.

I participated in the project while writing my master thesis, therefore much of the discussion and conclusion is somewhat related to this project.

Official info and download page at dadiu.dk

Simple C# script to trigger theme music at certain points in the game:

using UnityEngine;
using System.Collections;

public enum ThemeFader
{
FirstToSecond = 0,
SecondToThird = 1
}

// Put this script on the triggerbox that has to change the theme music
public class AudioThemeTrigger : MonoBehaviour
{
// enable these controls in the editor
public float fadeTime = 5.0f;
public ThemeFader themeFader;

private bool triggered = false;
private GameObject player;
private Transform AudioTheme1;
private Transform AudioTheme2;
private Transform AudioTheme3;

void Start()
{
player = GameObject.FindGameObjectWithTag("Player");
AudioTheme1 = Helper.getChildByName(player.transform, "AudioTheme1");
AudioTheme2 = Helper.getChildByName(player.transform, "AudioTheme2");
AudioTheme3 = Helper.getChildByName(player.transform, "AudioTheme3");

switch (themeFader)
{
case ThemeFader.FirstToSecond:
AudioTheme1.transform.audio.volume = 0.7f;
AudioTheme2.transform.audio.volume = 0.0f;
AudioTheme3.transform.audio.volume = 0.0f;
break;
case ThemeFader.SecondToThird:
AudioTheme2.transform.audio.volume = 0.7f;
AudioTheme3.transform.audio.volume = 0.0f;
break;
default:
break;
}
}

void Update()
{
if (triggered)
{
switch (themeFader)
{
case ThemeFader.FirstToSecond:
CrossfadeAudio(AudioTheme1,AudioTheme2);
break;
case ThemeFader.SecondToThird:
CrossfadeAudio(AudioTheme2,AudioTheme3);
break;
default:
break;
}
}
}

private void CrossfadeAudio(Transform t1, Transform t2)
{
if (t1.transform.audio.volume > t1.transform.audio.minVolume)
{
//fade out
t1.transform.audio.volume -= t1.transform.audio.maxVolume * Time.deltaTime / fadeTime;
}
else
{
t1.transform.audio.volume = 0.0f;
t1.transform.audio.Stop();
}
if (!t2.transform.audio.isPlaying)
{
//start the new sound if it is not allready running
t2.transform.audio.Play();

}
if (t2.transform.audio.volume < t2.transform.audio.maxVolume)
{
//fade in
t2.transform.audio.volume += t2.transform.audio.maxVolume * Time.deltaTime / fadeTime;
}
else if (t1.transform.audio.volume <= t1.transform.audio.minVolume) triggered = false;
}

void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.tag == "Player")
{
triggered = true;
}
}
}

A little C# helper for some tedious tasks:

using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;

public static class Helper
{
static AudioClip lastClip;

// Get the first child transform with the speified name
public static Transform getChildByName(Transform transform, string name)
{
for (int i = 0; i < transform.GetChildCount(); i++)
{
if (transform.GetChild(i).name == name) return transform.GetChild(i);
}
throw new Exception("Cound not find child " + name + " in " + transform.name);
}

// Returns a random audio clip from the specified array of AudioClips
public static AudioClip getRandomAudioClip(AudioClip[] clips)
{
if (clips != null)
{
// Create a list with available clips
List<AudioClip> clipsToChoose = new List<AudioClip>(clips);

// Remove the previous clip from the list if it is there
if (lastClip != null)
{
for (int i = 0; i < clipsToChoose.Count; i++)
{
if (clipsToChoose[i].name == lastClip.name)
{
clipsToChoose.RemoveAt(i);
break;
}
}
}

if (clipsToChoose.Count > 0)
{
int randomNb = UnityEngine.Random.Range(0, clipsToChoose.Count);
lastClip = clipsToChoose[randomNb];
return clipsToChoose[randomNb];
}
else throw new Exception("At least one audioclip has to be passed");
}
else
{
throw new Exception("At least one audioclip has to be passed");
}
}

public static float adjustVolumeToDistance(GameObject soundSource, float distanceToZeroVol)
{
GameObject player = GameObject.FindGameObjectWithTag("Player");
//getting distance to camera
float distance = Vector3.Distance(soundSource.transform.position, player.transform.position);
//calculate newVolume
float newVol = 1 - (distance / distanceToZeroVol);
//scale according to maxVolume
newVol *= soundSource.audio.maxVolume;
//make sure volume is positive or zero
if (newVol > 0.0f) soundSource.audio.volume = newVol;
else newVol = 0.0f;
return newVol;
}

public static float adjustVolumeToDistance(GameObject soundSource)
{
return adjustVolumeToDistance(soundSource, 1000.0f);
}

// Sets layer for a given transform and for all its children recursively
public static void setLayer(Transform t, int layer)
{
t.gameObject.layer = layer;
for (int i = 0; i < t.GetChildCount(); i++)
setLayer(t.GetChild(i), layer);
}
}
 

nice graphics, eh :-)In January 2009 I attended Global Game Jam with the game Dusk of Ninja And Brush.

The game was made in Unity3D using C#. My contribution was a little programming, part in the game design and virtually most of the sound design and implementation.

Go check out the game at the Global Game Jam website. There are tons of other experimental games there as well.

Check out Computerworld’s report on Global Game Jam (Danish).

See you next year!

 

Well, ain”t that a rant…

I”m writing this post because I recently read a paper seeking to define the term casual in relation to video games (check the presentation slides that comes with it). Then I found a post on indiegamer.com discussing this very question.

My approach is grounded in the academia but moving towards the real deal, the practical implementation, or you might say, the geeky know-a-lot-but-haven”t-really-tried-it-properly-yet approach. That is except for my experimenting in my spare time and at the university not to mention my recent internship in a game company called Titoonic in Copenhagen.

In short the paper categorizes terms of “casual” in relation to games into the following:

  • Casual Games:
    The games that are casual or designed to belong to a subset of games, meant to be played casually. Mostly defined as having “generally appealing content, simple controls, easy-to-learn gameplay, fast rewards, or support short play sessions” [Kuitinen et al.].
  • Casual Game Player:
    A person that plays games labeled or designed to be Casual Games. The stay-at-home wife 35+.
  • Casual Gamer:
    A person who play ANY games casually (notice the difference from above).
  • Casual Gaming:
    The general attitude or approach towards gaming. (Hardcore gamers do not play for leisure).
  • Casual Playing:
    Describes the way a casual gamer would play a game. “… in small time bursts or in a low cognitive state” [Kuitinen et al.]. Playing without effort.

In my humble oppinion it is nice to have a clear definition eventhough some people think it is waste of time and goes “no speak – make game”. I wonder where the cultural and technical evolution would be if everyone thought like that when they discovered the wheel.

Anyway… I want to give my support to the guys in Tampere that like to explain the buzz. Kudos!

 

9th Semester/Internship

Spending time in “the real world” was a great lesson for me. Besides the academic work, described below, I gained first hand experience in what it takes to deliver production quality flash games. Go see the cases Jul i Sonofonhuset and Tron – Light Cycles.

Continue reading »