The Origins of LEATHER: Tactical Boxing Management

I fantasised about making a tactical boxing management video game for years, after a childhood containing fond memories playing Barry McGuigan World Championship Boxing on the Commodore 64, and World Championship Boxing Manager on the ZX Spectrum. I also loved Evander Holyfield’s Real Deal Boxing on the Sega Mega Drive, but it wasn’t until the late ‘90s when I started learning to code at 6th form college, and thoughts of building my own boxing video game began to surface.

Fast-forward many years, and during an overnight hospital stay in December 2008 I watched a repeat broadcast of the De La Hoya vs. Pacquiao fight, which had been contested a couple of weeks before. I so thoroughly enjoyed the fight that I resolved to get motivated and finally start work on a boxing game…

…But alas, it was several more years before I finally mustered the time and motivation to make a start. I was between jobs at the beginning of 2014, and I began prototyping some logic for a fight engine in the April, using Microsoft Excel and VBA as a rapid prototyping environment (with Excel your canvas is already there; you don’t have to worry about messing around with any visuals – I just altered some columns to make some square cells, surrounded it with a solid black border, et voila: there’s the ring. I could also spew some numbers into neighbouring cells to monitor what was supposed to be happening in the data behind it, to give me a real-time read-out). To begin it was just two squares moving around one another, maintaining distance – there was no punching logic yet, just a couple of boxes circling, approaching and retreating.

After a few weeks of work I decided my basic fight engine concept had legs, so I migrated the code to a C# Windows Forms application. These were still very early days, where I hadn’t nailed down exactly what values would describe each boxer’s skills, and for me this is where the core of the game is: the ringcraft attributes. Originally each boxer had about 25 different ability values, including a level of granularity for each punch down to the level of “Left Hook Accuracy”, “Left Hook Hand Speed”, and “Left Hook Power”, but this didn’t really work; I wanted players to be able to take a look at a boxer’s profile and be able to visually parse, in just a few seconds, what the boxer was “all about”. With multiple stats for each punch, plus many other attributes that on the face of it are very similar, it became impossible to easily evaluate a boxer’s abilities; you just got lost in the numbers. So over several months I boiled down the ringcraft abilities – merging some, abandoning others – to eventually arrive at the final fourteen each boxer in LEATHER® has today.

Many, many months of work went into the fight engine, which got to about 80% of what it is today before I decided “this is done, for now”. In the middle of this fight engine development process I spent an entire calendar year, 2015, not touching the code once – I just didn’t have time, what with the pressures of a day-job and a house move. In 2016 I redoubled my efforts, finished off the fight engine prototype, and then starting work on the next prototype, on what I call the “Landscape Engine” – basically the career world the boxers live in: the rankings, challenges, titles, weight division changes, training, retirements, etc. Everything that happens when you click “CONTINUE GAME” is the Landscape Engine.

I built this second prototype as a locally hosted web application, as I could rapidly produce the many different game screens in HTML/CSS than I could by dragging and dropping controls in a Windows Forms application. I would spend many a long day just clicking CONTINUE GAME, and stepping through the code to see what was actually happening, tweaking numbers by miniscule amounts, just to get the feel right. By trial and error I had to discover and fix some weird issues, which with hindsight seem obvious, but when wrestling with the logic you can’t see the wood for the trees. For instance; as boxers were more likely to move up weight divisions than down (the logical result of age-related body mass increase), there was a glacial movement effect on the population of the lower divisions – the Strawweight division became a ghost town containing just a handful of young prospects, as boxers decided to move up when they reached a decent level, but few boxers came down to replace them. At the other end of the scale, the Heavyweight ranks swelled to over 100 boxers, being the terminus for boxers progressing their careers to their absolute weight limit. At this stage of the prototype there were no enforced limits for the divisions, no reactive re-population of sparse ones with an influx of amateurs, and no discouragement to prevent divisions from getting excessively full – I basically let the game run, then checked on it after a few years to see what the outcome was; it was enthralling.

Obviously this wouldn’t work in practise, so I added various little nudges – nothing prescriptive; the boxers still needed to follow their own minds and make their own egregious mistakes (the game world still needed to throw up some surprises: John Smith’s clearly endangering his unbeaten record by jumping up two weight divisions from Welterweight to Middleweight…what is he thinking? Good luck to him though), but I added little buffers to ensure each division retained a balance, and made sure the game universe would never grow out of control, which was especially important seeing that I always intended the game to be released on mobile devices first and foremost: 17 x 100 boxer weight divisions would slow number-crunching to a crawl on most Android and iOS devices. People don’t like playing games that are basically just loading screens; I know this first-hand from the days of the Commodore 64, so there needed to be limits to prevent each player’s unique game universe from swelling out of control.

I now had two prototypes: one for the fight engine and one for the world engine – it was time to actually begin slotting all this together. In February 2017 I got off the fence and decided to use Xamarin Forms as the platform on which to build LEATHER®. Microsoft had recently purchased the Xamarin company and folded it into the Visual Studio developer offering, which was a wonderfully well-timed occurrence as it presented something that would permit cross-platform mobile development in a programming language with which I was already comfortable: I could assemble one codebase, and from this spit-out apps for both Android and iOS, leveraging my existing knowledge of C#. This was brilliantly fortunate: the alternative platforms presented both cost and performance restrictions for which I just couldn’t budget.

It took almost eighteen months to assemble the first production release of LEATHER® – I’d never delved into Xamarin Forms before, so every day presented its own unique challenges – but despite numerous setbacks I finally released LEATHER® for Android on the Google Play Store in July 2018. With zero advertising I somehow managed to receive my first sale within the first couple of days. Bugfixes and feature updates quickly followed, and the game evolved rapidly – visuals changed, a new logo, a change to the subtitle…and finally over a year later, in September 2019 I released the iOS version on Apple’s App Store.

Cue huge relief: I’d managed to release a cross-platform boxing management game, almost 20 years in the making, and sales were healthy – not instant-retirement worthy, but healthy enough to show promise for the future. This sounds like my job is done, but it is certainly not; there is always clamour for new features, the to-do list of things I’d like to add grows constantly, and there’s the dark shadow of a PC version stretching over me, requiring a mammoth amount of research to see if I can create this from the same lone codebase I’ve spent so long crafting.

Was (and is) all this effort worth it? Yes, yes it is…I think. I’ve augmented my C.V. with a huge number of new skills, and the sheer satisfaction of having created a game that people love and are playing every day is unparalleled in my 20 year software engineering career. But I do have to admit that, if I could go back in time to April 2014, having known the enormous sustained effort that this project would require, I probably wouldn’t have started it in the first place. It’s been a long, hard slog, and it isn’t done yet.