website/projects/dawnchaos/index.md

71 lines
3.9 KiB
Markdown
Raw Normal View History

2014-02-01 17:11:40 +01:00
---
title: Dawn of Chaos
---
For the first of undergraduate study we have to develop a project in either Delphi or OCaml within a team of four during one year. This is the only year when we are allowed to make a video game. That the reason why we decided to create a Diablo-like in Delphi as our school project in 2004.
The development has been quite hard, because at the time we had no programming skill. Moreover, our team rapidly exploded, with one member quitting the school after a few months and another one not willing to work.
Nevertheless, this was a truly rewarding experience since I learned the basics of video game creation and DirectX programming.
GRAPHIC ENGINE
--------------
We had the choice between DirectX and OpenGL for developing our graphic engine. Most of the students chose OpenGL but we thought DirectX was more suitable for a Windows game because we had no intention to port the project to Linux.
We used the Jedi Project headers as a means to use DirectX with Delphi. The first contact with DirextX was harsh but after carefully reading the SDK documentation I was quick to learn the basics. I would like to thank Buckman for helping me figure the logic of DirectX out.
The 3D models should have been generated with Maya but our graphic member was not able to produce anything. So we search graphism websites for simple models and we modified them with Maya. For the texturing part and the conversion of the Maya file format to the DirectX one, we used Deep Exploration.
In order to make things dynamic, we just added a game loop with mutable variables (by pressing keys for moving the camera for instance). Unfortunately, the game loop was not set on the time but on the cpu cycles. As a result, it runs as fast as your cpu can, making things lagged.
Finally, I added a 2D display for game informations such as health. It was done using DirectSprites and DirectFonts. A bug with the proportions forced me to tweak the sprites size manually in order to make the game look as expected on screen.
PATHFINDING
-----------
For the pathfinding, I used the classic A*. Each tile of the map is enabled or not, make a boolean map on which I applied the pathfinding.
SOUND ENGINE
------------
"Sound engine" is a big word for what was done. At first I thought I would use the DirectSound library since our graphic engine was done with Direct3D but I quickly changed my mind.
DirectSound allows you to use incredible 3D sound effects like reverberation but it was a nightmare to use it. I spent an entire night just for trying to play a simple .wav file. Without success.
Then I tried Fmod that everybody was using at the moment and I was able to play a .mp3 file in 10 minutes and 3 lines of code.
For the needs of the game, I included a background music and I added step sound effect when the player is walking.
AI
--
The AI is just some nested conditions ("if .. then .. else"). The principle was the following: an enemy is making his rounds and it attacks of the hero is close enough. The enemy goes back to making his rounds if he is almost dead or if the hero is getting away (the hero is of course faster than any enemy).
WHAT WAS DONE BY OTHERS
-----------------------
My friend who actually worked created a truly rich map editor that was used for making the game. He also created the elements of the world. He was then able to define position and rounds for the enemies directly from his editor. Our graphc engine only had to get his data from the editor in order to generate the levels.
At last, he was in charge for the management of the hero: life, equipment, etc.
LAST WORDS
----------
Our game was quite pretty but it was very slow due to the too detailled models used for the hero and the enemies. It lacks animation too. I really wanted to incorporate animation but I wasn't able to.
TECHNOLOGIES
------------
DirectX: the official multimedia API from Microsoft
SCREENSHOTS
-----------