Gacha Odds
Sometimes it’s hard to remember that Limbus Company is a gacha game, given the ease of crating Identities and E.G.Os via mining in the Mirror Dungeon. However, there are specific events, where the units only come from extracting. (In this article, we will refer to extraction as pulling, which is a more standard gacha nomenclature). Recently, we also have our first collaboration announced, thus we should work out how many pulls we need to save.
Types of Limited Banners
We will focus on acquiring Identities, E.G.Os and Announcers. We will also calculate the expected pull numbers for people who do not care for announcers.
Historically, the only limited banners are the Walpurgis Night (Walpurgisnacht) banners. In this banners, we would have to wait until the next Walpurgis Night to dispense (or extract) the various identities. This could be anywhere from a 3 month to 6 month wait, as the timing of Walpurgis Night is very unpredictable (fact imitating fiction, afterall).
Recently, we have our first collab banner announced. We will also speculate a bit on what is available in the Gacha, and how many pulls one would require to acquire all the limited goodies. First, we will look at what is up for grabs.
Banner | 00 IDs | 000 IDs | E.G.Os | Announcers | Release Date |
---|---|---|---|---|---|
1st Walpurgis Night | 1 | 1 | 1 | 0 | 26 October 2023 |
2nd Walpurgis Night | 1 | 1 | 0 | 2 | 11 January 2024 |
3rd Walpurgis Night | 0 | 1 | 2 | 2* | 2 May 2024 |
4th Walpurgis Night | 0 | 2 | 1 | 2 | 5 Sep 2024 |
Arknights Collab | 0 | 0 | 4** | 1** | Sep - Oct 2025 |
(*) Angela Announcer was also available, but was not on rate-up and actually given out for free during 1st Anniversary
(**) Likely 1 or more E.G.O or Announcer will be give out as welfare, but this is merely speculation
From the announcement recently that 00 Identities will be fewer, it is not unreasonable to expect the upcoming Walpurgis Night to feature 2 000 Identities and 1 E.G.O or 1 000 Identity and 2 E.G.O, as well as 2 announcers. This is likely the worst case scenario and thus we will focus on this numbers to better plan the number of pulls we need.
Rates
Source: https://steamcommunity.com/games/1973530/announcements/detail/3880478611786270077
To simplify the calculation, we will use the assumption that none of the limited Identities will be 00s. Thus, we can ignore the different rate for ten-pulls as oppose to single pulls. (Fun fact: it has been previously confirmed via email from Project Moon that using 10 single tickets in the 10 pull is merely for convenience and do not guarantee a 00.)
The rates are as such
Type | Rates |
---|---|
000 Identity | 2.9% |
E.G.O | 1.3% |
Announcers | 1.3% |
Note that the featured Identities/E.G.Os/Announcers will occupy 50% of that rate. (Thus, assuming only 1 featured 000 Identity, its rate will be 2.9%/2 = 1.45%.) Moreover E.G.Os cannot dupe. On the event of 2 E.G.Os, we believe that after you pull one of the featured E.G.Os, the other one will occupy (at least) 1.3%/2 = 0.65% of each pull.
Since E.G.Os cannot dupe, we will have to split the calculation between newer players and endgame players, with the latter having the additional option of dispensing all the available E.G.Os before pulling, thus guarantee-ing a 100% of the E.G.Os acquired will be the featured ones. If there are no more E.G.Os in the pool, then the 000 Identity rate will increase to 3%.
Finally, we have the ideality exchange, which is that we can also swap 200 ideality (acquired 1 per pull) for one copy of anything that is featured. As an additional note, you should use the ideality exchange as late as possible. Doing so early to remove an E.G.O from the pool is not worth it, and doing so on an Identity or Announcer risks us duplicating it in a later pull.
Due to the assumption that 00 Identities are unimportant, it is strictly optimal to always single pull, as the ten-pull only guarantees the 00 Identites, and thus is just additional thread and E.G.O shards. (Both of which can be obtained via paid Battle Pass Mirror Dungeon runs for a higher lunacy efficiency). In practice, you would likely be ten-pulling until you are missing 1 to 2 featured items, and single pulling the rest of the way.
In this article, we would only be discussing pulls. A single pull is 130 lunacy (or once a day, 13 paid lunacy) and a ten-pull is 1300 lunacy.
Non-limited Feature Banners
It is not really advisable to pull on non-limited feature banners, but we include the data for completion and to understand how to use the table.
Type | 25% | 50% | 75% | 90% | 99% | 99.99% | 100% | Mean | Variance |
---|---|---|---|---|---|---|---|---|---|
1 000: New Player | 20 | 48 | 95 | 158 | 200 | 200 | 200 | 65 | 3189 |
1 000: Endgame | 20 | 46 | 92 | 153 | 200 | 200 | 200 | 63 | 3078 |
2 000s: New Player | 96 | 170 | 200 | 200 | 316 | 400 | 400 | 150 | 4315 |
2 000s: Endgame | 93 | 164 | 200 | 200 | 306 | 400 | 400 | 147 | 4293 |
1 000, 1 E.G.O: New Player | 74 | 135 | 200 | 200 | 217 | 400 | 400 | 131 | 4128 |
1 000, 1 E.G.O: Endgame | 51 | 89 | 145 | 200 | 200 | 328 | 400 | 100 | 3504 |
1 E.G.O, 1 Announcer: New Player | 107 | 189 | 200 | 200 | 353 | 400 | 400 | 158 | 4429 |
1 E.G.O, 1 Announcer: Endgame | 78 | 140 | 200 | 200 | 234 | 400 | 400 | 134 | 4125 |
1 E.G.O, 2 Announcers: New Player | 200 | 200 | 273 | 400 | 400 | 600 | 600 | 235 | 6934 |
1 E.G.O, 2 Announcers: Endgame | 200 | 200 | 229 | 360 | 400 | 469 | 600 | 219 | 6174 |
How to read the table?
Let’s say we are pulling on the upcoming Seasonal banner with 1 000 Identity. Then, we can read under the 50% column to see that 50% of the (new) players who pull on the banner will get her within 48 pulls, while 90% of the endgame players will get her within 153 pulls.
Walpurgis Night
Now, let us get to the limited banners. As previously discussed, we believe that there will be 2 announcers, with 2 E.G.Os and 1 000 Identity or 1 E.G.O and 2 000 Identities. For those players who are not chasing the announcers, use the rows that don’t mention announcers.
Type | 25% | 50% | 75% | 90% | 99% | 99.99% | 100% | Mean | Variance |
---|---|---|---|---|---|---|---|---|---|
2 000s, 1 E.G.O: New Player | 143 | 200 | 200 | 232 | 400 | 434 | 600 | 180 | 4031 |
2 000s, 1 E.G.O: Endgame | 114 | 183 | 200 | 200 | 326 | 400 | 508 | 160 | 3658 |
2 000s, 1 E.G.O, 2 Announcers: New Player | 200 | 229 | 330 | 400 | 437 | 600 | 800 | 263 | 7253 |
2 000s, 1 E.G.O, 2 Announcers: Endgame | 200 | 204 | 300 | 400 | 400 | 600 | 666 | 249 | 6706 |
1 000, 2 E.G.Os: New Player | 160 | 200 | 222 | 355 | 400 | 434 | 600 | 206 | 7485 |
1 000, 2 E.G.Os: Endgame | 93 | 146 | 200 | 200 | 355 | 400 | 600 | 145 | 4419 |
1 000, 2 E.G.Os, 2 Announcers: New Player | 200 | 258 | 380 | 400 | 562 | 706 | 800 | 283 | 9264 |
1 000, 2 E.G.Os, 2 Announcers: Endgame | 200 | 200 | 273 | 387 | 400 | 600 | 718 | 236 | 6123 |
We can see that it is approximately a 20 pull saving per E.G.O on rate-up. It is very worthwhile to dispense all the non-limited E.G.Os before extracting. Moreover, for an average player, it takes around 250 pulls to completely acquire all the limited items.
Arknights Collab
Lastly, we do know there are 4 E.G.Os and 1 Announcer in this collaboration. Here are some of various possibilities.
Type | 25% | 50% | 75% | 90% | 99% | 99.99% | 100% | Mean | Variance |
---|---|---|---|---|---|---|---|---|---|
2 E.G.Os: New Player | 149 | 200 | 213 | 354 | 400 | 400 | 400 | 200 | 8219 |
2 E.G.Os: Endgame | 74 | 129 | 200 | 200 | 353 | 400 | 400 | 133 | 5115 |
2 E.G.Os, 1 Announcer: New Player | 191 | 200 | 255 | 382 | 400 | 600 | 600 | 222 | 7474 |
2 E.G.Os, 1 Announcer: Endgame | 120 | 190 | 200 | 216 | 379 | 461 | 600 | 167 | 4220 |
3 E.G.Os: New Player | 200 | 258 | 400 | 400 | 600 | 600 | 600 | 286 | 12807 |
3 E.G.Os: Endgame | 133 | 200 | 207 | 298 | 400 | 600 | 600 | 188 | 6733 |
3 E.G.Os, 1 Announcer: New Player | 200 | 280 | 400 | 400 | 600 | 698 | 800 | 298 | 12115 |
3 E.G.Os, 1 Announcer: Endgame | 169 | 200 | 230 | 317 | 400 | 600 | 800 | 208 | 5865 |
4 E.G.Os: New Player | 266 | 400 | 414 | 597 | 708 | 800 | 800 | 372 | 17238 |
4 E.G.Os: Endgame | 196 | 206 | 301 | 400 | 509 | 706 | 800 | 243 | 9084 |
4 E.G.Os, 1 Announcer: New Player | 282 | 400 | 426 | 600 | 713 | 800 | 1000 | 380 | 16506 |
4 E.G.Os, 1 Announcer: Endgame | 200 | 223 | 314 | 400 | 517 | 717 | 800 | 255 | 8437 |
There is another further possibility, in Arknights, we have that the pity is 120 on collab banners. If Limbus Company decides to follow suit, we would have the following odds.
Type | 25% | 50% | 75% | 90% | 99% | 99.99% | 100% | Mean | Variance |
---|---|---|---|---|---|---|---|---|---|
2 E.G.Os: New Player | 120 | 120 | 213 | 240 | 240 | 240 | 240 | 150 | 3623 |
2 E.G.Os: Endgame | 74 | 120 | 120 | 177 | 240 | 240 | 240 | 109 | 2634 |
2 E.G.Os, 1 Announcer: New Player | 120 | 155 | 240 | 240 | 352 | 360 | 360 | 171 | 3842 |
2 E.G.Os, 1 Announcer: Endgame | 120 | 120 | 149 | 216 | 240 | 360 | 360 | 133 | 2467 |
3 E.G.Os: New Player | 148 | 240 | 240 | 354 | 360 | 360 | 360 | 217 | 5723 |
3 E.G.Os: Endgame | 120 | 129 | 207 | 240 | 353 | 360 | 360 | 155 | 4013 |
3 E.G.Os, 1 Announcer: New Player | 176 | 240 | 255 | 360 | 360 | 480 | 480 | 231 | 5637 |
3 E.G.Os, 1 Announcer: Endgame | 120 | 155 | 230 | 240 | 360 | 474 | 480 | 171 | 3908 |
4 E.G.Os: New Player | 240 | 258 | 360 | 360 | 480 | 480 | 480 | 285 | 7683 |
4 E.G.Os: Endgame | 133 | 206 | 240 | 298 | 360 | 480 | 480 | 202 | 5446 |
4 E.G.Os, 1 Announcer: New Player | 240 | 280 | 360 | 382 | 480 | 600 | 600 | 294 | 7453 |
4 E.G.Os, 1 Announcer: Endgame | 152 | 223 | 240 | 316 | 378 | 480 | 600 | 213 | 5256 |
Happy saving!
Appendix
The following code was used to generate the data.
using Statistics
function simulatePulls(IDs, EGOs, Announcers; isNew = true)
Pulls = 0
CurrentIDs = CurrentEGOs = CurrentAnnouncers = 0
function CheckDone(N)
Left = max(0, IDs - CurrentIDs) + max(0, EGOs - CurrentEGOs) + max(0, Announcers - CurrentAnnouncers)
Left ≤ N
end
function NewRateUp(Rate, Featured, Acquired, CurrProb)
newRate = Rate * 0.5 * (Featured - Acquired)/Featured
CurrProb < newRate
end
while !CheckDone(Pulls ÷ 200) # Change 200 to the pity number.
Pulls += 1
p = rand()
if isNew || (EGOs > CurrentEGOs) # E.G.O Left in the pool
if p < 0.029 # Got an 000
IDs == CurrentIDs && continue
CurrentIDs += NewRateUp(0.029, IDs, CurrentIDs, p)
elseif 0.029 ≤ p < 0.029 + 0.013 # Got an E.G.O
EGOs == CurrentEGOs && continue
p2 = p - 0.029
if isNew # If you're new, theres only a 50% chance of featured
(p2 < 0.013/2) && (CurrentEGOs += 1)
else # If not, every E.G.O will be a featured
CurrentEGOs += 1
end
elseif 0.029 + 0.013 ≤ p < 0.029 + 0.013 + 0.013 # Got an announcer
Announcers == CurrentAnnouncers && continue
CurrentAnnouncers += NewRateUp(0.013, Announcers, CurrentAnnouncers, p - 0.029 - 0.013)
end
else # No E.G.O left in pool
if p < 0.03 # Got an 000
IDs == CurrentIDs && continue
CurrentIDs += NewRateUp(0.03, IDs, CurrentIDs, p)
elseif 0.03 ≤ p < 0.03 + 0.013 # Got an announcer
Announcers == CurrentAnnouncers && continue
CurrentAnnouncers += NewRateUp(0.013, Announcers, CurrentAnnouncers, p - 0.03)
end
end
end
Pulls
end
function outputStats(IDs, EGOs, Announcers, isNew)
N = 2_000_000
Data = [simulatePulls(IDs, EGOs, Announcers; isNew = isNew) for _ in 1:N]
sort!(Data)
io = IOBuffer()
print(io, "| $IDs 000$(IDs == 1 ? "" : "s"), ")
print(io, "$EGOs E.G.O$(EGOs == 1 ? "" : "s"), ")
print(io, "$Announcers Announcer$(Announcers == 1 ? "" : "s"): ")
print(io, "$(isNew ? "**New Player**" : "**Endgame**")| ")
for percent in [0.25, 0.5, 0.75, 0.90, 0.99, 0.9999, 1]
print(io, round(Int, Data[floor(Int, end * percent)]), " | ")
end
meanData = round(Int, mean(Data))
varData = round(Int, var(Data)*(N-1)/N)
print(io, "$(meanData) | $(varData) |")
String(take!(io))
end