General D&D Next (5e) Framework

Framework(s) for D&D 5e.

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

Protesilaus
Kobold
Posts: 24
Joined: Wed Jul 27, 2011 6:48 pm

Re: General D&D Next (5e) Framework

Post by Protesilaus »

That's what I get for not reading completely into the new version. I'll have to update the skills.

Do you have a link to the mouseover macro your referring too? I haven't seen it (although now that alias is posting in this thread he may have a bit of input).

yorick
Cave Troll
Posts: 93
Joined: Tue Sep 25, 2012 8:05 am

Re: General D&D Next (5e) Framework

Post by yorick »

Here's the link: http://forums.rptools.net/viewtopic.php?f=23&t=21892

It has the macro I'm currently using in your framework.

I should clarify: I'm not suggesting you should scrap your own macro and layout. I just used alias' creation because that's a whole lot quicker and easier for me than editing your macro to do what I need it to do for my campaign, with Sunday being play day and me still needing to update all the player and monster tokens to reflect the latest packet.
There are a lot of good ideas you can get from his macro, though, and then put your own spin on how you think the output should look, how attacks get created, &c.

So, yay, I have your token, with a generic attack macro I grabbed from alias. If I can figure out how to create a stat check macro, we'll be good to go for Sunday.

There is a TON of stuff that a 5e framework could have.

I am thinking about dropping in a spell library, alias has one ready-made.
Maneuvers are not currently represented. Special monk powers are not represented. There's no Ki counter. If you'd want to get really funky, you could track martial damage dice spent per round. Targeting is an option, though I'd probably shy away from automation. Targeting has the advantage that the DM, for AoE powers, has an easy list to go through for all the ability checks he has to make on monsters. (*) It can also be used to apply stats, see the veggiesama framework.

And, seriously, I'm not asking you to add all that in. A basic framework is all that's needed for play testing. The rules are so much in flux, and no one can predict whether final 5e will be worth playing, and thus worth all that effort.

(*) 4e does "attack v Reflex/Will/Fort". 5e did away with Non-AC-Defense, and so instead, AoE attacks don't have an attack roll but require a stat check against spell DC.

yorick
Cave Troll
Posts: 93
Joined: Tue Sep 25, 2012 8:05 am

Re: General D&D Next (5e) Framework

Post by yorick »

On Brutal and exploding dies: Turns out Maptool has that built in. 1d8r2 is 1d8 Brutal 1. So, no need to get extra-fancy with it. Unless you really want to see that a re-roll happened, because otherwise, MT does it invisible to you.

Protesilaus
Kobold
Posts: 24
Joined: Wed Jul 27, 2011 6:48 pm

Re: General D&D Next (5e) Framework

Post by Protesilaus »

yorick wrote:On Brutal and exploding dies: Turns out Maptool has that built in. 1d8r2 is 1d8 Brutal 1. So, no need to get extra-fancy with it. Unless you really want to see that a re-roll happened, because otherwise, MT does it invisible to you.
My problem isn't one or the other, but both simultaneously. 1d8er2 and 1d8r2e don't work.

I'll move more of the Macro's to the Library token to make it easier to change in the future (should have done that to begin with).

Protesilaus
Kobold
Posts: 24
Joined: Wed Jul 27, 2011 6:48 pm

Re: General D&D Next (5e) Framework

Post by Protesilaus »

For Skills so if I understand this right, you roll a d20 + Ability Modifier + Skill Dice?

If that is the case the current implementation (the one I posted 2 days ago) accepts the skill modifier to be a dice now. So if your ability score is a 4 and your skill dice is a d6, you can put your skill as a 4+1d6 and it'll correctly calculate the rolls.

yorick
Cave Troll
Posts: 93
Joined: Tue Sep 25, 2012 8:05 am

Re: General D&D Next (5e) Framework

Post by yorick »

On Skills: Close, just that the focus is on stat checks, not skills.

Give you an example: You want to bluff someone. DM tells you to roll a Charisma check. You'd take roll + charisma mod. If you have the Bluff skill, it's roll + charisma mod + skill die.

So the focus is on stat checks. Skills just add to stat checks. Bluff will most often be a Charisma check, but if your DM decides that in this particular case, Wisdom is more appropriate, it'll apply to Wisdom instead.

There might not even be a skill list in the framework any more, or if there is, it would merely display when doing stat checks, so you know what you have available and might be able to use. The drop-down would offer the six stats, not any specific skills.

Did that make sense?

Protesilaus
Kobold
Posts: 24
Joined: Wed Jul 27, 2011 6:48 pm

Re: General D&D Next (5e) Framework

Post by Protesilaus »

I understand that, but I don't understand why you can't put in the modifier (for Bluff it would be Charisma) into the macro and if the DM asks you to change it, use the [*] button to alter the roll that one time. So if you are setting up the Macro you would just include the values that are most often associated. Unless you want the output to specifically say which stat it is associated with, then I could come up with a different dialog.

yorick
Cave Troll
Posts: 93
Joined: Tue Sep 25, 2012 8:05 am

Re: General D&D Next (5e) Framework

Post by yorick »

It would work the way you have it now, granted.

I'll see whether I can whip something up and then I'll share it with you. It's more a matter of flow during play. I won't tell players to make a Bluff check, I'll tell them "give me a Charisma check", and then if they know they have bluff and that's what they happen to be doing, they can say "I'd like to apply my Bluff skill to this".

No worries, no need to do anything on your part. I'll tinker and make something I like, and then if you think it's useful, you're welcome to snag it.

yorick
Cave Troll
Posts: 93
Joined: Tue Sep 25, 2012 8:05 am

Re: General D&D Next (5e) Framework

Post by yorick »

Okay. 'tis done. Some yak-shaving ensued around the way skills are handled. The campaign file I have now has an expanded library token with two new functions, and a changed Hero token, and some extra Campaign Properties (for Skills and for Skill Die). Your Hero token still works fine - it's just that now there's a choice between your way and my way. :)

One thing that went, to avoid further yak-shaving, are the Skills and Attacks in the Character Sheet. That could be solved by having a separate function for each "type" of token, but I didn't feel like going there just yet.

I've attached the campaign file. Here are some of the macros I changed.

Edit: I've added skill focus to the ability check macro. The way I envision this to be used is that characters with focus feats would "Add New" to a skill and create say "Sneak (Focus)". Similarly, "Sneak (Supremacy)" could be created, and a player would just let the GM know that they are executing a skill with not just Focus but also Supremacy.

An alternate way of handling this would be to have the information about Focus and Supremacy with the Skills, have a check box "Use Skill" and a drop-down below of all available skills, so that it's possible to output information about which skill was used. The way things flow now should be fine, though. There's nothing wrong with a player saying to a GM "I have the X skill, can I apply it?", and just hit the "Skill Focus" or "Skill Die" check mark.
Attack macro, based on alias' work

Code: Select all

[H: weapons = getProperty("dnd.weapons")]
[H: header = strformat("tip|<html><font size=+1><b>%{token.name}</b></span></html> %s|%{token.name}|LABEL|SPAN=TRUE ICON=TRUE ICONSIZE=100",getTokenImage())]

[H, if(json.isEmpty(weapons)): hasWeapon = 0; hasWeapon = 1]
[H: weaponList = ""]

<!-- Build Nice Looking Weapon list -->
[H, foreach(weapon,weapons), code: {
   [H: index = roll.count +1]
   [H: varsFromStrProp(weapon)]
   [H: weaponList = json.append(weaponList,
      strformat('<html><font size="+1"><b>%{index}) %{weapon.name} +%{weapon.tohit}/%{weapon.damage}</b>%s</font></html>',
         if(! json.isEmpty(weapon.note),strformat(" <i>(%{weapon.note})</i>"),"")))]
}]

[H: deleteWeapon = 0]
<!-- Build input string for user input -->
<!-- Modifers menu moved to weapon bcs of MDD, can delete weapon, add modifiers to rolls or roll multiple attacks -->
[H, if(hasWeapon), code: {
   [H: weapon.lastChoice = "0"+getProperty("dnd.activeWeaponIndex")]
   [H: inputStr = json.append("",strformat("tab.attack|<html><font size=+1><b>Weapon Attack</b></font></html>|Choose Weapon|TAB"),header,
      strformat('input.weapon|%s|Choose Weapon|LIST|SPAN=TRUE SELECT=%{weapon.lastChoice}',json.toList(weaponList)),
      "spacer|<html><br></html>| |LABEL|TEXT=TRUE SPAN=TRUE",
      "numAttacks|1|<html>Number of Attacks</html>|TEXT",
      "hitMod|0|<html>To Hit Modifier</html>|TEXT",
      "damageMod|0|<html>To Damage Modifier</html>|TEXT",
      "spacer|<html><br><br></html>| |LABEL|TEXT=TRUE SPAN=TRUE",
      "deleteWeapon|0|Delete Weapon?|CHECK"
   )]   
};{
   [H: inputStr = ""]
   [H: hitMod = 0]
   [H: numAttacks = 1]
   [H: damageMod = 0]
}]

<!-- Other attack menu, can add to weapon database -->
[H: inputStr = json.append(inputStr,"tab.otherAttack|<html><font size=+1><b>Other Attack</b></font></html>|Custom Attack|TAB",header,
   "otherAttack|Name=*Enter Name;Hit=*@Enter to Hit bonus;Damage=*@Enter damage string;Type=*Enter Damage Type;CritDie=*Enter die to add to crit;Notes=|Enter New Attack Info (* required)|PROPS|SETVARS=UNSUFFIXED SPAN=TRUE",
   "tip|<html><u><font color=blue>*@ - Hit: Autohit; Damage: Effect string</font></u></html>|<html>Example<br>  Hit: @<br>  Damage: @Target is paralyzed<br>This will show auto hit and effect as Target is paralyzed.</html>|LABEL|SPAN=TRUE",
   "addWeapon|0|Add As Weapon?|CHECK"
)]

[H: abort(input(json.toList(inputStr,"##")))]

[H, if(deleteWeapon), code: {
   [H: weapons = json.remove(weapons,input.weapon)]
   [H: setProperty("dnd.weapons",weapons)]
   [H: assert(0,"<b><font color=red size=+1>Weapon Deleted</font></b>",0)]
};{}]

<!-- Check for other attack -->
[H, if(! startsWith(Name,"*") && ! startsWith(Hit,"*") && ! startsWith(Damage,"*") && ! startsWith(Type,"*")): otherAttack = 1; otherAttack = 0]

[H: doesEffect = startsWith(Damage,"@")]
<!-- Define variables for processing -->
[H, if(otherAttack), code: {
   <!-- set other attack variables -->
   [H: weapon.name = replace(Name,"[^a-zA-Z0-9 ._-]","")]
   [H: weapon.tohit = replace(Hit,"[^0-9@+-]","")]
   [H, if(! isNumber(weapon.tohit) && weapon.tohit != "@"): weapon.tohit = 0]
   [H, if(doesEffect), code: {
      [H: weapon.damage = replace(Damage,'"',"&#"+34)]
      [H: weapon.damage = replace(weapon.damage,",","&#"+44)]
      [H: weapon.critdie = "0"]
   };{
      [H: weapon.damage = replace(Damage,"[^dD0-9 +-]","")]
      [H, if(startsWith(CritDie,"*")): weapon.critdie = "0"; weapon.critdie = replace(CritDie, "[^dD0-9 +-]","")]
   }]
   [H: weapon.type = replace(Type,'"',"&#"+34)]
   [H: weapon.note = replace(Notes,'"',"&#"+34)]
   [H: weapon.note = replace(weapon.note,",","&#"+44)]
   [H, if(addWeapon), code: {
      <!-- add weapon as str prop to token -->
      [H: weapon = json.set("{}","weapon.name",weapon.name,"weapon.tohit",weapon.tohit,"weapon.damage",weapon.damage,"weapon.type",weapon.type,"weapon.critdie",weapon.critdie,"weapon.note",weapon.note)]
      [H: weapon = replace(weapon,";","&#"+59)]
      [H: weapons = json.append(weapons,json.toStrProp(weapon))]
      [H: setProperty("dnd.weapons",weapons)]
      [H: setProperty("dnd.activeWeaponIndex",json.length(weapons)-1)]
   };{}]
};{
   [H, if(hasWeapon), code: {
      [H: weapon = json.get(weapons,input.weapon)]
      [H: setProperty("dnd.activeWeaponIndex",input.weapon)]
      [H: varsFromStrProp(weapon)]
   };{
      <!-- Quit if no weapons and other attack not filled in -->
      [H: abort(0)]
   }]
}]
[H: doesEffect = startsWith(weapon.damage,"@")]
[H, if(doesEffect): weapon.damage = substring(weapon.damage,1)]
[H, if(isNumber(numAttacks)): numAttacks = min(5,max(1,numAttacks)); numAttacks = 1]
[H, if(weapon.tohit == "@"): autohit = 1; autohit = 0]
[H: hasFumble = 0]
[H: hasCrit = 0]
[H: isFumble = 0]
[H: isCrit = 0]
[H: output = ""]
[H, for(attackNum,1,numAttacks+1), code: {
   [H: roll1 = d20]
   [H: roll2 = d20]
   [H: critroll = eval(weapon.critdie + "+0")]
   [H, if(roll1 == 20 || roll2 == 20): hasCrit = 1]
   [H, if(roll1 == 1 || roll2 == 1): hasFumble = 1]
   [H, if(roll1 == 20): isCrit = 1]
   [H, if(roll1 == 1): isFumble = 1]
   [H: baseAttack = roll1 + weapon.tohit + hitMod]
   [H, if(roll2 < roll1), code: {
      [H: disadAttack = roll2 + weapon.tohit + hitMod]
      [H: advAttack = baseAttack]
   };{
      [H: disadAttack = baseAttack]
      [H: advAttack = roll2 + weapon.tohit + hitMod]
   }]
   [H, if(doesEffect): totalDamage = json.get(json.evaluate(json.append("",weapon.damage)),0); totalDamage = max(1,eval(weapon.damage + " + " + damageMod))]
   [H, if(! doesEffect): maxDamage = eval(replace(weapon.damage + " + " + damageMod + " + " + critroll,"([0-9])[dD]","\$1*"))]
   [H, if(doesEffect): dmgType = "Effect"; dmgType = "Damage"]
   [H, if(doesEffect): extraInfo = ""; extraInfo = if(autohit,"",strformat(" (crit: %{maxDamage})"))]
   
   [H, if(autohit):
      tip = strformat('<html><table style="border-style:solid;border-width=1pt;padding:0px;">     
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">%{dmgType}:</td><td style="padding:0px;padding-right:5px;">%{weapon.damage}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Mods:</td><td style="padding:0px;padding-right:5px;">%{damageMod}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Notes:</td><td style="padding:0px;padding-right:5px;">%{weapon.note}</td></tr>
         </table></html>');
      tip = strformat('<html><table style="border-style:solid;border-width=1pt;padding:0px;">     
         <tr style="padding:0px;"><td style="padding:0px;padding-right:5px;text-align:right;">Roll 1:</td><td style="padding:0px;padding-right:5px;">%{roll1}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Roll 2:</td><td style="padding:0px;padding-right:5px;">%{roll2}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">To Hit:</td><td style="padding:0px;padding-right:5px;">%{weapon.tohit}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Mods:</td><td style="padding:0px;padding-right:5px;">%{hitMod}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">%{dmgType}:</td><td style="padding:0px;padding-right:5px;">%{weapon.damage}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Mods:</td><td style="padding:0px;padding-right:5px;">%{damageMod}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">On Crit:</td><td style="padding:0px;padding-right:5px;">%{weapon.critdie}</td></tr>
         <tr style="padding:0px;"><td style="padding:0px;padding-right:5px;text-align:right;">Crit Roll:</td><td style="padding:0px;padding-right:5px;">%{critroll}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Notes:</td><td style="padding:0px;padding-right:5px;">%{weapon.note}</td></tr>
         </table></html>'
   )]
   [H: tip = replace(tip,'"',""")]
   [H, if(hasFumble): disadAttack = "<font color=red size=+1>"+disadAttack+"</font>"]
   [H, if(hasCrit): advAttack = "<font color=green size=+1>"+advAttack+"</font>"]
   [H, if(isFumble): baseAttack = "<font color=red size=+1>"+baseAttack+"</font>"]
   [H, if(isCrit): baseAttack = "<font color=green size=+1>"+baseAttack+"</font>"]
   [H, if(autohit):
      output = json.append(output,strformat('
         <span title="%{tip}"><b>
            %{weapon.name} (%{weapon.type})<br>
            <font color=red>%{dmgType}: %{totalDamage}</font>%{extraInfo}</b>
         </span>'));
      output = json.append(output,strformat('
         <span title="%{tip}"><b>
            %{weapon.name} (%{weapon.type})<br>
            Attack: %{baseAttack} (%{disadAttack}/%{advAttack})<br>
            <font color=red>%{dmgType}: %{totalDamage}</font>%{extraInfo}</b>
         </span>'
   ))]
}]
[R: json.toList(output,"<br>")]
Ability check macro, ditto

Code: Select all

[H: skilldie = getProperty("SkillDie")]
[H: header = strformat("tip|<html><font size=+1><b>%{token.name}</b></span></html> %s|%{token.name}|LABEL|SPAN=TRUE ICON=TRUE ICONSIZE=100",getTokenImage())]

<!-- Build Nice Looking Abilities list -->
[H: statList = ""]
[H, foreach(stat,"Strength,Dexterity,Constitution,Intelligence,Wisdom,Charisma"), code: {
   [H: statVal = getProperty(stat)]
   [H: statMod = FLOOR((statVal - 10)/ 2)]
   [H, if(statMod >= 0): prefix="+";prefix=""]
   [H: statList = json.append(statList,
      strformat('<html><font size="+1"><b> %{stat} (%{prefix}%{statMod})</b>%s</font></html>',""))]
}]

<!-- Build input string for user input -->
   [H: inputStr = json.append("",strformat("tab.stat|<html><font size=+1><b>Roll Ability</b></font></html>|Roll Ability|TAB"),header,
      strformat('input.stat|%s|Choose Ability|LIST|SPAN=TRUE SELECT=0',json.toList(statList)),
      "useDie|0|<html>Use Skill Die</html>|CHECK",
      "focus|0|<html>Have Skill Focus</html>|CHECK",
      "miscMod|0|<html>Misc. Modifier</html>|TEXT",
      "Skills|<html><b>Trained Skills</b></html>|Skills|LABEL|SPAN=TRUE"
   )]
[H, foreach(curSkill,Skills,""), CODE:
{
    [H: inputStr = json.append(inputStr,strformat('Skill|<html>%{curSkill}</html>|%{curSkill}|LABEL|SPAN=TRUE'))]
}]

[H: abort(input(json.toList(inputStr,"##")))]

<!-- Define variables for processing -->
[H: statList = "Strength,Dexterity,Constitution,Intelligence,Wisdom,Charisma"]
[H: stat = listGet(statList,input.stat)]
[H: statVal = getProperty(stat)]
[H: statMod = FLOOR((statVal - 10)/ 2)]

[H: hasFumble = 0]
[H: hasCrit = 0]
[H: isFumble = 0]
[H: isCrit = 0]
[H: output = ""]
[H, code: {
   [H: roll1 = d20]
   [H: roll2 = d20]
   [H, if(focus == 1), CODE: {
      [H, if(roll1 < 10): roll1 = 10]
      [H, if(roll2 < 10): roll2 = 10]
   }]
   [H, if(useDie == 1 || focus == 1): skillroll = eval(SkillDie); skillroll = 0]
   [H, if(roll1 == 20 || roll2 == 20): hasCrit = 1]
   [H, if(roll1 == 1 || roll2 == 1): hasFumble = 1]
   [H, if(roll1 == 20): isCrit = 1]
   [H, if(roll1 == 1): isFumble = 1]
   [H: baseCheck = roll1 + statMod + miscMod + skillroll]
   [H, if(roll2 < roll1), code: {
      [H: disadCheck = roll2 + statMod + miscMod + skillroll]
      [H: advCheck = baseCheck]
   };{
      [H: disadCheck = baseCheck]
      [H: advCheck = roll2 + statMod + miscMod + skillroll]
   }]
   
   [H:
      tip = strformat('<html><table style="border-style:solid;border-width=1pt;padding:0px;">     
         <tr style="padding:0px;"><td style="padding:0px;padding-right:5px;text-align:right;">Roll 1:</td><td style="padding:0px;padding-right:5px;">%{roll1}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Roll 2:</td><td style="padding:0px;padding-right:5px;">%{roll2}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Stat Mod:</td><td style="padding:0px;padding-right:5px;">%{statMod}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Misc Mod:</td><td style="padding:0px;padding-right:5px;">%{miscMod}</td></tr>
         <tr style="padding:0px"><td style="padding:0px;padding-right:5px;text-align:right;">Skill Die:</td><td style="padding:0px;padding-right:5px;">%{SkillDie}</td></tr>
         <tr style="padding:0px;"><td style="padding:0px;padding-right:5px;text-align:right;">Skill Roll:</td><td style="padding:0px;padding-right:5px;">%{skillroll}</td></tr>
         </table></html>'
   )]
   [H: tip = replace(tip,'"',""")]
   [H, if(hasFumble): disadCheck = "<font color=red size=+1>"+disadCheck+"</font>"]
   [H, if(hasCrit): advCheck = "<font color=green size=+1>"+advCheck+"</font>"]
   [H, if(isFumble): baseCheck = "<font color=red size=+1>"+baseCheck+"</font>"]
   [H, if(isCrit): baseCheck = "<font color=green size=+1>"+baseCheck+"</font>"]
   [H:
      output = json.append(output,strformat('
         <span title="%{tip}"><b>
            %{stat} Check'
   ))]
   [H, if(useDie == 1 && focus == 0):
      output = json.append(output,strformat('Used Skill Die'
   ))]
   [H, if(focus == 1):
      output = json.append(output,strformat('Used Skill Focus'
   ))]
   [H:
      output = json.append(output,strformat('
            Result: %{baseCheck} (%{disadCheck}/%{advCheck})<br></b>
         </span>'
   ))]
}]
[R: json.toList(output,"<br>")]
Add Skill, based on your Add Language

Code: Select all

[h:WorldSkills=json.sort(getLibProperty("Skills", "Lib:CharacterSheet"))]
[h:activeSkills = "nSkills | "]
[h,FOREACH(curSkill, WorldSkills, ""), CODE:
{
[h:activeSkills = activeSkills + curSkill + ", "]
}]

[h: status=input(activeSkills  + " Create New | Add Skill | LIST")]
[h:abort(status)]

[h,if(json.length(WorldSkills) == nSkills), CODE:
{
[h: status=input("NewSkill|Add Skill")]
[h:abort(status)]
[h: newSkills = json.append(WorldSkills, NewSkill)]
[h:setLibProperty("Skills", newSkills, "Lib:CharacterSheet")]
[h: Skills = json.append(Skills,  NewSkill)]
};{
[h: Skills = json.append(Skills,  json.get(WorldSkills, nSkills))]
}]
Remove Skill

Code: Select all

[h:knownSkills="nSkills | "]

[h,FOREACH(curSkill, Skills, ""), CODE:
{
[h:knownSkills = knownSkills + curSkill + ", "]
}]

[h: status=input(knownSkills  + " | Remove Skill | LIST")]
[h:abort(status)]

[h: Skills = json.remove(Skills, nSkills)]
Skills property on Library

Code: Select all

["Balance","Bluff","Climb","Disable Device","Disguise","Drive","Escape Artist","Gather Rumors","Handle Animal","Heal","Intimidate","Knowledge","Listen","Perform","Persuade","Profession","Ride","Search","Sense Motive","Sleight of Hand","Sneak","Spot","Survival","Swim","Track","Tumble","Use Rope"]
DnD Next Campaign.cmpgn
(4.23 MiB) Downloaded 167 times

yorick
Cave Troll
Posts: 93
Joined: Tue Sep 25, 2012 8:05 am

Re: General D&D Next (5e) Framework

Post by yorick »

We played a few encounters with it yesterday, just to get a feel. Here's the resulting wish list:

- Reaction counter. "Did I take my reaction? Didn't I?" Should refresh at start of turn.
- Ki counter. Refreshes on long rest.
- Skill die counter? Not sure it's needed, need to look into Skill Tricks more
- MDD counter. Refreshes at start of turn.
- "End Turn" button - should be easy
- Longer-term: Ability to tie maneuvers, attacks and reactions to these counters, so one could just spend MDD with the attack, and have it counted, spend an MDD on Parry, or Flurry of Blows, and have that counted, and so on.
- Longer-term: Plothos' Spell Manager for 5e. I know alias has been hard at work modifying it.

User avatar
StarMan
Dragon
Posts: 939
Joined: Mon Jul 18, 2011 1:10 pm
Location: Toronto

Re: General D&D Next (5e) Framework

Post by StarMan »

Protesilaus wrote:Also, I have been working on a 4e framework, since all of the existing ones haven't felt right when I run games.
:? Including mine? (link in sig below). I designed it to be "open architecture" and programmable so it should be easy to extend with your own customizations. What didn't "feel right" about it?

I have spent so much time and energy on the MPB that I would like to get a couple more years of mileage out of it before moving up to 5e. I will be happy to try your framework when my group decides to make the switch. Presumably, the rules won't be "in flux" by then, as you say. I don't know anything about 5e but from what I've read here it doesn't sound radically different from 4e. As such, I might migrate the MPB depending on what happens.
StarMan - The MacroPolicebox D&D 4E Framework: Import ANYTHING!

zgrose
Cave Troll
Posts: 48
Joined: Fri Apr 11, 2008 6:30 pm

Re: General D&D Next (5e) Framework

Post by zgrose »

This framework still under active development?

Protesilaus
Kobold
Posts: 24
Joined: Wed Jul 27, 2011 6:48 pm

Re: General D&D Next (5e) Framework

Post by Protesilaus »

I can jump back onto if it there is interest. I am sort of taking requests right now until my 5e game comes alive again.

zgrose
Cave Troll
Posts: 48
Joined: Fri Apr 11, 2008 6:30 pm

Re: General D&D Next (5e) Framework

Post by zgrose »

Well, I can't speak for anyone else, but seems to be the only framework for 5e. :)

The top 4 items in yorick's post seem to be essential.

- Reaction counter. "Did I take my reaction? Didn't I?" Should refresh at start of turn.
- Ki counter. Refreshes on long rest.
- Skill die counter? Not sure it's needed, need to look into Skill Tricks more
- MDD counter. Refreshes at start of turn.

We'll be having our first session Sunday, so I will be able to add more then.

Protesilaus
Kobold
Posts: 24
Joined: Wed Jul 27, 2011 6:48 pm

Re: General D&D Next (5e) Framework

Post by Protesilaus »

I'll play around, have to read the latest playtest release. Let me know if this sounds appropriate:

- MDD counter. Refreshes at start of turn.
- "End Turn" button - should be easy (actually it is a simple macro, I can add this with little other info)
- Reaction Counter:
I have an idea I can try implementing. Unless I am mistaken, there are no triggers at the start of someone's turn, so I can write a controlled initiative tracker, giving each token control over when there turns end. If this is done successfully then the idea would be that when you press "End Turn" the next initiative character would get there "Start of Turn" events triggered.

The EASIEST way of implementing would simply be a "Start of Turn" and "End of Turn" button. I'll probably do this in the next couple days.

- Ki counter. Refreshes on long rest.
Shouldn't be to hard. I can add CurrentKi and MaxKi stat to a character and copy over on a long rest.

Again I still have to look at Plothos' Spell Manager for 5e, I can probably message him to see if he is okay with me copy and implementing his methods in my system.

I'll post once I make changes.

Post Reply

Return to “D&D 5e Frameworks”