class_name ItemSpawn extends Node2D static var item_pool = ResourceLoader.load("res://items/generic/item_pool.tres","",ResourceLoader.CACHE_MODE_IGNORE) @export var rarity_bonus : float = 0 @export var guarantee_rare : bool = false @export var unique_base_chance = 0.24 @export var rare_base_chance = 0 @export var unique_bonus_multiplier = .05 @export var rare_bonus_multiplier = 0 var remove_after_spawn = false func choose_pool() -> Array[PackedScene]: var unique_chance = unique_base_chance + unique_bonus_multiplier * rarity_bonus var rare_chance = rare_base_chance + rare_bonus_multiplier * rarity_bonus var random = randf() if random < unique_chance && item_pool.unique.size() > 0: remove_after_spawn = true return item_pool.unique elif random < unique_chance + rare_chance || guarantee_rare: return item_pool.rare return item_pool.common func _ready(): var pool = choose_pool() var index = randi_range(0, pool.size() - 1) var packed_scene : PackedScene = pool[index] if remove_after_spawn: item_pool.unique.remove_at(index) var object = packed_scene.instantiate() add_child.call_deferred(object) object.reparent.call_deferred(get_parent())