Jump to content

Arcane Specialties (new mage-sorcerer-bard mod project)


Recommended Posts

Introduction

Hello everyone! This is my first post in this awesome community and I'm not sure if this is the appropriate section to introduce new projects, so you will excuse me if I got it wrong...
I would like to discuss with everyone interested about some ideas on how to improve (in my opinion at least) the arcane classes and kits (mainly mages, but possibly sorcerers and bards too). Every kind of feedback and suggestion is welcome (either on flavour, balancing or technical implementation), so feel totally free!


Structure and Compatibility

The mod will be split into several components mutually independent (one component for each class, plus various components for general tweaks). It is also intended to work seamlessly with Spell Revisions (which I found really good), so I don't plan to modify any spell effect nor add any new spell, letting SR take care of it.
The main compatibility issue will be with Tome and Blood, covering it roughly the same ground of this mod, resulting in various clashings and redundancies (I'll address this topic more extensively later on). Concerning the bard, I'm not sure I will touch it at all (both Rogue Rebalancing and Might and Guile take care of it) but if so there maybe will be some incompatibility with those mods too (I'll discuss about this in the bard section).


Main Motivations and Goals

Playing vanilla specialist mages, I've always found underwhelming that effectively they are defined mainly by which spell school they can't access, instead of beeing better versed in their own school, so I wanted to find a way to rettify this lack.
Moreover I don't like how sorcerers follow the same rest mechanism of mages, being their spells originated from innate power instead of studies and preparation, so I'd like for them to use some sort of mana pool for their spell casting.
From this informations alone you can already derive that pen & paper fidelity is no concern of mine, so if you are a dungeons & dragons enthusiast this mod is not for you...


Mage Class Component

My main objective for mages is to make sure that specialists are encouraged to use primarily the spells belonging to their school, making this spells more advantageous for them, while mantaining the generalist mage a viable and effective choice.
Generalist Mages

I think I need to invert the bonus spells advantage, giving it to generalist mages instead of specialists: this will contribute to represent generalists greater versatility, in opposition to specialists being more powerful in their specialties. That's all for generalist mages: equal access to every school and one extra spell slot per spell level.


Specialist Mages

Regarding specialists it is not as simple: forcing them to use their specialty spells it's not doable (unless I limit their access to only one school, or maybe I could use a workaround like giving them a bunch of spells from their school as innate abilities instead of as many spell slots), but more importantly it's not desirable either... I think it would be preferable to give the player the carrot instead of the stick, letting him make his choices freely.
Have given the extra spell slots to generalists allows me to find a more "school specific" main advantage for specialists: this main advantage, inspired by Faiths and Powers sphere system, will be an equivalent focus access to spells in the specialist school, which means they will be able to memorize spells belonging to their school in a spell slot one level lower then usual (2nd level spells in 1st level slots, 3rd level spells in 2nd level slots and so on).
Regarding the main disvantage, I'm not sure whether to keep the prohibited opposing school, or treating the opposing school like F&P minor access spheres, letting the specialist learn spells in that school from the 4th level down and memorizing them in a spell slot one level higher. Maybe I could do both, creating an opposition system where each school has one prohibited school and two minor access schools.
I could also increase casting level by one every four levels (5 at 4th, 10 at 8th, 15 at 12th and so on) for the choosen school spells and, if I don't completely deny access to the opposing school, decrease it in the same way (3 at 4th, 6 at 8th, 9 at 12th and so on) for that school.
Let me know what you think about the balancing of this options.
In every case I will modify the school opposition scheme so the (main) opposing schools will reciprocally be like this:
Invocation - Conjuration
Illusion - Divination
Necromancy - Enchantment
Alteration – Abjuration
I will keep the learning advantage / disadvantage untouched (+15% in the specialization school, -15% in every other school), but I could modify the learning mechanism in a specific component (I'll address this topic later on).
Lastly, I think I want to remove the +2/-2 bonus/penalty to saving throws which give an unfair advantage to some specialists that make use of a higher number of save dependant spells.
I could mantain it for the more appropriate specialist (which I think is Enchanter) if I can give every other specialist an equivalent more fitting advantage... suggestions are welcome! For now I didn't think of any of it, because I'm not sure I could afford to give another specific advantage to specialists without making them unbalanced, maybe the best thing is to simply remove those saving throws modifiers and let them live with the other advantages


Wild Mages

Wild mages are a weak spot for me, mainly because I really don't like them: I find all that wild surge thing very silly, at least in a video game where the player can at will make use of the "mighty reload spell" to compensate... for short they are both annoyingly random and utterly overpowered (specially at high levels where the chance of a bad surge is extremely reduced). Nonetheless I think no one would ever use a wild mage in a no reload playthrough.
Said this, lot of people seem to like wild mages, so I can't simply remove them from the game and call it a day (altough it's very tempting).
To integrate them with my revised specialists concept, I think i could remove the extra spell slot and give them instead focus access to every spell school (meaning that they will memorize every spell in a one level lower spell slot), while rising their wild surge probability to something like 25% (I don't know if that's technically feasable), but granting them constantly the level based bonus for determining the wild surge effect. This way players who like randomness will ejoy the wild surge occourring one time over four, while the rest of us can simply not play wild mages at all... Moreover, i would split Reckless Dweomer (the main source of wild mage imbalance) into three different spells: a level 1 "Minor Nahal's Reckless Dweomer", a level 4 "Nahal's Reckless Dweomer" and a level 7 "Major Nahal's Reckless Dweomer", each one allowing the wild mage to cast any known spell from any level up to its level plus two (levels 1 to 3 for the minor one, levels 4 to 6 for the base one, levels 7 to 9 for the major one) with a 100% wild surge probability.


New Specialist Level 9 spells

Although I know that I've stated that I don't plan to add any new spell, that was a half-truth... The focus system leave me with two problem:

  • Level 1 spells don't have a level 0 spell slot to fit in.
  • Level 9 spells fitting in level 8 slots leave the specialists with no spell of their school to fit in level 9 slots.

While the first problem can be solved (in absence of a better solution which I can't think of) by simply leaving level 1 spells in level 1 slots alongside the level 2 ones, the second has no other solution than to add at least a new level 9 spell for each school to give exclusively to the specialist of that school. This problem is particularly evident in the special case of the wild mages that, getting focus access in every school, would be left with no level 9 spell at all. With this solution they can instead get access to every special spell (which is a huge boost).
For now I didn'n think of any of those special spells, and I very much would like if some of the people that are currently working on Spell Revisions could give me their help and/or suggestions on how to set them up in a way that fits well with the Spell Revisions design criteria.

 


Sorcerer Class Component

My objective for sorcerers is to give them a completely different mechanism for casting their spells compared to the standard one, that will belong only to mages.
To explain why I want to do this, I need to clarify that I personally find vanilla implementation of the sorcerer sort of a better mage: he has simply more spells and he don't really fit a different role in the group. His supposedly limitation in the known spells is rarely an issue at all (although Spell Revisions's more balanced spells partially rettify this). My impression is that most of players uses mages only because of some collateral reasons (there are pratically no sorcerer npc - if we exclude Baeloth which is kind of cheesy - and sorcerers can't dual-class nor multi-class).
Plain Sorcerer

The core idea for my new sorcerer class is to create a mana pool from which he can draw to obtain the power he needs, consuming a portion of that in the process. That pool will slowly regenerate itself over time.
Although it's not possible to create a whole new mana system due to engine limitations (I have no way to display the mana pool status), I think I could utilize some sort of “catalyst item” to circumvent this limitations, so the new sorcerer would be like that:

  • Learning process and amount of known spells unchanged.
  • The sorcerer will need a personal catalyst item to access his spell casting ability (this item will display information about the mana pool)
  • The sorcerer will start with two maximum mana points, gaining two addicional points per level of experience.
  • Charisma will grant the sorcerer additional mana points per level of experience (+1 at 16, +2 at 19, +3 at 22, +4 at 25)
  • No more limited spell amount per rest, each spell will be usable at will.
  • Each spell will now consume an amount of mana points equal to its spell level.
  • The sorcerer will regenerate 12.5% of his mana pool per hour, so resting will always replenish it.

While I'm still not sure of the specific numbers in this system and I probably will need to fine tune them, I believe that it would be intresting to have a new kind of arcane pratician that can dispose of his spells in a more flexible fashion, choosing between the option to cast a very high amount of low level spells, a limited amount of high level spells, or anything in between. Moreover, the constant mana regeneration will make the sorcerer less rest dependant compared to the mage.


Dragon Disciple (and mods's sorcerer kits)

I think I could replace the "one less spell per rest" disadvantage (whenever present) with a smaller mana pool (1 base points per level), leaving everything else untouched.
If I would engage in a Dragon Disciple revisitation (which is not my priority) I think it would be cool to give them a dragon shapeshift ability (using the wyvern paper doll, not the dragon one!), but this is not a trivial task and I need to focus my efforts right now.

 


Bard Class Component

My main concern with bards is that it is not clear whether to consider them an arcane class rather than a rogue class. For this very reason, multiple mods that are not focused on arcane praticians address the bard class in various ways, often doing a very good job. I'd like to tweak them from the spell casting perspective without undo other mods achievements, but I fear that would be an integration nightmear...
If I could solve this basic problem, my intent would be to alter bards spell schools access like this:
Plain Bard

 

  • Focus access to Enchantment school.
  • Standard access to Illusion and Divination schools.
  • Minor access to Conjuration, Alteration and Abjuration schools.
  • No access to Invocation and Necromancy schools.

 


Blade

 

  • Focus access to Illusion school.
  • Standard access to Alteration and Abjuration schools.
  • Minor access to Conjuration, Divination and Enchantment schools.
  • No access to Invocation and Necromancy schools.

 


Jester

 

  • Focus access to Enchantment school.
  • Standard access to Necromancy and Abjuration schools.
  • Minor access to Illusion, Conjuration and Divination schools.
  • No access to Invocation and Alteration schools.

 


Skald

 

  • Focus access to Alteration school.
  • Standard access to Conjuration and Abjuration schools.
  • Minor access to Illusion, Divination and Enchantment schools.
  • No access to Invocation and Necromancy schools.

 


I would leave everything else untouched, letting other mods, such as Rogue Rebalancing and Might and Guile, take care of the remaining bard (and relative kits) features.


Cantrips

I find cantrips a very useful addition, granting to very low levels arcane praticians something to do in every fight, apart from missing the enemies with their weapons.
I will create a specific cantrip for every spell school, giving each one to the appropriate specialist, plus one for every sorcerer kit (for now only the Dragon Disciple, but if and when i will decide to include explicit support to kit from other mods, each one will get a dedicated cantrip). Generalist mages and plain sorcerers will select from the specialists's list which one they prefer, but they will get only a minor version of it. Wild mages will get the standard version of a cantrip randomly selected from the specialist's list. Bards will get a cantrip accordingly to their kit (Fascinate for Plain Bards, Lifesteal for Jesters, Disappear for Blades, Winged Feet for Skalds). Every cantrip will be granted as innate ability at level one.
Here is the currently planned list of cantrips and their effects:
Magic Bolt (Invocation)

Same as Magic Missile, but less damage and no addicitional missiles. Spells that negate Magic Missile will also negate Magic Bolt. Usable once per round.
Standard: Deals 1d3+1 magic damage.
Minor: Deals 1d3 magic damage.


Glimpse (Divination)

Same as Farsight, but lasts only three seconds and caster cannot move nor do any action for one round. Usable once every five rounds. This cantrip is intended only for scouting purpose, definitely not for summons remote control or out of sight spell casting in general, so I need to make sure that it isn't exploitable or replace it with something else... what do you think?
Standard: Normal Farsight area of effect.
Minor: Half Farsight area of effect (I'm not sure I can modify Farsight area of effect, if not I must find another differenciation method)


Disappear (Illusion)

Same as Invisibility, but casting target limited to self, duration limited to one round and caster cannot move nor do any action while invisible.
Standard: Usable once every five rounds.
Minor: Usable once per turn.


Summon Rats (Conjuration)

Summons a number of rats. Every rat can halve enemies movement rate in a small area around itself on a failed save versus breath and deal one damage on a succesful hit. The rats last for five rounds or until killed. Usable once every five rounds.
Standard: Summons two rats.
Minor: Summons one rat.


Lifesteal (Necromancy)

Same as Larloch's Minor Drain, but less damage. Usable once per round
Standard: Deal 2 damage and restore 2 hit points.
Minor: Deal 1 damage and restore 1 hit point.


Fascinate (Enchantment)

Same as Charme Person, but works only on neutral characters and lasts only for one round. Target doesn't turn hostile after effect expires. Charmed people can be pickpocketed with a very high bonus (this tweak would be nice even on regular Charme spell, but editing of spells is beyond the intent of this mod). Usable once per round.
Standard: Target saving throw bonus +4
Minor: Target saving throw bonus +6


Winged Feet (Alteration)

Caster gains additional movement rate for two rounds. Usable once every two rounds.
Standard: Movement rate x 2
Minor: Movement rate x 1.5


Novice Globe of Invulnerability (Abjuration)

Same as Globe of Invulnerability, but only protect from first level spells. Usable once per round.
Standard: Lasts for three rounds.
Minor: Lasts for two rounds.


Fire Puff (Dragon disciple)

Same as Burning Hands (Spell Revision AOE version), but less damage and not scaling with levels. Usable once per round. Deals 1d3 fire damage.

 


General Tweaks Components

In this section I will talk about some general tweaks I'd like to implement as independent optional components. Most of them are already present, in the same or a bit different form, in the Tome and Blood mod, so I'm uncertain if redoing that job is really needed. Due to the conceptual incompatibility between T&B and the main components of this mod though, I think it would be practical for players to have the option to select only one of this mods, discarding the other altogether. For this reason I think I'll redo them, taking the opportunity to do them my way when I feel it's needed.
Armored Casting

I like the way Item Revisions takes care of this issue and I don't foresee any incompatibility between IR and this mod, so I don't need to do anything but invite everyone to make use of it!


Find Familiar

There are a number of things I want to do about familiars, one of that is easy, the others are more challenging... The easy one is converting Find Familiars in an innate ability, giving it to mages and sorcerers at level one. Other than that, I would open the possibility to have familiars to every character (not only Gorion's Ward). I would also remove the permanent constitution penalty on familiar death, which I find most likely a reload condition, replacing it with a one week lasting constitution penalty and the inability to recast Find Familiar for the same amount of time. Hopefully this will be more acceptable, leading "regular" players to actually experience it, and "no reloaders" to let those poor familars out of their bags sometime! Lastly I'd like to modify the familiars themself, linking the familiar type to the mage specialization, the sorcerer kit, or simply the player selection (in case of generalist mages or plain sorcerers) rather then to the character alignment. I must confess that for now I didn't spend any time thinking of new familiars, but I'd like to do it sooner or later...


Metamagic

Borrowing the term from Tome and Blood, with metamagic I refer to the various sequencer and contingecy spells: I like that T&B converts them to innate abilities, but I don't understand the reason of that complex "learning-casting-resting" unlocking mechanism... I would simply grant them to mages at appropriates levels. Maybe this is due to some technical limitations I didn't think of, if so let me know!


Innate High Level Ability

Like the title said, I will convert spell HLAs into innate abilities, freeing 9th level spell slots for actual 9th level spells. Every spell HLA would be selectable multiple times for additional uses per rest. Maybe I will also create new school specific HLAs, if I can find some good ideas.


Crafting

I partially like how Tome and Blood address this issue, although I would limit it to the mage class (sorcerers seems a bit unfitting to me), but I would exclude alchemy, which I find a little more exotic than scrolls and wands for mages... What I'd really like would be a specific alchemist kit for bards (and maybe mages), sort of the alchemist kit for thiefs included in Might and Guile, but this is another matter...


Ability Score Bonus

Meaning high intelligence or charisma giving bonus spells to mages, sorcerers and bards, like wisdom does for clerics and druids. I would do that pretty much the same way Tome and Blood did, at least for mages and bards. Sorcerers will use a completely different system and already get bonus mana points for high charisma.
On the other hand I'm not sure about bonus casting level limited to sorcerers: maybe I would give it to everyone or no one... what is the reasoning behind this choice? I'd like to ear opinions about this...


Learning Mechanism

It seems to me that the destruction of the scroll on a failed learning attempt is a bit too harsh outcome (again likely to be a reload condition, for the rarest spells at least), so I'd like to make sure that every failed attempt to learn prevents any further attempt only until rest, not destroying the scroll in the process.

 


About Tome and Blood

First of all I want to clarify that I don't intend any of the following considerations as an absolute criticism on this mod, so I hope Aquadrizzt or any of the co-autors will not be offended. I like some of T&B features, but I disagree with some other choices... Like with everything else, is only a matter of tastes.
In particular I don't like that every school is opposed to necromancy (except necromancy itself), nor that specialists are encouraged to use spells from their own school by automatically knowing everyone of them (actually overriding the learning advantage). About specific mage kits features I've mixed feelings, while I generally like sorcerer kits (maybe I would make them a bit differently, but it is not my main concern). On the bright side I pretty much like every tweaks component features, altough I would slightly modify some of them (as you can see in the previous sections).
I said all of this mainly to explain why I plan to make a mod that overlaps with T&B. Nonetheless I currently don't plan to cover exactly all the features of T&B (for instance I will not include any new kit, at least for the first release), so I can try to address the compatibility issue for the components that are not conceptually incompatibles.


Implementation

Here I'll expose my preliminary thoughts about implementation: although for some of the components (the main ones) I already have a number of ideas about how they will work, I didn't even start to look into most of them, so I'm not sure that everything I wrote will actually be possible. Any advice from experienced modders will be greatly welcome (this is actually among the main reasons fot me to write this post).
Mages

First of all, I think I'll need to create a one level lower version of every spell in the game: the new spells will not be a duplicate of the original spells, but each spell will rather cast the original version of itself ( via opcode #146 or #148). If I'll implement minor access to schools I'll also need to create a one level higher version in the same way. Then I'll patch every scroll in the game: I'll replace the single Learn Spell effect with different versions of it that will target each kit (via opcode #177) with the appropriate version of the spell they represent. Maybe I'll also need to look into the joinable npc and adjust their known spells.


Sorcerers

My first idea was to disable sorcerer's spell casting by default, but let him create a special item once per rest with the equipped effect to re enable it. This item would have been like a wand (with a number of charges equal to the sorcerer's mana points), so consuming the last charge would have destroyed it, disabling spell casting. Sadly I can't find an effect allowing me to manipulate specific items charges (opcode #243 doesn't let me specify the target item, if I got it right), so I think I'll need to achieve something similar through scripting (which I was hoping to avoid...).
My current implementation would consist of this steps:

  • Patch the sorcerer's spell table so each spell will be usable only one time per rest.
  • Create four local variables to store maximum mana points (MM), current mana points (CM), mana regeneration rate (MR) and spell casted (SC).
  • Create a sorcerer version of every arcane spell that will: decrement CM by its spell level (via opcode #309), cast the original version of the spell (via opcodes #146 or #148), restore itself in memory (via opcode #261) and set SC to 1 (again via opcode #309).

Then, I need to create a script for mana pool management that will take care of a number of things:

  • Update MM and MR on level change.
  • Update MM and MR on charisma change.
  • If a timer MR has expired and CM is lower than MM: restore every spell with a lower level then CM+2, enable spell casting, increment CM by 1, replace the catalyst item with one having CM charges, reset the timer to MR seconds.
  • If SC is equal to 1 and CM is greater then 0: remove all spells with a greater level than CM from sorcerer's memory, replace the catalyst item with one having CM charges, set SC to 0.
  • If SC is equal to 1 and CM is lower then 1: remove all spells from sorcerer's memory, disable spell casting, replace the catalyst item with one having 0 charges, set SC to 0.

I know there is no need to make use of the catalyst item for this system to work, but I will keep it for visual feedback purpose.


Questions for scripting experts

 

  • Can I use variables values as parameters for actions? Looking at IESDP I think not, but I find that very unusual, so I want to doublecheck, maybe I missed something...

    There would be a workaround:
    IF Global(myVar, SCOPE, 1)
    THEN someAction(1)
    IF Global(myVar, SCOPE, 2)
    THEN someAction(2)
    IF Global(myVar, SCOPE, n)
    THEN someAction(n)
    But do I really need to setup things in this very tedious way?

  • Where to put this script to make sure every sorcerer in the game uses it, creating the minimum amount of troubles to other scripts?

 

 


Conclusions

I want to give my sincere gratitude to anyone who had the dedication to read this wall of text down to this point! Thank you all, brave people!
This is the end, but before you get too excited (or disappointed), I must confess a couple of things:

  • At this moment I have only ideas, nothing I wrote in this post is already done, and I don't know yet how much time I'll find for doing it. But I will try!
  • I have little to no specific experience in Infinity Engine games modding (other than doing minor tweaks to my own games)... but I can code (and I sometime work in game industry), so I think I can learn relatively quickly with the kind help of some willing experienced modders (surfing the web looking for solutions is sometime a very time consuming task).

Bye for now, I hope you enjoyed the reading!

 

Edited by MaLa
Link to comment

About Tome and Blood

... I don't intend any of the following considerations as an absolute criticism on this mod, so I hope Aquadrizzt or any of the co-autors will not be offended. I like some of T&B features, but I disagree with some other choices... Like with everything else, is only a matter of tastes.

In particular I don't like that every school is opposed to necromancy (except necromancy itself)

No worries, tastes naturally differ, and criticism (especially the constructive kind) have only made my mods better. But FYI, the "necromancy is different" thing is no longer in recent builds of TnB. Every specialist can cast every spell, including Necromancy spells (except Chill/Ghoul/Vampiric Touch, which remain special innate abilities). The benefits of being a specialist are 1) their special bonuses in their school, and 2) being able to spontaneously convert memorization slots to cast spells from within their school. (But see below.) Generalists are strictly inferior, though we are considering addressing that by giving them an "Anyspell" ability, which is basically NRD without any wild surge.

 

Specialist Mages

... to find a more "school specific" main advantage for specialists: this main advantage, inspired by Faiths and Powers sphere system, will be an equivalent focus access to spells in the specialist school, which means they will be able to memorize spells belonging to their school in a spell slot one level lower then usual (2nd level spells in 1st level slots, 3rd level spells in 2nd level slots and so on).

[headslap] ... I can't believe I invented the "focus access" thing, and it never even occurred to me to do something like that for non-clerics! Using lower-level slots for spells in your specialty, and having the option to spontaneously cast them from regular slots... that would be a powerful combination, and really incentive you to use your specialty spells...

 

Sorcerer

The core idea for my new sorcerer class is to create a mana pool from which he can draw to obtain the power he needs, consuming a portion of that in the process. That pool will slowly regenerate itself over time.

Although it's not possible to create a whole new mana system due to engine limitations (I have no way to display the mana pool status), I think I could utilize some sort of “catalyst item” to circumvent this limitation

This will be exceedingly difficult to do... we've been kicking around ideas for how to implement it for the better part of a year, and still haven't covered all the complications.

 

Metamagic

Borrowing the term from Tome and Blood, with metamagic I refer to the various sequencer and contingecy spells: I like that T&B converts them to innate abilities, but I don't understand the reason of that complex "learning-casting-resting" unlocking mechanism... I would simply grant them to mages at appropriates levels. Maybe this is due to some technical limitations I didn't think of, if so let me know!

I honestly don't remember. I think because just getting the ability for free is kind of boring, and overly generous. If the game has two Spell Sequencer scrolls, you need to decide who gets to learn them. If it gives the ability for free to every mage, then that's a choice that was taken away from the player. I like players to have to make meaningful choices! That said, I think I've come up with a better way to do this...

 

Learning Mechanism

It seems to me that the destruction of the scroll on a failed learning attempt is a bit too harsh outcome (again likely to be a reload condition, for the rarest spells at least), so I'd like to make sure that every failed attempt to learn prevents any further attempt only until rest, not destroying the scroll in the process.

This is an excellent insight. I'm not sure the "wait a day" idea is feasible, but maybe something like expending a spell slot. Treat it the same as being hit by a nishruu...

Edited by subtledoctor
Link to comment

 

  • Update MM and MR on level change.
  • Update MM and MR on charisma change.
  • If a timer MR has expired and CM is lower than MM: restore every spell with a lower level then CM+2, enable spell casting, increment CM by 1, replace the catalyst item with one having CM charges, reset the timer to MR seconds.
  • If SC is equal to 1 and CM is greater then 0: remove all spells with a greater level than CM from sorcerer's memory, replace the catalyst item with one having CM charges, set SC to 0.
  • If SC is equal to 1 and CM is lower then 1: remove all spells from sorcerer's memory, disable spell casting, replace the catalyst item with one having 0 charges, set SC to 0.

Here's how I see it:

 

Both MM and MR are level-dependent so I'm thinking they can both be done by using passive abilities gained at every level.

 

MM is easier since you just need to increment it by 2 every level. Then do a check for the Sorc's CHA to apply additional effect to increment MM accordingly.

 

The MR = 12.5% MM is harder, because it also depends on MM, not just level. So after the check for CHA and applying additional MM, you need a piece of code that reads all possible values of MM and calculates the corresponding MR. You would also want to decide at which level MM maxes out. Let's say it caps at level 40, so your max MM would be 240 for a 25 CHA 40th level Sorc. Some values are not possible, like 7, 11, or 13, but it's going to be pretty tedious setting this up, I guess. What you can do is keep the max MM reasonably low, to make your life easier. Maybe let it cap at level 20 or so.

 

I'm not sure how to efficiently compare CM and MM. I suppose you could use a variable that signals that any spell has been cast, let's say CASTSPELL. This can't be the same as SC, since it changes differently. In the script, whenever this CASTSPELL variable is 1 and the regen timer is not running, start the regen timer. When it expires and CASTSPELL is still 1, increment CM. So basically, the first time you ever cast a spell, CM will keep increasing until it equals or exceeds MM. Then, you need a piece of code preceding all this, which considers every possible value of MM, and compares CM to that value. If CM >= MM, set CASTSPELL to 0, stop the regen timer, and set CM = MM.

 

I really hope I made sense there. My head is starting to spin a little.

 

As for the catalyst thing, since the game has to read the value of CM, I don't see any other way short of another piece of code that considers every possible value of CM, which does take every value from min MM to max MM, then create the item accordingly. You would probably need another variable, let's say UPDATECM, to signal the game when it needs to update this value. Every spell cast will set this flag to 1. Every time regen timer expires, set this to 1. When CASTSPELL (from above) = 0, set UPDATECM to 0 (so at max mana it doesn't need to update catalyst). Whenever a new catalyst is created, also set UPDATECM to 0.

 

EDIT: As far as the feedback info for CM is concerned, the mod Virtue creates a new token called Virtue which is displayed in the Record page as another piece of info. I wonder if you can do the same thing for mana? It still doesn't change the fact that you would still need to consider every possible value of CM. It just saves you the trouble of creating an inventory item.

Edited by ABlake
Link to comment

First of all, thank you for your quick response!

 

 

But FYI, the "necromancy is different" thing is no longer in recent builds of TnB.

 

My bad, clearly I had in mind an outdated version of T&B... anyway, no opposing schools is a huge problem for keeping generalist mages balanced.

 

 

Generalists are strictly inferior, though we are considering addressing that by giving them an "Anyspell" ability, which is basically NRD without any wild surge.

 

Without the details I can't really tell, but I fear this would be a bit too powerful... Moreover, why to play a wild mage if generalists can do the same thing and not get the wild surge drawback?

 

 

2) being able to spontaneously convert memorization slots to cast spells from within their school.

 

This is intresting... I still don't know how I feel about it, mainly because the need to foresee which spell will be useful in the near future is a defining feature of mages and one of the main component of the stategic complexity in this game for me. But alter it in such a limited way maybe would be acceptable...

 

 

This will be exceedingly difficult to do... we've been kicking around ideas for how to implement it for the better part of a year, and still haven't covered all the complications.

 

Since you have already dealt with this problem, could you give me some advice on what kind of complications I will encounter?

 

 

If the game has two Spell Sequencer scrolls, you need to decide who gets to learn them. If it gives the ability for free to every mage, then that's a choice that was taken away from the player. I like players to have to make meaningful choices

 

You have a point there... but I still think that learning from scrolls something that is no longer a spell is a bit immersion breaking... The optimal solution would be to recreate the choice giving the mages a list of feats from which to choose: for instance we could put crafting and metamagic skills in a common list and let the player choose which one he wants (I don't think this two groups will suffice, we would need to come up with more options)

 

 

I'm not sure the "wait a day" idea is feasible

 

I was thinking of two possible solution:

  • Make the scroll a one charge per rest item, adding to the cast spell ability a remove item effect linked to the scroll itself. This way the scroll will still be "one use only" for casting spells, but not for learning them. The drawback is that remove item can remove a different scroll of the same type if the character has more then one.
  • Add to the learn spell ability a create item effect (delayed by 8-24 hours) linked to the scroll itself, restoring it in the inventory after a certain amount of time. The drawback is that this isn't exactly "until rest" and is esthetically less pleasing.

Both this solutions have a relevant flaw: they don't account for the real outcome of learning attempts, meaning they don't destroy the scroll on success, so the player will learn the spell AND cast it one time using the same scroll. I wouldn't know how to avoid this without scripting, but it doesn't bother me so much...

 

 

Both MM and MR are level-dependent so I'm thinking they can both be done by using passive abilities gained at every level.

 

This would be simpler (and less demanding for the game engine), but it doesn't account for temporary charisma changes, or worse lets the player exploit it pumping the stat before leveling up for permanent benefits... I need to think of it, maybe I can create a hybrid system.

 

 

The MR = 12.5% MM is harder, because it also depends on MM, not just level. So after the check for CHA and applying additional MM, you need a piece of code that reads all possible values of MM and calculates the corresponding MR. You would also want to decide at which level MM maxes out. Let's say it caps at level 40, so your max MM would be 240 for a 25 CHA 40th level Sorc. Some values are not possible, like 7, 11, or 13, but it's going to be pretty tedious setting this up, I guess. What you can do is keep the max MM reasonably low, to make your life easier. Maybe let it cap at level 20 or so.

 

I'm a patient man, but more than that I hope I can automate upstream this process... anyway thank you for your sympathy!

 

 

I'm not sure how to efficiently compare CM and MM. I suppose you could use a variable that signals that any spell has been cast, let's say CASTSPELL. This can't be the same as SC, since it changes differently. In the script, whenever this CASTSPELL variable is 1 and the regen timer is not running, start the regen timer. When it expires and CASTSPELL is still 1, increment CM. So basically, the first time you ever cast a spell, CM will keep increasing until it equals or exceeds MM. Then, you need a piece of code preceding all this, which considers every possible value of MM, and compares CM to that value. If CM >= MM, set CASTSPELL to 0, stop the regen timer, and set CM = MM.

 

I didn't understand why I would need another CASTSPELL variable... maybe I missed something, could you explain yourself better? I was thinking to start the timer whenever it isn't already running and SC = 1. Then, even if SC will soon become 0, the timer will keep going and reset itself until CM >= MM and only at that time it will stop (not resetting itself). You think this wouldn't work?

 

 

As for the catalyst thing, since the game has to read the value of CM, I don't see any other way short of another piece of code that considers every possible value of CM, which does take every value from min MM to max MM, then create the item accordingly. You would probably need another variable, let's say UPDATECM, to signal the game when it needs to update this value. Every spell cast will set this flag to 1. Every time regen timer expires, set this to 1. When CASTSPELL (from above) = 0, set UPDATECM to 0 (so at max mana it doesn't need to update catalyst). Whenever a new catalyst is created, also set UPDATECM to 0.

 

Same as for the previous point, why can't I simply update the catalyst on SC=1 or MR expired? Has this to do with the fact that I can't change a variable and read its updated value in the same block? In this case, if the triggers is MR expired, I can set the number of charges to CM + 1 and, if the trigger is SC=1, the spell itself has already updated CM, so I think the value would be correct as it is.

 

 

EDIT: As far as the feedback info for CM is concerned, the mod Virtue creates a new token called Virtue which is displayed in the Record page as another piece of info. I wonder if you can do the same thing for mana? It still doesn't change the fact that you would still need to consider every possible value of CM. It just saves you the trouble of creating an inventory item.

 

I think this would be a useful addition for displaying maximum mana, but wouldn't be practical enough for current mana (I wouldn't want to constantly go in the record page during combat to check how much mana I have left). The catalyst can stay in a quick item slot and be always visible.

Link to comment
lets the player exploit it pumping the stat before leveling up for permanent benefits

 

I meant to talk about the CHA modifications throughout the game, but then forgot to. Here's what I'm thinking: first, there's only one CHA check right after character creation. It will take care of the initial CHA bonus of your character. Then, you need to look up every instance of CHA modification in the game, to insert a MM modification there. If the CHA mod is permanent then the MM mod is also permanent. If it's limited time then remove the MM mod at the end of the duration.

 

I didn't understand why I would need another CASTSPELL variable... maybe I missed something, could you explain yourself better? I was thinking to start the timer whenever it isn't already running and SC = 1. Then, even if SC will soon become 0, the timer will keep going and reset itself until CM >= MM and only at that time it will stop (not resetting itself). You think this wouldn't work?

 

Actually, that might work. At first I came up with something different and thought SC wouldn't work. But now I think SC would be fine for this task.

 

Same as for the previous point, why can't I simply update the catalyst on SC=1 or MR expired? Has this to do with the fact that I can't change a variable and read its updated value in the same block? In this case, if the triggers is MR expired, I can set the number of charges to CM + 1 and, if the trigger is SC=1, the spell itself has already updated CM, so I think the value would be correct as it is.

 

You probably don't have to do the CM + 1 thing. You just need to push the catalyst portion to the bottom of the code, so when the game gets to this portion, CM should have already been updated by the MR expired portion from above. But then how do you stop it from updating at max mana? At max mana you need to stop the timer by setting it to either 0 or a very big value. But you need it to be 0 so you can do the "IF SC = 1 and timer not running THEN start timer" portion. This means at max mana MR will always be "expired". Also, you don't want to have two different actions for SC = 1 and MR expired. Because then you'd need two separate triggers for every possible value of CM, which means doing the entire value-reading task twice.

Link to comment

 

Then, you need to look up every instance of CHA modification in the game, to insert a MM modification there. If the CHA mod is permanent then the MM mod is also permanent. If it's limited time then remove the MM mod at the end of the duration.

 

You mean find every item, spell or anything else that carries a CHA modification effect and add to it a MM and MR modification effect?

This could be an acceptable solution, but it is a frightening task... I would need first of all to understend if and how I can filter this istances using WeiDU and patch them. Then the item/spell would need to:

  • Check the character starting CHA (MM and MR modification for +X CHA effects depend on the original value)
  • Check the character level (since MM and MR are level dependant).
  • Target each combination of this two with a different MM and MR modification effect.

At last, even after all of this, I can still get wrong results for limited duration effects if they stack: for instance, if a character starting with 17 CHA get two +1 CHA effects at different times (and/or of different duration), the first will not give him anything, but the second will. Then when the first expires the character will retain an invalid benefit until the second also expires.

What I could do is to create an effect that sets a variable to force the script recalculate MM and MR, adding this effect to level and CHA modifications. This wouldn't spare me the task to find every CHA modification instances, but would solve the other problems...

 

 

But then how do you stop it from updating at max mana? At max mana you need to stop the timer by setting it to either 0 or a very big value. But you need it to be 0 so you can do the "IF SC = 1 and timer not running THEN start timer" portion. This means at max mana MR will always be "expired".

 

I would say:

IF MR expired AND CM < MM

THEN update catalyst

This will keep comparing CM and MM at every cycle though... is this much more expensive than checking a single variable? Would be preferable to store an additional variable for maximum mana reached? I can do it either ways, it's only a matter of performance...

 

 

Also, you don't want to have two different actions for SC = 1 and MR expired. Because then you'd need two separate triggers for every possible value of CM, which means doing the entire value-reading task twice.

 

You are totally right! I still need to digest all the limitations of this scripting environment... (such as I can't nest IF blocks).

Link to comment

Then, you need to look up every instance of CHA modification in the game, to insert a MM modification there. If the CHA mod is permanent then the MM mod is also permanent. If it's limited time then remove the MM mod at the end of the duration.

 

How about this: use a creature that runs a script which considers all possible combinations of character level and CHA bonus level (so 5 CHA bonus levels times whatever the level you want the MM scaling to cap at). Summon this creature whenever a CHA mod is applied. It it's permanent then that's it. If it's limited duration, summon the creature again at the end of the duration for recalculation. You can use this same creature and script to initiate MM and MR after character creation (so forget about the passives that apply MM/MR at every level). This way you only need to care what the current net CHA is, and insure that MM and MR are recalculated every time there is a change in CHA.

 

I would say:

IF MR expired AND CM < MM

THEN update catalyst

This will keep comparing CM and MM at every cycle though... is this much more expensive than checking a single variable? Would be preferable to store an additional variable for maximum mana reached? I can do it either ways, it's only a matter of performance...

 

I suppose you could do something like this:

 

IF

MM = x

CM < x

OR(2)

SC = 1

MR expired

THEN

update catalyst

Edited by ABlake
Link to comment

Plain Sorcerer

 

The core idea for my new sorcerer class is to create a mana pool from which he can draw to obtain the power he needs, consuming a portion of that in the process. That pool will slowly regenerate itself over time.

Although it's not possible to create a whole new mana system due to engine limitations (I have no way to display the mana pool status), I think I could utilize some sort of catalyst item to circumvent this limitations, so the new sorcerer would be like that:

  • Learning process and amount of known spells unchanged.
  • The sorcerer will need a personal catalyst item to access his spell casting ability (this item will display information about the mana pool)
  • The sorcerer will start with two maximum mana points, gaining two addicional points per level of experience.
  • Charisma will grant the sorcerer additional mana points per level of experience (+1 at 16, +2 at 19, +3 at 22, +4 at 25)
  • No more limited spell amount per rest, each spell will be usable at will.
  • Each spell will now consume an amount of mana points equal to its spell level.
  • The sorcerer will regenerate 12.5% of his mana pool per hour, so resting will always replenish it.
While I'm still not sure of the specific numbers in this system and I probably will need to fine tune them, I believe that it would be intresting to have a new kind of arcane pratician that can dispose of his spells in a more flexible fashion, choosing between the option to cast a very high amount of low level spells, a limited amount of high level spells, or anything in between. Moreover, the constant mana regeneration will make the sorcerer less rest dependant compared to the mage.

 

Sorcerers

 

My first idea was to disable sorcerer's spell casting by default, but let him create a special item once per rest with the equipped effect to re enable it. This item would have been like a wand (with a number of charges equal to the sorcerer's mana points), so consuming the last charge would have destroyed it, disabling spell casting. Sadly I can't find an effect allowing me to manipulate specific items charges (opcode #243 doesn't let me specify the target item, if I got it right), so I think I'll need to achieve something similar through scripting (which I was hoping to avoid...).

My current implementation would consist of this steps:

  • Patch the sorcerer's spell table so each spell will be usable only one time per rest.
  • Create four local variables to store maximum mana points (MM), current mana points (CM), mana regeneration rate (MR) and spell casted (SC).
  • Create a sorcerer version of every arcane spell that will: decrement CM by its spell level (via opcode #309), cast the original version of the spell (via opcodes #146 or #148), restore itself in memory (via opcode #261) and set SC to 1 (again via opcode #309).
Then, I need to create a script for mana pool management that will take care of a number of things:
  • Update MM and MR on level change.
  • Update MM and MR on charisma change.
  • If a timer MR has expired and CM is lower than MM: restore every spell with a lower level then CM+2, enable spell casting, increment CM by 1, replace the catalyst item with one having CM charges, reset the timer to MR seconds.
  • If SC is equal to 1 and CM is greater then 0: remove all spells with a greater level than CM from sorcerer's memory, replace the catalyst item with one having CM charges, set SC to 0.
  • If SC is equal to 1 and CM is lower then 1: remove all spells from sorcerer's memory, disable spell casting, replace the catalyst item with one having 0 charges, set SC to 0.

 

Multiply Mana Points per spell/level/charisma x8, so the 12.5% can work without rounding issues.

No need for separate Sorcerer versions, effects can be filtered to sorcerers through opcode 177/326.

If you want to avoid scripting, hijack a proficiency stat.

In theory:

(SPELL1)

  • Use EFF (EFF2)
  • Use EFF (EFF1)
(EFF2) Cast spell on Condition (hp>102%) (SPELL3)

(EFF1) Cast spell on Condition (hp>102%) (SPELL2)

 

(SPELL2)

 

  • Drain Wizard Spells (200)
  • Protection from Spell (stat 116 < 8) (SPELL2)
  • Restore Lost Spells (1, Wizard)
  • Protection from Spell (stat 116 < 16) (SPELL2)
  • Restore Lost Spells (2, Wizard)
  • Protection from Spell (stat 116 < 24) (SPELL2)
  • Restore Lost Spells (3, Wizard)
  • Protection from Spell (stat 116 < 32) (SPELL2)
  • Restore Lost Spells (4, Wizard)
  • Protection from Spell (stat 116 < 40) (SPELL2)
  • Restore Lost Spells (5, Wizard)
  • Protection from Spell (stat 116 < 48) (SPELL2)
  • Restore Lost Spells (6, Wizard)
  • Protection from Spell (stat 116 < 56) (SPELL2)
  • Restore Lost Spells (7, Wizard)
  • Protection from Spell (stat 116 < 64) (SPELL2)
  • Restore Lost Spells (8, Wizard)
  • Protection from Spell (stat 116 < 72) (SPELL2)
  • Restore Lost Spells (9, Wizard)

 

(SPELL3)

 

  • Cast spell (delay 300) (SPELL4)
  • Cast spell (delay 600) (SPELL4)
  • // for map-travel/resting
  • Cast spell (delay900) (SPELL4)
  • // for map-travel/resting
  • etc... (SPELL4)
  • // for map-travel/resting
  • Cast spell (delay 2400) (SPELL4)
  • // for map-travel/resting
  • Remove effects by resource (delay 300) (SPELL3)
  • Protection from spell (duration 300) (SPELL3)

 

(SPELL4)

 

  • Apply Effects List (stat 116 > level*14 AND charisma <16 ) (SPELL5)
  • Protection from spell (stat 116 > level*14 AND charisma <16 ) (SPELL4)
  • Apply Effects List (stat 116 > level*14 AND charisma =16 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+8 AND charisma =16 )
  • Apply Effects List (stat 116 > level*14 AND charisma =17 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+8 AND charisma =17 )
  • Apply Effects List (stat 116 > level*14 AND charisma =18 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+8 AND charisma =18 )
  • Apply Effects List (stat 116 > level*14+16 AND charisma =19 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+16 AND charisma =19 )
  • Apply Effects List (stat 116 > level*14+16 AND charisma =20 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+16 AND charisma =20 )
  • Apply Effects List (stat 116 > level*14+16 AND charisma =21 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+16 AND charisma =21 )
  • Apply Effects List (stat 116 > level*14+24 AND charisma =22 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+24 AND charisma =22 )
  • Apply Effects List (stat 116 > level*14+24 AND charisma =23 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+24 AND charisma =23 )
  • Apply Effects List (stat 116 > level*14+24 AND charisma =24 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+24 AND charisma =24 )
  • Apply Effects List (stat 116 > level*14+32 AND charisma =25 ) (SPELL5)
  • Protection from spell (stat 116 > level*14+32 AND charisma =25 )
  • Modify Proficiency (level*2, 116, Increment),

 

(SPELL5)

 

  • Remove effects by resource (SPELL4)
  • Remove effects by resource (SPELL5)
  • Remove effects by resource (SPELL6)
  • Modify Proficiency (level*16 +(charisma-13)/3*8, 116, Increment)

 

Global Effects for each wizard spell:

Apply Effects List (CLASS=SORCERER) (SPELL6%spelllevel%)

 

(SPELL6)

  • Modify Proficiency (-level*8, 116, Increment)
  • Cast Spell (SPELL2)
(SPELL61)
  • Cast spell at level (1) (SPELL6)
(SPELL62)
  • Cast spell at level (2) (SPELL6)
(SPELL63)
  • Cast spell at level (3) (SPELL6)
etc... Edited by kjeron
Link to comment

 

If you want to avoid scripting, hijack a proficiency stat.

 

Wow! Lots of very useful suggestions here! It seems you almost did all the job for me, I didn't expect so much! Thank you!

I need to investigate a little better, but at first view it seems your structure could actually work, you came up with all of this on the fly? I was under the impression that Modify Proficency couldn't increment proficencies, only set them (this is what IESDP claims), but after a quick research I would say you are correct (and IESDP is outdated in this)... This is a real game changer!

 

 

How about this: use a creature that runs a script which considers all possible combinations of character level and CHA bonus level (so 5 CHA bonus levels times whatever the level you want the MM scaling to cap at). Summon this creature whenever a CHA mod is applied. It it's permanent then that's it. If it's limited duration, summon the creature again at the end of the duration for recalculation.

 

Yes, this is a better version of what I had in mind, avoiding the constant check for the need to recalculate. But if there is a way to avoid scripting complications (as it seems reading kjeron post), I would go for it!

Edited by MaLa
Link to comment

Finally I had the time to carefully read @kjeron post and I have some questions:

(EFF2) Cast spell on Condition (hp>102%) (SPELL3)
(EFF1) Cast spell on Condition (hp>102%) (SPELL2)


I'm guessing you meant hp<102% (as an always true condition), I got it right?

If you want to avoid scripting, hijack a proficiency stat.


The informations I could find on this matter are a bit confusing and contradictory... In your example you make use of stat 116, which is, by IESDP description of opcode #233 (Proficiency Modifier), the first unused proficiency. This is fine, but then here are the rows from stats IDS corresponding to all the supposed unused proficiencies:

116 WIZARD_SPELL_DEFLECTION
117 PROTECTION_FROM_EVIL
118 TRUE_SIGHT
119 CLERIC_CHAOTIC_COMMANDS
120 CLERIC_INSECT_PLAGUE
121 CLERIC_BLADE_BARRIER
122 CLERIC_PHYSICAL_MIRROR
123 CLERIC_SHIELD_OF_THE_ARCHONS
124 CLERIC_REGENERATION
125 WIZARD_FIRE_SHIELD
126 WIZARD_PROTECTION_FROM_MAGIC_ENERGY
127 WIZARD_MISLEAD
128 WIZARD_PROTECTION_FROM_MAGIC_WEAPONS
129 WIZARD_SPELL_TURNING
130 WIZARD_PROTECTION_FROM_THE_ELEMENTS
131 CLERIC_FREE_ACTION
132 WIZARD_KHELBENS_WARDING_WHIP
133 CLERIC_DEFENSIVE_HARMONY
134 EXTRAPROFICIENCY20


From this source, it seems that stat 134 is the only actually unused stat (EXTRAPROFICIENCY20) and all the others are used by spell states. What is the truthful source? Moreover, I suppose there are other mods making use of this clever trick, so I would need to have a list of this mods and exactly what stat(s) they use, in order to avoid incompatibilities... Can anyone help me with this?

 

 

Apply Effects List (stat 116 > level*14 AND charisma <16 ) (SPELL5)

 

In this case (and many other like this) you are setting a #326 opcode with two stat checks... you are shortening a more complex setting where a #326 with one condition applies another #326 with the other condition, or you really mean that I can set up an AND in this effect? In the second case, how I can do it? Has it something to do with the "use two rows of splprot.2da" pseudo stat?

 

 

Cast spell (delay 300) (SPELL4)

 

While this is the literal implementation of what I wrote in my description, what I actually meant was to set up the regeneration rate in such a way that the mana pool will always replenish itself in 8 hours, updating the current mana each time it would grant at least a new spell (assuming a 1:1 level/mana ratio, 1 every 2400/Maximum Mana seconds). I think I can figure it out myself, but I wanted to clarify my real intenctions since my previous explanation was misleading...

Edited by MaLa
Link to comment

I'm guessing you meant hp<102% (as an always true condition), I got it right?

Yes

The informations I could find on this matter are a bit confusing and contradictory... In your example you make use of stat 116, which is, by IESDP description of opcode #233 (Proficiency Modifier), the first unused proficiency. This is fine, but then here are the rows from stats IDS corresponding to all the supposed unused proficiencies:

From this source, it seems that stat 134 is the only actually unused stat (EXTRAPROFICIENCY20) and all the others are used by spell states. What is the truthful source? Moreover, I suppose there are other mods making use of this clever trick, so I would need to have a list of this mods and exactly what stat(s) they use, in order to avoid incompatibilities... Can anyone help me with this?

Hence "hijack". Everyone one of those stats can be better represented by a Spellstate in the EE's, and some already are. Continuing to use them for spell detection in the EE is nothing but wasteful. You could also use the upper bytes of actual proficiency stats, though it makes the splprot lines a bit more complicated.

In this case (and many other like this) you are setting a #326 opcode with two stat checks... you are shortening a more complex setting where a #326 with one condition applies another #326 with the other condition, or you really mean that I can set up an AND in this effect? In the second case, how I can do it? Has it something to do with the "use two rows of splprot.2da" pseudo stat?

It's a complex mix of "use two rows of splprot.2da", except it's really a "NOT(rowX or rowY)", so both would actually check the opposite of what's intended, in that particular example:

Apply Effects List (stat 116 > level*14 AND charisma <16 ) (SPELL5)

RowX = charisma > 15

RowY = Stat116 < level*14+1

RowZ = NOT (RowX or RowY)

Link to comment

The informations I could find on this matter are a bit confusing and contradictory... In your example you make use of stat 116, which is, by IESDP description of opcode #233 (Proficiency Modifier), the first unused proficiency. This is fine, but then here are the rows from stats IDS corresponding to all the supposed unused proficiencies:

116 WIZARD_SPELL_DEFLECTION

117 PROTECTION_FROM_EVIL

118 TRUE_SIGHT

119 CLERIC_CHAOTIC_COMMANDS

120 CLERIC_INSECT_PLAGUE

121 CLERIC_BLADE_BARRIER

122 CLERIC_PHYSICAL_MIRROR

123 CLERIC_SHIELD_OF_THE_ARCHONS

124 CLERIC_REGENERATION

125 WIZARD_FIRE_SHIELD

126 WIZARD_PROTECTION_FROM_MAGIC_ENERGY

127 WIZARD_MISLEAD

128 WIZARD_PROTECTION_FROM_MAGIC_WEAPONS

129 WIZARD_SPELL_TURNING

130 WIZARD_PROTECTION_FROM_THE_ELEMENTS

131 CLERIC_FREE_ACTION

132 WIZARD_KHELBENS_WARDING_WHIP

133 CLERIC_DEFENSIVE_HARMONY

134 EXTRAPROFICIENCY20

 

From this source, it seems that stat 134 is the only actually unused stat (EXTRAPROFICIENCY20) and all the others are used by spell states. What is the truthful source? Moreover, I suppose there are other mods making use of this clever trick, so I would need to have a list of this mods and exactly what stat(s) they use, in order to avoid incompatibilities... Can anyone help me with this?

 

Some of my mods (Scales of Balance, Might & Guile, Will to Power) are using stat 134, as well as stat 132. So they would be incompatible. That may be okay with you - but just so you're aware.

 

What I do is pick a proficiency, and use Near Infinity to search all BCS scripts for mention of it. If it has a bunch of CheckStat and similar clauses, then it's probably being used by the AI. That's why I am not using stat 133, and went to 132 instead. (I started at the end, 134, and sm moving lower as I need more stats.) So you could check 116, it might be okay, and check 117, etc. until you find one that looks clear. That's my method at least.

 

You could also try other stats beside proficiencies. As this is for sorcerers, who cannot multiclass or dual-class, an obvious choice might be stat 52, divine spell failure, which can be set or incremented (maybe also decremented?) by opcode 60. It's capped at 100 though, so if your mana pool needs to go into triple-digits you're better off with one of the proficiencies.

Edited by subtledoctor
Link to comment

 

It's a complex mix of "use two rows of splprot.2da", except it's really a "NOT(rowX or rowY)", so both would actually check the opposite of what's intended

 

Got it, thanks!

 

 

Some of my mods (Scales of Balance, Might & Guile, Will to Power) are using stat 134, as well as stat 132. So they would be incompatible. That may be okay with you - but just so you're aware.

 

Of course it's not ok with me! =P

I would like this mod to be as compatible as possible, ideally with everything it isn't conceptually incompatible, but in case this was impossible, I would prioritize some mods I particularly like, such as yours (F&P, M&G and SoB), Demivrgvs ones (SR and IR) and SCS. I will avoid stats already taken by your mods and try to find a free one, but I would appreciate if you could do the same thing with the stat I'll use (as soon as I find one I'll tell you which one it is) with your future updates or new mods.

 

 

What I do is pick a proficiency, and use Near Infinity to search all BCS scripts for mention of it. If it has a bunch of CheckStat and similar clauses, then it's probably being used by the AI. That's why I am not using stat 133, and went to 132 instead. (I started at the end, 134, and sm moving lower as I need more stats.) So you could check 116, it might be okay, and check 117, etc. until you find one that looks clear. That's my method at least.

 

Thank you for this suggestion, I'll try it!

 

 

You could also try other stats beside proficiencies. As this is for sorcerers, who cannot multiclass or dual-class, an obvious choice might be stat 52, divine spell failure, which can be set or incremented (maybe also decremented?) by opcode 60. It's capped at 100 though, so if your mana pool needs to go into triple-digits you're better off with one of the proficiencies.

 

I thought about it, but sadly I'll need triple digits (the lowest acceptable cap would be 20th level, this combined with 25 CHA will result in a 120 mana pool). Since sorcerers have very limited weapon access, I could use a regular weapon proficency in a weapon inaccessible to them, but this (in the best case scenario) would fill the record page with a lot of +

Link to comment

I would stay away from the regular weapon proficiencies, as they could be problematic above 7 points (the UI might freak out - or might not, it's been a long time since I tested).

 

Maybe start with one of the ones like CLERIC_SHIELD_OF_THE_ARCHONS or CLERIC_BLADE_BARRIER... on a sorcerer those might not cause a problems even if there is an intersection with the AI. That's another reason I decided to use WIZARD_KHELBENS_WARDING_WHIP (132) in my psionics mod: the kit using it cannot use arcane magic, so will never actually be affected by Warding Whip.

Link to comment

It's a complex mix of "use two rows of splprot.2da", except it's really a "NOT(rowX or rowY)", so both would actually check the opposite of what's intended

 

I thought a little more about this and I'm not sure what would be the best thing to do...

The problem is this: if I apply this solution, I can't use -1 as a parameter, so it would mean to fill splprot.2da with a LOT of predetermined stat checks.

An alternative idea for mana regeneration could be:

 

(SPELL A)

 

 

  • Protection From Spell #206 => (SPELL D)
  • Apply Effect List #326 (value: 15, type: CHA <= -1 splprot row) => (SPELL B15)
  • Apply Effect List #326 (value: 16, type: CHA = -1 splprot row) => (SPELL B16)
  • Apply Effect List #326 (value: 17, type: CHA = -1 splprot row) => (SPELL B17)
  • ...
  • Apply Effect List #326 (value: 25, type: CHA = -1 splprot row) => (SPELL B25)

 

 

(SPELL B##)

 

 

  • Apply Effect List #326 (value: (2+CHA modifier), type: STAT 116 < -1 splprot row) (min lvl: 1) => (SPELL C)
  • Apply Effect List #326 (value: 1, type: LVL = -1 splprot row) (delay 2400/(2+CHA modifier)) => (SPELL D)
  • Immunity Spell #324 (value: 1, type: LVL = -1 splprot row) (duration 2400/(2+CHA modifier)-1) => (SPELL A)
  • Apply Effect List #326 (value: (2+CHA modifier)*2, type: STAT 116 < -1 splprot row) (min lvl: 2) => (SPELL C)
  • Apply Effect List #326 (value: 2, type: LVL = -1 splprot row) (delay 2400/(2+CHA modifier)*2) => (SPELL D)
  • Immunity Spell #324 (value: 2, type: LVL = -1 splprot row) (duration 2400/(2+CHA modifier)*2-1) => (SPELL A)
  • Apply Effect List #326 (value: (2+CHA modifier)*3, type: STAT 116 < -1 splprot row) (min lvl: 3) => (SPELL C)
  • Apply Effect List #326 (value: 3, type: LVL = -1 splprot row) (delay 2400/(2+CHA modifier)*3)=> (SPELL D)
  • Immunity Spell #324 (value: 3, type: LVL = -1 splprot row) (duration 2400/(2+CHA modifier)*3-1) => (SPELL A)
  • ...
  • Apply Effect List #326 (value: (2+CHA modifier)*N, type: STAT 116 < -1 splprot row) (min lvl: N) => (SPELL C)
  • Apply Effect List #326 (value: N, type: LVL = -1 splprot row) (delay 2400/(2+CHA modifier)*N)=> (SPELL D)
  • Immunity Spell #324 (value: N, type: LVL = -1 splprot row) (duration 2400/(2+CHA modifier)*N-1) => (SPELL A)

 

 

(SPELL C)

 

 

  • Remove Protection From Spell #266 => (SPELL D)

 

 

(SPELL D)

 

 

  • Proficiency Modifier #233 (value: 1, type: 116, Increment)
  • Cast Spell #146 => (SPELL A)

 

 

 

I didn't include the part for rest/travel because it would make this exposition even more confused, but I think I have an idea on how to make it.

What do you think about this? Could it work? It would be better or worse than make hundreds of rows in splprot for predetermined stat checks?

Edited by MaLa
Link to comment

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...