v2.3.0: improved consistency of several consumable drop types

This commit is contained in:
Evan Debenham
2023-11-08 13:32:45 -05:00
parent 268b804ac6
commit 27312460f0

View File

@@ -224,6 +224,12 @@ public class Generator {
//Artifacts in particular don't reset, no duplicates!
public float[] probs;
public float[] defaultProbs = null;
//some items types have two decks and swap between them
// this enforces more consistency while still allowing for better precision
public float[] defaultProbs2 = null;
public boolean using2ndProbs = false;
//These variables are used as a part of the deck system, to ensure that drops are consistent
// regardless of when they occur (either as part of seeded levelgen, or random item drops)
public Long seed = null;
@@ -271,7 +277,8 @@ public class Generator {
PotionOfParalyticGas.class,
PotionOfPurity.class,
PotionOfExperience.class};
POTION.defaultProbs = new float[]{ 0, 6, 4, 3, 3, 3, 2, 2, 2, 2, 2, 1 };
POTION.defaultProbs = new float[]{ 0, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1 };
POTION.defaultProbs2 = new float[]{ 0, 3, 2, 2, 1, 2, 1, 1, 1, 1, 1, 0 };
POTION.probs = POTION.defaultProbs.clone();
SEED.classes = new Class<?>[]{
@@ -287,7 +294,7 @@ public class Generator {
Earthroot.Seed.class,
Mageroyal.Seed.class,
Starflower.Seed.class};
SEED.defaultProbs = new float[]{ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2 };
SEED.defaultProbs = new float[]{ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1 };
SEED.probs = SEED.defaultProbs.clone();
SCROLL.classes = new Class<?>[]{
@@ -304,7 +311,8 @@ public class Generator {
ScrollOfTerror.class,
ScrollOfTransmutation.class
};
SCROLL.defaultProbs = new float[]{ 0, 6, 4, 3, 3, 3, 2, 2, 2, 2, 2, 1 };
SCROLL.defaultProbs = new float[]{ 0, 3, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1 };
SCROLL.defaultProbs2 = new float[]{ 0, 3, 2, 2, 1, 2, 1, 1, 1, 1, 1, 0 };
SCROLL.probs = SCROLL.defaultProbs.clone();
STONE.classes = new Class<?>[]{
@@ -321,7 +329,7 @@ public class Generator {
StoneOfFear.class,
StoneOfAugmentation.class //1 is sold in each shop
};
STONE.defaultProbs = new float[]{ 0, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0 };
STONE.defaultProbs = new float[]{ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0 };
STONE.probs = STONE.defaultProbs.clone();
WAND.classes = new Class<?>[]{
@@ -517,6 +525,7 @@ public class Generator {
usingFirstDeck = Random.Int(2) == 0;
generalReset();
for (Category cat : Category.values()) {
cat.using2ndProbs = cat.defaultProbs2 != null && Random.Int(2) == 0;
reset(cat);
if (cat.defaultProbs != null) {
cat.seed = Random.Long();
@@ -533,7 +542,14 @@ public class Generator {
}
public static void reset(Category cat){
if (cat.defaultProbs != null) cat.probs = cat.defaultProbs.clone();
if (cat.defaultProbs != null) {
if (cat.defaultProbs2 != null){
cat.using2ndProbs = !cat.using2ndProbs;
cat.probs = cat.using2ndProbs ? cat.defaultProbs2.clone() : cat.defaultProbs.clone();
} else {
cat.probs = cat.defaultProbs.clone();
}
}
}
//reverts changes to drop chances generates by this item
@@ -746,6 +762,7 @@ public class Generator {
private static final String FIRST_DECK = "first_deck";
private static final String GENERAL_PROBS = "general_probs";
private static final String CATEGORY_PROBS = "_probs";
private static final String CATEGORY_USING_PROBS2 = "_using_probs2";
private static final String CATEGORY_SEED = "_seed";
private static final String CATEGORY_DROPPED = "_dropped";
@@ -762,7 +779,12 @@ public class Generator {
for (Category cat : Category.values()){
if (cat.defaultProbs == null) continue;
bundle.put(cat.name().toLowerCase() + CATEGORY_PROBS, cat.probs);
bundle.put(cat.name().toLowerCase() + CATEGORY_PROBS, cat.probs);
if (cat.defaultProbs2 != null){
bundle.put(cat.name().toLowerCase() + CATEGORY_USING_PROBS2, cat.using2ndProbs);
}
if (cat.seed != null) {
bundle.put(cat.name().toLowerCase() + CATEGORY_SEED, cat.seed);
bundle.put(cat.name().toLowerCase() + CATEGORY_DROPPED, cat.dropped);
@@ -788,6 +810,11 @@ public class Generator {
if (cat.defaultProbs != null && probs.length == cat.defaultProbs.length){
cat.probs = probs;
}
if (bundle.contains(cat.name().toLowerCase() + CATEGORY_USING_PROBS2)){
cat.using2ndProbs = bundle.getBoolean(cat.name().toLowerCase() + CATEGORY_USING_PROBS2);
} else {
cat.using2ndProbs = false;
}
if (bundle.contains(cat.name().toLowerCase() + CATEGORY_SEED)){
cat.seed = bundle.getLong(cat.name().toLowerCase() + CATEGORY_SEED);
cat.dropped = bundle.getInt(cat.name().toLowerCase() + CATEGORY_DROPPED);