Portfolio
A downloadable portfolio
This is the portfolio of Connor Halford, senior games and tools programmer.
It was last updated in January 2024.
I want to work with inspiring people on projects we really believe in. I love enabling creativity through systems and tools. I enjoy solving problems collaboratively as part of a team.
I've been a programmer in the video games industry for 7 years, collaborating with coders, designers, artists, producers and QA. I've been part of team sizes from 1 to 40+, on projects targeting Windows, macOS, Linux, Nintendo Switch, PlayStation 4, Xbox One, Android, iOS, VR and AR.
You can also view my CV and LinkedIn profile.
- Professional work
- Personal projects
- Student projects
- Awards and nominations
Professional work
- 2022-[Present] Senior Programmer at Ant Workshop (1 year and counting)
- 2019-2022 Senior Gameplay Programmer at Failbetter Games (3 years, 5 months)
- 2018-2019 Programmer at Climax Studios (1 year, 3 months)
- 2016-2018 Games Programmer at MediaTonic (1 year, 8 months)
- 2012-2016 Student at Abertay University (4 years)
Here are some of the major projects I've worked on in my career so far.
Dungeon Golf
2023 | Ant Workshop | Unity | C# | PC
- Record tracking system. Efficiently tracking, storing and querying over 12k local player statistics in a custom 140KiB binary file. Definitions were combinatorial, such as tracking attacks on a per-character × per-enemy × per-level basis
- Identifying information is bit-packed into 64-bit ID numbers which uniquely categorize each 32-bit stored value
- Custom Editor windows find category elements and assign persistent IDs which don't change when elements are added or removed, and are baked into autogenerated C# scripts
- Individual values can be set or queried, and higher-level aggregation queries can find the sum/min/max of a range
- Binary format has header including version number, stream of ID + value pairs, and a checksum to hinder cheaters
- Achievement and challenge system built on top, unlocking when watched aggregate queries reach target thresholds
- Performance optimizations. Doubled the frame rate on the target min spec device from ~17 fps to ~35 fps and reduced RAM usage by ~0.5GB
- Using the Profiler, Profiler Analyzer, Memory Profiler, Project Auditor, and Frame Debugger to identify and diagnose problems then verify improvements. Prioritized the areas that would have the biggest impact
- Identified and removed upwards of 20 KiB of garbage generation per frame
- Identified an issue causing draw call batching to break for level geometry, fixing this greatly reduced draw calls
- Configured project and asset import settings to improve frame rate, reduce loading times, and reduce memory usage
- Created a custom
/build
Slack command that allowed anyone to create builds of any project, specifying platform, debug or release, and scripting symbols - The build machine has a server written in Python listening to Slack API events. It checks out the given Git branch and pulls, then invokes the custom build script in the project which configures Unity and kicks off the build
- Injects the Git commit hash into the application version number so we know exactly what commit any build was made from
- Builds are zipped to Dropbox and optionally uploaded to the given developer branch on Steam
- Analytics consent flow, configuring and firing events with parameters, backend funnels and reports to aid data analysis
- Feedback menu. Opened at any time, pauses the game and disables game input. User can write description and upload report, with screenshot, logs, savedata and performance metrics automatically included
- Custom log file. Replacement for Unity's log file, providing better formatting and more information but using less disk space due to trimmed and non-repeating callstacks
- Steam SDK integration including Steam Remote Play Together with shared input devices and persistent player ordering after disconnect and reconnect
Unannounced project
2022 | Failbetter | Unity | C#
(written with permission, keeping vague due to unannounced nature of project)
- Hiring. Created the code test used as part of hiring another Senior Programmer for the project, assessed test submissions, provided feedback, participated in technical interviews, and assisted with onboarding
- Data-driven gameplay system. Created a workflow where designers write text files that define a system of triggers, conditions and outcomes that are then replicated at runtime to produce the desired gameplay. This enabled designers to rapidly iterate without the need for programmer support
- Dynamic curved grid. Gameplay logic and collision detection that conforms to the curvature of a grid made by blending between a set of Bézier splines and plotting vertices at their intersections
- Developed a system for sorting and layering 3D meshes within a scene composed of 2D sprites
Mask of the Rose
2022 | Failbetter | Unity | C# | PC, Nintendo Switch, PlayStation 4, Xbox One
- Mentoring. I acted as a mentor for a developer who was new to Unity, this continued when they then went on to lead development of Mask of the Rose. I helped to explain concepts and systems, answer questions, recommend solutions and avoid pitfalls
- Support systems. I worked on systems supporting the main gameplay, for example an in-game bug reporter, a virtual keyboard for entering text with a gamepad, and storefront SDK integration including build pipeline support for automatically uploading builds
Tools packages and documentation
2022 | Failbetter | Unity | C#
- Created an initiative to improve code reuse across projects by developing reusable solutions that can be distributed through the Unity Package Manager (based on NPM) via a private Verdaccio registry. These version-numbered packages are in use across multiple projects
- Debug menu. A dynamic runtime hierarchy of variables and functions nested in folders. Programmers could easily expose internal state and functionality to make debugging, tweaking and testing easier, with entries added and removed at runtime as needed
- Directly supports editing variables of any native C# type
- Custom types supported via C# reflection to automatically create sub-entries for each member, forming a composite
- Expose functions to be triggered. Functions with parameters are supported as composites
- Works on all target devices; easy to include or exclude; efficient code-driven UI layout with pooling; filter the hierarchy using text search
- Input wrapper framework with support for polling, subscription, explicit ordering, and the ability to 'consume' an input to stop it propagating
- Custom Editor window exposing internal state to aid usage and debugging
- Various smaller tools such as a custom log file prettyprinter and an asset reserializer
- Wrote and maintained documentation for both programmers and other less technical team members
- Led a technical postmortem for Sunless Skies, assessing the strengths and weaknesses of the codebase to identify areas of focus for new projects, including gathering feedback from other disciplines about their specific needs
- Internal wiki including explanations of Git concepts and workflow, a C# style guide, important details about third-party libraries, and instructions for internal tools and packages
Sunless Skies: Sovereign Edition
2021 | Failbetter | Unity | C# | PC, Nintendo Switch, PlayStation 4, Xbox One
- Legacy codebase. At the time I joined the company Sunless Skies had been in development for 2.5 years and the two primary programmers had left the company 3 months prior. I dived into this codebase and began fixing bugs and adding new features, with an update being released a few weeks later and several more in the following months
- Sovereign Edition. The complete version of Sunless Skies which launched on Steam, GOG, PlayStation 4, Xbox One and Nintendo Switch. Along with hundreds of bug fixes this included major gameplay additions such as a new warp relay and new movement mechanics
- Console ports. Reviewed and assisted the work of a third-party porting company in getting the game working on consoles, including passing each platform's submission requirements. To give console players the best experience I significantly reworked all gamepad menu navigation and scrolling, added a radial menu, added dynamic input prompts, and implemented a new gamepad control scheme
DreamWorks Dragons: Dawn of New Riders
2019 | Climax | Unity | C# | PC, Nintendo Switch, PlayStation 4, Xbox One
- I joined the project late in production to work on remaining features, bugfixes, polish and console certification
- Player death sequence (animation, UI, respawning); unfurling UI lore parchments with dynamic length to fit localized content; final boss dynamic camera; conditional cutscenes
Crayola Scoot
2018 | Climax | Unity | C# | PC, Nintendo Switch, PlayStation 4, Xbox One
- I joined the project late in production to work on remaining features, bugfixes, polish and console certification
- Bonus objectives (near miss etc); animation state machine conflicts; gameobject pooling optimisation; PlayStation trophy support for player 2/3/4 in splitscreen multiplayer
MediaTonic
2018 | MediaTonic | Unity | C# | PC, Android, iOS
- Bugfixing and extending a large codebase for a mobile UI-based game in a team of 40+
- Pre-production for a 3D mobile action game. Created the core data-driven combat system: use sequential filters to select a group of targets then apply various effects
- Joined the internal tools team. Created a Unity sprite atlas analyser to aid optimisation. Worked on a tool for exporting the different layers of a Photoshop PSD file as separate images so they could be animated independently in-game
Personal projects
These are projects I created in my own time. See my main itch page for a more detailed collection, these are some highlights.
Curious Fishing
2022 | Defold | Lua | Web
- I created this game in my spare time over a number of years. I did all of the code, design, art and admin, while a friend did the audio
- An aquatic puzzle game with 9 creatures and 5 obstacles each embodying a unique puzzle mechanic, combined across 30 levels
- Resolving complex simultaneous grid-based gameplay logic; unlimited undo; pixel-perfect scaling at any resolution; localized to 12 languages including CJK and Arabic
- The game has been played over 17k times, was featured on PC Gamer, and won a competition allowing me to demo it on a booth at the Game Developers Conference in San Francisco
SPACE VALET
2020 | Unity | C# | PC, Web
- A solo game jam project created over the course of 1 month based on the theme 'moonshot'. I made a game about being a valet, but in space, which is much cooler and definitely worth it
- Player character movement; entering and exiting vehicles; vehicle physics including going up and down ramps; NPC arrivals and departures
Positive Aspects
2018 | AutoHotKey | Windows
- A tool for resizing any window to any aspect ratio or resolution
- I created this tool while working on the pixel-perfect scaling in Curious Fishing to quickly visually verify how the game's rendering adapted to different aspect ratios and resolutions
Nokia eReader & Nokia Solitaire
- Each of these were made for the recurring Nokia Jam, where the goal is to work within the constraints of the old Nokia 3310 phone. I've found it very fun to re-imagine common software under such tight constraints, trying to make the best possible UX for a knowingly terrible idea
- Nokia eReader recreates the nostalgic menus, providing page and chapter navigation to read 8 full public domain books
- Nokia Solitaire is a full implementation of the classic Klondike solitaire with custom card art and configurable difficulty
Student projects
I attended Abertay University 2012-2016. I graduated with a first-class honours degree BSc (Hons) Computer Games Technology, with a UK GPA of A+ 4.5 / 4.5. Here are some of the more notable projects.
Honours Project: Generating and Solving 3D Nonograms
2016 | C++ | Windows
- Created algorithms for both generating and solving 3D nonogram (Picross) puzzles. Written in C++ and HLSL and making use of the Dear Imgui library
- A mix of original research and implementing and adapting existing work from technical papers. I wrote a 75 page dissertation outlining the literature and explaining the various algorithms used or created
- A raycasting approach to voxelizing polygonal meshes, optimized using a quad-tree; puzzle solver mimicking real player techniques; finding all solutions of a row constrained to match existing known state; comparison of brute-force, hierarchical and heuristic approaches
- Won the YoYo Games Prize for Applied Technology
AMPS - A Musical Platforming Symphony
2015 | Sony PhyreEngine | C++ | Windows, PlayStation 4
- A rhythm platformer made using Sony's PhyreEngine for PlayStation 4 and Windows, written in C++
- Made by a multi-disciplinary team of 7 students over 8 months. I was the team lead and was involved in programming, production and design
- One of my primary responsibilities was creating the data format for our levels, so that designers could use a map editor to create the level layouts and indicate how the different mechanics synchronised with the music
- Demoed to the public for 4 days at Dare Indie Showcase 2015, with great audience reception
Particle FX Editor
2015 | SFML | C++ | Windows
- I created this tool to allow us to create simple particle effects for AMPS
- Configurable 2D particle emitter with GUI controls and live preview; support for textures; saves to simple easy-to-parse text format
- I also created a PhyreEngine rendering implementation of these effects for AMPS. The particles are pre-allocated and pooled for efficiency
Awards and nominations
- 2022 MCV/Develop 30 Under 30. My colleagues nominated me for my work at Failbetter
- 2021 Game Dev Heroes Programming Award Shortlist. My colleagues nominated me for my work at Failbetter
- 2020 Game Dev Heroes Programming Award Honourable Mention. My colleagues nominated me for my work at Failbetter
- 2017 Defold GDC Competition Winner. Awarded for my game Curious Fishing, which I then got to demo as part of the Defold booth at GDC 2017 in San Francisco
- 2016 YoYo Games Prize for Applied Technology. Awarded for technical excellence in my university honours project
- 2013 Ede & Ravenscroft Prize. Awarded by my university for 'being deemed to be the best student overall in the School of Arts, Media and Computer Games'
- 2013 David Potter Memorial Prize. Awarded by my university for 'being deemed to be the best student overall on the BSc (Hons) Computer Games Technology programme'
- 2013 A D D McKay Senior Prize. Awarded by my university for 'achieving a high level of performance in mathematics'
"Connor is the quiet hero of Failbetter Games [...] often being generous with his time and expertise"
Status | In development |
Category | Other |
Author | RhythmLynx |
Tags | cv, portfolio |
Average session | A few minutes |
Links |