Ramblings of a Tampa engineer

Before the test of time takes another project I wanted to blog in depth about an open source project that I maintained for my clan. It started as a website for us to record Destiny 1 games from raids to multiplayer combat.

It quickly grew from that for each integration we needed. We added support for:

  • Destiny 1
  • Destiny 2
  • Halo 5
  • Overwatch
  • Xbox
  • Calendar
  • Google Hangouts

So I've already blogged quite in depth about the Google Hangouts / Xbox integration so I'm going to skip that one. However, the rest of this blog will be a deep dive into the functionality of the other modules.


Destiny 1

iBot Profile Page (Destiny 1 - Titan)

Panda Love began building profiles for each of the characters that clan members had. It packed some basic stats that the API provided for gear, light level and current gear stats. This page was just a pretty interface as the only number we were truly interested in was light level. This was exposed through the API that our Google Hangouts bot consumed.

Light level generally just referred to how strong or weak you were - so building a roster for an activity generally needed high light individuals. This allowed us to check our entire clan via the chat, as needed, when an event was being organized.

Though after a game was over. We wanted to start logging those activities to share with other clan members and/or just brag about it. So the game history module was invented.

Panda Love - Destiny 1 Game History

This page could log many things:

  • PVP Activities
  • Raid Tuesdays (2-3 raids back to back)
  • Trials of Osiris (5-9 games back to back)
  • Flawless Raids (0 deaths from all)
  • Prison of Elders (round based challenges)
  • Raids (1 off raids)

All of these activities acted a bit differently when viewed. For example, the important aspect of Raid Tuesday is to see how every clan member preformed overall. While a singular added Raid was probably because of some unique event (first completion, 0 deaths, etc).

On the player vs player side of things - it was always related to amount of deaths and just pure speed. Winning 7 games in under 45 minutes was just pure destruction. Collecting successful wins in Trials became an addition which I blogged about many times before.

Tabs were leveraged to organize and round or multi-game based activity. So a snippet of all modes below.

Games could be ingested into the system with a basic command to our bot, such as /bot addgame d1 raid {gameId}. With that, that was our Destiny 1 module.


Destiny 2

With Destiny 1 having such large development - our clan was excited for the prospects of Destiny 2 and more powerful APIs.

However, Destiny 2 at launch was just horrible. Our pinnacle game mode (Trials) was no longer 3v3 and everything that made it addicting was gone. It became 4v4 with respawn tokens and 15 second timer. Everything that made Destiny 1 clutch with abilities, 3 vs 1, and ammo management was gone.

The pinnacle raids that used to drop sweet pieces of gear didn't drop anything this time. Resulting in pure anger when you got tokens. You had to accumulate those and turn them into a vendor. It surprised me how a studio that built such an amazing game ended up destroying it.

I'm not alone in this opinion. Enough of the entire community complained and player stats dropped that the replacement game mode was removed indefinitely. It took a year for the replacement to be ready (Which was just the Destiny 1 iteration).

So we stopped playing it. A sad day for our group. We've attempted to return to the game with each major DLC, but that burning flame for the Destiny franchise is gone. Destiny 2 ruined it for us.


Halo 5

Halo was a game to our clan that was always there. We grew up playing Halo 1 and 2, played an enormous amount of Halo 3 and then kinda went quiet. Halo 3: ODST had no multiplayer and Halo Reach introduced bloom which killed the series for me.

The studios changed after Reach - Bungie would go on to build the Destiny games above. 343 Studios took over Halo producing Halo 4 which was just a generic Halo game and this one - Halo 5 Guardians.

iBot Profile Page (Halo 5)

The game didn't hold us like Halo 2 or 3, but it was a Halo game that was enjoyable to play. What was interesting about Halo 5 is the hugely documented and powerful API it launched with. This had so many endpoints that 343 launched an API competition for folks to build the best project from the available data.

So I begun just overhauling our pages adding detailed information of all types of analytics.

These modules could track historic seasons to see final placements and overall stats. It could list the current seasons with the same graphics used in games to track process up the ranks (or down in my case).

A few clever pages that just showed all weapons and medals obtained. Though I wanted to go further and build a post game carnage report system much like Destiny 1, but for all the features that Halo 5 offered.

Panda Love - Halo 5 Breakout Match

This resulted in a page that provided quick facts of a bunch of random stats. Using all the data available in the API we could determine interesting analytics like most accurate shot. The other tabs would allow a deeper dive into team based stats or even visibility into personal analytics for that match.

Though, I'm sure you've noticed it - what was the Enhanced Game Look button in bottom left? It was an attempt at visualizing the most amount of game data possible. Leveraging each timestamp of every action throughout the game.

This was trying to reach the pinnacle of features - a top down view of a map with lines drawn on top correlating to the kill location and death location of everything. I blogged in detail about that journey of why that feature never launched on this blog in the past.

These features were pretty nifty. The graph would plot kill times over time elapsed to gauge how the game went over time. The round module would just track each round to see who died first and last to paint a picture of the MVP of each round.

Finally, the timeline view was an enormous list of every single event in the game that could be filtered down to any combination of players. From a weapon being dropped or picked up or a kill. I'd extract whatever information was available (like kill distance) during each event. A tiny snapshot of the timeline does not give this feature justice, so I did a full screenshot (2.5mb).

Even cooler was the rare "multi-team" event that would push 4 teams against themselves and Panda Love enjoyed the variety of colors that this pushed into the UI.

Unfortunately the addiction that Halo held did not hold long on Halo 5. The game quickly became god tier players vs blind players and was not very fun. Stacked teams ran train and a bunch of goobers playing while drinking would just get smashed. So the development slowed and eventually stopped.

Halo 5 - Panda Love

Our stats showed with not a single clan member breaking 1000 games played and only 1 clan member breaking through the level 100 mark.

We thought it would be quite clever to automatically map our KD/KDA nightly into an updating graph. For the first few months this was pretty sweet to see who was improving vs sucking, but then we stopped playing and the feature was turned off after it quickly just turned into static lines.


Overwatch

A few of our clan wanted to switch to Overwatch as it looked like a popular multiplayer game to play. However, it had no API so only sites that scraped the Overwatch website could extract information. It had a big problem that the instant a season ended and you played a game on the new season - your stats of the previous season disappeared.

iBot Profile (Overwatch)

Panda Love aimed to fix this by just storing all information locally and correlating the stat time pull with the active season. The test of time resulted in these seasons not being updated properly and data being lost so it became useless rather quickly.

Not to mention Blizzard added private stats which effectively destroyed the only avenue for stat collection. However, from the data we had during the prime-time (Season 5-11) resulted in some cool character specific leaderboards.

The stats blizzard returned were often strange and not character specific, but were interesting nonetheless. The "per 10 minutes" aspect was the best stat as you get easily get 100% accuracy but only 3 minutes playtime.

This resulted in some cool clan specific stats to see who excelled at certain heroes. You could pick any character and any stat category and get a season breakdown of clan members on that hero. If Blizzard had a real API and we weren't dependent on the wonderful work of 3rd parties scraping the website - this could have been quite the project.

I switched to PC gaming and introducing PC alongside Xbox made it very difficult for Panda Love to adapt. It was hard-coded for Xbox support and now it had to balance PC and Xbox which led to very unstable software.


Fortnite

Fortnite - Roster List

Our clan also jumped onboard the worldwide phenomenon that was Fortnite. Our group could play squads (4) or duos (2) or even solo play and all would be logged by an API that Fortnite exposed through the Epic launcher.

This would really expose the limitations of Panda Love and a dated code base. Fortnite was not only cross platform, but you could use the same account in multiple places. So the unique qualifiers that Panda Love worked from suffered badly in trying to merge those together. I was known as iBot on Xbox Live, but iBotPeaches on Epic.

The profile pages for Fortnite had nothing special, just showing the collection of match count vs wins.  This was hooked to our Google Hangout bot as well for updates, so any time a clan member issued a /bot fn call - we knew someone had probably just won a game.

The detailed stats existed for each category to show how you preformed in each mode. Fortnite support died as quickly as it was added. We played hard for a few weeks, but the game adapted quickly and it wasn't too fun to play anymore for our crowd of gamers.


Calendar

Finally, our tool had a complex system for confirming to attend an event. The details around this system were once again, blogged about. However, it is important to note that each game above had support inside the calendar with proper amounts of max players allowed.

This meant you could view game specific stats during registration as we could correlate the authenticated user with their game specific profile. For example, viewing a Destiny 1 event might have this output.

Panda Love - Destiny 1 Calendar Event

While an event specific to Overwatch might show the player's best hero as well as stats at a glance.

These features were used quite heavily as the amount of players wanting to game were usually more than the max. The calendar became the source of truth for who was allowed to play.

This quickly died out as the clan numbers fell. Remember, we were all in college during the prime time of Panda Love - and that led to many many hours of free time in between classes.

I showed this project during an interview when asked about hobby projects and it got me my first job. Thanks to Panda Love - https://pandalove.club. (Who knows if it's still online or working when you read this)

You’ve successfully subscribed to Connor Tumbleson
Welcome back! You’ve successfully signed in.
Great! You’ve successfully signed up.
Your link has expired
Success! Check your email for magic link to sign-in.