I would like to preface this post with a few statements. First, when I began this project I was fully aware of how much of a massive undertaking this project would be. Designing a game engine, and then a game, alone, is time-consuming, to say the least. With that being said, I was not at all prepared for the volume of concepts that I have to understand in order for this to work AT ALL.
Project Figment is still going very strong. I have new ideas every day and I am struggling to stop adding 'ideas' to the project. I need to get a prototype up to do some testing to see if this will actually be fun to play. A prototype is still a very long way off. My struggles with camera setup, matrices, and other graphical issues are slowing me down. I still need to program the audio pipeline and fix issues with my parallel computing problems
The AI engine has been taking up a lot of my time. One of the 'ideas' that I have for this part of the project is quite ambitious, but I believe that it can be done. Without giving too much away, I would like to design a way for the game to adjust the level of challenge to how you play. I would also like it to dynamically change the game as you play. Those features sound challenging but are definitely possible. What I am having the most difficult time with is the controlling of the difficulty. It is extremely easy to design a dumb AI program (although harder than you may think) and it is very easy to make an AI that is super good at kicking your butt in your own game. The issue comes with the middle. The moderating of difficulty is dependent on a bunch of factors, most of which are subjective. What some find difficult, others may not. the player is another unknown that is very difficult to anticipate.
Working on this has really had me evaluating the way that I make decisions. With a little help from Game Theory (thank you Dr. Renna) creating behavior trees containing instructions on calculating probabilities, learning repositories, and making decisions have been much easier to conceptualize. Game Theory has actually made creating AI much more manageable than if I did not have the knowledge. Much of Game theory is finding the next likely move of your partner and defending against it. Whilst, your opponent does the same. Games with more than two players are much more complicated to deal with but if you take your time it is manageable.
Building these features into the games engine itself will help with performance but these features will no doubt be the most taxing on computers systems. So my plan is to build the game and the engine to the lowest common denominator to fit on the most systems. Completing the engine is my number one priority. Graphics first because I need to see, then Audio, then the game logic itself, finish a rough AI, configure parallel computing, and finally I will have a prototype.
Tuesday, December 6, 2016
Wednesday, November 2, 2016
11/2/2016 - OpenGL and display programming
Current mood: Hopeful
The project has been progressing very slowly since my earlier 'fist pump' post of finally being able to display the gaming window. Although progress has been slow, it has not been fruitless. I have added all sorts of exception (error) handling and reporting so I will get detailed descriptions of the errors when they occur. Documentation needs some serious updates as well. I was keeping up with it early in the project but I have been progressing and updating so fast that updating the documentation during that stage would have been a waste of time.
Display programming, in general, is far more complicated than I initially conceptualized. There are many components that are involved in bringing a 3D model to the display. If I were working from a premade engine none of this would be too much of an issue because the engine would be programmed to handle all of these components for me. Of course, I am creating my own engine, therefore I am responsible for initializing game windows, setting width and height, callbacks, updates, buffers, rendering, and input handling to name a few things. A daunting list to be sure. I am not completely crazy, however. I have found a lightweight library that allows me to communicate with the computers hardware pretty directly and use resources that are not available otherwise.
OpenGL has been my graphics library of choice. Direct X11 is available for me to use, which is a library that many people may be familiar with because it is used in modern gaming today. I chose OpenGL over DX11 because I am very new to this and OpenGL seemed the more user-friendly and from my reading OpenGL is preferred among smaller developers. DX11 is also not very java friendly. There are many programming work arounds that would be necessary for DX11 to function efficiently in different hardware environments. I have already run into issues with having to program around some Mac OS differences so that the game can run on a Mac. I am hoping that using OpenGL and Java will eliminate the need for too much of this special coding per different operating systems.
The project has been progressing very slowly since my earlier 'fist pump' post of finally being able to display the gaming window. Although progress has been slow, it has not been fruitless. I have added all sorts of exception (error) handling and reporting so I will get detailed descriptions of the errors when they occur. Documentation needs some serious updates as well. I was keeping up with it early in the project but I have been progressing and updating so fast that updating the documentation during that stage would have been a waste of time.
Display programming, in general, is far more complicated than I initially conceptualized. There are many components that are involved in bringing a 3D model to the display. If I were working from a premade engine none of this would be too much of an issue because the engine would be programmed to handle all of these components for me. Of course, I am creating my own engine, therefore I am responsible for initializing game windows, setting width and height, callbacks, updates, buffers, rendering, and input handling to name a few things. A daunting list to be sure. I am not completely crazy, however. I have found a lightweight library that allows me to communicate with the computers hardware pretty directly and use resources that are not available otherwise.
OpenGL has been my graphics library of choice. Direct X11 is available for me to use, which is a library that many people may be familiar with because it is used in modern gaming today. I chose OpenGL over DX11 because I am very new to this and OpenGL seemed the more user-friendly and from my reading OpenGL is preferred among smaller developers. DX11 is also not very java friendly. There are many programming work arounds that would be necessary for DX11 to function efficiently in different hardware environments. I have already run into issues with having to program around some Mac OS differences so that the game can run on a Mac. I am hoping that using OpenGL and Java will eliminate the need for too much of this special coding per different operating systems.
Subscribe to:
Posts (Atom)