Jump to content

Photo

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

mage wizard sorcerer specialist bard spell school mana pool focus

20 replies to this topic

#1 MaLa

MaLa
  • Members
  • 10 posts
  • Gender:Male
  • Location:Italy

Posted 01 August 2018 - 03:31 PM

Introduction

Spoiler

Structure and Compatibility
Spoiler

Main Motivations and Goals
Spoiler

Mage Class Component
Spoiler

Sorcerer Class Component
Spoiler

Bard Class Component
Spoiler

Cantrips
Spoiler

General Tweaks Components
Spoiler

About Tome and Blood
Spoiler

Implementation
Spoiler

Conclusions
Spoiler


Edited by MaLa, 02 August 2018 - 02:59 AM.


#2 subtledoctor

subtledoctor
  • Modders
  • 2627 posts
  • Gender:Male

Posted 01 August 2018 - 07:04 PM

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, 01 August 2018 - 07:07 PM.

Faiths & Powers: Spell spheres and kit pack for priests and paladins
Might & Guile: Tweaks and kits for warriors and rogues
Scales of Balance: Game tweaks and rule overhauls
NPC_EE: More options for NPCs in BGEE, SoD, & BG2EE


#3 ABlake

ABlake
  • Members
  • 59 posts
  • Gender:Male
  • Location:New Londo Ruins

Posted 01 August 2018 - 09:34 PM

 

  • 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, 01 August 2018 - 11:37 PM.


#4 MaLa

MaLa
  • Members
  • 10 posts
  • Gender:Male
  • Location:Italy

Posted 02 August 2018 - 07:20 AM

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.



#5 ABlake

ABlake
  • Members
  • 59 posts
  • Gender:Male
  • Location:New Londo Ruins

Posted 02 August 2018 - 09:33 AM

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.



#6 MaLa

MaLa
  • Members
  • 10 posts
  • Gender:Male
  • Location:Italy

Posted 03 August 2018 - 06:08 AM

 

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).



#7 ABlake

ABlake
  • Members
  • 59 posts
  • Gender:Male
  • Location:New Londo Ruins

Posted 03 August 2018 - 08:53 AM

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, 03 August 2018 - 08:54 AM.


#8 kjeron

kjeron
  • Members
  • 118 posts

Posted 03 August 2018 - 09:38 AM

Plain Sorcerer

Spoiler

Sorcerers
Spoiler

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)
Spoiler

(SPELL3)
Spoiler

(SPELL4)
Spoiler

(SPELL5)
Spoiler

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, 03 August 2018 - 02:11 PM.


#9 MaLa

MaLa
  • Members
  • 10 posts
  • Gender:Male
  • Location:Italy

Posted 04 August 2018 - 02:49 AM

 

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, 04 August 2018 - 03:00 AM.


#10 MaLa

MaLa
  • Members
  • 10 posts
  • Gender:Male
  • Location:Italy

Posted 04 August 2018 - 03:04 PM

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:

Spoiler

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, 04 August 2018 - 03:09 PM.


#11 kjeron

kjeron
  • Members
  • 118 posts

Posted 04 August 2018 - 03:38 PM

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)

#12 subtledoctor

subtledoctor
  • Modders
  • 2627 posts
  • Gender:Male

Posted 04 August 2018 - 05:09 PM

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, 04 August 2018 - 05:10 PM.

Faiths & Powers: Spell spheres and kit pack for priests and paladins
Might & Guile: Tweaks and kits for warriors and rogues
Scales of Balance: Game tweaks and rule overhauls
NPC_EE: More options for NPCs in BGEE, SoD, & BG2EE


#13 MaLa

MaLa
  • Members
  • 10 posts
  • Gender:Male
  • Location:Italy

Posted 05 August 2018 - 03:57 AM

 

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 +



#14 subtledoctor

subtledoctor
  • Modders
  • 2627 posts
  • Gender:Male

Posted 05 August 2018 - 04:53 AM

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.

Faiths & Powers: Spell spheres and kit pack for priests and paladins
Might & Guile: Tweaks and kits for warriors and rogues
Scales of Balance: Game tweaks and rule overhauls
NPC_EE: More options for NPCs in BGEE, SoD, & BG2EE


#15 MaLa

MaLa
  • Members
  • 10 posts
  • Gender:Male
  • Location:Italy

Posted 07 August 2018 - 09:46 AM

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)

Spoiler

(SPELL B##)
Spoiler

(SPELL C)
Spoiler

(SPELL D)
Spoiler

 

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, 07 August 2018 - 10:25 AM.




Reply to this topic



  



Also tagged with one or more of these keywords: mage, wizard, sorcerer, specialist, bard, spell, school, mana, pool, focus

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users