Posts Tagged ‘Science’

Simple Game Design through Polish, Appeal & Measures

Wednesday, June 17th, 2009

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.

(more…)

Game programmer on Exodroid

Wednesday, April 8th, 2009

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);
}
}

Casual game, -gaming, -playing, -gamer, -game player…

Thursday, January 22nd, 2009

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!

Using Game Design Patterns in Casual Online Game Productions

Sunday, December 28th, 2008

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.

(more…)

Jul i Sonofonhuset

Monday, December 8th, 2008

This was a project where I took part as game design and programming intern in Titoonic a/s in late 2008. The production time was one month. My main tasks on the project was game design, sound design, and sound programming (where the sound engine was added to the company’s codebase).

The sound manager class which is an adaptation of Matt Przybylski’s code found here.

Physically Modelled Sound and Immersion in Computer Games

Saturday, July 26th, 2008

(8th Semester)

In the early days of computer games the sound was created using simple synthesis techniques, but as the development of better processors and larger storage media, the development lead towards the use of wave-table synthesis, which has become the most used technique in current computer games. Since the introduction of the wave-table synthesis the development in audio creation and playback in games has stagnated.

One of the latest fields within sound synthesis is physically modelled, which holds great potential, within games and interactive environments, because of its more dynamic nature. An area in which very sparse research has been done is measuring the impact of physically modelled sound in computer game environments. This has lead to the following problem statement to be formulated: To which degree does physically modelled sound enhance physical immersion in first person computer games?

This project has analysed theories proposed by several authors within the fields: immersion, narrative and gameplay in computer games, audio in computer games. These fields and their different theories have formed an ontology for the project, upon which an application has been build. The application consists of a Half Life 2 modification, which makes use of the Nintendo Wii controllers, together with a modal sound synthesis.

(more…)

Questioning established definitions of semiotics on relation to human computer interaction

Thursday, January 24th, 2008

There is no such thing as human computer interaction (HCI) as there is a human, in the role of a designer, behind all computer systems. The concept of HCI is therefore a way to describe interesting ways* for humans to interact through computer systems. Hereby I propose that there is no such thing as HCI because computers do not provide information in any form. Computers are tools to mediate information between humans. What is being discussed here is the interaction between a human and a machine concerning the information that is being exchanged. One might argue that the interaction between a human and a machine is possible, however, this is without meaning because an interaction is an exchange of information and only living things can provide information. (more…)

Localisation of 3D Audio Sources in Augmented Reality

Saturday, December 29th, 2007

(7th Semester)

As human beings, we are dependent on our ability to hear sound in three dimensions since it provides us with many clues about how we are to navigate and behave in our surroundings. The fact that we from birth have been equipped with two ears placed on each side of our head makes us able to perceive the azimuth of a given sound, in fact we are able to localise a sound source within 2 degrees of azimuth; the design of the pinna or outer ear and our torso provides us with the ability to perceive the elevation of a given sound.

During the past decade there has been an increase in interest within 3D sound or spatial audio, both within entertainment, industry, and research; within this period several methods and systems has been developed to reproduce spatial audio. One of the methods is called head-related transfer functions (HRTF), which uses several audio cues in order to provide the listener with a broad spatial soundscape.

(more…)

Bringing Direct Social Interaction to Computer Games

Thursday, June 28th, 2007

(6th Semester/Bachlor thesis)

In this project we did a lot of research in the social factors in play and gaming. We established a framework for describing the immersive factors in a game and tested the framework with a computer augmented card game that displayed the players’ stats in a pseudo–holographic display, which enabled face–to–face communication while following the displayed stats.

How can we improve the advantages of a board game with the technologies provided by a computer?

When the tendency of playing games becomes an asocial thing, it is a scream to the developers to change the course.

The ever growing and impressive features of computer games have long suppressed the power of conventional games. The still fast development in technologies allow for still more extraordinary graphic engines. But what is happening to good old tabletop games.

We have delved into this aspect and investigated the relation between immersion and socialization as a method to create a relation between the idea of board games and the power of computers.

Project Website

The Petri³ and the Direct Social Supportiveness

Friday, June 15th, 2007

- elegantly pronounced [petriCube]

A tool for my bachelor thesis (which i did not do alone, but in a group) where we have tested the degree of direct social interaction in immersive multiplayer games.
We have assembled a little something for the crowds right here.

Get Adobe Flash playerPlugin by wpburn.com wordpress themes