The aim of this project was to develop a prototype based upon an idea, in this case me and my team was given the task of having to generate an idea based upon a genre (horror) and then from this create a prototype.
We created a top down, 2D, horror game. The player is placed within a dark prison, using only a flashlight, flares, pick-ups and investigating clues and solving them in order to navigate and progress throughout the game and become that more, ever so close, to solving the mystery of the game. Enemies? Yes enemies, we added hardcore enemies that intend to scare. They are faster, but not as clever, you can run but not as fast. If they see you, your lucky to survive.
So the big question… what did I do? I myself programmed / implemented some of the main features of the game this includes implementing lighting, dynamic shadows, collisions, camera, movement, interaction, simple AI (line of sight, breadcrumbing) and integrating third party tools to help offload some of the hardcoding for example, using GLEED2D level editor in conjunction with XML and XNA to allow level designers to visually, drag and drop textures into a defined space world in which I can then write functions for specific textures that have specific names. For example applying collisions, sounds and physics to a textures named ‘wall’.
Raycasting – One of the main issues I had was trying to get line of sight implemented using a third party library called Farseer, which also handles a lot of the grunt work in terms of collisions and physics, for some apparent reason the Farseer raycasting function was sometimes returning undesirable results for example the algorithm I was using, was originally designed to stop casting any further than its first hit detection point, or return hit points of objects in chronological order by first hit point all the way to the last.
Unfortunately, at first, this was not the case. Sometimes the raycast would send back the correct resuts, but other times the ray function would not return any detected objects and therefore returning the wrong result. Raycasting was mainly required for line of sight, and if this was not implemented, it could potentionally, break immersion in terms of gameplay.
To fix this, using my awesome research skills, I decided to go to Google. Where I eventually stumbled upon this article. http://farseerphysics.codeplex.com/discussions/265543 simply just commenting a line of code ‘return input.MaxFraction’ which stated in the article – fixed the problem however, I stated eventually previously, what I really meant by this was it took a while, to understand and find an article that related to the problem, afterall I only knew that the raycast was returning the wrong result and therefore only understood the most, you could say highest part / level of the problem.
Unorganized – Ten thousand lines of code, to find a simple function was time consuming. That’s what I had to live with for half a year. When me and another programmer first started the game, the classes where clean, crisp, easy to navigate and make changes, as time went on, and the overly used regions and the endless lines of another programmers messy code. The time it taken to identify and tweak parts of the game became not only time consuming but a task within itself. This was a massive learning experience because next time round, I would like to communicate to any other programmer effectively, without seeming bossy, advising that adhering to a strict structure will benefit us in the long run.
Education – Time, the fact that my education was on going, unfortunately played a massive problem, we had three months to develop a prototype however we had to juggle between different modules and assignments. We as a team, had to make a document that was around 30,000 plus words long which had to be evidently show our research and concepts. Along side this we had to make the game and juggle between other modules for example agile production management. Another constraint that effected time was the fact that we was uneducated in terms of some of the mechanics we wanted within the game. One good example of this was the fact that we wanted to the player to walk around in a dark setting, where the game is based mainly around the player and their torch to light up their way – we had to outsource a third party engine, which required time to actually understand and implement, those engines correctly, to get torch / lighting results.
I’ve learned many things over the course of this project, to quickly summarize. I have learned that I should ensure programmers, working alongside me are sticking to a strict structure – try to prevent classes from getting to lengthy, try to state all the mechanics clearly before hand, to try and manage time more effectively – in terms of identifying if I need to educate myself to implement a certain mechanic and try and estimate how long it will take.
Getting more technical, I’ve learned how to use three third party libraries and implement them within the game which are GLEED2D, Krypton Engine and Farseer which have enabled me to, more quickly, implement collisions, physics, lighting, raycasting (line of sight), level editing / asset placement. I’ve also learned how to add sounds, create simple AI, create different states, add XBOX controller support, and other small basic mechanics for example movement.
Need to Add
Need to Add