Let's start right with the name! Why PR00FPS? Well, my nickname is usually proof88 or PR00F. And because the game is an FPS game, the name of my FPS became: PR00F + FPS = PR00FPS!
I've started learning OpenGL in 2006. This is a graphics API, VGA drivers implement it and it's good because we get hardware-accelerated graphics, like with Direct3D. I was reading tutorials on the internet and tried to understand them. I have always been interested in game developing. After secondary school i went to a computer programming vocational training where i had to make a project. I already knew in the beginning of the training that my project will be a game. At first, I wanted to make simple shooting game like Wolfenstein but a little bit later i thought that adding mouselook and other things to the game like jumping is not a big deal.
I think i got to know Counter-Strike in 2002, first 1.5 and a little bit later 1.6. I have been playing CS for years but then i shifted to Quake 3. And through the years, there had been periods in my life when i wanted to play CS, and other periods when i wanted to play Quake 3, and these periods were periodically exchanged. During the above-mentioned vocational training i was in the Quake3-period so i wanted to create a game like Quake 3 rather than CS.
The game structure briefly
I have never written a real graphics engine and it's still true now. A graphics engine must know a bunch of things. I would rather call my thing as a graphics library that is used by the game. This is a dll with a variety of functions in it like texture loading, model loading, etc. So this graphics library contains things that is used to handle the game's display. It uses OpenGL and was built in Delphi as the game, too. I used Delphi because i had the most routine in Delphi at that time. So the game uses this dll for the rendering. The advantage of this structure is that i can modify the graphics library without rebuilding the game, and i can modify the game without rebuilding the graphics library, and i can use this library in my other projects, too.
Sometimes people ask me how to write an engine and i hardly can answer it. At the beginning of secondary school i got to know DarkBASIC which is a game developer software using BASIC language. It has a plenty of useful functions for making games: functions related to graphics, sounds and music, networking, file handling, etc. I made a game in it, not too good but that's all i was able to make at that age. The name of the game was "Túrakocsikázás", emm, in english, maybe "Car Cruising".
I've made most of the models into it, too. I know some have already written C++ programs at the age of 8 but i wasn't like that. :)
So coming back to the engine, i knew what functions should i create: the functions that i used before in DarkBASIC! Experimenting with small programs using OpenGL took some time, of course, but then everything got together and at the end of year 2006, my graphics library became usable.
Delphi supports object oriented programming but i didn't use it. The whole game looked like this: the main program used a lot of units, every window (form) had its own unit, and separate units contained the collision detection functions, map handling functions, etc. But there weren't any classes, just type definitions, for example, there wasn't a map class, instead of that, there was a TMap record containing map-related data and every map-related function had the prefix "map", for example, mapLoadMap() loaded the given map, mapFlush() removed it from memory. So the whole game was written using functions and records, which is a little strange but that's all i could do at that time. Okay-okay, there were classes even so: the forms, because those were custom classes descending from class TForm but that's all for classes in the game. :)
The graphics library doesn't contain much optimization related to rendering. That's why the game can be said to be slow but it isn't as slow as expected because the polygon number is low and the maps are small. The library doesn't decide whether an object is behind you or behind the walls, it draws it anyway. That's why the maps are so small. But the game still ran okay on school computers. Texture compression helped a lot. This means if the hardware supports texture compression then textures are stored in a compressed format in video memory. This can boost up performance significantly with integrated video chips, too.
At the end of development i realised sounds should be added to the game. I used FMOD library for that. Sadly there wasn't much time left for that, so sounds were just added to the game and the development must have been finished at the end of the school year. I'm not satisfied, some sounds are strange, sometimes it comes from the right or the left when it should come from both sides and the quality of sounds may be better, too.
The main menu shows up after launching the game. This is a simple window which has a transparent image as its background and the window itself is transparent, too, and it has no title bar. I think it doesn't look bad. The whole menu has a blue color scheme.
Let's take a look at the menu items from bottom to top!
Clicking on Exit exits the game - pretty simple.
The About button is very straightforward i think. I'm in it and everybody else who have tried the game and helped making it, etc.
The Settings menu is more interesting. If something is not clear for the first sight, you can move the mouse cursor onto it and a hint shows up for almost everything. On the left of the settings window are the gameplay-, input-, and audio-related things, and the graphics settings are on the right.
The keyboard mapping is not changeable but pretty simple. You can see if you click on the Functional diagram button.
What is important to mention is how to set the graphics settings correctly:
1. - move the rendering slider on the right to the Maximum-labeled position and then press the Details button because the slider adjusts settings it shouldn't adjust, sadly, like screen resolution... don't ask why i made it this way, i don't know, it was long ago.
2. - in the Graphics settings window, set your preferred resolution, which is usually the native display resolution of your display. And also set the screen refresh rate to your preferred value, which is usually 60 Hz for a TFT display and the maximum value for a CRT display. The shading option is funny because it's here and it really sets the shading value in the game but it has no use in the game.
3. - if you have an integrated graphics adapter, then please turn motion blur off because these graphics chips will end up in a slow framerate when blurring the image. Smoke should be lowered, too. In practice, these two settings can make the game really slow with an integrated graphics adapter. If the adapter has its own dedicated memory the situation is better, though.
Settings get saved by closing the window.
You can start a new game with the START button in the main menu. I think it's really simple: you choose the map, the game mode, the game goal, and the players. You can also set your name here. Players can be robots and snails, you can see who is what in their names. Pressing the big OK button causes the game to start. If you have selected Team vs team mode, you can select your teammates. If you have selected Gauss-elimination, you can select who will be Gauss.
After pressing the big OK button, the graphics and sound systems gets initialized and game content gets loaded. If the game hangs during loading then sorry but the game has a problem with your actual graphics driver. This wasn't a bug in 2007, it became a bug a few years later, i don't know what causes this but it was okay with another driver. Maybe turning off motion blur helps.
After successfully loading the game, we spawn on the map and you can play the game. You have to shoot the enemies. When you die, the game displays the frag table, which gets hidden when you click with your mouse and you get respawned at a random location on the map. This happens to every other player, too. Every player gets as much frag as it can. If you kill somebody, you get +1 frag. If you fall out of the map or kill yourself, you get -1 frag. If it's a team game, your teammates have a bluish color and enemies have a reddish color. If it's Gauss-elimination, Gauss has a yellowish color. If the game reaches its goal, given number of frags or the time limit, the game shows the frag table and the winner is the topmost player in the table. If you click, the game restarts, everybody will have 0 frag and 0 death.
If you press ESC during game, the in-game menu shows up. I won't describe it because i think it's very straightforward.
There are 3 weapons in the game: pistol, machine gun, bazooka.
Every weapon has its own ammo. You can have a maximum of 99 ammo for each weapon. You have every weapon by default but you have only 8 bullets in your pistol. Pistol and machine gun doesn't need reloading but the bazooka can hold only 5 rockets at a time so you have to reload that sometimes. It's recommended to turn optical drive interactivity on in settings for more game experience . :)
There are 2 types of players apart from the player sitting in front of the computer: snails and robots. Why these? Well, my graphics library doesn't support model animation so i had to think of enemies which don't need animation, so i came up with the idea of sliding snails and floating robots. Snails fire rockets, robots fire with machine guns. They have unlimited ammo but they don't pick up items. Enemies fire at each other not just the player.
Items on the map can be picked up by the player. Robots and snails don't pick up items. Items float in their place and rotate slowly. The red cross increments health by 25. The yellowish shield increments shield by 50. Pistol magazine holds 8 bullets, machine gun magazine holds 30 bullets. The big rotating boxes contain rockets, 5 rockets in each box. The blue T character item gives you the ability to teleport from the current location to an other randomly selected location on the map by pressing E - useful when you have to flee from a nasty situation. You can use teleport once after picking it up. The 4x item gives you quad damage so every hit will hurt the enemy 4 times. Quad damage lasts only for a short period of time (if i remember correctly, half minute) or until we die.
Every item gets respawned after a short period of time at the same place after picking it up.
The game can be downloaded from this site. :) And a gameplay video has been also uploaded to this site.
If you wan't to get notified about my future projects or want to follow my future activity then like my facebook fan page. :)
I'm mostly interested in 3D-programming and i would like to have an own and very complex graphics engine. When i've started university in 2007, i started to develop an engine in C++ ... but later, in 2008, i started rewriting it, and again later ... But now i know that i won't restart making it because this time i know that its current structure is good enough and i will be satisfied with it. I have read a bunch of articles and have so many ideas, but sadly, there were periods in my life when i didn't deal with this topic because of my other hobbies. Nowadays i'm active in this again and i write my graphics engine and i hope something will come out of it in the near future. In practice, i write a game engine and the graphics engine is a part of it. But i would like to use a 3rd party stuff for sound handling, like FMOD. Maybe physics will be handled by a 3rd party library, too. I would like to create a multiplatform system which can be run on mobile/handheld hardware, too. I know that there are so many good and well-known engines, like Unity, UDK, Ogre3D and other game developing systems like DarkBASIC Professional, BlitzBASIC and so on ... but i would like to create my own system, which maybe won't be as complex as the others mentioned but it will be my own and what is more important, i develope myself a lot by making it.
I have some game ideas, one of them is PR00FPS 2, which would be a very different game: with story mode and multiplayer. It would feature a big map, like in STALKER (not so big, only a half square-kilometre, but it's good enough for a project like this). This area will be a part of Budapest, my hometown, which is the capital of Hungary. But for this i will need a few other people who will help me for 1-2 months, like doing modeling, etc. The game would be free, with exciting gameplay and graphics.