
I GOT 1000 A RANKS! AOSDGAGIAHGIAAKGAASAaafafsafsafa
AOSDGAGIAHGIAAKGAASAaafafsafsafa

AOSDGAGIAHGIAAKGAASAaafafsafsafa
somehow i accidentally saved my own goal
EDIT: this is like my best save ever
I made a CSV file of every signal in Space Age, and put it into a combinator. Each signal is included in each of the 6 qualities.
I wrote a Lua snippet (run in the Factorio console) that finds every valid signal via inspecting the game's prototypes. This gave me the complete list of every possible signal Factorio would allow in a blueprint, which I then saved to a file. I then wrote a Python script that puts all those signals with every quality into a decider combinator, and converts those into a blueprint string.
| Version | Base Signals | Total Unique Signals | Storage per Combinator |
|---|---|---|---|
| Previous best (used all signals directly selectable using UI) | 581 | 2,905 (uses 5 qualities) | 11.6 KB |
| Obscure previous best (JSON file of over half of all the siganls) | 1,300 | 7,800 (if using all 6 qualities) | 31.2 KB |
| This version (all signals exported using a script) | 2,224 | 13,344 (uses all 6 qualities) | 53.3 KB |
cliff is included, but can only be placed. Otherwise, it is not possible to obtain them in the cursor regularly).parameter signals do not show up in the UI (no icon, no number, don't show up in input / output) but otherwise function like regular signals. (Verified using lamps and also a selector combinator with "count inputs").This is a a singular decider combinator containing every possible signal in Factorio: Space Age a combinator can contain. I believe this list is exhaustive. (Stored in a decider combinator as it allows the blueprint string to be smaller in size than using a Constant combinator).
item, fluid, virtual, entity, recipe, space-location, asteroid-chunk, quality), which are the only prototype categories allowed for signals, as defined in the Factorio API Reference.normal, uncommon, rare, epic, legendary, and quality-unknown). quality-unknown is a special quality used internally by Factorio, but is also a valid quality for a signal.cliff, big-demolisher-expanding-ash-cloud-1, etc.), as well as remnants and explosions (e.g. artillery-wagon-explosion, artillery-wagon-remnants).^(N.B.: There are 8 signals from the CSV that don't work as they are wildcard signals.)
Below is the Python code used to generate the blueprint string:
# This is the original Python script used to generate the comprehensive list of all
# Factorio: Space Age signals as listed at https://lua-api.factorio.com/latest/concepts/SignalIDType.html
# Last updated: September 2026
#
# To generate `signals.csv`, run the below code in the Factorio console:
#
# /c local t={}; local function add(p,typ) for n,_ in pairs(p) do t[#t+1]=typ..","..n end end; add(prototypes.item,"item"); add(prototypes.fluid,"fluid"); add(prototypes.recipe,"recipe"); add(prototypes.entity,"entity"); add(prototypes.space_location,"space-location"); add(prototypes.asteroid_chunk,"asteroid-chunk"); add(prototypes.quality,"quality"); add(prototypes.virtual_signal,"virtual"); helpers.write_file("signals.csv",table.concat(t,"\\n"))
#
# Then, copy 'signals.csv' from the 'script-output' folder in the Factorio user data directory to the folder this script is in.
#
# Requires: pyperclip for copying to clipboard
USE_INDEXED = False # If `True`, the signals value will match their 1-based index.`
CSV_FILENAME = "signals.csv"
def main():
import base64
import json
from pathlib import Path
import zlib
import pyperclip
if not (CSV_PATH := Path(CSV_FILENAME)).exists():
raise FileNotFoundError(
"\n".join([
f"File not found: '{CSV_PATH}'",
"To generate the CSV file, run the below code in the Factorio console:",
"",
"""/c local t={}; local function add(p,typ) for n,_ in pairs(p) do t[#t+1]=typ..","..n end end; add(prototypes.item,"item"); add(prototypes.fluid,"fluid"); add(prototypes.recipe,"recipe"); add(prototypes.entity,"entity"); add(prototypes.space_location,"space-location"); add(prototypes.asteroid_chunk,"asteroid-chunk"); add(prototypes.quality,"quality"); add(prototypes.virtual_signal,"virtual"); helpers.write_file("signals.csv",table.concat(t,"\\n"))""",
"",
"Then, copy 'signals.csv' from the 'script-output' folder in the Factorio user data directory to the folder this script is in.",
])
)
def encode_blueprint(data: dict) -> str:
raw = json.dumps(data, separators=(",", ":"), ensure_ascii=False).encode("utf-8")
compressed = zlib.compress(raw, level=zlib.Z_BEST_COMPRESSION)
# Factorio version prefix
return "0" + base64.b64encode(compressed).decode("ascii")
# These signals do not work
BLACKLIST_SIGNALS = (
"virtual,signal-everything",
"virtual,signal-each",
"virtual,signal-anything",
"virtual,signal-item-parameter",
"virtual,signal-fuel-parameter",
"virtual,signal-fluid-parameter",
"virtual,signal-signal-parameter",
"virtual,signal-unknown",
)
SIGNALS = tuple(
{"type": k, "name": v}
for k, v in [
line.split(",")
for line in CSV_PATH.read_text().splitlines()
if line not in BLACKLIST_SIGNALS # 5 signals are invalid
]
)
QUALITIES = "normal", "uncommon", "rare", "epic", "legendary", "quality-unknown"
outputs = []
for s in SIGNALS:
for q in QUALITIES:
data = {
"signal": {**s, "quality": q},
"copy_count_from_input": False,
}
if USE_INDEXED:
data["constant"] = len(outputs) + 1 # must be 1-indexed
outputs.append(data)
result = encode_blueprint({
"blueprint": {
"description": f"A decider combinator containing all the possible {len(outputs)} signals in Factorio: Space Age.{'\n\nIndexed by item count.' if USE_INDEXED else ''}",
"icons": [{"signal": {"name": "decider-combinator"}, "index": 1}],
"entities": [
{
"entity_number": 1,
"name": "decider-combinator",
"position": {"x": 0, "y": 0},
"direction": 4,
"control_behavior": {
"decider_conditions": {
"conditions": [{"first_signal": {"name": "gate"}, "comparator": "="}, {"first_signal": {"name": "gate"}, "comparator": "\u2260"}],
"outputs": outputs,
}
},
}
],
"item": "blueprint",
"label": f"Factorio: Space Age - All {len(outputs)} Signals{' (Indexed)' if USE_INDEXED else ''}",
"version": 562949958467584,
}
})
pyperclip.copy(result) # Copy to clipboard
print(f"Blueprint copied to clipboard.")
print(f"Blueprint length: {len(result)}")
if __name__ == "__main__":
main()
Below is the Lua snippet run in the Factorio console used to generate a CSV of all the available signals:
/c local t={};
local function add(p,typ) for n,_ in pairs(p) do t[#t+1]=typ..","..n end end;
add(prototypes.item,"item");
add(prototypes.fluid,"fluid");
add(prototypes.recipe,"recipe");
add(prototypes.entity,"entity");
add(prototypes.space_location,"space-location");
add(prototypes.asteroid_chunk,"asteroid-chunk");
add(prototypes.quality,"quality");
add(prototypes.virtual_signal,"virtual");
helpers.write_file("signals.csv",table.concat(t,"\n"))
TL;DR; This has 2,224 * 6 qualities = 13,344 signals
im loving this pp rework so much its buffing our goated osu players back to the top
nice job peppy ❤️❤️❤️
I'd like someone to bring back the water duplication glitch (ideally the developers, or as a mod). I'd say it's a feature, not a bug. For example, Mojang decided to keep redstone bugs in Minecraft Java, and removed them in Minecraft Bedrock. Now we see how much redstone has flourished due to these little quirks.
Honestly, for the amount of time and effort it takes to execute the glitch for the relatively tiny output, I'd say this should be acceptable?
I'm curious how many people want to bring the bug back.
I'd greatly appreciate any feedback on the track, its presentation, and layout on Bandcamp. This is my first time using Bandcamp and I don't know if I hit the correct aesthetic.
I'd like to note this release was a little rushed, and I could have added more elements + the mix is slightly clipping near the beginning.
P.S. I'm posting this purely to meet criteria for an assignment.