Loïc Wisniewski
721913c040
Guard the definition catalog against silent .tres property loss
...
Opening the project in the Godot editor re-saves .tres files, and its writer
DROPS properties it considers default-valued. An empty-looking
PackedStringArray is the usual casualty, and it has now cost this project
twice - both times silently, and both times the damage surfaced somewhere
else entirely:
GasBurnerBuildingDefinition lost `capabilities` and `collected_outputs`,
which took the burner's whole conversion with it.
InterceptorVesselDefinition lost `capabilities`, `hull_points`,
`build_time`, `icon` and `glow_color` - so the starting vessel had no
cargo hold, and a full suite came back with ten unrelated tests broken
because nothing anywhere could mine.
Neither raised an error. The resource still loaded; it was just quietly less
than it had been.
test_definitions_intact asserts the SHAPE of the catalog rather than any one
value: every vessel has a name, stats, a hull and its components; a hold and
a "cargo" capability imply each other; every building has a description, a
price, hit points, its build-menu wiring and at least one capability; and a
converter keeps the fields its conversion needs. Whatever the editor eats
now fails here, next to the thing that was eaten.
Verified against both real incidents by reproducing them: deleting the
interceptor's capabilities line fails with "cargo_capacity 20.0 but
capabilities []", and deleting the burner's collected_outputs fails with
"converts but lists no collected outputs".
The first draft of that last check looked for the conversion fields on the
DEFINITION, where they are not - they live on its logistics sub-resource -
so it answered null and never fired. It passed while the burner sat there
broken, which is the same class of quiet as the bug it is guarding.
Also restores what the editor took from the gas burner this time round.
2026-08-29 14:38:51 +02:00
..
Building.gd
#99 (#97a): buildings have health, and can be destroyed
2026-08-23 13:37:40 +02:00
Building.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
Building.tscn
#101 (#97c): waves attack buildings
2026-08-23 13:53:17 +02:00
BuildingActionProvider.gd
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
BuildingActionProvider.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
BuildingDefinition.gd
#138 : structures and doctrines cost more than rocks, and more the deeper they are
2026-08-28 15:30:30 +02:00
BuildingDefinition.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
BuildingDefinitions.gd
#116 : the Spacial Workshop, and the drones that mend what waves break
2026-08-23 21:59:51 +02:00
BuildingDefinitions.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
BuildingField.gd
#146 : shots, deaths and collapses are heard
2026-08-29 13:05:47 +02:00
BuildingField.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
BuildingHitbox.gd
#101 (#97c): waves attack buildings
2026-08-23 13:53:17 +02:00
BuildingHitbox.gd.uid
Add the .uid files Godot generated for the new scripts
2026-08-23 19:23:50 +02:00
BuildingLogisticsProfile.gd
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
BuildingLogisticsProfile.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
BuildingVisualBase.gd
#117 : the crafter and the lab animate only while they are working
2026-08-23 21:58:59 +02:00
BuildingVisualBase.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
CommandBuildingDefinition.tres
#138 : structures and doctrines cost more than rocks, and more the deeper they are
2026-08-28 15:30:30 +02:00
CommandBuildingVisual.gd
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
CommandBuildingVisual.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
CommandBuildingVisual.tscn
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
CrafterBuildingDefinition.tres
#99 (#97a): buildings have health, and can be destroyed
2026-08-23 13:37:40 +02:00
CrafterBuildingVisual.gd
#117 : the crafter and the lab animate only while they are working
2026-08-23 21:58:59 +02:00
CrafterBuildingVisual.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
CrafterBuildingVisual.tscn
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
ExtractorBuildingDefinition.tres
#99 (#97a): buildings have health, and can be destroyed
2026-08-23 13:37:40 +02:00
GasBurnerBuildingDefinition.tres
Guard the definition catalog against silent .tres property loss
2026-08-29 14:38:51 +02:00
GasBurnerBuildingVisual.gd
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
GasBurnerBuildingVisual.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
GasBurnerBuildingVisual.tscn
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
MothershipBuildingDefinition.tres
#99 (#97a): buildings have health, and can be destroyed
2026-08-23 13:37:40 +02:00
MothershipBuildingVisual.gd
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
MothershipBuildingVisual.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
MothershipBuildingVisual.tscn
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
OutpostBuildingDefinition.tres
#138 : structures and doctrines cost more than rocks, and more the deeper they are
2026-08-28 15:30:30 +02:00
OutpostBuildingVisual.gd
#102/#103 (#97d/#97e): the outpost, and the garrison you compose for it
2026-08-23 14:02:20 +02:00
OutpostBuildingVisual.gd.uid
Add the .uid files Godot generated for the new scripts
2026-08-23 19:23:50 +02:00
OutpostBuildingVisual.tscn
#102/#103 (#97d/#97e): the outpost, and the garrison you compose for it
2026-08-23 14:02:20 +02:00
PlanningBuildingDefinition.tres
#138 : structures and doctrines cost more than rocks, and more the deeper they are
2026-08-28 15:30:30 +02:00
PlanningBuildingVisual.gd
#106/#107 (#98a/#98b): the Planning Center
2026-08-23 14:21:52 +02:00
PlanningBuildingVisual.gd.uid
Add the .uid files Godot generated for the new scripts
2026-08-23 19:23:50 +02:00
PlanningBuildingVisual.tscn
#106/#107 (#98a/#98b): the Planning Center
2026-08-23 14:21:52 +02:00
ShipLabBuildingDefinition.tres
#138 : structures and doctrines cost more than rocks, and more the deeper they are
2026-08-28 15:30:30 +02:00
ShipLabBuildingVisual.gd
#117 : the crafter and the lab animate only while they are working
2026-08-23 21:58:59 +02:00
ShipLabBuildingVisual.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
ShipLabBuildingVisual.tscn
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
TransportHubBuildingDefinition.tres
#138 : structures and doctrines cost more than rocks, and more the deeper they are
2026-08-28 15:30:30 +02:00
TransportHubBuildingVisual.gd
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
TransportHubBuildingVisual.gd.uid
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
TransportHubBuildingVisual.tscn
#84 : move 215 root files into a folder hierarchy
2026-08-21 19:44:14 +02:00
WorkshopBuildingDefinition.tres
#138 : structures and doctrines cost more than rocks, and more the deeper they are
2026-08-28 15:30:30 +02:00
WorkshopBuildingVisual.gd
#116 : the Spacial Workshop, and the drones that mend what waves break
2026-08-23 21:59:51 +02:00
WorkshopBuildingVisual.gd.uid
Add the .uid files Godot generated for the newest scripts
2026-08-24 12:10:41 +02:00
WorkshopBuildingVisual.tscn
#116 : the Spacial Workshop, and the drones that mend what waves break
2026-08-23 21:59:51 +02:00