Game Development: Game Design Phase – The Initial Game Idea
This is the 2nd blog post in my Game Development series. I had meant to publish this over a week ago but ended up getting sick and not getting around to finishing it up.
This time around we’ll go over a few things that I have done while coming up with game ideas and creating some basic concepts that I will implement into my games.
Phasing your Game
When it comes to building a video game, there are three major phases.
-
Game Design phase
-
Development and content creation phase
-
Testing phase
I find that identifying the components of each item I am working on really helpful. I use the phasing of a video game as an example. You want to create a game right? So you break it down to its core elements which I believe can fit into the three phases mentioned above. It provides you with a good direction to start. So knowing that we must first design our game, we will not touch a single line of code. The more code we touch, the less design that is done and we need to make sure that every aspect of the game has been designed. If we skip or miss items, you’ll have to design on the fly while coding. This can lead to additional changes needing to be made across your entire project.
Typically your programming will occur several months later, which will result in you being in a different state of mind. When you start designing during the programming phase, a lot of times people will try to incorporate new ideas into the game. Doing re-design during the development stage of your project is never a good idea!
If you have a playable version of the game and find that it’s not fun to play at all, then at that stage you would just return to your design phase and initiate a project wide re-design. It is however, usually a bad idea to introduce new concepts and ideas half-way through development. When that occurs (in most cases), it indicates that you rushed through your design to fast and didn’t give yourself or the team enough time to flesh out the design of your project.
If you do have a epiphany during development of your project, make sure that it fits into your projects scope and that implementing this idea will require zero changes to the other components already developed. That will help reduce the headache of adding new content when you really need to.
Phase 1: Game Design
The first stage of any game development project is the design phase. Again, we will break down the components needed in order to help provide us with a clear path to follow. The following phasing is what I’ve found to work pretty well. Of course each team is different and you’ll need to adjust the components as needed for your team and project. Since there are so many parts to designing the game, I try to break it down to a major design component that is then filled with sub-components.
- Initial Game Idea
- Create a baseline project schedule
- Setup your Team meetings
- Define the games genre
- Decide on the business model.
- Play video games
- Decide what style and gameplay elements you want.
- Decide on a story line theme for the game
- World Design
- Design your character. This is what will be played by the users. What is the players story? What weapons, equipment and additional content will be available for it?
- Map out the game world to use as a blueprint. How to implement the games theme, styles, environment settings etc.
- Design the worlds friendly characters. Decide how the user will interact with NPC’s, friendly AI, mounts etc. How will they act? What is their relationship to the player and other NPCs?
- Determine how you will fight the bad guys, and then design them! What will they look like? How often do you fight? Are they quick kills or difficult etc.
- Design the games objectives. You have the world designed, it’s interactions designed, it’s enemies designed. So now figure out how you will implement the games objectives into the world you’ve created conceptually. If things don’t quiet fit together, revisit previous stages in the design process to adjust and tweak.
- Technical Design
- Agree on Coding Practices
- Pick what Operating Systems & Platforms you want to support.
- Decide on the projects directory & content layout structure
- Build a list of game components that will need to be created.
- Research and decide which language and environment you want to use for programming.
- Decide what classes you will need to write as Object Oriented. Including laying out any parent/child class hierarchies and abstracted classes.
- Acquire any 3rd party tools that you will need.
- Decide what 3rd party tools need to be extended on or what custom software you will need to write.
- Finalize the Design
- Design the menu systems
- Design the players HUD.
- Place all of the design choices from all 4 phases into a master Game Design Document.
- Refresh the project schedule as needed.
- Flag the Design Phase as completed!
The components provided above have worked out pretty well for me in the past, and is pretty close to what I’m using with my current collaborative project. These components will change based on your projects needs, but you can follow this flow-chart and add\remove what items that are pertinent to your game.
There is a lot of content to go over for each one of these components to the Design phase. With this post, I will cover the first component completely and follow up with number 2 in the next post for this series.
Component 1: Initial Game Idea
This part of the Game Design phase is really the most difficult to complete, primarily due to the difficulty in deciding if the game is “ready for development” or not. Some teams get stuck in a never ending loop, constantly updating the idea and spending months building the design. They tend to argue during the design process and then go their separate ways due to differing ideas. Don’t let your original concept go astray to far! It’s important to stay focused on the original idea and help it bloom.
During this stage, you will need to come up with the genre of the game, the mechanics, gameplay, decide what makes it fun and create a list of items that you want the game to implement. As you move through the 2nd, 3rd and 4th components of the Game Design phase, you will likely need to revisit the Initial Game Idea as things will typically change as you design the game world and come up with objectives for your game.
Revisiting any of the components within the Game Design phase is not a bad thing, and is usually recommended prior to finalizing your game design document. It’s important that you have milked all that you can from your game idea prior to starting development.
Create a baseline project schedule
The importance of scheduling your project will depend on the needs for your game. If the game has been financially backed, has several team members with time constraints or many other reasons that would require tracking the projects progress, you will need a schedule.
Schedules are a helpful way of ensuring you are meeting your objectives on-time and provides some encouragement as you complete milestones that are shown on the schedule. It is of course not a important factor if you are doing this on your own time at home after work hours, scheduling probably won’t be something you need to worry about.
Creating a baseline schedule will help give you a general idea of how much time it is going to take. While working with a team, discuss how long each member feels it will take to complete each component of Phase 1, Phase 2 and Phase 3 of your game development. This does not need to be super accurate, so no need to spend a ton of time on it up front.
You can refine it during Component 4 "Finalize the Design” . In most cases, I find that using a GANTT styled project scheduling system works really well. It lets you create milestones and track the progress of your project on a daily basis. As your schedule slips (or is completed ahead of schedule) you can adjust the current progress to reflect it.
There are several pieces to a schedule. The Milestone is a chunk of your project that you believe is really important to complete. When you finish this chunk of the project, you would consider it a major milestone having been completed. You’ve hurdled a large portion of the project and your schedule should reflect that. I typically would base my milestones off of my Components (not sub-components). There really isn’t any limit to the number of milestones you can have during the development of your game. Some people prefer fewer milestones, but I believe that basing them off the components associated with each Phase of your project will provide a nice balance.
It’s always nice to hit a milestone and going to long without achieving the completion of one can be disheartening for the project team. Nothing screams “We’re doing really well!!” like completing a project milestone on-time. At the end of each week, it is recommended that you update the schedule to show what you have completed. Using GANTT based software will let you do this easily. As you progress with various items, you can adjust the percentage the item is completed. If you are 25% completed with designing the weapons for your player, then mark that item as 25%. If you completed a item earlier or later than scheduled, update it on your GANTT chart so that the entire team can see the progress you are making.
Once you have updated the schedule, I strongly recommend sharing the updated version weekly with the team during a team meeting. Even if you share the schedule on a Dropbox or SkyDrive styled sharing system, not everyone will check if it’s updated.
Setup your team meetings
The best way to ensure everyone is aware of where the project stands with scheduling, design decisions and overall progress, would be to show it at a meeting. If you do it over the internet, then share it through your IM service or use Google+ Hangouts. It’s important that everyone sees the progress so as to provide encouragement when they are ahead of schedule or provide encouragement to do better if they are falling behind.
Perhaps someone in the team can discuss a issue that is causing the schedule to slip or a team member might need some help with a item to ensure it is completed on time.
While you are in the design phase of the project, daily meetings are really encouraged. Designing the game is something that can progress daily and meeting up to make sure everyone has their ideas out on the table and are in agreement with decisions is important. Use some form of documentation to track the decisions that are made. These decisions will ultimately end up in your finalized design document.
Define the games genre
It’s difficult to start designing your game if you don’t know what the genre of the game will be. I typically will create a major genre with several sub-genres that tie the game together.
I would like to refer to the modern online First Person Shooters of today. Their primary genre would be FPS however, they have sub-genres such as RPG for experience and leveling up, RTS with troops, tanks and powered bases and usually squad based strategic tactics that have a command. The game is still a FPS, but borrows heavily from other genres to complete the game.
When coming up with the genre you want to use, I recommend choosing a major genre that you want, and then attaching sub-genres to it. Just make sure that the major genre makes since for your game. If you are building a Call of Duty styled game, then RTS should not be your primary genre, it should be FPS. If you are building a Final Fantasy styled game, then RPG should be your primary genre, not MMO/FPS.
Decide on a business model
This is really important to nail correctly at the early stages of the project. Once you have decided, your game will be built around this model and changing it will be hard later down the road.
If you choose to go Free-To-Play and have Micro-transactions, then you need to have cash transactions, currency and purchasable content that are coded heavily into the game. If you are going to sell for $50 and have no in-game purchases, then you need to figure out how the players will unlock content and progress.
Play video games
This is a really fun stage to be in. The goal is to play as many games that match your major genre and sub-genres as possible. I would even recommend playing some that don’t fit into your genres at all, but see how things are done and work. You might like the way objects interact in a game that doesn’t match you genre, but interactions can always be tweaked in your game to match the game you played more.
I personally create a bucket list of items I’m looking for, the following is an example:
- Camera movement
- Player movement
- Attack system
- Dialog delivery
- NPC Interaction
- Inventory system
- Weapon switch system
- Animations
- Level transitions
- Cut-Scenes
- Scripted Sequences
These are just a few of the things that I have in my bucket list. The important thing here is that you do not create a bucket list of items you want but rather a list of components that are in every video game regardless of genre. Then as you play the games you can grade the games implementation.
If you play Gears of War and liked the Duck & Cover system, you would mark it as a 5-star implementation. Then if you play Call of Duty and wish that it had that system, you would mark it’s movement as 3 star since it was missing covering.
At the end of the day, you check what items you graded high and compare to what is graded low. You’ll find the items that you liked the most and wish were implemented into other games. Those are the items that you can look into ways of implementing into your game as well. If you liked them, and missed having them in other games, then it’s a good idea to have it in your game. After all, you’re building your game, so build something you want to play!
Decide what style and gameplay elements you want
Now that you have your genre decided, your bucket list of items created, it’s time to start the actual heavy design. Here you decide how the gameplay will be, what the style of the game will be, how objects interact, how the game will progress and what major features the game will have.
Decide on a story line theme for the game
The last thing you will need to do for the Initial Game Idea component is come up with the games story and then decide on the games theme. If the story is about a king who needs to be over thrown from his palace, then decide on the time period for the game. Middle-age? Then we need stone castles and lots of trees & mountains. You’ll need NPCs dressed poorly in the villages and dressed fancy in the kingdoms. This will then give you a general theme that you can use for the UI layouts and artwork for the game.
In conclusion
This initial stage can take a lot of time to get finished, but it’s a really important step. Without getting all of these things ironed out up front, you’ll spend a lot of time rehashing things which will slow down your project.
Keeping the team working together and getting your ideas out there together daily will help make sure that your project runs smoothly. The goal is to have the entire concept inked in paper so you can start developing as a team without meeting constantly to ask “How do we need to do this feature?”.
Over the next couple of weeks I’ll work on the next post in this series which will cover the World Design component of the Game Design phase.
I’d also like to hear any comments or recommendations from you guys on how you do your phasing, in what order you do things and how you manage your schedules. Share with us!
Game Development: From your Idea to your game
Over the last two months I’ve been working with a new collaborative game project that is still early on in the design phase. I’ve done a lot of searching online for some good solid free tools that can be used with Indie game developers that are simple to use and had a hard time finding them.
Considering the small amount of simple, free tools that are available for collaborating, there’s even fewer documents and tutorials on taking your idea and turning it into a completed game. Luckily I have some background already in managing projects thanks to a couple of my open source projects and I’m already trained in scheduling and estimating thanks to my full-time job. This made the search a little easier for me since I knew what to look for, but it was still a chore to find what all I needed.
With this new project, there were several things that we needed from the start.
- Idea & Conceptual creation tools
We wanted to make sure we fleshed out how the project will be created, what key features it will have, how the game will be played and what kind of world the game will be in along with several other things. You need to have the core concept of the game generated so you have a solid starting direction. - Scheduling software.
Since at some point we will be seeking funding of some kind, it’s important to have a idea on when the project might hit certain milestones and have a approximate scheduled completion. - Flesh out the games design
Once the concepts are created and the ideas are all out on the table, you need to take them and give them content. So you want to fight monsters? What kind will they be? How often will you fight? What rewards will the player receive when he’s beat them? These kind of low-level things need to be fleshed out. Once these are completed, you should be able to start developing on your game with a large amount of independence from each developer. This will help make sure that everything stays true to the original design of the game. - Meetings
As the game is being designed, meetings will be critical. You have to meet often, sometimes multiple times per-day in order to iron out everything and make sure that the whole team is on-board. Once design is completed, it should be set in stone. While some changes will inevitably happen during development, you should try to keep them to a minimal. This will prevent massive re-writes and frustrations from the team when code is thrown out or 3D assets are deleted and re-created.
These four important items required us to do a lot of research in order to find cost efficient tools that can be used by several people on a small team. These tools needed to be discovered, downloaded, installed and setup prior to the game design process even beginning.
Over the next couple of weeks, I will take each one of these items and break them down, one-by-one to help give some insight into creating your game. The blog posts will not be on “design a game by doing this” but more of a “while designing your game, you can use this tool to help”. So stay tuned for the next post which will focus on Scheduling software and how to maintain a project schedule.
Apple made all media stream-able
With the latest version of the Apple TV OS released on Wednesday, March 7th, along with iOS 5.1 that was released on the same day, you can now stream movies that are purchased over the air to all of your devices. With Movies now being stream-able, you can now consume all of your media content wirelessly, including photo’s, music, TV shows and movies.
Now as of iOS 5.0 last year, you’ve been able to stream Music, TV Shows or Photos were ever you are. However Movies were noticeably missing which was disappointing. Once you have updated your Apple TV and iOS now, you will get to stream Movies as often as you want, provided you own the movies.
Movies in iTunes are usually $20 for a HD version tends to be the same price as what the BluRay version costs on disc. If you purchase the movie on iTunes, your iPad, iPhone, iPod and Apple TV can stream the movie.
Our content consumption has now gone completely digital. We no longer use Cable or Satellite for our TV. We use Hulu and Netflix to watch what we want for $16 a month combined. You can buy a couple Season passes on iTunes at $35 a piece which still ends up being cheaper than what a monthly cable bill would be. At the end of the season, you get to keep all the episodes, so essentially, you spend $35 to watch the season as it’s being aired and then you get to keep the season as a box-set once the season is completed. It doesn’t matter where you purchase it, you can watch instantly across all the devices.
So now we just buy our movies, shows and music in iTunes and then watch/listen on our TV or devices. This saves us a store trip, saves me the time it takes to sync and it also lets me show media to anyone I want while I’m out, even if I didn’t think I’d need the content (and thus didn’t sync it). Going completely iTunes for my media content with Hulu and Netflix has saved me money actually in the long run and it makes watching my content so much easier.
Turn your iPad into a Windows 7 Dev machine with the Logitech/Zagg Mate iPad 2 Keyboard Case
Today UPS delivered my new Logitech Zagg Mate iPad 2 Bluetooth Keyboard Case. It typically retails for $99 and you can find it around the web for around $75-$90 if you look. I found mine on Overstock.com as a refurbished model for $50.
The keyboard feels really nice as you type with it. The keys remind me a lot of the Apple Wireless mini keyboard. The keys are small, so it takes a little time to get used to it but after spending about 5 minutes typing, I was back to typing full speed again which was nice. They keys might present a problem for those that deal with the "Fat Finger" issue that some have with mobile devices.
The iPad mounts the keyboard perfectly. It has a lot of support thanks to a nice little tab that helps keep the iPad propped up. You can use the iPad in either Portrait or Landscape mode which is nice. I did notice that when in Portrait mode the Keyboard was a little less stable. The heavy iPad caused the keyboard to become back heavy. It felt like it might fall backwards but it never did.
When the iPad is in Landscape mode, the keyboard is solid and never moves. I actually typed this blog post on the device and loved it.
The iPad lays flat against the keyboard when it is not in use, giving it a laptop styled apperance. The weight of the device with the keyboard is pretty close to that of the Apple Macbook Air.
I spent some time tonight doing some coding with it. I connect to my PC using a really good iPad VNC client called Jump Desktop. Once connected I sit on the couch and watch TV with my wife and code on my iPad!
Saving Data with Mud Engine Alpha 2.0
For the last two years I’ve been struggling with finding a good way to approach saving game objects in a way that provided an easy way to edit the saved data once it was wrote to file and also maintain backwards compatibility for the files when they are loaded into older versions of the engine.
The new system is a XML based system that use a custom XML wrapper to simplify the process for the end user who needs to save script data, but still allows for a lot of flexibility on my end within the engine as well. In the future, I want to support other file IO configurations for save data such as databases and flat-files. This will be possible with how the engine will now manage save data. If the user wants to use a flat-file or database or XML, they don’t need to modify anything in their scripts to do it. Making a single project wide change within their game class will cause the engine to automatically switch over to the correct file format and the user continues to write the same code regardless during saving.
The following is a quick preview of what a 3rd party script with save code currently looks like.
1: {
2: class MyCharacter : StandardCharacter
3: {
4: public int Age { get; set; }
5:
6: public MyCharacter(StandardGame game, String name, String desc)
7: : base(game, name, desc)
8: {
9: }
10:
11: public override bool Save(string filename)
12: {
13: base.Save(filename, true);
14:
15: this.SaveData.AddSaveData("Age", Age.ToString());
16: return this.SaveData.Save(filename);
17: }
18: }
Previous iterations of the engine did not have a saving system in-place which was really annoying. Now users will be able to create their worlds and actually have their scripts save their data properly. When the game world is loading, it will instance the needed scripts for the world objects and then load their saved data from file and apply it to your class. Making this a much easier process for developers.
Mud Engine Alpha 2.0 anyone?
So I’ve finally knocked out the majority of my server/client issues over the last two days. The improvements to the server in Alpha 2.0 are pretty solid. The server and client code is now multi-threaded and thread safe.
The engine re-write is now well underway since the server is now fully implemented and working. I need to migrate the Alpha 1.3 command system over to the Alpha 2.0 codebase and then get the world code wrote. I think that I can get the new engine source up to Alpha 1.3 equivilant over the next week or two.
I will also be re-implementing the rScript engine system into Alpha 2.0. It was added to the Alpha 1.4 source code, but never provided as a release. The rScript engine will give developers using the Mud Engine much more flexibility and control over their game. I have a working Scripted Object manager class wrote for another project and I am planning on implementing that into the engine, however I’m not sure if I will get that into Alpha 2.0 or not.
Alpha 2.0 will feature a much better scripting setup for developers. It will also provide a traversable world, run-time created worlds, a solid way to save the games state and finally executable commands from the Server console.
Mud Designer has a new Server
Well, I know that the Mud Designer project hasn’t received any updates over the last 6 months. This was mostly due to my lack of knowledge in networking and the new Mud Designer server code never getting finished. Without the code finished, I had no way of starting a server and actually testing code and progressing.
As of today, I have a working telnet server thanks to a friend of mine helped me get it all buttoned up nicely. The newest Mud Engine server code runs on it’s own thread within the engine so you can build Console based servers that accept input and commands without hanging the server while it waits for new commands to be processed.
The code that is currently required for starting the Mud Server is as follows.
1: static void Main(string[] args)
2: {
3: Server server = new Server(4000, 20);
4: server.Start();
5: }
As I begin merging this server into the Mud Engine, you won’t ever have to make this call. It will be handled internally by the engine when you start it.
iOS 5.0.1 Absinthe Jailbreak 0.4 failed
So for some reason, Absinthe will no longer jailbreak my iPhone 4S. I'm running iOS 5.0.1 and did a complete restore so it's basically a new phone and it still fails.
Each time that I run the Absinthe Windows 7 app it completes and says to run the installed Absinthe app that was placed on the phone. That's where the failure happens. After awhile it just sits there then tells me to click a Jailbreak button that will take me to settings and enable VPN. When I click the button, it fails stating a invalid URL. I go to settings and try to enable the VPN option manually but that fails with a configuration error.
I tried several times but they each failed so I guess I'll just have to live with a standard iOS setup for now. Really annoying.
Want a Masters Degree level of training in Computer Science for Mobile & Web Development? You can for free!
I have spent the last several weeks watching Stanford Universities iPad and iPhone App Development (Fall 2011) course via iTunes U on my iPad. I’ve been watching the lectures, reading the lecture reviews and performing all of the assignments. The iPad and iTunes U is a really good learning tool for those that want to get a college level education without wanting to spend the money or earn the degree.
Having said that, I started piecing together all of the classes that make up a Masters Degree in Computer Science from Stanford. When I was finished building the list of classes that had to be completed I headed to Google and iTunes U to find them all. I used Stanford's web-site to compile the list of courses that needed to be completed for the degree, however they did not offer them all on iTunes U (understandably). I was able to track down the equivalent course however from other Universities in iTunes U. Even though these are not all from the same University it won’t hurt to take them. It doesn’t really matter since I wanted to just learn the courses to improve my computer development and help with iPhone programming and system level development. What I ended up with was a complete Masters Degree program for Computer Sciences that could be downloaded for free from iTunes U.
The following classes were compiled with the objective of helping with Mobile & Web Development along with Networking and Database Systems.
They are all in the correct order that they need to be taken in. Take these in order and you should be able to understand the next course without any issue. If you skip any, you might have some difficulties learning the next course.
Foundation Classes:
All of these courses must be completed before proceeding to the next section
- Linear Algebra
- Introduction to Formal Systems and Computation
- Introduction to Probability
- Introduction to Algorithms
- Programming Methodology
- Programming Abstractions
- Programming Paradigms
Significant Implementation Courses
Note that only 1 course from this list needs to be taken, but you may take additional if you choose. Once completed, progress to the primary depth course list.
-
Operating Systems and Systems Programming (Development for Operating Systems)
-
Computer Language Engineering (Compilers)
-
Local Area Networks (Introduction to Networking)
-
Management of Database Systems (Introduction to Databases)
Primary Specialization Courses (Mobile & Web Development)
These courses must all be completed in order to meet the primary specialization requirements
- Introduction to Network Security Fundamentals
- Networking Security
- Developing Mobile Apps with Web Technologies
- Introduction to Computer Science
- Cloud Computing
- Social Media
- iPad and iPhone App Development
Secondary Specialization Courses
These courses must all be completed in order to meet the secondary specialization requirements.
If you see any errors or corrections that need to be made, please let me know! I know that there are a lot of courses. The primary specialization courses require 27 credit hours to complete, so I think that there are a couple to many courses listed. However I think that the additional courses are beneficial for myself and anyone else who wants to learn about some solid mobile and web development programming.
Happy studying!




