Team Size: 53
Development Time: 5 Months
Engine: Unreal 5
Role: Kart Physics/Gameplay Programmer
Team Size: 53
Development Time: 5 Months
Engine: Unreal 5
Role: Kart Physics/Gameplay Programmer
Description
HardDriverz is a futuristic arcade racer that uses anti-gravity based track designs to create unique courses through tech inspired landscapes. Core features include customizable karts, items, and 6 anti-gravity courses to race on.
Role and Responsibilities
From the beginning of development I was part of the team of programmers working on the kart physics eventually becoming the main person responsible for it after the Vertical Slice Milestone. Some of the tasks I helped with were:
Creating a kart that could drive up walls and ceilings for the anti-gravity tracks
Creating the kart's basic functions like accelerating, braking, drifting, turning and boosting
Writing code to handle kart-vs-kart and kart-vs-track collisions
Designing the kart such that functions and parameters exposed according to level designers' needs
Physics Insights
Defined the collider shapes keeping the kart's collision volumes round which could "roll" along smooth surfaces no matter the direction while interacting with other objects like walls properly
Used multiple raycasts at the kart's center and wheels for ground detection and using the average to smooth out the kart's local down direction as it changes
Used spring kinematic math for gamified suspension to make the kart smoothly move over imperfections in track collision
Ensured physics impulses and forces were within a stable range as to not cause over reactive collision reactions
Post-Mortem
Working on a large scale team:
Working on a team was super helpful as the responsibilities and roles were clearly defined thanks to a good leads team, allowing me to focus on refining the karts to make them feel great to drive.
I learned the pains of having other programmers having to learn/use your code and vice versa. Documentation, code readability and team coordination had never been so necessary for me and it forced me to learn how to communicate with other programmers and make my code better for others to use.
Working with several teammates outside of the programmers taught me how to communicate effectively across disciplines. Level designers would often provide better feedback if I approached a conversation with verbage like "Does the kart handle well?" instead of "How does the kart's acceleration and turn radius feel?" Correlating game feel and designer's intent to hard programmed features and concepts was a skill I'm glad to have picked up.
Unreal Engine technical take aways:
I learned a ton about the Actor system and using components to design architecture that is easy to divide and work on as a team.
I worked a lot with Unreal Engine's physics system making use of several features like collision geometry, physics materials, collision groups and utilities like raycasts.
I was instructed to only use Blueprint for this project which forced me to learn quickly how to work in the visual scripting system. I learned how to be proficient in searching for specific blueprint nodes, organizing blueprint classes and inheretence, and making them to be readable for everyone on the team.
Even better If's:
Large issues at the end of development came from broken UI and issues with settings. Although I was not directly responsible for those aspects of the game, I wish I had spoken up and contributed by bringing it to attention earlier since I and many others on the team saw those issues throughout many milestones.
I had gotten comfortable talking with the same few people giving me feedback in the middle of development. Taking advantage of the diverse thoughts and opinions of a larger team size is something that ultimately refined our kart in the end, but it could have happened much sooner if I stepped outside of my comfort zone and been more proactive when the opportunities for feedback were given.