Randoloot/scripts/planets/poi_rules.gd
2026-10-26 21:06:32 +01:00

33 lines
2.0 KiB
GDScript

extends RefCounted
const NAMES := {"deposit":"Złoże surowców", "ruins":"Starożytna struktura", "warehouse":"Opuszczony magazyn", "village":"Opuszczona wioska", "cave":"Jaskinia", "deep_deposit":"Głębokie złoże deuteru", "crew":"Obóz specjalisty", "hermit":"Pustelnik / Kartograf", "time_engineer":"Inżynier chronalny"}
const KINDS := ["deposit","ruins","warehouse","village","cave"]
const PROFILES := preload("res://scripts/planets/planet_profiles.gd")
const REWARDS := preload("res://scripts/planets/planet_rewards.gd")
static func reward(kind: String, rng: RandomNumberGenerator, profile: Dictionary, captain: Resource) -> Dictionary:
var result := {}
var multiplier: float = PROFILES.poi_loot_report(profile,captain).multiplier
match kind:
"deposit":
var key: String = PROFILES.MATERIALS[rng.randi_range(0,PROFILES.MATERIALS.size()-1)]
result[key] = rng.randi_range(18,28)*REWARDS.material_multiplier(profile)
"warehouse":
result.ammunition = rng.randi_range(130,210)
result.missile = rng.randi_range(2,4)
if rng.randf() < 0.25: result.irradiated_ammunition = rng.randi_range(20,35)
var keys := ["iron","titanium","aluminium","uranium","sulfur"]
result[keys[rng.randi_range(0,4)]] = rng.randi_range(8,16)*REWARDS.material_multiplier(profile)
"village":
result.credits = rng.randi_range(140,220)
result.experience = maxi(1,ceili(maxi(0,captain.get_xp_required()-captain.experience)*0.05))
"cave": result.samples = rng.randi_range(3,5)
for key in result: result[key] = maxi(1,roundi(float(result[key])*multiplier))
return result
static func module_count(profile: Dictionary, captain: Resource) -> int:
return clampi(roundi(1.5*float(PROFILES.poi_loot_report(profile,captain).multiplier)),1,3)
static func module_bonus(rng: RandomNumberGenerator, profile: Dictionary, captain: Resource) -> int:
var report := PROFILES.poi_loot_report(profile,captain)
return maxi(0,roundi(REWARDS.roll_module_bonus(rng,profile)*float(report.recovery)))+roundi((float(report.gear_multiplier)-1.0)*2.0)