Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dragon Discipile WIP #619

Draft
wants to merge 44 commits into
base: master
Choose a base branch
from
Draft

Dragon Discipile WIP #619

wants to merge 44 commits into from

Conversation

Sagenlicht
Copy link
Contributor

Created a Dragon Discipile Help File (WIP)
Created Dragon Discipile Feat text files (Heritage incomplete)
Started to work on Dragon Discipile Feats

@DudeMcDude
Copy link
Contributor

DudeMcDude commented Sep 16, 2021

Good start!
I think I'd unify all the heritages to one and make the effect depend on arg.
To get around the general issue of feature selection, for now you can have the player choose the heritage type via radial menu.
Also note the addmesh thing I added - I had the wings feature in mind 😉 It won't actually grant flight but maybe we could have it give faster movement speed.

Oh and blindsense is kinda redundant in this game I think. I suppose it could he integrated in spot checks, but meh.

@Sagenlicht
Copy link
Contributor Author

Good start!
I think I'd unify all the heritages to one and make the effect depend on arg.
To get around the general issue of feature selection, for now you can have the player choose the heritage type via radial menu.
Also note the addmesh thing I added - I had the wings feature in mind 😉 It won't actually grant flight but maybe we could have it give faster movement speed.

Oh and blindsense is kinda redundant in this game I think. I suppose it could he integrated in spot checks, but meh.

My plan was to store the Heritage in the Breath Weapon and in the Dragon Apotheosis Functions as an arg anyways, those are the only functions that care about the heritage. Saving the heritage as an arg makes it easier to add new dragon types in the future if really needed. Now I really like the idea to handle the heritage via a radial menu. This saves alot of feat headaches indeed :) Will do it that way.

@DudeMcDude
Copy link
Contributor

BTW, maybe the dragon heritage should have its own condition - for example if any other classes use that kind of stuff (e.g. Pathfinder Sorcerers).

@Sagenlicht
Copy link
Contributor Author

Sagenlicht commented Sep 17, 2021

Updated Help File (close to finished) and fixed typo
Added Radial to select Heritage (easily expandable if needed)
Removed Feat Heritage selection
Added Placeholder Breath Weapon Cone particles
Added Breath Weapon Radial and Action
Added Spell Dragon Disciple Cone Breath

Edit: Found my error

@Sagenlicht
Copy link
Contributor Author

Sagenlicht commented Sep 20, 2021

Added Ability Boost Feature.

Known Bugs:
Select Heritage Radial does not work as intended and chooses wrong Heritage
Breath Weapon is not executed

Missing:
Claws and Bite Attacks
Blindsense
Line Breath Attack

@Sagenlicht
Copy link
Contributor Author

Sagenlicht commented Sep 21, 2021

Added Cone Breath Weapon particles
Added Line Breath Spell
Added Line Breath particles for Acid

Know Bugs:
Spell Selection is messed up
Cone Breath Fire needs different smoke
Line Breath spell animation is not waiting till caster turns around

Missing
Claw and Bite attack
Blindsense
Line Breath particles for Cold, Elec and Fire

newSpellId = tpactions.get_new_spell_id()
spellPacket.caster_level = attachee.stat_level_get(classEnum)
tpactions.register_spell_cast(spellPacket, newSpellId)
tpactions.trigger_spell_effect(newSpellId)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you want the "turn around" animation to play beforehand, you should push an animation goal and move this part to the action frame. I think Arcane Archer has this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Will do, was actually surprised the caster doesn't turn automatically when I use target mode: ray. The caster e.g. turns automatically when you use target_mode: cone

@DudeMcDude
Copy link
Contributor

I think the claw/bite stuff needs engine level hooks. IIRC it looks up obj_f fields that are NPC only.

@Sagenlicht
Copy link
Contributor Author

I think the claw/bite stuff needs engine level hooks. IIRC it looks up obj_f fields that are NPC only.

Ok

@DudeMcDude
Copy link
Contributor

I think the claw/bite stuff needs engine level hooks. IIRC it looks up obj_f fields that are NPC only.

Ok

Oh, on that note, are there other things that grant natural attacks? I know polymorph does, but it does so through mimicking an existing proto entry.

@anatoliy-savchak
Copy link
Contributor

Wow, looks great!

Question - why have you decided to go with Breath Weapon as a spell implementation?
For example I did similar here: https://github.com/anatoliy-savchak/ToEE.ZMOD.ShatteredGatesOfSlaughtergarde/blob/master/modules/zmod_sgos_core/scr/tpModifiers/line_of_acid.py

But I feared that Supernatural ability should not be treated as spell. So no spell resistance nor AOO nor counterspelled nor dispelled.

@DudeMcDude
Copy link
Contributor

Wow, looks great!

Question - why have you decided to go with Breath Weapon as a spell implementation?
For example I did similar here: https://github.com/anatoliy-savchak/ToEE.ZMOD.ShatteredGatesOfSlaughtergarde/blob/master/modules/zmod_sgos_core/scr/tpModifiers/line_of_acid.py

Unless I'm missing something, the above is for AI with automatic target selection, which is not suitable for PC class obviously. Making this an action with a spell makes use of the UI picker infrastructure.

But I feared that Supernatural ability should not be treated as spell. So no spell resistance nor AOO nor counterspelled nor dispelled.

Yes, there ought to be a flag for this...

@anatoliy-savchak
Copy link
Contributor

Unless I'm missing something, the above is for AI with automatic target selection, which is not suitable for PC class obviously. Making this an action with a spell makes use of the UI picker infrastructure.

Sure. Thanks Sitra!

Look, my comment is not criticism per se. I saw this and now will try to accommodate such technique in my modules :)
Great work @Sagenlicht ! :)

@DudeMcDude
Copy link
Contributor

Unless I'm missing something, the above is for AI with automatic target selection, which is not suitable for PC class obviously. Making this an action with a spell makes use of the UI picker infrastructure.

Sure. Thanks Sitra!

Look, my comment is not criticism per se. I saw this and now will try to accommodate such technique in my modules :)
Great work @Sagenlicht ! :)

I don't know when you wrote that, but actually ai tactic "cast area" was broken until quite recently. I'm still not sure how well it works for cones actually.

@Sagenlicht
Copy link
Contributor Author

Updated help file. Help file is finished and only needs to be corrected for things that maybe gets change due to technical limitations (see below).

About the bite/claw thing. A few spells in the Spell Compendium would add claw/bite attacks as well. I am not aware of any other claw/bite attacks outside spells or non humanoid races as sources for such attacks. Claw attacks are usually two-weapon attacks and the penalty for it is usually reduced by the (in ToEE I belive non existing) https://www.d20srd.org/srd/monsterFeats.htm#multiattack feat.

Blindsense
What is your prefered handling @DudeMcDude for the Blindsense feat? Ignore it or give a spot bonus? I don't think the feat does much more. If a spot bonus is of no real relevance, I can simply drop the feat.

Wings
I added a feat for the wings, so the addmesh thing can be hooked.

Breath Weapon
All particle effects are done, only fire smokes needs to be blackend.
I am bit stuck on the facing for the breath weapon, besides that everything is working fine.

Spell Selection
I did reread the spell advancement of the Dragon Disciple and it is not as I thought it would be. Instead of gaining a simple advancement in the highest arcane casting class (which I assumed) it only gains bonus spells for an existing spell level, which can always newly be selected every time its applicable.
I am unsure if this is actually doable atm in ToEE?
https://www.d20srd.org/srd/prestigeClasses/dragonDisciple.htm

@anatoliy-savchak ty :)

@anatoliy-savchak
Copy link
Contributor

I am not aware of any other claw/bite attacks outside spells or non humanoid races as sources for such attacks.

Many monsters have these natural attacks. But unfortunately you cannot mix Natural Attack and Weapon Attack in ToEE\T+ ATM.
image

@DudeMcDude
Copy link
Contributor

DudeMcDude commented Sep 22, 2021

About the bite/claw thing. A few spells in the Spell Compendium would add claw/bite attacks as well. I am not aware of any other claw/bite attacks outside spells or non humanoid races as sources for such attacks. Claw attacks are usually two-weapon attacks and the penalty for it is usually reduced by the (in ToEE I belive non existing) https://www.d20srd.org/srd/monsterFeats.htm#multiattack feat.

Well I was wondering if it should be converted to a general thing rather than DD specific. I guess it can always be changed later though.

Blindsense
What is your prefered handling @DudeMcDude for the Blindsense feat? Ignore it or give a spot bonus? I don't think the feat does much more. If a spot bonus is of no real relevance, I can simply drop the feat.

Yeah I think we can take a pass on that.

Spell Selection
I did reread the spell advancement of the Dragon Disciple and it is not as I thought it would be. Instead of gaining a simple advancement in the highest arcane casting class (which I assumed) it only gains bonus spells for an existing spell level, which can always newly be selected every time its applicable.
I am unsure if this is actually doable atm in ToEE?
https://www.d20srd.org/srd/prestigeClasses/dragonDisciple.htm

I don't understand, is this different than Eldritch Knight?

@Sagenlicht
Copy link
Contributor Author

Sagenlicht commented Sep 22, 2021

I don't understand, is this different than Eldritch Knight?

Yes completely.
EK, as almost all PrC's gets normal spell progression. When EK gains a level it counts as getting a level in the "original" class. This means an EK 4 / Sor 1 can cast 2nd level sorcerer spells.

An Dragon Disciple only gets bonus spells no progression or even spells per day. A DD 10 / Sor 1 still could only cast 1st level spells only three per day.

All the DD gets is more spells known and in by raw he could choose every time he gets a bonus spell in which spell level he wants to have the new spell.
Example: A 5 Level Sor can cast 1st and 2nd level spells. When she gains the first level of DD she still can't cast level 3 spells (an EK would grant access to those) but she can choose to add either a 1st level or 2nd level spell to her known spells.
In addition to this, if character would be 2bard/4sorc and then gains DD levels she always could by raw choose to add a new level 1 bard spell or a new Sorc spell either 1st or 2nd level. I guess the 2nd example is more of an edge case but in theory it work like that.

And yes, I only noticed this while doing the help file, I just assumed it would work the way the other PrC's work :(

@dolio
Copy link
Contributor

dolio commented Sep 22, 2021

The Dragon Disciple bonus spells aren't known spells. They are per-day spell slots. You get to add one spell-per-day to any level you can already cast on those levels.

I think there's no way to give them in ToEE. The engine just hard-codes bonus spell slots from high ability scores as the only possibility. I made issue #542 a while back about it.

@Sagenlicht
Copy link
Contributor Author

Ah ty for correcting this @dolio. Ok they are not more known spells but more spells per day then. But yeah it is still not the normal PrC spell progression sadly :(

@dolio
Copy link
Contributor

dolio commented Sep 22, 2021

Yeah, it's surprisingly weak, since it doesn't seem like the rest of the class is really sufficient to make you a competent fighter.

Incidentally, I've noticed that the original (I think) designers misinterpreted Multiattack, too, since you mentioned it. What it's supposed to do is make 'secondary' natural weapon attacks hit at -2 (rather than -5). However, what they did instead was give monsters with Multiattack a bonus attack, and this ends up being an unarmed strike (dealing nonlethal damage) rather than an actual natural attack. I think the way natural attacks are specified (currently) just lets you pick arbitrary to-hit penalties, so they should have just picked -2 for creatures with the feat, and -5 for creatures without.

Two claws could be the primary natural attack, I think. They just happen not to be in the case of DD.

@DudeMcDude
Copy link
Contributor

Making explicit bonus spell feats for every class and spell level is pretty icky... why go down that route?

@Sagenlicht
Copy link
Contributor Author

Making explicit bonus spell feats for every class and spell level is pretty icky... why go down that route?

Oh I am unsure how to handle this properly, this was my first draft idea.

The Dragon Disciple could get a bonus spell for every level and spell class he chooses as he gains level. It is not limited to his highest class, arcane or whatsoever. So in theory a 2nd Level Cleric/2nd Level Sorc/1st Level Bard that then goes Dragon Disciple could choose to add a bonus spell to: Cleric Spell LEvel 0 or 1, Sorc Level 0 or 1 or to his Bard spell Level 0 every time he gets a bonus spell slot.

Now I am unsure how this Bonus Spell thing is needed by other classes or items like a spell storing ring, so my first idea was let's do some conditions everyone could use. But I am open for suggestions :)

Possible bug: I don't get evt_obj.caster_class to work, it runs into an error.
EventObjSpellsPerDay "spell_level", "base_caster_level" and "bonus_list" work fine.

@DudeMcDude
Copy link
Contributor

I switched the DD to use the Draconic Heritage Feat instead the radial workaround for handling the heritage.

This push also includes the heritage_feat_utils.py, which is required for interacting with heritage feats, and the DD now uses the Draconic Heritage Feat. I think this is the way to go, as it generalizes the heritage handling and was the reason why I started to work on all the heritage feats (I've done the Fey Line completly and alot of the Draconic are also already done), though I do not want to include them in the DD branch, will push them afterwards.

I also created a BreathWeaponModifier class to handle all upkeep work for breath weapons (charges, cooldown), as the Dragon Shaman also needs this (also to generalize)

Lastly this push also includes the Extra Exhalation Feat, so a DD can increase his Breath Weapon Daily uses. Have done another Breath Weapon Feat (Exaled Immunity), won't be included in the DD branch, will get a seperate push.

Will work on the bonus spells tomorrow, afterwards only the claw/bite thing is missing and the DD doesn't use any workarounds anymore :)

Excellent!

heritageElement = heritage_feat_utils.getDraconicHeritageElement(heritage)
saveDescriptor = getSaveDescriptor(heritageElement)
flags = evt_obj.flags
#This is not working properly, because as soon as the spell uses reflex_save_and_damage
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you give an example?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did a post in the co8 forum, found it easier to attach all needed files there.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be fixed now, please help test this :)

@Sagenlicht
Copy link
Contributor Author

Sagenlicht commented Dec 7, 2021

Possible bug: I don't get evt_obj.caster_class to work, it runs into an error. EventObjSpellsPerDay "spell_level", "base_caster_level" and "bonus_list" work fine.

@DudeMcDude could you please look into this, it keeps me from finishing the bonus spells. If I am doing something wrong there I apologize, but to me it seems not to work.

#I am unsure why evt_obj.caster_class is not working, can't get a print of it either
#print "evt_obj.caster_class: {}".format(evt_obj.caster_class)
#Disabeld for now due to this
#if not evt_obj.caster_class == classEnum:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added get_caster_class() method to the event object; I think the issue was that it was directly accessing an enum field which makes it typed in python, and this causes the issue

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks that fixed the issue!

DudeMcDude and others added 3 commits December 23, 2021 19:04
* Changed Bonus Spells per Day to be in line with general PrC handling in ToEE (highest arcane class is automatically selected)
*Minor Breath Weapon Fix
@Sagenlicht
Copy link
Contributor Author

I changed the spells per day behaviour to be in line with the general arcane caster class PrC handling in ToEE, so the spells per Day will automatically applied to the highest class and spell level. This simplifies the handling considerable. Should have done this in the beginning.

Bonus Spells per Day Dragon Disciple Feature is now completed and doesn't use any workarounds.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants