• Please note: In an effort to ensure that all of our users feel welcome on our forums, we’ve updated our forum rules. You can review the updated rules here: http://forums.wolflair.com/showthread.php?t=5528.

    If a fellow Community member is not following the forum rules, please report the post by clicking the Report button (the red yield sign on the left) located on every post. This will notify the moderators directly. If you have any questions about these new rules, please contact support@wolflair.com.

    - The Lone Wolf Development Team

Arcane Thesis

CptCoots

Well-known member
I've seen some old posts about this feat, but looking at the d20 feat it really does nothing as far as game mechanics (just fills in the text). This is fine if I'm not memorizing any metamagic feats with the spell in question but otherwise it is useless.

As a reminder here is Arcane Thesis:
Prerequisite: Knowledge (arcana) 9 ranks; ability to cast arcane spells.
Benefits: Choose one arcane spell that you can cast to be your thesis spell. When casting that spell, you do so at +2 caster level. When you apply any metamagic feats other than Heighten Spell to that spell, the enhanced spell uses up a spell slot one level lower than normal. Thus if you were to prepare an empowered maximized magic missile (assuming magic missile is the spell you choose for your Arcane Thesis), it would be prepared as a 4th level spell (+1 level for empowered, down from +2; and +2 levels for maximized, down from +3).

A spell cannot be reduced to below its original level with the use of this feat.

Special: Can be taken more than once, but you apply it to a new spell.

I'm not really sure where to start with this mostly because I'm not super savvy with a lot of PrC abilities that may mimic this feat. If anyone has done the Easy Metamagic feat then that would give me a head start.
 
Putting in a chooser is pretty straight forward. You'll need to use the Custom Expression field to do it. I'll take a look at it tomorrow if you need help putting it together. The +2 to caster level will have to be text-only, but you could make it show in specials so its more obvious to the user. The last one doesn't sound like it would be hard, but I've never really done anything with the metamagic feats. I'll take a look at this too, but I imagine there's a field that can be altered for the chosen spell.
 
For the custom expression, the simplest thing to do is to choose "Picks on Hero" in the Restrict To... dropdown then put 'component.BaseSpell'. This won't differentiate between arcane and divine spells if your character has classes in both, but depending on your situation, that may not matter. This will choose any spell your characters can cast.
 
To reduce the sLevel, this code does work, but I haven't been able to figure out the timing needed for use with a metamagic feat:

Code:
field[fChosen].chosen.field[sLevel].value -= 1

You would also need if statements and whatnot to only apply this when using a metamagic feat, but not Heighten Spell.

If you need more help, let me know.

FYI, timing for most spells to set their sLevel is First 10000, so this would have to be after that. It may have to be later for metamagic spells (possibly even Final Phase).
 
Okay, so metamagic feats on spells are a damn mess. I first chucked in a script that did a foreach through my custom spells. The idea was to find the ones whose base spell is the right one and then to check what metamagic feat is applied, then I was going to go through each metamagic feat and apply a -1 to sLevel if it wasn't heighten... the problem is that I find it unclear how the metamagic feat is stored. I will provide a detailed dump in a second.
 
Okay so here is the full deal. Eval Script 1 is bad, but works for me for now. In Eval Script 2 what I'm trying to do is to go to the gizmo for each CustomSpl and then check for specific pick id's... but that part is broken. Shown is my script just testing how to get to the gizmo (just checking to see if Heighten Spell is on it, and yeah, it ain't working.

Main Screen Stuff -
Feat Category: General
Restrict To...: Picks on Hero
Custom Expression: component.BaseSpell
<Checked> Show in Specials List?

Eval Script 1 -
Final Phase: 1000
~Script to alter the text shown on the fly for the spell chosen
~Not all that good, probably only works when Arcane is highest total
~caster level

var CL as number
CL = 2 + herofield[tMaxCaster].value

if (field[fChosen].ischosen <> 0) then
field[livename].text = "Arcane Thesis: " & field[fChosen].chosen.field[name].text & " CL +" & CL
endif

Eval Script 2 -
Final Phase: 1000
~Go through each Custom Spell in my BaseSpells
var test as number
foreach pick in Hero from BaseSpell where "NeedHelper.CustomSpl"
test=eachpick.gizmo.childfound[mmHeighten]
nexteach
 
Got it. It mostly works but there are two things: I keep getting "Attempt to access non-existent containing entity from script" error AND in the metamagic window shows the wrong Total Spell Level. Incidentally, this is going to form the start of my Easy Metamagic feats!

This is Eval Script 2- (timing is pretty arbitrarily chosen) Pre-levels: 5000
~Set up vaiables
var id as string
var nlvl as number
var spell as string
var normLvl as number
var LvlRed as number
var strcom as string
var result as number

~Exit if nothing chosen
doneif (field[fChosen].ischosen = 0)

~Set some things
id = field[fChosen].chosen.idstring
~the spell we're looking for, because it was chosen
spell = "thingid." & id
~the minimum level of the spell
normLvl=field[fChosen].chosen.field[sLevel].value
~we do not count Heighten in the entire calculation
strcom="Height"

~look through each spell memorized that matches chosen
foreach pick in hero where spell
LvlRed=0
~Goto the gizmos and look at the metamagics on them
foreach pick in eachpick.gizmo from BaseMetamg
~If it is not heighten (compare works like a child made it)
if (compare(eachpick.field[mmAbbr].text,strcom) <>0) then
~Increase potential level reduction by 1
LvlRed += 1
endif
nexteach
~Once all metamagics have been looked at the new level is either the
~base level or newly adjusted level
nlvl=maximum(normLvl,eachpick.field[sLevel].value-LvlRed)
~Delete the tag (Important because the metamagic spell shows the
~field value while the tag is what the spell list uses).
result=eachpick.delete[sLevel.?]
~Set the field.
eachpick.field[sLevel].value=nlvl
~Set the correct tag
if (eachpick.field[sLevel].value = 0) then
result = eachpick.assign[sLevel.0]
elseif (eachpick.field[sLevel].value = 1) then
result = eachpick.assign[sLevel.1]
elseif (eachpick.field[sLevel].value = 2) then
result = eachpick.assign[sLevel.2]
elseif (eachpick.field[sLevel].value = 3) then
result = eachpick.assign[sLevel.3]
elseif (eachpick.field[sLevel].value = 4) then
result = eachpick.assign[sLevel.4]
elseif (eachpick.field[sLevel].value = 5) then
result = eachpick.assign[sLevel.5]
elseif (eachpick.field[sLevel].value = 6) then
result = eachpick.assign[sLevel.6]
elseif (eachpick.field[sLevel].value = 7) then
result = eachpick.assign[sLevel.7]
elseif (eachpick.field[sLevel].value = 8) then
result = eachpick.assign[sLevel.8]
else
result = eachpick.assign[sLevel.9]
endif
nexteach
 
Yeah so... Easy Metamagic is not really so easy off of this. The selector is fCategory.Metamagic but then there is no real slick way that I can find to connect any fields associated with the selected feat and any metamagic picks in the custom spell's gizmo. Any ideas?
 
I did a quick search for that error message, and fortunately found another thread that covers it. I have updated the code to reflect the necessary change (change in bold)

Code:
~Set up variables
var id as string
var nlvl as number
var spell as string
var normLvl as number
var LvlRed as number
var strcom as string

~Exit if nothing chosen
doneif (field[fChosen].ischosen = 0)
[B]doneif (isgizmo = 0)[/B]

~Set some things
id = field[fChosen].chosen.idstring
~the spell we're looking for, because it was chosen
spell = "thingid." & id
~the minimum level of the spell
normLvl=field[fChosen].chosen.field[sLevel].value
~we do not count Heighten in the entire calculation
strcom="Height"

~look through each spell memorized that matches chosen
foreach pick in hero where spell
LvlRed=0

~Goto the gizmos and look at the metamagics on them
foreach pick in eachpick.gizmo from BaseMetamg

~If it is not heighten (compare works like a child made it)
if (compare(eachpick.field[mmAbbr].text,strcom) <> 0) then
~Increase potential level reduction by 1
LvlRed += 1
endif
nexteach

~Once all metamagics have been looked at the new level is either the
~base level or newly adjusted level
nlvl=maximum(normLvl,eachpick.field[sLevel].value-LvlRed)

~Delete the tag (Important because the metamagic spell shows the
~field value while the tag is what the spell list uses).
perform eachpick.delete[sLevel.?]

~Set the field.
eachpick.field[sLevel].value=nlvl

~Set the correct tag
if (eachpick.field[sLevel].value = 0) then
 perform eachpick.assign[sLevel.0]
elseif (eachpick.field[sLevel].value = 1) then
 perform eachpick.assign[sLevel.1]
elseif (eachpick.field[sLevel].value = 2) then
 perform eachpick.assign[sLevel.2]
elseif (eachpick.field[sLevel].value = 3) then
 perform eachpick.assign[sLevel.3]
elseif (eachpick.field[sLevel].value = 4) then
 perform eachpick.assign[sLevel.4]
elseif (eachpick.field[sLevel].value = 5) then
 perform eachpick.assign[sLevel.5]
elseif (eachpick.field[sLevel].value = 6) then
 perform eachpick.assign[sLevel.6]
elseif (eachpick.field[sLevel].value = 7) then
 perform eachpick.assign[sLevel.7]
elseif (eachpick.field[sLevel].value = 8) then
 perform eachpick.assign[sLevel.8]
else
 perform eachpick.assign[sLevel.9]
endif
nexteach

You may also notice one other change. The function "result =" is obsolete and has been replaced with "perform". So, you can remove the "result as number" and replace all "result = " items in your script. Ultimately, this changes nothing, but its been pointed out to me so I am carrying that forward.

Incidentally, I tested this out on a CLR 2 WIZ 1. When I added the above doneif line, the cleric spells disappeared from the dropdown menu. This seems like a positive thing, but may be something to keep an eye on in case you use something other than a wizard.
 
Yeah so... Easy Metamagic is not really so easy off of this. The selector is fCategory.Metamagic but then there is no real slick way that I can find to connect any fields associated with the selected feat and any metamagic picks in the custom spell's gizmo. Any ideas?

Unfortunately, I'm at a loss on this one. The problem is there are two separate things with metamagic feats. There's the feat you select, then there's the metamagic item you select when creating a metamagic spell (ie fChainSpl and mmChainSpl). I don't see an easy way to use the selected item (fChainSpl) to change the other (mmChainSpl).
 
Sendric, Thank you so much!

Well there is a straightforward way that is very prone to breaking should any of the tags change. The chosen pick will have the correct feat tag, e.g., fChainSpl, field. One can then code another huge if-statement block that goes through and if the chosen matches a particular one then set a string for the metamagic item.

Pseudo code example:
var str1 as string
var str2 as string
str1=field[fChosen].chosen.idstring

if (str1="fHeightenSpl") then
str2="mmHeighten"
elseif (str1="fQuickenSpl") then
str2="mmQuicken"
elseif...
...
endif

Problem is (1) this feat will not function for a new metamagic feat unless it is added and (2) it will be a HUGE script.

Unfortunately, I'm at a loss on this one. The problem is there are two separate things with metamagic feats. There's the feat you select, then there's the metamagic item you select when creating a metamagic spell (ie fChainSpl and mmChainSpl). I don't see an easy way to use the selected item (fChainSpl) to change the other (mmChainSpl).
 
Right. Here's another option. Use this feat to assign a tag to the spell. Then in the editor, go to each metamagic item and write a script to reduce the level adjustment by 1 if the tag exists. It would be a little tedious, but it should do the trick.

That's something I would be willing to add for the next community set (as well as the change to Arcane Thesis).
 
I just did something similar, can you tell I'm avoiding work? I added a User.metaitem tag to mmQuicken. Then the pull down menu can be User.metaitem instead of the feats.

Each way is a pain in the butt...

What if one were to standardize that each metamagic feat was named like fQuicken and each metamagic gizmo thingy was named mmQuicken. could you strip off the f in hero lab? Something like

str="fQuicken"
str=str(1-end) ~starting index at 0
str="mm"&str
 
I just did something similar, can you tell I'm avoiding work? I added a User.metaitem tag to mmQuicken. Then the pull down menu can be User.metaitem instead of the feats.

Each way is a pain in the butt...

What if one were to standardize that each metamagic feat was named like fQuicken and each metamagic gizmo thingy was named mmQuicken. could you strip off the f in hero lab? Something like

str="fQuicken"
str=str(1-end) ~starting index at 0
str="mm"&str

What's work?

Yes, you could do that, but I'm not sure how that's necessarily easier/better than what I suggested.
 
What's work?

Yes, you could do that, but I'm not sure how that's necessarily easier/better than what I suggested.

The difference is then you shoot for the same naming convention between the feats and the mm items and then this is done with a few string manipulations rather that a giant and breakable if elseif statement.
 
Ok, here's an idea. I'm attaching a file for you that includes the Easy Metamagic feat and a new version of the Quicken Spell metamagic item. I threw in a test to see if you could read the mmLevel value (which you can). You should be able to use this as a starting point. I think it will be easier, though of course we'd still have to modify all of the metamagic items. That's something I can do, though. Let me know what you think.
 

Attachments

Sendric, I like this. I'll implement this on my side in my custom feats file. Look forward to seeing it in distro and I'll let you know if I hit a speed bump.
 
Sendric, I like this. I'll implement this on my side in my custom feats file. Look forward to seeing it in distro and I'll let you know if I hit a speed bump.

Cool. If you can post the final eval script you use to reduce the sLevel, that would be helpful. I'll start working on the metamagic items so that they are all tagged correctly.
 
Back
Top