@@ -61,6 +61,8 @@ var all_spells := {}
6161
6262var base_spell_mods := {}
6363
64+ var last_category := 1
65+ var last_category_times := 1
6466
6567func _ready ():
6668 var generator_seed := hash (OS .get_time ())
@@ -216,7 +218,12 @@ func pick_random_spell(rng:RandomNumberGenerator = LootRNG) -> Spell:
216218 tier = 3
217219 elif random < CHANCE_TIER1 + CHANCE_TIER2 + CHANCE_TIER3 + CHANCE_TIER4 :
218220 tier = 4
219- if spells [tier ].empty ():
221+ if tier == last_category :
222+ last_category_times += 1
223+ if spells [tier ].empty () or (tier == last_category and rng .randf () < 1.0 / float (last_category_times )):
224+ if tier != last_category :
225+ last_category = tier
226+ last_category_times = 0
220227 return pick_random_spell (rng )
221228 return spells [tier ].values ()[rng .randi ()% spells [tier ].values ().size ()]
222229
@@ -232,7 +239,12 @@ func pick_random_item(rng:RandomNumberGenerator = LootRNG) -> Item:
232239 tier = 3
233240 elif random < CHANCE_TIER1 + CHANCE_TIER2 + CHANCE_TIER3 + CHANCE_TIER4 :
234241 tier = 4
235- if items [tier ].empty ():
242+ if tier == last_category :
243+ last_category_times += 1
244+ if items [tier ].empty () or (tier == last_category and rng .randf () < 1.0 / float (last_category_times )):
245+ if tier != last_category :
246+ last_category = tier
247+ last_category_times = 0
236248 return pick_random_item (rng )
237249 return items [tier ].values ()[rng .randi ()% items [tier ].values ().size ()]
238250
0 commit comments