This week I talked about creating a demonstration level in the game, problems with collisions and features to speed up content creation.
Expand Progress Week 6
This week I slaved at getting basic scripting into the game. I started with integrating Python but ended up using Lua with LuaBind.
Expand Progress Week 5
This week I discuss adding the new game graphics, modifying the size of the world and embedding python using Swig.
Expand Progress Week 4
This is the forth week that I’ve been working on Expand. Progress is coming along well. This week I discuss the finishing expanding sectors and adding support for the Xbox 360 controller.
Expand Progress Week 3
This week I worked on fixing the collision issues, animating the circular text, creating sectors and expanding sectors.
Expand Progress Week 2
Another week and a more progress. Sorry for the length of this one. I felt compelled to explain why there were some problems. 🙂
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, MacHistory
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.