Lone Wolf Development Forums  

Go Back   Lone Wolf Development Forums > Hero Lab Forums > HL - d20 System

Notices

Reply
 
Thread Tools Display Modes
CptCoots
Senior Member
 
Join Date: Apr 2013
Location: Poughkeepsie, NY
Posts: 102

Old July 6th, 2013, 06:37 PM
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.
CptCoots is offline   #1 Reply With Quote
Sendric
Senior Member
 
Join Date: Jul 2010
Posts: 3,144

Old July 7th, 2013, 05:17 PM
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.
Sendric is offline   #2 Reply With Quote
Sendric
Senior Member
 
Join Date: Jul 2010
Posts: 3,144

Old July 8th, 2013, 06:19 AM
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.
Sendric is offline   #3 Reply With Quote
Sendric
Senior Member
 
Join Date: Jul 2010
Posts: 3,144

Old July 8th, 2013, 06:29 AM
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).
Sendric is offline   #4 Reply With Quote
CptCoots
Senior Member
 
Join Date: Apr 2013
Location: Poughkeepsie, NY
Posts: 102

Old July 8th, 2013, 06:37 PM
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.
CptCoots is offline   #5 Reply With Quote
CptCoots
Senior Member
 
Join Date: Apr 2013
Location: Poughkeepsie, NY
Posts: 102

Old July 8th, 2013, 07:24 PM
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
CptCoots is offline   #6 Reply With Quote
CptCoots
Senior Member
 
Join Date: Apr 2013
Location: Poughkeepsie, NY
Posts: 102

Old July 8th, 2013, 10:08 PM
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
CptCoots is offline   #7 Reply With Quote
CptCoots
Senior Member
 
Join Date: Apr 2013
Location: Poughkeepsie, NY
Posts: 102

Old July 8th, 2013, 11:01 PM
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?
CptCoots is offline   #8 Reply With Quote
Sendric
Senior Member
 
Join Date: Jul 2010
Posts: 3,144

Old July 9th, 2013, 05:30 AM
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)
doneif (isgizmo = 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).
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.
Sendric is offline   #9 Reply With Quote
Sendric
Senior Member
 
Join Date: Jul 2010
Posts: 3,144

Old July 9th, 2013, 05:57 AM
Quote:
Originally Posted by CptCoots View Post
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 is offline   #10 Reply With Quote
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -8. The time now is 10:17 AM.


Powered by vBulletin® - Copyright ©2000 - 2024, vBulletin Solutions, Inc.
wolflair.com copyright ©1998-2016 Lone Wolf Development, Inc. View our Privacy Policy here.