Return, with a GIF

So much has happened in the last year. It’s almost exactly twelve months since I last published anything on this blog, although I have used it a fair bit for storage of writing. I have been putting off a return to traditional blogging, in as much I ever traditionally blogged, until today I had a thought. What if I just used my blog for silly things? Nobody is marking me for this blog. There will not, I hope, be a test. So with that in mind, and a potentially funny idea occurring to me during the day, I decided to bring the blog back with an animated GIF of all things.

The GIF shows my mouse cursor hanging out idly at the side of the screen as I browse Facebook. Then something quite unexpected happens when I move it slightly. (You will need to click to see it animate.)

Terrifying image appears covering the screen when hovering over advertisement

The Perils of HoverZoom

Context for the GIF:
HoverZoom(dot net) is an extension for the Google Chrome browser that loads images when the mouse cursor is hovering over them, and shows them on the screen without having to click the link. It sounds very basic, but I found its functionality became a huge part of my web browsing over a relatively short time. It’s hard to describe just how much faster it feels not to have to open a tab and close it five seconds later (or less!). HoverZoom has been at the centre of some controversy recently, so I’ve been looking into alternatives like Imagus, but most importantly, I’ve been thinking about HoverZoom and its usefulness a lot. So while similar things have happened to me in the past, this one struck me as a perfect illustration of when it is not quite as good an extension as one might think.

PyStroke: Pre-alpha at last!

It’s been a long time coming, but I finally got my game engine properly online in a version controlled, browsable form. Say hello to PyStroke v0.02!

This isn’t an amazing success, or even much of a step forward, in terms of programming. I haven’t worked much on it since Ludum Dare, thanks to various assignments, including writing a twenty-page report on PyStroke and assorted research as part of my Final Year Project. However, I have met some nice people through Reddit and Twitter who are interested in reading the code and giving it a try. As well as that, I wanted to have a build online by Christmas. Unfortunately that wasn’t possible, given the aforementioned assignments taking up so much time, but less than two weeks later isn’t too bad, I don’t think. And technically, my Ludum Dare game included a build of the engine more than a week before Christmas, it just wasn’t very readable. So overall, I think I succeeded.

The code isn’t exactly pretty, but it is very, very much a work in progress – pre-alpha is even being a tad generous. I have used it to create games, but I don’t necessarily think it follows that someone else will be able to. In the next week, I hope to knock together an extremely simple game and write a little tutorial on how the engine is used, as I see it.

There is one semantic bug that isn’t going to go away for a little while – rotation of the ‘vex’ (or vector sprites) uses a slightly incorrect call to do some of its calculation. The rotation works, but under the hood it isn’t strictly right. I’ll need to give that some time as a priority in the coming days.

Anyway, I’m glad to have it finally out there! Feels good. Expect to hear more about it as January (and the year) continues.

Ludum Dare 25

My Final Year project has ballooned somewhat from a relatively simple idea to make an open-source game, to the considerably more complex idea to create a game framework for others to use. I’m not upset about this, though. I’ve discovered I really enjoy playing about with the bits that people will use to make games.

Last weekend was the 25th Ludum Dare competition. It was also, on Saturday, the time of my last exam this semester. So, as tempted as I was, I did not start a Ludum Dare game at 2am on Saturday like many other participants. I told myself that if the exam went well, and if I could make the current pre-alpha build of the library separate from the main sample game, that I would try to knock something together.

As it happened, the exam did go rather well. After some recovery time, that evening I sat down, without much hope, to try and extract the framework from the game without breaking it. Two hours later I had it working from a separate folder, and it wasn’t even close to bedtime. ‘I guess that’s it’, I thought. ‘I’m finally making a go of Ludum Dare.’ Armed with a couple of uncaffienated beverages and some paper, I set to work designing a game to fit the theme of LD25: You Are The Villain. At first I struggled, but then I had a flash of inspiration: a packet sniffer! It was simple, could have malicious intent, and could be gamified using the vector graphics style my framework revolves around.

Thence came IdentiThief, a game that took me about twelve hours of work and vindicated many of the niggling suspicions I had about the framework’s design, as well as highlighting a few new ones. Nevertheless, I was able to see my framework through the eyes of a developer at last, which was very valuable indeed. I went from concept to full design to first prototype in a matter of hours, and that was a lot of fun. At the end, I even had time to work in a separate menu and game state, which I have never done before in Pygame, let alone in my framework. I had to hack it a little to make it work, but it will definitely be a feature now.

All in all, I had a great time and gathered (somewhat) useful data on how I could improve my framework. Not to mention, I made a game in a day! Not too many people can say that.

Achievement Unlocked: Ethical Game Design

As game designers, is it our responsibility when someone spends more time than they want to on a videogame?

It’s a common enough occurrence in this world of social game systems like Raptr and TrueAchievements. Someone buys a game, and straightaway fills their Twitter and Facebook feeds with their journey towards completing every single little challenge in that game.

Achievements, for the uninitiated, are meta-medals that are associated with a player’s profile across multiple games. They are earned by completing small or large challenges in the game – or at least, that is how they were designed. The best achievements record things that players might do just for fun – to see if they can. Today, the effort required to get an achievement is approaching rather silly extremes. From the ‘turn-on-the-console’ achievements, which reward you for starting the first mission or shooting your first enemy, to the achievements which require literally hundreds or thousands of hours of play. An example of the latter is the now-infamous ‘Seriously…’ achievement from the Gears of War series. Here you can see the Seriously 2.0 achievement from Gears of War 2. This achievement requires you to kill a hundred thousand enemies.

Anybody who is of an obsessive frame of mind – and some gamers certainly are – might waste incredible amounts of time trying to reach this goal, way beyond the amount of time they would spend on the game if there were no achievements. I realise that designers want to encourage players to spend more time (and sometimes more money) on their games, but achievements like this are simply gratuitous.

I play games for fun. Achievements are fun in general, and some of them can be entertaining to strive for, but the pressure of earning every single one in every single game would drive me mad. And yet some people feel that pressure. As game designers, I think we have a ethical responsibility not to enable this kind of anti-fun idea. Not that I think achievements are bad, just that there will always be players obsessive enough to spend the time earning the silly ones like Seriously…, and that we should think carefully before adding such achievements to our games.

Space Jump

When we discuss game spaces, it is usually in the context of Huizinga’s ‘magic circle’ – a space, virtual or otherwise, that we enter to give “meaning” to our play. Without the magic circle of a marked-out playing pitch, twenty-three men would look rather silly frolicking all over the grass with an oval-shaped ball.

To my mind, though, game spaces are designed to encourage particular modes of play in their occupants. The fact that they may do this by giving meaning to the play takes a back seat to this actual goal.

Grand Theft Auto (the original) placed the player in a sprawling city, with cars and guns everywhere. The game offered missions at various phone booths if the player ever felt like gaining ground in the game’s narrative, but equally these missions could be ignored. No great restrictions were placed on the player’s movements within the city, so there was plenty of exploration to be done if the player was so inclined. The game space incentivised this by placing better cars, various shops, and secret powerups in specific locations. Because the locations of most of these exploration rewards never changed, the player was encouraged to learn the layout of the city. If the player did learn the layout, they would find the missions much easier, becasuse they usually involved driving in some way.

On the other hand, if the player focused hard on the missions (an explicit ‘meaning’ to the play), and did well, they would inevitably end up finding some of the secrets themselves, as well as getting a good idea of the layout of the city. So in the end, the game manages to inspire roughly the same modes of play in players who play the game in ways which seem very different indeed.

The theme of exploration continues in my other example, the genre known as ‘Metroidvania’. Named for the two most famous examples, Metroid and Castlevania (which both started on the Nintendo Entertainment System), these games place the player in a large, sprawling area, with lots of passages and hidden doors, etc. Unlike Grand Theft Auto, though, these games do not let the player roam wherever they please. Usually, all but one or two paths are blocked by locked doors or other obstacles. These can only be bypassed by proceeding along the open paths, and backtracking later when a new power or key is obtained. Again, learning the layout of the map is encouraged, but in a less organic way – if you get a new power/key but forget the place where it is needed to progress, you can be stuck hunting in every single room for it. So you are strongly incentivised to somehow record or remember each blocked path, and why that path is blocked.

The conclusion I’m drawing is that game spaces can encourage modes of play that the developer wants to see or thinks will benefit the players.

(Incidentally, if you are a fan of Metroid, there is a chance you will enjoy this video.)

Clean Slate Apps: Business Plan

This semester, Gerry, William and I put together a business plan for a small app company.

With the growth of the educational sector in mobile applications, we saw a niche for educational apps to help children learn about hygiene. After doing some research, we found that a huge percentage of people don’t know how to wash their hands properly, and only one in ten brush their teeth well enough to prevent tooth decay. With these figures in mind, parents might be worried they don’t have the knowledge to teach their children the right way to brush their teeth, in particular.

This formed the basis for Clean Slate Apps’ first product. It is an app for the Android operating system that provides a friendly, engaging interface for children to learn how to brush their teeth. The app provides a timer so they know how long to brush for, and several animations to demonstrate correct technique. To get this information we plan to consult dentists and paediatricians.

I came up with the original idea for this product, so I had the clearest idea of what we were aiming for.  I wrote a lot of the concept documentation and broad plans. Gerry made mock-ups of the toothcare app’s UI and a logo for the company, and Will put together a detailed financial projection for the first three years of the business. Because we live in the same house, we were able to meet up whenever it was convenient to talk and brainstorm for the project. This was useful when working on a group project like this one, where everyone needs to provide input. For file-sharing, we had a shared Dropbox folder. Dropbox provides a desktop application which syncs all files to your hard drive locally, which was very useful – we could make a change to a file on our individual machines and have it update on the others within seconds. When we had all the content we needed, I put together the slides and the executive summary using the document preparation software, LaTeX. The presentation went well and we came out of it with several ideas for improving the business plan.

You can view our presentation on the business plan here. The executive summary is here.

Nexus Innovation Centre


Over the last month or so, I have been working with the Nexus Innovation Centre at the University of Limerick. Gerry, Shane, Ian and I first met with them on the tenth of October. The idea was to gain experience by helping them add value to their online and offline presence.

The Nexus Innovation Centre aim to help budding enterpreneurs with ambition realise their ideas and connect with a supportive network of like minds. To this end, they have office space which they rent out to companies under their umbrella, as well as a number of free consultation services for companies not yet ready to commit to office space.

There are more than ten companies resident in the building, and several external members. All of these companies have websites, most of which were linked on a Nexus page, yet none of them had an explicit link back to the Nexus website. When trying to establish an online presence, it is important to know the audience, and we knew that the audience Nexus is trying to reach includes enterpreneurs and people who wish to become enterpreneurs. We knew that such people would visit the websites of other enterpreneurs. A simple link didn’t seem like enough, however – so we created a JavaScript button with a Nexus logo that would inform people even if they didn’t click it.

During the summer, the Nexus was putting together an initiative called ‘studio to street’. Enterpreneurs-to-be could collaborate in a targeted environment to develop an idea and then bring it to potential customers. This initiative had a good name but no logo, so we created one that kept focus on the name, while giving a visual association with the building that houses the Nexus.

We also worked on making the entry to the Nexus website a bit smoother. When we looked at their website initially, it was a bit difficult to see answers to the questions ‘what do we do?’ and ‘what can we do for you?’. Our solution was a landing page, which would show up instead of the current home page. Visitors could get an idea of the Nexus without having to navigate through menus to find the ‘about us’ page. Reasoning that visitors fall into one of two groups – students and enterpreneurs – we decided to answer these questions with those groups in mind. We created a page which asked if the visitor was a student or an enterpreneur, and directed each towards another page which explained the benefits the Nexus could hold for them. One more click took them to the current homepage, where they could explore as before, while being a little more informed. Below is a draft of the landing page, which is awaiting some text content.

We developed some poster templates for the Nexus to use in promotion of themselves and their events. We used their highly recognisable logo and photos of the building to personalise these posters.

Finally, we put together some ideas for further promotion of the Nexus in the coming months, including a competition for the best business idea.

I think we learned a lot about working with a client here:

  • Never assume anything about a client.
  • Always respond to client input as promptly as possible.
  • Don’t wait too long to get client input – better yet, have input at every stage of a project.

It was also good to see how useful open-source tools such as Inkscape (used for graphics) and Bluefish (used for HTML/CSS) can be in a professional context.

Can we define games as art?

First, can we define anything as art? Art is an increasingly difficult thing to pin down. Once upon a time, art was simply folly: something made without a real purpose. As humanity has advanced, luxuries have become more and more prevalent, until now. Only a very small subset of things we own are strictly necessary for life.

Art has grown in parallel with this trend. Where once owning a Piece Of Art was a sign of status, now we all of us own hundreds or perhaps more things that could be called art. Every music album, every photograph, every film…and, perhaps, every videogame.

I’ll be talking about games as art with reference to Gaut’s “properties of a work of art” (Gaut, 2000: 28).

(1) possessing positive aesthetic properties, such as being beautiful, graceful, or elegant (properties which ground a capacity to give sensuous pleasure)

There are many games with impressive graphics out there. As a student of games development, I often look at such games and marvel at the number of polygons and the detailed textures. But some games are beautiful, graceful, and elegant. They make me forget what I know about their inner workings. Wind Waker is the example that immediately springs to mind. A game so lovingly put together that I found myself deliberately bumping into walls just to see the pretty effects, hear the ‘dsh’ sound and watch the protagonist get up and dust himself off.

(2) being expressive of emotion

Some games certainly do express emotion. Characters and their stories, if done right, can communicate a feeling just as a film or book would. But what about the emotions that games inspire? Not explicitly engineering them (’emotioneering’ – what a great word) but inciting rage in the player who can’t quite catch an enemy, bursts of excitement in the player who dodges a fast-moving lorry, and pangs of glee in the player who emerges from a cave and sees the huge open world for the first time. That is one of the great things that games bring to the table of art.

(3) being intellectually challenging (i.e., questioning received views and modes of thought)

I think this can be a negative as well as a positive feature of games, but it’s definitely there. Negative examples would be when a player thinks a trigger-shaped button fires their in-game gun, but in fact a regular button is mapped to that function. The player has to ignore their instinct – to pull the trigger – and use the button to fire. That’s a simplistic example, but it exists. Positively, many games grant players powers they do not have in real life. In Minecraft, most of the mechanics at least try to approximate the real world, but the first time I realised I could double-tap Space to fly, I was reminded that games truly can do whatever we can imagine.

(4) being formally complex and coherent

I would go so far as to say that games are more formally complex and coherent than several other kinds of art. Even the most basic game must have a degree of underlying complexity – what the player sees is always much simpler than what the developer wrote. As for being coherent, if a game is to be played it must have a certain level of coherence – for example, when the player picks up a particular item it should always do the same thing, unless there is a good reason.

(5) having a capacity to convey complex meanings

Games are often allegorical – they give the player one experience, in order to show the player the essence of another. A while ago my friend Gerry wrote about a game called Dys4ia, a simple Flash game with a very complex message. Dys4ia is a small suite of minigames, similar to WarioWorld, that give the player a sense of the experiences the game developer had in her transition from man to woman. Simple things like trying to manipulate a shape into a gap that won’t accommodate it represent this woman’s adjustment to her new situation.

(6) exhibiting an individual point of view

Although some games present a story (or multiple stories) from different points of view, the majority of games I have played are based around one character or a tightly-knit group, presenting everything from their point of view throughout the game. I think games do this more than other story-telling media, because the player must identify on some level with the characters they are playing.

(7) being an exercise of creative imagination (being original)

It’s often said that no game is completely original, but this is also true of art in general. Originality is not easy to come by, with such a rich history behind us. Is it original to draw a landscape of rolling hills and dales? Not particularly, but people still make valid art doing so. I think it’s more important that games can be original in execution than concept. There have been countless shoot-’em-up games over the forty years of gaming, but titles like Geometry Wars and Ikaruga bring something new and that can be appreciated independently of their genre. Genres themselves detract from originality – ‘just another <genre> game’ – but at the same time, it helps people to have a frame of reference for the game, and allow people to easily find the original, interesting elements.

(8) being an artifact or performance which is the product of a high degree of skill

Making games isn’t easy. Making bad games is possible, of course, but even a game that nobody likes can be the product of considerable time for talented people. Modern ‘triple-A’ titles like Halo and Legend of Zelda occupy large numbers of designers, developers, and artists for a couple of years before emerging to the market.

(9) belonging to an established artistic form (music, painting, film, etc.)

This is the most problematic of the ten properties. It’s disingenuous to use art to define art. A hundred years ago, this list would not have included film, even though film was extant as a medium. Graphic novels were still looked down on snootily as recently as ten years ago – even now, some people do not consider them art. This is just another case of people resisting change and fearing the new. Soon people will be saying ‘of course games are art!’. I have every confidence in this. It’s just a matter of time.

(10) being the product of an intention to make a work of art.

I don’t really agree with this, either. Games need not have been intended to be some lofty work of art to be breathtaking, aesthetically beautiful, and technically impressive. And these very qualities mark it as art, by this cluster theory.


If I were to summarise my opinion, it is this: any definition of art (that fits all currently accepted art media) will fit games as a medium, as well. As such, you may consider and criticise a given game as art if you like. I have given this quite a bit of thought, and cannot produce any definitions of art that would exclude games. However, I reserve the right not to treat a game as art. When we cross the line of treating something as art, we open ourselves up to a lot of negative thinking. Video game criticism is already an incredibly harsh world. How much harsher would it be were it suddenly the domain of traditional art critics?

Blender Game Boy(TM)

In my third year of university I had a project for which I had to construct a textured 3D object using Blender. Having never tried this kind of 3D modelling before, I wasn’t sure what to expect. Blender is a highly complex piece of software, and most of its functionality is hidden in multi-tiered menus. However, I took pains to learn some of the many keyboard shortcuts. This let me use Blender with a reasonable efficiency. Once I had been working with it for about a week, I felt comfortable enough to pick an object to model.

A real Game Boy (image credit: Wikipedia). Click to visit the Wikipedia page.

The object I picked was one close to my heart: a 1989 Nintendo Game Boy(TM). I chose this because it wasn’t too difficult so as to be an impossible first project, but not so easy as to not provide any challenge. There are quite a few little nuances to the design. I was able to find a blueprint-style image to work from. I placed this in the Blender scene and traced the rough shape using simple polygons. Then I used the polygon splitting tools to refine these shapes into a better approximation of how the Game Boy looks. It took a surprisingly long time to get to somewhere I was happy with, but it didn’t feel like time wasted. I really enjoyed this project because I did something I probably would not have done outside of coursework, and something I thought was quite difficult.

For a demonstration of the model, we used an XNA project to load and display it. You can access that here. If you don’t have XNA, the model is also in that folder for you to open with Blender.

The model as seen through Blender.

tile_puzzle: A Python tile puzzle emulator with simple solver

During the last couple of months I have been attending a module on artificial intelligence and machine learning in games. One of the basic algorithms the course looks at is the best-first search for making in-game decisions such as the next move in chess. In class, we used A* search (finding the shortest possible path from one node to another – an extension of best-first search) to solve a puzzle like the one below – a selection of sliding tiles in a housing that allows for one tile to move at a time.

A 15-tile puzzle with 16 spaces, also known as a fifteen-puzzle.

Beginning with a scrambled (but legal) board state, the algorithm uses a heuristic to assign values to every possible next state, puts them in a list of open states, and then picks one of those states to move to. Then it does the same thing again, adding new board states to the open list and already-used states to the closed list. This continues until it has reached a predefined goal state – in this case, the start state. The heuristic takes into account not just the closeness of the state to the goal, but also how many moves it took to get to the state. That is what allows it to find the shortest path every time.

I liked this algorithm when I heard it the first time, but it wasn’t as clear to me as I would have liked. This time, I decided to make sure I understood – by implementing it in real code. I began with emulating the tiled board. The board state is simply a two-dimensional list, which is generated in the start (or goal state). Random legal moves are then made on the state to generate a random, legal, board state.

The other part of the program is a solver, which creates an instance of the board and randomises it. Then it uses the algorithm described above to attempt a solution. I say ‘attempt’ because even at the 15-puzzle level, complicated board states can take more than a few hours to solve. The 24-puzzle is considerably more complex, so I don’t even consider it here, although the code will work for a square board of any size from two upwards.

I enjoyed this project because it was fun to use Python in a new context – solving heuristic problems. Previously I had only done this with Java. I learned a lot about how A* algorithms work, and got some experience with designing for general solutions. I designed the code to work with any size board, and made it possible to solve different problems using the same solver.

The code is available on GitHub. Below is a fairly simple execution log of a 24-puzzle with 20 random moves on it.


Size: 5
Random iterations: 20
Randomising: 20 iterations
Tiles out of place: 11
Isolated moves from goal state: 39
1
2
3
4
5
6
7
8
9
10
Found it after 10 moves
Total children added to open list: 21691

| 1| 2| 3| 4| 5|
| 6| 7| 8| 9|10|
|11|12|13|14|15|
|16|17|18|19|20|
|21|22|23|24| 0|

| 1| 2| 3| 9| 4|
| 6| 7|13| 8| 5|
|11|12|18|14|10|
|16|17|19| 0|15|
|21|22|23|24|20|

| 1| 2| 3| 9| 4|
| 6| 7|13| 8| 5|
|11|12|18|14|10|
|16|17| 0|19|15|
|21|22|23|24|20|

| 1| 2| 3| 9| 4|
| 6| 7|13| 8| 5|
|11|12| 0|14|10|
|16|17|18|19|15|
|21|22|23|24|20|

| 1| 2| 3| 9| 4|
| 6| 7| 0| 8| 5|
|11|12|13|14|10|
|16|17|18|19|15|
|21|22|23|24|20|

| 1| 2| 3| 9| 4|
| 6| 7| 8| 0| 5|
|11|12|13|14|10|
|16|17|18|19|15|
|21|22|23|24|20|

| 1| 2| 3| 0| 4|
| 6| 7| 8| 9| 5|
|11|12|13|14|10|
|16|17|18|19|15|
|21|22|23|24|20|

| 1| 2| 3| 4| 0|
| 6| 7| 8| 9| 5|
|11|12|13|14|10|
|16|17|18|19|15|
|21|22|23|24|20|

| 1| 2| 3| 4| 5|
| 6| 7| 8| 9| 0|
|11|12|13|14|10|
|16|17|18|19|15|
|21|22|23|24|20|

| 1| 2| 3| 4| 5|
| 6| 7| 8| 9|10|
|11|12|13|14| 0|
|16|17|18|19|15|
|21|22|23|24|20|

| 1| 2| 3| 4| 5|
| 6| 7| 8| 9|10|
|11|12|13|14|15|
|16|17|18|19| 0|
|21|22|23|24|20|

| 1| 2| 3| 4| 5|
| 6| 7| 8| 9|10|
|11|12|13|14|15|
|16|17|18|19|20|
|21|22|23|24| 0|

Did it in 10 moves.

Zeouterlimits's Blog

Just another WordPress.com weblog

Smaointe Lambo

Lambo's thoughts on Lambo's intrests.

Colm's Blog

Full of games, programming and overblown opinions

jester252

Just another WordPress.com site

xtremesolutionsie

Just another WordPress.com site

Project Management Blog

Learning in the module

Paul's Plethora of Peculiar Posts

Here be dragons (made of bad jokes, puns and weird imagery.)

Sophie O'Gara's blog

Creativity shall make dreams soar

Les Divagations d'une Jeunesse Imaginative

The ramblings of an imaginative youth

Phil's Blog

A blog about Philip and his opinions on Video Games, Art and just general Navel Gazing

Conor Murphy

Not sure if you know this but, I’m kind of a big deal

Some general vizardry

A novice programmer's musings

andruQuinn

Problem solving in programming. A blog to give new views into problem solving

Player Two

Ludology from a developer

William Laffan

A Portfolio blog

Not Your Blog

Let's go in there and take out that dragon!

LukeConroy

Gravity-It's not just a good idea, it's the LAW!

wi11iamcb

The quite mutterings of a madman