Page 1 of 1

TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Wed Oct 03, 2012 7:20 pm
by Hachem_Muche
Starting with Beta 41, I believe I have succeeded in extending balanced game play well past level 50. I have progressively made changes to the game code (outlined below) to keep game play challenging, with a steady increase in difficulty with depth in the Infinite Dungeon. I have posted the code changes I made here in the hope that they can be used to help balance high level play in both the main campaign and the I.D.

There is an achievement for reaching level 500 of the Infinite Dungeon. With the idea of seeing how far I could get, and what would be needed to get this achievement, I started a halfling alchemist character in the main campaign. (I expected the Duck and Dodge talent to be very useful against deadly Shadow Veiled bosses.) I played through the entire campaign, received duplicates (or more) of many different "unique" artifacts, and exploited the rare gear bug to set up a pretty exceptional equipment set. In summary, this character has equipment slightly better than it is possible to get normally.

I then entered the I.D. and had little trouble reaching level 100 (while limited to character level 50). It was obvious that the character wouldn't progress much further, both due to the rapidly slowing pace, and various unbalanced abilities that were cropping up in the monsters. I ran the High peak multiple times -- it's similar to the I.D. but with much better gear and even got multiple final fight boss drops. So armed, I went into the game code and began making adjustments, starting with maximum character level and extending the normal leveling stat and skill awards from the main game, followed by systematic changes to the code for various talents (nearly 200 at this point) as problems came up.

My primary test character is now 259th level and has reached level 456 in the I.D.:

TEST CHARACTER

Code: Select all

  [ToME4 @ www.te4.org Character Dump]

Sex              : Female       STR:  98
Race             : Halfling     DEX:  134
Class            : Alchemist    MAG:  340
Level            : 259          WIL:  115
Exp              : 59%          CUN:  136
Gold             : 275480.77    CON:  298

Accuracy(Main Hand):  80        Life             :     13834/13834Encumbrance      : 179/296
Damage  (Main Hand): 768        Stamina          :     1162/1162Difficulty       : Normal
Permadeath       : Adventure
APR     (Main Hand):  60        Mana             :     2401/2405
Crit    (Main Hand): 100%       Positive         :     0/800
Speed   (Main Hand): 1.00       
                                Vim              :     1220/1220
                                Equilibrium      :     20
                                

Fatigue          : 0%           Spellpower       : 139.85714285714
Armor            : 229.8871321444Spell Crit       : 100%
Armor Hardiness  : 100%         Spell Speed      : 1
Defense          : 78.7217830361
Ranged Defense   : 82.57742642888
All damage       : 45%
Physical damage  : 112%
Arcane damage    : 173%
Fire damage      : 192%
Cold damage      : 105%
Lightning damage : 138%
Acid damage      : 60%
Nature damage    : 75%
Blight damage    : 117%
Light damage     : 63%
Darkness damage  : 72%
Mind damage      : 75%
Temporal damage  : 55%

Physical Save    : 101.75877641494
Spell Save       : 109.36710974828
Mental Save      : 72.7375

All Resists:  70%
Physical Resist(cap):  70%( 70%)
Arcane Resist(cap):  70%( 70%)
Fire Resist(cap):  70%( 70%)
Cold Resist(cap):  70%( 70%)
Lightning Resist(cap):  70%( 70%)
Acid Resist(cap):  70%( 70%)
Nature Resist(cap):  70%( 70%)
Blight Resist(cap):  70%( 70%)
Light Resist(cap):  70%( 70%)
Darkness Resist(cap):  70%( 70%)
Mind Resist(cap):  70%( 70%)
Temporal Resist(cap):  80%( 80%)
Poison Resistance: 100%
Disease Resistance: 100%
Confusion Resistance: 100%
Blind Resistance: 100%
Silence Resistance: 100%
Disarm Resistance:  50%
Pinning Resistance: 100%
Stun Resistance: 100%
Fear Resistance:  60%
Knockback Resistance:  40%
Teleport Resistance:  50%

Number of NPC killed: 85273
Most killed NPC: fire drake hatchling (4435)

  [Winner!]

Well done! You have won the Tales of Maj'Eyal: The Age of Ascendancy

The Sorcerers are dead, and the Orc Pride lies in ruins, thanks to your efforts.

You have prevented the portal to the Void from opening and thus stopped the Creator from bringing about the end of the world.

The orc presence in the Far East has greatly been diminished by the loss of their leaders and the destruction of the Sorcerers. The free people of the Sunwall will be able to prosper and thrive on this land.

Maj'Eyal will once more know peace. Most of its inhabitants will never know they even were on the verge of destruction, but then this is what being a true hero means: to do the right thing even though nobody will know about it.

You may continue playing and enjoy the rest of the world.

While you were in the Far East, the Grand Corruptor was busy in Maj'Eyal.
With the fall of Zigur he was able to attack and take control of Elvala, the Shaloren capital city.
His plans however do not stop there.

After your victory you came back to Last Hope and reunited with Melinda, who after many years remains free of demonic corruption.
You lived together and led a happy life. Melinda even learned a few adventurer's tricks and you both traveled Eyal, making new legends.


  [Talents Chart]

 - Race / Halfling                    (mastery 1.00)
    Luck of the Little Folk (generic) 1/5
    Duck and Dodge (generic)          5/5
    Militant Mind (generic)           9/5
    Indomitable (generic)             1/5
 - Technique / Combat training        (mastery 1.00)
    Thick Skin (generic)              21/5
    Armour Training (generic)         30/10
    Combat Accuracy (generic)         1/5
    Weapons Mastery (generic)         0/5
    Dagger Mastery (generic)          0/5
 - Cunning / Survival                 (mastery 0.90)
    Trap Handling (generic)           4/5
    Heightened Senses (generic)       1/5
    Piercing Sight (generic)          5/5
    Evasion (generic)                 7/5
 - Spell / Explosive admixtures       (mastery 1.50)
    Throw Bomb (class)                25/5
    Alchemist Protection (class)      6/5
    Explosion Expert (class)          7/5
    Shockwave Bomb (class)            8/5
 - Spell / Infusion                   (mastery 1.50)
    Fire Infusion (class)             25/5
    Acid Infusion (class)             25/5
    Lightning Infusion (class)        0/5
    Frost Infusion (class)            0/5
 - Spell / Golemancy                  (mastery 1.30)
    Golem Power (class)               25/5
    Golem Resilience (class)          25/5
    Invoke Golem (class)              1/5
    Golem Portal (class)              20/5
 - Spell / Advanced-golemancy         (mastery 1.30)
    Life Tap (class)                  25/5
    Gem Golem (class)                 5/5
    Supercharge Golem (class)         25/5
    Runic Golem (class)               25/5
 - Spell / Fire alchemy               (mastery 1.30)
    Heat (class)                      25/5
    Smoke Bomb (class)                2/5
    Fire Storm (class)                25/5
    Body of Fire (class)              0/5
 - Spell / Stone alchemy              (mastery 1.30)
    Extract Gems (generic)            5/5
    Imbue Item (generic)              5/5
    Gem Portal (generic)              8/5
    Stone Touch (generic)             0/5
 - Spell / Staff combat               (mastery 1.50)
    Channel Staff (generic)           24/5
    Staff Mastery (generic)           17/5
    Defensive Posture (generic)       25/5
    Blunt Thrust (generic)            0/5
 - Wild-gift / Harmony                (mastery 1.00)
    Waters of Life (generic)          1/5
    Elemental Harmony (generic)       1/5
    One with Nature (generic)         1/5
    Healing Nexus (generic)           23/5
 - Celestial / Chants                 (mastery 0.70)
    Chant of Fortitude (generic)      7/5
    Chant of Fortress (generic)       0/5
    Chant of Resistance (generic)     0/5
    Chant of Light (generic)          0/5
 - Corruption / Hexes                 (mastery 1.00)
    Pacification Hex (generic)        1/5
    Burning Hex (generic)             7/5
    Empathic Hex (generic)            2/5
    Domination Hex (generic)          5/5

  [Inscriptions (5/5)]

Infusion: Wild
Infusion: Regeneration
Rune: Controlled Phase Door
Rune: Shielding
Infusion: Healing

  [Current Effects]

- Chant of Fortitude
- Defensive Posture
- Premonition
- Second Life
- Elemental Harmony
- Spellsurge

  [Character Equipment]

 
Note that the main difficulty in advancing through the Infinite Dungeon is a shortage of experience points. As they go deeper, player characters progress much more slowly in levels than the monsters they must face. Eventually, the player faces foes that are too powerful to vanquish and will perish. The main goal of this project was to make it possible to advance to I.D. level 500 without the game mechanics breaking down. There is little danger of making reaching the 500th level of the I.D. easy. Most of the monsters the test character is now confronting are more than twice her level.

CORE CODE CHANGES
Updated lua files can be downloaded from:

http://www.mediafire.com/?0u1jy31ttc9md8l

Besides changes to the various talent functions, other key code changes appear in:

Engine:
engine\interface\ActorStats.lua
engine\interface\ActorTalents.lua

TOME Module:
mod\load.lua
mod\class\Actor.lua
mod\class\interface\Combat.lua
data\birth\worlds.lua
data\general\objects\world-artifacts.lua
data\general\objects\world-artifacts-far-east.lua
data\damage_types.lua
data\maps\vaults\paladin-vs-vampire.lua
data\timed_effects\physical.lua
data\zones\infinite-dungeon\zone.lua
data\zones\ruined-dungeon\grids.lua

I removed the level cap and enabled the normal stats-per-level progression from level 50 onward:

I reset the max_level variable and introduced a new no_points_on_levelup function to the character when entering the I.D. from the Ruined Dungeon. These changes were added to the data\zones\ruined-dungeon\grids.lua and data\birth\worlds.lua files.

I rescaled equipment material level in the I.D.:

To eliminate low tier equipment from being generated far into the zone, I added new materal level formulas to the zone file for the I.D. The maximum material level increases from 1 at level 1 to 2 at 11, 3 at 21, 4 at 31, and 5 at 41. The minimum increases from 1 at level 1 to 2 at 9, 3 at 36, 4 at 81, and 5 at 144. All drops (except for bosses) are tier 5 from I.D. level 144 on.

Maximum stats were increased from 100 to 400:

I updated the stat maximums in the ActorStats:defineStat calls in mod\load.lua. To keep stat scaling uniform, I added a multiplier of 4 to the stat scaling factor the _M:getStat function definition in engine\nterface\ActorStats.lua.

The talent level limits for normal monsters were scaled up:

The maximums are increased in proportion to actor level/50. By around level 100-150, normal (non-boss or unique) monsters started to become trivial, to the point that entire room fulls of them were inconsequential. The increased talent levels corrected this. These code changes are implemented in a revised _M:resolveLevelTalents function definition in engine\nterface\ActorTalents.lua

I enabled higher computed combat stats:

I changed the Tiers variable initialization from 5 to 50 in the _M:rescaleCombatStats function definition in mod\class\interface\Combat.lua.

Some resistance calculation bugs needed to be corrected:

The polynomial formula for computing total resistance in _M:combatGetResist(type): (mod\class\interface\Combat.lua) was changed from:

(1 - (1 - a) * (1 - b))

to simply:

(a + b)

Where a is resist.all and b is resist[type]. The first formula could invert and actually compute negative resistances for large values of the resist.all variable, making high level monsters more, rather than less, vulnerable to damage. The second formula corrects the problem, but gives a slight buff to total resistance for individual resistances below the resistance cap. This could affect the main campaign.

There is a subtle bug in the resistance penetration calculations that causes excess resistance penetration to increase damage. This is caused by an apparent typo in a function call in the setDefaultProjector function in data\damage_types.lua:

pen = util.bound(0, pen, 100)

was changed to:

pen = util.bound(pen, 0, 100)

to avoid high penetration increasing total damage.


RESCALING ABILITIES
It's no fun to be killed by a speed 50 boss that zooms in from off screen and one-shots you before you even know it's there.

The primary problem with extending T.O.M.E. to higher levels is that most of the talent programming was hard coded with a maximum character level of 50 in mind. Generally, spell and melee damage scale well, but auxiliary talent properties such as cool downs, durations, ranges, and damage multipliers need to be rescaled to eliminate such problems as negative cool downs, super-linear scaling of abilities (like getting hit with a Freeze spell for 140K damage and bosses that are too fast to fight), or "I WIN" talents that can dominate the game at high levels.

I designed the changes to be as transparent as possible in the main campaign. Therefore, except where noted, the rescaling of all talents was designed to provide equal effectiveness at the end of the Maj'Eyal campaign, defined as (overall) talent level 5, with relevant base stats of 100. In most cases, this results in a small buff to lower talent abilities and a progressive debuff (that is, diminishing returns) at talent levels gained beyond the main story line. This has a negligible impact on the main campaign, with a bias towards a small improvement in abilities at lower levels. A potential positive side effect of this rescaling is a reduction of the number of overpowered random bosses at normal play levels.

High level balancing requires the introduction of diminishing returns on most abilities, to prevent their effectiveness from increasing out of control beyond the main campaign. I have effected this in the code for almost 200 talents. In each case, the primary game mechanics of talents were respected. That is, if range or duration increases with level, it still increases with level (at a slower rate), if damage depends on talent level and spell power, these dependencies are maintained, if one talent affects others, those links were maintained (like Aura Mastery and Necrotic Aura, for example), etc. Code chages were minimized, to allow changes to hopefully be pasted directly into new versions of the game without change. I'm certain there are more changes needed, but the changes I have already made make high level play viable.

While it would have been simple to add hard coded limits to most talent functions, I, instead, opted for smooth formulas to recompute the values.. This open-endedness, particularly with respect to range and cooldowns gradually introduces new tactics to the game as higher levels are reached and keeps game play interesting.

With few exceptions, I applied the following rules of thumb to computed talent effects (tl = talent level):

Raw damage calculations:
No change

Speed effects (including global/movement/attack/spell):
Bonuses rescaled ~ tl^0.75. Compounding of multiple speed effects was the most serious game balance issue that needed to be addressed. (I actually did encounter a 50x normal speed boss at about I.D. level 200.)

Radius/Area of Effect/Range
Values rescaled to ~ tl^0.5 This effectively makes the number of potential targets proportional to talent level.

Direct damage multipliers:
Multipliers rescaled to ~ tl^0.5 The idea is to avoid the player being one-shot by a single move, while keeping the pressure on.

Cooldowns and hard limits:
Bonuses were recomputed with a variant of the formula tl/(tl+c), where c, a constant, is a tuning parameter. This formula enforces a hard limit while still rewarding higher talent levels with smoothly increasing benefits. This was applied particularly effectively to resistance penetration calculations.

Duration for most debuffs or powerful buffs:
Duration rescaled to ~ tl^0.5 A number of serious problems were caused by powerful spells lasting for too long, For example, a 120 turn Time Prison, or a powerful slow spell that lasts for 150 turns, effectively eliminating a large section of a level for an entire boss fight. Most instant activated racial abilities got smooth limits to prevent continuous use.

Example:

Unstoppable
The formula for the duration of the unstoppable effect with respect to talent level (TL) is changed from:

dur = 2 + TL

to:

dur = 2+ floor[43*TL/(TL+38)]

The first formula is unbounded, and, since the cooldown of the talent is 45 turns, it can be kept up continuously once talent level 43 or higher is reached. In contrast, the second formula can never exceed 44 turns, guaranteeing that a monster (or player!) cannot simply use this talent over and over to become unkillable. At TL = 5, both formulas return the same duration of 7 turns.

For a few cases, a talent needed to be improved [BUFF] or diminished [NERF] if it became either too powerful or inconsequential at high level. For example, Blurred Mortality scaled very poorly at 50 hp per talent level, so I added a (small at low level) percentage of maximum life to it. As a result, vampires are noticeably tougher at deeper levels, but low level characters are hardly affected.

ARTIFACTS
I updated the Summertide Phial (data\general\objects\world-artifacts.lua) and Dawn's Blade (data\general\objects\world-artifacts-far-east.lua) to increase their lite power to work against the more potent darkness spells cast by higher level demons. The talent levels of some activated abilities for artifacts and egos could be scaled with character level to keep them viable for longer.

SPECIFIC TALENT CHANGES
In the list of talent changes below, some are annotated with "[BUFF]" or '[NERF]." This reflects the effect of the new code on game play for the reference character at the end of the Maj'Eyal campaign with talent level 5 and 100 stat values. So, for example,

Blinding speed rescaled speed bonus [NERF]

means that this talent has had its speed bonus recomputed and should be less effective for most characters (or monsters) late in the Maj'Eyal campaign.

The best way to locate revisions in all of the code is to follow the attribute flags in the code archive to find the files that have been changed and then search for the string "I5", which I have embedded in comments around the revisions.

These are the talents I have rebalanced (all tested in game):
  • Absorption mastery limit cooldown to > 30
    Abyssal shroud rescale duration
    Acid infusion rescaled damage bonus, limited conversion to 125%
    Ambuscade limit shadow's health and damage to 100% and 160% respectively
    Arcane cunning rescale percent cunning bonus
    Arcane eye rescale vision radius
    Arcane pull rescale radius
    Armor training increase armor bonus to 2x talent level [BUFF]
    Ashes to ashes rescale radius
    Augmentation rescaled stat bonuses [NERF]
    Aura discipline Limit cooldown reduction to 8 turns
    Aura mastery rescale radius bonus and limit decay rate
    Banish rescale targeting radius
    Battle call rescale range
    Battle cry rescale range
    Battle shout rescale duration <30
    Bellowing roar rescale range
    Blast rescaled critical power [NERF]
    Blastwave rescale range
    Bleeding edge limit healing factor reduction to 150%
    Blinding speed rescaled speed bonus [NERF]
    Bloodbath rescale duration, limit health increase to <100%
    Blunt thrust rescale stun duration
    Blurred mortality added life bonus to effect [BUFF]
    Body of stone limit cooldown reduction of Earthen missiles, Earthquake, and Mudslide to <50%
    Born into magic rescale arcane damage and resistance
    Burning Hex rescaled cooldown penalty [NERF]
    Celerity rescaled speed bonus
    Chill of the tomb rescale radius
    Circle of death rescale bane duration
    Cripple rescale stun duration and attack and damage penalties <100%
    Crippling poison rescale duration, limit chance of turn loss to 100%
    Crystalline Focus limit penetration to 100%
    Curse of impotence limit damage reduction to <100%
    Darkfire rescale radius
    Daunting presence rescale range, limit minimum life to interrupt to >10%
    Deadly poison rescale duration
    Deadly strikes limit duration <12, rescale APR
    Deflection rescaled critical power [NERF]
    Dimension step rescale range
    Dirty fighting rescale stun duration
    Disengage rescale backup range
    Disperse Magic rescale dispel count
    Displace damage rescale range
    Dominate rescale duration, limit penetration to 100%
    Dredge Frenzy rescale range, limit speed and -health to 100%
    Dual weapon defense rescaled defense bonus (2 places) [NERF]
    Earthquake rescale radius
    Echos from the past rescale radius, limit life loss multiple to <50%
    Eldritch blow rescale stun duration
    Eldritch slam rescale radius
    Energy absorption rescale cooldown duration and talents affected
    Energy Decomposition increased absorption limit [BUFF}
    Essence of Speed rescaled speed bonus[NERF]
    Exploit weakness limit penetration to 100%
    Explosion expert clarified formula and tooltip
    Fear the night rescale radius
    Featherwind rescaled movement speed [NERF]
    Fire breath rescale range
    Fire infusion rescaled damage bonus
    Fireflash rescale radius
    Flame of Urh'rok rescale speed increase
    Flame Shock rescale range and duration
    Focused channeling rescale damage/shield bonus
    Forgery of haze limit health and damage of simulacrum to 100% and 140% respectively
    Freeze rescaled damage, revised super-linear damage formula
    Frenzied Bite limit healing factor reduction to -100%
    Frost Dust limit penetration to 100%
    Frost infusion rescaled damage bonus, limited conversion to 125%
    Frozen Ground rescale radius
    Gem Portal rescale range
    Ghoulish leap rescale range
    Glacial vapor rescale duration
    Gnashing teeth rescale duration, limit speed increase, -healing limit to <100%,
    Golem Portal rescale cooldown >0
    Golem Taunt rescale radius, limit cooldown >0
    Grand Arrival reduced duration of slow effect and resistance reduction and limited slow to -100%
    Gravity spike rescale radius
    Gravity well rescale radius
    Greater weapon focus rescale duration <20
    Hack 'n back rescale backup range
    Haste rescaled speed bonus
    Heat rescale damage[BUFF]
    Heave rescale knock back range
    Heightened reflexes rescaled speed bonus
    Highborn's bloom limit cooldown to > 20 turns, and duration to 10 turns
    Hymn of Moonlight limit negative energy cost to >0
    Ice breath rescale range
    Illuminate rescale radius
    Impending doom limit life loss to <125%[NERF]
    Inferno rescale duration
    Inner demons rescaled duration
    Insidious poison rescale duration, limit healing loss to -100%
    Invigorate rescaled duration with talent level
    Lethality rescale critical power
    Lightning breath rescale range
    Lightning infusion rescaled damage bonus, limited conversion to 125%
    Lightning speed rescale duration and speed bonus
    Martyrdom rescaled feedback damage
    Mindhook rescale range, limit cooldown >5
    Mobile defense limit defense bonus to 100%
    Momentum rescaled attack speed
    Mudslide rescale radius
    Nova rescale radius
    Numbing poison rescale duration, limit damage reduction to less than 100%
    Onslaught rescale knock back range <10
    Orcish Fury - limit cooldown, rescale damage bonus
    Outmaneuver limit damage pen to < 100%
    Overkill limit splash damage to <100%
    Paradox mastery rescaled duration of stability effect
    Phantasmal shield increase damage [BUFF]
    Phase Door limit range, bound on radius
    Precision rescaled APR
    Pride of the Orcs limit cooldown to > 10 turns
    Projection mastery limit cooldown to > 30
    Psiblades rescaled stat damage and APR bonuses
    Quake rescale radius
    Quick as thought rescaled movement speed [NERF]
    Rampage rescaled movement speed
    Reach limit range bonus (<100%) for pyrokinesis, mindlash, kinetic, thermal, and charged aura spikes, mindhook, superleap, shattering charge, bind, implode, kinetic, thermal, and charge leech
    Reassemble Minimum cooldown 15, rescale heal to maximum life level [BUFF]
    Reckless charge rescale range
    Refit Golem rescaled heal with maximum golem life[BUFF]
    Relentless strikes limit cooldown reduction to 67%
    Repel limit chance to 100%
    Repulsion rescale range
    Repulsion blast rescale radius
    Repulson field rescale radius, duration
    Resilient bones Limit duration reduction to <100%
    Rigor mortis rescale duration
    Rush rescale range, cooldown >0
    Sand breath rescale range
    Shadow ambush rescale silence duration
    Shadow cunning rescale percent cunning bonus
    Shadow leash rescale duration
    Shadow Strike rescale damage multiplier
    Shadow Veil rescaled damage bonus, limited duration to <18
    Shadowstep rescale range, daze duration and damage multiplier
    Shaloren speed rescale speed increase, limit cooldown >10
    Shattering charge rescale range
    Shattering shout rescale range
    Shield discipline Limit cooldown reduction to 16 turns, limit absorption energy to +25 (+ gem bonus)
    Shield wall rescale armor from talent levels[NERF]
    Skirmisher limit damage pen to < 50%
    Slow rescale radius, duration
    Smoke bomb rescale duration
    Spacetime mastery rescale cooldown reductions for Banish, Swap, Dimensional Step, Temporal Wake, Wormhole to <80%
    Spellcraft limit spellpower bonus to <+100%
    Static field limit life loss to 90%(base)
    Static history rescaled duration
    Stone touch rescale range and duration
    Stoning poison rescale poison duration >= 1 turn and rescale stoning effect duration
    Stop rescale radius, duration
    Strider rescale movement speed, limit cooldown reductions to 8 turns
    Stunning blow rescale stun duration
    Sun Flare rescale range and duration of blind effect
    Super leap rescale range
    Supercharge golem rescale cooldown >0
    Surge rescaled movement speed
    Swap rescaled range and duration of confusion effect
    Switch place rescale evasion duration
    Tactical expert limit defense bonuse to 8x
    Tempest limit penetration to 100%
    Temporal fugue rescale duration, radius
    Temporal reprieve rescaled cooldown and duration reduction effects
    Thermal leech rescale freeze duration
    Thorn Grab info slow effect < 100%
    Time prison rescaled duration
    Time prison rescale duration
    Time skip rescale duration
    Timeless rescale duration effect and limit cooldown to > 20 turns
    Total thuggery limit stam cost to >0 and penetration to 100%
    Totality rescale cooldown reduction and limit penetration to <100%
    Undead explosion rescale radius, limit damage to 50% of life[NERF]
    Undeath link limit life gain to <100%
    Unseen force rescaled critical power [NERF]
    Unstoppable rescaled duration to prevent continuous use
    Uppercut rescale stun duration
    Uttercold limit penetration to 100%
    Vampiric gift limit both leach chance and amount leached to <100%
    Vitality rescale duration, add fraction of max life to regeneration [BUFF]
    Waking nightmare rescale duration
    Warshout rescale range
    Weakness rescale damage reduction <65%
    Wildfire limit penetration to 100%
    Willfull strike rescaled critical power [NERF]
    Wing buffet rescale range
    Wormhole rescale range, targeting radius


UNADDRESSED ISSUES

MELEE VIABILITY
Because monsters level up faster than players in the I.D. their defense (especially for bosses) tends to outstrip the melee attack values for the player. Evasion talents are also very common. The result is that melee characters will have an increasing difficult (or impossible) time doing damage to many opponents. (Magic using characters have a similar issue with respect to spellpower versus monster saves, but it is much less serious.)

This, and the fact that melee characters cannot help but be exposed the progressively overwhelming damage high level monsters can deal out, means that melee based classes are not currently viable in the I.D. Among other things, melee characters need access to more sources of attack to be viable, probably in the form of revised or new talents. (Perhaps the Combat Accuracy talent can provide an increased bonus for dexterity.)

I have partially addressed this with changes to the _M:checkHit function in mod\class\interface\Combat.lua. The revised function is easily tunable and is currently more than 3 times as forgiving of differences between attack and defense. The new formula,

hit = 50+50*(atk-def)/(math.abs(atk-def)+10)

is inherently bounded on the interval (0->100) and does not need built in limit checks, which I have disabled. This has worked out very well. For example, disarming traps is no longer automatic, and I have found myself tip-toeing around intruder alarms near powerful bosses just because of the small chance that I'll fail to disarm them and get into a fight before I'm ready.

STEALTH and INVISIBILITY
My test character has telepathy(all). This allowed me to easily inspect monsters, particularly bosses during play testing, but I could not address the effect of the fog of war. I did notice that stealth and invisibility values varied a lot, and need to be rebalanced.

TRAPS
Traps, detect/disarm values and effects, do not seem to change with level. These should be easy to update.

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Wed Oct 03, 2012 8:25 pm
by Grey
This is pretty damned epic. I'm impressed!

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Wed Oct 03, 2012 8:58 pm
by SageAcrin
While this is really cool, some of the changes seem like they would massively retool balance in the maingame in almost every direction, just reading what you've listed here. Enemies, allies, everything.

This isn't intended to shut you down, but this is a really, really major project, and given the breadth and scope of it, it is worrisome that there's just one person to say it's good balance as of right now.

My suggestion for a next step? Dump the talent tweaks into a plugin and toss it onto the forums. I don't believe engine alterations are supported by addons(Someone correct me if I'm wrong?), and considering there's a codefreeze...relatively soon, it would be iffy to add such a huge balance overhaul to the maingame right now, it feels like.

But having said that, I believe most of what's listed doesn't require the engine alterations to see their impact on the maingame. I would highly recommend making a plugin so that people can give feedback and testing. And given the scope, a fair deal of time to test the changes could only be beneficial.

It's definitely an impressive piece of work, though, and while I haven't downloaded the LUA files yet, the changes listed definitely sound like they make a huge inroad on ultra-high level issues. I just worry about the lower levels is all-ID is a bonus mode, and first and foremost, it feels like balance should be oriented towards the main campaign.

If you can nail both, though, it's a bonus. Definitely would love to see this work out.

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Wed Oct 03, 2012 10:56 pm
by Grey
The code freeze is for content, not balance, as far as I know. Tweaking numbers is fine as long as there are no bugs.

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Wed Oct 03, 2012 11:31 pm
by Hachem_Muche
SageAcrin wrote:While this is really cool, some of the changes seem like they would massively retool balance in the maingame in almost every direction, just reading what you've listed here. Enemies, allies, everything.
Most of the time I spent on this was to make sure that these changes had minimal (if any) affect on the main game. A sub 50 level character should see virtually no effect from any of this except for a slight buff here and there. Most importantly, by the end game (think Far-East and on) everything should all work the same.
SageAcrin wrote: My suggestion for a next step? Dump the talent tweaks into a plugin and toss it onto the forums. I don't believe engine alterations are supported by addons(Someone correct me if I'm wrong?)
This sounds like a good idea, I'll look into it. As far as changes to the engine, I only made a few changes and would certainly appreciate any feedback on how to eliminate those.

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Thu Oct 04, 2012 3:30 am
by Canderel
Addons can change the engine as long as it's lua not C.

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Thu Oct 04, 2012 10:54 pm
by Sradac
why is this for b41 and not b42...

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Fri Oct 05, 2012 3:01 am
by Hachem_Muche
Sradac wrote:why is this for b41 and not b42...
It is now. I've stripped out all the files I didn't change and converted it to a B42 compatible add-on. (Just put it in the addons folder and enable it.)

http://www.mediafire.com/?bfu12e1ocj7mk2r

It was in B41, because I started my test character before B42 came out and I've been running him through a few hundred levels of the I.D. to find problems and fix them.

I've tested this version in several different zones now and it seems to work well.

BTW, is there any documentation anywhere on what all the options are for making addons? I had to kinda wing it here....

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Sat Oct 06, 2012 1:05 am
by Sradac
Pretty sure this is broken somehow.

Any time I try to move from ID1 to ID2 on any character, it just sits on the loading screen forever, have to kill the process. No obvious errors in the log, it just looks like it gets stuck assigning talents to enemies:

Code: Select all

[TOME ENTITY FILTER] selected Greater	17.92356974816	41
[TOME ENTITY FILTER] making default loot table for	normal	1
 ***** LOOT MOD	uniques	10
 ***** LOOT MOD	money	0
 ***** LOOT MOD	basic	0
 ***** LOOT MOD	ego	0
 ***** LOOT MOD	greater_normal	2
 ***** LOOT MOD	greater	2
 ***** LOOT MOD	double_greater	2
 ***** LOOT MOD	double_ego	1
 ***** LOOT MOD	lore	0
[TOME ENTITY FILTER] selected Greater	31.135154312741	41
Talent resolver for	fire wyrm	:	T_WING_BUFFET	=>	5
[TALENT]	fire wyrm	25407	learning	T_WING_BUFFET	true	5
[TALENT]	fire wyrm	25407	learning	T_EQUILIBRIUM_POOL	true	nil
Talent resolver for	fire wyrm	:	T_BELLOWING_ROAR	=>	5
[TALENT]	fire wyrm	25407	learning	T_BELLOWING_ROAR	true	5
Talent resolver for	fire wyrm	:	T_DEVOURING_FLAME	=>	5
[TALENT]	fire wyrm	254

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Sat Oct 06, 2012 1:14 am
by Sradac
Well I think I see the problem. You left some kind of debugging on. I finally got it to load foranother character after sitting here for about 5 minutes, at that point my game log was flooded with all of that talent assignment, checking, loot table, etc stuff from the previous post. that should probably get turned off.

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Sat Oct 06, 2012 1:35 am
by Sradac
Happened again. Had to kill process. You can see from the [LOG] that it was writing this straight into the log. Probably just overloading my display and puking all over itself.

Code: Select all

[TOME ENTITY FILTER] making default loot table for	normal	1
[TOME ENTITY FILTER] selected Greater	7.2754674042285	18.5
[TOME ENTITY FILTER] making default loot table for	normal	1
[TOME ENTITY FILTER] selected Double Ego	23.835807800953	38.5
[LOG]	maxfact: 1.00
[LOG]	level 2 thief checking talent [T_DISARM]:(base = 2,every=6,max=6)
[LOG]	maxfact: 1.00
[LOG]	level 2 thief checking talent [T_HIGHER_HEAL]:(base = 0,every=4,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 2 thief checking talent [T_STEALTH]:(base = 2,every=6,max=8)
[LOG]	maxfact: 1.00
[LOG]	level 2 thief checking talent [T_VENOMOUS_STRIKE]:(base = 0,every=6,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 2 thief checking talent [T_HIGHBORN_S_BLOOM]:(base = 0,every=4,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 2 thief checking talent [T_LETHALITY]:(base = 1,every=6,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 2 thief checking talent [T_BORN_INTO_MAGIC]:(base = 0,every=4,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 2 thief checking talent [T_VILE_POISONS]:(base = 1,every=6,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 3 thief checking talent [T_DISARM]:(base = 2,every=6,max=6)
[LOG]	maxfact: 1.00
[LOG]	level 3 thief checking talent [T_HIGHER_HEAL]:(base = 0,every=4,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 3 thief checking talent [T_STEALTH]:(base = 2,every=6,max=8)
[LOG]	maxfact: 1.00
[LOG]	level 3 thief checking talent [T_VENOMOUS_STRIKE]:(base = 0,every=6,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 3 thief checking talent [T_HIGHBORN_S_BLOOM]:(base = 0,every=4,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 3 thief checking talent [T_LETHALITY]:(base = 1,every=6,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 3 thief checking talent [T_BORN_INTO_MAGIC]:(base = 0,every=4,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 3 thief checking talent [T_VILE_POISONS]:(base = 1,every=6,max=5)
[TOME ENTITY FILTER] making default loot table for	normal	1
[TOME ENTITY FILTER] selected Ego	55.374542490201	83.5
[TOME ENTITY FILTER] making default loot table for	normal	1
[TOME ENTITY FILTER] selected Ego	59.495346881565	83.5
Talent resolver for	stone troll	:	T_STUN	=>	1
[TALENT]	stone troll	26511	learning	T_STUN	true	1
[TALENT]	stone troll	26511	learning	T_STAMINA_POOL	true	nil
Talent resolver for	stone troll	:	T_KNOCKBACK	=>	1
[TALENT]	stone troll	26511	learning	T_KNOCKBACK	true	1
[TOME ENTITY FILTER] making default loot table for	normal	1
[TOME ENTITY FILTER] selected Greater	7.8844346953287	18.5
[LOG]	maxfact: 1.00
[LOG]	level 2 stone troll checking talent [T_STUN]:(base = 1,every=7,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 2 stone troll checking talent [T_KNOCKBACK]:(base = 1,every=7,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 3 stone troll checking talent [T_STUN]:(base = 1,every=7,max=5)
[LOG]	maxfact: 1.00
[LOG]	level 3 stone troll checking talent [T_KNOCKBACK]:(base = 1,every=7,max=5)

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Sat Oct 06, 2012 1:59 am
by Hachem_Muche
Sorry about the crash. Here is a new version that I've been using without problems:

http://www.mediafire.com/download.php?wd8q2fx7a67276t

I've changed the debugging statements in the talent generators to be a little less noisy. If you continue to have the same problem, please let me know.

Re: TOWARDS INFINITE 500: Code Revisions for High Level Play

Posted: Sat Oct 06, 2012 9:40 pm
by Sradac
working much better now. Hopefully I will actually get to SEE the high levels soon, that event with the cultists and the monoliths made quick work of my 15 necro.