Expand Progress Week 1

Unlike past entries about the progress I’ve made on my games. I’ve decided to create short videos to show you exactly what I’ve done. This video is the first of hopefully many.

I forgot to mention that I quickly played integrating Xbox 360 controller into my game framework. I already had code in my game states to handle controller interactions. I just verified that it worked and created some constants to represent the different button IDs.

Here is the link to the article that I mentioned. It really helped me out.

Expand Design Document

So Rotablock is now finished and I’m onto working on my next game called Expand. Expand is intended to fully realise the idea behind the first game jam entry I created for the Game Development Club.

Expand is also my entry into this years Indie Games Room. The first requirement of The Indie Games Room, after the expression of interest which is still open, is to deliver a design document. I’ve never written up a design document before. I’m usually scared off by such documentation. I like to keep my ideas on paper and having a formal document does seem a bit overboard. The design document for The Indie Games Room is only 3 pages, which is a totally reasonable size. Writing one out actually really helps you consolidate your ideas, much more than I ever expected.

Today I’m going to share with you my design document. I’m a bit nervous about talking about all of my ideas and making them public but I think it’ll be for the greater good in the end. I hope you enjoy.

Summary

Expand is a single player computer game set in a circular world bound by two ends. Players control a square that exists between these two ends and must avoid obstacles, complete puzzles and challenges.

Development Specifics

Platforms: Windows, Mac and Linux
Development Libraries: OpenGL, GLU, Glew, SDL, SDL_mixer, DeViL, Boost, FTGL, cppunit
Showcase Platform: Linux, Mac

History

An initial prototype of expand was created for the first game jam for the Adelaide University Game Development Club. You can play it here. Note that the collision detection is broken in this demo.

Game Layout

Expand is set in a circular world. The boundary of this world are two concentric circles, one in the center and one on the outer edge of the screen. It is helpful not just to think of these boundaries as solid boundaries, in which you exist between but as a lens into the world. Below is a screenshot of the initial prototype which is nicely represents this layout.

The player moves using the four direction keys. Left and right moves the player around the center circle. Up and down moves the player further away or closer to the center circle. Controls with a joystick would work similarly to the button controls. Prototyping stick controls that account for the players position relative to the center may also be desirable.

Walls expand out from the central circle or shrink from the outer circle. These walls push the player closer to the inner or outer boundaries. The walls may also rotate around the center. The player can then be squashed by two or more walls resulting in a game over.

The first prototype showed the entire world in one perspective. My intention is to prototype other perspectives that limit the view to a certain sectors of the circle. The screen would then adjust dynamically to show as much detail into each particular view. For example only the top half of the circle would be shown and then the screen would expand to a full widescreen view. This allows for detail in certain areas of the game. A dynamic camera would control the shifts in perspective which would occur during play.

My current idea is to lay the game out like a Metriodvania game in which there is an overworld and a series of other areas that extend beyond that world. These areas would be treated like levels and similarly to VVVVVV, each level would demonstrate a new mechanic. This structure needs to be prototyped to see if it is consistent with gameplay.

The game itself would have no failure states. If you were crushed then you would just restart at a nearest checkpoint. There is potential for a separate mode with procedurally generated music and levels, however at this point in time much of the game needs to be prototyped in order to see what works and what doesn’t.

Game Mechanics

Movement
The first mechanic that will be properly fleshed out and introduced to players is movement in one dimension. The game will artificially restrict the players movement in one dimension(probably through the use of walls) in order to help them become familiar with the controls. Then movement will then free itself into two dimensions.

Pushable Blocks
Blocks can be pushed around the world by the player. Some blocks will be pushed onto switches to trigger events. Other blocks will create walls behind them as they are moved. Some blocks will continue to move forward once pushed, until they hit a wall.

Enemy
Enemies with different properties try to chase down the player. The player is given non-aggressive means to stop the enemies.

Shadowing
Shadowing involves only lighting some areas of the world in order to create shadows. The first prototype of this would involve the light being attached to the player and shadow casting turned off. Later prototypes would include shadow casting.

Player Lense
In Expand, the player controls a square that is filled with the color white. The filling of the square could be used as a mask to show hidden paths, text or other information.

Merging into and out of the Wall/Area
In order to overcome some obstacles players can merge into a wall. The means their movement space is now defined as the wall space. The player however can only exist in either the wall space or the cleared space.

Death Rays
Death rays are lines that run from a certain point to the nearest intersecting wall. The player loses when they run into death rays.

Visuals

The screenshot on the first page displays the circular visual asethetic. The circular world format is followed with the text that will curve around the center of the world. The black and white backgrounds will use heavy masking with text as well.

Inspiration for animation and background design(not just the circular boundaries) is taken from the figures used by gestalt psychologists who cleverly use suggestive negative space and illusionary contours.

Audio

Audio for Expand is intended to create an atmosphere of isolation at the beginning of the game while players become acquainted with mechanics. This music will likely be composed of slow loops that contain only one instrument. As the conflict in the story is introduced the music will shift to a more concerning tone. Nearing the end of the game much more inspiring loops will emerge.

Jonathon Mak is an inspiration for music. Effects and background audio will be queued to play when certain play conditions are met in other to create a strong cohesion between gameplay and audio.

Story

The story in Expand is intended to be very light. Characters and text will only provide brief dialog about the world. The basic premise is that the world is suffering because of the continual expansion. The people of the world aren’t waking themselves up to this because they are continually distracted by the things that they love. Your role is to uncover the truth and help wake up the people of the world before it is too late.

Metaphor and Message

The world presented in Expand is unlike the normal world. The spatial configuration is different which results in different laws being followed. The intention is to show old mechanics in a different space. The player then learns what these mechanics mean in the new space.

The intention of the game is to highlight how infinite growth is not possible in a world with finite resources. The visual aesthetics already help convey this metaphor which will hopefully be reinforced through music, dialog and gameplay.

According to the countdown timer on the AVCon website I only have 117 days left until AVCon. So I’ve got lots to do in such a short time.

Rotablock Milestone 3 Progress

Rotablock is out and you can play it now. Click here for the downloads of the source files, Mac and Windows version. You can use the source code to build the game for Linux too.

Milestone Progress

  • Appropriate Screen Size Options – Completed!

  • Tutorial – Completed!

  • Cleanly Handle Missing Assets – Completed!

  • Cross Platform Distribution- Completed!

There is not much to describe about each of these milestones steps. Everything for the most part worked out as planned. I noticed some anomalies when running the Mac and Windows builds. The frame rate seems to be capped at around 63 frames per second instead of 60. What is interesting is that when I run the command line build on Mac it is capped at 60. I also noticed some slow down on Windows at one point but I couldn’t replicate the problem.

My next game is fleshing out my first game jam entry for The Indie Games Room. You can play the original version on my website.

Rotablock Milestone 3

This will be the last milestone for Rotablock. I’m hoping to push it out this week in order to work towards my entry for this years Indie Games Room. So hopefully by next week you’ll have a brand new game to play.

Rotablock Milestone 3

Start on March 14th
Finished on March 21st

  • Appropriate Screen Size Options

    Currently the code to determine the possible screen sizes is untested on Windows, written for Linux and not written for Mac. The possible screen resolutions should be given in the correct aspect ratio as well.

  • Tutorial

    A simple gameplay tutorial should be shown when the game first loads and when the player doesn’t press a button for a while at the introduction screen.

  • Cleanly Handle Missing Assets

    If an asset is missing then the game should cleanly close down or regenerate the asset if possible.

  • Cross Platform Distribution

    Builds for the game should be produced for Mac, Linux and PC

See you in a week.

Rotablock Milestone 2 Progress

Over the last few weeks things at University and in general have taken a chunk of my time. I’ve gotten a job at the University working as a workshop supervisor and the first wave of assignments has just passed. I’ve also been working on another game which I hope to talk briefly about soon. Actually I was intending to talk about it earlier but things happened.

Despite the few red lines below and the excuses you’ve just heard, I’m really happy with the progress I’ve made. Lots of effort tends to go into polishing things up and this has definitely been the case here.

Milestone Progress

  • Title Screen and Options Menu – Completed!

  • Gameplay Demo – Not Completed!

  • Find some background music – Completed!

  • In game tutorial – Partially Completed!

  • Dynamic Gem Dropping behavior – Changed but Completed!

  • Background Graphics – Removed

Additional Items Completed

  • Looping Background Music across Game States

  • Added Menu’s for Restarting Game, Pausing Game and Submitting High Score

  • Different colored gems used in State Transitions

The first thing I knocked out was Title Screen and Option Menu. They now look great. I also merged the Key Configuration Menu down into the Option Menu. I found a few issues with the GUI code when I would translate a GUI item. I used this opportunity to tidy up some of the GUI code and fix the bug.

I played around with background graphics but everything that I came up with was more distracting on the eye so I decided against using one. I also decided to only have a tutorial for the game instead of gameplay demonstrations. I setup code to display this tutorial on the title screen after the user waited a while. I also wrote some code to neatly place screen tips. Unfortunately I didn’t get time to finish the tutorial.

Finding Music was great. I found two fantastic websites in which I’ll definately come back to, Incompetech and Audio Jungle. I used some of the 8 Bit Tunes from Incompetech which work rather well with the game and its existing sound effects.

Finally I decided to go for a hands off approach to scaling up the difficulty of the game. I found that trying to organise the grid of gems into potential groups was not worthwhile because the grid changes so frequently and the rotation moves have the potential to vastly change the grid. I was also skeptical of how noticeable such a result would be. Instead I opted for a different approach with the speed in which gems spawn and the number of gems being spawned slowly increasing with time. The difficulty adjustment will need a tad more tweaking but it is 90% of the way there. I’m finding that I’m highly engaged when the game picks up speed.

The final game is very close to completion. You’ll hear more about when it’ll be ready soon.

Rotablock Milestone 2

Rotablock has come to the point where I’m happy to try and finish the game by the end of this next milestone. This leaves lots to do and as always I’m sure are there are going to be lots of small touches to put into place. University starts back up the week after next so I’m unsure as to if I’ll get the time to finish everything but we’ll see how I go.

Rotablock Milestone 2

Start on February 20th
Finished on March 13th

  • Title Screen and Options Menu

    Currently both the title screen and options menu are functional but they need some graphical sprucing up.

  • Gameplay Demo

    Improve the gameplay recording system to include mouse clicks and to run gameplay recordings after waiting at the title screen. Playback of gameplay recordings will be followed with a list of the highscores.

  • Find some background music

    Find some appropriate background music.

  • In game tutorial

    Screen tips and suggestions will be placed in game to teach the player how to play.

  • Dynamic Gem Dropping behaviour

    The game should progress from being easy to becoming much harder. This difficulty needs to ramp up slowly yet still allow the player to get a good feel for how the game plays. The patterns in which the gems drop need to reflect this.

  • Background Graphics

    The in game backgrounds should be more interesting and should contrast better with the grid.

Hopefully you’ll have a brand new game to play by me in March.