The Convoluted Thoughts and Ideas of a New Programmer #1 - Exotic Drop Rates

IMPORTANT: A Large portion of this writing is MISSING due to going over the character limit
(by over twice as much) please click on the link to read the full writing. You will likely not understand what is happening without understanding the assumptions that I gave in my writing.
What is Missing:
-My clarification on the format of my text
-My assumptions that I have made about Destiny 2 and it's code
-My Solution to the Exotic Engram issue
Please click the link below to read/download the FULL writing. Thank you!
Separate site w/Download link: https://jmp.sh/hqm48Wm
Hi everyone, just as background, I am 19 and absolutely in love with programming and everything about game development, I am in my second programming class I am taking of hopefully many more. I hope to eventually become an intern and find a home at a company in the game development industry such as Bungie, and I thought it would be interesting to share with people a (simplified, or what I am calling convoluted) version of how the game currently works, with a focus on topics that are of current concern and issue with the player-base. As such, I decided to focus this first one on Exotics, my ideas
on how it works, and solutions I have to solving this.
What I hope to solve with my very simplified logic is to break down the stringent/complex creation of Destiny 2, and to be able to better understand and share with people how I think the game works. (The likelihood of me being wrong is very high, as I am just learning, I just thought this would be something interesting to share with people and to do as a personal side project).
***********************************************
//Variation 1
Simplified Ex:
//any non-major such as a thrall, centurion, or vandal is killed
if (non-major is killed)
{
//all of the engram variants
exotic_engram_drop_rate = .0004;
legendary_engram_drop_rate = .008;
blue_engram_drop_rate = .01;
if (power-level is under 300? or level is under 30?)
{
green_engram_drop_rate = .02;
}
/*the program will then send each of these variables to a function that will return TRUE or FALSE,
separate boolean variables are required in order to return TRUE or FALSE. The function will calculate
the likelihood of these engrams dropping, and run to see if they will drop in this instance or not.*/
if (exotic_engram_drop is TRUE)
{
/*drop an exotic engram, which once dropped has a variable sent to a function to determine what
type of exotic it is, and the exotics name, once this is decided the exotic engram becomes it's own
entity? until it is put inside of the players inventorywhere an object is placed.*/
}
if (legendary_engram_drop is TRUE)
{
/*drop a legendary engram, which once dropped has a variable sent to a function to determine what
type of legendary it is, and the legendary's name, once this is decided the legendary engram
becomes it's own entity? until it is put inside of the players inventory where an object is placed.*/
}
/*for the sake of this example, I will not list the other engrams, we will just assume that they have
similar IF statements and methods to acquire the items*/
}
/*once again this is a very simple rendition of what I think is occurring when an enemy is killed in Destiny 2, this example is required to understand the later method of adjusting exotic drop rates and making them better obtainable for players*/
-------------------------------------------
//Variation 2
Simplified Ex:
double exotic_drop_rate_non_majors = .0008;
double exotic_drop_rate_majors = .0012;
double exotic_drop rate_bosses = .0036;
//repeats for each engram and it's classification variants
/*when an entity is killed, depending on the name of the non major that is killed, it will access these variables from the main file, and will do a similar process as Variaton 1*/
Simplified Ex:
//any non-major such as a thrall, centurion, or vandal is killed
if (non-major is killed)
{
/*Take the variables that were initialized at the start of the program and for NON-MAJORS and send
each of these variables to a function that will return TRUE or FALSE, separate boolean variables are
required in order to return TRUE or FALSE. The function will calculate the likelihood of these engrams
dropping, and run to see if they will drop in this instance or not.*/
if (exotic_drop_rate_NM == TRUE)
{
/*drop an exotic engram, which once dropped has a variable sent to a function to determine what
type of exotic it is, and the exotics name, once this is decided the exotic engram becomes it's own
entity? until it is put inside of the players inventory where an object is placed.*/
}
/*for the sake of repeatedly typing the same thing, we will assume that these if
statements will repeat for each engram type. (exotic, legendary, blue, green).*/
}
-------------------------------------------
//Regarding both variations and the following ideas
/*At the end of both variations, an ELSE will occur in the instance of no engram dropping, that is, the program returns false for every function. Simply structured, it will look like this and be situated inside of the if statement.*/
Ex:
if ()
{
//parameters sent to function that returns true and false
if (TRUE)
{
//in this iteration the boolean returns false and never enters this section
}
}
else
{
//nothing drops and nothing changes
}
***********************************************
//Explaining my Solutions as well as Bungie's from my perspective
/*Bungie's method: Bungie has stated they are implementing ways of increasing the likelihood of an exotic drop giving an exotic that a player/guardian has not yet obtained, in order for them to do this they use functions that will interact with the players inventory (likely the collection, as it will always be exact, which is why I believe the collection existed before it's visual implementation into the game, just for Bungie to be able to see what a player has) and these functions will return TRUE values if a player has an exotic, and FALSE values if a player does not have the exotic. The next assumption has a high
probability of being wrong, but in explanation it makes sense. There is a variable that marks the probability of an exotic dropping (such as the ones I made in my previous variations and examples) and this will be sent out into a function to determine IF an exotic is dropping. If an exotic is said to drop,
it utilizes a large set of equations to determine which exotic is dropped. (there are many ways to do this). Lets create an example:*/
/*Let's say there are 10 exotics in the game, and an exotic engram drops, you have a 10% chance of each exotic dropping from that engram once it is obtained and opened. One method of reducing the likelihood of engrams you own dropping is if it is an exotic that you own, the drop rate is reduced by 5%. If you own it and it is reduced by 5%, then that 5% must then be split among all other exotics to give them a higher chance of dropping. Breaking this down further:*/
//Let's say there are 10 exotics in the game, and I own 2 of the exotics. The first two of this list will be exotics that I own
//Each exotic engram drop chance:
1.5%
2.5%
3.11.25%
4.11.25%
5.11.25%
6.11.25%
7.11.25%
8.11.25%
9.11.25%
10.11.25%
/*In order to arrive at these numbers, using the 10 exotics and the 2 exotics of those that I own, the equation would roughly look like this*/
double exotic1_chance = .10;
double exotic2_chance = .10;
double exotic3_chance = .10;
double exotic4_chance = .10;
double exotic5_chance = .10;
double exotic6_chance = .10;
double exotic7_chance = .10;
double exotic8_chance = .10;
double exotic9_chance = .10;
double exotic10_chance = .10;
double excess_exotic_chance = .0;
/*in a separate part of the program, it will check if you own an exotic or not using a version of your collections tab, a similar if statement would exist for each exotic in the game.*/
if (exotic1 is TRUE) // meaning that you own it
{
exotic1_chance = .05; //changes the exotic drop rate for exotic1 to 5%
excess_exotic_chance = (excess_exotic_chance + .05);
}
else
{
exotic1_chance = (exotic1_chance + total);
}
/*Once all of this has been done, it would calculate all of the exotics percentages so that they all add up to
100%, EXCLUDING the two that you own. The equation would look somewhat like this*/
total = (All of the exotic chances excluding the ones you have + the excess exotic chance);
total = (total / the number of exotics you don't own (8));
//total now equals 1.25%
/*then you add total to each of the exotic chances for exotics you don't own. This should be simple
as the ones you don't own will come back with false. for each separate if statement it would look
something like this*/
exotic3_chance = (exotic3_chance + total);
exotic4_chance = (exotic4_chance + total);
exotic5_chance = (exotic5_chance + total);
exotic6_chance = (exotic6_chance + total);
//will repeat for all exotics
/*This would effectively reduce the likelihood of exotics you own from dropping in the game, and increase the likelihood of exotics you don't own to drop. NOTE: this is just a concept, not what Bungie is actually doing, but it explains a way it may be exacted.*/
******************************************
My only hope with this project was to hopefully explain the logic behind the drop rates for engrams and exotics in Destiny 2 in a VERY simplified version. I hope this was readable to people, and I hope that anyone who read it all enjoyed the read! If anyone would like to me work through another aspect of Destiny 2, I would love to do it; I find this stuff very interesting and fun to do.
Thank you for reading!

This site uses cookies to provide you with the best possible user experience. By clicking 'Accept', you agree to the policies documented at Cookie Policy and Privacy Policy.

Accept

This site uses cookies to provide you with the best possible user experience. By continuing to use this site, you agree to the policies documented at Cookie Policy and Privacy Policy.