Download the Game here:
Online Racing Game Demo Video:

See my Network System, which this game uses: https://www.reynosorobertov.com/post/my-netcode-system
Why did I choose to create this game?
The game that I decided to create was an online multiplayer racing game where the goal is whichever player gets to the finish line first wins. I chose to create an online multiplayer racing game due to the fact that I built my own Network system and along with that I chose incorporate Gabe Robinson-Barr’s vehicle system, which allowed me to easily add cars to my project. Additionally, I incorporated Yan Liu’s collision system into my game, so that I would be able to tell who finishes the race first, since this game is an online multiplayer game using my network system, so I needed to determine who hits the finish line first so that a message of who won is sent across all clients.
How did it fit into your existing engine:
Were there any choices you had made in past assignments that made this easy?
Since everything in my project was platform independent, it made it extremely easy to add new systems to my engine, as long as that system was independent in itself. It’s important that the system that I am adding to my engine does need to know about the game itself, but rather it can work independently apart from that.
Were there any choices you had made in past assignments that made this difficult?
There was one thing where I would submit graphics data to my graphics system, but when I would submit that data it couldn’t be an arbitrary amount of meshes and effects, but rather I would have to specify the amount of meshes and effects I was sending. I decided to go back and fix that issue, so that any amount of meshes and effects could be sent to my graphics system.
Is there anything you would change about your engine after having worked on your final project?
I think if I were to change anything the first thing, I would change would be an easier way to create game objects. Currently my system has a base game object class that other game objects can derive from, which works fine. Though I could build an entity component system, where I could build whatever type of game object, I desire through entering specific specifications that I need per object through using JSON or Lua as that tool to build each game object, which would allow for a more flexible and efficient way when wanting to create different types of game objects.
What was your experience working with your classmate’s system and code:
Was it easy or hard to integrate into your engine?
Gabe Robinson-Barr’s vehicle system and Yan Liu’s collision system were quite easy to integrate into my engine, I just had to make that the correct references and property pages were set up correctly.
Was the interface easy or hard to understand and use?
The interface for each system was straightforward after going through their documentation for it. There is one thing that I wish Yan Liu’s collision system supported and that would be, being able to see some sort of visual that would show the collision in the game world. It was very hard to get the exact collision sizes that I needed for my game; it wasn’t as simple as just setting the size that would be given to me after generating a mesh from Maya. It became a puzzle to figure out the correct size for each collision per mesh in my game world.
Was there anything cool you learned working with their system?
The biggest thing for me that I found that was cool was how easy it was to integrate their systems into what my network system could do. The one big hiccup I had was the fact that the collision system doesn’t tell you who made the collision within the game, so I would never know which player ended up hitting what specific object. This became extremely annoying since I needed to send a message based on which client ended up hitting the finish line first. I ended up deciding to go with this solution. If a collision was made with the finish line and whichever player was closest to the finish line at the time of collision, that player would then be the winner. With that I was able to send the win and lose messages properly across all clients.
Are there any suggestions you could make about how their system could be easier to use or understand?
There was one thing that I would have liked to have understood a bit easier on Gabe Robinson-Barr’s vehicle system and that was adding the wheels to the car itself I know how it worked more or less and that was adding the mesh to the container that would hold all the wheels, but I would have liked to see the interface be a bit more user friendly in doing so. With Yan Liu’s collision system, I really would have liked to see some visual representation on the collision itself so I could make sure that each collision box was aligned properly rather than just playing with numbers at times. Another thing I would have loved that I really needed to be included in the collision system was an easy way to tell which game object had made the collision with the object that held the collision hit component, I had to do a work around in order to tell which player had made the collision, since it doesn’t automatically send that needed information.
What do you think the class wanted to teach me?
While a big portion of this class was working on getting Direct3D and OpenGL Platform independent of one another, which required a deep dive on how we went about setting it up so it wouldn’t matter whether or not we were running on Direct3D and OpenGL the program would run all the same. While this was a learning experience it itself, I think the main point of this class was to learn about the importance of system design and how we can create our own systems that can easily be integrated into our project, with out us having to specially hack it in just to get it to work. The purpose of a system is that it should be easy enough to understand and be flexible, so that the developer using that system and easily integrate it into their project and in our case our game engine.
What did I personally get out of this class?
This was my first time ever actually working with graphics, so even though I feel I have much to learn about the topic, I am glad that I at least have the conceptual idea of how it works and how I would go about integrating that system into a game engine. The biggest thing that I got out of this class was honestly the idea of system design knowing how to go about building a proper system for our user to use and be successful with it. This itself has caused me to really think about my own design process and the different edge cases that may come up that I would need to solve so that the developer would have an easy time using my system. I was able to really dive deep into how to properly integrate static libraries into my project and how to use them effectively. This class has honestly really shifted my idea on how I will go about designing my own systems in the future. I want to make sure that whatever I do create, are components that all play nice with each other and that are straight forward and easy to use for anyone that may have to use it.
What, in your opinion, makes software architecture “good”?
Honestly before this class I never did give the idea of architecture much thought, I wouldn’t make something super complicated, but I never had taken a step back and thought about the possible user that would be using my architecture professionally. I think what makes software architecture good is having each system that exists in the project independent from one another and if a particular system requires another system as a reference to function properly it should be obvious that is the case. The main hub where the developer might create something, the systems shouldn’t need to know anything about what that hub is doing, but rather the hub only needs to pull from the systems to create whatever they see fit for whatever the software needs to produce. If the systems for whatever reason need reference of the main hub itself, I believe it’s properly a badly implemented system and something should be tweaked so that isn’t the case. The developer should only have to worry about working in the main hub of the project and if they have to work anywhere else the system in itself is bad.
Comments