Digital Worlds – The Course

Digital Worlds – Interactive Media and Game Design is a free learning resource on computer game design, development and culture.

Originally authored as an experimental approach to the production of online distance learning materials, many of the resources presented on this blog have also found their into a for credit, formal education course from the UK’s Open University.

If you would like to learn more about the formal course, please visit The Open University website: Digital worlds: designing games, creating alternative realities – A Course from The Open University.

Accessible Gaming

One of the things that a great many games have in common is that they are visually rich and actually require a keen visual sense in order to play them. In this post, I’ll briefly review the idea of accessible gaming in the sense of accessible video games, hopefully as a springboard for a series of posts that explore some of the design principles around accessible games, and maybe even a short accessible game tutorial.

So what do I mean by an accessible game? A quick survey of web sites that claim to cover accessible gaming focus on the notion of visual accessibility, or the extent to which an unsighted person or person with a poor vision will be able to engage with a game. However, creating accessible games also extends to games that are appropriate for gamers who are hard of hearing (audio cues are okay, but they should not be the sole way of communicating something important to the player); gamers who have a physical disability that makes it hard for the player to use a particular input device (whether that’s a keyboard and mouse, gamepad, Wiimote controller, or whatever.); and gamers who have a learning disability or, age or trauma related cognitive impairment.

The Game Accessibility website provides the following breakdown of accessible games and the broad strategies for making them accessible:

- Gaming with a visual disability: “In the early days of video gaming visually disabled gamers hardly encountered any accessibility problems. Games consisted primarily of text and therefore very accessible for assistive technologies. When the graphical capabilities in games grew, the use of text was reduced and ‘computer games’ transformed into ‘video games’, eventually making the majority of mainstream computer games completely inaccessible. The games played nowadays by gamers with a visual disability can be categorized by 1) games not specifically designed to be accessible (text-based games and video games) and 2) games specifically designed to be accessible (audio games, video games that are accessible by original design and video games made accessible by modification).” Accessible games in this category include text based games and audio games, “that consists of sound and have only auditory (so no visual) output. Audio games are not specifically “games for the blind”. But since one does not need vision to be able to play audio games, most audio games are developed by and for the blind community.”.
Gaming with a hearing disability: “In the early days of video gaming, auditory disabled gamers hardly encountered any accessibility problems. Games consisted primarily of text and graphics and had very limited audio capabilities. While the audio capabilities in games grew, the use of text was reduced. … The easiest way to provide accessibility is to add so-called “closed-captions” for all auditory information. This allows deaf gamers to obtain the information and meaning of, for instance, dialog and sound effects.”
Gaming with a physical disability: “There are several games that can be played by people with a physical disability. … For gamers with a severe physical disability the number of controls might be limited to just one or two buttons. There are games specifically designed to be played with just one button. These games are often referred to as “one-switch”-games or “single-switch”-games.”
Gaming with a learning disability: “In order to get a good understanding of the needs of gamers with a learning disability, it is important to identify the many different types of learning disabilities [and] know that learning disabilities come in many degrees of severeness. … Learning disabilities include (but are not limited to): literacy difficulty (Dyslexia), Developmental Co-ordination Disorder (DCD) or Dyspraxia, handwriting difficulty (sometimes known as Dysgraphia), specific difficulty with mathematics (sometimes known as Dyscalculia), speech language and communication difficulty (Specific Language Impairment), Central Auditory Processing Disorder(CAPD), Autism or Aspergers syndrome, Attention Deficit (Hyperactivity) Disorder (ADD or ADHD) and memory difficulties. … The majority of mainstream video games are playable by gamers with learning disabilities. … Due to the limited controls one switch games are not only very accessible for gamers with limited physical abilities, but often very easy to understand and play for gamers with a learning disability.”

Generally then, accessible games may either rely on modifications or extensions to a particular game that offers players alternative ways of engaging with the game (for example, closed captions to provide an alternative to spoken word instructions), or they may have been designed with a particular constituency or modality in mind (for example, an audio game or game that responds well to a one-click control). It might also be that accessible games can be designed to suit a range of accessibility requirements (for example, an audio, text-based game with a simple or one-click control).

In the next post, I’ll focus on one class of games in particular – audio games.

Scripting With the Game Maker Language

Although Game Maker’s visual environment provide a friendly interface to many users, some people (particularly experienced programmers) may find it more natural to construct programmes using the text based Game Maker Language (GML).

In this short series of posts, I’ll repeat some of the other Game Maker tutorials using GML. So if you’ve ever fancied trying your hand at writing actual programme code, why not give this a try…?:-) Note that this series assumes some familiarity with writing games the visual way in Game Maker.

To start with, I’m going to replicate the “Catch a Clown” game described the introductory Game Maker tutorial.

The approach I’ll take is to write a series of series of GML scripts that can be attached to events associated with game objects, Setting up the game objects and events needs to be done using the visual editor (at least until I can figure out how, or if, we can write scripts to set up objects and rooms directly!)

To use Game Maker Language scripts, you’ll need to run Game Maker in its Advanced mode (set it from the File menu). Scripts can then be created from the toolbar, or from contextual menu raised by right clicking on the scripts folder in the left hand sidebar palette.

To begin with, we’re going to recreate the a single room game, with wall elements round the edges, and a clown that bounces around inside the room. The aim of the game is to splat the clown by clicking on it.

As I’m teaching myself GML too, will start by learning how to attach scripted events to the game objects. TO start with, you’ll need to:

- create a room;
– create a wall object with a solid wall sprite;
– create a clown object with a transparent clown sprite;
– put wall objects round the edge of the room;
– pop a clown object somewhere in the middle of the room.

To get things moving, we’re going to create a script that will set an instance of the clown object moving when it is created with speed 4 in a random direction.

Create a new script from the toolbar or scripts resource folder; double click on the new script to raise the script editor. In the Name textbox in the status bar at the top of the script editor, give your script a name. For convenience, you might prfix it with scr_. I’m going to call my first script scr_moveAny.

When writing a script, there are certain syntactic conventions we need to be aware of. Firstly, programme code nees to be contained within curly braces: { }

Secondly, separate lines of code need to end with a semicolon – ;

So how do we go about writing a GML programme. GML has a wealth of predefined functions, which are all described in the Game Maker Help menu. But as novices, we donlt know what any of those functions are, or what they do. So let’s start to build up our knowledge somehow.

Before we get into the code, remember this: writing programming code is not what programming is about. Progrtamming is working out the things you need to tell the computer to do so that the programme does what you want. Writing the code is just that – taking the programme, an coding it in a particular way. You can write your programme – the list of things you want the computer to do – anywhere. I often doodle outlines for the programmes I want to write on scraps of paper. Having worked out the programme, we can then write the code.

So what programme are we going to write for starters? Well, when the clown object is created, we need it to start moving in a random direction with a specified speed.

Looking through the GML help file manual, in the Moving Around section, I noticed a function called motion_set(dir,speed) which Sets the motion with the given speed in direction dir.

Hmm… okay, so my programme code might look something like:

{
motion_set(dir,4);
}

So if I attach this script to the clown’s Create event, it should start to move in direction dir with speed 4. But what’s dir? Digging around a little bit more, it’s a direction given in degrees. So to move randomly, I need to set dir to a random number between 0 and 359). I know a bit about other programming languages, so I guess there’s a probably a “random” function… and there is: random(N) which returns a random real number (i.e. it might have lots of bits after the decimal point) between 0 and N.

To get a whole number (known as an integer) we can put the random() function inside another function, called floor(M), which rounds the number, M, contained in the brackets down to the nearest whole number. That is, if we write:

floor(random(360))

the random(360) function will return a random number between 0 and 360 (such as 124.9734), and the floor function will round it down to the nearest whole number (in this example, 124).

Great – so we can get a direction angle for our motion_set() command. We could just replace the dir term in the motion_set function with the floor(random(360)) expression, or we could use a variable. A variable is like a container we can use to represent a (possibly changing) value. In GML, we need to declare a variable before we use it with as follows:

var dir;

var is a special reserved word that tells Game Maker the next word is the name of a variable, in the above case, dir. We can then set the dir variable to a numerical value:
var dir;
dir=floor(random(360));

The whole script looks like this:

{
var dir;
dir=floor(random(360));
motion_set(dir,4);
}

You can check that the code is “correct” in a syntactical sense (i.e. you can check you’ve got the brackets and punctuation right, if not the logic) by clicking on the 1010 button (“check the script for syntax errors”).

If you save the script, we’re now in a poistion to attach it to the clown object. Open the clown object window, add a Create event, and from the control panel on the right hand side, add the “Execute script” action.

Select the clown object and add a Create event. It would be nice if we could configure Game Maker to easily allow us to attach a script to this element more directly, but in Game Maker 7 at least, we need to do this from the control tab on the right hand sidebar palette in the object editor window. The element we’ll be needing is the Execute Script code element:

Game Maker Exectute script element

Select your script from the list of named scripts that are available from the drop down listbox, and attach the desired script to the object itself:

Now play the game. Hopefully, you should see the clown start to move in a random direction at the required speed when the game is started.

So what’s next? If the clown bumps into a wall, we need it to bounce off. We might also want to play a sound as the clown does so. Create a new script, and call it something like scr_wallBounceSound. The function move_bounce_solid(adv) (“Bounces against solid instances, like the corresponding action. adv indicates whether to use advance bounce, that also takes slanted walls into account.”) looks handy. I’m not sure what adv is, but I’m guessing true or false…

Let’s try this:

{
move_bounce_solid(false);
}

Save the script, add a collision event to the clown object that detects a collisions with a wall object, and attach the scr_wallBounceSound script to it. Run the game – hopefully your clown will start to move in a random direction and then bounce off the walls…

Now lets add a sound. Searching for sound in the help file turns up dozens of sound related GML functions, but sound_play(index) looks relevant (“sound_play(index) Plays the indicates sound once. If the sound is background music the current background music is stopped.”). index is the number of the sound file, as ordered in the sounds folder in the resource sidebar, and starting with the index number zero. I have two sounds in ,my game, one for wall bounces, one for when the clown is clicked on, so I choose the approariate one. My script now looks like this:

{
move_bounce_solid(true);
sound_play(0);
}

And finally… In the simplest version of the original game, the idea was to click on the clown to catch it. Catching it has the effect of increasing the score, playing a sound, repositioning the clown to a different location, and setting it moving in a random direction again.

We know how to play the sound and get the character moving, so all we need to figure out is how to increase the score, and move the clown to a new location. In the GML help pages the section on “Score” tells us the name of the variable that is defined by the game to hold the current score: score.

To increase the score by 10, we can write one of two things. Either:
score=score+10;
That is, set the new value of the score to equal the current value of the score, plus 10.

Or we can use the shorthand form: score+=10

To reposition the clown, the help file comes to our rescue again. In the Moving Around section, we find the function move_random(hsnap,vsnap) Moves the instance to a free random, snapped position, like the corresponding action. I think we can just set the hsnap and vsnap values to 0.

So here’s the script that we want to attach to the left-click mouse event on the clown object:

{
score+=10;
sound_play(1);
move_random(0,0);
motion_set(floor(random(360)),4);
}

Okay, I think that’s enough for now… except to look at how we might save and load scripts. In the scripts menu is an option to Export a selected script. The export looks something like this:

#define scr_clickedClown
{
score+=10;
sound_play(1);
move_random(0,0);
motion_set(floor(random(360)),4);
}

It might therefore seem reasonable to suppose we could edit a who range of scripts in a text editor outside of Game Maker and save them in a single text file. Something like this maybe?

#define scr_moveAny
{
var dir;
dir=floor(random(360));
motion_set(dir,4);
}

#define scr_wallBounceSound
{
move_bounce_solid(true);
sound_play(0);
}

#define scr_clickedClown
{
score+=10;
sound_play(1);
move_random(0,0);
motion_set(floor(random(360)),4);
}

And it does indeed seem to work… as long as you save the file as a text file with the suffix .gml

Finally, finally, it’s just worth saying that if you want to leave notes to yourself in a GML programme that are ignored by Game Maker, you can do. They’re called “comments” and you prefix them like this:

// a comment in a programme that is
// ignored by Game Maker;

That is, use double slash… And how are comments typically used? A bit like this:

//script to handle the left-mouseclick event when a clown is clicked on
// this script should be attached to the clown object
#define scr_clickedClown
{
score+=10; // add 10 to the score
sound_play(1); //play the squished sound
move_random(0,0); //move the clown to a new location
motion_set(floor(random(360)),4); //move in a random direction at speed 4
}

That is, we can use the comments as programme code documentation…

Friday Fun #20 Net Safety

For games that are sold on the UK High Street, the PEGI classification scheme allows purchasers to check that the game is appropriate for a particular age range, and also be forewarned about any ‘questionable’ content contained within the game, such as violence, sex or drugs references, and so on (e.g. Classifying Games).

At the time of writing, there is no mandated requirement for online games to display PEGI ratings, even if the games are made specifically for the UK market, although PEGI does have an online scheme – PEGI Online:

The licence to display the PEGI Online Logo is granted by the PEGI Online Administrator to any online gameplay service provider that meets the requirements set out in the PEGI Online Safety Code (POSC). These requirements include the obligation to keep the website free from illegal and offensive content created by users and any undesirable links, as well as measures for the protection of young people and their privacy when engaging in online gameplay.

So how do you decide whether an online game is likely to be appropriate for a younger age range? One way is to ‘trust’ a branded publisher. For example, games appearing on the BBC CBeebies games site are likely to be fine for the youngest of players. And the games on CBBC hit the spot for slightly older children. If you’re not too bothered about product placement and marketing, other trusted brands are likely to include corporates such as Disney, although if you’re a parent, you may prefer games hosted on museum websites, such as Tate Kids or the Science Museum.

But what about a game like following, which is produced by Channel 4 and is intended to act as a ‘public service information’ game about privacy in online social networks?

What sort of cues are there about the intended age range of the players of this game? Are there any barriers or warnings in place to make it difficult to gain access to this game on grounds of age? Should there be? Or is it enough to trust that the design and branding of the site is only likely to appeal to the ‘appropriate’ demographic?

Look through the Smokescreen game website and missions. To what extent is the game: a simulation? a serious game?

How does the visual design of the game compare with the designs for games on the ‘kids’ games sites listed above?

PS if you get a chance to play some of the kids games, well, it is Friday… :-) I have to admit I do like quite a few of the gams on the Science Museum website ;-)

Friday Fun #19 Let’s Make a Movie

A recent post reporting on the 2008 Machinama filmfest on the Game Set Watch blog (The State Of Machinima, Part 2: The Machinima Filmfest Report) mentions, in passing, how in certain respects machinama – films made using game engines – can “be best described as digital puppetry”.

So for the budding digital puppeteers out there, why not wind down this Friday afternoon by having a go at putting together your own digital puppetry performance using xtranormal?

This online application allows you to select a “film set” and then place one or two characters within it. The characters actions can be defined from a palette of predefined actions:

and facial expressions:

Dialogue can also be scripted – simply type in what you want the characters to say, and it will be rendered to speech when the scene is “shot”.

You also have control over the camera position:

To get you started, here’s a quick tutorial:

If you don’t want to start from scratch, you can remix pre-existing films… Here’s one I made earlier, a video to the opening lyrics of a New Model Army song: White Coats.

The following clip shows a brief demo of the application, along with a sales pitch and a quick review of the business model.

Based on the demo pitch and some if the ideas raised in Ad Supported Gaming, how do you think xtranormal might be used as part of an online, interactive or user-engaged advertising campaign?

PS For a large collection of machinima created using the Halo game engine, see Halomovies.org.

The Technical Cost of Persistence

One of the most compelling features of many games set in online virtual worlds is that the game world is persistent. That is, life in the game world goes on, even when the player is not there. When the player returns to the world, their character and belongings are as they were when the player left the world, but the state of the world itself will have moved on – buildings may have been constructed, monsters killed, and so on. Any artefacts left by player in a public area of the game when they went offline may have been moved or taken by other players whose characters are still roaming the virtual world.

At a technical level, what this means is that the game world must always be available – the computer servers that run the game must be online 24 hours a day, 365 days a year, keeping the virtual world running. Even when there is no-one in world, there may be elements of the game physics that require some computation to be carried out.

To get an idea of what’s involved in developing the infrastructure that supports a persistent virtual world, read the article Massively multiplayer online games, Part 1: A performance-based approach to sizing infrastructure on the IBM developerWorks website. Don’t worry if you don’t understand all the terminology – the article was written for an audience experienced in the design of large computer systems. There is a still a lot that you can learn from it as a less technical reader. For example, as you read the article, try to answer the following questions:

  • what does the author mean by the phrase “game platform”? What are the dominant game platforms for Massively Multiplayer Online Games (MMOGs)?
  • what strategies do developers use to cope with large numbers of players, particularly when they come from different areas of the world, speak different languages, and so on?
  • how does the design of the EVE online game compare with that of most MMOGs?
  • what is the “response time” of a game, and how is it likely to affect a user’s experience of the game?
  • what factors are likely to impact on the performance of the game? How might the design of the game’s computing infrastructure address these issues?
  • the article suggests designing the infrastructure using a “tiered” approach – what tiered levels are suggested, and what does each one do?
  • what are ‘bottlenecks’ and how are they likely to affect the performance of the game?
  • what is “latency” and how is it likely to be perceived by a game player? What elements of the system design are likely to affect the latency of the game?

Phew… you maybe found that quite a challenging exercise? But hopefully a worthwhile one? When reading a document like that, it’s always worth trying to ask yourself questions about what’s being said to further your understanding of it; and if there’s jargon you don’t understand – don’t worry. Try to read the document “for sense” the first time through. You can always go back to the document after looking up the terms you don’t understand, or asking for clarification from someone who may know via your social network…

If you did answer the questions, and maybe even jotted down a few notes, trying writing a blog post (500-1000 words or so – and link back here!;-) to summarise the original article and communicate some of the high level issues and considerations involved in designing the computational infrastructure for an MMOG. And if there’s anything you didn’t understand, try posting a comment back here and then keep an eye on any follow up replies…

Making Casual Games Pay

Like many other creative industries, the games industry is not just about helping people have fun. It’s an industry, made up of businesses, and those business exist to make money.

In the post Ad-Supported Gaming, I described three different models for using advertising as a way of making computer games pay. In this post, and the ones that follow it in the topic, we’ll consider some of the other business models that support games and gaming, and look at how the distribution models for different sorts of games compares with the distribution of other digital media such as music, movies and even books.

But for now – let’s consider casual games, which in many cases need to (appear to) be “free” to the end-user, or they won’t play them… And if they are being sold, then they need to be affordable (which means they need to be sold in volumes large enough to cover the cost of development and distribution, though not played in such large volumes as if they were purely ad-supported).

The following opinion piece – The Future For Casual Game Revenue Growth? – that appeared on the GamaSutra news site tries to identify the different ways in which the developer of a casual game can make a living. Try to answer the following questions based on your reading of it:

  • what are the three main ways of covering the development costs of, and ideally securing a profit from, casual games that are identified in the article?
  • how does the use of advertising in casual games compare with advertising on television?

The article identifies three main ways of raising revenue:

- In-game advertising, in which advertising space is sold within a game; the developer uses ad-revenue to provide them with an income;
– “the direct route”, whereby “a direct connection [is made] between independent developers and gamers”; here, the developer tries to sell direct to the end-user. This position is contrasted with ‘selling out’ to a publisher who is likely to market the game in a traditional way;
– “increase the perceived value of their games by upping the price”: that is, sell the game as a “superior product”, a counter-intuitive and potentially risky strategy in which differentiation of the game is achieved by pricing it above that of competitors, some of which are made to look cheap, and – one hopes – of lower perceived quality!

Several other approaches are mentioned in passing in the closing section: “promotional contests to award points to those who purchase new games, thereby increasing sales and loyalty. In-site ads, merchandising and game trailers, which are sold as advertising elsewhere”.

Casual games are seen to be similar to television sitcoms in that “…in exchange for the ability to play and be entertained for a short period of time, people are willing to watch ads” (these ads correspond to the interstitial or pre-roll ads that were described in Ad-Supported Gaming). However, it is also possible “to integrate dynamic in-game advertising platforms into the game. [That is, in-game advertising.] With the constant connection, the adverts can be altered based upon a player’s moves, or even their geographic location, providing targeted and more effective advertising. … It wouldn’t be surprising if in-game ads soon become integral to the content of a game, offering clues, extra levels or other hidden rewards for the player who clicks through.” In-game advertising, even in casual games, offers the potential for interaction. By engaging the player emotionally in the game, they may well be forced to pay more attention to the promotional message or advertised goods (for example, if you have to go in search of the missing Nuvo Cola can…!)

Can you think of any other “routes to free” for casual games? Post your thoughts back as comments… Here are some ideas to get you started: Lions, Tigers, Free Games… Oh My!.


Categories


Follow

Get every new post delivered to your Inbox.

Join 59 other followers