Spell Compendium Mod

Discussion in 'General Modification' started by Sagenlicht, Feb 28, 2021.

Remove all ads!
  1. Pygmy

    Pygmy Established Member Supporter

    Joined:
    Oct 8, 2010
    Messages:
    766
    Likes Received:
    83
    Have you tried using TempleplusConfig to raise the level limit?
     
  2. anatoliy

    anatoliy Established Member

    Joined:
    Feb 18, 2017
    Messages:
    635
    Likes Received:
    201
    I have a request as well. I propose to improve Command Clr 1 spell, which does nothing currently. Instead of nothing do as it is written in PHB. Currently I added simple Prone as workaround in my mods (for NPC sake). But would prefer proper implementation.

    Also if caster is NPC please query "sp-Command option preference" for options: Approach (1), Drop (2), Fall (3), Flee (4) or Halt (5).
     
  3. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    I use the command levelup in the console. Works fine for me. It's a level a time
     
  4. dolio

    dolio Established Member Supporter

    Joined:
    May 30, 2005
    Messages:
    356
    Likes Received:
    85
    I actually tested in game that solid fog doesn't disable 5-foot steps.

    I think the code you pasted would disable other movements, because I've played around with similar stuff. You can do it in python with ET_OnTurnBasedStatusInit, the code for what you pasted is something like:

    Code:
    def DisableMovement(attachee, args, evt_obj):
      evt_obj.tb_status |= TBSF_Movement
      return 0
    
    However, what that does is make it as if the character has already moved that round, I believe. That means they can't do any more movement (I think they might be able to do other things that cost move actions, but not ones that actually move). I don't think you can merely disallow 5-foot step with those flags, because the movement ones are keeping track of what has already been done, not what is allowed. At least, I haven't found a way.

    I think ActionCheck_5FootStep is the more likely function to disallow 5-foot steps.
     
  5. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    @dolio
    You sure, that it does not disable 5 foot steps? In my tests it seems to actually do it.

    I can follow your code logic, that it may set that you already moved that turn once.

    But this would automatically disable 5 foot steps, as you can't take a 5 foot steps when you already moved.

    This would explain why you can move only once in solid fog.

    In my Acid Fog version, you can also move only 5 steps, but you can do it twice (spent both actions to move). I think this is in line of what the rules should be, as fog limits to 5 foot, but not in actions. So I think you may use both actions to move.

    While discussing differences, vanilla Solid Fogs Concealment gets cancelled by True Seeing. I don't think this should be the case, in TS description, Fog is mentioned as an exception. So I implemented it the way, Acid Fog concealment is not canceld by TS. Is this wrong?

    @Shiningted
    I will look into it :)
    @anatoliy
    Will look into it :)
     
    anatoliy likes this.
  6. dolio

    dolio Established Member Supporter

    Joined:
    May 30, 2005
    Messages:
    356
    Likes Received:
    85
    I guess I didn't test in a way that would trigger that particular hook. However, if that is the mechanism, then it's not disabling all possible 5-foot steps.

    For instance, you can cast solid fog such that the area includes the caster, and then the caster can make a 5-foot step, even though that should no longer be possible (this is the scenario I tested, because others are more annoying to set up).

    Anyhow, maybe I'm just mis-remembering what all the combinations of turn-based flags do. However, I thought the one set in that code would render the character unable to do any movement, just giving an 'already moved' error, which isn't what solid fog is supposed to do. If you want to try it out, though, the python code I wrote above should be similar to the C code (the C code was wrapping it in a test for some reason, though).

    It also seems like this could be implemented by just reusing the solid fog condition (if it works the desired way), and having a second aura condition for the acid damage. That was, for instance, how I was going to suggest implementing chilling tentacles if I actually get black tentacles working. It'd be kind of a waste to copy-paste all the black tentacles code just to add cold damage to the area of effect. This assumes there isn't some discrepancy between the two effects, of course, like area of effect.

    Anyhow, assuming ActionCheck_5FootStep actually does what I think it does, it might be better to fix that than to muck with the turn based flags anyway.
     
  7. Endarire

    Endarire Ronald Rynnwrathi

    Joined:
    Jan 7, 2004
    Messages:
    987
    Likes Received:
    122
    @Shiningted
    In the T+ config program, did you set your max level to 20+?
     
  8. dolio

    dolio Established Member Supporter

    Joined:
    May 30, 2005
    Messages:
    356
    Likes Received:
    85
    @Sagenlicht I did some more testing, and after a lot of faulty tests, I figured out what you wrote will work. The correct code is:

    Code:
    evt_obj.tb_status.flags |= TBSF_Movement
    in the ET_OnTurnBasedStatusInit hook.

    Technically that skips disabling the 5-foot step of the caster on the round it's cast (if they're affected), but I guess that's probably not a big deal for the time being.
     
  9. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    Thanks for investing the time @dolio

    I would have a few questions about Acid Fog / fog spells in generall.

    1. True Seeing.
    Vanilla SF concealment gets negated by TS. I don't think this is correct according to the SRD: https://www.d20srd.org/srd/spells/trueSeeing.htm
    Due to this, my Acid Fog does not query for TS. Is this correct or not? I am not a rules laywer :)

    2. Render Range Attacks useless
    Vanilla SF reduces ranged damage to 0, I am unsure why it does not set the concealment to 100 for ranged attacks and avoid them in that way. This is what I've done in Acid Fog (marked in the code). This seems more logical to me. Do I miss something there? If my idea is wrong I would need to change it.

    Attached is the latest version of sp-Acid Fog.
     

    Attached Files:

  10. Endarire

    Endarire Ronald Rynnwrathi

    Joined:
    Jan 7, 2004
    Messages:
    987
    Likes Received:
    122
    Fog grants concealment and trumps true seeing.
     
  11. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,627
    Likes Received:
    538
    Hmm, I can think of one case where the difference might matter - Aracne Archer seeker arrow/phase arrow.
     
  12. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,627
    Likes Received:
    538
    The indication for having made a 5ft step is actually TBSF_Movement2, but this will also prevent taking a 5ft step since the game regards it as having performed a move action this round.
     
    Sagenlicht and anatoliy like this.
  13. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    You are right, these two would ignore Fog Concealment, but aren't those actions labeled as ranged attacks and thus will also reduced to 0 damage by SF (would be wrong as well)?

    Code Snippet from Seeker Arrow:
    Code:
    def SeekerArrowPerform(attachee, args, evt_obj):
        cur_seq = tpactions.get_cur_seq()
        arrowTgt = evt_obj.d20a.target
        min_dist = 10000
        #print "Seeker arrow: target is " + str(arrowTgt)
    
        # roll to hit
        # cover bonus won't be applied because it doesn't appear in the ActionCheck callback
        # TODO: apply a negator condition for the concealment chances
        evt_obj.d20a.flags |= D20CAF_RANGED
        evt_obj.d20a.to_hit_processing()
        isCritical = 0
        if evt_obj.d20a.flags & D20CAF_CRITICAL:
            isCritical = 1
    Edit: After thinking for min about it, does ET_OnGetDefenderConcealmentMissChance has evt_obj.data1?
    If yes, this might be the easiest solution to the concealment problem of the Seeker/Phase Arrow and then Acid Fog would be the better implementaion of the fog concealment problem. Normal Blur etc. can simply query for TS and if you really suppress all concealment you can do something like:
    Code:
    def suppressConcealment(attachee, args, evt_obj):
    if evt_obj.data1 == "Seeker Arrow" #String doesn't work I know; just to show my idea behind it
    capValue = 0
    capType = 19
    bonusMesId = xxx
    evt_obj.bonus_list.set_overall_cap(1, capValue, capType, bonusMesId)
    return 0
    Thanks for pointing this out Sitra, will use the correct flag then :)
     
    Last edited: Jun 12, 2021
  14. Sitra Achara

    Sitra Achara Senior Member

    Joined:
    Sep 1, 2003
    Messages:
    3,627
    Likes Received:
    538
    Actually I think SF should protect against Seeker Arrow, hence why the 0 damage would make more sense.

    About concealment negation, that's not the way to do it. It would be better to add some concealment negation query to the to-hit processor.

    Speaking of which. I mentioned converting game logic to python - I think the to-hit and damage roll functions are prime candidates for translation. How about it?
     
  15. Sagenlicht

    Sagenlicht Established Member

    Joined:
    Apr 14, 2004
    Messages:
    338
    Likes Received:
    119
    Again I am no rules lawyer, but why would Seeker or Phase Arrow not ingore SF? https://www.d20srd.org/srd/prestigeClasses/arcaneArcher.htm
    I mean Seeker arrow travels around corners, I think Fog shouldn't be a problem then :) LoS can't be a problem as well, when a corner is no obstacle.

    Ok :)

    Ok :)
     
Our Host!