Well I know it’s been awhile between posts, but we just finished our Beta Milestone for Lignum and the game is really coming along!
As far as tech is concerned, there has been lots of things built from the ground up. Personally, I’ve manned and built the Audio, Physics, Game Logic, Level Editing, and Factory systems in the game. Each one of these had their own hurdles to overcome, but each was equally satisfying to complete.
-Audio was done entirely with FMOD and has basic channel functionality. Playing, stopping, pausing, and volume setting was the functionality the project has required so far.
-Physics was mostly point to box and point to sphere, but I also have cube and sphere object intersection if we end up needing it. A simple but powerful system geared specifically for a point and click adventure game.
-Game logic obviously handles the game play, utilizing a simple interface I implemented. Anything deriving from it receives updates and messages such as being clicked which makes adding new objects to the game a snap.
-The factory handles object creation, deletion, level saving and loading, and handles some of the level editor backend. A system that absolutely needs to be stable and robust to keep the game chugging.
-The level editor is mostly done in AntTweakBar. The speed of iteration and simplicity of AntTweakBar made it particularly attractive to a small dev team such as ours, so I spent some time hooking it into our game.
-I also made some really helpful tools along the way, one of which I’ll show below, my directory tool.
I wanted to show you guys a small snippet of a tool I made for our game for managing assets. It’s more or less a version one, so it might need refinement. Also this is exclusively windows code, as it deals with directories and such.
void nsUtilities::GetAllFileNames( const std::string &directoryName, std::list<std::string>& nameList, std::string desiredExtention)
//set the directory with a wildcard to grab all files
std::string directory = directoryName + "/*";
//Find the first file of the directory
HANDLE hr = FindFirstFileA(directory.c_str(), &findData);
ErrorIf(FAILED(hr) || hr == INVALID_HANDLE_VALUE, "Could not find any files in the directory!");
//grab every file
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
//craft the full filename
std::string fullPath = directoryName + "/" + findData.cFileName;
//get the position of the extension
std::size_t fileEnd = fileName.find_last_of(".");
//holds the extension to filter out unwanted files
std::string ext = fileName.substr(fileEnd);
//check if it's the file type we want
//Insert it into the list depending on the mode we're in
while (FindNextFileA(hr, &findData));
//Closes the file search handle
This nifty little function will fill a list you pass it with the full paths of all of the files in the directory that have the extension you specify. I initially had it just get the names of all of the files, but there were sometimes hidden files like desktop.ini that kept sneaking in. I use this particular utility in any of my systems that need to load in assets. It’s great because I never have to specify which assets I want, it just grabs all of the ones I put in the folder and initializes them into whatever particular system needs them.
Anyways, I’ll show a sneak peek of some of the actual game stuff now.
Well here’s the first scene from the game! As we’re doing a point and click, we really wanted to give the player an interesting perspective as they explore the world. This particular scene is after a balloon crash, and the players first introduction into our mystical world. The main mechanic is obviously point and clicking, but there aren’t going to be any puzzles or inventory. This game is more about the narrative and the experience.
I can’t wait to show off more of this amazing game, and I’ll try to post more code and snippets from the actual game. I’l keep you guys posted!