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.
nicolaj.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.
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.
// Put this script on the triggerbox that has to change the theme music publicclass AudioThemeTrigger : MonoBehaviour { // enable these controls in the editor publicfloat fadeTime = 5.0f; public ThemeFader themeFader;
void Update() { if(triggered) { switch(themeFader) { case ThemeFader.FirstToSecond:
CrossfadeAudio(AudioTheme1,AudioTheme2); break; case ThemeFader.SecondToThird:
CrossfadeAudio(AudioTheme2,AudioTheme3); break; default: break; } } }
privatevoid 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();
// Get the first child transform with the speified name publicstatic Transform getChildByName(Transform transform, string name) { for(int i =0; i < transform.GetChildCount(); i++) { if(transform.GetChild(i).name== name)return transform.GetChild(i); } thrownew Exception("Cound not find child "+ name +" in "+ transform.name); }
// Returns a random audio clip from the specified array of AudioClips publicstatic 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]; } elsethrownew Exception("At least one audioclip has to be passed"); } else { thrownew Exception("At least one audioclip has to be passed"); } }
publicstaticfloat 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; }
// Sets layer for a given transform and for all its children recursively publicstaticvoid setLayer(Transform t, int layer) {
t.gameObject.layer= layer; for(int i =0; i < t.GetChildCount(); i++)
setLayer(t.GetChild(i), layer); } }
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.
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).
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.
The first production was called Hængerøv and was made in Source SDK using Lua, C++ and Visual Studio 2005. The production took place May 2008.
The game was a 3D platformer where you would play a young boy, that accidentally broke his sister’s new cell phone while secretly tampering with it in his tree house one night. The objective is to collect the missing buttons while evading the furious sister who threatens to embarrass you by showing a picture of your bare bottom to the entire school, but that is not all.
The dark garden is a treacherous place to sneak around. Garden gnomes have come to life and they yodel awfully loud when tripped over, and that is what your sister is waiting for, so she can find you and take your picture.
Your parents aren’t of much help as they are having a garden party. Empty wine bottles can also give up your position, and so can the (not-so-scary-almost-pathetic) ghosts that are haunting the garden.
Fortunately you are armed with your Bug Vacuum Gun, that can suck up the ghost. The downside of it is that it attracts your sister’s attention as well.
The only chance of avoiding total embarrassment is to return the fixed mobile to your sister before her boyfriend calls her.
With a background in music and theatre, my technical interests have always had elements of creativity, that being said, I possess an enthusiastic motivation to create technical wonders enriched with aesthetic considerations based on the user’s experience.
At my recently completed study, I have gained knowledge in creativity, natural and human sciences, along with skills in programming and media production. This knowledge enables me to understand designers’, users’, and engineers’ descriptions of the products.
The creative thinking and knowledge through education combined has proven useful in projects and internship when the need to structure innovative ideas.
In group work I have shown initiative and been a communicative motivator. When problems has occurred towards deadlines, I have often been in the role as a mediator and identifier of the problem in its simplest form, often followed by a role as a delegator of the tasks to solve the problem.