673f262162406

673f2621636ee
5 Guests are here.
 

Topic: SS2 No Keypad Cheese Read 15513 times  

673f2621642c6sarge945

673f262164326
°DML

No Keypad Cheese
A mod by Sarge945

System Shock 2 is a very exploitable game, with many areas containing valuable goodies requiring keycodes. By knowing the codes upfront, many powerful items can be accessed early and in some cases entire decks and major story elements can be skipped entirely by knowing codes ahead of time. There are also several areas where codes are not supposed to be known, and are designed to be hacked, such as the Cryo Recovery closet in Med/Sci, which contains a valuable BrawnBoost, code 00000.

On repeat playthroughs, it's therefore very easy to trivialize much of the difficulty of the game and gain early access to a lot of things.

Many mods have attempted to resolve these exploits by changing codes, however this simply moves the problem - once the new codes are known, the game can be exploited once again. This mod instead makes all keypad codes always fail - including the correct code - until the player has gained the relevant log entry or email outlining what the code is supposed to be.

Additionally, as a small quality of life improvement, a small message will appear containing the code whenever the player uses a keypad they know the code for. Many modern games such as Prey and the Deus Ex sequels do something similar.

The first keypad in the game (the one to leave the depressurizing cryogenics sector - code 45100) is deliberately exempt from the features of this mod, and will not require picking up the audio log on the nearby corpse in order to work, nor will it tell you the code that you need to use, forcing you to listen to the audio log to learn it, but still allowing you to use it if you know it beforehand. This is by design and is intended to stop the tutorial being annoying on repeat playthroughs, while at the same time not ruining the learning experience for anyone who for some reason decides to play this mod for their first playthrough. If you want to ensure this mod is working, you will need to test it with the hacking tutorial keypad (code 00000) or the maintenance shaft access keypad (code 12451). Please do not report this mod as broken/not working until you have tried at least one keypad outside of the tutorial area.

Main Features:
  • Compatible with SCP, SecMod and most other mods, including mods which change keypad codes
  • Uses a generic solution to support all keypads from all FMs (with some caveats) [Thanks ZylonBane]
  • All keypads require the player character to have obtained the code before it can be used
  • Certain keypads with no relevant log or email outlining the code require hacking and cannot be exploited
  • Codes are displayed when using a keypad with a known code

You can discuss this mod, provide feedback, and talk about my other mods here

Changelog:

1.4

- Prevented Rec1 Transmitter and medsci1 training wheels keypad (45100) from displaying their codes on the HUD

1.3

- SCP Beta 5 Fixes.

1.2

- Added a secondary method for keypads to enable themselves, based on finding their own keypad code within logs
   - This should add potential automatic support for FMs, but only if they don't do custom things with Keypad scripts.
   - Many FMs such as Ponterbee will still require custom patches to work fully.
   - Now, instead of a message in the top message box, the HUD String of the keypad will be updated.

1.1

- Fixed issue where you could get the medsci2 armoury code early, as it was tied to the wrong note.

1.0

- Initial Release
« Last Edit: 16. October 2024, 17:08:35 by sarge945 »

673f2621644cbZylonBane

Re: Medsi Closet Anti-Cheese minimod
673f26216451d
Wrong. It's not an "exploit", the code was deliberately set to 00000 to reward players who try to guess the code. If they'd intended it to only be accessible by hacking, they would have given it a more randomized code.

673f26216476dThiefsieFool

Re: Medsi Closet Anti-Cheese minimod
673f2621647c3
Just making an unsolveable keypad seems pretty easy, you set its code to a negative number or a number shorter than 5 digits.

673f262164e85sarge945

Re: Medsi Closet Anti-Cheese minimod
673f262164edc
Just making an unsolveable keypad seems pretty easy, you set its code to a negative number or a number shorter than 5 digits.

Making it shorter just pads it out with zeroes. The actual code in the editor is 0, not 00000. I have not tried a negative code.

Wrong. It's not an "exploit", the code was deliberately set to 00000 to reward players who try to guess the code. If they'd intended it to only be accessible by hacking, they would have given it a more randomized code.

I don't really think that sounds right. The developers specifically put the "hacking introduction" help terminal right next to that keypad for a reason. There are absolutely no hints at all that players should even try guessing a code, and the mechanic is never used anywhere else in the game. This isn't like "Calvo" in Deux Ex where there are environmental clues and actual game design to support the intent. There's literally nothing in the game to suggest the player should even be trying to guess any keypad. Every keypad up to this point (the one in training and the first one in medsci) have had seemingly random passwords to a new player. Now they are suddenly supposed to guess, right when the game is explicitly telling them to use hacking?

Even if they ARE intended to guess, it's an awful mechanic - the game is effectively telling the player that hacking can be bypassed by guessing, as if that's a real mechanic, but jokes on them because every other code they try to guess will just waste their time. It's a bait and switch that purposely punishes the player for being clever.

Unless there's an actual quote from a developer saying that this was their intent, I really find this difficult to believe.

It seems far more likely to me that they either didn't set a code (because you're supposed to hack it) and it defaulted to 0, or they set it to 0 for testing with the intent to set it to something later (say, when an audiolog that never made it into the game was added) and never did.

I would honestly not be surprised if every single playtester tried to hack that keypad, or avoided it due to not having the skill. It probably never even occurred to the developers to change it to something else.

Regardless of what their actual intent was, we're all on our hundredth playthrough now, and the code is well known. If it was supposed to reward players ingenuity, the "guessing" gameplay has certainly run it's course - guessing anything that doesn't change can only ever work once, after all. After that, it's just an exploit because you know that you need to guess and you know what to guess - it's metagaming at that point. We can never get back the guessing aspect of their intended design because the code is already known. Even if it was changed, it would just lead to the same problem again next time when people guess the new code. Meanwhile, hacking the panel is completely useless because everyone already knows the code and there's no reason to spend resources to open it. By removing the outdated (and no longer functional to anyone who has already guessed or otherwise knows the code, such as from a guide) guessing mechanic, we can at least make hacking that keypad actually viable as a strategic option - trade some CM investment and some nanites for some benefit, which is exactly how hacking works everywhere else in the game. To me, getting a balanced outcome on every playthrough is more important than a one-off guessing game experience. I doubt many people would use a mod like this on their first playthrough anyway, and even if they did, they can't possibly experience the guessing game mechanic anyway since this thread contains the code and thus ruins it for them, so they might as well use the mod.

Obviously, this also applies to the other codes in the game - after your first playthrough, anyone can memorize any of the codes and bypass/undermine various intended hacks, sequence break, and otherwise do unintended things in the game. I intend to fix those for the same reason. The only reason I did this one first is that there is no audio logs or emails associated with it, so it's a much easier fix.

Certain mods (*cough* RSD *cough*) put items there with the intention of them being balanced around the player choosing hacking. It seems obvious to me that hacking was their intent, which is why I made this.
« Last Edit: 10. July 2022, 15:54:30 by sarge945 »

673f262165050voodoo47

Re: Medsi Closet Anti-Cheese minimod
673f2621650a0
anyway, having more people taking a shot at squirrel modding can't be a bad thing.

will check and then move the mod to the mods subforum. lets see whether the "I really don't want to be able to guess/know the first code" people exist. the "I want to pay nanites to re-enable the medsci2 closet forcefield" people do, so my guess is there will be some.

673f2621651f6sarge945

Re: Medsi Closet Anti-Cheese minimod
673f262165247
I would suggest against moving it to the modding subforum, as my intent is to take the mod further, but I need some help. I would prefer to move it once I have had a crack at randomising all keypads and doing the audiolog reset thing. I just don't know where to really start on that.

I basically want to make the game sequence-break proof. It's so tempting at times to gain access to things I shouldn't be able to much earlier (like the medsci armoury) because I know a code that I really shouldn't at that part of the game.

Also, a more apt analogy would be people who like to disable or limit save scumming in games. This sits firmly in the "the game has a certain feature, but I am too weak willed to use it in the intended way" category. Exactly the same as the QBR Disabler mod. There's nothing stopping people from just not activating them, other than temptation.
« Last Edit: 10. July 2022, 15:19:15 by sarge945 »
Acknowledged by: voodoo47

673f262165389ZylonBane

Re: Medsi Closet Anti-Cheese minimod
673f2621653db
I have no idea why you think you need to send parameters to Squirrel scripts. If you want things to happen to keypad codes when the code is obtained, you need to set up a QB trigger (Simple QB Trigger (-2498)) for the code's quest note,  linked to a script that restores the code.

Regarding your test script, it's pointless to randomize the code every time a keypad is frobbed. Just do it once and be done with it:
Code: [Select]
class keypadRand extends SqRootScript {
function OnSim() {
SetProperty("KeypadCode", Data.RandInt(0, 99999))
}
}
Also, to make a keypad code unguessable/unusable, just set a code with more than 5 digits. So a keypad could be made inaccessible by adding 100000 to its code, then accessible again by subtracting 100000 from its code.

673f2621656a7sarge945

Re: Medsi Closet Anti-Cheese minimod
673f26216570a
I have no idea why you think you need to send parameters to Squirrel scripts. If you want things to happen to keypad codes when the code is obtained, you need to set up a QB trigger (Simple QB Trigger (-2498)) for the code's quest note,  linked to a script that restores the code.

Okay, I think I will slowly figure it out, thanks.
« Last Edit: 10. July 2022, 17:25:20 by sarge945 »

673f262165829sarge945

Re: Medsi Closet Anti-Cheese minimod
673f262165879
Okay, so I think I partially understand what's going on.

I need to use DML to add a Simple QB Trigger to each keypad, and set it to use the correct values (like "wattsy" is 1, etc). I think I can figure that part out.

The difficulty for me is the script. Do I just use a TurnOn signal to make it work? Do I just add the script to the keypad, link them, and it will work when the QB value changes?

EDIT: Okay, I got it working!

It seems I can't change the Cyro A keypad (the training wheels one at the start of the game), since the Amonpour log has no associated quest notes. However, you can't really skip any progress by knowing this code upfront, so I will leave it for now
« Last Edit: 11. July 2022, 06:12:53 by sarge945 »

673f262165983ZylonBane

Re: Medsi Closet Anti-Cheese minimod
673f2621659d5
Actually... since a big chunk of this is already being done in Squirrel, there's no need to involve the vanilla scripts at all. You can just monitor the quest state directly.
Code: [Select]
class keypadLock extends SqRootScript {
function OnBeginScript() {
if (HasProperty("QBName") && !IsDataSet("done")) {
local code = GetProperty("KeypadCode");
if (code <= 99999) {
SetProperty("KeypadCode", code + 100000);
}
Quest.SubscribeMsg(self, GetProperty("QBName"), eQuestDataType.kQuestDataCampaign);
OnQuestChange();
}
}

function OnEndScript() {
if (HasProperty("QBName")) {
Quest.UnsubscribeMsg(self, GetProperty("QBName"));
}
}

function OnQuestChange() {
if (Quest.Get(GetProperty("QBName")) > 0) {
unlock();
}
}

function unlock() {
SetData("done", true);
local code = GetProperty("KeypadCode");
if (code > 99999) {
SetProperty("KeypadCode", code - 100000);
}
}
}

673f262165b54sarge945

Re: Medsi Closet Anti-Cheese minimod
673f262165ba2
Oh dear...I already wired up a bunch of stuff. Your approach is probably better because it doesn't create a bunch of QB Traps, but oh well.

EDIT: In the next version (next post) I got rid of the vanilla traps entirely.

Let me know what you think of this implementation. If it's not doing anything horrendous, then I need to seriously test it (only tested it really by playing around in the editor), then release it. I have probably screwed up at least one of the quest note links, and I haven't thoroughly tested enough to make sure I got everything right.

Features so far:
- All keypads in the game don't work until you have the associated quest note for it. The 3 "no code" keypads require hacking.
- The MedSci2 armoury is now hackable with Hack 4 (this is very easy to disable if not desired - I mostly did it for fun and I doubt it will make it to the final version)
- The game now tells you with a message what the code is when frobbing a keypad, if you've already found it. Many modern games like Prey do this and it's just a small QoL thing so you don't have to go digging through your notes.

EDIT: OH WOW, I completely forgot the code for the Transmitter. It doesn't come up as a keypad in the editor so I forgot all about it
« Last Edit: 12. November 2022, 11:59:47 by Moderator »

673f262165c84sarge945

Re: Medsi Closet Anti-Cheese minimod
673f262165cd1
Okay so I tried getting the transmitter working.

Apparently I can't set up traps the same way, they don't seem to actually respond? I don't know what's going on, I am probably making a silly mistake.

Also there has to be a better way to do this than using 4 traps, so I will look at your scripted method too. The only thing I am having trouble with is figuring out how to actually pass the QB name to the script.
« Last Edit: 12. November 2022, 12:00:01 by Moderator »

673f262165d9asarge945

Re: Medsi Closet Anti-Cheese minimod
673f262165dee
Sorry for TRIPLE post, but I think I finally figured it out. I would have edited the previous posts, but I am also kind of using this thread as version control, as well as a bit of a journal for my progress.

This is the neatest version I can made, and it finally works with the rec1 transmitter code.
« Last Edit: 12. November 2022, 12:00:14 by Moderator »
Acknowledged by: RoSoDude

673f262165f34sarge945

Re: Medsi Closet Anti-Cheese minimod
673f262165f82
Okay, I have now properly tested this and it works for every single keypad in the entire game!!!

I originally had an issue where it was not working for the Transmitter on Deck 5, was only working in-editor, but that is now resolved too.

I have also removed the dml edits that made the medsci2 armoury hackable. I may re-release it as a separate minimod.

This should now be ready to be moved to the Mods subforum, assuming I haven't done anything particularly stupid with the code. @voodoo47 or @ZylonBane, I was hoping one of you could look over it to make sure everything is okay.

Also, does SCP modify the quest notes (or add any additional ones)? If so, then this mod requires SCP.

« Last Edit: 12. November 2022, 12:00:30 by Moderator »

673f262166028voodoo47

Re: Medsi Closet Anti-Cheese minimod
673f262166076
tool/GOG/steam should be ok, but CD vanilla patched manually probably not. but then again, whoever is patching his CD install manually deserves whatever comes his way.

673f26216614bsarge945

Re: Medsi Closet Anti-Cheese minimod
673f2621661a5
Interesting, I thought the new notes were part of SCP, not ss2tool

I still remember playing Vanilla back in the day and having to write down the art terminal notes on a piece of paper.

Would a CD install even have NVScript or Squirrel/DML support? Seems like this mod wouldn't even load.

673f26216624dvoodoo47

Re: Medsi Closet Anti-Cheese minimod
673f2621662a2
depending on how skilled the person doing the manual install is. but again, no need to be concerned with that.

673f26216633csarge945

Re: Medsi Closet Anti-Cheese minimod
673f262166390
Well, this seems to work alright.

If there are no objections, I was hoping to get this moved to the Mods subforum.

673f2621664a2GuyFawkesGaming

Re: No Keypad Cheese - No more metagaming passcodes
673f2621664f8
Is it possible to disable the inability to type in the code without finding in game and just keep the messages that tell you the code when you're about to put it in?

673f26216661fsarge945

Re: No Keypad Cheese - No more metagaming passcodes
673f262166675
Yeah probably, would just require changing the script.

But why?

I guess if you're okay with editing it yourself, you could just go into sq_scripts/sargeRandomKeypad.nut and change line 31 from

Code: [Select]
SetProperty("KeypadCode", code + 100000);
to
Code: [Select]
//SetProperty("KeypadCode", code + 100000);

I haven't tested it, though.

(This still requires you to "know" the code before it tells you what it is, can't have it be a blatant cheat, can we?)

673f262166746sarge945

Re: SS2 No Keypad Cheese - No more metagaming passcodes
673f262166793
Anyone who downloaded 1.0 please download and use 1.1 instead. I made a very stupid mistake and as a result you could get into the medsci2 sub armoury immediately after finding the log next to it.

The fix won't be applied if you have already entered medsci2 in a given playthrough.

673f262166821voodoo47

Re: SS2 No Keypad Cheese - No more metagaming passcodes
673f262166871
ok to kill all the downloads but 1.1 in the first post?

673f262166a6esarge945

Re: SS2 No Keypad Cheese - No more metagaming passcodes
673f262166ac2
voodoo47
Yes, the only reason I left it there is to preserve download count. As long as that gets transferred across, I don't mind killing the old version.
« Last Edit: 12. November 2022, 11:44:37 by sarge945 »
Acknowledged by: voodoo47
Re: SS2 No Keypad Cheese - No more metagaming passcodes
673f262166c86
The PS2 version of Deus Ex solves the same problem (that a player with fore-knowledge of the keypad codes can use them before they strictly should) by removing the ability of the player to manually enter the keypad codes. Instead, when you first activate the keypad, then if your in-game character has earned the password/code, then the password or code is automatically entered, otherwise you just get the old incorrect password type message.

It's a good, simple way to bypass the problem. Unless you want to exploit the game, in which case you're out of luck  :(

Your name:
This box must be left blank:

Name the company that developed System Shock 2:
5 Guests are here.
Did IQs just drop sharply while I was away?
Contact SMF 2.0.19 | SMF © 2016, Simple Machines | Terms and Policies
FEEP
673f262167b6e