Warlock Class Beta

Discussion in 'General Modification' started by Sagenlicht, Mar 17, 2022.

Remove all ads!
Tags:
  1. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    Hey all,
    the last two weeks, I started to implement the Warlock class.

    I think I've done it the way @Sitra Achara wanted me to do it, doing all Invocations as spells.

    This is obviously a WIP, but I reached a point, where I want to get some feedback and offer the opportunity to beta test it. I decided to offer a beta for the Warlock without and with the Sagenlicht_Beta changes I made. The link at the bottom of this threat will point to the beta without the other beta stuff and the link in the Sagenlicht Beta threat will automatically include the Warlock updates as well.

    So how is the Warlock working atm?

    Eldritch Blast
    The Eldritch Blast gave me some headaches, as it is basically a spell that can be modified "on the fly" by Eldritch Essences and Blast Shapes. Here is what I have done to simulate this:
    Eldritch Essence spells are done as "stances". You cast it, it will modify the Eldritch Blast with its effect as long as you do not activate a new Eldritch Essence or reset it. Resetting is done via Class Radial.

    Eldritch Blast Shapes are handled as different spells. If you want to use an Eldritch Cone, please use the spell Eldritch Cone. An activated Eldritch Essence is automatically applied.

    Invocations
    Invocations do work the same way as spells, they are done as spells "behind the scenes".

    Invocations should be at will, this not something I can do in Python, this is something for @Sitra Achara or @_doug_ :) I have set the spells per day to 89 (plus any bonus spells you would get from a high Charisma score). Why didn't I raise it to 100+? I did test it with 969 spells per day, but this can lead to game crashes if you open the char sheet and go to the spells tab and close it. So in theory, if you do want to raise the spells per day to above 100 until the unlimited thing comes to T+, you can do this locally but you do it on your own risk :)

    Another thing I didn't get to work for this first beta is the spell school. I initially wanted to create a new spell school "Invocaton" and then handle all invocations from there. I thought adding it to spell_structs.h and to constants.py is enough, but when I did test it, it didn't work and I found following error in the log:
    That's where I decided, I need @Sitra Achara help in adding that friggin spell school. Anyways, at the moment, all Invocations are handled as Evocation spells in the game. I do need to assign a school to them, else you can't select the spells when leveling up as they are greyed out, if they have an invalid spell school or spell school None (invalid spell schools end up in setting spell school to 0). If you plan to keep the savegames of the Warlock Beta for later on, please do not use SF:Evocation as I really hope to get the school up and running soonish with Sitras help.

    Now before @Endarire comes in and tells me that Invocations are spell like abilities and not spells and should not benefit from normal Spell Focus, metamagic etc. but need to use their own feats (Spell Focus: Ability, spell like metamagics, ...) I do know this and no the way this will be implemented in T+ is: Invocations will use the existing spell feat structures... Way less work for in the end similar results.

    Class Features:
    • Detect Magic (at will): Working
    • Damage Reduction: Working
    • Deceive Item: Not working, I don't think I can do take 10 on UMD rolls in Python. Correct me, if I am wrong
    • Fiendish Resilience: Working
    • Energy Resistance: Warlock gets 2 Energy resistances at 10. I can't grant two bonus feats and class features are not ready yet, so I decided to grant 1 Energy Resistance at 10 and the second on 11
    • Imbue Item: Not working and I am not sure, if I could do this in Python.
    Eldritch Blast Shape Invocations
    Eldritch Blast
    Eldritch Spear
    Eldritch Chain - known Issue: too many targets
    Eldritch Cone
    Eldritch Line
    Eldritch Doom

    Eldritch Essence Invocations
    Frightful Blast
    Sickening Blast
    Beshadowed Blast
    Brimstone Blast
    Hellrime Blast
    Bewitching Blast
    Noxious Blast
    Vitriolic Blast
    Hindering Blast
    Binding Blast
    Penetrating Blast - Known Issue: The Essence modification works fine, but the tooltip of Spell Resistance will not update and show the non lowered amount. This is a visual bug only and it is not python releated. Tested on a Vrock.

    Invocations
    Beguiling Influence
    Breath of the Night
    Dark One's Own Luck
    Entropic Warding
    Leaps and Bounds
    Miasmic Cloud
    See the Unseen
    Soulreaving Aura
    All Seeing Eyes
    Charm (renamed to Warlock Charm) - known Issues: You can control unlimited targets atm. Don't do it!
    Curse of Despair
    Flee the Scence - known Issue: Range of the spell
    Walk Unseen
    Cold Comfort
    Ignore the Pyre
    Enervating Shadow

    Warlock specific Feats:
    Spell Focus (Invocation)
    Greater Spell Focus (Invocation)

    Known Issues
    • All spell known Issues are listed in the spell list.
    • No spells have sounds, sounds will be added later on
    • Some spells have placeholder particle effects (heroism)
    • Spell Exchanges on Warlock Level 6, 11, 15 are limited to matching levels. Needs to be tackled engine wise as well
    Link to the beta: https://ci.appveyor.com/project/templeplus/templeplus/builds/43119958/artifacts
     
    Last edited: Apr 4, 2022
  2. Endarire

    Endarire Ronald Rynnwrathi

    Joined:
    Jan 7, 2004
    Messages:
    953
    Likes Received:
    112
    Thanks for warning me about your workaround implementation!

    As GM, I have allowed Spell Focus to work on SLAs since they function as spells for many purposes, unlike supernatural abilities.

    What about using Druid or Monk as a base since each of them has alignment requirements and is core?
     
  3. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,613
    Likes Received:
    537
    Just to verify one thing: Are Warlock Invocations completely alien to spell schools?
    For example, let's say some defensive effect counters evocation or illusion spells, then this information wouldn't be missing by using the Invocation school?
     
  4. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    I think, this is a pretty good roundup about the Warlock class and its interaction with spells and PrC's : https://forums.giantitp.com/showthread.php?520756-Warlock-Guide-for-Rules-Clarifications-3-5e

    If the invocation does not mimic an existing spell, then that invocation is not part of any spell school. If the spell does mimic an existing wizard spell, then such defensive effects should apply. Still the SF of Invocation should apply. But there are not many mimics to begin with, and most of them have either a blocking descriptor like Mind-Affecting or are cloud effects. I can't think of an invocation, that I have done so far, where we would have a problem.

    I did add Descriptors when needed to the rules file (e.g. Mind-Affecting).

    At the moment I think, the biggest problem is not the interaction with defensive effects. By doing Invocations as spells opens up all Arcane Prestige Classes that require "able to cast level x arcane spells", which the Warlock would not classify for (also listed in the above link).

    A Warlock can classify for Arcane Trickster (requirement of being able to cast at least 1 level arcane spell), but it would not be able to classify for Arcane Archer (requirement able to cast level 1 arcane spells). That is actually a bit tricky to handle in PnP already...

    But again, I do not think, that invocation interaction should be a huge concern at all as long as the descriptors work, as Mind-Affecting is the huge one to be aware of, at least in my eyes. And the descriptors are not tied to spell schools
     
  5. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,613
    Likes Received:
    537
    Ok, then I'm not so sure it's a good solution after all, even if 99% of the time it's transparent.

    The only usage is when checking the spell entry for this, right? I could as well add a field / property is_invocation. On the C++ side, I've already added a "SpellEntryExt" struct to extend spell entries with extra props/fields beyond vanilla, so we don't have to piggyback off of existing ones.

    About the arcane stuff, why do warlock spells / spell lists count as arcane? IIRC that's something you define.
     
  6. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    The problem is if there is no spell school set, it is impossible to learn the spells during level up. At least right now.

    Invocations are technically not spells but they are an arcane source. And Warlocks can qualify for certain arcane requirements. So I think it would lead to more problems not to set them to arcane. Which means, the spells need a spell school or some work on your side.

    If a spell school is not needed to get everything to work, a is_invocation property is totally fine with me. I've set the enum range for Invocations to 2300 - 2400 so they do have a unique enum range already.

    In the end if learning spells, Metamagic, spell penetration and spell focus work, all is fine :)
     
  7. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,613
    Likes Received:
    537
    I have to make engine adjustments either way - for example, spell school is tied to spellcasting animations. Setting it to 9 causes it go out of bounds.
     
  8. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    Yeah, though I hoped that a spell school would be less work.

    I found the animation thing and thought simply adding a line that if the spell school is invocation simply use animation evocation (or whatever existing school animation fits the best) is fixing that.

    I know, this leads to spaghetti code. Which is never a good idea in the first place. So I am aware that simply adding a spell school isn't a good long term solution.

    In the end, I am sure you have the better overall understanding how to handle this problem. If there is a good way to get this working in a way that would be expandable I am all for it.

    I know, this is future stuff, but right now I think that ToB maneuvers might also best be handled as "spells". They are mechanical so similar to spells, that using that infrastructure seems a good idea.

    Besides the learning problem and the infinite spells per day uses here are my other problems I am facing right now.

    Spell Labeling.
    If I understand the system correctly, spell_label_0 and upwards are internally used for labeling the spell grades. There is no way to change this on the Python side as the labeling is not taken from a mes file as far as I can tell.

    Spell exchanges
    I activated spell exchanges for the Warlock, but it is limited right now the way normal spell classes like Bards, Specs or Favored Souls handle this: Exchange a spell from the exact de spell level. Warlocks (and ToB maneuvers) are not limited to this rule. A Warlock reaching level 11 could swap a Least Invocation for a Lesser Evocation.

    Anyways, I think I've created a good starting point, sadly the C++ side is nothing where I am good help to you :(

    I did add comments in warlock.py and class0xx_warlock.py for you, where I believe I need some assistance from the C++ side.

    I will finish the Invocations next week (except Dark Invocations, they are so high level that I will not do them right now) and gather feedback on my bugs :) Afterwards I think I am pretty finished on the Python side.

    Oh and I'd like to reemphasize the Alignment problem. This is something I'd like to see generally fixed in a way it can be handled Python wise. At the moment, I think it is impossible to handle alignment restrictions at character creation which leads to impossible characters. Reason for this is, that the game let's you chose your class at creation before you have to pick your alignment, so the alignment query in classxx.py isn't working at creation. Which is bad, not only for the Warlock but for several classes I'd like to do. I assume that the Monk and Paladin classes are hardcoded for this.
     
  9. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,613
    Likes Received:
    537
    Say, when are you usually available for modding? Maybe we can coordinate live sessions where I can guide you and you'll do it on your own.
     
  10. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    I think it may be easier, if you tell me your times an I'll try coordinate my times arcondingly.

    But basically I'll do about 2-3 hours a day when my kids are in school.

    That's not a time frame I assume is doable for you, so I will simply add some evening time to this :)
     
  11. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,613
    Likes Received:
    537
    Yeah, let's coordinate in PMs.
     
  12. Pygmy

    Pygmy Established Member Supporter

    Joined:
    Oct 8, 2010
    Messages:
    679
    Likes Received:
    72
    I've pinched the modification that Sitra Achara used to extend Resonance to Sorcerers to produce a workaround proof of concept to grant Warlocks an infinite number of invocations a day. So far I have only modified Eldritch Blast and Sickening Blast for test purposes but can easily modify others as my trial warlock levels up.

    Feel free to shoot the concept down

    I have reduced all the 89s in the invocations per day table to 1s but cannot think of a way to eliminate bonus spells/invocations
     

    Attached Files:

  13. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,613
    Likes Received:
    537
    Thanks pygmy for the workaround, but this should really be handled at the engine level :)

    I can add a property that marks the class as at-will caster. That should be pretty easy I think. The question is whether that's granular enough - could there be situations where some subset of a class's spells are per day, and others at will? Or something else of the sort?

    One thing I could think of is how Pathfinder has infinite cantrips. But that could as well be hard coded I suppose.

    I know that AI should sometimes have at will spells that they currently don't have, but at least that was somewhat justified by how the AI works. So that's not so interesting either.
     
  14. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    I can't think of such a situation in D&D 3.5, so a general at will solution should be good :)
     
  15. Endarire

    Endarire Ronald Rynnwrathi

    Joined:
    Jan 7, 2004
    Messages:
    953
    Likes Received:
    112
    What about making invocations with no spell school universal?

    complete Arcane pre errata said Eldritch Blast had a spell level progression equal to that of a same level single class Wizard. May they be useful.

    Also, certain invocations count as a spell of X level.

    There’s a metamagic feat that grants at will casting of affected spells.
     
Our Host!