Randoloot/tests/levels/planet_threats_test.gd
2026-10-27 22:20:01 +01:00

66 lines
3.2 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

extends Node
const PROFILES := preload("res://scripts/planets/planet_profiles.gd")
const GEAR := preload("res://scripts/planets/captain_equipment.gd")
const EVENTS := preload("res://scripts/planets/surface_events.gd")
const REWARDS := preload("res://scripts/planets/planet_rewards.gd")
var captain: Resource
func set_gear(levels: Array) -> void:
for index in 3:
captain.gear_items[index].level = int(levels[index])
captain.gear_slots[GEAR.KINDS[index]] = index+1
func _ready() -> void:
captain = preload("res://scripts/captain/captain_progress.gd").new()
var starter := PROFILES.generate(99,0,"Pierwsza planeta",1)
set_gear([1,1,1])
assert(PROFILES.global_threat(starter,captain) == 0)
assert(PROFILES.poi_loot_report(starter,captain).multiplier == 1.0)
for stage in 3:
assert(is_equal_approx(PROFILES.success_chance(starter,captain,stage),PROFILES.POI_SAFE_CHANCES[stage]))
var extreme := {"id":"test","name":"Test","seed":1234,"system_level":120,"difficulty":1.0,"oxygen":0,"temperature":100,"flora":50,"landing_damage":15}
set_gear([0,0,0])
assert(PROFILES.global_threat(extreme,captain) == 300)
set_gear([156,0,0])
var report := PROFILES.threat_report(extreme,captain)
assert(is_zero_approx(report.effective.oxygen) and report.effective.temperature == 100 and report.effective.biology == 100)
set_gear([0,156,0])
report = PROFILES.threat_report(extreme,captain)
assert(is_zero_approx(report.effective.temperature) and report.effective.oxygen == 100)
set_gear([0,0,156])
report = PROFILES.threat_report(extreme,captain)
assert(is_zero_approx(report.effective.biology) and report.effective.oxygen == 100)
set_gear([50,50,50])
assert(PROFILES.global_threat(extreme,captain) > 150,"Level 50 is no longer global immunity")
var previous := 301.0
for rank in range(0,180):
set_gear([rank,rank,rank])
var pressure := PROFILES.global_threat(extreme,captain)
assert(pressure <= previous+0.000001 and pressure >= 0)
previous = pressure
var loot := PROFILES.poi_loot_report(extreme,captain)
assert(loot.multiplier >= 0.5 and loot.multiplier <= 1.100001)
set_gear([0,0,0])
var state: Resource = captain.expedition
captain.parts = 100
assert(state.begin_visit(extreme))
var event := {"kind":"evacuation","seed":1234,"complete":false}
EVENTS.prepare(event,captain,state)
event.stage = 2
assert(EVENTS.chance(event,captain,state) == 0)
assert(EVENTS.resolve(event,"help",captain,state).blocked)
set_gear([156,156,156])
assert(is_equal_approx(EVENTS.chance(event,captain,state),0.4))
var scan := PROFILES.scan_description(extreme,captain)
assert(scan.contains("Poziom 120") and scan.contains("HP"))
for unwanted in ["zagro","TLEN","TEMPERATURA","BIO","×","pp"]:
assert(not scan.contains(unwanted),"Player-facing scan omits hidden hazard formulas")
for index in 500:
var early := PROFILES.generate(99,index,"Planeta",1)
var late := PROFILES.generate(99,index,"Planeta",120)
assert(early.easy and early.difficulty == 0)
assert(late.difficulty > 0.75 and late.landing_damage > early.landing_damage)
assert(REWARDS.material_multiplier(late) > REWARDS.material_multiplier(early))
print("PLANET THREATS PASS: progressive planets, relative independent equipment, no level-50 immunity, capped loot recovery, event guards, simple scan")
get_tree().quit()