33 lines
2.0 KiB
GDScript
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)
|