Code: Terraform

Code: Terraform

View Stats:
Bio Collecting questionable design
The whole bio collecting mechanic is essentially made so that the optimal way to do it is:
1. Set an order, that is not yet completed
2. Have the collector collect the stuff needed for that order
3. Analyzer just works completely reactively, anytime the collector has something it can take, do it, and analyze + extract it.

The problem is that there is no way the collector can know how to get specific specimen, unless you provide it a manually made map. That already seems weird, that I have to manually map it out and provide a CONST map that manually captures this data, as opposed to scan differentiating between a unknown specimen and something you know is there. The player can look at the map of specimen, and if they have been at one place before, they can see what they can expect to find there, why is that same information not avaiable in scripts? I started making this map, but since the map you can manually inspect only has distances and no coords, and distance is not unique to the locations, we need a coord: specimen map. Here, I ran into another super annoying problem, this time probably a bug. When the collector has a script running on it, I cannot discard the currently loaded specimen in the lab, and the lab script I made automatically takes anything available from the collector as soon as its there, so the collector script that prints coordinates and fragment_id cant find the specimen in self.cargo because the lab has already taken it. So, I cannot keep my lab script running to automatically analyze + extract specimen while building the map, so my only option is to manually analyze + extract all specimen, as I cannot discard. The last part, not being able to discard, is surely a bug, and the game is very new, so I totally get that, but the whole design of how to set this up seems a little weird. The game also told me not to worry too much about what I was collecting, but that was very wrong, because now I have over 100 fruiting bodies, and imagine my surprise when I found out only the first 15 can ever be used, so the rest is just wasted time. When you only need 20 MAX of one specimen, telling the player that "it's not that important, just pick the closest" is very, very wrong in my opinion.
< >
Showing 1-15 of 15 comments
I also just noticed another thing I hope is a bug. You cannot manually insert reagents in the lab while the collector is collecting. Its either a bug or a completely arbitrary limitation with no purpose, so hoping it is a bug :D
what youre explaining is just part of the puzzle to me, and something I overcame by script design.

I know it may seem intuitive to point out how the game could be improved, but at some point you just remove all need for the player to script any solution, why doesn't the game just do it for you?
I managed to eventually design the entire bio-system to only collect what the 'exchange' requests. There's some bus and data archive involved to make that happen. In the beginning you're going to want to ad-hoc collect, and analyze, later you can automate this process.

All my processes at this point use systems to regulate themselves, even my power.
There is a journal. After you scan a specimen for the first time, it is recorded in the journal. It includes the specimen id and coords. So, it's essentially like the map you've created in your code, but it is persistent. This should solve your collecting issue. (Though, if you want to keep your coded map, you would just have to change whatever while loop you're using for the lab collecting so it is not taking the specimen right away. That is not inherent to the game. You've coded it that way so it can't be a bug.)
Originally posted by --liio:
what youre explaining is just part of the puzzle to me, and something I overcame by script design.

I know it may seem intuitive to point out how the game could be improved, but at some point you just remove all need for the player to script any solution, why doesn't the game just do it for you?
Programming is not about writing constant variables or configuring, I am not asking for something to ignore this functionality, rather something to scriptically interact with it. For example, you could have the self.scan() function return objects that have a Specimen object as one of their fields, and if the value is None that just means you haven't discovered it yet. Simple, then you could build the map dynamically in the beginning of the script, you could even make a script that scans, checks all locations for specimen, figures out which ones as undiscovered, discovers them and then builds the map and begins working automatically. That's not less work or gameplay, rather it is the oppertunity for the player to build a system that is smarter and requires MORE logic, not less, and more complex logic as well, so I am having trouble seeing how this would make the gameplay more shallow. This would also align the information on the dashboard with what is available scriptically, which makes a lot more sense because if the data is there it is there, hiding it in some situations when it is available in others is what makes that an arbitrary decision.
Originally posted by gravia:
I managed to eventually design the entire bio-system to only collect what the 'exchange' requests. There's some bus and data archive involved to make that happen. In the beginning you're going to want to ad-hoc collect, and analyze, later you can automate this process.

All my processes at this point use systems to regulate themselves, even my power.
Yeah I did this too, and the funny part is the actual logic is super simple, but before doing so I had to manually create the mappings of cooords and specimen, because otherwise there was no way for me to point the collector towards for example "mh_fruiting_body" because it only knows coordinates and distance. It would be a lot more fun and a lot more useful if it could be done scriptically by being able to tell what discovered specimen can be found at each location if you have been there before. Also, that way the entire map could be populated using direct, in-game data instead of data manually extracted from the system using print functions, which has many upsides, for example if the game gets an update, you dont need to go back in with prints to find out stuff, you can write a script that makes the computer discover them for you and then it would know what they can be used for, in the exact same capacity as the player could do it manually.
Originally posted by KayPrime:
There is a journal. After you scan a specimen for the first time, it is recorded in the journal. It includes the specimen id and coords. So, it's essentially like the map you've created in your code, but it is persistent. This should solve your collecting issue. (Though, if you want to keep your coded map, you would just have to change whatever while loop you're using for the lab collecting so it is not taking the specimen right away. That is not inherent to the game. You've coded it that way so it can't be a bug.)
Ah, I did not know this, this sounds like the solution I was looking for. The bug I was talking about had nothing to do with my code, it had to do with me not being able to interact with machine x while a script was running on machine y, and actually not even that, because I could still analyze, add reagents and extract, there it had no issue with any "actively running scripts", but if I tried to discard the specimen in the lab instead of processing it, I would get a "can't do this because a script is running on the machine", while I could see that the attached script was not running, so I very much hope that is a bug.
Originally posted by KayPrime:
There is a journal. After you scan a specimen for the first time, it is recorded in the journal. It includes the specimen id and coords. So, it's essentially like the map you've created in your code, but it is persistent. This should solve your collecting issue. (Though, if you want to keep your coded map, you would just have to change whatever while loop you're using for the lab collecting so it is not taking the specimen right away. That is not inherent to the game. You've coded it that way so it can't be a bug.)

Where to find this journal? (Im on demo if that matters?)

in the tab catalog, there is a bunch of different materials, but all have a "?" in the picture window and i cannot see id nor coord.
If you want to use the Journal use
get_component("journal")

From what i can see this only returns information on allready collected specimen.
So you cannot find a specimens coords you have not allready discovered.

My current approach is to simply check if there are specimen not collected and if yes collect it.

I have not yet created a working script for everything that comes after the collection so i do not know if this is a feasible approach.
Edit:
simplified the code a bit

def scanunknown(): #check if something is in cargo space if self.cargo: return False else: #if cargo is empty loop scan() results until you find something that is not cataloged and collect it oblist = self.scan() for i in range(oblist.length): subject = oblist
if subject.cataloged == False:
self.collect(subject.coords)
return True
Originally posted by Squid:
Originally posted by KayPrime:
There is a journal. After you scan a specimen for the first time, it is recorded in the journal. It includes the specimen id and coords. So, it's essentially like the map you've created in your code, but it is persistent. This should solve your collecting issue. (Though, if you want to keep your coded map, you would just have to change whatever while loop you're using for the lab collecting so it is not taking the specimen right away. That is not inherent to the game. You've coded it that way so it can't be a bug.)

Where to find this journal? (Im on demo if that matters?)

in the tab catalog, there is a bunch of different materials, but all have a "?" in the picture window and i cannot see id nor coord.
It's a research, it will unlock automatically once you have enough Terraform index (combination between heat, pressure and o2)
Originally posted by workes:
Originally posted by gravia:
I managed to eventually design the entire bio-system to only collect what the 'exchange' requests. There's some bus and data archive involved to make that happen. In the beginning you're going to want to ad-hoc collect, and analyze, later you can automate this process.

All my processes at this point use systems to regulate themselves, even my power.
Yeah I did this too, and the funny part is the actual logic is super simple, but before doing so I had to manually create the mappings of cooords and specimen, because otherwise there was no way for me to point the collector towards for example "mh_fruiting_body" because it only knows coordinates and distance. It would be a lot more fun and a lot more useful if it could be done scriptically by being able to tell what discovered specimen can be found at each location if you have been there before. Also, that way the entire map could be populated using direct, in-game data instead of data manually extracted from the system using print functions, which has many upsides, for example if the game gets an update, you dont need to go back in with prints to find out stuff, you can write a script that makes the computer discover them for you and then it would know what they can be used for, in the exact same capacity as the player could do it manually.
You don't need to do that manually or even have the journal unlock, the self.scan returns the info for each locations. At the begining you dont know what fragment you get for each point but as soon as you analyse one fragment from a certain location, it's given by the self.scan.

If you search for a specific element which you don't have the location, continue to collect and analyse unknown locations until you find what you are looking for all by scripts
journal is not an unlock. It is available from the start of the game. Search the DOCS for Journal
You can grab the coords from the Bio Lab

bio_lab_1.py
aninfo = self.analyze() print(aninfo) warn(f"/"{aninfo.name.lower()}/": {aninfo.coords}") sufficient_reagents = True
Greetings,
from the biocollector

exchange1 = get_component("bio_exchange_1") exchange1.active_order().requires reqvalues = exchange1.active_order().requires.values() keylist = exchange1.active_order().requires.keys() delamount = exchange1.active_order().delivered.values()


this will help you to see the active order in the bio exchange.
your mileage may vary ... but this is the way i went about it.
This is all explained under the self.scan() entry in the docs for the bio collector.
Lists fragment locations in this outpost's biome, nearest first. Each FragmentLocation includes coords, distance, and whether it has been cataloged. Cataloged locations also reveal their fragment id, name, and rarity; unknown locations leave those details as None. To identify an unknown location, collect it with bio_collector.collect(location.coords) and analyze it at a Bio Lab. Recipes and creature identity are not revealed here. Analyzed fragments also appear in journal.cataloged_fragments(...).

Originally posted by Squid:
Where to find this journal? (Im on demo if that matters?)

in the tab catalog, there is a bunch of different materials, but all have a "?" in the picture window and i cannot see id nor coord.
Open the docs (button in top right) and type it into the search box
< >
Showing 1-15 of 15 comments
Per page: 1530 50