Archive for December, 2011
Its that time of year again.
In 2012 I will:
- Work on personal game project and attempt to solve issues highlighted in previous blog post Unsolved Problems.
- Release a project into the open source world.
- Participate in the Global Game Jam
- Do more research into Computer Graphics Effects (Shadows, Post-Processing Effects, Shaders etc.) – I recently bought 3D Graphics with XNA Studio 4.0 (Kindle Edition) So I will probably work my way through that book.
- Do more research into implementing particular data structures and algorithms. Especially with respect to thread safety (The future is multithreaded after all). In the past I haven’t implemented algorithms purely for the sake of it – But reading about Code Katas and recently implementing a quadtree has demonstrated that independent practice can have huge benefits. Next on the list of implementations to do – BSP Tree, Bloom Filter, OctTree and any others that I think of along the way.
- Learn F# – I’ve been meaning to learn a functional programming language for a while, and because F# integrates with the rest of dot net I can learn F# and still get things done. See Real World Functional Programming
That’s quite a lot of stuff to work on over the next year and that is only programming and game programming related goals – No mention of personal, professional or financial goals on that list (which I will keep private for now.) I’m not sure how much of the above I will get through but it’s more than enough to get the ball rolling.
Also notice only two goals relate to shipping something – The Global Game Jam, and the Open Source Project. It’s going to be more of a momentum building year than anything else.
I worked out the other day that I have been programming for approximately 12 years. During those 12 years I have spent the time roughly in the following ways
- Pre age 17 – Doesn’t really count, dreaming of being a video game coder, Did a couple of programs in Turbo Pascal. Guess the number kind of stuff.
- Age 17-21 – Being a newbie, playing with Visual Basic trying to make video games. Working on lots of unfinished projects cause my skills don’t quite match the vision inside my head.
- Age 21-25 – Attending university, still trying to make games, studying math and later adding computer science, getting a theoretical background but not producing a lot of work, making mostly unfinished projects. During this time I attempted making my first commercial game. Made $1000 which I spent on a bass guitar. Not bad, but not worth the ~18months of part time work on the (terribly coded) game. Learnt a lot.
- Age 26-29 – Working as a *gasp* professional programmer. 2 years doing business software (.Net and databases work) 1 year working for a video game company working on a 3d game for iOS and Android and now doing some (server side) development for photo album making software.
I list the above only for context – As it is only 12 years after I really began programming that I feel I can *begin* to actually make software and to impart advice to others about the craft. I think my apprenticeship stage is largely over and I am now becoming more of a journeyman, where upon I can ask questions and discover for myself the answers. (Through studying theory, learning through trial and error and practice.)
I am currently working on a project in my spare time – But rather than talk about that, I wish to outlay a few problems I have that I think are largely unsolved within my own body of work, or have been sub-optimal when I have done work for previous employers. I wish to use this new project as a test bed for coming up with solutions that will stay with me for at least the next 10 years, if not longer!
Each of the problems are outlined below. (Note: I am mostly using .net or mono stacks to come up with solutions)
- Performance Profiling: There are a bunch of good profiler tools out for .net, but nothing that quite matches what I want – Per frame profiling. (video games run in tight loops where each loop is refered to as a frame – 30 to 60 frames per second is the standard target for video games.) There was a custom solution at my old job which was easily my favorite tool that helped track down a bunch of performance related issues. So I am working on my own implementation of a C# profiler that I will release as open source in 2012. The idea is that the profiler can be used in production systems and the information will be serialized over TCP/IP so you can get profile traces of your program running on different systems thatn the profiler. e.g Should be able to attach to a mobile phone or a webserver, even if the profiler is running on your desktop. I’ve started coding this part of the project, so be on the lookout soon.
- Localization: Dealing with languages other than English is a pain (especially when you have a scripting language running a lot of your game specific code.) I think my solution will take the form of a parser to extract all strings from the scripting language and use the English phrase as the hash for a dictionary look-up into the active selected language. The trick is then presenting the data in a nice form for the person responsible for doing localization, as well as easily adding an additional language without having to do a complete recompile.
- User Interface Design – I don’t know if this will ever be solved completely (It’s still impossible to get complete 100% UI compliance across all the major browsers even with HTML5). But I’m leaning towards developing a solution that uses Xml files to represent the markup for a screen – The document should List all UI elements such as Buttons, images, list boxes, rollover states etc… Which means multiple resolutions and multiple devices can be handled in a data driven way. (Again, no recompile necessary.)
- Game Engine Architecture/Engineering Practises – How to build an engine so that all the parts can communicate with each other, work in harmony, produce as few bugs as possible and promote that mythical unicorn called code reuse? I’ve started by adopting automated testing, banning singletons from the codebase and encouraging cross-class communication through events. Also looking into using good tools – Visual Studio Professional, Resharper. Introducing static analysis (Which John Carmack seems to rate very highly if you’ve seen his talk at the latest quake con where he discussed the development of Id Software’s latest game – Rage.) As well as bumping up the compiler warning level. Also looking into using a build server and doing continuous integration (Something we do at my current place of work.)
- Develop cross platform games (PC / Mac / iPad are the current targets) using the .net/mono tools with OpenGL for graphics – Btw there’s a neat OpenGL library for .net/mono called OpenTk
Those 5 items are my current areas of research, at this stage in my career I have made a couple of games, developed a couple of non-game applications, worked at a couple of organizations and those are the areas I have highlighted as being important to solve for the next stage in my development as a programmer.
Hi guys, it’s been a while.
I haven’t updated this website in a long time. The short of the story is that I took a job with a game dev company which didn’t allow me to have much time for development outside of work.
But now I have since left and returned to doing .Net work which pays better and gives me more free time. So now I can start doing indie game dev work again – And spend more time writing blog posts, with a more technical bent, which is a direction I’ve been wanting to head in for a while now.
I have lots of plans but don’t want to announce them just yet.
Let’s just say 2012 is going to be a good year for Tiny Frog.