Randoloot/tests/levels/surface_events_test.gd

60 lines
2.8 KiB
GDScript

extends Node
const PROGRESS := preload("res://scripts/planets/planet_progress.gd")
const GENERATOR := preload("res://scripts/planets/surface_generator.gd")
func _ready() -> void:
var rng := RandomNumberGenerator.new()
rng.seed = 727373
var histogram := PackedInt32Array()
histogram.resize(21)
for index in 40000:
var bonus: int = PROGRESS.roll_engineer_bonus(rng)
assert(bonus >= 0 and bonus <= 20)
histogram[bonus] += 1
assert(histogram[0] > 9500 and histogram[0] < 10500)
assert(histogram[10] > 450 and histogram[10] < 700)
assert(histogram[20] > 0 and histogram[20] < 80)
var captain: Resource = preload("res://scripts/captain/captain_progress.gd").new()
var state: Resource = captain.expedition
var profile: Dictionary = preload("res://scripts/planets/planet_profiles.gd").generate(777,1,"Test")
state.begin_visit(profile)
var event := {"kind":"engineer","complete":false}
captain.credits = 99
assert(not state.buy_engineer_offer(captain,event,rng).success)
assert(captain.credits == 99 and state.cargo_modules.is_empty() and not event.complete)
captain.credits = 200
var before_level := GameState.system_level
GameState.system_level = 32
var result: Dictionary = state.buy_engineer_offer(captain,event,rng)
assert(result.success and captain.credits == 100 and event.complete)
assert(result.item.item_level >= 32 and result.item.item_level <= 52)
assert(state.cargo_modules.size() == 1)
assert(not state.buy_engineer_offer(captain,event,rng).success)
assert(captain.credits == 100 and state.cargo_modules.size() == 1)
state.finish_visit(captain,true)
assert(state.delivered_modules.size() == 1)
state.lander_hp = 100
state.begin_visit(profile)
state.buy_engineer_offer(captain,{"kind":"engineer","complete":false},rng)
state.damage(100)
state.finish_visit(captain,true)
assert(captain.credits == 0 and state.delivered_modules.size() == 1)
GameState.system_level = before_level
var encounters := 0
for index in 30:
var data: Dictionary = GENERATOR.generate(200+index,profile)
assert(not data.has("river") and not data.has("rivers"))
assert(data.structures.size() <= 5)
assert(data.events.size() <= 1)
encounters += data.events.size()
for structure in data.structures:
var at: Vector2 = structure.position
for offset in [Vector2.ZERO,Vector2.UP,Vector2.DOWN,Vector2.LEFT,Vector2.RIGHT]:
var point: Vector2 = at + offset*float(structure.size)*0.55
var x := clampi(int((point.x+1920)/40),0,95)
var y := clampi(int((point.y+1920)/40),0,95)
assert(data.heights[y*96+x] >= 0.32)
assert(encounters > 3 and encounters < 23)
print("SURFACE EVENTS PASS: no rivers, dry scenery placement, occasional events, exponential levels, price, insufficient funds, one purchase and expedition cargo")
print("Engineer bonuses / 40000 rolls: +0=",histogram[0]," +10=",histogram[10]," +20=",histogram[20])
get_tree().quit()