New version of celestial button

Discussion concerning lmarkus' campaign framework for D&D3.x and Pathfinder.

Moderators: dorpond, trevor, Azhrei, giliath, Gamerdude, jay, Mr.Ice, lmarkus001

Forum rules
Discussion regarding lmarkus001's framework only. Other posts deleted without notice! :)
Post Reply
jsharen
Giant
Posts: 196
Joined: Tue Feb 05, 2008 3:39 pm

New version of celestial button

Post by jsharen »

Can anyone make a copy of the celestial button for applying a template, but to make it apply the savage creature template from savage tide? This would be for pathfinder.

Specifically:

+2 Natural Armor
+Bite attack (1d8 damage)
DR 5/Magic
Darkvision 60 feet
Immune to disease, exhaustion, mind-affecting, stun, and pain related effects.
Acid resistance 10
Ferocity (Die hard)

Base stat change
+4 str
+4 con
-6 Int (min 1)


If anyone can help a huge Thanks!!!

neofax
Great Wyrm
Posts: 1694
Joined: Tue May 26, 2009 8:51 pm
Location: Philadelphia, PA
Contact:

Re: New version of celestial button

Post by neofax »

What version of the framework are you using? I will try making it.

neofax
Great Wyrm
Posts: 1694
Joined: Tue May 26, 2009 8:51 pm
Location: Philadelphia, PA
Contact:

Re: New version of celestial button

Post by neofax »

Everything is working now. You can thank Aliasmask for the bit that sets the skills. Make sure that there are no RacialModifiers for any of the skills included in this template as this will wipe them out and set them to template standard only. This can be used for 3.5E currently(you can tweak the skills to make it applicable to Pathfinder). Just use Aliasmask's RPEdit tool to edit the libdnd35Pathfinder token using the below. Then make a copy of the PF Add Celestial Template button on the campaign window and change the macrolink part to point to this macro instead.

Code: Select all

@@ @applyDDSavageTemplate
@PROPS@ fontColor=black;autoExecute=true;fontSize=1.00em;sortBy=;color=default;playerEditable=false;applyToSelected=true;group=;tooltip=;minWidth=
<!-- Requirements: if the base creature has any of the following abilities
	they must be formatted as shown here:
	SR (uppercase only; if in SpecialQual the template's SR is ignored)
	"darkvision" (upper or lowercase in SpecialQual)
	"NA" (uppercase only; in SpecialQual or SpecialATK it means "none")
	"smite good #/day" (lowercase only; in SpecialQual)
	Sight type on the Config tab of the token editor must include "Darkvision"
-->

[H: macargs = macro.args ]
[H, if( json.type(macargs) == "UNKNOWN" || json.isEmpty(macargs) ), CODE: {
  [ tToken = currentToken() ]
  [ showWarn = 1 ]
} ; {
[H: tToken = json.get(macargs, "tokenID")]
[H, if( tToken == "" ): tToken = currentToken(); switchToken( tToken ) ]
[H: showWarn = json.get(macargs, "showWarn")]
}]

[H, if(showWarn): cancel = input( "Warning|This will permanently alter the selected token, are you certain you wish to continue?||LABEL|SPAN=TRUE" ); "" ]
[H, if(showWarn): abort( cancel ); "" ]
[H: output = "<h2><b>Savage Creature</b> (CR +1)</h2><br />It may have once been a man, but now its gray skin, strangely flopping arms and legs, and the vacant-eyed vestigial head hanging from its neck make the creature anything but. Yet perhaps worst of all is the creature's mouth, a cavernous wound in its twisted face filled with a twisting landscape of teeth, a mouth designed for one thing only—the tearing offlesh from the bone.<p><h3 align='center'><b>Rebuild Rules</b></h3><b>Armor Class</b>: Natural Armor +2<br /><b>Attack</b>: Bite 1d8 damage for Medium sized creature<h4 align='center'><b>Special Attacks</b></h4><ul><li><b>Death Throes (Su)</b> (When a savage creature dies, it can immediately make a bite attack, snapping at any one creature in reach just before it succumbs.)</li><li><b>Disease(Su)</b> (A creature bitten by a savage creature must make a Fortitude save (DC 10 + 1/2 savage creature's racial HD + savage creature's Con modifier) or contract a supernatural disease called savage fever.)</li></ul><h4 align='center'><b>Special Qualities</b></h4><ul><li><b>Afflicted (Ex)</b> (Once transformed into a savage creature, a Greater Restoration spell causes the victim to revert to normal, provided the caster succeeds on a caster level check (DC = 10 + 1/2 the savage creature's hit dice + the savage creature's Charisma modifier).)</li><li><b>Ferocity (Ex)</b> (A savage creature fights without penalty while disabled and dying.)</li></ul><b>Senses</b>: darkvision 60 ft.<br /><b>Defensive Abilities</b> DR 5/magic, energy resistance acid 10, Immunity to disease, exhaustion, fatigue, mind-affecting, stunning, and pain-related effects<br /><b>Abilities</b>: Str +4, Con +4, Int -6(minimum 1)<br /><b>Skills</b>: Escape Artist +4 racial bonus, Intimidate +4 racial bonus, Listen +4 racial bonus, Spot +4 racial bonus, Disguise -4 penalty, Diplomacy -4 penalty, Gather Information -4 penalty<br /><b>Alignment</b>: Chaotic Evil<br /><b>Challenge Rating</b>: +1<br /><b>Level Adjustment</b>: +3 </p>"]

[H: label = getGMName() ]
[H: label = if(label=="", "Savage Creature", label + " (Savage Creature)") ]
[H: newER = 10 ]
[H: newDR = 5 ]
[H: tECL = getStrProp(Levels, "ECL") ]
[H, if(Level > 0), code: {
	[ newER = 10 ]
	[ newDR = 5 ]
	[ newNote = "Immune to disease, exhaustion, fatigue, mind-affecting, stunning, and pain-related effects" ]
	[ tECL = tECL+"+1" ]
	[ Levels = setStrProp(Levels, "ECL", tECL) ]
} ]
<!-- force the string property into a JSON object -->
[H: tDRER = json.merge(DRER, "{}") ]
[H: tNote = json.get(tDRER,  "Damage Reduction") ]
[H: tNote = json.set(tNote, "Note", newNote, "Magic", newDR) ]

[H: tER   = json.get(tDRER, "Energy Resistance") ]
[H, if(json.get(tER,"Acid") < 10): tER = json.set(tER, "Acid", newER) ]
[H: DRER = json.set("{}", "Damage Reduction", tNote, "Energy Resistance", tER) ]

[H, MACRO( "subRecalcDR@this" ): json.set( "{}", "Token", tToken ) ]

[H: newSQ = "" ]
[H: newDV = "" ]
[H, if(indexOf(SpecialQual,"darkvision") == -1): newDV = "darkvision 60 ft, " ]
[H, if(indexOf(SpecialQual,"afflicted") ==-1): newAfflicted = "Afflicted (Ex), " ]
[H, if(indexOf(SpecialQual,"ferocity") ==-1): newFerocity = "Ferocity (Ex), " ]

[H, if(newDV != ""): newSQ = listAppend(newAfflicted, newFerocity, newDV) ]
[H, if(newSQ != ""), code: {
	[ if(SpecialQual == "NA"): SpecialQual = "" ]
	[ SpecialQual = listAppend(SpecialQual, newSQ) ]
	[ if(newDV!=""): setSightType("Darkvision") ]
} ]

[H: oldSA = SpecialATK ]
[H, if(oldSA == lower("NA")): oldSA = "" ]

[H: index = indexOf(oldSA, "death throes") ]
[H, if(index == -1), code: {
	[ newSA = listAppend(oldSA, "death throes(Su)") ]
}; {
	[ newSA = oldSA ]
} ]
[H: SpecialATK = newSA ]

[H: oldSA = SpecialATK ]
[H, if(oldSA==lower("NA")): newSA = "" ]

[H: index = indexOf(oldSA, "disease") ]
[H, if(index == -1), code: {
	[ newSA = listAppend(oldSA, "disease(Su)") ]
}; {
	[ newSA = oldSA ]
} ]
[H: SpecialATK = newSA ]

[H: baseSpeed = json.get(Speed, "base")]
[H: spd = baseSpeed + 10]
[H: Speed = json.set(Speed, "base", spd)]
[H, MACRO("subRecalcMovement@this"): "Token=" + tToken]

[H: Level = Level + 3]

[H: tStrength = getProperty("Strength")]
[H: tStrength = if( tStrength == "", 4, tStrength + 4 )]
[H: setProperty("Strength", tStrength)]

[H: tConstitution = getProperty("Constitution")]
[H: tConstitution = if( tConstitution == "", 4, tConstitution + 4 )]
[H: setProperty("Constitution", tConstitution)]

[H: tIntelligence = getProperty("Intelligence")]
[H: tIntelligence = if( tIntelligence == "", 1, max(1,tIntelligence - 6) )]
[H: setProperty("Intelligence", tIntelligence)]

[H: tNaturalMod = getStrProp(ArmorClass, "NaturalMod")]
[H: tNaturalMod = if( tNaturalMod == "", 0, tNaturalMod )]
[H: ArmorClass =  setStrProp(ArmorClass, "NaturalMod", tNaturalMod + 2)]
[H, MACRO( "subRecalcAC@Lib:libDnD35Pathfinder" ): "Token=" + currentToken() ]

[H: subtypes = json.get(Race,"subtype")]
[H: subtypes = json.union(subtypes,json.append("","Chaotic","Evil"))]
[H: Race = json.set(Race,"subtype",subtypes)]

[H: Feats=setStrProp(Feats, "DieHard", 1)]

<!-- Skills Begin -->
[H: skillMods = json.set("{}","Escape Artist",4,"Intimidate",4,"Listen",4,"Spot",4,"Disguise",-4,"Diplomacy",-4,"Gather Information",-4)]
[H: tempArray = "[]"]
[H, foreach(skillObj,SkillsJ), code: {
	[H: name = json.get(skillObj,"name")]
	[H, if(json.contains(skillMods,name)): skillObj = json.set(skillObj,"racialmod",json.get(skillMods,name))]
	[H: tempArray = json.append(tempArray,skillObj)]
}]
[H: SkillsJ = tempArray]
<!-- Skills End -->
<!-- Attack Begins -->
<!-- Name=Bite ; Primary=1 ; Quantity=1 ; Manufactured=0 ; AtkBonus=0 ; CritMult=2 ; CritRange=20 ; Damage=1d8 ; DmgMax=4 ; DmgExtra=0d6 ; DmgExtraCrit=0d10 ; DmgExtraName= ; DmgBonusCap=50 ; TwoHanded=0 ; Finesse=0 ; OHLight=2 ; Ranged=0 ; -->
[H: Weapon12 = "Name=Bite ; Primary=1 ; Quantity=1 ; Manufactured=0 ; AtkBonus=0 ; CritMult=2 ; CritRange=20 ; Damage=1d8 ; DmgMax=4 ; DmgExtra=0d6 ; DmgExtraCrit=0d10 ; DmgExtraName= ; DmgBonusCap=50 ; TwoHanded=0 ; Finesse=0 ; OHLight=2 ; Ranged=0 ; "]

[H: setGMName(label) ]
[R,S,G: output]

!!
Last edited by neofax on Sun Jul 03, 2011 12:22 am, edited 1 time in total.

jsharen
Giant
Posts: 196
Joined: Tue Feb 05, 2008 3:39 pm

Re: New version of celestial button

Post by jsharen »

Thanks so much!! This will make my savage tides game so much easier :)

User avatar
lmarkus001
Great Wyrm
Posts: 1867
Joined: Sat Mar 29, 2008 12:30 am
Location: Layfayette Hill, PA

Re: New version of celestial button

Post by lmarkus001 »

Nice, I will add this into the base framework too.

One question, is this a template that should be available to be applied to summoned creatures (like Celestial and Fiendish)?

User avatar
Paradox
Dragon
Posts: 724
Joined: Fri Feb 27, 2009 4:01 pm

Re: New version of celestial button

Post by Paradox »

Interesting...

I tried using the Apply Young Template button, and I drew this error...

Unknown macro "LibChgSize@Lib:libDnD35Pathfinder

FYI
I no longer believe that MapTools is usuable or intended just for programmers. MapTools is for everyone.

jsharen
Giant
Posts: 196
Joined: Tue Feb 05, 2008 3:39 pm

Re: New version of celestial button

Post by jsharen »

It wouldn't normally be available for a summoned creature. Its more a disease or plague.

User avatar
lmarkus001
Great Wyrm
Posts: 1867
Joined: Sat Mar 29, 2008 12:30 am
Location: Layfayette Hill, PA

Re: New version of celestial button

Post by lmarkus001 »

Paradox wrote:Interesting...

I tried using the Apply Young Template button, and I drew this error...

Unknown macro "LibChgSize@Lib:libDnD35Pathfinder

FYI
Oh ho! I had started work on a routine to handle size change on any map type, that is probably there because I got part way but did not complete... I will add that to the be fixed and the to be finished lists lol

neofax
Great Wyrm
Posts: 1694
Joined: Tue May 26, 2009 8:51 pm
Location: Philadelphia, PA
Contact:

Re: New version of celestial button

Post by neofax »

@Paradox: I am pretty sure I wrote a fix for that template somwehere here on the boards.

Many of the templates now don't really require a full blown template as most of it can be handled via a ActiveMod. If only one day we could have weapons in a JSON format so we could on the fly manipulate them via a switch on the attack dialog. This would make one-handed/two-handed and thrown weapons ohh so much easier.

Post Reply

Return to “D&D 3.5/Pathfinder 1e Campaign Macros”