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()