Skip to main content

Tiny Boss

Over the weekend I started making a game for my son.  He is 5 and loves everything Mickey Mouse or Disney.  He also really likes adventure games.  Over the holiday break he and I finished Thimbleweed Park the latest game from Ron Gilbert and Gary Winick.

So he is basically designing and telling me what to put into the game which is super fun because I get to spend some good quality time with him and I also get to stress test my little game engine project in some creative ways instead of my normal I just wrote this let me test it kind of way.  Now I get to actually try and make it work in ways I have not thought about yet.  Like just yesterday he put together some stuff that required me to finally put in hotspots into the rooms.  I had been meaning to do it regardless but now I finally had a reason to, I had to use them to make his game.


He is designing the game by making drawings of rooms he wants me to make and I then take his sketch and do a quick and dirty vector art version in Inkscape.  I have a simple python script that parses svg files and then runs Inkscape from the command line to export out what I need to png files and put together a room file that gets parsed into the main single data structure for the game.  It's really handy and fast to have this automated and since I try and keep everything as simple as I can just use a small two letter prefix on the objects in Inkscape that get brought into the game.  The red boxes are hotspots and are not visible in the game.


Once we have a new room to work with we jump into the logic editor I put together.  Also since I wanted my games data format to have everything in it this also included the games logic.  I did not want it existing as seperate script files.  Instead I store the logic as input and out nodes that operate on preformated data.  Its kind of hard to explain because the idea is so simple.  But this lent itself naturally to a visual node based approach to designing the logic.  The nodes are not like other visual scripting languages, the nodes are like tiny self contained logic states that flow together.  In the game each room and actor have their own logic scripts and there is a global logic thread that allows for as many scripts to run globally as needed.  The logic design could be a few posts on its own as it own.  Anyway I use Blender 3D at home and at work and have been using it and scripting add-ons for years now so it is very easy for me to put tools together in.  Blender just happens to have a really nice and extendable visual node viewport so I put a logic node editor together in there that is super handy.


So far I am very happy with and exited by this approach.  I have found it very flexible and so quick to iterate.  In someways its almost odd because I am so used to spending all my time writing code on my projects and now if something needs code it only takes about 30-40min to put in the data, add it to the tools and then get the engine side up.  So I have all this other time spent actually working in this very free form way.  When I first talked to my son about the game and started to put the first room together I thought things felt a little cumbersome (my tools workflow not the data side stuff) and I really thought about jumping ship and grabbing an existing engine.  But I decided since this was meant to be a fun project with my kid that it would be more fun to build the tools and finish the engine on one of his awesome ideas.  It has been so much fun watching him get into it and for me to nerd out with him.

Comments

Popular posts from this blog

Plunder Bunny | Flash Game Character Mockups

Another collection of design/mockup sheets for a personal project.  The game was a very simple 2D platformer in the vain of Super Mario.  I got pretty far with the game but ended up getting busy with some contract work and the project feel into the ever growing abyss of personal projects.  When I get some more free time I'd like to try and re-visit it. The visuals were really fun to work on.  Inkscape was used to flesh out my initial sketches.  Each character was broken up into pieces like a paper puppet.  After Saving the pieces out at high resolution they would then be put back together in Blender 3D where they would be animated.

Level Buddy | Blender Addon

An old-school CSG inspired level editor add-on for Blender 3D. The add-on is still very much a work in progress but fairly solid for blocking spaces super quickly.  Just because graphic fidelity has gotten insanely good and hyper detailed doesn't mean we shouldn't look back how older games were put together, at least that is my opinion.  One thing I always come back to is how quickly the tools in the first 2 versions of Unreal Ed 2 and Doom level editors allowed anyone to block out a level, iterate on feedback or try an idea out.  So I just took some time to put together a similar pipeline right in my 3d package of choice.  I wanted to keep it simple and quick to try out level design ideas.  You can use it for simple white boxing of your level, break it up into multiple static meshes and import them into your game engine of choice or  you can use that as your starting point to start more detailed modeling .  When you build the map you get a single static mesh th

Data First Project

Last post I talked about a project I started using the approach of designing the data first.  It is my current pet project and one that I will keep exploring and playing with because it is so much fun.  So here are some snippets of code the show the structure of my data and some of its values. One thing you might have noticed is that I am using the JSON data structure.  JSON is a great format and pretty much every language already has a JSON parsing library so it really let me focus on the design of the data and how each piece would reference/connect to other bits of data.  Just like code you spend a good chunk of time very early on iterating your data design.  My first attempt I found that I was nesting things way more then I really needed.  Since there was no code at this point it was super easy to just move things to new sections and make large sweeping changes until everything started to make logical sense for what I wish to accomplish.  As the data structure started to grow