implement unlock dependencies

This commit is contained in:
2026-07-03 08:35:45 +02:00
parent 58d4586d00
commit 6ea0655eaf
13 changed files with 476 additions and 11 deletions

View File

@@ -4,6 +4,11 @@
# content; stats, materials, and threat costs are placeholders until the
# recipe and balancing passes.
#
# Unlock progression is mostly disabled (unlock_at_station_level = -1) pending
# the balancing pass. The laser cannons are the exception: laser_cannon_m is
# gated to station level 1, and laser_cannon_l requires laser_cannon_m to be
# unlocked first (unlock_requires) — a demonstration of the prerequisite chain.
#
# Surface mask footprint ladder — footprints gate which hulls can mount a
# module, purely through geometry (see ships.toml for the matching hull
# grids):
@@ -39,7 +44,7 @@ attack_rate_hz = 2.0
[[module]]
id = "laser_cannon_m"
unlock_at_station_level = -1
unlock_at_station_level = 1
surface_mask = [
"OO",
"OO"]
@@ -56,7 +61,8 @@ attack_rate_hz = 1.5
[[module]]
id = "laser_cannon_l"
unlock_at_station_level = -1
unlock_at_station_level = 1
unlock_requires = ["laser_cannon_m"]
surface_mask = [
"OOO",
"OOO",

View File

@@ -2,8 +2,10 @@
#
# First real-content iteration of the production tree. Quantities and
# durations are a first guess; the balancing pass will tune them and assign
# real unlock_at_station_level values (everything is unlocked for now so the
# full tree is testable).
# real unlock_at_station_level values. Almost everything is unlocked for now so
# the full tree is testable; the only gated recipe schematics are the medium and
# large laser-cannon item recipes, which demonstrate the unlock_requires
# prerequisite chain (large requires medium — see modules.toml / ships.toml).
#
# Input chain per game phase — each phase adds exactly one new base input:
#
@@ -293,7 +295,7 @@ duration_seconds = 4.0
[[recipe]]
id = "laser_cannon_m_module"
unlock_at_station_level = -1
unlock_at_station_level = 1
building = "assembler"
inputs = [{item = "targeting_unit", amount = 1}, {item = "titanium_frame", amount = 1}]
outputs = [{item = "laser_cannon_m_module", amount = 1}]
@@ -317,7 +319,8 @@ duration_seconds = 6.0
[[recipe]]
id = "laser_cannon_l_module"
unlock_at_station_level = -1
unlock_at_station_level = 1
unlock_requires = ["laser_cannon_m_module"]
building = "assembler"
inputs = [
{item = "targeting_unit", amount = 2},

View File

@@ -4,6 +4,11 @@
# content; stats, materials, and production times are placeholders until the
# recipe and balancing passes.
#
# Unlock progression is mostly disabled (unlock_at_station_level = -1) pending
# the balancing pass. The capital hulls are the exception: battleship is gated
# to station level 1, and dreadnought (level 2) requires battleship to be
# unlocked first (unlock_requires) — a demonstration of the prerequisite chain.
#
# Size classes:
# xs drone 1 cell — exactly one 1x1 module
# s frigate, destroyer no 2x2 area anywhere: only 1x1/1x2/1x3/L modules fit
@@ -169,7 +174,7 @@ sensor_range_m = 260
# so no 2x6 drone hangar fits.
[[ship]]
id = "battleship"
unlock_at_station_level = -1
unlock_at_station_level = 1
layout = [
"XOOOOX",
"OOOOOO",
@@ -203,7 +208,8 @@ sensor_range_m = 280
# stay the only hangar hull. Bow and stern strips hold supports.
[[ship]]
id = "dreadnought"
unlock_at_station_level = -1
unlock_at_station_level = 2
unlock_requires = ["battleship"]
layout = [
"XXXOOOOOXXX",
"OOOXOOOXOOO",