I am looking for a new studio to call home!
Professional Summary:
I am seeking a position as a Gameplay Programmer or Generalist, either remote or in the Boston MA area. I have experience in developing Gameplay, AI, and Tool Dev and am proficient in Unity and Unreal.I have worked on two fully released commercial products and have also released several of my own projects and repositories on GitHub.
Commercial Projects
Unity3D Point-And-Click Game
Commercial Project
This is an escape room game designed to analyze a team's communication skills throughout the experience. Teams must read clues, solve puzzles, and interact with objects to escape each room before the timer runs out.A lot of time was spent profiling and optimizing the game mechanics to ensure that the game is visually pleasing and stable across our WebGL target platform.
Game Of Clones
Agency Secrets
Unity3D Point-And-Click Game
Commercial Project
An escape room game designed to analyze teams' communication skills throughout the experience. Teams read clues, solve puzzles, and interact with objects to find a way to escape each room before the timer runs out.The mechanics were created and optimized for our target platform, WebGL.
Projects
Weight Of Gold
Unity Project
With your new shady business partner, you can transform enemies into precious gold at his shop. Use your loot to power up your throwable concoction and uncover the ancient secrets buried beneath the sands.
I was tasked with creating powerful abilities and the world generation.
The world generation uses the Wave Function Collapse Algorithm while the abilities were a custom system based on Scriptable Objects.
In this project I was able to achieve:
- 5 player effects
-6 Potion Effects
- A Fully customizable World Generation system with spawning rules and conditions
Unity3D Prototype Boomer Shooter
An idea that was concepted of the theme of "Summoning". I wanted to feel like you were actually summoning something by drawing glyphs. I concepted the idea that I wanted the player to draw on the screen to summon guns that they could then use to destroy their enemies.
The prototype contains:
- 4 guns
- 2 Spells (Open, Xray-Vision)
The UnSummoner
Shadow Beasts
Unreal Engine 5 FPS
Pirate Software Jam
In a world overtaken by darkness, you, your flashlight, and your lighthouse are the last beacon of hope.Collect supply drops and use light disintegrate shadow beasts that strive to consume this world. And whatever you do, do not let the battery die.This game was done for the 2024 Pirate Software Jam. Completed over the course of 2 weeks.
Unity3D Fishing Mystery Game
Team Project - Cozy Autumn Jam
You're a fisherman in a cozy forest town. You spend all day by the lake, casting and reeling them in. That is, until someone dumps all their garbage in the lake. Talk to the cute animal folk to puzzle out who may have done it - all while fishing up clues from what they say
Features- 8 silly and unique characters to meet
- Day/Night cycle
- A tiny open world to explore
- 9 outstanding pieces of trash to collect
- 9 adorable fish varieties
- 1 reel mystery afoot, er, afish!
A Reel Mystery
Midnight Harvest
Unity3D FPS/Top Down Hybrid
Ludem Dare 52
Midnight Harvest is a Hybrid TopDown/FPS game. The goal is to survive as long as you can against hordes of monsters coming through portals. At your side is an arsenal of plants that you can use as ammo. Each with different effects and abilities!Be careful though, sometimes your crops aren't always safe.You need to think like a farmer and to do that, remember these rules- Don't shoot at the crops
-Don't blame the crop for not growing fast enough
-Don't uproot crops before they've had a chance to grow
-Choose the best plants for the soil
-Remove weeds
-Remember you will have good seasons and bad seasons - you can't control what comes out of those portals
Demon Delivery Service
Unity3D Parkour Action Game
Ludem Dare 53
Demon Delivery Service (D.D.S) is a first-person parkour system with a focus on procedural dungeon generation. It features a full modifier system that affects both you and the rooms that spawn.As an employee of DDS, your task is to find lost scrolls in Hell and deliver them back safely. You will traverse through an ever-changing Hell, jumping over lava, grappling your enemies, and figuring out how to get to the next area. After delivering the scroll, DDS will reward you with more power, making it easier to trek through and make your next delivery.
Unity3D ARPG Game
Team Project
Mythgrove is a rogue-like dungeon crawler where players can go dungeoneering with their friends. The game begins when the player discovers a secret forest with a dungeon entrance and soon realizes that the legends of the yearly spirit dungeon festival are true. The player is the only human in this festival and must attend the sport of dungeoneering to enhance their fame and experience.Throughout a variety of dungeon terrains, the player must rely on their battle skills to enhance their weapons and prove their worth in the festival. As the Lead Programmer, the largest contribution to the project was coding the procedural weapon mesh generation system, UI, inventory system, and multiplayer networking using the Mirror Framework.The game is available for free on Itch.Io.
Mythgrove
Unity3D Game Mechanic Recreation
Personal Project
This project aims to recreate the turn-based battle system featured in "The Legend of Dragoon" and its unique timing-based combo sequence, adding an additional layer of complexity.
To achieve the combo-based sequence of attacks, a custom battle system was implemented. A custom Character Controller was also developed to control the player's actions. Additionally, a custom Character Object system was created to allow developers and designers to easily edit the timings and damage multipliers of combos with animations.
Legend of Dragoon Combat Remake
Unity3D Game Mechanic Recreation
Personal Project
This project is a recreation of the gameplay mechanic from the game Control. It was created to explore how to easily manipulate UI in world space using DoTween, while also learning how to properly optimize physics and object breaking. The project ended with a DoTween system and optimized physics with breakable crates/barrels, as well as animated UI in world space.
Control: Telekinesis Mechanic Remake
Prototypes
Unity3D Adventure Game
Actively developing a 3D adventure game in a beautiful rendered forest where you fish, take pictures of animals, fill out a journal, go on a scavenger hunt.Creating all the mechanics such as the AI, fishing, picture taking, UI.Also using assets to help with the feel/look of the game such as the Quibli Shader, Bakery, Rider Flow, and the Odin Inspector so that I may create tools for my designer.
Pickford Pines
Custom Ecosystem AI Behaviors
Personal Team Project
Survivor-Like with Crafting
Unity3D Game Mechanic Recreation
Personal Project
Created to develop a Vampire Survivors-esque system with the twist of everything needed to be crafting. I wanted everything to be manipulated such as-Bullet Movement
-On hit effects
-Effects that happenend every some odd seconds
-EtcIn the end, I developed a module system that allowed Designer's/Developers to create any effect they wanted and easily implement it in game.
Game Jams
Jam - WWI November 2022
Mini Jam Theme: 5 Second Gameplay
2 Hour Game Jam. Made a Warioware style mini game with randomized levels. Wanted to make a game where the only action was fire a bullet and hit the apple. The catch was each rectangle that a bullet collided with changed the properties of the bullet.With only two hours, I went with simple sprites and let the gameplay take over. I wanted to add more effects, but ran out of time as I was too focused on level generations to make each level beatable.
5 Second Game Loop
Unstable Rockets
Jam - WWI October 2022
Mini Jam Theme: Unstable.
2 Hour Game Jam. Since the theme was unstable, I created a system where you could not control a rocket launcher. Each rocket that was generated, picked a mutation that it acquired. It could Pick 1-4 mutations. While the whole system could take any kind of mutation. Within the time frame, I was able to create 8 different movement mutations.I had to create a serialized system so I could store non-monobehaviour scripts in an array so that when a rocket was created, it would create a copy of one of those serialized mutations and attatch it to itself.
The Beginning
When the Weight Of Gold was being concept-ed, The team wanted to create a unique concept where being over powered would result in bad things happening. So we knew that we wanted to entice the player with powerful abilities, however I also wanted to let the player slowly get stronger just by killing enemies and picking up things around the map, this is where the idea to make the map procedural came into mind
Map Generation
If you are curious about the in depth, super technical overview of the generation, you can check the article over at my Tech Blogs section!
Quick Overview:
In order to accomplish my world generation. I used the Wave Form Collapse algorithm. While also putting in a custom rule system for environmental objects and also allowing the ability to place pre-made structures before the generator builds the world and will proceed to build around it
Potion Abilities
The potion abilities are the other main future of the game. I wanted to create unique effects so the player
would be tempted to get them as they were powerful!All of the abilities run off of Scriptable Objects
and were designed and programmed so that enemies could also possibly use them in the future.
The Beginning
When the The UnSummoner was being concepted, I wanted to create a unique concept that would be "Easy to Learn. Hard To Master". Several base ideas ran through my head and I ended up with making the players draw their weapons.
This gives the players the sensation of summoning powerful guns to complete the prototype's main objective. Killing the enemies.
The $P Point-Cloud Recognizer
This is the algorithm I use to compare Pre-Made Gestures to what the player draws."The $P Point-Cloud Recognizer is a 2-D stroke-gesture recognizer designed for rapid prototyping of gesture-based user interfaces. $P is the first point-cloud matcher within the $-family of recognizers, which includes $1 for unistrokes and $N for multistrokes." - Radu-Daniel VatavuMore information can be found hereHowever in short:
You compare two sets of points in tandem. One set is in a list with other per-determined points while the other set is something is made at that moment. The algorithm will then move through all the per-determined sets of points.It will then return whichever "gesture" had the highest confidence rate.
The Drawing
The drawing mechanic is done using multiple systems that are broken down like this:
- Input Actions that determine where the mouse is when you click which then records that position of the mouse.
- A Gesture System that takes all the positions that the mouse was at and feeds it to an algorithm that compares points of the drawing to a premade drawing. The more accurate the drawing, the more confident that algorithm will be
-Passes the result to a Manager that then passes the player the gun they attempted to summon
Returning The Gun The Player Spawned
The Code on the left returns what the gestureResult was given from the PointCloudRecognizer
Creating The Gun and Spells
The Spells and Guns are stored under 1 ScriptableObject
called SpellData
. In the object there is a enum
that flags if its a gun or a spell. This determines what GlyphManager
does when it recieves the result. If it's a spell there is a
function that get's called within the SpellData
object. If it is a gun, it just spawns a GameObject that has it's own Gun system.
Description
Shadow Beasts was created using the Unreal Engine over the course of 2 weeks for the Pirate Software Jam. Crafted by a dedicated team of:
1 Programmer
1 Tech Artist
1 Sound Engineer
1 3D Modeler
The theme of the jam was of: "It's Spreading"
While the team first struggled to come up with ideas, we had decided to land on something simple and unique. Much like Alan Wake we wanted to use light as the main feature.
Thus Shadow Beasts was born!
My Contributions
Through out the Jam my main contributions were the two main mechanics of the Game.
- The Lighthouse
- The Shadow Monster
The Lighthouse
The team wanted the lighthouse mechanic to be the central mechanic of the game.My First Goal with this was for the player to just rotate in one direction and have it move the light. When this was completed. The next thing I wanted to do was add the ability to move it in the direction you were facing. This is where it got tricky, as there were many solutions, however, most of the solutions made it feel very rough. I dug into some examples of how other people might have done this, and in the end decided to do my own solution and use Vector Math. Using my own solution, I was able to control how smooth/rough it would be to mimic moving something heavy while also taking in account the player's velocity.The solution can be found under the gif to the right
Shadow Monster
We wanted the shadow monster to be sneaky and fast. However we also wanted the player to use the flashlight whenever we shined the flashlight on the monster. So I used Unreal's Behaviour tree to determine the state of the shadow monster between it wandering, chasing the player, or being disintegrated.
Achieving The Lighthouse Rotation
The First thing I had to do was get the player's velocity. This was done using the Dot Product of player's Velocity with the Forward Vector of the Player, I then normalized it.This gave me the result of 1 if moving forward and a -1 if moving backward
The next step in this process was seeing if you were on the right or left of the object. This was done so I knew which way to rotate on the Z-Axis. This was normalized again so I was working with 1 and -1. This is imperative down the road.
I took the previous step, and multiplied the Vector of the player by the side we were on.
Before I made any more calculations, I wanted to also determine the look at point (where the player would look) while rotating the levers.
This was the final calculation I needed to. Once again using the Dot product, I got the forward vector of the light and compared it to the player. I then normalized it again so would get a 1 or a -1
This was putting everything together. After multiplying all the 1's and -1's into the Variable NewZ. I then added it to the relative rotation by lerping the old position to the new position in the "Add Relative Rotation" graph
The Whole Blueprint
The Final Result
Description
Introducing 'A Reel Mystery,' a captivating creation born during the lively 2-week event, the Cozy Autumn Jam 2023. Crafted by a dedicated team comprising:1 Visionary Producer
2 Skilled Programmers
1 Talented Tech Artist
3 Creative Artists
2 Masterful Sound DesignersThis project was nothing short of ambitious, driven by the desire to craft not just a game, but an experience—an enchanting world designed to be both beautiful and deeply relaxing. The goal was to create something that could be cherished long after the main story's completion, with new and delightful content waiting to be unlocked, ensuring players' enjoyment persists even after they unravel the game's initial mysteries.
My Contributions
I had the pleasure of creating the following mechanics of A Reel Mystery- Fishing
- Full Dialogue
-Cutscenes
- NPC's that walk around
Fishing
Crafting the fish system was a quest for simplicity intertwined with engagement. My aim was to avoid overwhelming the player, opting instead for an experience that was easy to grasp yet deeply involving. Delving into a plethora of fishing mechanisms in various games, our team discovered inspiration in the tranquil waters of Moonstone Island. Drawing from this inspiration, I initially mirrored the circular movement mechanic, delicately guiding players over the fish.Yet, I craved innovation. To inject excitement, I introduced Quick Time Events, adding a dash of urgency to each encounter. The thrill of swiftly responding heightened player immersion. Then, as a satisfying crescendo, the triumphant moment when a caught fish gracefully leaped out of the water, delivering a profound sense of accomplishment.In the end, the fusion of these elements birthed a system that not only met but exceeded my vision. Its elegant simplicity and thrilling engagement make it a cornerstone of our game, leaving me immensely satisfied with the outcome.
Dialogue
When the team embraced the idea of incorporating dialogue into our project, I envisioned a dialogue system reminiscent of the charming interactions in Animal Crossing. In this vision, I saw animated sequences seamlessly woven into conversations, bringing characters to life with expressive gestures and emotions. Additionally, I was keen on empowering players with choices, allowing them to influence the direction of the story. To bring this vision to fruition, I meticulously designed a comprehensive Dialogue system. Within this framework, animations found their purpose, enriching dialogues with visual depth, while choices acted as catalysts, branching out the narrative into diverse and engaging pathways. This holistic approach not only elevated the storytelling experience but also injected vitality into our game!
Cutscenes
These charming vignettes were strategically scattered throughout the game to enhance the player's experience. To seamlessly incorporate this feature, I ingeniously integrated it into our Dialogue system. This fusion not only ensured ease of use but also transformed mere conversations into dynamic, visually engaging experiences, adding layers of excitement and depth to the gameplay.
NPC's
Initially, our team had opted for static NPCs, but I had a vision: to breathe life into our game by allowing NPCs to roam freely. Despite the need for further refinement, this decision undeniably enhanced the game's ambiance. Witnessing NPCs moving about added a vibrant, dynamic quality to our camp, making the entire environment feel genuinely alive.All it required was harnessing Unity's NavMesh feature and investing effort in configuring their movement abilities. Through adjustments of their navigation paths, we achieved the dynamic NPC behavior that breathed vitality into our game.
Description
The Demon Delivery Server was created for the 72 Hour Game Jam Ludem Dare 53.It is a very over the top ambitious project that I am happy to say was feature complete barring some bugs.I led a team of 8 with the intention of creating something over the top. More over the top then the previous Ludem Dare game, Midnight Harvest. This was the result. A fully Physics based Parkour game with a procedural dungeon, with a modifier system that alternates how the dungeon spawns, how enemies will interact and how you will preform
My Contributions
- Led a team of 8 developers-Programmed the Physics Based Player Movement- Programmed the grappling hook mechanic- Programmed a fully procedural dungeon system.-Programmed a Modular Modifier system that interacts with every part of the game-Collaborated with the Designers on the look/feel of enemies, the look and feel of movement
Player Movement
One of the main goals the team had was to incorporate physics-based movement, like in Quake. I assigned myself the task because I thought it would be a fun thing to learn. Needless to say, I spent a lot of time tinkering with the values of the custom Scriptable Object I created to get the movement just right. There is still a lot of work to be done, but I am happy with the result. Adding the grappling hook was the most fun I've had, and it complemented the movement mechanics well.
Modifiers
I wanted to add replayability to the game. So I introduced a Modular Modifier System. This system introduces new ways the player will interact with the dungeon, how the dungeon spawns, and how enemies work. Through out the Jam I was able to program in 12 modifiers.
- Lower Gravity
- Bouncy Ground
- Slippery Ground
- Spawning Enemies based on health remaining
- Enemies become Lighter
- Spawning more grapple points in room
- SpawningThrough using the Odin Inspector and it's custom serialization system, I was able to easily do plug n play modifiers which which led to me creating so many modifiers in the short amount of time
Dungeon Generation
The next big thing I contributed was the dungeon generation. The system itself was a very simple system.
There was the entire Dungeon Builder which handled building the rooms by using the Room Template Scriptable Object I had created. Which held a Room script, the weight of the room (how often it could spawn).The Room Script itself was the brains of the room. Each room had an objective that you had to complete to move on to the next room, and held everything that the room needed to spawn/achieve it's goal.
Post Mortem
This is one of those cases where everyone did fantastic work, but when it came time to put everything together, it fell apart. There were several factors at play, but it can be boiled down to being out of scope. Despite this, I am proud of what I achieved and wish the game had been released in a better state.
I was shocked that I was able to get everything I wanted done while leading two programmers (including myself), two designers (a modeller and a concept artist), one tech artist, and two sound designers. I want to give props to those who led. It's very hard to lead people and keep everyone on the same page.
In the end, I'm happy overall. I'm disappointed, yes, but I learned a lot and am excited for the next jam!
Midnight Harvest
Role: Team Lead/Unity Programmer
Description
Midnight Harvest was created for the 72 Hour Game Jam Ludem Dare.It is a very ambitious game that I am glad to say was fully finished with everything the team set out to do.I led a team of 7 with the intention of creating something over the top. This gave birth to Midnight Harvest a hybrid between Top Down and FPS. The main goal of the game is to survive as long as you can, Harvest crops to get seeds to plant more, or convert the seeds to different kinds of ammo that do different things, and in between waves: switch to top down to re-plant crops and plan for your next set of wave
My Contributions
- Led a team of 7-Programmed the player movement- Programmed the FPS Mechanics- Programmed 9 Custom AI behaviors (3 Enemies each with 3 variants)- Programmed a Save System that saves stats after every run- Programmed the growing of the crops-Collaborated with the Designers on the look/feel of enemies-Programmed custom UI Behavior to differentiate Top Down/FPS
Post Mortem
Plain and simple. 72 Hours is NOT enough time for something like this. But we did it. I am very very proud of my team for what we created. I lost several hours of sleep.That being said I learned a lot. Especially leading a team. Which I want to talk about.
Plain and simple: 72 hours is NOT enough time for something like this. But we did it, and I am very proud of my team for what we created. Even though I lost several hours of sleep, I learned a lot about leading a team, which I want to discuss.
I led a team of 7 people, including 2 programmers, 3 artists, and 2 sound designers. I was able to keep everyone on track by giving them tasks and playing to their strengths. I knew what I wanted and planned accordingly. I also picked up the slack where it needed to be picked up. For myself, I did a lot of coding that was out of my comfort zone, such as AI and Grid Based things, and I learned a lot. I also helped out with the growing process. Whenever the other programmer needed something, I was there ready to help. I would love to work with this team again and make something this ambitious. We connected well, had a lot of fun, and it reminded me why I love doing this.
Game Of Clones
Role: Unity Gameplay Programmer/Optimizer
Description
An escape room game with the goal of analyzing team's communication skills with each other throughout the overall experience. Teams will read clues, solve puzzles, and interact with objects within the game to find a way to escape each room before the timer runs out
My Contributions
- Handled programming mechanics of the game and worked with a team of designers and programmers.
- Created the mechanics for the rooms, which were networked using the Photon Engine in Unity.
- Worked with the designers to create cut scenes using the Unity Timeline feature.
- Created tools that the players would use throughout their experience with this game
- Optimized For WebGL to achieve a large rendered world at 60 Frames a second.
Challenges
- Led the upgrade of the of the Unity version in the overall project.-Worked around Webgl and it's limitations-Generated random elements and networked over the Photon Engine
Agency Secrets
Role: Unity Gameplay Programmer
Description
An escape room game that, with the goal of analyzing team's communication skills with each other throughout the overall experience. Teams will read clues, solve puzzles, interact with objects within the game to find a way to escape each room before the timer runs out
My Contributions
- Handled programming mechanics of the game and worked with a team of designers and programmers.
- Created the mechanics for the rooms, which were networked using the Photon Engine in Unity.
-Created a Lobby system that allowed players to join and ready up before the game started
- Worked with the designers to create cut scenes using the Unity Timeline feature.
- Created tools that the players would use throughout their experience with this game
Challenges
- Designing the backend mechanics that would be used in the current game and future games-Worked around Webgl and it's limitations-Generated random elements and networked over the Photon Engine
Description:
A study in battle mechanics; this project is a recreation of the turn based battle system featured in "The Legend of Dragoon". The battle system also boasts a unique timing based combo sequence, which adds an additional layer of complexity.
Legend Of Dragon Combat Remake
Combat Research
The Goal
The goal of this project was to research how the combat functioned in the famous Playstation 1 game, The Legend of Dragoon, and learn how to recreate it's timing based combat system 1:1.
The project not only ended with my intial goal completed. I was also able to create a modular plug n play system so that anyone could take my code and put it in their game. I was able to utilize the Odin Inspector to it's full potential by using it to create my own serialized Character Controller scriptable object. While also creating my own animation system that handles the combat animations.
Challenges:
The first challenge that I ran into while creating this project, was researching how everything synced with each other, from the beginning running state all the way to the end. I initially spent a few days researching and watching YouTube videos frame by frame to figure out the timing. Which then became the second challenge.Timing plays a huge role in this type of combat, from the timing of the player running to the enemy to the timing of the button hit. Everything had to be programmed to be able to use these really tight timings.
The final challenge that I had set out to solve, was creating a modular system that was close to plug n play as I could get it. While I did achieve this, it requires some dependencies that some users my not have.
Post Mortem
I set out to create this combat, as it is near and dear to my heart. One of the reasons why I wanted to do what I do. And I am glad to say that I achieved what I wanted. There is definitely room for improvement, such as optimization, refactoring to make the code cleaner. I am proud of the system I created and the amount of time I spent going frame by frame to make sure timings were correct was a pain, but worth it in the end!
Control: Telekinesis
Mechanic Recreation
The Goal
The goal of this project was fairly simple, take the famous mechanic, Telekinesis, from the hit game Control, and re-create it from scratch. This includes, but not limited to: UI, Animations, the actual throwing mechanic, chain reactions.I ended the project achieving what I set out. Recreate the mechanic with everything I wanted.
Mechanic's Coded:
TelekinesisExploding CratesExploding BarrelsMoving Target UI
Challenges:
Having the object "Pull" itself to the Hand and look like its floatingI worked around this by first doing Vector3.Lerp. However I wasn't getting the result I wanted, so I used DOTween instead, which gave me the result I wantedAdding force and having the object going towards the direction of the cursor point in the middle of the screenThis was for some odd reason the "hardest" thing for me to do. And went through several iterations to get something that felt good, and went in the direction I wanted to do. I ended up just shooting a Raycast from the middle of the screen. and then AddForce to the relevant point that was hit minus the position of the object in hand.
Post Mortem
It was a busy week for me, so what I got done, is pretty awesome. I am glad I improved my skills, but the huge takeaway with this, was I should not use Unity's Third-person Controller. While it was great and saved me A LOT of time. I was locked into a lot of things. I;e The new input system, I had to use very specific animations, I had to change some things about the character controller. So starting next week, I will probably build my own universal character controller. That way I can do what I want and not have to mess around with pre-made things. Also I learned I'm not great at art!
Unity Squishy Sequencer
Unity's Timeline/Animator are annoying to work with, especially when trying to call events, I've tried to mitigate this with asset that I've made.... Click here To learn More
Getting Players Hooked on a Good Fishing Minigame
“What makes fishing fun?” is the question I asked myself when developing a two-week long Game Jam. My team and I had gone back and forth constantly trying to figure out the question “How do we make fishing cozy and fun.” We did research....Click here To learn More
Getting Players Hooked on a Good Fishing Minigame
Recently for a project, I was tasked with generating a dungeon. Upon talking to the designers, they settled on wanting the environment to take place in the desert.
Now making a procedural generated dungeon is a pretty common need and most devs have at least looked at how one might get made. But there are so many algorithms to choose from....Click here To learn More