3 November 2016

Jagex Projects

I could've written a huge post of the many, many projects I was involved with over the 9.5 years I worked at Jagex, but nobody would've read it! So, here are my recent highlights.

New Jagex User Accounts System

  • "RESTful" Microservices
  • Spring Boot, Swagger
  • Java and C# Client Libraries
  • Couchbase
  • Tomcat + Nginx
  • Flexible and Extendable

During the development of Chronicle RuneScape Legends, we decided it was a great opportunity to create a new accounts system from the ground up, to eventually replace the current very old and very-specialised (inflexible) RuneScape account system. We defined our core aims:

  • Industry standard and industry leading technology
  • Highly flexible and easily extended, with excellent unit test coverage
  • High performance and easily scalable
  • Suitable for current and future games/services

We designed a system that has a single Account record per user, any number of Game Profiles linked with that account, and any number of Authentication methods of any implementation. We produced a simple Java client library for our Java webapps, and a C# client library for the Chronicle game server. As it utilises as "RESTful"-like architecture, client libraries in any language supporting HTTPS requests can be written. As we introduced Swagger later on in the process, we could also auto-generate client libraries in many different languages.

We initially implemented a simple email+password authentication method, with email validation and password reset tools, followed by Steam authentication. As these authentication methods are separate microservices, they can be scaled independently.

At the time of leaving Jagex, there were over 360,000 accounts in the system, with no known performance problems even at peak times, and very few issues.

Android App

  • 2 Day Game Jam - pedometer integration and scoring system
  • Main git merger between teams
  • Key developer in the team

Jagex occasionally holds "Game Jam" events, where staff were given the opportunity to create a game prototype of their choice in two days. These games are not intended to be turned into full official products. In the last one, most of the Web team decided to make an Android game. We implemented two game modes, where items are placed in the real world, and you had to go out and find them. It tracked your steps and time, the faster you collected the items, the better your score.

I was responsible for implementing the pedometer, and storing and retrieving hourly steps, XP, and calorie counts, with basic goal progress display. I soon also became the lead "git merger" of other people's branches into the main demo branch, and one of the main go-to guys of the project for changes and bugfixes.

All of the games produced on the GameJam were scored by the company, and ours was rated one of the highest, with people surprised by how many working features we implemented in two days.

"Seasonal Hiscores"

  • Proprietary Java Web Framework
  • PostgreSQL
  • Highly flexible and configurable
  • Easily extendable
  • High performance

I was approached to design and lead an exciting project, to develop a new "Seasonal High Scores" system to create short term, competitive high scores on any in-game metric. It must be possible for game developers to fully configure new high scores without Web Team's involvement, with start and end dates, whether it recurred (and how often), what value it was tracking, whether it was speed-based or otherwise (i.e. reversed the sorting), and many other things. Multiple high scores may run at the same time, completely independently of each other.

Finally, it must also easily handle potentially hundreds of game updates and page views a second.

We implemented this primarily using Jagex's own in-house web framework. We processed proprietary game configuration files to manage the high scores, receiving byte-packed packets of data from the game, caching the high score in a fast sorted list implementation, and persisting to a PostgreSQL database. We also implemented a bunch of staff support tools, to view high score data (future, in-progress, completed, archived), and to ban and remove individuals.

The system worked very well, and really improved engagement with the players. It was later extended with weekly and monthly high scores for all 28 game skills, while still handling the original Seasonal High Scores.

No comments:

Post a Comment