Rod's D&D 5e Framework

Framework(s) for D&D 5e.

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

Post Reply
OokOok
Kobold
Posts: 15
Joined: Wed Nov 13, 2019 12:27 am

Re: Rod's D&D 5e Framework

Post by OokOok »

Thanks Rod. I'm actually working (quite slowly) on two different projects that I'm hoping to someday fold into your FW.

The first is to write some kind of text manipulation code to convert some pre-existing JSON sources of spells and bestiary data into a format that will import into your framework. Hoping to bulk-load a lot of the content in this way. (If you already have something along those lines you'd be willing to share I'm sure many folks would appreciate that.)

The second is a rework of the state icons to align more closely with the 5E spell lists. Essentially, a given spell might have any of these features: for a caster, it might require concentration, it might result in the placement of a targeting token (in the most simple case, that is the placement of your Spell token), it might result in the toggling of an aura (example: Aura of Vitality), and/or it might result in an effect on the caster. On the target, it might invoke a Condition, it might result in a general effect, it might result in an aura (example: Fairie Fire). Anyway, I've been doing an analysis on the 5E spells to detail all this out, and then I'm hoping to assemble a collection of state markers so that "useful" states could be assigned to caster + target(s) upon casting of specific spells.

My short-term goal is to extend work to provide a lot more per-spell customization. I'm also adding per-spell entries to the Light table to supplement your generic entries. The idea is that folks could tweak lighting such that different spells look different when they cause lighting or aura effects. So I've got different entries (for example) for Dawn, Sunlight, and Moonbeam spells. Rather than them all sharing the same generic Light definition I can theoretically make Dawn more orange, Sunlight more yellow, and Moonbeam more blue. Perhaps overkill, but only requires a one-time setup and allows for potential tweaking later.

Long-term, hoping that some support can get built to automatically toggle multiple states when a given spell is cast. For example, if a player casts Barkskin, the "barkskin" state would be auto-invoked. In my set of redesigned state icons, the Barkskin icon would be surrounded by a border of 1/2 yellow, denoting a concentration spell, and 1/2 silver, denoting a spell giv singome kind of protection. (Border colors mean something in my state icons.) If the icon is in the NW corner of the token, then this is the SPELLCASTER and it indicates that the PC is CONCENTRATING ON BARKSKIN - not just concentrating on some random spell. If the token is instead somewhere in a 3x3 grid on the token then this indicates the token is the TARGET of the barkskin spell (which someone is concentrating on). The target MIGHT be the caster, in which case the icon would appear in both places.

Anyway, thanks again. Your FW is providing me with lots of entertainment!

Taios
Kobold
Posts: 2
Joined: Sat Oct 10, 2009 1:45 pm

Re: Rod's D&D 5e Framework

Post by Taios »

Thanks Rod. Amazing work.
Is there any way to import the content of compedium.zip archive in your FW?
I'm planning to test your framework with my friends but I would like to be able to import race, spell, class subclass etc.
Please, could you provide me some support?

Nikkor89
Kobold
Posts: 4
Joined: Sun Apr 19, 2020 5:11 pm

Re: Rod's D&D 5e Framework

Post by Nikkor89 »

Hi Rod.
First. Thank you for the amazing work.
I've been working on adding things (races, classes) to your frame but i've been having some problems with coding the half-elf variants since I am a newbie.
First of all I created a new variable property "Subrace" and from there a new variable "Subracefeature" for the feature chosen in place of the half-elf "skill versality".
Then I created new feats to explain the variant chosen and put a switch function to add the specific feat to the character sheet.
Till here all ok.
What I'm having trouble is the code for the features. for example I can't get the change of speed given from Fleet of Foot (wood elf trait) or to insert the Cantrip selection from the High Elf trait.
I repeat: I am new to coding and everything I''ve done is pretty much try a bunch of different things you had already coded for other races (es dragonborn). That said it would not be a problem for me to modify manually the sheet since you've done such a great job but since I'm new I don't know if it's possible to code the changes or if it would be too complicated to do XD

Code: Select all

<!-----------------Race------------------->
[h:res=input("var|High Elf,Wood Elf,Drow|Elf Parent|list|value=string")]
[h:abort(res)]
[h:setProperty("Race","value=Half-Elf;text="+var)]
[h:setProperty("Subrace", "value="+var)]

<!-----------------Subrace------------------->
[h:atr=getProperty("Subrace")]
[h:value=getStrProp(atr,"value")]

[h,switch(value):
case "Wood Elf": res=input("var|Keen Senses,Elf Weapon Training,Fleet of Foot,Mask of the Wild|Select one|list|value=string");
case "High Elf": res=input("var|Keen Senses,Elf Weapon Training,Cantrip|Select one|list|value=string");
case "Drow": res=input("var|Keen Senses,Drow Magic|Select one|list|value=string")]

[h:setProperty("SubraceFeature", "value="+var)]

<!-----------------Feat------------------->
<!-----------------other part of the code.....------------------->
[h:Property=json.set(Property,"Half-Elf","Race")]
[h:atr=getProperty("Subrace")]
[h:value=getStrProp(atr,"value")]

[h,switch(value):
case "Wood Elf": Property=json.set(Property,"Wood Elf Parent","Race");
case "High Elf": Property=json.set(Property,"High Elf Parent","Race");
case "Drow": Property=json.set(Property,"Drow Parent","Race")]

[h:atr=getProperty("SubraceFeature")]
[h:value=getStrProp(atr,"value")]

[h,switch(value):
case "Keen Senses": Property=json.set(Property,"Keen Senses","Race");
case "Elf Weapon Training": Property=json.set(Property,"Elf Weapon Training","Race");
case "Fleet of Foot": Property=json.set(Property,"Fleet of Foot","Race");
case "Mask of the Wild": Property=json.set(Property,"Mask of the Wild","Race");
case "Cantrip": Property=json.set(Property,"Cantrip","Race");
case "Drow Magic": Property=json.set(Property,"Drow Magic","Race")]
[h:setProperty(group,Property)]

cwadley
Kobold
Posts: 1
Joined: Tue Mar 17, 2020 8:59 pm

Re: Rod's D&D 5e Framework

Post by cwadley »

I love the framework. I'll second the request as to whether the compendium can be imported. Thanks!

User avatar
rtakehara
Cave Troll
Posts: 48
Joined: Mon Nov 11, 2019 5:11 pm
Contact:

Re: Rod's D&D 5e Framework

Post by rtakehara »

Nikkor89 wrote:
Sun Apr 19, 2020 6:04 pm
Hi Rod.
First. Thank you for the amazing work.
I've been working on adding things (races, classes) to your frame but i've been having some problems with coding the half-elf variants since I am a newbie.
First of all I created a new variable property "Subrace" and from there a new variable "Subracefeature" for the feature chosen in place of the half-elf "skill versality".
Then I created new feats to explain the variant chosen and put a switch function to add the specific feat to the character sheet.
Till here all ok.
What I'm having trouble is the code for the features. for example I can't get the change of speed given from Fleet of Foot (wood elf trait) or to insert the Cantrip selection from the High Elf trait.
I repeat: I am new to coding and everything I''ve done is pretty much try a bunch of different things you had already coded for other races (es dragonborn). That said it would not be a problem for me to modify manually the sheet since you've done such a great job but since I'm new I don't know if it's possible to code the changes or if it would be too complicated to do XD
First of all, I like your code, I use a lot of IFs when I should be using SWITCH as you did... good job!

That being said, I tend to clump all racial features into a single feature since having multiple features like Skill versatility, fey ancestry, darkvision, etc, would take too much space in the character sheet and players could forget taking all the features, so I just make a Half-Elf feature with everything. What I would do for features is a single Half-Elf (Variant) and replace the Skill versatility with the variant options.

And about Movement Speed and Cantrip, in the High Elf I did like this:

Code: Select all

<!-----------------Speed------------------->
[h:atr=getProperty("Speed")]
[h:value=getStrProp(atr,"value")]

[h:atr=setStrProp(atr,"value","30 ft.")]

[h:setProperty("Speed",atr)]
And this:

Code: Select all

<!-----------------Spells------------------->
[h:group="Level 0"]
[h:spellobj=getLibProperty("Wizard", "Lib:Character Creation")]
[h:spellobj=json.get(spellobj,group)]
[h:spellList=json.toList(spellobj)]

[h:inputList=getLibProperty(group,"Lib:Character")]
[h:inputList=json.fields(inputList)]
[h:inputList=listSort(inputList,"N")]
[h:Property=getProperty(group)]

[h,if(json.type(Property)=="UNKNOWN"):currentList="{}";currentList=json.fields(Property)]

[h:value=json.fields(currentList)]
[h,count(listcount(value),""),code:{
	[h:item=listget(value,roll.count)]
	[h:itemFind=listfind(spellList,item)]
	[h,if(itemFind==-1):"";spellList=listdelete(spellList,listfind(spellList,item))]
}]


[h:res=input("var|Choose one from Wizard Spells||label|span=true",
"spell1|"+spellList+"|Cantrip|list|value=string")]
[h:abort(res)]

[h:Property=json.set(Property,spell1,json.fromStrProp("prep=1;source=Race;customAtr=Intelligence"))]



[h:setProperty(group,Property)]
Does this help? Also, I may be a little lazy, but yeah, if something that can be done manually is too complicated to automate, I just explain how is the simplest way to do it and its all good haha

User avatar
rtakehara
Cave Troll
Posts: 48
Joined: Mon Nov 11, 2019 5:11 pm
Contact:

Re: Rod's D&D 5e Framework

Post by rtakehara »

OokOok wrote:
Sat Apr 18, 2020 5:58 pm
The first is to write some kind of text manipulation code to convert some pre-existing JSON sources of spells and bestiary data into a format that will import into your framework. Hoping to bulk-load a lot of the content in this way. (If you already have something along those lines you'd be willing to share I'm sure many folks would appreciate that.)
I don't, but I recently discovered that you can get D&D beyond characters in a JSON format so I was wondering if it's possible to import characters from there, it might be too hard to be worth it... also, @Kico from Discord is working on a JSON for the old bestiary, he might be able to help, dunno

Oh, and about the second project, sounds really impressive! How is it going to work, like, add a "cast" option to the spell? will it keep track of turn duration?

User avatar
rtakehara
Cave Troll
Posts: 48
Joined: Mon Nov 11, 2019 5:11 pm
Contact:

Re: Rod's D&D 5e Framework

Post by rtakehara »

Taios wrote:
Sat Apr 18, 2020 7:37 pm
Thanks Rod. Amazing work.
Is there any way to import the content of compedium.zip archive in your FW?
I'm planning to test your framework with my friends but I would like to be able to import race, spell, class subclass etc.
Please, could you provide me some support?
cwadley wrote:
Sun Apr 19, 2020 9:44 pm
I love the framework. I'll second the request as to whether the compendium can be imported. Thanks!
Unfortunately no, sorry

OokOok
Kobold
Posts: 15
Joined: Wed Nov 13, 2019 12:27 am

Re: Rod's D&D 5e Framework

Post by OokOok »

Thanks Rod. Re: my work to re-do state icons, etc. Phase 1 is just to finish the analysis of spells so I can clearly lay out what effect(s) are associated with each spell and ensure I have appropriate state icons, Light defs, and tokens. I'll probably then run it in my home game for a while just doing manual state toggling to get a sense of the overall suitability. My coding skills in MT/java currently aren't ready to deal with any automation/targeting code.

Speaking of coding, I'm trying to get more familiar by doing some basic cut/paste/edit from your macros to create (for now) some additional subclasses to match those in my home game. I figure I must be making a rookie mistake because it isn't working, but I can see no reason why not! Hoping you can point out my error?

Trying to add an Arcane Trickster subclass to Rogue.
1) Copied pre-existing Thief macro from the Rogue group. Made no mods but saved it back to the Rogue group as (new macro) "Arcane Trickster". (The only diff that really SHOULD be there, but I have NOT yet implemented, is that AT should set spellcasting="Intelligence" instead of to "-".) Carefully duplicated macro settings, most notably, ensured that "Applied to selected tokens" was set. Only other change required on the new macro was to turn on "Allow players to edit", which I doubt is relevant...but that's what was already set on the original Thief macro so I duped it.

2) Modified the Rogue class setting to modify the subclass list from "Thief" to "Arcane Trickster,Thief" (no quotes, obviously). Also tried swapping order here during testing to see if it mattered. Also ensured that name of the Arcane Trickster macro exactly matches the name of the subclass defined in the Classes list - I cut/pasted the macro name into the list of subclasses to be certain.

3) Added an Arcane Trickster Feat (as I see you had a Thief feat that corresponded to your Thief subclass). Confirmed that spelling/spacing of the Feat name matches the macro and subclass names.

4) Built a 2nd level Rogue token using New Character + Level Up wizards.

5) Using a copy of the 2nd level token, Level up and select Thief = works.
Using a (different) copy of the 2nd level token, Level up and select Arcane Trickster = "Error executing "switchToken": the token name or id "" is unknown." Token is level 3, but never gets subclass assignment.

I've confirmed MULTIPLE times that the Arcane Trickster macro is a dupe of the Thief macro, so there's zero code diffs between what is supposedly being executed here.

Thoughts?

Nikkor89
Kobold
Posts: 4
Joined: Sun Apr 19, 2020 5:11 pm

Re: Rod's D&D 5e Framework

Post by Nikkor89 »

rtakehara wrote:
Tue Apr 21, 2020 4:54 pm
First of all, I like your code, I use a lot of IFs when I should be using SWITCH as you did... good job!

That being said, I tend to clump all racial features into a single feature since having multiple features like Skill versatility, fey ancestry, darkvision, etc, would take too much space in the character sheet and players could forget taking all the features, so I just make a Half-Elf feature with everything. What I would do for features is a single Half-Elf (Variant) and replace the Skill versatility with the variant options.

And about Movement Speed and Cantrip, in the High Elf I did like this:

Does this help? Also, I may be a little lazy, but yeah, if something that can be done manually is too complicated to automate, I just explain how is the simplest way to do it and its all good haha
Yes. That helped a lot.
My probelm was for some variants since you have multiple choices for different things for example:
Tiefling: Ability score Standard (CHA) or Feral (DEX) and one Feature from: Infernal Legacy, Devil's Tongue, Hellfire or Winged
so if I had to create a race for every combination (8 just for tiefling...) it would have been horrible.
but with some work and switch (),code: I've been able to resolve.

I've now added all the races, their variants and monster races (PH, SCAG and Volo) in your framework so if someone is interested I can link the Lib:Character Creation and Lib:Character Tokens (you need the feats with the explanation for some features).
That said this is still a Work in Progress since I plan to start working on the backgrounds options if someone is not doing it already.

Another question/request:
is it possible to manage different equipment lists but have all of them in the equipment section in the sheet? (for the carrying capacity)
what I mean is have a "manage weapons", "manage armors" etc... even "manage magic items" so to better organize everything.

User avatar
rtakehara
Cave Troll
Posts: 48
Joined: Mon Nov 11, 2019 5:11 pm
Contact:

Re: Rod's D&D 5e Framework

Post by rtakehara »

OokOok wrote:
Tue Apr 21, 2020 7:48 pm
Trying to add an Arcane Trickster subclass to Rogue.
1) Copied pre-existing Thief macro from the Rogue group. Made no mods but saved it back to the Rogue group as (new macro) "Arcane Trickster". (The only diff that really SHOULD be there, but I have NOT yet implemented, is that AT should set spellcasting="Intelligence" instead of to "-".) Carefully duplicated macro settings, most notably, ensured that "Applied to selected tokens" was set. Only other change required on the new macro was to turn on "Allow players to edit", which I doubt is relevant...but that's what was already set on the original Thief macro so I duped it.

2) Modified the Rogue class setting to modify the subclass list from "Thief" to "Arcane Trickster,Thief" (no quotes, obviously). Also tried swapping order here during testing to see if it mattered. Also ensured that name of the Arcane Trickster macro exactly matches the name of the subclass defined in the Classes list - I cut/pasted the macro name into the list of subclasses to be certain.

3) Added an Arcane Trickster Feat (as I see you had a Thief feat that corresponded to your Thief subclass). Confirmed that spelling/spacing of the Feat name matches the macro and subclass names.

4) Built a 2nd level Rogue token using New Character + Level Up wizards.

5) Using a copy of the 2nd level token, Level up and select Thief = works.
Using a (different) copy of the 2nd level token, Level up and select Arcane Trickster = "Error executing "switchToken": the token name or id "" is unknown." Token is level 3, but never gets subclass assignment.

I've confirmed MULTIPLE times that the Arcane Trickster macro is a dupe of the Thief macro, so there's zero code diffs between what is supposedly being executed here.
I have no idea what could be happening, I tried following your steps a bunch of times with some variations and it worked fine, all I did was duplicate Thief, rename it and add Arcane Trickster to the subclass list exactly as you did, I usually get that switchToken error when I am in a map and the token is in another map. I did a working Arcane Trickster with the following code, give it a try. (players are not allowed to edit and it is set to apply to selected, though it shouldn't matter)

Another variables could be I am using MT 1.6.1 and the Framework is 2.3, but the only changes I did to the character creation was on the backgrounds so it also shouldn't matter.

Anyway, give it a look!

Code: Select all

[h:tokenName=macro.args]

[h:id=findToken(tokenName)]
[h:switchToken(id)]

[h:outputPC=getLibProperty("PC Output", "Lib:Character")]
[h:outputGM=getLibProperty("GM Output", "Lib:Character")]


[h:output=if(isGM()==1,outputGM,outputPC)]



[h:class="Rogue"]
[h:spellcasting="Intelligence"]
[h:hitDice="d8"]
[h:level=""]

[h:ClassObj=getProperty("Class&Level")]
[h,if(json.type(ClassObj)=="UNKNOWN"),code:{};{

	[h:classList=json.fields(ClassObj)]
	[h:match=listFind(classList,class)]
	[h:currentClassObj=json.get(ClassObj,class)]
	[h,if(json.type(currentClassObj)=="UNKNOWN"):level=0;level=json.get(currentClassObj,"level")]
	[h,if(json.type(currentClassObj)=="UNKNOWN"):subclass=0;subclass=json.get(currentClassObj,"subclass")]

}]

[h:subclass="Arcane Trickster"]
<!-----------------LEVEL 3------------------->
[r,if(level==3),code:{
	[h:ClassObj=json.set(ClassObj,class,'{"level":'+level+',"hitDice":"'+hitDice+'","spellcasting":"'+spellcasting+'","subclass":"'+subclass+'"}')]
	[h:setProperty("Class&Level",ClassObj)]
	
	
	<!-----------------Feat------------------->
	[h:featList=getLibProperty("Feats", "Lib:Character Creation")]
	
	[h:group="Feats"]
	[h:inputList=getLibProperty(group,"Lib:Character")]
	[h:inputList=json.fields(inputList)]
	[h:inputList=listSort(inputList,"N")]
	[h:Property=getProperty(group)]
	
	[h,if(json.type(Property)=="UNKNOWN"):currentList="{}";currentList=json.fields(Property)]
	
	[h,count(listcount(currentList)),code:{
		[h:currentItem=listget(currentList,roll.count)]
		[h:delete=listfind(inputList,currentItem)]
		[h:inputList=listdelete(inputList,delete)]
	}]
	
	[h:Property=json.set(Property,"Arcane Trickster","Class")]
	[h:setProperty(group,Property)]


	<!-----------------Spells------------------->
	[h:group="Level 0"]
	[h:inputList=getLibProperty(group,"Lib:Character")]
	[h:inputList=json.fields(inputList)]
	[h:inputList=listSort(inputList,"N")]
	[h:Property=getProperty(group)]
	
	[h,if(json.type(Property)=="UNKNOWN"):currentList="{}";currentList=json.fields(Property)]
	
	
	[h:Property=json.set(Property,"Mage Hand",json.fromStrProp("prep=1;source=Rogue;customAtr=0"))]
	
	
	
	[h:setProperty(group,Property)]


};{}]

<!-----------------LEVEL 9------------------->
[r,if(level==9),code:{
	[h:ClassObj=json.set(ClassObj,class,'{"level":'+level+',"hitDice":"'+hitDice+'","spellcasting":"'+spellcasting+'","subclass":"'+subclass+'"}')]
	[h:setProperty("Class&Level",ClassObj)]
	
	
	<!-----------------Feat------------------->
	[h:featList=getLibProperty("Feats", "Lib:Character Creation")]
	
	[h:group="Feats"]
	[h:inputList=getLibProperty(group,"Lib:Character")]
	[h:inputList=json.fields(inputList)]
	[h:inputList=listSort(inputList,"N")]
	[h:Property=getProperty(group)]
	
	[h,if(json.type(Property)=="UNKNOWN"):currentList="{}";currentList=json.fields(Property)]
	
	[h,count(listcount(currentList)),code:{
		[h:currentItem=listget(currentList,roll.count)]
		[h:delete=listfind(inputList,currentItem)]
		[h:inputList=listdelete(inputList,delete)]
	}]
	
	[h:Property=json.set(Property,"Magical Ambush","Class")]
	[h:setProperty(group,Property)]


};{}]


<!-----------------LEVEL 13------------------->
[r,if(level==13),code:{
	[h:ClassObj=json.set(ClassObj,class,'{"level":'+level+',"hitDice":"'+hitDice+'","spellcasting":"'+spellcasting+'","subclass":"'+subclass+'"}')]
	[h:setProperty("Class&Level",ClassObj)]
	
	
	<!-----------------Feat------------------->
	[h:featList=getLibProperty("Feats", "Lib:Character Creation")]
	
	[h:group="Feats"]
	[h:inputList=getLibProperty(group,"Lib:Character")]
	[h:inputList=json.fields(inputList)]
	[h:inputList=listSort(inputList,"N")]
	[h:Property=getProperty(group)]
	
	[h,if(json.type(Property)=="UNKNOWN"):currentList="{}";currentList=json.fields(Property)]
	
	[h,count(listcount(currentList)),code:{
		[h:currentItem=listget(currentList,roll.count)]
		[h:delete=listfind(inputList,currentItem)]
		[h:inputList=listdelete(inputList,delete)]
	}]
	
	[h:Property=json.set(Property,"Versatile Trickster","Class")]
	[h:setProperty(group,Property)]



};{}]

<!-----------------LEVEL 17------------------->
[r,if(level==17),code:{
	[h:ClassObj=json.set(ClassObj,class,'{"level":'+level+',"hitDice":"'+hitDice+'","spellcasting":"'+spellcasting+'","subclass":"'+subclass+'"}')]
	[h:setProperty("Class&Level",ClassObj)]
	
	
	<!-----------------Feat------------------->
	[h:featList=getLibProperty("Feats", "Lib:Character Creation")]
	
	[h:group="Feats"]
	[h:inputList=getLibProperty(group,"Lib:Character")]
	[h:inputList=json.fields(inputList)]
	[h:inputList=listSort(inputList,"N")]
	[h:Property=getProperty(group)]
	
	[h,if(json.type(Property)=="UNKNOWN"):currentList="{}";currentList=json.fields(Property)]
	
	[h,count(listcount(currentList)),code:{
		[h:currentItem=listget(currentList,roll.count)]
		[h:delete=listfind(inputList,currentItem)]
		[h:inputList=listdelete(inputList,delete)]
	}]
	
	[h:Property=json.set(Property,"Spell Thief","Class")]
	[h:setProperty(group,Property)]

	<!-----------------Resources------------------->
	[h:resourcesObj=getProperty("Resources")]
	[h,if(json.type(resourcesObj)=="UNKNOWN"):resourcesObj="{}";""]
	
	[h:atribute=getProperty("Charisma")]
	[h:atrValue=getStrProp(atribute,"value")]
	[h,if(atrValue==""):atrValue=0;atrValue=eval(string(atrValue))]
	[h:mod=floor(number(atrValue)/2)-5]
	[h:mod=if(mod<1,1,mod)]
	
	[h:resourcesObj=json.set(resourcesObj,"Spell Thief",json.fromStrProp("value=0;total=1;reset=1"))]
	
	[h:setProperty("Resources",resourcesObj)]


};{}]


OokOok
Kobold
Posts: 15
Joined: Wed Nov 13, 2019 12:27 am

Re: Rod's D&D 5e Framework

Post by OokOok »

rtakehara wrote:
Wed Apr 22, 2020 10:13 am
I have no idea what could be happening, I tried following your steps a bunch of times with some variations and it worked fine, all I did was duplicate Thief, rename it and add Arcane Trickster to the subclass list exactly as you did, I usually get that switchToken error when I am in a map and the token is in another map. I did a working Arcane Trickster with the following code, give it a try. (players are not allowed to edit and it is set to apply to selected, though it shouldn't matter)

Another variables could be I am using MT 1.6.1 and the Framework is 2.3, but the only changes I did to the character creation was on the backgrounds so it also shouldn't matter.
D'oh! First thing I did was diff your Trickster code with mine...and it was TOTALLY different. Huh? Went back to your original framework, rather than my dev version, and discovered that - somewhere along the way - I had saved the base Rogue class code as the Thief subclass code, then created my Trickster from the bad copy of Thief. I'm such an idiot!

Is your code up on github or similar by any chance so I could pull a copy rather than use my (clearly error-prone) cut/paste method to grab the pre-existing stuff?

Thanks for taking the time to try to repro what, in the end, was PEBKAC! :?

Taios
Kobold
Posts: 2
Joined: Sat Oct 10, 2009 1:45 pm

Re: Rod's D&D 5e Framework

Post by Taios »

rtakehara wrote:
Tue Apr 21, 2020 5:21 pm
Taios wrote:
Sat Apr 18, 2020 7:37 pm
Thanks Rod. Amazing work.
Is there any way to import the content of compedium.zip archive in your FW?
I'm planning to test your framework with my friends but I would like to be able to import race, spell, class subclass etc.
Please, could you provide me some support?
cwadley wrote:
Sun Apr 19, 2020 9:44 pm
I love the framework. I'll second the request as to whether the compendium can be imported. Thanks!
Unfortunately no, sorry

Well Rod, however it's still an amazing framework. I'll try to integrate the missing classes, backgrounds, etc. by means of editing work.
Please, could you show me how do you format tables in the FW? The formating syntax is not clear for me.
Cheers

OokOok
Kobold
Posts: 15
Joined: Wed Nov 13, 2019 12:27 am

Re: Rod's D&D 5e Framework

Post by OokOok »

I've found an apparent bug.

I was mass importing a bunch of items to the spell database and I had a malformed entry caused by a bad regex that I didn't notice until later. The entry appears as a 3rd level spell with title of
[d](roll "1d")ngues
and no body. This entry, however, defies attempts to delete it. I can click the X next to the entry and nothing happens. I can open the entry and try Remove - I'm prompted to delete and confirming returns to the main form, but nothing happens. I can open the entry and edit the title. For example, I changed it to "AAA". When I returned to the main form the bad entry is still there, but now there's a new entry of "AAA" that I CAN delete (leaving the bad entry still present). Strangely, however, when I tried PREFIXING the title with AAA (rather than simply changing it to JUST AAA) I ended up with TWO bad entries in my DB. The first with title [d](roll "1d")ngues and the second with title AAA[d](roll ...note that the title of the 2nd entry isn't exactly like AAA+firstentry. If I edit the 2nd one and rename it as "AAA" I get a 3rd entry (named AAA) that I CAN delete, now leaving me still with TWO bad entries.

It may be specific to entries starting with [d], as I had about 8 or so malformed entries that were other mixtures of text and markup, but all the others deleted w/o issue.

I exported the DB and here are the offending spells I can't delete. Note that the key is an unfortunate mess of text and markdown. The entry that follows is apparently the one that resulted from me prefixing the bad entry with AAA. Finally, note that, although the exported json shows data for that first key, when I click on the entry the body is not displayed to me.
" [d](roll \"1d\")ngues":"*3rd level divination* \n**Casting Time:** Action \n**Range:** [d](roll \"1d\")uch \n**Components:** V, M (a small clay model of a ziggurat) \n**Duration:** 1 hour \n\n---\n\nThis spell grants the creature you [d](roll \"1d\")uch the ability [d](roll \"1d\") understand any spoken language it hears. Moreover, when the target speaks, any creature that knows at least one language and can hear the target understands what it says.","AAA[d](roll ":""},"
While you track this down, is there a simple was to reset the database of spells so I can re-import a clean copy? EDIT 4/24: OK - I found the property where the spells are stored on the lib token and manually removed the two offending entries.
Last edited by OokOok on Fri Apr 24, 2020 8:55 pm, edited 1 time in total.

AndyBigDM
Kobold
Posts: 3
Joined: Wed Apr 22, 2020 2:06 pm

Re: Rod's D&D 5e Framework

Post by AndyBigDM »

Firstly... Thanks for all your hard work on this Rod! I'm brand new to maptools, and ran my first session with it last week using it pureply for a visual aid (made some basic PC tokens just showing AC, HP and their main weapon attacks (we rolled dice in discord/irl).
But then I discovered frameworks were a thing!
And then I discovered yours!!! And what a lovely thing it is too. Proper job!
I don't even mind the reduced content as I'd rather have a top notch, good looking, simple framework that I can put in what I need, as and when I need it. Sure it would be nice to have everything already in there - but I'm sure (as you and others have already mentioned) that it will get there in time.

So I've spent most of this last week trying to understand how it all works whilst properly putting my campaing and characters into a copy of your framework. And last night I ran my 1st session using it properly (2nd ever session in maptool). And we all loved it. And I only had to get my book and dice out because I'd made a mistake when coding up a goblin statblock (which I managed to correct during the session). Basically I love it! Thanks!

However

We came across a bug that completely froze up maptools and required a forced shutdown of the application.
We retested to confirm, and it seems that the dice rollers in the 'Campaign' macros window are broken.

I had tested these buttons as GM, and they worked fine.
But once a player joined the server and pressed a dice roller button - it crashed the app.
It basically just continued to keep rolling dice after dice and you could hear a constant ringing of notifications as it just froze up maptools.
I have tested again just now with a separate instance of maptools joined as a player and it seems that when the player rolls the dice - the GM then somehow automatically activated the [roll crit] macro?..twice!?
But this is only with one PC token in for test. It was even buggier when I had 5 PCs all joined. Maybe something like every player was being made to automatically active [roll crit] twice on every roll or something weird? (As I say, it was just an endless display of dice rolls in Chat before it freezes up)
I noticed that the dice buttons just call up the 'Dice Roller@Lib:Campaign' macro, so I brought a copy of that across to the Campaign Window to test too, and it still acts funny.
So I guess the bug must be in the actual 'Dice Roller' macro?

Has anyone else actually played any games with this latest framework yet?
Anyone else actually tried rolling these dice as players?
I've definitely not changed anything with these dice (and just double checked with a re-downloaded original 2.3 file).

???

Screenshot for reference;
Attachments
Dice Roller Bug.jpg
Dice Roller Bug.jpg (42.31 KiB) Viewed 4420 times

AndyBigDM
Kobold
Posts: 3
Joined: Wed Apr 22, 2020 2:06 pm

Re: Rod's D&D 5e Framework

Post by AndyBigDM »

Nikkor89 wrote:
Wed Apr 22, 2020 9:04 am
I've now added all the races, their variants and monster races (PH, SCAG and Volo) in your framework so if someone is interested I can link the Lib:Character Creation and Lib:Character Tokens (you need the feats with the explanation for some features).
That said this is still a Work in Progress since I plan to start working on the backgrounds options if someone is not doing it already.
Interested!!!

I've already added a couple of extra races for my players (Aarakocra, Aasimar & Tortle) - but if you've gone to so much effort getting everything else in I can't just let you keep that to youself now can I!?
Though If you're still working on adding more I will happily wait until you're ready to share...

Post Reply

Return to “D&D 5e Frameworks”