WIP: Nemesis cheats #2729

Closed
AlexisinGit wants to merge 11 commits from AlexisinGit:NemesisCheats into main
Contributor

Cheats for nemesis related content:

  • Faster Rage build up
  • Faster Hint progress
  • Weapon Fusion Enhanced
  • Extra weapon on vanquish
  • Any passcode guess is correct

(haven't done testing yet)

Cheats for nemesis related content: - Faster Rage build up - Faster Hint progress - Weapon Fusion Enhanced - Extra weapon on vanquish - Any passcode guess is correct (haven't done testing yet)
AlexisinGit added 7 commits 2025-08-30 10:03:18 -07:00
Nemesis Henchmen Kills Multiplier

Nemesis Hint Progress Multiplier

Nemesis Weapon Fusion Multiplier

Nemesis Gain Extra Rank

Nemesis Always Correct

code fix

webUI updates

Live Heart Multiplier
fix up
Some checks failed
Build / build (pull_request) Failing after 56s
859278df37
Sainan reviewed 2025-08-30 19:27:37 -07:00
@ -39,6 +39,7 @@ import { Types } from "mongoose";
export const nemesisController: RequestHandler = async (req, res) => {
const account = await getAccountForRequest(req);
const accountCheats = await getAccountCheats(account._id.toString());
Owner

Don't do this. The inventory is available, you can use far smarter projections.

Don't do this. The `inventory` is available, you can use far smarter projections.
Sainan reviewed 2025-08-30 19:28:48 -07:00
@ -112,3 +119,3 @@
{
symbol: guess[0],
result: result1
result: accountCheats.nemesisAlwaysCorrect ? GUESS_CORRECT : result1
Owner

This is clearly too late to do this, just change guess directly.

This is clearly too late to do this, just change `guess` directly.
Sainan reviewed 2025-08-30 19:29:07 -07:00
@ -151,2 +163,3 @@
}
inventory.Nemesis!.HenchmenKilled += antivirusGain;
inventory.Nemesis!.HenchmenKilled +=
antivirusGain * (accountCheats.nemesisHenchmenKillsMultiplierInfestation ?? 1);
Owner

Horrible name for this cheat.

Horrible name for this cheat.
Sainan reviewed 2025-08-30 19:29:52 -07:00
@ -163,3 +176,2 @@
inventory.Nemesis!.Weakened = true;
const upgrade = getKnifeUpgrade(inventory, dataknifeUpgrades, antivirusMods[passcode]);
consumeModCharge(response, inventory, upgrade, dataknifeUpgrades);
if (!accountCheats.nemesisAlwaysCorrect) {
Owner

Why would this cheat not consume mod charges? That's not at all what the name implies.

Why would this cheat not consume mod charges? That's not at all what the name implies.
Author
Contributor

If a player carries no mod at all, the function would fail at the final stabbing, because there will be no mod charges to be consumed. And that results in not weakening the nemesis. Still the game will play a successful stabbing animation. This could be quite confusing to the user. I think whoever enables this cheat wouldn't mind a little "side-effect"?

Or to make consume mod charges function handle empty mod array correctly. And seperate the cheats.

If a player carries no mod at all, the function would fail at the final stabbing, because there will be no mod charges to be consumed. And that results in not weakening the nemesis. Still the game will play a successful stabbing animation. This could be quite confusing to the user. I think whoever enables this cheat wouldn't mind a little "side-effect"? Or to make consume mod charges function handle empty mod array correctly. And seperate the cheats.
Owner

You saying this now makes me think this nemesisAlwaysCorrect cheat is very poorly thought out. I think it should at least require a mod to be equipped, and then it would have the charge consumed regardless of type.

Then maybe a separate cheat to avoid charges being consumed.

You saying this now makes me think this `nemesisAlwaysCorrect` cheat is very poorly thought out. I think it should at least require a mod to be equipped, and then it would have the charge consumed regardless of type. Then maybe a separate cheat to avoid charges being consumed.
Sainan reviewed 2025-08-30 19:30:08 -07:00
@ -226,15 +246,22 @@ export const nemesisController: RequestHandler = async (req, res) => {
const dataknifeUpgrades = inventory.DataKnives[0].Configs[dataknifeConfigIndex].Upgrades!;
for (let i = 3; i != 6; ++i) {
//logger.debug(`subtracting a charge from ${dataknifeUpgrades[i]}`);
if (accountCheats.nemesisAlwaysCorrect){
Owner

Ditto

Ditto
Sainan reviewed 2025-08-30 19:31:20 -07:00
@ -232,3 +255,4 @@
}
} else {
// Guess was incorrect, increase rank
const nemesisExtraRank = Math.floor(Math.random() * ((inventory.nemesisGainExtraRank ?? 0) + 1));
Owner

So confused by this. Who would want a disadvantage? Why is it randomised?

So confused by this. Who would want a disadvantage? Why is it randomised?
Author
Contributor

Just to simulate a speed up stabbing process, somewhere between vanilla and always correct.

Honestly just my personal interest. I can remove this...

Just to simulate a speed up stabbing process, somewhere between vanilla and always correct. Honestly just my personal interest. I can remove this...
Sainan reviewed 2025-08-30 19:31:41 -07:00
@ -15,3 +15,3 @@
interface ISetAccountCheatRequest {
key: keyof IAccountCheats;
value: boolean;
value: undefined;
Owner

Absolutely not. boolean | number.

Absolutely not. `boolean | number`.
Sainan reviewed 2025-08-30 19:33:07 -07:00
@ -891,10 +931,11 @@ export const addMissionInventoryUpdates = async (
att.push(rotBReward);
if (value.killed) {
const tokenMultiplier = Math.max(1, inventory.nemesisExtraWeaponOnKill ?? 1);
Owner

Very confusing interaction of this cheat to be dual-purposed as a token multiplier.

Very confusing interaction of this cheat to be dual-purposed as a token multiplier.
Author
Contributor

for G / C 1 stab = 1 weapon.

for I 1 stab = at least 10 token = 1 weapon.

I think to combine is better and more intuitive. People would just want more token if they have this cheat enabled anyway.

for G / C 1 stab = 1 weapon. for I 1 stab = at least 10 token = 1 weapon. I think to combine is better and more intuitive. People would just want more token if they have this cheat enabled anyway.
AlexisinGit added 4 commits 2025-08-30 20:27:53 -07:00
Owner

Overall, I think this PR is a shitshow. Try 1 PR per cheat, not such a huge endeavour when you're clearly not familiar with the codebase yet.

Overall, I think this PR is a shitshow. Try 1 PR per cheat, not such a huge endeavour when you're clearly not familiar with the codebase yet.
Author
Contributor

Sure. Thanks for the review. I might just close this for now.

Sure. Thanks for the review. I might just close this for now.
AlexisinGit closed this pull request 2025-08-30 21:14:58 -07:00
Some checks failed
Build / build (pull_request) Failing after 23s

Pull request closed

Sign in to join this conversation.
No description provided.