extends RefCounted const MAP_CHANCE := 0.15 const BANK_CHANCE := 0.15 const REPLICATION_CHANCE := 0.05 static func roll(level: int, boss: bool, seed_value: int, map_roll: float, orb_roll: float) -> Array[Dictionary]: var result: Array[Dictionary] = [] if boss or map_roll < MAP_CHANCE: var profile := {"id":"distant:%d" % seed_value,"seed":seed_value,"name":"Daleka wyprawa %d" % level} result.append({"map":preload("res://scripts/planets/distant_expeditions.gd").offer(profile,level)}) if boss: var pool := preload("res://scripts/items/special_orbs.gd").COMMON_IDS result.append({"orb":pool[posmod(seed_value,pool.size())]}) if orb_roll < REPLICATION_CHANCE: result.append({"orb":"replication"}) return result static func crystal_amount(level: int, tier: int, roll_value: int) -> int: return clampi(roll_value,1,3) * maxi(1,ceili(maxi(1,level)/10.0)) * [1,2,5][clampi(tier,0,2)] static func drop(enemy: Node2D) -> void: var crystals := Node2D.new() crystals.set_script(preload("res://scripts/items/time_crystal_pickup.gd")) crystals.amount = crystal_amount(GameState.system_level,int(enemy.get("loot_tier")),randi_range(1,3)) crystals.position = enemy.position+Vector2(38,-20) enemy.get_parent().call_deferred("add_child",crystals) for payload in roll(GameState.system_level,int(enemy.get("loot_tier"))==2,randi(),randf(),randf()): var pickup := Node2D.new() pickup.set_script(preload("res://scripts/items/expedition_pickup.gd")) pickup.payload = payload pickup.position = enemy.position+Vector2(randf_range(-36,36),65) enemy.get_parent().call_deferred("add_child",pickup)