673ef73b62cbb

673ef73b63a56
1 Guest is here.
 

Topic: SS2 No Keypad Cheese Read 15489 times  

673ef73b65a73sarge945

673ef73b65ae1
°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 »

673ef73b65cb2ZylonBane

Re: Medsi Closet Anti-Cheese minimod
673ef73b65d0b
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.

673ef73b672c6ThiefsieFool

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

673ef73b67a70sarge945

Re: Medsi Closet Anti-Cheese minimod
673ef73b67add
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 »

673ef73b67c5bvoodoo47

Re: Medsi Closet Anti-Cheese minimod
673ef73b67caf
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.

673ef73b67debsarge945

Re: Medsi Closet Anti-Cheese minimod
673ef73b67e3e
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

673ef73b67f83ZylonBane

Re: Medsi Closet Anti-Cheese minimod
673ef73b67fe0
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.

673ef73b6829dsarge945

Re: Medsi Closet Anti-Cheese minimod
673ef73b68303
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 »

673ef73b684b3sarge945

Re: Medsi Closet Anti-Cheese minimod
673ef73b6850c
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 »

673ef73b6904fZylonBane

Re: Medsi Closet Anti-Cheese minimod
673ef73b690ba
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);
}
}
}

673ef73b6925dsarge945

Re: Medsi Closet Anti-Cheese minimod
673ef73b692fe
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 »

673ef73b6943bsarge945

Re: Medsi Closet Anti-Cheese minimod
673ef73b694ae
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 »

673ef73b69584sarge945

Re: Medsi Closet Anti-Cheese minimod
673ef73b695e0
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

673ef73b69732sarge945

Re: Medsi Closet Anti-Cheese minimod
673ef73b69785
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 »

673ef73b6985avoodoo47

Re: Medsi Closet Anti-Cheese minimod
673ef73b698ac
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.

673ef73b699a9sarge945

Re: Medsi Closet Anti-Cheese minimod
673ef73b69a1a
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.

673ef73b69abbvoodoo47

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

673ef73b69bb8sarge945

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

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

673ef73b69d5aGuyFawkesGaming

Re: No Keypad Cheese - No more metagaming passcodes
673ef73b69db7
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?

673ef73b69ee3sarge945

Re: No Keypad Cheese - No more metagaming passcodes
673ef73b69f38
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?)

673ef73b6a004sarge945

Re: SS2 No Keypad Cheese - No more metagaming passcodes
673ef73b6a051
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.

673ef73b6a0dcvoodoo47

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

673ef73b6a3b6sarge945

Re: SS2 No Keypad Cheese - No more metagaming passcodes
673ef73b6a40b
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
673ef73b6a638
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:

Replicator restrictions are in place for the good of whom?:
1 Guest is here.
What should we do, Santa? C'mon, rack your fat brain!
Contact SMF 2.0.19 | SMF © 2016, Simple Machines | Terms and Policies
FEEP
673ef73b6dd83