• This fixes the Kinetic/Thermal/Charged set.
    
    Previously, if you equipped all three mindstars, then removed Kinetic Focus, the
    other two would lose ALL their set bonuses - including the Thermal/Charged set
    bonus, even though both are still equipped. If you re-equipped the Kinetic
    Focus, you would get the Kinetic/Thermal and Kinetic/Charged set bonuses, but
    not the Thermal/Charged one.
    In the general case, removing one item from any set would remove all set bonuses
    from all items in that set. This worked fine for non-overlapping sets, but does
    not work for overlapping ones: if X+Y, Y+Z, and X+Z are all sets, then removing
    X would take away the set bonuses for Y+Z, which it obviously should not.
    
    This commit changes set behaviour so that only set bonuses from the sets that
    were *actually broken* are removed. If you remove X, the bonuses for X+Y and X+Z
    are still removed, but the bonus for Y+Z remains. This fixes the
    Kinetic/Thermal/Charged Focus set.
    
    Object:specialSetAdd() now takes the set_id as a third parameter. This is
    only needed for overlapping sets and can safely be omitted for sets that do not
    overlap. Therefore, existing addons that use specialSetAdd() will not break.
    
    There are still other problems with mindstar ego sets that need to be addressed
    separately.
    
    Additionally, if you had e.g. two Mighty Girdles, one worn and one in your pack, it was
    possible that Actor:findInAllInventories() would find the one in your pack
    first, meaning that the set would not be completed. This is mainly relevant for
    mitotic mindstars, but could happen with any set in the game.
    
    The set code now only looks in worn inventories if no inven_id is specified,
    preventing this bug from happening. This also allows sets specifying non-worn
    inven_ids to work.
    Andrew Minton authored
     
    Browse Files »


  • Nerf life leech stacking
    
    This changes Actor.life_leech_chance to only use highest to avoid things like Bloodcaller and Necro life leech interacting so strongly.
    
    For the record, I still think we should get rid of life_leech_chance instead, because this still leaves nonsensical stacking behavior :p
    
    See merge request !470
    DarkGod authored
     
    Browse Files »
  • Updated Game Difficulty Scaling
    
    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
    
    
    See merge request !472
    DarkGod authored
     
    Browse Files »



  • …gher 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
    Hachem_Muche authored
     
    Browse Files »
  • Hachem_Muche authored
     
    Browse Files »


  • Hachem_Muche authored
     
    Browse Files »
  • Merge branch 'Hachem_Muche/t-engine4-AIUpdate'
    
    Conflicts:
    	game/modules/tome/data/talents/gifts/mindstar-mastery.lua
    	game/modules/tome/data/talents/misc/inscriptions.lua
    	game/modules/tome/data/timed_effects/physical.lua
    DarkGod authored
     
    Browse Files »
  • Fix no_chat_broadcast achievements not being checked everywhere
    
    EXCITING
    
    See merge request !466
    DarkGod authored
     
    Browse Files »
  • Prodigy popup
    
    People miss this because the log gets so spammy.
    
    See merge request !465
    DarkGod authored
     
    Browse Files »
  • Saves Update
    
    Actor:on_set_temporary_effect updated to output a combat log message when an effect is saved down to 0 duration.
    
    See merge request !464
    DarkGod authored
     
    Browse Files »
  • Fix AMS sometimes infinite looping
    
    
    
    See merge request !462
    DarkGod authored
     
    Browse Files »
  • Weapon damage
    
    This changes the default weapon masteries to have no physical power at all, moderately increases the scaling of the % damage part, and adds a flat 20 bonus physical power to all weapon damage calculations.  This is done on top of the former weapon scaling change, as that is a bugfix we should keep it and do any other number changes on top of it not instead of it.
    
    No matter how you change things to account for the loss of the physical power you wind up impacting different weapons and levels of scaling very differently.  My goal is to keep the low end scaling relatively similar as priority.  The reason for the flat +30 physical power is that since physical power is tiered the loss of the flat +65 physical power hits non-strength builds harder.  The reason for the weapon damage % increase is high end NPC scaling is almost purely based off artificially inflating talent levels, and without the physical power component highly scaled NPCs wind up losing hundreds of base damage.  Final damage is then reduced by 10%.  
    
    The current weapon numbers are not tightly balanced so we have a lot of leeway to play with this, but were still changing things a *lot*, so this should be carefully considered and tested.  This also adds a third damage entry to the character sheet so you can see the damage before any changes at all and the damage with just Hachem_Muche's rescaling change.  These are now shown even outside of debug mode so future beta testers can see them and point things out.
    
    Notable consequences/things to keep an eye on:
    - Low end weapon damage is increased quite a bit.  Compared to how frontloaded non-weapon stuff is I think this is ok, but gains of ~5 in the early levels are common.
    
    - The high end of player weapon damage is nerfed slightly to moderately (up to ~10-16) in most cases.  This is fine, especially since at the high end the non-strength builds start filling in that stat more.
    
    - Physical power used for things other than weapon damage is dramatically nerfed.  This isn't common, but were going to want to adjust these case by case.  Fortunately this tends to correspond to strength first builds which are not hit as hard by the changes.
    
    - Very high end (late game Insane/Madnessish) NPC scaling is nerfed hard.  The reversion of the hacky high armor randart values is not enough to offset this.  It still outscales everything else, of course.  High end NPC scaling is lacking in general so this is best looked at in a separate change.
    
    - Non-strength weapons get hit harder by this change generally
    
    See merge request !461
    DarkGod authored
     
    Browse Files »
  • Inscription revamp
    
    I don't know if this was the intended design or not, but Inscriptions are currently a huge part of character power.  The description I like to use is that each inscription slot is closer to a prodigy than it is a talent.  In particular they often make up the core defenses of a build, especially in the area of expanding HP pool (Heroism, Shield) and debuff removal.
    
    These changes attempt to modernize the inscription system.  Specific goals include:
    
    - Adjust the overall power level of inscriptions to be closer to infusions, most notably runes
    
    - Increase the overall ability of inscriptions to deal with mass debuff spam, especially physical, to keep up with randbosses and weapon "minor debuff" procs
    
    - Keep the inscription pool fairly specialized with each having a primary niche it fills even if it has other effects tacked on
    
    - Encourage more decision making in what inscriptions to use by having drop quality matter more.  Ie, I always prefer Healing to Shield/Regen, but a really big Regen can change my mind.  More of this.
    
    - Stop gimping NPCs by giving them things like Sun Infusion that just make them mess with each other
    
    Many inscription types have been removed, merged, or redesigned off the same base concept with a new name.  They are often the ones that are "minor utility" effects.  Inscription slots are far too powerful to waste on minor utility, they need to stay in the realm of strong combat options to be meaningful choices.  Charms are a better area to put those effects.  The removed inscriptions are Sun, Telepathy, Frozen Spear, Heat Beam, Vision, Phase Door, Controlled Phase Door, Lightning.
    
    I'm adding new inscriptions as I finish them, many of which are sketchy concepts that probably won't be worth keeping.  Listed roughly in order of how much merit I think they have:
    
    Rune of Shatter Afflictions:  Retheme of the previous Taint of Consume Affliction, still the counter to multitype debuff spam.  Currently cleanses 1 debuff of each type and generates a small shield for each one removed.  Concept still needs some work, but I do want a 3 type cleanse of some form in rune.
    
    Mirror Image:  Creates copies that inherit snapshotted life, resist, defense, armor, and armor hardiness.  Each image is spawned adjacent to a different enemy and taunts on summon and each turn for the duration.
    
    Ethereal Rune:  This is just Invisibility updated to have resist all and a small amount of movement speed.  Offensive damage reduction is kept.  Wall walking was interesting but as roughly 75,000 people pointed out is a balance nightmare, and it can't be given to NPCs because it would be very annoying.
    
    Blink Rune:  Phase Door and Controlled Phase Door merged and their base level dropped to be available early.  Controlled Phase Door currently is acting like its something special with its high MT requirement when its actually just worse than Movement.  Unlike CPD this can't go through walls but it does have shorter CD than the other mobility inscriptions.  Out of phase buff from normal Phase Door is kept.
    
    Taint of Purging:  When activated and each turn cleanses 1 physical debuff and increases its duration by 1 each time this occurs.  This is the specialized anti-physical debuff spam solution, as long as it keeps hitting a phys debuff its cooldown won't decrease allowing you to keep poison/bleed/slows/etcetc in check.  The downside is that the cooldown on this is very high so it won't be up fast if you aren't consistently getting debuffed, it isn't instant, and it has no tacked on bonus effect like Wild's resist all or Healing's heal.
    
    This will likely replace Telepathy as the Alchemist Quest reward because it doesn't play very nice with stat scaling (and so doesn't fit well on drop tables) and because its mostly aimed at late game problems.
    
    Rune of Stormshield:  Updated Rune of Lightning.  This rune has a fixed 3 turn duration and blocks all instances of damage over its rolled threshold up to its maximum number of blocks.  The threshold value can vary quite a bit.  The idea here is that this is an alternative to Shield for straight damage mitigation but more situational.  It can scale incredibly well against huge hits, but fail to do anything at all if you take too many multihits total or just take hits that are under its threshold.  Maybe too messy for an inscription design, I dunno.
    
    Rune of Dissipation:  Removes all magical effects/sustains on the target or all magical debuffs on you, replacing Gloves of Dispersal as the guaranteed magic counter which is currently considered a necessary tool to have.  Having to use an Inscription slot instead of a simple ego is a big cost and the effect niche, so the numbers are quite aggressive.  This is a quest reward for finishing Urkis via Angolwen.
    
    Prismatic Shield Rune:  Picks 3-6 random damage types from all possible damage types then resolves a number of wards for each one.  Activating the rune gives you the entire set of wards at once.  This is dropped as a basic inscription design and will probably be a fixedart drop.
    
    (Existing inscription changes/considerations)
    
    Biting Gale/Acid Wave Runes:  The cleanses on these are a hack from when runes desperately needed help.  It makes the design bloated and takes away from what should be the focus:  Dealing some damage and defending yourself via debuffs.  The cleanses have been removed, save checks on the debuffs removed, and numbers revamped mostly in favorable ways.  Notably, Biting Gale now has a duration of 5.
    
    Wild:  Now cleanses 2 types at once, but only at fairly high item level (earliest shops can't have it at all).  To compensate for this, the duration of the resist all debuff is now 2-4.  Old values ranged from 3-8 and were tied to item level.  Resist all value has been refactored to weight stats more heavily and random value less.
    
    It isn't talked about much, but the damage reduction on high level Wild infusions is enormous, in the 30-40% range.  With the duration scaling up to 5-6 pretty easily Wild starts to become a damage reduction tool more and more as the game progresses, without much tactical tension in when to use it like that.  We have other inscription types for that.  These changes reinforce Wild's role as a cleanse mechanic even late game while keeping the high resist all values so you can still use it as a damage reduction tool but not with insane uptime.
    
    Primal Infusion:  Redesigned.  This still gives affinity all but instead of cleansing on activation it reduces a random debuff duration by 1-3 each turn based on willpower.  
    
    Teleport:  This is hard to balance.  Its generally accepted that the randomness of this makes it always suboptimal, but the effect is pretty powerful.  Simply leaving is suboptimal is one option.  Other possibilities are making the cooldown generous, or allowing you to reactivate it within a turn to return to the position you teleported from.  Would love to hear if anyone has other ideas.
    
    Movement:  No longer keeps the immunities when the movement speed is broken.  If post nerf stun is still a problem it should be fixed a better way than leaving this as a crutch to immune it.
    
    Heroism:  For experienced players a huge portion of effective HP comes from this, which is really silly.  Additionally since many sustains don't recalculate their stat values very often this is abused to "snapshot" stats.  For now, I'm just removing the bonus stats to reduce the overall power.  Once the sources of healmod are toned down in other changes the downside this has (no sustain, just anti-burst) should be more significant.
    
    See merge request !425
    DarkGod authored
     
    Browse Files »







  • Spacetime Tuning updated: NPCs actively use the talent to control their paradox. (Talents may set .no_breakSpacetimeTuning to avoid breaking). Fixed a scaling error in Spacetime Stability
    
    Object:restrictAIUseObject checks the flag ai_state._advanced_ai
    
    Fixed a bug that could cause a crash when NPCs calculate a summonPath
    Hachem_Muche authored
     
    Browse Files »


  • Added a new callback "callbackOnWait" to trigger various effects when an Actor takes no action in a turn.  Added to Actor:waitTurn in place of "callbackOnRest."   New function Player:restCheck (an overload of engine/interface/PlayerRest:restCheck) triggers "callbackOnWait" when successfully resting.
    
    The recovery effects of Spacetime Tuning and Throwing Knives use the "callbackOnWait" callback.
    
    NPCs that know Spacetime Tuning will automatically set an appropriate preferred paradox value periodically (at 100 below the anomaly threshold).
    
    Added the game.turn to the output of a number of AI debugging statements.
    
    Fixed a bug where Chants and Hymns could be learned without also gaining the appropriate resource pool.
    Hachem_Muche authored
     
    Browse Files »