Randoloot/tests/levels/balance_skill_paths.gd
2026-10-17 18:28:34 +02:00

36 lines
1.4 KiB
GDScript

extends Node
const BAL = preload("res://scripts/levels/level_balance.gd")
func _ready() -> void:
var outcomes: Array = []
for style in ["diverse", "random"]:
for trial in 300:
var captain := CaptainProgress.new()
captain._skill_rng.seed = 81723 + trial
var rng := RandomNumberGenerator.new()
rng.seed = 55001 + trial
var all_types := 0
var all_ranks := 0
for level in range(1, 51):
for tier in BAL.enemy_tiers(level):
captain.reward_enemy(level, tier, 1.0, 1.0)
while captain.learning_points > 0:
captain.prepare_skill_offers()
if captain.skill_offers.is_empty():
break
var pick: String = captain.skill_offers[rng.randi_range(0, captain.skill_offers.size() - 1)]
if style == "diverse":
for skill in captain.skill_offers:
if captain.get_skill_rank(skill) < captain.get_skill_rank(pick):
pick = skill
assert(captain.train_skill(pick))
if captain.skills.size() == 9 and all_types == 0:
all_types = level
if captain.get_spent_learning_points() == 27 and all_ranks == 0:
all_ranks = level
outcomes.append({"style": style, "trial": trial, "all_types": all_types, "all_ranks": all_ranks})
var f := FileAccess.open("res://artifacts/balance_skill_paths.json", FileAccess.WRITE)
f.store_string(JSON.stringify(outcomes))
f.close()
print("BALANCE_SKILL_PATHS: PASS 600 seeded skill paths using actual offers, training and XP")
get_tree().quit()