class_name ItemSpawn extends Node2D @export var common_items : Array[PackedScene] @export var rare_items : Array[PackedScene] @export var unique_items : Array[PackedScene] @export var rarity_bonus = 0 @export var guarantee_rare : bool = false @export var unique_base_chance = .05 @export var rare_base_chance = .2 @export var unique_bonus_multiplier = .025 @export var rare_bonus_multiplier = .1 var remove_after_spawn = false func choose_pool() -> Array[PackedScene]: var unique_chance = unique_base_chance + unique_bonus_multiplier * rarity_bonus var rare_chance = unique_base_chance + unique_bonus_multiplier * rarity_bonus var random = randf() if random < unique_chance && unique_items.size() > 0: remove_after_spawn = true return unique_items elif random < unique_chance + rare_chance || guarantee_rare: return rare_items return common_items func _ready(): var pool = choose_pool() var index = randi_range(0, pool.size() - 1) var packed_scene : PackedScene = pool[index] if remove_after_spawn: pool.remove_at(index) var object = packed_scene.instantiate() add_child.call_deferred(object) object.reparent.call_deferred(get_parent())