React Experiment

February 27, 2025

I've been thinking about the practical applications of some technologies I've been learning. While it can easily be argued that playing a video game has limited practical application, there are a lot of chores associated with the looter-shooter genre. One of those things is the allocation of time for activities.

Here's a brief description. The context for this conversation is the game Destiny 2, where the player vs. player mode (PvP) has several flavors but is generally known as the crucible. Within the game, there are non-player characters known as vendors; these vendors have one or more rank-up systems. While you play, you earn points in one or more systems, and when you fully level up a given system, you perform a reset, return to zero, and start the level-up progress over. Resets are good in that they give you rewards of various kinds; the details are not interesting to anyone who doesn't play the game.

One of the considerations for a reset is leveling bonuses, which frequently correlate with events. For example, when an ongoing event coincides with a leveling bonus, you might get double the rank rewards for completing activities. The leveling bonuses make the time spent in those activities twice as valuable in leveling up a system, getting to a reset, and getting to that sweet, sweet loot. After all, that's why we play these games.

Tools of the Trade

It's nice to understand your progress within the leveling systems. There are many tools available for Destiny 2 players to reduce the pain associated with game chores. There are inventory management systems, loadout building systems, team analysis systems, mechanics solution systems, etc. Most of these systems combine multiple aspects. For example, DIM allows inventory management, loadout management, viewing the progress of bounties, quests, seals, etc. When viewing progress within the leveling systems, most tools focus the display on your percent complete toward a reset. There's a lot of detail in the display that I'll break down, but DIM shows it like this:

Circular Representation of Level Up Mechanic

Things of note in that display:

  • The circle to the left has an inner and outer circle representing your progress within the rank and your progress toward reset, respectively. These are spatial representations of progress; the more complete the circle, the more progress you've made.
  • The symbol in the middle of the circle represents your current rank visually, while the top line on the right represents it textually, and the line below provides the rank name.
  • The third line on the right displays the current level progress (732) and the current progress and max value within the rank. (232 and 450 respectively)
  • Below that are five yellow squares. They represent play continuity. In this case, the player has played at least five consecutive games within the activity.
  • Below that is a percent complete for reset.
  • Below that is a reset count.

How long would you have to play to reach reset in that leveling system? No idea. Getting there would require a lot of other information, and I've created a spreadsheet to estimate that in the past.

Sheetware

The loop for these leveling systems is that you progress at the end of games. If you play more games in a row, you might get a bonus, and if you win, you make more progress than if you lose. The max points for the PvP systems are 10,000, and ranks can be ignored for our purposes. My spreadsheet is a semi-manual method to compute remaining effort in time and games. You play a game and make progress; you record your current score in one column and the outcome in another. I'm tracking two leveling systems simultaneously, so three values will be entered per game. The estimated time for a reset of each leveling system is then calculated, as well as an estimated number of remaining games.

A Project

The spreadsheet is fine; it does what I want it to. However, we're looking for learning opportunities, and this feels like something that could leverage a React SPA that consumes the Destiny 2 API to do the calculations.


Profile picture

Written by Scott Sutherland who lives, works, and rides bikes in Minneapolis, Minnesota.