• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.
  • entries
    20
  • comments
    11
  • views
    24495

About this blog

Progress of all my projects!

Entries in this blog

CRYP7IK

Octree Voxel Planet

Just some fun with octrees and voxels.

Basically as the observer gets closer the voxels break themselves down into more accurate pieces of the planets terrain. It's like a weird mix of octree and voxels.

sCjqm2Q.gif
CRYP7IK

Unity Tile Map Editor

Recently I started a game with a friend which required a tile map, the following is a series of the editor progress.

So first I got a basic layout of the UI:

UIlayout.png

Then a pluggable menu bar (Inherit from ITileMapMenuItem and add it to the window).

Progress1.png

Followed by ripped images from Tiled and all basic tools in as skeletons

Progress2.png

Then I added the layer control and underlying API alongside a tile map asset for Unity and tile map selector and Tile Map view and grid.



Then I added the actual logic for stamp tool, fill tool and erase tool, fixed up the selection rect and a few little bugs



Following that I added undo\redo and keybinds for menu items




Then I added a proper TileSet asset which holds a list of tiles and their shared sprite



Today I changed some bits of the TileSet UI and updated it to work with Unity 5 beta, cleaned up the API, properly saved the tile definitions inside of the tileset and added ability for tilemaps\tilesets to have different tile sizes.

Unity5.png

Things I have left to do:

TODO:

- erase should set the mouse object to a light blue null tile
- tile defining (When creating a tile-set asset for collider \ rigid-body)
- click drag multi-tile selection and placement
- prefab selection and placement

And the current LoC is 2120:

LoC.png
CRYP7IK

Toasty Update #9

Hey guys!

The lack of recent updates was because I was travelling with my partner, we went to many places but the main event was Las Vegas new years, which was insane!

So, I've been back for a few days and I'm ready for another update in this one I have added a basic AngelScriptSystem, which is pretty interesting.

The angelscript system has a few cool features, the first being you can provide a main file to use which will make AngelScript your main entry point, this means your entire game needs to be in AngelScript rather than C++. The second is that you can add behaviour scripts to an entity, this should work exactly like Unity.

At the moment only the first feature is in place and I am still attempting to register all the methods and functions! But check it out:void main(){ print("Hello world\n"); print(1+1); print("Creating an entity!\n"); Entity@ ent = Entity(); print("The default name of this entity is: "); print(ent.GetName()); print("\n"); print("Setting the name to something else...\n"); ent.SetName("NathansEntity"); print("New name is: " + ent.GetName() + ".\n"); GameSystem testSystem; testSystem.AddEntity(ent); print("Starting the loop in...\n"); DoCountdown(5); while(true) { testSystem.Tick(); print(testSystem.GetFPS()); }}void DoCountdown(int a){ for( int n = 0; n < a; n++ ) { print(a-n+"\n"); WaitForSeconds(1); } print("Go!\n");}
The C++ is literally just this:#include "AngelScriptSystem.h"//Commented like a newb.int main(int argc, const char* argv[]){ Toasty::AngelScriptSystem* system = new Toasty::AngelScriptSystem(nullptr, "main.as"); delete system; return 0;}
This script results in the following:

AngelScript1.PNG
AngelScript2.PNG

The only issue is the fact that Toasty is modular which means I have to make a choice, does the angelscript system know about every other system or does every other system know about angelscript? Not sure at the moment, but as I think on it more I am sure I'll come to a conclusion.
CRYP7IK

Toasty Update #8

Okay, I ran into an issue with the editor lately, and that is when a plugin is added and it adds it's control to the inspector (think from Unity) when an entity is selected with a component it added to the engine it will position itself very far down making it not look aesthetic, which I think is important. But in the mean-time (I haven't been able to fix the bug yet) I worked on the Ogre3D renderer, it's pretty simple at the moment and contains these components:

OgreRenderSystem.PNG

OgreMeshComponent

Simple mesh component, links to a file which it uses as the mesh.

OgreCameraComponent

While this does work, it will immediately crash the app when two are added as I do not know how I can create a camera but not enable it, something I have to fix.

OgreLightComponent

A pretty simple component that just adds a light.

OgreTerrainComponent

Just creates a terrain component that randomly generates itself using perlin noise.


I have also created a basic plugin for this system in the editor which exposes the light and mesh components with only the light component actually having a custom control. You can actually see the issues with the inspector in this screenshot.

OgreRenderSystemPlugin.PNG
CRYP7IK

Toasty Update #7

This update is being dedicated to the editor and here is what I have done and what's left to do so far:

Scene Entity View

Used to add or remove entities from the GameSystem and current scene it displays a pure list of entities. It has the ability to filter entities by name and grouping of entities. Sends an entityselected event and entitydeselected event on selection or deselection of entities.

To Do:

  • Search \ Filter functionality
  • Grouping
  • Allow multi-entity selection


    Project View

    The project view is used to display the project as seen on disk. It also creates events for any views to listen to for selecting or double-clicking a file \ folder in the project view, this will allow things like the Scene Entity View to change scene based on double clicking in here.

    To Do:

    • Allow Double-Click event listening
    • Allow Selecting event listening
    • Allow renaming of items within the view itself (Rather than only on disk)
    • Properly add items under correct folder and catching rename events
    • Add ability to open a project already created

      In-Editor Networking

      This is responsible for hosting and joining a project and monitoring the status of the network. It also has a simple chat box for sending messages to people connected to the server. Messages are currently just routed to the console.

      To Do:

      • Properly send networked commands
      • Change commands so they affect files only
      • Add ability to lock a file or folder restricting the ability to modify it on other peoples computers

        Console

        Displays text sent from std::cout or printf as well as wxLogMessage (Which includes a timestamp).

        To Do:

        • Should directly use a file which it watches for edits.

          Inspector

          For inspecting entities. Plugins can add controls to this when an entity is selected if they need to. The only control the always comes up is the EntityEditControl.

          To Do:

          • Multi-entity selection

            EntityEditControl

            Allows the user to edit the name, position, rotation and scale of an entity.

            To Do:

            • Multi-entity selection

              Plugin Loading

              Plugins should be allowed to add menu items, listen for selection events and add controls to the inspector.

              • Just a code cleanup required to make the plugin more secure from the application.


                wxSFMLPlugin

                Runs an SFMLRenderSystem, allows creation of SFML Windows through the use of menu items and automatically creates one. Should listen for entity selections and add controls required based on components the entity has inside the SFMLRenderSystem. Adds menu items for adding SFML specific components.

                SFML Window

                Used to display the SFMLRenderSystems components. It should allow easy view movement and entity movement.

                To Do:
CRYP7IK

Toasty Inspiration

I just thought I might mention projects I keep up to date on to help inspire me to finish Toasty plus I check them out to steal features or some aspects of editor or engine design. This might also be useful for people looking to find free or paid engines or editors out there!

Unity3D is the most popular engine\editor on the market at the moment and even though I have a few beefs with it, it's actually pretty amazing and currently the best of it's kind. Highly pluggable and uses the awesome mono project. Expensive if you want certain features.

Leadworks 3 is a fairly well known engine\editor as well, recently kickstarting their linux port they have cool features such as visual scripting among others that I will be taking for inspiration!

Duality is a free 2D editor that has some nice 2D specific controls and effects which I would like to copy for the SFML plugin portion of the editor. Is built on C#.

CopperCube 4 uses wxWidgets to create a usable advanced interface for creating games and exports to various targets like Flash, WebGL and Android as well as Windows and Mac. Very good inspiration as it's fairly advanced and feature rich the only issue is it has a hefty price tag.

PolyCode is heralded as the 'Unity Killer' by a bunch of people over the internet for good reason. It's interface is fully customised and customisable and built using PolyCode itself. It's generally useable but doesn't officially provide binaries as of yet.

CraftStudio is a cool multi-user game creation. I think it's tagline: 'CraftStudio: the Game to make Games' is an apt description. The real-time multi-user part is what I'll be copying to Toasty.

Game Maker: Studio An amazing piece of software for creating 2D games, IMO it's better than Unity3D (including with the latest 4.3). Is insanely expensive.

NeoAxis is a fairly mature piece of software, has some weird UI choices but interesting to follow and it's examples are awesome. Recently came
out with a free version.

Construct2 A very nice piece of software with lots of different exports available, it's has only UI scripting available but is still pretty powerful. It keeps a very native windows feel (Think the new Office).

Ogitor a not so mature project, however is usable for Ogre projects I used old versions of this to help me get Ogre working on Mac. It's good for any integration with Ogre and is very pluggable.

Tiled is not for making games, but for making the maps for games. It has some advanced tile map functionality which I will also be stealing and adding some of my own additions. I'll be thinking about making the tiled format loadable for my editor to test out my tile map features.

Cool engines that I also watch:
Mutiny

Urho3D

If you know of any other editor \ engine that could be great for inspiration or even using feel free to leave a comment.
CRYP7IK

Toasty Update #6

So in this update the big change is proper depth ordering, until now the depth of things drawn on screen using the SFMLRenderSystem was based on what order the component was added to the system. The new way just utilises the z component in the entities position property and sorts the vector every update and while may not be that great in my tests has almost no performance loss.

I also changed the render system so that it no longer directly handles the texture caching responsibility and it is now handled by the TextureResourceLoader which it holds, I also plan on doing the same thing with culling and sorting which will sort of work like this:

  • User adds a bunch of render components to some entities, then on every update:
  • RenderSystem request a cull by the assigned CullingMechanism (If one is assigned).
  • RenderSystem requests a sort from the culled components using the SortingMechanism (If one is assigned).
  • RenderSystem draws the culled and sorted vector.

    Actually just talking about it I decided to do it, at the moment it just compares the bounds of all components against the current main view every update. I need to come up with a better way to cull objects though, a QuadTree comes to mind, but not sure how to update it I might have to add an isDirty flag to an entity and whenever it's position is changed update that.

    So here is culling and sorting working on 7k+ entities:

    CulledStuff.PNG

    Compared to no culling but sorting:

    NoCullSortOnly.png

    That's a difference of ~180 FPS!

    Pretty good IMO!
CRYP7IK

Toasty Update #5

Recently I have been thinking about how the editor works, now I don't really have much experience with GUI applications, especially those that are going to be as complicated as a game editor, yes I have done simple stuff like map editors but they do not compare.

So the first requirement I had is I want an interface similar to Visual Studio or Unity3D, with the detachable windows \ panes, the reason for this is because that kind of program works well with multiple monitors and doing different tasks along with the ability to make the experience your own, positioning windows where and how you want saving different layouts for different games which is something I find very handy myself in Unity3D.

The second requirement is because of the modularity of the engine the editor needs to be just as modular, therefore it needs to be plugin oriented.

The third requirement is the need for multi-user editing, which the Toasty Editor will be based on. This means that at any time you can host a project and see real-time edits of other users. This will require the locking of entities and components so only you can work on it, but this also means there needs to be admins or project managers with permissions to unlock anything. The direct idea behind this is that you could monitor and manage the project from within Toasty itself. I'll talk about this later on.


So to begin with the choice of wxWidgets as my GUI of choice. The reasons follow as:

  • Cleanliness, don't have to use macros and the ability to customize for smallest library size.
  • Unicode
  • wxAUI - The only issue with this is it doesn't have all the features I want however it's...
  • Open source with a good licence so i'm working on those features at the moment!
  • Excellent community support, both from the developers on the google groups wx-users and wx-dev and from the users at the wxForums. Ask a question on google groups and you'll at least have a response the next day.
  • Ultra active development, there are many commits per day, just checkout the puchcard.
  • Keeps backwards compatibility for a decent time
  • Works on Linux, Mac and Windows.

    This solves requirement number one and two. I have done a bit of research in plugin architectures and the way I have found is to have a common library (wxWidgets and the plugin interface library I write) which the main application and any plugins will link to this way the common library is the plugin interface and because the main application uses it, it should be powerful enough to make any kind of plugin required. The only thing is making it secure!

    The third requirement however is a bit harder but I think I have it solved with the MVC pattern. So the Model is the project in the filesystem so scenes are scenename.scene folders that contain entity files. Views can then listen for modification of files or folders they are interested in and display data as required. Controllers can be anything that edits the files and folders that represent the project but for the networking I intend to have NetworkedCommands which one will have to inherit from which will allow others to undo \ redo external changes and on top of that can have the ability to log all changes in large projects!

    Lets see how it goes!
CRYP7IK

Toasty Update #4

Hey there! Look it's already Update #4!

So in this update I included a video to show things off in motion and the video has an explanation of the update. The test currently involves about 40000 tiles (200*200 map) and ~4000 entities (trees and a single animated goblin) the map is randomly generated each time (Which made me realise how complicated C++11 random number generation is, so I'll have to pull that out into some easier to use functions later on).

I decided the best way to test a game engine is to create a game with it, so I made this test which will be a game similar to settlers with not much complexity.

Stuff to do:
CRYP7IK

Toasty Update #3

Things done for this update:

SFMLDeltaTimer Added

I added an SFML based timer so that it can be used instead of the chrono timer on windows.

SFMLRenderSystem Added

SFMLRenderSystemRunning.PNG



So the SFML render system is pretty simple, it's constructor takes width, height and a window title. It automatically creates a window with those attributes (Which you can change or get after creation). It also handles management of textures, if you try and load a texture twice it will return the original texture. this works for sprites as well. The render system currently has a single view which one can manipulate, it basically just exposes zooming, moving and rotating of a view, support for multiple views will come eventually. If the window is closed it will return false on it's Update function and close the window.

This system updates a render components position, rotation and scale to that of the entity just before drawing the entity. The system does no culling of any sort at the moment nor does it have any kind of depth sorting it is just last component added is the one drawn on top.

SFMLRenderComponent Added

SFMLRenderComponent.PNG


This is essentially just a sprite, it requires a string and an SFML render system to create. It uses the SFML render system to get a texture pointer which it uses to create the sprite.

SFMLTextRenderComponent Added

SFMLTextComponent.PNG



Just used to render some text onto the screen and at the moment will load and use it's own font resource, it's something I'll have to change.

SFMLAnimationSystem Added

AnimationComponent.gif



This is a spritesheet based animation system and is not that robust at the moment. If the animation component has been set to play it will advance the position of the frame to the next one after the frame timer goes past the allowed frame time.

SFMLAnimationComponent Added

This just contains a map of strings to animation data, what the current animaiton is and whether it is playing. It has functionality for stopping and playing at the moment. It requires a SFMLRenderComponent to be able to be created as it uses it's sprite, it's best to give it the component that is attached to the entity! After it's created you have to give it very specific data:

  • frameWidth
  • frameHeight
  • frameNumber
  • startX
  • startY
  • currentFrame
  • currentRow
  • currentCol
  • animationTime
  • frameTime

    It's done this way because you might have different sized animations in the same atlas.
    SFMLTileMapComponent Added

    TileMapComponent.png



    During my test I noticed performance issues trying to render my own little map, so I decided to make this to alleviate that. It's a simple class and takes a string to use as the texture atlas, an int* for the data, the dimensions of the tiles and the desired width and height of the map. The data is just ints ranging from 0 to how many tiles you have, the SFMLTileMapComponent will assign 0...N in a row first left to right order, so that the top left tile is 0 and the on to it's right is 1. I basically stole some code off the SFML wiki to get this working.

    I plan on having several TileMap implementations, a simple one like this one and a multi-layer, multi-atlas one, I'll probably think of more features as I think on it.

    GameSystem

    I added the ability to create an entity in the game system, this makes creating a relevant entity to use in a game system a lot neater. I also added an ability to get all entities in a radius, it's pretty fast but I wouldn't use it if you had more than...say 1000 entities. I had a crazy bug when I first started:

    FailCircle.PNG



    and after a bunch of debugging and optimising it turned out I had just copy pasted x where y should have been...

    CircleWork.PNG




    I am already seeing failures in my API design and so I am re-evaluating and might do a refactor, although not before I get this version 'done'.




    The (MinSizeRel) ToastySFMLRenderSystem.dll is about 64 KB.




    Stuff TODO:


    • Fix crash if texture load failed from the render system
    • Add an action based sfml input system (Unity style)
    • Add basic collision system for SFML (no collision response)
    • Add culling pluggability into the SFML Render System
    • Have at least one culling mechanism to use in the SFML Render System
    • GUI, I'll probably base it on an already existing GUI.
    • A way to re-order render components

      That's it for now! Thanks for reading!
CRYP7IK

Toasty Update #2

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(); }#endif
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 sceneScene* myScene = new Scene();// Create an entityToasty::Entity* entity = new Toasty::Entity();// Create a component to attach to the entitytestScript = 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).gameSystem->LoadScene(myScene);// Then somewhere else in the program// Takes out all the entities, components that myScene loaded into the gameSystem.gameSystem->UnloadScene(myScene);
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.
CRYP7IK

Toasty Update #1

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:system->Run();
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:system->Run();
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 class Test: public Toasty::BehaviourComponent{public: Test(Toasty::GameSystem* system, Toasty::Entity* ent) : BehaviourComponent(system, ent) { } virtual ~Test() { } virtual void Initialise() { Toasty::LogInfoPositive(entityAttachedTo->GetName()); } 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. gameSystem->AddEntity(myFirstEntity); // Add the test 'script' to the Entity. Test* test = new Test(system, myFirstEntity); behaviourSystem->AddEntity(myFirstEntity, test); // Run the system! system->Run(); // 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.

Windows



systemspecs.PNG



FirstFrame.PNG

Followed by this on the Nth frame:

nthFrame.PNG



ToastyGameSystem DLL filesize: 68 Kilobytes


ToastyGameSystem Lib filesize: 72 Kilobytes


ToastySystemTest.exe filesize: 42 Kilobytes


Linux



linuxstuff.png



libToastyGameSystem.so filesize: 103 Kilobytes


ToastySystemTest binary: 19 Kilobytes



Mac OSX



MacSpecs.png

macstuff.png



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!

CRYP7IK

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.
CRYP7IK
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.

[font=Georgia,]networktest-300x162.png[/font]
[font=Georgia,][/font]

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[font="Verdana, Arial, Helvetica, sans-serif, SimSun-18030"][color="#004477"] [/color][/font]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.
CRYP7IK

This Way Up!

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:

[font=Georgia,]twuss2-300x168.png[/font]

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!

[font=Georgia,]seteditor-300x241.png[/font]
CRYP7IK

TS Game Engine

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[])
    {
    if(!TS::World::GetSingleton().Initialise("Template",200,200,600,800,32))
    return false;

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

    return(TS::World::GetSingleton().Run());
    }


    • 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)

      [font="Georgia,"]FirsTest-300x240.png[/font]

      With an FPS 1300:

      [font="Georgia,"]test-300x135.png[/font]

      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 tongue.gif.
      • 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! laugh.gif

          [font="Georgia,"]guy-300x168.png[/font]

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

          [font="Georgia,"]composite-300x168.png[/font]

          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.
CRYP7IK
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:


        http://labs.adobe.co...ologies/cirrus/
        http://www.flashreal...-flash-101-p2p/
        http://www.adobe.com...mfp_groups.html

        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.
CRYP7IK

Flash Engine, GO!

[color="#333333"][font="Georgia,"]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 colourOh 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:

        colourkeytest.png

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

        ColourKey-300x241.png

        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:

        animtest-300x150.png

        Test animation, yes it has separators.


        [color="#333333"][font="Georgia,"]
        [/font][/color]http://t3agames.com/Test2.swf

        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 icon_sad.gif 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 icon_razz.gif ) 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.

        http://t3agames.com/Test3.swf[/font][/color]
        [color="#333333"][font="Georgia,"]
        [/font][/color]
        [color="#333333"][font="Georgia,"]So things to do:[/font][/color]
        1. [color="#333333"]Fix A* for Iso Staggered maps[/color]
        2. [color="#333333"]Create a seperate pathfinder depending on map being used (normal sqaure tile map or iso map)[/color]
        3. [color="#333333"]Entity[/color]
        4. [color="#333333"]ComponentGameVisual[/color]
        5. [color="#333333"]Basic Networked Entity[/color]
        6. [color="#333333"]Some kind of network manager[/color]
        [color="#333333"][font="Georgia,"]
        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. icon_razz.gif .

        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.

        [/font][/color]
CRYP7IK

Brains

[color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]Hey all, [/font][/color]

[color="#444444"][font="Georgia,"]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: [/font][/color]http://t3agames.com/?page_id=36)

[color="#444444"][font="Georgia,"]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.[/font][/color]

[color="#444444"][font="Georgia,"]The problemS however were:[/font][/color]

  • 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.[color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]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).[/font][/color]

    [color="#444444"][font="Georgia,"]That day, spirits were high, but we had one week to catch up to others. At this point the game had scoped:[/font][/color]

    • 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[color="#444444"][font="Georgia,"]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.[/font][/color]

      [color="#444444"][font="Georgia,"]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.[/font][/color]

      [color="#444444"][font="Georgia,"]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.[/font][/color]

      [color="#444444"][font="Georgia,"]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.[/font][/color]

      [color="#444444"][font="Georgia,"]Things I think we could have done better:[/font][/color]

      • 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.[color="#444444"][font="Georgia,"]
        [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]
        [/font][/color][/font][/color]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[/font][/color]

        [color="#444444"][font="Georgia,"]And I'll be adding concept art for the original game and brains in this post later on. (Stuff that Lynden did.)[/font][/color]

        [/font][/color]
CRYP7IK
[color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]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.[/font][/color]

[color="#444444"][font="Georgia,"]So here is a basic list of my projects.[/font][/color]

  • 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[color="#444444"][font="Georgia,"]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]
    [/font][/color][/font][/color]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.[/font][/color]

    [color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]If you have no idea what css surf is, here is a link to some vids:[/font][/color]

    [color="#444444"][font="Georgia,"]http://www.youtube.c...h?v=E6F0DHCZvHk[/font][/color]



    [color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]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.[/font][/color]

    [color="#444444"][font="Georgia,"]Here is some Brains screens :[/font][/color]

    [color="#444444"][font="Georgia,"]Brains6-300x234.png[/font][/color][/font][/color]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]Muting the incredibly repetitive one track we had! [/font][/color][/font][/color]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]Oh and those hands on the left, they follow the mouse it looks way cool in motion.[/font][/color][/font][/color]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]
    [/font][/color][/font][/color]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"][/font][/color][color="#444444"][font="Georgia,"]Brains5-300x234.png[/font][/color][/font][/color]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]Eating homeless people in a Zombie Apocalypse.[/font][/color][/font][/color]
    [color="#444444"][font="Georgia,"] [/font][/color]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"][/font][/color][color="#444444"][font="Georgia,"]Brains4-300x234.png[/font][/color][/font][/color]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]Running around the city eatin' people.[/font][/color][/font][/color]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"]
    [/font][/color][/font][/color]
    [color="#444444"][font="Georgia,"][color="#444444"][font="Georgia,"][/font][/color][color="#444444"][font="Georgia,"]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 :).[/font][/color]

    [color="#444444"][font="Georgia,"]Cheers, Nathan![/font][/color]


    http://t3agames.com/[/font][/color]