UNITY & C#
EXPERT DEVELOPER
Vancouver-based game programmer specialized in optimization and profiling, striving to elevate game systems to their peak performance. Expert in harnessing the power of procedural generation to create dynamic, immersive user experiences.
PORTFOLIO
Wall Bound
Architecting Efficiency With Data-Centric Programming
To play, press and hold the enter key. To stop, release the enter key.
This soon-to-be-released game is the result of merging the strategic depth of tower defense with the creative freedom of city-building within a hexagon-based world. The game leverages a data-oriented architecture, which proves indispensable for dynamically updating expansive maps and in-game changes with remarkable efficiency.
Data-Oriented Architecture: Handling the complexity of extensive maps reacting to player actions can significantly impact performance, especially when integrating complex systems like height maps, tree maps, and building maps. To avoid performance losses the game employs a data-oriented architecture, ensuring that this data updates dynamically and efficiently. Hash sets, memory locality and temporality are key to enable such complexity.
Procedural Generation and Dynamic Terrain: The terrain of the game world is not static; it is unique through each playthrough thanks to procedural generation techniques. I developed algorithms that dynamically generate meshes to form the game's terrain, ensuring that the landscape is both aesthetically pleasing and strategically viable for gameplay. This also opens the doors to fun gameplay elements, like deforming terrain in runtime.
Procedural Generation of Buildings and Vegetation: To prevent the game world from appearing too rigid or grid-like the procedural logic extends to the placement of buildings. This ensures that when walls are placed, connecting seamlessly with adjacent walls and confirming to the terrain's contours. Houses are distributed in a manne. In the environment, trees in denser forests grow larger and more lush, creating the impression of a living world. These meticulously designed details are pivotal so that your cityscape feels organic and spontaneously developed.
Intelligent and Adaptable AI: Traditional tower defense games often rely on predictable enemy patterns, but I aimed to introduce variability and adaptiveness to enemy behavior. As enemies draw closer, their interactions become more varied, providing a layer of complexity to the defense strategies players must employ.
In this game I tried to create a compelling game experience but also to demonstrate the potential of data-oriented design and procedural generation. Which has been pivotal in achieving the game's visual splendor and immersive feel. Through the synergy of these technologies, the game not only ensures that each session unfolds on a dynamically updated map but also crafts a world rich in detail and variety. Height maps shape the contours of the landscape, tree maps embroider it with lush vegetation, and building maps layout the framework of civilization—all drawn with the precision that only a data-oriented system can provide. This foundation, rooted in memory efficiency and algorithmic performance, guarantees that the game's complexity never compromises its smooth execution.
HP Curiocity
Building Lightweight Systems for Low-End Devices
To play, press and hold the enter key. To stop, release the enter key.
HP Curiocity stands as a testament to the power of collaboration and technical innovation, brought to life through a partnership with Hewlett Packard. This project presented me an exciting challenge: to rejuvenate a legacy codebase and transform it into a model of efficiency and scalability. My role was pivotal in this transformation, focusing on rearchitecting the game to a centralized data-oriented approach that significantly enhanced performance and user experience.
Revitalized Codebase: Central to the project's success was the overhaul of the existing codebase. By transitioning to a centralized, data-oriented architecture, I was able to achieve a remarkable 47% reduction in RAM usage. This not only streamlined the game's operations but also set a new standard for resource management within our development practices.
Performance Enhancements: The upgrade of the legacy system had a profound impact on the game's performance, notably increasing the frame rate by 30 FPS. This improvement in fluidity was the result of leveraging memory locality and temporality, and the responsiveness greatly enriched the gaming experience, making HP Curiocity more engaging and enjoyable for users.
Optimization Milestones: Implementing advanced optimization techniques, such as culling, pooling and procedural generation, was a key strategy in reducing the build size by 59%. This not only made the game more accessible by lowering the download burden but also streamlined updates and maintenance processes.
Platform Profiling and Benchmarking: A comprehensive profiling and benchmarking effort across WebGL, Android, and React Native platforms led to an impressive 82% reduction in loading times. This achievement was crucial in enhancing the accessibility and user satisfaction, ensuring that players could dive into the game with minimal delay.
AI System Overhaul: A significant milestone was the implementation of an ultralightweight urban-environment AI, replacing older, less efficient systems. This new AI not only improved the game's dynamics with simpler yet effective pathfinding but also contributed to the overall reduction in resource usage, making the game even smoother for players.
HP Curiocity exemplifies the impact of strategic technical improvements on game development and performance. Through diligent work and a focus on innovation, the project not only met but exceeded the expectations, setting a new benchmark for game development in collaboration with industry partners like Hewlett Packard.
Eldritch
Empowering Players With Dynamic Mesh Building
To play, press and hold the enter key. To stop, release the enter key.
Eldritch merges the surreal with the interactive, offering players an unparalleled journey through landscapes inspired by psychedelic rock. The game stands out through its innovative use of real-time user-generated meshes for dynamic path creation, immersing players in a puzzling world that harmonizes with their actions.
Dynamic Gameplay: At the core of the game's challenging puzzles is the innovative use of runtime-generated meshes, which players themselves build to navigate the puzzling world. This novel mechanic empowers players to creatively solve obstacles, providing a unique experience with each playthrough.
Efficient Development: An event-driven architecture facilitated rapid prototyping and iterations, ensuring a creative and agile development process.
Seamless Experience: Asynchronous scene loading achieves smooth transitions between levels, maintaining immersion without interruptions.
There were many challenges that were overcomed, balancing technical demands with engaging gameplay. From mesh generation to ensuring intuitive player interactions and smooth level transitions, innovative solutions were crucial in crafting the immersive experience Eldritch offers. Here are the main areas we focused on:
Mesh Generation and Performance: Implementing a system where players could dynamically generate meshes in real-time presented a significant challenge. Balancing the flexibility of mesh creation with the technical requirements of the feature required extensive testing and optimization so that the user content is always valid.
Designing Intuitive Player Interactions: Crafting puzzles that leveraged the mesh generation mechanic in a way that felt intuitive and engaging to players was captivating. It demanded multiple iterations on level design to nail difficulty and the satisfaction of solving puzzles through your own paths.
Maintaining Immersion: Ensuring seamless transitions between levels with asynchronous loading was crucial to maintain the immersive experience envisioned for Eldritch. This required innovative solutions to pre-load assets efficiently and manage memory without disrupting the flow of the game and resulted in unexpected, fun scenary changes.
Creature Corp.
Mastering Clean Animations
To play, press and hold the enter key. To stop, release the enter key.
Creature Corp is a game forged in the creative fires of Brackeys Game Jam 2024, in which players embody a mischievous monster lurking within the shadows of a child's closet. Crafted by the imaginative minds at Keyhole Team, this game weaves a playful tale that unfolds in the quiet of a child's room.
Procedural UI: The procedural UI dynamically displays a hand of cards that dance to the rhythm of the gameplay, creating a seamless and engaging player experience.
Dynamic Animations: Coded animations bring each play to life, enhancing the 'game feel' with smooth, responsive movements that capture the essence of the monster's antics.
Visual Effects and Interactive Storytelling: The majority of my work was with a series of visual effects that elevate the storytelling, like the charming specter that springs forth from played cards, signalling at the monster's past action. These effects are not just for show; they're, signaling the impact of each action and the child's rising alarm.
In this card game balance is the law. Players must manage their hand, playing scare cards to keep the thrill alive. The goal is to maintain the perfect scare meter level — ensuring the child is neither too scared nor too comfortable.
Deliverance
Optimizing Physics Based Systems
To play, press and hold the enter key. To stop, release the enter key.
Deliverance CORP. immerses players in the complex world of a delivery mega-corporation, where they tackle the role of managing the sorting section. This single-player puzzle game challenges players to allocate packages using increasingly sophisticated methods to avoid termination, making every decision critical.
Advanced Object Optimization: The heart of Deliverance lies in its advanced optimization techniques, including culling, pooling, and Level of Detail (LOD) systems, designed to handle numerous objects simultaneously without compromising performance. These technical innovations ensure that players experience smooth gameplay, even in scenarios bustling with activity.
Physics-Based Interactivity: At the core of the gameplay is a semi-realistic physics system that allows for natural interactions within the game world. Players can manipulate objects with a satisfying heft and momentum, engaging with levers, ropes, and pistons in ways that feel intuitive yet challenging to master. This system is finely tuned to balance the fun of puzzle-solving with the authenticity of object behaviors, creating a rewarding and immersive experience.
Procedural Audio for Immersion: Complementing the visual and physical realism is a dynamic audio system that brings the game's environment to life. With positional sound and smart prioritization, the system ensures that more significant sounds take precedence, enveloping players in a truly immersive soundscape that responds to their actions.
Developed in Unity using C#, Deliverance CORP. exemplifies the seamless integration of robust design principles and architectural patterns. The game's event-driven architecture, coupled with various design patterns, lays a foundation for scalable and flexible development, facilitating rapid iterations and expansions.
Challenges and Innovations: Implementing the physics-based interaction system presented a unique challenge, requiring a delicate balance between realism and playability. The innovative use of dynamic force balancing and invisible springs allows players to engage with the game's world in a manner that is both intuitive and deeply satisfying.
Through Space
Seamless Asset Streaming
To play, press and hold the enter key. To stop, release the enter key.
Through Space is a captivating mobile game crafted in the Unity engine, utilizing C# to bring its vibrant universe to life. This game stands as a prime example of technical and creative engineering, designed to deliver a seamless and engaging experience across a spectrum of devices, including older models. The core of its development focused on ensuring smooth gameplay through optimization techniques and a robust architectural framework.
Optimized for Universal Performance: At the heart of Through Space's development was a commitment to accessibility, ensuring that the game runs smoothly on a wide range of devices. Techniques such as asset streaming, asynchronous scene loading, texture atlases, and rendering optimizations were meticulously implemented. These strategies not only enhanced the game's performance but also ensured that transitions between levels were seamless, without the interruption of loading screens or delays.
Flexible and Reusable Game Architecture: The game's architecture is built on a Component-Based system, allowing for a high degree of modularity and flexibility in game design. This approach enables the reusability of code and components, streamlining the development process and enhancing the game's design coherence. Complementing this, a Data-Driven design pattern was adopted to facilitate easy adjustments and iterations on game mechanics and content, empowering designers and developers alike.
Procedural Interfaces and Dynamic Audio: Through Space features a procedurally generated user interface (UI), offering a dynamic and intuitive navigation experience that adapts to the gameplay. The game's sound design and audio management are equally dynamic, with a soundtrack that evolves with the player's progress and interactions, enriching the immersive experience of traversing the cosmos.
Engaging Content and Accessibility: The game boasts a comprehensive automatic save system, ensuring that players' progress is securely stored, allowing for an uninterrupted gaming experience. Published on both Itch.io and the Play Store, Through Space is readily accessible to a wide audience, inviting players to embark on an interstellar journey filled with intriguing levels and challenges.
This game is a prime example of how thoughtful design and technical innovation can come together to create a game that is not only visually appealing and engaging but also inclusive in its performance across various devices. Its seamless level transitions, procedural UI, and responsive sound design set a new standard for mobile gaming, offering players a smooth and immersive journey through the stars.
Dynamic Plate Tectonics Algorithm
To address the challenge of limited game maps in 4x strategy games I developed a plate tectonics algorithm to procedurally, and dynamically, created realistic terrains. The result, built with C# and Unity, offered a continuously playable and visually appealing terrain.
The plate tectonics algorithm iterates through a grid of hexagonal cells and calculates interactions based on tectonics rules. The simulation is loosely based on the Navier–Stokes for fluid dynamics. It is cell-based and has the following emergent behaviours:
Divergence
Convergence
Transform boundaries
Subduction plates
The algorithm was inspired by 4x games. Its goal is to generate a geographical map that is playable during all its stages of development. All art assets are original. Built using C# and Unity Engine.
Wave Function Collapse Algorithm
Responding to the difficulty of having a populated dynamic game environment without underperforming this project developed a wave function collapse algorithm for hexagonal grids to update flora efficiently. The solution, built with C# and Unity, streamlined terrain customization, enriched gameplay and environmental realism.
This project implements a wave function collapse algorithm on a hexagonal grid. Very briefly, this type of algorithm can generate procedural patterns from a sample image. In this case, the patterns come from a custom list of viable cells, and the procedural patterns result from constraints set beforehand.
This is significantly useful in the generation of detailed vegetation and much more, for example:
New and current vegetation can easily be created or modified by creating a new prefab with different constraints.
Different types of tiles, like buildings, can have other constraints to reward players for good board placement. Tiles can be separated into categories, like land or aquatic.
The same algorithm can update the map in real-time and realistically simulate tile changes. For example, a vegetation tile may reflect a temperature change. A residential neighbourhood might change its appearance after a coal mine is installed in the adjacent tile.
The algorithm is advantageous for procedural generation, but one of its most remarkable applications is its capabilities with artificial intelligence. The algorithm substitutes complicated state trees in AI with a simple evaluation of the best action to make. With little computation, an AI can know the best move, e.g. on which tile to build or what tile to modify, and so on.
This project also includes a library for managing hexagonal grids using dictionaries, Original 3D assets; Procedural island terrain generation using different noises; Different layers of generated content to complement the WFC algorithm as temperature and humidity maps. Built using C# and Unity Engine.
Risk-like Strategy Game
North Shore is a published game on Itch.io for browser play. It is my most played game, with almost two thousand plays. The game was created to offer an alternative to long-running matches of Risk. Instead, it plays out quickly with much simpler mechanics. The goal is to conquer most of the north shore with your units.
The biggest challenge for this project was implementing an intelligent AI that would not slow down the browser. The result was four different 'enemy' AIs that play very quickly and change their behaviour throughout the game:
The 'red' player plays a defensive game and gets more aggressive towards the end but will counter-attack you.
The 'blue' player will always play defensively until it goes for an all-out attack toward the end game.
The 'yellow' player will always attack if they have at least a numerical tie; as the match goes on, it will only attack if they have a numerical advantage and will always counter-attack.
The 'black' player will constantly attack in the early game but will slow down and increasingly defend as the match continues.
Additionally, the structure of how the AIs were programmed offers an easy way to create more computer players with different behaviours using Scriptable Objects. The map is procedurally generated for every match and will always output something that resembles the ocean shore. All art assets are original. Music and sound effects are royalty-free. Built using C# and Unity Engine.
Room-Based Multiplayer Game
Missile Crisis is a work-in-progress online multiplayer game. It is heavily inspired by Battleship but played on land and with atomic bombs instead. It is published on Itch.io for browser play. It features:
Room creation of up to ten players.
Three characters to pick from.
Procedurally generated levels with dynamic sizing to accommodate more or fewer players.
This game was created with browser play in mind since its conception, therefore a decision had to be made to avoid the resynchronization caused by changing tabs or minimizing the web browser. Its architecture does not utilize a "master" player to synchronize everyone else. Instead, the game is updated with the data of the majority of players, the ones not AFK. All art assets are original. Music and sound effects are royalty-free. Built using Photon PUN, C# and Unity Engine.
ASP .NET RESTful API
Custom .NET Web API
SQLite database
Spaceship building tool
Uploading built spaceship to database
Retrieving spaceships from the database
C++ 3D Game Engine
This 3D game engine was built to achieve the basic features it needs to be functional. It runs on the command console. All the following features were written from scratch:
.OBJ support.
Camera movement.
Camera culling.
Perspective projection.
Lighting.
Shading.
Python Twitter Bot
Errant Probe is a Twitter bot that impersonates a space probe exploring our galaxy. It logs every celestial body it passes by. The flavour text is generated through a very simple mix-and-match procedural text generator. The goal of the project was to practice utilizing an open API like the Twitter API. Not all features of the API fit this project. Some features implemented were:
Deployment of the bot to a server service
Access to public APIs
Creation of threads on Twitter
Different text for the start, content, and ending of these threads.
Automated replies
C# WPF Software
This software was developed to aid the user in categorizing its pictures into different folders. The user may select the pictures to be organized; create tags that correspond to the folders each picture will be sent to, and use the tags to quickly categorize their pictures into these folders quickly.
This project also features a skippable tutorial that shows each functionality of the program and how it works step by step. It was structured using the MVVM architecture.