Jump to content

  • Log In with Google      Sign In   
  • Create Account

Disciple of Jonato

Toasty Update #2

Posted by , 13 October 2013 - - - - - - · 301 views

So previously I showed a basic usage of the GameSystem and how the GameSystem works as well as the BehaviourSystem. I also showed how on windows the maximum FPS was 999 compared to Mac and Linux which had many thousands. This is due to visual studio missing a proper high res timer implementation for std::chrono and if the speed of the application is equal to or greater than 1000 the two timepoints taken before and after execution will be seen as the same points creating a delta of 0, at the moment I have a simple way of fixing it:
#ifdef WIN32
	while(timeTwo == timeOne)
		timeTwo = std::chrono::high_resolution_clock::now();

It just loops until timeTwo is no longer the same as timeOne! Pretty easy fix, I don't plan on removing this until the proper high res timer is implemented in msvc.

So for this time I'll talk about scenes.

Scenes basically just contain entities and the components those entities hold (And what systems those components should go into). You can define a scene something like this:
// Create the scene
Scene* myScene = new Scene();

// Create an entity
Toasty::Entity* entity = new Toasty::Entity();

// Create a component to attach to the entity
testScript = new DebugInfoTest(gameSystem, entity);

// Add entity if it isn't already added and attach the testScript component to it
// making sure it goes to the Toasty::BehaviourSystem system.
myScene->AttachComponent(entity , "Toasty::BehaviourSystem", testScript);

// Then somewhere in the program
// This will load the scene and populate the entities into the system
// Which will go ahead and give them unique ids and put the components
// into systems (if the systems exist in the gamesystem).

// Then somewhere else in the program
// Takes out all the entities, components that myScene loaded into the gameSystem.

The cool thing about scenes is you can load them while another one is loaded, a use-case for this is kind of memory buckets, breaking up a scene into essential \ non-essential parts so you can load one straight away and then load the next one slowly over many frames. Another thing you can do is inherit from Scene and have your scene manage it's entities and components memory.

At the moment scenes don't copy construct the entities and components instead they directly use the created entities and components. In my next update I'll probably have worked on some sort of rendersystem.

Toasty Update #1

Posted by , 08 October 2013 - - - - - - · 895 views

The first update is here, and it has a few things in it that I would like to show off. This might be very long.

So first thing's first, to start using the game engine you can create a GameSystem object like so:
Toasty::GameSystem* system = new Toasty::GameSystem();
Now you don't have to use a GameSystem but it is useful in doing these things:

Automatic Unique ID Assignment

This makes use of the template class UniqueIDHandler, which allows any type with a ++ operator to be used. You just call GetNextID and RemoveID(T id) to use it. Anything dealing with this should use the same type, or be able to implicitly convert from it. I use unsigned 32-bit ints in the GameSystem at the moment, so the technical maximum number of entities are 4, 294, 967, 295 (Should be enough). I am still toying around with whether or not the GameSystem should allow selection of the type to use, maybe your game only needs 256 entities in it at any one time?

Automatic Assignment of a Valid MessageSystem* to Entities

Entities are basically a simple container of an ID (of type T, which should match the UniqueIDHandler type that you are using) and position, scale, rotation and a possibly non-unique name. They require a MessageSystem* so it can notify any listeners of position, scale, rotation and name changes.

MessageSystem Creation and Passing to Systems

The way systems and components communicate is via the message system, to facilitate an easy way to make sure systems match the same MessageSystem the GameSystem creates it's own and passes it to a system when it is added, if a System wants it, it can keep it and listen for messages it wants. Now keep in mind performance is not currently the goal, features are so at the moment the MessageSystem will immediately deliver the message to all listeners which thrashes the cache. I would like to perform this for a maximum amount of time at the end of a frame (Before scene unloading \ loading or entity destruction) instead.

Automatic Timing

Using the default timer (std::chrono aka Toasty::ChronoTimer) the GameSystem is able to easily time each frame and calculate Dt and FPS. You are able to extend from BaseTimer and create your own timer for use within the GameSystem. Also making use of the timer, you can get an average fps or the exact last fps!

Scene Loading and Unloading

The GameSystem allows safe Scene loading and unloading into and from systems. It will unload all scenes requiring to be unloaded at the end of the frame and then load any scenes that need to be loaded in. I am toying around with a co-routine style loading of scenes with it continuing onto the next frame if a certain amount of time is taken while loading it. Unloading a scene will not delete the memory.

System Updating

If you call this function:
All systems added to the GameSystem will be updated in reverse order that you added them as well as timing them (This is an infinite loop). If a system returns false in it's update, that means it wants the whole GameSystem to shutdown. Run doesn't have to be used, Tick can be used to perform a single frame. I plan on doing research into multi-threading because I would like to be able to mark systems as multi-threaded and have the GameSystem perform their updates on other threads. Being able to change order of systems is something I might add as well.

Entity Lookup

The gamesystem obviously provides an easy way to get either a group of entities by name (Names aren't unique remember!) or a single entity by ID out of all entities added to it.

Attached component lookup

Being able to find other components in the GameSystem is a must, so you can easily get a vector of all components added to an Entity pointer or ID. On top of that you can also get a specific system by name and get any components attached to your entity that way (some systems may allow multiple components attached to it). If you get it via a vector you will have to dynamic_cast it until you find the one you want.

Plugin Loading

the point of Toasty is to be ultra modular. No graphics, physics or anything is included with it but are done in other modules which you can either link to statically, dynamically or at load them at runtime (Which this handles). Actually loading a plugin at run time instead of linking to it makes it kind of difficult to actually use the things it loads in, but at the moment you could write a Serialiser and then in some text editor write out a file that would load the plugin and use components from it and attach them to entities, if you then wanted to do something in game logic you might need some kind of scripting language or other way to glue it together.

You could do that all yourself manually if you liked though, as the GameSystem class is just a wrapper around a whole bunch of useful classes in Toasty.

Continuing on you would call:
Which would perform the main game loop, although seeing as there isn't any scenes, entities or any other systems nothing will happen. Lets fix that:
Toasty::GameSystem* system = new Toasty::GameSystem();

Toasty::BehaviourSystem* behaviourSystem = new Toasty::BehaviourSystem(system);
system->AddSystem(behaviourSystem, true);
So, the behaviour system just allows one to add a behaviour to a Entity similar to Unity, but we need a behaviour so let's make one!
#include "BehaviourComponent.h"
#include "ConsoleLogger.h"

#include <string>

class Test: public Toasty::BehaviourComponent
	Test(Toasty::GameSystem* system, Toasty::Entity* ent) : BehaviourComponent(system, ent)

	virtual ~Test()

	virtual void Initialise()

        virtual void Shutdown()

	virtual void Update()
            Toasty::LogInfo("FPS: " + std::to_string(gameSystem->GetFPS()));
and this just logs out the FPS every update of the 'script' and the name of the entity it is attached to, but to actually use it we have to do this:
        // Create game system and set it up with a timer. 
	// It automatically gets set with the default ChronoTimer.
	Toasty::GameSystem* system = new Toasty::GameSystem();

	//Create the systems we are going to use. Then add them to the gamesystem we are using.
	Toasty::BehaviourSystem* behaviourSystem = new Toasty::BehaviourSystem(system);
	system->AddSystem(behaviourSystem, true);

        // Create an entity to attach a behaviour component to
        Toasty::Entity* myFirstEntity = new Toasty::Entity();
        // Give the Entity the message system and a UniqueID.
        // Add the test 'script' to the Entity.
	Test* test = new Test(system, myFirstEntity);
	behaviourSystem->AddEntity(myFirstEntity, test);

	// Run the system!

	// Cleanup
	delete system;
        delete test;
        delete myFirstEntity;
	delete behaviourSystem;
Notice the cleanup requires you to delete all memory you created? That's by design, at least for the moment I am still contemplating whether or not to use smart pointers to handle memory.

What follows are images of a Windows, Linux and Mac OSX machine (Thankyou cmake!) running this test with an image of their specs and interesting data about the compiled forms on each one.


Attached Image

Attached Image

Followed by this on the Nth frame:

Attached Image

ToastyGameSystem DLL filesize: 68 Kilobytes

ToastyGameSystem Lib filesize: 72 Kilobytes

ToastySystemTest.exe filesize: 42 Kilobytes


Attached Image

libToastyGameSystem.so filesize: 103 Kilobytes

ToastySystemTest binary: 19 Kilobytes


Attached Image

Attached Image

libToastyGameSystem.dylib filesize: 114 kilobytes

ToastySystemTest binary filesize: 25 kilobytes

What's interesting is the performance of the windows computer seems the worst (It doesn't even hit 1k fps!!) even though it has the better specs! Maybe you guys can guess as to why that is...I'll probably give you the answer in the comments later on. On the next post I'll be talking about the coolness of scenes, how they can be used, the simple math side of things, extending the system and things I still need to do before ToastyGameSystem is done!

An Introduction To Toasty

Posted by , 05 October 2013 - - - - - - · 797 views

Toasty - An Introduction

I have started working on a simple to use C++ game engine with accompanying editor using an outboard component based system as it's base. I will be using this blog to chronicle my progress.

I started this project because of several reasons and these reasons are of course my own opinion.

Reason #1

There was no easy to use cross platform free to use C++ game engine. This is a small reason and is debateable, but that is how felt and still feel although Polycode is pretty good nowadays.

Reason #2

There was no game editor that allowed an ease of creating 2D and 3D games. Although this recently changed with Unity 4.3 Beta.

Reason #3

There was no game editor that had real-time multi-user game editing. This is actually the biggest reason, I had just finished setting up an internal build server and git server for Bifrost Studios which used Unity3D, doing this made me realise how bad it was to work with more than one user at a time so I endeavoured to start this project. (I never tested with the Asset Server module).

Reason #4

No game editor that incorporated game design and project management into the editor itself.

When writing a design document one should be able to extract task information from it. I plan on having a way to write a design doc that more matches a game ( I think a wiki matches a game design better than a page by page document, but I have a few different ideas). Following that I want a way for the tasks to be auto-generated (Obviously with ability to manually do it) and allowing an admin or project manager to assign tasks to users keeping a To-Do list. Because tasks are generated I hope to also be able to auto-generate some prefabs using auto-generated placeholder graphics (Cubes\ squares \ circles etc) so that scripters can start testing scripts while the artists work in place with the mesh.

Reason #5

Doing this project will improve my C++ knowledge and development ability in general outside of work.

I am not sure how well this will do, or even if I will complete it but for now it is something I am going to slowly work on during my free-time.

Flash Peer-to-Peer 2!

Posted by , in Flash 26 June 2011 - - - - - - · 590 views

Okay, it's been a while since my last post but I had to look after my sisters kids who lives three hours away, but now I am back and ready to post some progress.

I have mostly been working on my Flash Engines networking capabilities and have made a simple...messenger type thing. People can make a 'game' (Only differing thing is the name), join a game and then talk to each-other. There is no limit to the number of people that can be in a single 'game' at the moment but I do have functionality to limit that which I will do.

Posted Image

Click on it to enlarge it.

If you can't see the URL to mess around with it go to: Here. Click Play Elma and login immediately (the username and password already in the input boxes will already work) yes this does mean multiple people can be logged into the same account, but I don't really care atm.

It's pretty cool, Flash makes networking very easy with the Cirrus service, which brings me to the next part. How can I get revenue from Cirrus!? Well, I can't, it's for testing purposes only so I went searching for solutions and I found 2...

1. Use Flash Media Server on Amazon Web Services http://aws.amazon.com/ec2/pricing/. (pay for what you use)
2. Use open source (free) server, hosting it myself. (Which may not be strictly legal)
a) Red5 http://www.red5.org/
b) OpenRTMFP https://github.com/OpenRTMFP/Cumulus

I obviously won't have to worry about this for a while, as I will not be making any revenue from my games until they get through a lot more testing, but it is prudent to see what options I have.

This Way Up!

Posted by , in Flash 08 June 2011 - - - - - - · 397 views

So I have been working on a game for the last few months called This Way Up!

The description of the game is at www.theactionfriends.com and it says:

TWU is a 2D (What? it's actually 3D) side scrolling platformer with an emphasis on speed and quick reflexes. Keith the robot (Main Character) has a couple of abilities up his robo-sleeve to navigate the environment.

Basically you use space to flip gravity and 'x' to put Keith in a time stasis field that slows only him down to get past obstacles as you slowly move faster through a level.

Aside from that 2D mistake that is essentially the game. Anywho it's being made in Unity3D which I have used before this project, although I feel so restricted with it. You have to disable physics features for things to work how you want, so lame. Also if the project is poorly managed you will get so many duplicate assets it isn't even funny.

Here are some Alpha screen-shots:

Posted Image

For my Flash Engine I have been working on a set editor which will make it easy for someone to create animations and sprite sheets of pieces for use with a Component Game Visual! During this I realised how lame the GUI stuff for Flash is, so I wrote a GUI Manager and have so far made an input box with a label and helper functions. Still a few bugs with an automatic label (That positions itself), like it doesn't calculate the correct distance away from the input box it should be, however that's an easy fix. Then I'll add buttons, scrolling canvas (Sprite with scroll bar), list box and check box.

The first reason I made this was so I removed a lot of code duplication in creating lots of text fields. I replaced ~50 lines of the same code into 4. The second was I wanted to make a map editor as well as the set editor and a GUI manager will make that 10x easier. So when the set editor is done I'll finish making two alpha character sets that a player can mix and match from and allow them to enter the lobby for creating games \ joining games or editing abilities their character has.

I have also worked on a normal tile map and cleaning up the isometric tile map class so that it just extends from tile map, this way a game world class can have any kind of map it wants as long as it can convert from screen to world and tell you if a tile is blocked :D.

Oh and as a simple test of Cirrus I am going to make the map editor able to be collaborated with peers, should be good.

Here is a screenshot of the current set editor, at the moment it is just a simple animation frame editor. Need to work on the UI so that everything that I want will fit!

Posted Image

TS Game Engine

Posted by , 28 May 2011 - - - - - - · 877 views

Hey all!

Oh my goodness, I wrote an entry before this but when I went to publish I clicked Add Entry instead which doesn't add the current entry but tries to add a new entry. Why does a button that allows you to add a new entry come up when you are already at the page adding a new entry. GOSH. But really just my idiocy in not saving a draft.

Anyway this entry is mostly about my game engine, but contains a little bit about Elma and my Flash Engine as well.

Now my Game Engine isn't just being made on it's own, I am creating a simple Minecraft Clone to develop it's features with. Hopefully this will give the engine a base to work from when it's finished.

A quick overview of things working at the moment are:

  • Meshes, however no loading can occur I created a helper function to create a coloured plane. A mesh can be compressed into another, currently using it to combine meshes that won't be moving as they end up being on the same matrix. I am also not using faces\indices at the moment.
  • ShaderManager - At the moment only handles one shader, but I will change that soon.
  • A world class, currently it is used for easily creating windows and GL contexts. It also has a state manager and it allows my main to look like this:
int main(int argc, char *argv[])
		return false;

	TS::World::GetSingleton().GetStateManager().AddStateFront(new TemplateState());


  • The world class is kind of a specific thing for me and will hole and make it easy for a user to add things to physics and renderer.
  • Simple matrix class - Missing a lot of functionality.
  • Simple vector3 class - Missing a bit of functionality.
  • Simple quaternion class - Missing a bit of functionality.
  • Camera - It uses deprecated functionality though, simple fix but it's 2:40 AM. (Wow it took me a long time to write this, it's now 3:14 AM)
So I decided I'll start with a base performance and measure how much adding certain things decreases or increases performance over time, should be fun!

Click images to see full size.

So to begin, my first test is rendering 6400 planes, they are all static and are compressed into one mesh so I am basically doing one draw call: (I will probably make something to wrap this up, so I can individually remove mesh data for removing blocks and stuff)

Posted Image

With an FPS 1300:

Posted Image

On my 5800, so it's not really surprising, but I can't wait until I add texturing.

Things I want to work on next in no order:

  • Texturing - Got some of this going, Image loading (Only modified RAW images, to contain alpha) but have to add the GL texture stuff and shaders, shaders are very new to me only having worked on them for this project so lots of learning!
  • Camera - I already have a camera that can do any kind of control, it's just using deprecated GL functionality, remove that and it will be up to date.
  • InputManager - Have this design all done for Windows.
  • GUI - This will be kind of easy, just a plane in an ortho view, although the texturing needs to be done. I already have the design of this ready, I coded the GUI for Brains in Ogre3D and will just copy that, just removing Ogre3D stuff. Only thing I didn't do in that GUI was the animated GUI items that came from the sides and top, Michael did those. Funny side note on that: Guys for other teams at QANTM worked on GUI the entire time and it took me a week to code ours, although they were able to have gifs or spritesheets for GUI items and had loading bars Posted Image.
  • Picking - To remove blocks.
  • Lighting.
After that, the simple part my MineCraft clone will be done, although I expect all these to probably take a LONG time.

Quick Elma update, I have a component game visual working, it's basically a map of a part name to a gamevisual e.g. "leftleg",tentaclelega or "abovehead",devilhorns. This allows me to have characters made up of multiple sprite sheets that can also separably change their colour keys. Character customisation should go with the full customisation of abilities we are allowing in Elma and you will be able to customise these:

  • Left and Right, Leg, Arm, Foot, Wrist, Hand - Have a tentacle left arm and a normal right arm!
  • Chest
  • Waist
  • Shoulders
  • Neck
  • Head
  • Hair
  • AboveHead - For devil horns etc.
  • BackLeft - For wings, capes.
  • BackRight
Eyes will just be changed using colour keys and can be a part of the head!

Here it is kind of in action, I am drawing my own sprites at the moment so don't laugh! Posted Image

Posted Image

The guy I am drawing, waist, left leg and left foot are separate.

Posted Image

The guy in the top left of the flash player, minus the stick figure which is what I was using first my drawing skills have gone up considerably since I started! I'll put this up when I have two characters finished and you will be able to mix and match between those two.

Only problem so far is that the animations for a component game visual is that it can't have animations where parts overlap, because the depths my be completely wrong, however I plan on making a new animation data class that specifically caters for this and will adjust depths of images in a game visual during animation. Should be cool.

An idea I have also had for my FlashEngine is a resource manager, which will allow me to have images accessed from URL through a database, this will allow me to add more characters and things without embedding more things in flash I'll probably also do this for maps and things, just not abilities and AI because that would severely limit them.

Cheers, Nathan.

Flash Peer-to-Peer!

Posted by , in Flash 23 May 2011 - - - - - - · 541 views
elma, sorc, flash, p2p, cirrus and 1 more...
Well, I have been working on things just not anything mentioned in my last post, instead I worked on a cool account creation \ login system that my games will be using, I also plan on integrating those with FB and Kongregate so people can login and play using those credentials. The reason I need these is a way to save for Elma:

  • Character.
  • Character Story Progression.
  • Character equipment \ inventory.
  • Character unlocked abilities.
  • Character equipped abilities.
  • Character upgraded abilities.
  • Game creating and searching
and for Sorc:

  • Wins\Losses
  • Rank (To do match-making like SC2)
To come up with the mySQL databases that would hold these, I went to my brother for some consultation, he works for \ has worked for large nation-wide \ world-wide corporation \ banks developing systems that require incredibly large and complex SQL databases so I was in good hands. I already had a simple layout ready for what I wanted but he streamlined it so it was professional, optimised and also generic, so that's good. I then went ahead and added communication between my game and the mySQL database and hooked it up to allow:

  • Creating an account - I will integrate FB \ Kongregate really late, so this will suffice for now (Requires no email just username and pass, then click create so it's simple for testers!)
  • Logging into an account, which then checks if you have a character if not, takes you to character creation screen. If you do already have a character it will mention that you succeeded in logging in.
  • Create a character, which at the moment is just a name. It doesn't let you create more than one at the moment (even though my database supports it, my engine won't for a while)
Doesn't seem like much but it took about two days to design and develop, but I was learning mySQL and PHP on the go.

After I had this done I then looked to how I was going to do my Peer-To-Peer communications which is when I learned the horrible truth that:

You cannot listen on a socket in Flash!

I was like what the hell man! Why would you include sockets but remove functionality from normal sockets!! I was pretty frustrated at this point thinking that I would have to change to Java or something that DID allow it. I didn't want a server because I can't afford to pay like 120 dollars a month for a server for a free game. So I went on a massive search, finding false positives and whatnot until I found a service that Adobe offers called Cirrus (Stratus before that) which seems pretty amazing, it's free (Although in beta) and has a lot of awesome features that make it perfect for what I need, if not a little overkill.

The only problem I have with Cirrus is that at any time Adobe might pull the plug on the service itself or making it cost money but hopefully if they do that they allow sockets to be able to listen! (That's what I am hoping anyway)

Here are some links that are helping me spring-board into development:


Oh and simple updates:

  • You can go back from any state (To test either game quickly!). Known Bug: Can't click on the button when you are viewing a map, so use the 'b' key.
  • Figured out how to properly publish my flash games.
I guess the moral of this is RESEARCH if the language \ API you are working with supports what you want before actually starting.

Anyway check out my super awesome login system here. (Go to Elma)

Cheers, Nathan.

Flash Engine, GO!

Posted by , 20 May 2011 - - - - - - · 707 views

So for the last few days I have been working on my flash engine (currently unnamed) and by extension Elma and Sorc.

The way I handled this was, I first figured out the games I would be making using this engine, one was a strategy game, the other an adventure game, both utilising different views but still using tiles. So the first thing I wanted, was a nice way to display a sprite BUT in such a way that I can set colour keys that change depending on team colour (for Sorc) and so I went ahead and implented something super quick and easy:

  • Loop through all bitmap data
  • if pixel is colour key
  • set pixel to colour
[/list]Oh but Nathan why not use shaders!? Well, it doesn’t need to be real-time, I can change all the sprites for each team once and they will just use those. Simples. If I have long load times I can just change a sprite on demand(once) instead of all at once.

Colour key working:

Posted Image

The image before the colour is changed for the two visuals.

Posted Image

Two different colours replacing the key.

Okay, I had a nice and easy way to load and display a sprite with a different colour key, now I wanted an easy way to create and change \ play animations! So I created a SpriteSheet class to easily handle all of this, the way it works is that it keeps track of animation names (string) to AnimationData which just outlines how an animation works within a SpriteSheet, very simple but works well.

An example using a crappy sprite sheet I made that is just different colours:

Posted Image

Test animation, yes it has separators.

Now, you can see there is a simple problem, if the sprite-sheet has any separation between frames my sprite sheet class won’t work Posted Image I was going to fix this, but then I realised, separators are wasted pixels anyway, who needs ‘em! I will probably add the functionality in later though (Had a little chat to my Artist friend about it).

So I had nice animating game visuals which I would eventually put into an Entity, but I felt I needed to work out my state manager, which is a fairly trivial task for me, as I have made them easily before in other languages although there was a tiny hitch, the default vector has only splice which is used both to add an element anywhere in the vector, or remove an element anywhere in a vector, and not just a remove or push front. Kind of annoying but easily rectified.

Now that I had a state manager, I started going crazy with States and I created two groups in my nice flash develop src folder that were elma and sorc for each project, each one for the states of each. Then I made a choose state which I can use to start up either game so I can change the engine and make sure it works for both fairly easily. At this point I also realised I’ll need buttons, but for now a state just uses sprites for buttons, I’ll create my own class for those later on when polish is needed.

Now that I had states working fine, I decided it was finally time to start tackling the big project of tile maps, I needed two different ones as Sorc was going to be in the style that StarCraft 1 was in while Elma was going to be Zelda style. I decided to work on the staggered isometric first, and then encapsulate anything that was reusable into a single tilemap class, with an isometric and a normal tile map class extending from it.

This was fairly easy, getting the rendering correct and whatnot, the hard part was figuring how to correctly pick a tile using mouse coordinates in a staggered isometric world, since I wasn’t using matrices I couldn’t un-project them (Although I might switch to matrices later on) two days later I only had a it barely working (It would skip a row or column sometimes!) so I enlisted the help of a friend Michael Sampson to help me out and he came up with a sweet way, although it probably isn’t the best solution but it works fine for now and is essentially engine independent. I will only optimise if I find it is slow. This took the majority of the time, along with A*.

Just for funsies I also added a GameWorld class which will eventually give easy access to path-finding and the map data, and gave it a create random world function, which is called on start-up and recalled if you release ‘k’. At the moment it just uses the simple random function that as3 provides, but it is still cool to spam k and see what it makes. I might mess with this if I feel like it, to make bigger worlds and make proper environments because random terrain gen is something I don’t know anything (or enough Posted Image ) also it’s really cool.

I then ‘worked’ on A*, I basically copy pasted my C++ implementation that I made for Brains and just made it work in AS3 (Is actually pretty difficult…or time consuming to do). The only problem with it is that the heuristic that I used in that was for a square map, and I am using an isometric map for Sorc, so I need to work on the heuristic so that it properly calculates the distances AND my search for nearby nodes needs to be redone as it currently searches a tile too far in some cases making the A* jump a tile.

To choose a new path, just click somewhere, then click somewhere else. I put a maximum step that could be taken, otherwise trying to make a path directly four across would result in Flash crashing, I made it 100 iterations. Press ‘k’ to create a new world.

So things to do:
  • Fix A* for Iso Staggered maps
  • Create a seperate pathfinder depending on map being used (normal sqaure tile map or iso map)
  • Entity
  • ComponentGameVisual
  • Basic Networked Entity
  • Some kind of network manager

Anywho, I have also done some progress on my TS engine, FPS and TWU. I’ll post about them later, I’ll also post more detailed explanations of my games as well. Posted Image .

Until then, good luck!

EDIT: Apparently I need to do some research on deploying flash games, as what I posted doesn't really match what I had. Ah well.


Posted by , 17 May 2011 - - - - - - · 370 views

Hey all,

I figured I may as well post about the game I developed with two friends and class mates at QANTM for our final project called Brains. I already outlined a little bit about it in my last post, however this will give me a chance to re-write a post-mortem. (If you want some quick info go here: http://t3agames.com/?page_id=36)

So the best place to start is the trimester before we were to start our final project, I already had Lynden(Artist) on my team which was originally going to be all we had as a two man team is easy to manage and can come up with some great results. However another friend, Michael hadn't found a team yet, so we offered for him to join up with us, we already had an idea mapped out, it was going to be a simple FPS with a small story. I already had planned a nice level editor with triggers and things to spawn enemies, it was going to be simple but hopefully cool.

The problemS however were:

  • We were told that a team without a designer would get a red light at the pitch. (We had two programmers and an artist)
  • We were told that we couldn't do an FPS unless we had some original mechanic.
So I searched for a solution, which was to do a medical simulation for a start-up company using Unity3D, this had real world applications and we could do an intern-ship with the same project (So we mix the final project unit with the intern-ship unit) which could then lead to a job doing serious games. It sounded cool at first, however it got to pitch time, Monday first day back, none of us actually knew what we were doing beyond "Medical Simulation", even though we had been in meetings with the guy responsible (Gary I think his name was) to talk about it the project, so we were ORANGE lit.

This meant we would have to re-pitch next week. Panic mode set in for one of us, who was threatening to quit college all together over this. However I convinced him that next week we do two pitches, one with the medical project and one a unique game idea that we can come up with. So we were brain storming for the game on Tuesday, after the pitch day, and Lynden came up with an idea where the player would guide a person through darkness avoiding monsters using spotlights and way-points, I thought it was a cool idea and that we should run with it, after a while it became guiding Zombies avoiding traps and eating people, this way we could utilise the flocking AI that me and Michael had made together on a previous project so that we could quickly get a prototype up and running.

Now the second week of the trimester came, we didn't have a definitive project so we are now one week behind on other teams, although we knew a few others got orange lit, they were re-pitching the same game. It came our time, I remember this clearly because we couldn't actually get the normal pitch room so we were put in a little cupboard room that had a desk, computer and maybe enough room for 3 people to sit, we fit 7 people in this room. So first we told the panel of our game idea pitching it first, using images and previous games to denote how it would work, the panel was impressed with the idea and immediately green lit the idea unless we still wanted to pitch the Medical Simulation, we declined and said this was smaller in scope and had a much higher chance of getting done. They agreed and on we went. Yes it's confusing, they originally told us that we would get a red light if we did a game without a designer, but I guess we proved that we could design a nice idea so they let us go, we also told them we looked for a designer but couldn't find one. (Meanwhile there was a team of just designers (I think 7) running about making a game in UDK).

That day, spirits were high, but we had one week to catch up to others. At this point the game had scoped:

  • Three levels.
  • Random level generator.
  • Two Zombie models.
  • One Human model.
  • Three Obstacle models. (House, Wall, Wreckage)
  • Three Traps. (Chain-saw, Toecutter (blades) and Spike-trap.)
  • Two Environments. (City and Junkyard. Undulating planes with different textures) - We thought the undulation would make things interesting.
  • Level Editor.
  • One cut-scene.
  • Four difficulties
So we got started, my job was the level editor and level loading\saving into game and to set-up the project with SVN etc. So I used www.unfuddle.com as bug tracker \ svn \ task tracker etc. I also organised the libs that we would be using (Except video playing) into nicely made folders and made sure the initial project compiled and ran, which displayed the original flocking demo but in a nice state managed way. From there Michael took over the main project of tweaking the flocking behaviour and giving them collision detection while I went onto the level editor, where I used MOgre, the level editor was RIDDLED with problems at the beginning (For example you couldn't undo placing something) and I think it still is! However it was up and working quickly that first working week. We also had a stress test with the zombies setup to show off at the next meeting. Things were progressing well.

As time wore on we realised a random level generator would be full of potential bugs, making it difficult to create well designed levels randomly as well as making sure they are in fact completable. So we made the decision to completely drop it in favour of adding 27 levels (total of 30) that were properly designed. After testing we also realise undulation added nothing but more geometry for no interesting gain, they were cut. Lynden also pointed out how repetitive the levels would be with only several obstacles, so we increased that from three, to around 15 obstacles. Around this time we also realised that guiding the zombies using constant movement seemed more fun than placing way-points and eventually we scrapped it (And along with it our path-finding) this decision meant a lot of work that both me and Michael had done was completely removed from the final game, however I think this decision made the game better overall and such was worth it. We implemented spotlights however not as a resource the player would use but as a way to show and guide the player to more people or the end of the level.

The final parts of this project was figuring out how to package the game up with the correct DirectX packages, it was basically a process of trial and error that took much longer than needed. The Visual Studio redist was also needed, but much easier because we knew all we used was 2008, so 2008 redist.

So my overall learning experience was this: Do not expect that what you have as a game idea at the beginning must stay as it is while you develop it, a game is an ever shifting entity.

Things I think we could have done better:

  • We could have optimised a lot more.
  • We could have spent a little more time on sounds and audio.
  • We could have spent more time on teaching the player what the actual goal was and how points related to time spent and how many zombies.

I think we will submit Brains for the IOTD later on to get some attention to this game, and that we are developing it for iPhone (I will post updates on the progress on this blog!) after I upload some video. Until then the download is here: http://t3agames.com/?page_id=36

And I'll be adding concept art for the original game and brains in this post later on. (Stuff that Lynden did.)

The Forest Of All Beginnings

Posted by , in General 13 May 2011 - - - - - - · 292 views

Hey there everyone! I am fairly new to all this so let me just start with a quick introduction followed by an overview of my projects! I am 21 years old turning 22 soon, I have a 'Bachelor of Interactive Entertainment with a Major in Programming' and I have been programming since I was 15 years old with Visual Basic (Yuck, I hate it). The programming \ scripting languages I know at least moderately are C++0x, Java, C# and AS3.0. I am starting this journal as kind of a progress tracker which I hope will keep me motivated though all of these crazy shenanigans. This being my first journal post will be by far my largest post because it will be outlining all the projects I am currently working on.

So here is a basic list of my projects.

  • TS Game Engine – OpenGL, C++0x
  • Game Development Kit – TS Game Engine
  • 2D Flash Engine – Flash
  • This Way Up! - Unity3D Game
  • Sorc – Flash
  • Elma – Flash \ Undecided.
  • FPS – Source Engine
  • iBrains – iPhone using Airplay SDK

One of the biggest projects that I have given myself is the TS Game Engine, this engines main goal is to provide me with the ability to develop games in my own environment, without any extra libs that I have no real understanding or control over, some may argue that this is a waste of time and that other people better than me have already made good image loading libs or implemented component systems or whatever! However this is a learning project for me which means I win if I learn anything. This also aims to be cross platform with Windows, Mac and hopefully some flavours of Linux. Oh I also plan on making my own file formats for assets just for fun and because it will also be easier, I will also only optimise when I find I need to optimise. This is specifically using only OpenGL 4.1 forward compatible context, yes this does cut out some hardware however by the time I am done it shouldn't matter.

There is a next step to the TS Game Engine which is to create the TS GDK which I plan to be able to support both large and small projects, whether 2D or 3D in game creation. The way I want it to work is to have good multi-user capabilities where in the kit you can edit or create models, textures, scripts, scenes, shaders, documentation (design doc etc.) and also allowing resource allocation (Project Managerial type stuff) while it gets updated to other people instantly allowing use of the new assets for the game, or the new look of the game. I plan on going into much more depth later on. This is my end programming dream.

I have another engine project, however a much small scoped one, and that is to create a 2D flash game engine, the only reason I am making this is to realise several cool game ideas in a medium that I think will support them. Both games will be released for as many flash portals as possible and both games heavily relying on multi-player however while one is competitive the other is cooperative.

Sorceror (Working title) is a game idea spawned from the map Card Shuffle in Warcraft III, which is a fairly unknown map but basically it's Yu-Gi-Oh or Magic: The Gathering except with real time elements mixed in, I found it highly addictive in multi-player and thought with a few changes it could be a very nice 'casually' competitive game whether team based or 1 v 1.

Elma is a game me and a friend knocked up over a weekend in Game Maker which was basically a game where we would go through a dungeon killing skeletons, we both made our own characters with our own abilities and by the end of the weekend an idea formed about a cool casual cooperative 'story driven' game similar to Magicka. The+ thing I think will make this game awesome is the way we will be structuring abilities with a players character, which is you can mix and match whatever abilities you like to create the character you want. For a quick example with the abilities that we had in the GM game I basically made Sephiroth from FF7. We now plan on remaking this game in an easy to access nature using Flash and making it up to four player, this means that yes a player can play this solo and levels will scale to fit.

This Way Up! Is a nice simple Unity3D game, it helps me take my mind of large and difficult tasks when I need a break. It is being made for a company me and my friends created called The Action Friends and will be the first game we release, we plan on releasing it for both iPhone and Kongregate. It is about a robot who has his robot girlfriend kidnapped and he must go through a ship, flipping gravity and entering stasis to avoid obstacles and death spikes to try and rescue her. This is my second Unity3D game the first being a game I developed under an intern-ship at N3VGames.

Unnamed FPS, I have always enjoyed CSS Surf which is what I believe to be some of the most innovative game play I have seen. It incorporates established FPS into a crazy new element, that being 'gliding' or surfing along ramps which radically changes the way you play. My plan is to use the same mechanic in a story driven game that introduces the player to the mechanic not only in a easy to understand and learn way but in a way that makes sense. Hopefully this will allow a centralised game for the surf community, which is heavily fragmented and requires a bit of insider knowledge to get around in. I plan on the story being something like you are testing a product that allows a person to glide along ramps, while also allowing a human to withstand large falls and even bounce from them if coming from the correct angle (bunny hopping), I kind of want this to be jokingly done in a portal-esque fashion.

If you have no idea what css surf is, here is a link to some vids:



If you play on Aus servers and you want to surf with me I can usually be found on W5 servers or Surf Infamous servers under the name Mr. Baddy.

Ah iBrains! Brains is a project me and my team, The 3 Amigos – 2 programmers and one artist, did as my final project at college and which won game of the year 2010 at the Brisbane campus, it was a three man team, making us the smallest team with programmers. Brains is a simple take-over a city with zombie horde game, using C++ and Ogre 3D (We did physics ourselves 'cause it wasn't worth integrating a large physics engine for the simple physics we needed). Now me and that team have decided to port it over onto the iPhone because we designed the game specifically with it in mind.

Here is some Brains screens :

Posted Image

Muting the incredibly repetitive one track we had!
Oh and those hands on the left, they follow the mouse it looks way cool in motion.

Posted Image
Eating homeless people in a Zombie Apocalypse.

Posted Image
Running around the city eatin' people.

So that is basically all of my projects and I will do updates on them as I work on them, talking about problems and how I overcame them while also showing off the occasional video and screenshot! That was a lot of waffling, but I felt I needed to do it so my posts have some kind of base to work from :).

Cheers, Nathan!


January 2017 »

22 23 2425262728

Recent Entries

Recent Comments

Latest Visitors