Skip to content

Updated Game Difficulty Scaling

Hachem_Muche requested to merge Hachem_Muche/t-engine4:DifficultyScaling into master

The AI update makes NPCs tougher to kill in general, requiring adjustments to higher game difficulties.

Adjusting difficulty parameters for NPC talent levels and life is simplified in one place.

Game difficulty adjustments to zone level ranges are phased in over the first 10 (character) levels of play to make it easier to get various builds going. (Expect full difficulty effects after clearing the first 3-4 zones.)

Players start at level 1 for all difficulties, with reduced bonus money (50/100/150) for higher difficulties.

NIGHTMARE gets a small nerf to talent levels and a significant boost to life levels.

INSANE difficulty is moved closer to the midpoint between NIGHTMARE and MADNESS, evening out progression.

The compounding effect from using getRankLifeAdjust for MADNESS is replaced with a higher max_life multiplier to eliminate excessively high life scaling towards end game.

The number of bonus classes for bosses is unchanged.

Summary of NPC talent/life and zone changes:

difficulty		talent levels		max life			zone level
NORMAL			x1.0 (unch)		x1.0 (unch)			x1.0 + 0
NIGHTMARE:		x1.3 (vs 1.33)		x1.5 (vs 1.0)			x1.5 + 0
INSANE:			x1.8 (vs 1.5)		x2.0 (vs 1.2)			x1.5 + 1
MADNESS:		x2.7 (unch)		x3.0 (no level^2 scaling)	x2.5 + 2

Sample max_life levels (@ NPC level): NORMAL NIGHTMARE INSANE MADNESS

forest troll (Trollmire 1)		~100@1		~120@1			~165@1		~300@2
forest troll (Dreadfell 1)		~300@15		~475@15			~680@16		~1100@17
forest troll (High Peak 1)		~1400@57	~2000@57		~3000@60	~5000@64
Argoniel (High Peak 1) 			~16.5K@75	~25.0K@75		~33.7K@75	~50.5K@75

Functions:

NPC:addedToLevel(level, x, y):

Rewritten to make adjusting the effects of higher game difficulties simpler; each difficulty specifies a talent multiplier and a life_multiplier that can be easily adjusted within the code.

Game:applyDifficulty(zone, level_range):

New function that adjusts zone level ranges and base level while preventing compounded difficulty effects (unless level_range is specified)

level_range can be a number (minimum level) or a table (for zone.level_range)

The effects of higher game difficulties are the same as before, except that they are phased in for the early game -- reaching full effect when the player reaches level 10.

Game:loaded(), GameState:zoneCheckBackupGuardian(), and Atamathon's activation are updated to use this new function

Merge request reports