diff --git a/buildings/BuildingActionProvider.gd b/buildings/BuildingActionProvider.gd index 1a9dba8..288f3fc 100644 --- a/buildings/BuildingActionProvider.gd +++ b/buildings/BuildingActionProvider.gd @@ -1,3 +1,5 @@ extends Node -@export var actions: PackedStringArray = [] +# Explicit empty PackedStringArray defaults are not export-safe for custom +# scripted objects in Godot 4.7.1. +@export var actions: PackedStringArray diff --git a/buildings/BuildingDefinition.gd b/buildings/BuildingDefinition.gd index ca4f598..118c776 100644 --- a/buildings/BuildingDefinition.gd +++ b/buildings/BuildingDefinition.gd @@ -18,7 +18,9 @@ extends Resource @export var action_icon: int @export var menu_icon: int @export var visual_scene: PackedScene -@export var capabilities: PackedStringArray = [] +# No explicit empty default: Godot 4.7.1 can lose the value when exporting a +# custom resource to binary .res. +@export var capabilities: PackedStringArray @export var logistics: Resource @export var map_color: Color = Color.WHITE @export var map_sides: int = 4 diff --git a/buildings/BuildingLogisticsProfile.gd b/buildings/BuildingLogisticsProfile.gd index fdd6706..e7100e0 100644 --- a/buildings/BuildingLogisticsProfile.gd +++ b/buildings/BuildingLogisticsProfile.gd @@ -6,7 +6,9 @@ extends Resource # converter does not require another resource-type branch in transport code. @export var input_buffers: Dictionary = {} -@export var collected_outputs: PackedStringArray = [] +# See BuildingDefinition.capabilities: an explicit empty packed-array default +# is not export-safe in Godot 4.7.1 custom resources. +@export var collected_outputs: PackedStringArray @export var conversion_input: String = "" @export var conversion_output: String = "" @export var conversion_rate: float = 0.0 diff --git a/core/CatalogCheck.gd b/core/CatalogCheck.gd index 5de9142..623a1cb 100644 --- a/core/CatalogCheck.gd +++ b/core/CatalogCheck.gd @@ -46,6 +46,7 @@ static func faults() -> PackedStringArray: var found: PackedStringArray = PackedStringArray() _check_vessels(found) _check_buildings(found) + _check_planets(found) return found @@ -107,6 +108,12 @@ static func _check_buildings(found: PackedStringArray) -> void: # rather than a thing standing in the world, and has no scene. if definition.placement_mode == "space" and definition.visual_scene == null: found.append("building %s stands in space with nothing to draw" % id) + if definition.visual_scene != null: + var visual: Node = definition.visual_scene.instantiate() + var provider: Node = visual.get_node_or_null("ActionProvider") + if provider != null and Array(provider.actions).is_empty(): + found.append("building %s has an action provider with no actions" % id) + visual.free() for field in ["menu_button_name", "menu_label_name", "menu_cost_name"]: if str(definition.get(field)).strip_edges() == "": found.append("building %s has no %s - the build menu could not place it" % [id, field]) @@ -127,3 +134,10 @@ static func _check_buildings(found: PackedStringArray) -> void: found.append("building %s converts but lists no collected outputs - what it makes would never be fetched" % id) if _list(logistics, "input_buffers").is_empty(): found.append("building %s converts with no input buffer" % id) + + +static func _check_planets(found: PackedStringArray) -> void: + for definition in PlanetDefinitions.DEFINITIONS.values(): + var id: String = String(definition.definition_id) + if definition.names.is_empty(): + found.append("planet %s has no generated names" % id) diff --git a/planets/PlanetDefinition.gd b/planets/PlanetDefinition.gd index 6678109..faf5f64 100644 --- a/planets/PlanetDefinition.gd +++ b/planets/PlanetDefinition.gd @@ -3,7 +3,9 @@ extends Resource @export var definition_id: String = "rocky" @export var display_name: String = "Rocky planet" -@export var names: PackedStringArray = [] +# Keep this implicit default export-safe; explicit empty PackedStringArray +# defaults can replace authored values during Godot 4.7.1 binary conversion. +@export var names: PackedStringArray @export var visual_scene: PackedScene @export var surface_profile_id: String = "rocky" @export var resource_id: String = "ore" diff --git a/vessels/VesselDefinition.gd b/vessels/VesselDefinition.gd index ba2a988..b6aad36 100644 --- a/vessels/VesselDefinition.gd +++ b/vessels/VesselDefinition.gd @@ -31,7 +31,9 @@ extends Resource # gun is the case that does. @export var garrison_ammo_resource: String = "" @export var garrison_ammo_capacity: int = 0 -@export var capabilities: PackedStringArray = [] +# Do not add an explicit `= []` default here. Godot 4.7.1 can discard a +# PackedStringArray override while converting custom resources to binary .res. +@export var capabilities: PackedStringArray @export var component_scenes: Array[PackedScene] = [] @export var base_stats: Dictionary = {} @export var minimum_stats: Dictionary = {}