Geneforge 1 - Mutagen

Geneforge 1 - Mutagen

Not enough ratings
Canisterless/0-Canister script modifications
By Ketesi
A set of script modifications required for a canisterless/0-canister run.

This is, essentially, a mod provided in a very DIY installation method. Usual caveats apply.
   
Award
Favorite
Favorited
Unfavorite
Things To Beware Of
First and foremost.

The game's scripts are generally written using Classic Mac OS line endings, aka CR. These are literally the least standard line endings. When they aren't, they're written using the much more standard, but still not entirely Windows-friendly, Unix/New Mac OS/Linux line endings, aka LF.

I haven't done a full check to see if CRLF (Windows) line endings exist.

But, basically, if you are on Windows and you don't yet have Notepad++ or Visual Studio Code or something resembling an actual text editor laying around, figure that out.

Secondly: Messing this up will obviously corrupt your installation somewhat. Remember that you can revalidate your installation (thus removing the modifications) at any time, using the "Verify integrity of game files" button in Steam (Geneforge 1 - Mutagen > Properties... > Installed Files).

Thirdly: My very unknowledgable opinion is that the restriction against canisterless was put in place for one of two reasons:
1. Because you effectively always have Firebolt even without the skill for some reason.
2. To cover up a Geneforge 1 plot issue where characters would assume you've run into canisters at some point.

I bring this up because this means you should expect oddities if you do this.
Actual Modifications
There are three files that need to be modified.

In both objcanister.txt and z0dockcan.txt, look for beginstate USE_STATE; and add code as so:

beginstate USE_STATE; if (gf(0,18)==2) { set_top_string("Open Canister: You tentatively approach the canister, but then pull back."); end(); }

In z0docksdlg.txt, first search for tag = 19;.
Immediately after that line, add code as so:

tag = 19; state = -1; nextstate = 9000;

Finally, at the end of the file, add the following code:

begintalknode; state = 9000; nextstate = -1; condition = get_sdf(0,18) > 0; question = "(Wait.)"; text1 = "The door opens."; action = END_TALK; begintalknode; state = 9000; nextstate = -1; condition = get_sdf(0,18) == 0; question = "(Wait.)"; text1 = "Nothing happens."; action = END_TALK; begintalknode; state = 9000; nextstate = -1; condition = get_sdf(0,5) == 0; question = "(Disable canisters and proceed.)"; text1 = "Canisters disabled. Door opening..."; code = sf(0,18,2); break; action = END_TALK; begintalknode; state = 9000; nextstate = -1; condition = get_sdf(0,5) != 0; question = "(Disable future canisters and proceed.)"; text1 = "Canisters disabled. Door opening..."; code = sf(0,18,2); break; action = END_TALK; begintalknode; state = 9000; nextstate = -1; condition = get_sdf(0,18) == 0; question = "(Just open the door, don't disable canisters.)"; text1 = "Door opening..."; code = sf(0,18,1); break; action = END_TALK;
Usage Notes
The Mod In Practice

Simply walk up to the door, and you'll be presented with a menu of options.

In particular, you can choose to simply skip the door without further effects, or disable all canisters entirely. You can also do this after having picked up the first canister.

Disabling canisters makes you unable to use them, even by accident. This decision is permanent without cheats.

Note, however, that this only counts for canisters, not for similar sources of skill gain, including other self-shapers like the Ruined School servant mind or the Geneforge. However, I am pretty sure this does cover everything that would be tracked as a canister, i.e. for dialog.

Cheats to enable/disable canisters

If you're regretting disabling canisters, the following cheat will help: `sdf 0 18 1`
If you want to disable future canisters in a run that has already passed the door, `sdf 0 18 2` will do that.