Skip to main content

Pretty Good Hat

Tag: destiny

Today I dusted off my latest video game hobby project, ArmoreR, my Destiny 2 armor stats profiler, and finished some improvements that have been on my list. I haven’t been motivated to dig back into it for a while partly because I just … didn’t feel like it … and partly because I had hit a point of complexity with it that made it hard to approach again. But I had a really nice time catching up with just how it works and then gradually identifying and implementing the improvements I wanted to make. It’s a good lesson that is sometimes hard for me to remember, that small but concrete steps add up.

Destiny nerd warning, most people can probably stop reading now: This version adds something really useful to loadout building: class items! I had to think on how to do this for a while, because most class items don’t add much to the stat value of an armor build, and each added class item combinatorially increases the number of armor set combinations that have to be measured. I settled on including only masterworked class items because they add enough stat points to tip one or more categories into the next tier. Still, for characters that have a lot of armor to choose from, doubling (or more) the total number of builds does add to the time that the tool requires. I added some ways to optionally include/exclude more armor to try to make this processing time more bearable. I also found a few improvements to make and fixed a number of bugs along the way, and will plan to return for a round of efficiency-finding later.

The tool is at a neat, workable point right now, where it’s actually useful for finding armor builds and, really critically, the armor pieces that work across multiple builds of interest. I’ve learned a ton working on it, and am pretty proud of it. There’s more documentation over at the application and if you happen to be into Destiny I’d love to hear what you think.

Spent a good chunk of the day learning how to make a Shiny app out of my Destiny Armor Profiling Thing. That was fun and my brain is also broken.🎮

🎮 Speaking of Destiny, a note out to my micro.friends gamers: The upcoming expansion will be free for XBox with Game Pass, so if any folks new to the game are interested in checking it out, I’m happy to team up and show you some ropes! (I’m actually playing primarily on PC/Steam, so equally happy to meet up there.)

Alan Plays Destiny - Season 11

This was an extra-long season of the game due to delays in the launch of the next significant expansion, Beyond Light. That length worked well for me because I bounced out of the game for a while this summer and fall and enjoyed some other games and pastimes from my mostly-quarantined home. (The seasonal experiment has been at times a lot of fun and often really frustrating, because it created a game loop that was often too much of a grind.)

But then I happened into spending more time with a nice community of friendly and welcoming players, and had a really good time the last several weeks checking off activities that I hadn't completed and earning my first titles in the game. Those are special designations that players get to wear in-game for finishing significant sets of activities centered on seasonal quests or specific game modes. It feels good to rock the MMXX label while shooting space magic at aliens. 

2Q==

I'm happy to have come back and really enjoyed the game lately, pleased to have earned some titles, but most fulfilled by having done it alongside folks who are good company. We cheerfully helped one another complete raids we hadn't checked off and finish incomplete quests.  Having finished off the title for both the current season and the "moments of triumph" title for 2020, I'm ready for more.

2Q==

Previously in this series:

Alan plays Destiny - 2020 Edition

Previous updates:

----

It's been a while since I did this, so here's another set of revised win/loss numbers and weapon stats for my Destiny 2 play. The final Iron Banner -- a week-long competitive PVP mode -- of the current season concluded last week, so I thought it was time to wrap up this edition of the perpetually-open fish shell and R Studio session and get on with making a picture of my data. 

Iron Banner holds a lot of fun, nostalgic memory for me from the first Destiny. It was one of the events that offered a chance at loads of high-powered loot that one could use to upgrade gear, and diving into it broke my reluctance to spend time playing in PVP game modes. The current incarnation of the game mode is not quite the same loot-fest, but it's still a game type that I generally have fun with, so I look forward to playing it when it comes around. It's also a nice discrete mode to use as a lens into my game data. Here's a big picture of my games since the launch of the last big expansion, Shadowkeep, last fall:

And the summary of all that data says that I perform pretty similarly across all three of my shooty space dolls, with the edge going to the Warlock. (Which surprises me, actually.)

class Outcome #Games Avg K/D

------ ------- ------ ------ Hunter Defeat 51 12.92 Hunter Victory 57 12.72 Titan Defeat 55 13.64 Titan Victory 58 14.41 Warlock Defeat 41 13.95 Warlock Victory 61 15.49 

This last completed Iron Banner was the first such event in a long time where a non-Erentil was anywhere close to my use of that precious voop-shooter; I had a really good time experimenting with a fun change-up in my loadout, which is probably a good finding, since Bungie will be sunsetting all my favorites in seasons to come. 

Tune in next time, when I might, finally, complete writing up the chain of tools that I use to make this data. If you made it this far and need a buddy in-game, I'm playing on Xbox and on PC these days; let's splode some aliens sometime from our respective quarantines.

A dot plot showing win and loss performance over time, with my Titan having a slightly better performance A plot of Destiny weapon usage showing the Erentil fusion rifle being my far and away favorite

I’ve been meaning to post an update to my Destiny Stats for a good long time. While I have a long methods post sort of drafted (and have dramatically improved the way I produce this information), I thought I’d share these stats from the Iron Banner events through the Shadowkeep expansion: A plot of my win-loss and score by class, and a visual of total weapon usage. The latter clearly shows that I have a pretty serious fusion rifle problem.

I just finished up the newest Iron Banner event today. I haven’t played much Destiny the past month or so, but got back into it with this week’s event and had a lot of fun.

One of the things that continues to be neat about keeping these records is that the picture, once I finally build it, does tell a story. There’s the Erentil story, obviously (that fusion is so good), but also the numbers for Beloved and Imperative each represent time earning pinnacle in-game weapons, for example. I really like the reminders of the times that I enjoy playing this game that live behind these numbers.

Alan Plays Destiny: My Season 3 Summary

A while back, I wrote about my "Destiny Diary," a combination hobby coding and gaming project that uses the Destiny 2 API to gather information about my in-game loot and identifies new items so that I can annotate them with my own tiny journal about my play. This was a way of telling stories that come out of my time playing the game, and trying to play conscientiously. 

For "season 3" of the game, I continued this tracking, and added a brand new feature: game-by-game storing and aggregation of my stats. There are tracking sites that use the API to monitor the meta -- overall weapon dominance and how those numbers trend over time -- but they don't provide per-weapon detail *per player*. So I set about to do that for myself, and kept the record of every activity (more or less) that I played through this season of the game (roughly, early May through early September). Each game is stored as a json file that I can parse (again, with my favorite ever tool, jq), build summary data, and then bring into R to analyze and visualize.

Now, just as the Forsaken update is about to launch and end season 3, I thought I should actually go look at that data. Here are my top twenty weapons, by kills, for each of the PVE and PVP game modes:

|       PVE         |  n   |               PVP                |  n  |
|-------------------|------|----------------------------------|-----|
|      Sunshot      | 2408 |          Vigilance Wing          | 325 |
|      Crimson      | 1763 |         The Jade Rabbit          | 251 |
|   Origin Story    | 1199 |             Crimson              | 188 |
|     Valakadyn     | 1193 |            Valakadyn             | 120 |
|   True Prophecy   | 1024 |            Kibou AR3             | 116 |
|   Polaris Lance   | 852  |         Perfect Paradox          | 63  |
|  Niflheim Frost   | 822  |         Positive Outlook         | 62  |
|    Vacuna SR4     | 715  |         Main Ingredient          | 56  |
| IKELOS_HC_v1.0.1  | 613  |       The Time-Worn Spire        | 39  |
|    Conspirator    | 522  |            The Vision            | 37  |
|  Perfect Paradox  | 443  |            Vacuna SR4            | 33  |
|     Kibou AR3     | 442  |           Proelium FR3           | 28  |
|   Better Devils   | 392  |         Sins of the Past         | 25  |
| Positive Outlook  | 355  |         Legend of Acrius         | 23  |
|   Machina Dei 4   | 333  | Hawthorne's Field-Forged Shotgun | 22  |
| Sins of the Past  | 244  |           Manannan SR4           | 18  |
| Inaugural Address | 200  |       Stochastic Variable        | 18  |
| Nameless Midnight | 170  |          Retrofuturist           | 15  |
| Skyburner's Oath  | 170  |           Conspirator            | 13  |
|  The Conqueror 2  | 156  |         Magnum Shepherd          | 13  |

There are actually a lot of stories just in this summary data! The top 2 for each game mode have a ton of kills, in part because those were required for the masterwork catalyst for each: Sunshot and Crimson had PVE masterwork requirements, while I went to the crucible *a lot* for the Vigilance Wing and the Jade Rabbit masterworks. And while I told myself at the time that I came to really enjoy the Jade Rabbit, you can see here that I did exactly the 250 crucible kills required for the masterwork, plus 1 (!), and then put it away again. Oh, well. 

On the PVE side, after the masterwork grind, two auto rifles and a hand cannon round out my top 5, which tell a lot of stories of running strikes and story missions. Four of the rest of my top 10 are great, favorite scout rifles that I rotate frequently (Polaris Lance melts big enemies and I still haven't finished its masterwork). That Vacuna SR4? That's the D2 equivalent -- almost! -- of the legendary Hung Jury from Destiny 1. Also noteworthy is that three of those scouts are new in season 3; my previous season's favorite scout, Nameless Midnight, barely makes the top 20 (sorry, buddy; still <3 you). 

I would like to have a season 2 to season 3 comparison for PVP, because I changed a lot this season. These numbers show a lot of Crimson and auto rifle use, and less pulse, but the Time Worn Spire (pulse) was one of my favorites in season 2, especially during my grind for competitive wins at the very end of the season. Otherwise, while my numbers overall are much lower than for PVE (of course, because I play far more of that mode), there's a lot of variety here: more SMGs, shotguns and fusions. (Also, The Vision: the weapon finally, finally awarded by my forever faction, Future War Cult, for winning a faction rally finally.)

Bar graph showing number of kills per weapon, by game type (PVP and PVE)
Bar graph showing number of kills per weapon, by game type (PVP and PVE)

The plot above is just a different way of visualizing the same data, mostly to show how steeply different the overall numbers are for PVP and PVE, and to call out the handful of relatively big PVP numbers: again, those blue spikes are the weapons that I worked hard on for masterwork catalysts, and you can see how much higher they are than the comparable PVE numbers for the same weapon. 

This is a really interesting and useful way for me to document one of the hobbies that occupies a good chunk of my free time, and now that I've explored some of the data I'm happy that it sparked as many gaming memories as it has; there's a lot of time in successful and unsuccessful raid attempts, gradually improving crucible skill, and questing for specific items represented in these numbers. Forsaken/Season 4 introduces a new weapon system and will have a ton of brand new gear, so I'll look forward to watching my trends as we go into the new several months of the game.

Dear Destiny - a play log

I love it when things I like come together. Today, it’s my hobby of utilitarian hobby coding combining with my enthusiastic and occasionally proficient video gaming. I’ve played Destiny for a couple of years as my primary gaming diversion, and now play Destiny 2 pretty regularly.1 I try to be conscientious about playing intentionally and keeping track of my play.

In the course of play, Destiny and Destiny 2 drop a lot of loot, some of which is important, rare, or particularly fun. I want to associate special memories with some of them, like the armor piece that dropped after a spectacularly fun PvP match, or the weapon rewarded for completing a quest just in the nick of time with a clutch move by a team member.

I will sometimes make a notes in my Day One or paper journal about having a notably good time in a game, but my hobby coder side always wondered if there was a way to make something more systematic. Bungie provides a pretty sophisticated API that has enabled an ecosystem of stats trackers and item managers (the latter of which are extremely useful, even necessary; my favorite is Ishtar Commander). Surely I could build myself a sort of play journal using the API! I told myself, several times over the past year, but I didn’t get around to actually doing it until I had some spans of free time over my winter holiday.

As usual for me and these kinds of things, just getting OAuth to work properly was a pain in the ass. After that it was a matter of tinkering over a handful of days to piece together a useful understanding of the API endpoints that I needed to use. Unfortunately for my intended use, the information returned with game inventory doesn’t include a datestamp, so it’s not straightforward to make a dated list of all my characters' awesome equipment in a single go.

So I built a short script and several fish shell commands that 1) update my OAuth token, 2) fetch my current complete inventory, 3) compares it to the previous inventory, 4) pulls out the new items, 5) filters out the common items and leaves just so-called Legendary or Exotic gear, 6) and deposits that smaller, filtered list in a json-formatted document.2 I can run this series of operations whenever I want to update my “journal” and then annotate the records I care about with notes, about who I played with, what activities we ran, and anything else I want to remember.

Here’s an example from one of these “diary” files:

{"item":"Tarantula","type":"Legendary Linear Fusion Rifle","hash":2502422775, "notes": "Maximum power linear fusion. I haven't played much with these so will give this one a try (have a few other copies). I'm not sure what this can be infused into, anyway."}
{"item":"Out of Options","type":"Legendary Submachine Gun","hash":2700862858}
{"item":"Main Ingredient","type":"Legendary Fusion Rifle","hash":3445437901, "notes":"Masterworks max power Main Ingredient from a clan engram. This one is a keeper, though I may re-roll it from reload speed."}
{"item":"Skyburner's Oath","type":"Exotic Scout Rifle","hash":4255268456, "notes":"Xur is in town! I didn't have this one - from the exotic engram. I think I have the ornament sitting in the vault from like week 1."}
{"item":"It Stared Back","type":"Legendary Sword","hash":1018072983, "notes":"Masterworks It Stared Back! Ran the raid from a Calus CP today with several of the clan, had a great time, and we got it done."}
{"item":"Emperor Calus Token","type":"Legendary Redeemable","hash":1505278293}

Along the way, I found my favorite, favorite new tool: jq. I’m relying on it extensively throughout this little system, basically to do all the lifting with the json returned from the API, both for managing the Oauth info and for dealing with inventory data. It’s a wonderful tool.

jq parses json wonderfully, and can format output for new uses, so:

for i in (ls diary*.txt)
  echo "## I played Destiny:" $i \n | sed s/diary-// | sed s/\.txt// ; cat $i | jq -r '. as {item: $item, type: $type, notes: $notes} | if ($notes | length) > 0 then " * **" + $item + "*** / " + $type + "\n    * " + $notes + "" else " * " +  $item + " / " + $type end '
end

… produces this snippet of formatted output, excluding the items where I haven’t made any notes:

I played Destiny: 2018-02-15

  • Shepherd’s Watch / Legendary Sniper Rifle
    • Today was a good day to play Crimson Doubles! Really, really fun games tonight, mostly winning big: I went 4, 15 and 6 KDA. Warlock rifts everywhere, Uriels and Better Devils, lots of grenades and some pretty cool nova bombs. This was fun.
  • Cadenza-43 / Legendary Pulse Rifle
    • The TWAB today says pulse rifles are coming back to the meta… so we’ll see! I have some of just about everything ready to try our further. (Your time will come, Autumn Wind.) I also need pretty badly to do some vault cleanout: currently at 190/200 slots and have a bunch of duplicates and others to take care of. Will have to spend some time with DIM this weekend.
  • Perseverance / Legendary Auto Rifle
    • A couple of these have dropped but I haven’t tried them. I like the name.

This is really fun! I run my string of commands every time I want to make an update, then I can annotate the output in my current editor of choice.3 At some point I’ll push that output into some nicely-styled calendar, much more like a real play diary, perhaps with an integration to actual play time during the period depicted in my log. (That data is also available via the API; picture a heatmap by day or week along with the entries, maybe images of items from the manifest, too.) I have half a mind to try to make it a small web app usable by more than just me.

A fun side effect of building this is figuring out how to move items around in my inventory along the way. Nothing makes me feel more like a hacker than typing something into a shell and watching my Hunter equip a sweet rocket launcher in a video game. Ultimately, in my quest to be thoughtful about my game time, I learned a bunch about working with json and oauth and made something that multiplies my enjoyment of both the gaming and journaling that I do. I’m calling that a win.


  1. My list of non-Destiny games to play is getting longer, though! ↩︎

  2. I’m so pleased that almost the entire workflow is just a series of shell commands. The script only manages OAuth and performing one of the actal API calls, and all the other work is done at the shell. It’s a neat example of the power of flexible, loosely-joined *nix-based tools. ↩︎

  3. Currently I’m heavily into vim at home, though at work I’ve recently picked up emacs and org-mode (again) via spacemacs. ↩︎