60 lines
2.8 KiB
GDScript
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()
|