Analysis of Lake Hylia Bomb Drops

A statistical cost-benefit analysis using Monte Carlo simulations to test the viability of dropping up to 4 bombs at Lake Hylia in order to improve bomb drop odds with Flex Drops.

Summary

This analysis aims to estimate the utility of dropping bombs in order to achieve Flex Drops before cutting the shrubs at Lake Hylia. The most extreme case of dropping 4 bombs was analyzed, but results can be trivially extrapolated to other amounts. Getting Flex Drops reduces the odds of getting no bomb drops from all 3 patches from 9.7% to 0.8%. In the simulations, Flex Drops resulted in trials ending with 20 bombs increasing from 20% to 31%; however, 33% of simulations without Flex Drops ended with 19 or 20 bombs. The results showed dropping 4 bombs resulted in a functionally insignificant increase of 0.5% in the final bomb count mean, while also introducing the 0.8% risk of ending with only 5 bombs.

If willing to stop at 19 bombs, rather than 20, simulations without Flex Drops could stop cutting before the 3rd grass patch 23% of the time, as opposed to 20% of the time with Flex Drops. Should runners choose to keep cutting until 20 bombs, however, only 9% of attempts were able to stop cutting before the 3rd group of shrubs. In conclusion, about 9 bombs appears to be the tipping point for whether a runner should waste bombs to achieve Flex Drops or not. Furthermore, due to the 3 bomb limit of Ocarina of Time, and time wasted throwing bombs, wasting any more than 3 bombs will likely slow the runner down, while not increasing bomb count significantly.

It is recommended that all runners study the requirements for Flex Drops before attempting to manipulate them in their runs, as it is not uncommon for runners to learn about this topic and begin wasting bombs at points in the run when Bomb Flex Drops are not possible due to other missing requirements. Another conclusion from this study could be that bombs should be used liberally prior to visiting Lake Hylia, as extra bombs have a minimal effect compared to having Flex Drops, and any time that could be saved using them is well worth it.


Background

In some of the speedrunning routes for Ocarina of Time, specifically 100%, having a decent bomb count is paramount to being able to accomplish all necessary tricks. Due to being the location with the highest density of shrubs in the entire game, Lake Hylia is an ideal location along many routes for farming bombs drops. Below are the drop charts for all shrub patches for both Child and Adult Link:

Child Link Shrub Patch Drop Table
1
16
1
16
2
16
2
16
2
16
2
16
6
16

Adult Link Shrub Patch Drop Table
1
16
1
16
2
16
1
16
1
16
1
16
1
16
1
16
7
16

While shrubs at both ages normally have a 1/16 chance of dropping bombs, certain conditions in-game allow for an additional 1/16 chance known as a "Flex Drop" to drop bombs as well. The conditions to get bombs from a flex drop are:

  • Have more than 5 hearts, filled
  • Have non-zero magic, or magic not unlocked yet
  • Have Bow/Sling(Depending on age), and more than 5 of their respective ammo
  • Have 5 bombs or less

In the past several info-graphics were created explaining Ocarina of Time's Drop Tables and Flex Drops, and even specifically Bomb Drops from shrub patches. All relevant infographics are shown below:

Related Infographics



Introduction

In order to optimize bomb drops at Lake Hylia and increases chances of ideal bomb counts throughout a run, it's important to understand how and when a runner should consider reducing their bomb count in order to improve the odds of bomb drops via Flex Drops. Getting Flex Drops doubles the odds of a bomb drop from any individual shrub, and since 3 shrub patches of 12 shrubs exist at Lake Hylia, this increase is multiplied across 36 shrubs.

The aim of this study is to test whether spending excess bombs that prevent Flex Drops could be expected to result in a net gain in bomb count. The end goal of such analysis is to assist runners in making the decision as to whether or not they should intentionally spend bombs prior to reaching Lake Hylia. Two effects were measured: the final bomb count, and the number of shrub patches that were necessary to cut before achieving a bomb count of 20. The analysis was also run with the Normal group, without Flex Drops, stopping at 19 bombs, rather than continuing for 20, as this is a realistic expectation from a normal run.


Methods

While in-game testing would be ideal for accuracy, running a large number of simulations in-game and tracking the results automatically is more complicated than this analysis warrants. Instead, the known probabilities for the drops were used to create a simulation of outcomes, allowing us to use the Monte Carlo method by running 1 million simulations of cutting the grass patches at Lake Hylia.

Assumptions
  • There are 3 groups of shrubs with 12 shrubs each
  • Flex drops double the chances of bomb drops from 1/16 to 1/8 for each shrub cut. This is confirmed by RAM analysis of in-game drop tables.
  • Runners will stop cutting grass after achieving nearly 20 bombs. Separate analysis were performed for stopping at 19 and stopping at 20.
  • To account for bomb drops falling onto the runner mid-spinslash and ending Flex Drops, the simulation assumes 3 bushes can insta-drop a bomb onto the runner, and they are distributed throughout the spinslash at 1, 4, and 9 plants cut. The simulation also assumes a 50% chance of the drop flying in the direction of the player.
  • Runners will immediately grab any bombs dropped, rather than cutting 2 shrub groups before collecting any bombs in order to flex drops, doing so, however, could improve the Flex Drop effect very significantly, and testing shows it is very feasible.
Simulation Code in R
# Cutting bush group Monte Carlo
          
attempts <- 1000000 #1 million trials
bombFinishNormal <- bombFinishNormalGroups <- bombFinishFlex <- bombFinishFlexGroups <- vector(length=attempts)

bombNormalProbability <- 1/16

for(attempt in 1:attempts)
{
  bombFlexProbability <- 1/8 #Reset flex drop odds
  
  bombCountFlex <- 5 #Reset bomb counts
  bombCountNormal <- 9
  
  groupCountFlex <- 0 #Reset number of bush groups cut
  groupCountNormal <- 0
  
  for(bushGroup in 1:3) {
    if(bombCountFlex < 20){ #Increment bush groups cut
      groupCountFlex =  groupCountFlex + 1
    }
      
    if(bombCountNormal < 20) {
      groupCountNormal  =  groupCountNormal + 1
    }
    
    if(bombCountFlex > 5){
      bombFlexProbability <- 1/16 #Remove Flex drops if already got a bomb drop
    }
    
    for(plant in 1:12) {
      drop <- runif(1, 0, 1) #Random number from 0 to 1

      if(bombCountFlex < 20 && drop < bombFlexProbability) {
        if(bombFlexProbability == 1/8 && (plant == 1 || plant == 4 || plant == 9)) { #Bushes immediately next to Link
          if(runif(1, 0, 1) > .5){
            bombFlexProbability <- 1/16  #Remove Flex drops partway through the spin attack
          }
          
        }
        bombCountFlex <- bombCountFlex + 5
      }
      if(bombCountNormal < 20 && drop < bombNormalProbability) {
        bombCountNormal <- bombCountNormal + 5
      }
    }
    if(bombCountNormal > 20) { #Fix count back to max of 20 if over 20.
      bombCountNormal <- 20
    }
    if(bombCountFlex > 20) {
      bombCountFlex <- 20
    }
  }
  #Add results of current attempt to results tables
  bombFinishNormal[attempt] <- bombCountNormal
  bombFinishFlex[attempt] <- bombCountFlex
  bombFinishNormalGroups[attempt] <- groupCountNormal
  bombFinishFlexGroups[attempt] <- groupCountFlex
}

table(bombFinishNormalGroups) #Table for Number of groups cut before 20 bombs without flex drops
table(bombFinishFlexGroups) #Table for Number of groups cut before 20 bombs with flex drops

table(bombFinishFlex) #Table of final bomb counts for flex drop attempts
summary(bombFinishFlex) #Statistical summary of bomb counts for flex drops
table(bombFinishNormal) #Table of final bomb counts without flex drops
summary(bombFinishNormal) #Statistical summary of bomb counts without flex drops

Results

Two different simulations of 1 million trials were run, one with a goal of achieving 20 bombs, the other with a goal of achieving 19 bombs, in order to better compare how a runner would likely respond in a real run. The simulations would stop cutting patches early if they achieved their goal before cutting all 3. Their results below will be shown in parallel.

Number of Shrub Patches Cut Before Achieving Bomb Count Goal

One potential goal could be to reduce the number of patches a runner has to cut to fill up their bombs, this could potentially save a few seconds if Flex drops potentially allow a runner to stop cutting earlier than normal. The data for this is shown below:

Number of Shrub Patches Cut Before Finishing or Reaching 20 Bombs
Patches Cut123
Flex Trials149999241022608979
Flex Proportion15.0%24.1%60.9%
Normal Trials35256151402813342
Normal Proportion3.5%15.1%81.3%
Number of Shrub Patches Cut Before Finishing or Reaching 19 Bombs
Patches Cut123
Flex Trials151203240692608105
Flex Proportion15.1%24.1%60.8%
Normal Trials171182276914551904
Normal Proportion17.1%27.7%55.2%

Final Expected Bomb Count For Each Trial Type

Another goal could be maximizing the expected or median bomb count after cutting the bushes. This would mean that one method might, on average, end up giving more bombs than the other. The data for this is shown below:

Statistics for Finishing or Reaching 20 Bombs
Trial TypeMedianMean
Normal1917.24
Flex2017.33
Statistics for Finishing or Reaching 19 Bombs
Trial TypeMedianMean
Normal1916.84
Flex2017.33

Proportion of Trials Ending on Specific Bomb Counts

Should having at least a certain number of bombs be important, then knowing what percent of the trials of each type gives an idea of how often one method will give that result compared to the other. The data for these results are split by goals of 20 and 19 bombs, and Flex and Normal trial types:

Flex Trial Final Bomb Counts, Attempting to Reach 20 Bombs
Bomb CountTrialsProportion
581380.8%
1012957813.0%
1525003925.0%
2061224561.2%
Normal Trial Final Bomb Counts, Attempting to Reach 20 Bombs
Bomb CountTrialsProportion
9975559.8%
1423518123.5%
1927430027.4%
2039296439.3%
Flex Trial Final Bomb Counts, Attempting to Reach 19 Bombs
Bomb CountTrialsProportion
580990.8%
1012973013.0%
1524978525.0%
2061238661.2%
Normal Trial Final Bomb Counts, Attempting to Reach 19 Bombs
Bomb CountTrialsProportion
9982249.8%
1423479523.5%
1966698166.7%



Analysis

Breaking the results down into easily digestible graphs, it becomes easier to rapidly identify the consequences of attempting to improve our outcomes with Flex Drops.

Effect on Final Bomb Count
Shown below is the effect of Flex Drops on final bomb count when trying to get to 19 bombs or 20 bombs:


The above charts show Flex Drops are significantly more effective at achieving a final bomb count of 20, with 61.2% of trials ending with 20 bombs. However, when the simulation stops farming bombs at 19, 66.6% of the Normal trials reached 19 bombs. Other parallel bomb counts (9,10; 14,15) are fairly similar, however, Flex Drops do have the benefit of being 1 bomb ahead.

Extrapolating to Other Starting Bomb Counts

Starting with 9 bombs is worst-case scenario when comparing to Flex Drops. However, the results for any other bomb count would be the same, simply subtract out however many bombs less there are from the final total bomb count. For example, if a runner started with 8 bombs, 66.6% of attempts would end up at 18 bombs or more, with 39.3% of attempts getting 20 bombs should the runner choose to try for 20 bombs.

Since the difference of 1 bomb is rarely significant in runs, most likely runners will accept stopping at 19 bombs. This difference becomes more significant should a runner enter Lake Hylia with less than 9 bombs, and may be enough to justify wasting bombs to get Flex drops.

Effect on Number of Shrub Patches Cut

There is a similar result with the number of patches the simulations had to cut before running out of patches or reaching their goal of 19 or 20 bombs:


Again, it shows that if a runner chooses to stop at 19 bombs, rather than top off at 20, Flex Drops yield actually slightly worse results. This result makes sense, considering Flex Drops must get an entire additional drop in order to keep up.


Conclusion

The results of these tests show that around 9 bombs is about the tipping point where it begins to stop making sense to throw away bombs in order to gain the benefits of Flex Drops. Due to the game's limitations of only allowing 3 bombs out at any period of time, it is likely faster to simply not throw away the bombs.

Another factor that should be taken into consideration is simplicity. While Flex drops have the potential to save time on a run, it may be more effort than it's worth for a runner to worry about them. On the other hand, runners who are aware of the data shown here can plan ahead. Knowing that farming with 5 bombs will yield similar end results to farming with 9 bombs means that an experienced runner may be able to use up any bombs they have above 5 doing small optimizations prior to reaching Lake Hylia.

The other potential issue of using Flex Drops is it allows a 0.8% chance of getting no bombs at all and leaving Lake Hylia with only 5 bombs. This would be detrimental to any run, and may not be an acceptable risk. Bottom line, dropping 2-3 bombs is probably around the maximum range where it's worthwhile, more than that incurs unnecessary risk for no benefit.

Thank you for taking the time to read this analysis, I hope it plays a role in improving your runs.