# Home

Learn all about me!

## Skills

I am a hard-working individual who focuses on quality over quantity, producing reliable and consistent results and consistency between tasks. My skills include:&#x20;

* Using Unity3D since 2014
* Programming, since 2012, primarily advanced C#, making use of features such as Actions and Tasks.
* Providing detailed documentation of code written.
* Experience using Git and its more advanced features such as branching, submodules and rebasing.
* Working in sprints in an Agile environment.&#x20;
* Creating native plugins for Unity games running on iOS and Android.&#x20;
* Integrating multiple SDK’s into Unity.
* Getting to grips on new and existing software and concepts quickly.
* Specialize in making mobile build sizes small, and optimizing projects to run faster, cleaner and writing tools to help automate the build processes.

## Interests

I enjoy playing competitive games like Rainbow Six Seige and Hunt: Showdown, along with some more casual games like Gears 5 and Astroneer

I'm also an avid computer enthusiast, building and upgrading PC's

Playing Poker is also something I enjoy doing, either online or in-person

When the timing is right, Game Jams are a blast to take part in!

Going to Unity-based events such as the [**London Unity User Group (LUUG)**](https://www.meetup.com/London-Unity-Usergroup/). I also own the domain [**luug.co.uk**](http://luug.co.uk) to help members navigate to the main meetup page

I also enjoy playing around with new technologies and Unity features as their released

I also enjoying making developer tools and Unity editor plugins. One of these Unity editor plugins, Unused Assets Finder, has been released on the Unity Asset store


# Nerd

Projects I've worked on with Nerd

## Lead Games Developer - Project David <a href="#project-david" id="project-david"></a>

**Aug 2017 – Feb 2018 (7 Months)**

A mobile game aimed at teaching kids maths via fun and interactive minigames.

* Rapid prototyping of game concepts and features
* Working in an agile environment
* Coming up with ideas and giving constructive criticism
* Building and testing on mobile devices
* Distributing internal builds via iTunesConnect / TestFlight
* Learning new software packages quickly such as PlayMaker to help benefit other team members

## Game Programmer

**Aug 2017 – Aug 2019 (2 Years)**

Created a modular internal SDK where major features of a game are stored as git submodules and can be pulled into any project and implemented with very little hassle.

* Analytics
  * Google Analytics
  * Unity Analytics
  * Firebase Analytics
* Monetisation
  * Ironsource (Mobile Ads)
  * In-App Purchases
* GDPR Consent UI
* In-App Cross-Promotion System
* Mobile Haptic Feedback
* Mobile Social Services
  * Game Centre (iOS)
  * Google Play Games (Android)
* Firebase
  * Remote Config
  * Crashalytics
  * Remote Push Notifications
  * Analytics
* Sharing screenshots and text
* Universal Cosmetic Unlocking System

## Download links

| **Game**               | **App Store**                                                                 | **Play Store**                                                                         |
| ---------------------- | ----------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| Pongo                  | [Download](https://apps.apple.com/us/app/pongo/id1466753464)                  | [Download](https://play.google.com/store/apps/details?id=com.Nerd.Pongo)               |
| I Want Chicken Nuggets | [Download](https://apps.apple.com/us/app/i-want-chicken-nuggets/id1469351761) | [Download](https://play.google.com/store/apps/details?id=com.Nerd.IWantChickenNuggets) |
| Bobbl                  | [Download](https://apps.apple.com/us/app/bobbl/id1459116474)                  | [Download](https://play.google.com/store/apps/details?id=com.Nerd.IWantChickenNuggets) |
| Quickie Solitaire      | [Download](https://apps.apple.com/us/app/quickie-solitaire/id1472016116)      | [Download](https://play.google.com/store/apps/details?id=com.Nerd.QuickieSolitaire)    |
| Hop Hop Ninja          | [Download](https://itunes.apple.com/gb/app/id933203644)                       | [Download](https://play.google.com/store/apps/details?id=com.Nerd.HopHopNinja)         |
| Piggy Bros             | [Download](https://itunes.apple.com/gb/app/id1024672326)                      | [Download](https://play.google.com/store/apps/details?id=com.Nerd.RasherRush)          |
| Kickball Legend        | [Download](https://itunes.apple.com/us/app/kickball-legend/id1114025174?mt=8) | [Download](https://play.google.com/store/apps/details?id=com.Nerd.KickballLegend)      |
| Headbutt Hero          | [Download](https://apps.apple.com/us/app/headbutt-hero/id1074065883)          | [Download](https://play.google.com/store/apps/details?id=com.Nerd.GTT)                 |
| Dizzy Dodo             | [Download](https://itunes.apple.com/gb/app/id1012552008)                      | [Download](https://play.google.com/store/apps/details?id=com.Nerd.DizzyDodo)           |


# Yakuto

Projects I've worked on at Yakuto

Note: Details here are purposefully vague as to not give away what is used in Yakuto's infrastructure

## Games Developer

**Oct 2019 - Oct 2020 (1 Year)**

### Darts of Fury

* Updated seasonal packs
* Various bug fixes and improvements

### Ping Pong Fury

* Various bug fixes and improvements
* Wrote the player name changing system, including name filtering
* Created, implemented and extended various core cloud calls and use cases
* Wrote the In-App Purchase native adapter and the cloud calls to save the data to the cloud
* Implemented various SDK's, both in C# and at the native level
* Writing native fixes for parts of the Unity engine itself
  * Getting the correct screen size for some Android devices
  * Getting the correct size of the native Keyboard on Android devices&#x20;
  * Getting a list of embedded iOS fonts
  * Getting the network interface's internal IP address
* Added some parts of the internal build pipeline
* Implemented a Level Of Detail (LOD) system within the game

## Download links

| **Game**                                     | **App Store**                                                         | **Play Store**                                                                      |
| -------------------------------------------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| [Darts of Fury](http://www.dartsoffury.com/) | [Download](https://apps.apple.com/us/app/darts-of-fury/id1098189391)  | [Download](https://play.google.com/store/apps/details?id=uk.co.yakuto.DartsOfFury)  |
| [Ping Pong Fury](https://pingpongfury.com/)  | [Download](https://apps.apple.com/us/app/ping-pong-fury/id1484641433) | [Download](https://play.google.com/store/apps/details?id=uk.co.yakuto.PingPongKing) |


# Marmalade Game Studio

Projects I've worked on at Marmalade

While my job role is "Games Developer" for Marmalade. I also work in different areas of game development doing various things!

## Bubble

Bubble is a social technology embedded within apps that Marmalade offer. Part of working on Bubble is managing one codebase across a number of different games with varying dependencies. To make things easier for each game and also for the development of Bubble, Bubble is treated as an internal studio SDK that sits alongside each app\
\
I have worked on all aspects of Bubble which include:

### User accounts

* Account creation
  * Account Authentication
    * Email
    * SSO's
      * Google
      * Facebook
      * Apple
* Friend lists
* Group chats
* Profile customisation
  * Avatars
  * Display names
    * Bad word filtering on display names

### Social aspects

* Online friend status
* Client real-time chat
  * Create 1-1 and group chats with friends
  * Send game invites for games that support Bubble via chats

### Cloud Infrastructure

* Server response compression
* Maintaining multiple server environments
* Function Apps
* CosmosDB
* Application Insights
* Custom instant unhandled error reporting to Slack
* Android piracy checks
* Database data migration
* Database optimization
* Sending transactional emails
* Bubble user authentication
* SSO authentication
* Video chat authentication
* Push notifications for social Bubble events
  * Friend requests
  * Chats
  * Game invites
* Remote asset and config hosting
  * S3
* Custom domain redirects
  * Cloudfront / Route 53
    * get.bubbleplay.com
    * invites.bubbleplay.com

### Deep linking

* App Links (Google)
* Universal Links (iOS)
* Breaking out of Facebook Messenger's embedded in-app browser to actually launch the game
* Rich link previews when shared via social media

### Analytics

* Custom analytics reports based on database data
  * Reports sent daily to Slack
* Client-side analytics and Crashalytics
* Custom post build scripts to optimize, compress and upload Android native symbols to Crashalytics and Google Play

### Native mobile work

* Push Notifications
  * Native code to check if the user has granted permissions for push notifications&#x20;
* Marmalade social media buttons
* Cross promo page
  * YouTube hosted video player
  * YouTube thumbnail provider
  * Checking if an app is installed on the device in order to open it
* Custom android native keyboard
  * To get around Unity's provided on-screen keyboard from not passing inputs down to the UI when dismissing the keyboard via tapping a blank area

## Tools

Any software project needs tools to be able to develop better and faster, or to fill a gap that new requirement creates. Some of the tools i've work on are:

* [Mobile Native Sharing](/projects/opensource#unity-native-sharing)
* Mobile Permissions
  * In order to check if we have Camera and Microphone permissions for video chat
* Link XML Merger
  * Allows `link.xml` files in UPM packages to be used in a build
* ATT Popup Helper
  * Needed for iOS
* Multiple tentative fixes for SDK's
  * AppsFlyer
  * Facebook
  * Firebase
  * Google Sign In
* Remote bad word list
  * Helps keep Bubble display names clean without the need to update the app
* Encryped local storage system

## Infrastucture

A very easily overlooked aspect of any software development project is infrastructure.

### UPM

Since starting at Marmalade, I've moved and converted numerous internal tools and 3rd party SDKs and plugins into UPM packages to make integration into Unity projects easier, quicker and cleaner.

This also involves forking public git based UPM packages to the company GitHub account to ensure that we have a buffer in case the originals are removed or changed significatly.

### CI / CD

While Jenkins does the heavy lifting, some SDK's and platform requirements require special pre and post build steps to ensure that the build is configured correctly, and any native level adjustments are applied.

Understanding the build pipeline of different platforms is critical. From provisioning profiles to knowing the difference between upload and app signing keystores. Lots of people need to see and use builds on thier devices in order to test and capture gameplay, so keeping the build machines up, running and building is a high priority.

## Download Links

### Monopoly

| Website                                                        | App Store                                           | Play Store                                                                       |
| -------------------------------------------------------------- | --------------------------------------------------- | -------------------------------------------------------------------------------- |
| [Website](https://www.marmaladegamestudio.com/games/monopoly/) | [Download](https://apps.apple.com/app/id1477966166) | [Download](https://play.google.com/store/apps/details?id=com.marmalade.monopoly) |

### Game of Life 2

| Website                                                                  | App Store                                              | Play Store                                                                   | Steam                                                                     | Switch                                                                                                         | PS4                                                              |
| ------------------------------------------------------------------------ | ------------------------------------------------------ | ---------------------------------------------------------------------------- | ------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- |
| [Website](https://www.marmaladegamestudio.com/games/the-game-of-life-2/) | [Download](https://apps.apple.com/US/app/id1512751689) | [Download](https://play.google.com/store/apps/details?id=com.marmalade.gol2) | [Download](https://store.steampowered.com/app/1455630/The_Game_of_Life_2) | [Download](https://www.nintendo.co.uk/Games/Nintendo-Switch-download-software/THE-GAME-OF-LIFE-2-1939288.html) | [Download](https://store.playstation.com/en-gb/concept/10004213) |

### **Taboo**

| Website                                                     | App Store                                                                        | Play Store                                                                    |
| ----------------------------------------------------------- | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| [Website](https://www.marmaladegamestudio.com/games/taboo/) | [Download](https://apps.apple.com/gb/app/taboo-official-party-game/id1563932741) | [Download](https://play.google.com/store/apps/details?id=com.marmalade.taboo) |

### Jigsaw Video Party

| Website                                                                  | App Store                                              | Play Store                                                                     |
| ------------------------------------------------------------------------ | ------------------------------------------------------ | ------------------------------------------------------------------------------ |
| [Website](https://www.marmaladegamestudio.com/games/jigsaw-video-party/) | [Download](https://apps.apple.com/us/app/id1530459925) | [Download](https://play.google.com/store/apps/details?id=com.marmalade.jigsaw) |

### Bubble Play

| Website                            | App Store                                           | Play Store                                                                     |
| ---------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------ |
| [Website](https://bubbleplay.com/) | [Download](https://apps.apple.com/app/id1594207855) | [Download](https://play.google.com/store/apps/details?id=com.marmalade.bubble) |


# Open Source Projects

Giving back one line at a time

## [DebugOnly](https://github.com/NicholasSheehan/DebugOnly)

Objects tagged with "DebugOnly" will be left out in release builds but will remain in debug builds. Good for having extra objects whilst debugging a build.

## Unity-Sharing

### [Unity-Native-Sharing](https://github.com/NicholasSheehan/Unity-Native-Sharing)

I had to rewrite the sharing system and stumbled across a repo (which is now Unity-Native-Sharing) and had a look at it. I forked the repo and updated it to work with newer versions of Android and iOS, as well as stripping out some clutter and features which didn't add much value.

I managed to get ownership of the original repository which many people were still using, but was still outdated with many issues outstanding. I then pushed my latest changes for everyone to use.

It's mostly complete, with only documentation and screenshots left to do

### [Unity-Native-Toasts](https://github.com/NicholasSheehan/Unity-Native-Toasts)

Unity-Native-Toasts is a plugin to display toasts on iOS and Android. Around 70% complete, it works, but it still needs documentation and screenshots

## Work In Progress

These projects have not been officially released or started. Most of the code exists already but needs to be updated and ported from my first attempt at this, which was [**UnityMobileModules**](https://github.com/NicholasSheehan/UnityMobileModules). Once everything has been taken from there the repository will be deleted

### [Unity-Native-Alerts](https://github.com/NicholasSheehan/Unity-Native-Alerts)

### [Unity-Native-Vibration](https://github.com/NicholasSheehan/Unity-Native-Vibration)

### [Unity-Native-Volume](https://github.com/NicholasSheehan/Unity-Native-Volume)

### [Unity-Native-Brightness](https://github.com/NicholasSheehan/Unity-Native-Brightness)


