Roll20 uses cookies to improve your experience on our site. Cookies enable you to enjoy certain features, social sharing functionality, and tailor message and display ads to your interests on our site and others. They also help us understand how our site is being used. By continuing to use our site, you consent to our use of cookies. Update your cookie preferences .
×
Create a free account
This post has been closed. You can still view previous posts, but you can't post any new replies.

CombatMaster Alpha

Wolf Thunderspirit said: Juan C. said: Wolf Thunderspirit said: @Juan_C - have you been able to use CM to set !shaped-at yet?&nbsp; ( <a href="https://bitbucket.org/mlenser/5eshapedscript/wiki/Home#markdown-header-shaped-at" rel="nofollow">https://bitbucket.org/mlenser/5eshapedscript/wiki/Home#markdown-header-shaped-at</a> ) Been trying to code the commands very specifically for Sentry Icon/ Advantage = !shaped-at&nbsp; --advantage Rolling Bomb Icon/ Disadvantage = !shaped-at&nbsp; --disadvantage Back To Normal when Condition is turned off = !shaped-at&nbsp; --normal This would be possible just by using the Add Condition and Remove Condition API to add the marker Shaped5e uses for advantage/disadvantage (green, red by default). You can trigger these additions through token-mod like I did for some other status'. I don't know if it would be possible directly from CM simply because I don't think there's an event observer for it. I haven't tried it. However, I believe the best practice would be to use the auto revert advantage feature, along with the Persistent Macro API for CM, to guarantee your players don't have unintended advantages or disadvantages after the cause-condition disappears. There is no observer in the Shaped Script to simply use a Status Icon as a toggle.&nbsp; When you use the API command (Ex: !shaped-at&nbsp; --advantage ), it puts the Icon up, but not vise versa, which is why I was trying to simplify with using CM.&nbsp; I just can't quite dial in the correct syntax for CM to operate it. It's useful for things like Reckless Attack and such.&nbsp; But using the auto-revert feature sometimes is annoying to your Barbarian, for example, when all of his attacks that round are at advantage.&nbsp; So Auto-revert will turn it off before his second attack.&nbsp; By using the CM Method, it won't turn off until the end of round (setting the round duration to 1, -1 timer), and keeps his Reckless Attack during the round better.&nbsp; On end effect, reverting to normal via CM rather than Shaped's built in option. That's why I meant to use an API command to toggle the advantage/disadvantage marker for the token. You'd have to set up the API replacement keys and allow the Player-can-ids of TokenMod, then you can do something like the example I'll provide below: {{!token-mod {{--api-as cmplayeridentification}} {{--ids cmtokenidentification}} {{--set bar2_link| bar2_value|0}}}} Then instead of --set bar2_link| it could be something like --set statusmarkers|+green (for the API add advantage, if your Shaped5e is using green as advantage) or +red if disadvantage. Then on the remove API you could so something like -green -red (I don't quite remember the syntax).
1597013573

Edited 1597013707
@Victor The auto add concentration option for spells was broken for the Shaped 5e Sheet, since the syntax for the character name detection was solely for the OGL sheet. This can be circumvented by replacing line 2916 with the following: let characterName&nbsp;&nbsp; = (status.sheet == 'OGL' || status.sheet == 'PF2') ? msg.content.match(/charname=([^\n{}]*[^"\n{}])/) : msg.content.match(/{{character_name=([\w\d ]+[^"\n{}]?)/) ; (The used syntax assumes the PF2 sheet uses the same template as the OGL one. Maybe I should've done it the other way around, but since I'm no expert in PF2, I suppose I could let them handle it.) I also added the following lines to the AddMarker and RemoveMarker functions. This is to reflect status changes in the Shaped5e character sheet (I would label these changes as optional, since they have no added functionality to the script itself) : AddMarker Line 1751 let condition = getConditionByMarker(marker) Line 1777 (after log tokenObj) handleShapedSheet(tokenObj.get('represents'), condition.key, true); RemoveMarker Line 1785 (after let statusmarkers) let condition = getConditionByMarker(marker); Line 1794 (after log tokenObj) handleShapedSheet(tokenObj.get('represents'), condition.key, false); Also modified (once again) the RegExp for the duration and durationmult, since it was provoking an unintended behaviour for certain strings (namely sometimes only getting the last digit from the round/minute syntaxes, when =&gt; 10). Line 2827-2830 duration = msg.content.match(/duration=.*[^\d]([\d][^"\n{}_ ]*)_{1}([A-Z]*[^"\n{} ])/); duration = RegExp.$1; durationmult = msg.content.match(/duration=.*[^\d]([\d][^"\n{}_ ]*)_{1}([A-Z]*[^"\n{} ])/); durationmult = RegExp.$2; ------------------ I tried to recover the HandleShapedCondition from the StatusInfo script. However, it was beyond my scope of knowledge. What the script did was basically add or remove conditions that were toggled on or off in the Shaped5e Character Sheet. The addmarker/removemarker does something "similar", as long as the user doesn't interact with conditions from the Sheet.
1597015355

Edited 1597015709
Juan C. said: Wolf Thunderspirit said: Juan C. said: Wolf Thunderspirit said: @Juan_C - have you been able to use CM to set !shaped-at yet?&nbsp; ( <a href="https://bitbucket.org/mlenser/5eshapedscript/wiki/Home#markdown-header-shaped-at" rel="nofollow">https://bitbucket.org/mlenser/5eshapedscript/wiki/Home#markdown-header-shaped-at</a> ) Been trying to code the commands very specifically for Sentry Icon/ Advantage = !shaped-at&nbsp; --advantage Rolling Bomb Icon/ Disadvantage = !shaped-at&nbsp; --disadvantage Back To Normal when Condition is turned off = !shaped-at&nbsp; --normal This would be possible just by using the Add Condition and Remove Condition API to add the marker Shaped5e uses for advantage/disadvantage (green, red by default). You can trigger these additions through token-mod like I did for some other status'. I don't know if it would be possible directly from CM simply because I don't think there's an event observer for it. I haven't tried it. However, I believe the best practice would be to use the auto revert advantage feature, along with the Persistent Macro API for CM, to guarantee your players don't have unintended advantages or disadvantages after the cause-condition disappears. There is no observer in the Shaped Script to simply use a Status Icon as a toggle.&nbsp; When you use the API command (Ex: !shaped-at&nbsp; --advantage ), it puts the Icon up, but not vise versa, which is why I was trying to simplify with using CM.&nbsp; I just can't quite dial in the correct syntax for CM to operate it. It's useful for things like Reckless Attack and such.&nbsp; But using the auto-revert feature sometimes is annoying to your Barbarian, for example, when all of his attacks that round are at advantage.&nbsp; So Auto-revert will turn it off before his second attack.&nbsp; By using the CM Method, it won't turn off until the end of round (setting the round duration to 1, -1 timer), and keeps his Reckless Attack during the round better.&nbsp; On end effect, reverting to normal via CM rather than Shaped's built in option. That's why I meant to use an API command to toggle the advantage/disadvantage marker for the token. You'd have to set up the API replacement keys and allow the Player-can-ids of TokenMod, then you can do something like the example I'll provide below: {{!token-mod {{--api-as cmplayeridentification}} {{--ids cmtokenidentification}} {{--set bar2_link| bar2_value|0}}}} Then instead of --set bar2_link| it could be something like --set statusmarkers|+green (for the API add advantage, if your Shaped5e is using green as advantage) or +red if disadvantage. Then on the remove API you could so something like -green -red (I don't quite remember the syntax). Tried it before, as I said - Shaped Script has nothing to monitor the icon you use being associated with the Shaped API script.&nbsp; So you can turn on/ off the green or red dots all you want, Shaped won't know to turn on Advantage or Disadvantage from that, it only recognizes you toggling it from the character sheet or calling the API command directly.&nbsp; So whether you would hit those colored dots from the radial menu or token mod calls - Shaped still won't actually roll with disadvantage or advantage until you interact with the sheet or call the API.&nbsp; I was just trying to associate CM's versatility, and call the API in the Macro/ API Calls - I just don't know the syntax. I think I tried, and failed miserably, to copy the token-mod example as a shaped call: {{!shaped-at {{--api-as cmplayeridentification}} {{--ids cmtokenidentification}} {{--advantage}}}} but for some reason, it stops recognizing the token selected, and the command itself does not have a declaration of token ID that can be passed directly; as in this: {{!shaped-at {{--api-as cmplayeridentification}} {{--advantage}}}} ...
1597019500

Edited 1597021354
You are absolutely right. I THOUGHT adding and removing status's added and removed the advantage/disadvantage for Shaped5e. It seems that it was another's script functionality which I no longer use (probably StatusInfo?) DO NOT FRET, AS I HAVE FOUND A SOLUTION. As it turns out, all the advantage/disadvantage buttons for the Shaped5e Char Sheet do is change a certain attribute for the Character Sheet, which is the 'shaped_d20' attribute. As such, you can use the ChatSetAttr API to change the corresponding character's shaped_d20 attribute to the desired value. 1. Configure the CharID substitution string in CombatMaster. In my case, I set CharID substitution (used by CombatMaster) as cmcharidentifier. 2. Then in the API Add for the ("Advantage") Condition, I added the following code: {{!setattr {{--charid cmcharidentifier}} {{--shaped_d20|2d20kh1}} {{--nocreate}} {{--silent}}}} 3. Likewise, in the API Remove for the ("Advantage") condition, I added the following code: {{!setattr {{--charid cmcharidentifier}} {{--shaped_d20|d20}} {{--nocreate}} {{--silent}}}} 4. For the "disadvantageous" condition, I'd use the API Add with "2d20kl1" instead in the shaped_d20 attribute, and the same syntax for the API Remove. Kinda troublesome, but it works! EDIT: You can do it with shaped 5e normal commands I had to stroll through the ShapedAPI to find out the calling command, which turned out to be --id (weird, since almost every other uses --character, but oh well) 1. Configure the CharID substitution string in CombatMaster. In my case, I set CharID substitution (used by CombatMaster) as cmcharidentifier. Using the commands: {{!shaped-at {{--id cmcharidentifier}} {{--advantage}}}} {{!shaped-at {{--id cmcharidentifier}} {{--disadvantage}}}} {{!shaped-at {{--id cmcharidentifier}} {{--normal}}}}
1597023712

Edited 1597152773
Juan C. said: You are absolutely right. I THOUGHT adding and removing status's added and removed the advantage/disadvantage for Shaped5e. It seems that it was another's script functionality which I no longer use (probably StatusInfo?) DO NOT FRET, AS I HAVE FOUND A SOLUTION. As it turns out, all the advantage/disadvantage buttons for the Shaped5e Char Sheet do is change a certain attribute for the Character Sheet, which is the 'shaped_d20' attribute. As such, you can use the ChatSetAttr API to change the corresponding character's shaped_d20 attribute to the desired value. 1. Configure the CharID substitution string in CombatMaster. In my case, I set CharID substitution (used by CombatMaster) as cmcharidentifier. 2. Then in the API Add for the ("Advantage") Condition, I added the following code: {{!setattr {{--charid cmcharidentifier}} {{--shaped_d20|2d20kh1}} {{--nocreate}} {{--silent}}}} 3. Likewise, in the API Remove for the ("Advantage") condition, I added the following code: {{!setattr {{--charid cmcharidentifier}} {{--shaped_d20|d20}} {{--nocreate}} {{--silent}}}} 4. For the "disadvantageous" condition, I'd use the API Add with "2d20kl1" instead in the shaped_d20 attribute, and the same syntax for the API Remove. Kinda troublesome, but it works! EDIT: You can do it with shaped 5e normal commands I had to stroll through the ShapedAPI to find out the calling command, which turned out to be --id (weird, since almost every other uses --character, but oh well) 1. Configure the CharID substitution string in CombatMaster. In my case, I set CharID substitution (used by CombatMaster) as cmcharidentifier. Using the commands: {{!shaped-at {{--id cmcharidentifier}} {{--advantage}}}} {{!shaped-at {{--id cmcharidentifier}} {{--disadvantage}}}} {{!shaped-at {{--id cmcharidentifier}} {{--normal}}}} Cool - I'll def try that! UPDATE:&nbsp; Works Great!!!!!!!!
1597036948

Edited 1597037299
Victor B.
Pro
Sheet Author
API Scripter
@Juan, PF2 doesn't do concentration, so I'm not sure what you are doing there.&nbsp; Please create a game for us and let work through this together on Discord voice.&nbsp; Too many changes, moving too frequently.&nbsp; Let's get this done once and for all.&nbsp;&nbsp;
Wolf Thunderspirit said: UPDATE:&nbsp; Works Great!!!!!!!! I'm glad it worked for you.
1597199417
Victor B.
Pro
Sheet Author
API Scripter
Juan has fixed issues with shaped spell handling.&nbsp; Version 2.32 can be found here.&nbsp;&nbsp; <a href="https://github.com/vicberg/CombatMaster" rel="nofollow">https://github.com/vicberg/CombatMaster</a> .&nbsp; I haven't updated one click yet.&nbsp; Will do next week.&nbsp;&nbsp;
Just Sharing for those who may want it. Working on a master document detailing all of the API triggers and Messages for a wider list of conditions. I personally love having everything super clear so I have assigned tint colors to certain conditions/condition types for easy tracking. I also have the API set up to auto trigger corresponding conditions. For Example, a stunned target is also incapacitated, therefore when stunned is applied, so is incapacitated. Same with removal.&nbsp; I'm working on doing it with all of the spells.. slowly. Link is open to anyone that is interested in copy/paste.&nbsp;
The Devilish DM said: Just Sharing for those who may want it. Working on a master document detailing all of the API triggers and Messages for a wider list of conditions. I personally love having everything super clear so I have assigned tint colors to certain conditions/condition types for easy tracking. I also have the API set up to auto trigger corresponding conditions. For Example, a stunned target is also incapacitated, therefore when stunned is applied, so is incapacitated. Same with removal.&nbsp; I'm working on doing it with all of the spells.. slowly. Link is open to anyone that is interested in copy/paste.&nbsp; Nice. You could also add the syntax of your Exported CMaster config to make the import process much more seamless.
1597238604
Victor B.
Pro
Sheet Author
API Scripter
@Devilish are you still having issue with messages being cutoff on auto assign or has that been fixed?&nbsp;&nbsp;
1597251486

Edited 1597252241
Juan C. said: Nice. You could also add the syntax of your Exported CMaster config to make the import process much more seamless. @Juan I plan on it when I'm all done. In the mean time those who are less API savvy may enjoy a simple pick and choose copy/paste. @Vic Fixed a while ago. Swapped from OGL to Shaped so I have a whole slew of new issues. Working it out on my time.
1597252960
Victor B.
Pro
Sheet Author
API Scripter
let me know what the issues are for shaped. I'm assuming API launch, etc.&nbsp; Hopefully Juan's changes address the auto add/concentration for shaped
The Devilish DM said: Juan C. said: Nice. You could also add the syntax of your Exported CMaster config to make the import process much more seamless. @Juan I plan on it when I'm all done. In the mean time those who are less API savvy may enjoy a simple pick and choose copy/paste. @Vic Fixed a while ago. Swapped from OGL to Shaped so I have a whole slew of new issues. Working it out on my time. And the conversion of the masses continues.&nbsp; LMAO Kryx, our overlord, will be so happy ... muahhahahahahaha!
ReferenceError: characterName is not defined ReferenceError: characterName is not defined at handleSpellCast (apiscript.js:20784:60) at inputHandler (apiscript.js:17972:21) at eval (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:154:1), &lt;anonymous&gt;:65:16) at Object.publish (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:154:1), &lt;anonymous&gt;:70:8) at /home/node/d20-api-server/api.js:1661:12 at /home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:560 at hc (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:39:147) at Kd (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:546) at Id.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:489) at Zd.Ld.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:94:425) Concentration crashing.
1597279213

Edited 1597280222
The Devilish DM said: ReferenceError: characterName is not defined ReferenceError: characterName is not defined at handleSpellCast (apiscript.js:20784:60) at inputHandler (apiscript.js:17972:21) at eval (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:154:1), &lt;anonymous&gt;:65:16) at Object.publish (eval at &lt;anonymous&gt; (/home/node/d20-api-server/api.js:154:1), &lt;anonymous&gt;:70:8) at /home/node/d20-api-server/api.js:1661:12 at /home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:560 at hc (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:39:147) at Kd (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:546) at Id.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:93:489) at Zd.Ld.Mb (/home/node/d20-api-server/node_modules/firebase/lib/firebase-node.js:94:425) Concentration crashing. Did you switch over the used sheet in the settings to 'Shaped'? Are you using the latest version (GitHub)?
Juan C. said: The Devilish DM said: Concentration crashing. Did you switch over the used sheet in concentration settings to 'Shaped'? Are you using the latest version (GitHub)? Yes and yes.&nbsp;
The Devilish DM said: Juan C. said: The Devilish DM said: Concentration crashing. Did you switch over the used sheet in concentration settings to 'Shaped'? Are you using the latest version (GitHub)? Yes and yes.&nbsp; That's certainly weird. Do you have a game I can join and try to reproduce the issue?
1597281838

Edited 1597322435
Nevermind, found the issue. Turns out declaring a var with 'let' inside an if-conditional (since let is block-scoped) made the used sheet condition act funny for non-targeted spells. Declaring the variable outside the condition 'should' fix the issue. Meh. (From line 2918-2933) } else if (condition) { targetedSpell(key) let characterName if (concentration.useConcentration &amp;&amp; concentrate == true &amp;&amp; condition.override == false) { if (status.sheet == 'OGL') { characterName = msg.content.match(/charname=([^\n{}]*[^"\n{}])/) characterName = RegExp.$1; } else if (status.sheet == 'Shaped') { characterName = msg.content.match(/{{character_name=([\w\d ]+[^"\n{}]?)/) characterName = RegExp.$1; } let characterID = findObjs({ name: characterName, _type: 'character' }).shift().get('id') let tokenObj = findObjs({ represents: characterID, _pageid:Campaign().get("playerpageid"), _type: 'graphic' })[0] addConditionToToken(tokenObj,'concentration',condition.duration,condition.direction,'Concentrating on ' +spellName) } Also please note that for concentration spells to be added automatically you have to their override setting to false (I didn't change this since I do not know the reason behind this). EDIT: Crossed out incorrect facts.
1597284373
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Wolf Thunderspirit said: And the conversion of the masses continues.&nbsp; LMAO Kryx, our overlord, will be so happy ... muahhahahahahaha! Kryx is more of a Founding Father than an overlord. Created a legacy and faded into history.
1597284518

Edited 1597287775
Juan C. said: Also please note that for concentration spells to be added automatically you have to their override setting to false (I didn't change this since I do not know the reason behind this). Yes, but if override is set to true it will prompt an option to select the caster in chat if I'm not mistaken. EDIT: @Juan Insta crash with the amendment above.
1597288865

Edited 1597293027
I'll PM you the entire code then. EDIT: I'm having a terrible headache since earlier today, can't think straight. Let me know ASAP. Edit 2: Use the code by Victor
1597292194
Victor B.
Pro
Sheet Author
API Scripter
I fixed it.&nbsp; Version 2.32 can be found here&nbsp; <a href="https://github.com/vicberg/CombatMaster" rel="nofollow">https://github.com/vicberg/CombatMaster</a>
1597292505

Edited 1597292520
Victor B.
Pro
Sheet Author
API Scripter
No please don't change anything like override.&nbsp; You can't auto assign a concentration if override is true because at the time the spell has been detected, we don't know the duration of the spell.&nbsp; We need to wait for the duration to be set, then we can assign the concentration with the correct duration.&nbsp;&nbsp;
1597304312

Edited 1597311475
Last night I had lots of crashes with the version available from the add-ons page (even when doing just --main), even though previous weeks it had been fine. I've now installed v2.32, and I've noticed that the "announce turns" flag has no effect. Combat Master has stopped announcing each character's turn.
Farling said: Last night I had lots of crashes with the version available from the add-ons page (even when doing just --main), even though previous weeks it had been fine. I've now installed v2.32, and I've noticed that the "announce turns" flag has no effect. Combat Master has stopped announcing each character's turn. Are you testing combat from the active page?
1597323226
Victor B.
Pro
Sheet Author
API Scripter
I just started a combat up and players are being announced.&nbsp; May sure player announcements are on from the Announcements Menu.&nbsp;&nbsp;
keithcurtis said: Wolf Thunderspirit said: And the conversion of the masses continues.&nbsp; LMAO Kryx, our overlord, will be so happy ... muahhahahahahaha! Kryx is more of a Founding Father than an overlord. Created a legacy and faded into history. He's not part of the Community anymore?&nbsp; I think I contacted him a month ago on an issue I had of my own making, and he set me straight (had a filter set to prepared only, people couldn't see the spells they added)
I think he logs on every once in a while, but doesn't maintain the Shaped sheet anymore. Understandable, since it's quite the ordeal.
1597327629
Victor B.
Pro
Sheet Author
API Scripter
Who's supporting shaped now?&nbsp;&nbsp;
I believe no one is.
1597346918

Edited 1597347055
Okay, much testing done. For the shaped sheet, after implementing the most recent changes above, the concentration is applying correctly. It's all running rather smoothly actually.&nbsp; The only thing I noticed is that its dropping the concentration marker after round 1 on 10/-1 Duration/Direction spells, but the concentration condition is technically still applied to the character. Had the same issue with OGL for a minute. I did notice, purely by accident, that the concentration marker does not drop on those spells if the spell's override is set to true and concentration was applied from the "Select Caster" window. I was trying to recreate the dropped marker issue for myself and noticed a spell was accidentally set to override true, but the marker drop didn't happen on that one. When I corrected the spell's override to false the marker dropped after round 1.&nbsp; Can't get the "Check for Save" to trigger but I could have the wrong attribute put down since I'm new to the sheet. Can someone tell me the proper attribute I should have in the Concentration setup for the Shaped Sheet?
1597352071

Edited 1597352475
I'm glad it's working alright on your side. About the concentration duration, I have to admit I didn't delve too much in the concentration timer in fear it would break something else in the code, so I limited myself to just extracting the duration and direction for Shaped 5e spells that consist of rounds or minutes (since anything above that wouldn't matter for combat purposes anyways), and reflecting this duration in the added CM SPELL, without interfering at all with the concentration syntax (besides using the correct character name field source), because I believe the code already pulls the duration value from spells configured correctly. About the Check for Save, it asks for the bar associated to the HP of the token. Me, for instance, use bar3 as the HP bar (linked), so I set it to bar3. When the bar suffers a relative change (Example being inputting -5 in the corresponding bar's field, using a mod's functionality to reduce the bar by X amount, etc.), it triggers the Check. As for the attribute, you have to use: constitution_saving_throw_mod_with_sign I hope this was clear enough.
1597352396
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Victor B. said: Who's supporting shaped now?&nbsp;&nbsp; No one. His last communication with me at least was that he had no intention of returning, and that if forward compatibility with Roll20 was important, he recommended people adopt the&nbsp;D&amp;D 5th Edition by Roll20 Sheet.
1597352611

Edited 1597352749
Victor B.
Pro
Sheet Author
API Scripter
@Keith, seriously?&nbsp; Ok.&nbsp; Who is supporting the API?&nbsp; @Everyone, why do people like shaped more than OGL?&nbsp; Just curious.&nbsp; @Devilish why did you switch.&nbsp; Losing the compendium monsters etc. implies you had a strong motivation.&nbsp;&nbsp; @Devilish, known issue.&nbsp; Also looks like I can put 2 digits on a status marker (so 10, 99, etc), but it's kinda forcing a square peg into the Roll20 round hole, but I'm going to smash it in.&nbsp; Also, the conditions resulting from a con spell come back even after being removed.&nbsp; I encountered this last night.&nbsp; So I've got 3 issues I'm working on.&nbsp;&nbsp;
1597353496

Edited 1597353923
Honestly, since the first day I used roll20 I've used shaped, so I'm kind of biased since I've never played with OGL. But everything's so well tailored that, unless it suddenly breaks or I'm unable to get what I want, I "HARDLY" believe I would go to OGL. Also you don't lose the compendium monsters since Shaped has a parser that pulls stuff correctly 99.9% of the time. And OGL templates look horrible to me. And the "Attacher" part of Shaped is a godgiven. I use it for almost everything. Customizing any spell with emotes, freetext, freeform and FX's also serves whatever purpose you wish. @Victor Since my duration syntax can reach up to 100 (although I don't believe any combat will reach 100 rounds, but it equals 10 minutes so meh), maybe any value equal or above 100 could be reflected as a 99 (to fit the 2 digit 'limit')?
1597353975

Edited 1597355998
@Juan okay yeah i had the wrong attribute in there @Vic Okay, if we want to break it down. I used OGL for two years in a very consistent campaign. I found many ways to adapt it into what i needed/wanted but it was a lot of workarounds. I have even attempted to alter the current OGL sheet to fit my personal needs, however Shaped essentially does all of the things I wanted to achieve with my altered OGL sheet. OGL Inventory, Feat/Trait, and Utility/Magic Item management is an absolute hot garbage fire rolling downhill into an elementary school.&nbsp; OGL combines weapon and spell attacks into a gigantic messy ugly list whereas Shaped separates it all very cleanly.&nbsp; OGL requires a hefty handful of API's to perform some of the basic things I consider to be quality of life (i.e. being able to put your whole statblock with clickable skills and feats into chat). Shaped just simply does these things. I was literally adding (BA) and (R) to OGL spell names so my players would know which spells they had access to use at any given time. Shaped allows you to filter your spell list to Bonus Actions, Reactions, etc...&nbsp;The filters also allow to decipher between spells that require Material components and whatnot; a huge thing in my group. The ability for one of my players to say "I only have a bonus action and I have no more Mats, what can I cast?" and be able to just set filters for it SAVES TIME.&nbsp; In Shaped I can freeform add {{spell=1}} to feats that I treat as conditions and have them tracked by Cmaster. Example: Sharpen the Blade-A monk feat that lasts a minute and applies a +1-3 bonus on attacks and damage. With OGL i would make a condition and add a button to apply it into the feat description. Now it auto triggers when he selects the feat.&nbsp; I mess with Max HP reductions A LOT in my game since I have a homebrew rule that ALL necrotic damage reduces current and max hp until after a long rest. Shaped has a "Max HP Reduced By" setting. In OGL I tried many different things to track this including using the third bar for Necrotic tracking only, making a condition that changed the hp link from normal hp to a specially made "Necro" hp bar, and even reducing the max hp and just keeping notes of what to set it back to later. I'm sure I could list 20 more reasons but the bottom line is that Shaped has what I need and OGL required me to have 50 API's to have what I needed. I have reduced my API library in half since switching. The only reason to use OGL is for the compendium.. even then. I'd much, much rather use the Shaped parser for monsters and have all of the functionality I want for the PC's. P.S. All that being said. Inventory still sucks mad cashews. I would kill for a character sheet with a separate tab for backpack.
The Devilish DM said: In Shaped I can freeform add {{spell=1}} to a feats that I treat as conditions and have them tracked by Cmaster. Example: Sharpen the Blade-A monk feat that lasts a minute and applies a +1-3 bonus on attacks and damage. With OGL i would make a condition and add a button to apply it into the feat description. Now it auto triggers when he selects the feat. I love you.
1597354577
keithcurtis
Forum Champion
Marketplace Creator
API Scripter
Shaped is far more uniformly structured than the OGL (understandable, having only had one set of hands touching it). It is much more versatile, including features like Attachers: snippets of code that run conditionally, like when you cast a 3rd level spell, or make a ranged weapon attack. These are much more powerful than they sound, since they can interact and build off of each other. You could set up an attacher to list your Battlemaster maneuvers, apply the mechanics and decrement your Superiority dice for instance. All with a click on a menu that comes up whenever you make an attack. Resource tracking for everything, including ammo, charges, what sort of rest recovers them, etc. Modifier section that allows you to modify a whole raft of settings when you toggle the setting (This ring gives you +1 AC, +2 to stealth, +1d6 to damage) Built in reporting macros for spells, characters, attacks, etc. that take an API script on the OGL sheet. Much more readable Roll templates that require a Stylus style to duplicate for the OGL. Rock-solid SRD support (it's built in, not compendium-based). Much better interaction with API, including a companion script that has extremely powerful functions. It is therefore much easier to code for. There is nothing like the dual sets of PC/NPC attributes or inconsistent naming patterns that plague the OGL. That companion script is truly amazing. It can add and delete spells through a chat menu interface, or raw macro commands. I used to maintain a spellbook macro that could swap in and out sets of spells/ Its weaknesses are no interaction with Charactermancer and a lessening compatibility with the Compendium. (In fact structured data changes in the Compendium are one of the things that likely led to Kryx's burnout.) Some people also consider its power to be a little off-putting. It has a learning curve.
1597355060
Victor B.
Pro
Sheet Author
API Scripter
A button and a backpack page would be easy.&nbsp;&nbsp; But the pain that I'm seeing is that you have to convert every creature, one at a time, by dragging a token and using the API and then I'm assuming it generates the shaped version of the sheet.&nbsp; Am I close to the mark?&nbsp;&nbsp;
keithcurtis said: Shaped is far more uniformly structured than the OGL (understandable, having only had one set of hands touching it). It is much more versatile, including features like Attachers: snippets of code that run conditionally, like when you cast a 3rd level spell, or make a ranged weapon attack. These are much more powerful than they sound, since they can interact and build off of each other. You could set up an attacher to list your Battlemaster maneuvers, apply the mechanics and decrement your Superiority dice for instance. All with a click on a menu that comes up whenever you make an attack. Resource tracking for everything, including ammo, charges, what sort of rest recovers them, etc. Modifier section that allows you to modify a whole raft of settings when you toggle the setting (This ring gives you +1 AC, +2 to stealth, +1d6 to damage) Built in reporting macros for spells, characters, attacks, etc. that take an API script on the OGL sheet. Much more readable Roll templates that require a Stylus style to duplicate for the OGL. Rock-solid SRD support (it's built in, not compendium-based). Much better interaction with API, including a companion script that has extremely powerful functions. It is therefore much easier to code for. There is nothing like the dual sets of PC/NPC attributes or inconsistent naming patterns that plague the OGL. That companion script is truly amazing. It can add and delete spells through a chat menu interface, or raw macro commands. I used to maintain a spellbook macro that could swap in and out sets of spells/ Its weaknesses are no interaction with Charactermancer and a lessening compatibility with the Compendium. (In fact structured data changes in the Compendium are one of the things that likely led to Kryx's burnout.) Some people also consider its power to be a little off-putting. It has a learning curve. For instance, with ChatSetAttr I add an attacher to every Character or Monster I add to the game (with a macro I run on every single monster that sets his default values for everything), that adds to every spell and attack roll template, an Apply-Damage button that runs a macro (with the Apply-Damage script) on the attacked person, saving me tons of time on individual or group damages. For a Monk, his Ki Features feat has a freeform with his Ki Actions as actual buttons, so when uses the feature -reducing his ki by 1- then he selects the desired Ki Action from the same roll template. This can be built upon further, but this is basically what I've done.
Victor B. said: A button and a backpack page would be easy.&nbsp;&nbsp; But the pain that I'm seeing is that you have to convert every creature, one at a time, by dragging a token and using the API and then I'm assuming it generates the shaped version of the sheet.&nbsp; Am I close to the mark?&nbsp;&nbsp; Idk just pulled an Abjurer out and it took about half a second to auto import everything.&nbsp;
Victor B. said: A button and a backpack page would be easy.&nbsp;&nbsp; But the pain that I'm seeing is that you have to convert every creature, one at a time, by dragging a token and using the API and then I'm assuming it generates the shaped version of the sheet.&nbsp; Am I close to the mark?&nbsp;&nbsp; Close. The shaped script converts the sheet when you open it, but that would take more time as you'd need to open every character one by one. The shaped script has a !shaped-update-character command that parses the sheet and converts it to SRD then trigger the sheetworkers on the same Character, on every selected token. It also has a general update-character command that runs the prior command on every single Character available in your journal, although that one's kind of dangerous (an improvement would've been to only run it on those that don't have the sheet attribute in the Character Sheet, but it's kind of late for that).
1597355642
Victor B.
Pro
Sheet Author
API Scripter
@Juan, what you do you mean by the "sheet attribute" in the character sheet.&nbsp; You mean it's already been converted into shaped and it's running against that sheet?&nbsp;&nbsp; Who is supporting the API?&nbsp; Still actively supported or not?&nbsp;&nbsp;
1597358306

Edited 1597358858
The Shaped Script adds or modifiea an attribute called sheet that has "shaped" as its value the first time the sheet worker runs on it, to kind of identify it's already been parsed/converted.
1597359219

Edited 1597359235
Victor B.
Pro
Sheet Author
API Scripter
That's an easy enough fix also.&nbsp; Shaped API hasn't been updated in 2 years.&nbsp; And shaped char sheet 2 years ago on Roll20 API and that version matches what's on his own github.&nbsp; Has it been 2 years since an update?&nbsp;&nbsp;
1597360251

Edited 1597360454
Juan C. said: Honestly, since the first day I used roll20 I've used shaped, so I'm kind of biased since I've never played with OGL. But everything's so well tailored that, unless it suddenly breaks or I'm unable to get what I want, I "HARDLY" believe I would go to OGL. Also you don't lose the compendium monsters since Shaped has a parser that pulls stuff correctly 99.9% of the time. And OGL templates look horrible to me. And the "Attacher" part of Shaped is a godgiven. I use it for almost everything. Customizing any spell with emotes, freetext, freeform and FX's also serves whatever purpose you wish. @Victor Since my duration syntax can reach up to 100 (although I don't believe any combat will reach 100 rounds, but it equals 10 minutes so meh), maybe any value equal or above 100 could be reflected as a 99 (to fit the 2 digit 'limit')? Agreeing whole-heartedly with the bold statements. The templates being made universal with subsets rather than a slew of them that, as you found @Victor, do not always hold true to form (just in the case of spells - but there are others that make things extremely difficult as well, such as traits.) are also an issue. Add to that that each item in Shaped can have its own uses (current/ max) and recharge settings (short, long, manual, or turn based), rather than having to cross reference everything to a resource (which OGL has made entirely complicated, necessitating using Token-mod or ChatSetAttr to actually function.&nbsp; Putting APIs to work is a bit awkward too, having to cut into the description with: (a trait) ... }} !some-api --it's|functions {{ ... (now disconnected from the original trait, but necessary, as the description was there waiting to end with }} ) Is a bit strange also.&nbsp; And woe to you if the trait, spell, or whatever had things following the description that completed the template - because unless you feed them manually, you just broke your template and it won't output 50% of the time with OGL.&nbsp; Half the time I end up with a huge list of Abilities on the Attributes and Abilities tab, which are copies of the original traits that I have made and then can follow with API commands to clean up their functions.&nbsp; But then it becomes a token button mess when you click on your token.
1597360914

Edited 1597360941
Add to that that each item in Shaped can have its own uses (current/ max) and recharge settings (short, long, manual, or turn based), rather than having to cross reference everything to a resource ( which OGL has made entirely complicated, necessitating using Token-mod or ChatSetAttr to actually function .&nbsp; Putting APIs to work is a bit awkward too, having to cut into the description with: OGL NEEDS API to be usable. Having a million API's and attributes was necessary for quality of life. Shaped has much of the same QAL functionality built in.