My Objectives
1. Implement multiple completed games, including 3D games, using common tools, languages, and software for web, console, PC, or mobile platforms.
I have created multiple projects showing off the work I've made to help projects become ready to launch as a full product.
A tank game I created in Unity has a startup main menu screen, gameplay and a game over. It is a game that can be started and replayed over and over again with random generation for increased replay value.
https://youtu.be/IhYDxrNFtLg
https://github.com/NY644/Project-Milestone-0.git
Duo Derby is another project I have created as my SIP project. It is a co-op racing game with a time trial mode. Players work together as pairs to complete a track with the fastest time possible, they must swap roles constantly to maximize their potential as a team while also fulfilling duties the can't do on their own. For example, if the green player is driving, they will give the car increased speed while if blue is driving, the car will have better handling. Additionally, the passenger player can use their ability to support their driver partner to assist them on the track but they can only use that ability while playing as the passenger, meaning it's also important for pairs to decide whose ability they want to have available at each moment.
The passenger decides when to drift meaning as a team the driver decides when the turn while the passenger decides when to drift. As a team two players are working together trying to complete a left turn as efficiently as possible.
Project Carrier is co-op, PVP, PVE style game where players can form a team to sail the ocean fighting all kinds of threats from hostile AI to terrifying leviathans to other players. Players are able use all kinds of vehicles, purchase new ones and expand their arsenal with the loot they collect to help deal with more intense threats. It is a project with lots of motivation from popular games like Sea of Thieves and Monster Hunter.
Project Carrier showing off many of the drivable vehicles on a test map.
2. Design, develop, and implement the architecture and infrastructure needed to support a complete game project.
During my free time, a friend and I have been working on a personal project creating First Person League of Legends. While the game itself is far from finished, we have been making many of the components and menus needed to support the complete project.
Main Menu.
Multiplayer character select screen.
Multiplayer Lobby Menu.
Loading Screen.
Pause Menu.
Scoreboard Tab Menu.
Another example of a project with menus and interfaces would be with a tank game I created in Unity. The tank game has an interface showing the player's health, there are menu's to show main menu, when the game is over, and options to customize the settings for the game.
https://youtu.be/IhYDxrNFtLg
https://github.com/NY644/Project-Milestone-0.git
3. Implement and analyze fundamental data structures and algorithms associated with game applications supporting gameplay mechanics.
While working on Project Carrier, the swimming system became a complex algorithm to function ideally with the game. While it first started as a simple toggle system to switch back and forth between ground and swimming animations, it became a lot more complicated when working with vehicle interaction. It needed a much more detailed system for vehicle interaction because there were many what if situations/conditions that needed to be created to help the system decide what movement mode the character should be in. I was able to solve the system with many Do Once nodes or conditions that could only be met once and only be reset under certain conditions. Without the system struggled to understand which animations to take which resulted problems like swimming on land, immediately switching back and forth between swimming and walking, swimming above water after leaving vehicle, walking on ground under water, if player left a vehicle underwater and then walked on land, the animation would not switch back to walking. Overall, while the concept seems simple to fix what seems like a small problem on paper, it became a system that needed its own unique algorithm to solve.
Complex Swimming system zoomed in.
Swimming System zoomed out.
Maze Maker is a C++ project where the user can solve a randomly generated maze and customize how challenging they want the experience to be my customizing the number of rows and columns. The maze is then generated using a recursion method.
The code for how Maze Maker works with Recursion.
Skynet is a C++ project that's automatically played by the AI. The game plays like battleship, an enemy is placed randomly in a 8*8 grid. The AI tries to guess where the enemy would be located. The AI will then be told if its too high or too low and change it's guess based on what it's told. Through a game of hot and cold it will eventually figure out where the enemy is located and tell the user how many tries it took to find the target.
The code to help the Skynet AI decide how to change strategy on their next attempt.
4. Use software development processes to analyze a project problem, and to design, build, and test a corresponding software solutions.
This was an objective met multiple times in Game Production Studio with Team Carrier. There were many challenges that required unique problem solving.
One of the biggest challenges to solve for the project was creating a swimming system for the game as there were a lot of questions to answer. How will the character detect when they are in water or not? How should the swimming physics behave, should it act more realistic or cartoonish/satisfying? Should the player be able to shoot underwater? Should the player be able to jump out of water to increase satisfaction? There were a lot more questions to solve. I also needed to figure out how to do animations and blend animations together to naturally transition the character from ground movement animations to swimming animations. Next I needed to create conditions to stop multiple animations from happening at the same time or having one over ride another. In a sense there is a behavior tree to tell the program which animation should be used and when. Finally, came the challenge of how it would interact with the other systems in the game. The main problem being the vehicle interaction system (the player's ability to enter and exit vehicles). I then needed to create multiple conditions to tell the program if the player is swimming or not after exiting a vehicle. For example if the player entered a submarine above water but exited the submarine underwater then the game would still think the player is above water. For these reasons the behavior tree needed to expanded with more details of which swimming animation to use. With all of those challenges completed I now have finished the swimming system Project Carrier is still using today.
Complex Swimming system zoomed in.
Swimming System zoomed out.
Another major obstacle I had to solve was understanding how to get drifting to work in my SIP project Duo Derby. Drifting was difficult to solve for many reasons. One was that it is handled differently in each racing game meaning a lot of the tutorials I found online did not match with what I wanted to achieve. I was planning on scrapping the mechanic but I came up with an idea to solve the problem. During the time I had it scrapped I was experimenting with how to alter the handling/turning of the car to better suit the track I created. I was also experimenting with how to alter the handling when the blue character controls the car. I suddenly got a lightbulb above my head to instead use the altered turning to create the drift system. Just like the swimming system in Project Carrier, my goal then became how to switch back and forth between drift system and non-drift system/normal driving. Technically my car doesn't really drift it just has altered handling giving it the illusion it is drifting. I also needed to create new conditions for the car to make sense when it should drift. For example the car should not be able to drift if it is going too slow or not moving. It also needed to show the drift particle effects only when the car was turning, moving at a fast enough speed, and only allow the partner to do it since in my project the partner controls the drifting.
Car creating a drift path.
Car Drifting
5. Demonstrate development skills using multiple programming languages, development environments, and platforms, including advanced and/or experimental topics in game programming.
During my time at SCC (Scottsdale Community College) I experimented with many different languages including C#, C++, HTML, Javascript and SQL. Later I learned even more languages/engines at UAT (University of Advancing Technology) with Unreal Engine and Unity.
This is a custom HTML project I created to show the importance of your heart's health and how to take care of it with code included.
This is a C# program that allows the user to shop for shirts. They can choose their size, how many they want, then add them to their cart to show the user the total price.
This is a C++ Custom Car program. The program allows the user to create their own car by choosing the car body, wheel size, and horsepower. However some car combinations are not possible showing the user that a certain car combination is not possible. For example, if the user tries to make a Jeep with small wheels, the user will be informed that combination won't work due to the wheels being too small to support the body type. There is even an advanced mode which allows the user to create the specific size of their car and the option to choose between paint colors and analyze the costs of each one.
6. Establish collaboration, mentorship, and professional leadership skills by working with other disciplines to deliver highly polished and completed projects.
In my Game Production Studio class I was working with my team on Project Carrier. A game about using modern military technology and working with a team to sail the seas and fighting massive leviathans. Although I was not given a leadership position, I still provided a lot of suggestions and details to improve the quality of the game.
During the project I suggested some Quality of Life changes to improve the immersion and understanding of the game. The two main examples were by creating damage visuals and control Widgets. The purpose of adding the damage visual is to show when the player is taking damage while giving the immersive feeling from a first person perspective instead of using a health bar.
https://youtu.be/jBGBK6rHzqo
Another idea I suggested was the way the plane could work. Upon some of the first feedback, players found the plane hard to control along with not knowing how to control it within a short amount of time before crashing. My suggestions to improve the plane have been to create widgets to show the controls for all vehicles including the plane to show players how to use them. Additionally I suggested to add the feature of speeding up and slowing down to give more control with the plane. Another problem we ran into was the plane was moving so fast that the plane would keep it's own bullets while shooting. To fix this, I suggested to create an invisible line instead. This invisible line casts in front of the plane, and if the line is touching anything, it creates a VFX at the collision point, giving the illusion that the plane is firing very fast tiny bullets.
https://youtu.be/nPnerAOXkWc
Finally, one of the biggest problems we ran into as a team was understanding how to get swimming to work which we felt was essential since the entire game takes place in the ocean. This was a challenge our team leader/Programming leader (Hyrum) took on first. However as the weeks went on, he was having a lot of trouble figuring it out and I could tell he was getting stressed from it on top of the many other challenges he was trying to solve in our project. So I decided as a compromise that I could take on the swimming system instead while he takes on the boat system that I was struggling with. In the end it was a major success because we made up for each other's issues and sources of stress.
https://youtu.be/c3Zp967-1bg