20091109

30 Seconds...

You have 30 seconds to convince me your game is good.

[Pausing 30 seconds…]

The 30 Second Commercial is a way to define what you think will really sell your game.  These are the things that will stand out the most, and the users will recognize it easily.  What will your users see?  How will it connect with them?  Remember this when designing your game.  Keep your priorities on that commercial.
                So, does your game have a great plot?  How will that get shown?  What will you hint to entice the new players?  Does your game have great visual effects?  What in particular do you want to show?  Anything in specific, or is this game loaded with incredible amounts of effects to pick from at random?  Does your game pride itself on the vast worlds and/or rich graphics and detail?  What do you want them to see?  How will it look?
                There are many questions, and many possibilities.  For me, the 30 second commercial is the second most important thing, next to “fun”.  I remember countless times of starting to design a game, and constantly thinking, “It would be cool if…” or “Yah!  It’s got to do this too…”  But this can distract you from what is really important about your game.  What the players will really connect with. 
                The vast majority of the games on the market are not much more than the 30 second commercial, and they are really good at it.  If your game design is 600 pages of “wouldn’t that be nice”, what parts were you going to use to get the new players in and how are you going to find the time and resources to build it all?
                Games have only a short amount of time to get completed.  Even if you’re a group of kids in high school, of hobbyists after work, who are devoting all your spare time to this game, there’s only a small amount you’ll actually be able to accomplish.  Focus on it. 
                Let that 30 seconds guide you to getting the base of your game done, and then add more, once you are there.  You can pick more things of “wouldn’t that be nice”, but make sure your first goals are getting it ready to at least present that 30 second commercial.  I’m sure it’s a huge amount of work just to get you there. 
                If you are planning on pulling in investors, this 30 second commercial is vital, even while it is just a description.  It is animated, it is clear; it charismatically pulls them in, like a commercial should.  When you are bringing in new people, it is a quick way to get every fundamental feature across.  And finally, when the pieces are getting built up, you will start to see exactly how the pieces you are building is making that commercial come to life.
              

20091102

Game Design Roles

                In any game, there are different roles that people will need to take to ensure the success of the project.  While the roles themselves are only a way to organize responsibility and expertise over the different tasks, it is important for all members of the team to understand what the roles are, and how to best utilize them.
It should also be noted, that there is no requirement that the roles be assigned to individuals.  I would recommend that if you don’t have a person specifically assigned to a role, and those tasks are divided up to others, that someone be assigned to be the default of that role.  If a new task where to pop up, unless someone is covering that role, there won’t be anyone to assign it to immediately, which allows cracks for requirements to slip through.


Roles:

Producer
You will keep everyone on the team moving as best you can.  You will identify potential weaknesses and try to repair them.  Above anyone else, you should be working to make sure the team is communicating well, on the same page, and driven towards the same goal.  This role, above any other should understand the different roles, tasks and needs that the project has.

  • ·              Setting Goals:  Remember that goals should be attainable.  This could include goals directed at research and proofs.  Each goal should also have a time estimate, something to try to get people to work towards. (altered freely when needed, but have it set)
  • ·              Defining Responsibilities:  Who will fill the roles?  If someone has a question about something, this person should know who to ask.  If the team is missing someone who is prepared or interested in taking over a particular requirement, you need to find someone who can and will.
  • ·              Setting General Tasks:  You should work with other members to help them define several tasks they can work towards.  Always try to provide more than 1. 
  • ·              Setting Priorities:  It should be your job to try to identify what is really important, and what is not.
  • ·              Pursuing Fun:  The highest priority of your design, construction and release, should be things that will make people enjoy the game.  The game itself should be fun to make.  If your team is not having fun making the game, it’s a sign it might fall apart.
  • ·              You will be responsible for objectively looking at everything, working with people to improve their work, communicate their needs and to push to make the game as good as your team will allow.
  • ·              If there are agreements or understandings about ownership, % of the company, etc…  make sure this is clear, and update them as need be based on expansion/replacements








Designer
                You will be responsible for shaping the plot, game play style, handling, characters, level creation, shaping the journey and so much more.  In major game development, blockbuster games often had Hollywood screen writers handling parts of this. 

  • ·              Writing the Key plot, and several other interwoven plots that the game will follow
  • ·              Deciding on the medium that it will be displayed, such as 2D Side Scroller, 3D MMO, etc…
  • ·              Creating Levels that help the user move along in the plot, comfortably attain and learn to use skills, and setting up the flow and obstacles in their journey.
  • ·              Characters/Persona’s: Who are the characters, what is their story, why do we like/dislike them, how do they act, etc…
  • ·              What are the goals the protagonist will need to achieve, and how do they go about it.
  • ·              Defining what the most important needs are in the engines capabilities to support the story, characters and goals.







Developer
                You will build the technology required to make this game function.  You will be responsible for providing the User with the ability to comfortably and enjoyable control the game. 

  • ·              You will need to build or select an existing engine to work for the game.
  • ·              You will need to educate the other roles as to what your capabilities and limitations are.  They will need to know how best to work with you, and what they can expect right off the bat. 
  • ·              You will need to develop proofs, or examples to demonstrate functionality for any part the game needs that you don’t already have comfortable experience in.
  • ·              You will need to define the Architecture for the program.  You will find that with less experience, like 1-5 years, you will be constantly redefining the architecture as you go.  The least number of changes you make will usually help prevent more bugs.
  • ·         You will be responsible for writing brief unit tests, or methods of testing portions of your code to make sure it works right.






Media
                You will handle the UI Design, the mockups for possible game graphics, creating 3D models, sound effects, background music, voice acting and more.  It is important to note that it can take a long time for graphics to be created, and the more resources you can get, the better.

  • ·         You will Design the user interface, and shape how the user visualizes the game, receives the information needed and the overall graphical feel of the game.
  • ·         It is important that you have mockups, and try creating a couple sample characters, backgrounds, Items and UI early in the design, for others to work with.
  • ·         You need to determine the time it takes you to create sprites, graphics, mockups, backgrounds, 3D models, and anything else your project needs.  Time yourself when creating them, and what it takes to tweak it as well.  You’ll often be surprised at how long it really takes to make these
  • ·         You will be responsible for making everyone aware of your abilities, which is best done through mockups, and your initial samples.  When creating the samples, determine your time to build them.  As you get better, you can reduce the time estimate over all, but use real numbers, even if it pushes the game out for years.  Everyone needs to understand how much time and work can go into this.
  • ·         You will need to define the music, and how it makes the user feel in particular areas.  Should the person be alert, emotionally attached, hopeful, curious, scared, depressed, etc…  Is the mood chaotic, rhythmical, and why.  You define the artistry on how the finaly material will look and feel.






Tester
                 You will need to test the product.  Look at what was wanted, what goals where set, and look for areas that are not fun, or particularly are.

  • ·         You will need to identify key areas to test.  Take a look at the goals the game is trying to produce, and how they are trying to make it fun.  If this doesn’t exist, bug it.
  • ·         You will be responsible for making sure people understand the impact that a bug might have on the users as a whole.  If you find it annoying, so will the users. 
  • ·         You will be checking the game to make sure the feel and story flow well, and that it doesn’t stop or get significantly slowed down.
  • ·         You should create a check list of things to check for, and regularly check through them.
  • ·         You should enjoy the style of game, and make sure that things seem easy/obvious enough to pick up.






Public Relations
                You are responsible for the marketing of the game, what demo groups are involved, defining a good plan for proceeding, and provide public outputs for the game as it moves along.

  • ·         Define a marketing plan, What advertising paths do similar games take?  Are the games successful?  What does it cost, and how long will we need to do it.  What other avenues might work?  Is word of mouth alone realistic?
  • ·         Setting up, updating and monitoring public forums or a blog about the game.  Keeping outsiders as well as your team posted to constant updates and changes makes the game feel more alive, more attainable, and keeps people driven to complete it.
  • ·         Finding Investors, when the time is right, to help pay for marketing, servers, licensing, and other various expenses.





Most of all have fun, whatever you do.

20091026

Next Evolution of the Cloud

                Before you read this one, I would like to point out that I’m going to get a little out there.  It discusses the direction I think technology will be taking, and the future that computing will be leading.        Its hard to discuss such radical shifts without sounding like a fanatic.  ;D

                The cloud is an ever growing change to the future of technology.  Lightly spoken, the cloud is many computers acting as one, and while such technology has been around for decades, it has not taken on such a common place in our market until now.  But to really understand the future of computers, you have to understand what the current limitations are, and how to hurtle past them. 
                Cloud Architecture’s current nature is that of having your application duplicated across many machines, and when different users log in, they get passed to a particular machine.  Essentially, the machines think they are standing alone, as the only server hosting that website, and connected to the only database providing it with information.
                But in another major shift in technology, we are seeing a new birth in Thread/Parallel based programming.  Making singular applications being able to spawn multiple threads and multiple processors.  Similar to cloud computing, threading has been around for a while, but with the shift from singularly powerful processers to an array of processors, the direction for threading has become front row in all major applications now.  Even games are starting to jump on board. 
                What the future will hold will be fragmented applications.  Application pieces that can interact with each other over networks, to form singular cohesive units.  A single application as a whole that spans unlimited machines.  Each fragment containing the ability to be upgraded, replaced, called on to do things, and referenced for information.                
                Already, we are starting to see hints of databases becoming dinosaurs.  I know, those are bold words, but think about this.  To deal with databases living in a cloud world, Microsoft is putting a base limit on their database size to 1 gig per database.  It makes it easier for database servers to stay synced, updated and failsafe.  But that means that the database is no longer this giant source of data, but multiple sources of data spread over the network, and multiple machines. 
                The next logical step is to realize that with all this redundant information so easily available to the applications, why not let the applications hold on to it.  Having a reference directly tied to the data is often easier and faster than having to look it up.  a powerful server with 16 gigs of rams can be purchased for as little as 2000$. 
                Databases are tried and trusted, and it will be a long time before you start seeing the right mix of investors, architects and developers really stepping foot into this.  It is sort of scary.  But not to different from the internet itself.  What it naturally grew into.
                Long ago, on the first systems that were stably networked, there was only a couple applications that could speak to each other.  You had to know specifically what you wanted, where to get it, and have the right tools.  But that branched out.  It grew to the point where there was no longer a limited number of applications that could be managed in a central repository of systems.  Eventualy it became millions of systems, billions of IP’s and as much data as we have to give it.   It grew into hundreds of systems living on their own, but yet all interacting, referencable, reacting, changing. 
                Applications will take a similar path.  Now, the developers are comforted by the fact of knowing that another system is maintaining the data for them.  That there are other means of recovering it than the applications we build.  But it will shortly become a crutch to more than just our minds.  Soon it will hold back the walls of progress, until more developers are willing to release their ties, and start moving to a different future. 
                What searches are needed, when everything already has it’s appropriate references.  How will we model the data, when we can have it all as flexibly shaped as XML?  I urge you all to start exploring possibilities that can extend to a database-less world, one where reference superceeds lookups.  At least keep your mind open to it. 

20091019

MMO Spells and AI Support...

                A couple weeks ago (article link), I mentioned that I had a future article that would discuss a Spell System for MMO’s, and the supporting AI for it.  I first wanted to have a general AI discussion first, so there was a little supporting knowledge here.  One of the problems that is faced with AI developers for MMO’s, is how to make monsters think more intelligently.  Usually the AI is supposed to just “simulate” intelligence, not actually learn.  Little Dumb AI’s stay the way they are, and so do the tougher ones. 
                I’m sure most of you have noticed, that after a little while, you learn exactly what you need to do to remove a particular type of monster in a game.   But what if that kept changing?  What if Mario jumped up in the air, and a Gumba decided to step back for a second, then move forward; Mario would have to smarten up as well.
                The problem is that simulating intelligence, and developing a learning system are two very different things.  As I mentioned in AI, one of the scariest things about AI was simply not understanding how to make it work.  So what about Learning AI’s, not just reactive ones?  How do we approach that?  I’ll answer that in a minute.  First I’m going to throw another wrench in the works.

Spell Systems...
                This will apply to more than just spells, but this is a logical place to start.  Spell systems usually come in one of 2 flavors.  1) They are hard coded in to the system, causing restarts if changes are required.  Or 2) A separate scripting engine is implemented so spells can be changed on the fly.  There is a third option, that I’m going to discuss now that is far less employed and a lot more effective.
                Plug-in Spell systems.  Plug-ins that can be added, removed and upgraded without needing to shut down the system.  While there are plug-in systems that exist for most languages, I tend to favor Dynamic Assemblies in .NET.  Where you take code in the form of a string, and it gets compiled in memory (not to a file) and tapped into your program through .NET Reflection. Visit http://www.west-wind.com/presentations/dynamicCode/DynamicCode.htm for a sizable example of it, and http://stackoverflow.com/questions/826398/is-it-possible-to-dynamically-compile-and-execute-c-code-fragments is a very simple representation.  (Of course any plug-in options leave strong security holes that you need to watch out for.)
                This makes it very simple to upgrade and alter spells without affecting the system as a whole.  Allowing for a wider base of users to start creating possible spells.  It already has a language, and you get the source code to review for hacks, prior to submitting it to your system. 
               
Back to the A.I….
                So, AI is one thing, when you have a defined set of things that can happen, and you know them all, but a whole other thing when you are talking about a system that changes and grows.  How is AI supposed to deal with that?  Here is a system you can use to allow A.I.’s to learn and structure themselves dynamically in the game.  This isn’t a small system, but not that large either.  Once built the benefits are amazing.
                First, I recommend developing some sort of tap for your game, possibly using something similar to the spell plug-ins, but I recommend a networked connection, so the processing work is moved to other hardware.
                Establish danger points in your game.  For instance, the deepest point in caves, or the largest room of an abandoned city.  This works best if you can pragmatically define them, like farthest tip of a cave.  Then when Monsters are introduced to the game, they randomly seek out these places as targets.  This keeps your creatures moving for you. 
                Next, when they reach these places, they try to establish paths to the strongest point, like A* path finding.  Then, as long as no PC’s (Playable Characters Vs. Non-Playable Characters) are around, it will engage in battle with any NPC in its path.  During the battle, it will monitor certain values, like Hitpoint/percentage, magic points, damage inflicted, and companions hitpoints.  It will also track changes in the opponents metrics.  Keep in mind that there are different AI’s running at any given time.  Certain characters subscribe to different AI’s, each developing on their own, and maintaining separate recordings of metrics.  Different characters subscribe with different random variations of spells, abilities, experience and difficulty levels.
                So when a spell is cast, it records the affect that spell had, improving your health, your stats, your friends health, your friends stats, and how it damaged your opponent or group of opponents.  Each on being recorded with averages for that spell usage.  An under experienced monster might have bad experiences with a spell, and ignore it, which means that AI won’t learn as much about it.
               
                When the AI is in battle, depending on it’s level, it will try anything at random, and then as it improves, it will choose intelligently more often.  For instance, it will take a look at it’s current levels, for hit points, magic points, and try to decrease the opponents stats, while increasing its own lowest.  If a particular are like hit points is dropped to a certain level, it will focus increasing it. 
                As the AI completes its battle, both characters are returned to default conditions, and the loser takes the previous space, intending to sit for a while.  The winner will move on to the next closest space to the middle, (it should also look at the difficulty of that space compared to another adjacent space and try the easier one first) 
                This generates a standard flow of easier monsters first, and the strongest monsters are always found in the hardest to reach places.  The real system comes down to monitoring the changes in metrics, and comparing which one will bring you to the strongest next value. 

                Weaker characters will roam more, being found at random by your characters.    A great way to structure this is to setup Target points at safe spots in the games, like town halls of inhabited areas,  monsters will be randomly drawn to it, with the possibility of taking it over, if players aren’t working to save it.  Towns can be one and lost by the players.  Having real lasting effects on the game.  What was once a thriving metropolis could become a haunted ghosted town.

                Naturally, there are a lot of angles that this AI can quickly jump towards, and a lot of tuning that may need to occur so it doesn’t become too difficult, or overrun your towns too often.   But certainly adds a nice changing, growing element of your game that will allow your AI’s to learn, and automatically grow to help a game.