First Look: Warlock

Discussion in 'General Modification' started by Sagenlicht, May 12, 2021.

Remove all ads!
  1. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    186
    Likes Received:
    37
    TL;DR: This is really a first look :)

    This post is mainly intented for @Sitra Achara and @_doug_ , so I can share my progress and get feedback to what I have to change. Though if you want to take a look at the pile of code and want to provide feedback, please do :) I am a firm believer that code reviews really help to improve the quality even if this means I have to rewrite a lot of it :)
    In addition I am pretty sure in this case, there is a huge room for improvement due to my limited knowledge about targeting.

    I have added my work to my hub (Link: https://github.com/Sagenlicht/Warlock), because it's easier to update than a .zip here. Once I get a good working implementation I will remove it from my hub and add it to the temple+ hub (where it belongs).

    This is not a fully working implementation.

    What is fully working:
    Class Feats:
    Detect Magic
    Damage Reduction (though Cold Iron DR is somewhat fishy)
    Fiendish Resilience
    Energy Resistance** (see below)

    What is working:
    You can switch your Eldritch Blast "Stance" (e.g. switch to Frightful Blast). Your current stance will be shown as a mouseover tooltip
    You can reset your stance

    What is semi working
    You can fire an Eldritch Blast

    What is fully working but needs rework on the temple+ side:
    Cast an Invocation

    What is not working
    Energy Resistance grant two resistances at level 10, but I can only grant one extra feat

    Not tested
    Spell failure (I copied that part from the warmage but can't remeber if I actually modified it)

    N0t implemented:
    Deceive Item (lets you take 10 on UMD)
    I don't know if someting like taking 10 exists in ToEE but I don't think so? If no, maybe a bonus to UMD is a proper replacement? Something like +1 to UMD for every 4 to 5 levels?

    Imbue Item (craft magic items without knowing the propor spell)
    Can't be done via Python I think.

    Some behind the scene stuff:
    I use the spell enum range 3300-3399 for the invocations? Why? Two reasons:

    I need a defined range for shape and essence invocations so I can filter them
    The Bard class uses 3000+ for bard songs to my knowledge.

    Filter ranges are:
    3300 - 3310 shape invocations
    3311 - 3330 essence invocations (this range might be to large)
    3331+ normal invocatins(spells)

    I have not started to add more normal invocations yet, simply if this range would not be ok, I would have to do alot of work twice. Once I have an approved range I will add normal invocations (won't take long)

    Originally I used Invocation as the Spell School, because invocations are not real spells and ofc do not have a spell school. This would also help to 'enforce' that no spell focus could be used on them. But the spells will get blocked by the engine then, there seems to be a school check for wizards and I classified the warlock as an arcane caster. Invocations have a proper spell school for now.

    I don't know how to change targeting "on the fly" which is a major class feature of the Warlock class in it's shape invocations. I have created more than eldritch blast due to this and they basically do the same except the targeting.
    In addition secondary effects can be added to the blast like Frightful or Brimstone Blast. At the moment I modify the shape spells to include the modifications.
    This part could be vastly improved.
    Ideally I could use the Essence Invocations (like Frightful Blast), modify the targeting on the fly (single target ray, cone etc) and fire it. My workaround is not a good solution I think and maby it is not needed at all, I simply do not know how to do it better.

    Current major Issues:
    The game crashes if you start a new game with a warlock and additional PC's. If you start the game with a warlock alone, the game does not crash nor does it crash when you multiclass later on into a warlock. I can't read the dump files and I am puzzled what causes that issue :(

    When you create a new Warlock you can choose any alignment, which will block any further progress in the class if you actually choose a non allowed alignment (any evil or any chaotic) later on as I have set the alignment checks in the class script, but in the character creation alignment selection comes after class selection and I have no clue where to block that. Maybe the Paladin is even hardcoded? This issue would be more general actually as there are more non-core base classes that have alignment restrictions

    I have no clue how to access an enum in a PySpellStore directly via Python, so I have str sliced it to get the Radial working. This is not a solution that I can use for a release, I have done this for now to have a working solution. It is marked in the code.

    Current used workarounds:
    Fiendish Resilience heals a fixed amount, pyObj.heal requires a dice. Solved by rolling a 1d1
    Filter spells to create radial for stance changes. Major foul play by using a str slice.
    Firing Eldritch Blasts requires a workaround atm, as I cannot directly fire an Essence Invocation directly due to targeting problem. If this could be done, a major issue would be solved.

    Things that can't be done in python:
    I would need to get the spell list filtered, so shape and essence invocations are not listed in castable spells
    Cast at will
    Rename spell levels to least, lesser, greater, dark
     
  2. Endarire

    Endarire Ronald Rynnwrathi

    Joined:
    Jan 7, 2004
    Messages:
    819
    Likes Received:
    83
    There's already a Temple+ house rule that lets you bypass spell known requirements when crafting.

    The Rogue's Skill Mastery ability lets you take 10 on many skills at any time, except UMD. Ask Sitra about modifying things to allow taking 10 on UMD checks at all times.

    The New Warlock Handbook is the most thorough compilation of Warlock information and advice to date. It lists rules clarifications and recommended feats, items, invocations, etc. for Warlocks to take.

    From this handbook, my most requested Warlock-related items and feats are the ones listed in the guide (plus Precocious Apprentice), including the spells mentioned in the Wands section. PrCs I request are Eldritch Disciple, Eldritch Theurge, and Hellfire Warlock. (I've greatly liked the notion of being a Silverbrow Human Warlock3/Sor1/Eldritch TheurgeX for a combination of at-will self-sufficiency and spiky effectiveness.) These are things to consider after the general implementation for the Warlock is done, including a likely recolored entangle for chilling tentacles!
     
    Last edited: May 13, 2021
  3. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,317
    Likes Received:
    341
    I'll need some time to process everything, but in the meantime:
    - ok on the spell enum range. For filtering, I'd rather use spell rules properties, but that can be done later.
    - I think I've managed to free up data1, if that's still relevant. Pushing it to master now, please let me know how it works out (haven't tested yet)

    Edit: ah fuck, it's never that simple...
     
    Last edited: May 13, 2021
  4. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    186
    Likes Received:
    37
    No worries Sitra, it takes as long as it takes :) And this is for sure nothing that will stay the way it is, it's more like starting point, to showcase where my problems are :)

    data1 would be great but if it's a major headache maybe it's not worth the trouble.

    Could you elaborate the spell rules filtering? Sounds like the way to go, what parameter should I set? Subschools maybe?
     
  5. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,317
    Likes Received:
    341
    We can add new fields if need be.
     
  6. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,317
    Likes Received:
    341
    Should work now with current dev build. I tested by altering Marshal aura scripts to get auraEnum from data1 instead of the action enum.
     
    _doug_ and Sagenlicht like this.
Our Host!