Randoloot/scripts/game/distant_loot.gd
2026-10-20 19:53:03 +02:00

27 lines
1.5 KiB
GDScript

extends RefCounted
const MAP_CHANCE := 0.15
const BANK_CHANCE := 0.15
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:
result.append({"orb":preload("res://scripts/items/special_orbs.gd").IDS[posmod(seed_value,preload("res://scripts/items/special_orbs.gd").IDS.size())]})
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)