Excellent codebases are a consice collection of classes, structs, methods and interfaces that are well documented and commented, neatly structured, properly named, follow the agreed upon coding conventions, and are human readable. This is never the case in any codebase, but should be the ultimate goal of every good project. It is one of my top priorities when writing code.
What I can do for you
I have 3 years of practical experience developing gameplay systems and technical solutions to all sorts of problems with and in the unity game engine, using the C# programming language.
Some systems that I am particularly proud of in the Anstoss 2022 soccer manager game:
- An elaborate Transfer Market System, where all clubs evaluate their kickers, and their needs, and then pick and choose who to buy and who to sell, according to their current data. This was difficult in many ways, not only was this system gameDesign heavy and had a lot of rules, but it was also a big hit on the performance of the game. The solution was to implement an advanced binary tree system for finding kickers to fit the requirements of the club. To Expand on the advanced binary tree system: the clubs had requirements that a potential kicker needed to meet, and the binary tree first started searching for a fitting kicker. to use a binary tree, the list of kickers needed to be sorted. in this case it was sorted by strength and the list was kept in a dictionary where the key was the kickers position, to make the list smaller. when the binary tree would find a kicker with appropriate strength in the list, the second step of the binary tree would kick in. sometimes, a kicker could not be bought, because the club the kicker was playing in would be left with not enough kickers. the second step fixes this problem, by then evaluating the neighboring kickers in the list, for eligibility of a transfer. this neighbor evaluation continues up and down the list, until either the strength requirement is not met anymore, or when a fitting kicker is found.
An expandable Negotiation system for Kickers, Clubs, and Sponsors each with different values and decision making processes, where either side could be replaced by an AI negotiator. (AI is just a fancy term for a bunch of logical desicionmaking in this case, like in most cases.)
This was a fairly difficult task to solve. The solution I provided consisted of a negotiation class with virtual methods, and a ton of inheriting child classes each overriding the virtual methods to represent the correct logic. the negotiation evaluation code is a coroutine that is written in the base negotiation class and calls the virtual methods. Every child class then calls this base class, and the cool thing is, the base class then calls the overridden methods, enabling the custom code in the child classes to work. Negotiations were logically structured into multiple steps: first, an offer is made. the opposing negotiation partner then uses a method that evaluates an offer. the outcomes are either accept the offer, deny the offer completely which would end the negotiation, or providing a counteroffer, which is basically the first offer, and the logic starts anew this time with the opposing party evaluating. because the evaluation methods and the counter offer methods were overridden, each negotiation implementation could have completely independant and different logic for making these decisions. This is terrible design for a programmer to work with, but a great way to solve complicated gameDesign requirements.
An Object Pooler implementation that stores the data of the displayed table in a dictionary and updates only the visible entries. it is optimized to unload the entries that leave the display, and load only the entries that enter the display, making it possible to display tables with over 60000+ entries without any lag. the Object Pooler is using a delegate to update, making it easily adaptable to new tables, or even other systems.
A Kicker sorting system for the kicker tables. The Kickers in Anstoss 2022 have a lot of different values that the user can view. naturally, a user would like to sort the kicker tables by these values, so I implemented a sorting method that would make it possible to do just that. My goal was to write a system that was easily expandable to encompass new values, and easy to setup and connect to a new table.
What I am familiar with
- JSON, xml
- git, SourceTree
- Unity GameEngine
- Photoshop, GIMP, CLIP Studio paint, Illustrator
- Autodesk Maya, Blender
- Substance Painter, Substance Designer
- Premiere, After Effects
- Ableton Live, Reaper, Wwise, FMOD
You can see some of my previous projects, and read about how they were made. I would love to add your project to the list below.