Lone Wolf Development Forums

Lone Wolf Development Forums (http://forums.wolflair.com/index.php)
-   HL - d20 System (http://forums.wolflair.com/forumdisplay.php?f=46)
-   -   Arcane Thesis (http://forums.wolflair.com/showthread.php?t=44854)

CptCoots July 6th, 2013 06:37 PM

Arcane Thesis
 
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.

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

CptCoots 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 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 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 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?

Sendric 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 July 9th, 2013 05:57 AM

Quote:

Originally Posted by CptCoots (Post 160573)
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).


All times are GMT -8. The time now is 05:19 AM.

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