Guide: Basic Spaceship Circuitry

From Space Exploration
Jump to navigation Jump to search

by Wiwiweb, last verified valid for 0.6.120

Automating spaceships can seem daunting at first because of their flexibility. But for the common use cases, the circuitry can be pretty simple once you know how things work. The secret is to do as much of the spaceship logic outside of the spaceship.

Unlike my cannon and rocket guides, this guide assumes you know the basics of Factorio circuitry.

Steps to spaceship automation[edit]

Example spaceship

Let's take as an example an A-to-B route, the most basic spaceship route possible: It goes back and forth between Nauvis and Nauvis Orbit, loading up items at Nauvis and unloading them at the Orbit.

We need to:

  1. At each location, set the next destination.
  2. At each location, launch the spaceship when it is full or empty.
  3. After launching, engage engines to start moving.
  4. When arrived at the destination, anchor the spaceship using the proper clamps.

For learning purposes, we'll take this one step at a time, but once you understand you can of course build the fully-functioning spaceship right away.

Setting the destination[edit]

The wire pass-through connection of a spaceship clamp

When at Nauvis, we need to set the ship's destination to Nauvis Orbit, and when at the Orbit, we need to set the ship's destination to Nauvis. The simplest way to do this, and avoid any sort of complicated conditional circuitry, is to simply send the destination signal from the location itself, outside the spaceship, passing through the spaceship clamp, like this:

As you can see, the spaceship automatically changed its destination.

When connecting the wires to the clamp, make sure you connect them to the pass-through connection of the clamp, and not the clamp itself (as seen in the picture on the right).

The destination signal you need to use can be found in the Universe Explorer. Look for the "Automation Signal" value for the zone.

We will need to build the same thing at Nauvis Orbit later.

Creating a launch checklist[edit]

In this example, we want to launch only when:

  • The accumulators are full
  • The fuel tanks are full (or 99% full, to avoid fluid transfer speed issues)
  • The cargo is full of iron plates

Your own checklist might be different! But the idea stays the same:

We wire up everything in the spaceship related to our conditions: Fuel tanks, accumulators, and the cargo. Then we send those signals through the clamp, where a series of decider combinators will check if each launch condition is fulfilled. When all conditions are fulfilled (3 checkmark signals), the last combinator will send the "launch" signal back to the spaceship, and the spaceship will launch.

By habit, I tend to use red wire for everything coming into the ship, and green wire for everything coming out of the ship. This isn't mandatory but it avoids accidentally wiring them together.

The ship's console also has an output connection in the top right that gives out additional status signals about the spaceship (e.g. current destination, current speed, ship console ID...). We're not using it in this example but it might be useful to you at some point.

Engage![edit]

Our ship has launched and is now in space! But it's not moving.

To get engines started, we simply need to pass a "speed" signal to the console. This is simply done with a constant combinator in the ship. If you don't want to have any speed limit, simply set the signal to a very high value.

We could not pass the speed signal in advance from outside the ship, because the ship only checks for this signal after launching. (If you happen to try this you might find this can still work inconsistently, depending on launch timing synchronizing with signal check timing. This is often the cause of spaceships "randomly" not working.)

Note: Instead of using a speed signal, you could also simply type a speed in the spaceship console's GUI, which would have the same result. However, that value wouldn't be kept if you wanted to turn the spaceship into a blueprint. (Plus you need the constant combinator anyway for a later step.)

Destination and launch checklist at the other location[edit]

The ship is on its way! That gives us some time to prepare its landing at the destination. We have to redo step 1 and 2:

Note that the destination signal is set to go back to Nauvis, and the launch checklist is different (We launch when the cargo is empty, and we don't refuel).

Anchoring[edit]

The clamp's id can be seen and changed here (here, it's 4)

The ship has reached its destination and is now waiting to anchor. We need to provide 2 signals to the console:

  • Anchor FROM (yellow arrow). That's the clamp on our ship.
  • Anchor TO (blue arrow). That's the clamp at the destination.

You can see a clamp's ID by clicking on it (see picture on the right). You can also change a clamp's ID by changing the signal in that GUI.

Make sure the clamp IDs at both ends of the routes are the same ID, this will simplify things a lot.

Since the clamp we want to anchor from is always the same (the spaceship's clamp) and the 2 clamps we want to anchor to at each end of the route have the same ID, we can simply put those two signals in the constant combinator on-board:

Optional clamp trick[edit]

Because the spaceship clamp's bottom part is a fully functional constant combinator that gives out its "anchor from" signal, you can actually connect a wire from the bottom part of the clamp itself instead of setting the "anchor from" signal in the constant combinator:

Note the green wire going from the bottom of the clamp to the top of the clamp.

This doesn't save you any combinator but it might make it easier to copy paste ships.

Conclusion[edit]

Your ship is now functional and fully automated! Take a load off!

When it comes to spaceship logic, the sky is the limit! But it will always come down to the 4 steps you've learned: Setting the destination, launching, engaging (setting the speed), and anchoring. Every advanced addition is only a modification of one of those 4 simple steps.

Best of luck!