Max Payne

Max Payne

JP_Russell Sep 17, 2017 @ 5:56pm
Are there any mods that remove the adaptive difficulty?
Last time I tried this game, I ended up giving up on it because I found enemies mysteriously becoming more and more bullet spongy and their damage kept increasing to the point that I eventually couldn't progress without dying. When I looked into it, I found out about the game's adaptive difficulty that ramps up if you're performing well and pulls back if you're underperforming.

This was no fun for me as it meant I would have to try to deliberately take damage and play poorly without reloading my save to keep enemies from turning into nigh-invulnerable supersoldiers (and on the flipside, I don't want to play a game where it makes things easier when I mess up instead of me having to just do better).

It's a bummer because I was enjoying the game otherwise up to that point, and I still fancy revisiting the game someday. But I probably won't be able to enjoy myself if I can't mod out the adaptive difficulty, so I'm curious if anyone knows if there are any such mods.
Last edited by JP_Russell; Sep 17, 2017 @ 5:56pm
< >
Showing 1-15 of 43 comments
Shellshock Oct 9, 2017 @ 11:57am 
I would love this. There is nothing challenging or hard about enemies surviving two shotgun blasts from point blank range.
captain pouches Oct 10, 2017 @ 3:21pm 
That would be amazing. If you have visual studio, you should be able to edit it yourself. I believe it's just a simply math function they have. For every death -2 to difficulty score, for every kill +0.25 or something like that.
JP_Russell Oct 10, 2017 @ 5:56pm 
Originally posted by weaponized autism:
That would be amazing. If you have visual studio, you should be able to edit it yourself. I believe it's just a simply math function they have. For every death -2 to difficulty score, for every kill +0.25 or something like that.

Hm, maybe I'll install the game sometime and look into that, then. What sort of file is it in that needs an IDE to change it?
darkje Oct 11, 2017 @ 7:48am 
It's txt format (.h and .txt) , they are inside 'x_data.ras' I think, you can unpack .ras with ras-maker.exe (included in soundpatch), from a commandpromtp use "ras-maker -x x_data.ras" ...

repack with ras-maker -a -p filename
ras-maker /? for help

ras-maker is without - but the forum won't allow rasmaker

edit: I already looked at 'data\database\ai_ranges.h' thinking that would be it, I see a lot of variables but nothing indicating adaptive-ai ... maybe I'm wrong... I'm no programmer
Last edited by darkje; Oct 11, 2017 @ 7:53am
Leon kennedy Oct 25, 2017 @ 8:17pm 
I have never notice this game having adaptive difficulty?
JP_Russell Oct 25, 2017 @ 11:28pm 
Originally posted by Mad Max:
I have never notice this game having adaptive difficulty?

It does. The first MP is apparently notorious for it (not many games have used adaptive difficulty, I guess), and you'll find lots of threads about it all over the internet. IIRC, supposedly it's in effect regardless of what difficulty setting you choose, too. I haven't played MP2 yet, but I remember reading that it did away with it.

I suppose the "correct" way to play the game must be to just go until enemies become impossible to outgun and they kill you, saving frequently along the way (or judiciously if you're on the difficulty with limited saves), and letting the game restart you at the last save with hopefully a lower difficulty modifier than when you made the save so you can get further before enemies again have too much HP and damage to get past them. It's pretty silly, as the reason you will have succeeded on the second try after dying was more because the enemies were easier than because of anything you did that time.

I assume you could also just game it by saving and intentionally running into a room and dying to lower the difficulty, or even do that repeatedly with the same save to get the difficulty to bottom out eventually. The former option might even just make more sense than actually trying to win firefights against a group of enemies you know you can't beat with the current difficulty modifier, since any enemy you manage to kill before dying will just mean a higher modifier after it loads your save and fewer enemies that you'll be able to kill thereafter before they become too difficult again.

It also kind of calls into question the actual usefulness of painkillers if all they're doing is letting you brute force your way through more of the adaptation that's still eventually going to kill you and lower the difficulty modifier, anyway. They're not really a health consumable that you might have to use to overcome a set challenge, since you could also just bang your head into every encounter without ever using them and keep dying until the encounter was easy enough to get through it without them. That doesn't sound like a fun way to play the game, but then neither does using painkillers when you know it's just extending your life into increasingly spongier enemies that will eventually use up all your painkillers or outright one-shot you from full health.

Once you know the adaptive difficulty is there, you know the painkillers aren't actually a solution to anything, and you know how well you play doesn't actually have any bearing on whether you can progress.
Last edited by JP_Russell; Oct 25, 2017 @ 11:29pm
darkje Oct 26, 2017 @ 1:47am 
Originally posted by JP_Russell:
Originally posted by weaponized autism:
That would be amazing. If you have visual studio, you should be able to edit it yourself. I believe it's just a simply math function they have. For every death -2 to difficulty score, for every kill +0.25 or something like that.

Hm, maybe I'll install the game sometime and look into that, then. What sort of file is it in that needs an IDE to change it?

I think I found it now, in x_data.ras there is a file called difficulty.txt, it has some info about the different difficulty levels and minimum/default/maximum difficulty within each level, plus a number for how many interpolation points there are between min-def and def-max...

I can post the code here if you are interested to see it.

edit: w.t.h. I'll just post it:

#include <database\stringdefines.h> [difficulty] // FUGITIVE { [normal] { [properties] SaveGameLimit = 0; // n saves/level (0 equals unlimited) IntermediateLevels = 2; // n levels are interpolated between minimum-default and default-maximum HealthGainedFromPainkiller = 20%; // percents of maximum health DeathFrequency = 180; // in seconds FrequentDeaths = 5; // number of deaths in last "DeathFrequency" seconds // messages to send if player has died "FrequentDeaths" times in last "DeathFrequency" seconds [FrequentDeathMessages] { // [Message] String = "MaxPayne_HudMode->mphm_printdirect( \"debug: you're dying frequently...\" );"; // [Message] String = "player->c_addhealth( 15 );"; } [EndOfGameMessages] { [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_NORMAL_COMPLETED1 );"; [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_NORMAL_COMPLETED2 );"; [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_NORMAL_COMPLETED3 );"; } [minimum] EnemyHealthMultiplier = 0.25; AmmoFoundMultiplier = 2.0; PlayerHealthMultiplier = 2.0; AutoAimCapsuleRadiusMultiplier = 8.0; // clamped to be at least 1.0 AutoAimCapsuleHeightMultiplier = 3.0; // clamped to be at least 1.0 HealthRegenerateMultiplier = 6%; // percents / second HealthGainedImmediately = 10%; // percents of maximum health to gain immediately before regeneration BulletTimeGainedPerKillMultiplier = 1.3; [default] EnemyHealthMultiplier = 0.8; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 1.0; AutoAimCapsuleRadiusMultiplier = 4.0; // clamped to be at least 1.0 AutoAimCapsuleHeightMultiplier = 2.0; // clamped to be at least 1.0 HealthRegenerateMultiplier = 4%; // percents / second HealthGainedImmediately = 5%; // percents of maximum health to gain immediately before regeneration BulletTimeGainedPerKillMultiplier = 1.0; [maximum] EnemyHealthMultiplier = 1.2; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.4; AutoAimCapsuleRadiusMultiplier = 2.0; // clamped to be at least 1.0 AutoAimCapsuleHeightMultiplier = 1.5; // clamped to be at least 1.0 HealthRegenerateMultiplier = 2%; // percents / second HealthGainedImmediately = 3%; // percents of maximum health to gain immediately before regeneration BulletTimeGainedPerKillMultiplier = 0.7; } [nightmare] // HARD-BOILED { [properties] SaveGameLimit = 0; // n saves/level IntermediateLevels = 2; // n levels are interpolated between minimum-default and default-maximum HealthGainedFromPainkiller = 20%; // percents of maximum health DeathFrequency = 0; // in seconds FrequentDeaths = 0; // number of deaths in last "DeathFrequency" seconds // messages to send if player has died "FrequentDeaths" times in last "DeathFrequency" seconds [FrequentDeathMessages] { } [EndOfGameMessages] { [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_NIGHTMARE_COMPLETED1 );"; [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_NIGHTMARE_COMPLETED2 );"; [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_NIGHTMARE_COMPLETED3 );"; } [minimum] EnemyHealthMultiplier = 1.3; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.4; AutoAimCapsuleRadiusMultiplier = 1.0; AutoAimCapsuleHeightMultiplier = 1.0; HealthRegenerateMultiplier = 1.5%; HealthGainedImmediately = 2%; BulletTimeGainedPerKillMultiplier = 1.0; [default] EnemyHealthMultiplier = 1.3; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.4; AutoAimCapsuleRadiusMultiplier = 1.0; AutoAimCapsuleHeightMultiplier = 1.0; HealthRegenerateMultiplier = 1.5%; HealthGainedImmediately = 2%; BulletTimeGainedPerKillMultiplier = 1.0; [maximum] EnemyHealthMultiplier = 1.3; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.4; AutoAimCapsuleRadiusMultiplier = 1.0; AutoAimCapsuleHeightMultiplier = 1.0; HealthRegenerateMultiplier = 1.5%; HealthGainedImmediately = 2%; BulletTimeGainedPerKillMultiplier = 1.0; } [hell] // DOA { [properties] SaveGameLimit = 7; // n saves/level IntermediateLevels = 2; // n levels are interpolated between minimum-default and default-maximum HealthGainedFromPainkiller = 20%; // percents of maximum health DeathFrequency = 0; // in seconds FrequentDeaths = 0; // number of deaths in last "DeathFrequency" seconds // messages to send if player has died "FrequentDeaths" times in last "DeathFrequency" seconds [FrequentDeathMessages] { } [EndOfGameMessages] { // [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_HELL_COMPLETED1 );"; // [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_HELL_COMPLETED2 );"; // [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_HELL_COMPLETED3 );"; [Message] String = "MaxPayne_gamemode->gm_init( end_combat );"; //GOES INTO END_COMBAT } [minimum] EnemyHealthMultiplier = 1.4; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.3; AutoAimCapsuleRadiusMultiplier = 1.0; AutoAimCapsuleHeightMultiplier = 1.0; HealthRegenerateMultiplier = 1%; HealthGainedImmediately = 2%; BulletTimeGainedPerKillMultiplier = 2.0; [default] EnemyHealthMultiplier = 1.4; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.3; AutoAimCapsuleRadiusMultiplier = 1.0; AutoAimCapsuleHeightMultiplier = 1.0; HealthRegenerateMultiplier = 1%; HealthGainedImmediately = 2%; BulletTimeGainedPerKillMultiplier = 2.0; [maximum] EnemyHealthMultiplier = 1.4; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.3; AutoAimCapsuleRadiusMultiplier = 1.0; AutoAimCapsuleHeightMultiplier = 1.0; HealthRegenerateMultiplier = 1%; HealthGainedImmediately = 2%; BulletTimeGainedPerKillMultiplier = 2.0; } [timedmode] // NYM { [properties] SaveGameLimit = 0; // n saves/level (0 equals unlimited) IntermediateLevels = 2; // n levels are interpolated between minimum-default and default-maximum HealthGainedFromPainkiller = 20%; // percents of maximum health DeathFrequency = 0; // in seconds FrequentDeaths = 0; // number of deaths in last "DeathFrequency" seconds // messages to send if player has died "FrequentDeaths" times in last "DeathFrequency" seconds [FrequentDeathMessages] { } [EndOfGameMessages] { [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_TIMEDMODE_COMPLETED1 );"; [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_TIMEDMODE_COMPLETED2 );"; [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_TIMEDMODE_COMPLETED3 );"; [Message] String = "MaxPayne_Hudmode->mphm_printTipAlways( STRING_TIMEDMODE_COMPLETED4 );"; } [minimum] EnemyHealthMultiplier = 1.0; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.9; AutoAimCapsuleRadiusMultiplier = 2.0; // clamped to be at least 1.0 AutoAimCapsuleHeightMultiplier = 1.5; // clamped to be at least 1.0 HealthRegenerateMultiplier = 2%; // percents / second HealthGainedImmediately = 3%; // percents of maximum health to gain immediately before regeneration BulletTimeGainedPerKillMultiplier = 1.1; [default] EnemyHealthMultiplier = 1.0; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.9; AutoAimCapsuleRadiusMultiplier = 2.0; // clamped to be at least 1.0 AutoAimCapsuleHeightMultiplier = 1.5; // clamped to be at least 1.0 HealthRegenerateMultiplier = 2%; // percents / second HealthGainedImmediately = 3%; // percents of maximum health to gain immediately before regeneration BulletTimeGainedPerKillMultiplier = 1.1; [maximum] EnemyHealthMultiplier = 1.0; AmmoFoundMultiplier = 1.0; PlayerHealthMultiplier = 0.9; AutoAimCapsuleRadiusMultiplier = 2.0; // clamped to be at least 1.0 AutoAimCapsuleHeightMultiplier = 1.5; // clamped to be at least 1.0 HealthRegenerateMultiplier = 2%; // percents / second HealthGainedImmediately = 3%; // percents of maximum health to gain immediately before regeneration BulletTimeGainedPerKillMultiplier = 1.1; } }

edit2: from the looks of it, it's only adaptive in 'fugitive' for 'hardboiled', 'doa' and 'nym' min-def-max are all the same, so then there is not much to interpolate...? As said, I'm no programmer, so it could be something completely different...
Last edited by darkje; Oct 26, 2017 @ 2:04am
JP_Russell Oct 26, 2017 @ 8:28am 
Yeah, looks like it. I guess 1x enemy health must be pretty high, because I remember I played on normal and when the difficulty was at its worst (presumably I must have maxed it out to 1.2x enemy health), I was pumping 2 or 3 shotgun blasts into their head before they went down, which was enough time for a single enemy to almost kill me in the best case scenario. 40% player health would explain the increased damage, too.

Anyway, thanks for finding that. Think I'll go ahead and install the game and see if editing that file lets you mod the difficulty later. It looks like the file is being used to set actual variables, so it should be possible to get rid of the adaptive difficulty and set enemy and player health to a static value that feels about right. An easy way to test should be to set enemy health to 10 or something and see if they just soak up all your bullets in-game.
darkje Oct 26, 2017 @ 8:59am 
it's easy to get to it and even play without repacking the game:

-make sure you have ras-maker and rl.dll in your max payne directory.
-on the max payne directory open a commandprompt.
-type 'ras-maker -x x_data.ras' and it will unpack the data file. you can close the commandprompt after it's done.
-create a directory named 'moved' in your max payne directory and move x_data.ras there. Now the game will use the unpacked data that is in the data directory.
-difficulty.txt is in the top folder of the data directory. you can edit the file with notepad or any other text editor (I like editplus) change values and save it, and you can play with the mod in effect.
-to repack use ras-maker again, with the command 'rasmaker -a -p data x_data.ras

I guess (but not sure) if you only have difficulty.txt in the data directory you could also repack it as a .mpm (max payne mod) and it should prevail over the original one if that mpm is used. This will require some experimentation and searching online ;) to see how it works with the mods.
Last edited by darkje; Oct 26, 2017 @ 9:00am
SARB Oct 26, 2017 @ 5:06pm 
Originally posted by Shellshock:
I would love this. There is nothing challenging or hard about enemies surviving two shotgun blasts from point blank range.


Originally posted by Shellshock:
I would love this. There is nothing challenging or hard about enemies surviving two shotgun blasts from point blank range. [/quoits on the ps4 version of max payne the difficulty stays the same through out the game
Sm0k3f47h3r Oct 27, 2017 @ 9:30am 
just get some skill.....
Cobra Commander Oct 27, 2017 @ 10:29am 
I think Dead on Arrival or Hard-boiled sets all the bots to their highest difficulty.
b2007929 Nov 15, 2017 @ 7:18am 
Thank you for creating this thread, I always wondered why one-hit shotgun kills felt inconsistent.
b2007929 Nov 15, 2017 @ 11:11am 
Originally posted by darkje:
from the looks of it, it's only adaptive in 'fugitive' for 'hardboiled', 'doa' and 'nym' min-def-max are all the same, so then there is not much to interpolate...?
After looking at the values, as far as I can understand only fugitive difficulty uses adaptive difficulty for player and enemy health. New York Minute perhaps gives the most standard experience, excluding timers.

Can you tidy the code and post to guides? "max payne adaptive difficulty" Google search nets mainly forum posts.
Last edited by b2007929; Nov 15, 2017 @ 11:12am
darkje Nov 16, 2017 @ 12:55am 
Yea I would if I was sure this is all there is to it, but after playing with changed values I'm not so sure. I still get that inconsistency even if I lock the values, so that is a bit weird...
< >
Showing 1-15 of 43 comments
Per page: 1530 50