662eeaff029fd

662eeaff030b7
1 Guest is here.
 

662eeaff03c69sarge945

662eeaff03cdc
°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.

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.

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.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: 25. April 2024, 09:08:18 by sarge945 »

662eeaff03ee9ZylonBane

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

662eeaff042a1ThiefsieFool

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

662eeaff04bedsarge945

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

662eeaff04e6bvoodoo47

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

662eeaff0503bsarge945

Re: Medsi Closet Anti-Cheese minimod
662eeaff05097
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

662eeaff05230ZylonBane

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

662eeaff0571fsarge945

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

662eeaff0634csarge945

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

662eeaff0657dZylonBane

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

662eeaff067acsarge945

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

662eeaff0692bsarge945

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

662eeaff06a69sarge945

Re: Medsi Closet Anti-Cheese minimod
662eeaff06aba
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

662eeaff06c45sarge945

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

662eeaff06d6fvoodoo47

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

662eeaff06eafsarge945

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

662eeaff0704fvoodoo47

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

662eeaff0716fsarge945

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

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

662eeaff07323GuyFawkesGaming

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

662eeaff074d5sarge945

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

662eeaff07615sarge945

662eeaff0766f
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.

662eeaff07711voodoo47

662eeaff07760
ok to kill all the downloads but 1.1 in the first post?

662eeaff07ba0sarge945

662eeaff07c0c
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
662eeaff07e52
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:

Who's your favourite artificial intelligence:
1 Guest is here.
The 1,000-year-old citadel that rises out of the Atlantic Ocean
Contact SMF 2.0.19 | SMF © 2016, Simple Machines | Terms and Policies
FEEP
662eeaff09419