I’ve been away on holiday this week and despite trying to switch off for at least a little bit I’ve been doing a bit of thinking about our projects new + old.
It seemed appropriate to talk a little about my favourite brainstorming tips. As with most idea generation / thinking / processing techniques the things that work best vary between individuals but hopefully some of these may be of use or may encourage you to think about how your brain can be optimised!
Set yourself a specific question
- Much like when prototyping and aiming to answer a question, state the problem that you want to think around clearly, this gives you an easy way to assess whether you’re done and also keeps you focused on the main purpose that you started on. Of course the specific question could be a very broad subject with a huge spectrum of answers but writing down the question at the top of your piece of paper / OneNote page / middle of your mindmap is a great starting point I find.
Set your targets
- This isn’t something I do that often to be honest but is a good tip I’ve seen recommended, my target tends to be to come up with an idea (or 5!.. Or 10!) that I’m happy with in a certain timeframe rather than setting constraints of certain number of ideas generated.
Blitz your brain
- You may already fully understand the question domain when you start brainstorming about it so this may not be needed but if it’s an area you don’t work in regularly or if you want to be aware of all the latest facts (especially when thinking about game ideas / marketing) I tend to Google for a while and check my RSS feeds for every related (even slightly related) article and skim read them before starting the brainstorming. I also cheat slightly in that I tend to write down early ideas at this stage sometimes.
Focus / Flow
- Vital for any type of serious thinking, for getting into ‘flow’ I tend to get some fast music with no lyrics (or just any kind of noise to be honest) to drown out distractions much like I do when working on code for long stints.
- Generally for brainstorming I produce a mind map though I tend to not worry about how ideas are connected that much till after I’ve finished writing (or typing) ideas down. I used to always use Mindmapping software for idea generation on computer but I’ve fallen out of the habit and tend to use OneNote for most things now, I still structure my thoughts in a hierarchy but it’s less spread out (OneNote does support putting notes anywhere on a page though)
Summary / Re-organise
- After the initial pass writing ideas down I tend to go through and review them. This involves de-duplicating ideas, possibly an initial ranking of them, perhaps categorising the ideas. I tend to discover new links between ideas at this stage and this can sometimes be the really creative part of the process.
That’s my basic process for brainstorming, it was actually a harder thing to describe than I thought it would be – perhaps I should have brainstormed brainstorming a bit further (hoho!).
There are lots of other tips and tricks like these on the web if you use your Google skills but a couple of books I’d strongly recommend are
- Pragmatic Thinking & Learning
- An interesting look at how we process problems and also looks at left / right brain thinking. Talks about the idea of optimising your brain for the tasks software developers (and other creative people) face.
- The Art of Game Design by Jesse Schell
- Covers some great brainstorming tips from Jesse, my favourite of which is playing with clay or other toys to keep your mind playful as you think. This is also just a brilliant book and I would recommend to anyone.
And one particular website I thought of around this kind of thing is
- Subscribe to an RSS feed on this, not a big fan of the site look/layout but some of the content is great.
Things we’ve been enjoying this week
I’ve been thinking this week about young people looking to get into the games industry, this is mainly as we’ve had a couple of really great work experience students working with us in the office and also I’ve been doing a couple of talks at schools in our area.
I wanted to make games from the moment I got my first computer at 5/6 years old and was lucky enough to be able to teach myself BASIC through to C++ as I grow up first with the CPC and then early PCs and the internet in the very early 90s (IRC, the demoscene, newsgroups).
It’s always interesting to think about how we’re going to educate people wanting to join the industry and also what to say to young people asking what their best path would be.
The current popular path (based on CVs we receive – for programmers) is a games development course at University, in some cases with a computing course in the final years of high school perhaps covering Visual Basic or perhaps Java. For the most part though these people tend to be writing their first line of code only 3/4 years before entering the industry.
I want to say there are still people learning and coding at a much younger age (certainly the 15 year old student we had work with us this week has been programming in Flash/AS/PHP a while and was keen to learn C++ and Lua with us).
I’d like to look at a current state of play for young people wanting to learn to develop games (this has a programming tint to it apologies). I’m going to try and come up with good / bad points on the various areas to balance things out against how I found things while learning.
Obviously a massive resource of everything games development / programming related over the last 20 years, very cheap to access (even if that happens to be at a public facility like a school or library) and available everywhere with modern mobile devices.
- Access to free tools (GCC, XNA, Unity, Python, Lua, everything Open Source), tutorials and Q&A, features on games development.
- A huge community of other people learning and wanting to collaborate on projects and to encourage others.
- The ability to publish and make money via digital distribution.
- Copy + Paste culture is encouraged, googling a particular problem is likely to come up with working code and I’ve spoken to people currently learning programming admit that they’ve copied code without completely understanding what it was doing. In that particular case when they later had problems with that code they learnt the lesson about actually understanding everything they add to their project but I think we all know of people relying on Google way too much.
- Other distractions on the internet! WoW and online gaming (Minecraft!) not to mention Facebook procrastination. I used to pay for every minute of internet access so I made sure I spent my time well when online
When I was learning to program there were still lots of languages but I had to purchase compilers via shareware discs (charged per disc) so I stuck to Assembler + C. My first language was BASIC. Nowadays there is a huge variety of languages to choose from as a new programmer (despite C++ still being the primary development platform).
- Huge amount of choice is good in that people can find something that fits with their understanding or that provides the easiest learning experience. Once you have mastered one language moving to others is a lot simpler process.
- Experiencing different styles, concepts and patterns is good for your overall programming knowledge and helps you apply the best tool for the job.
- Choosing a bad language (in terms of your career) and sticking with it. This can make you end up with a set of portfolio apps that bear little relevance to the industry.
- Not mastering one particular language and just having an ok understanding of several may not help in terms of applying for jobs.
This is an area I don’t have a huge personal experience with, I planned to go into university education as a path into the industry but was fortunate enough to be offered a great job and felt that experience was worth more than education anyway (which I still believe funnily enough!).
From the point of view as a recruiter though :-
- University courses are constantly improving and in the UK at least there are moves by government and trade associations to link industry to academia.
- Industry experts are actually working more closely with universities in terms of guest lectures and we’re seeing a lot of industry veterans moving into teaching.
- I’ve seen signs of some programming being taught later on in high school and apparently LOGO Turtles are still used in primary education (controllable robots via a simple movement / pen drawing interface).
- At university level there still seem to be a lot of formerly ‘media production’ courses that are just being renamed to ‘Games development’ just to get the numbers on the courses up.
- I’d really like there to be more focus on programming / logic development at a younger age, technology is everywhere in young peoples lives and a better understanding of the logic (whether it’s through simple electronic teachings or focused on programming) would be great.
There are a huge amount of platforms and genres available now.
- There are truly games for everyone whether you prefer social games on PC, motion controller based party games or more traditional hardcore FPS games. This gives us a bigger audience of young people wanting to get into games – which hopefully includes more female developers as well as males who wouldn’t previously have been interested in games development.
- Successful (simpler) iPhone titles can be seen by people as something they could feasibly make themselves given enough time.
- I’m not sure how much of a problem this is but modern AAA games are so big with such huge budgets that perhaps getting involved with the development of them may feel out of reach to them.
Modern computers / Operating systems
This is the usual reason that gets discussed with learning programming now versus 20 or so years ago.
On pretty much every platform you were first presented with a command prompt of some kind and even running a game from disc / tape required you to enter a command. Most users nowadays wouldn’t even know about the command line let alone understand any of the goings on behind the applications they work with. The bad points to this are kind of obvious but at the same time without this uninviting command prompt (to the majority of the public) home computers have grown in popularity to make the industry what it is today.
This is by no means a full analysis of the state of things but just a few areas I’ve been thinking about, young people with the determination can easily develop their skills quickly and they have access to many experienced professionals and equally intelligent amateur developers via the internet. With better education the future should be bright for the new talent entering the industry both in terms of AAA studios and the independent teams.
Things we’ve been enjoying this week
The last few weeks we’ve been working on the initial version of a Game Design Document for a new project we’re working on.
We’re pretty much required to produce one for our publisher as it’s important to communicate the project as the game was signed off a higher level concept. It’s also very useful to us internally though as it helps us run through the ins and outs of the mechanics and the balancing issues that we’ll be facing on the project.
The topic of usefulness of GDDs has come up in recent weeks on a few forums, spawned by Sean Murray of Hello Games calling them insane (for their team and possibly he meant for Joe Danger) http://www.eurogamer.net/articles/2010-10-02-hello-games-design-docs-are-insane
My current opinion on GDDs would be
- It’s very useful to write down ideas, it helps identify issues before you start coding which you might have missed in your mental map / whiteboard discussions or even prototypes (depending on which way round you’re doing things). Also some people’s brains are wired so that actually writing down or voicing an idea makes them analyse it in a certain way. I certainly find this with difficult coding issues that talking it through with someone I’ll sometimes realise I’ve got an answer locked away.
- Having a GDD makes it easy to send out to contractors and to give to employees new to a project. They can quickly understand the full project, the designers intention and the planned implementation for it.
- Linked to the above point it’s vital for providing to QA teams who need to verify that things are functioning as they’re intended, especially in terms of edge cases with particular mechanics.
- And as I originally stated they’re almost required for certain projects to provide to everyone from our external producers, external marketing and business teams (who need to understand the game early in the development process to plan / look at possible opportunities) and lawyers to understand what we’re aiming to pull off with the project.
- The biggest problem with GDDs is the amount of change that occurs especially in early development and the GDD not being updated to replace it. This effectively gives GDDs a use-by date after which you need to take it with a pinch of salt. Companies tend to use wikis and other live documentation systems to counter this but unless someone is actively maintaining it things can still easily slip when more important production tasks come up.
- Even worse than not updating the GDD is people not actually reading it! The initial GDD I’ve been writing is 50 pages in total (and will get longer as information on particular items and NPCs is inserted) and more than a few read-throughs could be time consuming. Highlighting changes and structuring the document well for referencing is essential to aid with this.
- Wasted development time – writing / maintaining / reading the GDD could be spent just developing, testing and iterating on the project and for smaller teams as Sean mentioned this can be a much more efficient route.
Iteration is vital to the design process which Sean hinted towards, you can’t just write down the recipe for the game you need to actually cook it (and then experiment).
We’re fortunate in that we’ve organised our current pre-production to occur before we deliver what we deem to be ‘THE’ GDD and TDD for our project, this should hopefully get us closer to the line on the documents than we normally would be at this stage in a project.
Personally I find the writing and structure elements of GDDs the hardest. I’ve regretted going from OneNote to Word too early in the process – a few days were spent cutting + pasting parts around the document trying to get the flow of things right.
It’s also important to keep a consistent writing style to allow easy reading and also getting across the fun of what you’re describing (especially when selling the idea to marketing who may not be as invested in the project at an early stage). I’m not sure how well I’ve mastered this yet but fingers crossed 😉
Hopefully I’ll be able to talk a bit more about our pre-production process over the coming weeks.
Things we’ve been enjoying this week
- A great post by industry veteran Simeon Pashley showing the breakdown of costs involved with running a games studio. He has stolen one of my future blog post ideas but I couldn’t have done as good a job as he has
- This shows how much being a solo dev working from home / remote team can earn you extra on a title with decent sales. There are benefits to having and running a studio however which is why we still do!
- EA have open sourced their WebKit implementation which also includes some of the EA STL. I presume they are forced to due open source a lot of this due to some of the viral source licenses in there. Looks like they’ve packaged it nicely and pushed it out to the public though which could be useful for some people.
It’s been a bit of a crazy week again over at FDL towers (I *say* tower – we’re on the top floor of an office building) and I left it late to decide on a topic for this week while we hold off a little more on talking about our current projects!
Looking back on the previous posts the open source libraries and sales posts were certainly very popular so along similar lines I’m going to talk about a couple of sources of useful code snippets (and slightly larger) I’ve found around the web which could be good reference for learning or even directly solve a problem in certain situations. As always be aware of license stipulations with any code you’re using online however. Again this isn’t by any means a complete list but hopefully a couple will be new to some of you!
- Bit twiddling hacks – some very useful bit twiddling tricks that you may not be aware of, some of these operations now have specific instructions for them on chipsets but these are still a fun set to look through and hopefully understand
- John Ratcliff’s Code Suppository – posted in the open source libs post and some of these are slightly larger than snippets
- Paul Nettles memory manager, a drop in debug memory manager which was has been popular for a very long time, we certainly got some ideas from this for our own debug memory manager and we still rely on these occasionally today when we run into issues
- A blog I’ve only discovered recently but has a very well written ‘efficient Gaussian Blur’ article with code . Look forward to some of the other posts over there.
- Another memory manager related blog, the BitSquid guys are posting some very interesting content and I thought this one on custom memory allocation could be useful
- A very neat looking UTF-16 <-> UTF-8 en(de)coder, haven’t tested but the results look fairly well investigated.
- Saw a link to this the other day, a single header command line option parser with pretty much all the features you’d ever want
- Another recent discovery, a GLUT alternative for Linux, Windows, Mac called PEZ
Couple of the big boys now..
- Microsoft – Some of the DirectX SDK code is a little scary side in terms of the handling of certain Win32 edge cases (in terms of handling input/windows/resizing/multiple monitors) but if you’ve not had to work through the pain yourself before you should check out the DX SDK for tips. Of course it’s a great reference for certain graphic techniques as well
- PowerVR – Providers behind a lot of the graphic / combined chips used on our modern smartphone devices, the SDK contains some useful reference code and emulation for PC
- NVIDIA – As well as PowerVR there are some great references (and free online versions of the very good GPU Gems books) at NVIDIAs developer site
- ATI / AMD – Took me a few seconds to track down the right page but ATI have also always worked very openly supporting developers
- GameDev.net still looks to be going strong and has some good articles / snippest within the reference section
- Stackoverflow is a very popular site and for non-games work I’ve done it’s normally shown up issues I’ve encountered higher up google searches than the iPhone reference materials. Note there is also a game developer stackexchange site (i.e. based on the same system as stackoverflow) which will hopefully increase in quality overtime.
- Mike Actons site CellPerformance including his concurrency and data design sketches, a very good read if you’re thinking about highly optimal code writing.
- Charles Blooms blog – previously mentioned this in the things we’ve been enjoying list but looking at my Google Reader profile I probably ‘star’ more of this blog than any other, some really interesting insights
- Paul Bourkes geometry, surfaces, curves , polyhedra page – a great reference
- GafferOnGames – Some great notes on physics and networking from Gaffer (Glenn Fiedler) someone I remember hanging around with on IRC many moons ago
- Emil ‘Humus’ Perssons pages – lots of different graphic technique samples for DX and GL.
- Wolfgang Engels blog – less in terms of code snippets but some great graphical technique discussion and even includes a few iPhone tips
- Bit of a shout out for iDevBlogADay as well here as it’s getting some really high quality posts, I was about to list some favourites but I think there have been so many high quality posts recently it would be unfair!
Not so small snippets
- Aras Pranckevičius has two great projects available from his great work on Unity, both very useful and ones I’m hoping to integrate with our work very soon
- Lock-free structures library, looks pretty interesting.
- .mischief.mayhem.soap.blog written by Maciej Sinilo contains some really interesting articles and some useful looking code snippets including a Win32 crash reporting, memory tracing system, his own ‘STL’ type classes and thread pool job system.
Things we’ve been enjoying this week
- Surviving Oktoberfest and not being thrown out of iDevBlogADay by mysterycoconut for my unfinished scheduled post on Saturday.
- Google announced webP this week a new image format for the web using VP8s intra frame encoding to encode static images as an alternative to JPEG. Jason Garrett-Glaser is one of the x264 developers and writes a great blog in which he’s posted about this as well
- Canabalt tuning article from Semi Secret
Just a bit of a news update, You Are The Ref 1.1 update is out today featuring Game Center (and AGON as fallback), Retina Display, an Art Gallery and more.
Also we’ve been working with Microsoft the last few months to bring our hit title QuizQuizQuiz to Windows Phone 7 and that will hopefully be available very soon to you all.