extends SceneTree # Forgejo #27: gas giants are deterministic animated gas sources, and the # existing transporter route carries their gas without converting it to ore. var game_state: Node var stage: int = 0 var elapsed: float = 0.0 func _initialize() -> void: game_state = root.get_node("GameState") game_state.buildings.clear() game_state.extractors.clear() game_state.transporters.clear() game_state.gas = 0 game_state.rocks = 0 func _process(delta: float) -> bool: elapsed += delta if stage == 0: var found_giant: bool = false for x in range(-12, 13): for y in range(-12, 13): var data: Dictionary = WorldGen.planet_data_at_chunk(Vector2i(x, y)) if String(data.get("planet_type", "")) == "gas_giant": found_giant = String(data.get("resource_type", "")) == "gas" break if found_giant: break if not found_giant: return _fail("world generation produced no deterministic gas giant") var giant: Node2D = load("res://Planet.tscn").instantiate() giant.planet_type = "gas_giant" giant._process(0.5) if giant.gas_phase <= 0.0: return _fail("gas giant animation did not advance") giant.free() game_state.add_building(GameState.BUILDING_MOTHERSHIP, Vector2.ZERO) game_state.add_building(GameState.BUILDING_TRANSPORT_HUB, Vector2(100, 0)) game_state.add_extractor("Aurelia", Vector2(400, 0), "gas") game_state.extractors[0].stock = game_state.transporter_load_limit() game_state.transporters.append({"hub_id": 2, "state": GameState.TRANSPORTER_TO_EXTRACTOR, "target_id": 0, "extractor_index": 0, "carrying": 0, "resource_type": "gas", "progress": 1.0, "from": Vector2(100, 0), "to": Vector2(400, 0)}) game_state._arrive(game_state.transporters[0]) if game_state.transporters[0].state != GameState.TRANSPORTER_TO_MOTHERSHIP_FROM_EXTRACTOR: return _fail("transporter did not collect gas from the extractor") game_state._arrive(game_state.transporters[0]) if game_state.gas != game_state.transporter_load_limit() or game_state.rocks != 0: return _fail("gas delivery banked gas=%d ore=%d" % [game_state.gas, game_state.rocks]) print("gas giant animated; transporter banked %d gas without creating ore" % game_state.gas) print("TEST_GAS_SYSTEM: PASS") quit(0) return true return false func _fail(message: String) -> bool: print("TEST_GAS_SYSTEM: FAIL (%s)" % message) quit(1) return true