Hello, I'm Nathan, and I've been a game developer and programmer for many years, both as a hobbyist and a professional.

I've learned many tools and languages over the years, ranging from C to Lua and PHP. I've reached a professional level of Python with the Ren'Py engine, and I'm now transitioning to C# and Unity to build fun and exciting projects.

Programming portfolio

Table of contents

Unity projects

I'm learning Unity completely in public, every day for 55 days.

So far, I've worked on various aspects such as:

  • HTTP network code to retrieve data and asset from a server
  • Object pooling (both with Unity built in pool and my own implementation)
  • First and third-person movement and mechanics
  • Unit testing
  • Asset integration (2D, 3D, Audio...)
  • Animation management

Here are some of the concrete projects I've been working on:

A turn based combat with a flexible potion system

In order to demonstrate and push the CSV importer detailed in the next section, I decided to create a combat system that use the ScriptableObject generated.

One of the highlight is the inventory system, that implement at the user level drag and drop and tooltip display when hovering. On the code side, multiple overload methods allows adding items to a specific slot, or just to the inventory in general; if so, it automatically finds either the same object to stack it or a free spot.

Using inheritance, I repurpose the same logic to create an equipment slot that extend the functionality of the inventory slot (only allowing certain item type, for example).

The other big highlight of this demo is the potion system: when a potion is used, it adds itself as a component of the target, automatically plug into the main logic through delegates, and perform its logic when needed (damage the target, reduce the damage taken, skip a turn...), and finally delete itself once condition are met (after a number of turns, damage, or instantly after the effect has been applied)

Thanks to interfaces, the potion has exactly the same effect on both the enemy and the player, or any other element we would like to add in the game later on. This makes good use of the ECS architecture Unity encourages.

Potion effects can then easily be stacked without them caring about each other logic; this could be used beyond potion for spells, buff, and power-up.

This project told me a lot about modular design and keeping the code as decoupled as possible, and the great flexibility this discipline provide.

You can find the full source code of this project here (MIT License).

A script to import/export multiple ScriptableObject from a CSV file

I always prefer to have the option to modify things outside the editor, so I wanted to create a way to easily work with CSV and ScriptableObject combined.

This script, ran in the Editor via a menu, allows you to import multiple ScriptableObject (SO) from a CSV file, but also to export them back into the CSV once changes have been made inside the editor.

The implementations I saw online were tightly coupled to the target data, so I worked on making my script more flexible by the use of generics.
For example, the API for importing SOs from an CSV looks like this:

Import<[ScriptableObject Class]>("[CSV's name]", "[Folder that will contains the SOs]", "[Field used to name the SO]");

The ScriptableObject class must be part of a simple interface, just so I can run a constructor-like method with the data parsed from the CSV. Each SO is then responsible for handling and validating this data, which make the code way more organized, since the CSV handler doesn't have to care about which field are expected or the implementation details of each object.

If the SO has validated the data and initialized properly, it raises a flag and an asset is created in the correct folder.

This script allows the fast iteration of ScriptableObject, while not requiring for designers to manage and install Unity. This can really benefit heavy data games like RPGs, deckbuilders or Roguelike.

A good improvement to the code would be to pull the CSV from a Company's server or even Google Sheet with an API.

You can find the full source code of this project here (MIT License).

Each day, I'm posting my progress on my Mastodon account. This thread serve as a demonstration of how I learn and how fast I can pick up new tools and languages.


Work on commercial Visual Novel

I've been a freelance Visual Novel programmer in Ren'Py since 2020, and I've been hired on a multitude of projects, each with unique challenges.

Henchman Story, the biggest commercial project I've worked on

The biggest one is Henchman Story (2021), a superhero comedy adventure made by Marc Soskin who worked previously as a writer for games such as ARK: Survival Evolved and The Outer Worlds. The game was release on PC, Nintendo Switch, PS4/5 and Xbox, although I didn't take part in the ports technical details.

I was one of the two integrators on the project: I was responsible for implementing the story script and arrange the sprite expression to give life to the characters.

One of the first initiative I took was to write a python script to convert the story written in a screenplay format into a game ready script file. I shared the script with the team with instruction on how to use it, and it saved us a gigantic amount of work and allowed us to respect our delay.

Over many different projects, I had the chance to write more complex converters tailored to the team's need, but also develop systems in Python for Ren'Py, such as a schedule system, inventory, and shop.

I'm also known for integrating gorgeous UI, taking care of adding subtle animation, details and polish to make the game feel more professional.

Demonstration UI integrated, with great attention to detail

Many times I've pushed the boundaries of my understanding of the language and engine to fit the project requirement, going as far as reading the source code of Ren'Py to understand a strange behavior or report a specific bug.

This made me more comfortable in apprehending more complex issues (like problems with video memory or data serialization) and knowing how to search a large and mature code base.

For every project where I had to design and code a system, I made sure to write clear documentation and manual so that my intervention would not be needed after finishing the mission. It was especially important since my clients were for the most part non-coder, so I had to make sure they could use the work they paid me to do.

As an example, here's a 30 pages document I wrote for one of my biggest client.

A code asset downloaded by over >2,000 people

Demo of my code asset emulating a smartphone UI

As I was working daily for different clients, I had to develop a phone conversation UI and logic, something really popular in the Visual Novel scene. At first, my client suggested using a code asset as a base, but while looking into it, I realized that the ones freely available online worked fine, but had a major flaw: They were uncomfortable to use.

When I write code and systems for myself and for other, I try to prioritize ease of use above all. Especially since I was working with non-technical people most of the time.

So I started from scratch on designing a new system, starting from the way I wanted people (i.e. other devs) to use it, and built from there.

Once the mission was over, I released a stripped down version on itch.io and GitHub, and it got a lot of attention and positive review. A YouTube channel specialized in Visual Novel development even made a video about my asset, cumulating over 12k views:

More than 2,000 people downloaded the asset, almost 3,000 if we add the downloads of this mobile-centric variation I made on the asset.

More than >20 games published on itch.io

I enjoy taking part in game jams and short game challenges; those really helped me to solidify my skills as a programmer, and resulted in a lot of game published.

The very first complete game I ever finished and published (playable below) was made in 2017 after a 12h sprint: it's an arcade game made in Pico8, and include an offline leaderboard that I was quite proud of at the time.

In 2019, I made a short video game every week for 3 months using the Tic-80 fantasy console. I worked on each of them only for a few hours, ranging from 8h of work to only 1h.

You can play most of my games in your computer's browser

You can see the resulting games in their dedicated collection or on my Itch.io page.

This drastic exercise improved my skills, and made me an really effective programmer.

A PHP multiplayer game with database and creative mechanics

"Punk Queen" was an old-school PHP text-based asynchronous multiplayer game made entirely by me with the help of a friend for the design.

It is at its core a CRUD app with authentication and a relational database.

This project was my introduction to Data-driven programming:
I firstly designed the different tables that will be needed for the mechanics and server logic, which greatly simplified the development of features on top. This also pushed my understanding of SQL, PHP, and server code in general.

The game revolved around randomly generated object based on a name and an adjective (such as "French jacket", "Lying trumpet" or "Alluring chain"); players received one every day, could write a description or a story about this object and send it to another player. They could also use some of these object in context, such as playing a musical instrument at the bar.

NPC and dialogue were also present, and they would lightly adapt to the player, such as using the correct pronoun they selected at registration.

This was obviously a weird toy project, targeted mainly to me and my friends.

It is no longer online due to my lack of time to animate the game and build new updates, but I'm extremely grateful for the experience and the fun I had with friends.

Interest in low level programming : C, Retrocomputing

On the side, I enjoy exploring more complex challenge and problems.

For example, in 2020 I developed a simple narrative video game for the NES, using the online IDE 8bitworkshop. It comes bundled with a C compiler for the 6502, and I got really excited to try it out.

Screenshot from a game I coded for the NES in C

I was just vaguely familiar with C before, but in the span of an intense weekend I got a first prototype working. I also bought a book made by the author, which helped me better understand the library that was provided, as well as the NES architecture.

The game is available here, along with the Github repository, which contain the link to play with it in the IDE.

Since C is so portable, I was able to port this code made for a 80' console to PC, with RayLib.

Demo of the game above ported on PC via Raylib, with extra features

For this project I wrote a complete dialogue logic, as well as a save and load system to serialize the player position in the story and the game variables.

Although the limit of my ability with C were starting to show when I attempted to code my UI library, translation system and other more complex logic, I really enjoyed expanding the original code without the 8bits limitations.

A demo for the text renderer I created, which include a markdown parser and a wave effect

I also modified the text display of Raylib to create a basic markdown and BBCode parser; you can find the markdown one here on my Github.

Although this is not professional quality code, I'm always excited to learn more about this subject.

My interest in C, and later C++, greatly helped me adopt (and love) C# later on.

Thank you for reading my portfolio. If you want us to work together, or have any question, you can contact me by email.

I'm looking forward to hear from you!