Noroff University College
From the 14th to the 17th of February 2012 I held an introductory course in game programming using ImpactJS at Noroff University College in Oslo, Norway.
Noroff is a privately held school here in Norway, and offers educations within game design, film, graphic design, 3D, music and computing science. The game design students use Unreal Development Kit and therefore focuses a lot on 3D games. The purpose of the course was to give the students insight into 2D game development for both desktop and mobile devices, and how to use 2D game engines for creating casual and social games, and also prototyping ideas for bigger games. It was also to show that it's actually possible to make a living making your own games -all though it's not easy.
To increase the chance of learning, I gave the students assignments every day. The assignments were nothing serious, just simple and broad tasks that would encourage the students to use as many features of ImpactJS as possible and learn through playing. I held lectures from 9 to 12 o'clock, and helped the students do their assignments from 12 to 16 o'clock.
I would like to thank Dominic for providing the students a free license of ImpactJS during the course. That was really kind and very helpful. Thank you, Dominic!
- One student became nostalgic and wanted to create only retro platform games
- A team of students agreed that they would have done their final exam in 2D rather than using UDK
- One student wanted to stay in Norway and become an indie game designer
- Overall feedback was that both the students and their teacher wished this course had been held in the beginning of the year.
All in all, it seemed like this course broadened their perspective on game development and showed what possibilities they have.
The assignment that seemed to work best, was grouping the students in smaller groups of 3 to 5 members and have them design their own level. That gave them the opportunity to learn from and help eachother. The students seemed to delegate the subtasks to the members that was most skilled for the tasks. One would do scripting while another would do the sprite sheets.
Starting the course with playing through a working game proved to be very motivational. It also gave me concrete examples to demonstrate with, and a basis for the students to work on. I think it would have been tougher to start with a blank canvas, considering that the students hadn't had any scripting course at school.
Making the demo game was also very motivating for me because I proved to myself that it is actually possible to make a decent game within a just a few days of work.
Tuesday started with showing a demo of a game that I made just for this course. It's a simple platformer with the basic bell's and whistle's, such as enemies walking from waypoint to waypoint, throwing of bombs, exploding walls, powerups to pick up, jumping, running, etc. The demo took me about 3 days to make, and I used it to show the students that they too could make a game in 3 days.
The first lecture was about game engines, how they work today and how they used to work. Giving the students a historical perspective on the development of game engines helped explain to them why making a mobile or web based game today has many similarities to how we made games 20 to 30 years ago. During this lecture I showed them how tilemaps and sprite sheets work, told them why we had to organize graphics like that and showed them a few optimization tricks, such as the Super Mario cloud/bush trick.
ImpactJS' level editor (Weltmeister) is based on a 2D grid. In order not to make any of the studens believe this is a huge restriction, I showed them screenshots of several well known games that are all based on an underlying grid, whether it be visible or not. I also showed them that games based on a 2D grid can be transformed into an isometric game by changing the way the tiles are rendered.
Tuesday's lecture ended with an overview of ImpactJS and how to use Weltmeister. We looked at some simple source code, the documentation, forums, sample projects, and I demoed Weltmeister. After helping the students install XAMPP and ImpactJS, I let the students play around with my demo game.
Wednesday: Assets & entities
We started wednesday with looking at websites to use for getting graphics. Using already made tilemaps and sprite sheets can speed up the development process substantially. Spending too much time on pixel pushing too early in the process eats up valuable time that could be spent on programming. It's the time spent programming that will get you closer to the goal.
I showed the students how easy it is to create a tilemap and draw a level in Weltmeister. I gave them some tips on how to plan for extending the tilemap and how to best compose the tilemap for easier use in Weltmeister. We also looked at creating a sprite sheet and setting up animations. All though I'm not a level designer, I gave the students a few tips on how to start laying out your own level to ease the process.
To prepare the class for the next day, I introduced them to entities and showed them a few examples. The assignment for the day was designing a level. I spent the rest of the day helping them with various issues, and had a great time doing it.
We spent thursday delving deeper into the subject of entities. Most of the game logics happends within entities, so they are an essential part of a game. We looked at the collision system, both for collision between entities and collision maps and collisions between entities themselves. I gave the class some examples of what kind of entities one would put in ImpactJS' different collision groups, and how it looked in code.
The next part was chaining of entities. This is very useful when you want to create reusable entites and reduce the amount of code for each entity. We looked at some typical usage scenarios such as having a trigger reacting to the player entity, and making the trigger start an earthquake or spawning debris, and more complex examples where several entities were connected in a hierarchy.
As a part of looking at both the collision system and chaining, we learnt about changing the properties of an entity using Weltmeister.
The assignment for thursday was to continue working on the level they started on wednesday. In addition to helping out, I had a live programming session with a couple of the students. We were trying to enable melee attacks on the player. I had never done this before, but we managed to collectively figure out a way to solve this.
Friday: Mobile devices, alternative technologies and everything else
We also looked at how to make the game playable on mobile devices, in terms of input and performance. ImpactJS also supports Box2D so I showed them what Box2D is how to use it. The students had quite a few questions, so we spent most of the time just talking about various subjects.
About the demo game
The demo game was made in ImpactJS with the help from biolab entity pack and some code I had previously written. The tilemap is called Classical ruin and is from OpenGameArt, and the sprite sheet for the player is shamelessly taken from one of the Castlevania games for the NES. The boss is also from a NES game, I think. I don't remember where I got it. The skeletons are from an Open Game Art spritesheet called RPG enemies. The music is from NoSoapRadio, and I made the sound effects with Cfxr.
If you're interested, you can get the source code from my Git repository at https://github.com/mandarinx/Noroff. You will need a copy of ImpactJS to edit the level and run the game.