class_name ItemSpawn extends Node2D @export var common_items : Array[PackedScene] @export var rare_items : Array[PackedScene] static var unique_items : Array[PackedScene] = [] @export var rarity_bonus : float = 0 @export var guarantee_rare : bool = false @export var unique_base_chance = .02 @export var rare_base_chance = .04 @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 = rare_base_chance + rare_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: unique_items.remove_at(index) var object = packed_scene.instantiate() add_child.call_deferred(object) object.reparent.call_deferred(get_parent()) static func refill_unique_item_pool(): unique_items = [ load("res://items/permanent_items/backslash/backslash.tscn"), load("res://items/permanent_items/high_jump/high_jump.tscn"), load("res://items/permanent_items/upslash/upslash.tscn"), load("res://items/active_items/horizontal_dash/horizontal_dash.tscn") ]