Skip to content

Bio Lab reagent supply

Buy reagents—and actually get them into the Bio Lab

Reviewed September 28, 2026 · Reference build 441ad76; inventory routing requires Auto Feeders

The short answer

Use the Shop to buy missing reagents, then move them into the Lab’s input before loading the recipe. A successful purchase puts stock in base Inventory; it does not automatically fill the Lab.

This guide covers a Lab at Nocturna Base. At a remote outpost, use a local store and arrange delivery first: buying at the base is not a remote supply line.

Code: Terraform research catalog with Inventory and Shop navigation plus separate infrastructure components
Inventory and Shop are visible in the official Research-screen sidebar. This is an orientation screenshot, not a picture of loaded reagents or a completed extraction.Open full image ↗
On this page

1. Read the recipe and what is already loaded

In the Lab’s own script, use an analyzed specimen’s self.specimen.recipe and compare it with self.loaded_reagents. If no specimen is present or analysis has not succeeded, stop before trying to fill a recipe.

For each reagent, calculate recipe quantity minus quantity already loaded. Do not reload the full recipe after every script restart. Wrong or extra loaded reagents need correction before extraction; use self.unload_reagents() and check output capacity before rebuilding the load. A mismatched extraction destroys the reagents.

Example arithmetic, not a recipe: a requirement of 4 with 1 already loaded leaves 3 to stage. If the input already holds 2 of that same reagent, only 1 more needs to arrive there.

2. Connect Inventory and transfer the reagent

With Auto Feeders researched, a home-base Lab can use self.input.connect("inventory"). Check its result before continuing. A remote Lab must connect a compatible same-outpost store instead.

The input holds one reagent ID at a time. Inspect self.input.stacks(). If it contains another reagent, recover that stock with the documented eject command before switching IDs; flush permanently destroys the buffer.

Subtract matching stock already in the input from the amount still to load. Use self.input.take(reagent_id, amount_still_needed_in_buffer) only for that positive remainder. Transfers can be partial: recheck the buffer instead of assuming the whole amount arrived.

3. Buy only the shortfall, then try the transfer again

First try available stock. If the connection and transfer prerequisites are correct but that reagent is short, use the Shop component’s buy(reagent_id, quantity) with a positive whole-number shortfall.

Optional in-game example: this buys one Alkaline Buffer into base Inventory. It spends credits, so only run it if that ID and amount match your actual shortage.

shop = get_component("shop")
purchase = shop.buy("alkaline_buffer", 1)
print(purchase.status)
  • ok: retry the input transfer, then inspect what moved.
  • insufficient_credits: obtain credits; repeated purchase attempts cannot fix the balance.
  • inventory_full: free base Inventory space safely.
  • locked or not_found: check research and the exact reagent ID in the Shop catalogue.

Do not buy again just because loading failed. A disconnected input, missing research, or stock at the wrong outpost needs a logistics fix.

4. Load the exact amount, then verify extraction

Once the matching input buffer has enough stock, call self.load(reagent_id, missing) on the Lab. On ok, reread loaded quantities. insufficient_input means the required stock is not staged in the input; busy means let the ongoing action finish.

Only extract when all loaded quantities match the analyzed recipe and no extra reagent is present. On ok, confirm a sample in output. On output_full, free output capacity and reread the machine before deciding the next action. On recipe_mismatch, stop and rebuild the reagent plan—not the same failing call.

Keep automatic retries bounded

Build a loop from the checks above, not a recursive “buy and try again” call. Reread the chamber, buffer and loaded amounts after every attempt. Wait only for a condition that can change; stop and print the first blocker when identity, research or storage needs attention.

A practical starting rule is at most three attempts at a transient step before pausing for inspection. Three is your script’s safety policy, not a built-in game limit. An accepted purchase is not proof of loading, and a loaded recipe is not proof of a finished sample.

See the editor and base systems in context

Watch the game

Code: Terraform Beginner Guide

PowerFang’s Early Access walkthrough provides interface context. It does not verify the purchase-and-transfer sequence above; use your installed Lab and Shop DOCS for those calls.

By PowerFang

Return to reagent routing →

Playing connects to YouTube. Open on YouTube ↗

Sources for this guide

  • Bio Lab, Shop, and InputSlot references: recipe, purchase results and the missing input-transfer step.
  • Long-Running Scripts: reread machine state after restarts and distinguish transient from actionable blockers.
  • September 14 player discussion: Shop purchasing and retry suggestions. It contains fragments and thanks, not a complete script with an explicit success report.
  • References were read September 28. The public documentation identifies build 441ad76; this sequence is source-based, not our own gameplay test. Earlier examples using the input as the specimen chamber should not be combined blindly with the separate input port documented here.